diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 00000000000..e5b6d8d6a67 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/changelog-generator.mjs b/.changeset/changelog-generator.mjs new file mode 100644 index 00000000000..547a3aabb0e --- /dev/null +++ b/.changeset/changelog-generator.mjs @@ -0,0 +1,137 @@ +import { getInfo, getInfoFromPullRequest } from "@changesets/get-github-info"; + +/** @typedef {import("@changesets/types").ChangelogFunctions} ChangelogFunctions */ + +/** + * @returns {{ GITHUB_SERVER_URL: string }} value + */ +function readEnv() { + const GITHUB_SERVER_URL = + process.env.GITHUB_SERVER_URL || "https://github.com"; + return { GITHUB_SERVER_URL }; +} + +/** @type {ChangelogFunctions} */ +const changelogFunctions = { + getDependencyReleaseLine: async ( + changesets, + dependenciesUpdated, + options + ) => { + if (!options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + if (dependenciesUpdated.length === 0) return ""; + + const changesetLink = `- Updated dependencies [${( + await Promise.all( + changesets.map(async (cs) => { + if (cs.commit) { + const { links } = await getInfo({ + repo: options.repo, + commit: cs.commit + }); + return links.commit; + } + }) + ) + ) + .filter(Boolean) + .join(", ")}]:`; + + const updatedDependenciesList = dependenciesUpdated.map( + (dependency) => ` - ${dependency.name}@${dependency.newVersion}` + ); + + return [changesetLink, ...updatedDependenciesList].join("\n"); + }, + getReleaseLine: async (changeset, type, options) => { + const { GITHUB_SERVER_URL } = readEnv(); + if (!options || !options.repo) { + throw new Error( + 'Please provide a repo to this changelog generator like this:\n"changelog": ["@changesets/changelog-github", { "repo": "org/repo" }]' + ); + } + + /** @type {number | undefined} */ + let prFromSummary; + /** @type {string | undefined} */ + let commitFromSummary; + /** @type {string[]} */ + const usersFromSummary = []; + + const replacedChangelog = changeset.summary + .replace(/^\s*(?:pr|pull|pull\s+request):\s*#?(\d+)/im, (_, pr) => { + const num = Number(pr); + if (!Number.isNaN(num)) prFromSummary = num; + return ""; + }) + .replace(/^\s*commit:\s*([^\s]+)/im, (_, commit) => { + commitFromSummary = commit; + return ""; + }) + .replace(/^\s*(?:author|user):\s*@?([^\s]+)/gim, (_, user) => { + usersFromSummary.push(user); + return ""; + }) + .trim(); + + const [firstLine, ...futureLines] = replacedChangelog + .split("\n") + .map((l) => l.trimEnd()); + + const links = await (async () => { + if (prFromSummary !== undefined) { + let { links } = await getInfoFromPullRequest({ + repo: options.repo, + pull: prFromSummary + }); + if (commitFromSummary) { + const shortCommitId = commitFromSummary.slice(0, 7); + links = { + ...links, + commit: `[\`${shortCommitId}\`](${GITHUB_SERVER_URL}/${options.repo}/commit/${commitFromSummary})` + }; + } + return links; + } + const commitToFetchFrom = commitFromSummary || changeset.commit; + if (commitToFetchFrom) { + const { links } = await getInfo({ + repo: options.repo, + commit: commitToFetchFrom + }); + return links; + } + return { + commit: null, + pull: null, + user: null + }; + })(); + + const users = usersFromSummary.length + ? usersFromSummary + .map( + (userFromSummary) => + `[@${userFromSummary}](${GITHUB_SERVER_URL}/${userFromSummary})` + ) + .join(", ") + : links.user; + + let suffix = ""; + if (links.pull || links.commit || users) { + suffix = `(${users ? `by ${users} ` : ""}in ${ + links.pull || links.commit + })`; + } + + return `\n\n- ${firstLine} ${suffix}\n${futureLines + .map((l) => ` ${l}`) + .join("\n")}`; + } +}; + +export default changelogFunctions; diff --git a/.changeset/changeset-validate.mjs b/.changeset/changeset-validate.mjs new file mode 100644 index 00000000000..2e2073148c5 --- /dev/null +++ b/.changeset/changeset-validate.mjs @@ -0,0 +1,141 @@ +import fs from "fs/promises"; +import path from "path"; +import { fileURLToPath } from "url"; +import { simpleGit } from "simple-git"; +import pkgJson from "../package.json" with { type: "json" }; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const rootPath = path.join(__dirname, ".."); +const git = simpleGit(rootPath); + +const VALID_BUMPS = new Set(["major", "minor", "patch"]); +const FRONTMATTER_RE = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/; +const ENTRY_RE = /^"([^"]+)"\s*:\s*([a-zA-Z]+)\s*$/; + +const toLines = (output) => + output + .split(/\r?\n/) + .map((line) => line.trim()) + .filter(Boolean); + +const isChangeset = (filePath) => { + const normalized = filePath.replace(/\\/g, "/"); + return ( + normalized.startsWith(".changeset/") && + normalized.endsWith(".md") && + normalized !== ".changeset/README.md" + ); +}; + +const gitDiff = async (more = []) => { + const args = [ + "diff", + "--name-only", + // cspell:ignore ACMR + "--diff-filter=ACMR", + ...more, + "--", + ".changeset/*.md" + ].filter(Boolean); + + return toLines(await git.raw(args)); +}; + +const getChangedFiles = async () => { + const files = new Set(); + const baseRef = process.env.GITHUB_BASE_REF; + + // GitHub Actions base diff + if (baseRef) { + for (const file of await gitDiff([`origin/${baseRef}...HEAD`])) { + if (isChangeset(file)) files.add(file); + } + } + // Local working tree changes + else { + const _files = [ + // Unstaged changes + ...(await gitDiff()), + // Staged but uncommitted changes + ...(await gitDiff(["--cached"])), + // Untracked files + ...(await git.status()).not_added + ]; + for (const file of _files) { + if (isChangeset(file)) files.add(file); + } + } + return files; +}; + +const validate = async (filePath) => { + const absoluteFilePath = path.join(rootPath, filePath); + const content = await fs.readFile(absoluteFilePath, "utf8"); + const frontmatterMatch = content.match(FRONTMATTER_RE); + const errors = []; + + if (!frontmatterMatch) { + errors.push("missing YAML frontmatter block"); + return errors; + } + + const entries = frontmatterMatch[1] + .split(/\r?\n/) + .map((line) => line.trim()) + .filter(Boolean); + + if (entries.length === 0) { + errors.push("frontmatter does not contain package bump entries"); + return errors; + } + + for (const entry of entries) { + const match = entry.match(ENTRY_RE); + if (!match) { + errors.push(`invalid frontmatter entry: ${entry}`); + continue; + } + + const [, pkgName, bumpType] = match; + if (pkgName !== pkgJson.name) { + errors.push( + `invalid package name "${pkgName}", expected "${pkgJson.name}"` + ); + } + + if (!VALID_BUMPS.has(bumpType)) { + errors.push( + `invalid bump type "${bumpType}", expected one of: major, minor, patch` + ); + } + } + + return errors; +}; + +const main = async () => { + const changedFiles = await getChangedFiles(); + + if (changedFiles.length === 0) { + console.log("No changed changeset files found."); + return; + } + + const failures = []; + for (const filePath of changedFiles) { + const errors = await validate(filePath); + for (const error of errors) { + failures.push(`${filePath}: ${error}`); + } + } + + if (failures.length > 0) { + console.error("Changeset validation failed:"); + for (const failure of failures) { + console.error(`- ${failure}`); + } + process.exitCode = 1; + } +}; + +main(); diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000000..5fcacb00918 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.2/schema.json", + "changelog": ["./changelog-generator.mjs", { "repo": "webpack/webpack" }], + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.changeset/fix-anonymous-default-export-es5-regression.md b/.changeset/fix-anonymous-default-export-es5-regression.md new file mode 100644 index 00000000000..cf83e1a8c8c --- /dev/null +++ b/.changeset/fix-anonymous-default-export-es5-regression.md @@ -0,0 +1,5 @@ +--- +"webpack": patch +--- + +Fix two ES5-environment regressions in the anonymous default export `.name` fix-up: the generated code referenced an undeclared `__WEBPACK_DEFAULT_EXPORT__` binding causing `ReferenceError`, and used `Reflect.defineProperty` which is not available in pre-ES2015 runtimes. The fix-up now references the real assignment target and uses `Object.defineProperty` / `Object.getOwnPropertyDescriptor`. diff --git a/.changeset/fix-css-important-rename.md b/.changeset/fix-css-important-rename.md new file mode 100644 index 00000000000..6df6f88300a --- /dev/null +++ b/.changeset/fix-css-important-rename.md @@ -0,0 +1,5 @@ +--- +"webpack": patch +--- + +Prevent `!important` from being renamed as a local identifier in CSS modules. diff --git a/.changeset/fix-css-module-hash-collision.md b/.changeset/fix-css-module-hash-collision.md new file mode 100644 index 00000000000..b41634115bb --- /dev/null +++ b/.changeset/fix-css-module-hash-collision.md @@ -0,0 +1,5 @@ +--- +"webpack": patch +--- + +Use compiler context instead of module context for CSS modules local ident hashing to avoid hash collisions when files with the same name exist in different directories. diff --git a/.editorconfig b/.editorconfig index 45137161298..424ca2bf5cf 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,16 +8,24 @@ trim_trailing_whitespace = true insert_final_newline = true max_line_length = 80 -[.prettierrc] -indent_style = space -indent_size = 2 - [*.{yml,yaml,json}] indent_style = space indent_size = 2 +[*.md] +trim_trailing_whitespace = false + +[*.snap] +trim_trailing_whitespace = false + [test/cases/parsing/bom/bomfile.{css,js}] charset = utf-8-bom -[*.md] -trim_trailing_whitespace = false +[test/configCases/asset-modules/bytes/file.text] +insert_final_newline = false + +[test/configCases/asset-modules/bytes/file.svg] +insert_final_newline = false + +[test/configCases/css/no-extra-runtime-in-js/source.text] +insert_final_newline = false diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index a70d08eb0fb..00000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,75 +0,0 @@ -module.exports = { - root: true, - plugins: ["prettier", "node", "jest"], - extends: ["eslint:recommended", "plugin:node/recommended", "plugin:prettier/recommended"], - env: { - node: true, - es6: true - }, - parserOptions: { - ecmaVersion: 2017 - }, - rules: { - "prettier/prettier": "error", - "no-undef": "error", - "no-extra-semi": "error", - "no-template-curly-in-string": "error", - "no-caller": "error", - "no-control-regex": "off", - "yoda": "error", - "eqeqeq": "error", - "global-require": "off", - "brace-style": "error", - "eol-last": "error", - "no-extra-bind": "warn", - "no-process-exit": "warn", - "no-use-before-define": "off", - "no-unused-vars": ["error", { args: "none" }], - "no-unsafe-negation": "error", - "no-loop-func": "warn", - "indent": "off", - "no-console": "off", - "valid-jsdoc": ["error", { - "prefer": { - "return": "returns", - "memberof": "DONTUSE", - "class": "DONTUSE", - "inheritdoc": "DONTUSE", - "description": "DONTUSE", - "readonly": "DONTUSE" - }, - "preferType": { - "*": "any" - }, - "requireReturnType": true - }], - "node/no-unsupported-features": "error", - "node/no-deprecated-api": "error", - "node/no-missing-import": "error", - "node/no-missing-require": ["error", { allowModules: ["webpack"] }], - "node/no-unpublished-bin": "error", - "node/no-unpublished-require": "error", - "node/process-exit-as-throw": "error" - }, - overrides: [ - { - files: ["lib/**/*.runtime.js", "buildin/*.js", "hot/*.js"], - env: { - es6: false, - browser: true - }, - globals: { - Promise: false, - }, - parserOptions: { - ecmaVersion: 5 - } - }, - { - files: ["test/**/*.js"], - env: { - "jest/globals": true - } - } - ] -}; diff --git a/.gitattributes b/.gitattributes index ac579eb7bc0..360694eafb6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,8 @@ * text=auto -test/statsCases/* eol=lf +test/statsCases/** eol=lf +test/hotCases/** eol=lf examples/* eol=lf -bin/* eol=lf \ No newline at end of file +bin/* eol=lf +*.svg eol=lf +*.css eol=lf +**/*webpack.lock.data/** -text diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 1deb4adab1a..00000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,22 +0,0 @@ - - - - -**Do you want to request a *feature* or report a *bug*?** - - - - -**What is the current behavior?** - -**If the current behavior is a bug, please provide the steps to reproduce.** - - - - - -**What is the expected behavior?** - -**If this is a feature request, what is motivation or use case for changing the behavior?** - -**Please mention other relevant information such as the browser version, Node.js version, webpack version, and Operating System.** diff --git a/.github/ISSUE_TEMPLATE/Bug_report.md b/.github/ISSUE_TEMPLATE/Bug_report.md deleted file mode 100644 index 657747d6289..00000000000 --- a/.github/ISSUE_TEMPLATE/Bug_report.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve ---- - - - - -# Bug report - - - - - - -**What is the current behavior?** - - -**If the current behavior is a bug, please provide the steps to reproduce.** - - - - - - - - - -**What is the expected behavior?** - - - - - -**Other relevant information:** -webpack version: -Node.js version: -Operating System: -Additional tools: diff --git a/.github/ISSUE_TEMPLATE/Feature_request.md b/.github/ISSUE_TEMPLATE/Feature_request.md deleted file mode 100644 index e23f20d97cf..00000000000 --- a/.github/ISSUE_TEMPLATE/Feature_request.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project - ---- - - - -## Feature request - - - - - - - -**What is the expected behavior?** - - -**What is motivation or use case for adding/changing the behavior?** - - -**How should this be implemented in your opinion?** - - -**Are you willing to work on this yourself?** -yes diff --git a/.github/ISSUE_TEMPLATE/Other.md b/.github/ISSUE_TEMPLATE/Other.md deleted file mode 100644 index 5e5b62bd605..00000000000 --- a/.github/ISSUE_TEMPLATE/Other.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: Other -about: Something else - ---- - - - - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 8967c8f0169..00000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -**What kind of change does this PR introduce?** - - - -**Did you add tests for your changes?** - - - -**Does this PR introduce a breaking change?** - - - -**What needs to be documented once your changes are merged?** - - - diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..8d9cfc441ae --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,50 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 20 + labels: + - dependencies + versioning-strategy: widen + groups: + dependencies: + patterns: + - "*" + update-types: + - "minor" + - "patch" + dependencies-major: + patterns: + - "*" + update-types: + - "major" + exclude-patterns: + - "eslint-scope" + - "json-parse-even-better-errors" + - "strip-ansi" + - "rimraf" + - "mime-types" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 20 + labels: + - dependencies + groups: + dependencies: + patterns: + - "*" + - package-ecosystem: "gitsubmodule" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 20 + labels: + - dependencies + groups: + dependencies: + patterns: + - "*" diff --git a/.github/scripts/publish-to-pkg-pr-new.mjs b/.github/scripts/publish-to-pkg-pr-new.mjs new file mode 100644 index 00000000000..f84aae84a6e --- /dev/null +++ b/.github/scripts/publish-to-pkg-pr-new.mjs @@ -0,0 +1,129 @@ +/* eslint-disable no-console */ +/* eslint-disable camelcase */ + +import fs from "fs"; + +/** + * @param {{ github: EXPECTED_ANY, context: EXPECTED_ANY }} params params + */ +export async function run({ github, context }) { + const output = JSON.parse(fs.readFileSync("output.json", "utf8")); + + const sha = + context.eventName === "pull_request" + ? context.payload.pull_request.head.sha + : context.sha; + + const commitUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${sha}`; + + const botCommentIdentifier = ""; + const body = `${botCommentIdentifier} +This PR is packaged and the instant preview is available (${commitUrl}). + +Install it locally: + +- npm + +\`\`\`shell +npm i -D webpack@${output.packages.map((p) => p.url).join(" ")} +\`\`\` + +- yarn + +\`\`\`shell +yarn add -D webpack@${output.packages.map((p) => p.url).join(" ")} +\`\`\` + +- pnpm + +\`\`\`shell +pnpm add -D webpack@${output.packages.map((p) => p.url).join(" ")} +\`\`\` +`; + + /** + * @param {number=} issueNumber PR number + * @returns {Promise} comments + */ + async function findBotComment(issueNumber) { + if (!issueNumber) return null; + const comments = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber + }); + return comments.data.find( + (comment) => + // Prevent unintentional overwriting + comment.user && + comment.user.login === "github-actions[bot]" && + comment.body.includes(botCommentIdentifier) + ); + } + + /** + * @param {number=} issueNumber issue number + * @returns {Promise} + */ + async function createOrUpdateComment(issueNumber) { + if (!issueNumber) { + console.log("No issue number provided. Cannot post or update comment."); + return; + } + + const existingComment = await findBotComment(issueNumber); + + if (existingComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existingComment.id, + body + }); + } else { + await github.rest.issues.createComment({ + issue_number: issueNumber, + owner: context.repo.owner, + repo: context.repo.repo, + body + }); + } + } + + /** + * @returns {void} + */ + function logPublishInfo() { + console.log(`\n${"=".repeat(50)}`); + console.log("Publish Information"); + console.log("=".repeat(50)); + console.log("\nPublished Packages:"); + console.log(output.packages); + console.log("\nTemplates:"); + console.log(output.templates); + console.log(`\nCommit URL: ${commitUrl}`); + console.log(`\n${"=".repeat(50)}`); + } + + if (context.eventName === "pull_request") { + if (context.issue.number) { + await createOrUpdateComment(context.issue.number); + } + } else if (context.eventName === "push") { + const { data: prs } = + await github.rest.repos.listPullRequestsAssociatedWithCommit({ + owner: context.repo.owner, + repo: context.repo.repo, + commit_sha: sha + }); + + if (prs.length > 0) { + await createOrUpdateComment(prs[0].number); + } else { + console.log( + "No open pull request found for this push. Logging publish information to console:" + ); + logPublishInfo(); + } + } +} diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml new file mode 100644 index 00000000000..c67b2ea1223 --- /dev/null +++ b/.github/workflows/benchmarks.yml @@ -0,0 +1,94 @@ +name: Benchmarks + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + id-token: write # Required for OIDC authentication with CodSpeed + +jobs: + benchmark: + strategy: + fail-fast: false + matrix: + shard: [1/4, 2/4, 3/4, 4/4] + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-tags: true + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - name: Check Memory Status + run: > + node -e 'const os=require("os"); + const toGb=b=>(b/1024**3).toFixed(2)+" GB"; + console.log(`--- Memory Status ---\nTotal: ${toGb(os.totalmem())}\nFree: ${toGb(os.freemem())}\nUsed: ${toGb(os.totalmem()-os.freemem())}`)' + + - name: Run benchmarks + uses: CodSpeedHQ/action@d872884a306dd4853acf0f584f4b706cf0cc72a2 # v4.13.0 + with: + run: yarn benchmark --ci + mode: "simulation" + env: + LAST_COMMIT: 1 + NEGATIVE_FILTER: on-schedule + SHARD: ${{ matrix.shard }} + benchmark-memory: + strategy: + fail-fast: false + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-tags: true + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - name: Run memory benchmarks + uses: CodSpeedHQ/action@d872884a306dd4853acf0f584f4b706cf0cc72a2 # v4.13.0 + with: + run: yarn benchmark --ci + mode: "memory" + token: ${{ secrets.CODSPEED_TOKEN }} + env: + LAST_COMMIT: 1 + NEGATIVE_FILTER: on-schedule diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml new file mode 100644 index 00000000000..cbba95dea61 --- /dev/null +++ b/.github/workflows/dependabot.yml @@ -0,0 +1,38 @@ +name: Dependabot + +on: pull_request + +permissions: + contents: write + pull-requests: write + +jobs: + dependabot-auto-merge: + runs-on: ubuntu-latest + if: github.actor == 'dependabot[bot]' + steps: + - name: Generate Token + uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 + id: app-token + with: + app-id: ${{ secrets.BOT_APP_ID }} + private-key: ${{ secrets.BOT_PRIVATE_KEY }} + + - name: Dependabot metadata + id: dependabot-metadata + uses: dependabot/fetch-metadata@ffa630c65fa7e0ecfa0625b5ceda64399aea1b36 # v3.0.0 + with: + github-token: "${{ steps.app-token.outputs.token }}" + + - name: Enable auto-merge for Dependabot PRs + if: steps.dependabot-metadata.outputs.update-type != 'version-update:semver-major' + run: | + if [ "$(gh pr status --json reviewDecision -q .currentBranch.reviewDecision)" != "APPROVED" ]; + then gh pr review --approve "$PR_URL" + else echo "PR already approved, skipping additional approvals to minimize emails/notification noise."; + fi + + gh pr merge --auto --squash "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GH_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 00000000000..05661525b32 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,74 @@ +name: Dependency Review + +on: + pull_request: + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Dependency Review + uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 + with: + allow-dependencies-licenses: | + pkg:npm/@cspell/dict-django, + pkg:npm/@cspell/dict-en-common-misspellings, + pkg:npm/flatted, + pkg:npm/parse-imports, + pkg:npm/prettier, + pkg:npm/type-fest, + pkg:npm/abbrev, + pkg:npm/@pkgjs/parseargs, + pkg:npm/@apidevtools/json-schema-ref-parser, + pkg:npm/cookie-signature, + pkg:npm/ansis + allow-licenses: | + 0BSD, + AFL-1.1, + AFL-1.2, + AFL-2.0, + AFL-2.1, + AFL-3.0, + AGPL-3.0-only, + AGPL-3.0-or-later, + Apache-1.1, + Apache-2.0, + APSL-2.0, + Artistic-2.0, + BlueOak-1.0.0, + BSD-2-Clause, + BSD-3-Clause-Clear, + BSD-3-Clause, + BSL-1.0, + CAL-1.0, + CC-BY-3.0, + CC-BY-4.0, + CC-BY-SA-4.0, + CDDL-1.0, + CC0-1.0, + EPL-2.0, + GPL-2.0-only, + GPL-2.0-or-later, + GPL-2.0, + GPL-3.0-or-later, + ISC, + LGPL-2.0-only, + LGPL-2.1-only, + LGPL-2.1-or-later, + LGPL-2.1, + LGPL-3.0-only, + LGPL-3.0, + MIT, + MPL-2.0, + OFL-1.1, + PSF-2.0, + Python-2.0, + Python-2.0.1, + Unicode-DFS-2016, + Unlicense diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml new file mode 100644 index 00000000000..a86b3197615 --- /dev/null +++ b/.github/workflows/examples.yml @@ -0,0 +1,48 @@ +name: Update examples + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * 0" + +jobs: + examples: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-tags: true + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - run: yarn build:examples + + - name: Create Pull Request + uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + delete-branch: true + commit-message: | + docs: update examples + title: | + docs: update examples + body: | + Update examples. + + This PR was autogenerated. + branch: update-examples diff --git a/.github/workflows/pr-quality.yml b/.github/workflows/pr-quality.yml new file mode 100644 index 00000000000..03b65a96303 --- /dev/null +++ b/.github/workflows/pr-quality.yml @@ -0,0 +1,34 @@ +name: PR Quality + +permissions: + contents: read + issues: read + pull-requests: write + +on: + pull_request_target: + types: [opened, reopened] + +jobs: + anti-slop: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - uses: peakoss/anti-slop@85daca1880e9e1af197fc06ea03349daf08f4202 # v0.2.1 + env: + IS_NEW: >- + ${{ contains(fromJSON('["FIRST_TIMER","FIRST_TIME_CONTRIBUTOR","NONE"]'), + github.event.pull_request.author_association) }} + with: + max-failures: ${{ env.IS_NEW == 'true' && 2 || 3 }} + global-merge-ratio-exclude-own: ${{ env.IS_NEW == 'true' }} + max-daily-forks: ${{ env.IS_NEW == 'true' && 4 || 7 }} + require-pr-template: true + require-conventional-title: true + require-conventional-commits: true + failure-pr-message: | + 👋 Hi there! This PR was automatically flagged and closed by our quality checks. + + If you believe this was a mistake, please review our contributing guidelines + and leave a comment explaining **why this is a mistake**. diff --git a/.github/workflows/publish-to-pkg-pr-new.yml b/.github/workflows/publish-to-pkg-pr-new.yml new file mode 100644 index 00000000000..f45f7bda98e --- /dev/null +++ b/.github/workflows/publish-to-pkg-pr-new.yml @@ -0,0 +1,41 @@ +name: Publish to pkg.pr.new + +on: + pull_request: + branches: [main] + push: + branches: [main] + tags: ["!**"] + +permissions: + issues: write + pull-requests: write + +jobs: + publish: + if: | + github.repository == 'webpack/webpack' && + (github.event_name != 'pull_request' || + github.event.pull_request.head.repo.full_name == github.repository) + name: Publish to pkg.pr.new + runs-on: ubuntu-latest + outputs: + sha: ${{ steps.publish.outputs.sha }} + urls: ${{ steps.publish.outputs.urls }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - run: corepack enable + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + - run: yarn --frozen-lockfile + - run: npx pkg-pr-new publish --compact --json output.json --comment=off + - name: Add metadata to output + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { run } = await import('${{ github.workspace }}/.github/scripts/publish-to-pkg-pr-new.mjs'); + await run({ github, context }); diff --git a/.github/workflows/release-announcement.yml b/.github/workflows/release-announcement.yml new file mode 100644 index 00000000000..d78410982d7 --- /dev/null +++ b/.github/workflows/release-announcement.yml @@ -0,0 +1,54 @@ +name: Release Announcement + +on: + release: + types: [published] + workflow_dispatch: + workflow_call: + +jobs: + github-releases-to-discord: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: GitHub Releases to Discord + shell: bash + run: | + RELEASE_JSON=$(gh release view --json body,tagName,url,name) + + RAW_NAME=$(echo "$RELEASE_JSON" | jq -r '.name // .tagName // ""') + RAW_BODY=$(echo "$RELEASE_JSON" | jq -r '.body // ""') + HTML_URL=$(echo "$RELEASE_JSON" | jq -r '.url // ""') + RAW_AVATAR_URL="https://github.com/webpack/media/blob/90b54d02fa1cfc8aa864a8322202f74ac000f5d2/logo/icon.png" + + PAYLOAD=$(jq -n \ + --arg name "$RAW_NAME" \ + --arg avatar_url "$RAW_AVATAR_URL" \ + --arg url "$HTML_URL" \ + --arg body "$RAW_BODY" \ + --arg color "2105893" \ + --arg footer_text "Changelog" \ + --arg timestamp "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ + '{ + username: "webpack Release Changelog", + avatar_url: $avatar_url, + content: "||<@&1450591255485743204>||", + embeds: [{ + title: ($name | .[0:256]), + url: $url, + color: ($color | tonumber), + description: ($body | .[0:4096]), + footer: { + text: ($footer_text | .[0:2048]) + }, + timestamp: $timestamp + }] + }') + + curl -X POST -H "Content-Type: application/json" \ + -d "$PAYLOAD" \ + "${DISCORD_WEBHOOK}" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000000..ff278c6065c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,48 @@ +name: Release + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +permissions: + id-token: write # Required for OIDC + contents: write + pull-requests: write + +jobs: + release: + if: github.repository == 'webpack/webpack' + name: Release + runs-on: ubuntu-latest + outputs: + published: ${{ steps.changesets.outputs.published }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf # v1.7.0 + with: + publish: node ./node_modules/.bin/changeset publish + commit: "chore(release): new release" + title: "chore(release): new release" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: "" # https://github.com/changesets/changesets/issues/1152#issuecomment-3190884868 + + trigger-logic: + needs: release + if: needs.release.outputs.published == 'true' + uses: ./.github/workflows/release-announcement.yml + secrets: inherit diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000000..7abec7eb653 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,309 @@ +name: Github Actions + +on: + push: + branches: [main] + pull_request: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - name: Cache prettier result + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ./node_modules/.cache/prettier/.prettier-cache + key: lint-prettier-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/.prettierrc.js') }} + restore-keys: lint-prettier- + + - name: Cache eslint result + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: .eslintcache + key: lint-eslint-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/eslint.config.mjs') }} + restore-keys: lint-eslint- + + - name: Cache cspell result + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: .cspellcache + key: lint-cspell-${{ runner.os }}-node-${{ hashFiles('**/yarn.lock', '**/cspell.json') }} + restore-keys: lint-cspell- + + - run: yarn lint + + - name: Validate types using old typescript version + run: | + yarn upgrade typescript@5.0 @types/node@20 + yarn --frozen-lockfile + yarn validate:types + + - name: Validate changeset format + if: github.event_name == 'pull_request' + run: | + yarn validate:changeset + + types-coverage: + if: github.repository == 'webpack/webpack' && github.event.pull_request.head.repo.full_name == github.repository + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - name: Collect types coverage + run: yarn types:cover:report + + - uses: jwalton/gh-find-current-pr@f3d61b485d2801773f7a07b2aaa3306bd8f8e653 # v1.3.5 + id: findPr + + - uses: Nef10/lcov-reporter-action@797ec1c1e78e3a9a7890c1a104d58b9e05fcef76 # v0.3.0 + with: + pr-number: ${{ steps.findPr.outputs.number }} + lcov-file: ./coverage/lcov.info + title: Types Coverage + delete-old-comments: true + + validate-legacy-node: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Use Node.js 10.x + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: 10.x + cache: yarn + + # Remove `devDependencies` from `package.json` to avoid `yarn install` compatibility error + - run: node -e "const content = require('./package.json');delete content.devDependencies;require('fs').writeFileSync('package.json', JSON.stringify(content, null, 2));" + + - run: yarn install --production --frozen-lockfile + + basic: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - run: yarn test:basic --ci + + unit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: lts/* + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - name: Cache jest result + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: .jest-cache + key: jest-unit-${{ env.GITHUB_SHA }} + restore-keys: jest-unit-${{ hashFiles('**/yarn.lock', '**/jest.config.js') }} + + - run: yarn cover:unit --ci --cacheDirectory .jest-cache + + - name: Codecov + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + with: + flags: unit + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + test262: + needs: basic + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + submodules: true + + - name: Use Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: "latest" + cache: yarn + + - run: yarn --frozen-lockfile + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - name: Cache jest result + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: .jest-cache + key: jest-test262-${{ env.GITHUB_SHA }} + restore-keys: jest-test262-${{ hashFiles('**/yarn.lock', '**/jest.config.js') }} + + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + repository: tc39/test262 + path: test/js/test262 + ref: f2d59ea6e4b2f6f87de9f0d18a41d73782b6a9bc + + - run: yarn cover:test262 --ci --cacheDirectory .jest-cache + + - name: Codecov + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + with: + flags: test262 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + integration: + needs: basic + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [10.x, 20.x, 22.x, 24.x, 25.x] + part: [a, b] + include: + # Test with main branches of webpack dependencies + - os: ubuntu-latest + node-version: lts/* + part: a + use_main_branches: 1 + - os: ubuntu-latest + node-version: lts/* + part: b + use_main_branches: 1 + # Test on old Node.js versions + - os: ubuntu-latest + node-version: 18.x + part: a + - os: ubuntu-latest + node-version: 16.x + part: a + - os: ubuntu-latest + node-version: 14.x + part: a + - os: ubuntu-latest + node-version: 12.x + part: a + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + id: calculate_architecture + with: + result-encoding: string + script: | + if ('${{ matrix.os }}' === 'macos-latest' && '${{ matrix['node-version'] }}' === '10.x') { + return "x64" + } else { + return '' + } + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ matrix.node-version }} + architecture: ${{ steps.calculate_architecture.outputs.result }} + cache: yarn + + # Install old `jest` version and deps for legacy node versions + - run: | + yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-snapshot@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 cspell@^6.31.1 open-cli@^7.2.0 coffee-loader@^1.0.0 babel-loader@^8.1.0 style-loader@^2.0.0 css-loader@^5.0.1 less-loader@^8.1.1 less@4.5.1 mini-css-extract-plugin@^1.6.1 nyc@^15.1.0 memfs@4.14.0 --ignore-engines + yarn --frozen-lockfile --ignore-engines + if: matrix.node-version == '10.x' || matrix.node-version == '12.x' || matrix.node-version == '14.x' + + - run: | + yarn upgrade jest@^27.5.0 jest-circus@^27.5.0 jest-cli@^27.5.0 jest-diff@^27.5.0 jest-environment-node@^27.5.0 jest-snapshot@^27.5.0 jest-junit@^13.0.0 @types/jest@^27.4.0 pretty-format@^27.0.2 husky@^8.0.3 lint-staged@^13.2.1 nyc@^15.1.0 coffee-loader@1.0.0 babel-loader@^8.1.0 style-loader@^2.0.0 css-loader@^5.0.1 less-loader@^8.1.1 mini-css-extract-plugin@^1.6.1 --ignore-engines + yarn --frozen-lockfile + if: matrix.node-version == '16.x' + + - run: | + yarn upgrade cspell@^8.8.4 lint-staged@^15.2.5 --ignore-engines + yarn --frozen-lockfile + if: matrix.node-version == '18.x' + + # Install main version of our deps + - run: yarn upgrade enhanced-resolve@webpack/enhanced-resolve#main loader-runner@webpack/loader-runner#main webpack-sources@webpack/webpack-sources#main watchpack@webpack/watchpack#main tapable@webpack/tapable#main + if: matrix.use_main_branches == '1' + + # Install dependencies for LTS node versions + - run: yarn --frozen-lockfile + if: matrix.node-version != '10.x' && matrix.node-version != '12.x' && matrix.node-version != '14.x' && matrix.node-version != '16.x' + + - run: yarn link --frozen-lockfile || true + + - run: yarn link webpack --frozen-lockfile + + - name: Cache jest result + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: .jest-cache + key: jest-integration-${{ env.GITHUB_SHA }} + restore-keys: jest-integration-${{ hashFiles('**/yarn.lock', '**/jest.config.js') }} + + - run: yarn cover:integration:${{ matrix.part }} --ci --cacheDirectory .jest-cache || yarn cover:integration:${{ matrix.part }} --ci --cacheDirectory .jest-cache -f + env: + MAIN_BRANCHES: ${{ matrix.use_main_branches }} + + - run: yarn report:cover:merge + + - name: Codecov + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + with: + flags: integration + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index 32814bb493a..a2042c75c70 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,24 @@ /node_modules /test/js /test/browsertest/js -/test/fixtures/temp-cache-fixture -/benchmark/js -/benchmark/fixtures +/test/fixtures/temp-* +/test/temp +/test/ChangesAndRemovals +/test/ChangesAndRemovalsTemp +/test/**/dev-defaults.webpack.lock +/test/**/generated/** /examples/**/dist +/examples/nodejs-addons/build/** +/assembly/**/*.wat +/assembly/**/*.wasm /coverage +/.nyc_output +/.jest-cache .DS_Store *.log .idea .vscode +.cache .eslintcache +.cspellcache package-lock.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000000..b5da6ab02f1 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "test/test262-cases"] + path = test/test262-cases + url = https://github.com/tc39/test262 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000000..041c660c92b --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx --no-install lint-staged diff --git a/.prettierignore b/.prettierignore index c99674c1822..b19d9bf01ba 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,15 +1,51 @@ -# Ignore all paths. -**/*.* - -# Enable prettier for the following paths. -!setup/**/*.js -!lib/**/*.js -!bin/*.js -!hot/*.js -!buildin/*.js -!benchmark/**/*.js +package.json + +# Ignore some test files +test/**/*.* !test/*.js +!test/*.cjs +!test/*.mjs !test/**/webpack.config.js +!test/**/webpack.config.cjs +!test/**/webpack.config.mjs +!test/**/test.config.js +!test/**/test.filter.js +!test/**/errors.js +!test/**/warnings.js +!test/**/deprecations.js +!test/**/infrastructure-log.js +!test/*.md +!test/helpers/*.* +!test/harness/**/*.* +!test/benchmarkCases/**/*.mjs +test/js/**/*.* +test/test262-cases/**/*.* + +# Ignore some folders +benchmark/ +coverage/ + +# Ignore generated files +*.check.js +*.check.d.ts +types.d.ts +declarations/WebpackOptions.d.ts + +# Ignore precompiled schemas +schemas/**/*.check.js + +# Ignore example fixtures +examples/** +!examples/*/ +!examples/**/internals/ +!examples/**/internals/** !examples/**/webpack.config.js -!schemas/**/*.js -!declarations.d.ts +!examples/**/webpack.config.cjs +!examples/**/webpack.config.mjs +!examples/**/test.filter.js + +.vscode/**/*.* + +# Ignore local working files +pr.md +issue.md diff --git a/.prettierrc.js b/.prettierrc.js index 03b9da1bac3..04b93b8c6a7 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,5 +1,24 @@ +"use strict"; + module.exports = { printWidth: 80, useTabs: true, - tabWidth: 2 + tabWidth: 2, + trailingComma: "none", + arrowParens: "always", + overrides: [ + { + files: "*.json", + options: { + parser: "json", + useTabs: false + } + }, + { + files: "*.{cts,mts,ts}", + options: { + parser: "typescript" + } + } + ] }; diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 184cf5ee220..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,65 +0,0 @@ -sudo: false -dist: trusty -language: node_js - -branches: - only: - - master - - next - -cache: - yarn: true - directories: - - ".jest-cache" - - ".eslintcache" - -stages: - - basic - - advanced - - versions - -matrix: - include: - - os: linux - node_js: "10" - env: NO_WATCH_TESTS=1 JEST="--maxWorkers=2 --cacheDirectory .jest-cache" JOB_PART=basic - stage: basic - - os: linux - node_js: "10" - env: NO_WATCH_TESTS=1 JEST="--maxWorkers=2 --cacheDirectory .jest-cache" JOB_PART=lint-unit - stage: advanced - - os: linux - node_js: "10" - env: NO_WATCH_TESTS=1 JEST="--maxWorkers=2 --cacheDirectory .jest-cache" JOB_PART=integration - stage: advanced - - os: osx - node_js: "10" - env: NO_WATCH_TESTS=1 JEST="--maxWorkers=2 --cacheDirectory .jest-cache" JOB_PART=integration - stage: versions - - os: linux - node_js: "8" - env: NO_WATCH_TESTS=1 JEST="--maxWorkers=2 --cacheDirectory .jest-cache" JOB_PART=integration - stage: versions - - os: linux - node_js: "6" - env: NO_WATCH_TESTS=1 JEST="--maxWorkers=2 --cacheDirectory .jest-cache" JOB_PART=integration - stage: versions - fast_finish: true - allow_failures: - - os: osx - -install: - - yarn --frozen-lockfile - - yarn link --frozen-lockfile || true - - yarn link webpack --frozen-lockfile - -script: yarn travis:$JOB_PART - -after_success: - - cat ./coverage/lcov.info | node_modules/.bin/coveralls --verbose - - bash <(curl -s https://codecov.io/bash) -F $JOB_PART -X gcov - - rm -f .jest-cache/haste-map* .jest-cache/perf-cache* - -notifications: - slack: - secure: JduSdKWwbnLCwo7Z4E59SGE+Uw832UwnXzQiKEpg1BV45MYDPRiGltly1tRHmPh9OGjvGx3XSkC2tNGOBLtL4UL2SCkf012x0t7jDutKRfcv/njynl8jk8l+UhPmaWiHXDQAgGiiKdL4RfzPLW3HeVHCOWm0LKMzcarTa8tw+rE= diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..63c2020b5c0 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,75 @@ +# Webpack Development Guide + +> Note: CLAUDE.md is a symlink to AGENTS.md. They are the same file. + +## Project Overview + +webpack is a JavaScript module bundler. Package manager: **yarn**. + +- `lib/` — Main source code +- `lib/javascript/` — JavaScript modules parsing and generation +- `lib/css/` — CSS modules parsing and generation +- `schemas/` — JSON schemas for webpack options +- `test/` — All tests +- `examples/` — Usage examples for webpack features and configuration options +- `.changeset/` — Changeset files for releases +- `types.d.ts` — Auto-generated type definitions (do not edit manually) +- `package.json` — All available commands (defined in `scripts`) + +## Development Workflow + +### 1. Making Changes to `lib/` (and schemas if needed) + +Modify source code in `lib/` as needed. + +If your change involves modifying or adding webpack configuration options: + +1. Edit `schemas/WebpackOptions.json` (or relevant schema file in `schemas/plugins/`) +2. Run `yarn fix:special` to regenerate: + - `types.d.ts` (compiled from JSDoc + schemas) + - Precompiled schema validators + - Runtime code +3. Now `lib/` code can reference the updated types via JSDoc `@typedef {import("...")}` imports + +### 2. Writing and Running Tests + +**For bug fixes, always write the test case first.** Run the test to confirm it fails, reproducing the bug. Then make the code change (step 1) and re-run the test — a passing test confirms the fix. + +For new features, tests can be written alongside or after the implementation. + +Only run tests when test files are modified or explicitly requested. See [TESTING_DOCS.md](TESTING_DOCS.md) for test directory structure, naming conventions, and how to run specific test cases. + +### 3. Adding a Changeset + +Every user-facing change needs a changeset file: + +```bash +# Create .changeset/.md with this format: +--- +"webpack": patch # or minor / major +--- + +Description of the change. +``` + +Use `patch` for bug fixes, `minor` for new features, `major` for breaking changes. Do not prefix the description with `fix:`, `feat:`, etc. — the change type is already indicated by `patch`/`minor`/`major`. + +### 4. Updating Examples (if needed) + +If WebpackOptions were added or modified, consider adding or updating relevant examples in `examples/`. Run `yarn build:examples` to ensure the examples build successfully. + +### 5. Linting and Formatting + +Run linting, formatting, and type checking as the final step: + +```bash +yarn fix:code # ESLint autofix +yarn fmt # Prettier format +yarn tsc # TypeScript type check (catches type errors in JSDoc annotations) +``` + +If any `lib/` file's exports (public API) were modified, also run `yarn fix:special` to regenerate types and validators. Or use `yarn fix` which combines all three (`fix:code` + `fix:special` + `fmt`). + +### 6. Git Commit + +Do **NOT** add `Co-authored-by` lines in commit messages. The GitHub CLA bot requires the email to map to a real GitHub account, and unrecognized emails will cause CLA check failures. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000000..0b9bb309da7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,216 @@ +# webpack + +## 5.106.0 + +### Minor Changes + +- Add `exportType: "style"` for CSS modules to inject styles into DOM via HTMLStyleElement, similar to style-loader functionality. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20579](https://github.com/webpack/webpack/pull/20579)) + +- Add `context` option support for VirtualUrlPlugin (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20449](https://github.com/webpack/webpack/pull/20449)) + - The context for the virtual module. A string path. Defaults to 'auto', which will try to resolve the context from the module id. + - Support custom context path for resolving relative imports in virtual modules + - Add examples demonstrating context usage and filename customization + +- Generate different `CssModule` instances for different `exportType` values. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20590](https://github.com/webpack/webpack/pull/20590)) + +- Added the `localIdentHashFunction` option to configure the hash function to be used for hashing. (by [@alexander-akait](https://github.com/alexander-akait) in [#20694](https://github.com/webpack/webpack/pull/20694)) + Additionally, the `localIdentName` option can now be a function. + +- Added support for destructuring assignment `require` in cjs, allowing for tree shaking. (by [@ahabhgk](https://github.com/ahabhgk) in [#20548](https://github.com/webpack/webpack/pull/20548)) + +- Added the `validate` option to enable/disable validation in webpack/plugins/loaders, also implemented API to make it inside plugins. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20275](https://github.com/webpack/webpack/pull/20275)) + +- Added `source` support for async WASM modules. (by [@magic-akari](https://github.com/magic-akari) in [#20364](https://github.com/webpack/webpack/pull/20364)) + +### Patch Changes + +- Add a static getSourceBasicTypes method to the Module class to prevent errors across multiple versions. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20614](https://github.com/webpack/webpack/pull/20614)) + +- Included fragment groups in the conflicting order warning for CSS. (by [@aryanraj45](https://github.com/aryanraj45) in [#20660](https://github.com/webpack/webpack/pull/20660)) + +- Avoid rendering unused top-level `__webpack_exports__` declaration when output ECMA module library. (by [@hai-x](https://github.com/hai-x) in [#20669](https://github.com/webpack/webpack/pull/20669)) + +- Fixed resolving in CSS modules. (by [@alexander-akait](https://github.com/alexander-akait) in [#20771](https://github.com/webpack/webpack/pull/20771)) + +- Allow external modules place in async chunks when output ECMA module. (by [@hai-x](https://github.com/hai-x) in [#20662](https://github.com/webpack/webpack/pull/20662)) + +- Implement `deprecate` flag in schema for better TypeScript support to show which options are already deprecated by the configuration (by [@bjohansebas](https://github.com/bjohansebas) in [#20432](https://github.com/webpack/webpack/pull/20432)) + +- Set `.name` to `"default"` for anonymous default export functions and classes per ES spec (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20773](https://github.com/webpack/webpack/pull/20773)) + +- Hash entry chunks after runtime chunks to prevent stale content hash references in watch mode (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20724](https://github.com/webpack/webpack/pull/20724)) + +- Fix multiple bugs and optimizations in CSS modules: correct third code point position in walkCssTokens number detection, fix multiline CSS comment regex, fix swapped :import/:export error message, fix comma callback incorrectly popping balanced stack, fix cache comparison missing array length check, fix match.index mutation side effect, move publicPathAutoRegex to module scope, precompute merged callbacks in consumeUntil, simplify redundant ternary in CssGenerator, fix typo GRID_TEMPLATE_ARES, remove duplicate grid-column-start, and merge duplicate getCompilationHooks calls. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20648](https://github.com/webpack/webpack/pull/20648)) + +- Correct url() path resolution and preserve source maps for non-link CSS export types (style, text, css-style-sheet) (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20717](https://github.com/webpack/webpack/pull/20717)) + +- Emit error when proxy server returns non-200 status code in HttpUriPlugin instead of silently failing. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20646](https://github.com/webpack/webpack/pull/20646)) + +- `import.meta` as standalone expression now returns a complete object with known properties (`url`, `webpack`, `main`, `env`) instead of an empty object `({})`, and hoists it as a module-level variable to ensure `import.meta === import.meta` identity. In `preserve-unknown` mode (ESM output), the hoisted object merges runtime `import.meta` properties via `Object.assign`. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20658](https://github.com/webpack/webpack/pull/20658)) + +- Fix incorrect condition in FileSystemInfo that always evaluated to false, preventing trailing slash removal from directory paths during build dependency resolution. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20649](https://github.com/webpack/webpack/pull/20649)) + +- fix: VirtualUrlPlugin absolute path virtual module IDs getting concatenated with compiler context (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20656](https://github.com/webpack/webpack/pull/20656)) + + When a virtual module ID is an absolute path (e.g. `virtual:C:/project/user.js`), the auto-derived context was incorrectly joined with `compiler.context`, producing a concatenated path like `C:\cwd\C:\project`. Now absolute-path contexts are used directly. + +- All deprecated methods and options now have `@deprecated` flag in types. (by [@alexander-akait](https://github.com/alexander-akait) in [#20707](https://github.com/webpack/webpack/pull/20707)) + +- Fix `CompatibilityPlugin` to correctly rename `__webpack_require__` when it appears as an arrow function parameter (e.g. `(__webpack_module, __webpack_exports, __webpack_require__) => { ... }`). (by [@hai-x](https://github.com/hai-x) in [#20661](https://github.com/webpack/webpack/pull/20661)) + +## 5.105.4 + +### Patch Changes + +- Add `Module.getSourceBasicTypes` to distinguish basic source types and clarify how modules with non-basic source types like `remote` still produce JavaScript output. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20546](https://github.com/webpack/webpack/pull/20546)) + +- Handle `createRequire` in expressions. (by [@alexander-akait](https://github.com/alexander-akait) in [#20549](https://github.com/webpack/webpack/pull/20549)) + +- Fixed types for multi stats. (by [@alexander-akait](https://github.com/alexander-akait) in [#20556](https://github.com/webpack/webpack/pull/20556)) + +- Remove empty needless js output for normal css module. (by [@JSerFeng](https://github.com/JSerFeng) in [#20162](https://github.com/webpack/webpack/pull/20162)) + +- Update `enhanced-resolve` to support new features for `tsconfig.json`. (by [@alexander-akait](https://github.com/alexander-akait) in [#20555](https://github.com/webpack/webpack/pull/20555)) + +- Narrows export presence guard detection to explicit existence checks on namespace imports only, i.e. patterns like "x" in ns. (by [@hai-x](https://github.com/hai-x) in [#20561](https://github.com/webpack/webpack/pull/20561)) + +## 5.105.3 + +### Patch Changes + +- Context modules now handle rejections correctly. (by [@alexander-akait](https://github.com/alexander-akait) in [#20455](https://github.com/webpack/webpack/pull/20455)) + +- Only mark asset modules as side-effect-free when `experimental.futureDefaults` is set to true, so asset-copying use cases (e.g. `import "./x.png"`) won’t break unless the option is enabled. (by [@hai-x](https://github.com/hai-x) in [#20535](https://github.com/webpack/webpack/pull/20535)) + +- Add the missing **webpack_exports** declaration in certain cases when bundling a JS entry together with non-JS entries (e.g., CSS entry or asset module entry). (by [@hai-x](https://github.com/hai-x) in [#20463](https://github.com/webpack/webpack/pull/20463)) + +- Fixed HMR failure for CSS modules with @import when exportType !== "link". When exportType is not "link", CSS modules now behave like JavaScript modules and don't require special HMR handling, allowing @import CSS to work correctly during hot module replacement. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20514](https://github.com/webpack/webpack/pull/20514)) + +- Fixed an issue where empty JavaScript files were generated for CSS-only entry points. The code now correctly checks if entry modules have JavaScript source types before determining whether to generate a JS file. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20454](https://github.com/webpack/webpack/pull/20454)) + +- Do not crash when a referenced chunk is not a runtime chunk. (by [@alexander-akait](https://github.com/alexander-akait) in [#20461](https://github.com/webpack/webpack/pull/20461)) + +- Fix some types. (by [@alexander-akait](https://github.com/alexander-akait) in [#20412](https://github.com/webpack/webpack/pull/20412)) + +- Ensure that missing module error are thrown after the interception handler (if present), allowing module interception to customize the module factory. (by [@hai-x](https://github.com/hai-x) in [#20510](https://github.com/webpack/webpack/pull/20510)) + +- Added `createRequire` support for ECMA modules. (by [@stefanbinoj](https://github.com/stefanbinoj) in [#20497](https://github.com/webpack/webpack/pull/20497)) + +- Added category for CJS reexport dependency to fix issues with ECMA modules. (by [@hai-x](https://github.com/hai-x) in [#20444](https://github.com/webpack/webpack/pull/20444)) + +- Implement immutable bytes for `bytes` import attribute to match tc39 spec. (by [@alexander-akait](https://github.com/alexander-akait) in [#20481](https://github.com/webpack/webpack/pull/20481)) + +- Fixed deterministic search for graph roots regardless of edge order. (by [@veeceey](https://github.com/veeceey) in [#20452](https://github.com/webpack/webpack/pull/20452)) + +## 5.105.2 + +### Patch Changes + +- Fixed `WebpackPluginInstance` type regression. (by [@alexander-akait](https://github.com/alexander-akait) in [#20440](https://github.com/webpack/webpack/pull/20440)) + +## 5.105.1 + +### Patch Changes + +- Fix VirtualUrlPlugin Windows compatibility by sanitizing cache keys and filenames. Cache keys now use `toSafePath` to replace colons (`:`) with double underscores (`__`) and sanitize other invalid characters, ensuring compatibility with Windows filesystem restrictions. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20424](https://github.com/webpack/webpack/pull/20424)) + +- Revert part of the createRequire generation behavior for `require("node:...")` to keep compatibility with those modules exports, e.g. `const EventEmitter = require("node:events");`. (by [@hai-x](https://github.com/hai-x) in [#20433](https://github.com/webpack/webpack/pull/20433)) + +- Skip guard collection when exports-presence mode is disabled to improve parsing performance. (by [@hai-x](https://github.com/hai-x) in [#20433](https://github.com/webpack/webpack/pull/20433)) + +## 5.105.0 + +### Minor Changes + +- Allow resolving worker module by export condition name when using `new Worker()` (by [@hai-x](https://github.com/hai-x) in [#20353](https://github.com/webpack/webpack/pull/20353)) + +- Detect conditional imports to avoid compile-time linking errors for non-existent exports. (by [@hai-x](https://github.com/hai-x) in [#20320](https://github.com/webpack/webpack/pull/20320)) + +- Added the `tsconfig` option for the `resolver` options (replacement for `tsconfig-paths-webpack-plugin`). Can be `false` (disabled), `true` (use the default `tsconfig.json` file to search for it), a string path to `tsconfig.json`, or an object with `configFile` and `references` options. (by [@alexander-akait](https://github.com/alexander-akait) in [#20400](https://github.com/webpack/webpack/pull/20400)) + +- Support `import.defer()` for context modules. (by [@ahabhgk](https://github.com/ahabhgk) in [#20399](https://github.com/webpack/webpack/pull/20399)) + +- Added support for array values ​​to the `devtool` option. (by [@hai-x](https://github.com/hai-x) in [#20191](https://github.com/webpack/webpack/pull/20191)) + +- Improve rendering node built-in modules for ECMA module output. (by [@hai-x](https://github.com/hai-x) in [#20255](https://github.com/webpack/webpack/pull/20255)) + +- Unknown import.meta properties are now determined at runtime instead of being statically analyzed at compile time. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20312](https://github.com/webpack/webpack/pull/20312)) + +### Patch Changes + +- Fixed ESM default export handling for `.mjs` files in Module Federation (by [@y-okt](https://github.com/y-okt) in [#20189](https://github.com/webpack/webpack/pull/20189)) + +- Optimized `import.meta.env` handling in destructuring assignments by using cached stringified environment definitions. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20313](https://github.com/webpack/webpack/pull/20313)) + +- Respect the `stats.errorStack` option in stats output. (by [@samarthsinh2660](https://github.com/samarthsinh2660) in [#20258](https://github.com/webpack/webpack/pull/20258)) + +- Fixed a bug where declaring a `module` variable in module scope would conflict with the default `moduleArgument`. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20265](https://github.com/webpack/webpack/pull/20265)) + +- Fix VirtualUrlPlugin to set resourceData.context for proper module resolution. Previously, when context was not set, it would fallback to the virtual scheme path (e.g., `virtual:routes`), which is not a valid filesystem path, causing subsequent resolve operations to fail. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20390](https://github.com/webpack/webpack/pull/20390)) + +- Fixed Worker self-import handling to support various URL patterns (e.g., `import.meta.url`, `new URL(import.meta.url)`, `new URL(import.meta.url, import.meta.url)`, `new URL("./index.js", import.meta.url)`). Workers that resolve to the same module are now properly deduplicated, regardless of the URL syntax used. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20381](https://github.com/webpack/webpack/pull/20381)) + +- Reuse the same async entrypoint for the same Worker URL within a module to avoid circular dependency warnings when multiple Workers reference the same resource. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20345](https://github.com/webpack/webpack/pull/20345)) + +- Fixed a bug where a self-referencing dependency would have an unused export name when imported inside a web worker. (by [@samarthsinh2660](https://github.com/samarthsinh2660) in [#20251](https://github.com/webpack/webpack/pull/20251)) + +- Fix missing export generation when concatenated modules in different chunks share the same runtime in module library bundles. (by [@hai-x](https://github.com/hai-x) in [#20346](https://github.com/webpack/webpack/pull/20346)) + +- Fixed `import.meta.env.xxx` behavior: when accessing a non-existent property, it now returns empty object instead of full object at runtime. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20289](https://github.com/webpack/webpack/pull/20289)) + +- Improved parsing error reporting by adding a link to the loader documentation. (by [@gaurav10gg](https://github.com/gaurav10gg) in [#20244](https://github.com/webpack/webpack/pull/20244)) + +- Fix typescript types. (by [@alexander-akait](https://github.com/alexander-akait) in [#20305](https://github.com/webpack/webpack/pull/20305)) + +- Add declaration for unused harmony import specifier. (by [@hai-x](https://github.com/hai-x) in [#20286](https://github.com/webpack/webpack/pull/20286)) + +- Fix compressibility of modules while retaining portability. (by [@dmichon-msft](https://github.com/dmichon-msft) in [#20287](https://github.com/webpack/webpack/pull/20287)) + +- Optimize source map generation: only include `ignoreList` property when it has content, avoiding empty arrays in source maps. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20319](https://github.com/webpack/webpack/pull/20319)) + +- Preserve star exports for dependencies in ECMA module output. (by [@hai-x](https://github.com/hai-x) in [#20293](https://github.com/webpack/webpack/pull/20293)) + +- Consider asset modulem to be side-effect free. (by [@hai-x](https://github.com/hai-x) in [#20352](https://github.com/webpack/webpack/pull/20352)) + +- Avoid generating JavaScript modules for CSS exports that are not used, reducing unnecessary output and bundle size. (by [@xiaoxiaojx](https://github.com/xiaoxiaojx) in [#20337](https://github.com/webpack/webpack/pull/20337)) + +## 5.104.1 + +### Patch Changes + +- 2efd21b: Reexports runtime calculation should not accessing **WEBPACK_IMPORT_KEY** decl with var. +- c510070: Fixed a user information bypass vulnerability in the HttpUriPlugin plugin. + +## 5.104.0 + +### Minor Changes + +- d3dd841: Use method shorthand to render module content in `__webpack_modules__` object. +- d3dd841: Enhance `import.meta.env` to support object access. +- 4baab4e: Optimize dependency sorting in updateParent: sort each module only once by deferring to finishUpdateParent(), and reduce traversal count in sortWithSourceOrder by caching WeakMap values upfront. +- 04cd530: Handle more at-rules for CSS modules. +- cafae23: Added options to control the renaming of at-rules and various identifiers in CSS modules. +- d3dd841: Added `base64url`, `base62`, `base58`, `base52`, `base49`, `base36`, `base32` and `base25` digests. +- 5983843: Provide a stable runtime function variable `__webpack_global__`. +- d3dd841: Improved `localIdentName` hashing for CSS. + +### Patch Changes + +- 22c48fb: Added module existence check for informative error message in development mode. +- 50689e1: Use the fully qualified class name (or export name) for `[fullhash]` placeholder in CSS modules. +- d3dd841: Support universal lazy compilation. +- d3dd841: Fixed module library export definitions when multiple runtimes. +- d3dd841: Fixed CSS nesting and CSS custom properties parsing. +- d3dd841: Don't write fragment from URL to filename and apply fragment to module URL. +- aab1da9: Fixed bugs for `css/global` type. +- d3dd841: Compatibility `import.meta.filename` and `import.meta.dirname` with `eval` devtools. +- d3dd841: Handle nested `__webpack_require__`. +- 728ddb7: The speed of identifier parsing has been improved. +- 0f8b31b: Improve types. +- d3dd841: Don't corrupt `debugId` injection when `hidden-source-map` is used. +- 2179fdb: Re-validate HttpUriPlugin redirects against allowedUris, restrict to http(s) and add a conservative redirect limit to prevent SSRF and untrusted content inclusion. Redirects failing policy are rejected before caching/lockfile writes. +- d3dd841: Serialize `HookWebpackError`. +- d3dd841: Added ability to use built-in properties in dotenv and define plugin. +- 3c4319f: Optimizing the regular expression character class by specifying ranges for runtime code. +- d3dd841: Reduce collision for local indent name in CSS. +- d3dd841: Remove CSS link tags when CSS imports are removed. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 00000000000..47dc3e3d863 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3364e380801..5fb9cbc0ce1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,25 +2,34 @@ From opening a bug report to creating a pull request: every contribution is appreciated and welcome. If you're planning to implement a new feature or change -the api please create an issue first. This way we can ensure that your precious +the API please create an issue first. This way we can ensure that your precious work is not in vain. ## Issues -Most of the time, if webpack is not working correctly for you it is a simple configuration issue. +Most of the time, if webpack is not working correctly for you, it is a simple configuration issue. If you are still having difficulty after looking over your configuration carefully, please post -a question to [StackOverflow with the webpack tag](http://stackoverflow.com/tags/webpack). Questions +a question to [Discussions](https://github.com/webpack/webpack/discussions), [StackOverflow with the webpack tag](https://stackoverflow.com/tags/webpack) or ask this in our [Discord](https://discord.gg/5sxFZPdx2k). Questions that include your webpack.config.js, relevant files, and the full error message are more likely to receive responses. +> ⚠️ Note on dependency vulnerability warnings +> +> Tools like `npm audit` may report vulnerabilities originating from development-only dependencies +> (for example `webpack-dev-server`). These warnings do not always indicate a security issue +> in your production bundle. +> +> Before opening an issue, please check whether the warning comes from a dev dependency +> and whether an update or workaround already exists. + **If you have discovered a bug or have a feature suggestion, please [create an issue on GitHub](https://github.com/webpack/webpack/issues/new).** -Do you want to fix an issue? Look at the issues with a tag of [X5: work required (PR / Help Wanted)](https://github.com/webpack/webpack/labels/X5%3A%20work%20required%20%28PR%20%2F%20Help%20Wanted%29). Each issue should be tagged with a difficulty tag - +Do you want to fix an issue? Look at the issues with a tag of [Send a PR](https://github.com/webpack/webpack/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22Send%20a%20PR%22). Here are some of the key labels you may encounter: -- D0: My First Commit (Contribution Difficulty) -- D1: Easy (Contribution Difficulty) -- D2: Medium (Contribution Difficulty) -- D3: Hard (Contribution Difficulty) +- **bug**: An unexpected problem or unintended behavior. +- **enhancement**: A suggestion for a new feature or improvement. +- **question**: Requests for clarification or more information. +- **documentation**: Issues related to improving or adding documentation. ## Contributing to the webpack ecosystem @@ -31,7 +40,7 @@ If you have created your own loader/plugin please include it on the relevant doc ## Setup -[Setup your local webpack repository](_SETUP.md) +[Set up your local webpack repository](_SETUP.md) ## Submitting Changes @@ -39,18 +48,43 @@ After getting some feedback, push to your fork and submit a pull request. We may suggest some changes or improvements or alternatives, but for small changes your pull request should be accepted quickly. -Some things that will increase the chance that your pull request is accepted: +Things that will increase the chance that your pull request is accepted: -* [Write tests](./test/README.md) -* Follow the existing coding style -* Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) +- [Write tests](./test/README.md) +- Follow the existing coding style +- Write a [good commit message](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) +- For a major fix/feature make sure your PR has an issue and if it doesn't, please create one. This would help discussion with the community, and polish ideas in case of a new feature. +- Make sure your PR's description contains GitHub's special keyword references that automatically close the related issue when the PR is merged. ([More info](https://github.com/blog/1506-closing-issues-via-pull-requests)) +- When you have a lot of commits in your PR, it's good practice to squash all your commits in one single commit. ([Learn how to squash here](https://davidwalsh.name/squash-commits-git)) +- For a better understanding of the folder structure and testing procedures, refer to the [Testing Documentation](./TESTING_DOCS.md). ## Documentation webpack is insanely feature rich and documentation is a huge time sink. We greatly appreciate any time spent fixing typos or clarifying sections in the -documentation. [See a list of issues with the documentation tag.](https://github.com/webpack/webpack/labels/documentation) +documentation. [See a list of issues with the documentation tag](https://github.com/webpack/webpack/labels/documentation), +or [check out the issues on the documentation website's repository](https://github.com/webpack/webpack.js.org/issues). + +## Types + +webpack is statically typed using JSDoc annotation and TypeScript. If you would like to export a new type which doesn't belong to a public API, then you can do so by declaring it in `webpack/lib/index.js`. + +`webpack/lib/index.js` + +```js +/** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */ +``` + +Then, automatically generate the type declarations by running `yarn fix` locally, and the changes you have made will be reflected in `types.d.ts`. ## Discussions -Gitter is only for small questions. To discuss a subject in detail, please send a link to your forum or blog in the Gitter chat. +For discussions please use our [Discussions](https://github.com/webpack/webpack/discussions). + +## Join the development + +- Before you join development, please [set up the project](./_SETUP.md) on your local machine, run it and go through the application completely. Use any command you can find and see what it does. Explore. + + > Don't worry ... Nothing will happen to the project or to you due to the exploring. The only thing that will happen is you'll be more familiar with what is where and might even get some cool ideas on how to improve various aspects of the project. + +- If you would like to work on an issue, drop in a comment at the issue. If it is already assigned to someone, but there is no sign of any work being done, please feel free to drop in a comment so that the issue can be assigned to you if the previous assignee has dropped it entirely. diff --git a/GOVERNANCE.md b/GOVERNANCE.md new file mode 100644 index 00000000000..6d004f58610 --- /dev/null +++ b/GOVERNANCE.md @@ -0,0 +1,3 @@ +# webpack Project Governance + +The webpack project (and organization) follows the webpack's governance model defined within [the webpack governance repository](https://github.com/webpack/governance/blob/main/README.md). diff --git a/README.md b/README.md index 3a3c583cf2b..35ba370054c 100644 --- a/README.md +++ b/README.md @@ -8,41 +8,46 @@ [![npm][npm]][npm-url] [![node][node]][node-url] -[![deps][deps]][deps-url] -[![tests][tests]][tests-url] -[![builds][builds]][builds-url] +[![builds1][builds1]][builds1-url] +[![dependency-review][dependency-review]][dependency-review-url] [![coverage][cover]][cover-url] -[![licenses][licenses]][licenses-url] +[![pkg.pr.new](https://pkg.pr.new/badge/webpack/webpack)](https://pkg.pr.new/~/webpack/webpack) +[![PR's welcome][prs]][prs-url] +[![compatibility-score](https://api.dependabot.com/badges/compatibility_score?dependency-name=webpack&package-manager=npm_and_yarn&previous-version=5.72.1&new-version=5.73.0)](https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates#about-compatibility-scores) +[![downloads](https://img.shields.io/npm/dm/webpack.svg)](https://npmcharts.com/compare/webpack?minimal=true) +[![install-size](https://packagephobia.com/badge?p=webpack)](https://packagephobia.com/result?p=webpack) +[![backers](https://opencollective.com/webpack/backers/badge.svg)](https://opencollective.com/webpack#backer) +[![sponsors](https://opencollective.com/webpack/sponsors/badge.svg)](https://opencollective.com/webpack#sponsors) +[![contributors](https://img.shields.io/github/contributors/webpack/webpack.svg)](https://github.com/webpack/webpack/graphs/contributors) +[![discussions](https://img.shields.io/github/discussions/webpack/webpack)](https://github.com/webpack/webpack/discussions) +[![discord](https://img.shields.io/discord/1180618526436888586?label=discord&logo=discord&logoColor=white&style=flat)](https://discord.gg/5sxFZPdx2k) +[![LFX Health Score](https://insights.linuxfoundation.org/api/badge/health-score?project=webpack)](https://insights.linuxfoundation.org/project/webpack) -
- - - - - - - - install size - - - - - - - - - - - - -

webpack

- webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset. + Webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

-

Install

+## Table of Contents + +- [Install](#install) +- [Introduction](#introduction) +- [Concepts](#concepts) +- [Contributing](#contributing) +- [Support](#support) +- [Current project members](#current-project-members) + - [TSC (Technical Steering Committee)](#tsc-technical-steering-committee) + - [Core Collaborators](#core-collaborators) +- [Sponsoring](#sponsoring) + - [Premium Partners](#premium-partners) + - [Gold Sponsors](#gold-sponsors) + - [Silver Sponsors](#silver-sponsors) + - [Bronze Sponsors](#bronze-sponsors) + - [Backers](#backers) +- [Special Thanks](#special-thanks-to) + +## Install Install with npm: @@ -56,356 +61,274 @@ Install with yarn: yarn add webpack --dev ``` -

Introduction

- -> This README reflects webpack v2.x and v3.x. The webpack v1.x documentation has been deprecated and deleted. +## Introduction -webpack is a bundler for modules. The main purpose is to bundle JavaScript +Webpack is a bundler for modules. The main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset. **TL;DR** -* Bundles [ES Modules](http://www.2ality.com/2014/09/es6-modules-final.html), [CommonJS](http://wiki.commonjs.org/), and [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) modules (even combined). -* Can create a single bundle or multiple chunks that are asynchronously loaded at runtime (to reduce initial loading time). -* Dependencies are resolved during compilation, reducing the runtime size. -* Loaders can preprocess files while compiling, e.g. TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc. -* Highly modular plugin system to do whatever else your application requires. +- Bundles [ES Modules](https://www.2ality.com/2014/09/es6-modules-final.html), [CommonJS](https://wiki.commonjs.org/), and [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) modules (even combined). +- Can create a single bundle or multiple chunks that are asynchronously loaded at runtime (to reduce initial loading time). +- Dependencies are resolved during compilation, reducing the runtime size. +- Loaders can preprocess files while compiling, e.g. TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc. +- Highly modular plugin system to do whatever else your application requires. + +#### Learn about webpack through videos! + +- [Understanding Webpack - Video 1](https://www.youtube.com/watch?v=xj93pvQIsRo) +- [Understanding Webpack - Video 2](https://www.youtube.com/watch?v=4tQiJaFzuJ8) ### Get Started -Check out webpack's quick [**Get Started**](https://webpack.js.org/get-started/) guide and the [other guides](https://webpack.js.org/guides/). +Check out webpack's quick [**Get Started**](https://webpack.js.org/guides/getting-started) guide and the [other guides](https://webpack.js.org/guides/). ### Browser Compatibility -webpack supports all browsers that are [ES5-compliant](http://kangax.github.io/compat-table/es5/) (IE8 and below are not supported). -webpack also needs `Promise` for `import()` and `require.ensure()`. If you want to support older browsers, you will need to [load a polyfill](https://webpack.js.org/guides/shimming/) before using these expressions. +Webpack supports all browsers that are [ES5-compliant](https://kangax.github.io/compat-table/es5/) (IE8 and below are not supported). +Webpack also needs `Promise` for `import()` and `require.ensure()`. If you want to support older browsers, you will need to [load a polyfill](https://webpack.js.org/guides/shimming/) before using these expressions. -

Concepts

+## Concepts ### [Plugins](https://webpack.js.org/plugins/) -webpack has a [rich plugin +Webpack has a [rich plugin interface](https://webpack.js.org/plugins/). Most of the features within webpack itself use this plugin interface. This makes webpack very **flexible**. -|Name|Status|Install Size|Description| -|:--:|:----:|:----------:|:----------| -|[extract-text-webpack-plugin][extract]|![extract-npm]|![extract-size]|Extracts Text (CSS) from your bundles into a separate file (app.bundle.css)| -|[compression-webpack-plugin][compression]|![compression-npm]|![compression-size]|Prepares compressed versions of assets to serve them with Content-Encoding| -|[i18n-webpack-plugin][i18n]|![i18n-npm]|![i18n-size]|Adds i18n support to your bundles| -|[html-webpack-plugin][html-plugin]|![html-plugin-npm]|![html-plugin-size]| Simplifies creation of HTML files (`index.html`) to serve your bundles| - +| Name | Status | Install Size | Description | +| :---------------------------------------: | :----------------: | :-----------------: | :-------------------------------------------------------------------------------------- | +| [mini-css-extract-plugin][mini-css] | ![mini-css-npm] | ![mini-css-size] | Extracts CSS into separate files. It creates a CSS file per JS file which contains CSS. | +| [compression-webpack-plugin][compression] | ![compression-npm] | ![compression-size] | Prepares compressed versions of assets to serve them with Content-Encoding | +| [html-bundler-webpack-plugin][bundler] | ![bundler-npm] | ![bundler-size] | Renders a template (EJS, Handlebars, Pug) with referenced source asset files into HTML. | +| [html-webpack-plugin][html-plugin] | ![html-plugin-npm] | ![html-plugin-size] | Simplifies creation of HTML files (`index.html`) to serve your bundles | +| [pug-plugin][pug-plugin] | ![pug-plugin-npm] | ![pug-plugin-size] | Renders Pug files to HTML, extracts JS and CSS from sources specified directly in Pug. | [common-npm]: https://img.shields.io/npm/v/webpack.svg -[extract]: https://github.com/webpack/extract-text-webpack-plugin -[extract-npm]: https://img.shields.io/npm/v/extract-text-webpack-plugin.svg -[extract-size]: https://packagephobia.now.sh/badge?p=extract-text-webpack-plugin -[component]: https://github.com/webpack/component-webpack-plugin +[mini-css]: https://github.com/webpack-contrib/mini-css-extract-plugin +[mini-css-npm]: https://img.shields.io/npm/v/mini-css-extract-plugin.svg +[mini-css-size]: https://packagephobia.com/badge?p=mini-css-extract-plugin +[component]: https://github.com/webpack-contrib/component-webpack-plugin [component-npm]: https://img.shields.io/npm/v/component-webpack-plugin.svg -[component-size]: https://packagephobia.now.sh/badge?p=component-webpack-plugin -[compression]: https://github.com/webpack/compression-webpack-plugin +[component-size]: https://packagephobia.com/badge?p=component-webpack-plugin +[compression]: https://github.com/webpack-contrib/compression-webpack-plugin [compression-npm]: https://img.shields.io/npm/v/compression-webpack-plugin.svg -[compression-size]: https://packagephobia.now.sh/badge?p=compression-webpack-plugin -[i18n]: https://github.com/webpack/i18n-webpack-plugin -[i18n-npm]: https://img.shields.io/npm/v/i18n-webpack-plugin.svg -[i18n-size]: https://packagephobia.now.sh/badge?p=i18n-webpack-plugin -[html-plugin]: https://github.com/ampedandwired/html-webpack-plugin +[compression-size]: https://packagephobia.com/badge?p=compression-webpack-plugin +[bundler]: https://github.com/webdiscus/html-bundler-webpack-plugin +[bundler-npm]: https://img.shields.io/npm/v/html-bundler-webpack-plugin.svg +[bundler-size]: https://packagephobia.com/badge?p=html-bundler-webpack-plugin +[html-plugin]: https://github.com/jantimon/html-webpack-plugin [html-plugin-npm]: https://img.shields.io/npm/v/html-webpack-plugin.svg -[html-plugin-size]: https://packagephobia.now.sh/badge?p=html-webpack-plugin +[html-plugin-size]: https://packagephobia.com/badge?p=html-webpack-plugin +[pug-plugin]: https://github.com/webdiscus/pug-plugin +[pug-plugin-npm]: https://img.shields.io/npm/v/pug-plugin.svg +[pug-plugin-size]: https://packagephobia.com/badge?p=pug-plugin ### [Loaders](https://webpack.js.org/loaders/) -webpack enables use of loaders to preprocess files. This allows you to bundle +Webpack enables the use of loaders to preprocess files. This allows you to bundle **any static resource** way beyond JavaScript. You can easily [write your own loaders](https://webpack.js.org/api/loaders/) using Node.js. Loaders are activated by using `loadername!` prefixes in `require()` statements, or are automatically applied via regex from your webpack configuration. -#### Files - -|Name|Status|Install Size|Description| -|:--:|:----:|:----------:|:----------| -|[raw-loader][raw]|![raw-npm]|![raw-size]|Loads raw content of a file (utf-8)| -|[val-loader][val]|![val-npm]|![val-size]|Executes code as module and considers exports as JS code| -|[url-loader][url]|![url-npm]|![url-size]|Works like the file loader, but can return a Data Url if the file is smaller than a limit| -|[file-loader][file]|![file-npm]|![file-size]|Emits the file into the output folder and returns the (relative) url| - - -[raw]: https://github.com/webpack/raw-loader -[raw-npm]: https://img.shields.io/npm/v/raw-loader.svg -[raw-size]: https://packagephobia.now.sh/badge?p=raw-loader -[val]: https://github.com/webpack/val-loader -[val-npm]: https://img.shields.io/npm/v/val-loader.svg -[val-size]: https://packagephobia.now.sh/badge?p=val-loader -[url]: https://github.com/webpack/url-loader -[url-npm]: https://img.shields.io/npm/v/url-loader.svg -[url-size]: https://packagephobia.now.sh/badge?p=url-loader -[file]: https://github.com/webpack/file-loader -[file-npm]: https://img.shields.io/npm/v/file-loader.svg -[file-size]: https://packagephobia.now.sh/badge?p=file-loader - #### JSON -|Name|Status|Install Size|Description| -|:--:|:----:|:----------:|:----------| -||![json-npm]|![json-size]|Loads a JSON file (included by default)| -||![json5-npm]|![json5-size]|Loads and transpiles a JSON 5 file| -||![cson-npm]|![cson-size]|Loads and transpiles a CSON file| +| Name | Status | Install Size | Description | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------: | :----------: | :------------------------------: | +| | ![cson-npm] | ![cson-size] | Loads and transpiles a CSON file | - -[json-npm]: https://img.shields.io/npm/v/json-loader.svg -[json-size]: https://packagephobia.now.sh/badge?p=json-loader -[json5-npm]: https://img.shields.io/npm/v/json5-loader.svg -[json5-size]: https://packagephobia.now.sh/badge?p=json5-loader [cson-npm]: https://img.shields.io/npm/v/cson-loader.svg -[cson-size]: https://packagephobia.now.sh/badge?p=cson-loader +[cson-size]: https://packagephobia.com/badge?p=cson-loader #### Transpiling -|Name|Status|Install Size|Description| -|:--:|:----:|:----------:|:----------| -|` + + diff --git a/examples/asset-svg-data-uri/template.md b/examples/asset-svg-data-uri/template.md new file mode 100644 index 00000000000..03002aeaea9 --- /dev/null +++ b/examples/asset-svg-data-uri/template.md @@ -0,0 +1,29 @@ +This example shows the usage of the asset module type with asset generator options customization. + +Files can be imported similar to other modules without file-loader or url-loader. + +# example.js + +```javascript +_{{example.js}}_ +``` + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# js/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# Info + +## webpack output + +``` +_{{stdout}}_ +``` diff --git a/examples/asset-svg-data-uri/webpack.config.js b/examples/asset-svg-data-uri/webpack.config.js new file mode 100644 index 00000000000..183b23a7017 --- /dev/null +++ b/examples/asset-svg-data-uri/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +const svgToMiniDataURI = require("mini-svg-data-uri"); + +/** @type {import("webpack").Configuration} */ +const config = { + output: { + assetModuleFilename: "images/[hash][ext]" + }, + module: { + rules: [ + { + test: /\.(png|jpg)$/, + type: "asset" + }, + { + test: /\.svg$/, + type: "asset", + generator: { + /** + * @param {string | Buffer} content the content + * @returns {string} data URI + */ + dataUrl: (content) => { + if (typeof content !== "string") { + content = content.toString(); + } + + return svgToMiniDataURI(content); + } + } + } + ] + } +}; + +module.exports = config; diff --git a/examples/asset/README.md b/examples/asset/README.md new file mode 100644 index 00000000000..928bf80d1df --- /dev/null +++ b/examples/asset/README.md @@ -0,0 +1,506 @@ +This is a very simple example that shows the usage of the asset module type. + +Files can be imported like other modules without file-loader. + +# example.js + +```javascript +// There are different ways to use files: + +// 1. Using `import something from "./file.ext";` + +// return URLs or Data URL, depends on your configuration +import png from "./images/file.png"; +import jpg from "./images/file.jpg"; +import svg from "./images/file.svg"; + +// 2. Using `import something from "./file.ext"; with { type: "text" }` or `import something from "./file.ext"; with { type: "bytes" }` +// You don't need extra options in your configuration for these imports, they work out of the box + +// returns the content as text +import text from "./content/file.text" with { type: "text" }; + +// returns the content as `Uint8Array` +import bytes from "./content/bytes.svg" with { type: "bytes" }; + +// 3. Using `new URL("./file.ext", import.meta.url);` +// You don't need extra options in your configuration for `new URL(...)` construction, they work out of the box +const url = new URL("./images/url.svg", import.meta.url); + +const container = document.createElement("div"); + +Object.assign(container.style, { + display: "flex", + flexWrap: "wrap", + justifyContent: "center" +}); +document.body.appendChild(container); + +function createImageElement(div, data) { + const img = document.createElement("img"); + img.setAttribute("src", data); + img.setAttribute("width", "150"); + div.appendChild(img); + + container.appendChild(div); +} + +function createTextElement(div, data) { + const context = document.createElement("div"); + context.textContent = data; + div.appendChild(context); + + container.appendChild(div); +} + +function createBlobElement(div, data) { + const blob = new Blob([data], { type: 'image/svg+xml' }); + const blobUrl = URL.createObjectURL(blob); + + const img = document.createElement("img"); + + img.setAttribute("src", blobUrl); + img.setAttribute("width", "150"); + div.appendChild(img); + + container.appendChild(div); + + img.addEventListener( + 'load', + () => { URL.revokeObjectURL(blobUrl) }, + { once: true } + ); +} + +const files = [ + { + title: "import png from \"./images/file.png\";", + data: png, + render: createImageElement, + }, + { + title: "import jpg from \"./images/file.jpg\";", + data: jpg, + render: createImageElement, + }, + { + title: "import svg from \"./images/file.svg\";", + data: svg, + render: createImageElement, + }, + { + title: "import text from \"./content/file.text\" with { type: \"text\" };", + data: text, + render: createTextElement, + }, + { + title: "import bytes from \"./content/file.text\" with { type: \"bytes\" };", + data: bytes, + render: createBlobElement, + }, + { + title: "new URL(\"./url.svg\", import.meta.url);", + data: url, + render: createImageElement, + }, +]; + + +function render(title, data, fn) { + const div = document.createElement("div"); + div.style.textAlign = "center"; + div.style.width = "50%"; + + const h2 = document.createElement("h2"); + h2.textContent = title; + div.appendChild(h2); + + fn(div, data) +} + +files.forEach(item => { + render(item.title, item.data, item.render); +}); +``` + +# webpack.config.js + +```javascript +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + output: { + assetModuleFilename: "images/[hash][ext]" + }, + module: { + rules: [ + { + test: /file\.(png|jpg|svg)$/, + type: "asset" + } + ] + } +}; + +module.exports = config; +``` + +# js/output.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!*************************!*\ + !*** ./images/file.png ***! + \*************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__.p, module, __webpack_require__.* */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__.p + "images/89a353e9c515885abd8e.png"; + +/***/ }), +/* 2 */ +/*!*************************!*\ + !*** ./images/file.jpg ***! + \*************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +module.exports = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAA...4CD/9M//Z"; + +/***/ }), +/* 3 */ +/*!*************************!*\ + !*** ./images/file.svg ***! + \*************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo...vc3ZnPgo="; + +/***/ }), +/* 4 */ +/*!************************!*\ + !*** ./images/url.svg ***! + \************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__.p, module, __webpack_require__.* */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__.p + "images/afc10c70ed4ce2b33593.svg"; + +/***/ }), +/* 5 */ +/*!***************************!*\ + !*** ./content/file.text ***! + \***************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +module.exports = "a Ā 𐀀 文 🦄 Text\n"; + +/***/ }), +/* 6 */ +/*!***************************!*\ + !*** ./content/bytes.svg ***! + \***************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__.*, __webpack_require__.tb, module */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__.tb("PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo="); + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/to binary */ +/******/ (() => { +/******/ // define to binary helper +/******/ const toImmutableBytes = (value) => { +/******/ var {buffer} = value; +/******/ const throwErr = () => { +/******/ throw new TypeError('ArrayBuffer is immutable'); +/******/ }; +/******/ Object.defineProperties(buffer, { immutable: { value: true }, resize: { value: throwErr }, transfer: { value: throwErr }, transferToFixedLength: { value: throwErr } }); +/******/ Object.freeze(buffer); +/******/ return value; +/******/ } +/******/ __webpack_require__.tb = (() => { +/******/ const table = new Uint8Array(128); +/******/ for (var i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i; +/******/ return (base64) => { +/******/ const n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == '=') - (base64[n - 2] == '=')) * 3 / 4 | 0); +/******/ for (var i = 0, j = 0; i < n;) { +/******/ const c0 = table[base64.charCodeAt(i++)], c1 = table[base64.charCodeAt(i++)]; +/******/ const c2 = table[base64.charCodeAt(i++)], c3 = table[base64.charCodeAt(i++)]; +/******/ bytes[j++] = (c0 << 2) | (c1 >> 4); +/******/ bytes[j++] = (c1 << 4) | (c2 >> 2); +/******/ bytes[j++] = (c2 << 6) | c3; +/******/ } +/******/ return toImmutableBytes(bytes) +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ __webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 0: 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // no jsonp function +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.b, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _images_file_png__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./images/file.png */ 1); +/* harmony import */ var _images_file_jpg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./images/file.jpg */ 2); +/* harmony import */ var _images_file_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./images/file.svg */ 3); +/* harmony import */ var _content_file_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./content/file.text */ 5); +/* harmony import */ var _content_bytes_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./content/bytes.svg */ 6); +// There are different ways to use files: + +// 1. Using `import something from "./file.ext";` + +// return URLs or Data URL, depends on your configuration + + + + +// 2. Using `import something from "./file.ext"; with { type: "text" }` or `import something from "./file.ext"; with { type: "bytes" }` +// You don't need extra options in your configuration for these imports, they work out of the box + +// returns the content as text + + +// returns the content as `Uint8Array` + + +// 3. Using `new URL("./file.ext", import.meta.url);` +// You don't need extra options in your configuration for `new URL(...)` construction, they work out of the box +const url = new URL(/* asset import */ __webpack_require__(/*! ./images/url.svg */ 4), __webpack_require__.b); + +const container = document.createElement("div"); + +Object.assign(container.style, { + display: "flex", + flexWrap: "wrap", + justifyContent: "center" +}); +document.body.appendChild(container); + +function createImageElement(div, data) { + const img = document.createElement("img"); + img.setAttribute("src", data); + img.setAttribute("width", "150"); + div.appendChild(img); + + container.appendChild(div); +} + +function createTextElement(div, data) { + const context = document.createElement("div"); + context.textContent = data; + div.appendChild(context); + + container.appendChild(div); +} + +function createBlobElement(div, data) { + const blob = new Blob([data], { type: 'image/svg+xml' }); + const blobUrl = URL.createObjectURL(blob); + + const img = document.createElement("img"); + + img.setAttribute("src", blobUrl); + img.setAttribute("width", "150"); + div.appendChild(img); + + container.appendChild(div); + + img.addEventListener( + 'load', + () => { URL.revokeObjectURL(blobUrl) }, + { once: true } + ); +} + +const files = [ + { + title: "import png from \"./images/file.png\";", + data: _images_file_png__WEBPACK_IMPORTED_MODULE_0__, + render: createImageElement, + }, + { + title: "import jpg from \"./images/file.jpg\";", + data: _images_file_jpg__WEBPACK_IMPORTED_MODULE_1__, + render: createImageElement, + }, + { + title: "import svg from \"./images/file.svg\";", + data: _images_file_svg__WEBPACK_IMPORTED_MODULE_2__, + render: createImageElement, + }, + { + title: "import text from \"./content/file.text\" with { type: \"text\" };", + data: _content_file_text__WEBPACK_IMPORTED_MODULE_3__, + render: createTextElement, + }, + { + title: "import bytes from \"./content/file.text\" with { type: \"bytes\" };", + data: _content_bytes_svg__WEBPACK_IMPORTED_MODULE_4__, + render: createBlobElement, + }, + { + title: "new URL(\"./url.svg\", import.meta.url);", + data: url, + render: createImageElement, + }, +]; + + +function render(title, data, fn) { + const div = document.createElement("div"); + div.style.textAlign = "center"; + div.style.width = "50%"; + + const h2 = document.createElement("h2"); + h2.textContent = title; + div.appendChild(h2); + + fn(div, data) +} + +files.forEach(item => { + render(item.title, item.data, item.render); +}); + +})(); + +/******/ })() +; +``` + +# Info + +## webpack output + +``` +asset output.js 20 KiB [emitted] (name: main) +asset images/89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: images/file.png] (auxiliary name: main) +asset images/afc10c70ed4ce2b33593.svg 656 bytes [emitted] [immutable] [from: images/url.svg] (auxiliary name: main) +chunk (runtime: main) output.js (main) 12.4 KiB (javascript) 15.2 KiB (asset) 1.85 KiB (runtime) [entry] [rendered] + > ./example.js main + dependent modules 9.59 KiB (javascript) 15.2 KiB (asset) [dependent] 6 modules + runtime modules 1.85 KiB 5 modules + ./example.js 2.85 KiB [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/asset/build.js b/examples/asset/build.js new file mode 100644 index 00000000000..2e93fe5a3e1 --- /dev/null +++ b/examples/asset/build.js @@ -0,0 +1 @@ +require("../build-common"); diff --git a/examples/asset/content/bytes.svg b/examples/asset/content/bytes.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/examples/asset/content/bytes.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/examples/asset/content/file.text b/examples/asset/content/file.text new file mode 100644 index 00000000000..3058aaa1fc0 --- /dev/null +++ b/examples/asset/content/file.text @@ -0,0 +1 @@ +a Ā 𐀀 文 🦄 Text diff --git a/examples/asset/example.js b/examples/asset/example.js new file mode 100644 index 00000000000..7746b705d0d --- /dev/null +++ b/examples/asset/example.js @@ -0,0 +1,116 @@ +// There are different ways to use files: + +// 1. Using `import something from "./file.ext";` + +// return URLs or Data URL, depends on your configuration +import png from "./images/file.png"; +import jpg from "./images/file.jpg"; +import svg from "./images/file.svg"; + +// 2. Using `import something from "./file.ext"; with { type: "text" }` or `import something from "./file.ext"; with { type: "bytes" }` +// You don't need extra options in your configuration for these imports, they work out of the box + +// returns the content as text +import text from "./content/file.text" with { type: "text" }; + +// returns the content as `Uint8Array` +import bytes from "./content/bytes.svg" with { type: "bytes" }; + +// 3. Using `new URL("./file.ext", import.meta.url);` +// You don't need extra options in your configuration for `new URL(...)` construction, they work out of the box +const url = new URL("./images/url.svg", import.meta.url); + +const container = document.createElement("div"); + +Object.assign(container.style, { + display: "flex", + flexWrap: "wrap", + justifyContent: "center" +}); +document.body.appendChild(container); + +function createImageElement(div, data) { + const img = document.createElement("img"); + img.setAttribute("src", data); + img.setAttribute("width", "150"); + div.appendChild(img); + + container.appendChild(div); +} + +function createTextElement(div, data) { + const context = document.createElement("div"); + context.textContent = data; + div.appendChild(context); + + container.appendChild(div); +} + +function createBlobElement(div, data) { + const blob = new Blob([data], { type: 'image/svg+xml' }); + const blobUrl = URL.createObjectURL(blob); + + const img = document.createElement("img"); + + img.setAttribute("src", blobUrl); + img.setAttribute("width", "150"); + div.appendChild(img); + + container.appendChild(div); + + img.addEventListener( + 'load', + () => { URL.revokeObjectURL(blobUrl) }, + { once: true } + ); +} + +const files = [ + { + title: "import png from \"./images/file.png\";", + data: png, + render: createImageElement, + }, + { + title: "import jpg from \"./images/file.jpg\";", + data: jpg, + render: createImageElement, + }, + { + title: "import svg from \"./images/file.svg\";", + data: svg, + render: createImageElement, + }, + { + title: "import text from \"./content/file.text\" with { type: \"text\" };", + data: text, + render: createTextElement, + }, + { + title: "import bytes from \"./content/file.text\" with { type: \"bytes\" };", + data: bytes, + render: createBlobElement, + }, + { + title: "new URL(\"./url.svg\", import.meta.url);", + data: url, + render: createImageElement, + }, +]; + + +function render(title, data, fn) { + const div = document.createElement("div"); + div.style.textAlign = "center"; + div.style.width = "50%"; + + const h2 = document.createElement("h2"); + h2.textContent = title; + div.appendChild(h2); + + fn(div, data) +} + +files.forEach(item => { + render(item.title, item.data, item.render); +}); diff --git a/examples/asset/images/file.jpg b/examples/asset/images/file.jpg new file mode 100644 index 00000000000..fe5c6eefa79 Binary files /dev/null and b/examples/asset/images/file.jpg differ diff --git a/examples/asset/images/file.png b/examples/asset/images/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/examples/asset/images/file.png differ diff --git a/examples/asset/images/file.svg b/examples/asset/images/file.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/examples/asset/images/file.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/examples/asset/images/url.svg b/examples/asset/images/url.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/examples/asset/images/url.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/examples/asset/index.html b/examples/asset/index.html new file mode 100644 index 00000000000..d1fb49339c9 --- /dev/null +++ b/examples/asset/index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/asset/template.md b/examples/asset/template.md new file mode 100644 index 00000000000..598823d5fa0 --- /dev/null +++ b/examples/asset/template.md @@ -0,0 +1,29 @@ +This is a very simple example that shows the usage of the asset module type. + +Files can be imported like other modules without file-loader. + +# example.js + +```javascript +_{{example.js}}_ +``` + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# js/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# Info + +## webpack output + +``` +_{{stdout}}_ +``` diff --git a/examples/asset/webpack.config.js b/examples/asset/webpack.config.js new file mode 100644 index 00000000000..d0952d56cd1 --- /dev/null +++ b/examples/asset/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + output: { + assetModuleFilename: "images/[hash][ext]" + }, + module: { + rules: [ + { + test: /file\.(png|jpg|svg)$/, + type: "asset" + } + ] + } +}; + +module.exports = config; diff --git a/examples/build-common.js b/examples/build-common.js index afca1e4d7c4..a477edc7d46 100644 --- a/examples/build-common.js +++ b/examples/build-common.js @@ -5,47 +5,174 @@ "use strict"; const cp = require("child_process"); -const path = require("path"); -const tc = require("./template-common"); const fs = require("fs"); +const path = require("path"); const async = require("neo-async"); +const tc = require("./template-common"); const extraArgs = ""; -const targetArgs = global.NO_TARGET_ARGS ? "" : " ./example.js -o dist/output.js "; -const displayReasons = global.NO_REASONS ? "" : " --display-reasons --display-used-exports --display-provided-exports"; -const commonArgs = `--display-chunks --display-max-modules 99999 --display-origins --display-entrypoints --output-public-path "dist/" ${extraArgs} ${targetArgs}`; +/** + * @typedef {object} GlobalObj + * @property {boolean=} NO_TARGET_ARGS no target args flag + * @property {boolean=} NO_REASONS no stats reasons flag + * @property {boolean=} NO_STATS_OPTIONS no stats options flag + * @property {boolean=} NO_PUBLIC_PATH no public path flag + * @property {boolean=} STATS_COLORS no stats color flag + */ + +const globalObj = /** @type {typeof globalThis & GlobalObj} */ (global); + +const targetArgs = globalObj.NO_TARGET_ARGS + ? "" + : "--entry ./example.js --output-filename output.js"; +const displayReasons = globalObj.NO_REASONS + ? "" + : "--stats-reasons --stats-used-exports --stats-provided-exports"; +const statsArgs = globalObj.NO_STATS_OPTIONS + ? "" + : "--stats-chunks --stats-modules-space 99999 --stats-chunk-origins"; +const publicPathArgs = globalObj.NO_PUBLIC_PATH + ? "" + : '--output-public-path "dist/"'; +const statsColorsArg = globalObj.STATS_COLORS ? "" : "--no-color"; -let readme = fs.readFileSync(require("path").join(process.cwd(), "template.md"), "utf-8"); +const commonArgs = `${statsColorsArg} ${statsArgs} ${publicPathArgs} ${extraArgs} ${targetArgs}`; + +let readme = fs.readFileSync( + require("path").join(process.cwd(), "template.md"), + "utf8" +); + +/** + * @param {string} args args + * @param {string} prefix prefix + * @param {() => void} callback callback + */ const doCompileAndReplace = (args, prefix, callback) => { - if(!tc.needResults(readme, prefix)) { + if (!tc.needResults(readme, prefix)) { callback(); return; } - if(fs.existsSync("dist")) - for(const file of fs.readdirSync("dist")) - fs.unlinkSync(`dist/${file}`); - cp.exec(`node ${path.resolve(__dirname, "../bin/webpack.js")} ${args} ${displayReasons} ${commonArgs}`, (error, stdout, stderr) => { - if(stderr) - console.log(stderr); - if(error !== null) - console.log(error); - try { - readme = tc.replaceResults(readme, process.cwd(), stdout.replace(/[\r?\n]*$/, ""), prefix); - } catch(e) { - console.log(stderr); - throw e; + + /** + * @param {string} dir the directory for deleting + */ + const deleteFiles = (dir) => { + const targetDir = path.resolve("dist", dir); + + if (path.extname(targetDir) === "") { + for (const file of fs.readdirSync(targetDir)) { + deleteFiles(path.join(targetDir, file)); + } + } else { + fs.unlinkSync(targetDir); } - callback(); - }); + }; + + if (fs.existsSync("dist")) { + for (const dir of fs.readdirSync("dist")) { + deleteFiles(dir); + } + } + + try { + require.resolve("webpack-cli"); + } catch (err) { + throw new Error("Please install webpack-cli at root.", { cause: err }); + } + + /** + * @param {import("child_process").ChildProcess} subprocess a subprocess + */ + const connectIO = (subprocess) => { + const { stdin, stdout, stderr } = process; + const { stdin: _stdin, stdout: _stdout, stderr: _stderr } = subprocess; + /** @type {[NodeJS.ReadStream, import("stream").Writable][]} */ + const inputPair = [ + [stdin, /** @type {import("stream").Writable} */ (_stdin)] + ]; + /** @type {[NodeJS.WritableStream, import("stream").Readable][]} */ + const outputPair = [ + [stdout, /** @type {import("stream").Readable} */ (_stdout)], + [stderr, /** @type {import("stream").Readable} */ (_stderr)] + ]; + for (const pair of inputPair) { + pair[0].pipe(pair[1]); + } + for (const pair of outputPair) { + pair[1].pipe(pair[0]); + } + disconnectIO = () => { + for (const pair of inputPair) { + pair[0].unpipe(pair[1]); + } + for (const pair of outputPair) { + pair[1].unpipe(pair[0]); + } + }; + }; + /** @type {null | (() => void)} */ + let disconnectIO = null; + + const subprocess = cp.exec( + `node ${path.resolve(__dirname, "../bin/webpack.js")} ${args} ${displayReasons} ${commonArgs}`, + (error, stdout, stderr) => { + // eslint-disable-next-line no-unused-expressions + disconnectIO && disconnectIO(); + if (stderr) console.log(stderr); + if (error !== null) { + console.log(error); + throw error; + } + try { + readme = tc.replaceResults( + readme, + process.cwd(), + stdout + .replace(/[\r?\n]*$/, "") + .replace( + /\d\d\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])/g, + "XXXX-XX-XX" + ) + .replace(/([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/g, "XXXX:XX:XX") + .replace(/webpack [0-9.]+/g, "webpack X.X.X"), + prefix + ); + } catch (err) { + console.log(stderr); + throw err; + } + callback(); + } + ); + connectIO(subprocess); }; -async.series([ - callback => doCompileAndReplace("--mode production", "production", callback), - callback => doCompileAndReplace("--mode development --devtool none", "development", callback), - callback => doCompileAndReplace("--mode none --output-pathinfo", "", callback) -], () => { - readme = tc.replaceBase(readme); - fs.writeFile("README.md", readme, "utf-8", function() {}); -}); +async.series( + [ + (callback) => + doCompileAndReplace( + "--mode production --env production", + "production", + callback + ), + (callback) => + doCompileAndReplace( + "--mode development --env development --devtool none", + "development", + callback + ), + (callback) => + doCompileAndReplace( + "--mode none --env none --output-pathinfo verbose", + "", + callback + ) + ], + () => { + readme = tc.replaceBase(readme); + fs.writeFile("README.md", readme, "utf8", () => {}); + } +); diff --git a/examples/build-http/README.md b/examples/build-http/README.md new file mode 100644 index 00000000000..2ba246b2cd4 --- /dev/null +++ b/examples/build-http/README.md @@ -0,0 +1,97 @@ +# example.js + +```javascript +import pMap1 from "https://cdn.skypack.dev/p-map"; +import pMap2 from "https://cdn.esm.sh/p-map"; +import pMap3 from "https://jspm.dev/p-map"; +import pMap4 from "https://unpkg.com/p-map-series?module"; // unpkg doesn't support p-map :( +console.log(pMap1); +console.log(pMap2); +console.log(pMap3); +console.log(pMap4); +``` + +# webpack.config.js + +```javascript +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // enable debug logging to see network requests! + // stats: { + // loggingDebug: /HttpUriPlugin/ + // }, + experiments: { + buildHttp: [ + "https://cdn.esm.sh/", + "https://cdn.skypack.dev/", + "https://jspm.dev/", + /^https:\/\/unpkg\.com\/.+\?module$/ + ] + } +}; + +module.exports = config; +``` + +# Info + +## Unoptimized + +``` +asset output.js 82.6 KiB [emitted] (name: main) +runtime modules 670 bytes 3 modules +modules by path https:// 30 KiB + modules by path https://jspm.dev/ 16.1 KiB 12 modules + modules by path https://cdn.esm.sh/ 6.15 KiB + https://cdn.esm.sh/p-map 173 bytes [built] [code generated] + [exports: default, pMapSkip] + [used exports unknown] + harmony side effect evaluation https://cdn.esm.sh/p-map ./example.js 2:0-45 + harmony import specifier https://cdn.esm.sh/p-map ./example.js 6:12-17 + https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js 1.18 KiB [built] [code generated] + [exports: default, pMapSkip] + [used exports unknown] + harmony side effect evaluation https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js https://cdn.esm.sh/p-map 2:0-67 + harmony export imported specifier https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js https://cdn.esm.sh/p-map 2:0-67 + harmony side effect evaluation https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js https://cdn.esm.sh/p-map 3:0-77 + harmony export imported specifier https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js https://cdn.esm.sh/p-map 3:0-77 + + 5 modules + modules by path https://cdn.skypack.dev/ 7.46 KiB + https://cdn.skypack.dev/p-map 757 bytes [built] [code generated] + [exports: default, pMapSkip] + [used exports unknown] + harmony side effect evaluation https://cdn.skypack.dev/p-map ./example.js 1:0-50 + harmony import specifier https://cdn.skypack.dev/p-map ./example.js 5:12-17 + https://cdn.skypack.dev/-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imp...(truncated) 2.29 KiB [built] [code generated] + [exports: default, pMapSkip] + [used exports unknown] + harmony side effect evaluation /-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js https://cdn.skypack.dev/p-map 15:0-97 + harmony export imported specifier /-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js https://cdn.skypack.dev/p-map 15:0-97 + harmony side effect evaluation /-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js https://cdn.skypack.dev/p-map 16:0-105 + harmony export imported specifier /-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js https://cdn.skypack.dev/p-map 16:0-105 + + 4 modules + https://unpkg.com/p-map-series?module 263 bytes [built] [code generated] + [exports: default] + [used exports unknown] + harmony side effect evaluation https://unpkg.com/p-map-series?module ./example.js 4:0-58 + harmony import specifier https://unpkg.com/p-map-series?module ./example.js 8:12-17 +./example.js 314 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset output.js 12.4 KiB [emitted] [minimized] (name: main) +orphan modules 30 KiB [orphan] 26 modules +./example.js + 25 modules 30.2 KiB [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/build-http/build.js b/examples/build-http/build.js new file mode 100644 index 00000000000..1d8b07db18b --- /dev/null +++ b/examples/build-http/build.js @@ -0,0 +1,2 @@ +global.NO_STATS_OPTIONS = true; +require("../build-common"); diff --git a/examples/build-http/example.js b/examples/build-http/example.js new file mode 100644 index 00000000000..4dd7204b019 --- /dev/null +++ b/examples/build-http/example.js @@ -0,0 +1,8 @@ +import pMap1 from "https://cdn.skypack.dev/p-map"; +import pMap2 from "https://cdn.esm.sh/p-map"; +import pMap3 from "https://jspm.dev/p-map"; +import pMap4 from "https://unpkg.com/p-map-series?module"; // unpkg doesn't support p-map :( +console.log(pMap1); +console.log(pMap2); +console.log(pMap3); +console.log(pMap4); diff --git a/examples/build-http/template.md b/examples/build-http/template.md new file mode 100644 index 00000000000..2df3585bde6 --- /dev/null +++ b/examples/build-http/template.md @@ -0,0 +1,25 @@ +# example.js + +```javascript +_{{example.js}}_ +``` + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/build-http/webpack.config.js b/examples/build-http/webpack.config.js new file mode 100644 index 00000000000..8c143f2cbde --- /dev/null +++ b/examples/build-http/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // enable debug logging to see network requests! + // stats: { + // loggingDebug: /HttpUriPlugin/ + // }, + experiments: { + buildHttp: [ + "https://cdn.esm.sh/", + "https://cdn.skypack.dev/", + "https://jspm.dev/", + /^https:\/\/unpkg\.com\/.+\?module$/ + ] + } +}; + +module.exports = config; diff --git a/examples/build-http/webpack.lock b/examples/build-http/webpack.lock new file mode 100644 index 00000000000..f696523fd3e --- /dev/null +++ b/examples/build-http/webpack.lock @@ -0,0 +1,29 @@ +{ + "https://cdn.esm.sh/p-map": { "integrity": "sha512-TfztRxlC5elIRa7x3oz4bfhtxJr5hIhoa+bliQkroNj8haEMPp1mv/eAsfzBt032G1oK6JT6y3135FP0vRh13Q==", "contentType": "application/javascript; charset=utf-8" }, + "https://cdn.esm.sh/v53/aggregate-error@4.0.0/es2015/aggregate-error.js": { "integrity": "sha512-4iHvwySJO0Dn0aenl2XY1XCGEoMZFaJ+PkuO8Op0BRVNwHiZaKrCuMnPZqUblPhvAG2o8SEA4JdB/fhS3IQZLg==", "contentType": "application/javascript" }, + "https://cdn.esm.sh/v53/clean-stack@4.1.0/es2015/clean-stack.js": { "integrity": "sha512-VzcwF50IxKsmW4O2DpY8WB6TmYh9caBctTqA2EkE3p9K8JjITMD/qBNqfVmUKAlmq4CFgI3c0xegzMf1BRWbyQ==", "contentType": "application/javascript" }, + "https://cdn.esm.sh/v53/escape-string-regexp@5.0.0/es2015/escape-string-regexp.js": { "integrity": "sha512-vst7rz+jFlvZMjo5GUzNBSq7QvFoaqOQ+hDq0m40ZJYGts6ptt+QKLZOMDWgoEq3Fabnhiy+hsoIfaHMmVdbSQ==", "contentType": "application/javascript" }, + "https://cdn.esm.sh/v53/indent-string@5.0.0/es2015/indent-string.js": { "integrity": "sha512-o1hDF1EyRTCiDpcxD2i0XpIuHCMFrc9XkKrkMISIaiWpJdKU7HBRhtqXfBcpVfJF1uNAFJ7/1v40vpPH2r7X8w==", "contentType": "application/javascript" }, + "https://cdn.esm.sh/v53/os-browserify@0.3.0/es2015/browser.js": { "integrity": "sha512-8JOZWkDGX6WNFtXIk/aOawVo35LZSIgCdbMrleK4QL8kHcYti2oTjfqfn99AJm6SOUsTt0uY5K808uHAvVe3eA==", "contentType": "application/javascript" }, + "https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js": { "integrity": "sha512-3kEIICBOLKnEn6SNNixOBy+VGgwh0DYtn07yxHfagwiSJV8om7q/37RdHVbQ2pol8B/6oVMHo7Y6YYhmpYKDUA==", "contentType": "application/javascript" }, + "https://cdn.skypack.dev/-/aggregate-error@v4.0.0-rCH8s5R9g4kQQ807o58j/dist=es2020,mode=imports/optimized/aggregate-error.js": { "integrity": "sha512-E5rN3mgPTqyfHSovQ++ZyZWQkMUniuyjbeHHX+E4G3MStEx6TfObScB8tfHeIyuawSp86nVsFfMZjCruD61rdg==", "contentType": "application/javascript; charset=utf-8" }, + "https://cdn.skypack.dev/-/clean-stack@v4.1.0-DgWUKXHVzThBBZtsHXhC/dist=es2020,mode=imports/optimized/clean-stack.js": { "integrity": "sha512-1nEMT4Vc2YLu3EbeBnck7Traj0/D6G9MMSGraGpsoQIMKVuhQjq4gP76X6RxUn5GoiHv90KfrFMSWlbBn26Dhw==", "contentType": "application/javascript; charset=utf-8" }, + "https://cdn.skypack.dev/-/escape-string-regexp@v5.0.0-SUDdAhYOdAgXIYndxZss/dist=es2020,mode=imports/optimized/escape-string-regexp.js": { "integrity": "sha512-54oHYow5obgsKb0twQZMNLvCH2tV5MCOY4YHB0LQH+zVonIAn7JYZseUPWhC3MMkJFK5EkeNWDAX7P2camp27g==", "contentType": "application/javascript; charset=utf-8" }, + "https://cdn.skypack.dev/-/indent-string@v5.0.0-VgKPSgi4hUX5NbF4n3aC/dist=es2020,mode=imports/optimized/indent-string.js": { "integrity": "sha512-lSZAs06jEHkVlPMEeMtKbygGhrSmJUMVmpB6/2ChdG2F0694vRU1v6N12bUyqR5uGbbteTJ7atP5PmPtTVmlcw==", "contentType": "application/javascript; charset=utf-8" }, + "https://cdn.skypack.dev/-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js": { "integrity": "sha512-mZyhNJe8VlqEqafSkUGTooFrKcQPSwVjB3UxAAPqywSFD+age77uTRP6ul8uAMEQ3lllmengXX1q45igRxRcDw==", "contentType": "application/javascript; charset=utf-8" }, + "https://cdn.skypack.dev/p-map": { "integrity": "sha512-FFu6R9j8mrGqTvw8WL37XsWhI9P65XdPD9Jfs/47jiYNdex12f0XJNsIy+fI81PbOkCuEQRgm2nf0P76ieBlag==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:@jspm/core@2.0.0-beta.11/nodelibs/os": { "integrity": "sha512-Jsg9UMzfNTnlPDu6FeftYzdp6XULJwLDI7xFSzULhMqjQUoOIHJhkAToEgr3NnEKCkLZQMIPuBvHAn0ud6gT+w==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:@jspm/core@2.0.0-beta.11/nodelibs/process": { "integrity": "sha512-KIYEmkrnT7TL5EKA5coPbbdoqfL2twHFBVXKTZS+PU5aZFX90yELxZHrm4DhxSQ33FLAWo51/nQLQmqGekWNMw==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:@jspm/core@2/nodelibs/os": { "integrity": "sha512-g2ppEW1AVdbIpc486D0ZmLIR5CtzMITkBwqoBgxvhiIq5/qHP4/unZ7Czk3q8A1UwdTI4wbGzRWndXAUa4/Q0Q==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:aggregate-error@4": { "integrity": "sha512-XfXd6EZ09/SKLmWFFvjPCSkqv0E08IxKc8mFm9mePyLIiEiGyAKokeFt1wql+kG8ikGmI7YqKBsDf07/I31VvA==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:aggregate-error@4.0.0": { "integrity": "sha512-HEobsVYXVCp5H4Z+6qAlKno8XAJwHQrfF4ivR4PHrp4ttM0Yg0zDfOcsjqJOnTP5hEnKR1K6OzQdPfR2r9of4g==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:clean-stack@4": { "integrity": "sha512-3wh/QTJY4tw/GInIcn5I+0hsHSirJi8Tf3kmH85hzQsuwB5k2lghBFZyKZPO7/Ql3muvZeDgN02pYkZap59Qrw==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:clean-stack@4.1.0": { "integrity": "sha512-VgNMH/ju9thH4YuxxA5trzs0u66nzRZhMa43jkhk8q6jxlEBhd7G6ZZxswy2a0ZXiXjPQVhzXfFkAIkY/pxTOg==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:escape-string-regexp@5.0.0": { "integrity": "sha512-Hz7n4npzwf0UgkdjQvLN2HxudnAzllTEM9AzJPlnzf9ktGhkwlFltPQBjEM3xyDHeTj1xI1nYpBSRVQmMCl6bw==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:indent-string@5": { "integrity": "sha512-hjMQ8+LX0q8xe2sCp/DEBJW2MrVFbiDv20pK0PWwENkYCkRlyP5L4t5AUiXLEXfJLUhTVrUfZtf+hmrnGJB/zA==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:indent-string@5.0.0": { "integrity": "sha512-1KRJ7I1gDWWBAXz+NpwQnlJXDiSpaxaftugln1zHywLbqhA/akcZYM6+nTdfSSuQ7wiVong69R5X9l/QKWqO7g==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/npm:p-map@5.1.0": { "integrity": "sha512-Ml4ozElyzZEvq3G61nmeDVjEPVbjNzhWwIfvVcEr0OsUu58yT/ieSJWr6VSSHbNGY8B1IYjJCEO2zFrgIT9plQ==", "contentType": "application/javascript; charset=utf-8" }, + "https://jspm.dev/p-map": { "integrity": "sha512-Ztuu37YpSElOGm1OnAmLzhgTuTSyeDXCudBO94yRDDicb2zwUTIDEaVnHMJ6Gb7AVnKk26uubHB+Hw0XxKRnrw==", "contentType": "application/javascript; charset=utf-8" }, + "https://unpkg.com/p-map-series?module": { "resolved": "https://unpkg.com/p-map-series@3.0.0/index.js?module", "integrity": "sha512-e68FFGx6Hb3/2x4o16EWcd6rdmyiov0OLjPnj2bmc60JrrNowav76umw0Gc5TmT+UOjaJo9Xk2lTGQT1/Y6Jug==", "contentType": "application/javascript; charset=utf-8" }, + "version": 1 +} diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/p-map_9dd32c023fd5f3d3e7f2 b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/p-map_9dd32c023fd5f3d3e7f2 new file mode 100644 index 00000000000..5034fb3895a --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/p-map_9dd32c023fd5f3d3e7f2 @@ -0,0 +1,3 @@ +/* esm.sh - p-map@5.1.0 */ +export * from "https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js"; +export { default } from "https://cdn.esm.sh/v53/p-map@5.1.0/es2015/p-map.js"; diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_aggregate-error_4.0.0_es2015_aggregate-error_ff6bcc1ba33bf3b1810a.js b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_aggregate-error_4.0.0_es2015_aggregate-error_ff6bcc1ba33bf3b1810a.js new file mode 100644 index 00000000000..7d5f29fd065 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_aggregate-error_4.0.0_es2015_aggregate-error_ff6bcc1ba33bf3b1810a.js @@ -0,0 +1,4 @@ +/* esm.sh - esbuild bundle(aggregate-error@4.0.0) es2015 production */ +var l=Object.defineProperty;var f=(n,t,e)=>t in n?l(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var s=(n,t,e)=>(f(n,typeof t!="symbol"?t+"":t,e),e),i=(n,t,e)=>{if(!t.has(n))throw TypeError("Cannot "+e)};var c=(n,t,e)=>(i(n,t,"read from private field"),e?e.call(n):t.get(n)),g=(n,t,e)=>{if(t.has(n))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(n):t.set(n,e)},o=(n,t,e,a)=>(i(n,t,"write to private field"),a?a.call(n,e):t.set(n,e),e);import u from"/v53/indent-string@5.0.0/es2015/indent-string.js";import m from"/v53/clean-stack@4.1.0/es2015/clean-stack.js";var d=n=>n.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g,""),r,p=class extends Error{constructor(t){if(!Array.isArray(t))throw new TypeError(`Expected input to be an Array, got ${typeof t}`);t=t.map(a=>a instanceof Error?a:a!==null&&typeof a=="object"?Object.assign(new Error(a.message),a):new Error(a));let e=t.map(a=>typeof a.stack=="string"?d(m(a.stack)):String(a)).join(` +`);e=` +`+u(e,4);super(e);g(this,r,void 0);s(this,"name","AggregateError");o(this,r,t)}get errors(){return c(this,r).slice()}};r=new WeakMap;export{p as default}; diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_clean-stack_4.1.0_es2015_clean-stack_87b32b37ae264a8e8a1c.js b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_clean-stack_4.1.0_es2015_clean-stack_87b32b37ae264a8e8a1c.js new file mode 100644 index 00000000000..a3c644a1fb2 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_clean-stack_4.1.0_es2015_clean-stack_87b32b37ae264a8e8a1c.js @@ -0,0 +1,4 @@ +/* esm.sh - esbuild bundle(clean-stack@4.1.0) es2015 production */ +import s from"/v53/os-browserify@0.3.0/es2015/browser.js";import i from"/v53/escape-string-regexp@5.0.0/es2015/escape-string-regexp.js";var p=/\s+at.*[(\s](.*)\)?/,l=/^(?:(?:(?:node|node:[\w/]+|(?:(?:node:)?internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)(?:\.js)?:\d+:\d+)|native)/,f=typeof s.homedir=="undefined"?"":s.homedir().replace(/\\/g,"/");function u(n,{pretty:c=!1,basePath:a}={}){let o=a&&new RegExp(`(at | \\()${i(a.replace(/\\/g,"/"))}`,"g");if(typeof n=="string")return n.replace(/\\/g,"/").split(` +`).filter(e=>{let r=e.match(p);if(r===null||!r[1])return!0;let t=r[1];return t.includes(".app/Contents/Resources/electron.asar")||t.includes(".app/Contents/Resources/default_app.asar")?!1:!l.test(t)}).filter(e=>e.trim()!=="").map(e=>(o&&(e=e.replace(o,"$1")),c&&(e=e.replace(p,(r,t)=>r.replace(t,t.replace(f,"~")))),e)).join(` +`)}export{u as default}; diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_escape-string-regexp_5.0.0_es2015_escape-string-regexp_2c814e466860133eca86.js b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_escape-string-regexp_5.0.0_es2015_escape-string-regexp_2c814e466860133eca86.js new file mode 100644 index 00000000000..a70aa3b9a9e --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_escape-string-regexp_5.0.0_es2015_escape-string-regexp_2c814e466860133eca86.js @@ -0,0 +1,2 @@ +/* esm.sh - esbuild bundle(escape-string-regexp@5.0.0) es2015 production */ +function r(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}export{r as default}; diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_indent-string_5.0.0_es2015_indent-string_171b2b5ba89965a085b6.js b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_indent-string_5.0.0_es2015_indent-string_171b2b5ba89965a085b6.js new file mode 100644 index 00000000000..758f021c33e --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_indent-string_5.0.0_es2015_indent-string_171b2b5ba89965a085b6.js @@ -0,0 +1,2 @@ +/* esm.sh - esbuild bundle(indent-string@5.0.0) es2015 production */ +function i(t,e=1,o={}){let{indent:r=" ",includeEmptyLines:n=!1}=o;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(e<0)throw new RangeError(`Expected \`count\` to be at least 0, got \`${e}\``);if(typeof r!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r}\``);if(e===0)return t;let p=n?/^/gm:/^(?!\s*$)/gm;return t.replace(p,r.repeat(e))}export{i as default}; diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_os-browserify_0.3.0_es2015_browser_476a088316baaea08336.js b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_os-browserify_0.3.0_es2015_browser_476a088316baaea08336.js new file mode 100644 index 00000000000..951e12edff7 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_os-browserify_0.3.0_es2015_browser_476a088316baaea08336.js @@ -0,0 +1,3 @@ +/* esm.sh - esbuild bundle(os-browserify@0.3.0/browser) es2015 production */ +var f=Object.create;var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var c=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var d=e=>o(e,"__esModule",{value:!0});var l=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var w=(e,t,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of m(t))!p.call(e,n)&&n!=="default"&&o(e,n,{get:()=>t[n],enumerable:!(i=s(t,n))||i.enumerable});return e},a=e=>w(d(o(e!=null?f(c(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var u=l(r=>{r.endianness=function(){return"LE"};r.hostname=function(){return typeof location!="undefined"?location.hostname:""};r.loadavg=function(){return[]};r.uptime=function(){return 0};r.freemem=function(){return Number.MAX_VALUE};r.totalmem=function(){return Number.MAX_VALUE};r.cpus=function(){return[]};r.type=function(){return"Browser"};r.release=function(){return typeof navigator!="undefined"?navigator.appVersion:""};r.networkInterfaces=r.getNetworkInterfaces=function(){return{}};r.arch=function(){return"javascript"};r.platform=function(){return"browser"};r.tmpdir=r.tmpDir=function(){return"/tmp"};r.EOL=` +`;r.homedir=function(){return"/"}});var b=a(u()),h=a(u()),{endianness:v,hostname:E,loadavg:L,uptime:k,freemem:A,totalmem:I,cpus:N,type:_,release:V,networkInterfaces:x,getNetworkInterfaces:D,arch:M,platform:O,tmpdir:U,tmpDir:X,EOL:j,homedir:B}=b;var export_default=h.default;export{j as EOL,M as arch,N as cpus,export_default as default,v as endianness,A as freemem,D as getNetworkInterfaces,B as homedir,E as hostname,L as loadavg,x as networkInterfaces,O as platform,V as release,X as tmpDir,U as tmpdir,I as totalmem,_ as type,k as uptime}; diff --git a/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_p-map_5.1.0_es2015_p-map_cd0c09542673ea9d78f0.js b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_p-map_5.1.0_es2015_p-map_cd0c09542673ea9d78f0.js new file mode 100644 index 00000000000..8baf6a8521d --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.esm.sh/v53_p-map_5.1.0_es2015_p-map_cd0c09542673ea9d78f0.js @@ -0,0 +1,2 @@ +/* esm.sh - esbuild bundle(p-map@5.1.0) es2015 production */ +var g=(l,s,e)=>new Promise((f,x)=>{var N=t=>{try{n(e.next(t))}catch(r){x(r)}},p=t=>{try{n(e.throw(t))}catch(r){x(r)}},n=t=>t.done?f(t.value):Promise.resolve(t.value).then(N,p);n((e=e.apply(l,s)).next())});import y from"/v53/aggregate-error@4.0.0/es2015/aggregate-error.js";function S(x,N){return g(this,arguments,function*(l,s,{concurrency:e=Number.POSITIVE_INFINITY,stopOnError:f=!0}={}){return new Promise((p,n)=>{if(typeof s!="function")throw new TypeError("Mapper function is required");if(!((Number.isSafeInteger(e)||e===Number.POSITIVE_INFINITY)&&e>=1))throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${e}\` (${typeof e})`);let t=[],r=[],m=[],h=l[Symbol.iterator](),u=!1,c=!1,a=0,b=0,I=()=>{if(u)return;let i=h.next(),d=b;if(b++,i.done){if(c=!0,a===0)if(!f&&r.length>0)n(new y(r));else{for(let o of m)t.splice(o,1);p(t)}return}a++,(()=>g(this,null,function*(){try{let o=yield i.value;if(u)return;let w=yield s(o,d);w===T?m.push(d):t[d]=w,a--,I()}catch(o){f?(u=!0,n(o)):(r.push(o),a--,I())}}))()};for(let i=0;i { + if (typeof key !== "symbol") + key += ""; + if (key in obj) + return __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}); + return obj[key] = value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var _errors; +import indentString from "/-/indent-string@v5.0.0-VgKPSgi4hUX5NbF4n3aC/dist=es2020,mode=imports/optimized/indent-string.js"; +import cleanStack from "/-/clean-stack@v4.1.0-DgWUKXHVzThBBZtsHXhC/dist=es2020,mode=imports/optimized/clean-stack.js"; +const cleanInternalStack = (stack) => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ""); +class AggregateError extends Error { + constructor(errors) { + _errors.set(this, void 0); + __publicField(this, "name", "AggregateError"); + if (!Array.isArray(errors)) { + throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); + } + errors = errors.map((error) => { + if (error instanceof Error) { + return error; + } + if (error !== null && typeof error === "object") { + return Object.assign(new Error(error.message), error); + } + return new Error(error); + }); + let message = errors.map((error) => { + return typeof error.stack === "string" ? cleanInternalStack(cleanStack(error.stack)) : String(error); + }).join("\n"); + message = "\n" + indentString(message, 4); + super(message); + __privateSet(this, _errors, errors); + } + get errors() { + return __privateGet(this, _errors).slice(); + } +} +_errors = new WeakMap(); +export default AggregateError; diff --git a/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/clean-stack_v4.1.0-DgWUKXHVzThBBZtsHXhC_dist_es2020_mode_imports_optimized_clean-stack_25e0e8c6773c790b5bc1.js b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/clean-stack_v4.1.0-DgWUKXHVzThBBZtsHXhC_dist_es2020_mode_imports_optimized_clean-stack_25e0e8c6773c790b5bc1.js new file mode 100644 index 00000000000..d8afc7bdf1c --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/clean-stack_v4.1.0-DgWUKXHVzThBBZtsHXhC_dist_es2020_mode_imports_optimized_clean-stack_25e0e8c6773c790b5bc1.js @@ -0,0 +1,31 @@ +import escapeStringRegexp from "/-/escape-string-regexp@v5.0.0-SUDdAhYOdAgXIYndxZss/dist=es2020,mode=imports/optimized/escape-string-regexp.js"; +var os = {}; +const extractPathRegex = /\s+at.*[(\s](.*)\)?/; +const pathRegex = /^(?:(?:(?:node|node:[\w/]+|(?:(?:node:)?internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)(?:\.js)?:\d+:\d+)|native)/; +const homeDir = typeof os.homedir === "undefined" ? "" : os.homedir().replace(/\\/g, "/"); +function cleanStack(stack, {pretty = false, basePath} = {}) { + const basePathRegex = basePath && new RegExp(`(at | \\()${escapeStringRegexp(basePath.replace(/\\/g, "/"))}`, "g"); + if (typeof stack !== "string") { + return void 0; + } + return stack.replace(/\\/g, "/").split("\n").filter((line) => { + const pathMatches = line.match(extractPathRegex); + if (pathMatches === null || !pathMatches[1]) { + return true; + } + const match = pathMatches[1]; + if (match.includes(".app/Contents/Resources/electron.asar") || match.includes(".app/Contents/Resources/default_app.asar")) { + return false; + } + return !pathRegex.test(match); + }).filter((line) => line.trim() !== "").map((line) => { + if (basePathRegex) { + line = line.replace(basePathRegex, "$1"); + } + if (pretty) { + line = line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, "~"))); + } + return line; + }).join("\n"); +} +export default cleanStack; diff --git a/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/escape-string-regexp_v5.0.0-SUDdAhYOdAgXIYndxZss_dist_es2020_mode_imports_optimized_escape-string-regexp_95a4ae8a862c0536f335.js b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/escape-string-regexp_v5.0.0-SUDdAhYOdAgXIYndxZss_dist_es2020_mode_imports_optimized_escape-string-regexp_95a4ae8a862c0536f335.js new file mode 100644 index 00000000000..d0aaf2eea76 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/escape-string-regexp_v5.0.0-SUDdAhYOdAgXIYndxZss_dist_es2020_mode_imports_optimized_escape-string-regexp_95a4ae8a862c0536f335.js @@ -0,0 +1,7 @@ +function escapeStringRegexp(string) { + if (typeof string !== "string") { + throw new TypeError("Expected a string"); + } + return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); +} +export default escapeStringRegexp; diff --git a/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/indent-string_v5.0.0-VgKPSgi4hUX5NbF4n3aC_dist_es2020_mode_imports_optimized_indent-string_c9ee21b059896b4e6290.js b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/indent-string_v5.0.0-VgKPSgi4hUX5NbF4n3aC_dist_es2020_mode_imports_optimized_indent-string_c9ee21b059896b4e6290.js new file mode 100644 index 00000000000..307e1901ff0 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/indent-string_v5.0.0-VgKPSgi4hUX5NbF4n3aC_dist_es2020_mode_imports_optimized_indent-string_c9ee21b059896b4e6290.js @@ -0,0 +1,24 @@ +function indentString(string, count = 1, options = {}) { + const { + indent = " ", + includeEmptyLines = false + } = options; + if (typeof string !== "string") { + throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof string}\``); + } + if (typeof count !== "number") { + throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof count}\``); + } + if (count < 0) { + throw new RangeError(`Expected \`count\` to be at least 0, got \`${count}\``); + } + if (typeof indent !== "string") { + throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof indent}\``); + } + if (count === 0) { + return string; + } + const regex = includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + return string.replace(regex, indent.repeat(count)); +} +export default indentString; diff --git a/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/p-map_85ed609042d47e169edd b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/p-map_85ed609042d47e169edd new file mode 100644 index 00000000000..aca926092c6 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/p-map_85ed609042d47e169edd @@ -0,0 +1,16 @@ +/* + * Skypack CDN - p-map@5.1.0 + * + * Learn more: + * 📙 Package Documentation: https://www.skypack.dev/view/p-map + * 📘 Skypack Documentation: https://www.skypack.dev/docs + * + * Pinned URL: (Optimized for Production) + * ▶️ Normal: https://cdn.skypack.dev/pin/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/mode=imports/optimized/p-map.js + * ⏩ Minified: https://cdn.skypack.dev/pin/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/mode=imports,min/optimized/p-map.js + * + */ + +// Browser-Optimized Imports (Don't directly import the URLs below in your application!) +export * from '/-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js'; +export {default} from '/-/p-map@v5.1.0-7ixXvZxXPKKt9unR9LT0/dist=es2020,mode=imports/optimized/p-map.js'; diff --git a/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/p-map_v5.1.0-7ixXvZxXPKKt9unR9LT0_dist_es2020_mode_imports_optimized_p-map_ddf2a76b117954d701e6.js b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/p-map_v5.1.0-7ixXvZxXPKKt9unR9LT0_dist_es2020_mode_imports_optimized_p-map_ddf2a76b117954d701e6.js new file mode 100644 index 00000000000..921f352df03 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_cdn.skypack.dev/p-map_v5.1.0-7ixXvZxXPKKt9unR9LT0_dist_es2020_mode_imports_optimized_p-map_ddf2a76b117954d701e6.js @@ -0,0 +1,79 @@ +import AggregateError from "/-/aggregate-error@v4.0.0-rCH8s5R9g4kQQ807o58j/dist=es2020,mode=imports/optimized/aggregate-error.js"; +async function pMap(iterable, mapper, { + concurrency = Number.POSITIVE_INFINITY, + stopOnError = true +} = {}) { + return new Promise((resolve, reject) => { + if (typeof mapper !== "function") { + throw new TypeError("Mapper function is required"); + } + if (!((Number.isSafeInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency >= 1)) { + throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`); + } + const result = []; + const errors = []; + const skippedIndexes = []; + const iterator = iterable[Symbol.iterator](); + let isRejected = false; + let isIterableDone = false; + let resolvingCount = 0; + let currentIndex = 0; + const next = () => { + if (isRejected) { + return; + } + const nextItem = iterator.next(); + const index = currentIndex; + currentIndex++; + if (nextItem.done) { + isIterableDone = true; + if (resolvingCount === 0) { + if (!stopOnError && errors.length > 0) { + reject(new AggregateError(errors)); + } else { + for (const skippedIndex of skippedIndexes) { + result.splice(skippedIndex, 1); + } + resolve(result); + } + } + return; + } + resolvingCount++; + (async () => { + try { + const element = await nextItem.value; + if (isRejected) { + return; + } + const value = await mapper(element, index); + if (value === pMapSkip) { + skippedIndexes.push(index); + } else { + result[index] = value; + } + resolvingCount--; + next(); + } catch (error) { + if (stopOnError) { + isRejected = true; + reject(error); + } else { + errors.push(error); + resolvingCount--; + next(); + } + } + })(); + }; + for (let index = 0; index < concurrency; index++) { + next(); + if (isIterableDone) { + break; + } + } + }); +} +const pMapSkip = Symbol("skip"); +export default pMap; +export {pMapSkip}; diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_aggregate-error_4.0_50f751f77af91e405af4.0 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_aggregate-error_4.0_50f751f77af91e405af4.0 new file mode 100644 index 00000000000..65063d10575 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_aggregate-error_4.0_50f751f77af91e405af4.0 @@ -0,0 +1,48 @@ +import indentString from './npm:indent-string@5'; +import cleanStack from './npm:clean-stack@4'; + +const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); + +class AggregateError extends Error { + #errors; + + name = 'AggregateError'; + + constructor(errors) { + if (!Array.isArray(errors)) { + throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); + } + + errors = errors.map(error => { + if (error instanceof Error) { + return error; + } + + if (error !== null && typeof error === 'object') { + // Handle plain error objects with message property and/or possibly other metadata + return Object.assign(new Error(error.message), error); + } + + return new Error(error); + }); + + let message = errors + .map(error => { + // The `stack` property is not standardized, so we can't assume it exists + return typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error); + }) + .join('\n'); + message = '\n' + indentString(message, 4); + super(message); + + this.#errors = errors; + } + + get errors() { + return this.#errors.slice(); + } +} + +export default AggregateError; + +//# sourceMappingURL=npm:aggregate-error@4.0.0.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_aggregate-error_4_a354b9220c6e41b430f0 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_aggregate-error_4_a354b9220c6e41b430f0 new file mode 100644 index 00000000000..511f78a97ed --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_aggregate-error_4_a354b9220c6e41b430f0 @@ -0,0 +1,3 @@ +import "/npm:indent-string@5"; +import "/npm:clean-stack@4"; +export { default } from "/npm:aggregate-error@4.0.0"; diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_clean-stack_4.1_b2805ba009abd32b0160.0 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_clean-stack_4.1_b2805ba009abd32b0160.0 new file mode 100644 index 00000000000..8d14e04d2a0 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_clean-stack_4.1_b2805ba009abd32b0160.0 @@ -0,0 +1,52 @@ +import os from './npm:@jspm/core@2/nodelibs/os'; +import escapeStringRegexp from './npm:escape-string-regexp@5.0.0'; + +const extractPathRegex = /\s+at.*[(\s](.*)\)?/; +const pathRegex = /^(?:(?:(?:node|node:[\w/]+|(?:(?:node:)?internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)(?:\.js)?:\d+:\d+)|native)/; +const homeDir = typeof os.homedir === 'undefined' ? '' : os.homedir().replace(/\\/g, '/'); + +function cleanStack(stack, {pretty = false, basePath} = {}) { + const basePathRegex = basePath && new RegExp(`(at | \\()${escapeStringRegexp(basePath.replace(/\\/g, '/'))}`, 'g'); + + if (typeof stack !== 'string') { + return undefined; + } + + return stack.replace(/\\/g, '/') + .split('\n') + .filter(line => { + const pathMatches = line.match(extractPathRegex); + if (pathMatches === null || !pathMatches[1]) { + return true; + } + + const match = pathMatches[1]; + + // Electron + if ( + match.includes('.app/Contents/Resources/electron.asar') || + match.includes('.app/Contents/Resources/default_app.asar') + ) { + return false; + } + + return !pathRegex.test(match); + }) + .filter(line => line.trim() !== '') + .map(line => { + if (basePathRegex) { + line = line.replace(basePathRegex, '$1'); + } + + if (pretty) { + line = line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~'))); + } + + return line; + }) + .join('\n'); +} + +export default cleanStack; + +//# sourceMappingURL=npm:clean-stack@4.1.0.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_clean-stack_4_760ca83301f78911741b b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_clean-stack_4_760ca83301f78911741b new file mode 100644 index 00000000000..256472ccdd7 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_clean-stack_4_760ca83301f78911741b @@ -0,0 +1,3 @@ +import "/npm:@jspm/core@2/nodelibs/os"; +import "/npm:escape-string-regexp@5.0.0"; +export { default } from "/npm:clean-stack@4.1.0"; diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_escape-string-regexp_5.0_703470061c4748c30ba2.0 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_escape-string-regexp_5.0_703470061c4748c30ba2.0 new file mode 100644 index 00000000000..3e1c303b111 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_escape-string-regexp_5.0_703470061c4748c30ba2.0 @@ -0,0 +1,15 @@ +function escapeStringRegexp(string) { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } + + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a `\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); +} + +export default escapeStringRegexp; + +//# sourceMappingURL=npm:escape-string-regexp@5.0.0.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_indent-string_5.0_39c50c3c56a92bbf73ba.0 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_indent-string_5.0_39c50c3c56a92bbf73ba.0 new file mode 100644 index 00000000000..f4ccda81d23 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_indent-string_5.0_39c50c3c56a92bbf73ba.0 @@ -0,0 +1,42 @@ +function indentString(string, count = 1, options = {}) { + const { + indent = ' ', + includeEmptyLines = false + } = options; + + if (typeof string !== 'string') { + throw new TypeError( + `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` + ); + } + + if (typeof count !== 'number') { + throw new TypeError( + `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` + ); + } + + if (count < 0) { + throw new RangeError( + `Expected \`count\` to be at least 0, got \`${count}\`` + ); + } + + if (typeof indent !== 'string') { + throw new TypeError( + `Expected \`options.indent\` to be a \`string\`, got \`${typeof indent}\`` + ); + } + + if (count === 0) { + return string; + } + + const regex = includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + + return string.replace(regex, indent.repeat(count)); +} + +export default indentString; + +//# sourceMappingURL=npm:indent-string@5.0.0.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_indent-string_5_01a4f4bd5c5dc36ce1b7 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_indent-string_5_01a4f4bd5c5dc36ce1b7 new file mode 100644 index 00000000000..f8b9348076a --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_indent-string_5_01a4f4bd5c5dc36ce1b7 @@ -0,0 +1 @@ +export { default } from "/npm:indent-string@5.0.0"; diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2.0.0-beta_12b8110471722e74fcb6.11_nodelibs_process b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2.0.0-beta_12b8110471722e74fcb6.11_nodelibs_process new file mode 100644 index 00000000000..203f79bb446 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2.0.0-beta_12b8110471722e74fcb6.11_nodelibs_process @@ -0,0 +1,277 @@ +function unimplemented(name) { + throw new Error('Node.js process ' + name + ' is not supported by JSPM core outside of Node.js'); +} + +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) + return; + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } + else { + queueIndex = -1; + } + if (queue.length) + drainQueue(); +} + +function drainQueue() { + if (draining) + return; + var timeout = setTimeout(cleanUpNextTick, 0); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) + currentQueue[queueIndex].run(); + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + clearTimeout(timeout); +} + +function nextTick (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) + args[i - 1] = arguments[i]; + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) + setTimeout(drainQueue, 0); +} +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; + +var title = 'browser'; +var arch = 'x64'; +var platform = 'browser'; +var env = { + PATH: '/usr/bin', + LANG: navigator.language + '.UTF-8', + PWD: '/', + HOME: '/home', + TMP: '/tmp', +}; +var argv = ['/usr/bin/node']; +var execArgv = []; +var version = 'v16.8.0'; +var versions = { node: '16.8.0' }; + +var emitWarning = function(message, type) { + console.warn((type ? (type + ': ') : '') + message); +}; + +var binding = function(name) { unimplemented('binding'); }; + +var umask = function(mask) { return 0; }; + +var cwd = function() { return '/'; }; +var chdir = function(dir) {}; + +var release = { + name: 'node', + sourceUrl: '', + headersUrl: '', + libUrl: '', +}; + +function noop() {} + +var _rawDebug = noop; +var moduleLoadList = []; +function _linkedBinding(name) { unimplemented('_linkedBinding'); } +var domain = {}; +var _exiting = false; +var config = {}; +function dlopen(name) { unimplemented('dlopen'); } +function _getActiveRequests() { return []; } +function _getActiveHandles() { return []; } +var reallyExit = noop; +var _kill = noop; +var cpuUsage = function() { return {}; }; +var resourceUsage = cpuUsage; +var memoryUsage = cpuUsage; +var kill = noop; +var exit = noop; +var openStdin = noop; +var allowedNodeEnvironmentFlags = {}; +function assert(condition, message) { + if (!condition) throw new Error(message || 'assertion error'); +} +var features = { + inspector: false, + debug: false, + uv: false, + ipv6: false, + tls_alpn: false, + tls_sni: false, + tls_ocsp: false, + tls: false, + cached_builtins: true, +}; +var _fatalExceptions = noop; +var setUncaughtExceptionCaptureCallback = noop; +function hasUncaughtExceptionCaptureCallback() { return false; }var _tickCallback = noop; +var _debugProcess = noop; +var _debugEnd = noop; +var _startProfilerIdleNotifier = noop; +var _stopProfilerIdleNotifier = noop; +var stdout = undefined; +var stderr = undefined; +var stdin = undefined; +var abort = noop; +var pid = 2; +var ppid = 1; +var execPath = '/bin/usr/node'; +var debugPort = 9229; +var argv0 = 'node'; +var _preload_modules = []; +var setSourceMapsEnabled = noop; + +var _performance = { + now: typeof performance !== 'undefined' ? performance.now.bind(performance) : undefined, + timing: typeof performance !== 'undefined' ? performance.timing : undefined, +}; +if (_performance.now === undefined) { + var nowOffset = Date.now(); + + if (_performance.timing && _performance.timing.navigationStart) { + nowOffset = _performance.timing.navigationStart; + } + _performance.now = () => Date.now() - nowOffset; +} + +function uptime() { + return _performance.now() / 1000; +} + +var nanoPerSec = 1000000000; +function hrtime(previousTimestamp) { + var baseNow = Math.floor((Date.now() - _performance.now()) * 1e-3); + var clocktime = _performance.now() * 1e-3; + var seconds = Math.floor(clocktime) + baseNow; + var nanoseconds = Math.floor((clocktime % 1) * 1e9); + if (previousTimestamp) { + seconds = seconds - previousTimestamp[0]; + nanoseconds = nanoseconds - previousTimestamp[1]; + if (nanoseconds < 0) { + seconds--; + nanoseconds += nanoPerSec; + } + } + return [seconds, nanoseconds]; +}hrtime.bigint = function(time) { + var diff = hrtime(time); + if (typeof BigInt === 'undefined') { + return diff[0] * nanoPerSec + diff[1]; + } + return BigInt(diff[0] * nanoPerSec) + BigInt(diff[1]); +}; + +var _maxListeners = 10; +var _events = {}; +var _eventsCount = 0; +function on () { return process }var addListener = on; +var once = on; +var off = on; +var removeListener = on; +var removeAllListeners = on; +var emit = noop; +var prependListener = on; +var prependOnceListener = on; +function listeners (name) { return []; } +var process = { + version, + versions, + arch, + platform, + release, + _rawDebug, + moduleLoadList, + binding, + _linkedBinding, + _events, + _eventsCount, + _maxListeners, + on, + addListener, + once, + off, + removeListener, + removeAllListeners, + emit, + prependListener, + prependOnceListener, + listeners, + domain, + _exiting, + config, + dlopen, + uptime, + _getActiveRequests, + _getActiveHandles, + reallyExit, + _kill, + cpuUsage, + resourceUsage, + memoryUsage, + kill, + exit, + openStdin, + allowedNodeEnvironmentFlags, + assert, + features, + _fatalExceptions, + setUncaughtExceptionCaptureCallback, + hasUncaughtExceptionCaptureCallback, + emitWarning, + nextTick, + _tickCallback, + _debugProcess, + _debugEnd, + _startProfilerIdleNotifier, + _stopProfilerIdleNotifier, + stdout, + stdin, + stderr, + abort, + umask, + chdir, + cwd, + env, + title, + argv, + execArgv, + pid, + ppid, + execPath, + debugPort, + hrtime, + argv0, + _preload_modules, + setSourceMapsEnabled, +}; + +export { _debugEnd, _debugProcess, _events, _eventsCount, _exiting, _fatalExceptions, _getActiveHandles, _getActiveRequests, _kill, _linkedBinding, _maxListeners, _preload_modules, _rawDebug, _startProfilerIdleNotifier, _stopProfilerIdleNotifier, _tickCallback, abort, addListener, allowedNodeEnvironmentFlags, arch, argv, argv0, assert, binding, chdir, config, cpuUsage, cwd, debugPort, process as default, dlopen, domain, emit, emitWarning, env, execArgv, execPath, exit, features, hasUncaughtExceptionCaptureCallback, hrtime, kill, listeners, memoryUsage, moduleLoadList, nextTick, off, on, once, openStdin, pid, platform, ppid, prependListener, prependOnceListener, reallyExit, release, removeAllListeners, removeListener, resourceUsage, setSourceMapsEnabled, setUncaughtExceptionCaptureCallback, stderr, stdin, stdout, title, umask, uptime, version, versions }; + +//# sourceMappingURL=process.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2.0.0-beta_1620e8f9e144fe702a06.11_nodelibs_os b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2.0.0-beta_1620e8f9e144fe702a06.11_nodelibs_os new file mode 100644 index 00000000000..65ca57a8711 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2.0.0-beta_1620e8f9e144fe702a06.11_nodelibs_os @@ -0,0 +1,113 @@ +import { uptime } from './process'; +export { uptime } from './process'; + +var exports = {}, + _dewExec = false; +function dew() { + if (_dewExec) return exports; + _dewExec = true; + + exports.endianness = function () { + return "LE"; + }; + + exports.hostname = function () { + if (typeof location !== "undefined") { + return location.hostname; + } else return ""; + }; + + exports.loadavg = function () { + return []; + }; + + exports.uptime = function () { + return 0; + }; + + exports.freemem = function () { + return Number.MAX_VALUE; + }; + + exports.totalmem = function () { + return Number.MAX_VALUE; + }; + + exports.cpus = function () { + return []; + }; + + exports.type = function () { + return "Browser"; + }; + + exports.release = function () { + if (typeof navigator !== "undefined") { + return navigator.appVersion; + } + + return ""; + }; + + exports.networkInterfaces = exports.getNetworkInterfaces = function () { + return {}; + }; + + exports.arch = function () { + return "javascript"; + }; + + exports.platform = function () { + return "browser"; + }; + + exports.tmpdir = exports.tmpDir = function () { + return "/tmp"; + }; + + exports.EOL = "\n"; + + exports.homedir = function () { + return "/"; + }; + + return exports; +} + +var os = dew(); + +var _endianness = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1 ? 'LE' : 'BE'; +os.endianness = function() { return _endianness; }; +os.homedir = function() { return '/home'; }; +os.version = function() { return ''; }; +os.arch = function() { return 'x64'; }; +os.totalmem = function() { + return navigator.deviceMemory !== undefined ? navigator.deviceMemory * (1 << 30) : 2 * (1 << 30); +}; +os.cpus = function () { + return Array(navigator.hardwareConcurrency || 0).fill({ model: '', times: {} }); +}; +os.uptime = uptime; +os.constants = {}; +var version = os.version; +var constants = os.constants; +var EOL = os.EOL; +var arch = os.arch; +var cpus = os.cpus; +var endianness = os.endianness; +var freemem = os.freemem; +var getNetworkInterfaces = os.getNetworkInterfaces; +var homedir = os.homedir; +var hostname = os.hostname; +var loadavg = os.loadavg; +var networkInterfaces = os.networkInterfaces; +var platform = os.platform; +var release = os.release; +var tmpDir = os.tmpDir; +var tmpdir = os.tmpdir; +var totalmem = os.totalmem; +var type = os.type; + +export { EOL, arch, constants, cpus, os as default, endianness, freemem, getNetworkInterfaces, homedir, hostname, loadavg, networkInterfaces, platform, release, tmpDir, tmpdir, totalmem, type, version }; + +//# sourceMappingURL=os.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2_nodelibs_os_3fe9447e10c5fed754bb b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2_nodelibs_os_3fe9447e10c5fed754bb new file mode 100644 index 00000000000..4accb6487ef --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_jspm_core_2_nodelibs_os_3fe9447e10c5fed754bb @@ -0,0 +1,3 @@ +import "/npm:@jspm/core@2.0.0-beta.11/nodelibs/process"; +export * from "/npm:@jspm/core@2.0.0-beta.11/nodelibs/os"; +export { default } from "/npm:@jspm/core@2.0.0-beta.11/nodelibs/os"; diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/npm_p-map_5.1_9895e1a83d37d06ab277.0 b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_p-map_5.1_9895e1a83d37d06ab277.0 new file mode 100644 index 00000000000..5166d74476e --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/npm_p-map_5.1_9895e1a83d37d06ab277.0 @@ -0,0 +1,103 @@ +import AggregateError from './npm:aggregate-error@4'; + +async function pMap( + iterable, + mapper, + { + concurrency = Number.POSITIVE_INFINITY, + stopOnError = true + } = {} +) { + return new Promise((resolve, reject) => { + if (typeof mapper !== 'function') { + throw new TypeError('Mapper function is required'); + } + + if (!((Number.isSafeInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency >= 1)) { + throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`); + } + + const result = []; + const errors = []; + const skippedIndexes = []; + const iterator = iterable[Symbol.iterator](); + let isRejected = false; + let isIterableDone = false; + let resolvingCount = 0; + let currentIndex = 0; + + const next = () => { + if (isRejected) { + return; + } + + const nextItem = iterator.next(); + const index = currentIndex; + currentIndex++; + + if (nextItem.done) { + isIterableDone = true; + + if (resolvingCount === 0) { + if (!stopOnError && errors.length > 0) { + reject(new AggregateError(errors)); + } else { + for (const skippedIndex of skippedIndexes) { + result.splice(skippedIndex, 1); + } + + resolve(result); + } + } + + return; + } + + resolvingCount++; + + (async () => { + try { + const element = await nextItem.value; + + if (isRejected) { + return; + } + + const value = await mapper(element, index); + if (value === pMapSkip) { + skippedIndexes.push(index); + } else { + result[index] = value; + } + + resolvingCount--; + next(); + } catch (error) { + if (stopOnError) { + isRejected = true; + reject(error); + } else { + errors.push(error); + resolvingCount--; + next(); + } + } + })(); + }; + + for (let index = 0; index < concurrency; index++) { + next(); + + if (isIterableDone) { + break; + } + } + }); +} + +const pMapSkip = Symbol('skip'); + +export default pMap; +export { pMapSkip }; + +//# sourceMappingURL=npm:p-map@5.1.0.map \ No newline at end of file diff --git a/examples/build-http/webpack.lock.data/https_jspm.dev/p-map_875efed0b6bd20646dd2 b/examples/build-http/webpack.lock.data/https_jspm.dev/p-map_875efed0b6bd20646dd2 new file mode 100644 index 00000000000..95b490c4578 --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_jspm.dev/p-map_875efed0b6bd20646dd2 @@ -0,0 +1,3 @@ +import "/npm:aggregate-error@4"; +export * from "/npm:p-map@5.1.0"; +export { default } from "/npm:p-map@5.1.0"; diff --git a/examples/build-http/webpack.lock.data/https_unpkg.com/p-map-series_3.0.0_index_module_cb329557880410b778cf.js b/examples/build-http/webpack.lock.data/https_unpkg.com/p-map-series_3.0.0_index_module_cb329557880410b778cf.js new file mode 100644 index 00000000000..f9ee01a45ae --- /dev/null +++ b/examples/build-http/webpack.lock.data/https_unpkg.com/p-map-series_3.0.0_index_module_cb329557880410b778cf.js @@ -0,0 +1,11 @@ +export default async function pMapSeries(iterable, mapper) { + const result = []; + let index = 0; + + for (const value of iterable) { + // eslint-disable-next-line no-await-in-loop + result.push((await mapper((await value), index++))); + } + + return result; +} \ No newline at end of file diff --git a/examples/buildAll.js b/examples/buildAll.js index 7ff3a9e38f2..0f05b4c5c7f 100644 --- a/examples/buildAll.js +++ b/examples/buildAll.js @@ -3,21 +3,27 @@ const cp = require("child_process"); const examples = require("./examples"); -const cmds = examples.map(function(dirname) { - return "cd " + dirname + " && node build.js"; -}); +const commands = [ + ...examples, + examples.filter((dirname) => dirname.includes("persistent-caching")) +].map((dirname) => `cd ${dirname} && node build.js`); let failed = 0; let i = 0; -for(const cmd of cmds) { - console.log(`[${++i}/${cmds.length}] ${cmd}`); + +for (const cmd of commands) { + console.log(`[${++i}/${commands.length}] ${cmd}`); + try { - cp.execSync(cmd, { encoding: "utf-8" }); - } catch(e) { + cp.execSync(cmd, { encoding: "utf8" }); + } catch (err) { failed++; - console.log(e); + console.log(err); } } + console.log("done"); -if(failed > 0) - console.log(`${failed} failed`); + +if (failed > 0) { + throw new Error(`${failed} examples failed`); +} diff --git a/examples/chunkhash/README.md b/examples/chunkhash/README.md index e02b81676dc..c3f47fa66ce 100644 --- a/examples/chunkhash/README.md +++ b/examples/chunkhash/README.md @@ -1,15 +1,15 @@ -A common challenge with combining `[chunkhash]` and Code Splitting is that the entry chunk includes the webpack runtime and with it the chunkhash mappings. This means it's always updated and the `[chunkhash]` is pretty useless, because this chunk won't be cached. +A common challenge with combining `[chunkhash]` and Code Splitting is that the entry chunk includes the webpack runtime and with it the chunkhash mappings. This means it's always updated and the `[chunkhash]` is pretty useless because this chunk won't be cached. -A very simple solution to this problem is to create another chunk which contains only the webpack runtime (including chunkhash map). This can be achieved with the `optimization.runtimeChunk` options. To avoid the additional request for another chunk, this pretty small chunk can be inlined into the HTML page. +A very simple solution to this problem is to create another chunk that contains only the webpack runtime (including chunkhash map). This can be achieved with `optimization.runtimeChunk` options. To avoid the additional request for another chunk, this pretty small chunk can be inlined into the HTML page. The configuration required for this is: -* use `[chunkhash]` in `output.filename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) -* use `[chunkhash]` in `output.chunkFilename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) +- use `[chunkhash]` in `output.filename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) +- use `[chunkhash]` in `output.chunkFilename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) # example.js -``` javascript +```javascript // some module import("./async1"); import("./async2"); @@ -17,10 +17,14 @@ import("./async2"); # webpack.config.js -``` javascript -var path = require("path"); -module.exports = { - // mode: "development || "production", +```javascript +"use strict"; + +const path = require("path"); + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { main: "./example" }, @@ -33,259 +37,360 @@ module.exports = { chunkFilename: "[name].[chunkhash].js" } }; + +module.exports = config; ``` # index.html -``` html +```html - - - - - - + + + + - - - + + ``` # dist/runtime~main.[chunkhash].js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +``` -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 3: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + ".[chunkhash].js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ (() => { +/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); +/******/ } +/******/ def['default'] = () => (value); +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".[chunkhash].js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); -/******/ } -/******/ installedChunks[chunkId] = undefined; +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 1: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(1 != chunkId) { +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } else installedChunks[chunkId] = 0; +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // run deferred modules from other chunks -/******/ checkDeferredModules(); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([]); +``` js +/******/ +/******/ +/******/ })() +; ``` # dist/main.[chunkhash].js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],[ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([[0],[ /* 0 */ /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__.t, __webpack_require__.* */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { // some module -__webpack_require__.e(/*! import() */ 1).then(function() { var module = __webpack_require__(/*! ./async1 */ 1); return typeof module === "object" && module && module.__esModule ? module : Object.assign({/* fake namespace object */}, typeof module === "object" && module, { "default": module }); }); -__webpack_require__.e(/*! import() */ 2).then(function() { var module = __webpack_require__(/*! ./async2 */ 2); return typeof module === "object" && module && module.__esModule ? module : Object.assign({/* fake namespace object */}, typeof module === "object" && module, { "default": module }); }); +__webpack_require__.e(/*! import() */ 2).then(__webpack_require__.t.bind(__webpack_require__, /*! ./async1 */ 1, 23)); +__webpack_require__.e(/*! import() */ 3).then(__webpack_require__.t.bind(__webpack_require__, /*! ./async2 */ 2, 23)); /***/ }) -],[[0,3]]]); +], +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ var __webpack_exports__ = (__webpack_exec__(0)); +/******/ } +]); ``` # Info @@ -293,53 +398,57 @@ __webpack_require__.e(/*! import() */ 2).then(function() { var module = __webpac ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names - main.[chunkhash].js 877 bytes 0 [emitted] main - 1.[chunkhash].js 270 bytes 1 [emitted] - 2.[chunkhash].js 264 bytes 2 [emitted] -runtime~main.[chunkhash].js 7.75 KiB 3 [emitted] runtime~main -Entrypoint main = runtime~main.[chunkhash].js main.[chunkhash].js -chunk {0} main.[chunkhash].js (main) 55 bytes ={3}= >{1}< >{2}< [initial] [rendered] - > ./example main - [0] ./example.js 55 bytes {0} [built] - single entry ./example main -chunk {1} 1.[chunkhash].js 29 bytes <{0}> <{3}> [rendered] - > ./async1 [0] ./example.js 2:0-18 - [1] ./async1.js 29 bytes {1} [built] - import() ./async1 [0] ./example.js 2:0-18 -chunk {2} 2.[chunkhash].js 29 bytes <{0}> <{3}> [rendered] - > ./async2 [0] ./example.js 3:0-18 - [2] ./async2.js 29 bytes {2} [built] - import() ./async2 [0] ./example.js 3:0-18 -chunk {3} runtime~main.[chunkhash].js (runtime~main) 0 bytes ={0}= >{1}< >{2}< [entry] [rendered] - > ./example main +asset runtime~main.[chunkhash].js 12.4 KiB [emitted] (name: runtime~main) +asset main.[chunkhash].js 873 bytes [emitted] (name: main) +asset 2.[chunkhash].js 285 bytes [emitted] +asset 3.[chunkhash].js 267 bytes [emitted] +Entrypoint main 13.3 KiB = runtime~main.[chunkhash].js 12.4 KiB main.[chunkhash].js 873 bytes +chunk (runtime: runtime~main) main.[chunkhash].js (main) 55 bytes [initial] [rendered] + > ./example main + ./example.js 55 bytes [built] [code generated] + [used exports unknown] + entry ./example main +chunk (runtime: runtime~main) runtime~main.[chunkhash].js (runtime~main) 7.6 KiB [entry] [rendered] + > ./example main + runtime modules 7.6 KiB 10 modules +chunk (runtime: runtime~main) 2.[chunkhash].js 28 bytes [rendered] + > ./async1 ./example.js 2:0-18 + ./async1.js 28 bytes [built] [code generated] + [used exports unknown] + import() ./async1 ./example.js 2:0-18 +chunk (runtime: runtime~main) 3.[chunkhash].js 28 bytes [rendered] + > ./async2 ./example.js 3:0-18 + ./async2.js 28 bytes [built] [code generated] + [used exports unknown] + import() ./async2 ./example.js 3:0-18 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names - 0.[chunkhash].js 77 bytes 0 [emitted] - 1.[chunkhash].js 78 bytes 1 [emitted] -runtime~main.[chunkhash].js 1.79 KiB 2 [emitted] runtime~main - main.[chunkhash].js 349 bytes 3 [emitted] main -Entrypoint main = runtime~main.[chunkhash].js main.[chunkhash].js -chunk {0} 0.[chunkhash].js 29 bytes <{2}> <{3}> [rendered] - > ./async2 [0] ./example.js 3:0-18 - [1] ./async2.js 29 bytes {0} [built] - import() ./async2 [0] ./example.js 3:0-18 -chunk {1} 1.[chunkhash].js 29 bytes <{2}> <{3}> [rendered] - > ./async1 [0] ./example.js 2:0-18 - [2] ./async1.js 29 bytes {1} [built] - import() ./async1 [0] ./example.js 2:0-18 -chunk {2} runtime~main.[chunkhash].js (runtime~main) 0 bytes ={3}= >{0}< >{1}< [entry] [rendered] - > ./example main -chunk {3} main.[chunkhash].js (main) 55 bytes ={2}= >{0}< >{1}< [initial] [rendered] - > ./example main - [0] ./example.js 55 bytes {3} [built] - single entry ./example main +asset runtime~main.[chunkhash].js 2.73 KiB [emitted] [minimized] (name: runtime~main) +asset main.[chunkhash].js 152 bytes [emitted] [minimized] (name: main) +asset 471.[chunkhash].js 66 bytes [emitted] [minimized] +asset 18.[chunkhash].js 64 bytes [emitted] [minimized] +Entrypoint main 2.88 KiB = runtime~main.[chunkhash].js 2.73 KiB main.[chunkhash].js 152 bytes +chunk (runtime: runtime~main) 18.[chunkhash].js 28 bytes [rendered] + > ./async1 ./example.js 2:0-18 + ./async1.js 28 bytes [built] [code generated] + [used exports unknown] + import() ./async1 ./example.js 2:0-18 +chunk (runtime: runtime~main) runtime~main.[chunkhash].js (runtime~main) 7.61 KiB [entry] [rendered] + > ./example main + runtime modules 7.61 KiB 10 modules +chunk (runtime: runtime~main) 471.[chunkhash].js 28 bytes [rendered] + > ./async2 ./example.js 3:0-18 + ./async2.js 28 bytes [built] [code generated] + [used exports unknown] + import() ./async2 ./example.js 3:0-18 +chunk (runtime: runtime~main) main.[chunkhash].js (main) 55 bytes [initial] [rendered] + > ./example main + ./example.js 55 bytes [built] [code generated] + [no exports used] + entry ./example main +webpack X.X.X compiled successfully ``` diff --git a/examples/chunkhash/template.md b/examples/chunkhash/template.md index b7df1a7272b..91cf1c69b9a 100644 --- a/examples/chunkhash/template.md +++ b/examples/chunkhash/template.md @@ -1,53 +1,50 @@ -A common challenge with combining `[chunkhash]` and Code Splitting is that the entry chunk includes the webpack runtime and with it the chunkhash mappings. This means it's always updated and the `[chunkhash]` is pretty useless, because this chunk won't be cached. +A common challenge with combining `[chunkhash]` and Code Splitting is that the entry chunk includes the webpack runtime and with it the chunkhash mappings. This means it's always updated and the `[chunkhash]` is pretty useless because this chunk won't be cached. -A very simple solution to this problem is to create another chunk which contains only the webpack runtime (including chunkhash map). This can be achieved with the `optimization.runtimeChunk` options. To avoid the additional request for another chunk, this pretty small chunk can be inlined into the HTML page. +A very simple solution to this problem is to create another chunk that contains only the webpack runtime (including chunkhash map). This can be achieved with `optimization.runtimeChunk` options. To avoid the additional request for another chunk, this pretty small chunk can be inlined into the HTML page. The configuration required for this is: -* use `[chunkhash]` in `output.filename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) -* use `[chunkhash]` in `output.chunkFilename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) +- use `[chunkhash]` in `output.filename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) +- use `[chunkhash]` in `output.chunkFilename` (Note that this example doesn't do this because of the example generator infrastructure, but you should) # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # index.html -``` html +```html - - - - - - - - - - + + + + + + + ``` # dist/runtime~main.[chunkhash].js -``` javascript -{{dist/runtime~main.chunkhash.js}} +```javascript +_{{dist/runtime~main.chunkhash.js}}_ ``` # dist/main.[chunkhash].js -``` javascript -{{dist/main.chunkhash.js}} +```javascript +_{{dist/main.chunkhash.js}}_ ``` # Info @@ -55,11 +52,11 @@ The configuration required for this is: ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/chunkhash/webpack.config.js b/examples/chunkhash/webpack.config.js index cc34d5591f9..d8034190f54 100644 --- a/examples/chunkhash/webpack.config.js +++ b/examples/chunkhash/webpack.config.js @@ -1,6 +1,10 @@ -var path = require("path"); -module.exports = { - // mode: "development || "production", +"use strict"; + +const path = require("path"); + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { main: "./example" }, @@ -13,3 +17,5 @@ module.exports = { chunkFilename: "[name].chunkhash.js" } }; + +module.exports = config; diff --git a/examples/cjs-tree-shaking/README.md b/examples/cjs-tree-shaking/README.md new file mode 100644 index 00000000000..5d2f52d16b0 --- /dev/null +++ b/examples/cjs-tree-shaking/README.md @@ -0,0 +1,254 @@ +This example demonstrates how Webpack performs tree shaking for CommonJS modules. + +# example.js + +```javascript +// Property access pattern +const inc = require("./increment").increment; +var a = 1; +inc(a); // 2 + +// Destructuring assignment pattern +const { add } = require("./math"); +add(a, 2); // 3 + +// Aliased destructuring +const { increment: inc2 } = require("./increment"); +inc2(a); // 2 +``` + +# increment.js + +```javascript +const add = require("./math").add; +exports.increment = function increment(val) { + return add(val, 1); +}; +exports.incrementBy2 = function incrementBy2(val) { + return add(val, 2); +}; +exports.decrement = function decrement(val) { + return add(val, 1); +}; +``` + +# math.js + +```javascript +exports.add = function add() { + var sum = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum += args[i++]; + } + return sum; +}; + +exports.multiply = function multiply() { + var product = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum *= args[i++]; + } + return sum; +}; +``` + +# dist/output.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */ +/*!*****************!*\ + !*** ./math.js ***! + \*****************/ +/*! default exports */ +/*! export add [provided] [used in main] [usage prevents renaming] */ +/*! export multiply [provided] [unused] [renamed to l] */ +/*! runtime requirements: __webpack_exports__ */ +/***/ ((__unused_webpack_module, exports) => { + +var __webpack_unused_export__; +exports.add = function add() { + var sum = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum += args[i++]; + } + return sum; +}; + +__webpack_unused_export__ = function multiply() { + var product = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum *= args[i++]; + } + return sum; +}; + + +/***/ }), +/* 1 */ +/*!**********************!*\ + !*** ./increment.js ***! + \**********************/ +/*! default exports */ +/*! export decrement [provided] [unused] [renamed to K] */ +/*! export increment [provided] [used in main] [usage prevents renaming] */ +/*! export incrementBy2 [provided] [unused] [renamed to B] */ +/*! runtime requirements: __webpack_require__, __webpack_exports__ */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var __webpack_unused_export__; +const add = (__webpack_require__(/*! ./math */ 0).add); +exports.increment = function increment(val) { + return add(val, 1); +}; +__webpack_unused_export__ = function incrementBy2(val) { + return add(val, 2); +}; +__webpack_unused_export__ = function decrement(val) { + return add(val, 1); +}; + + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ +// Property access pattern +const inc = (__webpack_require__(/*! ./increment */ 1).increment); +var a = 1; +inc(a); // 2 + +// Destructuring assignment pattern +const { add } = __webpack_require__(/*! ./math */ 0); +add(a, 2); // 3 + +// Aliased destructuring +const { increment: inc2 } = __webpack_require__(/*! ./increment */ 1); +inc2(a); // 2 + +})(); + +/******/ })() +; +``` + +# dist/output.js (production) + +```javascript +/*! For license information please see output.js.LICENSE.txt */ +(()=>{var n=[(n,r)=>{r.add=function(){for(var n=0,r=0,e=arguments,t=e.length;r{const t=e(0).add;r.increment=function(n){return t(n,1)}}],r={};function e(t){var o=r[t];if(void 0!==o)return o.exports;var d=r[t]={exports:{}};if(!(t in n)){delete r[t];var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}return n[t](d,d.exports,e),d.exports}(0,e(1).increment)(1);const{add:t}=e(0);t(1,2);const{increment:o}=e(1);o(1)})(); +``` + +# dist/without.js (same without tree shaking) + +```javascript +/*! For license information please see without.js.LICENSE.txt */ +(()=>{var n=[(n,r)=>{r.add=function(){for(var n=0,r=0,t=arguments,e=t.length;r{const e=t(0).add;r.increment=function(n){return e(n,1)},r.incrementBy2=function(n){return e(n,2)},r.decrement=function(n){return e(n,1)}}],r={};function t(e){var o=r[e];if(void 0!==o)return o.exports;var u=r[e]={exports:{}};if(!(e in n)){delete r[e];var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}return n[e](u,u.exports,t),u.exports}(0,t(1).increment)(1);const{add:e}=t(0);e(1,2);const{increment:o}=t(1);o(1)})(); +``` + +# Info + +## Unoptimized + +``` +asset output.js 3.43 KiB [emitted] (name: main) +chunk (runtime: main) output.js (main) 841 bytes [entry] [rendered] + > ./example.js main + dependent modules 564 bytes [dependent] 2 modules + ./example.js 277 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully + +asset without.js 3.57 KiB [emitted] (name: main) +chunk (runtime: main) without.js (main) 841 bytes [entry] [rendered] + > ./example.js main + dependent modules 564 bytes [dependent] 2 modules + ./example.js 277 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset output.js 543 bytes [emitted] [minimized] (name: main) 1 related asset +chunk (runtime: main) output.js (main) 841 bytes [entry] [rendered] + > ./example.js main + dependent modules 564 bytes [dependent] 2 modules + ./example.js 277 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully + +asset without.js 711 bytes [emitted] [minimized] (name: main) 1 related asset +chunk (runtime: main) without.js (main) 841 bytes [entry] [rendered] + > ./example.js main + dependent modules 564 bytes [dependent] 2 modules + ./example.js 277 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/cjs-tree-shaking/build.js b/examples/cjs-tree-shaking/build.js new file mode 100644 index 00000000000..7492e9f9f71 --- /dev/null +++ b/examples/cjs-tree-shaking/build.js @@ -0,0 +1,2 @@ +global.NO_TARGET_ARGS = true; +require("../build-common"); diff --git a/examples/cjs-tree-shaking/cases.txt b/examples/cjs-tree-shaking/cases.txt new file mode 100644 index 00000000000..34bc275e076 --- /dev/null +++ b/examples/cjs-tree-shaking/cases.txt @@ -0,0 +1,58 @@ +BAD: + +module.exports = abc; module.exports.xxx = abc; abc.xxx; +exports = abc; +module.exports +exports +this +function f() { return this; } module.exports = { f }; module.exports.xxx = abc; + + +EXPORTS: + +exports.xxx = abc; + +module.exports.xxx = abc; +this.xxx = abc +Object.defineProperty(exports, "xxx", { ... }) +Object.defineProperty(module.exports, "xxx", { ... }) +Object.defineProperty(this, "xxx", { ... }) +module.exports.xxx +exports.xxx +this.xxx +module.exports = function() {}; module.exports.xxx = abc; +module.exports = { ... }; module.exports.xxx = abc; + +OBJECTS: + +module.exports = { xxx: abc }; + +IMPORT: + +require(x).xxx +var { xxx } = require(x); +var x = require(x); x.xxx; + +REEXPORT: + +module.exports.xxx = require(x); +module.exports.xxx = require(x).xxx; +exports.xxx = require(x); +exports.xxx = require(x).xxx; +module.exports = { xxx2: require(x) }; +module.exports = { xxx2: require(x).xxx }; +var xxx = require(x); exports.xxx = xxx; +var xxx = require(x); exports.xxx = xxx.xxx; +var xxx = require(x); module.exports = { xxx }; +var xxx = require(x); module.exports = { xxx: xxx.xxx }; + +TRANSPILED: + +TypeScript: +function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } +__export(require(x)); + +Babel: +var xxx = _interopRequireDefault(require(x)); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +xxx.xxx; diff --git a/examples/cjs-tree-shaking/example.js b/examples/cjs-tree-shaking/example.js new file mode 100644 index 00000000000..0cf44c60cb3 --- /dev/null +++ b/examples/cjs-tree-shaking/example.js @@ -0,0 +1,12 @@ +// Property access pattern +const inc = require("./increment").increment; +var a = 1; +inc(a); // 2 + +// Destructuring assignment pattern +const { add } = require("./math"); +add(a, 2); // 3 + +// Aliased destructuring +const { increment: inc2 } = require("./increment"); +inc2(a); // 2 diff --git a/examples/cjs-tree-shaking/increment.js b/examples/cjs-tree-shaking/increment.js new file mode 100644 index 00000000000..df54369b913 --- /dev/null +++ b/examples/cjs-tree-shaking/increment.js @@ -0,0 +1,10 @@ +const add = require("./math").add; +exports.increment = function increment(val) { + return add(val, 1); +}; +exports.incrementBy2 = function incrementBy2(val) { + return add(val, 2); +}; +exports.decrement = function decrement(val) { + return add(val, 1); +}; diff --git a/examples/cjs-tree-shaking/math.js b/examples/cjs-tree-shaking/math.js new file mode 100644 index 00000000000..97a0ac866ab --- /dev/null +++ b/examples/cjs-tree-shaking/math.js @@ -0,0 +1,21 @@ +exports.add = function add() { + var sum = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum += args[i++]; + } + return sum; +}; + +exports.multiply = function multiply() { + var product = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum *= args[i++]; + } + return sum; +}; diff --git a/examples/cjs-tree-shaking/template.md b/examples/cjs-tree-shaking/template.md new file mode 100644 index 00000000000..1ce85164d87 --- /dev/null +++ b/examples/cjs-tree-shaking/template.md @@ -0,0 +1,51 @@ +This example demonstrates how Webpack performs tree shaking for CommonJS modules. + +# example.js + +```javascript +_{{example.js}}_ +``` + +# increment.js + +```javascript +_{{increment.js}}_ +``` + +# math.js + +```javascript +_{{math.js}}_ +``` + +# dist/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# dist/output.js (production) + +```javascript +_{{production:dist/output.js}}_ +``` + +# dist/without.js (same without tree shaking) + +```javascript +_{{production:dist/without.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/cjs-tree-shaking/webpack.config.js b/examples/cjs-tree-shaking/webpack.config.js new file mode 100644 index 00000000000..18a3423cf60 --- /dev/null +++ b/examples/cjs-tree-shaking/webpack.config.js @@ -0,0 +1,31 @@ +"use strict"; + +/** @type {import("webpack").Configuration[]} */ +const config = [ + { + entry: "./example.js", + output: { + pathinfo: true, + filename: "output.js" + }, + optimization: { + moduleIds: "size", + usedExports: true, + mangleExports: true + } + }, + { + entry: "./example.js", + output: { + pathinfo: true, + filename: "without.js" + }, + optimization: { + moduleIds: "size", + usedExports: false, + mangleExports: false + } + } +]; + +module.exports = config; diff --git a/examples/code-splitted-css-bundle/README.md b/examples/code-splitted-css-bundle/README.md deleted file mode 100644 index 1552a655f1d..00000000000 --- a/examples/code-splitted-css-bundle/README.md +++ /dev/null @@ -1,140 +0,0 @@ - -# example.js - -``` javascript -require("./style.css"); -require(["./chunk"]); -``` - -# style.css - -``` css -body { - background: url(image.png); -} -``` - -# chunk.js - -``` javascript -require("./style2.css"); -``` - -# style2.css - -``` css -.xyz { - background: url(image2.png); -} -``` - -# webpack.config.js - -``` javascript -var ExtractTextPlugin = require("extract-text-webpack-plugin"); -module.exports = { - module: { - loaders: [ - { - test: /\.css$/, - use: ExtractTextPlugin.extract({ - fallback: "style-loader", - use: "css-loader" - }) - }, - { test: /\.png$/, loader: "file-loader" } - ] - }, - plugins: [ - new ExtractTextPlugin({ - filename: "style.css" - }) - ] -}; -``` - -# js/style.css - -``` javascript -body { - background: url(js/ce21cbdd9b894e6af794813eb3fdaf60.png); -} -``` - -# Info - -## Uncompressed - -``` -Hash: 5be34b0d3c624e61c616 -Version: webpack 3.11.0 - Asset Size Chunks Chunk Names -ce21cbdd9b894e6af794813eb3fdaf60.png 119 bytes [emitted] - 0.output.js 2.44 kB 0 [emitted] - output.js 21.2 kB 1 [emitted] main - style.css 71 bytes 1 [emitted] main -Entrypoint main = output.js style.css -chunk {0} 0.output.js 1.36 kB {1} [rendered] - > [0] ./example.js 2:0-20 - [5] ./chunk.js 26 bytes {0} [built] - amd require ./chunk [0] ./example.js 2:0-20 - [6] ./style2.css 1.01 kB {0} [built] - cjs require ./style2.css [5] ./chunk.js 1:0-23 - [7] (webpack)/node_modules/css-loader!./style2.css 236 bytes {0} [built] - cjs require !!../../node_modules/css-loader/index.js!./style2.css [6] ./style2.css 4:14-78 - [8] ./image2.png 82 bytes {0} [built] - cjs require ./image2.png [7] (webpack)/node_modules/css-loader!./style2.css 6:58-81 -chunk {1} output.js, style.css (main) 14.1 kB [entry] [rendered] - > main [0] ./example.js - [0] ./example.js 48 bytes {1} [built] - [1] ./style.css 41 bytes {1} [built] - cjs require ./style.css [0] ./example.js 1:0-22 - + 3 hidden modules -Child extract-text-webpack-plugin ../../node_modules/extract-text-webpack-plugin/dist ../../node_modules/css-loader/index.js!style.css: - 1 asset - Entrypoint undefined = extract-text-webpack-plugin-output-filename - chunk {0} extract-text-webpack-plugin-output-filename 2.58 kB [entry] [rendered] - > [0] (webpack)/node_modules/css-loader!./style.css - [0] (webpack)/node_modules/css-loader!./style.css 235 bytes {0} [built] - [2] ./image.png 82 bytes {0} [built] - cjs require ./image.png [0] (webpack)/node_modules/css-loader!./style.css 6:58-80 - + 1 hidden module -``` - -## Minimized (uglify-js, no zip) - -``` -Hash: edbe0e91ba86d814d855 -Version: webpack 3.11.0 - Asset Size Chunks Chunk Names -ce21cbdd9b894e6af794813eb3fdaf60.png 119 bytes [emitted] - 0.output.js 343 bytes 0 [emitted] - output.js 6.58 kB 1 [emitted] main - style.css 61 bytes 1 [emitted] main -Entrypoint main = output.js style.css -chunk {0} 0.output.js 1.34 kB {1} [rendered] - > [0] ./example.js 2:0-20 - [5] ./chunk.js 26 bytes {0} [built] - amd require ./chunk [0] ./example.js 2:0-20 - [6] ./style2.css 1.01 kB {0} [built] - cjs require ./style2.css [5] ./chunk.js 1:0-23 - [7] (webpack)/node_modules/css-loader!./style2.css 219 bytes {0} [built] - cjs require !!../../node_modules/css-loader/index.js!./style2.css [6] ./style2.css 4:14-78 - [8] ./image2.png 82 bytes {0} [built] - cjs require ./image2.png [7] (webpack)/node_modules/css-loader!./style2.css 6:50-73 -chunk {1} output.js, style.css (main) 14.1 kB [entry] [rendered] - > main [0] ./example.js - [0] ./example.js 48 bytes {1} [built] - [1] ./style.css 41 bytes {1} [built] - cjs require ./style.css [0] ./example.js 1:0-22 - + 3 hidden modules -Child extract-text-webpack-plugin ../../node_modules/extract-text-webpack-plugin/dist ../../node_modules/css-loader/index.js!style.css: - 1 asset - Entrypoint undefined = extract-text-webpack-plugin-output-filename - chunk {0} extract-text-webpack-plugin-output-filename 2.56 kB [entry] [rendered] - > [0] (webpack)/node_modules/css-loader!./style.css - [0] (webpack)/node_modules/css-loader!./style.css 218 bytes {0} [built] - [2] ./image.png 82 bytes {0} [built] - cjs require ./image.png [0] (webpack)/node_modules/css-loader!./style.css 6:50-72 - + 1 hidden module -``` diff --git a/examples/code-splitted-require.context-amd/README.md b/examples/code-splitted-require.context-amd/README.md index 07a7855e2d8..8775ad9a500 100644 --- a/examples/code-splitted-require.context-amd/README.md +++ b/examples/code-splitted-require.context-amd/README.md @@ -16,207 +16,231 @@ getTemplate("b", function(b) { # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - ``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({}); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 1: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "main": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */ +``` js /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__.oe, __webpack_require__, __webpack_require__.* */ function getTemplate(templateName, callback) { - __webpack_require__.e(/*! AMD require */ 0).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(1)("./"+templateName)]; (function(tmpl) { + __webpack_require__.e(/*! AMD require */ "require_context_templates_sync_recursive_").then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(1)("./"+templateName)]; (function(tmpl) { callback(tmpl()); - }).apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);}).catch(__webpack_require__.oe); + }).apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);})['catch'](__webpack_require__.oe); } getTemplate("a", function(a) { console.log(a); @@ -224,46 +248,45 @@ getTemplate("a", function(a) { getTemplate("b", function(b) { console.log(b); }); - -/***/ }) -/******/ ]); +/******/ })() +; ``` -# dist/0.output.js +# dist/require_context_templates_sync_recursive_.output.js ``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],[ +(self["webpackChunk"] = self["webpackChunk"] || []).push([["require_context_templates_sync_recursive_"],[ /* 0 */, /* 1 */ -/*!**************************************************!*\ - !*** ../require.context/templates sync ^\.\/.*$ ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*!***************************************************!*\ + !*** ../require.context/templates/ sync ^\.\/.*$ ***! + \***************************************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__.o, __webpack_require__ */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { var map = { - "./a": 4, - "./a.js": 4, + "./a": 2, + "./a.js": 2, "./b": 3, "./b.js": 3, - "./c": 2, - "./c.js": 2 + "./c": 4, + "./c.js": 4 }; function webpackContext(req) { var id = webpackContextResolve(req); - var module = __webpack_require__(id); - return module; + return __webpack_require__(id); } function webpackContextResolve(req) { - var id = map[req]; - if(!(id + 1)) { // check for number or string + if(!__webpack_require__.o(map, req)) { var e = new Error("Cannot find module '" + req + "'"); e.code = 'MODULE_NOT_FOUND'; throw e; } - return id; + return map[req]; } webpackContext.keys = function webpackContextKeys() { return Object.keys(map); @@ -275,13 +298,15 @@ webpackContext.id = 1; /***/ }), /* 2 */ /*!*****************************************!*\ - !*** ../require.context/templates/c.js ***! + !*** ../require.context/templates/a.js ***! \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = function() { - return "This text was generated by template C"; + return "This text was generated by template A"; } /***/ }), @@ -289,8 +314,10 @@ module.exports = function() { /*!*****************************************!*\ !*** ../require.context/templates/b.js ***! \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = function() { return "This text was generated by template B"; @@ -299,13 +326,15 @@ module.exports = function() { /***/ }), /* 4 */ /*!*****************************************!*\ - !*** ../require.context/templates/a.js ***! + !*** ../require.context/templates/c.js ***! \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = function() { - return "This text was generated by template A"; + return "This text was generated by template C"; } /***/ }) @@ -317,55 +346,40 @@ module.exports = function() { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 1.86 KiB 0 [emitted] - output.js 7.46 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 463 bytes <{1}> [rendered] - > [0] ./example.js 2:1-4:3 - [1] ../require.context/templates sync ^\.\/.*$ 217 bytes {0} [built] - amd require context ../require.context/templates [0] ./example.js 2:1-4:3 - [2] ../require.context/templates/c.js 82 bytes {0} [optional] [built] - context element ./c.js [1] ../require.context/templates sync ^\.\/.*$ ./c.js - context element ./c [1] ../require.context/templates sync ^\.\/.*$ ./c - [3] ../require.context/templates/b.js 82 bytes {0} [optional] [built] - context element ./b.js [1] ../require.context/templates sync ^\.\/.*$ ./b.js - context element ./b [1] ../require.context/templates sync ^\.\/.*$ ./b - [4] ../require.context/templates/a.js 82 bytes {0} [optional] [built] - context element ./a.js [1] ../require.context/templates sync ^\.\/.*$ ./a.js - context element ./a [1] ../require.context/templates sync ^\.\/.*$ ./a -chunk {1} output.js (main) 261 bytes >{0}< [entry] [rendered] - > .\example.js main - [0] ./example.js 261 bytes {1} [built] - single entry .\example.js main +asset output.js 9.24 KiB [emitted] (name: main) +asset require_context_templates_sync_recursive_.output.js 2.27 KiB [emitted] +chunk (runtime: main) output.js (main) 251 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + ./example.js 251 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) require_context_templates_sync_recursive_.output.js 457 bytes [rendered] + > ./example.js 2:1-4:3 + dependent modules 240 bytes [dependent] 3 modules + ../require.context/templates/ sync ^\.\/.*$ 217 bytes [built] [code generated] + [no exports] + [used exports unknown] + amd require context ./example.js 2:1-4:3 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 627 bytes 0 [emitted] - output.js 1.78 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 463 bytes <{1}> [rendered] - > [0] ./example.js 2:1-4:3 - [1] ../require.context/templates sync ^\.\/.*$ 217 bytes {0} [built] - amd require context ../require.context/templates [0] ./example.js 2:1-4:3 - [2] ../require.context/templates/c.js 82 bytes {0} [optional] [built] - context element ./c.js [1] ../require.context/templates sync ^\.\/.*$ ./c.js - context element ./c [1] ../require.context/templates sync ^\.\/.*$ ./c - [3] ../require.context/templates/b.js 82 bytes {0} [optional] [built] - context element ./b.js [1] ../require.context/templates sync ^\.\/.*$ ./b.js - context element ./b [1] ../require.context/templates sync ^\.\/.*$ ./b - [4] ../require.context/templates/a.js 82 bytes {0} [optional] [built] - context element ./a.js [1] ../require.context/templates sync ^\.\/.*$ ./a.js - context element ./a [1] ../require.context/templates sync ^\.\/.*$ ./a -chunk {1} output.js (main) 261 bytes >{0}< [entry] [rendered] - > .\example.js main - [0] ./example.js 261 bytes {1} [built] - single entry .\example.js main +asset output.js 1.83 KiB [emitted] [minimized] (name: main) +asset require_context_templates_sync_recursive_.output.js 646 bytes [emitted] [minimized] +chunk (runtime: main) output.js (main) 251 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + ./example.js 251 bytes [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: main) require_context_templates_sync_recursive_.output.js 457 bytes [rendered] + > ./example.js 2:1-4:3 + dependent modules 240 bytes [dependent] 3 modules + ../require.context/templates/ sync ^\.\/.*$ 217 bytes [built] [code generated] + [no exports] + amd require context ./example.js 2:1-4:3 +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitted-require.context-amd/template.md b/examples/code-splitted-require.context-amd/template.md index 0b7b60cfd4f..5c134294f17 100644 --- a/examples/code-splitted-require.context-amd/template.md +++ b/examples/code-splitted-require.context-amd/template.md @@ -1,19 +1,19 @@ # example.js ``` javascript -{{example.js}} +_{{example.js}}_ ``` # dist/output.js ``` javascript -{{dist/output.js}} +_{{dist/output.js}}_ ``` -# dist/0.output.js +# dist/require_context_templates_sync_recursive_.output.js ``` javascript -{{dist/0.output.js}} +_{{dist/require_context_templates_sync_recursive_.output.js}}_ ``` # Info @@ -21,11 +21,11 @@ ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitted-require.context-amd/webpack.config.js b/examples/code-splitted-require.context-amd/webpack.config.js index 0d554bf62ea..3a2046aae21 100644 --- a/examples/code-splitted-require.context-amd/webpack.config.js +++ b/examples/code-splitted-require.context-amd/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitted-require.context/README.md b/examples/code-splitted-require.context/README.md index c1251d65308..e12b03e7596 100644 --- a/examples/code-splitted-require.context/README.md +++ b/examples/code-splitted-require.context/README.md @@ -16,207 +16,231 @@ getTemplate("b", function(b) { # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - ``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({}); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 1: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "main": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */ +``` js /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__, __webpack_require__.* */ function getTemplate(templateName, callback) { - __webpack_require__.e(/*! require.ensure */ 0).then((function(require) { + __webpack_require__.e(/*! require.ensure */ "require_context_templates_sync_recursive_").then((function(require) { callback(__webpack_require__(1)("./"+templateName)()); - }).bind(null, __webpack_require__)).catch(__webpack_require__.oe); + }).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); } getTemplate("a", function(a) { console.log(a); @@ -224,46 +248,45 @@ getTemplate("a", function(a) { getTemplate("b", function(b) { console.log(b); }); - -/***/ }) -/******/ ]); +/******/ })() +; ``` -# dist/0.output.js +# dist/require_context_templates_sync_recursive_.output.js ``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],[ +(self["webpackChunk"] = self["webpackChunk"] || []).push([["require_context_templates_sync_recursive_"],[ /* 0 */, /* 1 */ -/*!**************************************************!*\ - !*** ../require.context/templates sync ^\.\/.*$ ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*!***************************************************!*\ + !*** ../require.context/templates/ sync ^\.\/.*$ ***! + \***************************************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__.o, __webpack_require__ */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { var map = { - "./a": 4, - "./a.js": 4, + "./a": 2, + "./a.js": 2, "./b": 3, "./b.js": 3, - "./c": 2, - "./c.js": 2 + "./c": 4, + "./c.js": 4 }; function webpackContext(req) { var id = webpackContextResolve(req); - var module = __webpack_require__(id); - return module; + return __webpack_require__(id); } function webpackContextResolve(req) { - var id = map[req]; - if(!(id + 1)) { // check for number or string + if(!__webpack_require__.o(map, req)) { var e = new Error("Cannot find module '" + req + "'"); e.code = 'MODULE_NOT_FOUND'; throw e; } - return id; + return map[req]; } webpackContext.keys = function webpackContextKeys() { return Object.keys(map); @@ -275,13 +298,15 @@ webpackContext.id = 1; /***/ }), /* 2 */ /*!*****************************************!*\ - !*** ../require.context/templates/c.js ***! + !*** ../require.context/templates/a.js ***! \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = function() { - return "This text was generated by template C"; + return "This text was generated by template A"; } /***/ }), @@ -289,8 +314,10 @@ module.exports = function() { /*!*****************************************!*\ !*** ../require.context/templates/b.js ***! \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = function() { return "This text was generated by template B"; @@ -299,13 +326,15 @@ module.exports = function() { /***/ }), /* 4 */ /*!*****************************************!*\ - !*** ../require.context/templates/a.js ***! + !*** ../require.context/templates/c.js ***! \*****************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = function() { - return "This text was generated by template A"; + return "This text was generated by template C"; } /***/ }) @@ -317,55 +346,40 @@ module.exports = function() { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 1.86 KiB 0 [emitted] - output.js 7.4 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 463 bytes <{1}> [rendered] - > [0] ./example.js 2:1-4:3 - [1] ../require.context/templates sync ^\.\/.*$ 217 bytes {0} [built] - cjs require context ../require.context/templates [0] ./example.js 3:11-64 - [2] ../require.context/templates/c.js 82 bytes {0} [optional] [built] - context element ./c.js [1] ../require.context/templates sync ^\.\/.*$ ./c.js - context element ./c [1] ../require.context/templates sync ^\.\/.*$ ./c - [3] ../require.context/templates/b.js 82 bytes {0} [optional] [built] - context element ./b.js [1] ../require.context/templates sync ^\.\/.*$ ./b.js - context element ./b [1] ../require.context/templates sync ^\.\/.*$ ./b - [4] ../require.context/templates/a.js 82 bytes {0} [optional] [built] - context element ./a.js [1] ../require.context/templates sync ^\.\/.*$ ./a.js - context element ./a [1] ../require.context/templates sync ^\.\/.*$ ./a -chunk {1} output.js (main) 276 bytes >{0}< [entry] [rendered] - > .\example.js main - [0] ./example.js 276 bytes {1} [built] - single entry .\example.js main +asset output.js 9.15 KiB [emitted] (name: main) +asset require_context_templates_sync_recursive_.output.js 2.27 KiB [emitted] +chunk (runtime: main) output.js (main) 266 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + ./example.js 266 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) require_context_templates_sync_recursive_.output.js 457 bytes [rendered] + > ./example.js 2:1-4:3 + dependent modules 240 bytes [dependent] 3 modules + ../require.context/templates/ sync ^\.\/.*$ 217 bytes [built] [code generated] + [no exports] + [used exports unknown] + cjs require context ./example.js 3:11-64 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 627 bytes 0 [emitted] - output.js 1.75 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 463 bytes <{1}> [rendered] - > [0] ./example.js 2:1-4:3 - [1] ../require.context/templates sync ^\.\/.*$ 217 bytes {0} [built] - cjs require context ../require.context/templates [0] ./example.js 3:11-64 - [2] ../require.context/templates/c.js 82 bytes {0} [optional] [built] - context element ./c.js [1] ../require.context/templates sync ^\.\/.*$ ./c.js - context element ./c [1] ../require.context/templates sync ^\.\/.*$ ./c - [3] ../require.context/templates/b.js 82 bytes {0} [optional] [built] - context element ./b.js [1] ../require.context/templates sync ^\.\/.*$ ./b.js - context element ./b [1] ../require.context/templates sync ^\.\/.*$ ./b - [4] ../require.context/templates/a.js 82 bytes {0} [optional] [built] - context element ./a.js [1] ../require.context/templates sync ^\.\/.*$ ./a.js - context element ./a [1] ../require.context/templates sync ^\.\/.*$ ./a -chunk {1} output.js (main) 276 bytes >{0}< [entry] [rendered] - > .\example.js main - [0] ./example.js 276 bytes {1} [built] - single entry .\example.js main +asset output.js 1.81 KiB [emitted] [minimized] (name: main) +asset require_context_templates_sync_recursive_.output.js 646 bytes [emitted] [minimized] +chunk (runtime: main) output.js (main) 266 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + ./example.js 266 bytes [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: main) require_context_templates_sync_recursive_.output.js 457 bytes [rendered] + > ./example.js 2:1-4:3 + dependent modules 240 bytes [dependent] 3 modules + ../require.context/templates/ sync ^\.\/.*$ 217 bytes [built] [code generated] + [no exports] + cjs require context ./example.js 3:11-64 +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitted-require.context/template.md b/examples/code-splitted-require.context/template.md index 0b7b60cfd4f..5c134294f17 100644 --- a/examples/code-splitted-require.context/template.md +++ b/examples/code-splitted-require.context/template.md @@ -1,19 +1,19 @@ # example.js ``` javascript -{{example.js}} +_{{example.js}}_ ``` # dist/output.js ``` javascript -{{dist/output.js}} +_{{dist/output.js}}_ ``` -# dist/0.output.js +# dist/require_context_templates_sync_recursive_.output.js ``` javascript -{{dist/0.output.js}} +_{{dist/require_context_templates_sync_recursive_.output.js}}_ ``` # Info @@ -21,11 +21,11 @@ ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitted-require.context/webpack.config.js b/examples/code-splitted-require.context/webpack.config.js index 0d554bf62ea..3a2046aae21 100644 --- a/examples/code-splitted-require.context/webpack.config.js +++ b/examples/code-splitted-require.context/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitting-bundle-loader/README.md b/examples/code-splitting-bundle-loader/README.md index a59a581ea7c..451bd9a9822 100644 --- a/examples/code-splitting-bundle-loader/README.md +++ b/examples/code-splitting-bundle-loader/README.md @@ -4,7 +4,7 @@ The bundle loader is used to create a wrapper module for `file.js` that loads th # example.js -``` javascript +```javascript require("bundle-loader!./file.js")(function(fileJsExports) { console.log(fileJsExports); }); @@ -12,257 +12,289 @@ require("bundle-loader!./file.js")(function(fileJsExports) { # file.js -``` javascript +```javascript module.exports = "It works"; ``` - # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!***********************************************************!*\ + !*** ../../node_modules/bundle-loader/index.js!./file.js ***! + \***********************************************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +var cbs = [], + data; +module.exports = function(cb) { + if(cbs) cbs.push(cb); + else cb(data); +} +__webpack_require__.e(/*! require.ensure */ "file_js").then((function(require) { + data = __webpack_require__(/*! !!./file.js */ 2); + var callbacks = cbs; + cbs = null; + for(var i = 0, l = callbacks.length; i < l; i++) { + callbacks[i](data); + } +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 1: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "main": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 1); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */ -/*!******************************************************!*\ - !*** (webpack)/node_modules/bundle-loader!./file.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var cbs = [], - data; -module.exports = function(cb) { - if(cbs) cbs.push(cb); - else cb(data); -} -__webpack_require__.e(/*! require.ensure */ 0).then((function(require) { - data = __webpack_require__(/*! !./file.js */ 2); - var callbacks = cbs; - cbs = null; - for(var i = 0, l = callbacks.length; i < l; i++) { - callbacks[i](data); - } -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); - -/***/ }), -/* 1 */ +``` js +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! bundle-loader!./file.js */ 0)(function(fileJsExports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ +__webpack_require__(/*! bundle-loader!./file.js */ 1)(function(fileJsExports) { console.log(fileJsExports); }); +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` -# dist/0.output.js +# dist/file_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["file_js"],{ -/***/ 2: +/***/ 2 /*!*****************!*\ !*** ./file.js ***! \*****************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module) { module.exports = "It works"; -/***/ }) +/***/ } }]); ``` @@ -272,41 +304,41 @@ module.exports = "It works"; ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 257 bytes 0 [emitted] - output.js 7.82 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 28 bytes <{1}> [rendered] - > [0] (webpack)/node_modules/bundle-loader!./file.js 7:0-14:2 - [2] ./file.js 28 bytes {0} [built] - cjs require !!./file.js [0] (webpack)/node_modules/bundle-loader!./file.js 8:8-30 -chunk {1} output.js (main) 378 bytes >{0}< [entry] [rendered] - > .\example.js main - [0] (webpack)/node_modules/bundle-loader!./file.js 281 bytes {1} [built] - cjs require bundle-loader!./file.js [1] ./example.js 1:0-34 - [1] ./example.js 97 bytes {1} [built] - single entry .\example.js main +asset output.js 9.86 KiB [emitted] (name: main) +asset file_js.output.js 348 bytes [emitted] +chunk (runtime: main) file_js.output.js 28 bytes [rendered] + > ../../node_modules/bundle-loader/index.js!./file.js 7:0-14:2 + ./file.js 28 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./file.js 1:0-14 + cjs require !!./file.js ../../node_modules/bundle-loader/index.js!./file.js 8:8-30 +chunk (runtime: main) output.js (main) 375 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + dependent modules 281 bytes [dependent] 1 module + ./example.js 94 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 98 bytes 0 [emitted] - output.js 1.81 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 28 bytes <{1}> [rendered] - > [0] (webpack)/node_modules/bundle-loader!./file.js 7:0-14:2 - [2] ./file.js 28 bytes {0} [built] - cjs require !!./file.js [0] (webpack)/node_modules/bundle-loader!./file.js 8:8-30 -chunk {1} output.js (main) 378 bytes >{0}< [entry] [rendered] - > .\example.js main - [0] (webpack)/node_modules/bundle-loader!./file.js 281 bytes {1} [built] - cjs require bundle-loader!./file.js [1] ./example.js 1:0-34 - [1] ./example.js 97 bytes {1} [built] - single entry .\example.js main +asset output.js 1.83 KiB [emitted] [minimized] (name: main) +asset file_js.output.js 93 bytes [emitted] [minimized] +chunk (runtime: main) file_js.output.js 28 bytes [rendered] + > ../../node_modules/bundle-loader/index.js!./file.js 7:0-14:2 + ./file.js 28 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./file.js 1:0-14 + cjs require !!./file.js ../../node_modules/bundle-loader/index.js!./file.js 8:8-30 +chunk (runtime: main) output.js (main) 375 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + dependent modules 281 bytes [dependent] 1 module + ./example.js 94 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitting-bundle-loader/template.md b/examples/code-splitting-bundle-loader/template.md index f7c26e8b154..38e642808d5 100644 --- a/examples/code-splitting-bundle-loader/template.md +++ b/examples/code-splitting-bundle-loader/template.md @@ -4,27 +4,26 @@ The bundle loader is used to create a wrapper module for `file.js` that loads th # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # file.js -``` javascript -{{file.js}} +```javascript +_{{file.js}}_ ``` - # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` -# dist/0.output.js +# dist/file_js.output.js -``` javascript -{{dist/0.output.js}} +```javascript +_{{dist/file_js.output.js}}_ ``` # Info @@ -32,11 +31,11 @@ The bundle loader is used to create a wrapper module for `file.js` that loads th ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitting-bundle-loader/webpack.config.js b/examples/code-splitting-bundle-loader/webpack.config.js index 0d554bf62ea..3a2046aae21 100644 --- a/examples/code-splitting-bundle-loader/webpack.config.js +++ b/examples/code-splitting-bundle-loader/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitting-depend-on-advanced/README.md b/examples/code-splitting-depend-on-advanced/README.md new file mode 100644 index 00000000000..c1e7e5d1e17 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/README.md @@ -0,0 +1,698 @@ +This example shows how to use Code Splitting with entrypoint dependOn + +# webpack.config.js + +```javascript +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + entry: { + app: { import: "./app.js", dependOn: ["other-vendors"] }, + page1: { import: "./page1.js", dependOn: ["app", "react-vendors"] }, + "react-vendors": ["react", "react-dom", "prop-types"], + "other-vendors": "./other-vendors" + }, + optimization: { + runtimeChunk: "single", + chunkIds: "named" // To keep filename consistent between different modes (for example building only) + }, + stats: { + chunks: true, + chunkRelations: true + } +}; + +module.exports = config; +``` + +# app.js + +```javascript +import isomorphicFetch from "isomorphic-fetch"; +import lodash from "lodash"; + +console.log(isomorphicFetch, lodash); +``` + +# page1.js + +```javascript +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +console.log(isomorphicFetch, react, reactDOM); + +import("./lazy"); +``` + +# lazy.js + +```javascript +import lodash from "lodash"; +import propTypes from "prop-types"; + +console.log(lodash, propTypes); +``` + +# other-vendors.js + +```javascript +import lodash from "lodash"; +import isomorphicFetch from "isomorphic-fetch"; + +// Additional initializations +console.log(lodash, isomorphicFetch); +``` + +# dist/runtime.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "runtime": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if("runtime" != chunkId) { +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } else installedChunks[chunkId] = 0; +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/******/ +/******/ +/******/ })() +; +``` + +# dist/app.js + +```javascript +"use strict"; +(self["webpackChunk"] = self["webpackChunk"] || []).push([["app"],{ + +/***/ 6 +/*!****************!*\ + !*** ./app.js ***! + \****************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */ +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! isomorphic-fetch */ 5); +/* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ 4); +/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); + + + +console.log((isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default()), (lodash__WEBPACK_IMPORTED_MODULE_1___default())); + + +/***/ } + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["other-vendors"], () => (__webpack_exec__(6))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); +``` + +# dist/page1.js + +```javascript +"use strict"; +(self["webpackChunk"] = self["webpackChunk"] || []).push([["page1"],{ + +/***/ 7 +/*!******************!*\ + !*** ./page1.js ***! + \******************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.e, __webpack_require__.* */ +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! isomorphic-fetch */ 5); +/* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ 0); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ 1); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__); + + + + +console.log((isomorphic_fetch__WEBPACK_IMPORTED_MODULE_0___default()), (react__WEBPACK_IMPORTED_MODULE_1___default()), (react_dom__WEBPACK_IMPORTED_MODULE_2___default())); + +__webpack_require__.e(/*! import() */ "lazy_js").then(__webpack_require__.bind(__webpack_require__, /*! ./lazy */ 8)); + + +/***/ } + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["app","react-vendors","other-vendors"], () => (__webpack_exec__(7))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); +``` + +# dist/other-vendors.js + +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["other-vendors"],[ +/* 0 */, +/* 1 */, +/* 2 */, +/* 3 */ +/*!**************************!*\ + !*** ./other-vendors.js ***! + \**************************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ 4); +/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! isomorphic-fetch */ 5); +/* harmony import */ var isomorphic_fetch__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(isomorphic_fetch__WEBPACK_IMPORTED_MODULE_1__); + + + +// Additional initializations +console.log((lodash__WEBPACK_IMPORTED_MODULE_0___default()), (isomorphic_fetch__WEBPACK_IMPORTED_MODULE_1___default())); + + +/***/ }), +/* 4 */ +/*!********************************!*\ + !*** ./node_modules/lodash.js ***! + \********************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'lodash'; + + +/***/ }), +/* 5 */ +/*!******************************************!*\ + !*** ./node_modules/isomorphic-fetch.js ***! + \******************************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = "isomorphic-fetch"; + + +/***/ }) +], +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ var __webpack_exports__ = (__webpack_exec__(3)); +/******/ } +]); +``` + +# dist/react-vendors.js + +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["react-vendors"],[ +/* 0 */ +/*!*******************************!*\ + !*** ./node_modules/react.js ***! + \*******************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'react'; + + +/***/ }), +/* 1 */ +/*!***********************************!*\ + !*** ./node_modules/react-dom.js ***! + \***********************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'react-dom'; + + +/***/ }), +/* 2 */ +/*!************************************!*\ + !*** ./node_modules/prop-types.js ***! + \************************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'prop-types'; + + +/***/ }) +], +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ var __webpack_exports__ = (__webpack_exec__(0), __webpack_exec__(1), __webpack_exec__(2)); +/******/ } +]); +``` + +# Info + +## Unoptimized + +``` +asset runtime.js 11.3 KiB [emitted] (name: runtime) +asset other-vendors.js 2.13 KiB [emitted] (name: other-vendors) +asset page1.js 1.9 KiB [emitted] (name: page1) +asset app.js 1.43 KiB [emitted] (name: app) +asset react-vendors.js 1.33 KiB [emitted] (name: react-vendors) +asset lazy_js.js 1.1 KiB [emitted] +Entrypoint app 1.43 KiB = app.js +Entrypoint page1 1.9 KiB = page1.js +Entrypoint react-vendors 12.7 KiB = runtime.js 11.3 KiB react-vendors.js 1.33 KiB +Entrypoint other-vendors 13.5 KiB = runtime.js 11.3 KiB other-vendors.js 2.13 KiB +chunk (runtime: runtime) app.js (app) 116 bytes <{other-vendors}> <{runtime}> >{page1}< [initial] [rendered] + > ./app.js app + ./app.js 116 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./app.js app +chunk (runtime: runtime) lazy_js.js 98 bytes <{page1}> [rendered] + > ./lazy ./page1.js 7:0-16 + ./lazy.js 98 bytes [built] [code generated] + [no exports] + [used exports unknown] + import() ./lazy ./page1.js 7:0-16 +chunk (runtime: runtime) other-vendors.js (other-vendors) 210 bytes ={runtime}= >{app}< [initial] [rendered] + > ./other-vendors other-vendors + dependent modules 64 bytes [dependent] 2 modules + ./other-vendors.js 146 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./other-vendors other-vendors +chunk (runtime: runtime) page1.js (page1) 176 bytes <{app}> <{react-vendors}> <{runtime}> >{lazy_js}< [initial] [rendered] + > ./page1.js page1 + ./page1.js 176 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./page1.js page1 +chunk (runtime: runtime) react-vendors.js (react-vendors) 87 bytes ={runtime}= >{page1}< [initial] [rendered] + > prop-types react-vendors + > react react-vendors + > react-dom react-vendors + ./node_modules/prop-types.js 31 bytes [built] [code generated] + [used exports unknown] + from origin ./lazy.js + harmony side effect evaluation prop-types ./lazy.js 2:0-35 + harmony import specifier prop-types ./lazy.js 4:20-29 + cjs self exports reference ./node_modules/prop-types.js 1:0-14 + entry prop-types react-vendors + ./node_modules/react-dom.js 30 bytes [built] [code generated] + [used exports unknown] + from origin ./page1.js + harmony side effect evaluation react-dom ./page1.js 3:0-33 + harmony import specifier react-dom ./page1.js 5:36-44 + cjs self exports reference ./node_modules/react-dom.js 1:0-14 + entry react-dom react-vendors + ./node_modules/react.js 26 bytes [built] [code generated] + [used exports unknown] + from origin ./page1.js + harmony side effect evaluation react ./page1.js 2:0-26 + harmony import specifier react ./page1.js 5:29-34 + cjs self exports reference ./node_modules/react.js 1:0-14 + entry react react-vendors +chunk (runtime: runtime) runtime.js (runtime) 6.72 KiB ={other-vendors}= ={react-vendors}= >{app}< >{page1}< [entry] [rendered] + > ./other-vendors other-vendors + > prop-types react-vendors + > react react-vendors + > react-dom react-vendors + runtime modules 6.72 KiB 10 modules +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset runtime.js 2.34 KiB [emitted] [minimized] (name: runtime) +asset page1.js 278 bytes [emitted] [minimized] (name: page1) +asset other-vendors.js 236 bytes [emitted] [minimized] (name: other-vendors) +asset react-vendors.js 201 bytes [emitted] [minimized] (name: react-vendors) +asset app.js 197 bytes [emitted] [minimized] (name: app) +asset lazy_js.js 157 bytes [emitted] [minimized] +Entrypoint app 197 bytes = app.js +Entrypoint page1 278 bytes = page1.js +Entrypoint react-vendors 2.54 KiB = runtime.js 2.34 KiB react-vendors.js 201 bytes +Entrypoint other-vendors 2.57 KiB = runtime.js 2.34 KiB other-vendors.js 236 bytes +chunk (runtime: runtime) app.js (app) 116 bytes <{other-vendors}> <{runtime}> >{page1}< [initial] [rendered] + > ./app.js app + ./app.js 116 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./app.js app +chunk (runtime: runtime) lazy_js.js 98 bytes <{page1}> [rendered] + > ./lazy ./page1.js 7:0-16 + ./lazy.js 98 bytes [built] [code generated] + [no exports] + import() ./lazy ./page1.js 7:0-16 +chunk (runtime: runtime) other-vendors.js (other-vendors) 210 bytes ={runtime}= >{app}< [initial] [rendered] + > ./other-vendors other-vendors + dependent modules 64 bytes [dependent] 2 modules + ./other-vendors.js 146 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./other-vendors other-vendors +chunk (runtime: runtime) page1.js (page1) 176 bytes <{app}> <{react-vendors}> <{runtime}> >{lazy_js}< [initial] [rendered] + > ./page1.js page1 + ./page1.js 176 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./page1.js page1 +chunk (runtime: runtime) react-vendors.js (react-vendors) 87 bytes ={runtime}= >{page1}< [initial] [rendered] + > prop-types react-vendors + > react react-vendors + > react-dom react-vendors + ./node_modules/prop-types.js 31 bytes [built] [code generated] + [used exports unknown] + from origin ./lazy.js + harmony side effect evaluation prop-types ./lazy.js 2:0-35 + harmony import specifier prop-types ./lazy.js 4:20-29 + cjs self exports reference ./node_modules/prop-types.js 1:0-14 + entry prop-types react-vendors + ./node_modules/react-dom.js 30 bytes [built] [code generated] + [used exports unknown] + from origin ./page1.js + harmony side effect evaluation react-dom ./page1.js 3:0-33 + harmony import specifier react-dom ./page1.js 5:36-44 + cjs self exports reference ./node_modules/react-dom.js 1:0-14 + entry react-dom react-vendors + ./node_modules/react.js 26 bytes [built] [code generated] + [used exports unknown] + from origin ./page1.js + harmony side effect evaluation react ./page1.js 2:0-26 + harmony import specifier react ./page1.js 5:29-34 + cjs self exports reference ./node_modules/react.js 1:0-14 + entry react react-vendors +chunk (runtime: runtime) runtime.js (runtime) 6.72 KiB ={other-vendors}= ={react-vendors}= >{app}< >{page1}< [entry] [rendered] + > ./other-vendors other-vendors + > prop-types react-vendors + > react react-vendors + > react-dom react-vendors + runtime modules 6.72 KiB 10 modules +webpack X.X.X compiled successfully +``` diff --git a/examples/code-splitting-depend-on-advanced/app.js b/examples/code-splitting-depend-on-advanced/app.js new file mode 100644 index 00000000000..2fd657f1d8f --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/app.js @@ -0,0 +1,4 @@ +import isomorphicFetch from "isomorphic-fetch"; +import lodash from "lodash"; + +console.log(isomorphicFetch, lodash); diff --git a/examples/i18n/build.js b/examples/code-splitting-depend-on-advanced/build.js similarity index 100% rename from examples/i18n/build.js rename to examples/code-splitting-depend-on-advanced/build.js diff --git a/examples/code-splitting-depend-on-advanced/lazy.js b/examples/code-splitting-depend-on-advanced/lazy.js new file mode 100644 index 00000000000..e2013cc26fd --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/lazy.js @@ -0,0 +1,4 @@ +import lodash from "lodash"; +import propTypes from "prop-types"; + +console.log(lodash, propTypes); diff --git a/examples/code-splitting-depend-on-advanced/node_modules/isomorphic-fetch.js b/examples/code-splitting-depend-on-advanced/node_modules/isomorphic-fetch.js new file mode 100644 index 00000000000..ce0c36b3158 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/node_modules/isomorphic-fetch.js @@ -0,0 +1 @@ +module.exports = "isomorphic-fetch"; diff --git a/examples/code-splitting-depend-on-advanced/node_modules/lodash.js b/examples/code-splitting-depend-on-advanced/node_modules/lodash.js new file mode 100644 index 00000000000..8cae1154e6b --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/node_modules/lodash.js @@ -0,0 +1 @@ +module.exports = 'lodash'; diff --git a/examples/code-splitting-depend-on-advanced/node_modules/prop-types.js b/examples/code-splitting-depend-on-advanced/node_modules/prop-types.js new file mode 100644 index 00000000000..9c6971329ce --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/node_modules/prop-types.js @@ -0,0 +1 @@ +module.exports = 'prop-types'; diff --git a/examples/code-splitting-depend-on-advanced/node_modules/react-dom.js b/examples/code-splitting-depend-on-advanced/node_modules/react-dom.js new file mode 100644 index 00000000000..d2f4c643e28 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/node_modules/react-dom.js @@ -0,0 +1 @@ +module.exports = 'react-dom'; diff --git a/examples/code-splitting-depend-on-advanced/node_modules/react.js b/examples/code-splitting-depend-on-advanced/node_modules/react.js new file mode 100644 index 00000000000..11c0b89c737 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/node_modules/react.js @@ -0,0 +1 @@ +module.exports = 'react'; diff --git a/examples/code-splitting-depend-on-advanced/other-vendors.js b/examples/code-splitting-depend-on-advanced/other-vendors.js new file mode 100644 index 00000000000..49e051a810c --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/other-vendors.js @@ -0,0 +1,5 @@ +import lodash from "lodash"; +import isomorphicFetch from "isomorphic-fetch"; + +// Additional initializations +console.log(lodash, isomorphicFetch); diff --git a/examples/code-splitting-depend-on-advanced/page1.js b/examples/code-splitting-depend-on-advanced/page1.js new file mode 100644 index 00000000000..18c9e0c9ba6 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/page1.js @@ -0,0 +1,7 @@ +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +console.log(isomorphicFetch, react, reactDOM); + +import("./lazy"); diff --git a/examples/code-splitting-depend-on-advanced/template.md b/examples/code-splitting-depend-on-advanced/template.md new file mode 100644 index 00000000000..e2e842027e5 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/template.md @@ -0,0 +1,75 @@ +This example shows how to use Code Splitting with entrypoint dependOn + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# app.js + +```javascript +_{{app.js}}_ +``` + +# page1.js + +```javascript +_{{page1.js}}_ +``` + +# lazy.js + +```javascript +_{{lazy.js}}_ +``` + +# other-vendors.js + +```javascript +_{{other-vendors.js}}_ +``` + +# dist/runtime.js + +```javascript +_{{dist/runtime.js}}_ +``` + +# dist/app.js + +```javascript +_{{dist/app.js}}_ +``` + +# dist/page1.js + +```javascript +_{{dist/page1.js}}_ +``` + +# dist/other-vendors.js + +```javascript +_{{dist/other-vendors.js}}_ +``` + +# dist/react-vendors.js + +```javascript +_{{dist/react-vendors.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/code-splitting-depend-on-advanced/webpack.config.js b/examples/code-splitting-depend-on-advanced/webpack.config.js new file mode 100644 index 00000000000..620cd9240b6 --- /dev/null +++ b/examples/code-splitting-depend-on-advanced/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + entry: { + app: { import: "./app.js", dependOn: ["other-vendors"] }, + page1: { import: "./page1.js", dependOn: ["app", "react-vendors"] }, + "react-vendors": ["react", "react-dom", "prop-types"], + "other-vendors": "./other-vendors" + }, + optimization: { + runtimeChunk: "single", + chunkIds: "named" // To keep filename consistent between different modes (for example building only) + }, + stats: { + chunks: true, + chunkRelations: true + } +}; + +module.exports = config; diff --git a/examples/code-splitting-depend-on-simple/README.md b/examples/code-splitting-depend-on-simple/README.md new file mode 100644 index 00000000000..5a35fb5f4c8 --- /dev/null +++ b/examples/code-splitting-depend-on-simple/README.md @@ -0,0 +1,386 @@ +This example shows how to use Code Splitting with entrypoint dependOn + +# webpack.config.js + +```javascript +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + entry: { + app: { import: "./app.js", dependOn: ["react-vendors"] }, + "react-vendors": ["react", "react-dom", "prop-types"] + }, + optimization: { + chunkIds: "named" // To keep filename consistent between different modes (for example building only) + }, + stats: { + chunks: true, + chunkRelations: true + } +}; + +module.exports = config; +``` + +# app.js + +```javascript +import react from "react"; +import reactDOM from "react-dom"; +import propTypes from "prop-types"; + +console.log(react, reactDOM, propTypes); +``` + +# dist/app.js + +```javascript +"use strict"; +(self["webpackChunk"] = self["webpackChunk"] || []).push([["app"],{ + +/***/ 3 +/*!****************!*\ + !*** ./app.js ***! + \****************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */ +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ 0); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ 1); +/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ 2); +/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__); + + + + +console.log((react__WEBPACK_IMPORTED_MODULE_0___default()), (react_dom__WEBPACK_IMPORTED_MODULE_1___default()), (prop_types__WEBPACK_IMPORTED_MODULE_2___default())); + + +/***/ } + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ var __webpack_exports__ = (__webpack_exec__(3)); +/******/ } +]); +``` + +# dist/react-vendors.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */ +/*!*******************************!*\ + !*** ./node_modules/react.js ***! + \*******************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'react'; + + +/***/ }), +/* 1 */ +/*!***********************************!*\ + !*** ./node_modules/react-dom.js ***! + \***********************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'react-dom'; + + +/***/ }), +/* 2 */ +/*!************************************!*\ + !*** ./node_modules/prop-types.js ***! + \************************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = 'prop-types'; + + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "react-vendors": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ __webpack_require__(0); +/******/ __webpack_require__(1); +/******/ var __webpack_exports__ = __webpack_require__(2); +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +``` + +# Info + +## Unoptimized + +``` +asset react-vendors.js 7.87 KiB [emitted] (name: react-vendors) +asset app.js 1.62 KiB [emitted] (name: app) +chunk (runtime: react-vendors) app.js (app) 139 bytes <{react-vendors}> [initial] [rendered] + > ./app.js app + ./app.js 139 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./app.js app +chunk (runtime: react-vendors) react-vendors.js (react-vendors) 87 bytes (javascript) 3.29 KiB (runtime) >{app}< [entry] [rendered] + > prop-types react-vendors + > react react-vendors + > react-dom react-vendors + runtime modules 3.29 KiB 6 modules + cacheable modules 87 bytes + ./node_modules/prop-types.js 31 bytes [built] [code generated] + [used exports unknown] + from origin ./app.js + harmony side effect evaluation prop-types ./app.js 3:0-35 + harmony import specifier prop-types ./app.js 5:29-38 + cjs self exports reference ./node_modules/prop-types.js 1:0-14 + entry prop-types react-vendors + ./node_modules/react-dom.js 30 bytes [built] [code generated] + [used exports unknown] + from origin ./app.js + harmony side effect evaluation react-dom ./app.js 2:0-33 + harmony import specifier react-dom ./app.js 5:19-27 + cjs self exports reference ./node_modules/react-dom.js 1:0-14 + entry react-dom react-vendors + ./node_modules/react.js 26 bytes [built] [code generated] + [used exports unknown] + from origin ./app.js + harmony side effect evaluation react ./app.js 1:0-26 + harmony import specifier react ./app.js 5:12-17 + cjs self exports reference ./node_modules/react.js 1:0-14 + entry react react-vendors +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset react-vendors.js 1.15 KiB [emitted] [minimized] (name: react-vendors) +asset app.js 184 bytes [emitted] [minimized] (name: app) +chunk (runtime: react-vendors) app.js (app) 139 bytes <{react-vendors}> [initial] [rendered] + > ./app.js app + ./app.js 139 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./app.js app +chunk (runtime: react-vendors) react-vendors.js (react-vendors) 87 bytes (javascript) 3.03 KiB (runtime) >{app}< [entry] [rendered] + > prop-types react-vendors + > react react-vendors + > react-dom react-vendors + runtime modules 3.03 KiB 5 modules + cacheable modules 87 bytes + ./node_modules/prop-types.js 31 bytes [built] [code generated] + [used exports unknown] + from origin ./app.js + harmony side effect evaluation prop-types ./app.js 3:0-35 + harmony import specifier prop-types ./app.js 5:29-38 + cjs self exports reference ./node_modules/prop-types.js 1:0-14 + entry prop-types react-vendors + ./node_modules/react-dom.js 30 bytes [built] [code generated] + [used exports unknown] + from origin ./app.js + harmony side effect evaluation react-dom ./app.js 2:0-33 + harmony import specifier react-dom ./app.js 5:19-27 + cjs self exports reference ./node_modules/react-dom.js 1:0-14 + entry react-dom react-vendors + ./node_modules/react.js 26 bytes [built] [code generated] + [used exports unknown] + from origin ./app.js + harmony side effect evaluation react ./app.js 1:0-26 + harmony import specifier react ./app.js 5:12-17 + cjs self exports reference ./node_modules/react.js 1:0-14 + entry react react-vendors +webpack X.X.X compiled successfully +``` diff --git a/examples/code-splitting-depend-on-simple/app.js b/examples/code-splitting-depend-on-simple/app.js new file mode 100644 index 00000000000..0249287abe5 --- /dev/null +++ b/examples/code-splitting-depend-on-simple/app.js @@ -0,0 +1,5 @@ +import react from "react"; +import reactDOM from "react-dom"; +import propTypes from "prop-types"; + +console.log(react, reactDOM, propTypes); diff --git a/examples/code-splitting-depend-on-simple/build.js b/examples/code-splitting-depend-on-simple/build.js new file mode 100644 index 00000000000..39292a5b712 --- /dev/null +++ b/examples/code-splitting-depend-on-simple/build.js @@ -0,0 +1,2 @@ +global.NO_TARGET_ARGS = true; +require("../build-common"); \ No newline at end of file diff --git a/examples/code-splitting-depend-on-simple/node_modules/prop-types.js b/examples/code-splitting-depend-on-simple/node_modules/prop-types.js new file mode 100644 index 00000000000..9c6971329ce --- /dev/null +++ b/examples/code-splitting-depend-on-simple/node_modules/prop-types.js @@ -0,0 +1 @@ +module.exports = 'prop-types'; diff --git a/examples/code-splitting-depend-on-simple/node_modules/react-dom.js b/examples/code-splitting-depend-on-simple/node_modules/react-dom.js new file mode 100644 index 00000000000..d2f4c643e28 --- /dev/null +++ b/examples/code-splitting-depend-on-simple/node_modules/react-dom.js @@ -0,0 +1 @@ +module.exports = 'react-dom'; diff --git a/examples/code-splitting-depend-on-simple/node_modules/react.js b/examples/code-splitting-depend-on-simple/node_modules/react.js new file mode 100644 index 00000000000..11c0b89c737 --- /dev/null +++ b/examples/code-splitting-depend-on-simple/node_modules/react.js @@ -0,0 +1 @@ +module.exports = 'react'; diff --git a/examples/code-splitting-depend-on-simple/template.md b/examples/code-splitting-depend-on-simple/template.md new file mode 100644 index 00000000000..c89cef9b070 --- /dev/null +++ b/examples/code-splitting-depend-on-simple/template.md @@ -0,0 +1,39 @@ +This example shows how to use Code Splitting with entrypoint dependOn + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# app.js + +```javascript +_{{app.js}}_ +``` + +# dist/app.js + +```javascript +_{{dist/app.js}}_ +``` + +# dist/react-vendors.js + +```javascript +_{{dist/react-vendors.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/code-splitting-depend-on-simple/webpack.config.js b/examples/code-splitting-depend-on-simple/webpack.config.js new file mode 100644 index 00000000000..9768ec4949e --- /dev/null +++ b/examples/code-splitting-depend-on-simple/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + entry: { + app: { import: "./app.js", dependOn: ["react-vendors"] }, + "react-vendors": ["react", "react-dom", "prop-types"] + }, + optimization: { + chunkIds: "named" // To keep filename consistent between different modes (for example building only) + }, + stats: { + chunks: true, + chunkRelations: true + } +}; + +module.exports = config; diff --git a/examples/code-splitting-harmony/README.md b/examples/code-splitting-harmony/README.md index c3e9e9d4c8d..faaf7936948 100644 --- a/examples/code-splitting-harmony/README.md +++ b/examples/code-splitting-harmony/README.md @@ -2,13 +2,13 @@ This example show how to use Code Splitting with the ES6 module syntax. The standard `import` is sync. -`import(module: string) -> Promise` can be used to load modules on demand. This acts as split point for webpack and creates a chunk. +`import(module: string) -> Promise` can be used to load modules on demand. This acts as a split point for webpack and creates a chunk. Providing dynamic expressions to `import` is possible. The same limits as with dynamic expressions in `require` calls apply here. Each possible module creates an additional chunk. In this example `import("c/" + name)` creates two additional chunks (one for each file in `node_modules/c/`). This is called "async context". # example.js -``` javascript +```javascript import a from "a"; import("b").then(function(b) { @@ -24,271 +24,374 @@ Promise.all([loadC("1"), loadC("2")]).then(function(arr) { }); ``` - # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!***************************!*\ + !*** ./node_modules/a.js ***! + \***************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +// module a + +/***/ }), +/* 2 */ +/*!********************************************************!*\ + !*** ./node_modules/c/ lazy ^\.\/.*$ namespace object ***! + \********************************************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__.o, __webpack_require__, __webpack_require__.e, __webpack_require__.t, __webpack_require__.* */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var map = { + "./1": [ + 4, + [ + 197 + ] + ], + "./1.js": [ + 4, + [ + 197 + ] + ], + "./2": [ + 5, + [ + 140 + ] + ], + "./2.js": [ + 5, + [ + 140 + ] + ] +}; +function webpackAsyncContext(req) { + try { + if(!__webpack_require__.o(map, req)) { + return Promise.resolve().then(() => { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +}); + } + } catch(err) { + return Promise.reject(err); + } + + var ids = map[req], id = ids[0]; + return __webpack_require__.e(ids[1][0]).then(() => (__webpack_require__.t(id, 7 | 16))); +} +webpackAsyncContext.keys = () => (Object.keys(map)); +webpackAsyncContext.id = 2; +module.exports = webpackAsyncContext; + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 3: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ (() => { +/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); +/******/ } +/******/ def['default'] = () => (value); +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 792: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 4); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */ -/*!*******************************************************!*\ - !*** ./node_modules/c lazy ^\.\/.*$ namespace object ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./1": [ - 1, - 1 - ], - "./1.js": [ - 1, - 1 - ], - "./2": [ - 0, - 0 - ], - "./2.js": [ - 0, - 0 - ] -}; -function webpackAsyncContext(req) { - var ids = map[req]; - if(!ids) { - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); - } - return __webpack_require__.e(ids[1]).then(function() { - var module = __webpack_require__(ids[0]); - return (typeof module === "object" && module && module.__esModule ? module : Object.assign({/* fake namespace object */}, typeof module === "object" && module, { "default": module })); - }); -} -webpackAsyncContext.keys = function webpackAsyncContextKeys() { - return Object.keys(map); -}; -webpackAsyncContext.id = 2; -module.exports = webpackAsyncContext; - -/***/ }), -/* 3 */ -/*!***************************!*\ - !*** ./node_modules/a.js ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// module a - -/***/ }), -/* 4 */ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. +(() => { +"use strict"; /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.n, __webpack_require__.r, __webpack_exports__, __webpack_require__.e, __webpack_require__.t, __webpack_require__.* */ __webpack_require__.r(__webpack_exports__); -/* harmony import */ var a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! a */ 3); +/* harmony import */ var a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! a */ 1); /* harmony import */ var a__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(a__WEBPACK_IMPORTED_MODULE_0__); -__webpack_require__.e(/*! import() */ 2).then(function() { var module = __webpack_require__(/*! b */ 5); return typeof module === "object" && module && module.__esModule ? module : Object.assign({/* fake namespace object */}, typeof module === "object" && module, { "default": module }); }).then(function(b) { +__webpack_require__.e(/*! import() */ 414).then(__webpack_require__.t.bind(__webpack_require__, /*! b */ 3, 23)).then(function(b) { console.log("b loaded", b); }) @@ -300,74 +403,84 @@ Promise.all([loadC("1"), loadC("2")]).then(function(arr) { console.log("c/1 and c/2 loaded", arr); }); +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` - # Info ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 275 bytes 0 [emitted] -1.output.js 284 bytes 1 [emitted] -2.output.js 270 bytes 2 [emitted] - output.js 9.11 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 13 bytes <{3}> [rendered] - > ./2 [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./2 - > ./2.js [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./2.js - 1 module -chunk {1} 1.output.js 13 bytes <{3}> [rendered] - > ./1 [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./1 - > ./1.js [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./1.js - 1 module -chunk {2} 2.output.js 11 bytes <{3}> [rendered] - > b [4] ./example.js 3:0-11 - 1 module -chunk {3} output.js (main) 427 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [2] ./node_modules/c lazy ^\.\/.*$ namespace object 160 bytes {3} [built] - import() context lazy c [4] ./example.js 8:8-27 - [4] ./example.js 256 bytes {3} [built] - [no exports] - single entry .\example.js main - + 1 hidden module +asset output.js 13.9 KiB [emitted] (name: main) +asset 140.output.js 284 bytes [emitted] +asset 197.output.js 284 bytes [emitted] +asset 414.output.js 276 bytes [emitted] +chunk (runtime: main) 140.output.js 13 bytes [rendered] + > ./2 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2 + > ./2.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2.js + ./node_modules/c/2.js 13 bytes [optional] [built] [code generated] + [used exports unknown] + import() context element ./2 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2 + import() context element ./2.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2.js +chunk (runtime: main) 197.output.js 13 bytes [rendered] + > ./1 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1 + > ./1.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1.js + ./node_modules/c/1.js 13 bytes [optional] [built] [code generated] + [used exports unknown] + import() context element ./1 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1 + import() context element ./1.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1.js +chunk (runtime: main) 414.output.js 11 bytes [rendered] + > b ./example.js 3:0-11 + ./node_modules/b.js 11 bytes [built] [code generated] + [used exports unknown] + import() b ./example.js 3:0-11 +chunk (runtime: main) output.js (main) 414 bytes (javascript) 6.89 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 6.89 KiB 10 modules + dependent modules 171 bytes [dependent] 2 modules + ./example.js 243 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 76 bytes 0 [emitted] -1.output.js 77 bytes 1 [emitted] -2.output.js 78 bytes 2 [emitted] - output.js 2.35 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 13 bytes <{3}> [rendered] - > ./2 [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./2 - > ./2.js [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./2.js - 1 module -chunk {1} 1.output.js 13 bytes <{3}> [rendered] - > ./1 [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./1 - > ./1.js [2] ./node_modules/c lazy ^\.\/.*$ namespace object ./1.js - 1 module -chunk {2} 2.output.js 11 bytes <{3}> [rendered] - > b [4] ./example.js 3:0-11 - 1 module -chunk {3} output.js (main) 427 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [2] ./node_modules/c lazy ^\.\/.*$ namespace object 160 bytes {3} [built] - import() context lazy c [4] ./example.js 8:8-27 - [4] ./example.js 256 bytes {3} [built] - [no exports] - single entry .\example.js main - + 1 hidden module +asset output.js 2.92 KiB [emitted] [minimized] (name: main) +asset 140.output.js 66 bytes [emitted] [minimized] +asset 197.output.js 66 bytes [emitted] [minimized] +asset 414.output.js 66 bytes [emitted] [minimized] +chunk (runtime: main) 140.output.js 13 bytes [rendered] + > ./2 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2 + > ./2.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2.js + ./node_modules/c/2.js 13 bytes [optional] [built] [code generated] + [used exports unknown] + import() context element ./2 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2 + import() context element ./2.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./2.js +chunk (runtime: main) 197.output.js 13 bytes [rendered] + > ./1 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1 + > ./1.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1.js + ./node_modules/c/1.js 13 bytes [optional] [built] [code generated] + [used exports unknown] + import() context element ./1 ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1 + import() context element ./1.js ./node_modules/c/ lazy ^\.\/.*$ namespace object ./1.js +chunk (runtime: main) 414.output.js 11 bytes [rendered] + > b ./example.js 3:0-11 + ./node_modules/b.js 11 bytes [built] [code generated] + [used exports unknown] + import() b ./example.js 3:0-11 +chunk (runtime: main) output.js (main) 403 bytes (javascript) 6.63 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 6.63 KiB 9 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 243 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitting-harmony/template.md b/examples/code-splitting-harmony/template.md index 5f6a68cdf3b..3f47ddca765 100644 --- a/examples/code-splitting-harmony/template.md +++ b/examples/code-splitting-harmony/template.md @@ -2,34 +2,32 @@ This example show how to use Code Splitting with the ES6 module syntax. The standard `import` is sync. -`import(module: string) -> Promise` can be used to load modules on demand. This acts as split point for webpack and creates a chunk. +`import(module: string) -> Promise` can be used to load modules on demand. This acts as a split point for webpack and creates a chunk. Providing dynamic expressions to `import` is possible. The same limits as with dynamic expressions in `require` calls apply here. Each possible module creates an additional chunk. In this example `import("c/" + name)` creates two additional chunks (one for each file in `node_modules/c/`). This is called "async context". # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` - # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` - # Info ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitting-harmony/webpack.config.js b/examples/code-splitting-harmony/webpack.config.js index 0d554bf62ea..6685d0c375d 100644 --- a/examples/code-splitting-harmony/webpack.config.js +++ b/examples/code-splitting-harmony/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitting-native-import-context-filter/README.md b/examples/code-splitting-native-import-context-filter/README.md index 86f2a9e9164..68bf6a80ecb 100644 --- a/examples/code-splitting-native-import-context-filter/README.md +++ b/examples/code-splitting-native-import-context-filter/README.md @@ -1,9 +1,9 @@ # example.js -This example illustrates how to filter the ContextModule results of `import()` statements. only `.js` files that don't +This example illustrates how to filter the ContextModule results of `import()` statements. Only `.js` files that don't end in `.noimport.js` within the `templates` folder will be bundled. -``` javascript +```javascript async function getTemplate(templateName) { try { let template = await import( @@ -28,16 +28,16 @@ getTemplate("baz.noimport"); # templates/ -* foo.js -* foo.noimport.js -* baz.js -* foo.noimport.js -* bar.js -* foo.noimport.js +- foo.js +- foo.noimport.js +- baz.js +- foo.noimport.js +- bar.js +- foo.noimport.js All templates are of this pattern: -``` javascript +```javascript var foo = "foo"; export default foo; @@ -45,263 +45,326 @@ export default foo; # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!***************************************************************************************************************!*\ + !*** ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ***! + \***************************************************************************************************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__.o, __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +var map = { + "./bar": [ + 2, + [ + 776 + ] + ], + "./bar.js": [ + 2, + [ + 776 + ] + ], + "./baz": [ + 3, + [ + 0 + ] + ], + "./baz.js": [ + 3, + [ + 0 + ] + ], + "./foo": [ + 4, + [ + 717 + ] + ], + "./foo.js": [ + 4, + [ + 717 + ] + ] +}; +function webpackAsyncContext(req) { + try { + if(!__webpack_require__.o(map, req)) { + return Promise.resolve().then(() => { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +}); + } + } catch(err) { + return Promise.reject(err); + } + + var ids = map[req], id = ids[0]; + return __webpack_require__.e(ids[1][0]).then(() => (__webpack_require__(id))); +} +webpackAsyncContext.keys = () => (Object.keys(map)); +webpackAsyncContext.id = 1; +module.exports = webpackAsyncContext; + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 3: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 792: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 4); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */, -/* 3 */ -/*!******************************************************************************************!*\ - !*** ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ***! - \******************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./bar": [ - 2, - 2 - ], - "./bar.js": [ - 2, - 2 - ], - "./baz": [ - 1, - 1 - ], - "./baz.js": [ - 1, - 1 - ], - "./foo": [ - 0, - 0 - ], - "./foo.js": [ - 0, - 0 - ] -}; -function webpackAsyncContext(req) { - var ids = map[req]; - if(!ids) { - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); - } - return __webpack_require__.e(ids[1]).then(function() { - var module = __webpack_require__(ids[0]); - return module; - }); -} -webpackAsyncContext.keys = function webpackAsyncContextKeys() { - return Object.keys(map); -}; -webpackAsyncContext.id = 3; -module.exports = webpackAsyncContext; - -/***/ }), -/* 4 */ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ async function getTemplate(templateName) { try { - let template = await __webpack_require__(3)(`./${templateName}`); + let template = await __webpack_require__(1)(`./${templateName}`); console.log(template); } catch(err) { console.error(err); @@ -317,9 +380,10 @@ getTemplate("bar.noimport"); getTemplate("baz.noimport"); +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` # Info @@ -327,79 +391,78 @@ getTemplate("baz.noimport"); ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 433 bytes 0 [emitted] -1.output.js 442 bytes 1 [emitted] -2.output.js 436 bytes 2 [emitted] - output.js 8.47 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 38 bytes <{3}> [rendered] - > ./foo [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo - > ./foo.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo.js - [0] ./templates/foo.js 38 bytes {0} [optional] [built] - [exports: default] - context element ./foo.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo.js - context element ./foo [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo -chunk {1} 1.output.js 38 bytes <{3}> [rendered] - > ./baz [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz - > ./baz.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz.js - [1] ./templates/baz.js 38 bytes {1} [optional] [built] - [exports: default] - context element ./baz.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz.js - context element ./baz [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz -chunk {2} 2.output.js 38 bytes <{3}> [rendered] - > ./bar [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar - > ./bar.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar.js - [2] ./templates/bar.js 38 bytes {2} [optional] [built] - [exports: default] - context element ./bar.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar.js - context element ./bar [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar -chunk {3} output.js (main) 597 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object 160 bytes {3} [optional] [built] - import() context lazy ./templates [4] ./example.js 3:23-7:3 - [4] ./example.js 437 bytes {3} [built] - single entry .\example.js main +asset output.js 11.5 KiB [emitted] (name: main) +asset 717.output.js 846 bytes [emitted] +asset 776.output.js 846 bytes [emitted] +asset 0.output.js 844 bytes [emitted] +chunk (runtime: main) 0.output.js 38 bytes [rendered] + > ./baz ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz + > ./baz.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz.js + ./templates/baz.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./baz ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz + import() context element ./baz.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz.js +chunk (runtime: main) 717.output.js 38 bytes [rendered] + > ./foo ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo + > ./foo.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo.js + ./templates/foo.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./foo ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo + import() context element ./foo.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo.js +chunk (runtime: main) 776.output.js 38 bytes [rendered] + > ./bar ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar + > ./bar.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar.js + ./templates/bar.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./bar ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar + import() context element ./bar.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar.js +chunk (runtime: main) output.js (main) 597 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 437 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 113 bytes 0 [emitted] -1.output.js 114 bytes 1 [emitted] -2.output.js 115 bytes 2 [emitted] - output.js 2.16 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 38 bytes <{3}> [rendered] - > ./foo [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo - > ./foo.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo.js - [0] ./templates/foo.js 38 bytes {0} [optional] [built] - [exports: default] - context element ./foo.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo.js - context element ./foo [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./foo -chunk {1} 1.output.js 38 bytes <{3}> [rendered] - > ./baz [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz - > ./baz.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz.js - [1] ./templates/baz.js 38 bytes {1} [optional] [built] - [exports: default] - context element ./baz.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz.js - context element ./baz [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./baz -chunk {2} 2.output.js 38 bytes <{3}> [rendered] - > ./bar [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar - > ./bar.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar.js - [2] ./templates/bar.js 38 bytes {2} [optional] [built] - [exports: default] - context element ./bar.js [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar.js - context element ./bar [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object ./bar -chunk {3} output.js (main) 597 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [3] ./templates lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ namespace object 160 bytes {3} [optional] [built] - import() context lazy ./templates [4] ./example.js 3:23-7:3 - [4] ./example.js 437 bytes {3} [built] - single entry .\example.js main +asset output.js 2.47 KiB [emitted] [minimized] (name: main) +asset 717.output.js 127 bytes [emitted] [minimized] +asset 776.output.js 127 bytes [emitted] [minimized] +asset 0.output.js 124 bytes [emitted] [minimized] +chunk (runtime: main) 0.output.js 38 bytes [rendered] + > ./baz ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz + > ./baz.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz.js + ./templates/baz.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./baz ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz + import() context element ./baz.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./baz.js +chunk (runtime: main) 717.output.js 38 bytes [rendered] + > ./foo ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo + > ./foo.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo.js + ./templates/foo.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./foo ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo + import() context element ./foo.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./foo.js +chunk (runtime: main) 776.output.js 38 bytes [rendered] + > ./bar ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar + > ./bar.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar.js + ./templates/bar.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./bar ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar + import() context element ./bar.js ./templates/ lazy ^\.\/.*$ include: \.js$ exclude: \.noimport\.js$ referencedExports: namespace object ./bar.js +chunk (runtime: main) output.js (main) 597 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 437 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitting-native-import-context-filter/template.md b/examples/code-splitting-native-import-context-filter/template.md index 31fa2aeb04d..a4dd169ea27 100644 --- a/examples/code-splitting-native-import-context-filter/template.md +++ b/examples/code-splitting-native-import-context-filter/template.md @@ -1,31 +1,31 @@ # example.js -This example illustrates how to filter the ContextModule results of `import()` statements. only `.js` files that don't +This example illustrates how to filter the ContextModule results of `import()` statements. Only `.js` files that don't end in `.noimport.js` within the `templates` folder will be bundled. -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # templates/ -* foo.js -* foo.noimport.js -* baz.js -* foo.noimport.js -* bar.js -* foo.noimport.js +- foo.js +- foo.noimport.js +- baz.js +- foo.noimport.js +- bar.js +- foo.noimport.js All templates are of this pattern: -``` javascript -{{templates/foo.js}} +```javascript +_{{templates/foo.js}}_ ``` # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` # Info @@ -33,11 +33,11 @@ All templates are of this pattern: ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitting-native-import-context-filter/webpack.config.js b/examples/code-splitting-native-import-context-filter/webpack.config.js index 0d554bf62ea..6685d0c375d 100644 --- a/examples/code-splitting-native-import-context-filter/webpack.config.js +++ b/examples/code-splitting-native-import-context-filter/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitting-native-import-context/README.md b/examples/code-splitting-native-import-context/README.md index f751eb9b227..065fe6f9453 100644 --- a/examples/code-splitting-native-import-context/README.md +++ b/examples/code-splitting-native-import-context/README.md @@ -2,7 +2,7 @@ This example illustrates how to leverage the `import()` syntax to create ContextModules which are separated into separate chunks for each module in the `./templates` folder. -``` javascript +```javascript async function getTemplate(templateName) { try { let template = await import(`./templates/${templateName}`); @@ -20,13 +20,13 @@ getTemplate("baz"); # templates/ -* foo.js -* baz.js -* bar.js +- foo.js +- baz.js +- bar.js All templates are of this pattern: -``` javascript +```javascript var foo = "foo"; export default foo; @@ -34,263 +34,326 @@ export default foo; # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!***********************************************************************!*\ + !*** ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ***! + \***********************************************************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__.o, __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +var map = { + "./bar": [ + 2, + [ + 776 + ] + ], + "./bar.js": [ + 2, + [ + 776 + ] + ], + "./baz": [ + 3, + [ + 0 + ] + ], + "./baz.js": [ + 3, + [ + 0 + ] + ], + "./foo": [ + 4, + [ + 717 + ] + ], + "./foo.js": [ + 4, + [ + 717 + ] + ] +}; +function webpackAsyncContext(req) { + try { + if(!__webpack_require__.o(map, req)) { + return Promise.resolve().then(() => { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +}); + } + } catch(err) { + return Promise.reject(err); + } + + var ids = map[req], id = ids[0]; + return __webpack_require__.e(ids[1][0]).then(() => (__webpack_require__(id))); +} +webpackAsyncContext.keys = () => (Object.keys(map)); +webpackAsyncContext.id = 1; +module.exports = webpackAsyncContext; + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 3: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 792: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 4); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */, -/* 3 */ -/*!**************************************************!*\ - !*** ./templates lazy ^\.\/.*$ namespace object ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./bar": [ - 2, - 2 - ], - "./bar.js": [ - 2, - 2 - ], - "./baz": [ - 1, - 1 - ], - "./baz.js": [ - 1, - 1 - ], - "./foo": [ - 0, - 0 - ], - "./foo.js": [ - 0, - 0 - ] -}; -function webpackAsyncContext(req) { - var ids = map[req]; - if(!ids) { - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); - } - return __webpack_require__.e(ids[1]).then(function() { - var module = __webpack_require__(ids[0]); - return module; - }); -} -webpackAsyncContext.keys = function webpackAsyncContextKeys() { - return Object.keys(map); -}; -webpackAsyncContext.id = 3; -module.exports = webpackAsyncContext; - -/***/ }), -/* 4 */ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ async function getTemplate(templateName) { try { - let template = await __webpack_require__(3)(`./${templateName}`); + let template = await __webpack_require__(1)(`./${templateName}`); console.log(template); } catch(err) { console.error("template error"); @@ -304,9 +367,10 @@ getTemplate("baz"); +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` # Info @@ -314,79 +378,78 @@ getTemplate("baz"); ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 436 bytes 0 [emitted] -1.output.js 445 bytes 1 [emitted] -2.output.js 439 bytes 2 [emitted] - output.js 8.3 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 41 bytes <{3}> [rendered] - > ./foo [3] ./templates lazy ^\.\/.*$ namespace object ./foo - > ./foo.js [3] ./templates lazy ^\.\/.*$ namespace object ./foo.js - [0] ./templates/foo.js 41 bytes {0} [optional] [built] - [exports: default] - context element ./foo.js [3] ./templates lazy ^\.\/.*$ namespace object ./foo.js - context element ./foo [3] ./templates lazy ^\.\/.*$ namespace object ./foo -chunk {1} 1.output.js 41 bytes <{3}> [rendered] - > ./baz [3] ./templates lazy ^\.\/.*$ namespace object ./baz - > ./baz.js [3] ./templates lazy ^\.\/.*$ namespace object ./baz.js - [1] ./templates/baz.js 41 bytes {1} [optional] [built] - [exports: default] - context element ./baz.js [3] ./templates lazy ^\.\/.*$ namespace object ./baz.js - context element ./baz [3] ./templates lazy ^\.\/.*$ namespace object ./baz -chunk {2} 2.output.js 41 bytes <{3}> [rendered] - > ./bar [3] ./templates lazy ^\.\/.*$ namespace object ./bar - > ./bar.js [3] ./templates lazy ^\.\/.*$ namespace object ./bar.js - [2] ./templates/bar.js 41 bytes {2} [optional] [built] - [exports: default] - context element ./bar.js [3] ./templates lazy ^\.\/.*$ namespace object ./bar.js - context element ./bar [3] ./templates lazy ^\.\/.*$ namespace object ./bar -chunk {3} output.js (main) 456 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [3] ./templates lazy ^\.\/.*$ namespace object 160 bytes {3} [optional] [built] - import() context lazy ./templates [4] ./example.js 3:23-60 - [4] ./example.js 296 bytes {3} [built] - single entry .\example.js main +asset output.js 11.3 KiB [emitted] (name: main) +asset 717.output.js 846 bytes [emitted] +asset 776.output.js 846 bytes [emitted] +asset 0.output.js 844 bytes [emitted] +chunk (runtime: main) 0.output.js 38 bytes [rendered] + > ./baz ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz + > ./baz.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz.js + ./templates/baz.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./baz ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz + import() context element ./baz.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz.js +chunk (runtime: main) 717.output.js 38 bytes [rendered] + > ./foo ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo + > ./foo.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo.js + ./templates/foo.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./foo ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo + import() context element ./foo.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo.js +chunk (runtime: main) 776.output.js 38 bytes [rendered] + > ./bar ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar + > ./bar.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar.js + ./templates/bar.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./bar ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar + import() context element ./bar.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar.js +chunk (runtime: main) output.js (main) 441 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 281 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 113 bytes 0 [emitted] -1.output.js 114 bytes 1 [emitted] -2.output.js 115 bytes 2 [emitted] - output.js 2.12 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 41 bytes <{3}> [rendered] - > ./foo [3] ./templates lazy ^\.\/.*$ namespace object ./foo - > ./foo.js [3] ./templates lazy ^\.\/.*$ namespace object ./foo.js - [0] ./templates/foo.js 41 bytes {0} [optional] [built] - [exports: default] - context element ./foo.js [3] ./templates lazy ^\.\/.*$ namespace object ./foo.js - context element ./foo [3] ./templates lazy ^\.\/.*$ namespace object ./foo -chunk {1} 1.output.js 41 bytes <{3}> [rendered] - > ./baz [3] ./templates lazy ^\.\/.*$ namespace object ./baz - > ./baz.js [3] ./templates lazy ^\.\/.*$ namespace object ./baz.js - [1] ./templates/baz.js 41 bytes {1} [optional] [built] - [exports: default] - context element ./baz.js [3] ./templates lazy ^\.\/.*$ namespace object ./baz.js - context element ./baz [3] ./templates lazy ^\.\/.*$ namespace object ./baz -chunk {2} 2.output.js 41 bytes <{3}> [rendered] - > ./bar [3] ./templates lazy ^\.\/.*$ namespace object ./bar - > ./bar.js [3] ./templates lazy ^\.\/.*$ namespace object ./bar.js - [2] ./templates/bar.js 41 bytes {2} [optional] [built] - [exports: default] - context element ./bar.js [3] ./templates lazy ^\.\/.*$ namespace object ./bar.js - context element ./bar [3] ./templates lazy ^\.\/.*$ namespace object ./bar -chunk {3} output.js (main) 456 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [3] ./templates lazy ^\.\/.*$ namespace object 160 bytes {3} [optional] [built] - import() context lazy ./templates [4] ./example.js 3:23-60 - [4] ./example.js 296 bytes {3} [built] - single entry .\example.js main +asset output.js 2.44 KiB [emitted] [minimized] (name: main) +asset 717.output.js 127 bytes [emitted] [minimized] +asset 776.output.js 127 bytes [emitted] [minimized] +asset 0.output.js 124 bytes [emitted] [minimized] +chunk (runtime: main) 0.output.js 38 bytes [rendered] + > ./baz ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz + > ./baz.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz.js + ./templates/baz.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./baz ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz + import() context element ./baz.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./baz.js +chunk (runtime: main) 717.output.js 38 bytes [rendered] + > ./foo ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo + > ./foo.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo.js + ./templates/foo.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./foo ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo + import() context element ./foo.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./foo.js +chunk (runtime: main) 776.output.js 38 bytes [rendered] + > ./bar ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar + > ./bar.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar.js + ./templates/bar.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./bar ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar + import() context element ./bar.js ./templates/ lazy ^\.\/.*$ referencedExports: namespace object ./bar.js +chunk (runtime: main) output.js (main) 441 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 281 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitting-native-import-context/template.md b/examples/code-splitting-native-import-context/template.md index f26cba077bf..f3c30f24490 100644 --- a/examples/code-splitting-native-import-context/template.md +++ b/examples/code-splitting-native-import-context/template.md @@ -2,26 +2,26 @@ This example illustrates how to leverage the `import()` syntax to create ContextModules which are separated into separate chunks for each module in the `./templates` folder. -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # templates/ -* foo.js -* baz.js -* bar.js +- foo.js +- baz.js +- bar.js All templates are of this pattern: -``` javascript -{{templates/foo.js}} +```javascript +_{{templates/foo.js}}_ ``` # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` # Info @@ -29,11 +29,11 @@ All templates are of this pattern: ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitting-native-import-context/webpack.config.js b/examples/code-splitting-native-import-context/webpack.config.js index 0d554bf62ea..6685d0c375d 100644 --- a/examples/code-splitting-native-import-context/webpack.config.js +++ b/examples/code-splitting-native-import-context/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitting-specify-chunk-name/README.md b/examples/code-splitting-specify-chunk-name/README.md index 16638fad95a..28cc75c515a 100644 --- a/examples/code-splitting-specify-chunk-name/README.md +++ b/examples/code-splitting-specify-chunk-name/README.md @@ -1,8 +1,8 @@ # example.js -This example illustrates how to specify chunk name in `require.ensure()` and `import()` to separated modules into separate chunks manually. +This example illustrates how to specify the chunk name in `require.ensure()` and `import()` to separated modules into separate chunks manually. -``` javascript +```javascript import("./templates/foo" /* webpackChunkName: "chunk-foo" */ ).then(function(foo) { console.log('foo:', foo); }) @@ -20,13 +20,13 @@ import("./templates/ba" + createContextVar /* webpackChunkName: "chunk-bar-baz" # templates/ -* foo.js -* baz.js -* bar.js +- foo.js +- baz.js +- bar.js All templates are of this pattern: -``` javascript +```javascript var foo = "foo"; export default foo; @@ -34,271 +34,331 @@ export default foo; # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!**************************************************************************************************!*\ + !*** ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ***! + \**************************************************************************************************/ +/*! default exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__.o, __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +var map = { + "./bar": [ + 3, + [ + 994 + ] + ], + "./bar.js": [ + 3, + [ + 994 + ] + ], + "./baz": [ + 4, + [ + 792 + ] + ], + "./baz.js": [ + 4, + [ + 792 + ] + ] +}; +function webpackAsyncContext(req) { + try { + if(!__webpack_require__.o(map, req)) { + return Promise.resolve().then(() => { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +}); + } + } catch(err) { + return Promise.reject(err); + } + + var ids = map[req], id = ids[0]; + return __webpack_require__.e(ids[1][0]).then(() => (__webpack_require__(id))); +} +webpackAsyncContext.keys = () => (Object.keys(map)); +webpackAsyncContext.id = 1; +module.exports = webpackAsyncContext; + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 3: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 411: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 4); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */, -/* 3 */ -/*!****************************************************!*\ - !*** ./templates lazy ^\.\/ba.*$ namespace object ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./bar": [ - 2, - 1 - ], - "./bar.js": [ - 2, - 1 - ], - "./baz": [ - 1, - 0 - ], - "./baz.js": [ - 1, - 0 - ] -}; -function webpackAsyncContext(req) { - var ids = map[req]; - if(!ids) { - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); - } - return __webpack_require__.e(ids[1]).then(function() { - var module = __webpack_require__(ids[0]); - return module; - }); -} -webpackAsyncContext.keys = function webpackAsyncContextKeys() { - return Object.keys(map); -}; -webpackAsyncContext.id = 3; -module.exports = webpackAsyncContext; - -/***/ }), -/* 4 */ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__.e(/*! import() | chunk-foo */ 2).then(__webpack_require__.bind(null, /*! ./templates/foo */ 0)).then(function(foo) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +__webpack_require__.e(/*! import() | chunk-foo */ 45).then(__webpack_require__.bind(__webpack_require__, /*! ./templates/foo */ 2)).then(function(foo) { console.log('foo:', foo); }) -__webpack_require__.e(/*! require.ensure | chunk-foo1 */ 2).then((function(require) { - var foo = __webpack_require__(/*! ./templates/foo */ 0); +__webpack_require__.e(/*! require.ensure | chunk-foo1 */ 45).then((function(require) { + var foo = __webpack_require__(/*! ./templates/foo */ 2); console.log('foo:', foo); -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); var createContextVar = "r"; -__webpack_require__(3)("./ba" + createContextVar).then(function(bar) { +__webpack_require__(1)("./ba" + createContextVar).then(function(bar) { console.log('bar:', bar); }) +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` # Info @@ -306,79 +366,78 @@ __webpack_require__(3)("./ba" + createContextVar).then(function(bar) { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 445 bytes 0 [emitted] chunk-bar-baz2 -1.output.js 439 bytes 1 [emitted] chunk-bar-baz0 -2.output.js 436 bytes 2 [emitted] chunk-foo - output.js 8.5 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js (chunk-bar-baz2) 41 bytes <{3}> [rendered] - > ./baz [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz - > ./baz.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz.js - [1] ./templates/baz.js 41 bytes {0} [optional] [built] - [exports: default] - context element ./baz.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz.js - context element ./baz [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz -chunk {1} 1.output.js (chunk-bar-baz0) 41 bytes <{3}> [rendered] - > ./bar [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar - > ./bar.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar.js - [2] ./templates/bar.js 41 bytes {1} [optional] [built] - [exports: default] - context element ./bar.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar.js - context element ./bar [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar -chunk {2} 2.output.js (chunk-foo) 41 bytes <{3}> [rendered] - > ./templates/foo [4] ./example.js 1:0-62 - > [4] ./example.js 5:0-8:16 - [0] ./templates/foo.js 41 bytes {2} [built] - [exports: default] - import() ./templates/foo [4] ./example.js 1:0-62 - cjs require ./templates/foo [4] ./example.js 6:11-37 -chunk {3} output.js (main) 580 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [3] ./templates lazy ^\.\/ba.*$ namespace object 160 bytes {3} [built] - import() context lazy ./templates [4] ./example.js 11:0-84 - [4] ./example.js 420 bytes {3} [built] - single entry .\example.js main +asset output.js 11.7 KiB [emitted] (name: main) +asset 792.output.js 846 bytes [emitted] (name: chunk-bar-baz2) +asset 994.output.js 846 bytes [emitted] (name: chunk-bar-baz0) +asset 45.output.js 845 bytes [emitted] (name: chunk-foo) +chunk (runtime: main) 45.output.js (chunk-foo) 38 bytes [rendered] + > ./templates/foo ./example.js 1:0-62 + > ./example.js 5:0-8:16 + ./templates/foo.js 38 bytes [built] [code generated] + [exports: default] + [used exports unknown] + import() ./templates/foo ./example.js 1:0-62 + cjs require ./templates/foo ./example.js 6:11-37 +chunk (runtime: main) output.js (main) 565 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 405 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) 792.output.js (chunk-bar-baz2) 38 bytes [rendered] + > ./baz ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz + > ./baz.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz.js + ./templates/baz.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./baz ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz + import() context element ./baz.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz.js +chunk (runtime: main) 994.output.js (chunk-bar-baz0) 38 bytes [rendered] + > ./bar ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar + > ./bar.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar.js + ./templates/bar.js 38 bytes [optional] [built] [code generated] + [exports: default] + [used exports unknown] + import() context element ./bar ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar + import() context element ./bar.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar.js +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 114 bytes 0 [emitted] chunk-bar-baz2 -1.output.js 115 bytes 1 [emitted] chunk-bar-baz0 -2.output.js 113 bytes 2 [emitted] chunk-foo - output.js 2.14 KiB 3 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js (chunk-bar-baz2) 41 bytes <{3}> [rendered] - > ./baz [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz - > ./baz.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz.js - [1] ./templates/baz.js 41 bytes {0} [optional] [built] - [exports: default] - context element ./baz.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz.js - context element ./baz [3] ./templates lazy ^\.\/ba.*$ namespace object ./baz -chunk {1} 1.output.js (chunk-bar-baz0) 41 bytes <{3}> [rendered] - > ./bar [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar - > ./bar.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar.js - [2] ./templates/bar.js 41 bytes {1} [optional] [built] - [exports: default] - context element ./bar.js [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar.js - context element ./bar [3] ./templates lazy ^\.\/ba.*$ namespace object ./bar -chunk {2} 2.output.js (chunk-foo) 41 bytes <{3}> [rendered] - > ./templates/foo [4] ./example.js 1:0-62 - > [4] ./example.js 5:0-8:16 - [0] ./templates/foo.js 41 bytes {2} [built] - [exports: default] - import() ./templates/foo [4] ./example.js 1:0-62 - cjs require ./templates/foo [4] ./example.js 6:11-37 -chunk {3} output.js (main) 580 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > .\example.js main - [3] ./templates lazy ^\.\/ba.*$ namespace object 160 bytes {3} [built] - import() context lazy ./templates [4] ./example.js 11:0-84 - [4] ./example.js 420 bytes {3} [built] - single entry .\example.js main +asset output.js 2.46 KiB [emitted] [minimized] (name: main) +asset 994.output.js 127 bytes [emitted] [minimized] (name: chunk-bar-baz0) +asset 45.output.js 126 bytes [emitted] [minimized] (name: chunk-foo) +asset 792.output.js 126 bytes [emitted] [minimized] (name: chunk-bar-baz2) +chunk (runtime: main) 45.output.js (chunk-foo) 38 bytes [rendered] + > ./templates/foo ./example.js 1:0-62 + > ./example.js 5:0-8:16 + ./templates/foo.js 38 bytes [built] [code generated] + [exports: default] + import() ./templates/foo ./example.js 1:0-62 + cjs require ./templates/foo ./example.js 6:11-37 +chunk (runtime: main) output.js (main) 565 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 160 bytes [dependent] 1 module + ./example.js 405 bytes [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: main) 792.output.js (chunk-bar-baz2) 38 bytes [rendered] + > ./baz ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz + > ./baz.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz.js + ./templates/baz.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./baz ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz + import() context element ./baz.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./baz.js +chunk (runtime: main) 994.output.js (chunk-bar-baz0) 38 bytes [rendered] + > ./bar ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar + > ./bar.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar.js + ./templates/bar.js 38 bytes [optional] [built] [code generated] + [exports: default] + import() context element ./bar ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar + import() context element ./bar.js ./templates/ lazy ^\.\/ba.*$ referencedExports: chunkName: chunk-bar-baz namespace object ./bar.js +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitting-specify-chunk-name/template.md b/examples/code-splitting-specify-chunk-name/template.md index b85d38e981d..0c63d10ca61 100644 --- a/examples/code-splitting-specify-chunk-name/template.md +++ b/examples/code-splitting-specify-chunk-name/template.md @@ -1,27 +1,27 @@ # example.js -This example illustrates how to specify chunk name in `require.ensure()` and `import()` to separated modules into separate chunks manually. +This example illustrates how to specify the chunk name in `require.ensure()` and `import()` to separated modules into separate chunks manually. -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # templates/ -* foo.js -* baz.js -* bar.js +- foo.js +- baz.js +- bar.js All templates are of this pattern: -``` javascript -{{templates/foo.js}} +```javascript +_{{templates/foo.js}}_ ``` # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` # Info @@ -29,11 +29,11 @@ All templates are of this pattern: ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitting-specify-chunk-name/webpack.config.js b/examples/code-splitting-specify-chunk-name/webpack.config.js index 0d554bf62ea..6685d0c375d 100644 --- a/examples/code-splitting-specify-chunk-name/webpack.config.js +++ b/examples/code-splitting-specify-chunk-name/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/code-splitting/README.md b/examples/code-splitting/README.md index c6dd1964083..78822821770 100644 --- a/examples/code-splitting/README.md +++ b/examples/code-splitting/README.md @@ -1,32 +1,31 @@ This example illustrates a very simple case of Code Splitting with `require.ensure`. -* `a` and `b` are required normally via CommonJS -* `c` is depended through the `require.ensure` array. - * This means: make it available, but don't execute it - * webpack will load it on demand -* `b` and `d` are required via CommonJs in the `require.ensure` callback - * webpack detects that these are in the on-demand-callback and - * will load them on demand - * webpacks optimizer can optimize `b` away - * as it is already available through the parent chunks +- `a` and `b` are required normally via CommonJS +- `c` is made available(,but doesn't get execute) through the `require.ensure` array. + - webpack will load it on demand +- `b` and `d` are required via CommonJs in the `require.ensure` callback + - webpack detects that these are in the on-demand-callback and + - will load them on demand + - webpack's optimizer can optimize `b` away + - as it is already available through the parent chunks You can see that webpack outputs two files/chunks: -* `output.js` is the entry chunk and contains - * the module system - * chunk loading logic - * the entry point `example.js` - * module `a` - * module `b` -* `1.js` is an additional chunk (on demand loaded) and contains - * module `c` - * module `d` +- `output.js` is the entry chunk and contains + - the module system + - chunk loading logic + - the entry point `example.js` + - module `a` + - module `b` +- `1.output.js` is an additional chunk (on-demand loaded) and contains + - module `c` + - module `d` You can see that chunks are loaded via JSONP. The additional chunks are pretty small and minimize well. # example.js -``` javascript +```javascript var a = require("a"); var b = require("b"); require.ensure(["c"], function(require) { @@ -35,262 +34,294 @@ require.ensure(["c"], function(require) { }); ``` - # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!***************************!*\ + !*** ./node_modules/a.js ***! + \***************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +// module a + +/***/ }), +/* 2 */ +/*!***************************!*\ + !*** ./node_modules/b.js ***! + \***************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { + +// module b + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 1: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "main": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 2); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */ -/*!***************************!*\ - !*** ./node_modules/b.js ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// module b - -/***/ }), -/* 1 */ -/*!***************************!*\ - !*** ./node_modules/a.js ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// module a - -/***/ }), -/* 2 */ +``` js +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, __webpack_require__.e, __webpack_require__.* */ var a = __webpack_require__(/*! a */ 1); -var b = __webpack_require__(/*! b */ 0); -__webpack_require__.e(/*! require.ensure */ 0).then((function(require) { - __webpack_require__(/*! b */ 0).xyz(); - var d = __webpack_require__(/*! d */ 3); -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); +var b = __webpack_require__(/*! b */ 2); +__webpack_require__.e(/*! require.ensure */ "node_modules_c_js-node_modules_d_js").then((function(require) { + (__webpack_require__(/*! b */ 2).xyz)(); + var d = __webpack_require__(/*! d */ 4); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` -# dist/0.output.js +# dist/node_modules_c_js-node_modules_d_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],[ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["node_modules_c_js-node_modules_d_js"],[ /* 0 */, /* 1 */, /* 2 */, /* 3 */ /*!***************************!*\ - !*** ./node_modules/d.js ***! + !*** ./node_modules/c.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { -// module d +// module c /***/ }), /* 4 */ /*!***************************!*\ - !*** ./node_modules/c.js ***! + !*** ./node_modules/d.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { -// module c +// module d /***/ }) ]]); @@ -298,8 +329,8 @@ __webpack_require__.e(/*! require.ensure */ 0).then((function(require) { Minimized -``` javascript -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[,,,function(n,o){},function(n,o){}]]); +```javascript +(self.webpackChunk=self.webpackChunk||[]).push([["node_modules_c_js-node_modules_d_js"],{605(){},576(){}}]); ``` # Info @@ -307,37 +338,45 @@ Minimized ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 490 bytes 0 [emitted] - output.js 7.73 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 22 bytes <{1}> [rendered] - > [2] ./example.js 3:0-6:2 - 2 modules -chunk {1} output.js (main) 166 bytes >{0}< [entry] [rendered] - > .\example.js main - [2] ./example.js 144 bytes {1} [built] - single entry .\example.js main - + 2 hidden modules +asset output.js 9.68 KiB [emitted] (name: main) +asset node_modules_c_js-node_modules_d_js.output.js 562 bytes [emitted] +chunk (runtime: main) output.js (main) 161 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + dependent modules 22 bytes [dependent] 2 modules + ./example.js 139 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) node_modules_c_js-node_modules_d_js.output.js 22 bytes [rendered] + > ./example.js 3:0-6:2 + ./node_modules/c.js 11 bytes [built] [code generated] + [used exports unknown] + require.ensure item c ./example.js 3:0-6:2 + ./node_modules/d.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require d ./example.js 5:12-24 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 95 bytes 0 [emitted] - output.js 1.71 KiB 1 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 22 bytes <{1}> [rendered] - > [2] ./example.js 3:0-6:2 - 2 modules -chunk {1} output.js (main) 166 bytes >{0}< [entry] [rendered] - > .\example.js main - [2] ./example.js 144 bytes {1} [built] - single entry .\example.js main - + 2 hidden modules +asset output.js 1.75 KiB [emitted] [minimized] (name: main) +asset node_modules_c_js-node_modules_d_js.output.js 108 bytes [emitted] [minimized] +chunk (runtime: main) output.js (main) 161 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + dependent modules 22 bytes [dependent] 2 modules + ./example.js 139 bytes [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: main) node_modules_c_js-node_modules_d_js.output.js 22 bytes [rendered] + > ./example.js 3:0-6:2 + ./node_modules/c.js 11 bytes [built] [code generated] + [used exports unknown] + require.ensure item c ./example.js 3:0-6:2 + ./node_modules/d.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require d ./example.js 5:12-24 +webpack X.X.X compiled successfully ``` diff --git a/examples/code-splitting/template.md b/examples/code-splitting/template.md index 7c21f7ae5f4..1b5e16233c4 100644 --- a/examples/code-splitting/template.md +++ b/examples/code-splitting/template.md @@ -1,52 +1,50 @@ This example illustrates a very simple case of Code Splitting with `require.ensure`. -* `a` and `b` are required normally via CommonJS -* `c` is depended through the `require.ensure` array. - * This means: make it available, but don't execute it - * webpack will load it on demand -* `b` and `d` are required via CommonJs in the `require.ensure` callback - * webpack detects that these are in the on-demand-callback and - * will load them on demand - * webpacks optimizer can optimize `b` away - * as it is already available through the parent chunks +- `a` and `b` are required normally via CommonJS +- `c` is made available(,but doesn't get execute) through the `require.ensure` array. + - webpack will load it on demand +- `b` and `d` are required via CommonJs in the `require.ensure` callback + - webpack detects that these are in the on-demand-callback and + - will load them on demand + - webpack's optimizer can optimize `b` away + - as it is already available through the parent chunks You can see that webpack outputs two files/chunks: -* `output.js` is the entry chunk and contains - * the module system - * chunk loading logic - * the entry point `example.js` - * module `a` - * module `b` -* `1.js` is an additional chunk (on demand loaded) and contains - * module `c` - * module `d` +- `output.js` is the entry chunk and contains + - the module system + - chunk loading logic + - the entry point `example.js` + - module `a` + - module `b` +- `1.output.js` is an additional chunk (on-demand loaded) and contains + - module `c` + - module `d` You can see that chunks are loaded via JSONP. The additional chunks are pretty small and minimize well. # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` - # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` -# dist/0.output.js +# dist/node_modules_c_js-node_modules_d_js.output.js -``` javascript -{{dist/0.output.js}} +```javascript +_{{dist/node_modules_c_js-node_modules_d_js.output.js}}_ ``` Minimized -``` javascript -{{production:dist/0.output.js}} +```javascript +_{{production:dist/node_modules_c_js-node_modules_d_js.output.js}}_ ``` # Info @@ -54,11 +52,11 @@ Minimized ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/code-splitting/webpack.config.js b/examples/code-splitting/webpack.config.js index 0d554bf62ea..3a2046aae21 100644 --- a/examples/code-splitting/webpack.config.js +++ b/examples/code-splitting/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/coffee-script/README.md b/examples/coffee-script/README.md index 3f9c31fa5af..4666d2893ea 100644 --- a/examples/coffee-script/README.md +++ b/examples/coffee-script/README.md @@ -1,13 +1,12 @@ - # example.js -``` javascript +```javascript console.log(require("./cup1")); ``` # cup1.coffee -``` coffee-script +```coffee-script module.exports = cool: "stuff" answer: 42 @@ -17,7 +16,7 @@ module.exports = # cup2.coffee -``` coffee-script +```coffee-script console.log "yeah coffee-script" module.exports = 42 @@ -25,102 +24,18 @@ module.exports = 42 # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -``` - -
- -``` javascript -/******/ ([ -/* 0 */ -/*!********************!*\ - !*** ./example.js ***! - \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -console.log(__webpack_require__(/*! ./cup1 */ 1)); - -/***/ }), +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, /* 1 */ /*!*********************!*\ !*** ./cup1.coffee ***! \*********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = { cool: "stuff", @@ -135,8 +50,10 @@ module.exports = { /*!*********************!*\ !*** ./cup2.coffee ***! \*********************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ +/***/ ((module) => { console.log("yeah coffee-script"); @@ -144,7 +61,61 @@ module.exports = 42; /***/ }) -/******/ ]); +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +``` + +
+ +``` js +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ +console.log(__webpack_require__(/*! ./cup1 */ 1)); +})(); + +/******/ })() +; ``` # Info @@ -152,37 +123,25 @@ module.exports = 42; ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -output.js 3.35 KiB 0 [emitted] main -Entrypoint main = output.js -chunk {0} output.js (main) 206 bytes [entry] [rendered] - > .\example.js main - [0] ./example.js 31 bytes {0} [built] - single entry .\example.js main - [1] ./cup1.coffee 118 bytes {0} [built] - cjs require ./cup1 [0] ./example.js 1:12-29 - [2] ./cup2.coffee 57 bytes {0} [built] - cjs require ./cup2.coffee [1] ./cup1.coffee 4:12-36 - cjs require ./cup2 [1] ./cup1.coffee 5:9-26 +asset output.js 2.49 KiB [emitted] (name: main) +chunk (runtime: main) output.js (main) 206 bytes [entry] [rendered] + > ./example.js main + dependent modules 175 bytes [dependent] 2 modules + ./example.js 31 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -output.js 708 bytes 0 [emitted] main -Entrypoint main = output.js -chunk {0} output.js (main) 206 bytes [entry] [rendered] - > .\example.js main - [0] ./cup2.coffee 57 bytes {0} [built] - cjs require ./cup2.coffee [1] ./cup1.coffee 4:12-36 - cjs require ./cup2 [1] ./cup1.coffee 5:9-26 - [1] ./cup1.coffee 118 bytes {0} [built] - cjs require ./cup1 [2] ./example.js 1:12-29 - [2] ./example.js 31 bytes {0} [built] - single entry .\example.js main -``` \ No newline at end of file +asset output.js 290 bytes [emitted] [minimized] (name: main) +chunk (runtime: main) output.js (main) 206 bytes [entry] [rendered] + > ./example.js main + dependent modules 175 bytes [dependent] 2 modules + ./example.js 31 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/coffee-script/template.md b/examples/coffee-script/template.md index bef6e314e38..c2c60394cc9 100644 --- a/examples/coffee-script/template.md +++ b/examples/coffee-script/template.md @@ -1,26 +1,25 @@ - # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # cup1.coffee -``` coffee-script -{{cup1.coffee}} +```coffee-script +_{{cup1.coffee}}_ ``` # cup2.coffee -``` coffee-script -{{cup2.coffee}} +```coffee-script +_{{cup2.coffee}}_ ``` # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` # Info @@ -28,11 +27,11 @@ ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} -``` \ No newline at end of file +_{{production:stdout}}_ +``` diff --git a/examples/coffee-script/webpack.config.js b/examples/coffee-script/webpack.config.js index 845f9f4c190..1e37325f590 100644 --- a/examples/coffee-script/webpack.config.js +++ b/examples/coffee-script/webpack.config.js @@ -1,5 +1,8 @@ -module.exports = { - // mode: "development || "production", +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", module: { rules: [ { @@ -12,3 +15,5 @@ module.exports = { extensions: [".web.coffee", ".web.js", ".coffee", ".js"] } }; + +module.exports = config; diff --git a/examples/common-chunk-and-vendor-chunk/README.md b/examples/common-chunk-and-vendor-chunk/README.md index f6d5e46aa9c..5bc33873dac 100644 --- a/examples/common-chunk-and-vendor-chunk/README.md +++ b/examples/common-chunk-and-vendor-chunk/README.md @@ -33,10 +33,13 @@ With this bundle configuration, you would load your third party libraries, then # webpack.config.js -``` javascript -var path = require("path"); +```javascript +"use strict"; + +const path = require("path"); -module.exports = { +/** @type {import("webpack").Configuration} */ +const config = { // mode: "development" || "production", entry: { pageA: "./pageA", @@ -44,6 +47,7 @@ module.exports = { pageC: "./pageC" }, optimization: { + chunkIds: "named", splitChunks: { cacheGroups: { commons: { @@ -67,230 +71,99 @@ module.exports = { filename: "[name].js" } }; + +module.exports = config; ``` # dist/vendor.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[3],{ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["vendor"],{ -/***/ 1: +/***/ 1 /*!*********************************!*\ !*** ./node_modules/vendor1.js ***! \*********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module) { module.exports = "vendor1"; -/***/ }), +/***/ }, -/***/ 5: +/***/ 5 /*!*********************************!*\ !*** ./node_modules/vendor2.js ***! \*********************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module) { module.exports = "vendor2"; -/***/ }) +/***/ } }]); ``` -# dist/commons~pageA~pageB~pageC.js +# dist/commons-utility2_js.js ``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[4],{ +(self["webpackChunk"] = self["webpackChunk"] || []).push([["commons-utility2_js"],{ -/***/ 3: +/***/ 3 /*!*********************!*\ !*** ./utility2.js ***! \*********************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module) { module.exports = "utility2"; -/***/ }) +/***/ } }]); ``` -# dist/commons~pageB~pageC.js +# dist/commons-utility3_js.js ``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[5],{ +(self["webpackChunk"] = self["webpackChunk"] || []).push([["commons-utility3_js"],{ -/***/ 6: +/***/ 6 /*!*********************!*\ !*** ./utility3.js ***! \*********************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module) { module.exports = "utility3"; -/***/ }) +/***/ } }]); ``` # dist/pageA.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 0: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([0,3,4]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) -/************************************************************************/ -``` - -
- -``` javascript -/******/ ([ +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ /* 0 */ /*!******************!*\ !*** ./pageA.js ***! \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { var vendor1 = __webpack_require__(/*! vendor1 */ 1); var utility1 = __webpack_require__(/*! ./utility1 */ 2); @@ -305,163 +178,176 @@ module.exports = "pageA"; /*!*********************!*\ !*** ./utility1.js ***! \*********************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = "utility1"; /***/ }) -/******/ ]); +/******/ ]); ``` -# dist/pageB.js +
/* webpack runtime code */ -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 1: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "pageA": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); /******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([4,3,4,5]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ -/******/ ({ +``` + +
+ +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["vendor","commons-utility2_js"], () => (__webpack_require__(0))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +``` -/***/ 4: +# dist/pageB.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 4 /*!******************!*\ !*** ./pageB.js ***! \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ +(module, __unused_webpack_exports, __webpack_require__) { var vendor2 = __webpack_require__(/*! vendor2 */ 5); var utility2 = __webpack_require__(/*! ./utility2 */ 3); @@ -470,168 +356,324 @@ var utility3 = __webpack_require__(/*! ./utility3 */ 6); module.exports = "pageB"; -/***/ }) +/***/ } -/******/ }); +/******/ }); ``` -# dist/pageC.js +
/* webpack runtime code */ -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 2: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "pageB": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); /******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([7,4,5]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ -/******/ ({ +``` + +
+ +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["vendor","commons-utility2_js","commons-utility3_js"], () => (__webpack_require__(4))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +``` + +# dist/pageC.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ -/***/ 7: +/***/ 7 /*!******************!*\ !*** ./pageC.js ***! \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ +(module, __unused_webpack_exports, __webpack_require__) { var utility2 = __webpack_require__(/*! ./utility2 */ 3); var utility3 = __webpack_require__(/*! ./utility3 */ 6); module.exports = "pageC"; -/***/ }) +/***/ } + +/******/ }); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "pageC": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
-/******/ }); +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["commons-utility2_js","commons-utility3_js"], () => (__webpack_require__(7))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; ``` # Info @@ -639,97 +681,133 @@ module.exports = "pageC"; ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names - pageA.js 5.72 KiB 0 [emitted] pageA - pageB.js 5.52 KiB 1 [emitted] pageB - pageC.js 5.47 KiB 2 [emitted] pageC - vendor.js 536 bytes 3 [emitted] vendor -commons~pageA~pageB~pageC.js 269 bytes 4 [emitted] commons~pageA~pageB~pageC - commons~pageB~pageC.js 269 bytes 5 [emitted] commons~pageB~pageC -Entrypoint pageA = vendor.js commons~pageA~pageB~pageC.js pageA.js -Entrypoint pageB = vendor.js commons~pageA~pageB~pageC.js commons~pageB~pageC.js pageB.js -Entrypoint pageC = commons~pageA~pageB~pageC.js commons~pageB~pageC.js pageC.js -chunk {0} pageA.js (pageA) 165 bytes ={3}= ={4}= [entry] [rendered] - > ./pageA pageA - [0] ./pageA.js 137 bytes {0} [built] - single entry ./pageA pageA - [2] ./utility1.js 28 bytes {0} [built] - cjs require ./utility1 [0] ./pageA.js 2:15-36 -chunk {1} pageB.js (pageB) 137 bytes ={3}= ={4}= ={5}= [entry] [rendered] - > ./pageB pageB - [4] ./pageB.js 137 bytes {1} [built] - single entry ./pageB pageB -chunk {2} pageC.js (pageC) 105 bytes ={4}= ={5}= [entry] [rendered] - > ./pageC pageC - [7] ./pageC.js 105 bytes {2} [built] - single entry ./pageC pageC -chunk {3} vendor.js (vendor) 54 bytes ={0}= ={1}= ={4}= ={5}= [initial] [rendered] split chunk (cache group: vendor) (name: vendor) - > ./pageA pageA - > ./pageB pageB - 2 modules -chunk {4} commons~pageA~pageB~pageC.js (commons~pageA~pageB~pageC) 28 bytes ={0}= ={1}= ={2}= ={3}= ={5}= [initial] [rendered] split chunk (cache group: commons) (name: commons~pageA~pageB~pageC) - > ./pageA pageA - > ./pageB pageB - > ./pageC pageC - [3] ./utility2.js 28 bytes {4} [built] - cjs require ./utility2 [0] ./pageA.js 3:15-36 - cjs require ./utility2 [4] ./pageB.js 2:15-36 - cjs require ./utility2 [7] ./pageC.js 1:15-36 -chunk {5} commons~pageB~pageC.js (commons~pageB~pageC) 28 bytes ={1}= ={2}= ={3}= ={4}= [initial] [rendered] split chunk (cache group: commons) (name: commons~pageB~pageC) - > ./pageB pageB - > ./pageC pageC - [6] ./utility3.js 28 bytes {5} [built] - cjs require ./utility3 [4] ./pageB.js 3:15-36 - cjs require ./utility3 [7] ./pageC.js 2:15-36 +assets by chunk 744 bytes (id hint: commons) + asset commons-utility2_js.js 372 bytes [emitted] (id hint: commons) + asset commons-utility3_js.js 372 bytes [emitted] (id hint: commons) +asset pageA.js 6.32 KiB [emitted] (name: pageA) +asset pageB.js 6.04 KiB [emitted] (name: pageB) +asset pageC.js 5.98 KiB [emitted] (name: pageC) +asset vendor.js 713 bytes [emitted] (name: vendor) (id hint: vendor) +Entrypoint pageA 7.38 KiB = vendor.js 713 bytes commons-utility2_js.js 372 bytes pageA.js 6.32 KiB +Entrypoint pageB 7.46 KiB = vendor.js 713 bytes commons-utility2_js.js 372 bytes commons-utility3_js.js 372 bytes pageB.js 6.04 KiB +Entrypoint pageC 6.7 KiB = commons-utility2_js.js 372 bytes commons-utility3_js.js 372 bytes pageC.js 5.98 KiB +chunk (runtime: pageA, pageB, pageC) commons-utility2_js.js (id hint: commons) 28 bytes [initial] [rendered] split chunk (cache group: commons) + > ./pageA pageA + > ./pageB pageB + > ./pageC pageC + ./utility2.js 28 bytes [built] [code generated] + [used exports unknown] + cjs require ./utility2 ./pageA.js 3:15-36 + cjs require ./utility2 ./pageB.js 2:15-36 + cjs require ./utility2 ./pageC.js 1:15-36 + cjs self exports reference ./utility2.js 1:0-14 +chunk (runtime: pageB, pageC) commons-utility3_js.js (id hint: commons) 28 bytes [initial] [rendered] split chunk (cache group: commons) + > ./pageB pageB + > ./pageC pageC + ./utility3.js 28 bytes [built] [code generated] + [used exports unknown] + cjs require ./utility3 ./pageB.js 3:15-36 + cjs require ./utility3 ./pageC.js 2:15-36 + cjs self exports reference ./utility3.js 1:0-14 +chunk (runtime: pageA) pageA.js (pageA) 165 bytes (javascript) 2.46 KiB (runtime) [entry] [rendered] + > ./pageA pageA + runtime modules 2.46 KiB 3 modules + dependent modules 28 bytes [dependent] 1 module + ./pageA.js 137 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./pageA.js 5:0-14 + entry ./pageA pageA +chunk (runtime: pageB) pageB.js (pageB) 137 bytes (javascript) 2.46 KiB (runtime) [entry] [rendered] + > ./pageB pageB + runtime modules 2.46 KiB 3 modules + ./pageB.js 137 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./pageB.js 5:0-14 + entry ./pageB pageB +chunk (runtime: pageC) pageC.js (pageC) 102 bytes (javascript) 2.46 KiB (runtime) [entry] [rendered] + > ./pageC pageC + runtime modules 2.46 KiB 3 modules + ./pageC.js 102 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./pageC.js 4:0-14 + entry ./pageC pageC +chunk (runtime: pageA, pageB) vendor.js (vendor) (id hint: vendor) 54 bytes [initial] [rendered] split chunk (cache group: vendor) (name: vendor) + > ./pageA pageA + > ./pageB pageB + ./node_modules/vendor1.js 27 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./node_modules/vendor1.js 1:0-14 + cjs require vendor1 ./pageA.js 1:14-32 + ./node_modules/vendor2.js 27 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./node_modules/vendor2.js 1:0-14 + cjs require vendor2 ./pageB.js 1:14-32 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -commons~pageA~pageB~pageC.js 96 bytes 0 [emitted] commons~pageA~pageB~pageC - commons~pageB~pageC.js 97 bytes 1 [emitted] commons~pageB~pageC - vendor.js 134 bytes 2 [emitted] vendor - pageC.js 1.1 KiB 3 [emitted] pageC - pageB.js 1.11 KiB 4 [emitted] pageB - pageA.js 1.15 KiB 5 [emitted] pageA -Entrypoint pageA = vendor.js commons~pageA~pageB~pageC.js pageA.js -Entrypoint pageB = vendor.js commons~pageA~pageB~pageC.js commons~pageB~pageC.js pageB.js -Entrypoint pageC = commons~pageA~pageB~pageC.js commons~pageB~pageC.js pageC.js -chunk {0} commons~pageA~pageB~pageC.js (commons~pageA~pageB~pageC) 28 bytes ={1}= ={2}= ={3}= ={4}= ={5}= [initial] [rendered] split chunk (cache group: commons) (name: commons~pageA~pageB~pageC) - > ./pageA pageA - > ./pageB pageB - > ./pageC pageC - [0] ./utility2.js 28 bytes {0} [built] - cjs require ./utility2 [2] ./pageC.js 1:15-36 - cjs require ./utility2 [4] ./pageB.js 2:15-36 - cjs require ./utility2 [7] ./pageA.js 3:15-36 -chunk {1} commons~pageB~pageC.js (commons~pageB~pageC) 28 bytes ={0}= ={2}= ={3}= ={4}= [initial] [rendered] split chunk (cache group: commons) (name: commons~pageB~pageC) - > ./pageB pageB - > ./pageC pageC - [1] ./utility3.js 28 bytes {1} [built] - cjs require ./utility3 [2] ./pageC.js 2:15-36 - cjs require ./utility3 [4] ./pageB.js 3:15-36 -chunk {2} vendor.js (vendor) 54 bytes ={0}= ={1}= ={4}= ={5}= [initial] [rendered] split chunk (cache group: vendor) (name: vendor) - > ./pageA pageA - > ./pageB pageB - 2 modules -chunk {3} pageC.js (pageC) 105 bytes ={0}= ={1}= [entry] [rendered] - > ./pageC pageC - [2] ./pageC.js 105 bytes {3} [built] - single entry ./pageC pageC -chunk {4} pageB.js (pageB) 137 bytes ={0}= ={1}= ={2}= [entry] [rendered] - > ./pageB pageB - [4] ./pageB.js 137 bytes {4} [built] - single entry ./pageB pageB -chunk {5} pageA.js (pageA) 165 bytes ={0}= ={2}= [entry] [rendered] - > ./pageA pageA - [5] ./utility1.js 28 bytes {5} [built] - cjs require ./utility1 [7] ./pageA.js 2:15-36 - [7] ./pageA.js 137 bytes {5} [built] - single entry ./pageA pageA +assets by chunk 210 bytes (id hint: commons) + asset commons-utility2_js.js 105 bytes [emitted] [minimized] (id hint: commons) + asset commons-utility3_js.js 105 bytes [emitted] [minimized] (id hint: commons) +asset pageA.js 1020 bytes [emitted] [minimized] (name: pageA) +asset pageB.js 1010 bytes [emitted] [minimized] (name: pageB) +asset pageC.js 996 bytes [emitted] [minimized] (name: pageC) +asset vendor.js 119 bytes [emitted] [minimized] (name: vendor) (id hint: vendor) +Entrypoint pageA 1.21 KiB = vendor.js 119 bytes commons-utility2_js.js 105 bytes pageA.js 1020 bytes +Entrypoint pageB 1.31 KiB = vendor.js 119 bytes commons-utility2_js.js 105 bytes commons-utility3_js.js 105 bytes pageB.js 1010 bytes +Entrypoint pageC 1.18 KiB = commons-utility2_js.js 105 bytes commons-utility3_js.js 105 bytes pageC.js 996 bytes +chunk (runtime: pageA, pageB, pageC) commons-utility2_js.js (id hint: commons) 28 bytes [initial] [rendered] split chunk (cache group: commons) + > ./pageA pageA + > ./pageB pageB + > ./pageC pageC + ./utility2.js 28 bytes [built] [code generated] + [used exports unknown] + cjs require ./utility2 ./pageA.js 3:15-36 + cjs require ./utility2 ./pageB.js 2:15-36 + cjs require ./utility2 ./pageC.js 1:15-36 + cjs self exports reference ./utility2.js 1:0-14 +chunk (runtime: pageB, pageC) commons-utility3_js.js (id hint: commons) 28 bytes [initial] [rendered] split chunk (cache group: commons) + > ./pageB pageB + > ./pageC pageC + ./utility3.js 28 bytes [built] [code generated] + [used exports unknown] + cjs require ./utility3 ./pageB.js 3:15-36 + cjs require ./utility3 ./pageC.js 2:15-36 + cjs self exports reference ./utility3.js 1:0-14 +chunk (runtime: pageA) pageA.js (pageA) 165 bytes (javascript) 2.46 KiB (runtime) [entry] [rendered] + > ./pageA pageA + runtime modules 2.46 KiB 3 modules + dependent modules 28 bytes [dependent] 1 module + ./pageA.js 137 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./pageA.js 5:0-14 + entry ./pageA pageA +chunk (runtime: pageB) pageB.js (pageB) 137 bytes (javascript) 2.46 KiB (runtime) [entry] [rendered] + > ./pageB pageB + runtime modules 2.46 KiB 3 modules + ./pageB.js 137 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./pageB.js 5:0-14 + entry ./pageB pageB +chunk (runtime: pageC) pageC.js (pageC) 102 bytes (javascript) 2.46 KiB (runtime) [entry] [rendered] + > ./pageC pageC + runtime modules 2.46 KiB 3 modules + ./pageC.js 102 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./pageC.js 4:0-14 + entry ./pageC pageC +chunk (runtime: pageA, pageB) vendor.js (vendor) (id hint: vendor) 54 bytes [initial] [rendered] split chunk (cache group: vendor) (name: vendor) + > ./pageA pageA + > ./pageB pageB + ./node_modules/vendor1.js 27 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./node_modules/vendor1.js 1:0-14 + cjs require vendor1 ./pageA.js 1:14-32 + ./node_modules/vendor2.js 27 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./node_modules/vendor2.js 1:0-14 + cjs require vendor2 ./pageB.js 1:14-32 +webpack X.X.X compiled successfully ``` diff --git a/examples/common-chunk-and-vendor-chunk/template.md b/examples/common-chunk-and-vendor-chunk/template.md index bc7f590c76a..64de9808254 100644 --- a/examples/common-chunk-and-vendor-chunk/template.md +++ b/examples/common-chunk-and-vendor-chunk/template.md @@ -33,44 +33,44 @@ With this bundle configuration, you would load your third party libraries, then # webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # dist/vendor.js -``` javascript -{{dist/vendor.js}} +```javascript +_{{dist/vendor.js}}_ ``` -# dist/commons~pageA~pageB~pageC.js +# dist/commons-utility2_js.js ``` javascript -{{dist/commons~pageA~pageB~pageC.js}} +_{{dist/commons-utility2_js.js}}_ ``` -# dist/commons~pageB~pageC.js +# dist/commons-utility3_js.js ``` javascript -{{dist/commons~pageB~pageC.js}} +_{{dist/commons-utility3_js.js}}_ ``` # dist/pageA.js -``` javascript -{{dist/pageA.js}} +```javascript +_{{dist/pageA.js}}_ ``` # dist/pageB.js -``` javascript -{{dist/pageB.js}} +```javascript +_{{dist/pageB.js}}_ ``` # dist/pageC.js -``` javascript -{{dist/pageC.js}} +```javascript +_{{dist/pageC.js}}_ ``` # Info @@ -78,11 +78,11 @@ With this bundle configuration, you would load your third party libraries, then ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/common-chunk-and-vendor-chunk/webpack.config.js b/examples/common-chunk-and-vendor-chunk/webpack.config.js index 2cdc9599bf9..1f967f9345f 100644 --- a/examples/common-chunk-and-vendor-chunk/webpack.config.js +++ b/examples/common-chunk-and-vendor-chunk/webpack.config.js @@ -1,6 +1,9 @@ -var path = require("path"); +"use strict"; -module.exports = { +const path = require("path"); + +/** @type {import("webpack").Configuration} */ +const config = { // mode: "development" || "production", entry: { pageA: "./pageA", @@ -8,6 +11,7 @@ module.exports = { pageC: "./pageC" }, optimization: { + chunkIds: "named", splitChunks: { cacheGroups: { commons: { @@ -31,3 +35,5 @@ module.exports = { filename: "[name].js" } }; + +module.exports = config; diff --git a/examples/common-chunk-grandchildren/README.md b/examples/common-chunk-grandchildren/README.md index 9ce9e748da9..ed62e173871 100644 --- a/examples/common-chunk-grandchildren/README.md +++ b/examples/common-chunk-grandchildren/README.md @@ -1,28 +1,27 @@ This example illustrates how common modules from deep ancestors of an entry point can be split into a separate common chunk -* `pageA` and `pageB` are dynamically required -* `pageC` and `pageA` both require the `reusableComponent` -* `pageB` dynamically requires `PageC` +- `pageA` and `pageB` are dynamically required +- `pageC` and `pageA` both require the `reusableComponent` +- `pageB` dynamically requires `PageC` You can see that webpack outputs five files/chunks: -* `output.js` is the entry chunk and contains - * the module system - * chunk loading logic - * the entry point `example.js` -* `0.output.js` is an additional chunk - * module `reusableComponent` -* `1.output.js` is an additional chunk - * module `pageB` -* `2.output.js` is an additional chunk - * module `pageA` -* `3.output.js` is an additional chunk - * module `pageC` - +- `output.js` is the entry chunk and contains + - the module system + - chunk loading logic + - the entry point `example.js` +- `0.output.js` is an additional chunk + - module `reusableComponent` +- `1.output.js` is an additional chunk + - module `pageB` +- `2.output.js` is an additional chunk + - module `pageA` +- `3.output.js` is an additional chunk + - module `pageC` # example.js -``` javascript +```javascript var main = function() { console.log("Main class"); require.ensure([], () => { @@ -40,7 +39,7 @@ main(); # pageA.js -``` javascript +```javascript var reusableComponent = require("./reusableComponent"); module.exports = function() { @@ -51,7 +50,7 @@ module.exports = function() { # pageB.js -``` javascript +```javascript module.exports = function() { console.log("Page B"); require.ensure([], ()=>{ @@ -63,7 +62,7 @@ module.exports = function() { # pageC.js -``` javascript +```javascript var reusableComponent = require("./reusableComponent"); module.exports = function() { @@ -74,7 +73,7 @@ module.exports = function() { # reusableComponent.js -``` javascript +```javascript module.exports = function() { console.log("reusable Component"); }; @@ -82,12 +81,14 @@ module.exports = function() { # webpack.config.js -``` javascript +```javascript "use strict"; + const path = require("path"); -module.exports = { - // mode: "development || "production", +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { main: ["./example.js"] }, @@ -95,338 +96,359 @@ module.exports = { splitChunks: { minSize: 0 // This example is too small, in practice you can use the defaults }, - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) }, output: { path: path.resolve(__dirname, "dist"), filename: "output.js" } }; + +module.exports = config; ``` # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({}); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 4: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "main": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 1); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */ +``` js /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, __webpack_require__.e, __webpack_require__.* */ var main = function() { console.log("Main class"); - Promise.all(/*! require.ensure */[__webpack_require__.e(0), __webpack_require__.e(2)]).then((() => { - const page = __webpack_require__(/*! ./pageA */ 3); + Promise.all(/*! require.ensure */[__webpack_require__.e("reusableComponent_js"), __webpack_require__.e("pageA_js")]).then((() => { + const page = __webpack_require__(/*! ./pageA */ 1); page(); - }).bind(null, __webpack_require__)).catch(__webpack_require__.oe); - __webpack_require__.e(/*! require.ensure */ 1).then((() => { - const page = __webpack_require__(/*! ./pageB */ 2); + }).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); + __webpack_require__.e(/*! require.ensure */ "pageB_js").then((() => { + const page = __webpack_require__(/*! ./pageB */ 3); page(); - }).bind(null, __webpack_require__)).catch(__webpack_require__.oe); + }).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); }; main(); - -/***/ }), -/* 1 */ -/*!**************************!*\ - !*** multi ./example.js ***! - \**************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! ./example.js */0); - - -/***/ }) -/******/ ]); +/******/ })() +; ``` -# dist/0.output.js +# dist/pageA_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["pageA_js"],[ +/* 0 */, +/* 1 */ +/*!******************!*\ + !*** ./pageA.js ***! + \******************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -/***/ 4: -/*!******************************!*\ - !*** ./reusableComponent.js ***! - \******************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +var reusableComponent = __webpack_require__(/*! ./reusableComponent */ 2); module.exports = function() { - console.log("reusable Component"); + console.log("Page A"); + reusableComponent(); }; /***/ }) - -}]); +]]); ``` -# dist/1.output.js +# dist/pageB_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[1],{ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["pageB_js"],{ -/***/ 2: +/***/ 3 /*!******************!*\ !*** ./pageB.js ***! \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module, __unused_webpack_exports, __webpack_require__) { module.exports = function() { console.log("Page B"); - Promise.all(/*! require.ensure */[__webpack_require__.e(0), __webpack_require__.e(3)]).then((()=>{ - const page = __webpack_require__(/*! ./pageC */ 5); + Promise.all(/*! require.ensure */[__webpack_require__.e("reusableComponent_js"), __webpack_require__.e("pageC_js")]).then((()=>{ + const page = __webpack_require__(/*! ./pageC */ 4); page(); - }).bind(null, __webpack_require__)).catch(__webpack_require__.oe); + }).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); }; -/***/ }) +/***/ } }]); ``` -# dist/2.output.js +# dist/pageC_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[2],{ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["pageC_js"],{ -/***/ 3: +/***/ 4 /*!******************!*\ - !*** ./pageA.js ***! + !*** ./pageC.js ***! \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ +(module, __unused_webpack_exports, __webpack_require__) { -var reusableComponent = __webpack_require__(/*! ./reusableComponent */ 4); +var reusableComponent = __webpack_require__(/*! ./reusableComponent */ 2); module.exports = function() { - console.log("Page A"); + console.log("Page C"); reusableComponent(); }; -/***/ }) +/***/ } }]); ``` -# dist/3.output.js +# dist/reusableComponent_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[3],{ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["reusableComponent_js"],{ -/***/ 5: -/*!******************!*\ - !*** ./pageC.js ***! - \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var reusableComponent = __webpack_require__(/*! ./reusableComponent */ 4); +/***/ 2 +/*!******************************!*\ + !*** ./reusableComponent.js ***! + \******************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +(module) { module.exports = function() { - console.log("Page C"); - reusableComponent(); + console.log("reusable Component"); }; -/***/ }) +/***/ } }]); ``` @@ -436,75 +458,85 @@ module.exports = function() { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 340 bytes 0 [emitted] -1.output.js 549 bytes 1 [emitted] -2.output.js 414 bytes 2 [emitted] -3.output.js 414 bytes 3 [emitted] - output.js 7.79 KiB 4 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 72 bytes <{1}> <{4}> ={2}= ={3}= [rendered] split chunk (cache group: default) - > [0] ./example.js 3:1-6:3 - > [2] ./pageB.js 3:1-6:3 - [4] ./reusableComponent.js 72 bytes {0} [built] - cjs require ./reusableComponent [3] ./pageA.js 1:24-54 - cjs require ./reusableComponent [5] ./pageC.js 1:24-54 -chunk {1} 1.output.js 140 bytes <{4}> >{0}< >{3}< [rendered] - > [0] ./example.js 7:1-10:3 - [2] ./pageB.js 140 bytes {1} [built] - cjs require ./pageB [0] ./example.js 8:15-33 -chunk {2} 2.output.js 142 bytes <{4}> ={0}= [rendered] - > [0] ./example.js 3:1-6:3 - [3] ./pageA.js 142 bytes {2} [built] - cjs require ./pageA [0] ./example.js 4:15-33 -chunk {3} 3.output.js 142 bytes <{1}> ={0}= [rendered] - > [2] ./pageB.js 3:1-6:3 - [5] ./pageC.js 142 bytes {3} [built] - cjs require ./pageC [2] ./pageB.js 4:15-33 -chunk {4} output.js (main) 261 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > main - [0] ./example.js 233 bytes {4} [built] - single entry ./example.js [1] multi ./example.js main:100000 - [1] multi ./example.js 28 bytes {4} [built] - multi entry +asset output.js 9.29 KiB [emitted] (name: main) +asset pageB_js.output.js 760 bytes [emitted] +asset pageA_js.output.js 565 bytes [emitted] +asset pageC_js.output.js 547 bytes [emitted] +asset reusableComponent_js.output.js 441 bytes [emitted] +chunk (runtime: main) output.js (main) 220 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + ./example.js 220 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) pageA_js.output.js 136 bytes [rendered] + > ./example.js 3:1-6:3 + ./pageA.js 136 bytes [built] [code generated] + [used exports unknown] + cjs require ./pageA ./example.js 4:15-33 + cjs self exports reference ./pageA.js 3:0-14 +chunk (runtime: main) pageB_js.output.js 133 bytes [rendered] + > ./example.js 7:1-10:3 + ./pageB.js 133 bytes [built] [code generated] + [used exports unknown] + cjs require ./pageB ./example.js 8:15-33 + cjs self exports reference ./pageB.js 1:0-14 +chunk (runtime: main) pageC_js.output.js 136 bytes [rendered] + > ./pageB.js 3:1-6:3 + ./pageC.js 136 bytes [built] [code generated] + [used exports unknown] + cjs require ./pageC ./pageB.js 4:15-33 + cjs self exports reference ./pageC.js 3:0-14 +chunk (runtime: main) reusableComponent_js.output.js 69 bytes [rendered] split chunk (cache group: default) + > ./example.js 3:1-6:3 + > ./pageB.js 3:1-6:3 + ./reusableComponent.js 69 bytes [built] [code generated] + [used exports unknown] + cjs require ./reusableComponent ./pageA.js 1:24-54 + cjs require ./reusableComponent ./pageC.js 1:24-54 + cjs self exports reference ./reusableComponent.js 1:0-14 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 133 bytes 0 [emitted] -1.output.js 198 bytes 1 [emitted] -2.output.js 138 bytes 2 [emitted] -3.output.js 138 bytes 3 [emitted] - output.js 1.78 KiB 4 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 72 bytes <{1}> <{4}> ={2}= ={3}= [rendered] split chunk (cache group: default) - > [0] ./example.js 3:1-6:3 - > [2] ./pageB.js 3:1-6:3 - [4] ./reusableComponent.js 72 bytes {0} [built] - cjs require ./reusableComponent [3] ./pageA.js 1:24-54 - cjs require ./reusableComponent [5] ./pageC.js 1:24-54 -chunk {1} 1.output.js 140 bytes <{4}> >{0}< >{3}< [rendered] - > [0] ./example.js 7:1-10:3 - [2] ./pageB.js 140 bytes {1} [built] - cjs require ./pageB [0] ./example.js 8:15-33 -chunk {2} 2.output.js 142 bytes <{4}> ={0}= [rendered] - > [0] ./example.js 3:1-6:3 - [3] ./pageA.js 142 bytes {2} [built] - cjs require ./pageA [0] ./example.js 4:15-33 -chunk {3} 3.output.js 142 bytes <{1}> ={0}= [rendered] - > [2] ./pageB.js 3:1-6:3 - [5] ./pageC.js 142 bytes {3} [built] - cjs require ./pageC [2] ./pageB.js 4:15-33 -chunk {4} output.js (main) 261 bytes >{0}< >{1}< >{2}< [entry] [rendered] - > main - [0] ./example.js 233 bytes {4} [built] - single entry ./example.js [1] multi ./example.js main:100000 - [1] multi ./example.js 28 bytes {4} [built] - multi entry +asset output.js 1.8 KiB [emitted] [minimized] (name: main) +asset pageB_js.output.js 228 bytes [emitted] [minimized] +asset reusableComponent_js.output.js 141 bytes [emitted] [minimized] +asset pageC_js.output.js 138 bytes [emitted] [minimized] +asset pageA_js.output.js 137 bytes [emitted] [minimized] +chunk (runtime: main) output.js (main) 220 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + ./example.js 220 bytes [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: main) pageA_js.output.js 136 bytes [rendered] + > ./example.js 3:1-6:3 + ./pageA.js 136 bytes [built] [code generated] + [used exports unknown] + cjs require ./pageA ./example.js 4:15-33 + cjs self exports reference ./pageA.js 3:0-14 +chunk (runtime: main) pageB_js.output.js 133 bytes [rendered] + > ./example.js 7:1-10:3 + ./pageB.js 133 bytes [built] [code generated] + [used exports unknown] + cjs require ./pageB ./example.js 8:15-33 + cjs self exports reference ./pageB.js 1:0-14 +chunk (runtime: main) pageC_js.output.js 136 bytes [rendered] + > ./pageB.js 3:1-6:3 + ./pageC.js 136 bytes [built] [code generated] + [used exports unknown] + cjs require ./pageC ./pageB.js 4:15-33 + cjs self exports reference ./pageC.js 3:0-14 +chunk (runtime: main) reusableComponent_js.output.js 69 bytes [rendered] split chunk (cache group: default) + > ./pageB.js 3:1-6:3 + > ./example.js 3:1-6:3 + ./reusableComponent.js 69 bytes [built] [code generated] + [used exports unknown] + cjs require ./reusableComponent ./pageA.js 1:24-54 + cjs require ./reusableComponent ./pageC.js 1:24-54 + cjs self exports reference ./reusableComponent.js 1:0-14 +webpack X.X.X compiled successfully ``` diff --git a/examples/common-chunk-grandchildren/template.md b/examples/common-chunk-grandchildren/template.md index aa0aaeae9d2..7be73dfc7a9 100644 --- a/examples/common-chunk-grandchildren/template.md +++ b/examples/common-chunk-grandchildren/template.md @@ -1,89 +1,88 @@ This example illustrates how common modules from deep ancestors of an entry point can be split into a separate common chunk -* `pageA` and `pageB` are dynamically required -* `pageC` and `pageA` both require the `reusableComponent` -* `pageB` dynamically requires `PageC` +- `pageA` and `pageB` are dynamically required +- `pageC` and `pageA` both require the `reusableComponent` +- `pageB` dynamically requires `PageC` You can see that webpack outputs five files/chunks: -* `output.js` is the entry chunk and contains - * the module system - * chunk loading logic - * the entry point `example.js` -* `0.output.js` is an additional chunk - * module `reusableComponent` -* `1.output.js` is an additional chunk - * module `pageB` -* `2.output.js` is an additional chunk - * module `pageA` -* `3.output.js` is an additional chunk - * module `pageC` - +- `output.js` is the entry chunk and contains + - the module system + - chunk loading logic + - the entry point `example.js` +- `0.output.js` is an additional chunk + - module `reusableComponent` +- `1.output.js` is an additional chunk + - module `pageB` +- `2.output.js` is an additional chunk + - module `pageA` +- `3.output.js` is an additional chunk + - module `pageC` # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # pageA.js -``` javascript -{{pageA.js}} +```javascript +_{{pageA.js}}_ ``` # pageB.js -``` javascript -{{pageB.js}} +```javascript +_{{pageB.js}}_ ``` # pageC.js -``` javascript -{{pageC.js}} +```javascript +_{{pageC.js}}_ ``` # reusableComponent.js -``` javascript -{{reusableComponent.js}} +```javascript +_{{reusableComponent.js}}_ ``` # webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` -# dist/0.output.js +# dist/pageA_js.output.js -``` javascript -{{dist/0.output.js}} +```javascript +_{{dist/pageA_js.output.js}}_ ``` -# dist/1.output.js +# dist/pageB_js.output.js -``` javascript -{{dist/1.output.js}} +```javascript +_{{dist/pageB_js.output.js}}_ ``` -# dist/2.output.js +# dist/pageC_js.output.js -``` javascript -{{dist/2.output.js}} +```javascript +_{{dist/pageC_js.output.js}}_ ``` -# dist/3.output.js +# dist/reusableComponent_js.output.js -``` javascript -{{dist/3.output.js}} +```javascript +_{{dist/reusableComponent_js.output.js}}_ ``` # Info @@ -91,11 +90,11 @@ You can see that webpack outputs five files/chunks: ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/common-chunk-grandchildren/webpack.config.js b/examples/common-chunk-grandchildren/webpack.config.js index 189b94895b8..8b6b6df57a4 100644 --- a/examples/common-chunk-grandchildren/webpack.config.js +++ b/examples/common-chunk-grandchildren/webpack.config.js @@ -1,8 +1,10 @@ "use strict"; + const path = require("path"); -module.exports = { - // mode: "development || "production", +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { main: ["./example.js"] }, @@ -10,10 +12,12 @@ module.exports = { splitChunks: { minSize: 0 // This example is too small, in practice you can use the defaults }, - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) }, output: { path: path.resolve(__dirname, "dist"), filename: "output.js" } }; + +module.exports = config; diff --git a/examples/commonjs/README.md b/examples/commonjs/README.md index fb85a0b1c08..9f891b1484f 100644 --- a/examples/commonjs/README.md +++ b/examples/commonjs/README.md @@ -1,23 +1,23 @@ -This very simple example shows usage of CommonJS. +This is a simple example that shows the usage of CommonJS. The three files `example.js`, `increment.js` and `math.js` form a dependency chain. They use `require(dependency)` to declare dependencies. -You can see the output file that webpack creates by bundling them together in one file. Keep in mind that webpack adds comments to make reading this file easier. These comments are removed when minimizing the file. +You can see the output file that webpack creates by bundling them together in one file. Keep in mind that webpack add comments to make reading this file easier. These comments are removed when minimizing the file. -You can also see the info messages webpack prints to console (for both normal and minimized build). +You can also see the info messages that webpack prints to console (for both normal and minimized build). # example.js -``` javascript -var inc = require('./increment').increment; -var a = 1; +```javascript +const inc = require('./increment').increment; +const a = 1; inc(a); // 2 ``` # increment.js -``` javascript -var add = require('./math').add; +```javascript +const add = require('./math').add; exports.increment = function(val) { return add(val, 1); }; @@ -25,7 +25,7 @@ exports.increment = function(val) { # math.js -``` javascript +```javascript exports.add = function() { var sum = 0, i = 0, args = arguments, l = args.length; while (i < l) { @@ -37,117 +37,36 @@ exports.add = function() { # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -``` - -
- -``` javascript -/******/ ([ -/* 0 */ -/*!********************!*\ - !*** ./example.js ***! - \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var inc = __webpack_require__(/*! ./increment */ 1).increment; -var a = 1; -inc(a); // 2 - -/***/ }), +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, /* 1 */ /*!**********************!*\ !*** ./increment.js ***! \**********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! default exports */ +/*! export increment [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_exports__ */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -var add = __webpack_require__(/*! ./math */ 2).add; +const add = (__webpack_require__(/*! ./math */ 2).add); exports.increment = function(val) { return add(val, 1); }; + /***/ }), /* 2 */ /*!*****************!*\ !*** ./math.js ***! \*****************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! default exports */ +/*! export add [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_exports__ */ +/***/ ((__unused_webpack_module, exports) => { exports.add = function() { var sum = 0, i = 0, args = arguments, l = args.length; @@ -158,7 +77,65 @@ exports.add = function() { }; /***/ }) -/******/ ]); +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ +const inc = (__webpack_require__(/*! ./increment */ 1).increment); +const a = 1; +inc(a); // 2 + +})(); + +/******/ })() +; ``` # Info @@ -166,35 +143,25 @@ exports.add = function() { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -output.js 3.44 KiB 0 [emitted] main -Entrypoint main = output.js -chunk {0} output.js (main) 329 bytes [entry] [rendered] - > .\example.js main - [0] ./example.js 69 bytes {0} [built] - single entry .\example.js main - [1] ./increment.js 98 bytes {0} [built] - cjs require ./increment [0] ./example.js 1:10-32 - [2] ./math.js 162 bytes {0} [built] - cjs require ./math [1] ./increment.js 1:10-27 +asset output.js 2.77 KiB [emitted] (name: main) +chunk (runtime: main) output.js (main) 326 bytes [entry] [rendered] + > ./example.js main + dependent modules 254 bytes [dependent] 2 modules + ./example.js 72 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -output.js 740 bytes 0 [emitted] main -Entrypoint main = output.js -chunk {0} output.js (main) 329 bytes [entry] [rendered] - > .\example.js main - [0] ./math.js 162 bytes {0} [built] - cjs require ./math [1] ./increment.js 1:10-27 - [1] ./increment.js 98 bytes {0} [built] - cjs require ./increment [2] ./example.js 1:10-32 - [2] ./example.js 69 bytes {0} [built] - single entry .\example.js main -``` \ No newline at end of file +asset output.js 304 bytes [emitted] [minimized] (name: main) +chunk (runtime: main) output.js (main) 326 bytes [entry] [rendered] + > ./example.js main + dependent modules 254 bytes [dependent] 2 modules + ./example.js 72 bytes [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/commonjs/example.js b/examples/commonjs/example.js index 5b87a398285..d56b3cb0040 100644 --- a/examples/commonjs/example.js +++ b/examples/commonjs/example.js @@ -1,3 +1,3 @@ -var inc = require('./increment').increment; -var a = 1; -inc(a); // 2 \ No newline at end of file +const inc = require('./increment').increment; +const a = 1; +inc(a); // 2 diff --git a/examples/commonjs/increment.js b/examples/commonjs/increment.js index df19980e68a..5b6497cade5 100644 --- a/examples/commonjs/increment.js +++ b/examples/commonjs/increment.js @@ -1,4 +1,4 @@ -var add = require('./math').add; +const add = require('./math').add; exports.increment = function(val) { return add(val, 1); -}; \ No newline at end of file +}; diff --git a/examples/commonjs/template.md b/examples/commonjs/template.md index 5ed0539fc77..8fa7cf29052 100644 --- a/examples/commonjs/template.md +++ b/examples/commonjs/template.md @@ -1,33 +1,33 @@ -This very simple example shows usage of CommonJS. +This is a simple example that shows the usage of CommonJS. The three files `example.js`, `increment.js` and `math.js` form a dependency chain. They use `require(dependency)` to declare dependencies. -You can see the output file that webpack creates by bundling them together in one file. Keep in mind that webpack adds comments to make reading this file easier. These comments are removed when minimizing the file. +You can see the output file that webpack creates by bundling them together in one file. Keep in mind that webpack add comments to make reading this file easier. These comments are removed when minimizing the file. -You can also see the info messages webpack prints to console (for both normal and minimized build). +You can also see the info messages that webpack prints to console (for both normal and minimized build). # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # increment.js -``` javascript -{{increment.js}} +```javascript +_{{increment.js}}_ ``` # math.js -``` javascript -{{math.js}} +```javascript +_{{math.js}}_ ``` # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` # Info @@ -35,11 +35,11 @@ You can also see the info messages webpack prints to console (for both normal an ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} -``` \ No newline at end of file +_{{production:stdout}}_ +``` diff --git a/examples/css/README.md b/examples/css/README.md new file mode 100644 index 00000000000..d61b47dc830 --- /dev/null +++ b/examples/css/README.md @@ -0,0 +1,586 @@ +# example.js + +```javascript +import "./style.css"; +import "./style2.css"; +import { main } from "./style.module.css"; +import("./lazy-style.css"); + +document.getElementsByTagName("main")[0].className = main; +``` + +# style.css + +```javascript +@import "style-imported.css"; +@import "https://fonts.googleapis.com/css?family=Open+Sans"; + +body { + background: green; + font-family: "Open Sans"; +} +``` + +# dist/output.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 6 +/*!******************************!*\ + !*** css ./style.module.css ***! + \******************************/ +/*! namespace exports */ +/*! export large [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export main [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__.r, module, has css modules, __webpack_require__.* */ +(module, __unused_webpack_exports, __webpack_require__) { + +__webpack_require__.r(module.exports = { + "large": "--QRIlVD", + "main": "zI6JBT" +}); + + +/***/ } + +/******/ }); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get css chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.k = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.css"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ var dataWebpackPrefix = "app:"; +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/css loading */ +/******/ (() => { +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 0: 0 +/******/ }; +/******/ +/******/ var uniqueName = "app"; +/******/ var loadingAttribute = "data-webpack-loading"; +/******/ var loadStylesheet = (chunkId, url, done) => { +/******/ var link, needAttach, key = "chunk-" + chunkId; +/******/ +/******/ var links = document.getElementsByTagName("link"); +/******/ for(var i = 0; i < links.length; i++) { +/******/ var l = links[i]; +/******/ if(l.rel == "stylesheet" && (l.href == url || l.getAttribute("href") == url || l.getAttribute("data-webpack") == uniqueName + ":" + key)) { link = l; break; } +/******/ } +/******/ if(!done) return link; +/******/ +/******/ if(!link) { +/******/ needAttach = true; +/******/ link = document.createElement('link'); +/******/ link.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ link.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ link.setAttribute("data-webpack", uniqueName + ":" + key); +/******/ +/******/ link.setAttribute(loadingAttribute, 1); +/******/ link.rel = "stylesheet"; +/******/ link.href = url; +/******/ } +/******/ var onLinkComplete = (prev, event) => { +/******/ link.onerror = link.onload = null; +/******/ link.removeAttribute(loadingAttribute); +/******/ clearTimeout(timeout); +/******/ if(event && event.type != "load") link.parentNode.removeChild(link) +/******/ done(event); +/******/ if(prev) return prev(event); +/******/ }; +/******/ if(link.getAttribute(loadingAttribute)) { +/******/ var timeout = setTimeout(onLinkComplete.bind(null, undefined, { type: 'timeout', target: link }), 120000); +/******/ link.onerror = onLinkComplete.bind(null, link.onerror); +/******/ link.onload = onLinkComplete.bind(null, link.onload); +/******/ } else onLinkComplete(undefined, { type: 'load', target: link }); +/******/ +/******/ +/******/ needAttach && document.head.appendChild(link); +/******/ return link; +/******/ }; +/******/ __webpack_require__.f.css = (chunkId, promises) => { +/******/ // css chunk loading +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have CSS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.k(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ if(event.type !== "load") { +/******/ var errorType = event && event.type; +/******/ var realHref = event && event.target && event.target.href; +/******/ error.message = 'Loading css chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realHref + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realHref; +/******/ installedChunkData[1](error); +/******/ } else { +/******/ installedChunks[chunkId] = 0; +/******/ installedChunkData[0](); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ loadStylesheet(chunkId, url, loadingEnded); +/******/ } else installedChunks[chunkId] = 0; +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ // no hmr +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 0: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.e, __webpack_require__.* */ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _style_module_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.module.css */ 6); + + + +__webpack_require__.e(/*! import() */ 1).then(__webpack_require__.bind(__webpack_require__, /*! ./lazy-style.css */ 7)); + +document.getElementsByTagName("main")[0].className = _style_module_css__WEBPACK_IMPORTED_MODULE_0__.main; + +})(); + +/******/ })() +; +``` + +# dist/output.css + +```javascript +/*!********************************************************************!*\ + !*** external "https://fonts.googleapis.com/css?family=Open+Sans" ***! + \********************************************************************/ +@import url("https://fonts.googleapis.com/css?family=Open+Sans"); +/*!********************************!*\ + !*** css ./style-imported.css ***! + \********************************/ +.img { + width: 150px; + height: 150px; + background: url(dist/89a353e9c515885abd8e.png); +} + +/*!***********************!*\ + !*** css ./style.css ***! + \***********************/ + +body { + background: green; + font-family: "Open Sans"; +} + +/*!************************!*\ + !*** css ./style2.css ***! + \************************/ +body { + background: red; +} + +/*!******************************!*\ + !*** css ./style.module.css ***! + \******************************/ +:root { + --QRIlVD: 72px; +} + +.zI6JBT { + font-size: var(--QRIlVD); + color: darkblue; +} + +@media (min-width: 1024px) { + .zI6JBT { + color: green; + } +} + +@supports (display: grid) { + .zI6JBT { + display: grid + } +} +``` + +## production + +```javascript +@import url("https://fonts.googleapis.com/css?family=Open+Sans"); +.img { + width: 150px; + height: 150px; + background: url(dist/89a353e9c515885abd8e.png); +} + + +body { + background: green; + font-family: "Open Sans"; +} + +body { + background: red; +} + +:root { + --QRIlVD: 72px; +} + +.zI6JBT { + font-size: var(--QRIlVD); + color: darkblue; +} + +@media (min-width: 1024px) { + .zI6JBT { + color: green; + } +} + +@supports (display: grid) { + .zI6JBT { + display: grid + } +} +``` + +# dist/1.output.css + +```javascript +/*!****************************!*\ + !*** css ./lazy-style.css ***! + \****************************/ +body { + color: blue; +} +``` + +# Info + +## Unoptimized + +``` +assets by path *.js 15.7 KiB + asset output.js 15.4 KiB [emitted] (name: main) + asset 1.output.js 332 bytes [emitted] +assets by path *.css 1.16 KiB + asset output.css 1.04 KiB [emitted] (name: main) + asset 1.output.css 125 bytes [emitted] +asset 89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: images/file.png] (auxiliary name: main) +Entrypoint main 16.4 KiB (14.6 KiB) = output.js 15.4 KiB output.css 1.04 KiB 1 auxiliary asset +chunk (runtime: main) output.js, output.css (main) 254 bytes (javascript) 454 bytes (css) 14.6 KiB (asset) 42 bytes (css-url) 42 bytes (css-import) 8.8 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 8.8 KiB 9 modules + dependent modules 14.6 KiB (asset) 42 bytes (css-url) 454 bytes (css) 78 bytes (javascript) 42 bytes (css-import) [dependent] 6 modules + ./example.js 176 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) 1.output.js, 1.output.css 1 bytes (javascript) 23 bytes (css) [rendered] + > ./lazy-style.css ./example.js 4:0-26 + css ./lazy-style.css 1 bytes (javascript) 23 bytes (css) [built] [code generated] + [no exports] + [used exports unknown] + import() ./lazy-style.css ./example.js 4:0-26 +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +assets by path *.js 3.12 KiB + asset output.js 3.04 KiB [emitted] [minimized] (name: main) + asset 822.output.js 85 bytes [emitted] [minimized] +assets by path *.css 475 bytes + asset output.css 451 bytes [emitted] (name: main) + asset 822.output.css 24 bytes [emitted] +asset 89a353e9c515885abd8e.png 14.6 KiB [emitted] [immutable] [from: images/file.png] (auxiliary name: main) +Entrypoint main 3.48 KiB (14.6 KiB) = output.js 3.04 KiB output.css 451 bytes 1 auxiliary asset +chunk (runtime: main) output.js, output.css (main) 454 bytes (css) 14.6 KiB (asset) 42 bytes (css-url) 42 bytes (css-import) 442 bytes (javascript) 8.53 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 8.53 KiB 8 modules + dependent modules 14.6 KiB (asset) 42 bytes (css-url) 79 bytes (css) 42 bytes (css-import) [dependent] 3 modules + cacheable modules 442 bytes (javascript) 375 bytes (css) + ./example.js + 3 modules 351 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main + css ./style.css 148 bytes [built] [code generated] + [no exports] + [no exports used] + css ./style.module.css 91 bytes (javascript) 200 bytes (css) [built] [code generated] + [exports: large, main] + [only some exports used: main] + css ./style2.css 27 bytes [built] [code generated] + [no exports] + [no exports used] +chunk (runtime: main) 822.output.js, 822.output.css 1 bytes (javascript) 23 bytes (css) [rendered] + > ./lazy-style.css ./example.js 4:0-26 + css ./lazy-style.css 1 bytes (javascript) 23 bytes (css) [built] [code generated] + [no exports] + import() ./lazy-style.css ./example.js + 3 modules ./example.js 4:0-26 +webpack X.X.X compiled successfully +``` diff --git a/examples/web-worker/build.js b/examples/css/build.js similarity index 100% rename from examples/web-worker/build.js rename to examples/css/build.js diff --git a/examples/css/example.js b/examples/css/example.js new file mode 100644 index 00000000000..b44731310a8 --- /dev/null +++ b/examples/css/example.js @@ -0,0 +1,6 @@ +import "./style.css"; +import "./style2.css"; +import { main } from "./style.module.css"; +import("./lazy-style.css"); + +document.getElementsByTagName("main")[0].className = main; diff --git a/examples/css/images/file.png b/examples/css/images/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/examples/css/images/file.png differ diff --git a/examples/css/index.html b/examples/css/index.html new file mode 100644 index 00000000000..9b3f06397ab --- /dev/null +++ b/examples/css/index.html @@ -0,0 +1,10 @@ + + + + + +
Hello World
+

+ + + diff --git a/examples/css/lazy-style.css b/examples/css/lazy-style.css new file mode 100644 index 00000000000..36505138bc9 --- /dev/null +++ b/examples/css/lazy-style.css @@ -0,0 +1,3 @@ +body { + color: blue; +} diff --git a/examples/css/style-imported.css b/examples/css/style-imported.css new file mode 100644 index 00000000000..83989315ce2 --- /dev/null +++ b/examples/css/style-imported.css @@ -0,0 +1,5 @@ +.img { + width: 150px; + height: 150px; + background: url("./images/file.png"); +} diff --git a/examples/css/style.css b/examples/css/style.css new file mode 100644 index 00000000000..8b855420284 --- /dev/null +++ b/examples/css/style.css @@ -0,0 +1,7 @@ +@import "style-imported.css"; +@import "https://fonts.googleapis.com/css?family=Open+Sans"; + +body { + background: green; + font-family: "Open Sans"; +} diff --git a/examples/css/style.module.css b/examples/css/style.module.css new file mode 100644 index 00000000000..a788746a1a3 --- /dev/null +++ b/examples/css/style.module.css @@ -0,0 +1,20 @@ +:root { + --large: 72px; +} + +.main { + font-size: var(--large); + color: darkblue; +} + +@media (min-width: 1024px) { + .main { + color: green; + } +} + +@supports (display: grid) { + .main { + display: grid + } +} diff --git a/examples/css/style2.css b/examples/css/style2.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/examples/css/style2.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/examples/css/template.md b/examples/css/template.md new file mode 100644 index 00000000000..6dea2beb4e5 --- /dev/null +++ b/examples/css/template.md @@ -0,0 +1,49 @@ +# example.js + +```javascript +_{{example.js}}_ +``` + +# style.css + +```javascript +_{{style.css}}_ +``` + +# dist/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# dist/output.css + +```javascript +_{{dist/output.css}}_ +``` + +## production + +```javascript +_{{production:dist/output.css}}_ +``` + +# dist/1.output.css + +```javascript +_{{dist/1.output.css}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/css/webpack.config.js b/examples/css/webpack.config.js new file mode 100644 index 00000000000..107b4bd11d3 --- /dev/null +++ b/examples/css/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + output: { + uniqueName: "app" + }, + experiments: { + css: true + } +}; + +module.exports = config; diff --git a/examples/custom-javascript-parser/README.md b/examples/custom-javascript-parser/README.md new file mode 100644 index 00000000000..1cdcc9bd504 --- /dev/null +++ b/examples/custom-javascript-parser/README.md @@ -0,0 +1,590 @@ +# Custom javascript parser + +## Source code + +```javascript +import { increment as inc } from "./increment"; +var a = 1; +inc(a); // 2 + +// async loading +import("./async-loaded").then(function (asyncLoaded) { + console.log(asyncLoaded); +}); +``` + +## Parsers + +### acorn (default) + +```javascript +"use strict"; + +const acorn = require("acorn"); + +/** @typedef {import("estree").Program} Program */ +/** @typedef {import("estree").Comment} Comment */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseOptions} ParseOptions */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseResult} ParseResult */ +/** @typedef {Set} Semicolons */ + +/** + * @param {string} sourceCode the source code + * @param {ParseOptions} options options + * @returns {ParseResult} the parsed result + */ +const acornParse = (sourceCode, options) => { + /** @type {(Comment & { start: number, end: number, loc: SourceLocation })[]} */ + const comments = []; + /** @type {Semicolons} */ + const semicolons = new Set(); + + const ast = + /** @type {import("estree").Program} */ + ( + acorn.parse(sourceCode, { + ...options, + onComment: options.comments ? comments : undefined, + onInsertedSemicolon: options.semicolons + ? // Set semicolons + /** + * @param {number} pos a position of semicolon + * @returns {Semicolons} set with semicolon positions + */ + (pos) => semicolons.add(pos) + : undefined + }) + ); + + return { ast, comments, semicolons }; +}; + +module.exports = acornParse; +``` + +### oxc + +Implementation example: + +```javascript +"use strict"; + +const oxc = require("oxc-parser"); + +/** @typedef {import("estree").Program} Program */ +/** @typedef {import("estree").Node} Node */ +/** @typedef {import("estree").Comment} Comment */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseOptions} ParseOptions */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseResult} ParseResult */ +/** @typedef {Set} Semicolons */ + +class LocationResolver { + /** + * @param {string} sourceCode source code + */ + constructor(sourceCode) { + const len = sourceCode.length; + let ls = new Uint32Array(Math.ceil(len / 40) + 10); + ls[0] = 0; + let count = 1; + + for (let i = 0; i < len; i++) { + if (sourceCode.charCodeAt(i) === 10) { + // '\n' + if (count >= ls.length) { + const newLs = new Uint32Array(ls.length * 2); + newLs.set(ls); + ls = newLs; + } + ls[count++] = i + 1; + } + } + + this.lineStarts = ls.subarray(0, count); + this.lsLen = count; + /** @type {[number, number, number, number]} */ + this.coords = [0, 0, 0, 0]; + } + + /** + * @param {number} start start + * @param {number} end end + * @returns {[number, number, number, number]} location + */ + getLocation(start, end) { + const ls = this.lineStarts; + + // Search Start + let sLow = 0; + let sHigh = this.lsLen - 1; + while (sLow <= sHigh) { + const mid = (sLow + sHigh) >>> 1; + if (ls[mid] <= start) sLow = mid + 1; + else sHigh = mid - 1; + } + + // Search End + let eLow = 0; + let eHigh = this.lsLen - 1; + while (eLow <= eHigh) { + const mid = (eLow + eHigh) >>> 1; + if (ls[mid] <= end) eLow = mid + 1; + else eHigh = mid - 1; + } + + const res = this.coords; + res[0] = sHigh + 1; // Line + res[1] = start - ls[sHigh]; // Col + res[2] = eHigh + 1; // Line + res[3] = end - ls[eHigh]; // Col + + return res; + } +} + +/** + * @param {string} sourceCode source code + * @returns {Semicolons} semicolons + */ +const collectSemicolons = (sourceCode) => { + const semiSet = new Set(); + let pos = sourceCode.indexOf(";"); + + while (pos !== -1) { + semiSet.add(pos); + pos = sourceCode.indexOf(";", pos + 1); + } + + return semiSet; +}; + +/** + * @template {Node} T + * @typedef {T & { start: number, end: number, range: [number, number] }} NodeWithRange + */ + +/** + * @template {Node} T + * @typedef {T & { start: number, end: number, range: [number, number], loc: SourceLocation }} NodeWithRangeAndLocation + */ + +/** + * @template {Node} T + * @param {NodeWithRange} node node + * @param {LocationResolver} locationResolver location resolver + * @param {WeakMap, NodeWithRangeAndLocation>} cache cache + * @returns {NodeWithRangeAndLocation} proxy node + */ +const createLazyProxy = (node, locationResolver, cache) => { + if (cache.has(node)) { + return /** @type {NodeWithRangeAndLocation} */ (cache.get(node)); + } + + const proxy = + /** @type {NodeWithRangeAndLocation} */ + ( + new Proxy(node, { + has(target, prop) { + return prop === "loc" || prop in target; + }, + get(target, prop, receiver) { + if (prop === "loc") { + const loc = locationResolver.getLocation(target.start, target.end); + return { + start: { + line: loc[0], + offset: loc[1] + }, + end: { + line: loc[2], + offset: loc[3] + } + }; + } + + const value = Reflect.get(target, prop, receiver); + + if (Array.isArray(value)) { + return value.map((node) => { + if ( + !node || + typeof node !== "object" || + Array.isArray(node) || + !node.type + ) { + return node; + } + + return createLazyProxy(node, locationResolver, cache); + }); + } else if ( + value && + typeof value === "object" && + /** @type {T} */ (value).type + ) { + return createLazyProxy( + /** @type {NodeWithRange} */ + ( + /** @type {unknown} */ + (value) + ), + locationResolver, + cache + ); + } + + return value; + } + }) + ); + + cache.set(node, proxy); + + return proxy; +}; + +/** + * @param {string} sourceCode the source code + * @param {ParseOptions} options options + * @returns {ParseResult} the parsed result + */ +const oxcParse = (sourceCode, options) => { + const locationResolver = new LocationResolver(sourceCode); + + // We need only automatic semicolon insertion position, but there is no API, so let's collect all semicolons + // But there are rooms to improve it + /** @type {Semicolons} */ + const semicolons = options.semicolons + ? collectSemicolons(sourceCode) + : new Set(); + + const result = oxc.parseSync("file.js", sourceCode, { + ...options, + astType: "js", + range: true, + sourceType: options.sourceType === "module" ? "module" : "script", + // @ts-expect-error no types + experimentalRawTransfer: true + }); + + const comments = + /** @type {(Comment & { start: number, end: number, loc: SourceLocation })[]} */ + (result.comments); + + for (const comment of comments) { + Object.defineProperty(comment, "loc", { + get() { + const loc = locationResolver.getLocation(comment.start, comment.end); + return { + start: { + line: loc[0], + column: loc[1] + }, + end: { + line: loc[2], + column: loc[3] + } + }; + }, + configurable: true, + enumerable: true + }); + Object.defineProperty(comment, "range", { + get() { + return [comment.start, comment.end]; + }, + configurable: true, + enumerable: true + }); + } + + const ast = createLazyProxy( + /** @type {NodeWithRange} */ + (result.program), + locationResolver, + new WeakMap() + ); + return { ast, comments, semicolons }; +}; + +module.exports = oxcParse; +``` + +### meriyah + +Implementation example: + +```javascript +"use strict"; + +const meriyah = require("meriyah"); + +/** @typedef {import("estree").Program} Program */ +/** @typedef {import("estree").Node} Node */ +/** @typedef {import("estree").Comment} Comment */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseOptions} ParseOptions */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseResult} ParseResult */ +/** @typedef {Set} Semicolons */ + +/** + * @param {string} sourceCode the source code + * @param {ParseOptions} options options + * @returns {ParseResult} the parsed result + */ +const meriyahParse = (sourceCode, options) => { + /** @type {(Comment & { start: number, end: number, loc: SourceLocation })[]} */ + const comments = []; + /** @type {Semicolons} */ + const semicolons = new Set(); + + const ast = + /** @type {import("estree").Program} */ + ( + meriyah.parse(sourceCode, { + ...options, + module: options.sourceType === "module", + loc: options.locations, + onComment: options.comments + ? (type, value, start, end, loc) => { + if (type === "SingleLine" || type === "MultiLine") { + comments.push({ + type: type === "SingleLine" ? "Line" : "Block", + value, + start, + end, + range: [start, end], + loc + }); + } + } + : undefined, + onInsertedSemicolon: options.semicolons + ? // Set semicolons + /** + * @param {number} pos a position of semicolon + * @returns {Semicolons} set with semicolon positions + */ + (pos) => semicolons.add(pos) + : undefined + }) + ); + + return { ast, comments, semicolons }; +}; + +module.exports = meriyahParse; +``` + +## Configuration example + +```javascript +"use strict"; + +const acornParse = require("./internals/acorn-parse.js"); +const meriyahParse = require("./internals/meriyah-parse.js"); +const oxcParse = require("./internals/oxc-parse.js"); + +/** @type {import("webpack").Configuration[]} */ +const config = [ + // oxc + { + mode: "production", + optimization: { + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) + }, + output: { + filename: "oxc.[name].js" + }, + module: { + // Global override + parser: { + javascript: { + parse: oxcParse + } + } + // Override on the module level, only for modules which match the `test` + // rules: [ + // { + // test: /\.js$/, + // parser: { + // parse: oxcParse + // } + // } + // ] + } + }, + // meriyah + { + mode: "production", + optimization: { + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) + }, + output: { + filename: "meriyah.[name].js" + }, + module: { + // Global override + parser: { + javascript: { + parse: meriyahParse + } + } + // Override on the module level, only for modules which match the `test` + // rules: [ + // { + // test: /\.js$/, + // parser: { + // parse: meriyahParse + // } + // } + // ] + } + }, + // acorn + { + mode: "production", + output: { + filename: "acorn.[name].js" + }, + optimization: { + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) + }, + module: { + // Global override + parser: { + javascript: { + parse: acornParse + } + } + // Override on the module level, only for modules which match the `test` + // rules: [ + // { + // test: /\.js$/, + // parser: { + // parse: acornParse + // } + // } + // ] + } + } +]; + +module.exports = config; +``` + +Implementation example: + +# Info + +## Unoptimized + +``` +asset output.js 12 KiB [emitted] (name: main) +asset 655.output.js 761 bytes [emitted] +chunk (runtime: main) 655.output.js 24 bytes [rendered] + > ./async-loaded ./example.js 6-6 + ./async-loaded.js 24 bytes [built] [code generated] + [exports: answer] + [used exports unknown] + import() ./async-loaded ./example.js 6-6 +chunk (runtime: main) output.js (main) 457 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 281 bytes [dependent] 2 modules + ./example.js 176 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully + +asset output.js 12 KiB [emitted] (name: main) +asset 655.output.js 761 bytes [emitted] +chunk (runtime: main) 655.output.js 24 bytes [rendered] + > ./async-loaded ./example.js 6:0-24 + ./async-loaded.js 24 bytes [built] [code generated] + [exports: answer] + [used exports unknown] + import() ./async-loaded ./example.js 6:0-24 +chunk (runtime: main) output.js (main) 457 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 281 bytes [dependent] 2 modules + ./example.js 176 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully + +asset output.js 12 KiB [emitted] (name: main) +asset 655.output.js 761 bytes [emitted] +chunk (runtime: main) 655.output.js 24 bytes [rendered] + > ./async-loaded ./example.js 6:0-24 + ./async-loaded.js 24 bytes [built] [code generated] + [exports: answer] + [used exports unknown] + import() ./async-loaded ./example.js 6:0-24 +chunk (runtime: main) output.js (main) 457 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + dependent modules 281 bytes [dependent] 2 modules + ./example.js 176 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset output.js 2.01 KiB [emitted] [minimized] (name: main) +asset 655.output.js 121 bytes [emitted] [minimized] +chunk (runtime: main) 655.output.js 24 bytes [rendered] + > ./async-loaded ./example.js 6-6 + ./async-loaded.js 24 bytes [built] [code generated] + [exports: answer] + import() ./async-loaded ./example.js + 2 modules ./example.js 6-6 +chunk (runtime: main) output.js (main) 457 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + ./example.js + 2 modules 457 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully + +asset output.js 2.01 KiB [compared for emit] [minimized] (name: main) +asset 655.output.js 121 bytes [compared for emit] [minimized] +chunk (runtime: main) 655.output.js 24 bytes [rendered] + > ./async-loaded ./example.js 6:0-24 + ./async-loaded.js 24 bytes [built] [code generated] + [exports: answer] + import() ./async-loaded ./example.js + 2 modules ./example.js 6:0-24 +chunk (runtime: main) output.js (main) 457 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + ./example.js + 2 modules 457 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully + +asset output.js 2.01 KiB [compared for emit] [minimized] (name: main) +asset 655.output.js 121 bytes [compared for emit] [minimized] +chunk (runtime: main) 655.output.js 24 bytes [rendered] + > ./async-loaded ./example.js 6:0-24 + ./async-loaded.js 24 bytes [built] [code generated] + [exports: answer] + import() ./async-loaded ./example.js + 2 modules ./example.js 6:0-24 +chunk (runtime: main) output.js (main) 457 bytes (javascript) 5.48 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.48 KiB 8 modules + ./example.js + 2 modules 457 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/custom-javascript-parser/async-loaded.js b/examples/custom-javascript-parser/async-loaded.js new file mode 100644 index 00000000000..96100aefeb9 --- /dev/null +++ b/examples/custom-javascript-parser/async-loaded.js @@ -0,0 +1 @@ +export var answer = 42; diff --git a/examples/custom-javascript-parser/build.js b/examples/custom-javascript-parser/build.js new file mode 100644 index 00000000000..2e93fe5a3e1 --- /dev/null +++ b/examples/custom-javascript-parser/build.js @@ -0,0 +1 @@ +require("../build-common"); diff --git a/examples/custom-javascript-parser/example.js b/examples/custom-javascript-parser/example.js new file mode 100644 index 00000000000..d8b21149d67 --- /dev/null +++ b/examples/custom-javascript-parser/example.js @@ -0,0 +1,8 @@ +import { increment as inc } from "./increment"; +var a = 1; +inc(a); // 2 + +// async loading +import("./async-loaded").then(function (asyncLoaded) { + console.log(asyncLoaded); +}); diff --git a/examples/custom-javascript-parser/increment.js b/examples/custom-javascript-parser/increment.js new file mode 100644 index 00000000000..4d249274f01 --- /dev/null +++ b/examples/custom-javascript-parser/increment.js @@ -0,0 +1,4 @@ +import { add } from "./math"; +export function increment(val) { + return add(val, 1); +} diff --git a/examples/custom-javascript-parser/internals/acorn-parse.js b/examples/custom-javascript-parser/internals/acorn-parse.js new file mode 100644 index 00000000000..6984cf3759c --- /dev/null +++ b/examples/custom-javascript-parser/internals/acorn-parse.js @@ -0,0 +1,43 @@ +"use strict"; + +const acorn = require("acorn"); + +/** @typedef {import("estree").Program} Program */ +/** @typedef {import("estree").Comment} Comment */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseOptions} ParseOptions */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseResult} ParseResult */ +/** @typedef {Set} Semicolons */ + +/** + * @param {string} sourceCode the source code + * @param {ParseOptions} options options + * @returns {ParseResult} the parsed result + */ +const acornParse = (sourceCode, options) => { + /** @type {(Comment & { start: number, end: number, loc: SourceLocation })[]} */ + const comments = []; + /** @type {Semicolons} */ + const semicolons = new Set(); + + const ast = + /** @type {import("estree").Program} */ + ( + acorn.parse(sourceCode, { + ...options, + onComment: options.comments ? comments : undefined, + onInsertedSemicolon: options.semicolons + ? // Set semicolons + /** + * @param {number} pos a position of semicolon + * @returns {Semicolons} set with semicolon positions + */ + (pos) => semicolons.add(pos) + : undefined + }) + ); + + return { ast, comments, semicolons }; +}; + +module.exports = acornParse; diff --git a/examples/custom-javascript-parser/internals/bench.mjs b/examples/custom-javascript-parser/internals/bench.mjs new file mode 100644 index 00000000000..2c0edfb54f7 --- /dev/null +++ b/examples/custom-javascript-parser/internals/bench.mjs @@ -0,0 +1,44 @@ +import fs from "node:fs"; +import path from "node:path"; +import { Bench } from "tinybench"; + +import oxcParse from "./oxc-parse.js"; +import meriyahParse from "./meriyah-parse.js"; +import acornParse from "./acorn-parse.js"; + +const options = { + sourceType: "module", + ecmaVersion: "latest", + ranges: true, + locations: true, + comments: true, + allowHashBang: true, + allowReturnOutsideFunction: false, + semicolons: true +}; + +const bench = new Bench({ name: "simple benchmark", time: 100 }); + +const sourceCode = fs.readFileSync( + path.resolve( + import.meta.dirname, + "../../../node_modules/three/build/three.module.js" + ), + "utf8" +); + +bench + .add("oxc", () => { + oxcParse(sourceCode, options); + }) + .add("meriyah", () => { + meriyahParse(sourceCode, options); + }) + .add("acorn", () => { + acornParse(sourceCode, options); + }); + +await bench.run(); + +console.log(bench.name); +console.table(bench.table()); diff --git a/examples/custom-javascript-parser/internals/meriyah-parse.js b/examples/custom-javascript-parser/internals/meriyah-parse.js new file mode 100644 index 00000000000..61fca25706d --- /dev/null +++ b/examples/custom-javascript-parser/internals/meriyah-parse.js @@ -0,0 +1,59 @@ +"use strict"; + +const meriyah = require("meriyah"); + +/** @typedef {import("estree").Program} Program */ +/** @typedef {import("estree").Node} Node */ +/** @typedef {import("estree").Comment} Comment */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseOptions} ParseOptions */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseResult} ParseResult */ +/** @typedef {Set} Semicolons */ + +/** + * @param {string} sourceCode the source code + * @param {ParseOptions} options options + * @returns {ParseResult} the parsed result + */ +const meriyahParse = (sourceCode, options) => { + /** @type {(Comment & { start: number, end: number, loc: SourceLocation })[]} */ + const comments = []; + /** @type {Semicolons} */ + const semicolons = new Set(); + + const ast = + /** @type {import("estree").Program} */ + ( + meriyah.parse(sourceCode, { + ...options, + module: options.sourceType === "module", + loc: options.locations, + onComment: options.comments + ? (type, value, start, end, loc) => { + if (type === "SingleLine" || type === "MultiLine") { + comments.push({ + type: type === "SingleLine" ? "Line" : "Block", + value, + start, + end, + range: [start, end], + loc + }); + } + } + : undefined, + onInsertedSemicolon: options.semicolons + ? // Set semicolons + /** + * @param {number} pos a position of semicolon + * @returns {Semicolons} set with semicolon positions + */ + (pos) => semicolons.add(pos) + : undefined + }) + ); + + return { ast, comments, semicolons }; +}; + +module.exports = meriyahParse; diff --git a/examples/custom-javascript-parser/internals/oxc-parse.js b/examples/custom-javascript-parser/internals/oxc-parse.js new file mode 100644 index 00000000000..44892b46068 --- /dev/null +++ b/examples/custom-javascript-parser/internals/oxc-parse.js @@ -0,0 +1,242 @@ +"use strict"; + +const oxc = require("oxc-parser"); + +/** @typedef {import("estree").Program} Program */ +/** @typedef {import("estree").Node} Node */ +/** @typedef {import("estree").Comment} Comment */ +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseOptions} ParseOptions */ +/** @typedef {import("../../../lib/javascript/JavascriptParser").ParseResult} ParseResult */ +/** @typedef {Set} Semicolons */ + +class LocationResolver { + /** + * @param {string} sourceCode source code + */ + constructor(sourceCode) { + const len = sourceCode.length; + let ls = new Uint32Array(Math.ceil(len / 40) + 10); + ls[0] = 0; + let count = 1; + + for (let i = 0; i < len; i++) { + if (sourceCode.charCodeAt(i) === 10) { + // '\n' + if (count >= ls.length) { + const newLs = new Uint32Array(ls.length * 2); + newLs.set(ls); + ls = newLs; + } + ls[count++] = i + 1; + } + } + + this.lineStarts = ls.subarray(0, count); + this.lsLen = count; + /** @type {[number, number, number, number]} */ + this.coords = [0, 0, 0, 0]; + } + + /** + * @param {number} start start + * @param {number} end end + * @returns {[number, number, number, number]} location + */ + getLocation(start, end) { + const ls = this.lineStarts; + + // Search Start + let sLow = 0; + let sHigh = this.lsLen - 1; + while (sLow <= sHigh) { + const mid = (sLow + sHigh) >>> 1; + if (ls[mid] <= start) sLow = mid + 1; + else sHigh = mid - 1; + } + + // Search End + let eLow = 0; + let eHigh = this.lsLen - 1; + while (eLow <= eHigh) { + const mid = (eLow + eHigh) >>> 1; + if (ls[mid] <= end) eLow = mid + 1; + else eHigh = mid - 1; + } + + const res = this.coords; + res[0] = sHigh + 1; // Line + res[1] = start - ls[sHigh]; // Col + res[2] = eHigh + 1; // Line + res[3] = end - ls[eHigh]; // Col + + return res; + } +} + +/** + * @param {string} sourceCode source code + * @returns {Semicolons} semicolons + */ +const collectSemicolons = (sourceCode) => { + const semiSet = new Set(); + let pos = sourceCode.indexOf(";"); + + while (pos !== -1) { + semiSet.add(pos); + pos = sourceCode.indexOf(";", pos + 1); + } + + return semiSet; +}; + +/** + * @template {Node} T + * @typedef {T & { start: number, end: number, range: [number, number] }} NodeWithRange + */ + +/** + * @template {Node} T + * @typedef {T & { start: number, end: number, range: [number, number], loc: SourceLocation }} NodeWithRangeAndLocation + */ + +/** + * @template {Node} T + * @param {NodeWithRange} node node + * @param {LocationResolver} locationResolver location resolver + * @param {WeakMap, NodeWithRangeAndLocation>} cache cache + * @returns {NodeWithRangeAndLocation} proxy node + */ +const createLazyProxy = (node, locationResolver, cache) => { + if (cache.has(node)) { + return /** @type {NodeWithRangeAndLocation} */ (cache.get(node)); + } + + const proxy = + /** @type {NodeWithRangeAndLocation} */ + ( + new Proxy(node, { + has(target, prop) { + return prop === "loc" || prop in target; + }, + get(target, prop, receiver) { + if (prop === "loc") { + const loc = locationResolver.getLocation(target.start, target.end); + return { + start: { + line: loc[0], + offset: loc[1] + }, + end: { + line: loc[2], + offset: loc[3] + } + }; + } + + const value = Reflect.get(target, prop, receiver); + + if (Array.isArray(value)) { + return value.map((node) => { + if ( + !node || + typeof node !== "object" || + Array.isArray(node) || + !node.type + ) { + return node; + } + + return createLazyProxy(node, locationResolver, cache); + }); + } else if ( + value && + typeof value === "object" && + /** @type {T} */ (value).type + ) { + return createLazyProxy( + /** @type {NodeWithRange} */ + ( + /** @type {unknown} */ + (value) + ), + locationResolver, + cache + ); + } + + return value; + } + }) + ); + + cache.set(node, proxy); + + return proxy; +}; + +/** + * @param {string} sourceCode the source code + * @param {ParseOptions} options options + * @returns {ParseResult} the parsed result + */ +const oxcParse = (sourceCode, options) => { + const locationResolver = new LocationResolver(sourceCode); + + // We need only automatic semicolon insertion position, but there is no API, so let's collect all semicolons + // But there are rooms to improve it + /** @type {Semicolons} */ + const semicolons = options.semicolons + ? collectSemicolons(sourceCode) + : new Set(); + + const result = oxc.parseSync("file.js", sourceCode, { + ...options, + astType: "js", + range: true, + sourceType: options.sourceType === "module" ? "module" : "script", + // @ts-expect-error no types + experimentalRawTransfer: true + }); + + const comments = + /** @type {(Comment & { start: number, end: number, loc: SourceLocation })[]} */ + (result.comments); + + for (const comment of comments) { + Object.defineProperty(comment, "loc", { + get() { + const loc = locationResolver.getLocation(comment.start, comment.end); + return { + start: { + line: loc[0], + column: loc[1] + }, + end: { + line: loc[2], + column: loc[3] + } + }; + }, + configurable: true, + enumerable: true + }); + Object.defineProperty(comment, "range", { + get() { + return [comment.start, comment.end]; + }, + configurable: true, + enumerable: true + }); + } + + const ast = createLazyProxy( + /** @type {NodeWithRange} */ + (result.program), + locationResolver, + new WeakMap() + ); + return { ast, comments, semicolons }; +}; + +module.exports = oxcParse; diff --git a/examples/custom-javascript-parser/math.js b/examples/custom-javascript-parser/math.js new file mode 100644 index 00000000000..796c1fae0dc --- /dev/null +++ b/examples/custom-javascript-parser/math.js @@ -0,0 +1,16 @@ +// Single-line Comment + +/* + * Multi-line comment + */ + +export function add() { + var sum = 0, + i = 0, + args = arguments, + l = args.length; + while (i < l) { + sum += args[i++]; + } + return sum; +} diff --git a/examples/custom-javascript-parser/template.md b/examples/custom-javascript-parser/template.md new file mode 100644 index 00000000000..1c43b597758 --- /dev/null +++ b/examples/custom-javascript-parser/template.md @@ -0,0 +1,53 @@ +# Custom javascript parser + +## Source code + +```javascript +_{{example.js}}_ +``` + +## Parsers + +### acorn (default) + +```javascript +_{{internals/acorn-parse.js}}_ +``` + +### oxc + +Implementation example: + +```javascript +_{{internals/oxc-parse.js}}_ +``` + +### meriyah + +Implementation example: + +```javascript +_{{internals/meriyah-parse.js}}_ +``` + +## Configuration example + +```javascript +_{{webpack.config.js}}_ +``` + +Implementation example: + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/custom-javascript-parser/test.filter.js b/examples/custom-javascript-parser/test.filter.js new file mode 100644 index 00000000000..432ffc6131f --- /dev/null +++ b/examples/custom-javascript-parser/test.filter.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = () => { + const [major] = process.versions.node.split(".").map(Number); + + return major >= 20; +}; diff --git a/examples/custom-javascript-parser/webpack.config.js b/examples/custom-javascript-parser/webpack.config.js new file mode 100644 index 00000000000..99d038b8998 --- /dev/null +++ b/examples/custom-javascript-parser/webpack.config.js @@ -0,0 +1,92 @@ +"use strict"; + +const acornParse = require("./internals/acorn-parse.js"); +const meriyahParse = require("./internals/meriyah-parse.js"); +const oxcParse = require("./internals/oxc-parse.js"); + +/** @type {import("webpack").Configuration[]} */ +const config = [ + // oxc + { + mode: "production", + optimization: { + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) + }, + output: { + filename: "oxc.[name].js" + }, + module: { + // Global override + parser: { + javascript: { + parse: oxcParse + } + } + // Override on the module level, only for modules which match the `test` + // rules: [ + // { + // test: /\.js$/, + // parser: { + // parse: oxcParse + // } + // } + // ] + } + }, + // meriyah + { + mode: "production", + optimization: { + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) + }, + output: { + filename: "meriyah.[name].js" + }, + module: { + // Global override + parser: { + javascript: { + parse: meriyahParse + } + } + // Override on the module level, only for modules which match the `test` + // rules: [ + // { + // test: /\.js$/, + // parser: { + // parse: meriyahParse + // } + // } + // ] + } + }, + // acorn + { + mode: "production", + output: { + filename: "acorn.[name].js" + }, + optimization: { + chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only) + }, + module: { + // Global override + parser: { + javascript: { + parse: acornParse + } + } + // Override on the module level, only for modules which match the `test` + // rules: [ + // { + // test: /\.js$/, + // parser: { + // parse: acornParse + // } + // } + // ] + } + } +]; + +module.exports = config; diff --git a/examples/custom-json-modules/README.md b/examples/custom-json-modules/README.md new file mode 100644 index 00000000000..a43723ecada --- /dev/null +++ b/examples/custom-json-modules/README.md @@ -0,0 +1,271 @@ +This is a simple example that shows the usage of a custom parser for json-modules. + +Toml, yaml and json5 files can be imported like other modules without toml-loader. + +# data.toml + +```toml +title = "TOML Example" + +[owner] +name = "Tom Preston-Werner" +organization = "GitHub" +bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." +dob = 1979-05-27T07:32:00Z +``` + +# data.yaml + +```yaml +title: YAML Example +owner: + name: Tom Preston-Werner + organization: GitHub + bio: |- + GitHub Cofounder & CEO + Likes tater tots and beer. + dob: 1979-05-27T07:32:00.000Z +``` + +# data.json5 + +```json5 +{ + // comment + title: "JSON5 Example", + owner: { + name: "Tom Preston-Werner", + organization: "GitHub", + bio: "GitHub Cofounder & CEO\n\ +Likes tater tots and beer.", + dob: "1979-05-27T07:32:00.000Z" + } +} +``` + +# example.js + +```javascript +import toml from "./data.toml"; +import yaml from "./data.yaml"; +import json from "./data.json5"; + +document.querySelector('#app').innerHTML = [toml, yaml, json].map(data => ` +

${data.title}

+
${data.owner.name}
+
${data.owner.organization}
+
${data.owner.bio}
+
${data.owner.dob}
+`).join('

'); +``` + +# webpack.config.js + +```javascript +"use strict"; + +const json5 = require("json5"); +const toml = require("toml"); +// @ts-expect-error no types for yamljs +const yaml = require("yamljs"); + +/** @type {import("webpack").Configuration} */ +const config = { + module: { + rules: [ + { + test: /\.toml$/, + type: "json", + parser: { + parse: toml.parse + } + }, + { + test: /\.json5$/, + type: "json", + parser: { + parse: json5.parse + } + }, + { + test: /\.yaml$/, + type: "json", + parser: { + parse: yaml.parse + } + } + ] + } +}; + +module.exports = config; +``` + +# js/output.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!*******************!*\ + !*** ./data.toml ***! + \*******************/ +/*! default exports */ +/*! export owner [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export bio [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export dob [provided] [no usage info] [missing usage info prevents renaming] */ +/*! exports [not provided] [no usage info] */ +/*! export name [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export organization [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! export title [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +module.exports = /*#__PURE__*/JSON.parse('{"title":"TOML Example","owner":{"name":"Tom Preston-Werner","organization":"GitHub","bio":"GitHub Cofounder & CEO\\nLikes tater tots and beer.","dob":"1979-05-27T07:32:00.000Z"}}'); + +/***/ }), +/* 2 */ +/*!*******************!*\ + !*** ./data.yaml ***! + \*******************/ +/*! default exports */ +/*! export owner [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export bio [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export dob [provided] [no usage info] [missing usage info prevents renaming] */ +/*! exports [not provided] [no usage info] */ +/*! export name [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export organization [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! export title [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +module.exports = /*#__PURE__*/JSON.parse('{"title":"YAML Example","owner":{"name":"Tom Preston-Werner","organization":"GitHub","bio":"GitHub Cofounder & CEO\\nLikes tater tots and beer.","dob":"1979-05-27T07:32:00.000Z"}}'); + +/***/ }), +/* 3 */ +/*!********************!*\ + !*** ./data.json5 ***! + \********************/ +/*! default exports */ +/*! export owner [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export bio [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export dob [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export name [provided] [no usage info] [missing usage info prevents renaming] */ +/*! export organization [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! export title [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +module.exports = /*#__PURE__*/JSON.parse('{"title":"JSON5 Example","owner":{"name":"Tom Preston-Werner","organization":"GitHub","bio":"GitHub Cofounder & CEO\\nLikes tater tots and beer.","dob":"1979-05-27T07:32:00.000Z"}}'); + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _data_toml__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./data.toml */ 1); +/* harmony import */ var _data_yaml__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./data.yaml */ 2); +/* harmony import */ var _data_json5__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data.json5 */ 3); + + + + +document.querySelector('#app').innerHTML = [_data_toml__WEBPACK_IMPORTED_MODULE_0__, _data_yaml__WEBPACK_IMPORTED_MODULE_1__, _data_json5__WEBPACK_IMPORTED_MODULE_2__].map(data => ` +

${data.title}

+
${data.owner.name}
+
${data.owner.organization}
+
${data.owner.bio}
+
${data.owner.dob}
+`).join('

'); + +})(); + +/******/ })() +; +``` + +# Info + +## webpack output + +``` +asset output.js 6.16 KiB [emitted] (name: main) +chunk (runtime: main) output.js (main) 919 bytes (javascript) 274 bytes (runtime) [entry] [rendered] + > ./example.js main + dependent modules 565 bytes [dependent] 3 modules + runtime modules 274 bytes 1 module + ./example.js 354 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/custom-json-modules/build.js b/examples/custom-json-modules/build.js new file mode 100644 index 00000000000..2e93fe5a3e1 --- /dev/null +++ b/examples/custom-json-modules/build.js @@ -0,0 +1 @@ +require("../build-common"); diff --git a/examples/custom-json-modules/data.json5 b/examples/custom-json-modules/data.json5 new file mode 100644 index 00000000000..37fb5e6f70e --- /dev/null +++ b/examples/custom-json-modules/data.json5 @@ -0,0 +1,11 @@ +{ + // comment + title: "JSON5 Example", + owner: { + name: "Tom Preston-Werner", + organization: "GitHub", + bio: "GitHub Cofounder & CEO\n\ +Likes tater tots and beer.", + dob: "1979-05-27T07:32:00.000Z" + } +} diff --git a/examples/custom-json-modules/data.toml b/examples/custom-json-modules/data.toml new file mode 100644 index 00000000000..bf6c9dd3363 --- /dev/null +++ b/examples/custom-json-modules/data.toml @@ -0,0 +1,7 @@ +title = "TOML Example" + +[owner] +name = "Tom Preston-Werner" +organization = "GitHub" +bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." +dob = 1979-05-27T07:32:00Z diff --git a/examples/custom-json-modules/data.yaml b/examples/custom-json-modules/data.yaml new file mode 100644 index 00000000000..d0b37096a12 --- /dev/null +++ b/examples/custom-json-modules/data.yaml @@ -0,0 +1,8 @@ +title: YAML Example +owner: + name: Tom Preston-Werner + organization: GitHub + bio: |- + GitHub Cofounder & CEO + Likes tater tots and beer. + dob: 1979-05-27T07:32:00.000Z diff --git a/examples/custom-json-modules/example.js b/examples/custom-json-modules/example.js new file mode 100644 index 00000000000..d628768fe9c --- /dev/null +++ b/examples/custom-json-modules/example.js @@ -0,0 +1,11 @@ +import toml from "./data.toml"; +import yaml from "./data.yaml"; +import json from "./data.json5"; + +document.querySelector('#app').innerHTML = [toml, yaml, json].map(data => ` +

${data.title}

+
${data.owner.name}
+
${data.owner.organization}
+
${data.owner.bio}
+
${data.owner.dob}
+`).join('

'); diff --git a/examples/custom-json-modules/index.html b/examples/custom-json-modules/index.html new file mode 100644 index 00000000000..8e22e079147 --- /dev/null +++ b/examples/custom-json-modules/index.html @@ -0,0 +1,6 @@ + + +
+ + + diff --git a/examples/custom-json-modules/template.md b/examples/custom-json-modules/template.md new file mode 100644 index 00000000000..5c5507d7d21 --- /dev/null +++ b/examples/custom-json-modules/template.md @@ -0,0 +1,47 @@ +This is a simple example that shows the usage of a custom parser for json-modules. + +Toml, yaml and json5 files can be imported like other modules without toml-loader. + +# data.toml + +```toml +_{{data.toml}}_ +``` + +# data.yaml + +```yaml +_{{data.yaml}}_ +``` + +# data.json5 + +```json5 +_{{data.json5}}_ +``` + +# example.js + +```javascript +_{{example.js}}_ +``` + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# js/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# Info + +## webpack output + +``` +_{{stdout}}_ +``` diff --git a/examples/custom-json-modules/webpack.config.js b/examples/custom-json-modules/webpack.config.js new file mode 100644 index 00000000000..3c888bfad2f --- /dev/null +++ b/examples/custom-json-modules/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +const json5 = require("json5"); +const toml = require("toml"); +// @ts-expect-error no types for yamljs +const yaml = require("yamljs"); + +/** @type {import("webpack").Configuration} */ +const config = { + module: { + rules: [ + { + test: /\.toml$/, + type: "json", + parser: { + parse: toml.parse + } + }, + { + test: /\.json5$/, + type: "json", + parser: { + parse: json5.parse + } + }, + { + test: /\.yaml$/, + type: "json", + parser: { + parse: yaml.parse + } + } + ] + } +}; + +module.exports = config; diff --git a/examples/dll-app-and-vendor/0-vendor/README.md b/examples/dll-app-and-vendor/0-vendor/README.md index 0db675ca871..310314c1b98 100644 --- a/examples/dll-app-and-vendor/0-vendor/README.md +++ b/examples/dll-app-and-vendor/0-vendor/README.md @@ -4,35 +4,40 @@ It's built separately from the app part. The vendors dll is only built when the The DllPlugin in combination with the `output.library` option exposes the internal require function as global variable in the target environment. -A manifest is creates which includes mappings from module names to internal ids. +A manifest is created which includes mappings from module names to internal ids. ### webpack.config.js -``` javascript -var path = require("path"); -var webpack = require("../../../"); +```javascript +"use strict"; + +const path = require("path"); +const webpack = require("../../../"); -module.exports = { - // mode: "development || "production", +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", context: __dirname, entry: ["example-vendor"], output: { - filename: "vendor.js", // best use [hash] here too + filename: "vendor.js", // best use [fullhash] here too path: path.resolve(__dirname, "dist"), - library: "vendor_lib_[hash]" + library: "vendor_lib_[fullhash]" }, plugins: [ new webpack.DllPlugin({ - name: "vendor_lib_[hash]", + name: "vendor_lib_[fullhash]", path: path.resolve(__dirname, "dist/vendor-manifest.json") }) ] }; + +module.exports = config; ``` # example-vendor -``` javascript +```javascript export function square(n) { return n * n; } @@ -40,96 +45,17 @@ export function square(n) { # dist/vendor.js -``` javascript -var vendor_lib_f3fbcfb4ec389ba5bbf0 = -``` -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` js -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -``` - -
- -``` js -/******/ ([ +```javascript +var vendor_lib_d7c09c7924bc958c7cc2; +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ /* 0 */ /*!****************!*\ !*** dll main ***! \****************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, module */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = __webpack_require__; @@ -138,26 +64,110 @@ module.exports = __webpack_require__; /*!*****************************************!*\ !*** ../node_modules/example-vendor.js ***! \*****************************************/ -/*! exports provided: square */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { +/*! namespace exports */ +/*! export square [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "square", function() { return square; }); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ square: () => (/* binding */ square) +/* harmony export */ }); function square(n) { return n * n; } /***/ }) -/******/ ]); +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module doesn't tell about it's top-level declarations so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(0); +/******/ vendor_lib_d7c09c7924bc958c7cc2 = __webpack_exports__; +/******/ +/******/ })() +; ``` # dist/vendor-manifest.json -``` javascript -{"name":"vendor_lib_f3fbcfb4ec389ba5bbf0","content":{"../node_modules/example-vendor.js":{"id":1,"buildMeta":{"exportsType":"namespace","providedExports":["square"]}}}} +```javascript +{"name":"vendor_lib_d7c09c7924bc958c7cc2","content":{"../node_modules/example-vendor.js":{"id":1,"buildMeta":{"exportsType":"namespace"},"exports":["square"]}}} ``` # Info @@ -165,32 +175,28 @@ function square(n) { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -vendor.js 3.32 KiB 0 [emitted] main -Entrypoint main = vendor.js -chunk {0} vendor.js (main) 60 bytes [entry] [rendered] - > main - [0] dll main 12 bytes {0} [built] - dll entry - - + 1 hidden module +asset vendor.js 3.93 KiB [emitted] (name: main) +chunk (runtime: main) vendor.js (main) 57 bytes (javascript) 670 bytes (runtime) [entry] [rendered] + > main + runtime modules 670 bytes 3 modules + dependent modules 45 bytes [dependent] 1 module + dll main 12 bytes [built] [code generated] + [used exports unknown] + dll entry + used as library export +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -vendor.js 704 bytes 0 [emitted] main -Entrypoint main = vendor.js -chunk {0} vendor.js (main) 60 bytes [entry] [rendered] - > main - [1] dll main 12 bytes {0} [built] - dll entry - - + 1 hidden module +asset vendor.js 647 bytes [emitted] [minimized] (name: main) +chunk (runtime: main) vendor.js (main) 57 bytes (javascript) 670 bytes (runtime) [entry] [rendered] + > main + runtime modules 670 bytes 3 modules + dependent modules 45 bytes [dependent] 1 module + dll main 12 bytes [built] [code generated] + dll entry + used as library export +webpack X.X.X compiled successfully ``` - diff --git a/examples/dll-app-and-vendor/0-vendor/template.md b/examples/dll-app-and-vendor/0-vendor/template.md index 662ea88e909..73abe44e338 100644 --- a/examples/dll-app-and-vendor/0-vendor/template.md +++ b/examples/dll-app-and-vendor/0-vendor/template.md @@ -4,30 +4,30 @@ It's built separately from the app part. The vendors dll is only built when the The DllPlugin in combination with the `output.library` option exposes the internal require function as global variable in the target environment. -A manifest is creates which includes mappings from module names to internal ids. +A manifest is created which includes mappings from module names to internal ids. ### webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # example-vendor -``` javascript -{{../node_modules/example-vendor.js}} +```javascript +_{{../node_modules/example-vendor.js}}_ ``` # dist/vendor.js -``` javascript -{{dist/vendor.js}} +```javascript +_{{dist/vendor.js}}_ ``` # dist/vendor-manifest.json -``` javascript -{{dist/vendor-manifest.json}} +```javascript +_{{dist/vendor-manifest.json}}_ ``` # Info @@ -35,12 +35,11 @@ A manifest is creates which includes mappings from module names to internal ids. ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` - diff --git a/examples/dll-app-and-vendor/0-vendor/webpack.config.js b/examples/dll-app-and-vendor/0-vendor/webpack.config.js index ec5f19b19c2..d0ebb75e4c7 100644 --- a/examples/dll-app-and-vendor/0-vendor/webpack.config.js +++ b/examples/dll-app-and-vendor/0-vendor/webpack.config.js @@ -1,19 +1,24 @@ -var path = require("path"); -var webpack = require("../../../"); +"use strict"; -module.exports = { - // mode: "development || "production", +const path = require("path"); +const webpack = require("../../../"); + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", context: __dirname, entry: ["example-vendor"], output: { - filename: "vendor.js", // best use [hash] here too + filename: "vendor.js", // best use [fullhash] here too path: path.resolve(__dirname, "dist"), - library: "vendor_lib_[hash]" + library: "vendor_lib_[fullhash]" }, plugins: [ new webpack.DllPlugin({ - name: "vendor_lib_[hash]", + name: "vendor_lib_[fullhash]", path: path.resolve(__dirname, "dist/vendor-manifest.json") }) ] }; + +module.exports = config; diff --git a/examples/dll-app-and-vendor/1-app/README.md b/examples/dll-app-and-vendor/1-app/README.md index d8b1e628fe2..53ad1ba76be 100644 --- a/examples/dll-app-and-vendor/1-app/README.md +++ b/examples/dll-app-and-vendor/1-app/README.md @@ -4,11 +4,16 @@ The previously built vendor dll is used. The DllReferencePlugin reads the conten # webpack.config.js -``` javascript -var path = require("path"); -var webpack = require("../../../"); +```javascript +"use strict"; + +const path = require("path"); +const webpack = require("../../../"); + +const manifest = "../0-vendor/dist/vendor-manifest.json"; -module.exports = { +/** @type {import("webpack").Configuration} */ +const config = { // mode: "development" || "production", context: __dirname, entry: "./example-app", @@ -18,16 +23,17 @@ module.exports = { }, plugins: [ new webpack.DllReferencePlugin({ - context: ".", - manifest: require("../0-vendor/dist/vendor-manifest.json") // eslint-disable-line + manifest: require(manifest) }) ] }; + +module.exports = config; ``` # example-app.js -``` javascript +```javascript import { square } from "example-vendor"; console.log(square(7)); @@ -36,7 +42,7 @@ console.log(new square(7)); # example.html -``` html +```html @@ -48,124 +54,112 @@ console.log(new square(7)); # dist/app.js -
/******/ (function(modules) { /* webpackBootstrap */ }) +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!******************************************************************************************************!*\ + !*** delegated ../node_modules/example-vendor.js from dll-reference vendor_lib_d7c09c7924bc958c7cc2 ***! + \******************************************************************************************************/ +/*! namespace exports */ +/*! export square [provided] [no usage info] [provision prevents renaming (no use info)] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: module, __webpack_require__ */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = (__webpack_require__(/*! dll-reference vendor_lib_d7c09c7924bc958c7cc2 */ 2))(1); + +/***/ }), +/* 2 */ +/*!**************************************************!*\ + !*** external "vendor_lib_d7c09c7924bc958c7cc2" ***! + \**************************************************/ +/*! dynamic exports */ +/*! exports [maybe provided (runtime-defined)] [no usage info] */ +/*! runtime requirements: module */ +/***/ ((module) => { + +"use strict"; +module.exports = vendor_lib_d7c09c7924bc958c7cc2; + +/***/ }) +/******/ ]); +``` -``` javascript -/******/ (function(modules) { // webpackBootstrap +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */ +``` js +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. +(() => { +"use strict"; /*!************************!*\ !*** ./example-app.js ***! \************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; +/*! namespace exports */ +/*! exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.* */ __webpack_require__.r(__webpack_exports__); /* harmony import */ var example_vendor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! example-vendor */ 1); -console.log(Object(example_vendor__WEBPACK_IMPORTED_MODULE_0__["square"])(7)); -console.log(new example_vendor__WEBPACK_IMPORTED_MODULE_0__["square"](7)); - - -/***/ }), -/* 1 */ -/*!******************************************************************************************************!*\ - !*** delegated ../node_modules/example-vendor.js from dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 ***! - \******************************************************************************************************/ -/*! exports provided: square */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = (__webpack_require__(/*! dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 */ 2))(1); - -/***/ }), -/* 2 */ -/*!**************************************************!*\ - !*** external "vendor_lib_f3fbcfb4ec389ba5bbf0" ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +console.log((0,example_vendor__WEBPACK_IMPORTED_MODULE_0__.square)(7)); +console.log(new example_vendor__WEBPACK_IMPORTED_MODULE_0__.square(7)); -module.exports = vendor_lib_f3fbcfb4ec389ba5bbf0; +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` # Info @@ -173,45 +167,30 @@ module.exports = vendor_lib_f3fbcfb4ec389ba5bbf0; ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -app.js 3.9 KiB 0 [emitted] main -Entrypoint main = app.js -chunk {0} app.js (main) 182 bytes [entry] [rendered] - > ./example-app main - [0] ./example-app.js 98 bytes {0} [built] - [no exports] - single entry ./example-app main - [1] delegated ../node_modules/example-vendor.js from dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 42 bytes {0} [built] - [exports: square] - harmony side effect evaluation example-vendor [0] ./example-app.js 1:0-40 - harmony import specifier example-vendor [0] ./example-app.js 3:12-18 - harmony import specifier example-vendor [0] ./example-app.js 4:16-22 - [2] external "vendor_lib_f3fbcfb4ec389ba5bbf0" 42 bytes {0} [built] - delegated source dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 [1] delegated ../node_modules/example-vendor.js from dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 +asset app.js 3.69 KiB [emitted] (name: main) +chunk (runtime: main) app.js (main) 178 bytes (javascript) 274 bytes (runtime) [entry] [rendered] + > ./example-app main + dependent modules 84 bytes [dependent] 2 modules + runtime modules 274 bytes 1 module + ./example-app.js 94 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example-app main +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -app.js 736 bytes 0 [emitted] main -Entrypoint main = app.js -chunk {0} app.js (main) 182 bytes [entry] [rendered] - > ./example-app main - [0] delegated ../node_modules/example-vendor.js from dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 42 bytes {0} [built] - [exports: square] - harmony side effect evaluation example-vendor [2] ./example-app.js 1:0-40 - harmony import specifier example-vendor [2] ./example-app.js 3:12-18 - harmony import specifier example-vendor [2] ./example-app.js 4:16-22 - [1] external "vendor_lib_f3fbcfb4ec389ba5bbf0" 42 bytes {0} [built] - delegated source dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 [0] delegated ../node_modules/example-vendor.js from dll-reference vendor_lib_f3fbcfb4ec389ba5bbf0 - [2] ./example-app.js 98 bytes {0} [built] - [no exports] - single entry ./example-app main +asset app.js 327 bytes [emitted] [minimized] (name: main) +chunk (runtime: main) app.js (main) 178 bytes [entry] [rendered] + > ./example-app main + dependent modules 84 bytes [dependent] 2 modules + ./example-app.js 94 bytes [built] [code generated] + [no exports] + [no exports used] + entry ./example-app main +webpack X.X.X compiled successfully ``` +
+ + + + + + + + + + + + + + + +``` + +# src-b/Component.js + +```jsx +import React from "react"; +import { formatRelative, subDays } from "date-fns"; +// date-fns is a shared module, but used as usual +// exposing modules act as async boundary, +// so no additional async boundary need to be added here +// As data-fns is an shared module, it will be placed in a separate file +// It will be loaded in parallel to the code of this module + +const Component = ({ locale }) => ( +
+

I'm a Component exposed from container B!

+

+ Using date-fn in Remote:{" "} + {formatRelative(subDays(new Date(), 2), new Date(), { locale })} +

+
+); +export default Component; +``` + +# dist/aaa/app.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 0 +/*!**********************!*\ + !*** ./src/index.js ***! + \**********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +// Sharing modules requires that all remotes are initialized +// and can provide shared modules to the common scope +// As this is an async operation we need an async boundary (import()) + +// Using modules from remotes is also an async operation +// as chunks need to be loaded for the code of the remote module +// This also requires an async boundary (import()) + +// At this point shared modules initialized and remote modules are loaded +__webpack_require__.e(/*! import() */ "src_bootstrap_js").then(__webpack_require__.bind(__webpack_require__, /*! ./bootstrap */ 2)); + +// It's possible to place more code here to do stuff on page init +// but it can't use any of the shared modules or remote modules. + +/***/ }, + +/***/ 9 +/*!*********************************************!*\ + !*** external "mfeBBB@/dist/bbb/mfeBBB.js" ***! + \*********************************************/ +/*! dynamic exports */ +/*! exports [maybe provided (runtime-defined)] [no usage info] */ +/*! runtime requirements: __webpack_require__.l, module, __webpack_require__.* */ +(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +var __webpack_error__ = new Error(); +module.exports = new Promise((resolve, reject) => { + if(typeof mfeBBB !== "undefined") return resolve(); + __webpack_require__.l("/dist/bbb/mfeBBB.js", (event) => { + if(typeof mfeBBB !== "undefined") return resolve(); + var errorType = event && (event.type === 'load' ? 'missing' : event.type); + var realSrc = event && event.target && event.target.src; + __webpack_error__.message = 'Loading script failed.\n(' + errorType + ': ' + realSrc + ')'; + __webpack_error__.name = 'ScriptExternalLoadError'; + __webpack_error__.type = errorType; + __webpack_error__.request = realSrc; + reject(__webpack_error__); + }, "mfeBBB"); +}).then(() => (mfeBBB)); + +/***/ }, + +/***/ 11 +/*!*********************************************!*\ + !*** external "mfeCCC@/dist/ccc/mfeCCC.js" ***! + \*********************************************/ +/*! dynamic exports */ +/*! exports [maybe provided (runtime-defined)] [no usage info] */ +/*! runtime requirements: __webpack_require__.l, module, __webpack_require__.* */ +(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +var __webpack_error__ = new Error(); +module.exports = new Promise((resolve, reject) => { + if(typeof mfeCCC !== "undefined") return resolve(); + __webpack_require__.l("/dist/ccc/mfeCCC.js", (event) => { + if(typeof mfeCCC !== "undefined") return resolve(); + var errorType = event && (event.type === 'load' ? 'missing' : event.type); + var realSrc = event && event.target && event.target.src; + __webpack_error__.message = 'Loading script failed.\n(' + errorType + ': ' + realSrc + ')'; + __webpack_error__.name = 'ScriptExternalLoadError'; + __webpack_error__.type = errorType; + __webpack_error__.request = realSrc; + reject(__webpack_error__); + }, "mfeCCC"); +}).then(() => (mfeCCC)); + +/***/ } + +/******/ }); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = __webpack_module_cache__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ (() => { +/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); +/******/ } +/******/ def['default'] = () => (value); +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ var dataWebpackPrefix = "module-federation-aaa:"; +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/remotes loading */ +/******/ (() => { +/******/ var chunkMapping = { +/******/ "src_bootstrap_js": [ +/******/ 8, +/******/ 10 +/******/ ], +/******/ "webpack_container_remote_mfe-c_Component2": [ +/******/ 24 +/******/ ] +/******/ }; +/******/ var idToExternalAndNameMapping = { +/******/ "8": [ +/******/ "default", +/******/ "./Component", +/******/ 9 +/******/ ], +/******/ "10": [ +/******/ "default", +/******/ "./Component", +/******/ 11 +/******/ ], +/******/ "24": [ +/******/ "default", +/******/ "./Component2", +/******/ 11 +/******/ ] +/******/ }; +/******/ __webpack_require__.f.remotes = (chunkId, promises) => { +/******/ if(__webpack_require__.o(chunkMapping, chunkId)) { +/******/ chunkMapping[chunkId].forEach((id) => { +/******/ var getScope = __webpack_require__.R; +/******/ if(!getScope) getScope = []; +/******/ var data = idToExternalAndNameMapping[id]; +/******/ if(getScope.indexOf(data) >= 0) return; +/******/ getScope.push(data); +/******/ if(data.p) return promises.push(data.p); +/******/ var onError = (error) => { +/******/ if(!error) error = new Error("Container missing"); +/******/ if(typeof error.message === "string") +/******/ error.message += '\nwhile loading "' + data[1] + '" from ' + data[2]; +/******/ __webpack_require__.m[id] = () => { +/******/ throw error; +/******/ } +/******/ data.p = 0; +/******/ }; +/******/ var handleFunction = (fn, arg1, arg2, d, next, first) => { +/******/ try { +/******/ var promise = fn(arg1, arg2); +/******/ if(promise && promise.then) { +/******/ var p = promise.then((result) => (next(result, d)), onError); +/******/ if(first) promises.push(data.p = p); else return p; +/******/ } else { +/******/ return next(promise, d, first); +/******/ } +/******/ } catch(error) { +/******/ onError(error); +/******/ } +/******/ } +/******/ var onExternal = (external, _, first) => (external ? handleFunction(__webpack_require__.I, data[0], 0, external, onInitialized, first) : onError()); +/******/ var onInitialized = (_, external, first) => (handleFunction(external.get, data[1], getScope, 0, onFactory, first)); +/******/ var onFactory = (factory) => { +/******/ data.p = 1; +/******/ __webpack_require__.m[id] = (module) => { +/******/ module.exports = factory(); +/******/ } +/******/ }; +/******/ handleFunction(__webpack_require__, data[2], 0, 0, onExternal, 1); +/******/ }); +/******/ } +/******/ } +/******/ })(); +/******/ +/******/ /* webpack/runtime/sharing */ +/******/ (() => { +/******/ __webpack_require__.S = {}; +/******/ var initPromises = {}; +/******/ var initTokens = {}; +/******/ __webpack_require__.I = (name, initScope) => { +/******/ if(!initScope) initScope = []; +/******/ // handling circular init calls +/******/ var initToken = initTokens[name]; +/******/ if(!initToken) initToken = initTokens[name] = {}; +/******/ if(initScope.indexOf(initToken) >= 0) return; +/******/ initScope.push(initToken); +/******/ // only runs once +/******/ if(initPromises[name]) return initPromises[name]; +/******/ // creates a new share scope if needed +/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {}; +/******/ // runs all init snippets from all modules reachable +/******/ var scope = __webpack_require__.S[name]; +/******/ var warn = (msg) => { +/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); +/******/ }; +/******/ var uniqueName = "module-federation-aaa"; +/******/ var register = (name, version, factory, eager) => { +/******/ var versions = scope[name] = scope[name] || {}; +/******/ var activeVersion = versions[version]; +/******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager }; +/******/ }; +/******/ var initExternal = (id) => { +/******/ var handleError = (err) => (warn("Initialization of sharing external failed: " + err)); +/******/ try { +/******/ var module = __webpack_require__(id); +/******/ if(!module) return; +/******/ var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope)) +/******/ if(module.then) return promises.push(module.then(initFn, handleError)); +/******/ var initResult = initFn(module); +/******/ if(initResult && initResult.then) return promises.push(initResult['catch'](handleError)); +/******/ } catch(err) { handleError(err); } +/******/ } +/******/ var promises = []; +/******/ switch(name) { +/******/ case "default": { +/******/ register("react", "19.2.4", () => (__webpack_require__.e("vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__(/*! ../../node_modules/react/index.js */ 22)))))); +/******/ initExternal(9); +/******/ initExternal(11); +/******/ } +/******/ break; +/******/ } +/******/ if(!promises.length) return initPromises[name] = 1; +/******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/aaa/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/consumes */ +/******/ (() => { +/******/ var parseVersion = (str) => { +/******/ // see webpack/lib/util/semver.js for original code +/******/ var p=p=>{return p.split(".").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r; +/******/ } +/******/ var versionLt = (a, b) => { +/******/ // see webpack/lib/util/semver.js for original code +/******/ a=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r=b.length)return"u"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return e { +/******/ // see webpack/lib/util/semver.js for original code +/******/ var r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var e=1,a=1;a0?".":"")+(e=2,t)}return n}var g=[];for(a=1;a { +/******/ // see webpack/lib/util/semver.js for original code +/******/ if(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f { +/******/ return scope && __webpack_require__.o(scope, key); +/******/ } +/******/ var get = (entry) => { +/******/ entry.loaded = 1; +/******/ return entry.get() +/******/ }; +/******/ var eagerOnly = (versions) => { +/******/ return Object.keys(versions).reduce((filtered, version) => { +/******/ if (versions[version].eager) { +/******/ filtered[version] = versions[version]; +/******/ } +/******/ return filtered; +/******/ }, {}); +/******/ }; +/******/ var findLatestVersion = (scope, key, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ var key = Object.keys(versions).reduce((a, b) => { +/******/ return !a || versionLt(a, b) ? b : a; +/******/ }, 0); +/******/ return key && versions[key]; +/******/ }; +/******/ var findSatisfyingVersion = (scope, key, requiredVersion, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ var key = Object.keys(versions).reduce((a, b) => { +/******/ if (!satisfy(requiredVersion, b)) return a; +/******/ return !a || versionLt(a, b) ? b : a; +/******/ }, 0); +/******/ return key && versions[key] +/******/ }; +/******/ var findSingletonVersionKey = (scope, key, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ return Object.keys(versions).reduce((a, b) => { +/******/ return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a; +/******/ }, 0); +/******/ }; +/******/ var getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => { +/******/ return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")" +/******/ }; +/******/ var getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => { +/******/ var versions = scope[key]; +/******/ return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\n" + +/******/ "Available versions: " + Object.keys(versions).map((key) => { +/******/ return key + " from " + versions[key].from; +/******/ }).join(", "); +/******/ }; +/******/ var fail = (msg) => { +/******/ throw new Error(msg); +/******/ } +/******/ var failAsNotExist = (scopeName, key) => { +/******/ return fail("Shared module " + key + " doesn't exist in shared scope " + scopeName); +/******/ } +/******/ var warn = /*#__PURE__*/ (msg) => { +/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); +/******/ }; +/******/ var init = (fn) => (function(scopeName, key, eager, c, d) { +/******/ var promise = __webpack_require__.I(scopeName); +/******/ if (promise && promise.then && !eager) { +/******/ return promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d)); +/******/ } +/******/ return fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d); +/******/ }); +/******/ +/******/ var useFallback = (scopeName, key, fallback) => { +/******/ return fallback ? fallback() : failAsNotExist(scopeName, key); +/******/ } +/******/ var load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ return get(findLatestVersion(scope, key, eager)); +/******/ }); +/******/ var loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager); +/******/ if (satisfyingVersion) return get(satisfyingVersion); +/******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager)) +/******/ return get(findLatestVersion(scope, key, eager)); +/******/ }); +/******/ var loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager); +/******/ if (satisfyingVersion) return get(satisfyingVersion); +/******/ if (fallback) return fallback(); +/******/ fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager)); +/******/ }); +/******/ var loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ return get(scope[key][version]); +/******/ }); +/******/ var loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ if (!satisfy(requiredVersion, version)) { +/******/ warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); +/******/ } +/******/ return get(scope[key][version]); +/******/ }); +/******/ var loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ if (!satisfy(requiredVersion, version)) { +/******/ fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); +/******/ } +/******/ return get(scope[key][version]); +/******/ }); +/******/ var installedModules = {}; +/******/ var moduleToHandlerMapping = { +/******/ 5: () => (loadSingletonVersion("default", "react", false, [1,19,2,4], () => (__webpack_require__.e("vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__(/*! react */ 22))))))), +/******/ 6: () => (loadSingletonVersion("default", "react", false, [1,19,2,3], () => (__webpack_require__.e("vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__(/*! react */ 22))))))) +/******/ }; +/******/ // no consumes in initial chunks +/******/ var chunkMapping = { +/******/ "src_bootstrap_js": [ +/******/ 5, +/******/ 6 +/******/ ] +/******/ }; +/******/ var startedInstallModules = {}; +/******/ __webpack_require__.f.consumes = (chunkId, promises) => { +/******/ if(__webpack_require__.o(chunkMapping, chunkId)) { +/******/ chunkMapping[chunkId].forEach((id) => { +/******/ if(__webpack_require__.o(installedModules, id)) return promises.push(installedModules[id]); +/******/ if(!startedInstallModules[id]) { +/******/ var onFactory = (factory) => { +/******/ installedModules[id] = 0; +/******/ __webpack_require__.m[id] = (module) => { +/******/ delete __webpack_require__.c[id]; +/******/ module.exports = factory(); +/******/ } +/******/ }; +/******/ startedInstallModules[id] = true; +/******/ var onError = (error) => { +/******/ delete installedModules[id]; +/******/ __webpack_require__.m[id] = (module) => { +/******/ delete __webpack_require__.c[id]; +/******/ throw error; +/******/ } +/******/ }; +/******/ try { +/******/ var promise = moduleToHandlerMapping[id](); +/******/ if(promise.then) { +/******/ promises.push(installedModules[id] = promise.then(onFactory)['catch'](onError)); +/******/ } else onFactory(promise); +/******/ } catch(e) { onError(e); } +/******/ } +/******/ }); +/******/ } +/******/ } +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "app": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if("webpack_container_remote_mfe-c_Component2" != chunkId) { +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } else installedChunks[chunkId] = 0; +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkmodule_federation_aaa"] = self["webpackChunkmodule_federation_aaa"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/******/ +/******/ // module cache are used so entry inlining is disabled +/******/ // startup +/******/ // Load entry module and return exports +/******/ var __webpack_exports__ = __webpack_require__(0); +/******/ +/******/ })() +; +``` + +# dist/bbb/mfeBBB.js + +```javascript +var mfeBBB; +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */ +/*!***********************!*\ + !*** container entry ***! + \***********************/ +/*! namespace exports */ +/*! export get [provided] [maybe used in mfeBBB (runtime-defined)] [usage and provision prevents renaming] */ +/*! export init [provided] [maybe used in mfeBBB (runtime-defined)] [usage and provision prevents renaming] */ +/*! other exports [not provided] [maybe used in mfeBBB (runtime-defined)] */ +/*! runtime requirements: __webpack_require__.d, __webpack_require__.o, __webpack_exports__, __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var moduleMap = { + "./Component": () => { + return __webpack_require__.e("src-b_Component_js").then(() => (() => ((__webpack_require__(/*! ./src-b/Component */ 3))))); + } +}; +var get = (module, getScope) => { + __webpack_require__.R = getScope; + getScope = ( + __webpack_require__.o(moduleMap, module) + ? moduleMap[module]() + : Promise.resolve().then(() => { + throw new Error('Module "' + module + '" does not exist in container.'); + }) + ); + __webpack_require__.R = undefined; + return getScope; +}; +var init = (shareScope, initScope) => { + if (!__webpack_require__.S) return; + var name = "default" + var oldScope = __webpack_require__.S[name]; + if(oldScope && oldScope !== shareScope) throw new Error("Container initialization failed as it has already been initialized with a different share scope"); + __webpack_require__.S[name] = shareScope; + return __webpack_require__.I(name, initScope); +}; + +// This exports getters to disallow modifications +__webpack_require__.d(exports, { + get: () => (get), + init: () => (init) +}); + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = __webpack_module_cache__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ var dataWebpackPrefix = "module-federation-bbb:"; +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/sharing */ +/******/ (() => { +/******/ __webpack_require__.S = {}; +/******/ var initPromises = {}; +/******/ var initTokens = {}; +/******/ __webpack_require__.I = (name, initScope) => { +/******/ if(!initScope) initScope = []; +/******/ // handling circular init calls +/******/ var initToken = initTokens[name]; +/******/ if(!initToken) initToken = initTokens[name] = {}; +/******/ if(initScope.indexOf(initToken) >= 0) return; +/******/ initScope.push(initToken); +/******/ // only runs once +/******/ if(initPromises[name]) return initPromises[name]; +/******/ // creates a new share scope if needed +/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {}; +/******/ // runs all init snippets from all modules reachable +/******/ var scope = __webpack_require__.S[name]; +/******/ var warn = (msg) => { +/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); +/******/ }; +/******/ var uniqueName = "module-federation-bbb"; +/******/ var register = (name, version, factory, eager) => { +/******/ var versions = scope[name] = scope[name] || {}; +/******/ var activeVersion = versions[version]; +/******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager }; +/******/ }; +/******/ var initExternal = (id) => { +/******/ var handleError = (err) => (warn("Initialization of sharing external failed: " + err)); +/******/ try { +/******/ var module = __webpack_require__(id); +/******/ if(!module) return; +/******/ var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope)) +/******/ if(module.then) return promises.push(module.then(initFn, handleError)); +/******/ var initResult = initFn(module); +/******/ if(initResult && initResult.then) return promises.push(initResult['catch'](handleError)); +/******/ } catch(err) { handleError(err); } +/******/ } +/******/ var promises = []; +/******/ switch(name) { +/******/ case "default": { +/******/ register("date-fns", "4.1.0", () => (__webpack_require__.e("vendors-node_modules_date-fns_index_js").then(() => (() => (__webpack_require__(/*! ../../node_modules/date-fns/index.js */ 6)))))); +/******/ register("react", "19.2.4", () => (__webpack_require__.e("vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__(/*! ../../node_modules/react/index.js */ 309)))))); +/******/ } +/******/ break; +/******/ } +/******/ if(!promises.length) return initPromises[name] = 1; +/******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/bbb/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/consumes */ +/******/ (() => { +/******/ var parseVersion = (str) => { +/******/ // see webpack/lib/util/semver.js for original code +/******/ var p=p=>{return p.split(".").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r; +/******/ } +/******/ var versionLt = (a, b) => { +/******/ // see webpack/lib/util/semver.js for original code +/******/ a=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r=b.length)return"u"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return e { +/******/ // see webpack/lib/util/semver.js for original code +/******/ var r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var e=1,a=1;a0?".":"")+(e=2,t)}return n}var g=[];for(a=1;a { +/******/ // see webpack/lib/util/semver.js for original code +/******/ if(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f { +/******/ return scope && __webpack_require__.o(scope, key); +/******/ } +/******/ var get = (entry) => { +/******/ entry.loaded = 1; +/******/ return entry.get() +/******/ }; +/******/ var eagerOnly = (versions) => { +/******/ return Object.keys(versions).reduce((filtered, version) => { +/******/ if (versions[version].eager) { +/******/ filtered[version] = versions[version]; +/******/ } +/******/ return filtered; +/******/ }, {}); +/******/ }; +/******/ var findLatestVersion = (scope, key, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ var key = Object.keys(versions).reduce((a, b) => { +/******/ return !a || versionLt(a, b) ? b : a; +/******/ }, 0); +/******/ return key && versions[key]; +/******/ }; +/******/ var findSatisfyingVersion = (scope, key, requiredVersion, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ var key = Object.keys(versions).reduce((a, b) => { +/******/ if (!satisfy(requiredVersion, b)) return a; +/******/ return !a || versionLt(a, b) ? b : a; +/******/ }, 0); +/******/ return key && versions[key] +/******/ }; +/******/ var findSingletonVersionKey = (scope, key, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ return Object.keys(versions).reduce((a, b) => { +/******/ return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a; +/******/ }, 0); +/******/ }; +/******/ var getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => { +/******/ return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")" +/******/ }; +/******/ var getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => { +/******/ var versions = scope[key]; +/******/ return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\n" + +/******/ "Available versions: " + Object.keys(versions).map((key) => { +/******/ return key + " from " + versions[key].from; +/******/ }).join(", "); +/******/ }; +/******/ var fail = (msg) => { +/******/ throw new Error(msg); +/******/ } +/******/ var failAsNotExist = (scopeName, key) => { +/******/ return fail("Shared module " + key + " doesn't exist in shared scope " + scopeName); +/******/ } +/******/ var warn = /*#__PURE__*/ (msg) => { +/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); +/******/ }; +/******/ var init = (fn) => (function(scopeName, key, eager, c, d) { +/******/ var promise = __webpack_require__.I(scopeName); +/******/ if (promise && promise.then && !eager) { +/******/ return promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d)); +/******/ } +/******/ return fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d); +/******/ }); +/******/ +/******/ var useFallback = (scopeName, key, fallback) => { +/******/ return fallback ? fallback() : failAsNotExist(scopeName, key); +/******/ } +/******/ var load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ return get(findLatestVersion(scope, key, eager)); +/******/ }); +/******/ var loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager); +/******/ if (satisfyingVersion) return get(satisfyingVersion); +/******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager)) +/******/ return get(findLatestVersion(scope, key, eager)); +/******/ }); +/******/ var loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager); +/******/ if (satisfyingVersion) return get(satisfyingVersion); +/******/ if (fallback) return fallback(); +/******/ fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager)); +/******/ }); +/******/ var loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ return get(scope[key][version]); +/******/ }); +/******/ var loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ if (!satisfy(requiredVersion, version)) { +/******/ warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); +/******/ } +/******/ return get(scope[key][version]); +/******/ }); +/******/ var loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ if (!satisfy(requiredVersion, version)) { +/******/ fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); +/******/ } +/******/ return get(scope[key][version]); +/******/ }); +/******/ var installedModules = {}; +/******/ var moduleToHandlerMapping = { +/******/ 4: () => (loadSingletonVersion("default", "react", false, [1,19,2,3], () => (__webpack_require__.e("vendors-node_modules_react_index_js").then(() => (() => (__webpack_require__(/*! react */ 309))))))), +/******/ 5: () => (loadStrictVersion("default", "date-fns", false, [1,4,0,0], () => (__webpack_require__.e("vendors-node_modules_date-fns_index_js").then(() => (() => (__webpack_require__(/*! date-fns */ 6))))))) +/******/ }; +/******/ // no consumes in initial chunks +/******/ var chunkMapping = { +/******/ "src-b_Component_js": [ +/******/ 4, +/******/ 5 +/******/ ] +/******/ }; +/******/ var startedInstallModules = {}; +/******/ __webpack_require__.f.consumes = (chunkId, promises) => { +/******/ if(__webpack_require__.o(chunkMapping, chunkId)) { +/******/ chunkMapping[chunkId].forEach((id) => { +/******/ if(__webpack_require__.o(installedModules, id)) return promises.push(installedModules[id]); +/******/ if(!startedInstallModules[id]) { +/******/ var onFactory = (factory) => { +/******/ installedModules[id] = 0; +/******/ __webpack_require__.m[id] = (module) => { +/******/ delete __webpack_require__.c[id]; +/******/ module.exports = factory(); +/******/ } +/******/ }; +/******/ startedInstallModules[id] = true; +/******/ var onError = (error) => { +/******/ delete installedModules[id]; +/******/ __webpack_require__.m[id] = (module) => { +/******/ delete __webpack_require__.c[id]; +/******/ throw error; +/******/ } +/******/ }; +/******/ try { +/******/ var promise = moduleToHandlerMapping[id](); +/******/ if(promise.then) { +/******/ promises.push(installedModules[id] = promise.then(onFactory)['catch'](onError)); +/******/ } else onFactory(promise); +/******/ } catch(e) { onError(e); } +/******/ } +/******/ }); +/******/ } +/******/ } +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "mfeBBB": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkmodule_federation_bbb"] = self["webpackChunkmodule_federation_bbb"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/******/ +/******/ // module cache are used so entry inlining is disabled +/******/ // startup +/******/ // Load entry module and return exports +/******/ var __webpack_exports__ = __webpack_require__(0); +/******/ mfeBBB = __webpack_exports__; +/******/ +/******/ })() +; +``` + +# dist/ccc/mfeCCC.js + +```javascript +var mfeCCC; +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */ +/*!***********************!*\ + !*** container entry ***! + \***********************/ +/*! namespace exports */ +/*! export get [provided] [maybe used in mfeCCC (runtime-defined)] [usage and provision prevents renaming] */ +/*! export init [provided] [maybe used in mfeCCC (runtime-defined)] [usage and provision prevents renaming] */ +/*! other exports [not provided] [maybe used in mfeCCC (runtime-defined)] */ +/*! runtime requirements: __webpack_require__.d, __webpack_require__.o, __webpack_exports__, __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var moduleMap = { + "./Component": () => { + return Promise.all([__webpack_require__.e("webpack_sharing_consume_default_react"), __webpack_require__.e("src-c_Component_js")]).then(() => (() => ((__webpack_require__(/*! ./src-c/Component */ 3))))); + }, + "./Component2": () => { + return Promise.all([__webpack_require__.e("webpack_sharing_consume_default_react"), __webpack_require__.e("src-c_LazyComponent_js")]).then(() => (() => ((__webpack_require__(/*! ./src-c/LazyComponent */ 6))))); + } +}; +var get = (module, getScope) => { + __webpack_require__.R = getScope; + getScope = ( + __webpack_require__.o(moduleMap, module) + ? moduleMap[module]() + : Promise.resolve().then(() => { + throw new Error('Module "' + module + '" does not exist in container.'); + }) + ); + __webpack_require__.R = undefined; + return getScope; +}; +var init = (shareScope, initScope) => { + if (!__webpack_require__.S) return; + var name = "default" + var oldScope = __webpack_require__.S[name]; + if(oldScope && oldScope !== shareScope) throw new Error("Container initialization failed as it has already been initialized with a different share scope"); + __webpack_require__.S[name] = shareScope; + return __webpack_require__.I(name, initScope); +}; + +// This exports getters to disallow modifications +__webpack_require__.d(exports, { + get: () => (get), + init: () => (init) +}); + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = __webpack_module_cache__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ var dataWebpackPrefix = "module-federation-ccc:"; +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/sharing */ +/******/ (() => { +/******/ __webpack_require__.S = {}; +/******/ var initPromises = {}; +/******/ var initTokens = {}; +/******/ __webpack_require__.I = (name, initScope) => { +/******/ if(!initScope) initScope = []; +/******/ // handling circular init calls +/******/ var initToken = initTokens[name]; +/******/ if(!initToken) initToken = initTokens[name] = {}; +/******/ if(initScope.indexOf(initToken) >= 0) return; +/******/ initScope.push(initToken); +/******/ // only runs once +/******/ if(initPromises[name]) return initPromises[name]; +/******/ // creates a new share scope if needed +/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {}; +/******/ // runs all init snippets from all modules reachable +/******/ var scope = __webpack_require__.S[name]; +/******/ var warn = (msg) => { +/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); +/******/ }; +/******/ var uniqueName = "module-federation-ccc"; +/******/ var register = (name, version, factory, eager) => { +/******/ var versions = scope[name] = scope[name] || {}; +/******/ var activeVersion = versions[version]; +/******/ if(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager }; +/******/ }; +/******/ var initExternal = (id) => { +/******/ var handleError = (err) => (warn("Initialization of sharing external failed: " + err)); +/******/ try { +/******/ var module = __webpack_require__(id); +/******/ if(!module) return; +/******/ var initFn = (module) => (module && module.init && module.init(__webpack_require__.S[name], initScope)) +/******/ if(module.then) return promises.push(module.then(initFn, handleError)); +/******/ var initResult = initFn(module); +/******/ if(initResult && initResult.then) return promises.push(initResult['catch'](handleError)); +/******/ } catch(err) { handleError(err); } +/******/ } +/******/ var promises = []; +/******/ switch(name) { +/******/ case "default": { +/******/ register("date-fns", "4.1.0", () => (__webpack_require__.e("vendors-node_modules_date-fns_index_js").then(() => (() => (__webpack_require__(/*! ../../node_modules/date-fns/index.js */ 8)))))); +/******/ register("lodash/random", "4.17.23", () => (__webpack_require__.e("vendors-node_modules_lodash_random_js").then(() => (() => (__webpack_require__(/*! ../../node_modules/lodash/random.js */ 311)))))); +/******/ } +/******/ break; +/******/ } +/******/ if(!promises.length) return initPromises[name] = 1; +/******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/ccc/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/consumes */ +/******/ (() => { +/******/ var parseVersion = (str) => { +/******/ // see webpack/lib/util/semver.js for original code +/******/ var p=p=>{return p.split(".").map(p=>{return+p==p?+p:p})},n=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r; +/******/ } +/******/ var versionLt = (a, b) => { +/******/ // see webpack/lib/util/semver.js for original code +/******/ a=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r=b.length)return"u"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return e { +/******/ // see webpack/lib/util/semver.js for original code +/******/ var r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var e=1,a=1;a0?".":"")+(e=2,t)}return n}var g=[];for(a=1;a { +/******/ // see webpack/lib/util/semver.js for original code +/******/ if(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f { +/******/ return scope && __webpack_require__.o(scope, key); +/******/ } +/******/ var get = (entry) => { +/******/ entry.loaded = 1; +/******/ return entry.get() +/******/ }; +/******/ var eagerOnly = (versions) => { +/******/ return Object.keys(versions).reduce((filtered, version) => { +/******/ if (versions[version].eager) { +/******/ filtered[version] = versions[version]; +/******/ } +/******/ return filtered; +/******/ }, {}); +/******/ }; +/******/ var findLatestVersion = (scope, key, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ var key = Object.keys(versions).reduce((a, b) => { +/******/ return !a || versionLt(a, b) ? b : a; +/******/ }, 0); +/******/ return key && versions[key]; +/******/ }; +/******/ var findSatisfyingVersion = (scope, key, requiredVersion, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ var key = Object.keys(versions).reduce((a, b) => { +/******/ if (!satisfy(requiredVersion, b)) return a; +/******/ return !a || versionLt(a, b) ? b : a; +/******/ }, 0); +/******/ return key && versions[key] +/******/ }; +/******/ var findSingletonVersionKey = (scope, key, eager) => { +/******/ var versions = eager ? eagerOnly(scope[key]) : scope[key]; +/******/ return Object.keys(versions).reduce((a, b) => { +/******/ return !a || (!versions[a].loaded && versionLt(a, b)) ? b : a; +/******/ }, 0); +/******/ }; +/******/ var getInvalidSingletonVersionMessage = (scope, key, version, requiredVersion) => { +/******/ return "Unsatisfied version " + version + " from " + (version && scope[key][version].from) + " of shared singleton module " + key + " (required " + rangeToString(requiredVersion) + ")" +/******/ }; +/******/ var getInvalidVersionMessage = (scope, scopeName, key, requiredVersion, eager) => { +/******/ var versions = scope[key]; +/******/ return "No satisfying version (" + rangeToString(requiredVersion) + ")" + (eager ? " for eager consumption" : "") + " of shared module " + key + " found in shared scope " + scopeName + ".\n" + +/******/ "Available versions: " + Object.keys(versions).map((key) => { +/******/ return key + " from " + versions[key].from; +/******/ }).join(", "); +/******/ }; +/******/ var fail = (msg) => { +/******/ throw new Error(msg); +/******/ } +/******/ var failAsNotExist = (scopeName, key) => { +/******/ return fail("Shared module " + key + " doesn't exist in shared scope " + scopeName); +/******/ } +/******/ var warn = /*#__PURE__*/ (msg) => { +/******/ if (typeof console !== "undefined" && console.warn) console.warn(msg); +/******/ }; +/******/ var init = (fn) => (function(scopeName, key, eager, c, d) { +/******/ var promise = __webpack_require__.I(scopeName); +/******/ if (promise && promise.then && !eager) { +/******/ return promise.then(fn.bind(fn, scopeName, __webpack_require__.S[scopeName], key, false, c, d)); +/******/ } +/******/ return fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d); +/******/ }); +/******/ +/******/ var useFallback = (scopeName, key, fallback) => { +/******/ return fallback ? fallback() : failAsNotExist(scopeName, key); +/******/ } +/******/ var load = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ return get(findLatestVersion(scope, key, eager)); +/******/ }); +/******/ var loadVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager); +/******/ if (satisfyingVersion) return get(satisfyingVersion); +/******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager)) +/******/ return get(findLatestVersion(scope, key, eager)); +/******/ }); +/******/ var loadStrictVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var satisfyingVersion = findSatisfyingVersion(scope, key, requiredVersion, eager); +/******/ if (satisfyingVersion) return get(satisfyingVersion); +/******/ if (fallback) return fallback(); +/******/ fail(getInvalidVersionMessage(scope, scopeName, key, requiredVersion, eager)); +/******/ }); +/******/ var loadSingleton = /*#__PURE__*/ init((scopeName, scope, key, eager, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ return get(scope[key][version]); +/******/ }); +/******/ var loadSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ if (!satisfy(requiredVersion, version)) { +/******/ warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); +/******/ } +/******/ return get(scope[key][version]); +/******/ }); +/******/ var loadStrictSingletonVersion = /*#__PURE__*/ init((scopeName, scope, key, eager, requiredVersion, fallback) => { +/******/ if (!exists(scope, key)) return useFallback(scopeName, key, fallback); +/******/ var version = findSingletonVersionKey(scope, key, eager); +/******/ if (!satisfy(requiredVersion, version)) { +/******/ fail(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion)); +/******/ } +/******/ return get(scope[key][version]); +/******/ }); +/******/ var installedModules = {}; +/******/ var moduleToHandlerMapping = { +/******/ 4: () => (loadSingletonVersion("default", "react", false, [1,19,2,3])), +/******/ 5: () => (loadStrictVersion("default", "date-fns", false, [1,4,0,0], () => (__webpack_require__.e("vendors-node_modules_date-fns_index_js").then(() => (() => (__webpack_require__(/*! date-fns */ 8))))))), +/******/ 7: () => (loadStrictVersion("default", "lodash/random", false, [1,4,17,19], () => (__webpack_require__.e("vendors-node_modules_lodash_random_js").then(() => (() => (__webpack_require__(/*! lodash/random */ 311))))))) +/******/ }; +/******/ // no consumes in initial chunks +/******/ var chunkMapping = { +/******/ "webpack_sharing_consume_default_react": [ +/******/ 4 +/******/ ], +/******/ "src-c_Component_js": [ +/******/ 5 +/******/ ], +/******/ "src-c_LazyComponent_js": [ +/******/ 7 +/******/ ] +/******/ }; +/******/ var startedInstallModules = {}; +/******/ __webpack_require__.f.consumes = (chunkId, promises) => { +/******/ if(__webpack_require__.o(chunkMapping, chunkId)) { +/******/ chunkMapping[chunkId].forEach((id) => { +/******/ if(__webpack_require__.o(installedModules, id)) return promises.push(installedModules[id]); +/******/ if(!startedInstallModules[id]) { +/******/ var onFactory = (factory) => { +/******/ installedModules[id] = 0; +/******/ __webpack_require__.m[id] = (module) => { +/******/ delete __webpack_require__.c[id]; +/******/ module.exports = factory(); +/******/ } +/******/ }; +/******/ startedInstallModules[id] = true; +/******/ var onError = (error) => { +/******/ delete installedModules[id]; +/******/ __webpack_require__.m[id] = (module) => { +/******/ delete __webpack_require__.c[id]; +/******/ throw error; +/******/ } +/******/ }; +/******/ try { +/******/ var promise = moduleToHandlerMapping[id](); +/******/ if(promise.then) { +/******/ promises.push(installedModules[id] = promise.then(onFactory)['catch'](onError)); +/******/ } else onFactory(promise); +/******/ } catch(e) { onError(e); } +/******/ } +/******/ }); +/******/ } +/******/ } +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "mfeCCC": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if("webpack_sharing_consume_default_react" != chunkId) { +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } else installedChunks[chunkId] = 0; +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkmodule_federation_ccc"] = self["webpackChunkmodule_federation_ccc"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/******/ +/******/ // module cache are used so entry inlining is disabled +/******/ // startup +/******/ // Load entry module and return exports +/******/ var __webpack_exports__ = __webpack_require__(0); +/******/ mfeCCC = __webpack_exports__; +/******/ +/******/ })() +; +``` + +# Info + +## Unoptimized + +``` +app: + asset src_bootstrap_js.js 43.4 KiB [emitted] + asset app.js 30.3 KiB [emitted] (name: app) + asset vendors-node_modules_react_index_js.js 28.4 KiB [emitted] (id hint: vendors) + chunk (runtime: app) app.js (app) 672 bytes (javascript) 42 bytes (share-init) 19 KiB (runtime) [entry] [rendered] + > ./src/index.js app + runtime modules 19 KiB 13 modules + built modules 672 bytes (javascript) 42 bytes (share-init) [built] + ./src/index.js 588 bytes [built] [code generated] + external "mfeBBB@/dist/bbb/mfeBBB.js" 42 bytes [built] [code generated] + external "mfeCCC@/dist/ccc/mfeCCC.js" 42 bytes [built] [code generated] + provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js 42 bytes [built] [code generated] + chunk (runtime: app) src_bootstrap_js.js 26.3 KiB (javascript) 84 bytes (consume-shared) 12 bytes (remote) 12 bytes (share-init) [rendered] + > ./bootstrap ./src/index.js 10:0-21 + dependent modules 25.9 KiB (javascript) 84 bytes (consume-shared) 12 bytes (remote) 12 bytes (share-init) [dependent] 17 modules + ./src/bootstrap.js 380 bytes [built] [code generated] + chunk (runtime: app) vendors-node_modules_react_index_js.js (id hint: vendors) 17 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js + > consume shared module (default) react@^19.2.4 (singleton) (fallback: ../../node_modules/react/index.js) + > consume shared module (default) react@^19.2.3 (singleton) (fallback: ../../node_modules/react/index.js) + dependent modules 16.8 KiB [dependent] 1 module + ../../node_modules/react/index.js 186 bytes [built] [code generated] + chunk (runtime: app) 6 bytes (remote) 6 bytes (share-init) + > mfe-c/Component2 ./src/App.js 7:49-75 + remote mfe-c/Component2 6 bytes (remote) 6 bytes (share-init) [built] [code generated] + app (webpack X.X.X) compiled successfully + +mfe-b: + assets by chunk 1020 KiB (id hint: vendors) + asset vendors-node_modules_date-fns_index_js.js 995 KiB [emitted] (id hint: vendors) + asset vendors-node_modules_react_index_js.js 28.4 KiB [emitted] (id hint: vendors) + asset mfeBBB.js 24.4 KiB [emitted] (name: mfeBBB) + asset src-b_Component_js.js 1.9 KiB [emitted] + chunk (runtime: mfeBBB) mfeBBB.js (mfeBBB) 42 bytes (javascript) 84 bytes (share-init) 15.9 KiB (runtime) [entry] [rendered] + > mfeBBB + runtime modules 15.9 KiB 10 modules + built modules 42 bytes (javascript) 84 bytes (share-init) [built] + container entry 42 bytes [built] [code generated] + provide shared module (default) date-fns@4.1.0 = ../../node_modules/dat...(truncated) 42 bytes [built] [code generated] + provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js 42 bytes [built] [code generated] + chunk (runtime: mfeBBB) src-b_Component_js.js 752 bytes (javascript) 84 bytes (consume-shared) [rendered] + > ./src-b/Component container entry ./Component + dependent modules 84 bytes [dependent] 2 modules + ./src-b/Component.js 752 bytes [built] [code generated] + chunk (runtime: mfeBBB) vendors-node_modules_date-fns_index_js.js (id hint: vendors) 520 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > provide shared module (default) date-fns@4.1.0 = ../../node_modules/date-fns/index.js + > consume shared module (default) date-fns@^4.0.0 (strict) (fallback: ../../node_modules/date-fns/index.js) + dependent modules 512 KiB [dependent] 302 modules + ../../node_modules/date-fns/index.js 8.68 KiB [built] [code generated] + chunk (runtime: mfeBBB) vendors-node_modules_react_index_js.js (id hint: vendors) 17 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js + > consume shared module (default) react@^19.2.3 (singleton) (fallback: ../../node_modules/react/index.js) + dependent modules 16.8 KiB [dependent] 1 module + ../../node_modules/react/index.js 186 bytes [built] [code generated] + mfe-b (webpack X.X.X) compiled successfully + +mfe-c: + assets by chunk 1020 KiB (id hint: vendors) + asset vendors-node_modules_date-fns_index_js.js 995 KiB [emitted] (id hint: vendors) + asset vendors-node_modules_lodash_random_js.js 24.5 KiB [emitted] (id hint: vendors) + asset mfeCCC.js 25.8 KiB [emitted] (name: mfeCCC) + asset src-c_LazyComponent_js.js 2.04 KiB [emitted] + asset src-c_Component_js.js 1.81 KiB [emitted] + chunk (runtime: mfeCCC) mfeCCC.js (mfeCCC) 42 bytes (javascript) 84 bytes (share-init) 16.6 KiB (runtime) [entry] [rendered] + > mfeCCC + runtime modules 16.6 KiB 12 modules + built modules 42 bytes (javascript) 84 bytes (share-init) [built] + container entry 42 bytes [built] [code generated] + provide shared module (default) date-fns@4.1.0 = ../../node_modules/dat...(truncated) 42 bytes [built] [code generated] + provide shared module (default) lodash/random@4.17.23 = ../../node_modules/lo...(truncated) 42 bytes [built] [code generated] + chunk (runtime: mfeCCC) src-c_Component_js.js 467 bytes (javascript) 42 bytes (consume-shared) [rendered] + > ./src-c/Component container entry ./Component + dependent modules 42 bytes [dependent] 1 module + ./src-c/Component.js 467 bytes [built] [code generated] + chunk (runtime: mfeCCC) src-c_LazyComponent_js.js 504 bytes (javascript) 42 bytes (consume-shared) [rendered] + > ./src-c/LazyComponent container entry ./Component2 + dependent modules 42 bytes [dependent] 1 module + ./src-c/LazyComponent.js 504 bytes [built] [code generated] + chunk (runtime: mfeCCC) vendors-node_modules_date-fns_index_js.js (id hint: vendors) 520 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > provide shared module (default) date-fns@4.1.0 = ../../node_modules/date-fns/index.js + > consume shared module (default) date-fns@^4.0.0 (strict) (fallback: ../../node_modules/date-fns/index.js) + dependent modules 512 KiB [dependent] 302 modules + ../../node_modules/date-fns/index.js 8.68 KiB [built] [code generated] + chunk (runtime: mfeCCC) vendors-node_modules_lodash_random_js.js (id hint: vendors) 16 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > provide shared module (default) lodash/random@4.17.23 = ../../node_modules/lodash/random.js + > consume shared module (default) lodash/random@^4.17.19 (strict) (fallback: ../../node_modules/lodash/random.js) + dependent modules 13.7 KiB [dependent] 20 modules + ../../node_modules/lodash/random.js 2.32 KiB [built] [code generated] + chunk (runtime: mfeCCC) 42 bytes split chunk (cache group: default) + > ./src-c/Component container entry ./Component + > ./src-c/LazyComponent container entry ./Component2 + consume shared module (default) react@^19.2.3 (singleton) 42 bytes [built] [code generated] + mfe-c (webpack X.X.X) compiled successfully +``` + +## Production mode + +``` +app: + asset src_bootstrap_js.js 12.5 KiB [emitted] [minimized] 1 related asset + asset app.js 7.61 KiB [emitted] [minimized] (name: app) + asset node_modules_react_index_js.js 7.45 KiB [emitted] [minimized] 1 related asset + chunk (runtime: app) app.js (app) 672 bytes (javascript) 42 bytes (share-init) 18.9 KiB (runtime) [entry] [rendered] + > ./src/index.js app + runtime modules 18.9 KiB 13 modules + built modules 672 bytes (javascript) 42 bytes (share-init) [built] + ./src/index.js 588 bytes [built] [code generated] + external "mfeBBB@/dist/bbb/mfeBBB.js" 42 bytes [built] [code generated] + external "mfeCCC@/dist/ccc/mfeCCC.js" 42 bytes [built] [code generated] + provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js 42 bytes [built] [code generated] + chunk (runtime: app) node_modules_react_index_js.js 17 KiB [rendered] + > provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js + > consume shared module (default) react@^19.2.4 (singleton) (fallback: ../../node_modules/react/index.js) + > consume shared module (default) react@^19.2.3 (singleton) (fallback: ../../node_modules/react/index.js) + dependent modules 16.8 KiB [dependent] 1 module + ../../node_modules/react/index.js 186 bytes [built] [code generated] + chunk (runtime: app) src_bootstrap_js.js 26.3 KiB (javascript) 84 bytes (consume-shared) 12 bytes (remote) 12 bytes (share-init) [rendered] + > ./bootstrap ./src/index.js 10:0-21 + dependent modules 7.83 KiB (javascript) 84 bytes (consume-shared) 12 bytes (remote) 12 bytes (share-init) [dependent] 6 modules + ./src/bootstrap.js + 11 modules 18.4 KiB [built] [code generated] + chunk (runtime: app) 6 bytes (remote) 6 bytes (share-init) + > mfe-c/Component2 ./src/App.js 7:49-75 + remote mfe-c/Component2 6 bytes (remote) 6 bytes (share-init) [built] [code generated] + app (webpack X.X.X) compiled successfully + +mfe-b: + asset vendors-node_modules_date-fns_index_js.js 70.3 KiB [emitted] [minimized] (id hint: vendors) + asset node_modules_react_index_js.js 7.45 KiB [emitted] [minimized] 1 related asset + asset mfeBBB.js 6.22 KiB [emitted] [minimized] (name: mfeBBB) + asset src-b_Component_js.js 471 bytes [emitted] [minimized] + chunk (runtime: mfeBBB) mfeBBB.js (mfeBBB) 42 bytes (javascript) 84 bytes (share-init) 15.8 KiB (runtime) [entry] [rendered] + > mfeBBB + runtime modules 15.8 KiB 10 modules + built modules 42 bytes (javascript) 84 bytes (share-init) [built] + container entry 42 bytes [built] [code generated] + provide shared module (default) date-fns@4.1.0 = ../../node_modules/dat...(truncated) 42 bytes [built] [code generated] + provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js 42 bytes [built] [code generated] + chunk (runtime: mfeBBB) node_modules_react_index_js.js 17 KiB [rendered] + > provide shared module (default) react@19.2.4 = ../../node_modules/react/index.js + > consume shared module (default) react@^19.2.3 (singleton) (fallback: ../../node_modules/react/index.js) + dependent modules 16.8 KiB [dependent] 1 module + ../../node_modules/react/index.js 186 bytes [built] [code generated] + chunk (runtime: mfeBBB) src-b_Component_js.js 752 bytes (javascript) 84 bytes (consume-shared) [rendered] + > ./src-b/Component container entry ./Component + dependent modules 84 bytes [dependent] 2 modules + ./src-b/Component.js 752 bytes [built] [code generated] + chunk (runtime: mfeBBB) vendors-node_modules_date-fns_index_js.js (id hint: vendors) 520 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > consume shared module (default) date-fns@^4.0.0 (strict) (fallback: ../../node_modules/date-fns/index.js) + > provide shared module (default) date-fns@4.1.0 = ../../node_modules/date-fns/index.js + ../../node_modules/date-fns/index.js + 302 modules 520 KiB [built] [code generated] + mfe-b (webpack X.X.X) compiled successfully + +mfe-c: + asset vendors-node_modules_date-fns_index_js.js 70.3 KiB [emitted] [minimized] (id hint: vendors) + asset mfeCCC.js 6.83 KiB [emitted] [minimized] (name: mfeCCC) + asset node_modules_lodash_random_js.js 3.08 KiB [emitted] [minimized] + asset src-c_LazyComponent_js.js 530 bytes [emitted] [minimized] + asset src-c_Component_js.js 485 bytes [emitted] [minimized] + chunk (runtime: mfeCCC) mfeCCC.js (mfeCCC) 42 bytes (javascript) 84 bytes (share-init) 16.5 KiB (runtime) [entry] [rendered] + > mfeCCC + runtime modules 16.5 KiB 12 modules + built modules 42 bytes (javascript) 84 bytes (share-init) [built] + container entry 42 bytes [built] [code generated] + provide shared module (default) date-fns@4.1.0 = ../../node_modules/dat...(truncated) 42 bytes [built] [code generated] + provide shared module (default) lodash/random@4.17.23 = ../../node_modules/lo...(truncated) 42 bytes [built] [code generated] + chunk (runtime: mfeCCC) node_modules_lodash_random_js.js 16 KiB [rendered] + > consume shared module (default) lodash/random@^4.17.19 (strict) (fallback: ../../node_modules/lodash/random.js) + > provide shared module (default) lodash/random@4.17.23 = ../../node_modules/lodash/random.js + dependent modules 13.7 KiB [dependent] 20 modules + ../../node_modules/lodash/random.js 2.32 KiB [built] [code generated] + chunk (runtime: mfeCCC) src-c_Component_js.js 467 bytes (javascript) 42 bytes (consume-shared) [rendered] + > ./src-c/Component container entry ./Component + dependent modules 42 bytes [dependent] 1 module + ./src-c/Component.js 467 bytes [built] [code generated] + chunk (runtime: mfeCCC) src-c_LazyComponent_js.js 504 bytes (javascript) 42 bytes (consume-shared) [rendered] + > ./src-c/LazyComponent container entry ./Component2 + dependent modules 42 bytes [dependent] 1 module + ./src-c/LazyComponent.js 504 bytes [built] [code generated] + chunk (runtime: mfeCCC) vendors-node_modules_date-fns_index_js.js (id hint: vendors) 520 KiB [rendered] reused as split chunk (cache group: defaultVendors) + > consume shared module (default) date-fns@^4.0.0 (strict) (fallback: ../../node_modules/date-fns/index.js) + > provide shared module (default) date-fns@4.1.0 = ../../node_modules/date-fns/index.js + ../../node_modules/date-fns/index.js + 302 modules 520 KiB [built] [code generated] + chunk (runtime: mfeCCC) 42 bytes split chunk (cache group: default) + > ./src-c/Component container entry ./Component + > ./src-c/LazyComponent container entry ./Component2 + consume shared module (default) react@^19.2.3 (singleton) 42 bytes [built] [code generated] + mfe-c (webpack X.X.X) compiled successfully +``` diff --git a/examples/module-federation/build.js b/examples/module-federation/build.js new file mode 100644 index 00000000000..2eab80c3400 --- /dev/null +++ b/examples/module-federation/build.js @@ -0,0 +1,5 @@ +global.NO_TARGET_ARGS = true; +global.NO_REASONS = true; +global.NO_STATS_OPTIONS = true; +global.NO_PUBLIC_PATH = true; +require("../build-common"); diff --git a/examples/module-federation/index.html b/examples/module-federation/index.html new file mode 100644 index 00000000000..f5a0a1ec244 --- /dev/null +++ b/examples/module-federation/index.html @@ -0,0 +1,83 @@ + + + + + + +
+ + + + + + + + + + + + + + + diff --git a/examples/module-federation/src-b/Component.js b/examples/module-federation/src-b/Component.js new file mode 100644 index 00000000000..4225568f1e2 --- /dev/null +++ b/examples/module-federation/src-b/Component.js @@ -0,0 +1,18 @@ +import React from "react"; +import { formatRelative, subDays } from "date-fns"; +// date-fns is a shared module, but used as usual +// exposing modules act as async boundary, +// so no additional async boundary need to be added here +// As data-fns is an shared module, it will be placed in a separate file +// It will be loaded in parallel to the code of this module + +const Component = ({ locale }) => ( +
+

I'm a Component exposed from container B!

+

+ Using date-fn in Remote:{" "} + {formatRelative(subDays(new Date(), 2), new Date(), { locale })} +

+
+); +export default Component; diff --git a/examples/module-federation/src-c/Component.js b/examples/module-federation/src-c/Component.js new file mode 100644 index 00000000000..dba8151efb8 --- /dev/null +++ b/examples/module-federation/src-c/Component.js @@ -0,0 +1,13 @@ +import React from "react"; +import { formatRelative, subDays } from "date-fns"; + +const Component = ({ locale }) => ( +
+

I'm a Component exposed from container C!

+

+ Using date-fn in Remote:{" "} + {formatRelative(subDays(new Date(), 3), new Date(), { locale })} +

+
+); +export default Component; diff --git a/examples/module-federation/src-c/LazyComponent.js b/examples/module-federation/src-c/LazyComponent.js new file mode 100644 index 00000000000..22dea24a471 --- /dev/null +++ b/examples/module-federation/src-c/LazyComponent.js @@ -0,0 +1,11 @@ +import React from "react"; +import random from "lodash/random"; + +const Component = () => ( +
+

I'm a lazy Component exposed from container C!

+

I'm lazy loaded by the app and lazy load another component myself.

+

Using lodash in Remote: {random(0, 6)}

+
+); +export default Component; diff --git a/examples/module-federation/src/App.js b/examples/module-federation/src/App.js new file mode 100644 index 00000000000..b58a5c19650 --- /dev/null +++ b/examples/module-federation/src/App.js @@ -0,0 +1,26 @@ +import React from "react"; +import ComponentB from "mfe-b/Component"; // <- these are remote modules, +import ComponentC from "mfe-c/Component"; // <- but they are used as usual packages +import { de } from "date-fns/locale"; + +// remote modules can also be used with import() which lazy loads them as usual +const ComponentD = React.lazy(() => import("mfe-c/Component2")); + +const App = () => ( +
+
+

Hello World

+
+

This component is from a remote container:

+ +

And this component is from another remote container:

+ + Lazy loading component...

}> +

+ And this component is from this remote container too, but lazy loaded: +

+ +
+
+); +export default App; diff --git a/examples/module-federation/src/bootstrap.js b/examples/module-federation/src/bootstrap.js new file mode 100644 index 00000000000..afb68467aba --- /dev/null +++ b/examples/module-federation/src/bootstrap.js @@ -0,0 +1,11 @@ +import ReactDom from "react-dom"; +import React from "react"; // <- this is a shared module, but used as usual +import App from "./App"; + +// load app +const el = document.createElement("main"); +ReactDom.render(, el); +document.body.appendChild(el); + +// remove spinner +document.body.removeChild(document.getElementsByClassName("spinner")[0]); diff --git a/examples/module-federation/src/index.js b/examples/module-federation/src/index.js new file mode 100644 index 00000000000..5e42922531e --- /dev/null +++ b/examples/module-federation/src/index.js @@ -0,0 +1,13 @@ +// Sharing modules requires that all remotes are initialized +// and can provide shared modules to the common scope +// As this is an async operation we need an async boundary (import()) + +// Using modules from remotes is also an async operation +// as chunks need to be loaded for the code of the remote module +// This also requires an async boundary (import()) + +// At this point shared modules initialized and remote modules are loaded +import("./bootstrap"); + +// It's possible to place more code here to do stuff on page init +// but it can't use any of the shared modules or remote modules. diff --git a/examples/module-federation/template.md b/examples/module-federation/template.md new file mode 100644 index 00000000000..abb4767fccb --- /dev/null +++ b/examples/module-federation/template.md @@ -0,0 +1,67 @@ +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# src/index.js + +```javascript +_{{src/index.js}}_ +``` + +# src/bootstrap.js + +```jsx +_{{src/bootstrap.js}}_ +``` + +# src/App.js + +```jsx +_{{src/App.js}}_ +``` + +# index.html + +```html +_{{index.html}}_ +``` + +# src-b/Component.js + +```jsx +_{{src-b/Component.js}}_ +``` + +# dist/aaa/app.js + +```javascript +_{{dist/aaa/app.js}}_ +``` + +# dist/bbb/mfeBBB.js + +```javascript +_{{dist/bbb/mfeBBB.js}}_ +``` + +# dist/ccc/mfeCCC.js + +```javascript +_{{dist/ccc/mfeCCC.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/module-federation/webpack.config.js b/examples/module-federation/webpack.config.js new file mode 100644 index 00000000000..3fc1189a542 --- /dev/null +++ b/examples/module-federation/webpack.config.js @@ -0,0 +1,159 @@ +"use strict"; + +const path = require("path"); +const { ModuleFederationPlugin } = require("../../").container; + +const rules = [ + { + test: /\.js$/, + include: path.resolve(__dirname, "src"), + use: { + loader: "babel-loader", + options: { + presets: ["@babel/react"] + } + } + } +]; + +/** @type {import("webpack").Configuration["optimization"]} */ +const optimization = { + chunkIds: "named", // for this example only: readable filenames in production too + nodeEnv: "production" // for this example only: always production version of react +}; +const stats = { + chunks: true, + modules: false, + chunkModules: true, + chunkOrigins: true +}; + +/** @type {(env: "development" | "production") => import("webpack").Configuration[]} */ +const config = (env = "development") => [ + // For this example we have 3 configs in a single file + // In practice you probably would have separate config + // maybe even separate repos for each build. + // For Module Federation there is not compile-time dependency + // between the builds. + // Each one can have different config options. + { + name: "app", + mode: env, + entry: { + app: "./src/index.js" + }, + output: { + filename: "[name].js", + path: path.resolve(__dirname, "dist/aaa"), + publicPath: "dist/aaa/", + + // Each build needs a unique name + // to avoid runtime collisions + // The default uses "name" from package.json + uniqueName: "module-federation-aaa" + }, + module: { rules }, + optimization, + plugins: [ + new ModuleFederationPlugin({ + // List of remotes with URLs + remotes: { + "mfe-b": "mfeBBB@/dist/bbb/mfeBBB.js", + "mfe-c": "mfeCCC@/dist/ccc/mfeCCC.js" + }, + + // list of shared modules with optional options + shared: { + // specifying a module request as shared module + // will provide all used modules matching this name (version from package.json) + // and consume shared modules in the version specified in dependencies from package.json + // (or in dev/peer/optionalDependencies) + // So it use the highest available version of this package matching the version requirement + // from package.json, while providing it's own version to others. + react: { + singleton: true // make sure only a single react module is used + } + } + }) + ], + stats + }, + { + name: "mfe-b", + mode: env, + entry: {}, + output: { + filename: "[name].js", + path: path.resolve(__dirname, "dist/bbb"), + publicPath: "dist/bbb/", + uniqueName: "module-federation-bbb" + }, + module: { rules }, + optimization, + plugins: [ + new ModuleFederationPlugin({ + // A unique name + name: "mfeBBB", + + // List of exposed modules + exposes: { + "./Component": "./src-b/Component" + }, + + // list of shared modules + shared: [ + // date-fns is shared with the other remote, app doesn't know about that + "date-fns", + { + react: { + singleton: true // must be specified in each config + } + } + ] + }) + ], + stats + }, + { + name: "mfe-c", + mode: env, + entry: {}, + output: { + filename: "[name].js", + path: path.resolve(__dirname, "dist/ccc"), + publicPath: "dist/ccc/", + uniqueName: "module-federation-ccc" + }, + module: { rules }, + optimization, + plugins: [ + new ModuleFederationPlugin({ + name: "mfeCCC", + + exposes: { + "./Component": "./src-c/Component", + "./Component2": "./src-c/LazyComponent" + }, + + shared: [ + // All (used) requests within lodash are shared. + "lodash/", + "date-fns", + { + react: { + // Do not load our own version. + // There must be a valid shared module available at runtime. + // This improves build time as this module doesn't need to be compiled, + // but it opts-out of possible fallbacks and runtime version upgrade. + import: false, + singleton: true + } + } + ] + }) + ], + stats + } +]; + +module.exports = config; diff --git a/examples/module-library/README.md b/examples/module-library/README.md new file mode 100644 index 00000000000..cf07b4a9307 --- /dev/null +++ b/examples/module-library/README.md @@ -0,0 +1,153 @@ +# example.js + +```javascript +export * from "./counter"; +export * from "./methods"; +``` + +# methods.js + +```javascript +export { reset as resetCounter } from "./counter"; + +export const print = value => console.log(value); +``` + +# counter.js + +```javascript +export let value = 0; +export function increment() { + value++; +} +export function decrement() { + value--; +} +export function reset() { + value = 0; +} +``` + +# dist/output.js + +```javascript +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +/*!********************************!*\ + !*** ./example.js + 2 modules ***! + \********************************/ +/*! namespace exports */ +/*! export decrement [provided] [used in main] [missing usage info prevents renaming] -> ./counter.js .decrement */ +/*! export increment [provided] [used in main] [missing usage info prevents renaming] -> ./counter.js .increment */ +/*! export print [provided] [used in main] [missing usage info prevents renaming] -> ./methods.js .print */ +/*! export reset [provided] [used in main] [missing usage info prevents renaming] -> ./counter.js .reset */ +/*! export resetCounter [provided] [used in main] [missing usage info prevents renaming] -> ./counter.js .reset */ +/*! export value [provided] [used in main] [missing usage info prevents renaming] -> ./counter.js .value */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_exports__, __webpack_require__.d, __webpack_require__.r, __webpack_require__.* */ +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +;// ./counter.js +let value = 0; +function increment() { + value++; +} +function decrement() { + value--; +} +function counter_reset() { + value = 0; +} + +;// ./methods.js + + +const print = value => console.log(value); + +;// ./example.js + + + +export { decrement, increment, print, counter_reset as reset, counter_reset as resetCounter, value }; +``` + +# dist/output.js (production) + +```javascript +let n=0;function o(){n++}function t(){n--}function e(){n=0}const s=n=>console.log(n);export{t as decrement,o as increment,s as print,e as reset,e as resetCounter,n as value}; +``` + +# Info + +## Unoptimized + +``` +asset output.js 2.69 KiB [emitted] [javascript module] (name: main) +chunk (runtime: main) output.js (main) 302 bytes (javascript) 670 bytes (runtime) [entry] [rendered] + > ./example.js main + runtime modules 670 bytes 3 modules + ./example.js + 2 modules 302 bytes [built] [code generated] + [exports: decrement, increment, print, reset, resetCounter, value] + [used exports unknown] + entry ./example.js main + used as library export +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset output.js 174 bytes [emitted] [javascript module] [minimized] (name: main) +chunk (runtime: main) output.js (main) 302 bytes (javascript) 396 bytes (runtime) [entry] [rendered] + > ./example.js main + runtime modules 396 bytes 2 modules + ./example.js + 2 modules 302 bytes [built] [code generated] + [exports: decrement, increment, print, reset, resetCounter, value] + [all exports used] + entry ./example.js main + used as library export +webpack X.X.X compiled successfully +``` diff --git a/examples/module-library/build.js b/examples/module-library/build.js new file mode 100644 index 00000000000..41c29c9d169 --- /dev/null +++ b/examples/module-library/build.js @@ -0,0 +1 @@ +require("../build-common"); \ No newline at end of file diff --git a/examples/module-library/counter.js b/examples/module-library/counter.js new file mode 100644 index 00000000000..7009896e282 --- /dev/null +++ b/examples/module-library/counter.js @@ -0,0 +1,10 @@ +export let value = 0; +export function increment() { + value++; +} +export function decrement() { + value--; +} +export function reset() { + value = 0; +} diff --git a/examples/module-library/example.js b/examples/module-library/example.js new file mode 100644 index 00000000000..ef58a21ffa1 --- /dev/null +++ b/examples/module-library/example.js @@ -0,0 +1,2 @@ +export * from "./counter"; +export * from "./methods"; diff --git a/examples/module-library/methods.js b/examples/module-library/methods.js new file mode 100644 index 00000000000..4be8f10f704 --- /dev/null +++ b/examples/module-library/methods.js @@ -0,0 +1,3 @@ +export { reset as resetCounter } from "./counter"; + +export const print = value => console.log(value); diff --git a/examples/module-library/template.md b/examples/module-library/template.md new file mode 100644 index 00000000000..98d06e62ec9 --- /dev/null +++ b/examples/module-library/template.md @@ -0,0 +1,43 @@ +# example.js + +```javascript +_{{example.js}}_ +``` + +# methods.js + +```javascript +_{{methods.js}}_ +``` + +# counter.js + +```javascript +_{{counter.js}}_ +``` + +# dist/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# dist/output.js (production) + +```javascript +_{{production:dist/output.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/module-library/webpack.config.js b/examples/module-library/webpack.config.js new file mode 100644 index 00000000000..f73e384bb6a --- /dev/null +++ b/examples/module-library/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + output: { + module: true, + library: { + type: "module" + } + }, + optimization: { + concatenateModules: true + }, + experiments: { + outputModule: true + } +}; + +module.exports = config; diff --git a/examples/module-worker/README.md b/examples/module-worker/README.md new file mode 100644 index 00000000000..a11857c91f1 --- /dev/null +++ b/examples/module-worker/README.md @@ -0,0 +1,947 @@ +# example.js + +```javascript +document.body.innerHTML = ` +

+	
+ + +
+

Computing fibonacci without worker:

+ +

+	

Computing fibonacci with worker:

+ +

+`;
+
+const history = document.getElementById("history");
+const message = document.getElementById("message");
+const send = document.getElementById("send");
+const fib1 = document.getElementById("fib1");
+const output1 = document.getElementById("output1");
+const fib2 = document.getElementById("fib2");
+const output2 = document.getElementById("output2");
+
+/// CHAT with shared worker ///
+
+const chatWorker = new SharedWorker(
+	new URL("./chat-worker.js", import.meta.url),
+	{
+		name: "chat",
+		type: "module"
+	}
+);
+
+let historyTimeout;
+const scheduleUpdateHistory = () => {
+	clearTimeout(historyTimeout);
+	historyTimeout = setTimeout(() => {
+		chatWorker.port.postMessage({ type: "history" });
+	}, 1000);
+};
+scheduleUpdateHistory();
+
+const from = `User ${Math.floor(Math.random() * 10000)}`;
+
+send.addEventListener("click", e => {
+	chatWorker.port.postMessage({
+		type: "message",
+		content: message.value,
+		from
+	});
+	message.value = "";
+	message.focus();
+	e.preventDefault();
+});
+
+chatWorker.port.onmessage = event => {
+	const msg = event.data;
+	switch (msg.type) {
+		case "history":
+			history.innerText = msg.history.join("\n");
+			scheduleUpdateHistory();
+			break;
+	}
+};
+
+/// FIBONACCI without worker ///
+
+fib1.addEventListener("change", async () => {
+	try {
+		const value = parseInt(fib1.value, 10);
+		const { fibonacci } = await import("./fibonacci");
+		const result = fibonacci(value);
+		output1.innerText = `fib(${value}) = ${result}`;
+	} catch (e) {
+		output1.innerText = e.message;
+	}
+});
+
+/// FIBONACCI with worker ///
+
+const fibWorker = new Worker(new URL("./fib-worker.js", import.meta.url), {
+	name: "fibonacci",
+	type: "module"
+	/* webpackEntryOptions: { filename: "workers/[name].js" } */
+});
+
+fib2.addEventListener("change", () => {
+	try {
+		const value = parseInt(fib2.value, 10);
+		fibWorker.postMessage(`${value}`);
+	} catch (e) {
+		output2.innerText = e.message;
+	}
+});
+
+fibWorker.onmessage = event => {
+	output2.innerText = event.data;
+};
+```
+
+# fib-worker.js
+
+```javascript
+onmessage = async event => {
+	const { fibonacci } = await import("./fibonacci");
+	const value = JSON.parse(event.data);
+	postMessage(`fib(${value}) = ${fibonacci(value)}`);
+};
+```
+
+# fibonacci.js
+
+```javascript
+export function fibonacci(n) {
+	return n < 1 ? 0 : n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
+}
+```
+
+# chat-worker.js
+
+```javascript
+onconnect = function (e) {
+	for (const port of e.ports) {
+		port.onmessage = async event => {
+			const msg = event.data;
+			switch (msg.type) {
+				case "message":
+					const { add } = await import("./chat-module");
+					add(msg.content, msg.from);
+				// fallthrough
+				case "history":
+					const { history } = await import("./chat-module");
+					port.postMessage({
+						type: "history",
+						history
+					});
+					break;
+			}
+		};
+	}
+};
+```
+
+# chat-module.js
+
+```javascript
+export const history = [];
+
+export const add = (content, from) => {
+	if (history.length > 10) history.shift();
+	history.push(`${from}: ${content}`);
+};
+```
+
+# dist/main.js
+
+```javascript
+/******/ var __webpack_modules__ = ({});
+```
+
+
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames not based on template +/******/ if (chunkId === 721) return "workers/fibonacci.js"; +/******/ // return url for filenames based on template +/******/ return "" + (chunkId === 377 ? "chat" : chunkId) + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "/dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/import chunk loading */ +/******/ (() => { +/******/ __webpack_require__.b = new URL("./", import.meta.url); +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 792: 0 +/******/ }; +/******/ +/******/ var installChunk = (data) => { +/******/ var {__webpack_esm_ids__, __webpack_esm_modules__, __webpack_esm_runtime__} = data; +/******/ // add "modules" to the modules object, +/******/ // then flag all "ids" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ for(moduleId in __webpack_esm_modules__) { +/******/ if(__webpack_require__.o(__webpack_esm_modules__, moduleId)) { +/******/ __webpack_require__.m[moduleId] = __webpack_esm_modules__[moduleId]; +/******/ } +/******/ } +/******/ if(__webpack_esm_runtime__) __webpack_esm_runtime__(__webpack_require__); +/******/ for(;i < __webpack_esm_ids__.length; i++) { +/******/ chunkId = __webpack_esm_ids__[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[__webpack_esm_ids__[i]] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // import() chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[1]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = import(__webpack_require__.p + __webpack_require__.u(chunkId)).then(installChunk, (e) => { +/******/ if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined; +/******/ throw e; +/******/ }); +/******/ var promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))]) +/******/ promises.push(installedChunkData[1] = promise); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no external install chunk +/******/ +/******/ // no on chunks loaded +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.p, __webpack_require__.b, __webpack_require__.u, __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +document.body.innerHTML = ` +

+	
+ + +
+

Computing fibonacci without worker:

+ +

+	

Computing fibonacci with worker:

+ +

+`;
+
+const history = document.getElementById("history");
+const message = document.getElementById("message");
+const send = document.getElementById("send");
+const fib1 = document.getElementById("fib1");
+const output1 = document.getElementById("output1");
+const fib2 = document.getElementById("fib2");
+const output2 = document.getElementById("output2");
+
+/// CHAT with shared worker ///
+
+const chatWorker = new SharedWorker(
+	new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(377), __webpack_require__.b),
+	{
+		name: "chat",
+		type: "module"
+	}
+);
+
+let historyTimeout;
+const scheduleUpdateHistory = () => {
+	clearTimeout(historyTimeout);
+	historyTimeout = setTimeout(() => {
+		chatWorker.port.postMessage({ type: "history" });
+	}, 1000);
+};
+scheduleUpdateHistory();
+
+const from = `User ${Math.floor(Math.random() * 10000)}`;
+
+send.addEventListener("click", e => {
+	chatWorker.port.postMessage({
+		type: "message",
+		content: message.value,
+		from
+	});
+	message.value = "";
+	message.focus();
+	e.preventDefault();
+});
+
+chatWorker.port.onmessage = event => {
+	const msg = event.data;
+	switch (msg.type) {
+		case "history":
+			history.innerText = msg.history.join("\n");
+			scheduleUpdateHistory();
+			break;
+	}
+};
+
+/// FIBONACCI without worker ///
+
+fib1.addEventListener("change", async () => {
+	try {
+		const value = parseInt(fib1.value, 10);
+		const { fibonacci } = await __webpack_require__.e(/*! import() */ 129).then(__webpack_require__.bind(__webpack_require__, /*! ./fibonacci */ 3));
+		const result = fibonacci(value);
+		output1.innerText = `fib(${value}) = ${result}`;
+	} catch (e) {
+		output1.innerText = e.message;
+	}
+});
+
+/// FIBONACCI with worker ///
+
+const fibWorker = new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(721), __webpack_require__.b), {
+	name: "fibonacci",
+	type: "module"
+	/* webpackEntryOptions: { filename: "workers/[name].js" } */
+});
+
+fib2.addEventListener("change", () => {
+	try {
+		const value = parseInt(fib2.value, 10);
+		fibWorker.postMessage(`${value}`);
+	} catch (e) {
+		output2.innerText = e.message;
+	}
+});
+
+fibWorker.onmessage = event => {
+	output2.innerText = event.data;
+};
+```
+
+# dist/chat.js
+
+```javascript
+/******/ var __webpack_modules__ = ({});
+```
+
+
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "/dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/import chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 377: 0 +/******/ }; +/******/ +/******/ var installChunk = (data) => { +/******/ var {__webpack_esm_ids__, __webpack_esm_modules__, __webpack_esm_runtime__} = data; +/******/ // add "modules" to the modules object, +/******/ // then flag all "ids" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ for(moduleId in __webpack_esm_modules__) { +/******/ if(__webpack_require__.o(__webpack_esm_modules__, moduleId)) { +/******/ __webpack_require__.m[moduleId] = __webpack_esm_modules__[moduleId]; +/******/ } +/******/ } +/******/ if(__webpack_esm_runtime__) __webpack_esm_runtime__(__webpack_require__); +/******/ for(;i < __webpack_esm_ids__.length; i++) { +/******/ chunkId = __webpack_esm_ids__[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[__webpack_esm_ids__[i]] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // import() chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[1]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = import(__webpack_require__.p + __webpack_require__.u(chunkId)).then(installChunk, (e) => { +/******/ if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined; +/******/ throw e; +/******/ }); +/******/ var promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))]) +/******/ promises.push(installedChunkData[1] = promise); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no external install chunk +/******/ +/******/ // no on chunks loaded +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +/*!************************!*\ + !*** ./chat-worker.js ***! + \************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +onconnect = function (e) { + for (const port of e.ports) { + port.onmessage = async event => { + const msg = event.data; + switch (msg.type) { + case "message": + const { add } = await __webpack_require__.e(/*! import() */ 936).then(__webpack_require__.bind(__webpack_require__, /*! ./chat-module */ 4)); + add(msg.content, msg.from); + // fallthrough + case "history": + const { history } = await __webpack_require__.e(/*! import() */ 936).then(__webpack_require__.bind(__webpack_require__, /*! ./chat-module */ 4)); + port.postMessage({ + type: "history", + history + }); + break; + } + }; + } +}; +``` + +```javascript +var e,o,t={},r={};function s(e){var o=r[e];if(void 0!==o)return o.exports;var n=r[e]={exports:{}};return t[e](n,n.exports,s),n.exports}s.m=t,s.d=(e,o)=>{for(var t in o)s.o(o,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:o[t]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce((o,t)=>(s.f[t](e,o),o),[])),s.u=e=>e+".js",s.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),s.p="/dist/",e={377:0},o=o=>{var t,r,{__webpack_esm_ids__:n,__webpack_esm_modules__:a,__webpack_esm_runtime__:i}=o,c=0;for(t in a)s.o(a,t)&&(s.m[t]=a[t]);for(i&&i(s);c{var n=s.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[1]);else{var a=import(s.p+s.u(t)).then(o,o=>{throw 0!==e[t]&&(e[t]=void 0),o});a=Promise.race([a,new Promise(o=>n=e[t]=[o])]),r.push(n[1]=a)}},onconnect=function(e){for(const o of e.ports)o.onmessage=async e=>{const t=e.data;switch(t.type){case"message":const{add:e}=await s.e(936).then(s.bind(s,936));e(t.content,t.from);case"history":const{history:r}=await s.e(936).then(s.bind(s,936));o.postMessage({type:"history",history:r})}}}; +``` + +# dist/workers/fibonacci.js + +```javascript +/******/ var __webpack_modules__ = ({}); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "/dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/import chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 721: 0 +/******/ }; +/******/ +/******/ var installChunk = (data) => { +/******/ var {__webpack_esm_ids__, __webpack_esm_modules__, __webpack_esm_runtime__} = data; +/******/ // add "modules" to the modules object, +/******/ // then flag all "ids" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ for(moduleId in __webpack_esm_modules__) { +/******/ if(__webpack_require__.o(__webpack_esm_modules__, moduleId)) { +/******/ __webpack_require__.m[moduleId] = __webpack_esm_modules__[moduleId]; +/******/ } +/******/ } +/******/ if(__webpack_esm_runtime__) __webpack_esm_runtime__(__webpack_require__); +/******/ for(;i < __webpack_esm_ids__.length; i++) { +/******/ chunkId = __webpack_esm_ids__[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[__webpack_esm_ids__[i]] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // import() chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[1]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = import(__webpack_require__.p + __webpack_require__.u(chunkId)).then(installChunk, (e) => { +/******/ if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined; +/******/ throw e; +/******/ }); +/******/ var promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))]) +/******/ promises.push(installedChunkData[1] = promise); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no external install chunk +/******/ +/******/ // no on chunks loaded +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +/*!***********************!*\ + !*** ./fib-worker.js ***! + \***********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +onmessage = async event => { + const { fibonacci } = await __webpack_require__.e(/*! import() */ 129).then(__webpack_require__.bind(__webpack_require__, /*! ./fibonacci */ 3)); + const value = JSON.parse(event.data); + postMessage(`fib(${value}) = ${fibonacci(value)}`); +}; +``` + +```javascript +var e,r,o={},s={};function t(e){var r=s[e];if(void 0!==r)return r.exports;var a=s[e]={exports:{}};return o[e](a,a.exports,t),a.exports}t.m=o,t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce((r,o)=>(t.f[o](e,r),r),[])),t.u=e=>e+".js",t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.p="/dist/",e={721:0},r=r=>{var o,s,{__webpack_esm_ids__:a,__webpack_esm_modules__:i,__webpack_esm_runtime__:n}=r,p=0;for(o in i)t.o(i,o)&&(t.m[o]=i[o]);for(n&&n(t);p{var a=t.o(e,o)?e[o]:void 0;if(0!==a)if(a)s.push(a[1]);else{var i=import(t.p+t.u(o)).then(r,r=>{throw 0!==e[o]&&(e[o]=void 0),r});i=Promise.race([i,new Promise(r=>a=e[o]=[r])]),s.push(a[1]=i)}},onmessage=async e=>{const{fibonacci:r}=await t.e(129).then(t.bind(t,129)),o=JSON.parse(e.data);postMessage(`fib(${o}) = ${r(o)}`)}; +``` + +# dist/129.js + +```javascript +export const __webpack_esm_id__ = 129; +export const __webpack_esm_ids__ = [129]; +export const __webpack_esm_modules__ = { + +/***/ 3 +/*!**********************!*\ + !*** ./fibonacci.js ***! + \**********************/ +/*! namespace exports */ +/*! export fibonacci [provided] [no usage info] [missing usage info prevents renaming] */ +/*! other exports [not provided] [no usage info] */ +/*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ fibonacci: () => (/* binding */ fibonacci) +/* harmony export */ }); +function fibonacci(n) { + return n < 1 ? 0 : n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2); +} + + +/***/ } + +}; +``` + +# Info + +## Unoptimized + +``` +asset main.js 9.08 KiB [emitted] [javascript module] (name: main) +asset chat.js 6.99 KiB [emitted] [javascript module] (name: chat) +asset workers/fibonacci.js 6.63 KiB [emitted] [javascript module] (name: fibonacci) +asset 936.js 1.04 KiB [emitted] [javascript module] +asset 129.js 881 bytes [emitted] [javascript module] +chunk (runtime: 9a81d90cfd0dfd13d748, main) 129.js 103 bytes [rendered] + > ./fibonacci ./example.js 70:30-51 + > ./fibonacci ./fib-worker.js 2:29-50 + ./fibonacci.js 103 bytes [built] [code generated] + [exports: fibonacci] + [used exports unknown] + import() ./fibonacci ./example.js 70:30-51 + import() ./fibonacci ./fib-worker.js 2:29-50 +chunk (runtime: 1fad8bf8de78b0a77bfd) chat.js (chat) 442 bytes (javascript) 3.11 KiB (runtime) [entry] [rendered] + > ./example.js 25:19-31:1 + runtime modules 3.11 KiB 7 modules + ./chat-worker.js 442 bytes [built] [code generated] + [used exports unknown] + new Worker() ./chat-worker.js ./example.js 25:19-31:1 +chunk (runtime: 9a81d90cfd0dfd13d748) workers/fibonacci.js (fibonacci) 176 bytes (javascript) 3.11 KiB (runtime) [entry] [rendered] + > ./example.js 80:18-84:2 + runtime modules 3.11 KiB 7 modules + ./fib-worker.js 176 bytes [built] [code generated] + [used exports unknown] + new Worker() ./fib-worker.js ./example.js 80:18-84:2 +chunk (runtime: main) main.js (main) 2.25 KiB (javascript) 3.28 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 3.28 KiB 7 modules + ./example.js 2.25 KiB [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: 1fad8bf8de78b0a77bfd) 936.js 152 bytes [rendered] + > ./chat-module ./chat-worker.js 11:31-54 + > ./chat-module ./chat-worker.js 7:27-50 + ./chat-module.js 152 bytes [built] [code generated] + [exports: add, history] + [used exports unknown] + import() ./chat-module ./chat-worker.js 7:27-50 + import() ./chat-module ./chat-worker.js 11:31-54 +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset main.js 2.36 KiB [emitted] [javascript module] [minimized] (name: main) +asset chat.js 1.08 KiB [emitted] [javascript module] [minimized] (name: chat) +asset workers/fibonacci.js 951 bytes [emitted] [javascript module] [minimized] (name: fibonacci) +asset 936.js 225 bytes [emitted] [javascript module] [minimized] +asset 129.js 199 bytes [emitted] [javascript module] [minimized] +chunk (runtime: 9a81d90cfd0dfd13d748, main) 129.js 103 bytes [rendered] + > ./fibonacci ./fib-worker.js 2:29-50 + > ./fibonacci ./example.js 70:30-51 + ./fibonacci.js 103 bytes [built] [code generated] + [exports: fibonacci] + [all exports used] + import() ./fibonacci ./example.js 70:30-51 + import() ./fibonacci ./fib-worker.js 2:29-50 +chunk (runtime: 1fad8bf8de78b0a77bfd) chat.js (chat) 442 bytes (javascript) 2.84 KiB (runtime) [entry] [rendered] + > ./example.js 25:19-31:1 + runtime modules 2.84 KiB 6 modules + ./chat-worker.js 442 bytes [built] [code generated] + [no exports used] + new Worker() ./chat-worker.js ./example.js 25:19-31:1 +chunk (runtime: 9a81d90cfd0dfd13d748) workers/fibonacci.js (fibonacci) 176 bytes (javascript) 2.84 KiB (runtime) [entry] [rendered] + > ./example.js 80:18-84:2 + runtime modules 2.84 KiB 6 modules + ./fib-worker.js 176 bytes [built] [code generated] + [no exports used] + new Worker() ./fib-worker.js ./example.js 80:18-84:2 +chunk (runtime: main) main.js (main) 2.25 KiB (javascript) 3.01 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 3.01 KiB 6 modules + ./example.js 2.25 KiB [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: 1fad8bf8de78b0a77bfd) 936.js 152 bytes [rendered] + > ./chat-module ./chat-worker.js 11:31-54 + > ./chat-module ./chat-worker.js 7:27-50 + ./chat-module.js 152 bytes [built] [code generated] + [exports: add, history] + [all exports used] + import() ./chat-module ./chat-worker.js 7:27-50 + import() ./chat-module ./chat-worker.js 11:31-54 +webpack X.X.X compiled successfully +``` diff --git a/examples/module-worker/build.js b/examples/module-worker/build.js new file mode 100644 index 00000000000..5768b058787 --- /dev/null +++ b/examples/module-worker/build.js @@ -0,0 +1,3 @@ +global.NO_TARGET_ARGS = true; +global.NO_PUBLIC_PATH = true; +require("../build-common"); diff --git a/examples/module-worker/chat-module.js b/examples/module-worker/chat-module.js new file mode 100644 index 00000000000..716a104a9dc --- /dev/null +++ b/examples/module-worker/chat-module.js @@ -0,0 +1,6 @@ +export const history = []; + +export const add = (content, from) => { + if (history.length > 10) history.shift(); + history.push(`${from}: ${content}`); +}; diff --git a/examples/module-worker/chat-worker.js b/examples/module-worker/chat-worker.js new file mode 100644 index 00000000000..1a8bcb81ea0 --- /dev/null +++ b/examples/module-worker/chat-worker.js @@ -0,0 +1,20 @@ +onconnect = function (e) { + for (const port of e.ports) { + port.onmessage = async event => { + const msg = event.data; + switch (msg.type) { + case "message": + const { add } = await import("./chat-module"); + add(msg.content, msg.from); + // fallthrough + case "history": + const { history } = await import("./chat-module"); + port.postMessage({ + type: "history", + history + }); + break; + } + }; + } +}; diff --git a/examples/module-worker/example.js b/examples/module-worker/example.js new file mode 100644 index 00000000000..fcbe23f092f --- /dev/null +++ b/examples/module-worker/example.js @@ -0,0 +1,97 @@ +document.body.innerHTML = ` +

+	
+ + +
+

Computing fibonacci without worker:

+ +

+	

Computing fibonacci with worker:

+ +

+`;
+
+const history = document.getElementById("history");
+const message = document.getElementById("message");
+const send = document.getElementById("send");
+const fib1 = document.getElementById("fib1");
+const output1 = document.getElementById("output1");
+const fib2 = document.getElementById("fib2");
+const output2 = document.getElementById("output2");
+
+/// CHAT with shared worker ///
+
+const chatWorker = new SharedWorker(
+	new URL("./chat-worker.js", import.meta.url),
+	{
+		name: "chat",
+		type: "module"
+	}
+);
+
+let historyTimeout;
+const scheduleUpdateHistory = () => {
+	clearTimeout(historyTimeout);
+	historyTimeout = setTimeout(() => {
+		chatWorker.port.postMessage({ type: "history" });
+	}, 1000);
+};
+scheduleUpdateHistory();
+
+const from = `User ${Math.floor(Math.random() * 10000)}`;
+
+send.addEventListener("click", e => {
+	chatWorker.port.postMessage({
+		type: "message",
+		content: message.value,
+		from
+	});
+	message.value = "";
+	message.focus();
+	e.preventDefault();
+});
+
+chatWorker.port.onmessage = event => {
+	const msg = event.data;
+	switch (msg.type) {
+		case "history":
+			history.innerText = msg.history.join("\n");
+			scheduleUpdateHistory();
+			break;
+	}
+};
+
+/// FIBONACCI without worker ///
+
+fib1.addEventListener("change", async () => {
+	try {
+		const value = parseInt(fib1.value, 10);
+		const { fibonacci } = await import("./fibonacci");
+		const result = fibonacci(value);
+		output1.innerText = `fib(${value}) = ${result}`;
+	} catch (e) {
+		output1.innerText = e.message;
+	}
+});
+
+/// FIBONACCI with worker ///
+
+const fibWorker = new Worker(new URL("./fib-worker.js", import.meta.url), {
+	name: "fibonacci",
+	type: "module"
+	/* webpackEntryOptions: { filename: "workers/[name].js" } */
+});
+
+fib2.addEventListener("change", () => {
+	try {
+		const value = parseInt(fib2.value, 10);
+		fibWorker.postMessage(`${value}`);
+	} catch (e) {
+		output2.innerText = e.message;
+	}
+});
+
+fibWorker.onmessage = event => {
+	output2.innerText = event.data;
+};
diff --git a/examples/module-worker/fib-worker.js b/examples/module-worker/fib-worker.js
new file mode 100644
index 00000000000..42efa83cf4e
--- /dev/null
+++ b/examples/module-worker/fib-worker.js
@@ -0,0 +1,5 @@
+onmessage = async event => {
+	const { fibonacci } = await import("./fibonacci");
+	const value = JSON.parse(event.data);
+	postMessage(`fib(${value}) = ${fibonacci(value)}`);
+};
diff --git a/examples/module-worker/fibonacci.js b/examples/module-worker/fibonacci.js
new file mode 100644
index 00000000000..282fcec2fca
--- /dev/null
+++ b/examples/module-worker/fibonacci.js
@@ -0,0 +1,3 @@
+export function fibonacci(n) {
+	return n < 1 ? 0 : n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
+}
diff --git a/examples/module-worker/index.html b/examples/module-worker/index.html
new file mode 100644
index 00000000000..e3b460bdf15
--- /dev/null
+++ b/examples/module-worker/index.html
@@ -0,0 +1,10 @@
+
+
+	
+		
+		Worker example
+	
+	
+		
+	
+
diff --git a/examples/module-worker/template.md b/examples/module-worker/template.md
new file mode 100644
index 00000000000..6a93ddfd9b5
--- /dev/null
+++ b/examples/module-worker/template.md
@@ -0,0 +1,75 @@
+# example.js
+
+```javascript
+_{{example.js}}_
+```
+
+# fib-worker.js
+
+```javascript
+_{{fib-worker.js}}_
+```
+
+# fibonacci.js
+
+```javascript
+_{{fibonacci.js}}_
+```
+
+# chat-worker.js
+
+```javascript
+_{{chat-worker.js}}_
+```
+
+# chat-module.js
+
+```javascript
+_{{chat-module.js}}_
+```
+
+# dist/main.js
+
+```javascript
+_{{dist/main.js}}_
+```
+
+# dist/chat.js
+
+```javascript
+_{{dist/chat.js}}_
+```
+
+```javascript
+_{{production:dist/chat.js}}_
+```
+
+# dist/workers/fibonacci.js
+
+```javascript
+_{{dist/workers/fibonacci.js}}_
+```
+
+```javascript
+_{{production:dist/workers/fibonacci.js}}_
+```
+
+# dist/129.js
+
+```javascript
+_{{dist/129.js}}_
+```
+
+# Info
+
+## Unoptimized
+
+```
+_{{stdout}}_
+```
+
+## Production mode
+
+```
+_{{production:stdout}}_
+```
diff --git a/examples/module-worker/webpack.config.js b/examples/module-worker/webpack.config.js
new file mode 100644
index 00000000000..98d1091ca0c
--- /dev/null
+++ b/examples/module-worker/webpack.config.js
@@ -0,0 +1,23 @@
+"use strict";
+
+const path = require("path");
+
+/** @type {import("webpack").Configuration} */
+const config = {
+	entry: "./example.js",
+	output: {
+		path: path.join(__dirname, "dist"),
+		filename: "[name].js",
+		chunkFilename: "[name].js",
+		publicPath: "/dist/"
+	},
+	optimization: {
+		chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only)
+	},
+	target: "browserslist: last 2 Chrome versions",
+	experiments: {
+		outputModule: true
+	}
+};
+
+module.exports = config;
diff --git a/examples/module/README.md b/examples/module/README.md
new file mode 100644
index 00000000000..4ce7e7b946e
--- /dev/null
+++ b/examples/module/README.md
@@ -0,0 +1,152 @@
+# example.js
+
+```javascript
+import { increment as inc, value } from "./counter";
+import { resetCounter, print } from "./methods";
+print(value);
+inc();
+inc();
+inc();
+print(value);
+resetCounter();
+print(value);
+
+export { inc, print };
+```
+
+# methods.js
+
+```javascript
+export { reset as resetCounter } from "./counter";
+
+export const print = value => console.log(value);
+```
+
+# counter.js
+
+```javascript
+export let value = 0;
+export function increment() {
+	value++;
+}
+export function decrement() {
+	value--;
+}
+export function reset() {
+	value = 0;
+}
+```
+
+# dist/output.js
+
+```javascript
+/******/ // The require scope
+/******/ var __webpack_require__ = {};
+/******/ 
+```
+
+
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +/*!********************************!*\ + !*** ./example.js + 2 modules ***! + \********************************/ +/*! namespace exports */ +/*! export inc [provided] [used in main] [could be renamed] -> ./counter.js .increment */ +/*! export print [provided] [used in main] [could be renamed] -> ./methods.js .print */ +/*! runtime requirements: __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ + +;// ./counter.js +let value = 0; +function increment() { + value++; +} +function decrement() { + value--; +} +function counter_reset() { + value = 0; +} + +;// ./methods.js + + +const print = value => console.log(value); + +;// ./example.js + + +print(value); +increment(); +increment(); +increment(); +print(value); +counter_reset(); +print(value); + + + +export { increment as inc, print }; +``` + +# dist/output.js (production) + +```javascript +let o=0;function n(){o++}const c=o=>console.log(o);c(o),n(),n(),n(),c(o),o=0,c(o);export{n as inc,c as print}; +``` + +# Info + +## Unoptimized + +``` +asset output.js 1.65 KiB [emitted] [javascript module] (name: main) +chunk (runtime: main) output.js (main) 453 bytes (javascript) 396 bytes (runtime) [entry] [rendered] + > ./example.js main + runtime modules 396 bytes 2 modules + ./example.js + 2 modules 453 bytes [built] [code generated] + [exports: inc, print] + [all exports used] + entry ./example.js main + used as library export +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset output.js 110 bytes [emitted] [javascript module] [minimized] (name: main) +chunk (runtime: main) output.js (main) 453 bytes (javascript) 396 bytes (runtime) [entry] [rendered] + > ./example.js main + runtime modules 396 bytes 2 modules + ./example.js + 2 modules 453 bytes [built] [code generated] + [exports: inc, print] + [all exports used] + entry ./example.js main + used as library export +webpack X.X.X compiled successfully +``` diff --git a/examples/module/build.js b/examples/module/build.js new file mode 100644 index 00000000000..41c29c9d169 --- /dev/null +++ b/examples/module/build.js @@ -0,0 +1 @@ +require("../build-common"); \ No newline at end of file diff --git a/examples/module/counter.js b/examples/module/counter.js new file mode 100644 index 00000000000..7009896e282 --- /dev/null +++ b/examples/module/counter.js @@ -0,0 +1,10 @@ +export let value = 0; +export function increment() { + value++; +} +export function decrement() { + value--; +} +export function reset() { + value = 0; +} diff --git a/examples/module/example.js b/examples/module/example.js new file mode 100644 index 00000000000..29e215a8009 --- /dev/null +++ b/examples/module/example.js @@ -0,0 +1,11 @@ +import { increment as inc, value } from "./counter"; +import { resetCounter, print } from "./methods"; +print(value); +inc(); +inc(); +inc(); +print(value); +resetCounter(); +print(value); + +export { inc, print }; diff --git a/examples/module/methods.js b/examples/module/methods.js new file mode 100644 index 00000000000..4be8f10f704 --- /dev/null +++ b/examples/module/methods.js @@ -0,0 +1,3 @@ +export { reset as resetCounter } from "./counter"; + +export const print = value => console.log(value); diff --git a/examples/module/template.md b/examples/module/template.md new file mode 100644 index 00000000000..98d06e62ec9 --- /dev/null +++ b/examples/module/template.md @@ -0,0 +1,43 @@ +# example.js + +```javascript +_{{example.js}}_ +``` + +# methods.js + +```javascript +_{{methods.js}}_ +``` + +# counter.js + +```javascript +_{{counter.js}}_ +``` + +# dist/output.js + +```javascript +_{{dist/output.js}}_ +``` + +# dist/output.js (production) + +```javascript +_{{production:dist/output.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/module/webpack.config.js b/examples/module/webpack.config.js new file mode 100644 index 00000000000..38de9e9ad7e --- /dev/null +++ b/examples/module/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + output: { + module: true, + library: { + type: "module" + } + }, + optimization: { + usedExports: true, + concatenateModules: true + }, + experiments: { + outputModule: true + } +}; + +module.exports = config; diff --git a/examples/multi-compiler/README.md b/examples/multi-compiler/README.md index 1a84eb892fd..ff7c900dc45 100644 --- a/examples/multi-compiler/README.md +++ b/examples/multi-compiler/README.md @@ -1,7 +1,6 @@ - # example.js -``` javascript +```javascript if(ENV === "mobile") { require("./mobile-stuff"); } @@ -10,13 +9,17 @@ console.log("Running " + ENV + " build"); # webpack.config.js -``` javascript -var path = require("path"); -var webpack = require("../../"); -module.exports = [ +```javascript +"use strict"; + +const path = require("path"); +const webpack = require("../../"); + +/** @type {import("webpack").Configuration[]} */ +const config = [ { name: "mobile", - // mode: "development || "production", + // mode: "development" || "production", entry: "./example", output: { path: path.join(__dirname, "dist"), @@ -31,7 +34,7 @@ module.exports = [ { name: "desktop", - // mode: "development || "production", + // mode: "development" || "production", entry: "./example", output: { path: path.join(__dirname, "dist"), @@ -44,203 +47,101 @@ module.exports = [ ] } ]; -``` - -# dist/desktop.js - -
/******/ (function(modules) { /* webpackBootstrap */ }) -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ +module.exports = config; ``` -
+# dist/desktop.js -``` javascript -/******/ ([ -/* 0 */ +```javascript +/******/ (() => { // webpackBootstrap /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -if(false) {} +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +if(false) // removed by dead control flow +{} console.log("Running " + "desktop" + " build"); +/******/ })() +; +``` + +# dist/mobile.js + +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!*************************!*\ + !*** ./mobile-stuff.js ***! + \*************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { + +// mobile only stuff /***/ }) -/******/ ]); +/******/ ]); ``` -# dist/mobile.js +
/* webpack runtime code */ -``` javascript -/******/ (function(modules) { // webpackBootstrap +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) +/******/ /************************************************************************/ -/******/ ([ -/* 0 */ +``` + +
+ +``` js +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__ */ if(true) { __webpack_require__(/*! ./mobile-stuff */ 1); } console.log("Running " + "mobile" + " build"); +})(); -/***/ }), -/* 1 */ -/*!*************************!*\ - !*** ./mobile-stuff.js ***! - \*************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// mobile only stuff - -/***/ }) -/******/ ]); +/******/ })() +; ``` # Info @@ -248,53 +149,45 @@ console.log("Running " + "mobile" + " build"); ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 -Child mobile: - Hash: 0a1b2c3d4e5f6a7b8c9d - Asset Size Chunks Chunk Names - mobile.js 3.04 KiB 0 [emitted] main - Entrypoint main = mobile.js - chunk {0} mobile.js (main) 117 bytes [entry] [rendered] - > ./example main - [0] ./example.js 97 bytes {0} [built] - single entry ./example main - [1] ./mobile-stuff.js 20 bytes {0} [built] - cjs require ./mobile-stuff [0] ./example.js 2:1-26 -Child desktop: - Hash: 0a1b2c3d4e5f6a7b8c9d - Asset Size Chunks Chunk Names - desktop.js 2.8 KiB 0 [emitted] main - Entrypoint main = desktop.js - chunk {0} desktop.js (main) 97 bytes [entry] [rendered] - > ./example main - [0] ./example.js 97 bytes {0} [built] - single entry ./example main +mobile: + asset mobile.js 1.96 KiB [emitted] (name: main) + chunk (runtime: main) mobile.js (main) 114 bytes [entry] [rendered] + > ./example main + dependent modules 20 bytes [dependent] 1 module + ./example.js 94 bytes [built] [code generated] + [used exports unknown] + entry ./example main + mobile (webpack X.X.X) compiled successfully + +desktop: + asset desktop.js 294 bytes [emitted] (name: main) + chunk (runtime: main) desktop.js (main) 94 bytes [entry] [rendered] + > ./example main + ./example.js 94 bytes [built] [code generated] + [used exports unknown] + entry ./example main + desktop (webpack X.X.X) compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 -Child mobile: - Hash: 0a1b2c3d4e5f6a7b8c9d - Asset Size Chunks Chunk Names - mobile.js 608 bytes 0 [emitted] main - Entrypoint main = mobile.js - chunk {0} mobile.js (main) 117 bytes [entry] [rendered] - > ./example main - [0] ./mobile-stuff.js 20 bytes {0} [built] - cjs require ./mobile-stuff [1] ./example.js 2:1-26 - [1] ./example.js 97 bytes {0} [built] - single entry ./example main -Child desktop: - Hash: 0a1b2c3d4e5f6a7b8c9d - Asset Size Chunks Chunk Names - desktop.js 588 bytes 0 [emitted] main - Entrypoint main = desktop.js - chunk {0} desktop.js (main) 97 bytes [entry] [rendered] - > ./example main - [0] ./example.js 97 bytes {0} [built] - single entry ./example main -``` \ No newline at end of file +mobile: + asset mobile.js 190 bytes [emitted] [minimized] (name: main) + chunk (runtime: main) mobile.js (main) 114 bytes [entry] [rendered] + > ./example main + dependent modules 20 bytes [dependent] 1 module + ./example.js 94 bytes [built] [code generated] + [no exports used] + entry ./example main + mobile (webpack X.X.X) compiled successfully + +desktop: + asset desktop.js 37 bytes [emitted] [minimized] (name: main) + chunk (runtime: main) desktop.js (main) 94 bytes [entry] [rendered] + > ./example main + ./example.js 94 bytes [built] [code generated] + [no exports used] + entry ./example main + desktop (webpack X.X.X) compiled successfully +``` diff --git a/examples/multi-compiler/template.md b/examples/multi-compiler/template.md index f1d65349f43..bcd632cf46e 100644 --- a/examples/multi-compiler/template.md +++ b/examples/multi-compiler/template.md @@ -1,26 +1,25 @@ - # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` # webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # dist/desktop.js -``` javascript -{{dist/desktop.js}} +```javascript +_{{dist/desktop.js}}_ ``` # dist/mobile.js -``` javascript -{{dist/mobile.js}} +```javascript +_{{dist/mobile.js}}_ ``` # Info @@ -28,11 +27,11 @@ ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} -``` \ No newline at end of file +_{{production:stdout}}_ +``` diff --git a/examples/multi-compiler/webpack.config.js b/examples/multi-compiler/webpack.config.js index 4fc3088639a..87fe4e0c2e4 100644 --- a/examples/multi-compiler/webpack.config.js +++ b/examples/multi-compiler/webpack.config.js @@ -1,9 +1,13 @@ -var path = require("path"); -var webpack = require("../../"); -module.exports = [ +"use strict"; + +const path = require("path"); +const webpack = require("../../"); + +/** @type {import("webpack").Configuration[]} */ +const config = [ { name: "mobile", - // mode: "development || "production", + // mode: "development" || "production", entry: "./example", output: { path: path.join(__dirname, "dist"), @@ -18,7 +22,7 @@ module.exports = [ { name: "desktop", - // mode: "development || "production", + // mode: "development" || "production", entry: "./example", output: { path: path.join(__dirname, "dist"), @@ -31,3 +35,5 @@ module.exports = [ ] } ]; + +module.exports = config; diff --git a/examples/multi-part-library/README.md b/examples/multi-part-library/README.md index 9570e6dfb24..027ad4283c9 100644 --- a/examples/multi-part-library/README.md +++ b/examples/multi-part-library/README.md @@ -1,23 +1,27 @@ -This example demonstrates how to build a complex library with webpack. The library consist of multiple parts that are usable on its own and together. +This example demonstrates how to build a complex library with webpack. The library consists of multiple parts that are usable on its own and together. -When using this library with script tags it exports itself to the namespace `MyLibrary` and each part to a property in this namespace (`MyLibrary.alpha` and `MyLibrary.beta`). When consuming the library with CommonsJs or AMD it just export each part. +When using this library with script tags it exports itself to the namespace `MyLibrary` and each part to a property in this namespace (`MyLibrary.alpha` and `MyLibrary.beta`). When consuming the library with CommonsJS or AMD it just exports each part. -We are using multiple entry points (`entry` option) to build every part of the library as separate output file. The `output.filename` option contains `[name]` to give each output file a different name. +We are using multiple entry points (`entry` option) to build every part of the library as a separate output file. The `output.filename` option contains `[name]` to give each output file a different name. -We are using the `libraryTarget` option to generate a UMD ([Universal Module Definition](https://github.com/umdjs/umd)) module that is consumable in CommonsJs, AMD and with script tags. The `library` option defines the namespace. We are using `[name]` in the `library` option to give every entry a different namespace. +We are using the `libraryTarget` option to generate a UMD ([Universal Module Definition](https://github.com/umdjs/umd)) module that is consumable in CommonsJS, AMD and with script tags. The `library` option defines the namespace. We are using `[name]` in the `library` option to give every entry a different namespace. You can see that webpack automatically wraps your module so that it is consumable in every environment. All you need is this simple config. Note: You can also use the `library` and `libraryTarget` options without multiple entry points. Then you don't need `[name]`. -Note: When your library has dependencies that should not be included in the compiled version, you can use the `externals` option. See [externals example](https://github.com/webpack/webpack/tree/master/examples/externals). +Note: When your library has dependencies that should not be included in the compiled version, you can use the `externals` option. See [externals example](https://github.com/webpack/webpack/tree/main/examples/externals). # webpack.config.js -``` javascript -var path = require("path"); -module.exports = { - // mode: "development || "production", +```javascript +"use strict"; + +const path = require("path"); + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { alpha: "./alpha", beta: "./beta" @@ -29,213 +33,172 @@ module.exports = { libraryTarget: "umd" } }; + +module.exports = config; ``` # dist/MyLibrary.alpha.js -``` javascript +```javascript (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') - exports["alpha"] = factory(); + exports["MyLibrary"] = factory(); else root["MyLibrary"] = root["MyLibrary"] || {}, root["MyLibrary"]["alpha"] = factory(); -})(window, function() { +})(self, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */ +/*!******************!*\ + !*** ./alpha.js ***! + \******************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = "alpha"; + +/***/ }) +/******/ ]); ``` -
return /******/ (function(modules) { /* webpackBootstrap */ }) + +
/* webpack runtime code */ ``` js -return /******/ (function(modules) { // webpackBootstrap +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) +/******/ /************************************************************************/ ```
``` js -/******/ ([ -/* 0 */ -/*!******************!*\ - !*** ./alpha.js ***! - \******************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = "alpha"; - -/***/ }) -/******/ ]); +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(0); +/******/ +/******/ return __webpack_exports__; +/******/ })() +; }); ``` # dist/MyLibrary.beta.js -``` javascript +```javascript (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') - exports["beta"] = factory(); + exports["MyLibrary"] = factory(); else root["MyLibrary"] = root["MyLibrary"] || {}, root["MyLibrary"]["beta"] = factory(); -})(window, function() { -return /******/ (function(modules) { // webpackBootstrap +})(self, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!*****************!*\ + !*** ./beta.js ***! + \*****************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { + +module.exports = "beta"; + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 1); -/******/ }) +/******/ /************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */ -/*!*****************!*\ - !*** ./beta.js ***! - \*****************/ -/*! no static exports found */ -/***/ (function(module, exports) { +``` -module.exports = "beta"; +
-/***/ }) -/******/ ]); +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(1); +/******/ +/******/ return __webpack_exports__; +/******/ })() +; }); ``` @@ -244,39 +207,43 @@ module.exports = "beta"; ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -MyLibrary.alpha.js 3.16 KiB 0 [emitted] alpha - MyLibrary.beta.js 3.16 KiB 1 [emitted] beta -Entrypoint alpha = MyLibrary.alpha.js -Entrypoint beta = MyLibrary.beta.js -chunk {0} MyLibrary.alpha.js (alpha) 25 bytes [entry] [rendered] - > ./alpha alpha - [0] ./alpha.js 25 bytes {0} [built] - single entry ./alpha alpha -chunk {1} MyLibrary.beta.js (beta) 24 bytes [entry] [rendered] - > ./beta beta - [1] ./beta.js 24 bytes {1} [built] - single entry ./beta beta +asset MyLibrary.beta.js 2.31 KiB [emitted] (name: beta) +asset MyLibrary.alpha.js 2.31 KiB [emitted] (name: alpha) +chunk (runtime: alpha) MyLibrary.alpha.js (alpha) 25 bytes [entry] [rendered] + > ./alpha alpha + ./alpha.js 25 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./alpha.js 1:0-14 + entry ./alpha alpha + used as library export +chunk (runtime: beta) MyLibrary.beta.js (beta) 24 bytes [entry] [rendered] + > ./beta beta + ./beta.js 24 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./beta.js 1:0-14 + entry ./beta beta + used as library export +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names - MyLibrary.beta.js 828 bytes 0 [emitted] beta -MyLibrary.alpha.js 832 bytes 1 [emitted] alpha -Entrypoint alpha = MyLibrary.alpha.js -Entrypoint beta = MyLibrary.beta.js -chunk {0} MyLibrary.beta.js (beta) 24 bytes [entry] [rendered] - > ./beta beta - [0] ./beta.js 24 bytes {0} [built] - single entry ./beta beta -chunk {1} MyLibrary.alpha.js (alpha) 25 bytes [entry] [rendered] - > ./alpha alpha - [1] ./alpha.js 25 bytes {1} [built] - single entry ./alpha alpha +asset MyLibrary.alpha.js 420 bytes [emitted] [minimized] (name: alpha) +asset MyLibrary.beta.js 418 bytes [emitted] [minimized] (name: beta) +chunk (runtime: beta) MyLibrary.beta.js (beta) 24 bytes [entry] [rendered] + > ./beta beta + ./beta.js 24 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./beta.js 1:0-14 + entry ./beta beta + used as library export +chunk (runtime: alpha) MyLibrary.alpha.js (alpha) 25 bytes [entry] [rendered] + > ./alpha alpha + ./alpha.js 25 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./alpha.js 1:0-14 + entry ./alpha alpha + used as library export +webpack X.X.X compiled successfully ``` diff --git a/examples/multi-part-library/template.md b/examples/multi-part-library/template.md index 900b16dabf6..6237b338ecb 100644 --- a/examples/multi-part-library/template.md +++ b/examples/multi-part-library/template.md @@ -1,33 +1,33 @@ -This example demonstrates how to build a complex library with webpack. The library consist of multiple parts that are usable on its own and together. +This example demonstrates how to build a complex library with webpack. The library consists of multiple parts that are usable on its own and together. -When using this library with script tags it exports itself to the namespace `MyLibrary` and each part to a property in this namespace (`MyLibrary.alpha` and `MyLibrary.beta`). When consuming the library with CommonsJs or AMD it just export each part. +When using this library with script tags it exports itself to the namespace `MyLibrary` and each part to a property in this namespace (`MyLibrary.alpha` and `MyLibrary.beta`). When consuming the library with CommonsJS or AMD it just exports each part. -We are using multiple entry points (`entry` option) to build every part of the library as separate output file. The `output.filename` option contains `[name]` to give each output file a different name. +We are using multiple entry points (`entry` option) to build every part of the library as a separate output file. The `output.filename` option contains `[name]` to give each output file a different name. -We are using the `libraryTarget` option to generate a UMD ([Universal Module Definition](https://github.com/umdjs/umd)) module that is consumable in CommonsJs, AMD and with script tags. The `library` option defines the namespace. We are using `[name]` in the `library` option to give every entry a different namespace. +We are using the `libraryTarget` option to generate a UMD ([Universal Module Definition](https://github.com/umdjs/umd)) module that is consumable in CommonsJS, AMD and with script tags. The `library` option defines the namespace. We are using `[name]` in the `library` option to give every entry a different namespace. You can see that webpack automatically wraps your module so that it is consumable in every environment. All you need is this simple config. Note: You can also use the `library` and `libraryTarget` options without multiple entry points. Then you don't need `[name]`. -Note: When your library has dependencies that should not be included in the compiled version, you can use the `externals` option. See [externals example](https://github.com/webpack/webpack/tree/master/examples/externals). +Note: When your library has dependencies that should not be included in the compiled version, you can use the `externals` option. See [externals example](https://github.com/webpack/webpack/tree/main/examples/externals). # webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # dist/MyLibrary.alpha.js -``` javascript -{{dist/MyLibrary.alpha.js}} +```javascript +_{{dist/MyLibrary.alpha.js}}_ ``` # dist/MyLibrary.beta.js -``` javascript -{{dist/MyLibrary.beta.js}} +```javascript +_{{dist/MyLibrary.beta.js}}_ ``` # Info @@ -35,11 +35,11 @@ Note: When your library has dependencies that should not be included in the comp ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/multi-part-library/webpack.config.js b/examples/multi-part-library/webpack.config.js index f79be11fe71..75888588ac3 100644 --- a/examples/multi-part-library/webpack.config.js +++ b/examples/multi-part-library/webpack.config.js @@ -1,6 +1,10 @@ -var path = require("path"); -module.exports = { - // mode: "development || "production", +"use strict"; + +const path = require("path"); + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { alpha: "./alpha", beta: "./beta" @@ -12,3 +16,5 @@ module.exports = { libraryTarget: "umd" } }; + +module.exports = config; diff --git a/examples/multiple-entry-points/README.md b/examples/multiple-entry-points/README.md index a3c2f0b930d..db72048975b 100644 --- a/examples/multiple-entry-points/README.md +++ b/examples/multiple-entry-points/README.md @@ -1,6 +1,6 @@ This example shows how to use multiple entry points with a commons chunk. -In this example you have two (HTML) pages `pageA` and `pageB`. You want to create individual bundles for each page. In addition to this you want to create a shared bundle that contains all modules used in both pages (assuming there are many/big modules in common). The pages also use Code Splitting to load a less used part of the features on demand. +In this example, you have two (HTML) pages `pageA` and `pageB`. You want to create individual bundles for each page. In addition to this, you want to create a shared bundle that contains all the modules used in both pages (assuming there are many/big modules in common). The pages also use Code Splitting to load a less used part of the features on demand. You can see how to define multiple entry points via the `entry` option. @@ -8,29 +8,29 @@ You can use You can see the output files: -* `commons.js` contains: - * module `common.js` which is used in both pages -* `pageA.js` contains: (`pageB.js` is similar) - * the module system - * chunk loading logic - * the entry point `pageA.js` - * it would contain any other module that is only used by `pageA` -* `0.chunk.js` is an additional chunk which is used by both pages. It contains: - * module `shared.js` +- `commons.js` contains: + - module `common.js` which is used in both pages +- `pageA.js` contains: (`pageB.js` is similar) + - the module system + - chunk loading logic + - the entry point `pageA.js` + - it would contain any other module that is only used by `pageA` +- `406.js` is an additional chunk which is used by both pages. It contains: + - module `shared.js` You can also see the info that is printed to console. It shows among others: -* the generated files -* the chunks with file, name and id - * see lines starting with `chunk` -* the modules that are in the chunks -* the reasons why the modules are included -* the reasons why a chunk is created - * see lines starting with `>` +- the generated files +- the chunks with file, name, and id + - see lines starting with `chunk` +- the modules that are in the chunks +- the reasons why the modules are included +- the reasons why a chunk is created + - see lines starting with `>` # pageA.js -``` javascript +```javascript var common = require("./common"); require(["./shared"], function(shared) { shared("This is page A"); @@ -39,7 +39,7 @@ require(["./shared"], function(shared) { # pageB.js -``` javascript +```javascript var common = require("./common"); require.ensure(["./shared"], function(require) { var shared = require("./shared"); @@ -49,9 +49,12 @@ require.ensure(["./shared"], function(require) { # webpack.config.js -``` javascript -module.exports = { - // mode: "development || "production", +```javascript +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { pageA: "./pageA", pageB: "./pageB" @@ -67,14 +70,16 @@ module.exports = { } } }, - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; ``` # pageA.html -``` html +```html @@ -86,15 +91,17 @@ module.exports = { # dist/commons.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[1],[ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["commons"],[ /* 0 */, /* 1 */ /*!*******************!*\ !*** ./common.js ***! \*******************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module */ +/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ +/***/ ((module) => { module.exports = "Common"; @@ -104,480 +111,581 @@ module.exports = "Common"; # dist/pageA.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */ +/*!******************!*\ + !*** ./pageA.js ***! + \******************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, __webpack_require__.e, __webpack_require__.oe, __webpack_require__.* */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var common = __webpack_require__(/*! ./common */ 1); +__webpack_require__.e(/*! AMD require */ "shared_js").then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(/*! ./shared */ 3)]; (function(shared) { + shared("This is page A"); +}).apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);})['catch'](__webpack_require__.oe); + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 3: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + ".js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "pageA": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([3,1]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ({ +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["commons"], () => (__webpack_require__(0))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +``` + +# dist/pageB.js -/***/ 3: +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 2 /*!******************!*\ - !*** ./pageA.js ***! + !*** ./pageB.js ***! \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { var common = __webpack_require__(/*! ./common */ 1); -__webpack_require__.e(/*! AMD require */ 0).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(/*! ./shared */ 0)]; (function(shared) { - shared("This is page A"); -}).apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__);}).catch(__webpack_require__.oe); +__webpack_require__.e(/*! require.ensure */ "shared_js").then((function(require) { + var shared = __webpack_require__(/*! ./shared */ 3); + shared("This is page B"); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); -/***/ }) +/***/ } -/******/ }); +/******/ }); ``` -# dist/pageB.js +
/* webpack runtime code */ -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ return result; -/******/ } -/******/ +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 2: 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + ".js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "pageB": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push([2,1]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ -/******/ ({ - -/***/ 2: -/*!******************!*\ - !*** ./pageB.js ***! - \******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var common = __webpack_require__(/*! ./common */ 1); -__webpack_require__.e(/*! require.ensure */ 0).then((function(require) { - var shared = __webpack_require__(/*! ./shared */ 0); - shared("This is page B"); -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); +``` -/***/ }) +
-/******/ }); +``` js +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["commons"], () => (__webpack_require__(2))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; ``` -# dist/0.js +# dist/shared_js.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],[ -/* 0 */ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["shared_js"],{ + +/***/ 3 /*!*******************!*\ !*** ./shared.js ***! \*******************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: module, __webpack_require__ */ +/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ +(module, __unused_webpack_exports, __webpack_require__) { var common = __webpack_require__(/*! ./common */ 1); module.exports = function(msg) { console.log(msg); }; -/***/ }) -]]); +/***/ } + +}]); ``` # Info @@ -585,71 +693,85 @@ module.exports = function(msg) { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names - 0.js 363 bytes 0 [emitted] -commons.js 267 bytes 1 [emitted] commons - pageB.js 8.28 KiB 2 [emitted] pageB - pageA.js 8.32 KiB 3 [emitted] pageA -Entrypoint pageA = commons.js pageA.js -Entrypoint pageB = commons.js pageB.js -chunk {0} 0.js 91 bytes <{1}> <{2}> <{3}> [rendered] - > [2] ./pageB.js 2:0-5:2 - > ./shared [3] ./pageA.js 2:0-4:2 - [0] ./shared.js 91 bytes {0} [built] - require.ensure item ./shared [2] ./pageB.js 2:0-5:2 - cjs require ./shared [2] ./pageB.js 3:14-33 - amd require ./shared [3] ./pageA.js 2:0-4:2 -chunk {1} commons.js (commons) 26 bytes ={2}= ={3}= >{0}< [initial] [rendered] split chunk (cache group: commons) (name: commons) - > ./pageA pageA - > ./pageB pageB - [1] ./common.js 26 bytes {1} [built] - cjs require ./common [0] ./shared.js 1:13-32 - cjs require ./common [2] ./pageB.js 1:13-32 - cjs require ./common [3] ./pageA.js 1:13-32 -chunk {2} pageB.js (pageB) 152 bytes ={1}= >{0}< [entry] [rendered] - > ./pageB pageB - [2] ./pageB.js 152 bytes {2} [built] - single entry ./pageB pageB -chunk {3} pageA.js (pageA) 108 bytes ={1}= >{0}< [entry] [rendered] - > ./pageA pageA - [3] ./pageA.js 108 bytes {3} [built] - single entry ./pageA pageA +asset pageA.js 10.9 KiB [emitted] (name: pageA) +asset pageB.js 10.8 KiB [emitted] (name: pageB) +asset shared_js.js 503 bytes [emitted] +asset commons.js 370 bytes [emitted] (name: commons) (id hint: commons) +Entrypoint pageA 11.3 KiB = commons.js 370 bytes pageA.js 10.9 KiB +Entrypoint pageB 11.2 KiB = commons.js 370 bytes pageB.js 10.8 KiB +chunk (runtime: pageA, pageB) commons.js (commons) (id hint: commons) 26 bytes [initial] [rendered] split chunk (cache group: commons) (name: commons) + > ./pageA pageA + > ./pageB pageB + ./common.js 26 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./common.js 1:0-14 + cjs require ./common ./pageA.js 1:13-32 + cjs require ./common ./pageB.js 1:13-32 + cjs require ./common ./shared.js 1:13-32 +chunk (runtime: pageA) pageA.js (pageA) 105 bytes (javascript) 5.86 KiB (runtime) [entry] [rendered] + > ./pageA pageA + runtime modules 5.86 KiB 7 modules + ./pageA.js 105 bytes [built] [code generated] + [used exports unknown] + entry ./pageA pageA +chunk (runtime: pageB) pageB.js (pageB) 148 bytes (javascript) 5.86 KiB (runtime) [entry] [rendered] + > ./pageB pageB + runtime modules 5.86 KiB 7 modules + ./pageB.js 148 bytes [built] [code generated] + [used exports unknown] + entry ./pageB pageB +chunk (runtime: pageA, pageB) shared_js.js 88 bytes [rendered] + > ./shared ./pageA.js 2:0-4:2 + > ./pageB.js 2:0-5:2 + ./shared.js 88 bytes [built] [code generated] + [used exports unknown] + from origin ./pageB.js + require.ensure item ./shared ./pageB.js 2:0-5:2 + cjs require ./shared ./pageB.js 3:14-33 + amd require ./shared ./pageA.js 2:0-4:2 + cjs self exports reference ./shared.js 2:0-14 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names - 0.js 120 bytes 0 [emitted] -commons.js 95 bytes 1 [emitted] commons - pageB.js 1.88 KiB 2 [emitted] pageB - pageA.js 1.91 KiB 3 [emitted] pageA -Entrypoint pageA = commons.js pageA.js -Entrypoint pageB = commons.js pageB.js -chunk {0} 0.js 91 bytes <{1}> <{2}> <{3}> [rendered] - > [2] ./pageB.js 2:0-5:2 - > ./shared [3] ./pageA.js 2:0-4:2 - [0] ./shared.js 91 bytes {0} [built] - require.ensure item ./shared [2] ./pageB.js 2:0-5:2 - cjs require ./shared [2] ./pageB.js 3:14-33 - amd require ./shared [3] ./pageA.js 2:0-4:2 -chunk {1} commons.js (commons) 26 bytes ={2}= ={3}= >{0}< [initial] [rendered] split chunk (cache group: commons) (name: commons) - > ./pageA pageA - > ./pageB pageB - [1] ./common.js 26 bytes {1} [built] - cjs require ./common [0] ./shared.js 1:13-32 - cjs require ./common [2] ./pageB.js 1:13-32 - cjs require ./common [3] ./pageA.js 1:13-32 -chunk {2} pageB.js (pageB) 152 bytes ={1}= >{0}< [entry] [rendered] - > ./pageB pageB - [2] ./pageB.js 152 bytes {2} [built] - single entry ./pageB pageB -chunk {3} pageA.js (pageA) 108 bytes ={1}= >{0}< [entry] [rendered] - > ./pageA pageA - [3] ./pageA.js 108 bytes {3} [built] - single entry ./pageA pageA +asset pageA.js 2.14 KiB [emitted] [minimized] (name: pageA) +asset pageB.js 2.12 KiB [emitted] [minimized] (name: pageB) +asset shared_js.js 122 bytes [emitted] [minimized] +asset commons.js 91 bytes [emitted] [minimized] (name: commons) (id hint: commons) +Entrypoint pageA 2.23 KiB = commons.js 91 bytes pageA.js 2.14 KiB +Entrypoint pageB 2.21 KiB = commons.js 91 bytes pageB.js 2.12 KiB +chunk (runtime: pageA, pageB) commons.js (commons) (id hint: commons) 26 bytes [initial] [rendered] split chunk (cache group: commons) (name: commons) + > ./pageA pageA + > ./pageB pageB + ./common.js 26 bytes [built] [code generated] + [used exports unknown] + cjs self exports reference ./common.js 1:0-14 + cjs require ./common ./pageA.js 1:13-32 + cjs require ./common ./pageB.js 1:13-32 + cjs require ./common ./shared.js 1:13-32 +chunk (runtime: pageA) pageA.js (pageA) 105 bytes (javascript) 5.86 KiB (runtime) [entry] [rendered] + > ./pageA pageA + runtime modules 5.86 KiB 7 modules + ./pageA.js 105 bytes [built] [code generated] + [no exports used] + entry ./pageA pageA +chunk (runtime: pageB) pageB.js (pageB) 148 bytes (javascript) 5.86 KiB (runtime) [entry] [rendered] + > ./pageB pageB + runtime modules 5.86 KiB 7 modules + ./pageB.js 148 bytes [built] [code generated] + [no exports used] + entry ./pageB pageB +chunk (runtime: pageA, pageB) shared_js.js 88 bytes [rendered] + > ./shared ./pageA.js 2:0-4:2 + > ./pageB.js 2:0-5:2 + ./shared.js 88 bytes [built] [code generated] + [used exports unknown] + from origin ./pageB.js + require.ensure item ./shared ./pageB.js 2:0-5:2 + cjs require ./shared ./pageB.js 3:14-33 + amd require ./shared ./pageA.js 2:0-4:2 + cjs self exports reference ./shared.js 2:0-14 +webpack X.X.X compiled successfully ``` diff --git a/examples/multiple-entry-points/template.md b/examples/multiple-entry-points/template.md index 4b0ea594b32..2bfea3457a7 100644 --- a/examples/multiple-entry-points/template.md +++ b/examples/multiple-entry-points/template.md @@ -1,6 +1,6 @@ This example shows how to use multiple entry points with a commons chunk. -In this example you have two (HTML) pages `pageA` and `pageB`. You want to create individual bundles for each page. In addition to this you want to create a shared bundle that contains all modules used in both pages (assuming there are many/big modules in common). The pages also use Code Splitting to load a less used part of the features on demand. +In this example, you have two (HTML) pages `pageA` and `pageB`. You want to create individual bundles for each page. In addition to this, you want to create a shared bundle that contains all the modules used in both pages (assuming there are many/big modules in common). The pages also use Code Splitting to load a less used part of the features on demand. You can see how to define multiple entry points via the `entry` option. @@ -8,72 +8,72 @@ You can use You can see the output files: -* `commons.js` contains: - * module `common.js` which is used in both pages -* `pageA.js` contains: (`pageB.js` is similar) - * the module system - * chunk loading logic - * the entry point `pageA.js` - * it would contain any other module that is only used by `pageA` -* `0.chunk.js` is an additional chunk which is used by both pages. It contains: - * module `shared.js` +- `commons.js` contains: + - module `common.js` which is used in both pages +- `pageA.js` contains: (`pageB.js` is similar) + - the module system + - chunk loading logic + - the entry point `pageA.js` + - it would contain any other module that is only used by `pageA` +- `406.js` is an additional chunk which is used by both pages. It contains: + - module `shared.js` You can also see the info that is printed to console. It shows among others: -* the generated files -* the chunks with file, name and id - * see lines starting with `chunk` -* the modules that are in the chunks -* the reasons why the modules are included -* the reasons why a chunk is created - * see lines starting with `>` +- the generated files +- the chunks with file, name, and id + - see lines starting with `chunk` +- the modules that are in the chunks +- the reasons why the modules are included +- the reasons why a chunk is created + - see lines starting with `>` # pageA.js -``` javascript -{{pageA.js}} +```javascript +_{{pageA.js}}_ ``` # pageB.js -``` javascript -{{pageB.js}} +```javascript +_{{pageB.js}}_ ``` # webpack.config.js -``` javascript -{{webpack.config.js}} +```javascript +_{{webpack.config.js}}_ ``` # pageA.html -``` html -{{pageA.html}} +```html +_{{pageA.html}}_ ``` # dist/commons.js -``` javascript -{{dist/commons.js}} +```javascript +_{{dist/commons.js}}_ ``` # dist/pageA.js -``` javascript -{{dist/pageA.js}} +```javascript +_{{dist/pageA.js}}_ ``` # dist/pageB.js -``` javascript -{{dist/pageB.js}} +```javascript +_{{dist/pageB.js}}_ ``` -# dist/0.js +# dist/shared_js.js -``` javascript -{{dist/0.js}} +```javascript +_{{dist/shared_js.js}}_ ``` # Info @@ -81,11 +81,11 @@ You can also see the info that is printed to console. It shows among others: ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/multiple-entry-points/webpack.config.js b/examples/multiple-entry-points/webpack.config.js index 9927b2f0f57..260b57c688f 100644 --- a/examples/multiple-entry-points/webpack.config.js +++ b/examples/multiple-entry-points/webpack.config.js @@ -1,5 +1,8 @@ -module.exports = { - // mode: "development || "production", +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", entry: { pageA: "./pageA", pageB: "./pageB" @@ -15,6 +18,8 @@ module.exports = { } } }, - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" // To keep filename consistent between different modes (for example building only) } }; + +module.exports = config; diff --git a/examples/named-chunks/README.md b/examples/named-chunks/README.md index 07017fd847b..2f0fe407a45 100644 --- a/examples/named-chunks/README.md +++ b/examples/named-chunks/README.md @@ -1,6 +1,6 @@ # example.js -``` javascript +```javascript var a = require("a"); require.ensure(["b"], function(require) { @@ -23,264 +23,306 @@ require.ensure(["b"], function(require) { }); ``` - # dist/output.js -
/******/ (function(modules) { /* webpackBootstrap */ }) - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ }; -/******/ -/******/ +```javascript +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/*!***************************!*\ + !*** ./node_modules/a.js ***! + \***************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { + +// module a + +/***/ }) +/******/ ]); +``` + +
/* webpack runtime code */ + +``` js +/************************************************************************/ /******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 2: 0 -/******/ }; -/******/ -/******/ -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + chunkId + ".output.js" -/******/ } -/******/ +/******/ var __webpack_module_cache__ = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { -/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var head = document.getElementsByTagName('head')[0]; -/******/ var script = document.createElement('script'); -/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".output.js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ /******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ function onScriptComplete(event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'); -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "main": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); /******/ } -/******/ installedChunks[chunkId] = undefined; /******/ } -/******/ }; -/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); /******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ /******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist/"; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 3); -/******/ }) +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ /************************************************************************/ ```
-``` javascript -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */ -/*!***************************!*\ - !*** ./node_modules/a.js ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// module a - -/***/ }), -/* 3 */ +``` js +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { /*!********************!*\ !*** ./example.js ***! \********************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__, __webpack_require__.e, __webpack_require__.* */ +var a = __webpack_require__(/*! a */ 1); -var a = __webpack_require__(/*! a */ 2); - -__webpack_require__.e(/*! require.ensure | my own chunk */ 1).then((function(require) { +__webpack_require__.e(/*! require.ensure | my own chunk */ "my own chunk").then((function(require) { // a named chunk - var c = __webpack_require__(/*! c */ 4); -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); + var c = __webpack_require__(/*! c */ 3); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); -__webpack_require__.e(/*! require.ensure | my own chunk */ 1).then((function(require) { +__webpack_require__.e(/*! require.ensure | my own chunk */ "my own chunk").then((function(require) { // another chunk with the same name - var d = __webpack_require__(/*! d */ 1); -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); + var d = __webpack_require__(/*! d */ 4); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); -__webpack_require__.e(/*! require.ensure | my own chunk */ 1).then((function(require) { +__webpack_require__.e(/*! require.ensure | my own chunk */ "my own chunk").then((function(require) { // the same again -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); -__webpack_require__.e(/*! require.ensure */ 0).then((function(require) { +__webpack_require__.e(/*! require.ensure */ "node_modules_b_js-node_modules_d_js").then((function(require) { // chunk without name - var d = __webpack_require__(/*! d */ 1); -}).bind(null, __webpack_require__)).catch(__webpack_require__.oe); + var d = __webpack_require__(/*! d */ 4); +}).bind(null, __webpack_require__))['catch'](__webpack_require__.oe); +})(); -/***/ }) -/******/ ]); +/******/ })() +; ``` -# dist/0.output.js +# dist/my own chunk.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],[ -/* 0 */ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["my own chunk"],[ +/* 0 */, +/* 1 */, +/* 2 */ /*!***************************!*\ !*** ./node_modules/b.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { // module b /***/ }), -/* 1 */ +/* 3 */ +/*!***************************!*\ + !*** ./node_modules/c.js ***! + \***************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { + +// module c + +/***/ }), +/* 4 */ /*!***************************!*\ !*** ./node_modules/d.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { // module d @@ -288,40 +330,33 @@ __webpack_require__.e(/*! require.ensure */ 0).then((function(require) { ]]); ``` -# dist/1.output.js +# dist/node_modules_b_js-node_modules_d_js.output.js -``` javascript -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[1],[ -/* 0 */ +```javascript +(self["webpackChunk"] = self["webpackChunk"] || []).push([["node_modules_b_js-node_modules_d_js"],[ +/* 0 */, +/* 1 */, +/* 2 */ /*!***************************!*\ !*** ./node_modules/b.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { // module b /***/ }), -/* 1 */ -/*!***************************!*\ - !*** ./node_modules/d.js ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// module d - -/***/ }), -/* 2 */, /* 3 */, /* 4 */ /*!***************************!*\ - !*** ./node_modules/c.js ***! + !*** ./node_modules/d.js ***! \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +/***/ (() => { -// module c +// module d /***/ }) ]]); @@ -332,49 +367,85 @@ __webpack_require__.e(/*! require.ensure */ 0).then((function(require) { ## Unoptimized ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 463 bytes 0 [emitted] -1.output.js 677 bytes 1 [emitted] my own chunk - output.js 8.13 KiB 2 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 22 bytes <{2}> [rendered] - > [3] ./example.js 17:0-20:2 - 2 modules -chunk {1} 1.output.js (my own chunk) 33 bytes <{2}> [rendered] - > [3] ./example.js 13:0-15:18 - > [3] ./example.js 3:0-6:18 - > [3] ./example.js 8:0-11:18 - 3 modules -chunk {2} output.js (main) 452 bytes >{0}< >{1}< [entry] [rendered] - > .\example.js main - [3] ./example.js 441 bytes {2} [built] - single entry .\example.js main - + 1 hidden module +asset output.js 10.1 KiB [emitted] (name: main) +asset my own chunk.output.js 746 bytes [emitted] (name: my own chunk) +asset node_modules_b_js-node_modules_d_js.output.js 562 bytes [emitted] +chunk (runtime: main) output.js (main) 432 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + dependent modules 11 bytes [dependent] 1 module + ./example.js 421 bytes [built] [code generated] + [used exports unknown] + entry ./example.js main +chunk (runtime: main) my own chunk.output.js (my own chunk) 33 bytes [rendered] + > ./example.js 13:0-15:18 + > ./example.js 3:0-6:18 + > ./example.js 8:0-11:18 + ./node_modules/b.js 11 bytes [built] [code generated] + [used exports unknown] + require.ensure item b ./example.js 3:0-6:18 + require.ensure item b ./example.js 8:0-11:18 + require.ensure item b ./example.js 17:0-20:2 + ./node_modules/c.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require c ./example.js 5:9-21 + ./node_modules/d.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require d ./example.js 10:9-21 + cjs require d ./example.js 19:9-21 +chunk (runtime: main) node_modules_b_js-node_modules_d_js.output.js 22 bytes [rendered] + > ./example.js 17:0-20:2 + ./node_modules/b.js 11 bytes [built] [code generated] + [used exports unknown] + require.ensure item b ./example.js 3:0-6:18 + require.ensure item b ./example.js 8:0-11:18 + require.ensure item b ./example.js 17:0-20:2 + ./node_modules/d.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require d ./example.js 10:9-21 + cjs require d ./example.js 19:9-21 +webpack X.X.X compiled successfully ``` ## Production mode ``` -Hash: 0a1b2c3d4e5f6a7b8c9d -Version: webpack 4.8.0 - Asset Size Chunks Chunk Names -0.output.js 92 bytes 0 [emitted] -1.output.js 112 bytes 1, 0 [emitted] my own chunk - output.js 1.84 KiB 2 [emitted] main -Entrypoint main = output.js -chunk {0} 0.output.js 22 bytes <{2}> [rendered] - > [3] ./example.js 17:0-20:2 - 2 modules -chunk {1} 1.output.js (my own chunk) 33 bytes <{2}> [rendered] - > [3] ./example.js 13:0-15:18 - > [3] ./example.js 3:0-6:18 - > [3] ./example.js 8:0-11:18 - 3 modules -chunk {2} output.js (main) 452 bytes >{0}< >{1}< [entry] [rendered] - > .\example.js main - [3] ./example.js 441 bytes {2} [built] - single entry .\example.js main - + 1 hidden module +asset output.js 1.92 KiB [emitted] [minimized] (name: main) +asset my own chunk.output.js 131 bytes [emitted] [minimized] (name: my own chunk) +asset node_modules_b_js-node_modules_d_js.output.js 108 bytes [emitted] [minimized] +chunk (runtime: main) output.js (main) 432 bytes (javascript) 4.92 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 4.92 KiB 6 modules + dependent modules 11 bytes [dependent] 1 module + ./example.js 421 bytes [built] [code generated] + [no exports used] + entry ./example.js main +chunk (runtime: main) my own chunk.output.js (my own chunk) 33 bytes [rendered] + > ./example.js 13:0-15:18 + > ./example.js 3:0-6:18 + > ./example.js 8:0-11:18 + ./node_modules/b.js 11 bytes [built] [code generated] + [used exports unknown] + require.ensure item b ./example.js 3:0-6:18 + require.ensure item b ./example.js 8:0-11:18 + require.ensure item b ./example.js 17:0-20:2 + ./node_modules/c.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require c ./example.js 5:9-21 + ./node_modules/d.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require d ./example.js 10:9-21 + cjs require d ./example.js 19:9-21 +chunk (runtime: main) node_modules_b_js-node_modules_d_js.output.js 22 bytes [rendered] + > ./example.js 17:0-20:2 + ./node_modules/b.js 11 bytes [built] [code generated] + [used exports unknown] + require.ensure item b ./example.js 3:0-6:18 + require.ensure item b ./example.js 8:0-11:18 + require.ensure item b ./example.js 17:0-20:2 + ./node_modules/d.js 11 bytes [built] [code generated] + [used exports unknown] + cjs require d ./example.js 10:9-21 + cjs require d ./example.js 19:9-21 +webpack X.X.X compiled successfully ``` diff --git a/examples/named-chunks/template.md b/examples/named-chunks/template.md index ef6baf49ea2..b3447100444 100644 --- a/examples/named-chunks/template.md +++ b/examples/named-chunks/template.md @@ -1,26 +1,25 @@ # example.js -``` javascript -{{example.js}} +```javascript +_{{example.js}}_ ``` - # dist/output.js -``` javascript -{{dist/output.js}} +```javascript +_{{dist/output.js}}_ ``` -# dist/0.output.js +# dist/my own chunk.output.js -``` javascript -{{dist/0.output.js}} +```javascript +_{{dist/my own chunk.output.js}}_ ``` -# dist/1.output.js +# dist/node_modules_b_js-node_modules_d_js.output.js -``` javascript -{{dist/1.output.js}} +```javascript +_{{dist/node_modules_b_js-node_modules_d_js.output.js}}_ ``` # Info @@ -28,11 +27,11 @@ ## Unoptimized ``` -{{stdout}} +_{{stdout}}_ ``` ## Production mode ``` -{{production:stdout}} +_{{production:stdout}}_ ``` diff --git a/examples/named-chunks/webpack.config.js b/examples/named-chunks/webpack.config.js index 0d554bf62ea..1261cf9b395 100644 --- a/examples/named-chunks/webpack.config.js +++ b/examples/named-chunks/webpack.config.js @@ -1,5 +1,10 @@ -module.exports = { +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { optimization: { - occurrenceOrder: true // To keep filename consistent between different modes (for example building only) + chunkIds: "named" } }; + +module.exports = config; diff --git a/examples/node_modules/module.js b/examples/node_modules/module.js index f23403c2c0f..d6df8480e22 100644 --- a/examples/node_modules/module.js +++ b/examples/node_modules/module.js @@ -1 +1 @@ -module.exports = "module"; \ No newline at end of file +module.exports = "module"; diff --git a/examples/nodejs-addons/README.md b/examples/nodejs-addons/README.md new file mode 100644 index 00000000000..3755b89ce7d --- /dev/null +++ b/examples/nodejs-addons/README.md @@ -0,0 +1,81 @@ +This example illustrates how to use [Node.js addons](https://nodejs.org/api/addons.html). + +# example.js + +```javascript +import { dlopen } from 'node:process'; +import { fileURLToPath } from 'node:url'; + +const file = new URL("./file.node", import.meta.url); +const myModule = { exports: {} }; + +try { + dlopen(myModule, fileURLToPath(file)); +} catch (err) { + console.log(err) + // Handling errors +} + +console.log(myModule.exports.hello()); +// Outputs: world +``` + +# webpack.config.js + +```javascript +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", + target: "node", + output: { + // We strong recommend use `publicPath: 'auto'` or do not set `publicPath` at all to generate relative URLs + // publicPath: 'auto' + }, + module: { + rules: [ + { + test: /\.node$/, + type: "asset/resource" + } + ] + } +}; + +module.exports = config; +``` + +# Info + +## Unoptimized + +``` +asset 5664f09ab8adf033e173.node 16.5 KiB [emitted] [immutable] [from: file.node] (auxiliary name: main) +asset output.js 6.52 KiB [emitted] (name: main) +chunk (runtime: main) output.js (main) 457 bytes (javascript) 16.5 KiB (asset) 1.26 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 1.26 KiB 6 modules + dependent modules 16.5 KiB (asset) 126 bytes (javascript) [dependent] 3 modules + ./example.js 331 bytes [built] [code generated] + [no exports] + [used exports unknown] + entry ./example.js main +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset 5664f09ab8adf033e173.node 16.5 KiB [emitted] [immutable] [from: file.node] (auxiliary name: main) +asset output.js 512 bytes [emitted] [minimized] (name: main) +chunk (runtime: main) output.js (main) 16.5 KiB (asset) 457 bytes (javascript) 445 bytes (runtime) [entry] [rendered] + > ./example.js main + runtime modules 445 bytes 3 modules + dependent modules 16.5 KiB (asset) 42 bytes (javascript) [dependent] 1 module + ./example.js + 2 modules 415 bytes [not cacheable] [built] [code generated] + [no exports] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/nodejs-addons/binding.gyp b/examples/nodejs-addons/binding.gyp new file mode 100644 index 00000000000..de0ccf993a4 --- /dev/null +++ b/examples/nodejs-addons/binding.gyp @@ -0,0 +1,8 @@ +{ + "targets": [ + { + "target_name": "file", + "sources": [ "file.cc" ] + } + ] +} diff --git a/examples/nodejs-addons/build.js b/examples/nodejs-addons/build.js new file mode 100644 index 00000000000..795841944eb --- /dev/null +++ b/examples/nodejs-addons/build.js @@ -0,0 +1,25 @@ +global.NO_PUBLIC_PATH = true; + +const cp = require("child_process"); +const path = require("path"); +const fs = require("fs"); + +cp.exec(`node-gyp --target=${process.version} configure build`, (error, stdout, stderr) => { + if (stderr) { + console.log(stderr); + } + + if (error !== null) { + console.log(error); + } + + fs.copyFile(path.resolve(__dirname, "./build/Release/file.node"), path.resolve(__dirname, './file.node'), (err) => { + if (err) { + console.log(err); + } + + require("../build-common"); + }); +}); + + diff --git a/examples/nodejs-addons/example.js b/examples/nodejs-addons/example.js new file mode 100644 index 00000000000..41d2403e4be --- /dev/null +++ b/examples/nodejs-addons/example.js @@ -0,0 +1,15 @@ +import { dlopen } from 'node:process'; +import { fileURLToPath } from 'node:url'; + +const file = new URL("./file.node", import.meta.url); +const myModule = { exports: {} }; + +try { + dlopen(myModule, fileURLToPath(file)); +} catch (err) { + console.log(err) + // Handling errors +} + +console.log(myModule.exports.hello()); +// Outputs: world diff --git a/examples/nodejs-addons/file.cc b/examples/nodejs-addons/file.cc new file mode 100644 index 00000000000..b94aecb3c76 --- /dev/null +++ b/examples/nodejs-addons/file.cc @@ -0,0 +1,21 @@ +// Include uv.h and v8.h ahead of node.h to verify that node.h doesn't need to +// be included first. Disable clang-format as it will sort the include lists. +// clang-format off +#include +#include +#include +// clang-format on + +static void Method(const v8::FunctionCallbackInfo& args) { + v8::Isolate* isolate = args.GetIsolate(); + args.GetReturnValue().Set( + v8::String::NewFromUtf8(isolate, "world").ToLocalChecked()); +} + +static void InitModule(v8::Local exports, + v8::Local module, + v8::Local context) { + NODE_SET_METHOD(exports, "hello", Method); +} + +NODE_MODULE(NODE_GYP_MODULE_NAME, InitModule) diff --git a/examples/nodejs-addons/file.node b/examples/nodejs-addons/file.node new file mode 100755 index 00000000000..bbc648e69d6 Binary files /dev/null and b/examples/nodejs-addons/file.node differ diff --git a/examples/nodejs-addons/template.md b/examples/nodejs-addons/template.md new file mode 100644 index 00000000000..9ac79d27260 --- /dev/null +++ b/examples/nodejs-addons/template.md @@ -0,0 +1,27 @@ +This example illustrates how to use [Node.js addons](https://nodejs.org/api/addons.html). + +# example.js + +```javascript +_{{example.js}}_ +``` + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/nodejs-addons/webpack.config.js b/examples/nodejs-addons/webpack.config.js new file mode 100644 index 00000000000..dc29fa2dd3f --- /dev/null +++ b/examples/nodejs-addons/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +const config = { + // mode: "development" || "production", + target: "node", + output: { + // We strong recommend use `publicPath: 'auto'` or do not set `publicPath` at all to generate relative URLs + // publicPath: 'auto' + }, + module: { + rules: [ + { + test: /\.node$/, + type: "asset/resource" + } + ] + } +}; + +module.exports = config; diff --git a/examples/persistent-caching/README.md b/examples/persistent-caching/README.md new file mode 100644 index 00000000000..b9cec58e7a1 --- /dev/null +++ b/examples/persistent-caching/README.md @@ -0,0 +1,94 @@ +# example.js + +```javascript +console.log(process.env.NODE_ENV); + +import "./example.css"; +import "react"; +import "react-dom"; +import "acorn"; +import "core-js"; +import "date-fns"; +import "lodash"; +import * as _ from "lodash-es"; +console.log(_); +``` + +# webpack.config.js + +```javascript +"use strict"; + +const path = require("path"); + +/** @type {(env: "development" | "production") => import("webpack").Configuration} */ +const config = (env = "development") => ({ + mode: env, + infrastructureLogging: { + // Optional: print more verbose logging about caching + level: "verbose" + }, + cache: { + type: "filesystem", + + // changing the cacheDirectory is optional, + // by default it will be in `node_modules/.cache` + cacheDirectory: path.resolve(__dirname, ".cache"), + + // Add additional dependencies to the build + buildDependencies: { + // recommended to invalidate cache on config changes + // This also makes all dependencies of this file build dependencies + config: [__filename] + // By default webpack and loaders are build dependencies + } + }, + module: { + rules: [ + { + test: /\.css$/, + use: ["style-loader", "css-loader"] + } + ] + } +}); + +module.exports = config; +``` + +# Info + +## Unoptimized + +``` +asset output.js 3.63 MiB [emitted] (name: main) +chunk (runtime: main) output.js (main) 2.27 MiB (javascript) 1.29 KiB (runtime) [entry] + > ./example.js main + cached modules 2.27 MiB (javascript) 1.29 KiB (runtime) [cached] 1528 modules +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset output.js 552 KiB [emitted] [minimized] [big] (name: main) 1 related asset +chunk (runtime: main) output.js (main) 2.2 MiB (javascript) 1.29 KiB (runtime) [entry] + > ./example.js main + cached modules 2.2 MiB (javascript) 1.29 KiB (runtime) [cached] 905 modules + +WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB). +This can impact web performance. +Assets: + output.js (552 KiB) + +WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance. +Entrypoints: + main (552 KiB) + output.js + +WARNING in webpack performance recommendations: +You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application. +For more info visit https://webpack.js.org/guides/code-splitting/ + +webpack X.X.X compiled with 3 warnings +``` diff --git a/examples/persistent-caching/build.js b/examples/persistent-caching/build.js new file mode 100644 index 00000000000..41c29c9d169 --- /dev/null +++ b/examples/persistent-caching/build.js @@ -0,0 +1 @@ +require("../build-common"); \ No newline at end of file diff --git a/examples/persistent-caching/example.css b/examples/persistent-caching/example.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/examples/persistent-caching/example.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/examples/persistent-caching/example.js b/examples/persistent-caching/example.js new file mode 100644 index 00000000000..f04e6a6675a --- /dev/null +++ b/examples/persistent-caching/example.js @@ -0,0 +1,11 @@ +console.log(process.env.NODE_ENV); + +import "./example.css"; +import "react"; +import "react-dom"; +import "acorn"; +import "core-js"; +import "date-fns"; +import "lodash"; +import * as _ from "lodash-es"; +console.log(_); diff --git a/examples/persistent-caching/template.md b/examples/persistent-caching/template.md new file mode 100644 index 00000000000..2df3585bde6 --- /dev/null +++ b/examples/persistent-caching/template.md @@ -0,0 +1,25 @@ +# example.js + +```javascript +_{{example.js}}_ +``` + +# webpack.config.js + +```javascript +_{{webpack.config.js}}_ +``` + +# Info + +## Unoptimized + +``` +_{{stdout}}_ +``` + +## Production mode + +``` +_{{production:stdout}}_ +``` diff --git a/examples/persistent-caching/webpack.config.js b/examples/persistent-caching/webpack.config.js new file mode 100644 index 00000000000..8c297c6daa2 --- /dev/null +++ b/examples/persistent-caching/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +const path = require("path"); + +/** @type {(env: "development" | "production") => import("webpack").Configuration} */ +const config = (env = "development") => ({ + mode: env, + infrastructureLogging: { + // Optional: print more verbose logging about caching + level: "verbose" + }, + cache: { + type: "filesystem", + + // changing the cacheDirectory is optional, + // by default it will be in `node_modules/.cache` + cacheDirectory: path.resolve(__dirname, ".cache"), + + // Add additional dependencies to the build + buildDependencies: { + // recommended to invalidate cache on config changes + // This also makes all dependencies of this file build dependencies + config: [__filename] + // By default webpack and loaders are build dependencies + } + }, + module: { + rules: [ + { + test: /\.css$/, + use: ["style-loader", "css-loader"] + } + ] + } +}); + +module.exports = config; diff --git a/examples/reexport-components/README.md b/examples/reexport-components/README.md new file mode 100644 index 00000000000..bb85d7edbe5 --- /dev/null +++ b/examples/reexport-components/README.md @@ -0,0 +1,263 @@ +# example.js + +```javascript +// insert router here +import(`./pages/${page}`); +``` + +# pages/Dashboard.js + +```javascript +import { Button, Checkbox } from "../components"; + +const Dashboard = () => { + return ( + <> + + +

Computing fibonacci without worker:

+ +

+	

Computing fibonacci with worker:

+ +

+`;
+
+const history = document.getElementById("history");
+const message = document.getElementById("message");
+const send = document.getElementById("send");
+const fib1 = document.getElementById("fib1");
+const output1 = document.getElementById("output1");
+const fib2 = document.getElementById("fib2");
+const output2 = document.getElementById("output2");
+
+/// CHAT with shared worker ///
+
+const chatWorker = new SharedWorker(
+	new URL("./chat-worker.js", import.meta.url),
+	{
+		name: "chat",
+		type: "module"
+	}
+);
+
+let historyTimeout;
+const scheduleUpdateHistory = () => {
+	clearTimeout(historyTimeout);
+	historyTimeout = setTimeout(() => {
+		chatWorker.port.postMessage({ type: "history" });
+	}, 1000);
+};
+scheduleUpdateHistory();
+
+const from = `User ${Math.floor(Math.random() * 10000)}`;
+
+send.addEventListener("click", e => {
+	chatWorker.port.postMessage({
+		type: "message",
+		content: message.value,
+		from
+	});
+	message.value = "";
+	message.focus();
+	e.preventDefault();
+});
+
+chatWorker.port.onmessage = event => {
+	const msg = event.data;
+	switch (msg.type) {
+		case "history":
+			history.innerText = msg.history.join("\n");
+			scheduleUpdateHistory();
+			break;
+	}
+};
+
+/// FIBONACCI without worker ///
+
+fib1.addEventListener("change", async () => {
+	try {
+		const value = parseInt(fib1.value, 10);
+		const { fibonacci } = await import("./fibonacci");
+		const result = fibonacci(value);
+		output1.innerText = `fib(${value}) = ${result}`;
+	} catch (e) {
+		output1.innerText = e.message;
+	}
+});
+
+/// FIBONACCI with worker ///
+
+const fibWorker = new Worker(new URL("./fib-worker.js", import.meta.url), {
+	name: "fibonacci",
+	type: "module"
+	/* webpackEntryOptions: { filename: "workers/[name].js" } */
+});
+
+fib2.addEventListener("change", () => {
+	try {
+		const value = parseInt(fib2.value, 10);
+		fibWorker.postMessage(`${value}`);
+	} catch (e) {
+		output2.innerText = e.message;
+	}
+});
+
+fibWorker.onmessage = event => {
+	output2.innerText = event.data;
+};
+```
+
+# fib-worker.js
+
+```javascript
+onmessage = async event => {
+	const { fibonacci } = await import("./fibonacci");
+	const value = JSON.parse(event.data);
+	postMessage(`fib(${value}) = ${fibonacci(value)}`);
+};
+```
+
+# fibonacci.js
+
+```javascript
+export function fibonacci(n) {
+	return n < 1 ? 0 : n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
+}
+```
+
+# chat-worker.js
+
+```javascript
+import { history, add } from "./chat-module";
+
+onconnect = function (e) {
+	for (const port of e.ports) {
+		port.onmessage = event => {
+			const msg = event.data;
+			switch (msg.type) {
+				case "message":
+					add(msg.content, msg.from);
+				// fallthrough
+				case "history":
+					port.postMessage({
+						type: "history",
+						history
+					});
+					break;
+			}
+		};
+	}
+};
+```
+
+# chat-module.js
+
+```javascript
+export const history = [];
+
+export const add = (content, from) => {
+	if (history.length > 10) history.shift();
+	history.push(`${from}: ${content}`);
+};
+```
+
+# dist/main.js
+
+```javascript
+/******/ (() => { // webpackBootstrap
+/******/ 	var __webpack_modules__ = ({});
+```
+
+
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames not based on template +/******/ if (chunkId === 721) return "workers/fibonacci.js"; +/******/ // return url for filenames based on template +/******/ return "" + (chunkId === 377 ? "chat" : chunkId) + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ (() => { +/******/ var inProgress = {}; +/******/ // data-webpack is not used as build has no uniqueName +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = (url, done, key, chunkId) => { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ +/******/ +/******/ script.src = url; +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = (prev, event) => { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach((fn) => (fn(event))); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "/dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ __webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ 792: 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = (chunkId, promises) => { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if(true) { // all chunks have JS +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = (event) => { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ // no on chunks loaded +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +/*!********************!*\ + !*** ./example.js ***! + \********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.p, __webpack_require__.b, __webpack_require__.u, __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +/*! ModuleConcatenation bailout: Module is not an ECMAScript module */ +document.body.innerHTML = ` +

+	
+ + +
+

Computing fibonacci without worker:

+ +

+	

Computing fibonacci with worker:

+ +

+`;
+
+const history = document.getElementById("history");
+const message = document.getElementById("message");
+const send = document.getElementById("send");
+const fib1 = document.getElementById("fib1");
+const output1 = document.getElementById("output1");
+const fib2 = document.getElementById("fib2");
+const output2 = document.getElementById("output2");
+
+/// CHAT with shared worker ///
+
+const chatWorker = new SharedWorker(
+	new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(377), __webpack_require__.b),
+	{
+		name: "chat",
+		type: undefined
+	}
+);
+
+let historyTimeout;
+const scheduleUpdateHistory = () => {
+	clearTimeout(historyTimeout);
+	historyTimeout = setTimeout(() => {
+		chatWorker.port.postMessage({ type: "history" });
+	}, 1000);
+};
+scheduleUpdateHistory();
+
+const from = `User ${Math.floor(Math.random() * 10000)}`;
+
+send.addEventListener("click", e => {
+	chatWorker.port.postMessage({
+		type: "message",
+		content: message.value,
+		from
+	});
+	message.value = "";
+	message.focus();
+	e.preventDefault();
+});
+
+chatWorker.port.onmessage = event => {
+	const msg = event.data;
+	switch (msg.type) {
+		case "history":
+			history.innerText = msg.history.join("\n");
+			scheduleUpdateHistory();
+			break;
+	}
+};
+
+/// FIBONACCI without worker ///
+
+fib1.addEventListener("change", async () => {
+	try {
+		const value = parseInt(fib1.value, 10);
+		const { fibonacci } = await __webpack_require__.e(/*! import() */ 129).then(__webpack_require__.bind(__webpack_require__, /*! ./fibonacci */ 3));
+		const result = fibonacci(value);
+		output1.innerText = `fib(${value}) = ${result}`;
+	} catch (e) {
+		output1.innerText = e.message;
+	}
+});
+
+/// FIBONACCI with worker ///
+
+const fibWorker = new Worker(new URL(/* worker import */ __webpack_require__.p + __webpack_require__.u(721), __webpack_require__.b), {
+	name: "fibonacci",
+	type: undefined
+	/* webpackEntryOptions: { filename: "workers/[name].js" } */
+});
+
+fib2.addEventListener("change", () => {
+	try {
+		const value = parseInt(fib2.value, 10);
+		fibWorker.postMessage(`${value}`);
+	} catch (e) {
+		output2.innerText = e.message;
+	}
+});
+
+fibWorker.onmessage = event => {
+	output2.innerText = event.data;
+};
+
+/******/ })()
+;
+```
+
+# dist/chat.js
+
+```javascript
+/******/ (() => { // webpackBootstrap
+/******/ 	"use strict";
+/*!************************************!*\
+  !*** ./chat-worker.js + 1 modules ***!
+  \************************************/
+/*! namespace exports */
+/*! runtime requirements:  */
+
+;// ./chat-module.js
+const chat_module_history = [];
+
+const add = (content, from) => {
+	if (chat_module_history.length > 10) chat_module_history.shift();
+	chat_module_history.push(`${from}: ${content}`);
+};
+
+;// ./chat-worker.js
+
+
+onconnect = function (e) {
+	for (const port of e.ports) {
+		port.onmessage = event => {
+			const msg = event.data;
+			switch (msg.type) {
+				case "message":
+					add(msg.content, msg.from);
+				// fallthrough
+				case "history":
+					port.postMessage({
+						type: "history",
+						history: chat_module_history
+					});
+					break;
+			}
+		};
+	}
+};
+
+/******/ })()
+;
+```
+
+```javascript
+(()=>{"use strict";const s=[];onconnect=function(t){for(const o of t.ports)o.onmessage=t=>{const e=t.data;switch(e.type){case"message":n=e.content,c=e.from,s.length>10&&s.shift(),s.push(`${c}: ${n}`);case"history":o.postMessage({type:"history",history:s})}var n,c}}})();
+```
+
+# dist/workers/fibonacci.js
+
+```javascript
+/******/ (() => { // webpackBootstrap
+/******/ 	var __webpack_modules__ = ({});
+```
+
+
/* webpack runtime code */ + +``` js +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ (() => { +/******/ __webpack_require__.p = "/dist/"; +/******/ })(); +/******/ +/******/ /* webpack/runtime/importScripts chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded chunks +/******/ // "1" means "already loaded" +/******/ var installedChunks = { +/******/ 721: 1 +/******/ }; +/******/ +/******/ // importScripts chunk loading +/******/ var installChunk = (data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ for(var moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) runtime(__webpack_require__); +/******/ while(chunkIds.length) +/******/ installedChunks[chunkIds.pop()] = 1; +/******/ parentChunkLoadingFunction(data); +/******/ }; +/******/ __webpack_require__.f.i = (chunkId, promises) => { +/******/ // "1" is the signal for "already loaded" +/******/ if(!installedChunks[chunkId]) { +/******/ if(true) { // all chunks have JS +/******/ importScripts(__webpack_require__.p + __webpack_require__.u(chunkId)); +/******/ } +/******/ } +/******/ }; +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || []; +/******/ var parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal); +/******/ chunkLoadingGlobal.push = installChunk; +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ })(); +/******/ +/************************************************************************/ +``` + +
+ +``` js +var __webpack_exports__ = {}; +/*!***********************!*\ + !*** ./fib-worker.js ***! + \***********************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: __webpack_require__.e, __webpack_require__, __webpack_require__.* */ +/*! ModuleConcatenation bailout: Module is not an ECMAScript module */ +onmessage = async event => { + const { fibonacci } = await __webpack_require__.e(/*! import() */ 129).then(__webpack_require__.bind(__webpack_require__, /*! ./fibonacci */ 3)); + const value = JSON.parse(event.data); + postMessage(`fib(${value}) = ${fibonacci(value)}`); +}; + +/******/ })() +; +``` + +```javascript +(()=>{var e={},r={};function o(t){var a=r[t];if(void 0!==a)return a.exports;var s=r[t]={exports:{}};return e[t](s,s.exports,o),s.exports}o.m=e,o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce((r,t)=>(o.f[t](e,r),r),[])),o.u=e=>e+".js",o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),o.p="/dist/",(()=>{var e={721:1};o.f.i=(r,t)=>{e[r]||importScripts(o.p+o.u(r))};var r=self.webpackChunk=self.webpackChunk||[],t=r.push.bind(r);r.push=r=>{var[a,s,p]=r;for(var n in s)o.o(s,n)&&(o.m[n]=s[n]);for(p&&p(o);a.length;)e[a.pop()]=1;t(r)}})(),onmessage=async e=>{const{fibonacci:r}=await o.e(129).then(o.bind(o,129)),t=JSON.parse(e.data);postMessage(`fib(${t}) = ${r(t)}`)}})(); +``` + +# dist/129.js + +```javascript +"use strict"; +(self["webpackChunk"] = self["webpackChunk"] || []).push([[129],{ + +/***/ 3 +/*!**********************!*\ + !*** ./fibonacci.js ***! + \**********************/ +/*! namespace exports */ +/*! export fibonacci [provided] [used in main, 9a81d90cfd0dfd13d748] [usage prevents renaming] */ +/*! runtime requirements: __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ fibonacci: () => (/* binding */ fibonacci) +/* harmony export */ }); +function fibonacci(n) { + return n < 1 ? 0 : n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2); +} + + +/***/ } + +}]); +``` + +# Info + +## Unoptimized + +``` +asset main.js 12.1 KiB [emitted] (name: main) +asset workers/fibonacci.js 5.24 KiB [emitted] (name: fibonacci) +asset chat.js 839 bytes [emitted] (name: chat) +asset 129.js 729 bytes [emitted] +chunk (runtime: 9a81d90cfd0dfd13d748, main) 129.js 103 bytes [rendered] + > ./fibonacci ./example.js 70:30-51 + > ./fibonacci ./fib-worker.js 2:29-50 + ./fibonacci.js 103 bytes [built] [code generated] + [exports: fibonacci] + [all exports used] + import() ./fibonacci ./example.js 70:30-51 + import() ./fibonacci ./fib-worker.js 2:29-50 +chunk (runtime: 1fad8bf8de78b0a77bfd) chat.js (chat) 527 bytes [entry] [rendered] + > ./example.js 25:19-31:1 + ./chat-worker.js + 1 modules 527 bytes [built] [code generated] + [no exports] + [no exports used] + new Worker() ./chat-worker.js ./example.js 25:19-31:1 +chunk (runtime: 9a81d90cfd0dfd13d748) workers/fibonacci.js (fibonacci) 176 bytes (javascript) 1.88 KiB (runtime) [entry] [rendered] + > ./example.js 80:18-84:2 + runtime modules 1.88 KiB 6 modules + ./fib-worker.js 176 bytes [built] [code generated] + [no exports used] + new Worker() ./fib-worker.js ./example.js 80:18-84:2 +chunk (runtime: main) main.js (main) 2.25 KiB (javascript) 5.42 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.42 KiB 7 modules + ./example.js 2.25 KiB [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` + +## Production mode + +``` +asset main.js 3.29 KiB [emitted] [minimized] (name: main) +asset workers/fibonacci.js 776 bytes [emitted] [minimized] (name: fibonacci) +asset chat.js 270 bytes [emitted] [minimized] (name: chat) +asset 129.js 156 bytes [emitted] [minimized] +chunk (runtime: 9a81d90cfd0dfd13d748, main) 129.js 103 bytes [rendered] + > ./fibonacci ./fib-worker.js 2:29-50 + > ./fibonacci ./example.js 70:30-51 + ./fibonacci.js 103 bytes [built] [code generated] + [exports: fibonacci] + [all exports used] + import() ./fibonacci ./example.js 70:30-51 + import() ./fibonacci ./fib-worker.js 2:29-50 +chunk (runtime: 1fad8bf8de78b0a77bfd) chat.js (chat) 527 bytes [entry] [rendered] + > ./example.js 25:19-31:1 + ./chat-worker.js + 1 modules 527 bytes [built] [code generated] + [no exports] + [no exports used] + new Worker() ./chat-worker.js ./example.js 25:19-31:1 +chunk (runtime: 9a81d90cfd0dfd13d748) workers/fibonacci.js (fibonacci) 176 bytes (javascript) 1.88 KiB (runtime) [entry] [rendered] + > ./example.js 80:18-84:2 + runtime modules 1.88 KiB 6 modules + ./fib-worker.js 176 bytes [built] [code generated] + [no exports used] + new Worker() ./fib-worker.js ./example.js 80:18-84:2 +chunk (runtime: main) main.js (main) 2.25 KiB (javascript) 5.42 KiB (runtime) [entry] [rendered] + > ./example.js main + runtime modules 5.42 KiB 7 modules + ./example.js 2.25 KiB [built] [code generated] + [no exports used] + entry ./example.js main +webpack X.X.X compiled successfully +``` diff --git a/examples/worker/build.js b/examples/worker/build.js new file mode 100644 index 00000000000..5768b058787 --- /dev/null +++ b/examples/worker/build.js @@ -0,0 +1,3 @@ +global.NO_TARGET_ARGS = true; +global.NO_PUBLIC_PATH = true; +require("../build-common"); diff --git a/examples/worker/chat-module.js b/examples/worker/chat-module.js new file mode 100644 index 00000000000..716a104a9dc --- /dev/null +++ b/examples/worker/chat-module.js @@ -0,0 +1,6 @@ +export const history = []; + +export const add = (content, from) => { + if (history.length > 10) history.shift(); + history.push(`${from}: ${content}`); +}; diff --git a/examples/worker/chat-worker.js b/examples/worker/chat-worker.js new file mode 100644 index 00000000000..66fa65165a9 --- /dev/null +++ b/examples/worker/chat-worker.js @@ -0,0 +1,20 @@ +import { history, add } from "./chat-module"; + +onconnect = function (e) { + for (const port of e.ports) { + port.onmessage = event => { + const msg = event.data; + switch (msg.type) { + case "message": + add(msg.content, msg.from); + // fallthrough + case "history": + port.postMessage({ + type: "history", + history + }); + break; + } + }; + } +}; diff --git a/examples/worker/example.js b/examples/worker/example.js new file mode 100644 index 00000000000..fcbe23f092f --- /dev/null +++ b/examples/worker/example.js @@ -0,0 +1,97 @@ +document.body.innerHTML = ` +

+	
+ + +
+

Computing fibonacci without worker:

+ +

+	

Computing fibonacci with worker:

+ +

+`;
+
+const history = document.getElementById("history");
+const message = document.getElementById("message");
+const send = document.getElementById("send");
+const fib1 = document.getElementById("fib1");
+const output1 = document.getElementById("output1");
+const fib2 = document.getElementById("fib2");
+const output2 = document.getElementById("output2");
+
+/// CHAT with shared worker ///
+
+const chatWorker = new SharedWorker(
+	new URL("./chat-worker.js", import.meta.url),
+	{
+		name: "chat",
+		type: "module"
+	}
+);
+
+let historyTimeout;
+const scheduleUpdateHistory = () => {
+	clearTimeout(historyTimeout);
+	historyTimeout = setTimeout(() => {
+		chatWorker.port.postMessage({ type: "history" });
+	}, 1000);
+};
+scheduleUpdateHistory();
+
+const from = `User ${Math.floor(Math.random() * 10000)}`;
+
+send.addEventListener("click", e => {
+	chatWorker.port.postMessage({
+		type: "message",
+		content: message.value,
+		from
+	});
+	message.value = "";
+	message.focus();
+	e.preventDefault();
+});
+
+chatWorker.port.onmessage = event => {
+	const msg = event.data;
+	switch (msg.type) {
+		case "history":
+			history.innerText = msg.history.join("\n");
+			scheduleUpdateHistory();
+			break;
+	}
+};
+
+/// FIBONACCI without worker ///
+
+fib1.addEventListener("change", async () => {
+	try {
+		const value = parseInt(fib1.value, 10);
+		const { fibonacci } = await import("./fibonacci");
+		const result = fibonacci(value);
+		output1.innerText = `fib(${value}) = ${result}`;
+	} catch (e) {
+		output1.innerText = e.message;
+	}
+});
+
+/// FIBONACCI with worker ///
+
+const fibWorker = new Worker(new URL("./fib-worker.js", import.meta.url), {
+	name: "fibonacci",
+	type: "module"
+	/* webpackEntryOptions: { filename: "workers/[name].js" } */
+});
+
+fib2.addEventListener("change", () => {
+	try {
+		const value = parseInt(fib2.value, 10);
+		fibWorker.postMessage(`${value}`);
+	} catch (e) {
+		output2.innerText = e.message;
+	}
+});
+
+fibWorker.onmessage = event => {
+	output2.innerText = event.data;
+};
diff --git a/examples/worker/fib-worker.js b/examples/worker/fib-worker.js
new file mode 100644
index 00000000000..42efa83cf4e
--- /dev/null
+++ b/examples/worker/fib-worker.js
@@ -0,0 +1,5 @@
+onmessage = async event => {
+	const { fibonacci } = await import("./fibonacci");
+	const value = JSON.parse(event.data);
+	postMessage(`fib(${value}) = ${fibonacci(value)}`);
+};
diff --git a/examples/worker/fibonacci.js b/examples/worker/fibonacci.js
new file mode 100644
index 00000000000..282fcec2fca
--- /dev/null
+++ b/examples/worker/fibonacci.js
@@ -0,0 +1,3 @@
+export function fibonacci(n) {
+	return n < 1 ? 0 : n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
+}
diff --git a/examples/worker/index.html b/examples/worker/index.html
new file mode 100644
index 00000000000..fd8adb597c8
--- /dev/null
+++ b/examples/worker/index.html
@@ -0,0 +1,10 @@
+
+
+	
+		
+		Worker example
+	
+	
+		
+	
+
diff --git a/examples/worker/template.md b/examples/worker/template.md
new file mode 100644
index 00000000000..6a93ddfd9b5
--- /dev/null
+++ b/examples/worker/template.md
@@ -0,0 +1,75 @@
+# example.js
+
+```javascript
+_{{example.js}}_
+```
+
+# fib-worker.js
+
+```javascript
+_{{fib-worker.js}}_
+```
+
+# fibonacci.js
+
+```javascript
+_{{fibonacci.js}}_
+```
+
+# chat-worker.js
+
+```javascript
+_{{chat-worker.js}}_
+```
+
+# chat-module.js
+
+```javascript
+_{{chat-module.js}}_
+```
+
+# dist/main.js
+
+```javascript
+_{{dist/main.js}}_
+```
+
+# dist/chat.js
+
+```javascript
+_{{dist/chat.js}}_
+```
+
+```javascript
+_{{production:dist/chat.js}}_
+```
+
+# dist/workers/fibonacci.js
+
+```javascript
+_{{dist/workers/fibonacci.js}}_
+```
+
+```javascript
+_{{production:dist/workers/fibonacci.js}}_
+```
+
+# dist/129.js
+
+```javascript
+_{{dist/129.js}}_
+```
+
+# Info
+
+## Unoptimized
+
+```
+_{{stdout}}_
+```
+
+## Production mode
+
+```
+_{{production:stdout}}_
+```
diff --git a/examples/worker/webpack.config.js b/examples/worker/webpack.config.js
new file mode 100644
index 00000000000..08ae0d171de
--- /dev/null
+++ b/examples/worker/webpack.config.js
@@ -0,0 +1,22 @@
+"use strict";
+
+const path = require("path");
+
+/** @type {import("webpack").Configuration} */
+const config = {
+	entry: "./example.js",
+	output: {
+		path: path.join(__dirname, "dist"),
+		filename: "[name].js",
+		chunkFilename: "[name].js",
+		publicPath: "/dist/"
+	},
+	optimization: {
+		concatenateModules: true,
+		usedExports: true,
+		providedExports: true,
+		chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only)
+	}
+};
+
+module.exports = config;
diff --git a/generate-types-config.js b/generate-types-config.js
new file mode 100644
index 00000000000..89205e3496b
--- /dev/null
+++ b/generate-types-config.js
@@ -0,0 +1,12 @@
+"use strict";
+
+module.exports = {
+	nameMapping: {
+		FsStats: /^Stats Import fs/,
+		validateFunction: /^validate Import/,
+		Configuration: /^WebpackOptions /,
+		MultiConfiguration: /^MultiWebpackOptions /
+	},
+	exclude: [/^devServer in WebpackOptions /],
+	include: [/^(_module|_compilation|_compiler) in NormalModuleLoaderContext /]
+};
diff --git a/hot/dev-server.js b/hot/dev-server.js
index a4cb0f50d24..31146474b01 100644
--- a/hot/dev-server.js
+++ b/hot/dev-server.js
@@ -2,24 +2,33 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-/*globals window __webpack_hash__ */
+/* globals __webpack_hash__ */
 if (module.hot) {
+	/** @type {undefined|string} */
 	var lastHash;
 	var upToDate = function upToDate() {
-		return lastHash.indexOf(__webpack_hash__) >= 0;
+		return /** @type {string} */ (lastHash).indexOf(__webpack_hash__) >= 0;
 	};
 	var log = require("./log");
 	var check = function check() {
 		module.hot
 			.check(true)
-			.then(function(updatedModules) {
+			.then(function (updatedModules) {
 				if (!updatedModules) {
-					log("warning", "[HMR] Cannot find update. Need to do a full reload!");
+					log(
+						"warning",
+						"[HMR] Cannot find update. " +
+							(typeof window !== "undefined"
+								? "Need to do a full reload!"
+								: "Please reload manually!")
+					);
 					log(
 						"warning",
 						"[HMR] (Probably because of restarting the webpack-dev-server)"
 					);
-					window.location.reload();
+					if (typeof window !== "undefined") {
+						window.location.reload();
+					}
 					return;
 				}
 
@@ -33,28 +42,48 @@ if (module.hot) {
 					log("info", "[HMR] App is up to date.");
 				}
 			})
-			.catch(function(err) {
+			.catch(function (err) {
 				var status = module.hot.status();
 				if (["abort", "fail"].indexOf(status) >= 0) {
 					log(
 						"warning",
-						"[HMR] Cannot apply update. Need to do a full reload!"
+						"[HMR] Cannot apply update. " +
+							(typeof window !== "undefined"
+								? "Need to do a full reload!"
+								: "Please reload manually!")
 					);
-					log("warning", "[HMR] " + err.stack || err.message);
-					window.location.reload();
+					log("warning", "[HMR] " + log.formatError(err));
+					if (typeof window !== "undefined") {
+						window.location.reload();
+					}
 				} else {
-					log("warning", "[HMR] Update failed: " + err.stack || err.message);
+					log("warning", "[HMR] Update failed: " + log.formatError(err));
 				}
 			});
 	};
+	/** @type {EventTarget | NodeJS.EventEmitter} */
 	var hotEmitter = require("./emitter");
-	hotEmitter.on("webpackHotUpdate", function(currentHash) {
-		lastHash = currentHash;
+	/**
+	 * @param {CustomEvent<{ currentHash: string }>} event event or hash
+	 */
+	var handler = function (event) {
+		lastHash = typeof event === "string" ? event : event.detail.currentHash;
 		if (!upToDate() && module.hot.status() === "idle") {
 			log("info", "[HMR] Checking for updates on the server...");
 			check();
 		}
-	});
+	};
+
+	if (typeof EventTarget !== "undefined" && hotEmitter instanceof EventTarget) {
+		hotEmitter.addEventListener(
+			"webpackHotUpdate",
+			/** @type {EventListener} */
+			(handler)
+		);
+	} else {
+		hotEmitter.on("webpackHotUpdate", handler);
+	}
+
 	log("info", "[HMR] Waiting for update signal from WDS...");
 } else {
 	throw new Error("[HMR] Hot Module Replacement is disabled.");
diff --git a/hot/emitter-event-target.js b/hot/emitter-event-target.js
new file mode 100644
index 00000000000..375d9c4b55f
--- /dev/null
+++ b/hot/emitter-event-target.js
@@ -0,0 +1,7 @@
+if (typeof EventTarget !== "function") {
+	throw new Error(
+		"Environment doesn't support lazy compilation (requires EventTarget)"
+	);
+}
+
+module.exports = new EventTarget();
diff --git a/hot/lazy-compilation-node.js b/hot/lazy-compilation-node.js
new file mode 100644
index 00000000000..88b4863a427
--- /dev/null
+++ b/hot/lazy-compilation-node.js
@@ -0,0 +1,66 @@
+"use strict";
+
+/* global __resourceQuery */
+
+var urlBase = decodeURIComponent(__resourceQuery.slice(1));
+
+/**
+ * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
+ * @returns {() => void} function to destroy response
+ */
+exports.keepAlive = function (options) {
+	var data = options.data;
+
+	/**
+	 * @param {Error} err error
+	 */
+	function errorHandler(err) {
+		err.message =
+			"Problem communicating active modules to the server: " + err.message;
+		options.onError(err);
+	}
+
+	/** @type {Promise} */
+	var mod = require("./load-http")(urlBase.startsWith("https"));
+
+	/** @type {import("http").ClientRequest} */
+	var request;
+	/** @type {import("http").IncomingMessage} */
+	var response;
+
+	mod.then(function (client) {
+		request = client.request(
+			urlBase + data,
+			{
+				agent: false,
+				headers: { accept: "text/event-stream" }
+			},
+			function (res) {
+				response = res;
+				response.on("error", errorHandler);
+
+				if (!options.active && !options.module.hot) {
+					console.log(
+						"Hot Module Replacement is not enabled. Waiting for process restart..."
+					);
+				}
+			}
+		);
+
+		request.on("error", errorHandler);
+		request.end();
+	});
+
+	return function () {
+		if (response) {
+			response.destroy();
+		}
+	};
+};
+
+/**
+ * @param {string} value new url value
+ */
+exports.setUrl = function (value) {
+	urlBase = value;
+};
diff --git a/hot/lazy-compilation-universal.js b/hot/lazy-compilation-universal.js
new file mode 100644
index 00000000000..dc2502aa52d
--- /dev/null
+++ b/hot/lazy-compilation-universal.js
@@ -0,0 +1,18 @@
+"use strict";
+
+/* global __resourceQuery */
+
+var isNodeLikeEnv =
+	typeof global !== "undefined" && typeof global.process !== "undefined";
+
+var handler = isNodeLikeEnv
+	? require("./lazy-compilation-node")
+	: require("./lazy-compilation-web");
+
+handler.setUrl(decodeURIComponent(__resourceQuery.slice(1)));
+
+/**
+ * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
+ * @returns {() => void} function to destroy response
+ */
+module.exports = handler;
diff --git a/hot/lazy-compilation-web.js b/hot/lazy-compilation-web.js
new file mode 100644
index 00000000000..04c26bb1872
--- /dev/null
+++ b/hot/lazy-compilation-web.js
@@ -0,0 +1,93 @@
+"use strict";
+
+/* global __resourceQuery */
+
+if (typeof EventSource !== "function") {
+	throw new Error(
+		"Environment doesn't support lazy compilation (requires EventSource)"
+	);
+}
+
+var urlBase = decodeURIComponent(__resourceQuery.slice(1));
+/** @type {EventSource | undefined} */
+var activeEventSource;
+var activeKeys = new Map();
+var errorHandlers = new Set();
+
+var updateEventSource = function updateEventSource() {
+	if (activeEventSource) activeEventSource.close();
+	if (activeKeys.size) {
+		activeEventSource = new EventSource(
+			urlBase + Array.from(activeKeys.keys()).join("@")
+		);
+		/**
+		 * @this {EventSource}
+		 * @param {Event & { message?: string, filename?: string, lineno?: number, colno?: number, error?: Error }} event event
+		 */
+		activeEventSource.onerror = function (event) {
+			errorHandlers.forEach(function (onError) {
+				onError(
+					new Error(
+						"Problem communicating active modules to the server: " +
+							event.message +
+							" " +
+							event.filename +
+							":" +
+							event.lineno +
+							":" +
+							event.colno +
+							" " +
+							event.error
+					)
+				);
+			});
+		};
+	} else {
+		activeEventSource = undefined;
+	}
+};
+
+/**
+ * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
+ * @returns {() => void} function to destroy response
+ */
+exports.keepAlive = function (options) {
+	var data = options.data;
+	var onError = options.onError;
+
+	errorHandlers.add(onError);
+
+	var value = activeKeys.get(data) || 0;
+
+	activeKeys.set(data, value + 1);
+
+	if (value === 0) {
+		updateEventSource();
+	}
+
+	if (!options.active && !options.module.hot) {
+		console.log(
+			"Hot Module Replacement is not enabled. Waiting for process restart..."
+		);
+	}
+
+	return function () {
+		errorHandlers.delete(onError);
+		setTimeout(function () {
+			var value = activeKeys.get(data);
+			if (value === 1) {
+				activeKeys.delete(data);
+				updateEventSource();
+			} else {
+				activeKeys.set(data, value - 1);
+			}
+		}, 1000);
+	};
+};
+
+/**
+ * @param {string} value new url value
+ */
+exports.setUrl = function (value) {
+	urlBase = value;
+};
diff --git a/hot/load-http.js b/hot/load-http.js
new file mode 100644
index 00000000000..641076eec68
--- /dev/null
+++ b/hot/load-http.js
@@ -0,0 +1,7 @@
+/**
+ * @param {boolean} isHTTPS true when need https module, otherwise false
+ * @returns {Promise}
+ */
+module.exports = function (isHTTPS) {
+	return isHTTPS ? import("https") : import("http");
+};
diff --git a/hot/log-apply-result.js b/hot/log-apply-result.js
index b63e757418d..cb46366dd44 100644
--- a/hot/log-apply-result.js
+++ b/hot/log-apply-result.js
@@ -2,8 +2,13 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-module.exports = function(updatedModules, renewedModules) {
-	var unacceptedModules = updatedModules.filter(function(moduleId) {
+
+/**
+ * @param {(string | number)[]} updatedModules updated modules
+ * @param {(string | number)[] | null} renewedModules renewed modules
+ */
+module.exports = function (updatedModules, renewedModules) {
+	var unacceptedModules = updatedModules.filter(function (moduleId) {
 		return renewedModules && renewedModules.indexOf(moduleId) < 0;
 	});
 	var log = require("./log");
@@ -13,7 +18,7 @@ module.exports = function(updatedModules, renewedModules) {
 			"warning",
 			"[HMR] The following modules couldn't be hot updated: (They would need a full reload!)"
 		);
-		unacceptedModules.forEach(function(moduleId) {
+		unacceptedModules.forEach(function (moduleId) {
 			log("warning", "[HMR]  - " + moduleId);
 		});
 	}
@@ -22,7 +27,7 @@ module.exports = function(updatedModules, renewedModules) {
 		log("info", "[HMR] Nothing hot updated.");
 	} else {
 		log("info", "[HMR] Updated modules:");
-		renewedModules.forEach(function(moduleId) {
+		renewedModules.forEach(function (moduleId) {
 			if (typeof moduleId === "string" && moduleId.indexOf("!") !== -1) {
 				var parts = moduleId.split("!");
 				log.groupCollapsed("info", "[HMR]  - " + parts.pop());
@@ -32,13 +37,13 @@ module.exports = function(updatedModules, renewedModules) {
 				log("info", "[HMR]  - " + moduleId);
 			}
 		});
-		var numberIds = renewedModules.every(function(moduleId) {
+		var numberIds = renewedModules.every(function (moduleId) {
 			return typeof moduleId === "number";
 		});
 		if (numberIds)
 			log(
 				"info",
-				"[HMR] Consider using the NamedModulesPlugin for module names."
+				'[HMR] Consider using the optimization.moduleIds: "named" for module names.'
 			);
 	}
 };
diff --git a/hot/log.js b/hot/log.js
index d9e09b221de..d3e46e1bf86 100644
--- a/hot/log.js
+++ b/hot/log.js
@@ -1,7 +1,14 @@
+/** @typedef {"info" | "warning" | "error"} LogLevel */
+
+/** @type {LogLevel} */
 var logLevel = "info";
 
 function dummy() {}
 
+/**
+ * @param {LogLevel} level log level
+ * @returns {boolean} true, if should log
+ */
 function shouldLog(level) {
 	var shouldLog =
 		(logLevel === "info" && level === "info") ||
@@ -10,15 +17,23 @@ function shouldLog(level) {
 	return shouldLog;
 }
 
+/**
+ * @param {(msg?: string) => void} logFn log function
+ * @returns {(level: LogLevel, msg?: string) => void} function that logs when log level is sufficient
+ */
 function logGroup(logFn) {
-	return function(level, msg) {
+	return function (level, msg) {
 		if (shouldLog(level)) {
 			logFn(msg);
 		}
 	};
 }
 
-module.exports = function(level, msg) {
+/**
+ * @param {LogLevel} level log level
+ * @param {string|Error} msg message
+ */
+module.exports = function (level, msg) {
 	if (shouldLog(level)) {
 		if (level === "info") {
 			console.log(msg);
@@ -30,6 +45,21 @@ module.exports = function(level, msg) {
 	}
 };
 
+/**
+ * @param {Error} err error
+ * @returns {string} formatted error
+ */
+module.exports.formatError = function (err) {
+	var message = err.message;
+	var stack = err.stack;
+	if (!stack) {
+		return message;
+	} else if (stack.indexOf(message) < 0) {
+		return message + "\n" + stack;
+	}
+	return stack;
+};
+
 var group = console.group || dummy;
 var groupCollapsed = console.groupCollapsed || dummy;
 var groupEnd = console.groupEnd || dummy;
@@ -40,6 +70,9 @@ module.exports.groupCollapsed = logGroup(groupCollapsed);
 
 module.exports.groupEnd = logGroup(groupEnd);
 
-module.exports.setLogLevel = function(level) {
+/**
+ * @param {LogLevel} level log level
+ */
+module.exports.setLogLevel = function (level) {
 	logLevel = level;
 };
diff --git a/hot/only-dev-server.js b/hot/only-dev-server.js
index cf452dc6e33..785dd33d461 100644
--- a/hot/only-dev-server.js
+++ b/hot/only-dev-server.js
@@ -2,17 +2,18 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-/*globals __webpack_hash__ */
+/* globals __webpack_hash__ */
 if (module.hot) {
+	/** @type {undefined | string} */
 	var lastHash;
 	var upToDate = function upToDate() {
-		return lastHash.indexOf(__webpack_hash__) >= 0;
+		return /** @type {string} */ (lastHash).indexOf(__webpack_hash__) >= 0;
 	};
 	var log = require("./log");
 	var check = function check() {
 		module.hot
 			.check()
-			.then(function(updatedModules) {
+			.then(function (updatedModules) {
 				if (!updatedModules) {
 					log("warning", "[HMR] Cannot find update. Need to do a full reload!");
 					log(
@@ -27,21 +28,21 @@ if (module.hot) {
 						ignoreUnaccepted: true,
 						ignoreDeclined: true,
 						ignoreErrored: true,
-						onUnaccepted: function(data) {
+						onUnaccepted: function (data) {
 							log(
 								"warning",
 								"Ignored an update to unaccepted module " +
 									data.chain.join(" -> ")
 							);
 						},
-						onDeclined: function(data) {
+						onDeclined: function (data) {
 							log(
 								"warning",
 								"Ignored an update to declined module " +
 									data.chain.join(" -> ")
 							);
 						},
-						onErrored: function(data) {
+						onErrored: function (data) {
 							log("error", data.error);
 							log(
 								"warning",
@@ -53,7 +54,7 @@ if (module.hot) {
 							);
 						}
 					})
-					.then(function(renewedModules) {
+					.then(function (renewedModules) {
 						if (!upToDate()) {
 							check();
 						}
@@ -65,25 +66,26 @@ if (module.hot) {
 						}
 					});
 			})
-			.catch(function(err) {
+			.catch(function (err) {
 				var status = module.hot.status();
 				if (["abort", "fail"].indexOf(status) >= 0) {
 					log(
 						"warning",
 						"[HMR] Cannot check for update. Need to do a full reload!"
 					);
-					log("warning", "[HMR] " + err.stack || err.message);
+					log("warning", "[HMR] " + log.formatError(err));
 				} else {
-					log(
-						"warning",
-						"[HMR] Update check failed: " + err.stack || err.message
-					);
+					log("warning", "[HMR] Update check failed: " + log.formatError(err));
 				}
 			});
 	};
+	/** @type {EventTarget | NodeJS.EventEmitter} */
 	var hotEmitter = require("./emitter");
-	hotEmitter.on("webpackHotUpdate", function(currentHash) {
-		lastHash = currentHash;
+	/**
+	 * @param {CustomEvent<{ currentHash: string }>} event event or hash
+	 */
+	var handler = function (event) {
+		lastHash = typeof event === "string" ? event : event.detail.currentHash;
 		if (!upToDate()) {
 			var status = module.hot.status();
 			if (status === "idle") {
@@ -98,7 +100,18 @@ if (module.hot) {
 				);
 			}
 		}
-	});
+	};
+
+	if (typeof EventTarget !== "undefined" && hotEmitter instanceof EventTarget) {
+		hotEmitter.addEventListener(
+			"webpackHotUpdate",
+			/** @type {EventListener} */
+			(handler)
+		);
+	} else {
+		hotEmitter.on("webpackHotUpdate", handler);
+	}
+
 	log("info", "[HMR] Waiting for update signal from WDS...");
 } else {
 	throw new Error("[HMR] Hot Module Replacement is disabled.");
diff --git a/hot/poll.js b/hot/poll.js
index f615accef7a..a35693cfa6f 100644
--- a/hot/poll.js
+++ b/hot/poll.js
@@ -2,16 +2,20 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-/*globals __resourceQuery */
+/* globals __resourceQuery */
 if (module.hot) {
-	var hotPollInterval = +__resourceQuery.substr(1) || 10 * 60 * 1000;
+	// eslint-disable-next-line no-implicit-coercion
+	var hotPollInterval = +__resourceQuery.slice(1) || 10 * 60 * 1000;
 	var log = require("./log");
 
+	/**
+	 * @param {boolean=} fromUpdate true when called from update
+	 */
 	var checkForUpdate = function checkForUpdate(fromUpdate) {
 		if (module.hot.status() === "idle") {
 			module.hot
 				.check(true)
-				.then(function(updatedModules) {
+				.then(function (updatedModules) {
 					if (!updatedModules) {
 						if (fromUpdate) log("info", "[HMR] Update applied.");
 						return;
@@ -19,14 +23,14 @@ if (module.hot) {
 					require("./log-apply-result")(updatedModules, updatedModules);
 					checkForUpdate(true);
 				})
-				.catch(function(err) {
+				.catch(function (err) {
 					var status = module.hot.status();
 					if (["abort", "fail"].indexOf(status) >= 0) {
 						log("warning", "[HMR] Cannot apply update.");
-						log("warning", "[HMR] " + err.stack || err.message);
+						log("warning", "[HMR] " + log.formatError(err));
 						log("warning", "[HMR] You need to restart the application!");
 					} else {
-						log("warning", "[HMR] Update failed: " + err.stack || err.message);
+						log("warning", "[HMR] Update failed: " + log.formatError(err));
 					}
 				});
 		}
diff --git a/hot/signal.js b/hot/signal.js
index d3ce50e8cc5..36a0cbe38c7 100644
--- a/hot/signal.js
+++ b/hot/signal.js
@@ -2,13 +2,17 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-/*globals __resourceQuery */
+/* globals __resourceQuery */
 if (module.hot) {
 	var log = require("./log");
+
+	/**
+	 * @param {boolean=} fromUpdate true when called from update
+	 */
 	var checkForUpdate = function checkForUpdate(fromUpdate) {
 		module.hot
 			.check()
-			.then(function(updatedModules) {
+			.then(function (updatedModules) {
 				if (!updatedModules) {
 					if (fromUpdate) log("info", "[HMR] Update applied.");
 					else log("warning", "[HMR] Cannot find update.");
@@ -18,7 +22,7 @@ if (module.hot) {
 				return module.hot
 					.apply({
 						ignoreUnaccepted: true,
-						onUnaccepted: function(data) {
+						onUnaccepted: function (data) {
 							log(
 								"warning",
 								"Ignored an update to unaccepted module " +
@@ -26,26 +30,26 @@ if (module.hot) {
 							);
 						}
 					})
-					.then(function(renewedModules) {
+					.then(function (renewedModules) {
 						require("./log-apply-result")(updatedModules, renewedModules);
 
 						checkForUpdate(true);
 						return null;
 					});
 			})
-			.catch(function(err) {
+			.catch(function (err) {
 				var status = module.hot.status();
 				if (["abort", "fail"].indexOf(status) >= 0) {
 					log("warning", "[HMR] Cannot apply update.");
-					log("warning", "[HMR] " + err.stack || err.message);
+					log("warning", "[HMR] " + log.formatError(err));
 					log("warning", "[HMR] You need to restart the application!");
 				} else {
-					log("warning", "[HMR] Update failed: " + err.stack || err.message);
+					log("warning", "[HMR] Update failed: " + (err.stack || err.message));
 				}
 			});
 	};
 
-	process.on(__resourceQuery.substr(1) || "SIGUSR2", function() {
+	process.on(__resourceQuery.slice(1) || "SIGUSR2", function () {
 		if (module.hot.status() !== "idle") {
 			log(
 				"warning",
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 00000000000..f97ca02331f
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,60 @@
+"use strict";
+
+/** @type {import("jest").Config} */
+const config = {
+	testTimeout: 30000,
+	prettierPath: require.resolve("prettier-2"),
+	forceExit: true,
+	setupFilesAfterEnv: ["/test/setupTestFramework.js"],
+	testMatch: [
+		"/test/*.test.js",
+		"/test/*.basictest.js",
+		"/test/*.longtest.js",
+		"/test/*.unittest.js",
+		"/test/*.spectest.js"
+	],
+	watchPathIgnorePatterns: [
+		"/.git",
+		"/node_modules",
+		"/test/js",
+		"/test/browsertest/js",
+		"/test/fixtures/temp-cache-fixture",
+		"/test/fixtures/temp-",
+		"/benchmark",
+		"/assembly",
+		"/tooling",
+		"/examples/*/dist",
+		"/coverage",
+		"/.eslintcache"
+	],
+	modulePathIgnorePatterns: [
+		"/.git",
+		"/node_modules/webpack/node_modules",
+		"/test/js",
+		"/test/browsertest/js",
+		"/test/fixtures/temp-cache-fixture",
+		"/test/fixtures/temp-",
+		"/benchmark",
+		"/examples/*/dist",
+		"/coverage",
+		"/.eslintcache"
+	],
+	transformIgnorePatterns: [""],
+	coverageDirectory: "/coverage",
+	coveragePathIgnorePatterns: [
+		"\\.runtime\\.js$",
+		"/test",
+		"/schemas",
+		"/examples",
+		"/node_modules"
+	],
+	testEnvironment: "./test/harness/patch-node-env.js",
+	snapshotResolver: "./test/harness/snapshot/resolver.js",
+	coverageReporters: ["json"],
+	snapshotFormat: {
+		escapeString: true,
+		printBasicPrototype: true
+	}
+};
+
+module.exports = config;
diff --git a/lib/APIPlugin.js b/lib/APIPlugin.js
index 6cd80646dcd..a22ff435723 100644
--- a/lib/APIPlugin.js
+++ b/lib/APIPlugin.js
@@ -2,80 +2,388 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const {
+	getExternalModuleNodeCommonjsInitFragment
+} = require("./ExternalModule");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const WebpackError = require("./WebpackError");
 const ConstDependency = require("./dependencies/ConstDependency");
-const ParserHelpers = require("./ParserHelpers");
-
-const NullFactory = require("./NullFactory");
-
-/* eslint-disable camelcase */
-const REPLACEMENTS = {
-	__webpack_require__: "__webpack_require__",
-	__webpack_public_path__: "__webpack_require__.p",
-	__webpack_modules__: "__webpack_require__.m",
-	__webpack_chunk_load__: "__webpack_require__.e",
-	__non_webpack_require__: "require",
-	__webpack_nonce__: "__webpack_require__.nc",
-	"require.onError": "__webpack_require__.oe"
-};
-const NO_WEBPACK_REQUIRE = {
-	__non_webpack_require__: true
-};
-const REPLACEMENT_TYPES = {
-	__webpack_public_path__: "string",
-	__webpack_require__: "function",
-	__webpack_modules__: "object",
-	__webpack_chunk_load__: "function",
-	__webpack_nonce__: "string"
-};
-/* eslint-enable camelcase */
+const ModuleInitFragmentDependency = require("./dependencies/ModuleInitFragmentDependency");
+const RuntimeRequirementsDependency = require("./dependencies/RuntimeRequirementsDependency");
+const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+const {
+	evaluateToString,
+	toConstantDependency
+} = require("./javascript/JavascriptParserHelpers");
+const ChunkNameRuntimeModule = require("./runtime/ChunkNameRuntimeModule");
+const GetFullHashRuntimeModule = require("./runtime/GetFullHashRuntimeModule");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+
+/**
+ * @returns {Record} replacements
+ */
+function getReplacements() {
+	return {
+		__webpack_require__: {
+			expr: RuntimeGlobals.require,
+			req: [RuntimeGlobals.require],
+			type: "function",
+			assign: false
+		},
+		__webpack_global__: {
+			expr: RuntimeGlobals.require,
+			req: [RuntimeGlobals.require],
+			type: "function",
+			assign: false
+		},
+		__webpack_public_path__: {
+			expr: RuntimeGlobals.publicPath,
+			req: [RuntimeGlobals.publicPath],
+			type: "string",
+			assign: true
+		},
+		__webpack_base_uri__: {
+			expr: RuntimeGlobals.baseURI,
+			req: [RuntimeGlobals.baseURI],
+			type: "string",
+			assign: true
+		},
+		__webpack_modules__: {
+			expr: RuntimeGlobals.moduleFactories,
+			req: [RuntimeGlobals.moduleFactories],
+			type: "object",
+			assign: false
+		},
+		__webpack_chunk_load__: {
+			expr: RuntimeGlobals.ensureChunk,
+			req: [RuntimeGlobals.ensureChunk],
+			type: "function",
+			assign: true
+		},
+		__non_webpack_require__: {
+			expr: "require",
+			req: null,
+			type: undefined, // type is not known, depends on environment
+			assign: true
+		},
+		__webpack_nonce__: {
+			expr: RuntimeGlobals.scriptNonce,
+			req: [RuntimeGlobals.scriptNonce],
+			type: "string",
+			assign: true
+		},
+		__webpack_hash__: {
+			expr: `${RuntimeGlobals.getFullHash}()`,
+			req: [RuntimeGlobals.getFullHash],
+			type: "string",
+			assign: false
+		},
+		__webpack_chunkname__: {
+			expr: RuntimeGlobals.chunkName,
+			req: [RuntimeGlobals.chunkName],
+			type: "string",
+			assign: false
+		},
+		__webpack_get_script_filename__: {
+			expr: RuntimeGlobals.getChunkScriptFilename,
+			req: [RuntimeGlobals.getChunkScriptFilename],
+			type: "function",
+			assign: true
+		},
+		__webpack_runtime_id__: {
+			expr: RuntimeGlobals.runtimeId,
+			req: [RuntimeGlobals.runtimeId],
+			assign: false
+		},
+		"require.onError": {
+			expr: RuntimeGlobals.uncaughtErrorHandler,
+			req: [RuntimeGlobals.uncaughtErrorHandler],
+			type: undefined, // type is not known, could be function or undefined
+			assign: true // is never a pattern
+		},
+		__system_context__: {
+			expr: RuntimeGlobals.systemContext,
+			req: [RuntimeGlobals.systemContext],
+			type: "object",
+			assign: false
+		},
+		__webpack_share_scopes__: {
+			expr: RuntimeGlobals.shareScopeMap,
+			req: [RuntimeGlobals.shareScopeMap],
+			type: "object",
+			assign: false
+		},
+		__webpack_init_sharing__: {
+			expr: RuntimeGlobals.initializeSharing,
+			req: [RuntimeGlobals.initializeSharing],
+			type: "function",
+			assign: true
+		}
+	};
+}
+
+const PLUGIN_NAME = "APIPlugin";
 
 class APIPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"APIPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
+				const moduleOutput = compilation.options.output.module;
+				const nodeTarget = compiler.platform.node;
+				const nodeEsm = moduleOutput && nodeTarget;
+
+				const REPLACEMENTS = getReplacements();
+				if (nodeEsm) {
+					REPLACEMENTS.__non_webpack_require__.expr =
+						"__WEBPACK_EXTERNAL_createRequire_require";
+				}
+
 				compilation.dependencyTemplates.set(
 					ConstDependency,
 					new ConstDependency.Template()
 				);
+				compilation.dependencyTemplates.set(
+					ModuleInitFragmentDependency,
+					new ModuleInitFragmentDependency.Template()
+				);
 
-				const handler = parser => {
-					Object.keys(REPLACEMENTS).forEach(key => {
-						parser.hooks.expression
-							.for(key)
-							.tap(
-								"APIPlugin",
-								NO_WEBPACK_REQUIRE[key]
-									? ParserHelpers.toConstantDependency(
-											parser,
-											REPLACEMENTS[key]
-									  )
-									: ParserHelpers.toConstantDependencyWithWebpackRequire(
-											parser,
-											REPLACEMENTS[key]
-									  )
-							);
-						parser.hooks.evaluateTypeof
-							.for(key)
-							.tap(
-								"APIPlugin",
-								ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])
-							);
+				compilation.hooks.runtimeRequirementInTree
+					.for(RuntimeGlobals.chunkName)
+					.tap(PLUGIN_NAME, (chunk) => {
+						compilation.addRuntimeModule(
+							chunk,
+							new ChunkNameRuntimeModule(/** @type {string} */ (chunk.name))
+						);
+						return true;
 					});
+
+				compilation.hooks.runtimeRequirementInTree
+					.for(RuntimeGlobals.getFullHash)
+					.tap(PLUGIN_NAME, (chunk, _set) => {
+						compilation.addRuntimeModule(chunk, new GetFullHashRuntimeModule());
+						return true;
+					});
+
+				const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
+
+				hooks.renderModuleContent.tap(
+					PLUGIN_NAME,
+					(source, module, renderContext) => {
+						if (/** @type {BuildInfo} */ (module.buildInfo).needCreateRequire) {
+							const chunkInitFragments = [
+								getExternalModuleNodeCommonjsInitFragment(
+									renderContext.runtimeTemplate
+								)
+							];
+
+							renderContext.chunkInitFragments.push(...chunkInitFragments);
+						}
+
+						return source;
+					}
+				);
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 */
+				const handler = (parser) => {
+					parser.hooks.preDeclarator.tap(PLUGIN_NAME, (declarator) => {
+						if (
+							parser.scope.topLevelScope === true &&
+							declarator.id.type === "Identifier" &&
+							declarator.id.name === "module"
+						) {
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo).moduleArgument =
+								"__webpack_module__";
+						}
+					});
+
+					parser.hooks.preStatement.tap(PLUGIN_NAME, (statement) => {
+						if (parser.scope.topLevelScope === true) {
+							if (
+								statement.type === "FunctionDeclaration" &&
+								statement.id &&
+								statement.id.name === "module"
+							) {
+								/** @type {BuildInfo} */
+								(parser.state.module.buildInfo).moduleArgument =
+									"__webpack_module__";
+							} else if (
+								statement.type === "ClassDeclaration" &&
+								statement.id &&
+								statement.id.name === "module"
+							) {
+								/** @type {BuildInfo} */
+								(parser.state.module.buildInfo).moduleArgument =
+									"__webpack_module__";
+							}
+						}
+					});
+
+					for (const key of Object.keys(REPLACEMENTS)) {
+						const info = REPLACEMENTS[key];
+						parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expression) => {
+							const dep = toConstantDependency(parser, info.expr, info.req);
+
+							if (key === "__non_webpack_require__" && moduleOutput) {
+								if (nodeTarget) {
+									/** @type {BuildInfo} */
+									(parser.state.module.buildInfo).needCreateRequire = true;
+								} else {
+									const warning = new WebpackError(
+										`${PLUGIN_NAME}\n__non_webpack_require__ is only allowed in target node`
+									);
+									warning.loc = /** @type {DependencyLocation} */ (
+										expression.loc
+									);
+									warning.module = parser.state.module;
+									compilation.warnings.push(warning);
+								}
+							}
+
+							return dep(expression);
+						});
+						if (info.assign === false) {
+							parser.hooks.assign.for(key).tap(PLUGIN_NAME, (expr) => {
+								const err = new WebpackError(`${key} must not be assigned`);
+								err.loc = /** @type {DependencyLocation} */ (expr.loc);
+								throw err;
+							});
+						}
+						if (info.type) {
+							parser.hooks.evaluateTypeof
+								.for(key)
+								.tap(PLUGIN_NAME, evaluateToString(info.type));
+						}
+					}
+
+					parser.hooks.expression
+						.for("__webpack_layer__")
+						.tap(PLUGIN_NAME, (expr) => {
+							const dep = new ConstDependency(
+								JSON.stringify(parser.state.module.layer),
+								/** @type {Range} */ (expr.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+							return true;
+						});
+					parser.hooks.evaluateIdentifier
+						.for("__webpack_layer__")
+						.tap(PLUGIN_NAME, (expr) =>
+							(parser.state.module.layer === null
+								? new BasicEvaluatedExpression().setNull()
+								: new BasicEvaluatedExpression().setString(
+										parser.state.module.layer
+									)
+							).setRange(/** @type {Range} */ (expr.range))
+						);
+					parser.hooks.evaluateTypeof
+						.for("__webpack_layer__")
+						.tap(PLUGIN_NAME, (expr) =>
+							new BasicEvaluatedExpression()
+								.setString(
+									parser.state.module.layer === null ? "object" : "string"
+								)
+								.setRange(/** @type {Range} */ (expr.range))
+						);
+
+					parser.hooks.expression
+						.for("__webpack_module__.id")
+						.tap(PLUGIN_NAME, (expr) => {
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo).moduleConcatenationBailout =
+								"__webpack_module__.id";
+							const moduleArgument = parser.state.module.moduleArgument;
+							if (moduleArgument === "__webpack_module__") {
+								const dep = new RuntimeRequirementsDependency([
+									RuntimeGlobals.moduleId
+								]);
+								dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+								parser.state.module.addPresentationalDependency(dep);
+							} else {
+								const initDep = new ModuleInitFragmentDependency(
+									`var __webpack_internal_module_id__ = ${moduleArgument}.id;\n`,
+									[RuntimeGlobals.moduleId],
+									"__webpack_internal_module_id__"
+								);
+								parser.state.module.addPresentationalDependency(initDep);
+								const dep = new ConstDependency(
+									"__webpack_internal_module_id__",
+									/** @type {Range} */ (expr.range),
+									[]
+								);
+								dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+								parser.state.module.addPresentationalDependency(dep);
+							}
+							return true;
+						});
+
+					parser.hooks.expression
+						.for("__webpack_module__")
+						.tap(PLUGIN_NAME, (expr) => {
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo).moduleConcatenationBailout =
+								"__webpack_module__";
+							const moduleArgument = parser.state.module.moduleArgument;
+							if (moduleArgument === "__webpack_module__") {
+								const dep = new RuntimeRequirementsDependency([
+									RuntimeGlobals.module
+								]);
+								dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+								parser.state.module.addPresentationalDependency(dep);
+							} else {
+								const initDep = new ModuleInitFragmentDependency(
+									`var __webpack_internal_module__ = ${moduleArgument};\n`,
+									[RuntimeGlobals.module],
+									"__webpack_internal_module__"
+								);
+								parser.state.module.addPresentationalDependency(initDep);
+								const dep = new ConstDependency(
+									"__webpack_internal_module__",
+									/** @type {Range} */ (expr.range),
+									[]
+								);
+								dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+								parser.state.module.addPresentationalDependency(dep);
+							}
+							return true;
+						});
+					parser.hooks.evaluateTypeof
+						.for("__webpack_module__")
+						.tap(PLUGIN_NAME, evaluateToString("object"));
 				};
 
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("APIPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("APIPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/esm")
-					.tap("APIPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
 			}
 		);
 	}
diff --git a/lib/AbstractMethodError.js b/lib/AbstractMethodError.js
new file mode 100644
index 00000000000..ec669c60be1
--- /dev/null
+++ b/lib/AbstractMethodError.js
@@ -0,0 +1,56 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+const CURRENT_METHOD_REGEXP = /at ([a-zA-Z0-9_.]*)/;
+
+/**
+ * @param {string=} method method name
+ * @returns {string} message
+ */
+function createMessage(method) {
+	return `Abstract method${method ? ` ${method}` : ""}. Must be overridden.`;
+}
+
+/**
+ * @constructor
+ */
+function Message() {
+	/** @type {string | undefined} */
+	this.stack = undefined;
+	Error.captureStackTrace(this);
+	/** @type {RegExpMatchArray | null} */
+	const match =
+		/** @type {string} */
+		(/** @type {unknown} */ (this.stack))
+			.split("\n")[3]
+			.match(CURRENT_METHOD_REGEXP);
+
+	this.message = match && match[1] ? createMessage(match[1]) : createMessage();
+}
+
+/**
+ * Error for abstract method
+ * @example
+ * ```js
+ * class FooClass {
+ *     abstractMethod() {
+ *         throw new AbstractMethodError(); // error message: Abstract method FooClass.abstractMethod. Must be overridden.
+ *     }
+ * }
+ * ```
+ */
+class AbstractMethodError extends WebpackError {
+	constructor() {
+		super(new Message().message);
+		/** @type {string} */
+		this.name = "AbstractMethodError";
+	}
+}
+
+module.exports = AbstractMethodError;
diff --git a/lib/AmdMainTemplatePlugin.js b/lib/AmdMainTemplatePlugin.js
deleted file mode 100644
index ff715ec6c17..00000000000
--- a/lib/AmdMainTemplatePlugin.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
-
-"use strict";
-
-const { ConcatSource } = require("webpack-sources");
-const Template = require("./Template");
-
-/** @typedef {import("./Compilation")} Compilation */
-
-class AmdMainTemplatePlugin {
-	/**
-	 * @param {string} name the library name
-	 */
-	constructor(name) {
-		/** @type {string} */
-		this.name = name;
-	}
-
-	/**
-	 * @param {Compilation} compilation the compilation instance
-	 * @returns {void}
-	 */
-	apply(compilation) {
-		const { mainTemplate, chunkTemplate } = compilation;
-
-		const onRenderWithEntry = (source, chunk, hash) => {
-			const externals = chunk.getModules().filter(m => m.external);
-			const externalsDepsArray = JSON.stringify(
-				externals.map(
-					m => (typeof m.request === "object" ? m.request.amd : m.request)
-				)
-			);
-			const externalsArguments = externals
-				.map(
-					m => `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(`${m.id}`)}__`
-				)
-				.join(", ");
-
-			if (this.name) {
-				const name = mainTemplate.getAssetPath(this.name, {
-					hash,
-					chunk
-				});
-
-				return new ConcatSource(
-					`define(${JSON.stringify(
-						name
-					)}, ${externalsDepsArray}, function(${externalsArguments}) { return `,
-					source,
-					"});"
-				);
-			} else if (externalsArguments) {
-				return new ConcatSource(
-					`define(${externalsDepsArray}, function(${externalsArguments}) { return `,
-					source,
-					"});"
-				);
-			} else {
-				return new ConcatSource("define(function() { return ", source, "});");
-			}
-		};
-
-		for (const template of [mainTemplate, chunkTemplate]) {
-			template.hooks.renderWithEntry.tap(
-				"AmdMainTemplatePlugin",
-				onRenderWithEntry
-			);
-		}
-
-		mainTemplate.hooks.globalHashPaths.tap("AmdMainTemplatePlugin", paths => {
-			if (this.name) {
-				paths.push(this.name);
-			}
-			return paths;
-		});
-
-		mainTemplate.hooks.hash.tap("AmdMainTemplatePlugin", hash => {
-			hash.update("exports amd");
-			hash.update(this.name);
-		});
-	}
-}
-
-module.exports = AmdMainTemplatePlugin;
diff --git a/lib/AsyncDependenciesBlock.js b/lib/AsyncDependenciesBlock.js
index 3bf22d2e297..8ecd6b84de9 100644
--- a/lib/AsyncDependenciesBlock.js
+++ b/lib/AsyncDependenciesBlock.js
@@ -2,65 +2,127 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
+
 const DependenciesBlock = require("./DependenciesBlock");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./ChunkGroup").ChunkGroupOptions} ChunkGroupOptions */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+
+/** @typedef {(ChunkGroupOptions & { entryOptions?: EntryOptions } & { circular?: boolean })} GroupOptions */
 
-module.exports = class AsyncDependenciesBlock extends DependenciesBlock {
-	constructor(groupOptions, module, loc, request) {
+class AsyncDependenciesBlock extends DependenciesBlock {
+	/**
+	 * @param {GroupOptions | string | null} groupOptions options for the group
+	 * @param {(DependencyLocation | null)=} loc the line of code
+	 * @param {(string | null)=} request the request
+	 */
+	constructor(groupOptions, loc, request) {
 		super();
 		if (typeof groupOptions === "string") {
 			groupOptions = { name: groupOptions };
 		} else if (!groupOptions) {
 			groupOptions = { name: undefined };
 		}
+		if (typeof groupOptions.circular !== "boolean") {
+			// default allow circular references
+			groupOptions.circular = true;
+		}
+		/** @type {GroupOptions} */
 		this.groupOptions = groupOptions;
-		this.chunkGroup = undefined;
-		this.module = module;
+		/** @type {DependencyLocation | null | undefined} */
 		this.loc = loc;
+		/** @type {string | null | undefined} */
 		this.request = request;
+		/** @type {undefined | string} */
+		this._stringifiedGroupOptions = undefined;
 	}
 
+	/**
+	 * @returns {ChunkGroupOptions["name"]} The name of the chunk
+	 */
 	get chunkName() {
 		return this.groupOptions.name;
 	}
 
+	/**
+	 * @param {string | undefined} value The new chunk name
+	 * @returns {void}
+	 */
 	set chunkName(value) {
-		this.groupOptions.name = value;
-	}
-
-	get chunks() {
-		throw new Error("Moved to AsyncDependenciesBlock.chunkGroup");
+		if (this.groupOptions.name !== value) {
+			this.groupOptions.name = value;
+			this._stringifiedGroupOptions = undefined;
+		}
 	}
 
-	set chunks(value) {
-		throw new Error("Moved to AsyncDependenciesBlock.chunkGroup");
+	/**
+	 * @returns {boolean} Whether circular references are allowed
+	 */
+	get circular() {
+		return Boolean(this.groupOptions.circular);
 	}
 
-	updateHash(hash) {
-		hash.update(JSON.stringify(this.groupOptions));
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		const { chunkGraph } = context;
+		if (this._stringifiedGroupOptions === undefined) {
+			this._stringifiedGroupOptions = JSON.stringify(this.groupOptions);
+		}
+		const chunkGroup = chunkGraph.getBlockChunkGroup(this);
 		hash.update(
-			(this.chunkGroup &&
-				this.chunkGroup.chunks
-					.map(chunk => {
-						return chunk.id !== null ? chunk.id : "";
-					})
-					.join(",")) ||
-				""
+			`${this._stringifiedGroupOptions}${chunkGroup ? chunkGroup.id : ""}`
 		);
-		super.updateHash(hash);
+		super.updateHash(hash, context);
 	}
 
-	disconnect() {
-		this.chunkGroup = undefined;
-		super.disconnect();
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this.groupOptions);
+		write(this.loc);
+		write(this.request);
+		super.serialize(context);
 	}
 
-	unseal() {
-		this.chunkGroup = undefined;
-		super.unseal();
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+		this.groupOptions = read();
+		this.loc = read();
+		this.request = read();
+		super.deserialize(context);
 	}
+}
+
+makeSerializable(AsyncDependenciesBlock, "webpack/lib/AsyncDependenciesBlock");
 
-	sortItems() {
-		super.sortItems();
+Object.defineProperty(AsyncDependenciesBlock.prototype, "module", {
+	get() {
+		throw new Error(
+			"module property was removed from AsyncDependenciesBlock (it's not needed)"
+		);
+	},
+	set() {
+		throw new Error(
+			"module property was removed from AsyncDependenciesBlock (it's not needed)"
+		);
 	}
-};
+});
+
+module.exports = AsyncDependenciesBlock;
diff --git a/lib/AsyncDependencyToInitialChunkError.js b/lib/AsyncDependencyToInitialChunkError.js
index a0631aa3d50..d1f18015342 100644
--- a/lib/AsyncDependencyToInitialChunkError.js
+++ b/lib/AsyncDependencyToInitialChunkError.js
@@ -2,10 +2,12 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Sean Larkin @thelarkinn
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
 
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
 /** @typedef {import("./Module")} Module */
 
 class AsyncDependencyToInitialChunkError extends WebpackError {
@@ -13,18 +15,19 @@ class AsyncDependencyToInitialChunkError extends WebpackError {
 	 * Creates an instance of AsyncDependencyToInitialChunkError.
 	 * @param {string} chunkName Name of Chunk
 	 * @param {Module} module module tied to dependency
-	 * @param {TODO} loc location of dependency
+	 * @param {DependencyLocation} loc location of dependency
 	 */
 	constructor(chunkName, module, loc) {
 		super(
 			`It's not allowed to load an initial chunk on demand. The chunk name "${chunkName}" is already used by an entrypoint.`
 		);
 
+		/** @type {string} */
 		this.name = "AsyncDependencyToInitialChunkError";
+		/** @type {Module} */
 		this.module = module;
+		/** @type {DependencyLocation} */
 		this.loc = loc;
-
-		Error.captureStackTrace(this, this.constructor);
 	}
 }
 
diff --git a/lib/AutomaticPrefetchPlugin.js b/lib/AutomaticPrefetchPlugin.js
index 26123de53f5..b3614d34a5c 100644
--- a/lib/AutomaticPrefetchPlugin.js
+++ b/lib/AutomaticPrefetchPlugin.js
@@ -2,23 +2,26 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const asyncLib = require("neo-async");
-const PrefetchDependency = require("./dependencies/PrefetchDependency");
 const NormalModule = require("./NormalModule");
+const PrefetchDependency = require("./dependencies/PrefetchDependency");
 
-/** @typedef {import("./Compiler.js")} Compiler */
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "AutomaticPrefetchPlugin";
 
 class AutomaticPrefetchPlugin {
 	/**
 	 * Apply the plugin
-	 * @param {Compiler} compiler Webpack Compiler
+	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"AutomaticPrefetchPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
 				compilation.dependencyFactories.set(
 					PrefetchDependency,
@@ -26,32 +29,38 @@ class AutomaticPrefetchPlugin {
 				);
 			}
 		);
+		/** @type {{ context: string | null, request: string }[] | null} */
 		let lastModules = null;
-		compiler.hooks.afterCompile.tap("AutomaticPrefetchPlugin", compilation => {
-			lastModules = compilation.modules
-				.filter(m => m instanceof NormalModule)
-				.map(m => ({
-					context: m.context,
-					request: m.request
-				}));
-		});
-		compiler.hooks.make.tapAsync(
-			"AutomaticPrefetchPlugin",
-			(compilation, callback) => {
-				if (!lastModules) return callback();
-				asyncLib.forEach(
-					lastModules,
-					(m, callback) => {
-						compilation.prefetch(
-							m.context || compiler.context,
-							new PrefetchDependency(m.request),
-							callback
-						);
-					},
-					callback
-				);
+		compiler.hooks.afterCompile.tap(PLUGIN_NAME, (compilation) => {
+			lastModules = [];
+
+			for (const m of compilation.modules) {
+				if (m instanceof NormalModule) {
+					lastModules.push({
+						context: m.context,
+						request: m.request
+					});
+				}
 			}
-		);
+		});
+		compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
+			if (!lastModules) return callback();
+			asyncLib.each(
+				lastModules,
+				(m, callback) => {
+					compilation.addModuleChain(
+						m.context || compiler.context,
+						new PrefetchDependency(`!!${m.request}`),
+						callback
+					);
+				},
+				(err) => {
+					lastModules = null;
+					callback(err);
+				}
+			);
+		});
 	}
 }
+
 module.exports = AutomaticPrefetchPlugin;
diff --git a/lib/BannerPlugin.js b/lib/BannerPlugin.js
index 1e9aa343c0e..504ea77f5f0 100644
--- a/lib/BannerPlugin.js
+++ b/lib/BannerPlugin.js
@@ -1,69 +1,104 @@
 /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
 
 "use strict";
 
 const { ConcatSource } = require("webpack-sources");
+const Compilation = require("./Compilation");
 const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
 const Template = require("./Template");
 
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/BannerPlugin.json");
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/plugins/BannerPlugin").BannerPluginArgument} BannerPluginArgument */
+/** @typedef {import("../declarations/plugins/BannerPlugin").BannerPluginOptions} BannerPluginOptions */
+/** @typedef {import("./Compilation").PathData} PathData */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+
+/** @typedef {(data: { hash?: string, chunk: Chunk, filename: string }) => string} BannerFunction */
 
-const wrapComment = str => {
+/**
+ * @param {string} str string to wrap
+ * @returns {string} wrapped string
+ */
+const wrapComment = (str) => {
 	if (!str.includes("\n")) {
 		return Template.toComment(str);
 	}
 	return `/*!\n * ${str
 		.replace(/\*\//g, "* /")
 		.split("\n")
-		.join("\n * ")}\n */`;
+		.join("\n * ")
+		.replace(/\s+\n/g, "\n")
+		.trimEnd()}\n */`;
 };
 
+const PLUGIN_NAME = "BannerPlugin";
+
 class BannerPlugin {
+	/**
+	 * @param {BannerPluginArgument} options options object
+	 */
 	constructor(options) {
-		if (arguments.length > 1) {
-			throw new Error(
-				"BannerPlugin only takes one argument (pass an options object)"
-			);
-		}
-
-		validateOptions(schema, options, "Banner Plugin");
-
 		if (typeof options === "string" || typeof options === "function") {
 			options = {
 				banner: options
 			};
 		}
 
-		this.options = options || {};
+		/** @type {BannerPluginOptions} */
+		this.options = options;
 
-		if (typeof options.banner === "function") {
-			const getBanner = this.options.banner;
+		const bannerOption = options.banner;
+		if (typeof bannerOption === "function") {
+			const getBanner = bannerOption;
+			/** @type {BannerFunction} */
 			this.banner = this.options.raw
 				? getBanner
-				: data => wrapComment(getBanner(data));
+				: /** @type {BannerFunction} */ (data) => wrapComment(getBanner(data));
 		} else {
 			const banner = this.options.raw
-				? this.options.banner
-				: wrapComment(this.options.banner);
+				? bannerOption
+				: wrapComment(bannerOption);
+			/** @type {BannerFunction} */
 			this.banner = () => banner;
 		}
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/BannerPlugin.json"),
+				this.options,
+				{
+					name: "Banner Plugin",
+					baseDataPath: "options"
+				},
+				(options) => require("../schemas/plugins/BannerPlugin.check")(options)
+			);
+		});
 		const options = this.options;
 		const banner = this.banner;
 		const matchObject = ModuleFilenameHelpers.matchObject.bind(
 			undefined,
 			options
 		);
-
-		compiler.hooks.compilation.tap("BannerPlugin", compilation => {
-			compilation.hooks.optimizeChunkAssets.tap("BannerPlugin", chunks => {
-				for (const chunk of chunks) {
+		/** @type {WeakMap} */
+		const cache = new WeakMap();
+		const stage =
+			this.options.stage || Compilation.PROCESS_ASSETS_STAGE_ADDITIONS;
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage }, () => {
+				for (const chunk of compilation.chunks) {
 					if (options.entryOnly && !chunk.canBeInitial()) {
 						continue;
 					}
@@ -73,40 +108,26 @@ class BannerPlugin {
 							continue;
 						}
 
-						let basename;
-						let query = "";
-						let filename = file;
-						const hash = compilation.hash;
-						const querySplit = filename.indexOf("?");
-
-						if (querySplit >= 0) {
-							query = filename.substr(querySplit);
-							filename = filename.substr(0, querySplit);
-						}
+						/** @type {PathData} */
+						const data = { chunk, filename: file };
 
-						const lastSlashIndex = filename.lastIndexOf("/");
-
-						if (lastSlashIndex === -1) {
-							basename = filename;
-						} else {
-							basename = filename.substr(lastSlashIndex + 1);
-						}
-
-						const data = {
-							hash,
-							chunk,
-							filename,
-							basename,
-							query
-						};
-
-						const comment = compilation.getPath(banner(data), data);
-
-						compilation.assets[file] = new ConcatSource(
-							comment,
-							"\n",
-							compilation.assets[file]
+						const comment = compilation.getPath(
+							/** @type {TemplatePath} */
+							(banner),
+							data
 						);
+
+						compilation.updateAsset(file, (old) => {
+							const cached = cache.get(old);
+							if (!cached || cached.comment !== comment) {
+								const source = options.footer
+									? new ConcatSource(old, "\n", comment)
+									: new ConcatSource(comment, "\n", old);
+								cache.set(old, { source, comment });
+								return source;
+							}
+							return cached.source;
+						});
 					}
 				}
 			});
diff --git a/lib/BasicEvaluatedExpression.js b/lib/BasicEvaluatedExpression.js
deleted file mode 100644
index 65db864f9b0..00000000000
--- a/lib/BasicEvaluatedExpression.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-
-"use strict";
-
-const TypeUnknown = 0;
-const TypeNull = 1;
-const TypeString = 2;
-const TypeNumber = 3;
-const TypeBoolean = 4;
-const TypeRegExp = 5;
-const TypeConditional = 6;
-const TypeArray = 7;
-const TypeConstArray = 8;
-const TypeIdentifier = 9;
-const TypeWrapped = 10;
-const TypeTemplateString = 11;
-
-class BasicEvaluatedExpression {
-	constructor() {
-		this.type = TypeUnknown;
-		this.range = null;
-		this.falsy = false;
-		this.truthy = false;
-		this.bool = null;
-		this.number = null;
-		this.regExp = null;
-		this.string = null;
-		this.quasis = null;
-		this.array = null;
-		this.items = null;
-		this.options = null;
-		this.prefix = null;
-		this.postfix = null;
-	}
-
-	isNull() {
-		return this.type === TypeNull;
-	}
-
-	isString() {
-		return this.type === TypeString;
-	}
-
-	isNumber() {
-		return this.type === TypeNumber;
-	}
-
-	isBoolean() {
-		return this.type === TypeBoolean;
-	}
-
-	isRegExp() {
-		return this.type === TypeRegExp;
-	}
-
-	isConditional() {
-		return this.type === TypeConditional;
-	}
-
-	isArray() {
-		return this.type === TypeArray;
-	}
-
-	isConstArray() {
-		return this.type === TypeConstArray;
-	}
-
-	isIdentifier() {
-		return this.type === TypeIdentifier;
-	}
-
-	isWrapped() {
-		return this.type === TypeWrapped;
-	}
-
-	isTemplateString() {
-		return this.type === TypeTemplateString;
-	}
-
-	isTruthy() {
-		return this.truthy;
-	}
-
-	isFalsy() {
-		return this.falsy;
-	}
-
-	asBool() {
-		if (this.truthy) return true;
-		if (this.falsy) return false;
-		if (this.isBoolean()) return this.bool;
-		if (this.isNull()) return false;
-		if (this.isString()) return this.string !== "";
-		if (this.isNumber()) return this.number !== 0;
-		if (this.isRegExp()) return true;
-		if (this.isArray()) return true;
-		if (this.isConstArray()) return true;
-		if (this.isWrapped()) {
-			return (this.prefix && this.prefix.asBool()) ||
-				(this.postfix && this.postfix.asBool())
-				? true
-				: undefined;
-		}
-		if (this.isTemplateString()) {
-			for (const quasi of this.quasis) {
-				if (quasi.asBool()) return true;
-			}
-			// can't tell if string will be empty without executing
-		}
-		return undefined;
-	}
-
-	setString(string) {
-		this.type = TypeString;
-		this.string = string;
-		return this;
-	}
-
-	setNull() {
-		this.type = TypeNull;
-		return this;
-	}
-
-	setNumber(number) {
-		this.type = TypeNumber;
-		this.number = number;
-		return this;
-	}
-
-	setBoolean(bool) {
-		this.type = TypeBoolean;
-		this.bool = bool;
-		return this;
-	}
-
-	setRegExp(regExp) {
-		this.type = TypeRegExp;
-		this.regExp = regExp;
-		return this;
-	}
-
-	setIdentifier(identifier) {
-		this.type = TypeIdentifier;
-		this.identifier = identifier;
-		return this;
-	}
-
-	setWrapped(prefix, postfix) {
-		this.type = TypeWrapped;
-		this.prefix = prefix;
-		this.postfix = postfix;
-		return this;
-	}
-
-	setOptions(options) {
-		this.type = TypeConditional;
-		this.options = options;
-		return this;
-	}
-
-	addOptions(options) {
-		if (!this.options) {
-			this.type = TypeConditional;
-			this.options = [];
-		}
-		for (const item of options) {
-			this.options.push(item);
-		}
-		return this;
-	}
-
-	setItems(items) {
-		this.type = TypeArray;
-		this.items = items;
-		return this;
-	}
-
-	setArray(array) {
-		this.type = TypeConstArray;
-		this.array = array;
-		return this;
-	}
-
-	setTemplateString(quasis) {
-		this.type = TypeTemplateString;
-		this.quasis = quasis;
-		return this;
-	}
-
-	setTruthy() {
-		this.falsy = false;
-		this.truthy = true;
-		return this;
-	}
-
-	setFalsy() {
-		this.falsy = true;
-		this.truthy = false;
-		return this;
-	}
-
-	setRange(range) {
-		this.range = range;
-		return this;
-	}
-}
-
-module.exports = BasicEvaluatedExpression;
diff --git a/lib/Cache.js b/lib/Cache.js
new file mode 100644
index 00000000000..2de565bc32c
--- /dev/null
+++ b/lib/Cache.js
@@ -0,0 +1,168 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { AsyncParallelHook, AsyncSeriesBailHook, SyncHook } = require("tapable");
+const {
+	makeWebpackError,
+	makeWebpackErrorCallback
+} = require("./HookWebpackError");
+
+/** @typedef {import("./WebpackError")} WebpackError */
+
+/**
+ * @typedef {object} Etag
+ * @property {() => string} toString
+ */
+
+/**
+ * @template T
+ * @callback CallbackCache
+ * @param {WebpackError | null} err
+ * @param {T=} result
+ * @returns {void}
+ */
+
+/** @typedef {EXPECTED_ANY} Data */
+
+/**
+ * @template T
+ * @callback GotHandler
+ * @param {T} result
+ * @param {() => void} callback
+ * @returns {void}
+ */
+
+/**
+ * @param {number} times times
+ * @param {(err?: Error | null) => void} callback callback
+ * @returns {(err?: Error | null) => void} callback
+ */
+const needCalls = (times, callback) => (err) => {
+	if (--times === 0) {
+		return callback(err);
+	}
+	if (err && times > 0) {
+		times = 0;
+		return callback(err);
+	}
+};
+
+class Cache {
+	constructor() {
+		this.hooks = {
+			/** @type {AsyncSeriesBailHook<[string, Etag | null, GotHandler[]], Data>} */
+			get: new AsyncSeriesBailHook(["identifier", "etag", "gotHandlers"]),
+			/** @type {AsyncParallelHook<[string, Etag | null, Data]>} */
+			store: new AsyncParallelHook(["identifier", "etag", "data"]),
+			/** @type {AsyncParallelHook<[Iterable]>} */
+			storeBuildDependencies: new AsyncParallelHook(["dependencies"]),
+			/** @type {SyncHook<[]>} */
+			beginIdle: new SyncHook([]),
+			/** @type {AsyncParallelHook<[]>} */
+			endIdle: new AsyncParallelHook([]),
+			/** @type {AsyncParallelHook<[]>} */
+			shutdown: new AsyncParallelHook([])
+		};
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {CallbackCache} callback signals when the value is retrieved
+	 * @returns {void}
+	 */
+	get(identifier, etag, callback) {
+		/** @type {GotHandler[]} */
+		const gotHandlers = [];
+		this.hooks.get.callAsync(identifier, etag, gotHandlers, (err, result) => {
+			if (err) {
+				callback(makeWebpackError(err, "Cache.hooks.get"));
+				return;
+			}
+			if (result === null) {
+				result = undefined;
+			}
+			if (gotHandlers.length > 1) {
+				const innerCallback = needCalls(gotHandlers.length, () =>
+					callback(null, result)
+				);
+				for (const gotHandler of gotHandlers) {
+					gotHandler(result, innerCallback);
+				}
+			} else if (gotHandlers.length === 1) {
+				gotHandlers[0](result, () => callback(null, result));
+			} else {
+				callback(null, result);
+			}
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {T} data the value to store
+	 * @param {CallbackCache} callback signals when the value is stored
+	 * @returns {void}
+	 */
+	store(identifier, etag, data, callback) {
+		this.hooks.store.callAsync(
+			identifier,
+			etag,
+			data,
+			makeWebpackErrorCallback(callback, "Cache.hooks.store")
+		);
+	}
+
+	/**
+	 * After this method has succeeded the cache can only be restored when build dependencies are
+	 * @param {Iterable} dependencies list of all build dependencies
+	 * @param {CallbackCache} callback signals when the dependencies are stored
+	 * @returns {void}
+	 */
+	storeBuildDependencies(dependencies, callback) {
+		this.hooks.storeBuildDependencies.callAsync(
+			dependencies,
+			makeWebpackErrorCallback(callback, "Cache.hooks.storeBuildDependencies")
+		);
+	}
+
+	/**
+	 * @returns {void}
+	 */
+	beginIdle() {
+		this.hooks.beginIdle.call();
+	}
+
+	/**
+	 * @param {CallbackCache} callback signals when the call finishes
+	 * @returns {void}
+	 */
+	endIdle(callback) {
+		this.hooks.endIdle.callAsync(
+			makeWebpackErrorCallback(callback, "Cache.hooks.endIdle")
+		);
+	}
+
+	/**
+	 * @param {CallbackCache} callback signals when the call finishes
+	 * @returns {void}
+	 */
+	shutdown(callback) {
+		this.hooks.shutdown.callAsync(
+			makeWebpackErrorCallback(callback, "Cache.hooks.shutdown")
+		);
+	}
+}
+
+Cache.STAGE_MEMORY = -10;
+Cache.STAGE_DEFAULT = 0;
+Cache.STAGE_DISK = 10;
+Cache.STAGE_NETWORK = 20;
+
+module.exports = Cache;
diff --git a/lib/CacheFacade.js b/lib/CacheFacade.js
new file mode 100644
index 00000000000..b60de574dea
--- /dev/null
+++ b/lib/CacheFacade.js
@@ -0,0 +1,349 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { forEachBail } = require("enhanced-resolve");
+const asyncLib = require("neo-async");
+const getLazyHashedEtag = require("./cache/getLazyHashedEtag");
+const mergeEtags = require("./cache/mergeEtags");
+
+/** @typedef {import("./Cache")} Cache */
+/** @typedef {import("./Cache").Etag} Etag */
+/** @typedef {import("./cache/getLazyHashedEtag").HashableObject} HashableObject */
+/** @typedef {import("./util/Hash").HashFunction} HashFunction */
+
+/**
+ * @template T
+ * @callback CallbackCache
+ * @param {(Error | null)=} err
+ * @param {(T | null)=} result
+ * @returns {void}
+ */
+
+/**
+ * @template T
+ * @callback CallbackNormalErrorCache
+ * @param {(Error | null)=} err
+ * @param {T=} result
+ * @returns {void}
+ */
+
+class MultiItemCache {
+	/**
+	 * @param {ItemCacheFacade[]} items item caches
+	 */
+	constructor(items) {
+		this._items = items;
+		// @ts-expect-error expected - returns the single ItemCacheFacade when passed an array of length 1
+		// eslint-disable-next-line no-constructor-return
+		if (items.length === 1) return /** @type {ItemCacheFacade} */ (items[0]);
+	}
+
+	/**
+	 * @template T
+	 * @param {CallbackCache} callback signals when the value is retrieved
+	 * @returns {void}
+	 */
+	get(callback) {
+		forEachBail(this._items, (item, callback) => item.get(callback), callback);
+	}
+
+	/**
+	 * @template T
+	 * @returns {Promise} promise with the data
+	 */
+	getPromise() {
+		/**
+		 * @param {number} i index
+		 * @returns {Promise} promise with the data
+		 */
+		const next = (i) =>
+			this._items[i].getPromise().then((result) => {
+				if (result !== undefined) return result;
+				if (++i < this._items.length) return next(i);
+			});
+		return next(0);
+	}
+
+	/**
+	 * @template T
+	 * @param {T} data the value to store
+	 * @param {CallbackCache} callback signals when the value is stored
+	 * @returns {void}
+	 */
+	store(data, callback) {
+		asyncLib.each(
+			this._items,
+			(item, callback) => item.store(data, callback),
+			callback
+		);
+	}
+
+	/**
+	 * @template T
+	 * @param {T} data the value to store
+	 * @returns {Promise} promise signals when the value is stored
+	 */
+	storePromise(data) {
+		return Promise.all(this._items.map((item) => item.storePromise(data))).then(
+			() => {}
+		);
+	}
+}
+
+class ItemCacheFacade {
+	/**
+	 * @param {Cache} cache the root cache
+	 * @param {string} name the child cache item name
+	 * @param {Etag | null} etag the etag
+	 */
+	constructor(cache, name, etag) {
+		this._cache = cache;
+		this._name = name;
+		this._etag = etag;
+	}
+
+	/**
+	 * @template T
+	 * @param {CallbackCache} callback signals when the value is retrieved
+	 * @returns {void}
+	 */
+	get(callback) {
+		this._cache.get(this._name, this._etag, callback);
+	}
+
+	/**
+	 * @template T
+	 * @returns {Promise} promise with the data
+	 */
+	getPromise() {
+		return new Promise((resolve, reject) => {
+			this._cache.get(this._name, this._etag, (err, data) => {
+				if (err) {
+					reject(err);
+				} else {
+					resolve(data);
+				}
+			});
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {T} data the value to store
+	 * @param {CallbackCache} callback signals when the value is stored
+	 * @returns {void}
+	 */
+	store(data, callback) {
+		this._cache.store(this._name, this._etag, data, callback);
+	}
+
+	/**
+	 * @template T
+	 * @param {T} data the value to store
+	 * @returns {Promise} promise signals when the value is stored
+	 */
+	storePromise(data) {
+		return new Promise((resolve, reject) => {
+			this._cache.store(this._name, this._etag, data, (err) => {
+				if (err) {
+					reject(err);
+				} else {
+					resolve();
+				}
+			});
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {(callback: CallbackNormalErrorCache) => void} computer function to compute the value if not cached
+	 * @param {CallbackNormalErrorCache} callback signals when the value is retrieved
+	 * @returns {void}
+	 */
+	provide(computer, callback) {
+		this.get((err, cacheEntry) => {
+			if (err) return callback(err);
+			if (cacheEntry !== undefined) return cacheEntry;
+			computer((err, result) => {
+				if (err) return callback(err);
+				this.store(result, (err) => {
+					if (err) return callback(err);
+					callback(null, result);
+				});
+			});
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {() => Promise | T} computer function to compute the value if not cached
+	 * @returns {Promise} promise with the data
+	 */
+	async providePromise(computer) {
+		const cacheEntry = await this.getPromise();
+		if (cacheEntry !== undefined) return cacheEntry;
+		const result = await computer();
+		await this.storePromise(result);
+		return result;
+	}
+}
+
+class CacheFacade {
+	/**
+	 * @param {Cache} cache the root cache
+	 * @param {string} name the child cache name
+	 * @param {HashFunction=} hashFunction the hash function to use
+	 */
+	constructor(cache, name, hashFunction) {
+		this._cache = cache;
+		this._name = name;
+		this._hashFunction = hashFunction;
+	}
+
+	/**
+	 * @param {string} name the child cache name#
+	 * @returns {CacheFacade} child cache
+	 */
+	getChildCache(name) {
+		return new CacheFacade(
+			this._cache,
+			`${this._name}|${name}`,
+			this._hashFunction
+		);
+	}
+
+	/**
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @returns {ItemCacheFacade} item cache
+	 */
+	getItemCache(identifier, etag) {
+		return new ItemCacheFacade(
+			this._cache,
+			`${this._name}|${identifier}`,
+			etag
+		);
+	}
+
+	/**
+	 * @param {HashableObject} obj an hashable object
+	 * @returns {Etag} an etag that is lazy hashed
+	 */
+	getLazyHashedEtag(obj) {
+		return getLazyHashedEtag(obj, this._hashFunction);
+	}
+
+	/**
+	 * @param {Etag} a an etag
+	 * @param {Etag} b another etag
+	 * @returns {Etag} an etag that represents both
+	 */
+	mergeEtags(a, b) {
+		return mergeEtags(a, b);
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {CallbackCache} callback signals when the value is retrieved
+	 * @returns {void}
+	 */
+	get(identifier, etag, callback) {
+		this._cache.get(`${this._name}|${identifier}`, etag, callback);
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @returns {Promise} promise with the data
+	 */
+	getPromise(identifier, etag) {
+		return new Promise((resolve, reject) => {
+			this._cache.get(`${this._name}|${identifier}`, etag, (err, data) => {
+				if (err) {
+					reject(err);
+				} else {
+					resolve(data);
+				}
+			});
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {T} data the value to store
+	 * @param {CallbackCache} callback signals when the value is stored
+	 * @returns {void}
+	 */
+	store(identifier, etag, data, callback) {
+		this._cache.store(`${this._name}|${identifier}`, etag, data, callback);
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {T} data the value to store
+	 * @returns {Promise} promise signals when the value is stored
+	 */
+	storePromise(identifier, etag, data) {
+		return new Promise((resolve, reject) => {
+			this._cache.store(`${this._name}|${identifier}`, etag, data, (err) => {
+				if (err) {
+					reject(err);
+				} else {
+					resolve();
+				}
+			});
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {(callback: CallbackNormalErrorCache) => void} computer function to compute the value if not cached
+	 * @param {CallbackNormalErrorCache} callback signals when the value is retrieved
+	 * @returns {void}
+	 */
+	provide(identifier, etag, computer, callback) {
+		this.get(identifier, etag, (err, cacheEntry) => {
+			if (err) return callback(err);
+			if (cacheEntry !== undefined) return cacheEntry;
+			computer((err, result) => {
+				if (err) return callback(err);
+				this.store(identifier, etag, result, (err) => {
+					if (err) return callback(err);
+					callback(null, result);
+				});
+			});
+		});
+	}
+
+	/**
+	 * @template T
+	 * @param {string} identifier the cache identifier
+	 * @param {Etag | null} etag the etag
+	 * @param {() => Promise | T} computer function to compute the value if not cached
+	 * @returns {Promise} promise with the data
+	 */
+	async providePromise(identifier, etag, computer) {
+		const cacheEntry = await this.getPromise(identifier, etag);
+		if (cacheEntry !== undefined) return cacheEntry;
+		const result = await computer();
+		await this.storePromise(identifier, etag, result);
+		return result;
+	}
+}
+
+module.exports = CacheFacade;
+module.exports.ItemCacheFacade = ItemCacheFacade;
+module.exports.MultiItemCache = MultiItemCache;
diff --git a/lib/CachePlugin.js b/lib/CachePlugin.js
deleted file mode 100644
index 0d1650be963..00000000000
--- a/lib/CachePlugin.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const asyncLib = require("neo-async");
-
-class CachePlugin {
-	constructor(cache) {
-		this.cache = cache || {};
-		this.FS_ACCURACY = 2000;
-	}
-
-	apply(compiler) {
-		if (Array.isArray(compiler.compilers)) {
-			compiler.compilers.forEach((c, idx) => {
-				new CachePlugin((this.cache[idx] = this.cache[idx] || {})).apply(c);
-			});
-		} else {
-			const registerCacheToCompiler = (compiler, cache) => {
-				compiler.hooks.thisCompilation.tap("CachePlugin", compilation => {
-					compilation.cache = cache;
-					compilation.hooks.childCompiler.tap(
-						"CachePlugin",
-						(childCompiler, compilerName, compilerIndex) => {
-							if (cache) {
-								let childCache;
-								if (!cache.children) {
-									cache.children = {};
-								}
-								if (!cache.children[compilerName]) {
-									cache.children[compilerName] = [];
-								}
-								if (cache.children[compilerName][compilerIndex]) {
-									childCache = cache.children[compilerName][compilerIndex];
-								} else {
-									cache.children[compilerName].push((childCache = {}));
-								}
-								registerCacheToCompiler(childCompiler, childCache);
-							}
-						}
-					);
-				});
-			};
-			registerCacheToCompiler(compiler, this.cache);
-			compiler.hooks.watchRun.tap("CachePlugin", () => {
-				this.watching = true;
-			});
-			compiler.hooks.run.tapAsync("CachePlugin", (compiler, callback) => {
-				if (!compiler._lastCompilationFileDependencies) {
-					return callback();
-				}
-				const fs = compiler.inputFileSystem;
-				const fileTs = (compiler.fileTimestamps = new Map());
-				asyncLib.forEach(
-					compiler._lastCompilationFileDependencies,
-					(file, callback) => {
-						fs.stat(file, (err, stat) => {
-							if (err) {
-								if (err.code === "ENOENT") return callback();
-								return callback(err);
-							}
-
-							if (stat.mtime) this.applyMtime(+stat.mtime);
-
-							fileTs.set(file, +stat.mtime || Infinity);
-
-							callback();
-						});
-					},
-					err => {
-						if (err) return callback(err);
-
-						for (const [file, ts] of fileTs) {
-							fileTs.set(file, ts + this.FS_ACCURACY);
-						}
-
-						callback();
-					}
-				);
-			});
-			compiler.hooks.afterCompile.tap("CachePlugin", compilation => {
-				compilation.compiler._lastCompilationFileDependencies =
-					compilation.fileDependencies;
-				compilation.compiler._lastCompilationContextDependencies =
-					compilation.contextDependencies;
-			});
-		}
-	}
-
-	/* istanbul ignore next */
-	applyMtime(mtime) {
-		if (this.FS_ACCURACY > 1 && mtime % 2 !== 0) this.FS_ACCURACY = 1;
-		else if (this.FS_ACCURACY > 10 && mtime % 20 !== 0) this.FS_ACCURACY = 10;
-		else if (this.FS_ACCURACY > 100 && mtime % 200 !== 0)
-			this.FS_ACCURACY = 100;
-		else if (this.FS_ACCURACY > 1000 && mtime % 2000 !== 0)
-			this.FS_ACCURACY = 1000;
-	}
-}
-module.exports = CachePlugin;
diff --git a/lib/CaseSensitiveModulesWarning.js b/lib/CaseSensitiveModulesWarning.js
index 6bfeeca83f1..30ebcc278fe 100644
--- a/lib/CaseSensitiveModulesWarning.js
+++ b/lib/CaseSensitiveModulesWarning.js
@@ -2,18 +2,20 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
 
 /** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
 
 /**
  * @param {Module[]} modules the modules to be sorted
  * @returns {Module[]} sorted version of original modules
  */
-const sortModules = modules => {
-	return modules.slice().sort((a, b) => {
+const sortModules = (modules) =>
+	modules.sort((a, b) => {
 		const aIdent = a.identifier();
 		const bIdent = b.identifier();
 		/* istanbul ignore next */
@@ -23,44 +25,47 @@ const sortModules = modules => {
 		/* istanbul ignore next */
 		return 0;
 	});
-};
 
 /**
  * @param {Module[]} modules each module from throw
- * @returns {string} each message from provided moduels
+ * @param {ModuleGraph} moduleGraph the module graph
+ * @returns {string} each message from provided modules
  */
-const createModulesListMessage = modules => {
-	return modules
-		.map(m => {
+const createModulesListMessage = (modules, moduleGraph) =>
+	modules
+		.map((m) => {
 			let message = `* ${m.identifier()}`;
-			const validReasons = m.reasons.filter(reason => reason.module);
+			const validReasons = [
+				...moduleGraph.getIncomingConnectionsByOriginModule(m).keys()
+			].filter(Boolean);
 
 			if (validReasons.length > 0) {
 				message += `\n    Used by ${validReasons.length} module(s), i. e.`;
-				message += `\n    ${validReasons[0].module.identifier()}`;
+				message += `\n    ${
+					/** @type {Module[]} */ (validReasons)[0].identifier()
+				}`;
 			}
 			return message;
 		})
 		.join("\n");
-};
 
 class CaseSensitiveModulesWarning extends WebpackError {
 	/**
 	 * Creates an instance of CaseSensitiveModulesWarning.
-	 * @param {Module[]} modules modules that were detected
+	 * @param {Iterable} modules modules that were detected
+	 * @param {ModuleGraph} moduleGraph the module graph
 	 */
-	constructor(modules) {
-		const sortedModules = sortModules(modules);
-		const modulesList = createModulesListMessage(sortedModules);
+	constructor(modules, moduleGraph) {
+		const sortedModules = sortModules([...modules]);
+		const modulesList = createModulesListMessage(sortedModules, moduleGraph);
 		super(`There are multiple modules with names that only differ in casing.
 This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.
 Use equal casing. Compare these module identifiers:
 ${modulesList}`);
 
+		/** @type {string} */
 		this.name = "CaseSensitiveModulesWarning";
-		this.origin = this.module = sortedModules[0];
-
-		Error.captureStackTrace(this, this.constructor);
+		this.module = sortedModules[0];
 	}
 }
 
diff --git a/lib/Chunk.js b/lib/Chunk.js
index 774eb445a95..50246b3e175 100644
--- a/lib/Chunk.js
+++ b/lib/Chunk.js
@@ -1,95 +1,75 @@
 /*
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Tobias Koppers @sokra
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const util = require("util");
+const ChunkGraph = require("./ChunkGraph");
+const Entrypoint = require("./Entrypoint");
+const { intersect } = require("./util/SetHelpers");
 const SortableSet = require("./util/SortableSet");
-const intersect = require("./util/SetHelpers").intersect;
-const GraphHelpers = require("./GraphHelpers");
-let debugId = 1000;
-const ERR_CHUNK_ENTRY = "Chunk.entry was removed. Use hasRuntime()";
-const ERR_CHUNK_INITIAL =
-	"Chunk.initial was removed. Use canBeInitial/isOnlyInitial()";
-
-/** @typedef {import("./Module.js")} Module */
+const StringXor = require("./util/StringXor");
+const {
+	compareChunkGroupsByIndex,
+	compareModulesById,
+	compareModulesByIdentifier
+} = require("./util/comparators");
+const { createArrayToSetDeprecationSet } = require("./util/deprecation");
+const { mergeRuntime } = require("./util/runtime");
+
+/** @typedef {import("./ChunkGraph").ChunkFilterPredicate} ChunkFilterPredicate */
+/** @typedef {import("./ChunkGraph").ChunkSizeOptions} ChunkSizeOptions */
+/** @typedef {import("./ChunkGraph").ModuleFilterPredicate} ModuleFilterPredicate */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
 /** @typedef {import("./ChunkGroup")} ChunkGroup */
-/** @typedef {import("./ModuleReason.js")} ModuleReason */
-/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./ChunkGroup").ChunkGroupOptions} ChunkGroupOptions */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
 
-/**
- *  @typedef {Object} WithId an object who has an id property *
- *  @property {string | number} id the id of the object
- */
+/** @typedef {string | null} ChunkName */
+/** @typedef {string | number} ChunkId */
+/** @typedef {SortableSet} IdNameHints */
 
-/**
- * Compare two Modules based on their ids for sorting
- * @param {Module} a module
- * @param {Module} b module
- * @returns {-1|0|1} sort value
- */
-const sortModuleById = (a, b) => {
-	if (a.id < b.id) return -1;
-	if (b.id < a.id) return 1;
-	return 0;
-};
+const ChunkFilesSet = createArrayToSetDeprecationSet("chunk.files");
 
 /**
- * Compare two ChunkGroups based on their ids for sorting
- * @param {ChunkGroup} a chunk group
- * @param {ChunkGroup} b chunk group
- * @returns {-1|0|1} sort value
+ * @deprecated
+ * @typedef {object} ChunkMaps
+ * @property {Record} hash
+ * @property {Record>} contentHash
+ * @property {Record} name
  */
-const sortChunkGroupById = (a, b) => {
-	if (a.id < b.id) return -1;
-	if (b.id < a.id) return 1;
-	return 0;
-};
 
 /**
- * Compare two Identifiables , based on their ids for sorting
- * @param {Module} a first object with ident fn
- * @param {Module} b second object with ident fn
- * @returns {-1|0|1} The order number of the sort
+ * @deprecated
+ * @typedef {Record} ChunkModuleIdMap
  */
-const sortByIdentifier = (a, b) => {
-	if (a.identifier() > b.identifier()) return 1;
-	if (a.identifier() < b.identifier()) return -1;
-	return 0;
-};
 
 /**
- * @returns {string} a concatenation of module identifiers sorted
- * @param {SortableSet} set to pull module identifiers from
+ * @deprecated
+ * @typedef {Record} chunkModuleHashMap
  */
-const getModulesIdent = set => {
-	set.sort();
-	let str = "";
-	for (const m of set) {
-		str += m.identifier() + "#";
-	}
-	return str;
-};
 
 /**
- * @template T
- * @param {SortableSet} set the sortable set to convert to array
- * @returns {Array} the array returned from Array.from(set)
+ * @deprecated
+ * @typedef {object} ChunkModuleMaps
+ * @property {ChunkModuleIdMap} id
+ * @property {chunkModuleHashMap} hash
  */
-const getArray = set => Array.from(set);
 
-/**
- * @param {SortableSet} set the sortable Set to get the count/size of
- * @returns {number} the size of the modules
- */
-const getModulesSize = set => {
-	let size = 0;
-	for (const module of set) {
-		size += module.size();
-	}
-	return size;
-};
+/** @typedef {Set} Chunks */
+/** @typedef {Set} Entrypoints */
+/** @typedef {Set} Queue */
+/** @typedef {SortableSet} SortableChunkGroups */
+/** @typedef {Record} ChunkChildIdsByOrdersMap */
+/** @typedef {Record} ChunkChildIdsByOrdersMapByData */
+/** @typedef {{ onChunks: Chunk[], chunks: Chunks }} ChunkChildOfTypeInOrder */
+
+let debugId = 1000;
 
 /**
  * A Chunk is a unit of encapsulation for Modules.
@@ -97,32 +77,42 @@ const getModulesSize = set => {
  */
 class Chunk {
 	/**
-	 * @param {string=} name of chunk being created, is optional (for subclasses)
+	 * @param {ChunkName=} name of chunk being created, is optional (for subclasses)
+	 * @param {boolean} backCompat enable backward-compatibility
 	 */
-	constructor(name) {
-		/** @type {number | null} */
+	constructor(name, backCompat = true) {
+		/** @type {ChunkId | null} */
 		this.id = null;
-		/** @type {number[] | null} */
+		/** @type {ChunkId[] | null} */
 		this.ids = null;
 		/** @type {number} */
 		this.debugId = debugId++;
-		/** @type {string} */
+		/** @type {ChunkName | undefined} */
 		this.name = name;
+		/** @type {IdNameHints} */
+		this.idNameHints = new SortableSet();
 		/** @type {boolean} */
 		this.preventIntegration = false;
-		/** @type {Module=} */
-		this.entryModule = undefined;
-		/** @private @type {SortableSet} */
-		this._modules = new SortableSet(undefined, sortByIdentifier);
-		/** @private @type {SortableSet} */
-		this._groups = new SortableSet(undefined, sortChunkGroupById);
-		/** @type {Source[]} */
-		this.files = [];
+		/** @type {TemplatePath | undefined} */
+		this.filenameTemplate = undefined;
+		/** @type {TemplatePath | undefined} */
+		this.cssFilenameTemplate = undefined;
+		/**
+		 * @private
+		 * @type {SortableChunkGroups}
+		 */
+		this._groups = new SortableSet(undefined, compareChunkGroupsByIndex);
+		/** @type {RuntimeSpec} */
+		this.runtime = undefined;
+		/** @type {Set} */
+		this.files = backCompat ? new ChunkFilesSet() : new Set();
+		/** @type {Set} */
+		this.auxiliaryFiles = new Set();
 		/** @type {boolean} */
 		this.rendered = false;
 		/** @type {string=} */
 		this.hash = undefined;
-		/** @type {Object} */
+		/** @type {Record} */
 		this.contentHash = Object.create(null);
 		/** @type {string=} */
 		this.renderedHash = undefined;
@@ -130,271 +120,457 @@ class Chunk {
 		this.chunkReason = undefined;
 		/** @type {boolean} */
 		this.extraAsync = false;
-		this.removedModules = undefined;
 	}
 
+	// TODO remove in webpack 6
+	// BACKWARD-COMPAT START
 	/**
-	 * @deprecated Chunk.entry has been deprecated. Please use .hasRuntime() instead
-	 * @returns {never} Throws an error trying to access this property
+	 * @deprecated
+	 * @returns {Module | undefined} entry module
 	 */
-	get entry() {
-		throw new Error(ERR_CHUNK_ENTRY);
+	get entryModule() {
+		const entryModules = [
+			...ChunkGraph.getChunkGraphForChunk(
+				this,
+				"Chunk.entryModule",
+				"DEP_WEBPACK_CHUNK_ENTRY_MODULE"
+			).getChunkEntryModulesIterable(this)
+		];
+		if (entryModules.length === 0) {
+			return undefined;
+		} else if (entryModules.length === 1) {
+			return entryModules[0];
+		}
+
+		throw new Error(
+			"Module.entryModule: Multiple entry modules are not supported by the deprecated API (Use the new ChunkGroup API)"
+		);
 	}
 
 	/**
-	 * @deprecated .entry has been deprecated. Please use .hasRuntime() instead
-	 * @param {never} data The data that was attempting to be set
-	 * @returns {never} Throws an error trying to access this property
+	 * @deprecated
+	 * @returns {boolean} true, if the chunk contains an entry module
 	 */
-	set entry(data) {
-		throw new Error(ERR_CHUNK_ENTRY);
+	hasEntryModule() {
+		return (
+			ChunkGraph.getChunkGraphForChunk(
+				this,
+				"Chunk.hasEntryModule",
+				"DEP_WEBPACK_CHUNK_HAS_ENTRY_MODULE"
+			).getNumberOfEntryModules(this) > 0
+		);
 	}
 
 	/**
-	 * @deprecated Chunk.initial was removed. Use canBeInitial/isOnlyInitial()
-	 * @returns {never} Throws an error trying to access this property
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @returns {boolean} true, if the chunk could be added
 	 */
-	get initial() {
-		throw new Error(ERR_CHUNK_INITIAL);
+	addModule(module) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.addModule",
+			"DEP_WEBPACK_CHUNK_ADD_MODULE"
+		);
+		if (chunkGraph.isModuleInChunk(module, this)) return false;
+		chunkGraph.connectChunkAndModule(this, module);
+		return true;
 	}
 
 	/**
-	 * @deprecated Chunk.initial was removed. Use canBeInitial/isOnlyInitial()
-	 * @param {never} data The data attempting to be set
-	 * @returns {never} Throws an error trying to access this property
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @returns {void}
 	 */
-	set initial(data) {
-		throw new Error(ERR_CHUNK_INITIAL);
+	removeModule(module) {
+		ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.removeModule",
+			"DEP_WEBPACK_CHUNK_REMOVE_MODULE"
+		).disconnectChunkAndModule(this, module);
 	}
 
 	/**
-	 * @returns {boolean} whether or not the Chunk will have a runtime
+	 * @deprecated
+	 * @returns {number} the number of module which are contained in this chunk
 	 */
-	hasRuntime() {
-		for (const chunkGroup of this._groups) {
-			// We only need to check the first one
-			return chunkGroup.isInitial() && chunkGroup.getRuntimeChunk() === this;
-		}
-		return false;
+	getNumberOfModules() {
+		return ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.getNumberOfModules",
+			"DEP_WEBPACK_CHUNK_GET_NUMBER_OF_MODULES"
+		).getNumberOfChunkModules(this);
 	}
 
 	/**
-	 * @returns {boolean} whether or not this chunk can be an initial chunk
+	 * @deprecated
+	 * @returns {Iterable} modules
 	 */
-	canBeInitial() {
-		for (const chunkGroup of this._groups) {
-			if (chunkGroup.isInitial()) return true;
-		}
-		return false;
+	get modulesIterable() {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.modulesIterable",
+			"DEP_WEBPACK_CHUNK_MODULES_ITERABLE"
+		);
+		return chunkGraph.getOrderedChunkModulesIterable(
+			this,
+			compareModulesByIdentifier
+		);
 	}
 
 	/**
-	 * @returns {boolean} whether this chunk can only be an initial chunk
+	 * @deprecated
+	 * @param {Chunk} otherChunk the chunk to compare with
+	 * @returns {-1 | 0 | 1} the comparison result
 	 */
-	isOnlyInitial() {
-		if (this._groups.size <= 0) return false;
-		for (const chunkGroup of this._groups) {
-			if (!chunkGroup.isInitial()) return false;
-		}
-		return true;
+	compareTo(otherChunk) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.compareTo",
+			"DEP_WEBPACK_CHUNK_COMPARE_TO"
+		);
+		return chunkGraph.compareChunks(this, otherChunk);
 	}
 
 	/**
-	 * @returns {boolean} if this chunk contains the entry module
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @returns {boolean} true, if the chunk contains the module
 	 */
-	hasEntryModule() {
-		return !!this.entryModule;
+	containsModule(module) {
+		return ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.containsModule",
+			"DEP_WEBPACK_CHUNK_CONTAINS_MODULE"
+		).isModuleInChunk(module, this);
 	}
 
 	/**
-	 * @param {Module} module the module that will be added to this chunk.
-	 * @returns {boolean} returns true if the chunk doesn't have the module and it was added
+	 * @deprecated
+	 * @returns {Module[]} the modules for this chunk
 	 */
-	addModule(module) {
-		if (!this._modules.has(module)) {
-			this._modules.add(module);
-			return true;
-		}
-		return false;
+	getModules() {
+		return ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.getModules",
+			"DEP_WEBPACK_CHUNK_GET_MODULES"
+		).getChunkModules(this);
 	}
 
 	/**
-	 * @param {Module} module the module that will be removed from this chunk
-	 * @returns {boolean} returns true if chunk exists and is successfully deleted
+	 * @deprecated
+	 * @returns {void}
 	 */
-	removeModule(module) {
-		if (this._modules.delete(module)) {
-			module.removeChunk(this);
+	remove() {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.remove",
+			"DEP_WEBPACK_CHUNK_REMOVE"
+		);
+		chunkGraph.disconnectChunk(this);
+		this.disconnectFromGroups();
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @param {Chunk} otherChunk the target chunk
+	 * @returns {void}
+	 */
+	moveModule(module, otherChunk) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.moveModule",
+			"DEP_WEBPACK_CHUNK_MOVE_MODULE"
+		);
+		chunkGraph.disconnectChunkAndModule(this, module);
+		chunkGraph.connectChunkAndModule(otherChunk, module);
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Chunk} otherChunk the other chunk
+	 * @returns {boolean} true, if the specified chunk has been integrated
+	 */
+	integrate(otherChunk) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.integrate",
+			"DEP_WEBPACK_CHUNK_INTEGRATE"
+		);
+		if (chunkGraph.canChunksBeIntegrated(this, otherChunk)) {
+			chunkGraph.integrateChunks(this, otherChunk);
 			return true;
 		}
+
 		return false;
 	}
 
 	/**
-	 * @param {Module[]} modules the new modules to be set
-	 * @returns {void} set new modules to this chunk and return nothing
+	 * @deprecated
+	 * @param {Chunk} otherChunk the other chunk
+	 * @returns {boolean} true, if chunks could be integrated
 	 */
-	setModules(modules) {
-		this._modules = new SortableSet(modules, sortByIdentifier);
+	canBeIntegrated(otherChunk) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.canBeIntegrated",
+			"DEP_WEBPACK_CHUNK_CAN_BE_INTEGRATED"
+		);
+		return chunkGraph.canChunksBeIntegrated(this, otherChunk);
 	}
 
 	/**
-	 * @returns {number} the amount of modules in chunk
+	 * @deprecated
+	 * @returns {boolean} true, if this chunk contains no module
 	 */
-	getNumberOfModules() {
-		return this._modules.size;
+	isEmpty() {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.isEmpty",
+			"DEP_WEBPACK_CHUNK_IS_EMPTY"
+		);
+		return chunkGraph.getNumberOfChunkModules(this) === 0;
 	}
 
 	/**
-	 * @returns {SortableSet} return the modules SortableSet for this chunk
+	 * @deprecated
+	 * @returns {number} total size of all modules in this chunk
 	 */
-	get modulesIterable() {
-		return this._modules;
+	modulesSize() {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.modulesSize",
+			"DEP_WEBPACK_CHUNK_MODULES_SIZE"
+		);
+		return chunkGraph.getChunkModulesSize(this);
 	}
 
 	/**
-	 * @param {ChunkGroup} chunkGroup the chunkGroup the chunk is being added
-	 * @returns {boolean} returns true if chunk is not apart of chunkGroup and is added successfully
+	 * @deprecated
+	 * @param {ChunkSizeOptions} options options object
+	 * @returns {number} total size of this chunk
 	 */
-	addGroup(chunkGroup) {
-		if (this._groups.has(chunkGroup)) return false;
-		this._groups.add(chunkGroup);
-		return true;
+	size(options = {}) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.size",
+			"DEP_WEBPACK_CHUNK_SIZE"
+		);
+		return chunkGraph.getChunkSize(this, options);
 	}
 
 	/**
-	 * @param {ChunkGroup} chunkGroup the chunkGroup the chunk is being removed from
-	 * @returns {boolean} returns true if chunk does exist in chunkGroup and is removed
+	 * @deprecated
+	 * @param {Chunk} otherChunk the other chunk
+	 * @param {ChunkSizeOptions} options options object
+	 * @returns {number} total size of the chunk or false if the chunk can't be integrated
 	 */
-	removeGroup(chunkGroup) {
-		if (!this._groups.has(chunkGroup)) return false;
-		this._groups.delete(chunkGroup);
-		return true;
+	integratedSize(otherChunk, options) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.integratedSize",
+			"DEP_WEBPACK_CHUNK_INTEGRATED_SIZE"
+		);
+		return chunkGraph.getIntegratedChunksSize(this, otherChunk, options);
 	}
 
 	/**
-	 * @param {ChunkGroup} chunkGroup the chunkGroup to check
-	 * @returns {boolean} returns true if chunk has chunkGroup reference and exists in chunkGroup
+	 * @deprecated
+	 * @param {ModuleFilterPredicate} filterFn function used to filter modules
+	 * @returns {ChunkModuleMaps} module map information
 	 */
-	isInGroup(chunkGroup) {
-		return this._groups.has(chunkGroup);
+	getChunkModuleMaps(filterFn) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.getChunkModuleMaps",
+			"DEP_WEBPACK_CHUNK_GET_CHUNK_MODULE_MAPS"
+		);
+		/** @type {ChunkModuleIdMap} */
+		const chunkModuleIdMap = Object.create(null);
+		/** @type {chunkModuleHashMap} */
+		const chunkModuleHashMap = Object.create(null);
+
+		for (const asyncChunk of this.getAllAsyncChunks()) {
+			/** @type {ChunkId[] | undefined} */
+			let array;
+			for (const module of chunkGraph.getOrderedChunkModulesIterable(
+				asyncChunk,
+				compareModulesById(chunkGraph)
+			)) {
+				if (filterFn(module)) {
+					if (array === undefined) {
+						array = [];
+						chunkModuleIdMap[/** @type {ChunkId} */ (asyncChunk.id)] = array;
+					}
+					const moduleId =
+						/** @type {ModuleId} */
+						(chunkGraph.getModuleId(module));
+					array.push(moduleId);
+					chunkModuleHashMap[moduleId] = chunkGraph.getRenderedModuleHash(
+						module,
+						undefined
+					);
+				}
+			}
+		}
+
+		return {
+			id: chunkModuleIdMap,
+			hash: chunkModuleHashMap
+		};
 	}
 
 	/**
-	 * @returns {number} the amount of groups said chunk is in
+	 * @deprecated
+	 * @param {ModuleFilterPredicate} filterFn predicate function used to filter modules
+	 * @param {ChunkFilterPredicate=} filterChunkFn predicate function used to filter chunks
+	 * @returns {boolean} return true if module exists in graph
 	 */
-	getNumberOfGroups() {
-		return this._groups.size;
+	hasModuleInGraph(filterFn, filterChunkFn) {
+		const chunkGraph = ChunkGraph.getChunkGraphForChunk(
+			this,
+			"Chunk.hasModuleInGraph",
+			"DEP_WEBPACK_CHUNK_HAS_MODULE_IN_GRAPH"
+		);
+		return chunkGraph.hasModuleInGraph(this, filterFn, filterChunkFn);
 	}
 
 	/**
-	 * @returns {SortableSet} the chunkGroups that said chunk is referenced in
+	 * @deprecated
+	 * @param {boolean} realHash whether the full hash or the rendered hash is to be used
+	 * @returns {ChunkMaps} the chunk map information
 	 */
-	get groupsIterable() {
-		return this._groups;
+	getChunkMaps(realHash) {
+		/** @type {Record} */
+		const chunkHashMap = Object.create(null);
+		/** @type {Record>} */
+		const chunkContentHashMap = Object.create(null);
+		/** @type {Record} */
+		const chunkNameMap = Object.create(null);
+
+		for (const chunk of this.getAllAsyncChunks()) {
+			const id = /** @type {ChunkId} */ (chunk.id);
+			chunkHashMap[id] =
+				/** @type {string} */
+				(realHash ? chunk.hash : chunk.renderedHash);
+			for (const key of Object.keys(chunk.contentHash)) {
+				if (!chunkContentHashMap[key]) {
+					chunkContentHashMap[key] = Object.create(null);
+				}
+				chunkContentHashMap[key][id] = chunk.contentHash[key];
+			}
+			if (chunk.name) {
+				chunkNameMap[id] = chunk.name;
+			}
+		}
+
+		return {
+			hash: chunkHashMap,
+			contentHash: chunkContentHashMap,
+			name: chunkNameMap
+		};
 	}
+	// BACKWARD-COMPAT END
 
 	/**
-	 * @param {Chunk} otherChunk the chunk to compare itself with
-	 * @returns {-1|0|1} this is a comparitor function like sort and returns -1, 0, or 1 based on sort order
+	 * @returns {boolean} whether or not the Chunk will have a runtime
 	 */
-	compareTo(otherChunk) {
-		this._modules.sort();
-		otherChunk._modules.sort();
-		if (this._modules.size > otherChunk._modules.size) return -1;
-		if (this._modules.size < otherChunk._modules.size) return 1;
-		const a = this._modules[Symbol.iterator]();
-		const b = otherChunk._modules[Symbol.iterator]();
-		// eslint-disable-next-line
-		while (true) {
-			const aItem = a.next();
-			const bItem = b.next();
-			if (aItem.done) return 0;
-			const aModuleIdentifier = aItem.value.identifier();
-			const bModuleIdentifier = bItem.value.identifier();
-			if (aModuleIdentifier < bModuleIdentifier) return -1;
-			if (aModuleIdentifier > bModuleIdentifier) return 1;
+	hasRuntime() {
+		for (const chunkGroup of this._groups) {
+			if (
+				chunkGroup instanceof Entrypoint &&
+				chunkGroup.getRuntimeChunk() === this
+			) {
+				return true;
+			}
 		}
+		return false;
 	}
 
 	/**
-	 * @param {Module} module Module to check
-	 * @returns {boolean} returns true if module does exist in this chunk
+	 * @returns {boolean} whether or not this chunk can be an initial chunk
 	 */
-	containsModule(module) {
-		return this._modules.has(module);
-	}
-
-	getModules() {
-		return this._modules.getFromCache(getArray);
+	canBeInitial() {
+		for (const chunkGroup of this._groups) {
+			if (chunkGroup.isInitial()) return true;
+		}
+		return false;
 	}
 
-	getModulesIdent() {
-		return this._modules.getFromUnorderedCache(getModulesIdent);
+	/**
+	 * @returns {boolean} whether this chunk can only be an initial chunk
+	 */
+	isOnlyInitial() {
+		if (this._groups.size <= 0) return false;
+		for (const chunkGroup of this._groups) {
+			if (!chunkGroup.isInitial()) return false;
+		}
+		return true;
 	}
 
-	remove() {
-		// cleanup modules
-		// Array.from is used here to create a clone, because removeChunk modifies this._modules
-		for (const module of Array.from(this._modules)) {
-			module.removeChunk(this);
-		}
+	/**
+	 * @returns {EntryOptions | undefined} the entry options for this chunk
+	 */
+	getEntryOptions() {
 		for (const chunkGroup of this._groups) {
-			chunkGroup.removeChunk(this);
+			if (chunkGroup instanceof Entrypoint) {
+				return chunkGroup.options;
+			}
 		}
+		return undefined;
 	}
 
 	/**
-	 *
-	 * @param {Module} module module to move
-	 * @param {Chunk} otherChunk other chunk to move it to
+	 * @param {ChunkGroup} chunkGroup the chunkGroup the chunk is being added
 	 * @returns {void}
 	 */
-	moveModule(module, otherChunk) {
-		GraphHelpers.disconnectChunkAndModule(this, module);
-		GraphHelpers.connectChunkAndModule(otherChunk, module);
-		module.rewriteChunkInReasons(this, [otherChunk]);
+	addGroup(chunkGroup) {
+		this._groups.add(chunkGroup);
 	}
 
 	/**
-	 *
-	 * @param {Chunk} otherChunk the chunk to integrate with
-	 * @param {ModuleReason} reason reason why the module is being integrated
-	 * @returns {boolean} returns true or false if integration succeeds or fails
+	 * @param {ChunkGroup} chunkGroup the chunkGroup the chunk is being removed from
+	 * @returns {void}
 	 */
-	integrate(otherChunk, reason) {
-		if (!this.canBeIntegrated(otherChunk)) {
-			return false;
-		}
+	removeGroup(chunkGroup) {
+		this._groups.delete(chunkGroup);
+	}
 
-		// Array.from is used here to create a clone, because moveModule modifies otherChunk._modules
-		for (const module of Array.from(otherChunk._modules)) {
-			otherChunk.moveModule(module, this);
-		}
-		otherChunk._modules.clear();
+	/**
+	 * @param {ChunkGroup} chunkGroup the chunkGroup to check
+	 * @returns {boolean} returns true if chunk has chunkGroup reference and exists in chunkGroup
+	 */
+	isInGroup(chunkGroup) {
+		return this._groups.has(chunkGroup);
+	}
 
-		for (const chunkGroup of otherChunk._groups) {
-			chunkGroup.replaceChunk(otherChunk, this);
-			this.addGroup(chunkGroup);
-		}
-		otherChunk._groups.clear();
-
-		if (this.name && otherChunk.name) {
-			if (this.name.length !== otherChunk.name.length) {
-				this.name =
-					this.name.length < otherChunk.name.length
-						? this.name
-						: otherChunk.name;
-			} else {
-				this.name = this.name < otherChunk.name ? this.name : otherChunk.name;
-			}
-		}
+	/**
+	 * @returns {number} the amount of groups that the said chunk is in
+	 */
+	getNumberOfGroups() {
+		return this._groups.size;
+	}
 
-		return true;
+	/**
+	 * @returns {SortableChunkGroups} the chunkGroups that the said chunk is referenced in
+	 */
+	get groupsIterable() {
+		this._groups.sort();
+		return this._groups;
+	}
+
+	/**
+	 * @returns {void}
+	 */
+	disconnectFromGroups() {
+		for (const chunkGroup of this._groups) {
+			chunkGroup.removeChunk(this);
+		}
 	}
 
 	/**
-	 * @param {Chunk} newChunk the new chunk that will be split out of, and then chunk raphi twil=
+	 * @param {Chunk} newChunk the new chunk that will be split out of
 	 * @returns {void}
 	 */
 	split(newChunk) {
@@ -402,121 +578,145 @@ class Chunk {
 			chunkGroup.insertChunk(newChunk, this);
 			newChunk.addGroup(chunkGroup);
 		}
+		for (const idHint of this.idNameHints) {
+			newChunk.idNameHints.add(idHint);
+		}
+		newChunk.runtime = mergeRuntime(newChunk.runtime, this.runtime);
 	}
 
-	isEmpty() {
-		return this._modules.size === 0;
-	}
-
-	updateHash(hash) {
-		hash.update(`${this.id} `);
-		hash.update(this.ids ? this.ids.join(",") : "");
-		hash.update(`${this.name || ""} `);
-		for (const m of this._modules) {
-			hash.update(m.hash);
+	/**
+	 * @param {Hash} hash hash (will be modified)
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {void}
+	 */
+	updateHash(hash, chunkGraph) {
+		hash.update(
+			`${this.id} ${this.ids ? this.ids.join() : ""} ${this.name || ""} `
+		);
+		const xor = new StringXor();
+		for (const m of chunkGraph.getChunkModulesIterable(this)) {
+			xor.add(chunkGraph.getModuleHash(m, this.runtime));
+		}
+		xor.updateHash(hash);
+		const entryModules =
+			chunkGraph.getChunkEntryModulesWithChunkGroupIterable(this);
+		for (const [m, chunkGroup] of entryModules) {
+			hash.update(
+				`entry${chunkGraph.getModuleId(m)}${
+					/** @type {ChunkGroup} */ (chunkGroup).id
+				}`
+			);
 		}
 	}
 
-	canBeIntegrated(otherChunk) {
-		const isAvailable = (a, b) => {
-			const queue = new Set(b.groupsIterable);
-			for (const chunkGroup of queue) {
-				if (a.isInGroup(chunkGroup)) continue;
-				if (chunkGroup.isInitial()) return false;
-				for (const parent of chunkGroup.parentsIterable) {
-					queue.add(parent);
-				}
-			}
-			return true;
-		};
+	/**
+	 * @returns {Chunks} a set of all the async chunks
+	 */
+	getAllAsyncChunks() {
+		/** @type {Queue} */
+		const queue = new Set();
+		/** @type {Chunks} */
+		const chunks = new Set();
 
-		if (this.preventIntegration || otherChunk.preventIntegration) {
-			return false;
-		}
+		const initialChunks = intersect(
+			Array.from(this.groupsIterable, (g) => new Set(g.chunks))
+		);
 
-		if (this.hasRuntime() !== otherChunk.hasRuntime()) {
-			if (this.hasRuntime()) {
-				return isAvailable(this, otherChunk);
-			} else if (otherChunk.hasRuntime()) {
-				return isAvailable(otherChunk, this);
-			} else {
-				return false;
+		/** @type {Queue} */
+		const initialQueue = new Set(this.groupsIterable);
+
+		for (const chunkGroup of initialQueue) {
+			for (const child of chunkGroup.childrenIterable) {
+				if (child instanceof Entrypoint) {
+					initialQueue.add(child);
+				} else {
+					queue.add(child);
+				}
 			}
 		}
 
-		if (this.hasEntryModule() || otherChunk.hasEntryModule()) {
-			return false;
+		for (const chunkGroup of queue) {
+			for (const chunk of chunkGroup.chunks) {
+				if (!initialChunks.has(chunk)) {
+					chunks.add(chunk);
+				}
+			}
+			for (const child of chunkGroup.childrenIterable) {
+				queue.add(child);
+			}
 		}
 
-		return true;
+		return chunks;
 	}
 
 	/**
-	 *
-	 * @param {number} size the size
-	 * @param {Object} options the options passed in
-	 * @returns {number} the multiplier returned
+	 * @returns {Chunks} a set of all the initial chunks (including itself)
 	 */
-	addMultiplierAndOverhead(size, options) {
-		const overhead =
-			typeof options.chunkOverhead === "number" ? options.chunkOverhead : 10000;
-		const multiplicator = this.canBeInitial()
-			? options.entryChunkMultiplicator || 10
-			: 1;
-
-		return size * multiplicator + overhead;
+	getAllInitialChunks() {
+		/** @type {Chunks} */
+		const chunks = new Set();
+		/** @type {Queue} */
+		const queue = new Set(this.groupsIterable);
+		for (const group of queue) {
+			if (group.isInitial()) {
+				for (const c of group.chunks) chunks.add(c);
+				for (const g of group.childrenIterable) queue.add(g);
+			}
+		}
+		return chunks;
 	}
 
 	/**
-	 * @returns {number} the size of all modules
+	 * @returns {Chunks} a set of all the referenced chunks (including itself)
 	 */
-	modulesSize() {
-		return this._modules.getFromUnorderedCache(getModulesSize);
+	getAllReferencedChunks() {
+		/** @type {Queue} */
+		const queue = new Set(this.groupsIterable);
+		/** @type {Chunks} */
+		const chunks = new Set();
+
+		for (const chunkGroup of queue) {
+			for (const chunk of chunkGroup.chunks) {
+				chunks.add(chunk);
+			}
+			for (const child of chunkGroup.childrenIterable) {
+				queue.add(child);
+			}
+		}
+
+		return chunks;
 	}
 
 	/**
-	 * @param {Object} options the size display options
-	 * @returns {number} the chunk size
+	 * @returns {Entrypoints} a set of all the referenced entrypoints
 	 */
-	size(options) {
-		return this.addMultiplierAndOverhead(this.modulesSize(), options);
-	}
-
-	integratedSize(otherChunk, options) {
-		// Chunk if it's possible to integrate this chunk
-		if (!this.canBeIntegrated(otherChunk)) {
-			return false;
-		}
+	getAllReferencedAsyncEntrypoints() {
+		/** @type {Queue} */
+		const queue = new Set(this.groupsIterable);
+		/** @type {Entrypoints} */
+		const entrypoints = new Set();
 
-		let integratedModulesSize = this.modulesSize();
-		// only count modules that do not exist in this chunk!
-		for (const otherModule of otherChunk._modules) {
-			if (!this._modules.has(otherModule)) {
-				integratedModulesSize += otherModule.size();
+		for (const chunkGroup of queue) {
+			for (const entrypoint of chunkGroup.asyncEntrypointsIterable) {
+				entrypoints.add(/** @type {Entrypoint} */ (entrypoint));
+			}
+			for (const child of chunkGroup.childrenIterable) {
+				queue.add(child);
 			}
 		}
 
-		return this.addMultiplierAndOverhead(integratedModulesSize, options);
+		return entrypoints;
 	}
 
 	/**
-	 * @param {function(Module, Module): -1|0|1=} sortByFn a predicate function used to sort modules
-	 * @returns {void}
+	 * @returns {boolean} true, if the chunk references async chunks
 	 */
-	sortModules(sortByFn) {
-		this._modules.sortWith(sortByFn || sortModuleById);
-	}
-
-	sortItems() {
-		this.sortModules();
-	}
-
-	getAllAsyncChunks() {
+	hasAsyncChunks() {
+		/** @type {Queue} */
 		const queue = new Set();
-		const chunks = new Set();
 
 		const initialChunks = intersect(
-			Array.from(this.groupsIterable, g => new Set(g.chunks))
+			Array.from(this.groupsIterable, (g) => new Set(g.chunks))
 		);
 
 		for (const chunkGroup of this.groupsIterable) {
@@ -528,7 +728,7 @@ class Chunk {
 		for (const chunkGroup of queue) {
 			for (const chunk of chunkGroup.chunks) {
 				if (!initialChunks.has(chunk)) {
-					chunks.add(chunk);
+					return true;
 				}
 			}
 			for (const child of chunkGroup.childrenIterable) {
@@ -536,95 +736,151 @@ class Chunk {
 			}
 		}
 
-		return chunks;
-	}
-
-	getChunkMaps(realHash) {
-		const chunkHashMap = Object.create(null);
-		const chunkContentHashMap = Object.create(null);
-		const chunkNameMap = Object.create(null);
-
-		for (const chunk of this.getAllAsyncChunks()) {
-			chunkHashMap[chunk.id] = realHash ? chunk.hash : chunk.renderedHash;
-			for (const key of Object.keys(chunk.contentHash)) {
-				if (!chunkContentHashMap[key]) {
-					chunkContentHashMap[key] = Object.create(null);
-				}
-				chunkContentHashMap[key][chunk.id] = chunk.contentHash[key];
-			}
-			if (chunk.name) {
-				chunkNameMap[chunk.id] = chunk.name;
-			}
-		}
-
-		return {
-			hash: chunkHashMap,
-			contentHash: chunkContentHashMap,
-			name: chunkNameMap
-		};
+		return false;
 	}
 
-	getChildIdsByOrders() {
+	/**
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {ChunkFilterPredicate=} filterFn function used to filter chunks
+	 * @returns {Record} a record object of names to lists of child ids(?)
+	 */
+	getChildIdsByOrders(chunkGraph, filterFn) {
+		/** @type {Map} */
 		const lists = new Map();
 		for (const group of this.groupsIterable) {
 			if (group.chunks[group.chunks.length - 1] === this) {
 				for (const childGroup of group.childrenIterable) {
-					// TODO webpack 5 remove this check for options
-					if (typeof childGroup.options === "object") {
-						for (const key of Object.keys(childGroup.options)) {
-							if (key.endsWith("Order")) {
-								const name = key.substr(0, key.length - "Order".length);
-								let list = lists.get(name);
-								if (list === undefined) lists.set(name, (list = []));
-								list.push({
-									order: childGroup.options[key],
-									group: childGroup
-								});
+					for (const key of Object.keys(childGroup.options)) {
+						if (key.endsWith("Order")) {
+							const name = key.slice(0, key.length - "Order".length);
+							let list = lists.get(name);
+							if (list === undefined) {
+								list = [];
+								lists.set(name, list);
 							}
+							list.push({
+								order:
+									/** @type {number} */
+									(
+										childGroup.options[
+											/** @type {keyof ChunkGroupOptions} */
+											(key)
+										]
+									),
+								group: childGroup
+							});
 						}
 					}
 				}
 			}
 		}
+		/** @type {Record} */
 		const result = Object.create(null);
 		for (const [name, list] of lists) {
 			list.sort((a, b) => {
 				const cmp = b.order - a.order;
 				if (cmp !== 0) return cmp;
-				// TOOD webpack 5 remove this check of compareTo
-				if (a.group.compareTo) {
-					return a.group.compareTo(b.group);
-				}
-				return 0;
+				return a.group.compareTo(chunkGraph, b.group);
 			});
-			result[name] = Array.from(
-				list.reduce((set, item) => {
-					for (const chunk of item.group.chunks) {
-						set.add(chunk.id);
-					}
-					return set;
-				}, new Set())
-			);
+			/** @type {Set} */
+			const chunkIdSet = new Set();
+			for (const item of list) {
+				for (const chunk of item.group.chunks) {
+					if (filterFn && !filterFn(chunk, chunkGraph)) continue;
+					chunkIdSet.add(/** @type {ChunkId} */ (chunk.id));
+				}
+			}
+			if (chunkIdSet.size > 0) {
+				result[name] = [...chunkIdSet];
+			}
 		}
 		return result;
 	}
 
-	getChildIdsByOrdersMap(includeDirectChildren) {
+	/**
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {string} type option name
+	 * @returns {ChunkChildOfTypeInOrder[] | undefined} referenced chunks for a specific type
+	 */
+	getChildrenOfTypeInOrder(chunkGraph, type) {
+		/** @type {{ order: number, group: ChunkGroup, childGroup: ChunkGroup }[]} */
+		const list = [];
+		for (const group of this.groupsIterable) {
+			for (const childGroup of group.childrenIterable) {
+				const order =
+					/** @type {number} */
+					(childGroup.options[/** @type {keyof ChunkGroupOptions} */ (type)]);
+				if (order === undefined) continue;
+				list.push({
+					order,
+					group,
+					childGroup
+				});
+			}
+		}
+		if (list.length === 0) return;
+		list.sort((a, b) => {
+			const cmp = b.order - a.order;
+			if (cmp !== 0) return cmp;
+			return a.group.compareTo(chunkGraph, b.group);
+		});
+		/** @type {ChunkChildOfTypeInOrder[]} */
+		const result = [];
+		/** @type {undefined | ChunkChildOfTypeInOrder} */
+		let lastEntry;
+		for (const { group, childGroup } of list) {
+			if (lastEntry && lastEntry.onChunks === group.chunks) {
+				for (const chunk of childGroup.chunks) {
+					lastEntry.chunks.add(chunk);
+				}
+			} else {
+				result.push(
+					(lastEntry = {
+						onChunks: group.chunks,
+						chunks: new Set(childGroup.chunks)
+					})
+				);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {boolean=} includeDirectChildren include direct children (by default only children of async children are included)
+	 * @param {ChunkFilterPredicate=} filterFn function used to filter chunks
+	 * @returns {ChunkChildIdsByOrdersMapByData} a record object of names to lists of child ids(?) by chunk id
+	 */
+	getChildIdsByOrdersMap(chunkGraph, includeDirectChildren, filterFn) {
+		/** @type {ChunkChildIdsByOrdersMapByData} */
 		const chunkMaps = Object.create(null);
 
-		const addChildIdsByOrdersToMap = chunk => {
-			const data = chunk.getChildIdsByOrders();
+		/**
+		 * @param {Chunk} chunk a chunk
+		 * @returns {void}
+		 */
+		const addChildIdsByOrdersToMap = (chunk) => {
+			const data = chunk.getChildIdsByOrders(chunkGraph, filterFn);
 			for (const key of Object.keys(data)) {
 				let chunkMap = chunkMaps[key];
 				if (chunkMap === undefined) {
 					chunkMaps[key] = chunkMap = Object.create(null);
 				}
-				chunkMap[chunk.id] = data[key];
+				chunkMap[/** @type {ChunkId} */ (chunk.id)] = data[key];
 			}
 		};
 
 		if (includeDirectChildren) {
-			addChildIdsByOrdersToMap(this);
+			/** @type {Chunks} */
+			const chunks = new Set();
+			for (const chunkGroup of this.groupsIterable) {
+				for (const chunk of chunkGroup.chunks) {
+					chunks.add(chunk);
+				}
+			}
+			for (const chunk of chunks) {
+				addChildIdsByOrdersToMap(chunk);
+			}
 		}
 
 		for (const chunk of this.getAllAsyncChunks()) {
@@ -634,128 +890,35 @@ class Chunk {
 		return chunkMaps;
 	}
 
-	getChunkModuleMaps(filterFn) {
-		const chunkModuleIdMap = Object.create(null);
-		const chunkModuleHashMap = Object.create(null);
-
-		for (const chunk of this.getAllAsyncChunks()) {
-			let array;
-			for (const module of chunk.modulesIterable) {
-				if (filterFn(module)) {
-					if (array === undefined) {
-						array = [];
-						chunkModuleIdMap[chunk.id] = array;
-					}
-					array.push(module.id);
-					chunkModuleHashMap[module.id] = module.renderedHash;
-				}
-			}
-			if (array !== undefined) {
-				array.sort();
-			}
-		}
-
-		return {
-			id: chunkModuleIdMap,
-			hash: chunkModuleHashMap
-		};
-	}
-
 	/**
-	 *
-	 * @param {function(Module): boolean} filterFn predicate function used to filter modules
-	 * @param {function(Chunk): boolean} filterChunkFn predicate function used to filter chunks
-	 * @returns {boolean} return true if module exists in graph
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {string} type option name
+	 * @param {boolean=} includeDirectChildren include direct children (by default only children of async children are included)
+	 * @param {ChunkFilterPredicate=} filterFn function used to filter chunks
+	 * @returns {boolean} true when the child is of type order, otherwise false
 	 */
-	hasModuleInGraph(filterFn, filterChunkFn) {
-		const queue = new Set(this.groupsIterable);
-		const chunksProcessed = new Set();
-
-		for (const chunkGroup of queue) {
-			for (const chunk of chunkGroup.chunks) {
-				if (!chunksProcessed.has(chunk)) {
-					chunksProcessed.add(chunk);
-					if (!filterChunkFn || filterChunkFn(chunk)) {
-						for (const module of chunk.modulesIterable) {
-							if (filterFn(module)) {
-								return true;
-							}
-						}
-					}
+	hasChildByOrder(chunkGraph, type, includeDirectChildren, filterFn) {
+		if (includeDirectChildren) {
+			/** @type {Chunks} */
+			const chunks = new Set();
+			for (const chunkGroup of this.groupsIterable) {
+				for (const chunk of chunkGroup.chunks) {
+					chunks.add(chunk);
 				}
 			}
-			for (const child of chunkGroup.childrenIterable) {
-				queue.add(child);
+			for (const chunk of chunks) {
+				const data = chunk.getChildIdsByOrders(chunkGraph, filterFn);
+				if (data[type] !== undefined) return true;
 			}
 		}
-		return false;
-	}
 
-	toString() {
-		return `Chunk[${Array.from(this._modules).join()}]`;
-	}
-}
+		for (const chunk of this.getAllAsyncChunks()) {
+			const data = chunk.getChildIdsByOrders(chunkGraph, filterFn);
+			if (data[type] !== undefined) return true;
+		}
 
-// TODO remove in webpack 5
-Object.defineProperty(Chunk.prototype, "forEachModule", {
-	configurable: false,
-	value: util.deprecate(function(fn) {
-		this._modules.forEach(fn);
-	}, "Chunk.forEachModule: Use for(const module of chunk.modulesIterable) instead")
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(Chunk.prototype, "mapModules", {
-	configurable: false,
-	value: util.deprecate(function(fn) {
-		return Array.from(this._modules, fn);
-	}, "Chunk.mapModules: Use Array.from(chunk.modulesIterable, fn) instead")
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(Chunk.prototype, "chunks", {
-	configurable: false,
-	get() {
-		throw new Error("Chunk.chunks: Use ChunkGroup.getChildren() instead");
-	},
-	set() {
-		throw new Error("Chunk.chunks: Use ChunkGroup.add/removeChild() instead");
-	}
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(Chunk.prototype, "parents", {
-	configurable: false,
-	get() {
-		throw new Error("Chunk.parents: Use ChunkGroup.getParents() instead");
-	},
-	set() {
-		throw new Error("Chunk.parents: Use ChunkGroup.add/removeParent() instead");
-	}
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(Chunk.prototype, "blocks", {
-	configurable: false,
-	get() {
-		throw new Error("Chunk.blocks: Use ChunkGroup.getBlocks() instead");
-	},
-	set() {
-		throw new Error("Chunk.blocks: Use ChunkGroup.add/removeBlock() instead");
-	}
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(Chunk.prototype, "entrypoints", {
-	configurable: false,
-	get() {
-		throw new Error(
-			"Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead"
-		);
-	},
-	set() {
-		throw new Error("Chunk.entrypoints: Use Chunks.addGroup instead");
+		return false;
 	}
-});
+}
 
 module.exports = Chunk;
diff --git a/lib/ChunkGraph.js b/lib/ChunkGraph.js
new file mode 100644
index 00000000000..4c86b7898ea
--- /dev/null
+++ b/lib/ChunkGraph.js
@@ -0,0 +1,1972 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const util = require("util");
+const Entrypoint = require("./Entrypoint");
+const ModuleGraphConnection = require("./ModuleGraphConnection");
+const { DEFAULTS } = require("./config/defaults");
+const { first } = require("./util/SetHelpers");
+const SortableSet = require("./util/SortableSet");
+const {
+	compareIds,
+	compareIterables,
+	compareModulesById,
+	compareModulesByIdentifier,
+	compareSelect,
+	concatComparators
+} = require("./util/comparators");
+const createHash = require("./util/createHash");
+const findGraphRoots = require("./util/findGraphRoots");
+const {
+	RuntimeSpecMap,
+	RuntimeSpecSet,
+	forEachRuntime,
+	mergeRuntime,
+	runtimeToString
+} = require("./util/runtime");
+
+/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Chunk").Chunks} Chunks */
+/** @typedef {import("./Chunk").Entrypoints} Entrypoints */
+/** @typedef {import("./Chunk").ChunkId} ChunkId */
+/** @typedef {import("./ChunkGroup")} ChunkGroup */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").SourceType} SourceType */
+/** @typedef {import("./Module").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
+/** @typedef {import("./RuntimeModule")} RuntimeModule */
+/** @typedef {import("./util/Hash").HashFunction} HashFunction */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/** @type {ReadonlySet} */
+const EMPTY_SET = new Set();
+
+const ZERO_BIG_INT = BigInt(0);
+
+const compareModuleIterables = compareIterables(compareModulesByIdentifier);
+
+/** @typedef {(c: Chunk, chunkGraph: ChunkGraph) => boolean} ChunkFilterPredicate */
+/** @typedef {(m: Module) => boolean} ModuleFilterPredicate */
+/** @typedef {[Module, Entrypoint | undefined]} EntryModuleWithChunkGroup */
+
+/**
+ * @typedef {object} ChunkSizeOptions
+ * @property {number=} chunkOverhead constant overhead for a chunk
+ * @property {number=} entryChunkMultiplicator multiplicator for initial chunks
+ */
+
+class ModuleHashInfo {
+	/**
+	 * @param {string} hash hash
+	 * @param {string} renderedHash rendered hash
+	 */
+	constructor(hash, renderedHash) {
+		/** @type {string} */
+		this.hash = hash;
+		/** @type {string} */
+		this.renderedHash = renderedHash;
+	}
+}
+
+/**
+ * @template T
+ * @param {SortableSet} set the set
+ * @returns {T[]} set as array
+ */
+const getArray = (set) => [...set];
+
+/**
+ * @param {SortableChunks} chunks the chunks
+ * @returns {RuntimeSpecSet} runtimes
+ */
+const getModuleRuntimes = (chunks) => {
+	const runtimes = new RuntimeSpecSet();
+	for (const chunk of chunks) {
+		runtimes.add(chunk.runtime);
+	}
+	return runtimes;
+};
+
+/**
+ * @param {SourceTypesByModule | undefined} sourceTypesByModule sourceTypesByModule
+ * @returns {ModulesBySourceType} modules by source type
+ */
+const modulesBySourceType = (sourceTypesByModule) => (set) => {
+	/** @typedef {SortableSet} ModuleSortableSet */
+	/** @type {Map} */
+	const map = new Map();
+	for (const module of set) {
+		const sourceTypes =
+			(sourceTypesByModule && sourceTypesByModule.get(module)) ||
+			module.getSourceTypes();
+		for (const sourceType of sourceTypes) {
+			let innerSet = map.get(sourceType);
+			if (innerSet === undefined) {
+				/** @type {ModuleSortableSet} */
+				innerSet = new SortableSet();
+				map.set(sourceType, innerSet);
+			}
+			innerSet.add(module);
+		}
+	}
+	for (const [key, innerSet] of map) {
+		// When all modules have the source type, we reuse the original SortableSet
+		// to benefit from the shared cache (especially for sorting)
+		if (innerSet.size === set.size) {
+			map.set(key, set);
+		}
+	}
+	return map;
+};
+
+/** @typedef {(set: SortableSet) => Map>} ModulesBySourceType */
+
+/** @type {ModulesBySourceType} */
+const defaultModulesBySourceType = modulesBySourceType(undefined);
+
+/**
+ * @typedef {(set: SortableSet) => Module[]} ModuleSetToArrayFunction
+ */
+
+/**
+ * @template T
+ * @type {WeakMap}
+ */
+const createOrderedArrayFunctionMap = new WeakMap();
+
+/**
+ * @template T
+ * @param {ModuleComparator} comparator comparator function
+ * @returns {ModuleSetToArrayFunction} set as ordered array
+ */
+const createOrderedArrayFunction = (comparator) => {
+	let fn = createOrderedArrayFunctionMap.get(comparator);
+	if (fn !== undefined) return fn;
+	fn = (set) => {
+		set.sortWith(comparator);
+		return [...set];
+	};
+	createOrderedArrayFunctionMap.set(comparator, fn);
+	return fn;
+};
+
+/**
+ * @param {Iterable} modules the modules to get the count/size of
+ * @returns {number} the size of the modules
+ */
+const getModulesSize = (modules) => {
+	let size = 0;
+	for (const module of modules) {
+		for (const type of module.getSourceTypes()) {
+			size += module.size(type);
+		}
+	}
+	return size;
+};
+
+/** @typedef {Record} SizesOfModules */
+
+/**
+ * @param {Iterable} modules the sortable Set to get the size of
+ * @returns {SizesOfModules} the sizes of the modules
+ */
+const getModulesSizes = (modules) => {
+	/** @type {SizesOfModules} */
+	const sizes = Object.create(null);
+	for (const module of modules) {
+		for (const type of module.getSourceTypes()) {
+			sizes[type] = (sizes[type] || 0) + module.size(type);
+		}
+	}
+	return sizes;
+};
+
+/**
+ * @param {Chunk} a chunk
+ * @param {Chunk} b chunk
+ * @returns {boolean} true, if a is always a parent of b
+ */
+const isAvailableChunk = (a, b) => {
+	const queue = new Set(b.groupsIterable);
+	for (const chunkGroup of queue) {
+		if (a.isInGroup(chunkGroup)) continue;
+		if (chunkGroup.isInitial()) return false;
+		for (const parent of chunkGroup.parentsIterable) {
+			queue.add(parent);
+		}
+	}
+	return true;
+};
+
+/** @typedef {SortableSet} SortableChunks */
+/** @typedef {Set} EntryInChunks */
+/** @typedef {Set} RuntimeInChunks */
+/** @typedef {string | number} ModuleId */
+/** @typedef {RuntimeSpecMap, RuntimeRequirements>} ChunkGraphRuntimeRequirements */
+
+class ChunkGraphModule {
+	constructor() {
+		/** @type {SortableChunks} */
+		this.chunks = new SortableSet();
+		/** @type {EntryInChunks | undefined} */
+		this.entryInChunks = undefined;
+		/** @type {RuntimeInChunks | undefined} */
+		this.runtimeInChunks = undefined;
+		/** @type {RuntimeSpecMap | undefined} */
+		this.hashes = undefined;
+		/** @type {ModuleId | null} */
+		this.id = null;
+		/** @type {ChunkGraphRuntimeRequirements | undefined} */
+		this.runtimeRequirements = undefined;
+		/** @type {RuntimeSpecMap | undefined} */
+		this.graphHashes = undefined;
+		/** @type {RuntimeSpecMap | undefined} */
+		this.graphHashesWithConnections = undefined;
+	}
+}
+
+/** @typedef {WeakMap} SourceTypesByModule */
+/** @typedef {Map} EntryModules */
+
+class ChunkGraphChunk {
+	constructor() {
+		/** @type {SortableSet} */
+		this.modules = new SortableSet();
+		/** @type {SourceTypesByModule | undefined} */
+		this.sourceTypesByModule = undefined;
+		/** @type {EntryModules} */
+		this.entryModules = new Map();
+		/** @type {SortableSet} */
+		this.runtimeModules = new SortableSet();
+		/** @type {Set | undefined} */
+		this.fullHashModules = undefined;
+		/** @type {Set | undefined} */
+		this.dependentHashModules = undefined;
+		/** @type {RuntimeRequirements | undefined} */
+		this.runtimeRequirements = undefined;
+		/** @type {Set} */
+		this.runtimeRequirementsInTree = new Set();
+		/** @type {ModulesBySourceType} */
+		this._modulesBySourceType = defaultModulesBySourceType;
+	}
+}
+
+/** @typedef {string | number} RuntimeId */
+/** @typedef {Record} IdToHashMap */
+/** @typedef {Record} ChunkModuleHashMap */
+/** @typedef {Record} ChunkModuleIdMap */
+/** @typedef {Record} ChunkConditionMap */
+
+/** @typedef {(a: Module, b: Module) => -1 | 0 | 1} ModuleComparator */
+
+class ChunkGraph {
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {HashFunction} hashFunction the hash function to use
+	 */
+	constructor(moduleGraph, hashFunction = DEFAULTS.HASH_FUNCTION) {
+		/**
+		 * @private
+		 * @type {WeakMap}
+		 */
+		this._modules = new WeakMap();
+		/**
+		 * @private
+		 * @type {WeakMap}
+		 */
+		this._chunks = new WeakMap();
+		/**
+		 * @private
+		 * @type {WeakMap}
+		 */
+		this._blockChunkGroups = new WeakMap();
+		/**
+		 * @private
+		 * @type {Map}
+		 */
+		this._runtimeIds = new Map();
+		/** @type {ModuleGraph} */
+		this.moduleGraph = moduleGraph;
+
+		this._hashFunction = hashFunction;
+
+		this._getGraphRoots = this._getGraphRoots.bind(this);
+	}
+
+	/**
+	 * @private
+	 * @param {Module} module the module
+	 * @returns {ChunkGraphModule} internal module
+	 */
+	_getChunkGraphModule(module) {
+		let cgm = this._modules.get(module);
+		if (cgm === undefined) {
+			cgm = new ChunkGraphModule();
+			this._modules.set(module, cgm);
+		}
+		return cgm;
+	}
+
+	/**
+	 * @private
+	 * @param {Chunk} chunk the chunk
+	 * @returns {ChunkGraphChunk} internal chunk
+	 */
+	_getChunkGraphChunk(chunk) {
+		let cgc = this._chunks.get(chunk);
+		if (cgc === undefined) {
+			cgc = new ChunkGraphChunk();
+			this._chunks.set(chunk, cgc);
+		}
+		return cgc;
+	}
+
+	/**
+	 * @param {SortableSet} set the sortable Set to get the roots of
+	 * @returns {Module[]} the graph roots
+	 */
+	_getGraphRoots(set) {
+		const { moduleGraph } = this;
+		return [
+			...findGraphRoots(set, (module) => {
+				/** @type {Set} */
+				const set = new Set();
+				/**
+				 * @param {Module} module module
+				 */
+				const addDependencies = (module) => {
+					for (const connection of moduleGraph.getOutgoingConnections(module)) {
+						if (!connection.module) continue;
+						const activeState = connection.getActiveState(undefined);
+						if (activeState === false) continue;
+						if (activeState === ModuleGraphConnection.TRANSITIVE_ONLY) {
+							addDependencies(connection.module);
+							continue;
+						}
+						set.add(connection.module);
+					}
+				};
+				addDependencies(module);
+				return set;
+			})
+		].sort(compareModulesByIdentifier);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {Module} module the module
+	 * @returns {void}
+	 */
+	connectChunkAndModule(chunk, module) {
+		const cgm = this._getChunkGraphModule(module);
+		const cgc = this._getChunkGraphChunk(chunk);
+		cgm.chunks.add(chunk);
+		cgc.modules.add(module);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {Module} module the module
+	 * @returns {void}
+	 */
+	disconnectChunkAndModule(chunk, module) {
+		const cgm = this._getChunkGraphModule(module);
+		const cgc = this._getChunkGraphChunk(chunk);
+		cgc.modules.delete(module);
+		// No need to invalidate cgc._modulesBySourceType because we modified cgc.modules anyway
+		if (cgc.sourceTypesByModule) cgc.sourceTypesByModule.delete(module);
+		cgm.chunks.delete(chunk);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk which will be disconnected
+	 * @returns {void}
+	 */
+	disconnectChunk(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		for (const module of cgc.modules) {
+			const cgm = this._getChunkGraphModule(module);
+			cgm.chunks.delete(chunk);
+		}
+		cgc.modules.clear();
+		chunk.disconnectFromGroups();
+		ChunkGraph.clearChunkGraphForChunk(chunk);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {Iterable} modules the modules
+	 * @returns {void}
+	 */
+	attachModules(chunk, modules) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		for (const module of modules) {
+			cgc.modules.add(module);
+		}
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {Iterable} modules the runtime modules
+	 * @returns {void}
+	 */
+	attachRuntimeModules(chunk, modules) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		for (const module of modules) {
+			cgc.runtimeModules.add(module);
+		}
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {Iterable} modules the modules that require a full hash
+	 * @returns {void}
+	 */
+	attachFullHashModules(chunk, modules) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.fullHashModules === undefined) cgc.fullHashModules = new Set();
+		for (const module of modules) {
+			cgc.fullHashModules.add(module);
+		}
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {Iterable} modules the modules that require a full hash
+	 * @returns {void}
+	 */
+	attachDependentHashModules(chunk, modules) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.dependentHashModules === undefined) {
+			cgc.dependentHashModules = new Set();
+		}
+		for (const module of modules) {
+			cgc.dependentHashModules.add(module);
+		}
+	}
+
+	/**
+	 * @param {Module} oldModule the replaced module
+	 * @param {Module} newModule the replacing module
+	 * @returns {void}
+	 */
+	replaceModule(oldModule, newModule) {
+		const oldCgm = this._getChunkGraphModule(oldModule);
+		const newCgm = this._getChunkGraphModule(newModule);
+
+		for (const chunk of oldCgm.chunks) {
+			const cgc = this._getChunkGraphChunk(chunk);
+			cgc.modules.delete(oldModule);
+			cgc.modules.add(newModule);
+			newCgm.chunks.add(chunk);
+		}
+		oldCgm.chunks.clear();
+
+		if (oldCgm.entryInChunks !== undefined) {
+			if (newCgm.entryInChunks === undefined) {
+				newCgm.entryInChunks = new Set();
+			}
+			for (const chunk of oldCgm.entryInChunks) {
+				const cgc = this._getChunkGraphChunk(chunk);
+				const old = /** @type {Entrypoint} */ (cgc.entryModules.get(oldModule));
+				/** @type {EntryModules} */
+				const newEntryModules = new Map();
+				for (const [m, cg] of cgc.entryModules) {
+					if (m === oldModule) {
+						newEntryModules.set(newModule, old);
+					} else {
+						newEntryModules.set(m, cg);
+					}
+				}
+				cgc.entryModules = newEntryModules;
+				newCgm.entryInChunks.add(chunk);
+			}
+			oldCgm.entryInChunks = undefined;
+		}
+
+		if (oldCgm.runtimeInChunks !== undefined) {
+			if (newCgm.runtimeInChunks === undefined) {
+				newCgm.runtimeInChunks = new Set();
+			}
+			for (const chunk of oldCgm.runtimeInChunks) {
+				const cgc = this._getChunkGraphChunk(chunk);
+				cgc.runtimeModules.delete(/** @type {RuntimeModule} */ (oldModule));
+				cgc.runtimeModules.add(/** @type {RuntimeModule} */ (newModule));
+				newCgm.runtimeInChunks.add(chunk);
+				if (
+					cgc.fullHashModules !== undefined &&
+					cgc.fullHashModules.has(/** @type {RuntimeModule} */ (oldModule))
+				) {
+					cgc.fullHashModules.delete(/** @type {RuntimeModule} */ (oldModule));
+					cgc.fullHashModules.add(/** @type {RuntimeModule} */ (newModule));
+				}
+				if (
+					cgc.dependentHashModules !== undefined &&
+					cgc.dependentHashModules.has(/** @type {RuntimeModule} */ (oldModule))
+				) {
+					cgc.dependentHashModules.delete(
+						/** @type {RuntimeModule} */ (oldModule)
+					);
+					cgc.dependentHashModules.add(
+						/** @type {RuntimeModule} */ (newModule)
+					);
+				}
+			}
+			oldCgm.runtimeInChunks = undefined;
+		}
+	}
+
+	/**
+	 * @param {Module} module the checked module
+	 * @param {Chunk} chunk the checked chunk
+	 * @returns {boolean} true, if the chunk contains the module
+	 */
+	isModuleInChunk(module, chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules.has(module);
+	}
+
+	/**
+	 * @param {Module} module the checked module
+	 * @param {ChunkGroup} chunkGroup the checked chunk group
+	 * @returns {boolean} true, if the chunk contains the module
+	 */
+	isModuleInChunkGroup(module, chunkGroup) {
+		for (const chunk of chunkGroup.chunks) {
+			if (this.isModuleInChunk(module, chunk)) return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Module} module the checked module
+	 * @returns {boolean} true, if the module is entry of any chunk
+	 */
+	isEntryModule(module) {
+		const cgm = this._getChunkGraphModule(module);
+		return cgm.entryInChunks !== undefined;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {Iterable} iterable of chunks (do not modify)
+	 */
+	getModuleChunksIterable(module) {
+		const cgm = this._getChunkGraphModule(module);
+		return cgm.chunks;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {(a: Chunk, b: Chunk) => -1 | 0 | 1} sortFn sort function
+	 * @returns {Iterable} iterable of chunks (do not modify)
+	 */
+	getOrderedModuleChunksIterable(module, sortFn) {
+		const cgm = this._getChunkGraphModule(module);
+		cgm.chunks.sortWith(sortFn);
+		return cgm.chunks;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {Chunk[]} array of chunks (cached, do not modify)
+	 */
+	getModuleChunks(module) {
+		const cgm = this._getChunkGraphModule(module);
+		return cgm.chunks.getFromCache(getArray);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {number} the number of chunk which contain the module
+	 */
+	getNumberOfModuleChunks(module) {
+		const cgm = this._getChunkGraphModule(module);
+		return cgm.chunks.size;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {RuntimeSpecSet} runtimes
+	 */
+	getModuleRuntimes(module) {
+		const cgm = this._getChunkGraphModule(module);
+		return cgm.chunks.getFromUnorderedCache(getModuleRuntimes);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {number} the number of modules which are contained in this chunk
+	 */
+	getNumberOfChunkModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules.size;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {number} the number of full hash modules which are contained in this chunk
+	 */
+	getNumberOfChunkFullHashModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.fullHashModules === undefined ? 0 : cgc.fullHashModules.size;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable} return the modules for this chunk
+	 */
+	getChunkModulesIterable(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {string} sourceType source type
+	 * @returns {Iterable | undefined} return the modules for this chunk
+	 */
+	getChunkModulesIterableBySourceType(chunk, sourceType) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const modulesWithSourceType = cgc.modules
+			.getFromUnorderedCache(cgc._modulesBySourceType)
+			.get(sourceType);
+		return modulesWithSourceType;
+	}
+
+	/**
+	 * @param {Chunk} chunk chunk
+	 * @param {Module} module chunk module
+	 * @param {SourceTypes} sourceTypes source types
+	 */
+	setChunkModuleSourceTypes(chunk, module, sourceTypes) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.sourceTypesByModule === undefined) {
+			cgc.sourceTypesByModule = new WeakMap();
+		}
+		cgc.sourceTypesByModule.set(module, sourceTypes);
+		// Update cgc._modulesBySourceType to invalidate the cache
+		cgc._modulesBySourceType = modulesBySourceType(cgc.sourceTypesByModule);
+	}
+
+	/**
+	 * @param {Chunk} chunk chunk
+	 * @param {Module} module chunk module
+	 * @returns {SourceTypes} source types
+	 */
+	getChunkModuleSourceTypes(chunk, module) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.sourceTypesByModule === undefined) {
+			return module.getSourceTypes();
+		}
+		return cgc.sourceTypesByModule.get(module) || module.getSourceTypes();
+	}
+
+	/**
+	 * @param {Module} module module
+	 * @returns {SourceTypes} source types
+	 */
+	getModuleSourceTypes(module) {
+		return (
+			this._getOverwrittenModuleSourceTypes(module) || module.getSourceTypes()
+		);
+	}
+
+	/**
+	 * @param {Module} module module
+	 * @returns {SourceTypes | undefined} source types
+	 */
+	_getOverwrittenModuleSourceTypes(module) {
+		let newSet = false;
+		/** @type {Set | undefined} */
+		let sourceTypes;
+		for (const chunk of this.getModuleChunksIterable(module)) {
+			const cgc = this._getChunkGraphChunk(chunk);
+			if (cgc.sourceTypesByModule === undefined) return;
+			const st = cgc.sourceTypesByModule.get(module);
+			if (st === undefined) return;
+			if (!sourceTypes) {
+				sourceTypes = /** @type {Set} */ (st);
+			} else if (!newSet) {
+				for (const type of st) {
+					if (!newSet) {
+						if (!sourceTypes.has(type)) {
+							newSet = true;
+							sourceTypes = new Set(sourceTypes);
+							sourceTypes.add(type);
+						}
+					} else {
+						sourceTypes.add(type);
+					}
+				}
+			} else {
+				for (const type of st) sourceTypes.add(type);
+			}
+		}
+
+		return sourceTypes;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ModuleComparator} comparator comparator function
+	 * @returns {Iterable} return the modules for this chunk
+	 */
+	getOrderedChunkModulesIterable(chunk, comparator) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		cgc.modules.sortWith(comparator);
+		return cgc.modules;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {string} sourceType source type
+	 * @param {ModuleComparator} comparator comparator function
+	 * @returns {Iterable | undefined} return the modules for this chunk
+	 */
+	getOrderedChunkModulesIterableBySourceType(chunk, sourceType, comparator) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const modulesWithSourceType = cgc.modules
+			.getFromUnorderedCache(cgc._modulesBySourceType)
+			.get(sourceType);
+		if (modulesWithSourceType === undefined) return;
+		modulesWithSourceType.sortWith(comparator);
+		return modulesWithSourceType;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Module[]} return the modules for this chunk (cached, do not modify)
+	 */
+	getChunkModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules.getFromUnorderedCache(getArray);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ModuleComparator} comparator comparator function
+	 * @returns {Module[]} return the modules for this chunk (cached, do not modify)
+	 */
+	getOrderedChunkModules(chunk, comparator) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const arrayFunction = createOrderedArrayFunction(comparator);
+		return cgc.modules.getFromUnorderedCache(arrayFunction);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ModuleFilterPredicate} filterFn function used to filter modules
+	 * @param {boolean} includeAllChunks all chunks or only async chunks
+	 * @returns {ChunkModuleIdMap} chunk to module ids object
+	 */
+	getChunkModuleIdMap(chunk, filterFn, includeAllChunks = false) {
+		/** @type {ChunkModuleIdMap} */
+		const chunkModuleIdMap = Object.create(null);
+
+		for (const asyncChunk of includeAllChunks
+			? chunk.getAllReferencedChunks()
+			: chunk.getAllAsyncChunks()) {
+			/** @type {ModuleId[] | undefined} */
+			let array;
+			for (const module of this.getOrderedChunkModulesIterable(
+				asyncChunk,
+				compareModulesById(this)
+			)) {
+				if (filterFn(module)) {
+					if (array === undefined) {
+						array = [];
+						chunkModuleIdMap[/** @type {ChunkId} */ (asyncChunk.id)] = array;
+					}
+					const moduleId = /** @type {ModuleId} */ (this.getModuleId(module));
+					array.push(moduleId);
+				}
+			}
+		}
+
+		return chunkModuleIdMap;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ModuleFilterPredicate} filterFn function used to filter modules
+	 * @param {number} hashLength length of the hash
+	 * @param {boolean} includeAllChunks all chunks or only async chunks
+	 * @returns {ChunkModuleHashMap} chunk to module id to module hash object
+	 */
+	getChunkModuleRenderedHashMap(
+		chunk,
+		filterFn,
+		hashLength = 0,
+		includeAllChunks = false
+	) {
+		/** @type {ChunkModuleHashMap} */
+		const chunkModuleHashMap = Object.create(null);
+
+		for (const asyncChunk of includeAllChunks
+			? chunk.getAllReferencedChunks()
+			: chunk.getAllAsyncChunks()) {
+			/** @type {IdToHashMap | undefined} */
+			let idToHashMap;
+			for (const module of this.getOrderedChunkModulesIterable(
+				asyncChunk,
+				compareModulesById(this)
+			)) {
+				if (filterFn(module)) {
+					if (idToHashMap === undefined) {
+						/** @type {IdToHashMap} */
+						idToHashMap = Object.create(null);
+						chunkModuleHashMap[/** @type {ChunkId} */ (asyncChunk.id)] =
+							/** @type {IdToHashMap} */
+							(idToHashMap);
+					}
+					const moduleId = this.getModuleId(module);
+					const hash = this.getRenderedModuleHash(module, asyncChunk.runtime);
+					/** @type {IdToHashMap} */
+					(idToHashMap)[/** @type {ModuleId} */ (moduleId)] = hashLength
+						? hash.slice(0, hashLength)
+						: hash;
+				}
+			}
+		}
+
+		return chunkModuleHashMap;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ChunkFilterPredicate} filterFn function used to filter chunks
+	 * @returns {ChunkConditionMap} chunk condition map
+	 */
+	getChunkConditionMap(chunk, filterFn) {
+		/** @type {ChunkConditionMap} */
+		const map = Object.create(null);
+		for (const c of chunk.getAllReferencedChunks()) {
+			map[/** @type {ChunkId} */ (c.id)] = filterFn(c, this);
+		}
+		return map;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ModuleFilterPredicate} filterFn predicate function used to filter modules
+	 * @param {ChunkFilterPredicate=} filterChunkFn predicate function used to filter chunks
+	 * @returns {boolean} return true if module exists in graph
+	 */
+	hasModuleInGraph(chunk, filterFn, filterChunkFn) {
+		const queue = new Set(chunk.groupsIterable);
+		/** @type {Set} */
+		const chunksProcessed = new Set();
+
+		for (const chunkGroup of queue) {
+			for (const innerChunk of chunkGroup.chunks) {
+				if (!chunksProcessed.has(innerChunk)) {
+					chunksProcessed.add(innerChunk);
+					if (!filterChunkFn || filterChunkFn(innerChunk, this)) {
+						for (const module of this.getChunkModulesIterable(innerChunk)) {
+							if (filterFn(module)) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			for (const child of chunkGroup.childrenIterable) {
+				queue.add(child);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Chunk} chunkA first chunk
+	 * @param {Chunk} chunkB second chunk
+	 * @returns {-1 | 0 | 1} this is a comparator function like sort and returns -1, 0, or 1 based on sort order
+	 */
+	compareChunks(chunkA, chunkB) {
+		const cgcA = this._getChunkGraphChunk(chunkA);
+		const cgcB = this._getChunkGraphChunk(chunkB);
+		if (cgcA.modules.size > cgcB.modules.size) return -1;
+		if (cgcA.modules.size < cgcB.modules.size) return 1;
+		cgcA.modules.sortWith(compareModulesByIdentifier);
+		cgcB.modules.sortWith(compareModulesByIdentifier);
+		return compareModuleIterables(cgcA.modules, cgcB.modules);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {number} total size of all modules in the chunk
+	 */
+	getChunkModulesSize(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules.getFromUnorderedCache(getModulesSize);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Record} total sizes of all modules in the chunk by source type
+	 */
+	getChunkModulesSizes(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules.getFromUnorderedCache(getModulesSizes);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Module[]} root modules of the chunks (ordered by identifier)
+	 */
+	getChunkRootModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.modules.getFromUnorderedCache(this._getGraphRoots);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {ChunkSizeOptions} options options object
+	 * @returns {number} total size of the chunk
+	 */
+	getChunkSize(chunk, options = {}) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const modulesSize = cgc.modules.getFromUnorderedCache(getModulesSize);
+		const chunkOverhead =
+			typeof options.chunkOverhead === "number" ? options.chunkOverhead : 10000;
+		const entryChunkMultiplicator =
+			typeof options.entryChunkMultiplicator === "number"
+				? options.entryChunkMultiplicator
+				: 10;
+		return (
+			chunkOverhead +
+			modulesSize * (chunk.canBeInitial() ? entryChunkMultiplicator : 1)
+		);
+	}
+
+	/**
+	 * @param {Chunk} chunkA chunk
+	 * @param {Chunk} chunkB chunk
+	 * @param {ChunkSizeOptions} options options object
+	 * @returns {number} total size of the chunk or false if chunks can't be integrated
+	 */
+	getIntegratedChunksSize(chunkA, chunkB, options = {}) {
+		const cgcA = this._getChunkGraphChunk(chunkA);
+		const cgcB = this._getChunkGraphChunk(chunkB);
+		const allModules = new Set(cgcA.modules);
+		for (const m of cgcB.modules) allModules.add(m);
+		const modulesSize = getModulesSize(allModules);
+		const chunkOverhead =
+			typeof options.chunkOverhead === "number" ? options.chunkOverhead : 10000;
+		const entryChunkMultiplicator =
+			typeof options.entryChunkMultiplicator === "number"
+				? options.entryChunkMultiplicator
+				: 10;
+		return (
+			chunkOverhead +
+			modulesSize *
+				(chunkA.canBeInitial() || chunkB.canBeInitial()
+					? entryChunkMultiplicator
+					: 1)
+		);
+	}
+
+	/**
+	 * @param {Chunk} chunkA chunk
+	 * @param {Chunk} chunkB chunk
+	 * @returns {boolean} true, if chunks could be integrated
+	 */
+	canChunksBeIntegrated(chunkA, chunkB) {
+		if (chunkA.preventIntegration || chunkB.preventIntegration) {
+			return false;
+		}
+
+		const hasRuntimeA = chunkA.hasRuntime();
+		const hasRuntimeB = chunkB.hasRuntime();
+
+		if (hasRuntimeA !== hasRuntimeB) {
+			if (hasRuntimeA) {
+				return isAvailableChunk(chunkA, chunkB);
+			} else if (hasRuntimeB) {
+				return isAvailableChunk(chunkB, chunkA);
+			}
+
+			return false;
+		}
+
+		if (
+			this.getNumberOfEntryModules(chunkA) > 0 ||
+			this.getNumberOfEntryModules(chunkB) > 0
+		) {
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * @param {Chunk} chunkA the target chunk
+	 * @param {Chunk} chunkB the chunk to integrate
+	 * @returns {void}
+	 */
+	integrateChunks(chunkA, chunkB) {
+		// Decide for one name (deterministic)
+		if (chunkA.name && chunkB.name) {
+			if (
+				this.getNumberOfEntryModules(chunkA) > 0 ===
+				this.getNumberOfEntryModules(chunkB) > 0
+			) {
+				// When both chunks have entry modules or none have one, use
+				// shortest name
+				if (chunkA.name.length !== chunkB.name.length) {
+					chunkA.name =
+						chunkA.name.length < chunkB.name.length ? chunkA.name : chunkB.name;
+				} else {
+					chunkA.name = chunkA.name < chunkB.name ? chunkA.name : chunkB.name;
+				}
+			} else if (this.getNumberOfEntryModules(chunkB) > 0) {
+				// Pick the name of the chunk with the entry module
+				chunkA.name = chunkB.name;
+			}
+		} else if (chunkB.name) {
+			chunkA.name = chunkB.name;
+		}
+
+		// Merge id name hints
+		for (const hint of chunkB.idNameHints) {
+			chunkA.idNameHints.add(hint);
+		}
+
+		// Merge runtime
+		chunkA.runtime = mergeRuntime(chunkA.runtime, chunkB.runtime);
+
+		// getChunkModules is used here to create a clone, because disconnectChunkAndModule modifies
+		for (const module of this.getChunkModules(chunkB)) {
+			this.disconnectChunkAndModule(chunkB, module);
+			this.connectChunkAndModule(chunkA, module);
+		}
+
+		for (const [
+			module,
+			chunkGroup
+		] of this.getChunkEntryModulesWithChunkGroupIterable(chunkB)) {
+			this.disconnectChunkAndEntryModule(chunkB, module);
+			this.connectChunkAndEntryModule(
+				chunkA,
+				module,
+				/** @type {Entrypoint} */
+				(chunkGroup)
+			);
+		}
+
+		for (const chunkGroup of chunkB.groupsIterable) {
+			chunkGroup.replaceChunk(chunkB, chunkA);
+			chunkA.addGroup(chunkGroup);
+			chunkB.removeGroup(chunkGroup);
+		}
+		ChunkGraph.clearChunkGraphForChunk(chunkB);
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk to upgrade
+	 * @returns {void}
+	 */
+	upgradeDependentToFullHashModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.dependentHashModules === undefined) return;
+		if (cgc.fullHashModules === undefined) {
+			cgc.fullHashModules = cgc.dependentHashModules;
+		} else {
+			for (const m of cgc.dependentHashModules) {
+				cgc.fullHashModules.add(m);
+			}
+			cgc.dependentHashModules = undefined;
+		}
+	}
+
+	/**
+	 * @param {Module} module the checked module
+	 * @param {Chunk} chunk the checked chunk
+	 * @returns {boolean} true, if the chunk contains the module as entry
+	 */
+	isEntryModuleInChunk(module, chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.entryModules.has(module);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {Module} module the entry module
+	 * @param {Entrypoint} entrypoint the chunk group which must be loaded before the module is executed
+	 * @returns {void}
+	 */
+	connectChunkAndEntryModule(chunk, module, entrypoint) {
+		const cgm = this._getChunkGraphModule(module);
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgm.entryInChunks === undefined) {
+			cgm.entryInChunks = new Set();
+		}
+		cgm.entryInChunks.add(chunk);
+		cgc.entryModules.set(module, entrypoint);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {RuntimeModule} module the runtime module
+	 * @returns {void}
+	 */
+	connectChunkAndRuntimeModule(chunk, module) {
+		const cgm = this._getChunkGraphModule(module);
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgm.runtimeInChunks === undefined) {
+			cgm.runtimeInChunks = new Set();
+		}
+		cgm.runtimeInChunks.add(chunk);
+		cgc.runtimeModules.add(module);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {RuntimeModule} module the module that require a full hash
+	 * @returns {void}
+	 */
+	addFullHashModuleToChunk(chunk, module) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.fullHashModules === undefined) cgc.fullHashModules = new Set();
+		cgc.fullHashModules.add(module);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {RuntimeModule} module the module that require a full hash
+	 * @returns {void}
+	 */
+	addDependentHashModuleToChunk(chunk, module) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		if (cgc.dependentHashModules === undefined) {
+			cgc.dependentHashModules = new Set();
+		}
+		cgc.dependentHashModules.add(module);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {Module} module the entry module
+	 * @returns {void}
+	 */
+	disconnectChunkAndEntryModule(chunk, module) {
+		const cgm = this._getChunkGraphModule(module);
+		const cgc = this._getChunkGraphChunk(chunk);
+		/** @type {EntryInChunks} */
+		(cgm.entryInChunks).delete(chunk);
+		if (/** @type {EntryInChunks} */ (cgm.entryInChunks).size === 0) {
+			cgm.entryInChunks = undefined;
+		}
+		cgc.entryModules.delete(module);
+	}
+
+	/**
+	 * @param {Chunk} chunk the new chunk
+	 * @param {RuntimeModule} module the runtime module
+	 * @returns {void}
+	 */
+	disconnectChunkAndRuntimeModule(chunk, module) {
+		const cgm = this._getChunkGraphModule(module);
+		const cgc = this._getChunkGraphChunk(chunk);
+		/** @type {RuntimeInChunks} */
+		(cgm.runtimeInChunks).delete(chunk);
+		if (/** @type {RuntimeInChunks} */ (cgm.runtimeInChunks).size === 0) {
+			cgm.runtimeInChunks = undefined;
+		}
+		cgc.runtimeModules.delete(module);
+	}
+
+	/**
+	 * @param {Module} module the entry module, it will no longer be entry
+	 * @returns {void}
+	 */
+	disconnectEntryModule(module) {
+		const cgm = this._getChunkGraphModule(module);
+		for (const chunk of /** @type {EntryInChunks} */ (cgm.entryInChunks)) {
+			const cgc = this._getChunkGraphChunk(chunk);
+			cgc.entryModules.delete(module);
+		}
+		cgm.entryInChunks = undefined;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk, for which all entries will be removed
+	 * @returns {void}
+	 */
+	disconnectEntries(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		for (const module of cgc.entryModules.keys()) {
+			const cgm = this._getChunkGraphModule(module);
+			/** @type {EntryInChunks} */
+			(cgm.entryInChunks).delete(chunk);
+			if (/** @type {EntryInChunks} */ (cgm.entryInChunks).size === 0) {
+				cgm.entryInChunks = undefined;
+			}
+		}
+		cgc.entryModules.clear();
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {number} the amount of entry modules in chunk
+	 */
+	getNumberOfEntryModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.entryModules.size;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {number} the amount of entry modules in chunk
+	 */
+	getNumberOfRuntimeModules(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.runtimeModules.size;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable} iterable of modules (do not modify)
+	 */
+	getChunkEntryModulesIterable(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.entryModules.keys();
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable} iterable of chunks
+	 */
+	getChunkEntryDependentChunksIterable(chunk) {
+		/** @type {Chunks} */
+		const set = new Set();
+		for (const chunkGroup of chunk.groupsIterable) {
+			if (chunkGroup instanceof Entrypoint) {
+				const entrypointChunk = chunkGroup.getEntrypointChunk();
+				const cgc = this._getChunkGraphChunk(entrypointChunk);
+				for (const chunkGroup of cgc.entryModules.values()) {
+					for (const c of chunkGroup.chunks) {
+						if (c !== chunk && c !== entrypointChunk && !c.hasRuntime()) {
+							set.add(c);
+						}
+					}
+				}
+			}
+		}
+
+		return set;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable} iterable of chunks and include chunks from children entrypoints
+	 */
+	getRuntimeChunkDependentChunksIterable(chunk) {
+		/** @type {Chunks} */
+		const set = new Set();
+
+		/** @type {Entrypoints} */
+		const entrypoints = new Set();
+
+		for (const chunkGroup of chunk.groupsIterable) {
+			if (chunkGroup instanceof Entrypoint) {
+				const queue = [chunkGroup];
+				while (queue.length > 0) {
+					const current = queue.shift();
+					if (current) {
+						entrypoints.add(current);
+
+						let hasChildrenEntrypoint = false;
+						for (const child of current.childrenIterable) {
+							if (child instanceof Entrypoint && child.dependOn(current)) {
+								hasChildrenEntrypoint = true;
+								queue.push(/** @type {Entrypoint} */ (child));
+							}
+						}
+						// entryChunkB: hasChildrenEntrypoint = true
+						// entryChunkA: dependOn = entryChunkB
+						if (hasChildrenEntrypoint) {
+							const entrypointChunk = current.getEntrypointChunk();
+							if (entrypointChunk !== chunk && !entrypointChunk.hasRuntime()) {
+								// add entryChunkB to set
+								set.add(entrypointChunk);
+							}
+						}
+					}
+				}
+			}
+		}
+
+		for (const entrypoint of entrypoints) {
+			const entrypointChunk = entrypoint.getEntrypointChunk();
+			const cgc = this._getChunkGraphChunk(entrypointChunk);
+			for (const chunkGroup of cgc.entryModules.values()) {
+				for (const c of chunkGroup.chunks) {
+					if (c !== chunk && c !== entrypointChunk && !c.hasRuntime()) {
+						set.add(c);
+					}
+				}
+			}
+		}
+		return set;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {boolean} true, when it has dependent chunks
+	 */
+	hasChunkEntryDependentChunks(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		for (const chunkGroup of cgc.entryModules.values()) {
+			for (const c of chunkGroup.chunks) {
+				if (c !== chunk) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable} iterable of modules (do not modify)
+	 */
+	getChunkRuntimeModulesIterable(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.runtimeModules;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {RuntimeModule[]} array of modules in order of execution
+	 */
+	getChunkRuntimeModulesInOrder(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const array = [...cgc.runtimeModules];
+		array.sort(
+			concatComparators(
+				compareSelect(
+					(r) => /** @type {RuntimeModule} */ (r).stage,
+					compareIds
+				),
+				compareModulesByIdentifier
+			)
+		);
+		return array;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable | undefined} iterable of modules (do not modify)
+	 */
+	getChunkFullHashModulesIterable(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.fullHashModules;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {ReadonlySet | undefined} set of modules (do not modify)
+	 */
+	getChunkFullHashModulesSet(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.fullHashModules;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable | undefined} iterable of modules (do not modify)
+	 */
+	getChunkDependentHashModulesIterable(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.dependentHashModules;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {Iterable} iterable of modules (do not modify)
+	 */
+	getChunkEntryModulesWithChunkGroupIterable(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.entryModules;
+	}
+
+	/**
+	 * @param {AsyncDependenciesBlock} depBlock the async block
+	 * @returns {ChunkGroup | undefined} the chunk group
+	 */
+	getBlockChunkGroup(depBlock) {
+		return this._blockChunkGroups.get(depBlock);
+	}
+
+	/**
+	 * @param {AsyncDependenciesBlock} depBlock the async block
+	 * @param {ChunkGroup} chunkGroup the chunk group
+	 * @returns {void}
+	 */
+	connectBlockAndChunkGroup(depBlock, chunkGroup) {
+		this._blockChunkGroups.set(depBlock, chunkGroup);
+		chunkGroup.addBlock(depBlock);
+	}
+
+	/**
+	 * @param {ChunkGroup} chunkGroup the chunk group
+	 * @returns {void}
+	 */
+	disconnectChunkGroup(chunkGroup) {
+		for (const block of chunkGroup.blocksIterable) {
+			this._blockChunkGroups.delete(block);
+		}
+		// TODO refactor by moving blocks list into ChunkGraph
+		chunkGroup._blocks.clear();
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {ModuleId | null} the id of the module
+	 */
+	getModuleId(module) {
+		const cgm = this._getChunkGraphModule(module);
+		return cgm.id;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {ModuleId} id the id of the module
+	 * @returns {void}
+	 */
+	setModuleId(module, id) {
+		const cgm = this._getChunkGraphModule(module);
+		cgm.id = id;
+	}
+
+	/**
+	 * @param {string} runtime runtime
+	 * @returns {RuntimeId} the id of the runtime
+	 */
+	getRuntimeId(runtime) {
+		return /** @type {RuntimeId} */ (this._runtimeIds.get(runtime));
+	}
+
+	/**
+	 * @param {string} runtime runtime
+	 * @param {RuntimeId} id the id of the runtime
+	 * @returns {void}
+	 */
+	setRuntimeId(runtime, id) {
+		this._runtimeIds.set(runtime, id);
+	}
+
+	/**
+	 * @template T
+	 * @param {Module} module the module
+	 * @param {RuntimeSpecMap} hashes hashes data
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {T} hash
+	 */
+	_getModuleHashInfo(module, hashes, runtime) {
+		if (!hashes) {
+			throw new Error(
+				`Module ${module.identifier()} has no hash info for runtime ${runtimeToString(
+					runtime
+				)} (hashes not set at all)`
+			);
+		} else if (runtime === undefined) {
+			const hashInfoItems = new Set(hashes.values());
+			if (hashInfoItems.size !== 1) {
+				throw new Error(
+					`No unique hash info entry for unspecified runtime for ${module.identifier()} (existing runtimes: ${Array.from(
+						hashes.keys(),
+						(r) => runtimeToString(r)
+					).join(", ")}).
+Caller might not support runtime-dependent code generation (opt-out via optimization.usedExports: "global").`
+				);
+			}
+			return /** @type {T} */ (first(hashInfoItems));
+		} else {
+			const hashInfo = hashes.get(runtime);
+			if (!hashInfo) {
+				throw new Error(
+					`Module ${module.identifier()} has no hash info for runtime ${runtimeToString(
+						runtime
+					)} (available runtimes ${Array.from(
+						hashes.keys(),
+						runtimeToString
+					).join(", ")})`
+				);
+			}
+			return hashInfo;
+		}
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, if the module has hashes for this runtime
+	 */
+	hasModuleHashes(module, runtime) {
+		const cgm = this._getChunkGraphModule(module);
+		const hashes = /** @type {RuntimeSpecMap} */ (cgm.hashes);
+		return hashes && hashes.has(runtime);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {string} hash
+	 */
+	getModuleHash(module, runtime) {
+		const cgm = this._getChunkGraphModule(module);
+		const hashes = /** @type {RuntimeSpecMap} */ (cgm.hashes);
+		return this._getModuleHashInfo(module, hashes, runtime).hash;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {string} hash
+	 */
+	getRenderedModuleHash(module, runtime) {
+		const cgm = this._getChunkGraphModule(module);
+		const hashes = /** @type {RuntimeSpecMap} */ (cgm.hashes);
+		return this._getModuleHashInfo(module, hashes, runtime).renderedHash;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {string} hash the full hash
+	 * @param {string} renderedHash the shortened hash for rendering
+	 * @returns {void}
+	 */
+	setModuleHashes(module, runtime, hash, renderedHash) {
+		const cgm = this._getChunkGraphModule(module);
+		if (cgm.hashes === undefined) {
+			cgm.hashes = new RuntimeSpecMap();
+		}
+		cgm.hashes.set(runtime, new ModuleHashInfo(hash, renderedHash));
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {RuntimeRequirements} items runtime requirements to be added (ownership of this Set is given to ChunkGraph when transferOwnership not false)
+	 * @param {boolean} transferOwnership true: transfer ownership of the items object, false: items is immutable and shared and won't be modified
+	 * @returns {void}
+	 */
+	addModuleRuntimeRequirements(
+		module,
+		runtime,
+		items,
+		transferOwnership = true
+	) {
+		const cgm = this._getChunkGraphModule(module);
+		const runtimeRequirementsMap = cgm.runtimeRequirements;
+		if (runtimeRequirementsMap === undefined) {
+			/** @type {ChunkGraphRuntimeRequirements} */
+			const map = new RuntimeSpecMap();
+			// TODO avoid cloning item and track ownership instead
+			map.set(runtime, transferOwnership ? items : new Set(items));
+			cgm.runtimeRequirements = map;
+			return;
+		}
+		runtimeRequirementsMap.update(runtime, (runtimeRequirements) => {
+			if (runtimeRequirements === undefined) {
+				return transferOwnership ? items : new Set(items);
+			} else if (!transferOwnership || runtimeRequirements.size >= items.size) {
+				for (const item of items) runtimeRequirements.add(item);
+				return runtimeRequirements;
+			}
+
+			for (const item of runtimeRequirements) items.add(item);
+			return items;
+		});
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {RuntimeRequirements} items runtime requirements to be added (ownership of this Set is given to ChunkGraph)
+	 * @returns {void}
+	 */
+	addChunkRuntimeRequirements(chunk, items) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const runtimeRequirements = cgc.runtimeRequirements;
+		if (runtimeRequirements === undefined) {
+			cgc.runtimeRequirements = items;
+		} else if (runtimeRequirements.size >= items.size) {
+			for (const item of items) runtimeRequirements.add(item);
+		} else {
+			for (const item of runtimeRequirements) items.add(item);
+			cgc.runtimeRequirements = items;
+		}
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @param {Iterable} items runtime requirements to be added
+	 * @returns {void}
+	 */
+	addTreeRuntimeRequirements(chunk, items) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const runtimeRequirements = cgc.runtimeRequirementsInTree;
+		for (const item of items) runtimeRequirements.add(item);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {ReadOnlyRuntimeRequirements} runtime requirements
+	 */
+	getModuleRuntimeRequirements(module, runtime) {
+		const cgm = this._getChunkGraphModule(module);
+		const runtimeRequirements =
+			cgm.runtimeRequirements && cgm.runtimeRequirements.get(runtime);
+		return runtimeRequirements === undefined ? EMPTY_SET : runtimeRequirements;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {ReadOnlyRuntimeRequirements} runtime requirements
+	 */
+	getChunkRuntimeRequirements(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		const runtimeRequirements = cgc.runtimeRequirements;
+		return runtimeRequirements === undefined ? EMPTY_SET : runtimeRequirements;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {boolean} withConnections include connections
+	 * @returns {string} hash
+	 */
+	getModuleGraphHash(module, runtime, withConnections = true) {
+		const cgm = this._getChunkGraphModule(module);
+		return withConnections
+			? this._getModuleGraphHashWithConnections(cgm, module, runtime)
+			: this._getModuleGraphHashBigInt(cgm, module, runtime).toString(16);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {boolean} withConnections include connections
+	 * @returns {bigint} hash
+	 */
+	getModuleGraphHashBigInt(module, runtime, withConnections = true) {
+		const cgm = this._getChunkGraphModule(module);
+		return withConnections
+			? BigInt(
+					`0x${this._getModuleGraphHashWithConnections(cgm, module, runtime)}`
+				)
+			: this._getModuleGraphHashBigInt(cgm, module, runtime);
+	}
+
+	/**
+	 * @param {ChunkGraphModule} cgm the ChunkGraphModule
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {bigint} hash as big int
+	 */
+	_getModuleGraphHashBigInt(cgm, module, runtime) {
+		if (cgm.graphHashes === undefined) {
+			cgm.graphHashes = new RuntimeSpecMap();
+		}
+		const graphHash = cgm.graphHashes.provide(runtime, () => {
+			const hash = createHash(this._hashFunction);
+			hash.update(`${cgm.id}${this.moduleGraph.isAsync(module)}`);
+			const sourceTypes = this._getOverwrittenModuleSourceTypes(module);
+			if (sourceTypes !== undefined) {
+				for (const type of sourceTypes) hash.update(type);
+			}
+			this.moduleGraph.getExportsInfo(module).updateHash(hash, runtime);
+			return BigInt(`0x${hash.digest("hex")}`);
+		});
+		return graphHash;
+	}
+
+	/**
+	 * @param {ChunkGraphModule} cgm the ChunkGraphModule
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {string} hash
+	 */
+	_getModuleGraphHashWithConnections(cgm, module, runtime) {
+		if (cgm.graphHashesWithConnections === undefined) {
+			cgm.graphHashesWithConnections = new RuntimeSpecMap();
+		}
+
+		/**
+		 * @param {ConnectionState} state state
+		 * @returns {"F" | "T" | "O"} result
+		 */
+		const activeStateToString = (state) => {
+			if (state === false) return "F";
+			if (state === true) return "T";
+			if (state === ModuleGraphConnection.TRANSITIVE_ONLY) return "O";
+			throw new Error("Not implemented active state");
+		};
+		const strict = module.buildMeta && module.buildMeta.strictHarmonyModule;
+		return cgm.graphHashesWithConnections.provide(runtime, () => {
+			const graphHash = this._getModuleGraphHashBigInt(
+				cgm,
+				module,
+				runtime
+			).toString(16);
+			const connections = this.moduleGraph.getOutgoingConnections(module);
+			/** @type {Set} */
+			const activeNamespaceModules = new Set();
+			/** @type {Map>} */
+			const connectedModules = new Map();
+			/**
+			 * @param {ModuleGraphConnection} connection connection
+			 * @param {string} stateInfo state info
+			 */
+			const processConnection = (connection, stateInfo) => {
+				const module = connection.module;
+				stateInfo += module.getExportsType(this.moduleGraph, strict);
+				// cspell:word Tnamespace
+				if (stateInfo === "Tnamespace") {
+					activeNamespaceModules.add(module);
+				} else {
+					const oldModule = connectedModules.get(stateInfo);
+					if (oldModule === undefined) {
+						connectedModules.set(stateInfo, module);
+					} else if (oldModule instanceof Set) {
+						oldModule.add(module);
+					} else if (oldModule !== module) {
+						connectedModules.set(stateInfo, new Set([oldModule, module]));
+					}
+				}
+			};
+			if (runtime === undefined || typeof runtime === "string") {
+				for (const connection of connections) {
+					const state = connection.getActiveState(runtime);
+					if (state === false) continue;
+					processConnection(connection, state === true ? "T" : "O");
+				}
+			} else {
+				// cspell:word Tnamespace
+				for (const connection of connections) {
+					/** @type {Set} */
+					const states = new Set();
+					let stateInfo = "";
+					forEachRuntime(
+						runtime,
+						(runtime) => {
+							const state = connection.getActiveState(runtime);
+							states.add(state);
+							stateInfo += activeStateToString(state) + runtime;
+						},
+						true
+					);
+					if (states.size === 1) {
+						const state = first(states);
+						if (state === false) continue;
+						stateInfo = activeStateToString(
+							/** @type {ConnectionState} */
+							(state)
+						);
+					}
+					processConnection(connection, stateInfo);
+				}
+			}
+			// cspell:word Tnamespace
+			if (activeNamespaceModules.size === 0 && connectedModules.size === 0) {
+				return graphHash;
+			}
+			const connectedModulesInOrder =
+				connectedModules.size > 1
+					? [...connectedModules].sort(([a], [b]) => (a < b ? -1 : 1))
+					: connectedModules;
+			const hash = createHash(this._hashFunction);
+			/**
+			 * @param {Module} module module
+			 */
+			const addModuleToHash = (module) => {
+				hash.update(
+					this._getModuleGraphHashBigInt(
+						this._getChunkGraphModule(module),
+						module,
+						runtime
+					).toString(16)
+				);
+			};
+			/**
+			 * @param {Set} modules modules
+			 */
+			const addModulesToHash = (modules) => {
+				let xor = ZERO_BIG_INT;
+				for (const m of modules) {
+					xor ^= this._getModuleGraphHashBigInt(
+						this._getChunkGraphModule(m),
+						m,
+						runtime
+					);
+				}
+				hash.update(xor.toString(16));
+			};
+			if (activeNamespaceModules.size === 1) {
+				addModuleToHash(
+					/** @type {Module} */ (activeNamespaceModules.values().next().value)
+				);
+			} else if (activeNamespaceModules.size > 1) {
+				addModulesToHash(activeNamespaceModules);
+			}
+			for (const [stateInfo, modules] of connectedModulesInOrder) {
+				hash.update(stateInfo);
+				if (modules instanceof Set) {
+					addModulesToHash(modules);
+				} else {
+					addModuleToHash(modules);
+				}
+			}
+			hash.update(graphHash);
+			return hash.digest("hex");
+		});
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk
+	 * @returns {ReadOnlyRuntimeRequirements} runtime requirements
+	 */
+	getTreeRuntimeRequirements(chunk) {
+		const cgc = this._getChunkGraphChunk(chunk);
+		return cgc.runtimeRequirementsInTree;
+	}
+
+	// TODO remove in webpack 6
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @param {string} deprecateMessage message for the deprecation message
+	 * @param {string} deprecationCode code for the deprecation
+	 * @returns {ChunkGraph} the chunk graph
+	 */
+	static getChunkGraphForModule(module, deprecateMessage, deprecationCode) {
+		const fn = deprecateGetChunkGraphForModuleMap.get(deprecateMessage);
+		if (fn) return fn(module);
+		const newFn = util.deprecate(
+			/**
+			 * @param {Module} module the module
+			 * @returns {ChunkGraph} the chunk graph
+			 */
+			(module) => {
+				const chunkGraph = chunkGraphForModuleMap.get(module);
+				if (!chunkGraph) {
+					throw new Error(
+						`${
+							deprecateMessage
+						}: There was no ChunkGraph assigned to the Module for backward-compat (Use the new API)`
+					);
+				}
+				return chunkGraph;
+			},
+			`${deprecateMessage}: Use new ChunkGraph API`,
+			deprecationCode
+		);
+		deprecateGetChunkGraphForModuleMap.set(deprecateMessage, newFn);
+		return newFn(module);
+	}
+
+	// TODO remove in webpack 6
+	// BACKWARD-COMPAT START
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {void}
+	 */
+	static setChunkGraphForModule(module, chunkGraph) {
+		chunkGraphForModuleMap.set(module, chunkGraph);
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @returns {void}
+	 */
+	static clearChunkGraphForModule(module) {
+		chunkGraphForModuleMap.delete(module);
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Chunk} chunk the chunk
+	 * @param {string} deprecateMessage message for the deprecation message
+	 * @param {string} deprecationCode code for the deprecation
+	 * @returns {ChunkGraph} the chunk graph
+	 */
+	static getChunkGraphForChunk(chunk, deprecateMessage, deprecationCode) {
+		const fn = deprecateGetChunkGraphForChunkMap.get(deprecateMessage);
+		if (fn) return fn(chunk);
+		const newFn = util.deprecate(
+			/**
+			 * @param {Chunk} chunk the chunk
+			 * @returns {ChunkGraph} the chunk graph
+			 */
+			(chunk) => {
+				const chunkGraph = chunkGraphForChunkMap.get(chunk);
+				if (!chunkGraph) {
+					throw new Error(
+						`${
+							deprecateMessage
+						}There was no ChunkGraph assigned to the Chunk for backward-compat (Use the new API)`
+					);
+				}
+				return chunkGraph;
+			},
+			`${deprecateMessage}: Use new ChunkGraph API`,
+			deprecationCode
+		);
+		deprecateGetChunkGraphForChunkMap.set(deprecateMessage, newFn);
+		return newFn(chunk);
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Chunk} chunk the chunk
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {void}
+	 */
+	static setChunkGraphForChunk(chunk, chunkGraph) {
+		chunkGraphForChunkMap.set(chunk, chunkGraph);
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Chunk} chunk the chunk
+	 * @returns {void}
+	 */
+	static clearChunkGraphForChunk(chunk) {
+		chunkGraphForChunkMap.delete(chunk);
+	}
+	// BACKWARD-COMPAT END
+}
+
+// TODO remove in webpack 6
+/** @type {WeakMap} */
+const chunkGraphForModuleMap = new WeakMap();
+
+// TODO remove in webpack 6
+/** @type {WeakMap} */
+const chunkGraphForChunkMap = new WeakMap();
+
+// TODO remove in webpack 6
+/** @type {Map ChunkGraph>} */
+const deprecateGetChunkGraphForModuleMap = new Map();
+
+// TODO remove in webpack 6
+/** @type {Map ChunkGraph>} */
+const deprecateGetChunkGraphForChunkMap = new Map();
+
+module.exports = ChunkGraph;
diff --git a/lib/ChunkGroup.js b/lib/ChunkGroup.js
index 482800b7ed4..c81c01a0df5 100644
--- a/lib/ChunkGroup.js
+++ b/lib/ChunkGroup.js
@@ -2,18 +2,35 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const util = require("util");
 const SortableSet = require("./util/SortableSet");
-const compareLocations = require("./compareLocations");
+const {
+	compareChunks,
+	compareIterables,
+	compareLocations
+} = require("./util/comparators");
 
+/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
 /** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Entrypoint")} Entrypoint */
 /** @typedef {import("./Module")} Module */
-/** @typedef {import("./ModuleReason")} ModuleReason */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+
+/** @typedef {{ module: Module | null, loc: DependencyLocation, request: string }} OriginRecord */
+
+/**
+ * @typedef {object} RawChunkGroupOptions
+ * @property {number=} preloadOrder
+ * @property {number=} prefetchOrder
+ * @property {("low" | "high" | "auto")=} fetchPriority
+ */
 
-/** @typedef {{id: number}} HasId */
-/** @typedef {{module: Module, loc: TODO, request: string}} OriginRecord */
-/** @typedef {string|{name: string}} ChunkGroupOptions */
+/** @typedef {RawChunkGroupOptions & { name?: string | null }} ChunkGroupOptions */
 
 let debugId = 5000;
 
@@ -22,13 +39,13 @@ let debugId = 5000;
  * @param {SortableSet} set set to convert to array.
  * @returns {T[]} the array format of existing set
  */
-const getArray = set => Array.from(set);
+const getArray = (set) => [...set];
 
 /**
  * A convenience method used to sort chunks based on their id's
- * @param {HasId} a first sorting comparator
- * @param {HasId} b second sorting comparator
- * @returns {1|0|-1} a sorting index to determine order
+ * @param {ChunkGroup} a first sorting comparator
+ * @param {ChunkGroup} b second sorting comparator
+ * @returns {1 | 0 | -1} a sorting index to determine order
  */
 const sortById = (a, b) => {
 	if (a.id < b.id) return -1;
@@ -39,7 +56,7 @@ const sortById = (a, b) => {
 /**
  * @param {OriginRecord} a the first comparator in sort
  * @param {OriginRecord} b the second comparator in sort
- * @returns {1|-1|0} returns sorting order as index
+ * @returns {1 | -1 | 0} returns sorting order as index
  */
 const sortOrigin = (a, b) => {
 	const aIdent = a.module ? a.module.identifier() : "";
@@ -52,7 +69,7 @@ const sortOrigin = (a, b) => {
 class ChunkGroup {
 	/**
 	 * Creates an instance of ChunkGroup.
-	 * @param {ChunkGroupOptions=} options chunk group options passed to chunkGroup
+	 * @param {string | ChunkGroupOptions=} options chunk group options passed to chunkGroup
 	 */
 	constructor(options) {
 		if (typeof options === "string") {
@@ -62,14 +79,37 @@ class ChunkGroup {
 		}
 		/** @type {number} */
 		this.groupDebugId = debugId++;
+		/** @type {ChunkGroupOptions} */
 		this.options = options;
+		/** @type {SortableSet} */
 		this._children = new SortableSet(undefined, sortById);
+		/** @type {SortableSet} */
 		this._parents = new SortableSet(undefined, sortById);
+		/** @type {SortableSet} */
+		this._asyncEntrypoints = new SortableSet(undefined, sortById);
+		/** @type {SortableSet} */
 		this._blocks = new SortableSet();
 		/** @type {Chunk[]} */
 		this.chunks = [];
 		/** @type {OriginRecord[]} */
 		this.origins = [];
+
+		/** @typedef {Map} OrderIndices */
+
+		/** Indices in top-down order */
+		/**
+		 * @private
+		 * @type {OrderIndices}
+		 */
+		this._modulePreOrderIndices = new Map();
+		/** Indices in bottom-up order */
+		/**
+		 * @private
+		 * @type {OrderIndices}
+		 */
+		this._modulePostOrderIndices = new Map();
+		/** @type {number | undefined} */
+		this.index = undefined;
 	}
 
 	/**
@@ -78,12 +118,24 @@ class ChunkGroup {
 	 * @returns {void}
 	 */
 	addOptions(options) {
-		for (const key of Object.keys(options)) {
+		for (const key of /** @type {(keyof ChunkGroupOptions)[]} */ (
+			Object.keys(options)
+		)) {
 			if (this.options[key] === undefined) {
-				this.options[key] = options[key];
+				/** @type {ChunkGroupOptions[keyof ChunkGroupOptions]} */
+				(this.options[key]) = options[key];
 			} else if (this.options[key] !== options[key]) {
 				if (key.endsWith("Order")) {
-					this.options[key] = Math.max(this.options[key], options[key]);
+					const orderKey =
+						/** @type {Exclude} */
+						(key);
+
+					this.options[orderKey] = Math.max(
+						/** @type {number} */
+						(this.options[orderKey]),
+						/** @type {number} */
+						(options[orderKey])
+					);
 				} else {
 					throw new Error(
 						`ChunkGroup.addOptions: No option merge strategy for ${key}`
@@ -95,7 +147,7 @@ class ChunkGroup {
 
 	/**
 	 * returns the name of current ChunkGroup
-	 * @returns {string|undefined} returns the ChunkGroup name
+	 * @returns {ChunkGroupOptions["name"]} returns the ChunkGroup name
 	 */
 	get name() {
 		return this.options.name;
@@ -103,19 +155,20 @@ class ChunkGroup {
 
 	/**
 	 * sets a new name for current ChunkGroup
-	 * @param {string} value the new name for ChunkGroup
+	 * @param {string | undefined} value the new name for ChunkGroup
 	 * @returns {void}
 	 */
 	set name(value) {
 		this.options.name = value;
 	}
 
+	/* istanbul ignore next */
 	/**
 	 * get a uniqueId for ChunkGroup, made up of its member Chunk debugId's
 	 * @returns {string} a unique concatenation of chunk debugId's
 	 */
 	get debugId() {
-		return Array.from(this.chunks, x => x.debugId).join("+");
+		return Array.from(this.chunks, (x) => x.debugId).join("+");
 	}
 
 	/**
@@ -123,7 +176,7 @@ class ChunkGroup {
 	 * @returns {string} a unique concatenation of chunk ids
 	 */
 	get id() {
-		return Array.from(this.chunks, x => x.id).join("+");
+		return Array.from(this.chunks, (x) => x.id).join("+");
 	}
 
 	/**
@@ -168,7 +221,7 @@ class ChunkGroup {
 	/**
 	 * add a chunk into ChunkGroup. Is pushed on or prepended
 	 * @param {Chunk} chunk chunk being pushed into ChunkGroupS
-	 * @returns {boolean} returns true if chunk addition was ssuccesful.
+	 * @returns {boolean} returns true if chunk addition was successful.
 	 */
 	pushChunk(chunk) {
 		const oldIdx = this.chunks.indexOf(chunk);
@@ -181,8 +234,8 @@ class ChunkGroup {
 
 	/**
 	 * @param {Chunk} oldChunk chunk to be replaced
-	 * @param {Chunk} newChunk New chunkt that will be replaced
-	 * @returns {boolean} rerturns true for
+	 * @param {Chunk} newChunk New chunk that will be replaced with
+	 * @returns {boolean | undefined} returns true if the replacement was successful
 	 */
 	replaceChunk(oldChunk, newChunk) {
 		const oldIdx = this.chunks.indexOf(oldChunk);
@@ -202,6 +255,10 @@ class ChunkGroup {
 		}
 	}
 
+	/**
+	 * @param {Chunk} chunk chunk to remove
+	 * @returns {boolean} returns true if chunk was removed
+	 */
 	removeChunk(chunk) {
 		const idx = this.chunks.indexOf(chunk);
 		if (idx >= 0) {
@@ -211,18 +268,26 @@ class ChunkGroup {
 		return false;
 	}
 
+	/**
+	 * @returns {boolean} true, when this chunk group will be loaded on initial page load
+	 */
 	isInitial() {
 		return false;
 	}
 
-	addChild(chunk) {
-		if (this._children.has(chunk)) {
-			return false;
-		}
-		this._children.add(chunk);
-		return true;
+	/**
+	 * @param {ChunkGroup} group chunk group to add
+	 * @returns {boolean} returns true if chunk group was added
+	 */
+	addChild(group) {
+		const size = this._children.size;
+		this._children.add(group);
+		return size !== this._children.size;
 	}
 
+	/**
+	 * @returns {ChunkGroup[]} returns the children of this group
+	 */
 	getChildren() {
 		return this._children.getFromCache(getArray);
 	}
@@ -235,16 +300,24 @@ class ChunkGroup {
 		return this._children;
 	}
 
-	removeChild(chunk) {
-		if (!this._children.has(chunk)) {
+	/**
+	 * @param {ChunkGroup} group the chunk group to remove
+	 * @returns {boolean} returns true if the chunk group was removed
+	 */
+	removeChild(group) {
+		if (!this._children.has(group)) {
 			return false;
 		}
 
-		this._children.delete(chunk);
-		chunk.removeParent(this);
+		this._children.delete(group);
+		group.removeParent(this);
 		return true;
 	}
 
+	/**
+	 * @param {ChunkGroup} parentChunk the parent group to be added into
+	 * @returns {boolean} returns true if this chunk group was added to the parent group
+	 */
 	addParent(parentChunk) {
 		if (!this._parents.has(parentChunk)) {
 			this._parents.add(parentChunk);
@@ -253,21 +326,21 @@ class ChunkGroup {
 		return false;
 	}
 
+	/**
+	 * @returns {ChunkGroup[]} returns the parents of this group
+	 */
 	getParents() {
 		return this._parents.getFromCache(getArray);
 	}
 
-	setParents(newParents) {
-		this._parents.clear();
-		for (const p of newParents) {
-			this._parents.add(p);
-		}
-	}
-
 	getNumberOfParents() {
 		return this._parents.size;
 	}
 
+	/**
+	 * @param {ChunkGroup} parent the parent group
+	 * @returns {boolean} returns true if the parent group contains this group
+	 */
 	hasParent(parent) {
 		return this._parents.has(parent);
 	}
@@ -276,16 +349,34 @@ class ChunkGroup {
 		return this._parents;
 	}
 
-	removeParent(chunk) {
-		if (this._parents.delete(chunk)) {
-			chunk.removeChunk(this);
+	/**
+	 * @param {ChunkGroup} chunkGroup the parent group
+	 * @returns {boolean} returns true if this group has been removed from the parent
+	 */
+	removeParent(chunkGroup) {
+		if (this._parents.delete(chunkGroup)) {
+			chunkGroup.removeChild(this);
 			return true;
 		}
 		return false;
 	}
 
 	/**
-	 * @returns {Array} - an array containing the blocks
+	 * @param {Entrypoint} entrypoint entrypoint to add
+	 * @returns {boolean} returns true if entrypoint was added
+	 */
+	addAsyncEntrypoint(entrypoint) {
+		const size = this._asyncEntrypoints.size;
+		this._asyncEntrypoints.add(entrypoint);
+		return size !== this._asyncEntrypoints.size;
+	}
+
+	get asyncEntrypointsIterable() {
+		return this._asyncEntrypoints;
+	}
+
+	/**
+	 * @returns {AsyncDependenciesBlock[]} an array containing the blocks
 	 */
 	getBlocks() {
 		return this._blocks.getFromCache(getArray);
@@ -295,14 +386,25 @@ class ChunkGroup {
 		return this._blocks.size;
 	}
 
+	/**
+	 * @param {AsyncDependenciesBlock} block block
+	 * @returns {boolean} true, if block exists
+	 */
 	hasBlock(block) {
 		return this._blocks.has(block);
 	}
 
+	/**
+	 * @returns {Iterable} blocks
+	 */
 	get blocksIterable() {
 		return this._blocks;
 	}
 
+	/**
+	 * @param {AsyncDependenciesBlock} block a block
+	 * @returns {boolean} false, if block was already added
+	 */
 	addBlock(block) {
 		if (!this._blocks.has(block)) {
 			this._blocks.add(block);
@@ -311,6 +413,12 @@ class ChunkGroup {
 		return false;
 	}
 
+	/**
+	 * @param {Module | null} module origin module
+	 * @param {DependencyLocation} loc location of the reference in the origin module
+	 * @param {string} request request name of the reference
+	 * @returns {void}
+	 */
 	addOrigin(module, loc, request) {
 		this.origins.push({
 			module,
@@ -319,14 +427,11 @@ class ChunkGroup {
 		});
 	}
 
-	containsModule(module) {
-		for (const chunk of this.chunks) {
-			if (chunk.containsModule(module)) return true;
-		}
-		return false;
-	}
-
+	/**
+	 * @returns {string[]} the files contained this chunk group
+	 */
 	getFiles() {
+		/** @type {Set} */
 		const files = new Set();
 
 		for (const chunk of this.chunks) {
@@ -335,14 +440,13 @@ class ChunkGroup {
 			}
 		}
 
-		return Array.from(files);
+		return [...files];
 	}
 
 	/**
-	 * @param {ModuleReason} reason reason for removing ChunkGroup
 	 * @returns {void}
 	 */
-	remove(reason) {
+	remove() {
 		// cleanup parents
 		for (const parentChunkGroup of this._parents) {
 			// remove this chunk from its parents
@@ -363,7 +467,7 @@ class ChunkGroup {
 
 		/**
 		 * we need to iterate again over the children
-		 * to remove this from the childs parents.
+		 * to remove this from the child's parents.
 		 * This can not be done in the above loop
 		 * as it is not guaranteed that `this._parents` contains anything.
 		 */
@@ -372,11 +476,6 @@ class ChunkGroup {
 			chunkGroup._parents.delete(this);
 		}
 
-		// cleanup blocks
-		for (const block of this._blocks) {
-			block.chunkGroup = null;
-		}
-
 		// remove chunks
 		for (const chunk of this.chunks) {
 			chunk.removeGroup(this);
@@ -385,89 +484,132 @@ class ChunkGroup {
 
 	sortItems() {
 		this.origins.sort(sortOrigin);
-		this._parents.sort();
-		this._children.sort();
 	}
 
 	/**
 	 * Sorting predicate which allows current ChunkGroup to be compared against another.
 	 * Sorting values are based off of number of chunks in ChunkGroup.
-	 *
+	 * @param {ChunkGraph} chunkGraph the chunk graph
 	 * @param {ChunkGroup} otherGroup the chunkGroup to compare this against
-	 * @returns {-1|0|1} sort position for comparison
+	 * @returns {-1 | 0 | 1} sort position for comparison
 	 */
-	compareTo(otherGroup) {
+	compareTo(chunkGraph, otherGroup) {
 		if (this.chunks.length > otherGroup.chunks.length) return -1;
 		if (this.chunks.length < otherGroup.chunks.length) return 1;
-		const a = this.chunks[Symbol.iterator]();
-		const b = otherGroup.chunks[Symbol.iterator]();
-		// eslint-disable-next-line
-		while (true) {
-			const aItem = a.next();
-			const bItem = b.next();
-			if (aItem.done) return 0;
-			const cmp = aItem.value.compareTo(bItem.value);
-			if (cmp !== 0) return cmp;
-		}
+		return compareIterables(compareChunks(chunkGraph))(
+			this.chunks,
+			otherGroup.chunks
+		);
 	}
 
-	getChildrenByOrders() {
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {Record} mapping from children type to ordered list of ChunkGroups
+	 */
+	getChildrenByOrders(moduleGraph, chunkGraph) {
+		/** @type {Map} */
 		const lists = new Map();
 		for (const childGroup of this._children) {
-			// TODO webpack 5 remove this check for options
-			if (typeof childGroup.options === "object") {
-				for (const key of Object.keys(childGroup.options)) {
-					if (key.endsWith("Order")) {
-						const name = key.substr(0, key.length - "Order".length);
-						let list = lists.get(name);
-						if (list === undefined) {
-							lists.set(name, (list = []));
-						}
-						list.push({
-							order: childGroup.options[key],
-							group: childGroup
-						});
+			for (const key of Object.keys(childGroup.options)) {
+				if (key.endsWith("Order")) {
+					const name = key.slice(0, key.length - "Order".length);
+					let list = lists.get(name);
+					if (list === undefined) {
+						lists.set(name, (list = []));
 					}
+					list.push({
+						order:
+							/** @type {number} */
+							(
+								childGroup.options[/** @type {keyof ChunkGroupOptions} */ (key)]
+							),
+						group: childGroup
+					});
 				}
 			}
 		}
+		/** @type {Record} */
 		const result = Object.create(null);
 		for (const [name, list] of lists) {
 			list.sort((a, b) => {
 				const cmp = b.order - a.order;
 				if (cmp !== 0) return cmp;
-				// TOOD webpack 5 remove this check of compareTo
-				if (a.group.compareTo) {
-					return a.group.compareTo(b.group);
-				}
-				return 0;
+				return a.group.compareTo(chunkGraph, b.group);
 			});
-			result[name] = list.map(i => i.group);
+			result[name] = list.map((i) => i.group);
 		}
 		return result;
 	}
 
+	/**
+	 * Sets the top-down index of a module in this ChunkGroup
+	 * @param {Module} module module for which the index should be set
+	 * @param {number} index the index of the module
+	 * @returns {void}
+	 */
+	setModulePreOrderIndex(module, index) {
+		this._modulePreOrderIndices.set(module, index);
+	}
+
+	/**
+	 * Gets the top-down index of a module in this ChunkGroup
+	 * @param {Module} module the module
+	 * @returns {number | undefined} index
+	 */
+	getModulePreOrderIndex(module) {
+		return this._modulePreOrderIndices.get(module);
+	}
+
+	/**
+	 * Sets the bottom-up index of a module in this ChunkGroup
+	 * @param {Module} module module for which the index should be set
+	 * @param {number} index the index of the module
+	 * @returns {void}
+	 */
+	setModulePostOrderIndex(module, index) {
+		this._modulePostOrderIndices.set(module, index);
+	}
+
+	/**
+	 * Gets the bottom-up index of a module in this ChunkGroup
+	 * @param {Module} module the module
+	 * @returns {number | undefined} index
+	 */
+	getModulePostOrderIndex(module) {
+		return this._modulePostOrderIndices.get(module);
+	}
+
+	/* istanbul ignore next */
 	checkConstraints() {
 		const chunk = this;
 		for (const child of chunk._children) {
 			if (!child._parents.has(chunk)) {
 				throw new Error(
-					`checkConstraints: child missing parent ${chunk.debugId} -> ${
-						child.debugId
-					}`
+					`checkConstraints: child missing parent ${chunk.debugId} -> ${child.debugId}`
 				);
 			}
 		}
 		for (const parentChunk of chunk._parents) {
 			if (!parentChunk._children.has(chunk)) {
 				throw new Error(
-					`checkConstraints: parent missing child ${parentChunk.debugId} <- ${
-						chunk.debugId
-					}`
+					`checkConstraints: parent missing child ${parentChunk.debugId} <- ${chunk.debugId}`
 				);
 			}
 		}
 	}
 }
 
+ChunkGroup.prototype.getModuleIndex = util.deprecate(
+	ChunkGroup.prototype.getModulePreOrderIndex,
+	"ChunkGroup.getModuleIndex was renamed to getModulePreOrderIndex",
+	"DEP_WEBPACK_CHUNK_GROUP_GET_MODULE_INDEX"
+);
+
+ChunkGroup.prototype.getModuleIndex2 = util.deprecate(
+	ChunkGroup.prototype.getModulePostOrderIndex,
+	"ChunkGroup.getModuleIndex2 was renamed to getModulePostOrderIndex",
+	"DEP_WEBPACK_CHUNK_GROUP_GET_MODULE_INDEX_2"
+);
+
 module.exports = ChunkGroup;
diff --git a/lib/ChunkRenderError.js b/lib/ChunkRenderError.js
index 0d0eb2cbc53..6d42589c095 100644
--- a/lib/ChunkRenderError.js
+++ b/lib/ChunkRenderError.js
@@ -2,6 +2,7 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
@@ -18,15 +19,20 @@ class ChunkRenderError extends WebpackError {
 	constructor(chunk, file, error) {
 		super();
 
+		/** @type {string} */
 		this.name = "ChunkRenderError";
+		/** @type {Chunk} */
+		this.chunk = chunk;
+		/** @type {string} */
+		this.file = file;
+		/** @type {Error} */
 		this.error = error;
+		/** @type {string} */
 		this.message = error.message;
+		/** @type {string} */
 		this.details = error.stack;
-		this.file = file;
-		this.chunk = chunk;
-
-		Error.captureStackTrace(this, this.constructor);
 	}
 }
 
+/** @type {typeof ChunkRenderError} */
 module.exports = ChunkRenderError;
diff --git a/lib/ChunkTemplate.js b/lib/ChunkTemplate.js
index c22586f1fcc..458d19c6506 100644
--- a/lib/ChunkTemplate.js
+++ b/lib/ChunkTemplate.js
@@ -2,70 +2,180 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const { Tapable, SyncWaterfallHook, SyncHook } = require("tapable");
+const util = require("util");
+const memoize = require("./util/memoize");
 
-/** @typedef {import("./ModuleTemplate")} ModuleTemplate */
+/** @typedef {import("tapable").Tap} Tap */
+/** @typedef {import("./config/defaults").OutputNormalizedWithDefaults} OutputOptions */
 /** @typedef {import("./Chunk")} Chunk */
-/** @typedef {import("./Module")} Module} */
-/** @typedef {import("crypto").Hash} Hash */
-
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Compilation").ChunkHashContext} ChunkHashContext */
+/** @typedef {import("./Compilation").Hash} Hash */
+/** @typedef {import("./Compilation").RenderManifestEntry} RenderManifestEntry */
+/** @typedef {import("./Compilation").RenderManifestOptions} RenderManifestOptions */
+/** @typedef {import("./Compilation").Source} Source */
+/** @typedef {import("./ModuleTemplate")} ModuleTemplate */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
 /**
- * @typedef {Object} RenderManifestOptions
- * @property {Chunk} chunk the chunk used to render
- * @property {Hash} hash
- * @property {string} fullHash
- * @property {TODO} outputOptions
- * @property {{javascript: ModuleTemplate, webassembly: ModuleTemplate}} moduleTemplates
- * @property {Map} dependencyTemplates
+ * @template T
+ * @typedef {import("tapable").IfSet} IfSet
  */
 
-module.exports = class ChunkTemplate extends Tapable {
-	constructor(outputOptions) {
-		super();
-		this.outputOptions = outputOptions || {};
-		this.hooks = {
-			renderManifest: new SyncWaterfallHook(["result", "options"]),
-			modules: new SyncWaterfallHook([
-				"source",
-				"chunk",
-				"moduleTemplate",
-				"dependencyTemplates"
-			]),
-			render: new SyncWaterfallHook([
-				"source",
-				"chunk",
-				"moduleTemplate",
-				"dependencyTemplates"
-			]),
-			renderWithEntry: new SyncWaterfallHook(["source", "chunk"]),
-			hash: new SyncHook(["hash"]),
-			hashForChunk: new SyncHook(["hash", "chunk"])
-		};
-	}
+const getJavascriptModulesPlugin = memoize(() =>
+	require("./javascript/JavascriptModulesPlugin")
+);
 
+// TODO webpack 6 remove this class
+class ChunkTemplate {
 	/**
-	 *
-	 * @param {RenderManifestOptions} options render manifest options
-	 * @returns {TODO[]} returns render manifest
+	 * @param {OutputOptions} outputOptions output options
+	 * @param {Compilation} compilation the compilation
 	 */
-	getRenderManifest(options) {
-		const result = [];
-
-		this.hooks.renderManifest.call(result, options);
-
-		return result;
+	constructor(outputOptions, compilation) {
+		this._outputOptions = outputOptions || {};
+		this.hooks = Object.freeze({
+			renderManifest: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(renderManifestEntries: RenderManifestEntry[], renderManifestOptions: RenderManifestOptions) => RenderManifestEntry[]} fn function
+					 */
+					(options, fn) => {
+						compilation.hooks.renderManifest.tap(
+							options,
+							(entries, options) => {
+								if (options.chunk.hasRuntime()) return entries;
+								return fn(entries, options);
+							}
+						);
+					},
+					"ChunkTemplate.hooks.renderManifest is deprecated (use Compilation.hooks.renderManifest instead)",
+					"DEP_WEBPACK_CHUNK_TEMPLATE_RENDER_MANIFEST"
+				)
+			},
+			modules: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, moduleTemplate: ModuleTemplate, renderContext: RenderContext) => Source} fn function
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderChunk.tap(options, (source, renderContext) =>
+								fn(
+									source,
+									compilation.moduleTemplates.javascript,
+									renderContext
+								)
+							);
+					},
+					"ChunkTemplate.hooks.modules is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderChunk instead)",
+					"DEP_WEBPACK_CHUNK_TEMPLATE_MODULES"
+				)
+			},
+			render: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, moduleTemplate: ModuleTemplate, renderContext: RenderContext) => Source} fn function
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderChunk.tap(options, (source, renderContext) =>
+								fn(
+									source,
+									compilation.moduleTemplates.javascript,
+									renderContext
+								)
+							);
+					},
+					"ChunkTemplate.hooks.render is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderChunk instead)",
+					"DEP_WEBPACK_CHUNK_TEMPLATE_RENDER"
+				)
+			},
+			renderWithEntry: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, chunk: Chunk) => Source} fn function
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.render.tap(options, (source, renderContext) => {
+								if (
+									renderContext.chunkGraph.getNumberOfEntryModules(
+										renderContext.chunk
+									) === 0 ||
+									renderContext.chunk.hasRuntime()
+								) {
+									return source;
+								}
+								return fn(source, renderContext.chunk);
+							});
+					},
+					"ChunkTemplate.hooks.renderWithEntry is deprecated (use JavascriptModulesPlugin.getCompilationHooks().render instead)",
+					"DEP_WEBPACK_CHUNK_TEMPLATE_RENDER_WITH_ENTRY"
+				)
+			},
+			hash: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(hash: Hash) => void} fn function
+					 */
+					(options, fn) => {
+						compilation.hooks.fullHash.tap(options, fn);
+					},
+					"ChunkTemplate.hooks.hash is deprecated (use Compilation.hooks.fullHash instead)",
+					"DEP_WEBPACK_CHUNK_TEMPLATE_HASH"
+				)
+			},
+			hashForChunk: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(hash: Hash, chunk: Chunk, chunkHashContext: ChunkHashContext) => void} fn function
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.chunkHash.tap(options, (chunk, hash, context) => {
+								if (chunk.hasRuntime()) return;
+								fn(hash, chunk, context);
+							});
+					},
+					"ChunkTemplate.hooks.hashForChunk is deprecated (use JavascriptModulesPlugin.getCompilationHooks().chunkHash instead)",
+					"DEP_WEBPACK_CHUNK_TEMPLATE_HASH_FOR_CHUNK"
+				)
+			}
+		});
 	}
+}
 
-	updateHash(hash) {
-		hash.update("ChunkTemplate");
-		hash.update("2");
-		this.hooks.hash.call(hash);
-	}
+Object.defineProperty(ChunkTemplate.prototype, "outputOptions", {
+	get: util.deprecate(
+		/**
+		 * @this {ChunkTemplate}
+		 * @returns {OutputOptions} output options
+		 */
+		function outputOptions() {
+			return this._outputOptions;
+		},
+		"ChunkTemplate.outputOptions is deprecated (use Compilation.outputOptions instead)",
+		"DEP_WEBPACK_CHUNK_TEMPLATE_OUTPUT_OPTIONS"
+	)
+});
 
-	updateHashForChunk(hash, chunk) {
-		this.updateHash(hash);
-		this.hooks.hashForChunk.call(hash, chunk);
-	}
-};
+module.exports = ChunkTemplate;
diff --git a/lib/CleanPlugin.js b/lib/CleanPlugin.js
new file mode 100644
index 00000000000..957cf3e62fe
--- /dev/null
+++ b/lib/CleanPlugin.js
@@ -0,0 +1,498 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sergey Melyukov @smelukov
+*/
+
+"use strict";
+
+const path = require("path");
+const asyncLib = require("neo-async");
+const { SyncBailHook } = require("tapable");
+const Compilation = require("./Compilation");
+const { join } = require("./util/fs");
+const processAsyncTree = require("./util/processAsyncTree");
+
+/** @typedef {import("../declarations/WebpackOptions").CleanOptions} CleanOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./util/fs").IStats} IStats */
+/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
+/** @typedef {import("./util/fs").StatsCallback} StatsCallback */
+
+/** @typedef {Map} Assets */
+
+/**
+ * @typedef {object} CleanPluginCompilationHooks
+ * @property {SyncBailHook<[string], boolean | void>} keep when returning true the file/directory will be kept during cleaning, returning false will clean it and ignore the following plugins and config
+ */
+
+/**
+ * @callback KeepFn
+ * @param {string} path path
+ * @returns {boolean | undefined} true, if the path should be kept
+ */
+
+const _10sec = 10 * 1000;
+
+/**
+ * merge assets map 2 into map 1
+ * @param {Assets} as1 assets
+ * @param {Assets} as2 assets
+ * @returns {void}
+ */
+const mergeAssets = (as1, as2) => {
+	for (const [key, value1] of as2) {
+		const value2 = as1.get(key);
+		if (!value2 || value1 > value2) as1.set(key, value1);
+	}
+};
+
+/** @typedef {Map} CurrentAssets */
+
+/**
+ * @param {CurrentAssets} assets current assets
+ * @returns {Set} Set of directory paths
+ */
+function getDirectories(assets) {
+	/** @type {Set} */
+	const directories = new Set();
+	/**
+	 * @param {string} filename asset filename
+	 */
+	const addDirectory = (filename) => {
+		directories.add(path.dirname(filename));
+	};
+
+	// get directories of assets
+	for (const [asset] of assets) {
+		addDirectory(asset);
+	}
+	// and all parent directories
+	for (const directory of directories) {
+		addDirectory(directory);
+	}
+	return directories;
+}
+
+/** @typedef {Set} Diff */
+
+/**
+ * @param {OutputFileSystem} fs filesystem
+ * @param {string} outputPath output path
+ * @param {CurrentAssets} currentAssets filename of the current assets (must not start with .. or ., must only use / as path separator)
+ * @param {(err?: Error | null, set?: Diff) => void} callback returns the filenames of the assets that shouldn't be there
+ * @returns {void}
+ */
+const getDiffToFs = (fs, outputPath, currentAssets, callback) => {
+	const directories = getDirectories(currentAssets);
+	/** @type {Diff} */
+	const diff = new Set();
+	asyncLib.forEachLimit(
+		directories,
+		10,
+		(directory, callback) => {
+			/** @type {NonNullable} */
+			(fs.readdir)(join(fs, outputPath, directory), (err, entries) => {
+				if (err) {
+					if (err.code === "ENOENT") return callback();
+					if (err.code === "ENOTDIR") {
+						diff.add(directory);
+						return callback();
+					}
+					return callback(err);
+				}
+				for (const entry of /** @type {string[]} */ (entries)) {
+					const file = entry;
+					// Since path.normalize("./file") === path.normalize("file"),
+					// return file directly when directory === "."
+					const filename =
+						directory && directory !== "." ? `${directory}/${file}` : file;
+					if (!directories.has(filename) && !currentAssets.has(filename)) {
+						diff.add(filename);
+					}
+				}
+				callback();
+			});
+		},
+		(err) => {
+			if (err) return callback(err);
+
+			callback(null, diff);
+		}
+	);
+};
+
+/**
+ * @param {Assets} currentAssets assets list
+ * @param {Assets} oldAssets old assets list
+ * @returns {Diff} diff
+ */
+const getDiffToOldAssets = (currentAssets, oldAssets) => {
+	/** @type {Diff} */
+	const diff = new Set();
+	const now = Date.now();
+	for (const [asset, ts] of oldAssets) {
+		if (ts >= now) continue;
+		if (!currentAssets.has(asset)) diff.add(asset);
+	}
+	return diff;
+};
+
+/**
+ * @param {OutputFileSystem} fs filesystem
+ * @param {string} filename path to file
+ * @param {StatsCallback} callback callback for provided filename
+ * @returns {void}
+ */
+const doStat = (fs, filename, callback) => {
+	if ("lstat" in fs) {
+		/** @type {NonNullable} */
+		(fs.lstat)(filename, callback);
+	} else {
+		fs.stat(filename, callback);
+	}
+};
+
+/**
+ * @param {OutputFileSystem} fs filesystem
+ * @param {string} outputPath output path
+ * @param {boolean} dry only log instead of fs modification
+ * @param {Logger} logger logger
+ * @param {Diff} diff filenames of the assets that shouldn't be there
+ * @param {KeepFn} isKept check if the entry is ignored
+ * @param {(err?: Error, assets?: Assets) => void} callback callback
+ * @returns {void}
+ */
+const applyDiff = (fs, outputPath, dry, logger, diff, isKept, callback) => {
+	/**
+	 * @param {string} msg message
+	 */
+	const log = (msg) => {
+		if (dry) {
+			logger.info(msg);
+		} else {
+			logger.log(msg);
+		}
+	};
+	/** @typedef {{ type: "check" | "unlink" | "rmdir", filename: string, parent: { remaining: number, job: Job } | undefined }} Job */
+	/** @type {Job[]} */
+	const jobs = Array.from(diff.keys(), (filename) => ({
+		type: "check",
+		filename,
+		parent: undefined
+	}));
+	/** @type {Assets} */
+	const keptAssets = new Map();
+	processAsyncTree(
+		jobs,
+		10,
+		({ type, filename, parent }, push, callback) => {
+			const path = join(fs, outputPath, filename);
+			/**
+			 * @param {Error & { code?: string }} err error
+			 * @returns {void}
+			 */
+			const handleError = (err) => {
+				const isAlreadyRemoved = () =>
+					new Promise((resolve) => {
+						if (err.code === "ENOENT") {
+							resolve(true);
+						} else if (err.code === "EPERM") {
+							// https://github.com/isaacs/rimraf/blob/main/src/fix-eperm.ts#L37
+							// fs.existsSync(path) === false https://github.com/webpack/webpack/actions/runs/15493412975/job/43624272783?pr=19586
+							doStat(fs, path, (err) => {
+								if (err) {
+									resolve(err.code === "ENOENT");
+								} else {
+									resolve(false);
+								}
+							});
+						} else {
+							resolve(false);
+						}
+					});
+
+				isAlreadyRemoved().then((isRemoved) => {
+					if (isRemoved) {
+						log(`${filename} was removed during cleaning by something else`);
+						handleParent();
+						return callback();
+					}
+					return callback(err);
+				});
+			};
+			const handleParent = () => {
+				if (parent && --parent.remaining === 0) push(parent.job);
+			};
+			switch (type) {
+				case "check":
+					if (isKept(filename)) {
+						keptAssets.set(filename, 0);
+						// do not decrement parent entry as we don't want to delete the parent
+						log(`${filename} will be kept`);
+						return process.nextTick(callback);
+					}
+					doStat(fs, path, (err, stats) => {
+						if (err) return handleError(err);
+						if (!(/** @type {IStats} */ (stats).isDirectory())) {
+							push({
+								type: "unlink",
+								filename,
+								parent
+							});
+							return callback();
+						}
+
+						/** @type {NonNullable} */
+						(fs.readdir)(path, (err, _entries) => {
+							if (err) return handleError(err);
+							/** @type {Job} */
+							const deleteJob = {
+								type: "rmdir",
+								filename,
+								parent
+							};
+							const entries = /** @type {string[]} */ (_entries);
+							if (entries.length === 0) {
+								push(deleteJob);
+							} else {
+								const parentToken = {
+									remaining: entries.length,
+									job: deleteJob
+								};
+								for (const entry of entries) {
+									const file = /** @type {string} */ (entry);
+									if (file.startsWith(".")) {
+										log(
+											`${filename} will be kept (dot-files will never be removed)`
+										);
+										continue;
+									}
+									push({
+										type: "check",
+										filename: `${filename}/${file}`,
+										parent: parentToken
+									});
+								}
+							}
+							return callback();
+						});
+					});
+					break;
+				case "rmdir":
+					log(`${filename} will be removed`);
+					if (dry) {
+						handleParent();
+						return process.nextTick(callback);
+					}
+					if (!fs.rmdir) {
+						logger.warn(
+							`${filename} can't be removed because output file system doesn't support removing directories (rmdir)`
+						);
+						return process.nextTick(callback);
+					}
+					fs.rmdir(path, (err) => {
+						if (err) return handleError(err);
+						handleParent();
+						callback();
+					});
+					break;
+				case "unlink":
+					log(`${filename} will be removed`);
+					if (dry) {
+						handleParent();
+						return process.nextTick(callback);
+					}
+					if (!fs.unlink) {
+						logger.warn(
+							`${filename} can't be removed because output file system doesn't support removing files (rmdir)`
+						);
+						return process.nextTick(callback);
+					}
+					fs.unlink(path, (err) => {
+						if (err) return handleError(err);
+						handleParent();
+						callback();
+					});
+					break;
+			}
+		},
+		(err) => {
+			if (err) return callback(err);
+			callback(undefined, keptAssets);
+		}
+	);
+};
+
+/** @type {WeakMap} */
+const compilationHooksMap = new WeakMap();
+
+const PLUGIN_NAME = "CleanPlugin";
+
+class CleanPlugin {
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @returns {CleanPluginCompilationHooks} the attached hooks
+	 */
+	static getCompilationHooks(compilation) {
+		if (!(compilation instanceof Compilation)) {
+			throw new TypeError(
+				"The 'compilation' argument must be an instance of Compilation"
+			);
+		}
+		let hooks = compilationHooksMap.get(compilation);
+		if (hooks === undefined) {
+			hooks = {
+				keep: new SyncBailHook(["ignore"])
+			};
+			compilationHooksMap.set(compilation, hooks);
+		}
+		return hooks;
+	}
+
+	/** @param {CleanOptions} options options */
+	constructor(options = {}) {
+		/** @type {CleanOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => {
+					const { definitions } = require("../schemas/WebpackOptions.json");
+
+					return {
+						definitions,
+						oneOf: [{ $ref: "#/definitions/CleanOptions" }]
+					};
+				},
+				this.options,
+				{
+					name: "Clean Plugin",
+					baseDataPath: "options"
+				}
+			);
+		});
+
+		const { keep } = this.options;
+
+		/** @type {boolean} */
+		const dry = this.options.dry || false;
+		/** @type {KeepFn} */
+		const keepFn =
+			typeof keep === "function"
+				? keep
+				: typeof keep === "string"
+					? (path) => path.startsWith(keep)
+					: typeof keep === "object" && keep.test
+						? (path) => keep.test(path)
+						: () => false;
+
+		// We assume that no external modification happens while the compiler is active
+		// So we can store the old assets and only diff to them to avoid fs access on
+		// incremental builds
+		/** @type {undefined | Assets} */
+		let oldAssets;
+
+		compiler.hooks.emit.tapAsync(
+			{
+				name: PLUGIN_NAME,
+				stage: 100
+			},
+			(compilation, callback) => {
+				const hooks = CleanPlugin.getCompilationHooks(compilation);
+				const logger = compilation.getLogger(`webpack.${PLUGIN_NAME}`);
+				const fs = /** @type {OutputFileSystem} */ (compiler.outputFileSystem);
+
+				if (!fs.readdir) {
+					return callback(
+						new Error(
+							`${PLUGIN_NAME}: Output filesystem doesn't support listing directories (readdir)`
+						)
+					);
+				}
+
+				/** @type {Assets} */
+				const currentAssets = new Map();
+				const now = Date.now();
+				for (const asset of Object.keys(compilation.assets)) {
+					if (/^[a-z]:\\|^\/|^\\\\/i.test(asset)) continue;
+					/** @type {string} */
+					let normalizedAsset;
+					let newNormalizedAsset = asset.replace(/\\/g, "/");
+					do {
+						normalizedAsset = newNormalizedAsset;
+						newNormalizedAsset = normalizedAsset.replace(
+							/(^|\/)(?!\.\.)[^/]+\/\.\.\//g,
+							"$1"
+						);
+					} while (newNormalizedAsset !== normalizedAsset);
+					if (normalizedAsset.startsWith("../")) continue;
+					const assetInfo = compilation.assetsInfo.get(asset);
+					if (assetInfo && assetInfo.hotModuleReplacement) {
+						currentAssets.set(normalizedAsset, now + _10sec);
+					} else {
+						currentAssets.set(normalizedAsset, 0);
+					}
+				}
+
+				const outputPath = compilation.getPath(compiler.outputPath, {});
+
+				/**
+				 * @param {string} path path
+				 * @returns {boolean | undefined} true, if needs to be kept
+				 */
+				const isKept = (path) => {
+					const result = hooks.keep.call(path);
+					if (result !== undefined) return result;
+					return keepFn(path);
+				};
+
+				/**
+				 * @param {(Error | null)=} err err
+				 * @param {Diff=} diff diff
+				 */
+				const diffCallback = (err, diff) => {
+					if (err) {
+						oldAssets = undefined;
+						callback(err);
+						return;
+					}
+					applyDiff(
+						fs,
+						outputPath,
+						dry,
+						logger,
+						/** @type {Diff} */ (diff),
+						isKept,
+						(err, keptAssets) => {
+							if (err) {
+								oldAssets = undefined;
+							} else {
+								if (oldAssets) mergeAssets(currentAssets, oldAssets);
+								oldAssets = currentAssets;
+								if (keptAssets) mergeAssets(oldAssets, keptAssets);
+							}
+							callback(err);
+						}
+					);
+				};
+
+				if (oldAssets) {
+					diffCallback(null, getDiffToOldAssets(currentAssets, oldAssets));
+				} else {
+					getDiffToFs(fs, outputPath, currentAssets, diffCallback);
+				}
+			}
+		);
+	}
+}
+
+module.exports = CleanPlugin;
+module.exports._getDirectories = getDirectories;
diff --git a/lib/CodeGenerationError.js b/lib/CodeGenerationError.js
new file mode 100644
index 00000000000..63b81d2a0a7
--- /dev/null
+++ b/lib/CodeGenerationError.js
@@ -0,0 +1,35 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+/** @typedef {import("./Module")} Module */
+
+class CodeGenerationError extends WebpackError {
+	/**
+	 * Create a new CodeGenerationError
+	 * @param {Module} module related module
+	 * @param {Error} error Original error
+	 */
+	constructor(module, error) {
+		super();
+
+		/** @type {string} */
+		this.name = "CodeGenerationError";
+		/** @type {Module} */
+		this.module = module;
+		/** @type {Error} */
+		this.error = error;
+		/** @type {string} */
+		this.message = error.message;
+		/** @type {string} */
+		this.details = error.stack;
+	}
+}
+
+/** @type {typeof CodeGenerationError} */
+module.exports = CodeGenerationError;
diff --git a/lib/CodeGenerationResults.js b/lib/CodeGenerationResults.js
new file mode 100644
index 00000000000..fe1d6677f25
--- /dev/null
+++ b/lib/CodeGenerationResults.js
@@ -0,0 +1,167 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { DEFAULTS } = require("./config/defaults");
+const { getOrInsert } = require("./util/MapHelpers");
+const { first } = require("./util/SetHelpers");
+const createHash = require("./util/createHash");
+const { RuntimeSpecMap, runtimeToString } = require("./util/runtime");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").SourceType} SourceType */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
+/** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
+/** @typedef {import("./util/Hash").HashFunction} HashFunction */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+class CodeGenerationResults {
+	/**
+	 * @param {HashFunction} hashFunction the hash function to use
+	 */
+	constructor(hashFunction = DEFAULTS.HASH_FUNCTION) {
+		/** @type {Map>} */
+		this.map = new Map();
+		/** @type {HashFunction} */
+		this._hashFunction = hashFunction;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @returns {CodeGenerationResult} the CodeGenerationResult
+	 */
+	get(module, runtime) {
+		const entry = this.map.get(module);
+		if (entry === undefined) {
+			throw new Error(
+				`No code generation entry for ${module.identifier()} (existing entries: ${Array.from(
+					this.map.keys(),
+					(m) => m.identifier()
+				).join(", ")})`
+			);
+		}
+		if (runtime === undefined) {
+			if (entry.size > 1) {
+				const results = new Set(entry.values());
+				if (results.size !== 1) {
+					throw new Error(
+						`No unique code generation entry for unspecified runtime for ${module.identifier()} (existing runtimes: ${Array.from(
+							entry.keys(),
+							(r) => runtimeToString(r)
+						).join(", ")}).
+Caller might not support runtime-dependent code generation (opt-out via optimization.usedExports: "global").`
+					);
+				}
+				return /** @type {CodeGenerationResult} */ (first(results));
+			}
+			return /** @type {CodeGenerationResult} */ (entry.values().next().value);
+		}
+		const result = entry.get(runtime);
+		if (result === undefined) {
+			throw new Error(
+				`No code generation entry for runtime ${runtimeToString(
+					runtime
+				)} for ${module.identifier()} (existing runtimes: ${Array.from(
+					entry.keys(),
+					(r) => runtimeToString(r)
+				).join(", ")})`
+			);
+		}
+		return result;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @returns {boolean} true, when we have data for this
+	 */
+	has(module, runtime) {
+		const entry = this.map.get(module);
+		if (entry === undefined) {
+			return false;
+		}
+		if (runtime !== undefined) {
+			return entry.has(runtime);
+		} else if (entry.size > 1) {
+			const results = new Set(entry.values());
+			return results.size === 1;
+		}
+		return entry.size === 1;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @param {SourceType} sourceType the source type
+	 * @returns {Source} a source
+	 */
+	getSource(module, runtime, sourceType) {
+		return /** @type {Source} */ (
+			this.get(module, runtime).sources.get(sourceType)
+		);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @returns {ReadOnlyRuntimeRequirements | null} runtime requirements
+	 */
+	getRuntimeRequirements(module, runtime) {
+		return this.get(module, runtime).runtimeRequirements;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @param {string} key data key
+	 * @returns {ReturnType} data generated by code generation
+	 */
+	getData(module, runtime, key) {
+		const data = this.get(module, runtime).data;
+		return data === undefined ? undefined : data.get(key);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @returns {string} hash of the code generation
+	 */
+	getHash(module, runtime) {
+		const info = this.get(module, runtime);
+		if (info.hash !== undefined) return info.hash;
+		const hash = createHash(this._hashFunction);
+		for (const [type, source] of info.sources) {
+			hash.update(type);
+			source.updateHash(hash);
+		}
+		if (info.runtimeRequirements) {
+			for (const rr of info.runtimeRequirements) hash.update(rr);
+		}
+		return (info.hash = hash.digest("hex"));
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime runtime(s)
+	 * @param {CodeGenerationResult} result result from module
+	 * @returns {void}
+	 */
+	add(module, runtime, result) {
+		const map = getOrInsert(
+			this.map,
+			module,
+			() =>
+				/** @type {RuntimeSpecMap} */
+				new RuntimeSpecMap()
+		);
+		map.set(runtime, result);
+	}
+}
+
+module.exports = CodeGenerationResults;
diff --git a/lib/CommentCompilationWarning.js b/lib/CommentCompilationWarning.js
index 4b1e6de5118..f81f069f093 100644
--- a/lib/CommentCompilationWarning.js
+++ b/lib/CommentCompilationWarning.js
@@ -2,31 +2,32 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
 
-/** @typedef {import("./Module.js")} Module */
-
-/** @typedef {import("./Dependency.js").Loc} Loc */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
 
 class CommentCompilationWarning extends WebpackError {
 	/**
-	 *
 	 * @param {string} message warning message
-	 * @param {Module} module affected module
-	 * @param {Loc} loc affected lines of code
+	 * @param {DependencyLocation} loc affected lines of code
 	 */
-	constructor(message, module, loc) {
+	constructor(message, loc) {
 		super(message);
 
+		/** @type {string} */
 		this.name = "CommentCompilationWarning";
-
-		this.module = module;
+		/** @type {DependencyLocation} */
 		this.loc = loc;
-
-		Error.captureStackTrace(this, this.constructor);
 	}
 }
 
+makeSerializable(
+	CommentCompilationWarning,
+	"webpack/lib/CommentCompilationWarning"
+);
+
 module.exports = CommentCompilationWarning;
diff --git a/lib/CompatibilityPlugin.js b/lib/CompatibilityPlugin.js
index 5d2680245bb..442a9512785 100644
--- a/lib/CompatibilityPlugin.js
+++ b/lib/CompatibilityPlugin.js
@@ -2,69 +2,239 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const ConstDependency = require("./dependencies/ConstDependency");
 
-const NullFactory = require("./NullFactory");
+/** @typedef {import("estree").CallExpression} CallExpression */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./dependencies/ContextDependency")} ContextDependency */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+
+/**
+ * @typedef {object} CompatibilitySettingsDeclaration
+ * @property {boolean} updated
+ * @property {DependencyLocation} loc
+ * @property {Range} range
+ */
+
+/**
+ * @typedef {object} CompatibilitySettings
+ * @property {string} name
+ * @property {CompatibilitySettingsDeclaration} declaration
+ */
 
-/** @typedef {import("./Compiler.js")} Compiler */
+const nestedWebpackIdentifierTag = Symbol("nested webpack identifier");
+const PLUGIN_NAME = "CompatibilityPlugin";
 
 class CompatibilityPlugin {
 	/**
 	 * Apply the plugin
-	 * @param {Compiler} compiler Webpack Compiler
+	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"CompatibilityPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
 				compilation.dependencyTemplates.set(
 					ConstDependency,
 					new ConstDependency.Template()
 				);
 
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("CompatibilityPlugin", (parser, parserOptions) => {
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, (parser, parserOptions) => {
 						if (
-							typeof parserOptions.browserify !== "undefined" &&
+							parserOptions.browserify !== undefined &&
 							!parserOptions.browserify
-						)
+						) {
 							return;
+						}
 
-						parser.hooks.call
-							.for("require")
-							.tap("CompatibilityPlugin", expr => {
+						parser.hooks.call.for("require").tap(
+							PLUGIN_NAME,
+							/**
+							 * @param {CallExpression} expr call expression
+							 * @returns {boolean | void} true when need to handle
+							 */
+							(expr) => {
 								// support for browserify style require delegator: "require(o, !0)"
 								if (expr.arguments.length !== 2) return;
 								const second = parser.evaluateExpression(expr.arguments[1]);
 								if (!second.isBoolean()) return;
 								if (second.asBool() !== true) return;
-								const dep = new ConstDependency("require", expr.callee.range);
-								dep.loc = expr.loc;
-								if (parser.state.current.dependencies.length > 1) {
+								const dep = new ConstDependency(
+									"require",
+									/** @type {Range} */ (expr.callee.range)
+								);
+								dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+								if (parser.state.current.dependencies.length > 0) {
 									const last =
-										parser.state.current.dependencies[
-											parser.state.current.dependencies.length - 1
-										];
+										/** @type {ContextDependency} */
+										(
+											parser.state.current.dependencies[
+												parser.state.current.dependencies.length - 1
+											]
+										);
 									if (
 										last.critical &&
 										last.options &&
 										last.options.request === "." &&
 										last.userRequest === "." &&
 										last.options.recursive
-									)
+									) {
 										parser.state.current.dependencies.pop();
+									}
+								}
+								parser.state.module.addPresentationalDependency(dep);
+								return true;
+							}
+						);
+					});
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @returns {void}
+				 */
+				const handler = (parser) => {
+					// Handle nested requires
+					parser.hooks.preStatement.tap(PLUGIN_NAME, (statement) => {
+						if (
+							statement.type === "FunctionDeclaration" &&
+							statement.id &&
+							statement.id.name === RuntimeGlobals.require
+						) {
+							const newName = `__nested_webpack_require_${
+								/** @type {Range} */
+								(statement.range)[0]
+							}__`;
+							parser.tagVariable(
+								statement.id.name,
+								nestedWebpackIdentifierTag,
+								{
+									name: newName,
+									declaration: {
+										updated: false,
+										loc: /** @type {DependencyLocation} */ (statement.id.loc),
+										range: /** @type {Range} */ (statement.id.range)
+									}
+								}
+							);
+							return true;
+						}
+					});
+					parser.hooks.pattern
+						.for(RuntimeGlobals.require)
+						.tap(PLUGIN_NAME, (pattern) => {
+							const newName = `__nested_webpack_require_${
+								/** @type {Range} */ (pattern.range)[0]
+							}__`;
+							parser.tagVariable(pattern.name, nestedWebpackIdentifierTag, {
+								name: newName,
+								declaration: {
+									updated: false,
+									loc: /** @type {DependencyLocation} */ (pattern.loc),
+									range: /** @type {Range} */ (pattern.range)
 								}
-								parser.state.current.addDependency(dep);
+							});
+							if (parser.scope.topLevelScope !== true) {
 								return true;
+							}
+						});
+					parser.hooks.pattern
+						.for(RuntimeGlobals.exports)
+						.tap(PLUGIN_NAME, (pattern) => {
+							const newName = "__nested_webpack_exports__";
+							parser.tagVariable(pattern.name, nestedWebpackIdentifierTag, {
+								name: newName,
+								declaration: {
+									updated: false,
+									loc: /** @type {DependencyLocation} */ (pattern.loc),
+									range: /** @type {Range} */ (pattern.range)
+								}
 							});
+							return true;
+						});
+					// Update single `var __webpack_require__ = {};` and `var __webpack_exports__ = {};` without expression
+					parser.hooks.declarator.tap(PLUGIN_NAME, (declarator) => {
+						if (
+							declarator.id.type === "Identifier" &&
+							(declarator.id.name === RuntimeGlobals.exports ||
+								declarator.id.name === RuntimeGlobals.require)
+						) {
+							const { name, declaration } =
+								/** @type {CompatibilitySettings} */ (
+									parser.getTagData(
+										declarator.id.name,
+										nestedWebpackIdentifierTag
+									)
+								);
+							if (!declaration.updated) {
+								const dep = new ConstDependency(name, declaration.range);
+								dep.loc = declaration.loc;
+								parser.state.module.addPresentationalDependency(dep);
+								declaration.updated = true;
+							}
+						}
+					});
+					parser.hooks.expression
+						.for(nestedWebpackIdentifierTag)
+						.tap(PLUGIN_NAME, (expr) => {
+							const { name, declaration } =
+								/** @type {CompatibilitySettings} */
+								(parser.currentTagData);
+							if (!declaration.updated) {
+								const dep = new ConstDependency(name, declaration.range);
+								dep.loc = declaration.loc;
+								parser.state.module.addPresentationalDependency(dep);
+								declaration.updated = true;
+							}
+							const dep = new ConstDependency(
+								name,
+								/** @type {Range} */ (expr.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+							return true;
+						});
+
+					// Handle hashbang
+					parser.hooks.program.tap(PLUGIN_NAME, (program, comments) => {
+						if (comments.length === 0) return;
+						const c = comments[0];
+						if (c.type === "Line" && /** @type {Range} */ (c.range)[0] === 0) {
+							if (parser.state.source.slice(0, 2).toString() !== "#!") return;
+							// this is a hashbang comment
+							const dep = new ConstDependency("//", 0);
+							dep.loc = /** @type {DependencyLocation} */ (c.loc);
+							parser.state.module.addPresentationalDependency(dep);
+						}
 					});
+				};
+
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
 			}
 		);
 	}
 }
+
 module.exports = CompatibilityPlugin;
+module.exports.nestedWebpackIdentifierTag = nestedWebpackIdentifierTag;
diff --git a/lib/Compilation.js b/lib/Compilation.js
index 1fd02ed4f6f..a2e4dbed5d5 100644
--- a/lib/Compilation.js
+++ b/lib/Compilation.js
@@ -1,1031 +1,4038 @@
 /*
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
-	*/
+*/
+
 "use strict";
 
-const asyncLib = require("neo-async");
 const util = require("util");
-const { CachedSource } = require("webpack-sources");
+const asyncLib = require("neo-async");
 const {
-	Tapable,
-	SyncHook,
+	AsyncParallelHook,
+	AsyncSeriesBailHook,
+	AsyncSeriesHook,
+	HookMap,
 	SyncBailHook,
-	SyncWaterfallHook,
-	AsyncSeriesHook
+	SyncHook,
+	SyncWaterfallHook
 } = require("tapable");
-const EntryModuleNotFoundError = require("./EntryModuleNotFoundError");
-const ModuleNotFoundError = require("./ModuleNotFoundError");
-const ModuleDependencyWarning = require("./ModuleDependencyWarning");
-const ModuleDependencyError = require("./ModuleDependencyError");
-const ChunkGroup = require("./ChunkGroup");
+const { CachedSource } = require("webpack-sources");
+const { MultiItemCache } = require("./CacheFacade");
 const Chunk = require("./Chunk");
+const ChunkGraph = require("./ChunkGraph");
+const ChunkGroup = require("./ChunkGroup");
+const ChunkRenderError = require("./ChunkRenderError");
+const ChunkTemplate = require("./ChunkTemplate");
+const CodeGenerationError = require("./CodeGenerationError");
+const CodeGenerationResults = require("./CodeGenerationResults");
+const Dependency = require("./Dependency");
+const DependencyTemplates = require("./DependencyTemplates");
 const Entrypoint = require("./Entrypoint");
+const ErrorHelpers = require("./ErrorHelpers");
+const FileSystemInfo = require("./FileSystemInfo");
+const {
+	connectChunkGroupAndChunk,
+	connectChunkGroupParentAndChild,
+	connectEntrypointAndDependOn
+} = require("./GraphHelpers");
+const {
+	makeWebpackError,
+	tryRunOrWebpackError
+} = require("./HookWebpackError");
 const MainTemplate = require("./MainTemplate");
-const ChunkTemplate = require("./ChunkTemplate");
-const HotUpdateChunkTemplate = require("./HotUpdateChunkTemplate");
+const Module = require("./Module");
+const ModuleDependencyError = require("./ModuleDependencyError");
+const ModuleDependencyWarning = require("./ModuleDependencyWarning");
+const ModuleGraph = require("./ModuleGraph");
+const ModuleHashingError = require("./ModuleHashingError");
+const ModuleNotFoundError = require("./ModuleNotFoundError");
+const ModuleProfile = require("./ModuleProfile");
+const ModuleRestoreError = require("./ModuleRestoreError");
+const ModuleStoreError = require("./ModuleStoreError");
 const ModuleTemplate = require("./ModuleTemplate");
+const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const RuntimeTemplate = require("./RuntimeTemplate");
-const Dependency = require("./Dependency");
-const ChunkRenderError = require("./ChunkRenderError");
-const AsyncDependencyToInitialChunkError = require("./AsyncDependencyToInitialChunkError");
 const Stats = require("./Stats");
-const Semaphore = require("./util/Semaphore");
+const WebpackError = require("./WebpackError");
+const buildChunkGraph = require("./buildChunkGraph");
+const BuildCycleError = require("./errors/BuildCycleError");
+const { LogType, Logger } = require("./logging/Logger");
+const StatsFactory = require("./stats/StatsFactory");
+const StatsPrinter = require("./stats/StatsPrinter");
+const { equals: arrayEquals } = require("./util/ArrayHelpers");
+const AsyncQueue = require("./util/AsyncQueue");
+const LazySet = require("./util/LazySet");
+const { getOrInsert } = require("./util/MapHelpers");
+const WeakTupleMap = require("./util/WeakTupleMap");
+const { cachedCleverMerge } = require("./util/cleverMerge");
+const {
+	compareIds,
+	compareLocations,
+	compareModulesByIdentifier,
+	compareSelect,
+	compareStringsNumeric,
+	concatComparators
+} = require("./util/comparators");
 const createHash = require("./util/createHash");
-const Queue = require("./util/Queue");
-const SortableSet = require("./util/SortableSet");
-const GraphHelpers = require("./GraphHelpers");
-
-const byId = (a, b) => {
-	if (a.id < b.id) return -1;
-	if (a.id > b.id) return 1;
-	return 0;
+const {
+	arrayToSetDeprecation,
+	createFakeHook,
+	soonFrozenObjectDeprecation
+} = require("./util/deprecation");
+const processAsyncTree = require("./util/processAsyncTree");
+const { getRuntimeKey } = require("./util/runtime");
+const { isSourceEqual } = require("./util/source");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputOptions */
+/** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
+/** @typedef {import("../declarations/WebpackOptions").HashDigest} HashDigest */
+/** @typedef {import("../declarations/WebpackOptions").HashDigestLength} HashDigestLength */
+/** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
+/** @typedef {import("../declarations/WebpackOptions").Plugins} Plugins */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./config/defaults").OutputNormalizedWithDefaults} OutputOptionsWithDefaults */
+/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
+/** @typedef {import("./Cache")} Cache */
+/** @typedef {import("./CacheFacade")} CacheFacade */
+/** @typedef {import("./Chunk").ChunkName} ChunkName */
+/** @typedef {import("./Chunk").ChunkId} ChunkId */
+/** @typedef {import("./ChunkGroup").ChunkGroupOptions} ChunkGroupOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Compiler").CompilationParams} CompilationParams */
+/** @typedef {import("./Compiler").MemCache} MemCache */
+/** @typedef {import("./Compiler").WeakReferences} WeakReferences */
+/** @typedef {import("./Compiler").ModuleMemCachesItem} ModuleMemCachesItem */
+/** @typedef {import("./Compiler").Records} Records */
+/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Dependency").ReferencedExports} ReferencedExports */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
+/** @typedef {import("./Module").NameForCondition} NameForCondition */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./Module").ValueCacheVersions} ValueCacheVersions */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./NormalModule").NormalModuleCompilationHooks} NormalModuleCompilationHooks */
+/** @typedef {import("./Module").FactoryMeta} FactoryMeta */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./ModuleFactory")} ModuleFactory */
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
+/** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
+/** @typedef {import("./NormalModule")} NormalModule */
+/** @typedef {import("./NormalModule").AnyLoaderContext} AnyLoaderContext */
+/** @typedef {import("./NormalModule").ParserOptions} ParserOptions */
+/** @typedef {import("./NormalModule").GeneratorOptions} GeneratorOptions */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./RuntimeModule")} RuntimeModule */
+/** @typedef {import("./Template").RenderManifestEntry} RenderManifestEntry */
+/** @typedef {import("./Template").RenderManifestOptions} RenderManifestOptions */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModule} StatsModule */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+/** @typedef {import("./util/Hash")} Hash */
+
+/**
+ * @template T
+ * @typedef {import("tapable").AsArray} AsArray
+ */
+
+/**
+ * @template T
+ * @typedef {import("./util/deprecation").FakeHook} FakeHook
+ */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+
+/**
+ * @callback Callback
+ * @param {(WebpackError | null)=} err
+ * @returns {void}
+ */
+
+/**
+ * @callback ModuleCallback
+ * @param {WebpackError | null=} err
+ * @param {Module | null=} result
+ * @returns {void}
+ */
+
+/**
+ * @callback ModuleFactoryResultCallback
+ * @param {WebpackError | null=} err
+ * @param {ModuleFactoryResult | null=} result
+ * @returns {void}
+ */
+
+/**
+ * @callback ModuleOrModuleFactoryResultCallback
+ * @param {WebpackError | null=} err
+ * @param {Module | ModuleFactoryResult | null=} result
+ * @returns {void}
+ */
+
+/**
+ * @callback ExecuteModuleCallback
+ * @param {WebpackError | null=} err
+ * @param {ExecuteModuleResult | null=} result
+ * @returns {void}
+ */
+
+/** @typedef {new (...args: EXPECTED_ANY[]) => Dependency} DependencyConstructor */
+
+/** @typedef {Record} CompilationAssets */
+
+/**
+ * @typedef {object} AvailableModulesChunkGroupMapping
+ * @property {ChunkGroup} chunkGroup
+ * @property {Set} availableModules
+ * @property {boolean} needCopy
+ */
+
+/**
+ * @typedef {object} DependenciesBlockLike
+ * @property {Dependency[]} dependencies
+ * @property {AsyncDependenciesBlock[]} blocks
+ */
+
+/** @typedef {Set} Chunks */
+
+/**
+ * @typedef {object} ChunkPathData
+ * @property {string | number} id
+ * @property {string=} name
+ * @property {string} hash
+ * @property {HashWithLengthFunction=} hashWithLength
+ * @property {(Record)=} contentHash
+ * @property {(Record)=} contentHashWithLength
+ */
+
+/**
+ * @typedef {object} ChunkHashContext
+ * @property {CodeGenerationResults} codeGenerationResults results of code generation
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
+ * @property {ModuleGraph} moduleGraph the module graph
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ */
+
+/**
+ * @typedef {object} RuntimeRequirementsContext
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ * @property {CodeGenerationResults} codeGenerationResults the code generation results
+ */
+
+/**
+ * @typedef {object} ExecuteModuleOptions
+ * @property {EntryOptions=} entryOptions
+ */
+
+/** @typedef {LazySet} FileSystemDependencies */
+
+/** @typedef {EXPECTED_ANY} ExecuteModuleExports */
+
+/**
+ * @typedef {object} ExecuteModuleResult
+ * @property {ExecuteModuleExports} exports
+ * @property {boolean} cacheable
+ * @property {ExecuteModuleAssets} assets
+ * @property {FileSystemDependencies} fileDependencies
+ * @property {FileSystemDependencies} contextDependencies
+ * @property {FileSystemDependencies} missingDependencies
+ * @property {FileSystemDependencies} buildDependencies
+ */
+
+/**
+ * @typedef {object} ExecuteModuleObject
+ * @property {string=} id module id
+ * @property {ExecuteModuleExports} exports exports
+ * @property {boolean} loaded is loaded
+ * @property {Error=} error error
+ */
+
+/**
+ * @typedef {object} ExecuteModuleArgument
+ * @property {Module} module
+ * @property {ExecuteModuleObject=} moduleObject
+ * @property {CodeGenerationResult} codeGenerationResult
+ */
+
+/** @typedef {((id: string) => ExecuteModuleExports) & { i?: ((options: ExecuteOptions) => void)[], c?: Record }} WebpackRequire */
+
+/**
+ * @typedef {object} ExecuteOptions
+ * @property {string=} id module id
+ * @property {ExecuteModuleObject} module module
+ * @property {WebpackRequire} require require function
+ */
+
+/** @typedef {Map} ExecuteModuleAssets */
+
+/**
+ * @typedef {object} ExecuteModuleContext
+ * @property {ExecuteModuleAssets} assets
+ * @property {Chunk} chunk
+ * @property {ChunkGraph} chunkGraph
+ * @property {WebpackRequire=} __webpack_require__
+ */
+
+/**
+ * @typedef {object} EntryData
+ * @property {Dependency[]} dependencies dependencies of the entrypoint that should be evaluated at startup
+ * @property {Dependency[]} includeDependencies dependencies of the entrypoint that should be included but not evaluated
+ * @property {EntryOptions} options options of the entrypoint
+ */
+
+/**
+ * @typedef {object} LogEntry
+ * @property {keyof LogType} type
+ * @property {EXPECTED_ANY[]=} args
+ * @property {number} time
+ * @property {string[]=} trace
+ */
+
+/**
+ * @typedef {object} KnownAssetInfo
+ * @property {boolean=} immutable true, if the asset can be long term cached forever (contains a hash)
+ * @property {boolean=} minimized whether the asset is minimized
+ * @property {string | string[]=} fullhash the value(s) of the full hash used for this asset
+ * @property {string | string[]=} chunkhash the value(s) of the chunk hash used for this asset
+ * @property {string | string[]=} modulehash the value(s) of the module hash used for this asset
+ * @property {string | string[]=} contenthash the value(s) of the content hash used for this asset
+ * @property {string=} sourceFilename when asset was created from a source file (potentially transformed), the original filename relative to compilation context
+ * @property {number=} size size in bytes, only set after asset has been emitted
+ * @property {boolean=} development true, when asset is only used for development and doesn't count towards user-facing assets
+ * @property {boolean=} hotModuleReplacement true, when asset ships data for updating an existing application (HMR)
+ * @property {boolean=} javascriptModule true, when asset is javascript and an ESM
+ * @property {boolean=} manifest true, when file is a manifest
+ * @property {Record=} related object of pointers to other assets, keyed by type of relation (only points from parent to child)
+ */
+
+/** @typedef {KnownAssetInfo & Record} AssetInfo */
+
+/** @typedef {{ path: string, info: AssetInfo }} InterpolatedPathAndAssetInfo */
+
+/**
+ * @typedef {object} Asset
+ * @property {string} name the filename of the asset
+ * @property {Source} source source of the asset
+ * @property {AssetInfo} info info about the asset
+ */
+
+/** @typedef {(length: number) => string} HashWithLengthFunction */
+
+/**
+ * @typedef {object} ModulePathData
+ * @property {string | number} id
+ * @property {string} hash
+ * @property {HashWithLengthFunction=} hashWithLength
+ */
+
+/** @typedef {(id: string | number) => string | number} PrepareIdFunction */
+
+/**
+ * @typedef {object} PathData
+ * @property {ChunkGraph=} chunkGraph
+ * @property {string=} hash
+ * @property {HashWithLengthFunction=} hashWithLength
+ * @property {(Chunk | ChunkPathData)=} chunk
+ * @property {(Module | ModulePathData)=} module
+ * @property {RuntimeSpec=} runtime
+ * @property {string=} filename
+ * @property {string=} basename
+ * @property {string=} query
+ * @property {string=} contentHashType
+ * @property {string=} contentHash
+ * @property {HashWithLengthFunction=} contentHashWithLength
+ * @property {boolean=} noChunkHash
+ * @property {string=} url
+ * @property {string=} local
+ * @property {PrepareIdFunction=} prepareId
+ */
+
+/** @typedef {"module" | "chunk" | "root-of-chunk" | "nested"} ExcludeModulesType */
+
+/**
+ * @typedef {object} KnownNormalizedStatsOptions
+ * @property {string} context
+ * @property {RequestShortener} requestShortener
+ * @property {string | false} chunksSort
+ * @property {string | false} modulesSort
+ * @property {string | false} chunkModulesSort
+ * @property {string | false} nestedModulesSort
+ * @property {string | false} assetsSort
+ * @property {boolean} ids
+ * @property {boolean} cachedAssets
+ * @property {boolean} groupAssetsByEmitStatus
+ * @property {boolean} groupAssetsByPath
+ * @property {boolean} groupAssetsByExtension
+ * @property {number} assetsSpace
+ * @property {((value: string, asset: StatsAsset) => boolean)[]} excludeAssets
+ * @property {((name: string, module: StatsModule, type: ExcludeModulesType) => boolean)[]} excludeModules
+ * @property {((warning: StatsError, textValue: string) => boolean)[]} warningsFilter
+ * @property {boolean} cachedModules
+ * @property {boolean} orphanModules
+ * @property {boolean} dependentModules
+ * @property {boolean} runtimeModules
+ * @property {boolean} groupModulesByCacheStatus
+ * @property {boolean} groupModulesByLayer
+ * @property {boolean} groupModulesByAttributes
+ * @property {boolean} groupModulesByPath
+ * @property {boolean} groupModulesByExtension
+ * @property {boolean} groupModulesByType
+ * @property {boolean | "auto"} entrypoints
+ * @property {boolean} chunkGroups
+ * @property {boolean} chunkGroupAuxiliary
+ * @property {boolean} chunkGroupChildren
+ * @property {number} chunkGroupMaxAssets
+ * @property {number} modulesSpace
+ * @property {number} chunkModulesSpace
+ * @property {number} nestedModulesSpace
+ * @property {false | "none" | "error" | "warn" | "info" | "log" | "verbose"} logging
+ * @property {((value: string) => boolean)[]} loggingDebug
+ * @property {boolean} loggingTrace
+ * @property {EXPECTED_ANY} _env
+ */
+
+/** @typedef {KnownNormalizedStatsOptions & Omit & Record} NormalizedStatsOptions */
+
+/**
+ * @typedef {object} KnownCreateStatsOptionsContext
+ * @property {boolean=} forToString
+ */
+
+/** @typedef {KnownCreateStatsOptionsContext & Record} CreateStatsOptionsContext */
+
+/** @typedef {{ module: Module, hash: string, runtime: RuntimeSpec, runtimes: RuntimeSpec[] }} CodeGenerationJob */
+
+/** @typedef {CodeGenerationJob[]} CodeGenerationJobs */
+
+/** @typedef {{ javascript: ModuleTemplate }} ModuleTemplates */
+
+/** @typedef {Set} NotCodeGeneratedModules */
+
+/** @type {AssetInfo} */
+const EMPTY_ASSET_INFO = Object.freeze({});
+
+const esmDependencyCategory = "esm";
+
+// TODO webpack 6: remove
+const deprecatedNormalModuleLoaderHook = util.deprecate(
+	/**
+	 * @param {Compilation} compilation compilation
+	 * @returns {NormalModuleCompilationHooks["loader"]} hooks
+	 */
+	(compilation) =>
+		require("./NormalModule").getCompilationHooks(compilation).loader,
+	"Compilation.hooks.normalModuleLoader was moved to NormalModule.getCompilationHooks(compilation).loader",
+	"DEP_WEBPACK_COMPILATION_NORMAL_MODULE_LOADER_HOOK"
+);
+
+// TODO webpack 6: remove
+/**
+ * @param {ModuleTemplates | undefined} moduleTemplates module templates
+ */
+const defineRemovedModuleTemplates = (moduleTemplates) => {
+	Object.defineProperties(moduleTemplates, {
+		asset: {
+			enumerable: false,
+			configurable: false,
+			get: () => {
+				throw new WebpackError(
+					"Compilation.moduleTemplates.asset has been removed"
+				);
+			}
+		},
+		webassembly: {
+			enumerable: false,
+			configurable: false,
+			get: () => {
+				throw new WebpackError(
+					"Compilation.moduleTemplates.webassembly has been removed"
+				);
+			}
+		}
+	});
+	moduleTemplates = undefined;
 };
 
-const byIdOrIdentifier = (a, b) => {
-	if (a.id < b.id) return -1;
-	if (a.id > b.id) return 1;
-	const identA = a.identifier();
-	const identB = b.identifier();
-	if (identA < identB) return -1;
-	if (identA > identB) return 1;
-	return 0;
-};
+const byId = compareSelect((c) => c.id, compareIds);
 
-const byIndexOrIdentifier = (a, b) => {
-	if (a.index < b.index) return -1;
-	if (a.index > b.index) return 1;
-	const identA = a.identifier();
-	const identB = b.identifier();
-	if (identA < identB) return -1;
-	if (identA > identB) return 1;
-	return 0;
-};
+const byNameOrHash = concatComparators(
+	compareSelect((c) => c.name, compareIds),
+	compareSelect((c) => c.fullHash, compareIds)
+);
 
-const byNameOrHash = (a, b) => {
-	if (a.name < b.name) return -1;
-	if (a.name > b.name) return 1;
-	if (a.fullHash < b.fullHash) return -1;
-	if (a.fullhash > b.fullHash) return 1;
-	return 0;
-};
+const byMessage = compareSelect(
+	(err) => `${err.message}`,
+	compareStringsNumeric
+);
 
-const iterationBlockVariable = (variables, fn) => {
-	for (
-		let indexVariable = 0;
-		indexVariable < variables.length;
-		indexVariable++
-	) {
-		const varDep = variables[indexVariable].dependencies;
-		for (let indexVDep = 0; indexVDep < varDep.length; indexVDep++) {
-			fn(varDep[indexVDep]);
-		}
-	}
-};
+const byModule = compareSelect(
+	(err) => (err.module && err.module.identifier()) || "",
+	compareStringsNumeric
+);
 
-const iterationOfArrayCallback = (arr, fn) => {
-	for (let index = 0; index < arr.length; index++) {
-		fn(arr[index]);
-	}
-};
+const byLocation = compareSelect((err) => err.loc, compareLocations);
 
-function addAllToSet(set, otherSet) {
-	for (const item of otherSet) {
-		set.add(item);
-	}
-}
+const compareErrors = concatComparators(byModule, byLocation, byMessage);
+
+/**
+ * @typedef {object} KnownUnsafeCacheData
+ * @property {FactoryMeta=} factoryMeta factory meta
+ * @property {ResolveOptions=} resolveOptions resolve options
+ * @property {ParserOptions=} parserOptions
+ * @property {GeneratorOptions=} generatorOptions
+ */
+
+/** @typedef {KnownUnsafeCacheData & Record} UnsafeCacheData */
+
+/**
+ * @typedef {Module & { restoreFromUnsafeCache?: (unsafeCacheData: UnsafeCacheData, moduleFactory: ModuleFactory, compilationParams: CompilationParams) => void }} ModuleWithRestoreFromUnsafeCache
+ */
+
+/** @typedef {(module: Module) => boolean} UnsafeCachePredicate */
+
+/** @type {WeakMap} */
+const unsafeCacheDependencies = new WeakMap();
+
+/** @type {WeakMap} */
+const unsafeCacheData = new WeakMap();
+
+/** @typedef {{ id: ModuleId, modules?: Map, blocks?: (ChunkId | null)[] }} References */
+/** @typedef {Map>} ModuleMemCaches */
+
+class Compilation {
+	/**
+	 * Creates an instance of Compilation.
+	 * @param {Compiler} compiler the compiler which created the compilation
+	 * @param {CompilationParams} params the compilation parameters
+	 */
+	constructor(compiler, params) {
+		this._backCompat = compiler._backCompat;
+
+		const getNormalModuleLoader = () => deprecatedNormalModuleLoaderHook(this);
+		/** @typedef {{ additionalAssets?: boolean | ((assets: CompilationAssets) => void) }} ProcessAssetsAdditionalOptions */
+		/** @type {AsyncSeriesHook<[CompilationAssets], ProcessAssetsAdditionalOptions>} */
+		const processAssetsHook = new AsyncSeriesHook(["assets"]);
+
+		/** @type {Set} */
+		let savedAssets = new Set();
+		/**
+		 * @param {CompilationAssets} assets assets
+		 * @returns {CompilationAssets} new assets
+		 */
+		const popNewAssets = (assets) => {
+			/** @type {undefined | CompilationAssets} */
+			let newAssets;
+			for (const file of Object.keys(assets)) {
+				if (savedAssets.has(file)) continue;
+				if (newAssets === undefined) {
+					newAssets = Object.create(null);
+				}
+				/** @type {CompilationAssets} */
+				(newAssets)[file] = assets[file];
+				savedAssets.add(file);
+			}
+			return /** @type {CompilationAssets} */ (newAssets);
+		};
+		processAssetsHook.intercept({
+			name: "Compilation",
+			call: () => {
+				savedAssets = new Set(Object.keys(this.assets));
+			},
+			register: (tap) => {
+				const { type, name } = tap;
+				const { fn, additionalAssets, ...remainingTap } = tap;
+				const additionalAssetsFn =
+					additionalAssets === true ? fn : additionalAssets;
+				/** @typedef {WeakSet} ProcessedAssets */
+
+				/** @type {ProcessedAssets | undefined} */
+				const processedAssets = additionalAssetsFn ? new WeakSet() : undefined;
+				/**
+				 * @param {CompilationAssets} assets to be processed by additionalAssetsFn
+				 * @returns {CompilationAssets} available assets
+				 */
+				const getAvailableAssets = (assets) => {
+					/** @type {CompilationAssets} */
+					const availableAssets = {};
+					for (const file of Object.keys(assets)) {
+						// https://github.com/webpack-contrib/compression-webpack-plugin/issues/390
+						if (this.assets[file]) {
+							availableAssets[file] = assets[file];
+						}
+					}
+					return availableAssets;
+				};
+				switch (type) {
+					case "sync":
+						if (additionalAssetsFn) {
+							this.hooks.processAdditionalAssets.tap(name, (assets) => {
+								if (
+									/** @type {ProcessedAssets} */
+									(processedAssets).has(this.assets)
+								) {
+									additionalAssetsFn(getAvailableAssets(assets));
+								}
+							});
+						}
+						return {
+							...remainingTap,
+							type: "async",
+							/**
+							 * @param {CompilationAssets} assets assets
+							 * @param {(err?: Error | null, result?: void) => void} callback callback
+							 * @returns {void}
+							 */
+							fn: (assets, callback) => {
+								try {
+									fn(assets);
+								} catch (err) {
+									return callback(/** @type {Error} */ (err));
+								}
+								if (processedAssets !== undefined) {
+									processedAssets.add(this.assets);
+								}
+								const newAssets = popNewAssets(assets);
+								if (newAssets !== undefined) {
+									this.hooks.processAdditionalAssets.callAsync(
+										newAssets,
+										callback
+									);
+									return;
+								}
+								callback();
+							}
+						};
+					case "async":
+						if (additionalAssetsFn) {
+							this.hooks.processAdditionalAssets.tapAsync(
+								name,
+								(assets, callback) => {
+									if (
+										/** @type {ProcessedAssets} */
+										(processedAssets).has(this.assets)
+									) {
+										return additionalAssetsFn(
+											getAvailableAssets(assets),
+											callback
+										);
+									}
+									callback();
+								}
+							);
+						}
+						return {
+							...remainingTap,
+							/**
+							 * @param {CompilationAssets} assets assets
+							 * @param {(err?: Error | null, result?: void) => void} callback callback
+							 * @returns {void}
+							 */
+							fn: (assets, callback) => {
+								fn(
+									assets,
+									/**
+									 * @param {Error} err err
+									 * @returns {void}
+									 */
+									(err) => {
+										if (err) return callback(err);
+										if (processedAssets !== undefined) {
+											processedAssets.add(this.assets);
+										}
+										const newAssets = popNewAssets(assets);
+										if (newAssets !== undefined) {
+											this.hooks.processAdditionalAssets.callAsync(
+												newAssets,
+												callback
+											);
+											return;
+										}
+										callback();
+									}
+								);
+							}
+						};
+					case "promise":
+						if (additionalAssetsFn) {
+							this.hooks.processAdditionalAssets.tapPromise(name, (assets) => {
+								if (
+									/** @type {ProcessedAssets} */
+									(processedAssets).has(this.assets)
+								) {
+									return additionalAssetsFn(getAvailableAssets(assets));
+								}
+								return Promise.resolve();
+							});
+						}
+						return {
+							...remainingTap,
+							/**
+							 * @param {CompilationAssets} assets assets
+							 * @returns {Promise} result
+							 */
+							fn: (assets) => {
+								const p = fn(assets);
+								if (!p || !p.then) return p;
+								return p.then(() => {
+									if (processedAssets !== undefined) {
+										processedAssets.add(this.assets);
+									}
+									const newAssets = popNewAssets(assets);
+									if (newAssets !== undefined) {
+										return this.hooks.processAdditionalAssets.promise(
+											newAssets
+										);
+									}
+								});
+							}
+						};
+				}
+			}
+		});
+
+		/** @type {SyncHook<[CompilationAssets]>} */
+		const afterProcessAssetsHook = new SyncHook(["assets"]);
 
-class Compilation extends Tapable {
-	constructor(compiler) {
-		super();
-		this.hooks = {
+		/**
+		 * @template T
+		 * @param {string} name name of the hook
+		 * @param {number} stage new stage
+		 * @param {() => AsArray} getArgs get old hook function args
+		 * @param {string=} code deprecation code (not deprecated when unset)
+		 * @returns {FakeHook, "tap" | "tapAsync" | "tapPromise" | "name">> | undefined} fake hook which redirects
+		 */
+		const createProcessAssetsHook = (name, stage, getArgs, code) => {
+			if (!this._backCompat && code) return;
+			/**
+			 * @param {string} reason reason
+			 * @returns {string} error message
+			 */
+			const errorMessage = (
+				reason
+			) => `Can't automatically convert plugin using Compilation.hooks.${name} to Compilation.hooks.processAssets because ${reason}.
+BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a single Compilation.hooks.processAssets hook.`;
+			/**
+			 * @param {string | (import("tapable").TapOptions & { name: string } & ProcessAssetsAdditionalOptions)} options hook options
+			 * @returns {import("tapable").TapOptions & { name: string } & ProcessAssetsAdditionalOptions} modified options
+			 */
+			const getOptions = (options) => {
+				if (typeof options === "string") options = { name: options };
+				if (options.stage) {
+					throw new Error(errorMessage("it's using the 'stage' option"));
+				}
+				return { ...options, stage };
+			};
+			return createFakeHook(
+				{
+					name,
+					/** @type {AsyncSeriesHook["intercept"]} */
+					intercept(_interceptor) {
+						throw new Error(errorMessage("it's using 'intercept'"));
+					},
+					/** @type {AsyncSeriesHook["tap"]} */
+					tap: (options, fn) => {
+						processAssetsHook.tap(getOptions(options), () => fn(...getArgs()));
+					},
+					/** @type {AsyncSeriesHook["tapAsync"]} */
+					tapAsync: (options, fn) => {
+						processAssetsHook.tapAsync(
+							getOptions(options),
+							(assets, callback) =>
+								/** @type {EXPECTED_ANY} */ (fn)(...getArgs(), callback)
+						);
+					},
+					/** @type {AsyncSeriesHook["tapPromise"]} */
+					tapPromise: (options, fn) => {
+						processAssetsHook.tapPromise(getOptions(options), () =>
+							fn(...getArgs())
+						);
+					}
+				},
+				`${name} is deprecated (use Compilation.hooks.processAssets instead and use one of Compilation.PROCESS_ASSETS_STAGE_* as stage option)`,
+				code
+			);
+		};
+		this.hooks = Object.freeze({
+			/** @type {SyncHook<[Module]>} */
 			buildModule: new SyncHook(["module"]),
+			/** @type {SyncHook<[Module]>} */
 			rebuildModule: new SyncHook(["module"]),
+			/** @type {SyncHook<[Module, WebpackError]>} */
 			failedModule: new SyncHook(["module", "error"]),
+			/** @type {SyncHook<[Module]>} */
 			succeedModule: new SyncHook(["module"]),
+			/** @type {SyncHook<[Module]>} */
+			stillValidModule: new SyncHook(["module"]),
+
+			/** @type {SyncHook<[Dependency, EntryOptions]>} */
+			addEntry: new SyncHook(["entry", "options"]),
+			/** @type {SyncHook<[Dependency, EntryOptions, Error]>} */
+			failedEntry: new SyncHook(["entry", "options", "error"]),
+			/** @type {SyncHook<[Dependency, EntryOptions, Module]>} */
+			succeedEntry: new SyncHook(["entry", "options", "module"]),
+
+			/** @type {SyncWaterfallHook<[ReferencedExports, Dependency, RuntimeSpec]>} */
+			dependencyReferencedExports: new SyncWaterfallHook([
+				"referencedExports",
+				"dependency",
+				"runtime"
+			]),
 
-			finishModules: new SyncHook(["modules"]),
-			finishRebuildingModule: new SyncHook(["module"]),
+			/** @type {SyncHook<[ExecuteModuleArgument, ExecuteModuleContext]>} */
+			executeModule: new SyncHook(["options", "context"]),
+			/** @type {AsyncParallelHook<[ExecuteModuleArgument, ExecuteModuleContext]>} */
+			prepareModuleExecution: new AsyncParallelHook(["options", "context"]),
 
+			/** @type {AsyncSeriesHook<[Iterable]>} */
+			finishModules: new AsyncSeriesHook(["modules"]),
+			/** @type {AsyncSeriesHook<[Module]>} */
+			finishRebuildingModule: new AsyncSeriesHook(["module"]),
+			/** @type {SyncHook<[]>} */
 			unseal: new SyncHook([]),
+			/** @type {SyncHook<[]>} */
 			seal: new SyncHook([]),
 
-			optimizeDependenciesBasic: new SyncBailHook(["modules"]),
+			/** @type {SyncHook<[]>} */
+			beforeChunks: new SyncHook([]),
+			/**
+			 * The `afterChunks` hook is called directly after the chunks and module graph have
+			 * been created and before the chunks and modules have been optimized. This hook is useful to
+			 * inspect, analyze, and/or modify the chunk graph.
+			 * @type {SyncHook<[Iterable]>}
+			 */
+			afterChunks: new SyncHook(["chunks"]),
+
+			/** @type {SyncBailHook<[Iterable], boolean | void>} */
 			optimizeDependencies: new SyncBailHook(["modules"]),
-			optimizeDependenciesAdvanced: new SyncBailHook(["modules"]),
+			/** @type {SyncHook<[Iterable]>} */
 			afterOptimizeDependencies: new SyncHook(["modules"]),
 
+			/** @type {SyncHook<[]>} */
 			optimize: new SyncHook([]),
-
-			optimizeModulesBasic: new SyncBailHook(["modules"]),
+			/** @type {SyncBailHook<[Iterable], boolean | void>} */
 			optimizeModules: new SyncBailHook(["modules"]),
-			optimizeModulesAdvanced: new SyncBailHook(["modules"]),
+			/** @type {SyncHook<[Iterable]>} */
 			afterOptimizeModules: new SyncHook(["modules"]),
 
-			optimizeChunksBasic: new SyncBailHook(["chunks", "chunkGroups"]),
+			/** @type {SyncBailHook<[Iterable, ChunkGroup[]], boolean | void>} */
 			optimizeChunks: new SyncBailHook(["chunks", "chunkGroups"]),
-			optimizeChunksAdvanced: new SyncBailHook(["chunks", "chunkGroups"]),
+			/** @type {SyncHook<[Iterable, ChunkGroup[]]>} */
 			afterOptimizeChunks: new SyncHook(["chunks", "chunkGroups"]),
 
+			/** @type {AsyncSeriesHook<[Iterable, Iterable]>} */
 			optimizeTree: new AsyncSeriesHook(["chunks", "modules"]),
+			/** @type {SyncHook<[Iterable, Iterable]>} */
 			afterOptimizeTree: new SyncHook(["chunks", "modules"]),
 
-			optimizeChunkModulesBasic: new SyncBailHook(["chunks", "modules"]),
-			optimizeChunkModules: new SyncBailHook(["chunks", "modules"]),
-			optimizeChunkModulesAdvanced: new SyncBailHook(["chunks", "modules"]),
+			/** @type {AsyncSeriesBailHook<[Iterable, Iterable], void>} */
+			optimizeChunkModules: new AsyncSeriesBailHook(["chunks", "modules"]),
+			/** @type {SyncHook<[Iterable, Iterable]>} */
 			afterOptimizeChunkModules: new SyncHook(["chunks", "modules"]),
+			/** @type {SyncBailHook<[], boolean | void>} */
 			shouldRecord: new SyncBailHook([]),
 
+			/** @type {SyncHook<[Chunk, RuntimeRequirements, RuntimeRequirementsContext]>} */
+			additionalChunkRuntimeRequirements: new SyncHook([
+				"chunk",
+				"runtimeRequirements",
+				"context"
+			]),
+			/** @type {HookMap>} */
+			runtimeRequirementInChunk: new HookMap(
+				() => new SyncBailHook(["chunk", "runtimeRequirements", "context"])
+			),
+			/** @type {SyncHook<[Module, RuntimeRequirements, RuntimeRequirementsContext]>} */
+			additionalModuleRuntimeRequirements: new SyncHook([
+				"module",
+				"runtimeRequirements",
+				"context"
+			]),
+			/** @type {HookMap>} */
+			runtimeRequirementInModule: new HookMap(
+				() => new SyncBailHook(["module", "runtimeRequirements", "context"])
+			),
+			/** @type {SyncHook<[Chunk, RuntimeRequirements, RuntimeRequirementsContext]>} */
+			additionalTreeRuntimeRequirements: new SyncHook([
+				"chunk",
+				"runtimeRequirements",
+				"context"
+			]),
+			/** @type {HookMap>} */
+			runtimeRequirementInTree: new HookMap(
+				() => new SyncBailHook(["chunk", "runtimeRequirements", "context"])
+			),
+
+			/** @type {SyncHook<[RuntimeModule, Chunk]>} */
+			runtimeModule: new SyncHook(["module", "chunk"]),
+
+			/** @type {SyncHook<[Iterable, Records]>} */
 			reviveModules: new SyncHook(["modules", "records"]),
-			optimizeModuleOrder: new SyncHook(["modules"]),
-			advancedOptimizeModuleOrder: new SyncHook(["modules"]),
+			/** @type {SyncHook<[Iterable]>} */
 			beforeModuleIds: new SyncHook(["modules"]),
+			/** @type {SyncHook<[Iterable]>} */
 			moduleIds: new SyncHook(["modules"]),
+			/** @type {SyncHook<[Iterable]>} */
 			optimizeModuleIds: new SyncHook(["modules"]),
+			/** @type {SyncHook<[Iterable]>} */
 			afterOptimizeModuleIds: new SyncHook(["modules"]),
 
+			/** @type {SyncHook<[Iterable, Records]>} */
 			reviveChunks: new SyncHook(["chunks", "records"]),
-			optimizeChunkOrder: new SyncHook(["chunks"]),
+			/** @type {SyncHook<[Iterable]>} */
 			beforeChunkIds: new SyncHook(["chunks"]),
+			/** @type {SyncHook<[Iterable]>} */
+			chunkIds: new SyncHook(["chunks"]),
+			/** @type {SyncHook<[Iterable]>} */
 			optimizeChunkIds: new SyncHook(["chunks"]),
+			/** @type {SyncHook<[Iterable]>} */
 			afterOptimizeChunkIds: new SyncHook(["chunks"]),
 
+			/** @type {SyncHook<[Iterable, Records]>} */
 			recordModules: new SyncHook(["modules", "records"]),
+			/** @type {SyncHook<[Iterable, Records]>} */
 			recordChunks: new SyncHook(["chunks", "records"]),
 
+			/** @type {SyncHook<[Iterable]>} */
+			optimizeCodeGeneration: new SyncHook(["modules"]),
+
+			/** @type {SyncHook<[]>} */
+			beforeModuleHash: new SyncHook([]),
+			/** @type {SyncHook<[]>} */
+			afterModuleHash: new SyncHook([]),
+
+			/** @type {SyncHook<[]>} */
+			beforeCodeGeneration: new SyncHook([]),
+			/** @type {SyncHook<[]>} */
+			afterCodeGeneration: new SyncHook([]),
+
+			/** @type {SyncHook<[]>} */
+			beforeRuntimeRequirements: new SyncHook([]),
+			/** @type {SyncHook<[]>} */
+			afterRuntimeRequirements: new SyncHook([]),
+
+			/** @type {SyncHook<[]>} */
 			beforeHash: new SyncHook([]),
+			/** @type {SyncHook<[Chunk]>} */
 			contentHash: new SyncHook(["chunk"]),
+			/** @type {SyncHook<[]>} */
 			afterHash: new SyncHook([]),
-
+			/** @type {SyncHook<[Records]>} */
 			recordHash: new SyncHook(["records"]),
-
+			/** @type {SyncHook<[Compilation, Records]>} */
 			record: new SyncHook(["compilation", "records"]),
 
+			/** @type {SyncHook<[]>} */
 			beforeModuleAssets: new SyncHook([]),
+			/** @type {SyncBailHook<[], boolean | void>} */
 			shouldGenerateChunkAssets: new SyncBailHook([]),
+			/** @type {SyncHook<[]>} */
 			beforeChunkAssets: new SyncHook([]),
-			additionalChunkAssets: new SyncHook(["chunks"]),
-
-			additionalAssets: new AsyncSeriesHook([]),
-			optimizeChunkAssets: new AsyncSeriesHook(["chunks"]),
-			afterOptimizeChunkAssets: new SyncHook(["chunks"]),
-			optimizeAssets: new AsyncSeriesHook(["assets"]),
-			afterOptimizeAssets: new SyncHook(["assets"]),
-
+			// TODO webpack 6 remove
+			/** @deprecated */
+			additionalChunkAssets:
+				/** @type {FakeHook, "tap" | "tapAsync" | "tapPromise" | "name">>} */
+				(
+					createProcessAssetsHook(
+						"additionalChunkAssets",
+						Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL,
+						() => [this.chunks],
+						"DEP_WEBPACK_COMPILATION_ADDITIONAL_CHUNK_ASSETS"
+					)
+				),
+
+			// TODO webpack 6 deprecate
+			/** @deprecated */
+			additionalAssets:
+				/** @type {FakeHook, "tap" | "tapAsync" | "tapPromise" | "name">>} */
+				(
+					createProcessAssetsHook(
+						"additionalAssets",
+						Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL,
+						() => []
+					)
+				),
+			// TODO webpack 6 remove
+			/** @deprecated */
+			optimizeChunkAssets:
+				/** @type {FakeHook, "tap" | "tapAsync" | "tapPromise" | "name">>} */
+				(
+					createProcessAssetsHook(
+						"optimizeChunkAssets",
+						Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE,
+						() => [this.chunks],
+						"DEP_WEBPACK_COMPILATION_OPTIMIZE_CHUNK_ASSETS"
+					)
+				),
+			// TODO webpack 6 remove
+			/** @deprecated */
+			afterOptimizeChunkAssets:
+				/** @type {FakeHook, "tap" | "tapAsync" | "tapPromise" | "name">>} */
+				(
+					createProcessAssetsHook(
+						"afterOptimizeChunkAssets",
+						Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE + 1,
+						() => [this.chunks],
+						"DEP_WEBPACK_COMPILATION_AFTER_OPTIMIZE_CHUNK_ASSETS"
+					)
+				),
+			// TODO webpack 6 deprecate
+			/** @deprecated */
+			optimizeAssets: processAssetsHook,
+			// TODO webpack 6 deprecate
+			/** @deprecated */
+			afterOptimizeAssets: afterProcessAssetsHook,
+
+			processAssets: processAssetsHook,
+			afterProcessAssets: afterProcessAssetsHook,
+			/** @type {AsyncSeriesHook<[CompilationAssets]>} */
+			processAdditionalAssets: new AsyncSeriesHook(["assets"]),
+
+			/** @type {SyncBailHook<[], boolean | void>} */
 			needAdditionalSeal: new SyncBailHook([]),
+			/** @type {AsyncSeriesHook<[]>} */
 			afterSeal: new AsyncSeriesHook([]),
 
-			chunkHash: new SyncHook(["chunk", "chunkHash"]),
+			/** @type {SyncWaterfallHook<[RenderManifestEntry[], RenderManifestOptions]>} */
+			renderManifest: new SyncWaterfallHook(["result", "options"]),
+
+			/** @type {SyncHook<[Hash]>} */
+			fullHash: new SyncHook(["hash"]),
+			/** @type {SyncHook<[Chunk, Hash, ChunkHashContext]>} */
+			chunkHash: new SyncHook(["chunk", "chunkHash", "ChunkHashContext"]),
+
+			/** @type {SyncHook<[Module, string]>} */
 			moduleAsset: new SyncHook(["module", "filename"]),
+			/** @type {SyncHook<[Chunk, string]>} */
 			chunkAsset: new SyncHook(["chunk", "filename"]),
 
-			assetPath: new SyncWaterfallHook(["filename", "data"]), // TODO MainTemplate
+			/** @type {SyncWaterfallHook<[string, PathData, AssetInfo | undefined]>} */
+			assetPath: new SyncWaterfallHook(["path", "options", "assetInfo"]),
 
+			/** @type {SyncBailHook<[], boolean | void>} */
 			needAdditionalPass: new SyncBailHook([]),
+
+			/** @type {SyncHook<[Compiler, string, number]>} */
 			childCompiler: new SyncHook([
 				"childCompiler",
 				"compilerName",
 				"compilerIndex"
 			]),
 
-			// TODO the following hooks are weirdly located here
-			// TODO move them for webpack 5
-			normalModuleLoader: new SyncHook(["loaderContext", "module"]),
-
-			optimizeExtractedChunksBasic: new SyncBailHook(["chunks"]),
-			optimizeExtractedChunks: new SyncBailHook(["chunks"]),
-			optimizeExtractedChunksAdvanced: new SyncBailHook(["chunks"]),
-			afterOptimizeExtractedChunks: new SyncHook(["chunks"])
-		};
-		this._pluginCompat.tap("Compilation", options => {
-			switch (options.name) {
-				case "optimize-tree":
-				case "additional-assets":
-				case "optimize-chunk-assets":
-				case "optimize-assets":
-				case "after-seal":
-					options.async = true;
-					break;
+			/** @type {SyncBailHook<[string, LogEntry], boolean | void>} */
+			log: new SyncBailHook(["origin", "logEntry"]),
+
+			/** @type {SyncWaterfallHook<[Error[]]>} */
+			processWarnings: new SyncWaterfallHook(["warnings"]),
+			/** @type {SyncWaterfallHook<[Error[]]>} */
+			processErrors: new SyncWaterfallHook(["errors"]),
+
+			/** @type {HookMap, CreateStatsOptionsContext]>>} */
+			statsPreset: new HookMap(() => new SyncHook(["options", "context"])),
+			/** @type {SyncHook<[Partial, CreateStatsOptionsContext]>} */
+			statsNormalize: new SyncHook(["options", "context"]),
+			/** @type {SyncHook<[StatsFactory, NormalizedStatsOptions]>} */
+			statsFactory: new SyncHook(["statsFactory", "options"]),
+			/** @type {SyncHook<[StatsPrinter, NormalizedStatsOptions]>} */
+			statsPrinter: new SyncHook(["statsPrinter", "options"]),
+
+			/**
+			 * @deprecated
+			 * @returns {SyncHook<[AnyLoaderContext, NormalModule]>} normal module loader hook
+			 */
+			get normalModuleLoader() {
+				return getNormalModuleLoader();
 			}
 		});
+		/** @type {string=} */
 		this.name = undefined;
+		/** @type {number | undefined} */
+		this.startTime = undefined;
+		/** @type {number | undefined} */
+		this.endTime = undefined;
+		/** @type {Compiler} */
 		this.compiler = compiler;
 		this.resolverFactory = compiler.resolverFactory;
-		this.inputFileSystem = compiler.inputFileSystem;
+		/** @type {InputFileSystem} */
+		this.inputFileSystem =
+			/** @type {InputFileSystem} */
+			(compiler.inputFileSystem);
+		this.fileSystemInfo = new FileSystemInfo(this.inputFileSystem, {
+			unmanagedPaths: compiler.unmanagedPaths,
+			managedPaths: compiler.managedPaths,
+			immutablePaths: compiler.immutablePaths,
+			logger: this.getLogger("webpack.FileSystemInfo"),
+			hashFunction: compiler.options.output.hashFunction
+		});
+		if (compiler.fileTimestamps) {
+			this.fileSystemInfo.addFileTimestamps(compiler.fileTimestamps, true);
+		}
+		if (compiler.contextTimestamps) {
+			this.fileSystemInfo.addContextTimestamps(
+				compiler.contextTimestamps,
+				true
+			);
+		}
+		/** @type {ValueCacheVersions} */
+		this.valueCacheVersions = new Map();
 		this.requestShortener = compiler.requestShortener;
-
-		const options = (this.options = compiler.options);
-		this.outputOptions = options && options.output;
-		this.bail = options && options.bail;
-		this.profile = options && options.profile;
-		this.performance = options && options.performance;
-
-		this.mainTemplate = new MainTemplate(this.outputOptions);
-		this.chunkTemplate = new ChunkTemplate(this.outputOptions);
-		this.hotUpdateChunkTemplate = new HotUpdateChunkTemplate(
-			this.outputOptions
-		);
+		this.compilerPath = compiler.compilerPath;
+
+		this.logger = this.getLogger("webpack.Compilation");
+
+		const options = /** @type {WebpackOptions} */ (compiler.options);
+		this.options = options;
+		this.outputOptions =
+			/** @type {OutputOptionsWithDefaults} */
+			(options && options.output);
+		/** @type {boolean} */
+		this.bail = (options && options.bail) || false;
+		/** @type {boolean} */
+		this.profile = (options && options.profile) || false;
+
+		this.params = params;
+		this.mainTemplate = new MainTemplate(this.outputOptions, this);
+		this.chunkTemplate = new ChunkTemplate(this.outputOptions, this);
 		this.runtimeTemplate = new RuntimeTemplate(
+			this,
 			this.outputOptions,
 			this.requestShortener
 		);
+		/** @type {ModuleTemplates} */
 		this.moduleTemplates = {
-			javascript: new ModuleTemplate(this.runtimeTemplate, "javascript"),
-			webassembly: new ModuleTemplate(this.runtimeTemplate, "webassembly")
+			javascript: new ModuleTemplate(this.runtimeTemplate, this)
 		};
+		defineRemovedModuleTemplates(this.moduleTemplates);
+
+		// We need to think how implement types here
+		/** @type {ModuleMemCaches | undefined} */
+		this.moduleMemCaches = undefined;
+		/** @type {ModuleMemCaches | undefined} */
+		this.moduleMemCaches2 = undefined;
+		/** @type {ModuleGraph} */
+		this.moduleGraph = new ModuleGraph();
+		/** @type {ChunkGraph} */
+		this.chunkGraph = new ChunkGraph(
+			this.moduleGraph,
+			this.outputOptions.hashFunction
+		);
+		/** @type {CodeGenerationResults | undefined} */
+		this.codeGenerationResults = undefined;
+
+		/** @type {AsyncQueue} */
+		this.processDependenciesQueue = new AsyncQueue({
+			name: "processDependencies",
+			parallelism: options.parallelism || 100,
+			processor: this._processModuleDependencies.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.addModuleQueue = new AsyncQueue({
+			name: "addModule",
+			parent: this.processDependenciesQueue,
+			getKey: (module) => module.identifier(),
+			processor: this._addModule.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.factorizeQueue = new AsyncQueue({
+			name: "factorize",
+			parent: this.addModuleQueue,
+			processor: this._factorizeModule.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.buildQueue = new AsyncQueue({
+			name: "build",
+			parent: this.factorizeQueue,
+			processor: this._buildModule.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.rebuildQueue = new AsyncQueue({
+			name: "rebuild",
+			parallelism: options.parallelism || 100,
+			processor: this._rebuildModule.bind(this)
+		});
 
-		this.semaphore = new Semaphore(options.parallelism || 100);
-
-		this.entries = [];
-		this._preparedEntrypoints = [];
+		/**
+		 * Modules in value are building during the build of Module in key.
+		 * Means value blocking key from finishing.
+		 * Needed to detect build cycles.
+		 * @type {WeakMap>}
+		 */
+		this.creatingModuleDuringBuild = new WeakMap();
+
+		/** @type {Map, EntryData>} */
+		this.entries = new Map();
+		/** @type {EntryData} */
+		this.globalEntry = {
+			dependencies: [],
+			includeDependencies: [],
+			options: {
+				name: undefined
+			}
+		};
+		/** @type {Map} */
 		this.entrypoints = new Map();
-		this.chunks = [];
+		/** @type {Entrypoint[]} */
+		this.asyncEntrypoints = [];
+		/** @type {Chunks} */
+		this.chunks = new Set();
+		/** @type {ChunkGroup[]} */
 		this.chunkGroups = [];
+		/** @type {Map} */
 		this.namedChunkGroups = new Map();
+		/** @type {Map} */
 		this.namedChunks = new Map();
-		this.modules = [];
+		/** @type {Set} */
+		this.modules = new Set();
+		if (this._backCompat) {
+			arrayToSetDeprecation(this.chunks, "Compilation.chunks");
+			arrayToSetDeprecation(this.modules, "Compilation.modules");
+		}
+		/**
+		 * @private
+		 * @type {Map}
+		 */
 		this._modules = new Map();
-		this.cache = null;
+		/** @type {Records | null} */
 		this.records = null;
-		this.nextFreeModuleIndex = undefined;
-		this.nextFreeModuleIndex2 = undefined;
+		/** @type {string[]} */
 		this.additionalChunkAssets = [];
+		/** @type {CompilationAssets} */
 		this.assets = {};
+		/** @type {Map} */
+		this.assetsInfo = new Map();
+		/** @type {Map>>} */
+		this._assetsRelatedIn = new Map();
+		/** @type {Error[]} */
 		this.errors = [];
+		/** @type {Error[]} */
 		this.warnings = [];
+		/** @type {Compilation[]} */
 		this.children = [];
+		/** @type {Map} */
+		this.logging = new Map();
+		/** @type {Map} */
 		this.dependencyFactories = new Map();
-		this.dependencyTemplates = new Map();
-		this.dependencyTemplates.set("hash", "");
+		/** @type {DependencyTemplates} */
+		this.dependencyTemplates = new DependencyTemplates(
+			this.outputOptions.hashFunction
+		);
+		/** @type {Record} */
 		this.childrenCounters = {};
+		/** @type {Set | null} */
 		this.usedChunkIds = null;
+		/** @type {Set | null} */
 		this.usedModuleIds = null;
-		this.fileTimestamps = undefined;
-		this.contextTimestamps = undefined;
-		this.compilationDependencies = undefined;
+		/** @type {boolean} */
+		this.needAdditionalPass = false;
+		/** @type {Set} */
+		this._restoredUnsafeCacheModuleEntries = new Set();
+		/** @type {Map} */
+		this._restoredUnsafeCacheEntries = new Map();
+		/** @type {WeakSet} */
+		this.builtModules = new WeakSet();
+		/** @type {WeakSet} */
+		this.codeGeneratedModules = new WeakSet();
+		/** @type {WeakSet} */
+		this.buildTimeExecutedModules = new WeakSet();
+		/** @type {Set} */
+		this.emittedAssets = new Set();
+		/** @type {Set} */
+		this.comparedForEmitAssets = new Set();
+		/** @type {FileSystemDependencies} */
+		this.fileDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		this.contextDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		this.missingDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		this.buildDependencies = new LazySet();
+		// TODO webpack 6 remove
+		/**
+		 * @deprecated
+		 * @type {{ add: (item: string) => FileSystemDependencies }}
+		 */
+		this.compilationDependencies = {
+			add: util.deprecate(
+				/**
+				 * @param {string} item item
+				 * @returns {FileSystemDependencies} file dependencies
+				 */
+				(item) => this.fileDependencies.add(item),
+				"Compilation.compilationDependencies is deprecated (used Compilation.fileDependencies instead)",
+				"DEP_WEBPACK_COMPILATION_COMPILATION_DEPENDENCIES"
+			)
+		};
 
-		this._buildingModules = new Map();
-		this._rebuildingModules = new Map();
+		this._modulesCache = this.getCache("Compilation/modules");
+		this._assetsCache = this.getCache("Compilation/assets");
+		this._codeGenerationCache = this.getCache("Compilation/codeGeneration");
+
+		const unsafeCache = options.module.unsafeCache;
+		/** @type {boolean} */
+		this._unsafeCache = Boolean(unsafeCache);
+		/** @type {UnsafeCachePredicate} */
+		this._unsafeCachePredicate =
+			typeof unsafeCache === "function" ? unsafeCache : () => true;
 	}
 
 	getStats() {
 		return new Stats(this);
 	}
 
-	addModule(module, cacheGroup) {
-		const identifier = module.identifier();
-		const alreadyAddedModule = this._modules.get(identifier);
-		if (alreadyAddedModule) {
-			return {
-				module: alreadyAddedModule,
-				issuer: false,
-				build: false,
-				dependencies: false
+	/**
+	 * @param {string | boolean | StatsOptions | undefined} optionsOrPreset stats option value
+	 * @param {CreateStatsOptionsContext=} context context
+	 * @returns {NormalizedStatsOptions} normalized options
+	 */
+	createStatsOptions(optionsOrPreset, context = {}) {
+		if (typeof optionsOrPreset === "boolean") {
+			optionsOrPreset = {
+				preset: optionsOrPreset === false ? "none" : "normal"
 			};
+		} else if (typeof optionsOrPreset === "string") {
+			optionsOrPreset = { preset: optionsOrPreset };
 		}
-		const cacheName = (cacheGroup || "m") + identifier;
-		if (this.cache && this.cache[cacheName]) {
-			const cacheModule = this.cache[cacheName];
-
-			if (typeof cacheModule.updateCacheModule === "function") {
-				cacheModule.updateCacheModule(module);
+		if (typeof optionsOrPreset === "object" && optionsOrPreset !== null) {
+			// We use this method of shallow cloning this object to include
+			// properties in the prototype chain
+			/** @type {Partial} */
+			const options = {};
+			for (const key in optionsOrPreset) {
+				options[key] = optionsOrPreset[/** @type {keyof StatsOptions} */ (key)];
 			}
-
-			let rebuild = true;
-			if (this.fileTimestamps && this.contextTimestamps) {
-				rebuild = cacheModule.needRebuild(
-					this.fileTimestamps,
-					this.contextTimestamps
-				);
+			if (options.preset !== undefined) {
+				this.hooks.statsPreset.for(options.preset).call(options, context);
 			}
+			this.hooks.statsNormalize.call(options, context);
+			return /** @type {NormalizedStatsOptions} */ (options);
+		}
+		/** @type {Partial} */
+		const options = {};
+		this.hooks.statsNormalize.call(options, context);
+		return /** @type {NormalizedStatsOptions} */ (options);
+	}
 
-			if (!rebuild) {
-				cacheModule.disconnect();
-				this._modules.set(identifier, cacheModule);
-				this.modules.push(cacheModule);
-				for (const err of cacheModule.errors) {
-					this.errors.push(err);
+	/**
+	 * @param {NormalizedStatsOptions} options options
+	 * @returns {StatsFactory} the stats factory
+	 */
+	createStatsFactory(options) {
+		const statsFactory = new StatsFactory();
+		this.hooks.statsFactory.call(statsFactory, options);
+		return statsFactory;
+	}
+
+	/**
+	 * @param {NormalizedStatsOptions} options options
+	 * @returns {StatsPrinter} the stats printer
+	 */
+	createStatsPrinter(options) {
+		const statsPrinter = new StatsPrinter();
+		this.hooks.statsPrinter.call(statsPrinter, options);
+		return statsPrinter;
+	}
+
+	/**
+	 * @param {string} name cache name
+	 * @returns {CacheFacade} the cache facade instance
+	 */
+	getCache(name) {
+		return this.compiler.getCache(name);
+	}
+
+	/**
+	 * @param {string | (() => string)} name name of the logger, or function called once to get the logger name
+	 * @returns {Logger} a logger with that name
+	 */
+	getLogger(name) {
+		if (!name) {
+			throw new TypeError("Compilation.getLogger(name) called without a name");
+		}
+		/** @type {LogEntry[] | undefined} */
+		let logEntries;
+		return new Logger(
+			(type, args) => {
+				if (typeof name === "function") {
+					name = name();
+					if (!name) {
+						throw new TypeError(
+							"Compilation.getLogger(name) called with a function not returning a name"
+						);
+					}
 				}
-				for (const err of cacheModule.warnings) {
-					this.warnings.push(err);
+				/** @type {LogEntry["trace"]} */
+				let trace;
+				switch (type) {
+					case LogType.warn:
+					case LogType.error:
+					case LogType.trace:
+						trace = ErrorHelpers.cutOffLoaderExecution(
+							/** @type {string} */ (new Error("Trace").stack)
+						)
+							.split("\n")
+							.slice(3);
+						break;
 				}
-				return {
-					module: cacheModule,
-					issuer: true,
-					build: false,
-					dependencies: true
+				/** @type {LogEntry} */
+				const logEntry = {
+					time: Date.now(),
+					type,
+					args,
+					trace
 				};
+				/* eslint-disable no-console */
+				if (this.hooks.log.call(name, logEntry) === undefined) {
+					if (
+						logEntry.type === LogType.profileEnd &&
+						typeof console.profileEnd === "function"
+					) {
+						console.profileEnd(
+							`[${name}] ${/** @type {NonNullable} */ (logEntry.args)[0]}`
+						);
+					}
+					if (logEntries === undefined) {
+						logEntries = this.logging.get(name);
+						if (logEntries === undefined) {
+							logEntries = [];
+							this.logging.set(name, logEntries);
+						}
+					}
+					logEntries.push(logEntry);
+					if (
+						logEntry.type === LogType.profile &&
+						typeof console.profile === "function"
+					) {
+						console.profile(
+							`[${name}] ${
+								/** @type {NonNullable} */
+								(logEntry.args)[0]
+							}`
+						);
+					}
+					/* eslint-enable no-console */
+				}
+			},
+			(childName) => {
+				if (typeof name === "function") {
+					if (typeof childName === "function") {
+						return this.getLogger(() => {
+							if (typeof name === "function") {
+								name = name();
+								if (!name) {
+									throw new TypeError(
+										"Compilation.getLogger(name) called with a function not returning a name"
+									);
+								}
+							}
+							if (typeof childName === "function") {
+								childName = childName();
+								if (!childName) {
+									throw new TypeError(
+										"Logger.getChildLogger(name) called with a function not returning a name"
+									);
+								}
+							}
+							return `${name}/${childName}`;
+						});
+					}
+					return this.getLogger(() => {
+						if (typeof name === "function") {
+							name = name();
+							if (!name) {
+								throw new TypeError(
+									"Compilation.getLogger(name) called with a function not returning a name"
+								);
+							}
+						}
+						return `${name}/${childName}`;
+					});
+				}
+				if (typeof childName === "function") {
+					return this.getLogger(() => {
+						if (typeof childName === "function") {
+							childName = childName();
+							if (!childName) {
+								throw new TypeError(
+									"Logger.getChildLogger(name) called with a function not returning a name"
+								);
+							}
+						}
+						return `${name}/${childName}`;
+					});
+				}
+				return this.getLogger(`${name}/${childName}`);
 			}
-			cacheModule.unbuild();
-			module = cacheModule;
+		);
+	}
+
+	/**
+	 * @param {Module} module module to be added that was created
+	 * @param {ModuleCallback} callback returns the module in the compilation,
+	 * it could be the passed one (if new), or an already existing in the compilation
+	 * @returns {void}
+	 */
+	addModule(module, callback) {
+		this.addModuleQueue.add(module, callback);
+	}
+
+	/**
+	 * @param {Module} module module to be added that was created
+	 * @param {ModuleCallback} callback returns the module in the compilation,
+	 * it could be the passed one (if new), or an already existing in the compilation
+	 * @returns {void}
+	 */
+	_addModule(module, callback) {
+		const identifier = module.identifier();
+		const alreadyAddedModule = this._modules.get(identifier);
+		if (alreadyAddedModule) {
+			return callback(null, alreadyAddedModule);
 		}
-		this._modules.set(identifier, module);
-		if (this.cache) {
-			this.cache[cacheName] = module;
+
+		const currentProfile = this.profile
+			? this.moduleGraph.getProfile(module)
+			: undefined;
+		if (currentProfile !== undefined) {
+			currentProfile.markRestoringStart();
 		}
-		this.modules.push(module);
-		return {
-			module: module,
-			issuer: true,
-			build: true,
-			dependencies: true
-		};
+
+		this._modulesCache.get(identifier, null, (err, cacheModule) => {
+			if (err) return callback(new ModuleRestoreError(module, err));
+
+			if (currentProfile !== undefined) {
+				currentProfile.markRestoringEnd();
+				currentProfile.markIntegrationStart();
+			}
+
+			if (cacheModule) {
+				cacheModule.updateCacheModule(module);
+
+				module = cacheModule;
+			}
+			this._modules.set(identifier, module);
+			this.modules.add(module);
+			if (this._backCompat) {
+				ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
+			}
+			if (currentProfile !== undefined) {
+				currentProfile.markIntegrationEnd();
+			}
+			callback(null, module);
+		});
 	}
 
+	/**
+	 * Fetches a module from a compilation by its identifier
+	 * @param {Module} module the module provided
+	 * @returns {Module} the module requested
+	 */
 	getModule(module) {
 		const identifier = module.identifier();
-		return this._modules.get(identifier);
+		return /** @type {Module} */ (this._modules.get(identifier));
 	}
 
+	/**
+	 * Attempts to search for a module by its identifier
+	 * @param {string} identifier identifier (usually path) for module
+	 * @returns {Module | undefined} attempt to search for module and return it, else undefined
+	 */
 	findModule(identifier) {
 		return this._modules.get(identifier);
 	}
 
-	waitForBuildingFinished(module, callback) {
-		let callbackList = this._buildingModules.get(module);
-		if (callbackList) {
-			callbackList.push(() => callback());
-		} else {
-			process.nextTick(callback);
-		}
+	/**
+	 * Schedules a build of the module object
+	 * @param {Module} module module to be built
+	 * @param {ModuleCallback} callback the callback
+	 * @returns {void}
+	 */
+	buildModule(module, callback) {
+		this.buildQueue.add(module, callback);
 	}
 
-	buildModule(module, optional, origin, dependencies, thisCallback) {
-		let callbackList = this._buildingModules.get(module);
-		if (callbackList) {
-			callbackList.push(thisCallback);
-			return;
+	/**
+	 * Builds the module object
+	 * @param {Module} module module to be built
+	 * @param {ModuleCallback} callback the callback
+	 * @returns {void}
+	 */
+	_buildModule(module, callback) {
+		const currentProfile = this.profile
+			? this.moduleGraph.getProfile(module)
+			: undefined;
+		if (currentProfile !== undefined) {
+			currentProfile.markBuildingStart();
 		}
-		this._buildingModules.set(module, (callbackList = [thisCallback]));
 
-		const callback = err => {
-			this._buildingModules.delete(module);
-			for (const cb of callbackList) {
-				cb(err);
-			}
-		};
+		module.needBuild(
+			{
+				compilation: this,
+				fileSystemInfo: this.fileSystemInfo,
+				valueCacheVersions: this.valueCacheVersions
+			},
+			(err, needBuild) => {
+				if (err) return callback(err);
 
-		this.hooks.buildModule.call(module);
-		module.build(
-			this.options,
-			this,
-			this.resolverFactory.get("normal", module.resolveOptions),
-			this.inputFileSystem,
-			error => {
-				const errors = module.errors;
-				for (let indexError = 0; indexError < errors.length; indexError++) {
-					const err = errors[indexError];
-					err.origin = origin;
-					err.dependencies = dependencies;
-					if (optional) {
-						this.warnings.push(err);
-					} else {
-						this.errors.push(err);
+				if (!needBuild) {
+					if (currentProfile !== undefined) {
+						currentProfile.markBuildingEnd();
 					}
+					this.hooks.stillValidModule.call(module);
+					return callback();
 				}
 
-				const warnings = module.warnings;
-				for (
-					let indexWarning = 0;
-					indexWarning < warnings.length;
-					indexWarning++
-				) {
-					const war = warnings[indexWarning];
-					war.origin = origin;
-					war.dependencies = dependencies;
-					this.warnings.push(war);
-				}
-				module.dependencies.sort(Dependency.compare);
-				if (error) {
-					this.hooks.failedModule.call(module, error);
-					return callback(error);
-				}
-				this.hooks.succeedModule.call(module);
-				return callback();
+				this.hooks.buildModule.call(module);
+				this.builtModules.add(module);
+				module.build(
+					this.options,
+					this,
+					this.resolverFactory.get("normal", module.resolveOptions),
+					/** @type {InputFileSystem} */
+					(this.inputFileSystem),
+					(err) => {
+						if (currentProfile !== undefined) {
+							currentProfile.markBuildingEnd();
+						}
+						if (err) {
+							this.hooks.failedModule.call(module, err);
+							return callback(err);
+						}
+						if (currentProfile !== undefined) {
+							currentProfile.markStoringStart();
+						}
+						this._modulesCache.store(
+							module.identifier(),
+							null,
+							module,
+							(err) => {
+								if (currentProfile !== undefined) {
+									currentProfile.markStoringEnd();
+								}
+								if (err) {
+									this.hooks.failedModule.call(
+										module,
+										/** @type {WebpackError} */ (err)
+									);
+									return callback(new ModuleStoreError(module, err));
+								}
+								this.hooks.succeedModule.call(module);
+								return callback();
+							}
+						);
+					}
+				);
 			}
 		);
 	}
 
+	/**
+	 * @param {Module} module to be processed for deps
+	 * @param {ModuleCallback} callback callback to be triggered
+	 * @returns {void}
+	 */
 	processModuleDependencies(module, callback) {
-		const dependencies = new Map();
-
-		const addDependency = dep => {
-			const resourceIdent = dep.getResourceIdentifier();
-			if (resourceIdent) {
-				const factory = this.dependencyFactories.get(dep.constructor);
-				if (factory === undefined) {
-					throw new Error(
-						`No module factory available for dependency type: ${
-							dep.constructor.name
-						}`
-					);
-				}
-				let innerMap = dependencies.get(factory);
-				if (innerMap === undefined) {
-					dependencies.set(factory, (innerMap = new Map()));
-				}
-				let list = innerMap.get(resourceIdent);
-				if (list === undefined) innerMap.set(resourceIdent, (list = []));
-				list.push(dep);
-			}
-		};
+		this.processDependenciesQueue.add(module, callback);
+	}
 
-		const addDependenciesBlock = block => {
+	/**
+	 * @param {Module} module to be processed for deps
+	 * @returns {void}
+	 */
+	processModuleDependenciesNonRecursive(module) {
+		/**
+		 * @param {DependenciesBlock} block block
+		 */
+		const processDependenciesBlock = (block) => {
 			if (block.dependencies) {
-				iterationOfArrayCallback(block.dependencies, addDependency);
+				let i = 0;
+				for (const dep of block.dependencies) {
+					this.moduleGraph.setParents(dep, block, module, i++);
+				}
 			}
 			if (block.blocks) {
-				iterationOfArrayCallback(block.blocks, addDependenciesBlock);
-			}
-			if (block.variables) {
-				iterationBlockVariable(block.variables, addDependency);
+				for (const b of block.blocks) processDependenciesBlock(b);
 			}
 		};
 
-		try {
-			addDependenciesBlock(module);
-		} catch (e) {
-			callback(e);
-		}
+		processDependenciesBlock(module);
+	}
 
+	/**
+	 * @param {Module} module to be processed for deps
+	 * @param {ModuleCallback} callback callback to be triggered
+	 * @returns {void}
+	 */
+	_processModuleDependencies(module, callback) {
+		/** @type {{ factory: ModuleFactory, dependencies: Dependency[], context: string | undefined, originModule: Module | null }[]} */
 		const sortedDependencies = [];
+		/** @type {boolean} */
+		const hasLowPriorityDependencies = module.dependencies.some(
+			Dependency.isLowPriorityDependency
+		);
+
+		/** @type {DependenciesBlock} */
+		let currentBlock;
+
+		/** @type {Map>} */
+		let dependencies;
+		/** @type {DependencyConstructor} */
+		let factoryCacheKey;
+		/** @type {ModuleFactory} */
+		let factoryCacheKey2;
+		/** @typedef {Map} FactoryCacheValue */
+		/** @type {FactoryCacheValue | undefined} */
+		let factoryCacheValue;
+		/** @type {string} */
+		let listCacheKey1;
+		/** @type {string} */
+		let listCacheKey2;
+		/** @type {Dependency[]} */
+		let listCacheValue;
+
+		let inProgressSorting = 1;
+		let inProgressTransitive = 1;
+
+		/**
+		 * @param {WebpackError=} err error
+		 * @returns {void}
+		 */
+		const onDependenciesSorted = (err) => {
+			if (err) return callback(err);
+
+			// early exit without changing parallelism back and forth
+			if (sortedDependencies.length === 0 && inProgressTransitive === 1) {
+				return callback();
+			}
 
-		for (const pair1 of dependencies) {
-			for (const pair2 of pair1[1]) {
-				sortedDependencies.push({
-					factory: pair1[0],
-					dependencies: pair2[1]
+			// This is nested so we need to allow one additional task
+			this.processDependenciesQueue.increaseParallelism();
+
+			for (const item of sortedDependencies) {
+				inProgressTransitive++;
+				// eslint-disable-next-line no-loop-func
+				this.handleModuleCreation(item, (err) => {
+					// In V8, the Error objects keep a reference to the functions on the stack. These warnings &
+					// errors are created inside closures that keep a reference to the Compilation, so errors are
+					// leaking the Compilation object.
+					if (err && this.bail) {
+						if (inProgressTransitive <= 0) return;
+						inProgressTransitive = -1;
+						// eslint-disable-next-line no-self-assign
+						err.stack = err.stack;
+						onTransitiveTasksFinished(err);
+						return;
+					}
+					if (--inProgressTransitive === 0) onTransitiveTasksFinished();
 				});
 			}
+			if (--inProgressTransitive === 0) onTransitiveTasksFinished();
+		};
+
+		/**
+		 * @param {WebpackError=} err error
+		 * @returns {void}
+		 */
+		const onTransitiveTasksFinished = (err) => {
+			if (err) return callback(err);
+			this.processDependenciesQueue.decreaseParallelism();
+
+			return callback();
+		};
+
+		/**
+		 * @param {Dependency} dep dependency
+		 * @param {number} index index in block
+		 * @returns {void}
+		 */
+		const processDependency = (dep, index) => {
+			this.moduleGraph.setParents(dep, currentBlock, module, index);
+			if (this._unsafeCache) {
+				try {
+					const unsafeCachedModule = unsafeCacheDependencies.get(dep);
+					if (unsafeCachedModule === null) return;
+					if (unsafeCachedModule !== undefined) {
+						if (
+							this._restoredUnsafeCacheModuleEntries.has(unsafeCachedModule)
+						) {
+							this._handleExistingModuleFromUnsafeCache(
+								module,
+								dep,
+								unsafeCachedModule
+							);
+							return;
+						}
+						const identifier = unsafeCachedModule.identifier();
+						const cachedModule =
+							this._restoredUnsafeCacheEntries.get(identifier);
+						if (cachedModule !== undefined) {
+							// update unsafe cache to new module
+							unsafeCacheDependencies.set(dep, cachedModule);
+							this._handleExistingModuleFromUnsafeCache(
+								module,
+								dep,
+								cachedModule
+							);
+							return;
+						}
+						inProgressSorting++;
+						this._modulesCache.get(identifier, null, (err, cachedModule) => {
+							if (err) {
+								if (inProgressSorting <= 0) return;
+								inProgressSorting = -1;
+								onDependenciesSorted(/** @type {WebpackError} */ (err));
+								return;
+							}
+							try {
+								if (!this._restoredUnsafeCacheEntries.has(identifier)) {
+									const data = unsafeCacheData.get(cachedModule);
+									if (data === undefined) {
+										processDependencyForResolving(dep);
+										if (--inProgressSorting === 0) onDependenciesSorted();
+										return;
+									}
+									if (cachedModule !== unsafeCachedModule) {
+										unsafeCacheDependencies.set(dep, cachedModule);
+									}
+									cachedModule.restoreFromUnsafeCache(
+										data,
+										this.params.normalModuleFactory,
+										this.params
+									);
+									this._restoredUnsafeCacheEntries.set(
+										identifier,
+										cachedModule
+									);
+									this._restoredUnsafeCacheModuleEntries.add(cachedModule);
+									if (!this.modules.has(cachedModule)) {
+										inProgressTransitive++;
+										this._handleNewModuleFromUnsafeCache(
+											module,
+											dep,
+											cachedModule,
+											(err) => {
+												if (err) {
+													if (inProgressTransitive <= 0) return;
+													inProgressTransitive = -1;
+													onTransitiveTasksFinished(err);
+												}
+												if (--inProgressTransitive === 0) {
+													return onTransitiveTasksFinished();
+												}
+											}
+										);
+										if (--inProgressSorting === 0) onDependenciesSorted();
+										return;
+									}
+								}
+								if (unsafeCachedModule !== cachedModule) {
+									unsafeCacheDependencies.set(dep, cachedModule);
+								}
+								this._handleExistingModuleFromUnsafeCache(
+									module,
+									dep,
+									cachedModule
+								); // a3
+							} catch (err) {
+								if (inProgressSorting <= 0) return;
+								inProgressSorting = -1;
+								onDependenciesSorted(/** @type {WebpackError} */ (err));
+								return;
+							}
+							if (--inProgressSorting === 0) onDependenciesSorted();
+						});
+						return;
+					}
+				} catch (err) {
+					// eslint-disable-next-line no-console
+					console.error(err);
+				}
+			}
+			processDependencyForResolving(dep);
+		};
+
+		/**
+		 * @param {Dependency} dep dependency
+		 * @returns {void}
+		 */
+		const processDependencyForResolving = (dep) => {
+			const resourceIdent = dep.getResourceIdentifier();
+			if (resourceIdent !== undefined && resourceIdent !== null) {
+				const category = dep.category;
+				const constructor =
+					/** @type {DependencyConstructor} */
+					(dep.constructor);
+				if (factoryCacheKey === constructor) {
+					// Fast path 1: same constructor as prev item
+					if (listCacheKey1 === category && listCacheKey2 === resourceIdent) {
+						// Super fast path 1: also same resource
+						listCacheValue.push(dep);
+						return;
+					}
+				} else {
+					const factory = this.dependencyFactories.get(constructor);
+					if (factory === undefined) {
+						throw new Error(
+							`No module factory available for dependency type: ${constructor.name}`
+						);
+					}
+					if (factoryCacheKey2 === factory) {
+						// Fast path 2: same factory as prev item
+						factoryCacheKey = constructor;
+						if (listCacheKey1 === category && listCacheKey2 === resourceIdent) {
+							// Super fast path 2: also same resource
+							listCacheValue.push(dep);
+							return;
+						}
+					} else {
+						// Slow path
+						if (factoryCacheKey2 !== undefined) {
+							// Archive last cache entry
+							if (dependencies === undefined) dependencies = new Map();
+							dependencies.set(
+								factoryCacheKey2,
+								/** @type {FactoryCacheValue} */ (factoryCacheValue)
+							);
+							factoryCacheValue = dependencies.get(factory);
+							if (factoryCacheValue === undefined) {
+								factoryCacheValue = new Map();
+							}
+						} else {
+							factoryCacheValue = new Map();
+						}
+						factoryCacheKey = constructor;
+						factoryCacheKey2 = factory;
+					}
+				}
+				// Here webpack is using heuristic that assumes
+				// mostly esm dependencies would be used
+				// so we don't allocate extra string for them
+				const cacheKey =
+					category === esmDependencyCategory
+						? resourceIdent
+						: `${category}${resourceIdent}`;
+				let list = /** @type {FactoryCacheValue} */ (factoryCacheValue).get(
+					cacheKey
+				);
+				if (list === undefined) {
+					/** @type {FactoryCacheValue} */
+					(factoryCacheValue).set(cacheKey, (list = []));
+					const newItem = {
+						factory: factoryCacheKey2,
+						dependencies: list,
+						context: dep.getContext(),
+						originModule: module
+					};
+					if (hasLowPriorityDependencies) {
+						let insertIndex = sortedDependencies.length;
+						while (insertIndex > 0) {
+							const item = sortedDependencies[insertIndex - 1];
+							const isAllLowPriorityDependencies = item.dependencies.every(
+								Dependency.isLowPriorityDependency
+							);
+							if (isAllLowPriorityDependencies) {
+								insertIndex--;
+							} else {
+								break;
+							}
+						}
+						sortedDependencies.splice(insertIndex, 0, newItem);
+					} else {
+						sortedDependencies.push(newItem);
+					}
+				}
+				list.push(dep);
+				listCacheKey1 = category;
+				listCacheKey2 = resourceIdent;
+				listCacheValue = list;
+			}
+		};
+
+		try {
+			/** @type {DependenciesBlock[]} */
+			const queue = [module];
+			do {
+				const block = /** @type {DependenciesBlock} */ (queue.pop());
+				if (block.dependencies) {
+					currentBlock = block;
+					let i = 0;
+					for (const dep of block.dependencies) processDependency(dep, i++);
+				}
+				if (block.blocks) {
+					for (const b of block.blocks) queue.push(b);
+				}
+			} while (queue.length !== 0);
+		} catch (err) {
+			return callback(/** @type {WebpackError} */ (err));
 		}
 
-		this.addModuleDependencies(
+		if (--inProgressSorting === 0) onDependenciesSorted();
+	}
+
+	/**
+	 * @private
+	 * @param {Module} originModule original module
+	 * @param {Dependency} dependency dependency
+	 * @param {Module} module cached module
+	 * @param {Callback} callback callback
+	 */
+	_handleNewModuleFromUnsafeCache(originModule, dependency, module, callback) {
+		const moduleGraph = this.moduleGraph;
+
+		moduleGraph.setResolvedModule(originModule, dependency, module);
+
+		moduleGraph.setIssuerIfUnset(
+			module,
+			originModule !== undefined ? originModule : null
+		);
+
+		this._modules.set(module.identifier(), module);
+		this.modules.add(module);
+		if (this._backCompat) {
+			ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
+		}
+
+		this._handleModuleBuildAndDependencies(
+			originModule,
 			module,
-			sortedDependencies,
-			this.bail,
-			null,
 			true,
+			false,
 			callback
 		);
 	}
 
-	addModuleDependencies(
-		module,
-		dependencies,
-		bail,
-		cacheGroup,
-		recursive,
+	/**
+	 * @private
+	 * @param {Module} originModule original modules
+	 * @param {Dependency} dependency dependency
+	 * @param {Module} module cached module
+	 */
+	_handleExistingModuleFromUnsafeCache(originModule, dependency, module) {
+		const moduleGraph = this.moduleGraph;
+
+		moduleGraph.setResolvedModule(originModule, dependency, module);
+	}
+
+	/**
+	 * @param {FactorizeModuleOptions} options options
+	 * @param {ModuleOrModuleFactoryResultCallback} callback callback
+	 * @returns {void}
+	 */
+	_factorizeModule(
+		{
+			currentProfile,
+			factory,
+			dependencies,
+			originModule,
+			factoryResult,
+			contextInfo,
+			context
+		},
 		callback
 	) {
-		const start = this.profile && Date.now();
-		const currentProfile = this.profile && {};
+		if (currentProfile !== undefined) {
+			currentProfile.markFactoryStart();
+		}
+		factory.create(
+			{
+				contextInfo: {
+					issuer: originModule
+						? /** @type {NameForCondition} */ (originModule.nameForCondition())
+						: "",
+					issuerLayer: originModule ? originModule.layer : null,
+					compiler: this.compiler.name,
+					...contextInfo
+				},
+				resolveOptions: originModule ? originModule.resolveOptions : undefined,
+				context:
+					context ||
+					(originModule
+						? /** @type {string} */ (originModule.context)
+						: this.compiler.context),
+				dependencies
+			},
+			(err, result) => {
+				if (result) {
+					// TODO webpack 6: remove
+					// For backward-compat
+					if (result.module === undefined && result instanceof Module) {
+						result = {
+							module: result
+						};
+					}
+					if (!factoryResult) {
+						const {
+							fileDependencies,
+							contextDependencies,
+							missingDependencies
+						} = result;
+						if (fileDependencies) {
+							this.fileDependencies.addAll(fileDependencies);
+						}
+						if (contextDependencies) {
+							this.contextDependencies.addAll(contextDependencies);
+						}
+						if (missingDependencies) {
+							this.missingDependencies.addAll(missingDependencies);
+						}
+					}
+				}
+				if (err) {
+					const notFoundError = new ModuleNotFoundError(
+						originModule,
+						err,
+						/** @type {DependencyLocation} */
+						(dependencies.map((d) => d.loc).find(Boolean))
+					);
+					return callback(notFoundError, factoryResult ? result : undefined);
+				}
+				if (!result) {
+					return callback();
+				}
 
-		asyncLib.forEach(
-			dependencies,
-			(item, callback) => {
-				const dependencies = item.dependencies;
+				if (currentProfile !== undefined) {
+					currentProfile.markFactoryEnd();
+				}
 
-				const errorAndCallback = err => {
-					err.origin = module;
-					err.dependencies = dependencies;
-					this.errors.push(err);
-					if (bail) {
-						callback(err);
-					} else {
-						callback();
+				callback(null, factoryResult ? result : result.module);
+			}
+		);
+	}
+
+	/**
+	 * @overload
+	 * @param {FactorizeModuleOptions & { factoryResult?: false }} options options
+	 * @param {ModuleCallback} callback callback
+	 * @returns {void}
+	 */
+	/**
+	 * @overload
+	 * @param {FactorizeModuleOptions & { factoryResult: true }} options options
+	 * @param {ModuleFactoryResultCallback} callback callback
+	 * @returns {void}
+	 */
+	/**
+	 * @param {FactorizeModuleOptions & { factoryResult?: false } | FactorizeModuleOptions & { factoryResult: true }} options options
+	 * @param {ModuleCallback | ModuleFactoryResultCallback} callback callback
+	 */
+	factorizeModule(options, callback) {
+		this.factorizeQueue.add(
+			options,
+			/** @type {ModuleOrModuleFactoryResultCallback} */
+			(callback)
+		);
+	}
+
+	/**
+	 * @typedef {object} HandleModuleCreationOptions
+	 * @property {ModuleFactory} factory
+	 * @property {Dependency[]} dependencies
+	 * @property {Module | null} originModule
+	 * @property {Partial=} contextInfo
+	 * @property {string=} context
+	 * @property {boolean=} recursive recurse into dependencies of the created module
+	 * @property {boolean=} connectOrigin connect the resolved module with the origin module
+	 * @property {boolean=} checkCycle check the cycle dependencies of the created module
+	 */
+
+	/**
+	 * @param {HandleModuleCreationOptions} options options object
+	 * @param {ModuleCallback} callback callback
+	 * @returns {void}
+	 */
+	handleModuleCreation(
+		{
+			factory,
+			dependencies,
+			originModule,
+			contextInfo,
+			context,
+			recursive = true,
+			connectOrigin = recursive,
+			checkCycle = !recursive
+		},
+		callback
+	) {
+		const moduleGraph = this.moduleGraph;
+
+		const currentProfile = this.profile ? new ModuleProfile() : undefined;
+
+		this.factorizeModule(
+			{
+				currentProfile,
+				factory,
+				dependencies,
+				factoryResult: true,
+				originModule,
+				contextInfo,
+				context
+			},
+			(err, factoryResult) => {
+				const applyFactoryResultDependencies = () => {
+					const { fileDependencies, contextDependencies, missingDependencies } =
+						/** @type {ModuleFactoryResult} */ (factoryResult);
+					if (fileDependencies) {
+						this.fileDependencies.addAll(fileDependencies);
+					}
+					if (contextDependencies) {
+						this.contextDependencies.addAll(contextDependencies);
+					}
+					if (missingDependencies) {
+						this.missingDependencies.addAll(missingDependencies);
 					}
 				};
-				const warningAndCallback = err => {
-					err.origin = module;
-					this.warnings.push(err);
-					callback();
-				};
+				if (err) {
+					if (factoryResult) applyFactoryResultDependencies();
+					if (dependencies.every((d) => d.optional)) {
+						this.warnings.push(err);
+						return callback();
+					}
+					this.errors.push(err);
+					return callback(err);
+				}
 
-				const semaphore = this.semaphore;
-				semaphore.acquire(() => {
-					const factory = item.factory;
-					factory.create(
-						{
-							contextInfo: {
-								issuer: module.nameForCondition && module.nameForCondition(),
-								compiler: this.compiler.name
-							},
-							resolveOptions: module.resolveOptions,
-							context: module.context,
-							dependencies: dependencies
-						},
-						(err, dependentModule) => {
-							let afterFactory;
-
-							const isOptional = () => {
-								return dependencies.every(d => d.optional);
-							};
+				const newModule =
+					/** @type {ModuleFactoryResult} */
+					(factoryResult).module;
 
-							const errorOrWarningAndCallback = err => {
-								if (isOptional()) {
-									return warningAndCallback(err);
-								} else {
-									return errorAndCallback(err);
-								}
-							};
+				if (!newModule) {
+					applyFactoryResultDependencies();
+					return callback();
+				}
 
-							if (err) {
-								semaphore.release();
-								return errorOrWarningAndCallback(
-									new ModuleNotFoundError(module, err)
-								);
-							}
-							if (!dependentModule) {
-								semaphore.release();
-								return process.nextTick(callback);
-							}
-							if (currentProfile) {
-								afterFactory = Date.now();
-								currentProfile.factory = afterFactory - start;
-							}
+				if (currentProfile !== undefined) {
+					moduleGraph.setProfile(newModule, currentProfile);
+				}
 
-							const iterationDependencies = depend => {
-								for (let index = 0; index < depend.length; index++) {
-									const dep = depend[index];
-									dep.module = dependentModule;
-									dependentModule.addReason(module, dep);
-								}
-							};
+				this.addModule(newModule, (err, _module) => {
+					if (err) {
+						applyFactoryResultDependencies();
+						if (!err.module) {
+							err.module = _module;
+						}
+						this.errors.push(err);
 
-							const addModuleResult = this.addModule(
-								dependentModule,
-								cacheGroup
-							);
-							dependentModule = addModuleResult.module;
-							iterationDependencies(dependencies);
+						return callback(err);
+					}
 
-							const afterBuild = () => {
-								if (currentProfile) {
-									const afterBuilding = Date.now();
-									currentProfile.building = afterBuilding - afterFactory;
-								}
+					const module =
+						/** @type {ModuleWithRestoreFromUnsafeCache} */
+						(_module);
 
-								if (recursive && addModuleResult.dependencies) {
-									this.processModuleDependencies(dependentModule, callback);
-								} else {
-									return callback();
-								}
-							};
+					if (
+						this._unsafeCache &&
+						/** @type {ModuleFactoryResult} */
+						(factoryResult).cacheable !== false &&
+						module.restoreFromUnsafeCache &&
+						this._unsafeCachePredicate(module)
+					) {
+						const unsafeCacheableModule =
+							/** @type {ModuleWithRestoreFromUnsafeCache} */
+							(module);
+						for (const dependency of dependencies) {
+							moduleGraph.setResolvedModule(
+								connectOrigin ? originModule : null,
+								dependency,
+								unsafeCacheableModule
+							);
+							unsafeCacheDependencies.set(dependency, unsafeCacheableModule);
+						}
+						if (!unsafeCacheData.has(unsafeCacheableModule)) {
+							unsafeCacheData.set(
+								unsafeCacheableModule,
+								unsafeCacheableModule.getUnsafeCacheData()
+							);
+						}
+					} else {
+						applyFactoryResultDependencies();
+						for (const dependency of dependencies) {
+							moduleGraph.setResolvedModule(
+								connectOrigin ? originModule : null,
+								dependency,
+								module
+							);
+						}
+					}
 
-							if (addModuleResult.issuer) {
-								if (currentProfile) {
-									dependentModule.profile = currentProfile;
-								}
+					moduleGraph.setIssuerIfUnset(
+						module,
+						originModule !== undefined ? originModule : null
+					);
+					if (module !== newModule && currentProfile !== undefined) {
+						const otherProfile = moduleGraph.getProfile(module);
+						if (otherProfile !== undefined) {
+							currentProfile.mergeInto(otherProfile);
+						} else {
+							moduleGraph.setProfile(module, currentProfile);
+						}
+					}
 
-								dependentModule.issuer = module;
-							} else {
-								if (this.profile) {
-									if (module.profile) {
-										const time = Date.now() - start;
-										if (
-											!module.profile.dependencies ||
-											time > module.profile.dependencies
-										) {
-											module.profile.dependencies = time;
-										}
-									}
-								}
+					this._handleModuleBuildAndDependencies(
+						originModule,
+						module,
+						recursive,
+						checkCycle,
+						callback
+					);
+				});
+			}
+		);
+	}
+
+	/**
+	 * @private
+	 * @param {Module | null} originModule original module
+	 * @param {Module} module module
+	 * @param {boolean} recursive true if make it recursive, otherwise false
+	 * @param {boolean} checkCycle true if need to check cycle, otherwise false
+	 * @param {ModuleCallback} callback callback
+	 * @returns {void}
+	 */
+	_handleModuleBuildAndDependencies(
+		originModule,
+		module,
+		recursive,
+		checkCycle,
+		callback
+	) {
+		// Check for cycles when build is trigger inside another build
+		/** @type {Set | undefined} */
+		let creatingModuleDuringBuildSet;
+		if (
+			checkCycle &&
+			this.buildQueue.isProcessing(/** @type {Module} */ (originModule))
+		) {
+			// Track build dependency
+			creatingModuleDuringBuildSet = this.creatingModuleDuringBuild.get(
+				/** @type {Module} */
+				(originModule)
+			);
+			if (creatingModuleDuringBuildSet === undefined) {
+				/** @type {Set} */
+				creatingModuleDuringBuildSet = new Set();
+				this.creatingModuleDuringBuild.set(
+					/** @type {Module} */
+					(originModule),
+					creatingModuleDuringBuildSet
+				);
+			}
+			creatingModuleDuringBuildSet.add(module);
+
+			// When building is blocked by another module
+			// search for a cycle, cancel the cycle by throwing
+			// an error (otherwise this would deadlock)
+			const blockReasons = this.creatingModuleDuringBuild.get(module);
+			if (blockReasons !== undefined) {
+				const set = new Set(blockReasons);
+				for (const item of set) {
+					const blockReasons = this.creatingModuleDuringBuild.get(item);
+					if (blockReasons !== undefined) {
+						for (const m of blockReasons) {
+							if (m === module) {
+								return callback(new BuildCycleError(module));
 							}
+							set.add(m);
+						}
+					}
+				}
+			}
+		}
 
-							if (addModuleResult.build) {
-								this.buildModule(
-									dependentModule,
-									isOptional(),
-									module,
-									dependencies,
-									err => {
-										if (err) {
-											semaphore.release();
-											return errorOrWarningAndCallback(err);
-										}
+		this.buildModule(module, (err) => {
+			if (creatingModuleDuringBuildSet !== undefined) {
+				creatingModuleDuringBuildSet.delete(module);
+			}
+			if (err) {
+				if (!err.module) {
+					err.module = module;
+				}
+				this.errors.push(err);
 
-										if (currentProfile) {
-											const afterBuilding = Date.now();
-											currentProfile.building = afterBuilding - afterFactory;
-										}
+				return callback(err);
+			}
 
-										semaphore.release();
-										afterBuild();
-									}
-								);
-							} else {
-								semaphore.release();
-								this.waitForBuildingFinished(dependentModule, afterBuild);
-							}
-						}
-					);
-				});
-			},
-			err => {
-				// In V8, the Error objects keep a reference to the functions on the stack. These warnings &
-				// errors are created inside closures that keep a reference to the Compilation, so errors are
-				// leaking the Compilation object.
+			if (!recursive) {
+				this.processModuleDependenciesNonRecursive(module);
+				callback(null, module);
+				return;
+			}
 
+			// This avoids deadlocks for circular dependencies
+			if (this.processDependenciesQueue.isProcessing(module)) {
+				return callback(null, module);
+			}
+
+			this.processModuleDependencies(module, (err) => {
 				if (err) {
-					err.stack = err.stack;
 					return callback(err);
 				}
-
-				return process.nextTick(callback);
-			}
-		);
+				callback(null, module);
+			});
+		});
 	}
 
-	_addModuleChain(context, dependency, onModule, callback) {
-		const start = this.profile && Date.now();
-		const currentProfile = this.profile && {};
-
-		const errorAndCallback = this.bail
-			? err => {
-					callback(err);
-			  }
-			: err => {
-					err.dependencies = [dependency];
-					this.errors.push(err);
-					callback();
-			  };
+	/**
+	 * @param {string} context context string path
+	 * @param {Dependency} dependency dependency used to create Module chain
+	 * @param {ModuleCallback} callback callback for when module chain is complete
+	 * @returns {void} will throw if dependency instance is not a valid Dependency
+	 */
+	addModuleChain(context, dependency, callback) {
+		return this.addModuleTree({ context, dependency }, callback);
+	}
 
+	/**
+	 * @param {object} options options
+	 * @param {string} options.context context string path
+	 * @param {Dependency} options.dependency dependency used to create Module chain
+	 * @param {Partial=} options.contextInfo additional context info for the root module
+	 * @param {ModuleCallback} callback callback for when module chain is complete
+	 * @returns {void} will throw if dependency instance is not a valid Dependency
+	 */
+	addModuleTree({ context, dependency, contextInfo }, callback) {
 		if (
 			typeof dependency !== "object" ||
 			dependency === null ||
 			!dependency.constructor
 		) {
-			throw new Error("Parameter 'dependency' must be a Dependency");
+			return callback(
+				new WebpackError("Parameter 'dependency' must be a Dependency")
+			);
 		}
-
-		const moduleFactory = this.dependencyFactories.get(dependency.constructor);
+		const Dep =
+			/** @type {DependencyConstructor} */
+			(dependency.constructor);
+		const moduleFactory = this.dependencyFactories.get(Dep);
 		if (!moduleFactory) {
-			throw new Error(
-				`No dependency factory available for this dependency type: ${
-					dependency.constructor.name
-				}`
+			return callback(
+				new WebpackError(
+					`No dependency factory available for this dependency type: ${dependency.constructor.name}`
+				)
 			);
 		}
 
-		this.semaphore.acquire(() => {
-			moduleFactory.create(
-				{
-					contextInfo: {
-						issuer: "",
-						compiler: this.compiler.name
-					},
-					context: context,
-					dependencies: [dependency]
-				},
-				(err, module) => {
-					if (err) {
-						this.semaphore.release();
-						return errorAndCallback(new EntryModuleNotFoundError(err));
-					}
+		this.handleModuleCreation(
+			{
+				factory: moduleFactory,
+				dependencies: [dependency],
+				originModule: null,
+				contextInfo,
+				context
+			},
+			(err, result) => {
+				if (err && this.bail) {
+					callback(err);
+					this.buildQueue.stop();
+					this.rebuildQueue.stop();
+					this.processDependenciesQueue.stop();
+					this.factorizeQueue.stop();
+				} else if (!err && result) {
+					callback(null, result);
+				} else {
+					callback();
+				}
+			}
+		);
+	}
 
-					let afterFactory;
+	/**
+	 * @param {string} context context path for entry
+	 * @param {Dependency} entry entry dependency that should be followed
+	 * @param {string | EntryOptions} optionsOrName options or deprecated name of entry
+	 * @param {ModuleCallback} callback callback function
+	 * @returns {void} returns
+	 */
+	addEntry(context, entry, optionsOrName, callback) {
+		// TODO webpack 6 remove
+		const options =
+			typeof optionsOrName === "object"
+				? optionsOrName
+				: { name: optionsOrName };
+
+		this._addEntryItem(context, entry, "dependencies", options, callback);
+	}
 
-					if (currentProfile) {
-						afterFactory = Date.now();
-						currentProfile.factory = afterFactory - start;
-					}
+	/**
+	 * @param {string} context context path for entry
+	 * @param {Dependency} dependency dependency that should be followed
+	 * @param {EntryOptions} options options
+	 * @param {ModuleCallback} callback callback function
+	 * @returns {void} returns
+	 */
+	addInclude(context, dependency, options, callback) {
+		this._addEntryItem(
+			context,
+			dependency,
+			"includeDependencies",
+			options,
+			callback
+		);
+	}
 
-					const addModuleResult = this.addModule(module);
-					module = addModuleResult.module;
+	/**
+	 * @param {string} context context path for entry
+	 * @param {Dependency} entry entry dependency that should be followed
+	 * @param {"dependencies" | "includeDependencies"} target type of entry
+	 * @param {EntryOptions} options options
+	 * @param {ModuleCallback} callback callback function
+	 * @returns {void} returns
+	 */
+	_addEntryItem(context, entry, target, options, callback) {
+		const { name } = options;
+		/** @type {EntryData | undefined} */
+		let entryData =
+			name !== undefined ? this.entries.get(name) : this.globalEntry;
+		if (entryData === undefined) {
+			entryData = {
+				dependencies: [],
+				includeDependencies: [],
+				options: {
+					name: undefined,
+					...options
+				}
+			};
+			entryData[target].push(entry);
+			this.entries.set(
+				/** @type {NonNullable} */
+				(name),
+				entryData
+			);
+		} else {
+			entryData[target].push(entry);
+			for (const key_ of Object.keys(options)) {
+				const key = /** @type {keyof EntryOptions} */ (key_);
+				if (options[key] === undefined) continue;
+				if (entryData.options[key] === options[key]) continue;
+				if (
+					Array.isArray(entryData.options[key]) &&
+					Array.isArray(options[key]) &&
+					arrayEquals(entryData.options[key], options[key])
+				) {
+					continue;
+				}
+				if (entryData.options[key] === undefined) {
+					/** @type {EntryOptions[keyof EntryOptions]} */
+					(entryData.options[key]) = options[key];
+				} else {
+					return callback(
+						new WebpackError(
+							`Conflicting entry option ${key} = ${entryData.options[key]} vs ${options[key]}`
+						)
+					);
+				}
+			}
+		}
 
-					onModule(module);
+		this.hooks.addEntry.call(entry, options);
 
-					dependency.module = module;
-					module.addReason(null, dependency);
+		this.addModuleTree(
+			{
+				context,
+				dependency: entry,
+				contextInfo: entryData.options.layer
+					? { issuerLayer: entryData.options.layer }
+					: undefined
+			},
+			(err, module) => {
+				if (err) {
+					this.hooks.failedEntry.call(entry, options, err);
+					return callback(err);
+				}
+				this.hooks.succeedEntry.call(
+					entry,
+					options,
+					/** @type {Module} */
+					(module)
+				);
+				return callback(null, module);
+			}
+		);
+	}
 
-					const afterBuild = () => {
-						if (currentProfile) {
-							const afterBuilding = Date.now();
-							currentProfile.building = afterBuilding - afterFactory;
-						}
+	/**
+	 * @param {Module} module module to be rebuilt
+	 * @param {ModuleCallback} callback callback when module finishes rebuilding
+	 * @returns {void}
+	 */
+	rebuildModule(module, callback) {
+		this.rebuildQueue.add(module, callback);
+	}
 
-						if (addModuleResult.dependencies) {
-							this.processModuleDependencies(module, err => {
-								if (err) return callback(err);
-								callback(null, module);
-							});
-						} else {
-							return callback(null, module);
-						}
-					};
+	/**
+	 * @param {Module} module module to be rebuilt
+	 * @param {ModuleCallback} callback callback when module finishes rebuilding
+	 * @returns {void}
+	 */
+	_rebuildModule(module, callback) {
+		this.hooks.rebuildModule.call(module);
+		const oldDependencies = [...module.dependencies];
+		const oldBlocks = [...module.blocks];
+		module.invalidateBuild();
+		this.buildQueue.invalidate(module);
+		this.buildModule(module, (err) => {
+			if (err) {
+				return this.hooks.finishRebuildingModule.callAsync(module, (err2) => {
+					if (err2) {
+						callback(
+							makeWebpackError(err2, "Compilation.hooks.finishRebuildingModule")
+						);
+						return;
+					}
+					callback(err);
+				});
+			}
 
-					if (addModuleResult.issuer) {
-						if (currentProfile) {
-							module.profile = currentProfile;
-						}
+			this.processDependenciesQueue.invalidate(module);
+			this.moduleGraph.unfreeze();
+			this.processModuleDependencies(module, (err) => {
+				if (err) return callback(err);
+				this.removeReasonsOfDependencyBlock(module, {
+					dependencies: oldDependencies,
+					blocks: oldBlocks
+				});
+				this.hooks.finishRebuildingModule.callAsync(module, (err2) => {
+					if (err2) {
+						callback(
+							makeWebpackError(err2, "Compilation.hooks.finishRebuildingModule")
+						);
+						return;
 					}
+					callback(null, module);
+				});
+			});
+		});
+	}
 
-					if (addModuleResult.build) {
-						this.buildModule(module, false, null, null, err => {
-							if (err) {
-								this.semaphore.release();
-								return errorAndCallback(err);
-							}
+	/**
+	 * @private
+	 * @param {Set} modules modules
+	 */
+	_computeAffectedModules(modules) {
+		const moduleMemCacheCache = this.compiler.moduleMemCaches;
+		if (!moduleMemCacheCache) return;
+		if (!this.moduleMemCaches) {
+			this.moduleMemCaches = new Map();
+			this.moduleGraph.setModuleMemCaches(this.moduleMemCaches);
+		}
+		const { moduleGraph, moduleMemCaches } = this;
+		/** @type {Set} */
+		const affectedModules = new Set();
+		/** @type {Set} */
+		const infectedModules = new Set();
+		let statNew = 0;
+		let statChanged = 0;
+		let statUnchanged = 0;
+		let statReferencesChanged = 0;
+		let statWithoutBuild = 0;
 
-							if (currentProfile) {
-								const afterBuilding = Date.now();
-								currentProfile.building = afterBuilding - afterFactory;
-							}
+		/**
+		 * @param {Module} module module
+		 * @returns {WeakReferences | undefined} references
+		 */
+		const computeReferences = (module) => {
+			/** @type {WeakReferences | undefined} */
+			let references;
+			for (const connection of moduleGraph.getOutgoingConnections(module)) {
+				const d = connection.dependency;
+				const m = connection.module;
+				if (!d || !m || unsafeCacheDependencies.has(d)) continue;
+				if (references === undefined) references = new WeakMap();
+				references.set(d, m);
+			}
+			return references;
+		};
 
-							this.semaphore.release();
-							afterBuild();
-						});
+		/**
+		 * @param {Module} module the module
+		 * @param {WeakReferences | undefined} references references
+		 * @returns {boolean} true, when the references differ
+		 */
+		const compareReferences = (module, references) => {
+			if (references === undefined) return true;
+			for (const connection of moduleGraph.getOutgoingConnections(module)) {
+				const d = connection.dependency;
+				if (!d) continue;
+				const entry = references.get(d);
+				if (entry === undefined) continue;
+				if (entry !== connection.module) return false;
+			}
+			return true;
+		};
+
+		const modulesWithoutCache = new Set(modules);
+		for (const [module, cachedMemCache] of moduleMemCacheCache) {
+			if (modulesWithoutCache.has(module)) {
+				const buildInfo = module.buildInfo;
+				if (buildInfo) {
+					if (cachedMemCache.buildInfo !== buildInfo) {
+						// use a new one
+						/** @type {MemCache} */
+						const memCache = new WeakTupleMap();
+						moduleMemCaches.set(module, memCache);
+						affectedModules.add(module);
+						cachedMemCache.buildInfo = buildInfo;
+						cachedMemCache.references = computeReferences(module);
+						cachedMemCache.memCache = memCache;
+						statChanged++;
+					} else if (!compareReferences(module, cachedMemCache.references)) {
+						// use a new one
+						/** @type {MemCache} */
+						const memCache = new WeakTupleMap();
+						moduleMemCaches.set(module, memCache);
+						affectedModules.add(module);
+						cachedMemCache.references = computeReferences(module);
+						cachedMemCache.memCache = memCache;
+						statReferencesChanged++;
 					} else {
-						this.semaphore.release();
-						this.waitForBuildingFinished(module, afterBuild);
+						// keep the old mem cache
+						moduleMemCaches.set(module, cachedMemCache.memCache);
+						statUnchanged++;
 					}
+				} else {
+					infectedModules.add(module);
+					moduleMemCacheCache.delete(module);
+					statWithoutBuild++;
 				}
-			);
-		});
-	}
+				modulesWithoutCache.delete(module);
+			} else {
+				moduleMemCacheCache.delete(module);
+			}
+		}
 
-	addEntry(context, entry, name, callback) {
-		const slot = {
-			name: name,
-			request: entry.request,
-			module: null
+		for (const module of modulesWithoutCache) {
+			const buildInfo = module.buildInfo;
+			if (buildInfo) {
+				// create a new entry
+				const memCache = new WeakTupleMap();
+				moduleMemCacheCache.set(module, {
+					buildInfo,
+					references: computeReferences(module),
+					memCache
+				});
+				moduleMemCaches.set(module, memCache);
+				affectedModules.add(module);
+				statNew++;
+			} else {
+				infectedModules.add(module);
+				statWithoutBuild++;
+			}
+		}
+
+		/**
+		 * @param {Readonly} connections connections
+		 * @returns {symbol | boolean} result
+		 */
+		const reduceAffectType = (connections) => {
+			let affected = false;
+			for (const { dependency } of connections) {
+				if (!dependency) continue;
+				const type = dependency.couldAffectReferencingModule();
+				if (type === Dependency.TRANSITIVE) return Dependency.TRANSITIVE;
+				if (type === false) continue;
+				affected = true;
+			}
+			return affected;
 		};
-		this._preparedEntrypoints.push(slot);
-		this._addModuleChain(
-			context,
-			entry,
-			module => {
-				this.entries.push(module);
-			},
-			(err, module) => {
-				if (err) {
-					return callback(err);
+		/** @type {Set} */
+		const directOnlyInfectedModules = new Set();
+		for (const module of infectedModules) {
+			for (const [
+				referencingModule,
+				connections
+			] of moduleGraph.getIncomingConnectionsByOriginModule(module)) {
+				if (!referencingModule) continue;
+				if (infectedModules.has(referencingModule)) continue;
+				const type = reduceAffectType(connections);
+				if (!type) continue;
+				if (type === true) {
+					directOnlyInfectedModules.add(referencingModule);
+				} else {
+					infectedModules.add(referencingModule);
 				}
-
-				if (module) {
-					slot.module = module;
+			}
+		}
+		for (const module of directOnlyInfectedModules) infectedModules.add(module);
+		/** @type {Set} */
+		const directOnlyAffectModules = new Set();
+		for (const module of affectedModules) {
+			for (const [
+				referencingModule,
+				connections
+			] of moduleGraph.getIncomingConnectionsByOriginModule(module)) {
+				if (!referencingModule) continue;
+				if (infectedModules.has(referencingModule)) continue;
+				if (affectedModules.has(referencingModule)) continue;
+				const type = reduceAffectType(connections);
+				if (!type) continue;
+				if (type === true) {
+					directOnlyAffectModules.add(referencingModule);
 				} else {
-					const idx = this._preparedEntrypoints.indexOf(slot);
-					this._preparedEntrypoints.splice(idx, 1);
+					affectedModules.add(referencingModule);
 				}
-				return callback(null, module);
+				/** @type {MemCache} */
+				const memCache = new WeakTupleMap();
+				const cache =
+					/** @type {ModuleMemCachesItem} */
+					(moduleMemCacheCache.get(referencingModule));
+				cache.memCache = memCache;
+				moduleMemCaches.set(referencingModule, memCache);
+			}
+		}
+		for (const module of directOnlyAffectModules) affectedModules.add(module);
+		this.logger.log(
+			`${Math.round(
+				(100 * (affectedModules.size + infectedModules.size)) /
+					this.modules.size
+			)}% (${affectedModules.size} affected + ${
+				infectedModules.size
+			} infected of ${
+				this.modules.size
+			}) modules flagged as affected (${statNew} new modules, ${statChanged} changed, ${statReferencesChanged} references changed, ${statUnchanged} unchanged, ${statWithoutBuild} were not built)`
+		);
+	}
+
+	_computeAffectedModulesWithChunkGraph() {
+		const { moduleMemCaches } = this;
+		if (!moduleMemCaches) return;
+		const moduleMemCaches2 = (this.moduleMemCaches2 = new Map());
+		const { moduleGraph, chunkGraph } = this;
+		const key = "memCache2";
+		let statUnchanged = 0;
+		let statChanged = 0;
+		let statNew = 0;
+		/**
+		 * @param {Module} module module
+		 * @returns {References} references
+		 */
+		const computeReferences = (module) => {
+			const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
+			/** @type {Map | undefined} */
+			let modules;
+			/** @type {(ChunkId | null)[] | undefined} */
+			let blocks;
+			const outgoing = moduleGraph.getOutgoingConnectionsByModule(module);
+			if (outgoing !== undefined) {
+				for (const m of outgoing.keys()) {
+					if (!m) continue;
+					if (modules === undefined) modules = new Map();
+					modules.set(m, /** @type {ModuleId} */ (chunkGraph.getModuleId(m)));
+				}
+			}
+			if (module.blocks.length > 0) {
+				blocks = [];
+				const queue = [...module.blocks];
+				for (const block of queue) {
+					const chunkGroup = chunkGraph.getBlockChunkGroup(block);
+					if (chunkGroup) {
+						for (const chunk of chunkGroup.chunks) {
+							blocks.push(chunk.id);
+						}
+					} else {
+						blocks.push(null);
+					}
+					// eslint-disable-next-line prefer-spread
+					queue.push.apply(queue, block.blocks);
+				}
+			}
+			return { id, modules, blocks };
+		};
+		/**
+		 * @param {Module} module module
+		 * @param {object} references references
+		 * @param {string | number} references.id id
+		 * @param {Map=} references.modules modules
+		 * @param {(string | number | null)[]=} references.blocks blocks
+		 * @returns {boolean} ok?
+		 */
+		const compareReferences = (module, { id, modules, blocks }) => {
+			if (id !== chunkGraph.getModuleId(module)) return false;
+			if (modules !== undefined) {
+				for (const [module, id] of modules) {
+					if (chunkGraph.getModuleId(module) !== id) return false;
+				}
+			}
+			if (blocks !== undefined) {
+				const queue = [...module.blocks];
+				let i = 0;
+				for (const block of queue) {
+					const chunkGroup = chunkGraph.getBlockChunkGroup(block);
+					if (chunkGroup) {
+						for (const chunk of chunkGroup.chunks) {
+							if (i >= blocks.length || blocks[i++] !== chunk.id) return false;
+						}
+					} else if (i >= blocks.length || blocks[i++] !== null) {
+						return false;
+					}
+					// eslint-disable-next-line prefer-spread
+					queue.push.apply(queue, block.blocks);
+				}
+				if (i !== blocks.length) return false;
+			}
+			return true;
+		};
+
+		for (const [module, memCache] of moduleMemCaches) {
+			/** @type {{ references: References, memCache: MemCache } | undefined} */
+			const cache = memCache.get(key);
+			if (cache === undefined) {
+				/** @type {WeakTupleMap | undefined} */
+				const memCache2 = new WeakTupleMap();
+				memCache.set(key, {
+					references: computeReferences(module),
+					memCache: memCache2
+				});
+				moduleMemCaches2.set(module, memCache2);
+				statNew++;
+			} else if (!compareReferences(module, cache.references)) {
+				/** @type {WeakTupleMap | undefined} */
+				const memCache = new WeakTupleMap();
+				cache.references = computeReferences(module);
+				cache.memCache = memCache;
+				moduleMemCaches2.set(module, memCache);
+				statChanged++;
+			} else {
+				moduleMemCaches2.set(module, cache.memCache);
+				statUnchanged++;
 			}
-		);
-	}
+		}
 
-	prefetch(context, dependency, callback) {
-		this._addModuleChain(
-			context,
-			dependency,
-			module => {
-				module.prefetched = true;
-			},
-			callback
+		this.logger.log(
+			`${Math.round(
+				(100 * statChanged) / (statNew + statChanged + statUnchanged)
+			)}% modules flagged as affected by chunk graph (${statNew} new modules, ${statChanged} changed, ${statUnchanged} unchanged)`
 		);
 	}
 
-	rebuildModule(module, thisCallback) {
-		let callbackList = this._rebuildingModules.get(module);
-		if (callbackList) {
-			callbackList.push(thisCallback);
-			return;
-		}
-		this._rebuildingModules.set(module, (callbackList = [thisCallback]));
-
-		const callback = err => {
-			this._rebuildingModules.delete(module);
-			for (const cb of callbackList) {
-				cb(err);
+	/**
+	 * @param {Callback} callback callback
+	 */
+	finish(callback) {
+		this.factorizeQueue.clear();
+		if (this.profile) {
+			this.logger.time("finish module profiles");
+
+			const ParallelismFactorCalculator = require("./util/ParallelismFactorCalculator");
+
+			const p = new ParallelismFactorCalculator();
+			const moduleGraph = this.moduleGraph;
+			/** @type {Map} */
+			const modulesWithProfiles = new Map();
+			for (const module of this.modules) {
+				const profile = moduleGraph.getProfile(module);
+				if (!profile) continue;
+				modulesWithProfiles.set(module, profile);
+				p.range(
+					profile.buildingStartTime,
+					profile.buildingEndTime,
+					(f) => (profile.buildingParallelismFactor = f)
+				);
+				p.range(
+					profile.factoryStartTime,
+					profile.factoryEndTime,
+					(f) => (profile.factoryParallelismFactor = f)
+				);
+				p.range(
+					profile.integrationStartTime,
+					profile.integrationEndTime,
+					(f) => (profile.integrationParallelismFactor = f)
+				);
+				p.range(
+					profile.storingStartTime,
+					profile.storingEndTime,
+					(f) => (profile.storingParallelismFactor = f)
+				);
+				p.range(
+					profile.restoringStartTime,
+					profile.restoringEndTime,
+					(f) => (profile.restoringParallelismFactor = f)
+				);
+				if (profile.additionalFactoryTimes) {
+					for (const { start, end } of profile.additionalFactoryTimes) {
+						const influence = (end - start) / profile.additionalFactories;
+						p.range(
+							start,
+							end,
+							(f) =>
+								(profile.additionalFactoriesParallelismFactor += f * influence)
+						);
+					}
+				}
 			}
-		};
+			p.calculate();
+
+			const logger = this.getLogger("webpack.Compilation.ModuleProfile");
+			// Avoid coverage problems due indirect changes
+			/**
+			 * @param {number} value value
+			 * @param {string} msg message
+			 */
+			/* istanbul ignore next */
+			const logByValue = (value, msg) => {
+				if (value > 1000) {
+					logger.error(msg);
+				} else if (value > 500) {
+					logger.warn(msg);
+				} else if (value > 200) {
+					logger.info(msg);
+				} else if (value > 30) {
+					logger.log(msg);
+				} else {
+					logger.debug(msg);
+				}
+			};
+			/**
+			 * @param {string} category a category
+			 * @param {(profile: ModuleProfile) => number} getDuration get duration callback
+			 * @param {(profile: ModuleProfile) => number} getParallelism get parallelism callback
+			 */
+			const logNormalSummary = (category, getDuration, getParallelism) => {
+				let sum = 0;
+				let max = 0;
+				for (const [module, profile] of modulesWithProfiles) {
+					const p = getParallelism(profile);
+					const d = getDuration(profile);
+					if (d === 0 || p === 0) continue;
+					const t = d / p;
+					sum += t;
+					if (t <= 10) continue;
+					logByValue(
+						t,
+						` | ${Math.round(t)} ms${
+							p >= 1.1 ? ` (parallelism ${Math.round(p * 10) / 10})` : ""
+						} ${category} > ${module.readableIdentifier(this.requestShortener)}`
+					);
+					max = Math.max(max, t);
+				}
+				if (sum <= 10) return;
+				logByValue(
+					Math.max(sum / 10, max),
+					`${Math.round(sum)} ms ${category}`
+				);
+			};
+			/**
+			 * @param {string} category a category
+			 * @param {(profile: ModuleProfile) => number} getDuration get duration callback
+			 * @param {(profile: ModuleProfile) => number} getParallelism get parallelism callback
+			 */
+			const logByLoadersSummary = (category, getDuration, getParallelism) => {
+				/** @type {Map} */
+				const map = new Map();
+				for (const [module, profile] of modulesWithProfiles) {
+					const list = getOrInsert(
+						map,
+						`${module.type}!${module.identifier().replace(/(!|^)[^!]*$/, "")}`,
+						() => []
+					);
+					list.push({ module, profile });
+				}
 
-		this.hooks.rebuildModule.call(module);
-		const oldDependencies = module.dependencies.slice();
-		const oldVariables = module.variables.slice();
-		const oldBlocks = module.blocks.slice();
-		module.unbuild();
-		this.buildModule(module, false, module, null, err => {
-			if (err) {
-				this.hooks.finishRebuildingModule.call(module);
-				return callback(err);
+				let sum = 0;
+				let max = 0;
+				for (const [key, modules] of map) {
+					let innerSum = 0;
+					let innerMax = 0;
+					for (const { module, profile } of modules) {
+						const p = getParallelism(profile);
+						const d = getDuration(profile);
+						if (d === 0 || p === 0) continue;
+						const t = d / p;
+						innerSum += t;
+						if (t <= 10) continue;
+						logByValue(
+							t,
+							` |  | ${Math.round(t)} ms${
+								p >= 1.1 ? ` (parallelism ${Math.round(p * 10) / 10})` : ""
+							} ${category} > ${module.readableIdentifier(
+								this.requestShortener
+							)}`
+						);
+						innerMax = Math.max(innerMax, t);
+					}
+					sum += innerSum;
+					if (innerSum <= 10) continue;
+					const idx = key.indexOf("!");
+					const loaders = key.slice(idx + 1);
+					const moduleType = key.slice(0, idx);
+					const t = Math.max(innerSum / 10, innerMax);
+					logByValue(
+						t,
+						` | ${Math.round(innerSum)} ms ${category} > ${
+							loaders
+								? `${
+										modules.length
+									} x ${moduleType} with ${this.requestShortener.shorten(
+										loaders
+									)}`
+								: `${modules.length} x ${moduleType}`
+						}`
+					);
+					max = Math.max(max, t);
+				}
+				if (sum <= 10) return;
+				logByValue(
+					Math.max(sum / 10, max),
+					`${Math.round(sum)} ms ${category}`
+				);
+			};
+			logNormalSummary(
+				"resolve to new modules",
+				(p) => p.factory,
+				(p) => p.factoryParallelismFactor
+			);
+			logNormalSummary(
+				"resolve to existing modules",
+				(p) => p.additionalFactories,
+				(p) => p.additionalFactoriesParallelismFactor
+			);
+			logNormalSummary(
+				"integrate modules",
+				(p) => p.restoring,
+				(p) => p.restoringParallelismFactor
+			);
+			logByLoadersSummary(
+				"build modules",
+				(p) => p.building,
+				(p) => p.buildingParallelismFactor
+			);
+			logNormalSummary(
+				"store modules",
+				(p) => p.storing,
+				(p) => p.storingParallelismFactor
+			);
+			logNormalSummary(
+				"restore modules",
+				(p) => p.restoring,
+				(p) => p.restoringParallelismFactor
+			);
+			this.logger.timeEnd("finish module profiles");
+		}
+		this.logger.time("compute affected modules");
+		this._computeAffectedModules(this.modules);
+		this.logger.timeEnd("compute affected modules");
+		this.logger.time("finish modules");
+		const { modules, moduleMemCaches } = this;
+		this.hooks.finishModules.callAsync(modules, (err) => {
+			this.logger.timeEnd("finish modules");
+			if (err) return callback(/** @type {WebpackError} */ (err));
+
+			// extract warnings and errors from modules
+			this.moduleGraph.freeze("dependency errors");
+			// TODO keep a cacheToken (= {}) for each module in the graph
+			// create a new one per compilation and flag all updated files
+			// and parents with it
+			this.logger.time("report dependency errors and warnings");
+			for (const module of modules) {
+				// TODO only run for modules with changed cacheToken
+				// global WeakMap> to keep modules without errors/warnings
+				const memCache = moduleMemCaches && moduleMemCaches.get(module);
+				if (memCache && memCache.get("noWarningsOrErrors")) continue;
+				let hasProblems = this.reportDependencyErrorsAndWarnings(module, [
+					module
+				]);
+				const errors = module.getErrors();
+				if (errors !== undefined) {
+					for (const error of errors) {
+						if (!error.module) {
+							error.module = module;
+						}
+						this.errors.push(error);
+						hasProblems = true;
+					}
+				}
+				const warnings = module.getWarnings();
+				if (warnings !== undefined) {
+					for (const warning of warnings) {
+						if (!warning.module) {
+							warning.module = module;
+						}
+						this.warnings.push(warning);
+						hasProblems = true;
+					}
+				}
+				if (!hasProblems && memCache) memCache.set("noWarningsOrErrors", true);
 			}
+			this.moduleGraph.unfreeze();
+			this.logger.timeEnd("report dependency errors and warnings");
 
-			this.processModuleDependencies(module, err => {
-				if (err) return callback(err);
-				this.removeReasonsOfDependencyBlock(module, {
-					dependencies: oldDependencies,
-					variables: oldVariables,
-					blocks: oldBlocks
-				});
-				this.hooks.finishRebuildingModule.call(module);
-				callback();
-			});
+			callback();
 		});
 	}
 
-	finish() {
-		const modules = this.modules;
-		this.hooks.finishModules.call(modules);
-
-		for (let index = 0; index < modules.length; index++) {
-			const module = modules[index];
-			this.reportDependencyErrorsAndWarnings(module, [module]);
-		}
-	}
-
 	unseal() {
 		this.hooks.unseal.call();
-		this.chunks.length = 0;
+		this.chunks.clear();
 		this.chunkGroups.length = 0;
 		this.namedChunks.clear();
 		this.namedChunkGroups.clear();
+		this.entrypoints.clear();
 		this.additionalChunkAssets.length = 0;
 		this.assets = {};
-		for (const module of this.modules) {
-			module.unseal();
-		}
+		this.assetsInfo.clear();
+		this.moduleGraph.removeAllModuleAttributes();
+		this.moduleGraph.unfreeze();
+		this.moduleMemCaches2 = undefined;
 	}
 
+	/**
+	 * @param {Callback} callback signals when the call finishes
+	 * @returns {void}
+	 */
 	seal(callback) {
+		/**
+		 * @param {WebpackError=} err err
+		 * @returns {void}
+		 */
+		const finalCallback = (err) => {
+			this.factorizeQueue.clear();
+			this.buildQueue.clear();
+			this.rebuildQueue.clear();
+			this.processDependenciesQueue.clear();
+			this.addModuleQueue.clear();
+			return callback(err);
+		};
+
+		if (this._backCompat) {
+			for (const module of this.modules) {
+				ChunkGraph.setChunkGraphForModule(module, this.chunkGraph);
+			}
+		}
+
 		this.hooks.seal.call();
 
-		while (
-			this.hooks.optimizeDependenciesBasic.call(this.modules) ||
-			this.hooks.optimizeDependencies.call(this.modules) ||
-			this.hooks.optimizeDependenciesAdvanced.call(this.modules)
-		) {
+		this.logger.time("optimize dependencies");
+		while (this.hooks.optimizeDependencies.call(this.modules)) {
 			/* empty */
 		}
 		this.hooks.afterOptimizeDependencies.call(this.modules);
-
-		this.nextFreeModuleIndex = 0;
-		this.nextFreeModuleIndex2 = 0;
-		for (const preparedEntrypoint of this._preparedEntrypoints) {
-			const module = preparedEntrypoint.module;
-			const name = preparedEntrypoint.name;
+		this.logger.timeEnd("optimize dependencies");
+
+		this.logger.time("create chunks");
+		this.hooks.beforeChunks.call();
+		this.moduleGraph.freeze("seal");
+		/** @type {Map} */
+		const chunkGraphInit = new Map();
+		for (const [name, { dependencies, includeDependencies, options }] of this
+			.entries) {
 			const chunk = this.addChunk(name);
-			const entrypoint = new Entrypoint(name);
-			entrypoint.setRuntimeChunk(chunk);
-			entrypoint.addOrigin(null, name, preparedEntrypoint.request);
+			if (options.filename) {
+				chunk.filenameTemplate = options.filename;
+			}
+			const entrypoint = new Entrypoint(options);
+			if (!options.dependOn && !options.runtime) {
+				entrypoint.setRuntimeChunk(chunk);
+			}
+			entrypoint.setEntrypointChunk(chunk);
 			this.namedChunkGroups.set(name, entrypoint);
 			this.entrypoints.set(name, entrypoint);
 			this.chunkGroups.push(entrypoint);
+			connectChunkGroupAndChunk(entrypoint, chunk);
+
+			/** @type {Set} */
+			const entryModules = new Set();
+			for (const dep of [...this.globalEntry.dependencies, ...dependencies]) {
+				entrypoint.addOrigin(
+					null,
+					{ name },
+					/** @type {Dependency & { request: string }} */
+					(dep).request
+				);
 
-			GraphHelpers.connectChunkGroupAndChunk(entrypoint, chunk);
-			GraphHelpers.connectChunkAndModule(chunk, module);
-
-			chunk.entryModule = module;
-			chunk.name = name;
+				const module = this.moduleGraph.getModule(dep);
+				if (module) {
+					this.chunkGraph.connectChunkAndEntryModule(chunk, module, entrypoint);
+					entryModules.add(module);
+					const modulesList = chunkGraphInit.get(entrypoint);
+					if (modulesList === undefined) {
+						chunkGraphInit.set(entrypoint, [module]);
+					} else {
+						modulesList.push(module);
+					}
+				}
+			}
 
-			this.assignIndex(module);
-			this.assignDepth(module);
+			this.assignDepths(entryModules);
+
+			/**
+			 * @param {Dependency[]} deps deps
+			 * @returns {Module[]} sorted deps
+			 */
+			const mapAndSort = (deps) =>
+				/** @type {Module[]} */
+				(
+					deps.map((dep) => this.moduleGraph.getModule(dep)).filter(Boolean)
+				).sort(compareModulesByIdentifier);
+			const includedModules = [
+				...mapAndSort(this.globalEntry.includeDependencies),
+				...mapAndSort(includeDependencies)
+			];
+
+			let modulesList = chunkGraphInit.get(entrypoint);
+			if (modulesList === undefined) {
+				chunkGraphInit.set(entrypoint, (modulesList = []));
+			}
+			for (const module of includedModules) {
+				this.assignDepths([module]);
+				modulesList.push(module);
+			}
+		}
+		/** @type {Set} */
+		const runtimeChunks = new Set();
+		outer: for (const [
+			name,
+			{
+				options: { dependOn, runtime }
+			}
+		] of this.entries) {
+			if (dependOn && runtime) {
+				const err =
+					new WebpackError(`Entrypoint '${name}' has 'dependOn' and 'runtime' specified. This is not valid.
+Entrypoints that depend on other entrypoints do not have their own runtime.
+They will use the runtime(s) from referenced entrypoints instead.
+Remove the 'runtime' option from the entrypoint.`);
+				const entry = /** @type {Entrypoint} */ (this.entrypoints.get(name));
+				err.chunk = entry.getEntrypointChunk();
+				this.errors.push(err);
+			}
+			if (dependOn) {
+				const entry = /** @type {Entrypoint} */ (this.entrypoints.get(name));
+				const referencedChunks = entry
+					.getEntrypointChunk()
+					.getAllReferencedChunks();
+				for (const dep of dependOn) {
+					const dependency = this.entrypoints.get(dep);
+					if (!dependency) {
+						throw new Error(
+							`Entry ${name} depends on ${dep}, but this entry was not found`
+						);
+					}
+					if (referencedChunks.has(dependency.getEntrypointChunk())) {
+						const err = new WebpackError(
+							`Entrypoints '${name}' and '${dep}' use 'dependOn' to depend on each other in a circular way.`
+						);
+						const entryChunk = entry.getEntrypointChunk();
+						err.chunk = entryChunk;
+						this.errors.push(err);
+						entry.setRuntimeChunk(entryChunk);
+						continue outer;
+					}
+					connectEntrypointAndDependOn(entry, dependency);
+					connectChunkGroupParentAndChild(dependency, entry);
+				}
+			} else if (runtime) {
+				const entry = /** @type {Entrypoint} */ (this.entrypoints.get(name));
+				let chunk = this.namedChunks.get(runtime);
+				if (chunk) {
+					if (!runtimeChunks.has(chunk)) {
+						const err =
+							new WebpackError(`Entrypoint '${name}' has a 'runtime' option which points to another entrypoint named '${runtime}'.
+It's not valid to use other entrypoints as runtime chunk.
+Did you mean to use 'dependOn: ${JSON.stringify(
+								runtime
+							)}' instead to allow using entrypoint '${name}' within the runtime of entrypoint '${runtime}'? For this '${runtime}' must always be loaded when '${name}' is used.
+Or do you want to use the entrypoints '${name}' and '${runtime}' independently on the same page with a shared runtime? In this case give them both the same value for the 'runtime' option. It must be a name not already used by an entrypoint.`);
+						const entryChunk =
+							/** @type {Chunk} */
+							(entry.getEntrypointChunk());
+						err.chunk = entryChunk;
+						this.errors.push(err);
+						entry.setRuntimeChunk(entryChunk);
+						continue;
+					}
+				} else {
+					chunk = this.addChunk(runtime);
+					chunk.preventIntegration = true;
+					runtimeChunks.add(chunk);
+				}
+				entry.unshiftChunk(chunk);
+				chunk.addGroup(entry);
+				entry.setRuntimeChunk(chunk);
+			}
 		}
-		this.processDependenciesBlocksForChunkGroups(this.chunkGroups.slice());
-		this.sortModules(this.modules);
+
+		buildChunkGraph(this, chunkGraphInit);
+		this.hooks.afterChunks.call(this.chunks);
+		this.logger.timeEnd("create chunks");
+
+		this.logger.time("optimize");
 		this.hooks.optimize.call();
 
-		while (
-			this.hooks.optimizeModulesBasic.call(this.modules) ||
-			this.hooks.optimizeModules.call(this.modules) ||
-			this.hooks.optimizeModulesAdvanced.call(this.modules)
-		) {
+		while (this.hooks.optimizeModules.call(this.modules)) {
 			/* empty */
 		}
 		this.hooks.afterOptimizeModules.call(this.modules);
 
-		while (
-			this.hooks.optimizeChunksBasic.call(this.chunks, this.chunkGroups) ||
-			this.hooks.optimizeChunks.call(this.chunks, this.chunkGroups) ||
-			this.hooks.optimizeChunksAdvanced.call(this.chunks, this.chunkGroups)
-		) {
+		while (this.hooks.optimizeChunks.call(this.chunks, this.chunkGroups)) {
 			/* empty */
 		}
 		this.hooks.afterOptimizeChunks.call(this.chunks, this.chunkGroups);
 
-		this.hooks.optimizeTree.callAsync(this.chunks, this.modules, err => {
+		this.hooks.optimizeTree.callAsync(this.chunks, this.modules, (err) => {
 			if (err) {
-				return callback(err);
+				return finalCallback(
+					makeWebpackError(err, "Compilation.hooks.optimizeTree")
+				);
 			}
 
 			this.hooks.afterOptimizeTree.call(this.chunks, this.modules);
 
-			while (
-				this.hooks.optimizeChunkModulesBasic.call(this.chunks, this.modules) ||
-				this.hooks.optimizeChunkModules.call(this.chunks, this.modules) ||
-				this.hooks.optimizeChunkModulesAdvanced.call(this.chunks, this.modules)
-			) {
-				/* empty */
-			}
-			this.hooks.afterOptimizeChunkModules.call(this.chunks, this.modules);
+			this.hooks.optimizeChunkModules.callAsync(
+				this.chunks,
+				this.modules,
+				(err) => {
+					if (err) {
+						return finalCallback(
+							makeWebpackError(err, "Compilation.hooks.optimizeChunkModules")
+						);
+					}
 
-			const shouldRecord = this.hooks.shouldRecord.call() !== false;
+					this.hooks.afterOptimizeChunkModules.call(this.chunks, this.modules);
 
-			this.hooks.reviveModules.call(this.modules, this.records);
-			this.hooks.optimizeModuleOrder.call(this.modules);
-			this.hooks.advancedOptimizeModuleOrder.call(this.modules);
-			this.hooks.beforeModuleIds.call(this.modules);
-			this.hooks.moduleIds.call(this.modules);
-			this.applyModuleIds();
-			this.hooks.optimizeModuleIds.call(this.modules);
-			this.hooks.afterOptimizeModuleIds.call(this.modules);
+					const shouldRecord = this.hooks.shouldRecord.call() !== false;
 
-			this.sortItemsWithModuleIds();
+					this.hooks.reviveModules.call(
+						this.modules,
+						/** @type {Records} */
+						(this.records)
+					);
+					this.hooks.beforeModuleIds.call(this.modules);
+					this.hooks.moduleIds.call(this.modules);
+					this.hooks.optimizeModuleIds.call(this.modules);
+					this.hooks.afterOptimizeModuleIds.call(this.modules);
+
+					this.hooks.reviveChunks.call(
+						this.chunks,
+						/** @type {Records} */
+						(this.records)
+					);
+					this.hooks.beforeChunkIds.call(this.chunks);
+					this.hooks.chunkIds.call(this.chunks);
+					this.hooks.optimizeChunkIds.call(this.chunks);
+					this.hooks.afterOptimizeChunkIds.call(this.chunks);
 
-			this.hooks.reviveChunks.call(this.chunks, this.records);
-			this.hooks.optimizeChunkOrder.call(this.chunks);
-			this.hooks.beforeChunkIds.call(this.chunks);
-			this.applyChunkIds();
-			this.hooks.optimizeChunkIds.call(this.chunks);
-			this.hooks.afterOptimizeChunkIds.call(this.chunks);
+					this.assignRuntimeIds();
 
-			this.sortItemsWithChunkIds();
+					this.logger.time("compute affected modules with chunk graph");
+					this._computeAffectedModulesWithChunkGraph();
+					this.logger.timeEnd("compute affected modules with chunk graph");
 
-			if (shouldRecord) {
-				this.hooks.recordModules.call(this.modules, this.records);
-				this.hooks.recordChunks.call(this.chunks, this.records);
-			}
+					this.sortItemsWithChunkIds();
 
-			this.hooks.beforeHash.call();
-			this.createHash();
-			this.hooks.afterHash.call();
+					if (shouldRecord) {
+						this.hooks.recordModules.call(
+							this.modules,
+							/** @type {Records} */
+							(this.records)
+						);
+						this.hooks.recordChunks.call(
+							this.chunks,
+							/** @type {Records} */
+							(this.records)
+						);
+					}
 
-			if (shouldRecord) {
-				this.hooks.recordHash.call(this.records);
-			}
+					this.hooks.optimizeCodeGeneration.call(this.modules);
+					this.logger.timeEnd("optimize");
 
-			this.hooks.beforeModuleAssets.call();
-			this.createModuleAssets();
-			if (this.hooks.shouldGenerateChunkAssets.call() !== false) {
-				this.hooks.beforeChunkAssets.call();
-				this.createChunkAssets();
-			}
-			this.hooks.additionalChunkAssets.call(this.chunks);
-			this.summarizeDependencies();
-			if (shouldRecord) {
-				this.hooks.record.call(this, this.records);
-			}
+					this.logger.time("module hashing");
+					this.hooks.beforeModuleHash.call();
+					this.createModuleHashes();
+					this.hooks.afterModuleHash.call();
+					this.logger.timeEnd("module hashing");
 
-			this.hooks.additionalAssets.callAsync(err => {
-				if (err) {
-					return callback(err);
-				}
-				this.hooks.optimizeChunkAssets.callAsync(this.chunks, err => {
-					if (err) {
-						return callback(err);
-					}
-					this.hooks.afterOptimizeChunkAssets.call(this.chunks);
-					this.hooks.optimizeAssets.callAsync(this.assets, err => {
+					this.logger.time("code generation");
+					this.hooks.beforeCodeGeneration.call();
+					this.codeGeneration((err) => {
 						if (err) {
-							return callback(err);
-						}
-						this.hooks.afterOptimizeAssets.call(this.assets);
-						if (this.hooks.needAdditionalSeal.call()) {
-							this.unseal();
-							return this.seal(callback);
+							return finalCallback(err);
 						}
-						return this.hooks.afterSeal.callAsync(callback);
+						this.hooks.afterCodeGeneration.call();
+						this.logger.timeEnd("code generation");
+
+						this.logger.time("runtime requirements");
+						this.hooks.beforeRuntimeRequirements.call();
+						this.processRuntimeRequirements();
+						this.hooks.afterRuntimeRequirements.call();
+						this.logger.timeEnd("runtime requirements");
+
+						this.logger.time("hashing");
+						this.hooks.beforeHash.call();
+						const codeGenerationJobs = this.createHash();
+						this.hooks.afterHash.call();
+						this.logger.timeEnd("hashing");
+
+						this._runCodeGenerationJobs(codeGenerationJobs, (err) => {
+							if (err) {
+								return finalCallback(err);
+							}
+
+							if (shouldRecord) {
+								this.logger.time("record hash");
+								this.hooks.recordHash.call(
+									/** @type {Records} */
+									(this.records)
+								);
+								this.logger.timeEnd("record hash");
+							}
+
+							this.logger.time("module assets");
+							this.clearAssets();
+
+							this.hooks.beforeModuleAssets.call();
+							this.createModuleAssets();
+							this.logger.timeEnd("module assets");
+
+							const cont = () => {
+								this.logger.time("process assets");
+								this.hooks.processAssets.callAsync(this.assets, (err) => {
+									if (err) {
+										return finalCallback(
+											makeWebpackError(err, "Compilation.hooks.processAssets")
+										);
+									}
+									this.hooks.afterProcessAssets.call(this.assets);
+									this.logger.timeEnd("process assets");
+									this.assets =
+										/** @type {CompilationAssets} */
+										(
+											this._backCompat
+												? soonFrozenObjectDeprecation(
+														this.assets,
+														"Compilation.assets",
+														"DEP_WEBPACK_COMPILATION_ASSETS",
+														`BREAKING CHANGE: No more changes should happen to Compilation.assets after sealing the Compilation.
+	Do changes to assets earlier, e. g. in Compilation.hooks.processAssets.
+	Make sure to select an appropriate stage from Compilation.PROCESS_ASSETS_STAGE_*.`
+													)
+												: Object.freeze(this.assets)
+										);
+
+									this.summarizeDependencies();
+									if (shouldRecord) {
+										this.hooks.record.call(
+											this,
+											/** @type {Records} */
+											(this.records)
+										);
+									}
+
+									if (this.hooks.needAdditionalSeal.call()) {
+										this.unseal();
+										return this.seal(callback);
+									}
+									return this.hooks.afterSeal.callAsync((err) => {
+										if (err) {
+											return finalCallback(
+												makeWebpackError(err, "Compilation.hooks.afterSeal")
+											);
+										}
+										this.fileSystemInfo.logStatistics();
+										finalCallback();
+									});
+								});
+							};
+
+							this.logger.time("create chunk assets");
+							if (this.hooks.shouldGenerateChunkAssets.call() !== false) {
+								this.hooks.beforeChunkAssets.call();
+								this.createChunkAssets((err) => {
+									this.logger.timeEnd("create chunk assets");
+									if (err) {
+										return finalCallback(err);
+									}
+									cont();
+								});
+							} else {
+								this.logger.timeEnd("create chunk assets");
+								cont();
+							}
+						});
 					});
-				});
-			});
+				}
+			);
 		});
 	}
 
-	sortModules(modules) {
-		modules.sort(byIndexOrIdentifier);
-	}
-
+	/**
+	 * @param {Module} module module to report from
+	 * @param {DependenciesBlock[]} blocks blocks to report from
+	 * @returns {boolean} true, when it has warnings or errors
+	 */
 	reportDependencyErrorsAndWarnings(module, blocks) {
-		for (let indexBlock = 0; indexBlock < blocks.length; indexBlock++) {
-			const block = blocks[indexBlock];
+		let hasProblems = false;
+		for (const block of blocks) {
 			const dependencies = block.dependencies;
 
-			for (let indexDep = 0; indexDep < dependencies.length; indexDep++) {
-				const d = dependencies[indexDep];
-
-				const warnings = d.getWarnings();
+			for (const d of dependencies) {
+				const warnings = d.getWarnings(this.moduleGraph);
 				if (warnings) {
-					for (let indexWar = 0; indexWar < warnings.length; indexWar++) {
-						const w = warnings[indexWar];
-
+					for (const w of warnings) {
 						const warning = new ModuleDependencyWarning(module, w, d.loc);
 						this.warnings.push(warning);
+						hasProblems = true;
 					}
 				}
-				const errors = d.getErrors();
+				const errors = d.getErrors(this.moduleGraph);
 				if (errors) {
-					for (let indexErr = 0; indexErr < errors.length; indexErr++) {
-						const e = errors[indexErr];
-
+					for (const e of errors) {
 						const error = new ModuleDependencyError(module, e, d.loc);
 						this.errors.push(error);
+						hasProblems = true;
+					}
+				}
+			}
+
+			if (this.reportDependencyErrorsAndWarnings(module, block.blocks)) {
+				hasProblems = true;
+			}
+		}
+		return hasProblems;
+	}
+
+	/**
+	 * @param {Callback} callback callback
+	 */
+	codeGeneration(callback) {
+		const { chunkGraph } = this;
+		this.codeGenerationResults = new CodeGenerationResults(
+			this.outputOptions.hashFunction
+		);
+		/** @type {CodeGenerationJobs} */
+		const jobs = [];
+		for (const module of this.modules) {
+			const runtimes = chunkGraph.getModuleRuntimes(module);
+			if (runtimes.size === 1) {
+				for (const runtime of runtimes) {
+					const hash = chunkGraph.getModuleHash(module, runtime);
+					jobs.push({ module, hash, runtime, runtimes: [runtime] });
+				}
+			} else if (runtimes.size > 1) {
+				/** @type {Map} */
+				const map = new Map();
+				for (const runtime of runtimes) {
+					const hash = chunkGraph.getModuleHash(module, runtime);
+					const job = map.get(hash);
+					if (job === undefined) {
+						const newJob = { module, hash, runtime, runtimes: [runtime] };
+						jobs.push(newJob);
+						map.set(hash, newJob);
+					} else {
+						job.runtimes.push(runtime);
+					}
+				}
+			}
+		}
+
+		this._runCodeGenerationJobs(jobs, callback);
+	}
+
+	/**
+	 * @private
+	 * @param {CodeGenerationJobs} jobs code generation jobs
+	 * @param {Callback} callback callback
+	 * @returns {void}
+	 */
+	_runCodeGenerationJobs(jobs, callback) {
+		if (jobs.length === 0) {
+			return callback();
+		}
+		let statModulesFromCache = 0;
+		let statModulesGenerated = 0;
+		const { chunkGraph, moduleGraph, dependencyTemplates, runtimeTemplate } =
+			this;
+		const results =
+			/** @type {CodeGenerationResults} */
+			(this.codeGenerationResults);
+		/** @type {WebpackError[]} */
+		const errors = [];
+		/** @type {NotCodeGeneratedModules | undefined} */
+		let notCodeGeneratedModules;
+		const runIteration = () => {
+			/** @type {CodeGenerationJobs} */
+			let delayedJobs = [];
+			/** @type {Set} */
+			let delayedModules = new Set();
+			asyncLib.eachLimit(
+				jobs,
+				this.options.parallelism,
+				(job, callback) => {
+					const { module } = job;
+					const { codeGenerationDependencies } = module;
+					if (
+						codeGenerationDependencies !== undefined &&
+						(notCodeGeneratedModules === undefined ||
+							codeGenerationDependencies.some((dep) => {
+								const referencedModule = /** @type {Module} */ (
+									moduleGraph.getModule(dep)
+								);
+								return /** @type {NotCodeGeneratedModules} */ (
+									notCodeGeneratedModules
+								).has(referencedModule);
+							}))
+					) {
+						delayedJobs.push(job);
+						delayedModules.add(module);
+						return callback();
+					}
+					const { hash, runtime, runtimes } = job;
+					this._codeGenerationModule(
+						module,
+						runtime,
+						runtimes,
+						hash,
+						dependencyTemplates,
+						chunkGraph,
+						moduleGraph,
+						runtimeTemplate,
+						errors,
+						results,
+						(err, codeGenerated) => {
+							if (codeGenerated) statModulesGenerated++;
+							else statModulesFromCache++;
+							callback(err);
+						}
+					);
+				},
+				(err) => {
+					if (err) return callback(/** @type {WebpackError} */ (err));
+					if (delayedJobs.length > 0) {
+						if (delayedJobs.length === jobs.length) {
+							return callback(
+								/** @type {WebpackError} */ (
+									new Error(
+										`Unable to make progress during code generation because of circular code generation dependency: ${Array.from(
+											delayedModules,
+											(m) => m.identifier()
+										).join(", ")}`
+									)
+								)
+							);
+						}
+						jobs = delayedJobs;
+						delayedJobs = [];
+						notCodeGeneratedModules = delayedModules;
+						delayedModules = new Set();
+						return runIteration();
+					}
+					if (errors.length > 0) {
+						errors.sort(
+							compareSelect((err) => err.module, compareModulesByIdentifier)
+						);
+						for (const error of errors) {
+							this.errors.push(error);
+						}
+					}
+					this.logger.log(
+						`${Math.round(
+							(100 * statModulesGenerated) /
+								(statModulesGenerated + statModulesFromCache)
+						)}% code generated (${statModulesGenerated} generated, ${statModulesFromCache} from cache)`
+					);
+					callback();
+				}
+			);
+		};
+		runIteration();
+	}
+
+	/**
+	 * @param {Module} module module
+	 * @param {RuntimeSpec} runtime runtime
+	 * @param {RuntimeSpec[]} runtimes runtimes
+	 * @param {string} hash hash
+	 * @param {DependencyTemplates} dependencyTemplates dependencyTemplates
+	 * @param {ChunkGraph} chunkGraph chunkGraph
+	 * @param {ModuleGraph} moduleGraph moduleGraph
+	 * @param {RuntimeTemplate} runtimeTemplate runtimeTemplate
+	 * @param {WebpackError[]} errors errors
+	 * @param {CodeGenerationResults} results results
+	 * @param {(err?: WebpackError | null, result?: boolean) => void} callback callback
+	 */
+	_codeGenerationModule(
+		module,
+		runtime,
+		runtimes,
+		hash,
+		dependencyTemplates,
+		chunkGraph,
+		moduleGraph,
+		runtimeTemplate,
+		errors,
+		results,
+		callback
+	) {
+		let codeGenerated = false;
+		const cache = new MultiItemCache(
+			runtimes.map((runtime) =>
+				this._codeGenerationCache.getItemCache(
+					`${module.identifier()}|${getRuntimeKey(runtime)}`,
+					`${hash}|${dependencyTemplates.getHash()}`
+				)
+			)
+		);
+		cache.get((err, cachedResult) => {
+			if (err) return callback(/** @type {WebpackError} */ (err));
+			/** @type {CodeGenerationResult} */
+			let result;
+			if (!cachedResult) {
+				try {
+					codeGenerated = true;
+					this.codeGeneratedModules.add(module);
+					result = module.codeGeneration({
+						chunkGraph,
+						moduleGraph,
+						dependencyTemplates,
+						runtimeTemplate,
+						runtime,
+						runtimes,
+						codeGenerationResults: results,
+						compilation: this
+					});
+				} catch (err) {
+					errors.push(
+						new CodeGenerationError(module, /** @type {Error} */ (err))
+					);
+					result = cachedResult = {
+						sources: new Map(),
+						runtimeRequirements: null
+					};
+				}
+			} else {
+				result = cachedResult;
+			}
+			for (const runtime of runtimes) {
+				results.add(module, runtime, result);
+			}
+			if (!cachedResult) {
+				cache.store(result, (err) =>
+					callback(/** @type {WebpackError} */ (err), codeGenerated)
+				);
+			} else {
+				callback(null, codeGenerated);
+			}
+		});
+	}
+
+	_getChunkGraphEntries() {
+		/** @type {Set} */
+		const treeEntries = new Set();
+		for (const ep of this.entrypoints.values()) {
+			const chunk = ep.getRuntimeChunk();
+			if (chunk) treeEntries.add(chunk);
+		}
+		for (const ep of this.asyncEntrypoints) {
+			const chunk = ep.getRuntimeChunk();
+			if (chunk) treeEntries.add(chunk);
+		}
+		return treeEntries;
+	}
+
+	/**
+	 * @param {object} options options
+	 * @param {ChunkGraph=} options.chunkGraph the chunk graph
+	 * @param {Iterable=} options.modules modules
+	 * @param {Iterable=} options.chunks chunks
+	 * @param {CodeGenerationResults=} options.codeGenerationResults codeGenerationResults
+	 * @param {Iterable=} options.chunkGraphEntries chunkGraphEntries
+	 * @returns {void}
+	 */
+	processRuntimeRequirements({
+		chunkGraph = this.chunkGraph,
+		modules = this.modules,
+		chunks = this.chunks,
+		codeGenerationResults = /** @type {CodeGenerationResults} */ (
+			this.codeGenerationResults
+		),
+		chunkGraphEntries = this._getChunkGraphEntries()
+	} = {}) {
+		const context = { chunkGraph, codeGenerationResults };
+		const { moduleMemCaches2 } = this;
+		this.logger.time("runtime requirements.modules");
+		const additionalModuleRuntimeRequirements =
+			this.hooks.additionalModuleRuntimeRequirements;
+		const runtimeRequirementInModule = this.hooks.runtimeRequirementInModule;
+		for (const module of modules) {
+			if (chunkGraph.getNumberOfModuleChunks(module) > 0) {
+				const memCache = moduleMemCaches2 && moduleMemCaches2.get(module);
+				for (const runtime of chunkGraph.getModuleRuntimes(module)) {
+					if (memCache) {
+						const cached = memCache.get(
+							`moduleRuntimeRequirements-${getRuntimeKey(runtime)}`
+						);
+						if (cached !== undefined) {
+							if (cached !== null) {
+								chunkGraph.addModuleRuntimeRequirements(
+									module,
+									runtime,
+									/** @type {RuntimeRequirements} */
+									(cached),
+									false
+								);
+							}
+							continue;
+						}
+					}
+					/** @type {RuntimeRequirements} */
+					let set;
+					const runtimeRequirements =
+						codeGenerationResults.getRuntimeRequirements(module, runtime);
+					if (runtimeRequirements && runtimeRequirements.size > 0) {
+						set = new Set(runtimeRequirements);
+					} else if (additionalModuleRuntimeRequirements.isUsed()) {
+						set = new Set();
+					} else {
+						if (memCache) {
+							memCache.set(
+								`moduleRuntimeRequirements-${getRuntimeKey(runtime)}`,
+								null
+							);
+						}
+						continue;
+					}
+					additionalModuleRuntimeRequirements.call(module, set, context);
+
+					for (const r of set) {
+						const hook = runtimeRequirementInModule.get(r);
+						if (hook !== undefined) hook.call(module, set, context);
+					}
+					if (set.size === 0) {
+						if (memCache) {
+							memCache.set(
+								`moduleRuntimeRequirements-${getRuntimeKey(runtime)}`,
+								null
+							);
+						}
+					} else if (memCache) {
+						memCache.set(
+							`moduleRuntimeRequirements-${getRuntimeKey(runtime)}`,
+							set
+						);
+						chunkGraph.addModuleRuntimeRequirements(
+							module,
+							runtime,
+							set,
+							false
+						);
+					} else {
+						chunkGraph.addModuleRuntimeRequirements(module, runtime, set);
 					}
 				}
 			}
+		}
+		this.logger.timeEnd("runtime requirements.modules");
+
+		this.logger.time("runtime requirements.chunks");
+		for (const chunk of chunks) {
+			/** @type {RuntimeRequirements} */
+			const set = new Set();
+			for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
+				const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
+					module,
+					chunk.runtime
+				);
+				for (const r of runtimeRequirements) set.add(r);
+			}
+			this.hooks.additionalChunkRuntimeRequirements.call(chunk, set, context);
+
+			for (const r of set) {
+				this.hooks.runtimeRequirementInChunk.for(r).call(chunk, set, context);
+			}
+
+			chunkGraph.addChunkRuntimeRequirements(chunk, set);
+		}
+		this.logger.timeEnd("runtime requirements.chunks");
+
+		this.logger.time("runtime requirements.entries");
+		for (const treeEntry of chunkGraphEntries) {
+			/** @type {RuntimeRequirements} */
+			const set = new Set();
+			for (const chunk of treeEntry.getAllReferencedChunks()) {
+				const runtimeRequirements =
+					chunkGraph.getChunkRuntimeRequirements(chunk);
+				for (const r of runtimeRequirements) set.add(r);
+			}
+
+			this.hooks.additionalTreeRuntimeRequirements.call(
+				treeEntry,
+				set,
+				context
+			);
+
+			for (const r of set) {
+				this.hooks.runtimeRequirementInTree
+					.for(r)
+					.call(treeEntry, set, context);
+			}
+
+			chunkGraph.addTreeRuntimeRequirements(treeEntry, set);
+		}
+		this.logger.timeEnd("runtime requirements.entries");
+	}
+
+	// TODO webpack 6 make chunkGraph argument non-optional
+	/**
+	 * @param {Chunk} chunk target chunk
+	 * @param {RuntimeModule} module runtime module
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {void}
+	 */
+	addRuntimeModule(chunk, module, chunkGraph = this.chunkGraph) {
+		// Deprecated ModuleGraph association
+		if (this._backCompat) {
+			ModuleGraph.setModuleGraphForModule(module, this.moduleGraph);
+		}
+
+		// add it to the list
+		this.modules.add(module);
+		this._modules.set(module.identifier(), module);
+
+		// connect to the chunk graph
+		chunkGraph.connectChunkAndModule(chunk, module);
+		chunkGraph.connectChunkAndRuntimeModule(chunk, module);
+		if (module.fullHash) {
+			chunkGraph.addFullHashModuleToChunk(chunk, module);
+		} else if (module.dependentHash) {
+			chunkGraph.addDependentHashModuleToChunk(chunk, module);
+		}
+
+		// attach runtime module
+		module.attach(this, chunk, chunkGraph);
 
-			this.reportDependencyErrorsAndWarnings(module, block.blocks);
+		// Setup internals
+		const exportsInfo = this.moduleGraph.getExportsInfo(module);
+		exportsInfo.setHasProvideInfo();
+		if (typeof chunk.runtime === "string") {
+			exportsInfo.setUsedForSideEffectsOnly(chunk.runtime);
+		} else if (chunk.runtime === undefined) {
+			exportsInfo.setUsedForSideEffectsOnly(undefined);
+		} else {
+			for (const runtime of chunk.runtime) {
+				exportsInfo.setUsedForSideEffectsOnly(runtime);
+			}
 		}
+		chunkGraph.addModuleRuntimeRequirements(
+			module,
+			chunk.runtime,
+			new Set([RuntimeGlobals.requireScope])
+		);
+
+		// runtime modules don't need ids
+		chunkGraph.setModuleId(module, "");
+
+		// Call hook
+		this.hooks.runtimeModule.call(module, chunk);
 	}
 
+	/**
+	 * If `module` is passed, `loc` and `request` must also be passed.
+	 * @param {string | ChunkGroupOptions} groupOptions options for the chunk group
+	 * @param {Module=} module the module the references the chunk group
+	 * @param {DependencyLocation=} loc the location from with the chunk group is referenced (inside of module)
+	 * @param {string=} request the request from which the chunk group is referenced
+	 * @returns {ChunkGroup} the new or existing chunk group
+	 */
 	addChunkInGroup(groupOptions, module, loc, request) {
 		if (typeof groupOptions === "string") {
 			groupOptions = { name: groupOptions };
@@ -1034,18 +4041,31 @@ class Compilation extends Tapable {
 		if (name) {
 			const chunkGroup = this.namedChunkGroups.get(name);
 			if (chunkGroup !== undefined) {
-				chunkGroup.addOptions(groupOptions);
 				if (module) {
-					chunkGroup.addOrigin(module, loc, request);
+					chunkGroup.addOrigin(
+						module,
+						/** @type {DependencyLocation} */
+						(loc),
+						/** @type {string} */
+						(request)
+					);
 				}
 				return chunkGroup;
 			}
 		}
 		const chunkGroup = new ChunkGroup(groupOptions);
-		if (module) chunkGroup.addOrigin(module, loc, request);
+		if (module) {
+			chunkGroup.addOrigin(
+				module,
+				/** @type {DependencyLocation} */
+				(loc),
+				/** @type {string} */
+				(request)
+			);
+		}
 		const chunk = this.addChunk(name);
 
-		GraphHelpers.connectChunkGroupAndChunk(chunkGroup, chunk);
+		connectChunkGroupAndChunk(chunkGroup, chunk);
 
 		this.chunkGroups.push(chunkGroup);
 		if (name) {
@@ -1054,6 +4074,53 @@ class Compilation extends Tapable {
 		return chunkGroup;
 	}
 
+	/**
+	 * @param {EntryOptions} options options for the entrypoint
+	 * @param {Module} module the module the references the chunk group
+	 * @param {DependencyLocation} loc the location from with the chunk group is referenced (inside of module)
+	 * @param {string} request the request from which the chunk group is referenced
+	 * @returns {Entrypoint} the new or existing entrypoint
+	 */
+	addAsyncEntrypoint(options, module, loc, request) {
+		const name = options.name;
+		if (name) {
+			const entrypoint = this.namedChunkGroups.get(name);
+			if (entrypoint instanceof Entrypoint) {
+				if (module) {
+					entrypoint.addOrigin(module, loc, request);
+				}
+				return entrypoint;
+			} else if (entrypoint) {
+				throw new Error(
+					`Cannot add an async entrypoint with the name '${name}', because there is already an chunk group with this name`
+				);
+			}
+		}
+		const chunk = this.addChunk(name);
+		if (options.filename) {
+			chunk.filenameTemplate = options.filename;
+		}
+		const entrypoint = new Entrypoint(options, false);
+		entrypoint.setRuntimeChunk(chunk);
+		entrypoint.setEntrypointChunk(chunk);
+		if (name) {
+			this.namedChunkGroups.set(name, entrypoint);
+		}
+		this.chunkGroups.push(entrypoint);
+		this.asyncEntrypoints.push(entrypoint);
+		connectChunkGroupAndChunk(entrypoint, chunk);
+		if (module) {
+			entrypoint.addOrigin(module, loc, request);
+		}
+		return entrypoint;
+	}
+
+	/**
+	 * This method first looks to see if a name is provided for a new chunk,
+	 * and first looks to see if any named chunks already exist and reuse that chunk instead.
+	 * @param {ChunkName=} name optional chunk name to be provided
+	 * @returns {Chunk} create a chunk (invoked during seal event)
+	 */
 	addChunk(name) {
 		if (name) {
 			const chunk = this.namedChunks.get(name);
@@ -1061,831 +4128,1188 @@ class Compilation extends Tapable {
 				return chunk;
 			}
 		}
-		const chunk = new Chunk(name);
-		this.chunks.push(chunk);
+		const chunk = new Chunk(name, this._backCompat);
+		this.chunks.add(chunk);
+		if (this._backCompat) {
+			ChunkGraph.setChunkGraphForChunk(chunk, this.chunkGraph);
+		}
 		if (name) {
 			this.namedChunks.set(name, chunk);
 		}
 		return chunk;
 	}
 
-	assignIndex(module) {
-		const assignIndexToModule = module => {
-			// enter module
-			if (typeof module.index !== "number") {
-				module.index = this.nextFreeModuleIndex++;
+	/**
+	 * @deprecated
+	 * @param {Module} module module to assign depth
+	 * @returns {void}
+	 */
+	assignDepth(module) {
+		const moduleGraph = this.moduleGraph;
 
-				// leave module
-				queue.push(() => (module.index2 = this.nextFreeModuleIndex2++));
+		const queue = new Set([module]);
+		/** @type {number} */
+		let depth;
 
-				// enter it as block
-				assignIndexToDependencyBlock(module);
-			}
-		};
+		moduleGraph.setDepth(module, 0);
 
-		const assignIndexToDependency = dependency => {
-			if (dependency.module) {
-				queue.push(() => assignIndexToModule(dependency.module));
-			}
+		/**
+		 * @param {Module} module module for processing
+		 * @returns {void}
+		 */
+		const processModule = (module) => {
+			if (!moduleGraph.setDepthIfLower(module, depth)) return;
+			queue.add(module);
 		};
 
-		const assignIndexToDependencyBlock = block => {
-			let allDependencies = [];
-
-			const iteratorDependency = d => allDependencies.push(d);
-
-			const iteratorBlock = b =>
-				queue.push(() => assignIndexToDependencyBlock(b));
-
-			if (block.variables) {
-				iterationBlockVariable(block.variables, iteratorDependency);
-			}
+		for (module of queue) {
+			queue.delete(module);
+			depth = /** @type {number} */ (moduleGraph.getDepth(module)) + 1;
 
-			if (block.dependencies) {
-				iterationOfArrayCallback(block.dependencies, iteratorDependency);
-			}
-			if (block.blocks) {
-				const blocks = block.blocks;
-				let indexBlock = blocks.length;
-				while (indexBlock--) {
-					iteratorBlock(blocks[indexBlock]);
+			for (const connection of moduleGraph.getOutgoingConnections(module)) {
+				const refModule = connection.module;
+				if (refModule) {
+					processModule(refModule);
 				}
 			}
+		}
+	}
 
-			let indexAll = allDependencies.length;
-			while (indexAll--) {
-				iteratorAllDependencies(allDependencies[indexAll]);
+	/**
+	 * @param {Module[] | Set} modules module to assign depth
+	 * @returns {void}
+	 */
+	assignDepths(modules) {
+		const moduleGraph = this.moduleGraph;
+
+		/** @type {Set} */
+		const queue = new Set(modules);
+		// Track these in local variables so that queue only has one data type
+		let nextDepthAt = queue.size;
+		let depth = 0;
+
+		let i = 0;
+		for (const module of queue) {
+			moduleGraph.setDepth(module, depth);
+			// Some of these results come from cache, which speeds this up
+			const connections = moduleGraph.getOutgoingConnectionsByModule(module);
+			// connections will be undefined if there are no outgoing connections
+			if (connections) {
+				for (const refModule of connections.keys()) {
+					if (refModule) queue.add(refModule);
+				}
 			}
-		};
-
-		const queue = [
-			() => {
-				assignIndexToModule(module);
+			i++;
+			// Since this is a breadth-first search, all modules added to the queue
+			// while at depth N will be depth N+1
+			if (i >= nextDepthAt) {
+				depth++;
+				nextDepthAt = queue.size;
 			}
-		];
-
-		const iteratorAllDependencies = d => {
-			queue.push(() => assignIndexToDependency(d));
-		};
-
-		while (queue.length) {
-			queue.pop()();
 		}
 	}
 
-	assignDepth(module) {
-		const queue = new Set([module]);
-		let depth;
-
-		module.depth = 0;
-
-		const enqueueJob = module => {
-			const d = module.depth;
-			if (typeof d === "number" && d <= depth) return;
-			queue.add(module);
-			module.depth = depth;
-		};
+	/**
+	 * @param {Dependency} dependency the dependency
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {ReferencedExports} referenced exports
+	 */
+	getDependencyReferencedExports(dependency, runtime) {
+		const referencedExports = dependency.getReferencedExports(
+			this.moduleGraph,
+			runtime
+		);
+		return this.hooks.dependencyReferencedExports.call(
+			referencedExports,
+			dependency,
+			runtime
+		);
+	}
 
-		const assignDepthToDependency = (dependency, depth) => {
-			if (dependency.module) {
-				enqueueJob(dependency.module);
+	/**
+	 * @param {Module} module module relationship for removal
+	 * @param {DependenciesBlockLike} block dependencies block
+	 * @returns {void}
+	 */
+	removeReasonsOfDependencyBlock(module, block) {
+		if (block.blocks) {
+			for (const b of block.blocks) {
+				this.removeReasonsOfDependencyBlock(module, b);
 			}
-		};
+		}
 
-		const assignDepthToDependencyBlock = block => {
-			if (block.variables) {
-				iterationBlockVariable(block.variables, assignDepthToDependency);
+		if (block.dependencies) {
+			for (const dep of block.dependencies) {
+				const originalModule = this.moduleGraph.getModule(dep);
+				if (originalModule) {
+					this.moduleGraph.removeConnection(dep);
+
+					if (this.chunkGraph) {
+						for (const chunk of this.chunkGraph.getModuleChunks(
+							originalModule
+						)) {
+							this.patchChunksAfterReasonRemoval(originalModule, chunk);
+						}
+					}
+				}
 			}
+		}
+	}
 
-			if (block.dependencies) {
-				iterationOfArrayCallback(block.dependencies, assignDepthToDependency);
-			}
+	/**
+	 * @param {Module} module module to patch tie
+	 * @param {Chunk} chunk chunk to patch tie
+	 * @returns {void}
+	 */
+	patchChunksAfterReasonRemoval(module, chunk) {
+		if (!module.hasReasons(this.moduleGraph, chunk.runtime)) {
+			this.removeReasonsOfDependencyBlock(module, module);
+		}
+		if (
+			!module.hasReasonForChunk(chunk, this.moduleGraph, this.chunkGraph) &&
+			this.chunkGraph.isModuleInChunk(module, chunk)
+		) {
+			this.chunkGraph.disconnectChunkAndModule(chunk, module);
+			this.removeChunkFromDependencies(module, chunk);
+		}
+	}
 
-			if (block.blocks) {
-				iterationOfArrayCallback(block.blocks, assignDepthToDependencyBlock);
+	/**
+	 * @param {DependenciesBlock} block block tie for Chunk
+	 * @param {Chunk} chunk chunk to remove from dep
+	 * @returns {void}
+	 */
+	removeChunkFromDependencies(block, chunk) {
+		/**
+		 * @param {Dependency} d dependency to (maybe) patch up
+		 */
+		const iteratorDependency = (d) => {
+			const depModule = this.moduleGraph.getModule(d);
+			if (!depModule) {
+				return;
 			}
+			this.patchChunksAfterReasonRemoval(depModule, chunk);
 		};
 
-		for (module of queue) {
-			queue.delete(module);
-			depth = module.depth;
+		const blocks = block.blocks;
+		for (const asyncBlock of blocks) {
+			const chunkGroup =
+				/** @type {ChunkGroup} */
+				(this.chunkGraph.getBlockChunkGroup(asyncBlock));
+			// Grab all chunks from the first Block's AsyncDepBlock
+			const chunks = chunkGroup.chunks;
+			// For each chunk in chunkGroup
+			for (const iteratedChunk of chunks) {
+				chunkGroup.removeChunk(iteratedChunk);
+				// Recurse
+				this.removeChunkFromDependencies(block, iteratedChunk);
+			}
+		}
 
-			depth++;
-			assignDepthToDependencyBlock(module);
+		if (block.dependencies) {
+			for (const dep of block.dependencies) iteratorDependency(dep);
 		}
 	}
 
-	// This method creates the Chunk graph from the Module graph
-	processDependenciesBlocksForChunkGroups(inputChunkGroups) {
-		// Process is splitting into two parts:
-		// Part one traverse the module graph and builds a very basic chunks graph
-		//   in chunkDependencies.
-		// Part two traverse every possible way through the basic chunk graph and
-		//   tracks the available modules. While traversing it connects chunks with
-		//   eachother and Blocks with Chunks. It stops traversing when all modules
-		//   for a chunk are already available. So it doesn't connect unneeded chunks.
-
-		const chunkDependencies = new Map(); // Map>
-		const allCreatedChunkGroups = new Set();
-
-		// PREPARE
-		const blockInfoMap = new Map();
+	assignRuntimeIds() {
+		const { chunkGraph } = this;
+		/**
+		 * @param {Entrypoint} ep an entrypoint
+		 */
+		const processEntrypoint = (ep) => {
+			const runtime = /** @type {string} */ (ep.options.runtime || ep.name);
+			const chunk = /** @type {Chunk} */ (ep.getRuntimeChunk());
+			chunkGraph.setRuntimeId(runtime, /** @type {ChunkId} */ (chunk.id));
+		};
+		for (const ep of this.entrypoints.values()) {
+			processEntrypoint(ep);
+		}
+		for (const ep of this.asyncEntrypoints) {
+			processEntrypoint(ep);
+		}
+	}
 
-		const iteratorDependency = d => {
-			// We skip Dependencies without Reference
-			const ref = d.getReference();
-			if (!ref) {
-				return;
-			}
-			// We skip Dependencies without Module pointer
-			const refModule = ref.module;
-			if (!refModule) {
-				return;
-			}
-			// We skip weak Dependencies
-			if (ref.weak) {
-				return;
-			}
+	sortItemsWithChunkIds() {
+		for (const chunkGroup of this.chunkGroups) {
+			chunkGroup.sortItems();
+		}
 
-			blockInfoModules.add(refModule);
-		};
+		this.errors.sort(compareErrors);
+		this.warnings.sort(compareErrors);
+		this.children.sort(byNameOrHash);
+	}
 
-		const iteratorBlockPrepare = b => {
-			blockInfoBlocks.push(b);
-			blockQueue.push(b);
-		};
+	summarizeDependencies() {
+		for (const child of this.children) {
+			this.fileDependencies.addAll(child.fileDependencies);
+			this.contextDependencies.addAll(child.contextDependencies);
+			this.missingDependencies.addAll(child.missingDependencies);
+			this.buildDependencies.addAll(child.buildDependencies);
+		}
 
-		let block, blockQueue, blockInfoModules, blockInfoBlocks;
 		for (const module of this.modules) {
-			blockQueue = [module];
-			while (blockQueue.length > 0) {
-				block = blockQueue.pop();
-				blockInfoModules = new Set();
-				blockInfoBlocks = [];
-
-				if (block.variables) {
-					iterationBlockVariable(block.variables, iteratorDependency);
-				}
+			module.addCacheDependencies(
+				this.fileDependencies,
+				this.contextDependencies,
+				this.missingDependencies,
+				this.buildDependencies
+			);
+		}
+	}
 
-				if (block.dependencies) {
-					iterationOfArrayCallback(block.dependencies, iteratorDependency);
+	createModuleHashes() {
+		let statModulesHashed = 0;
+		let statModulesFromCache = 0;
+		const { chunkGraph, runtimeTemplate, moduleMemCaches2 } = this;
+		const { hashFunction, hashDigest, hashDigestLength } = this.outputOptions;
+		/** @type {WebpackError[]} */
+		const errors = [];
+		for (const module of this.modules) {
+			const memCache = moduleMemCaches2 && moduleMemCaches2.get(module);
+			for (const runtime of chunkGraph.getModuleRuntimes(module)) {
+				if (memCache) {
+					const digest =
+						/** @type {string} */
+						(memCache.get(`moduleHash-${getRuntimeKey(runtime)}`));
+					if (digest !== undefined) {
+						chunkGraph.setModuleHashes(
+							module,
+							runtime,
+							digest,
+							digest.slice(0, hashDigestLength)
+						);
+						statModulesFromCache++;
+						continue;
+					}
 				}
-
-				if (block.blocks) {
-					iterationOfArrayCallback(block.blocks, iteratorBlockPrepare);
+				statModulesHashed++;
+				const digest = this._createModuleHash(
+					module,
+					chunkGraph,
+					runtime,
+					hashFunction,
+					runtimeTemplate,
+					hashDigest,
+					hashDigestLength,
+					errors
+				);
+				if (memCache) {
+					memCache.set(`moduleHash-${getRuntimeKey(runtime)}`, digest);
 				}
-
-				const blockInfo = {
-					modules: blockInfoModules,
-					blocks: blockInfoBlocks
-				};
-				blockInfoMap.set(block, blockInfo);
 			}
 		}
-
-		// PART ONE
-
-		const blockChunkGroups = new Map();
-
-		// Start with the provided modules/chunks
-		const queue = inputChunkGroups.map(chunkGroup => ({
-			block: chunkGroup.chunks[0].entryModule,
-			module: chunkGroup.chunks[0].entryModule,
-			chunk: chunkGroup.chunks[0],
-			chunkGroup
-		}));
-
-		let module, chunk, chunkGroup;
-
-		// For each async Block in graph
-		const iteratorBlock = b => {
-			// 1. We create a chunk for this Block
-			// but only once (blockChunkGroups map)
-			let c = blockChunkGroups.get(b);
-			if (c === undefined) {
-				c = this.namedChunkGroups.get(b.chunkName);
-				if (c && c.isInitial()) {
-					this.errors.push(
-						new AsyncDependencyToInitialChunkError(b.chunkName, module, b.loc)
-					);
-					c = chunkGroup;
-				} else {
-					c = this.addChunkInGroup(
-						b.groupOptions || b.chunkName,
-						module,
-						b.loc,
-						b.request
-					);
-					blockChunkGroups.set(b, c);
-					allCreatedChunkGroups.add(c);
-				}
-			} else {
-				// TODO webpack 5 remove addOptions check
-				if (c.addOptions) c.addOptions(b.groupOptions);
-				c.addOrigin(module, b.loc, b.request);
+		if (errors.length > 0) {
+			errors.sort(
+				compareSelect((err) => err.module, compareModulesByIdentifier)
+			);
+			for (const error of errors) {
+				this.errors.push(error);
 			}
+		}
+		this.logger.log(
+			`${statModulesHashed} modules hashed, ${statModulesFromCache} from cache (${
+				Math.round(
+					(100 * (statModulesHashed + statModulesFromCache)) / this.modules.size
+				) / 100
+			} variants per module in average)`
+		);
+	}
 
-			// 2. We store the Block+Chunk mapping as dependency for the chunk
-			let deps = chunkDependencies.get(chunkGroup);
-			if (!deps) chunkDependencies.set(chunkGroup, (deps = []));
-			deps.push({
-				block: b,
-				chunkGroup: c
-			});
-
-			// 3. We enqueue the DependenciesBlock for traversal
-			queue.push({
-				block: b,
-				module: module,
-				chunk: c.chunks[0],
-				chunkGroup: c
+	/**
+	 * @private
+	 * @param {Module} module module
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {RuntimeSpec} runtime runtime
+	 * @param {HashFunction} hashFunction hash function
+	 * @param {RuntimeTemplate} runtimeTemplate runtime template
+	 * @param {HashDigest} hashDigest hash digest
+	 * @param {HashDigestLength} hashDigestLength hash digest length
+	 * @param {WebpackError[]} errors errors
+	 * @returns {string} module hash digest
+	 */
+	_createModuleHash(
+		module,
+		chunkGraph,
+		runtime,
+		hashFunction,
+		runtimeTemplate,
+		hashDigest,
+		hashDigestLength,
+		errors
+	) {
+		/** @type {string} */
+		let moduleHashDigest;
+		try {
+			const moduleHash = createHash(hashFunction);
+			module.updateHash(moduleHash, {
+				chunkGraph,
+				runtime,
+				runtimeTemplate
 			});
-		};
-
-		// Iterative traversal of the Module graph
-		// Recursive would be simpler to write but could result in Stack Overflows
-		while (queue.length) {
-			const queueItem = queue.pop();
-			module = queueItem.module;
-			block = queueItem.block;
-			chunk = queueItem.chunk;
-			chunkGroup = queueItem.chunkGroup;
-
-			// get prepared block info
-			const blockInfo = blockInfoMap.get(block);
-
-			// Traverse all referenced modules
-			for (const refModule of blockInfo.modules) {
-				// We connect Module and Chunk when not already done
-				if (chunk.addModule(refModule)) {
-					refModule.addChunk(chunk);
-
-					// And enqueue the Module for traversal
-					queue.push({
-						block: refModule,
-						module: refModule,
-						chunk,
-						chunkGroup
-					});
-				}
-			}
-
-			// Traverse all Blocks
-			iterationOfArrayCallback(blockInfo.blocks, iteratorBlock);
+			moduleHashDigest = moduleHash.digest(hashDigest);
+		} catch (err) {
+			errors.push(new ModuleHashingError(module, /** @type {Error} */ (err)));
+			moduleHashDigest = "XXXXXX";
 		}
-
-		// PART TWO
-
-		let availableModules;
-		let newAvailableModules;
-		const queue2 = new Queue(
-			inputChunkGroups.map(chunkGroup => ({
-				chunkGroup,
-				availableModules: new Set()
-			}))
+		chunkGraph.setModuleHashes(
+			module,
+			runtime,
+			moduleHashDigest,
+			moduleHashDigest.slice(0, hashDigestLength)
 		);
+		return moduleHashDigest;
+	}
 
-		// Helper function to check if all modules of a chunk are available
-		const areModulesAvailable = (chunkGroup, availableModules) => {
-			for (const chunk of chunkGroup.chunks) {
-				for (const module of chunk.modulesIterable) {
-					if (!availableModules.has(module)) return false;
-				}
-			}
-			return true;
-		};
-
-		// For each edge in the basic chunk graph
-		const filterFn = dep => {
-			// Filter egdes that are not needed because all modules are already available
-			// This also filters circular dependencies in the chunks graph
-			const depChunkGroup = dep.chunkGroup;
-			if (areModulesAvailable(depChunkGroup, newAvailableModules)) return false; // break all modules are already available
-			return true;
-		};
-
-		const minAvailableModulesMap = new Map();
-
-		// Iterative traversing of the basic chunk graph
-		while (queue2.length) {
-			const queueItem = queue2.dequeue();
-			chunkGroup = queueItem.chunkGroup;
-			availableModules = queueItem.availableModules;
-
-			// 1. Get minimal available modules
-			// It doesn't make sense to traverse a chunk again with more available modules.
-			// This step calculates the minimal available modules and skips traversal when
-			// the list didn't shrink.
-			let minAvailableModules = minAvailableModulesMap.get(chunkGroup);
-			if (minAvailableModules === undefined) {
-				minAvailableModulesMap.set(chunkGroup, new Set(availableModules));
-			} else {
-				let deletedModules = false;
-				for (const m of minAvailableModules) {
-					if (!availableModules.has(m)) {
-						minAvailableModules.delete(m);
-						deletedModules = true;
-					}
-				}
-				if (!deletedModules) continue;
-				availableModules = minAvailableModules;
+	createHash() {
+		this.logger.time("hashing: initialize hash");
+		const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
+		const runtimeTemplate = this.runtimeTemplate;
+		const outputOptions = this.outputOptions;
+		const hashFunction = outputOptions.hashFunction;
+		const hashDigest = outputOptions.hashDigest;
+		const hashDigestLength = outputOptions.hashDigestLength;
+		const hash = createHash(hashFunction);
+		if (outputOptions.hashSalt) {
+			hash.update(outputOptions.hashSalt);
+		}
+		this.logger.timeEnd("hashing: initialize hash");
+		if (this.children.length > 0) {
+			this.logger.time("hashing: hash child compilations");
+			for (const child of this.children) {
+				hash.update(/** @type {string} */ (child.hash));
 			}
-
-			// 2. Get the edges at this point of the graph
-			const deps = chunkDependencies.get(chunkGroup);
-			if (!deps) continue;
-			if (deps.length === 0) continue;
-
-			// 3. Create a new Set of available modules at this points
-			newAvailableModules = new Set(availableModules);
-			for (const chunk of chunkGroup.chunks) {
-				for (const m of chunk.modulesIterable) {
-					newAvailableModules.add(m);
-				}
+			this.logger.timeEnd("hashing: hash child compilations");
+		}
+		if (this.warnings.length > 0) {
+			this.logger.time("hashing: hash warnings");
+			for (const warning of this.warnings) {
+				hash.update(`${warning.message}`);
 			}
-
-			// 4. Filter edges with available modules
-			const filteredDeps = deps.filter(filterFn);
-
-			// 5. Foreach remaining edge
-			const nextChunkGroups = new Set();
-			for (let i = 0; i < filteredDeps.length; i++) {
-				const dep = filteredDeps[i];
-				const depChunkGroup = dep.chunkGroup;
-				const depBlock = dep.block;
-
-				// 6. Connect block with chunk
-				GraphHelpers.connectDependenciesBlockAndChunkGroup(
-					depBlock,
-					depChunkGroup
-				);
-
-				// 7. Connect chunk with parent
-				GraphHelpers.connectChunkGroupParentAndChild(chunkGroup, depChunkGroup);
-
-				nextChunkGroups.add(depChunkGroup);
+			this.logger.timeEnd("hashing: hash warnings");
+		}
+		if (this.errors.length > 0) {
+			this.logger.time("hashing: hash errors");
+			for (const error of this.errors) {
+				hash.update(`${error.message}`);
 			}
+			this.logger.timeEnd("hashing: hash errors");
+		}
 
-			// 8. Enqueue further traversal
-			for (const nextChunkGroup of nextChunkGroups) {
-				queue2.enqueue({
-					chunkGroup: nextChunkGroup,
-					availableModules: newAvailableModules
-				});
+		this.logger.time("hashing: sort chunks");
+		/*
+		 * Chunks are hashed in 4 categories, in this order:
+		 * 1. Async chunks - no hash dependencies on other chunks
+		 * 2. Non-entry initial chunks (e.g. shared split chunks) - no hash
+		 *    dependencies on other chunks, but runtime chunks may read their
+		 *    hashes via GetChunkFilenameRuntimeModule (dependentHash)
+		 * 3. Runtime chunks - may use hashes of async and non-entry initial
+		 *    chunks (via GetChunkFilenameRuntimeModule). Ordered by references
+		 *    between each other (for async entrypoints)
+		 * 4. Entry chunks - may depend on runtimeChunk.hash (via
+		 *    createChunkHashHandler for ESM/CJS entry importing runtime)
+		 *
+		 * This ordering ensures all hash dependencies flow in one direction:
+		 * async/initial → runtime → entry, with no circular dependencies.
+		 * Chunks within each category are sorted by id for determinism.
+		 */
+		/** @type {Chunk[]} */
+		const unorderedRuntimeChunks = [];
+		/** @type {Chunk[]} */
+		const initialChunks = [];
+		/** @type {Chunk[]} */
+		const entryChunks = [];
+		/** @type {Chunk[]} */
+		const asyncChunks = [];
+		for (const c of this.chunks) {
+			if (c.hasRuntime()) {
+				unorderedRuntimeChunks.push(c);
+			} else if (chunkGraph.getNumberOfEntryModules(c) > 0) {
+				entryChunks.push(c);
+			} else if (c.canBeInitial()) {
+				initialChunks.push(c);
+			} else {
+				asyncChunks.push(c);
 			}
 		}
-
-		// Remove all unconnected chunk groups
-		for (const chunkGroup of allCreatedChunkGroups) {
-			if (chunkGroup.getNumberOfParents() === 0) {
-				for (const chunk of chunkGroup.chunks) {
-					const idx = this.chunks.indexOf(chunk);
-					if (idx >= 0) this.chunks.splice(idx, 1);
-					chunk.remove("unconnected");
+		unorderedRuntimeChunks.sort(byId);
+		entryChunks.sort(byId);
+		initialChunks.sort(byId);
+		asyncChunks.sort(byId);
+
+		/** @typedef {{ chunk: Chunk, referencedBy: RuntimeChunkInfo[], remaining: number }} RuntimeChunkInfo */
+		/** @type {Map} */
+		const runtimeChunksMap = new Map();
+		for (const chunk of unorderedRuntimeChunks) {
+			runtimeChunksMap.set(chunk, {
+				chunk,
+				referencedBy: [],
+				remaining: 0
+			});
+		}
+		let remaining = 0;
+		for (const info of runtimeChunksMap.values()) {
+			for (const other of new Set(
+				[...info.chunk.getAllReferencedAsyncEntrypoints()].map(
+					(e) => e.chunks[e.chunks.length - 1]
+				)
+			)) {
+				const otherInfo = runtimeChunksMap.get(other);
+				// other may be a non-runtime chunk (e.g. worker chunk)
+				// when you have a worker chunk in your app.js (new Worker(...)) and as a separate entry point
+				if (otherInfo) {
+					otherInfo.referencedBy.push(info);
+					info.remaining++;
+					remaining++;
 				}
-				chunkGroup.remove("unconnected");
 			}
 		}
-	}
-
-	removeReasonsOfDependencyBlock(module, block) {
-		const iteratorDependency = d => {
-			if (!d.module) {
-				return;
+		/** @type {Chunk[]} */
+		const runtimeChunks = [];
+		for (const info of runtimeChunksMap.values()) {
+			if (info.remaining === 0) {
+				runtimeChunks.push(info.chunk);
 			}
-			if (d.module.removeReason(module, d)) {
-				for (const chunk of d.module.chunksIterable) {
-					this.patchChunksAfterReasonRemoval(d.module, chunk);
+		}
+		// If there are any references between chunks
+		// make sure to follow these chains
+		if (remaining > 0) {
+			/** @type {Chunk[]} */
+			const readyChunks = [];
+			for (const chunk of runtimeChunks) {
+				const hasFullHashModules =
+					chunkGraph.getNumberOfChunkFullHashModules(chunk) !== 0;
+				const info =
+					/** @type {RuntimeChunkInfo} */
+					(runtimeChunksMap.get(chunk));
+				for (const otherInfo of info.referencedBy) {
+					if (hasFullHashModules) {
+						chunkGraph.upgradeDependentToFullHashModules(otherInfo.chunk);
+					}
+					remaining--;
+					if (--otherInfo.remaining === 0) {
+						readyChunks.push(otherInfo.chunk);
+					}
+				}
+				if (readyChunks.length > 0) {
+					// This ensures deterministic ordering, since referencedBy is non-deterministic
+					readyChunks.sort(byId);
+					for (const c of readyChunks) runtimeChunks.push(c);
+					readyChunks.length = 0;
 				}
 			}
-		};
-
-		if (block.blocks) {
-			iterationOfArrayCallback(block.blocks, block =>
-				this.removeReasonsOfDependencyBlock(module, block)
-			);
 		}
-
-		if (block.dependencies) {
-			iterationOfArrayCallback(block.dependencies, iteratorDependency);
+		// If there are still remaining references we have cycles and want to create a warning
+		if (remaining > 0) {
+			/** @type {RuntimeChunkInfo[]} */
+			const circularRuntimeChunkInfo = [];
+			for (const info of runtimeChunksMap.values()) {
+				if (info.remaining !== 0) {
+					circularRuntimeChunkInfo.push(info);
+				}
+			}
+			circularRuntimeChunkInfo.sort(compareSelect((i) => i.chunk, byId));
+			const err =
+				new WebpackError(`Circular dependency between chunks with runtime (${Array.from(
+					circularRuntimeChunkInfo,
+					(c) => c.chunk.name || c.chunk.id
+				).join(", ")})
+This prevents using hashes of each other and should be avoided.`);
+			err.chunk = circularRuntimeChunkInfo[0].chunk;
+			this.warnings.push(err);
+			for (const i of circularRuntimeChunkInfo) runtimeChunks.push(i.chunk);
 		}
+		this.logger.timeEnd("hashing: sort chunks");
 
-		if (block.variables) {
-			iterationBlockVariable(block.variables, iteratorDependency);
-		}
-	}
+		/** @type {Set} */
+		const fullHashChunks = new Set();
+		/** @type {CodeGenerationJobs} */
+		const codeGenerationJobs = [];
+		/** @type {Map>} */
+		const codeGenerationJobsMap = new Map();
+		/** @type {WebpackError[]} */
+		const errors = [];
 
-	patchChunksAfterReasonRemoval(module, chunk) {
-		if (!module.hasReasons()) {
-			this.removeReasonsOfDependencyBlock(module, module);
-		}
-		if (!module.hasReasonForChunk(chunk)) {
-			if (module.removeChunk(chunk)) {
-				this.removeChunkFromDependencies(module, chunk);
+		/**
+		 * @param {Chunk} chunk chunk
+		 */
+		const processChunk = (chunk) => {
+			// Last minute module hash generation for modules that depend on chunk hashes
+			this.logger.time("hashing: hash runtime modules");
+			const runtime = chunk.runtime;
+			for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
+				if (!chunkGraph.hasModuleHashes(module, runtime)) {
+					const hash = this._createModuleHash(
+						module,
+						chunkGraph,
+						runtime,
+						hashFunction,
+						runtimeTemplate,
+						hashDigest,
+						hashDigestLength,
+						errors
+					);
+					let hashMap = codeGenerationJobsMap.get(hash);
+					if (hashMap) {
+						const moduleJob = hashMap.get(module);
+						if (moduleJob) {
+							moduleJob.runtimes.push(runtime);
+							continue;
+						}
+					} else {
+						hashMap = new Map();
+						codeGenerationJobsMap.set(hash, hashMap);
+					}
+					const job = {
+						module,
+						hash,
+						runtime,
+						runtimes: [runtime]
+					};
+					hashMap.set(module, job);
+					codeGenerationJobs.push(job);
+				}
 			}
-		}
-	}
-
-	removeChunkFromDependencies(block, chunk) {
-		const iteratorDependency = d => {
-			if (!d.module) {
-				return;
+			this.logger.timeAggregate("hashing: hash runtime modules");
+			try {
+				this.logger.time("hashing: hash chunks");
+				const chunkHash = createHash(hashFunction);
+				if (outputOptions.hashSalt) {
+					chunkHash.update(outputOptions.hashSalt);
+				}
+				chunk.updateHash(chunkHash, chunkGraph);
+				this.hooks.chunkHash.call(chunk, chunkHash, {
+					chunkGraph,
+					codeGenerationResults:
+						/** @type {CodeGenerationResults} */
+						(this.codeGenerationResults),
+					moduleGraph: this.moduleGraph,
+					runtimeTemplate: this.runtimeTemplate
+				});
+				const chunkHashDigest = chunkHash.digest(hashDigest);
+				hash.update(chunkHashDigest);
+				chunk.hash = chunkHashDigest;
+				chunk.renderedHash = chunk.hash.slice(0, hashDigestLength);
+				const fullHashModules =
+					chunkGraph.getChunkFullHashModulesIterable(chunk);
+				if (fullHashModules) {
+					fullHashChunks.add(chunk);
+				} else {
+					this.hooks.contentHash.call(chunk);
+				}
+			} catch (err) {
+				this.errors.push(
+					new ChunkRenderError(chunk, "", /** @type {Error} */ (err))
+				);
 			}
-			this.patchChunksAfterReasonRemoval(d.module, chunk);
+			this.logger.timeAggregate("hashing: hash chunks");
 		};
-
-		const blocks = block.blocks;
-		for (let indexBlock = 0; indexBlock < blocks.length; indexBlock++) {
-			const chunks = blocks[indexBlock].chunks;
-			for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) {
-				const blockChunk = chunks[indexChunk];
-				chunk.removeChunk(blockChunk);
-				blockChunk.removeParent(chunk);
-				this.removeChunkFromDependencies(chunks, blockChunk);
-			}
-		}
-
-		if (block.dependencies) {
-			iterationOfArrayCallback(block.dependencies, iteratorDependency);
+		for (const chunk of asyncChunks) processChunk(chunk);
+		for (const chunk of initialChunks) processChunk(chunk);
+		for (const chunk of runtimeChunks) processChunk(chunk);
+		for (const chunk of entryChunks) processChunk(chunk);
+		if (errors.length > 0) {
+			errors.sort(
+				compareSelect((err) => err.module, compareModulesByIdentifier)
+			);
+			for (const error of errors) {
+				this.errors.push(error);
+			}
 		}
 
-		if (block.variables) {
-			iterationBlockVariable(block.variables, iteratorDependency);
+		this.logger.timeAggregateEnd("hashing: hash runtime modules");
+		this.logger.timeAggregateEnd("hashing: hash chunks");
+		this.logger.time("hashing: hash digest");
+		this.hooks.fullHash.call(hash);
+		this.fullHash = hash.digest(hashDigest);
+		this.hash = this.fullHash.slice(0, hashDigestLength);
+		this.logger.timeEnd("hashing: hash digest");
+
+		this.logger.time("hashing: process full hash modules");
+		for (const chunk of fullHashChunks) {
+			for (const module of /** @type {Iterable} */ (
+				chunkGraph.getChunkFullHashModulesIterable(chunk)
+			)) {
+				const moduleHash = createHash(hashFunction);
+				module.updateHash(moduleHash, {
+					chunkGraph,
+					runtime: chunk.runtime,
+					runtimeTemplate
+				});
+				const moduleHashDigest = moduleHash.digest(hashDigest);
+				const oldHash = chunkGraph.getModuleHash(module, chunk.runtime);
+				chunkGraph.setModuleHashes(
+					module,
+					chunk.runtime,
+					moduleHashDigest,
+					moduleHashDigest.slice(0, hashDigestLength)
+				);
+				/** @type {CodeGenerationJob} */
+				(
+					/** @type {Map} */
+					(codeGenerationJobsMap.get(oldHash)).get(module)
+				).hash = moduleHashDigest;
+			}
+			const chunkHash = createHash(hashFunction);
+			chunkHash.update(/** @type {string} */ (chunk.hash));
+			chunkHash.update(this.hash);
+			const chunkHashDigest = chunkHash.digest(hashDigest);
+			chunk.hash = chunkHashDigest;
+			chunk.renderedHash = chunk.hash.slice(0, hashDigestLength);
+			this.hooks.contentHash.call(chunk);
 		}
+		this.logger.timeEnd("hashing: process full hash modules");
+		return codeGenerationJobs;
 	}
 
-	applyModuleIds() {
-		const unusedIds = [];
-		let nextFreeModuleId = 0;
-		const usedIds = new Set();
-		if (this.usedModuleIds) {
-			for (const id of this.usedModuleIds) {
-				usedIds.add(id);
+	/**
+	 * @param {string} file file name
+	 * @param {Source} source asset source
+	 * @param {AssetInfo} assetInfo extra asset information
+	 * @returns {void}
+	 */
+	emitAsset(file, source, assetInfo = {}) {
+		if (this.assets[file]) {
+			if (!isSourceEqual(this.assets[file], source)) {
+				this.errors.push(
+					new WebpackError(
+						`Conflict: Multiple assets emit different content to the same filename ${file}${
+							assetInfo.sourceFilename
+								? `. Original source ${assetInfo.sourceFilename}`
+								: ""
+						}`
+					)
+				);
+				this.assets[file] = source;
+				this._setAssetInfo(file, assetInfo);
+				return;
 			}
+			const oldInfo = this.assetsInfo.get(file);
+			const newInfo = { ...oldInfo, ...assetInfo };
+			this._setAssetInfo(file, newInfo, oldInfo);
+			return;
 		}
+		this.assets[file] = source;
+		this._setAssetInfo(file, assetInfo, undefined);
+	}
 
-		const modules1 = this.modules;
-		for (let indexModule1 = 0; indexModule1 < modules1.length; indexModule1++) {
-			const module1 = modules1[indexModule1];
-			if (module1.id !== null) {
-				usedIds.add(module1.id);
-			}
+	/**
+	 * @private
+	 * @param {string} file file name
+	 * @param {AssetInfo=} newInfo new asset information
+	 * @param {AssetInfo=} oldInfo old asset information
+	 */
+	_setAssetInfo(file, newInfo, oldInfo = this.assetsInfo.get(file)) {
+		if (newInfo === undefined) {
+			this.assetsInfo.delete(file);
+		} else {
+			this.assetsInfo.set(file, newInfo);
 		}
-
-		if (usedIds.size > 0) {
-			let usedIdMax = -1;
-			for (const usedIdKey of usedIds) {
-				if (typeof usedIdKey !== "number") {
-					continue;
-				}
-
-				usedIdMax = Math.max(usedIdMax, usedIdKey);
-			}
-
-			let lengthFreeModules = (nextFreeModuleId = usedIdMax + 1);
-
-			while (lengthFreeModules--) {
-				if (!usedIds.has(lengthFreeModules)) {
-					unusedIds.push(lengthFreeModules);
+		const oldRelated = oldInfo && oldInfo.related;
+		const newRelated = newInfo && newInfo.related;
+		if (oldRelated) {
+			for (const key of Object.keys(oldRelated)) {
+				/**
+				 * @param {string} name name
+				 */
+				const remove = (name) => {
+					const relatedIn = this._assetsRelatedIn.get(name);
+					if (relatedIn === undefined) return;
+					const entry = relatedIn.get(key);
+					if (entry === undefined) return;
+					entry.delete(file);
+					if (entry.size !== 0) return;
+					relatedIn.delete(key);
+					if (relatedIn.size === 0) this._assetsRelatedIn.delete(name);
+				};
+				const entry = oldRelated[key];
+				if (Array.isArray(entry)) {
+					for (const name of entry) {
+						remove(name);
+					}
+				} else if (entry) {
+					remove(entry);
 				}
 			}
 		}
-
-		const modules2 = this.modules;
-		for (let indexModule2 = 0; indexModule2 < modules2.length; indexModule2++) {
-			const module2 = modules2[indexModule2];
-			if (module2.id === null) {
-				if (unusedIds.length > 0) {
-					module2.id = unusedIds.pop();
-				} else {
-					module2.id = nextFreeModuleId++;
+		if (newRelated) {
+			for (const key of Object.keys(newRelated)) {
+				/**
+				 * @param {string} name name
+				 */
+				const add = (name) => {
+					let relatedIn = this._assetsRelatedIn.get(name);
+					if (relatedIn === undefined) {
+						this._assetsRelatedIn.set(name, (relatedIn = new Map()));
+					}
+					let entry = relatedIn.get(key);
+					if (entry === undefined) {
+						relatedIn.set(key, (entry = new Set()));
+					}
+					entry.add(file);
+				};
+				const entry = newRelated[key];
+				if (Array.isArray(entry)) {
+					for (const name of entry) {
+						add(name);
+					}
+				} else if (entry) {
+					add(entry);
 				}
 			}
 		}
 	}
 
-	applyChunkIds() {
-		const usedIds = new Set();
-
-		// Get used ids from usedChunkIds property (i. e. from records)
-		if (this.usedChunkIds) {
-			for (const id of this.usedChunkIds) {
-				if (typeof id !== "number") {
-					continue;
-				}
-
-				usedIds.add(id);
-			}
+	/**
+	 * @param {string} file file name
+	 * @param {Source | ((source: Source) => Source)} newSourceOrFunction new asset source or function converting old to new
+	 * @param {(AssetInfo | ((assetInfo?: AssetInfo) => AssetInfo | undefined)) | undefined} assetInfoUpdateOrFunction new asset info or function converting old to new
+	 */
+	updateAsset(
+		file,
+		newSourceOrFunction,
+		assetInfoUpdateOrFunction = undefined
+	) {
+		if (!this.assets[file]) {
+			throw new Error(
+				`Called Compilation.updateAsset for not existing filename ${file}`
+			);
 		}
-
-		// Get used ids from existing chunks
-		const chunks = this.chunks;
-		for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) {
-			const chunk = chunks[indexChunk];
-			const usedIdValue = chunk.id;
-
-			if (typeof usedIdValue !== "number") {
-				continue;
+		this.assets[file] =
+			typeof newSourceOrFunction === "function"
+				? newSourceOrFunction(this.assets[file])
+				: newSourceOrFunction;
+		if (assetInfoUpdateOrFunction !== undefined) {
+			const oldInfo = this.assetsInfo.get(file) || EMPTY_ASSET_INFO;
+			if (typeof assetInfoUpdateOrFunction === "function") {
+				this._setAssetInfo(file, assetInfoUpdateOrFunction(oldInfo), oldInfo);
+			} else {
+				this._setAssetInfo(
+					file,
+					cachedCleverMerge(oldInfo, assetInfoUpdateOrFunction),
+					oldInfo
+				);
 			}
-
-			usedIds.add(usedIdValue);
 		}
+	}
 
-		// Calculate maximum assigned chunk id
-		let nextFreeChunkId = -1;
-		for (const id of usedIds) {
-			nextFreeChunkId = Math.max(nextFreeChunkId, id);
+	/**
+	 * @param {string} file file name
+	 * @param {string} newFile the new name of file
+	 */
+	renameAsset(file, newFile) {
+		const source = this.assets[file];
+		if (!source) {
+			throw new Error(
+				`Called Compilation.renameAsset for not existing filename ${file}`
+			);
 		}
-		nextFreeChunkId++;
-
-		// Determine free chunk ids from 0 to maximum
-		const unusedIds = [];
-		if (nextFreeChunkId > 0) {
-			let index = nextFreeChunkId;
-			while (index--) {
-				if (!usedIds.has(index)) {
-					unusedIds.push(index);
+		if (this.assets[newFile] && !isSourceEqual(this.assets[file], source)) {
+			this.errors.push(
+				new WebpackError(
+					`Conflict: Called Compilation.renameAsset for already existing filename ${newFile} with different content`
+				)
+			);
+		}
+		const assetInfo = this.assetsInfo.get(file);
+		// Update related in all other assets
+		const relatedInInfo = this._assetsRelatedIn.get(file);
+		if (relatedInInfo) {
+			for (const [key, assets] of relatedInInfo) {
+				for (const name of assets) {
+					const info = this.assetsInfo.get(name);
+					if (!info) continue;
+					const related = info.related;
+					if (!related) continue;
+					const entry = related[key];
+					/** @type {string | string[]} */
+					let newEntry;
+					if (Array.isArray(entry)) {
+						newEntry = entry.map((x) => (x === file ? newFile : x));
+					} else if (entry === file) {
+						newEntry = newFile;
+					} else {
+						continue;
+					}
+					this.assetsInfo.set(name, {
+						...info,
+						related: {
+							...related,
+							[key]: newEntry
+						}
+					});
 				}
 			}
 		}
-
-		// Assign ids to chunk which has no id
-		for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) {
-			const chunk = chunks[indexChunk];
-			if (chunk.id === null) {
-				if (unusedIds.length > 0) {
-					chunk.id = unusedIds.pop();
-				} else {
-					chunk.id = nextFreeChunkId++;
+		this._setAssetInfo(file, undefined, assetInfo);
+		this._setAssetInfo(newFile, assetInfo);
+		delete this.assets[file];
+		this.assets[newFile] = source;
+		for (const chunk of this.chunks) {
+			{
+				const size = chunk.files.size;
+				chunk.files.delete(file);
+				if (size !== chunk.files.size) {
+					chunk.files.add(newFile);
 				}
 			}
-			if (!chunk.ids) {
-				chunk.ids = [chunk.id];
+			{
+				const size = chunk.auxiliaryFiles.size;
+				chunk.auxiliaryFiles.delete(file);
+				if (size !== chunk.auxiliaryFiles.size) {
+					chunk.auxiliaryFiles.add(newFile);
+				}
 			}
 		}
 	}
 
-	sortItemsWithModuleIds() {
-		this.modules.sort(byIdOrIdentifier);
-
-		const modules = this.modules;
-		for (let indexModule = 0; indexModule < modules.length; indexModule++) {
-			modules[indexModule].sortItems(false);
+	/**
+	 * @param {string} file file name
+	 */
+	deleteAsset(file) {
+		if (!this.assets[file]) {
+			return;
 		}
-
-		const chunks = this.chunks;
-		for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) {
-			chunks[indexChunk].sortItems(false);
+		delete this.assets[file];
+		const assetInfo = this.assetsInfo.get(file);
+		this._setAssetInfo(file, undefined, assetInfo);
+		const related = assetInfo && assetInfo.related;
+		if (related) {
+			for (const key of Object.keys(related)) {
+				/**
+				 * @param {string} file file
+				 */
+				const checkUsedAndDelete = (file) => {
+					if (!this._assetsRelatedIn.has(file)) {
+						this.deleteAsset(file);
+					}
+				};
+				const items = related[key];
+				if (Array.isArray(items)) {
+					for (const file of items) {
+						checkUsedAndDelete(file);
+					}
+				} else if (items) {
+					checkUsedAndDelete(items);
+				}
+			}
+		}
+		// TODO If this becomes a performance problem
+		// store a reverse mapping from asset to chunk
+		for (const chunk of this.chunks) {
+			chunk.files.delete(file);
+			chunk.auxiliaryFiles.delete(file);
 		}
 	}
 
-	sortItemsWithChunkIds() {
-		for (const chunkGroup of this.chunkGroups) {
-			chunkGroup.sortItems();
+	getAssets() {
+		/** @type {Readonly[]} */
+		const array = [];
+		for (const assetName of Object.keys(this.assets)) {
+			if (Object.prototype.hasOwnProperty.call(this.assets, assetName)) {
+				array.push({
+					name: assetName,
+					source: this.assets[assetName],
+					info: this.assetsInfo.get(assetName) || EMPTY_ASSET_INFO
+				});
+			}
 		}
+		return array;
+	}
 
-		this.chunks.sort(byId);
+	/**
+	 * @param {string} name the name of the asset
+	 * @returns {Readonly | undefined} the asset or undefined when not found
+	 */
+	getAsset(name) {
+		if (!Object.prototype.hasOwnProperty.call(this.assets, name)) return;
+		return {
+			name,
+			source: this.assets[name],
+			info: this.assetsInfo.get(name) || EMPTY_ASSET_INFO
+		};
+	}
 
-		for (
-			let indexModule = 0;
-			indexModule < this.modules.length;
-			indexModule++
-		) {
-			this.modules[indexModule].sortItems(true);
+	clearAssets() {
+		for (const chunk of this.chunks) {
+			chunk.files.clear();
+			chunk.auxiliaryFiles.clear();
 		}
+	}
 
-		const chunks = this.chunks;
-		for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) {
-			chunks[indexChunk].sortItems(true);
+	createModuleAssets() {
+		const { chunkGraph } = this;
+		for (const module of this.modules) {
+			const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
+			if (buildInfo.assets) {
+				const assetsInfo = buildInfo.assetsInfo;
+				for (const assetName of Object.keys(buildInfo.assets)) {
+					const fileName = this.getPath(assetName, {
+						chunkGraph: this.chunkGraph,
+						module
+					});
+					for (const chunk of chunkGraph.getModuleChunksIterable(module)) {
+						chunk.auxiliaryFiles.add(fileName);
+					}
+					this.emitAsset(
+						fileName,
+						buildInfo.assets[assetName],
+						assetsInfo ? assetsInfo.get(assetName) : undefined
+					);
+					this.hooks.moduleAsset.call(module, fileName);
+				}
+			}
 		}
+	}
 
-		const byMessage = (a, b) => {
-			const ma = `${a.message}`;
-			const mb = `${b.message}`;
-			if (ma < mb) return -1;
-			if (mb < ma) return 1;
-			return 0;
-		};
-
-		this.errors.sort(byMessage);
-		this.warnings.sort(byMessage);
-		this.children.sort(byNameOrHash);
+	/**
+	 * @param {RenderManifestOptions} options options object
+	 * @returns {RenderManifestEntry[]} manifest entries
+	 */
+	getRenderManifest(options) {
+		return this.hooks.renderManifest.call([], options);
 	}
 
-	summarizeDependencies() {
-		this.fileDependencies = new SortableSet(this.compilationDependencies);
-		this.contextDependencies = new SortableSet();
-		this.missingDependencies = new SortableSet();
-
-		for (
-			let indexChildren = 0;
-			indexChildren < this.children.length;
-			indexChildren++
-		) {
-			const child = this.children[indexChildren];
+	/**
+	 * @param {Callback} callback signals when the call finishes
+	 * @returns {void}
+	 */
+	createChunkAssets(callback) {
+		const outputOptions = this.outputOptions;
+		/** @type {WeakMap} */
+		const cachedSourceMap = new WeakMap();
+		/** @type {Map} */
+		const alreadyWrittenFiles = new Map();
+
+		asyncLib.forEachLimit(
+			this.chunks,
+			15,
+			(chunk, callback) => {
+				/** @type {RenderManifestEntry[]} */
+				let manifest;
+				try {
+					manifest = this.getRenderManifest({
+						chunk,
+						hash: /** @type {string} */ (this.hash),
+						fullHash: /** @type {string} */ (this.fullHash),
+						outputOptions,
+						codeGenerationResults:
+							/** @type {CodeGenerationResults} */
+							(this.codeGenerationResults),
+						moduleTemplates: this.moduleTemplates,
+						dependencyTemplates: this.dependencyTemplates,
+						chunkGraph: this.chunkGraph,
+						moduleGraph: this.moduleGraph,
+						runtimeTemplate: this.runtimeTemplate
+					});
+				} catch (err) {
+					this.errors.push(
+						new ChunkRenderError(chunk, "", /** @type {Error} */ (err))
+					);
+					return callback();
+				}
+				asyncLib.each(
+					manifest,
+					(fileManifest, callback) => {
+						const ident = fileManifest.identifier;
+						const usedHash = /** @type {string} */ (fileManifest.hash);
+
+						const assetCacheItem = this._assetsCache.getItemCache(
+							ident,
+							usedHash
+						);
 
-			addAllToSet(this.fileDependencies, child.fileDependencies);
-			addAllToSet(this.contextDependencies, child.contextDependencies);
-			addAllToSet(this.missingDependencies, child.missingDependencies);
-		}
+						assetCacheItem.get((err, sourceFromCache) => {
+							/** @type {TemplatePath} */
+							let filenameTemplate;
+							/** @type {string} */
+							let file;
+							/** @type {AssetInfo} */
+							let assetInfo;
+
+							let inTry = true;
+							/**
+							 * @param {Error} err error
+							 * @returns {void}
+							 */
+							const errorAndCallback = (err) => {
+								const filename =
+									file ||
+									(typeof file === "string"
+										? file
+										: typeof filenameTemplate === "string"
+											? filenameTemplate
+											: "");
+
+								this.errors.push(new ChunkRenderError(chunk, filename, err));
+								inTry = false;
+								return callback();
+							};
 
-		for (
-			let indexModule = 0;
-			indexModule < this.modules.length;
-			indexModule++
-		) {
-			const module = this.modules[indexModule];
+							try {
+								if ("filename" in fileManifest) {
+									file = fileManifest.filename;
+									assetInfo = fileManifest.info;
+								} else {
+									filenameTemplate = fileManifest.filenameTemplate;
+									const pathAndInfo = this.getPathWithInfo(
+										filenameTemplate,
+										fileManifest.pathOptions
+									);
+									file = pathAndInfo.path;
+									assetInfo = fileManifest.info
+										? {
+												...pathAndInfo.info,
+												...fileManifest.info
+											}
+										: pathAndInfo.info;
+								}
 
-			if (module.buildInfo.fileDependencies) {
-				addAllToSet(this.fileDependencies, module.buildInfo.fileDependencies);
-			}
-			if (module.buildInfo.contextDependencies) {
-				addAllToSet(
-					this.contextDependencies,
-					module.buildInfo.contextDependencies
+								if (err) {
+									return errorAndCallback(err);
+								}
+
+								let source = sourceFromCache;
+
+								// check if the same filename was already written by another chunk
+								const alreadyWritten = alreadyWrittenFiles.get(file);
+								if (alreadyWritten !== undefined) {
+									if (alreadyWritten.hash !== usedHash) {
+										inTry = false;
+										return callback(
+											new WebpackError(
+												`Conflict: Multiple chunks emit assets to the same filename ${file}` +
+													` (chunks ${alreadyWritten.chunk.id} and ${chunk.id})`
+											)
+										);
+									}
+									source = alreadyWritten.source;
+								} else if (!source) {
+									// render the asset
+									source = fileManifest.render();
+
+									// Ensure that source is a cached source to avoid additional cost because of repeated access
+									if (!(source instanceof CachedSource)) {
+										const cacheEntry = cachedSourceMap.get(source);
+										if (cacheEntry) {
+											source = cacheEntry;
+										} else {
+											const cachedSource = new CachedSource(source);
+											cachedSourceMap.set(source, cachedSource);
+											source = cachedSource;
+										}
+									}
+								}
+								this.emitAsset(file, source, assetInfo);
+								if (fileManifest.auxiliary) {
+									chunk.auxiliaryFiles.add(file);
+								} else {
+									chunk.files.add(file);
+								}
+								this.hooks.chunkAsset.call(chunk, file);
+								alreadyWrittenFiles.set(file, {
+									hash: usedHash,
+									source,
+									chunk
+								});
+								if (source !== sourceFromCache) {
+									assetCacheItem.store(source, (err) => {
+										if (err) return errorAndCallback(err);
+										inTry = false;
+										return callback();
+									});
+								} else {
+									inTry = false;
+									callback();
+								}
+							} catch (err) {
+								if (!inTry) throw err;
+								errorAndCallback(/** @type {Error} */ (err));
+							}
+						});
+					},
+					callback
 				);
-			}
-		}
-		for (const error of this.errors) {
-			if (
-				typeof error.missing === "object" &&
-				error.missing &&
-				error.missing[Symbol.iterator]
-			) {
-				addAllToSet(this.missingDependencies, error.missing);
-			}
-		}
-		this.fileDependencies.sort();
-		this.contextDependencies.sort();
-		this.missingDependencies.sort();
+			},
+			callback
+		);
 	}
 
-	createHash() {
-		const outputOptions = this.outputOptions;
-		const hashFunction = outputOptions.hashFunction;
-		const hashDigest = outputOptions.hashDigest;
-		const hashDigestLength = outputOptions.hashDigestLength;
-		const hash = createHash(hashFunction);
-		if (outputOptions.hashSalt) {
-			hash.update(outputOptions.hashSalt);
-		}
-		this.mainTemplate.updateHash(hash);
-		this.chunkTemplate.updateHash(hash);
-		for (const key of Object.keys(this.moduleTemplates).sort()) {
-			this.moduleTemplates[key].updateHash(hash);
-		}
-		for (const child of this.children) {
-			hash.update(child.hash);
-		}
-		for (const warning of this.warnings) {
-			hash.update(`${warning.message}`);
-		}
-		for (const error of this.errors) {
-			hash.update(`${error.message}`);
-		}
-		const modules = this.modules;
-		for (let i = 0; i < modules.length; i++) {
-			const module = modules[i];
-			const moduleHash = createHash(hashFunction);
-			module.updateHash(moduleHash);
-			module.hash = moduleHash.digest(hashDigest);
-			module.renderedHash = module.hash.substr(0, hashDigestLength);
+	/**
+	 * @param {TemplatePath} filename used to get asset path with hash
+	 * @param {PathData} data context data
+	 * @returns {string} interpolated path
+	 */
+	getPath(filename, data = {}) {
+		if (!data.hash) {
+			data = {
+				hash: this.hash,
+				...data
+			};
 		}
-		// clone needed as sort below is inplace mutation
-		const chunks = this.chunks.slice();
-		/**
-		 * sort here will bring all "falsy" values to the beginning
-		 * this is needed as the "hasRuntime()" chunks are dependent on the
-		 * hashes of the non-runtime chunks.
-		 */
-		chunks.sort((a, b) => {
-			const aEntry = a.hasRuntime();
-			const bEntry = b.hasRuntime();
-			if (aEntry && !bEntry) return 1;
-			if (!aEntry && bEntry) return -1;
-			return byId(a, b);
-		});
-		for (let i = 0; i < chunks.length; i++) {
-			const chunk = chunks[i];
-			const chunkHash = createHash(hashFunction);
-			if (outputOptions.hashSalt) {
-				chunkHash.update(outputOptions.hashSalt);
-			}
-			chunk.updateHash(chunkHash);
-			const template = chunk.hasRuntime()
-				? this.mainTemplate
-				: this.chunkTemplate;
-			template.updateHashForChunk(chunkHash, chunk);
-			this.hooks.chunkHash.call(chunk, chunkHash);
-			chunk.hash = chunkHash.digest(hashDigest);
-			hash.update(chunk.hash);
-			chunk.renderedHash = chunk.hash.substr(0, hashDigestLength);
-			this.hooks.contentHash.call(chunk);
+		return this.getAssetPath(filename, data);
+	}
+
+	/**
+	 * @param {TemplatePath} filename used to get asset path with hash
+	 * @param {PathData} data context data
+	 * @returns {InterpolatedPathAndAssetInfo} interpolated path and asset info
+	 */
+	getPathWithInfo(filename, data = {}) {
+		if (!data.hash) {
+			data = {
+				hash: this.hash,
+				...data
+			};
 		}
-		this.fullHash = hash.digest(hashDigest);
-		this.hash = this.fullHash.substr(0, hashDigestLength);
+		return this.getAssetPathWithInfo(filename, data);
 	}
 
-	modifyHash(update) {
-		const outputOptions = this.outputOptions;
-		const hashFunction = outputOptions.hashFunction;
-		const hashDigest = outputOptions.hashDigest;
-		const hashDigestLength = outputOptions.hashDigestLength;
-		const hash = createHash(hashFunction);
-		hash.update(this.fullHash);
-		hash.update(update);
-		this.fullHash = hash.digest(hashDigest);
-		this.hash = this.fullHash.substr(0, hashDigestLength);
+	/**
+	 * @param {TemplatePath} filename used to get asset path with hash
+	 * @param {PathData} data context data
+	 * @returns {string} interpolated path
+	 */
+	getAssetPath(filename, data) {
+		return this.hooks.assetPath.call(
+			typeof filename === "function" ? filename(data) : filename,
+			data,
+			undefined
+		);
 	}
 
-	createModuleAssets() {
-		for (let i = 0; i < this.modules.length; i++) {
-			const module = this.modules[i];
-			if (module.buildInfo.assets) {
-				for (const assetName of Object.keys(module.buildInfo.assets)) {
-					const fileName = this.getPath(assetName);
-					this.assets[fileName] = module.buildInfo.assets[assetName];
-					this.hooks.moduleAsset.call(module, fileName);
-				}
-			}
-		}
+	/**
+	 * @param {TemplatePath} filename used to get asset path with hash
+	 * @param {PathData} data context data
+	 * @returns {InterpolatedPathAndAssetInfo} interpolated path and asset info
+	 */
+	getAssetPathWithInfo(filename, data) {
+		const assetInfo = {};
+		// TODO webpack 5: refactor assetPath hook to receive { path, info } object
+		const newPath = this.hooks.assetPath.call(
+			typeof filename === "function" ? filename(data, assetInfo) : filename,
+			data,
+			assetInfo
+		);
+		return { path: newPath, info: assetInfo };
 	}
 
-	createChunkAssets() {
-		const outputOptions = this.outputOptions;
-		const cachedSourceMap = new Map();
-		for (let i = 0; i < this.chunks.length; i++) {
-			const chunk = this.chunks[i];
-			chunk.files = [];
-			let source;
-			let file;
-			let filenameTemplate;
-			try {
-				const template = chunk.hasRuntime()
-					? this.mainTemplate
-					: this.chunkTemplate;
-				const manifest = template.getRenderManifest({
-					chunk,
-					hash: this.hash,
-					fullHash: this.fullHash,
-					outputOptions,
-					moduleTemplates: this.moduleTemplates,
-					dependencyTemplates: this.dependencyTemplates
-				}); // [{ render(), filenameTemplate, pathOptions, identifier, hash }]
-				for (const fileManifest of manifest) {
-					const cacheName = fileManifest.identifier;
-					const usedHash = fileManifest.hash;
-					filenameTemplate = fileManifest.filenameTemplate;
-					if (
-						this.cache &&
-						this.cache[cacheName] &&
-						this.cache[cacheName].hash === usedHash
-					) {
-						source = this.cache[cacheName].source;
-					} else {
-						source = fileManifest.render();
-						// Ensure that source is a cached source to avoid additional cost because of repeated access
-						if (!(source instanceof CachedSource)) {
-							const cacheEntry = cachedSourceMap.get(source);
-							if (cacheEntry) {
-								source = cacheEntry;
-							} else {
-								const cachedSource = new CachedSource(source);
-								cachedSourceMap.set(source, cachedSource);
-								source = cachedSource;
-							}
-						}
-						if (this.cache) {
-							this.cache[cacheName] = {
-								hash: usedHash,
-								source
-							};
-						}
-					}
-					file = this.getPath(filenameTemplate, fileManifest.pathOptions);
-					if (this.assets[file] && this.assets[file] !== source) {
-						throw new Error(
-							`Conflict: Multiple assets emit to the same filename ${file}`
-						);
-					}
-					this.assets[file] = source;
-					chunk.files.push(file);
-					this.hooks.chunkAsset.call(chunk, file);
-				}
-			} catch (err) {
-				this.errors.push(
-					new ChunkRenderError(chunk, file || filenameTemplate, err)
-				);
-			}
-		}
+	getWarnings() {
+		return this.hooks.processWarnings.call(this.warnings);
 	}
 
-	getPath(filename, data) {
-		data = data || {};
-		data.hash = data.hash || this.hash;
-		return this.mainTemplate.getAssetPath(filename, data);
+	getErrors() {
+		return this.hooks.processErrors.call(this.errors);
 	}
 
+	/**
+	 * This function allows you to run another instance of webpack inside of webpack however as
+	 * a child with different settings and configurations (if desired) applied. It copies all hooks, plugins
+	 * from parent (or top level compiler) and creates a child Compilation
+	 * @param {string} name name of the child compiler
+	 * @param {Partial=} outputOptions // Need to convert config schema to types for this
+	 * @param {Plugins=} plugins webpack plugins that will be applied
+	 * @returns {Compiler} creates a child Compiler instance
+	 */
 	createChildCompiler(name, outputOptions, plugins) {
 		const idx = this.childrenCounters[name] || 0;
 		this.childrenCounters[name] = idx + 1;
@@ -1898,12 +5322,410 @@ class Compilation extends Tapable {
 		);
 	}
 
+	/**
+	 * @param {Module} module the module
+	 * @param {ExecuteModuleOptions} options options
+	 * @param {ExecuteModuleCallback} callback callback
+	 */
+	executeModule(module, options, callback) {
+		// Aggregate all referenced modules and ensure they are ready
+		const modules = new Set([module]);
+		processAsyncTree(
+			modules,
+			10,
+			(module, push, callback) => {
+				this.buildQueue.waitFor(module, (err) => {
+					if (err) return callback(err);
+					this.processDependenciesQueue.waitFor(module, (err) => {
+						if (err) return callback(err);
+						for (const { module: m } of this.moduleGraph.getOutgoingConnections(
+							module
+						)) {
+							const size = modules.size;
+							modules.add(m);
+							if (modules.size !== size) push(m);
+						}
+						callback();
+					});
+				});
+			},
+			(err) => {
+				if (err) return callback(/** @type {WebpackError} */ (err));
+
+				// Create new chunk graph, chunk and entrypoint for the build time execution
+				const chunkGraph = new ChunkGraph(
+					this.moduleGraph,
+					this.outputOptions.hashFunction
+				);
+				const runtime = "build time";
+				const { hashFunction, hashDigest, hashDigestLength } =
+					this.outputOptions;
+				const runtimeTemplate = this.runtimeTemplate;
+
+				const chunk = new Chunk("build time chunk", this._backCompat);
+				chunk.id = /** @type {ChunkId} */ (chunk.name);
+				chunk.ids = [chunk.id];
+				chunk.runtime = runtime;
+
+				const entrypoint = new Entrypoint({
+					runtime,
+					chunkLoading: false,
+					...options.entryOptions
+				});
+				chunkGraph.connectChunkAndEntryModule(chunk, module, entrypoint);
+				connectChunkGroupAndChunk(entrypoint, chunk);
+				entrypoint.setRuntimeChunk(chunk);
+				entrypoint.setEntrypointChunk(chunk);
+
+				const chunks = new Set([chunk]);
+
+				// Assign ids to modules and modules to the chunk
+				for (const module of modules) {
+					const id = module.identifier();
+					chunkGraph.setModuleId(module, id);
+					chunkGraph.connectChunkAndModule(chunk, module);
+				}
+
+				/** @type {WebpackError[]} */
+				const errors = [];
+
+				// Hash modules
+				for (const module of modules) {
+					this._createModuleHash(
+						module,
+						chunkGraph,
+						runtime,
+						hashFunction,
+						runtimeTemplate,
+						hashDigest,
+						hashDigestLength,
+						errors
+					);
+				}
+
+				const codeGenerationResults = new CodeGenerationResults(
+					this.outputOptions.hashFunction
+				);
+				/**
+				 * @param {Module} module the module
+				 * @param {Callback} callback callback
+				 * @returns {void}
+				 */
+				const codeGen = (module, callback) => {
+					this._codeGenerationModule(
+						module,
+						runtime,
+						[runtime],
+						chunkGraph.getModuleHash(module, runtime),
+						this.dependencyTemplates,
+						chunkGraph,
+						this.moduleGraph,
+						runtimeTemplate,
+						errors,
+						codeGenerationResults,
+						(err, _codeGenerated) => {
+							callback(err);
+						}
+					);
+				};
+
+				const reportErrors = () => {
+					if (errors.length > 0) {
+						errors.sort(
+							compareSelect((err) => err.module, compareModulesByIdentifier)
+						);
+						for (const error of errors) {
+							this.errors.push(error);
+						}
+						errors.length = 0;
+					}
+				};
+
+				// Generate code for all aggregated modules
+				asyncLib.eachLimit(
+					/** @type {import("neo-async").IterableCollection} */ (
+						/** @type {unknown} */ (modules)
+					),
+					10,
+					codeGen,
+					(err) => {
+						if (err) return callback(err);
+						reportErrors();
+
+						// for backward-compat temporary set the chunk graph
+						// TODO webpack 6
+						const old = this.chunkGraph;
+						this.chunkGraph = chunkGraph;
+						this.processRuntimeRequirements({
+							chunkGraph,
+							modules,
+							chunks,
+							codeGenerationResults,
+							chunkGraphEntries: chunks
+						});
+						this.chunkGraph = old;
+
+						const runtimeModules =
+							chunkGraph.getChunkRuntimeModulesIterable(chunk);
+
+						// Hash runtime modules
+						for (const module of runtimeModules) {
+							modules.add(module);
+							this._createModuleHash(
+								module,
+								chunkGraph,
+								runtime,
+								hashFunction,
+								runtimeTemplate,
+								hashDigest,
+								hashDigestLength,
+								errors
+							);
+						}
+
+						// Generate code for all runtime modules
+						asyncLib.eachLimit(
+							/** @type {import("neo-async").IterableCollection} */ (
+								runtimeModules
+							),
+							10,
+							codeGen,
+							(err) => {
+								if (err) return callback(err);
+								reportErrors();
+
+								/** @type {Map} */
+								const moduleArgumentsMap = new Map();
+								/** @type {Map} */
+								const moduleArgumentsById = new Map();
+
+								/** @type {ExecuteModuleResult["fileDependencies"]} */
+								const fileDependencies = new LazySet();
+								/** @type {ExecuteModuleResult["contextDependencies"]} */
+								const contextDependencies = new LazySet();
+								/** @type {ExecuteModuleResult["missingDependencies"]} */
+								const missingDependencies = new LazySet();
+								/** @type {ExecuteModuleResult["buildDependencies"]} */
+								const buildDependencies = new LazySet();
+
+								/** @type {ExecuteModuleResult["assets"]} */
+								const assets = new Map();
+
+								let cacheable = true;
+
+								/** @type {ExecuteModuleContext} */
+								const context = {
+									assets,
+									__webpack_require__: undefined,
+									chunk,
+									chunkGraph
+								};
+
+								// Prepare execution
+								asyncLib.eachLimit(
+									modules,
+									10,
+									(module, callback) => {
+										const codeGenerationResult = codeGenerationResults.get(
+											module,
+											runtime
+										);
+										/** @type {ExecuteModuleArgument} */
+										const moduleArgument = {
+											module,
+											codeGenerationResult,
+											moduleObject: undefined
+										};
+										moduleArgumentsMap.set(module, moduleArgument);
+										moduleArgumentsById.set(
+											module.identifier(),
+											moduleArgument
+										);
+										module.addCacheDependencies(
+											fileDependencies,
+											contextDependencies,
+											missingDependencies,
+											buildDependencies
+										);
+										if (
+											/** @type {BuildInfo} */ (module.buildInfo).cacheable ===
+											false
+										) {
+											cacheable = false;
+										}
+										if (module.buildInfo && module.buildInfo.assets) {
+											const { assets: moduleAssets, assetsInfo } =
+												module.buildInfo;
+											for (const assetName of Object.keys(moduleAssets)) {
+												assets.set(assetName, {
+													source: moduleAssets[assetName],
+													info: assetsInfo
+														? assetsInfo.get(assetName)
+														: undefined
+												});
+											}
+										}
+										this.hooks.prepareModuleExecution.callAsync(
+											moduleArgument,
+											context,
+											callback
+										);
+									},
+									(err) => {
+										if (err) return callback(/** @type {WebpackError} */ (err));
+
+										/** @type {ExecuteModuleExports | undefined} */
+										let exports;
+										try {
+											const {
+												strictModuleErrorHandling,
+												strictModuleExceptionHandling
+											} = this.outputOptions;
+
+											/** @type {WebpackRequire} */
+											const __webpack_require__ = (id) => {
+												const cached = moduleCache[id];
+												if (cached !== undefined) {
+													if (cached.error) throw cached.error;
+													return cached.exports;
+												}
+												const moduleArgument = moduleArgumentsById.get(id);
+												return __webpack_require_module__(
+													/** @type {ExecuteModuleArgument} */
+													(moduleArgument),
+													id
+												);
+											};
+											const interceptModuleExecution = (__webpack_require__[
+												/** @type {"i"} */
+												(
+													RuntimeGlobals.interceptModuleExecution.replace(
+														`${RuntimeGlobals.require}.`,
+														""
+													)
+												)
+											] = /** @type {NonNullable} */ ([]));
+											const moduleCache = (__webpack_require__[
+												/** @type {"c"} */ (
+													RuntimeGlobals.moduleCache.replace(
+														`${RuntimeGlobals.require}.`,
+														""
+													)
+												)
+											] = /** @type {NonNullable} */ ({}));
+
+											context.__webpack_require__ = __webpack_require__;
+
+											/**
+											 * @param {ExecuteModuleArgument} moduleArgument the module argument
+											 * @param {string=} id id
+											 * @returns {ExecuteModuleExports} exports
+											 */
+											const __webpack_require_module__ = (
+												moduleArgument,
+												id
+											) => {
+												/** @type {ExecuteOptions} */
+												const execOptions = {
+													id,
+													module: {
+														id,
+														exports: {},
+														loaded: false,
+														error: undefined
+													},
+													require: __webpack_require__
+												};
+												for (const handler of interceptModuleExecution) {
+													handler(execOptions);
+												}
+												const module = moduleArgument.module;
+												this.buildTimeExecutedModules.add(module);
+												const moduleObject = execOptions.module;
+												moduleArgument.moduleObject = moduleObject;
+												try {
+													if (id) moduleCache[id] = moduleObject;
+
+													tryRunOrWebpackError(
+														() =>
+															this.hooks.executeModule.call(
+																moduleArgument,
+																context
+															),
+														"Compilation.hooks.executeModule"
+													);
+													moduleObject.loaded = true;
+													return moduleObject.exports;
+												} catch (execErr) {
+													if (strictModuleExceptionHandling) {
+														if (id) delete moduleCache[id];
+													} else if (strictModuleErrorHandling) {
+														moduleObject.error =
+															/** @type {WebpackError} */
+															(execErr);
+													}
+													if (!(/** @type {WebpackError} */ (execErr).module)) {
+														/** @type {WebpackError} */
+														(execErr).module = module;
+													}
+													throw execErr;
+												}
+											};
+
+											for (const runtimeModule of chunkGraph.getChunkRuntimeModulesInOrder(
+												chunk
+											)) {
+												__webpack_require_module__(
+													/** @type {ExecuteModuleArgument} */
+													(moduleArgumentsMap.get(runtimeModule))
+												);
+											}
+
+											exports = __webpack_require__(module.identifier());
+										} catch (execErr) {
+											const { message, stack, module } =
+												/** @type {WebpackError} */
+												(execErr);
+											const err = new WebpackError(
+												`Execution of module code from module graph (${
+													/** @type {Module} */
+													(module).readableIdentifier(this.requestShortener)
+												}) failed: ${message}`,
+												{ cause: execErr }
+											);
+											err.stack = stack;
+											err.module = module;
+											return callback(err);
+										}
+
+										callback(null, {
+											exports,
+											assets,
+											cacheable,
+											fileDependencies,
+											contextDependencies,
+											missingDependencies,
+											buildDependencies
+										});
+									}
+								);
+							}
+						);
+					}
+				);
+			}
+		);
+	}
+
 	checkConstraints() {
+		const chunkGraph = this.chunkGraph;
+
+		/** @type {Set} */
 		const usedIds = new Set();
 
-		const modules = this.modules;
-		for (let indexModule = 0; indexModule < modules.length; indexModule++) {
-			const moduleId = modules[indexModule].id;
+		for (const module of this.modules) {
+			if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) continue;
+			const moduleId = chunkGraph.getModuleId(module);
 			if (moduleId === null) continue;
 			if (usedIds.has(moduleId)) {
 				throw new Error(`checkConstraints: duplicate module id ${moduleId}`);
@@ -1911,13 +5733,22 @@ class Compilation extends Tapable {
 			usedIds.add(moduleId);
 		}
 
-		const chunks = this.chunks;
-		for (let indexChunk = 0; indexChunk < chunks.length; indexChunk++) {
-			const chunk = chunks[indexChunk];
-			if (chunks.indexOf(chunk) !== indexChunk) {
-				throw new Error(
-					`checkConstraints: duplicate chunk in compilation ${chunk.debugId}`
-				);
+		for (const chunk of this.chunks) {
+			for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
+				if (!this.modules.has(module)) {
+					throw new Error(
+						"checkConstraints: module in chunk but not in compilation " +
+							` ${chunk.debugId} ${module.debugId}`
+					);
+				}
+			}
+			for (const module of chunkGraph.getChunkEntryModulesIterable(chunk)) {
+				if (!this.modules.has(module)) {
+					throw new Error(
+						"checkConstraints: entry module in chunk but not in compilation " +
+							` ${chunk.debugId} ${module.debugId}`
+					);
+				}
 			}
 		}
 
@@ -1927,22 +5758,142 @@ class Compilation extends Tapable {
 	}
 }
 
-// TODO remove in webpack 5
-Compilation.prototype.applyPlugins = util.deprecate(function(name, ...args) {
-	this.hooks[
-		name.replace(/[- ]([a-z])/g, match => match[1].toUpperCase())
-	].call(...args);
-}, "Compilation.applyPlugins is deprecated. Use new API on `.hooks` instead");
+/**
+ * @typedef {object} FactorizeModuleOptions
+ * @property {ModuleProfile=} currentProfile
+ * @property {ModuleFactory} factory
+ * @property {Dependency[]} dependencies
+ * @property {boolean=} factoryResult return full ModuleFactoryResult instead of only module
+ * @property {Module | null} originModule
+ * @property {Partial=} contextInfo
+ * @property {string=} context
+ */
+
+/**
+ * @param {FactorizeModuleOptions} options options object
+ * @param {ModuleCallback | ModuleFactoryResultCallback} callback callback
+ * @returns {void}
+ */
+
+// Hide from typescript
+const compilationPrototype = Compilation.prototype;
+
+// TODO webpack 6 remove
+Object.defineProperty(compilationPrototype, "modifyHash", {
+	writable: false,
+	enumerable: false,
+	configurable: false,
+	value: () => {
+		throw new Error(
+			"Compilation.modifyHash was removed in favor of Compilation.hooks.fullHash"
+		);
+	}
+});
 
-// TODO remove in webpack 5
-Object.defineProperty(Compilation.prototype, "moduleTemplate", {
+// TODO webpack 6 remove
+Object.defineProperty(compilationPrototype, "cache", {
+	enumerable: false,
 	configurable: false,
-	get: util.deprecate(function() {
-		return this.moduleTemplates.javascript;
-	}, "Compilation.moduleTemplate: Use Compilation.moduleTemplates.javascript instead"),
-	set: util.deprecate(function(value) {
-		this.moduleTemplates.javascript = value;
-	}, "Compilation.moduleTemplate: Use Compilation.moduleTemplates.javascript instead.")
+	get: util.deprecate(
+		/**
+		 * @this {Compilation} the compilation
+		 * @returns {Cache} the cache
+		 */
+		function cache() {
+			return this.compiler.cache;
+		},
+		"Compilation.cache was removed in favor of Compilation.getCache()",
+		"DEP_WEBPACK_COMPILATION_CACHE"
+	),
+	set: util.deprecate(
+		/**
+		 * @param {EXPECTED_ANY} _v value
+		 */
+		(_v) => {},
+		"Compilation.cache was removed in favor of Compilation.getCache()",
+		"DEP_WEBPACK_COMPILATION_CACHE"
+	)
 });
 
+/**
+ * Add additional assets to the compilation.
+ */
+Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL = -2000;
+
+/**
+ * Basic preprocessing of assets.
+ */
+Compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS = -1000;
+
+/**
+ * Derive new assets from existing assets.
+ * Existing assets should not be treated as complete.
+ */
+Compilation.PROCESS_ASSETS_STAGE_DERIVED = -200;
+
+/**
+ * Add additional sections to existing assets, like a banner or initialization code.
+ */
+Compilation.PROCESS_ASSETS_STAGE_ADDITIONS = -100;
+
+/**
+ * Optimize existing assets in a general way.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE = 100;
+
+/**
+ * Optimize the count of existing assets, e. g. by merging them.
+ * Only assets of the same type should be merged.
+ * For assets of different types see PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COUNT = 200;
+
+/**
+ * Optimize the compatibility of existing assets, e. g. add polyfills or vendor-prefixes.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COMPATIBILITY = 300;
+
+/**
+ * Optimize the size of existing assets, e. g. by minimizing or omitting whitespace.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE = 400;
+
+/**
+ * Add development tooling to assets, e. g. by extracting a SourceMap.
+ */
+Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING = 500;
+
+/**
+ * Optimize the count of existing assets, e. g. by inlining assets of into other assets.
+ * Only assets of different types should be inlined.
+ * For assets of the same type see PROCESS_ASSETS_STAGE_OPTIMIZE_COUNT.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE = 700;
+
+/**
+ * Summarize the list of existing assets
+ * e. g. creating an assets manifest of Service Workers.
+ */
+Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE = 1000;
+
+/**
+ * Optimize the hashes of the assets, e. g. by generating real hashes of the asset content.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_HASH = 2500;
+
+/**
+ * Optimize the transfer of existing assets, e. g. by preparing a compressed (gzip) file as separate asset.
+ */
+Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER = 3000;
+
+/**
+ * Analyse existing assets.
+ */
+Compilation.PROCESS_ASSETS_STAGE_ANALYSE = 4000;
+
+/**
+ * Creating assets for reporting purposes.
+ */
+Compilation.PROCESS_ASSETS_STAGE_REPORT = 5000;
+
 module.exports = Compilation;
diff --git a/lib/Compiler.js b/lib/Compiler.js
index 11d51471bc7..eb47d50fda4 100644
--- a/lib/Compiler.js
+++ b/lib/Compiler.js
@@ -2,245 +2,693 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const parseJson = require("json-parse-better-errors");
+const parseJson = require("json-parse-even-better-errors");
 const asyncLib = require("neo-async");
-const path = require("path");
-const util = require("util");
 const {
-	Tapable,
-	SyncHook,
-	SyncBailHook,
 	AsyncParallelHook,
-	AsyncSeriesHook
+	AsyncSeriesHook,
+	SyncBailHook,
+	SyncHook
 } = require("tapable");
-
+const { SizeOnlySource } = require("webpack-sources");
+const Cache = require("./Cache");
+const CacheFacade = require("./CacheFacade");
+const ChunkGraph = require("./ChunkGraph");
 const Compilation = require("./Compilation");
-const Stats = require("./Stats");
-const Watching = require("./Watching");
-const NormalModuleFactory = require("./NormalModuleFactory");
+const ConcurrentCompilationError = require("./ConcurrentCompilationError");
 const ContextModuleFactory = require("./ContextModuleFactory");
-const ResolverFactory = require("./ResolverFactory");
-
+const ModuleGraph = require("./ModuleGraph");
+const NormalModuleFactory = require("./NormalModuleFactory");
 const RequestShortener = require("./RequestShortener");
+const ResolverFactory = require("./ResolverFactory");
+const Stats = require("./Stats");
+const Watching = require("./Watching");
+const WebpackError = require("./WebpackError");
+const { Logger } = require("./logging/Logger");
+const { dirname, join, mkdirp } = require("./util/fs");
 const { makePathsRelative } = require("./util/identifier");
-const ConcurrentCompilationError = require("./ConcurrentCompilationError");
-
-class Compiler extends Tapable {
-	constructor(context) {
-		super();
-		this.hooks = {
+const memoize = require("./util/memoize");
+const { isSourceEqual } = require("./util/source");
+const webpack = require(".");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").EntryNormalized} Entry */
+/** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputOptions */
+/** @typedef {import("../declarations/WebpackOptions").WatchOptions} WatchOptions */
+/** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
+/** @typedef {import("../declarations/WebpackOptions").Plugins} Plugins */
+/** @typedef {import("./webpack").WebpackPluginFunction} WebpackPluginFunction */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./HotModuleReplacementPlugin").ChunkHashes} ChunkHashes */
+/** @typedef {import("./HotModuleReplacementPlugin").ChunkModuleHashes} ChunkModuleHashes */
+/** @typedef {import("./HotModuleReplacementPlugin").ChunkModuleIds} ChunkModuleIds */
+/** @typedef {import("./HotModuleReplacementPlugin").ChunkRuntime} ChunkRuntime */
+/** @typedef {import("./HotModuleReplacementPlugin").FullHashChunkModuleHashes} FullHashChunkModuleHashes */
+/** @typedef {import("./HotModuleReplacementPlugin").HotIndex} HotIndex */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./RecordIdsPlugin").RecordsChunks} RecordsChunks */
+/** @typedef {import("./RecordIdsPlugin").RecordsModules} RecordsModules */
+/** @typedef {import("./config/target").PlatformTargetProperties} PlatformTargetProperties */
+/** @typedef {import("./logging/createConsoleLogger").LoggingFunction} LoggingFunction */
+/** @typedef {import("./optimize/AggressiveSplittingPlugin").SplitData} SplitData */
+/** @typedef {import("./util/fs").IStats} IStats */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
+/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
+/** @typedef {import("./util/fs").TimeInfoEntries} TimeInfoEntries */
+/** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
+/** @typedef {import("schema-utils").validate} Validate */
+/** @typedef {import("schema-utils").Schema} Schema */
+/** @typedef {import("schema-utils").ValidationErrorConfiguration} ValidationErrorConfiguration */
+
+/**
+ * @typedef {object} CompilationParams
+ * @property {NormalModuleFactory} normalModuleFactory
+ * @property {ContextModuleFactory} contextModuleFactory
+ */
+
+/**
+ * @template T
+ * @template [R=void]
+ * @typedef {import("./webpack").Callback} Callback
+ */
+
+/** @typedef {import("./webpack").ErrorCallback} ErrorCallback */
+
+/**
+ * @callback RunAsChildCallback
+ * @param {Error | null} err
+ * @param {Chunk[]=} entries
+ * @param {Compilation=} compilation
+ * @returns {void}
+ */
+
+/**
+ * @typedef {object} KnownRecords
+ * @property {SplitData[]=} aggressiveSplits
+ * @property {RecordsChunks=} chunks
+ * @property {RecordsModules=} modules
+ * @property {string=} hash
+ * @property {HotIndex=} hotIndex
+ * @property {FullHashChunkModuleHashes=} fullHashChunkModuleHashes
+ * @property {ChunkModuleHashes=} chunkModuleHashes
+ * @property {ChunkHashes=} chunkHashes
+ * @property {ChunkRuntime=} chunkRuntime
+ * @property {ChunkModuleIds=} chunkModuleIds
+ */
+
+/** @typedef {KnownRecords & Record & Record} Records */
+
+/**
+ * @typedef {object} AssetEmittedInfo
+ * @property {Buffer} content
+ * @property {Source} source
+ * @property {Compilation} compilation
+ * @property {string} outputPath
+ * @property {string} targetPath
+ */
+
+/** @typedef {{ sizeOnlySource: SizeOnlySource | undefined, writtenTo: Map }} CacheEntry */
+/** @typedef {{ path: string, source: Source, size: number | undefined, waiting: ({ cacheEntry: CacheEntry, file: string }[] | undefined) }} SimilarEntry */
+
+/** @typedef {WeakMap} WeakReferences */
+/** @typedef {import("./util/WeakTupleMap")} MemCache */
+/** @typedef {{ buildInfo: BuildInfo, references: WeakReferences | undefined, memCache: MemCache }} ModuleMemCachesItem */
+
+/**
+ * @template T
+ * @param {T[]} array an array
+ * @returns {boolean} true, if the array is sorted
+ */
+const isSorted = (array) => {
+	for (let i = 1; i < array.length; i++) {
+		if (array[i - 1] > array[i]) return false;
+	}
+	return true;
+};
+
+/**
+ * @template {object} T
+ * @param {T} obj an object
+ * @param {(keyof T)[]} keys the keys of the object
+ * @returns {T} the object with properties sorted by property name
+ */
+const sortObject = (obj, keys) => {
+	const o = /** @type {T} */ ({});
+	for (const k of keys.sort()) {
+		o[k] = obj[k];
+	}
+	return o;
+};
+
+/**
+ * @param {string} filename filename
+ * @param {string | string[] | undefined} hashes list of hashes
+ * @returns {boolean} true, if the filename contains any hash
+ */
+const includesHash = (filename, hashes) => {
+	if (!hashes) return false;
+	if (Array.isArray(hashes)) {
+		return hashes.some((hash) => filename.includes(hash));
+	}
+	return filename.includes(hashes);
+};
+
+const getValidate = memoize(() => require("schema-utils").validate);
+
+class Compiler {
+	/**
+	 * @param {string} context the compilation path
+	 * @param {WebpackOptions} options options
+	 */
+	constructor(context, options = /** @type {WebpackOptions} */ ({})) {
+		this.hooks = Object.freeze({
+			/** @type {SyncHook<[]>} */
+			initialize: new SyncHook([]),
+
+			/** @type {SyncBailHook<[Compilation], boolean | void>} */
 			shouldEmit: new SyncBailHook(["compilation"]),
+			/** @type {AsyncSeriesHook<[Stats]>} */
 			done: new AsyncSeriesHook(["stats"]),
+			/** @type {SyncHook<[Stats]>} */
+			afterDone: new SyncHook(["stats"]),
+			/** @type {AsyncSeriesHook<[]>} */
 			additionalPass: new AsyncSeriesHook([]),
-			beforeRun: new AsyncSeriesHook(["compilation"]),
-			run: new AsyncSeriesHook(["compilation"]),
+			/** @type {AsyncSeriesHook<[Compiler]>} */
+			beforeRun: new AsyncSeriesHook(["compiler"]),
+			/** @type {AsyncSeriesHook<[Compiler]>} */
+			run: new AsyncSeriesHook(["compiler"]),
+			/** @type {AsyncSeriesHook<[Compilation]>} */
 			emit: new AsyncSeriesHook(["compilation"]),
+			/** @type {AsyncSeriesHook<[string, AssetEmittedInfo]>} */
+			assetEmitted: new AsyncSeriesHook(["file", "info"]),
+			/** @type {AsyncSeriesHook<[Compilation]>} */
 			afterEmit: new AsyncSeriesHook(["compilation"]),
+
+			/** @type {SyncHook<[Compilation, CompilationParams]>} */
 			thisCompilation: new SyncHook(["compilation", "params"]),
+			/** @type {SyncHook<[Compilation, CompilationParams]>} */
 			compilation: new SyncHook(["compilation", "params"]),
+			/** @type {SyncHook<[NormalModuleFactory]>} */
 			normalModuleFactory: new SyncHook(["normalModuleFactory"]),
-			contextModuleFactory: new SyncHook(["contextModulefactory"]),
+			/** @type {SyncHook<[ContextModuleFactory]>}  */
+			contextModuleFactory: new SyncHook(["contextModuleFactory"]),
+
+			/** @type {AsyncSeriesHook<[CompilationParams]>} */
 			beforeCompile: new AsyncSeriesHook(["params"]),
+			/** @type {SyncHook<[CompilationParams]>} */
 			compile: new SyncHook(["params"]),
+			/** @type {AsyncParallelHook<[Compilation]>} */
 			make: new AsyncParallelHook(["compilation"]),
+			/** @type {AsyncParallelHook<[Compilation]>} */
+			finishMake: new AsyncSeriesHook(["compilation"]),
+			/** @type {AsyncSeriesHook<[Compilation]>} */
 			afterCompile: new AsyncSeriesHook(["compilation"]),
+
+			/** @type {AsyncSeriesHook<[]>} */
+			readRecords: new AsyncSeriesHook([]),
+			/** @type {AsyncSeriesHook<[]>} */
+			emitRecords: new AsyncSeriesHook([]),
+
+			/** @type {AsyncSeriesHook<[Compiler]>} */
 			watchRun: new AsyncSeriesHook(["compiler"]),
+			/** @type {SyncHook<[Error]>} */
 			failed: new SyncHook(["error"]),
+			/** @type {SyncHook<[string | null, number]>} */
 			invalid: new SyncHook(["filename", "changeTime"]),
+			/** @type {SyncHook<[]>} */
 			watchClose: new SyncHook([]),
+			/** @type {AsyncSeriesHook<[]>} */
+			shutdown: new AsyncSeriesHook([]),
+
+			/** @type {SyncBailHook<[string, string, EXPECTED_ANY[] | undefined], true | void>} */
+			infrastructureLog: new SyncBailHook(["origin", "type", "args"]),
 
 			// TODO the following hooks are weirdly located here
 			// TODO move them for webpack 5
+			/** @type {SyncHook<[]>} */
+			validate: new SyncHook([]),
+			/** @type {SyncHook<[]>} */
 			environment: new SyncHook([]),
+			/** @type {SyncHook<[]>} */
 			afterEnvironment: new SyncHook([]),
+			/** @type {SyncHook<[Compiler]>} */
 			afterPlugins: new SyncHook(["compiler"]),
+			/** @type {SyncHook<[Compiler]>} */
 			afterResolvers: new SyncHook(["compiler"]),
+			/** @type {SyncBailHook<[string, Entry], boolean | void>} */
 			entryOption: new SyncBailHook(["context", "entry"])
-		};
-		this._pluginCompat.tap("Compiler", options => {
-			switch (options.name) {
-				case "additional-pass":
-				case "before-run":
-				case "run":
-				case "emit":
-				case "after-emit":
-				case "before-compile":
-				case "make":
-				case "after-compile":
-				case "watch-run":
-					options.async = true;
-					break;
-			}
 		});
 
+		this.webpack = webpack;
+
+		/** @type {string | undefined} */
 		this.name = undefined;
+		/** @type {Compilation | undefined} */
 		this.parentCompilation = undefined;
+		/** @type {Compiler} */
+		this.root = this;
+		/** @type {string} */
 		this.outputPath = "";
+		/** @type {Watching | undefined} */
+		this.watching = undefined;
+
+		/** @type {OutputFileSystem | null} */
 		this.outputFileSystem = null;
+		/** @type {IntermediateFileSystem | null} */
+		this.intermediateFileSystem = null;
+		/** @type {InputFileSystem | null} */
 		this.inputFileSystem = null;
+		/** @type {WatchFileSystem | null} */
+		this.watchFileSystem = null;
 
+		/** @type {string | null} */
 		this.recordsInputPath = null;
+		/** @type {string | null} */
 		this.recordsOutputPath = null;
+		/** @type {Records} */
 		this.records = {};
+		/** @type {Set} */
+		this.managedPaths = new Set();
+		/** @type {Set} */
+		this.unmanagedPaths = new Set();
+		/** @type {Set} */
+		this.immutablePaths = new Set();
+
+		/** @type {ReadonlySet | undefined} */
+		this.modifiedFiles = undefined;
+		/** @type {ReadonlySet | undefined} */
+		this.removedFiles = undefined;
+		/** @type {TimeInfoEntries | undefined} */
+		this.fileTimestamps = undefined;
+		/** @type {TimeInfoEntries | undefined} */
+		this.contextTimestamps = undefined;
+		/** @type {number | undefined} */
+		this.fsStartTime = undefined;
+
+		/** @type {ResolverFactory} */
+		this.resolverFactory = new ResolverFactory();
 
-		this.fileTimestamps = new Map();
-		this.contextTimestamps = new Map();
+		/** @type {LoggingFunction | undefined} */
+		this.infrastructureLogger = undefined;
+
+		/** @type {Readonly} */
+		this.platform = {
+			web: null,
+			browser: null,
+			webworker: null,
+			node: null,
+			nwjs: null,
+			electron: null
+		};
 
-		this.resolverFactory = new ResolverFactory();
+		this.options = options;
 
-		// TODO remove in webpack 5
-		this.resolvers = {
-			normal: {
-				plugins: util.deprecate((hook, fn) => {
-					this.resolverFactory.plugin("resolver normal", resolver => {
-						resolver.plugin(hook, fn);
-					});
-				}, "webpack: Using compiler.resolvers.normal is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver normal", resolver => {\n  resolver.plugin(/* … */);\n}); instead.'),
-				apply: util.deprecate((...args) => {
-					this.resolverFactory.plugin("resolver normal", resolver => {
-						resolver.apply(...args);
-					});
-				}, "webpack: Using compiler.resolvers.normal is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver normal", resolver => {\n  resolver.apply(/* … */);\n}); instead.')
-			},
-			loader: {
-				plugins: util.deprecate((hook, fn) => {
-					this.resolverFactory.plugin("resolver loader", resolver => {
-						resolver.plugin(hook, fn);
-					});
-				}, "webpack: Using compiler.resolvers.loader is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver loader", resolver => {\n  resolver.plugin(/* … */);\n}); instead.'),
-				apply: util.deprecate((...args) => {
-					this.resolverFactory.plugin("resolver loader", resolver => {
-						resolver.apply(...args);
-					});
-				}, "webpack: Using compiler.resolvers.loader is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver loader", resolver => {\n  resolver.apply(/* … */);\n}); instead.')
+		this.context = context;
+
+		this.requestShortener = new RequestShortener(context, this.root);
+
+		this.cache = new Cache();
+
+		/** @type {Map | undefined} */
+		this.moduleMemCaches = undefined;
+
+		this.compilerPath = "";
+
+		/** @type {boolean} */
+		this.running = false;
+
+		/** @type {boolean} */
+		this.idle = false;
+
+		/** @type {boolean} */
+		this.watchMode = false;
+
+		this._backCompat = this.options.experiments.backCompat !== false;
+
+		/** @type {Compilation | undefined} */
+		this._lastCompilation = undefined;
+		/** @type {NormalModuleFactory | undefined} */
+		this._lastNormalModuleFactory = undefined;
+
+		/**
+		 * @private
+		 * @type {WeakMap}
+		 */
+		this._assetEmittingSourceCache = new WeakMap();
+		/**
+		 * @private
+		 * @type {Map}
+		 */
+		this._assetEmittingWrittenFiles = new Map();
+		/**
+		 * @private
+		 * @type {Set}
+		 */
+		this._assetEmittingPreviousFiles = new Set();
+	}
+
+	/**
+	 * @param {string} name cache name
+	 * @returns {CacheFacade} the cache facade instance
+	 */
+	getCache(name) {
+		return new CacheFacade(
+			this.cache,
+			`${this.compilerPath}${name}`,
+			this.options.output.hashFunction
+		);
+	}
+
+	/**
+	 * @param {string | (() => string)} name name of the logger, or function called once to get the logger name
+	 * @returns {Logger} a logger with that name
+	 */
+	getInfrastructureLogger(name) {
+		if (!name) {
+			throw new TypeError(
+				"Compiler.getInfrastructureLogger(name) called without a name"
+			);
+		}
+		return new Logger(
+			(type, args) => {
+				if (typeof name === "function") {
+					name = name();
+					if (!name) {
+						throw new TypeError(
+							"Compiler.getInfrastructureLogger(name) called with a function not returning a name"
+						);
+					}
+				}
+				if (
+					this.hooks.infrastructureLog.call(name, type, args) === undefined &&
+					this.infrastructureLogger !== undefined
+				) {
+					this.infrastructureLogger(name, type, args);
+				}
 			},
-			context: {
-				plugins: util.deprecate((hook, fn) => {
-					this.resolverFactory.plugin("resolver context", resolver => {
-						resolver.plugin(hook, fn);
+			(childName) => {
+				if (typeof name === "function") {
+					if (typeof childName === "function") {
+						return this.getInfrastructureLogger(() => {
+							if (typeof name === "function") {
+								name = name();
+								if (!name) {
+									throw new TypeError(
+										"Compiler.getInfrastructureLogger(name) called with a function not returning a name"
+									);
+								}
+							}
+							if (typeof childName === "function") {
+								childName = childName();
+								if (!childName) {
+									throw new TypeError(
+										"Logger.getChildLogger(name) called with a function not returning a name"
+									);
+								}
+							}
+							return `${name}/${childName}`;
+						});
+					}
+					return this.getInfrastructureLogger(() => {
+						if (typeof name === "function") {
+							name = name();
+							if (!name) {
+								throw new TypeError(
+									"Compiler.getInfrastructureLogger(name) called with a function not returning a name"
+								);
+							}
+						}
+						return `${name}/${childName}`;
 					});
-				}, "webpack: Using compiler.resolvers.context is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver context", resolver => {\n  resolver.plugin(/* … */);\n}); instead.'),
-				apply: util.deprecate((...args) => {
-					this.resolverFactory.plugin("resolver context", resolver => {
-						resolver.apply(...args);
+				}
+				if (typeof childName === "function") {
+					return this.getInfrastructureLogger(() => {
+						if (typeof childName === "function") {
+							childName = childName();
+							if (!childName) {
+								throw new TypeError(
+									"Logger.getChildLogger(name) called with a function not returning a name"
+								);
+							}
+						}
+						return `${name}/${childName}`;
 					});
-				}, "webpack: Using compiler.resolvers.context is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver context", resolver => {\n  resolver.apply(/* … */);\n}); instead.')
+				}
+				return this.getInfrastructureLogger(`${name}/${childName}`);
 			}
-		};
-
-		this.options = {};
+		);
+	}
 
-		this.context = context;
+	// TODO webpack 6: solve this in a better way
+	// e.g. move compilation specific info from Modules into ModuleGraph
+	_cleanupLastCompilation() {
+		if (this._lastCompilation !== undefined) {
+			for (const childCompilation of this._lastCompilation.children) {
+				for (const module of childCompilation.modules) {
+					ChunkGraph.clearChunkGraphForModule(module);
+					ModuleGraph.clearModuleGraphForModule(module);
+					module.cleanupForCache();
+				}
+				for (const chunk of childCompilation.chunks) {
+					ChunkGraph.clearChunkGraphForChunk(chunk);
+				}
+			}
 
-		this.requestShortener = new RequestShortener(context);
+			for (const module of this._lastCompilation.modules) {
+				ChunkGraph.clearChunkGraphForModule(module);
+				ModuleGraph.clearModuleGraphForModule(module);
+				module.cleanupForCache();
+			}
+			for (const chunk of this._lastCompilation.chunks) {
+				ChunkGraph.clearChunkGraphForChunk(chunk);
+			}
+			this._lastCompilation = undefined;
+		}
+	}
 
-		this.running = false;
+	// TODO webpack 6: solve this in a better way
+	_cleanupLastNormalModuleFactory() {
+		if (this._lastNormalModuleFactory !== undefined) {
+			this._lastNormalModuleFactory.cleanupForCache();
+			this._lastNormalModuleFactory = undefined;
+		}
 	}
 
+	/**
+	 * @param {WatchOptions} watchOptions the watcher's options
+	 * @param {Callback} handler signals when the call finishes
+	 * @returns {Watching | undefined} a compiler watcher
+	 */
 	watch(watchOptions, handler) {
-		if (this.running) return handler(new ConcurrentCompilationError());
+		if (this.running) {
+			handler(new ConcurrentCompilationError());
+			return;
+		}
 
 		this.running = true;
-		this.fileTimestamps = new Map();
-		this.contextTimestamps = new Map();
-		return new Watching(this, watchOptions, handler);
+		this.watchMode = true;
+		this.watching = new Watching(this, watchOptions, handler);
+		return this.watching;
 	}
 
+	/**
+	 * @param {Callback} callback signals when the call finishes
+	 * @returns {void}
+	 */
 	run(callback) {
-		if (this.running) return callback(new ConcurrentCompilationError());
+		if (this.running) {
+			callback(new ConcurrentCompilationError());
+			return;
+		}
+
+		/** @type {Logger | undefined} */
+		let logger;
 
+		/**
+		 * @param {Error | null} err error
+		 * @param {Stats=} stats stats
+		 */
 		const finalCallback = (err, stats) => {
+			if (logger) logger.time("beginIdle");
+			this.idle = true;
+			this.cache.beginIdle();
+			if (logger) logger.timeEnd("beginIdle");
 			this.running = false;
-
-			if (callback !== undefined) return callback(err, stats);
+			if (err) {
+				this.hooks.failed.call(err);
+			}
+			if (callback !== undefined) callback(err, stats);
+			this.hooks.afterDone.call(/** @type {Stats} */ (stats));
 		};
 
 		const startTime = Date.now();
 
 		this.running = true;
 
-		const onCompiled = (err, compilation) => {
+		/**
+		 * @param {Error | null} err error
+		 * @param {Compilation=} _compilation compilation
+		 * @returns {void}
+		 */
+		const onCompiled = (err, _compilation) => {
 			if (err) return finalCallback(err);
 
+			const compilation = /** @type {Compilation} */ (_compilation);
+
 			if (this.hooks.shouldEmit.call(compilation) === false) {
+				compilation.startTime = startTime;
+				compilation.endTime = Date.now();
 				const stats = new Stats(compilation);
-				stats.startTime = startTime;
-				stats.endTime = Date.now();
-				this.hooks.done.callAsync(stats, err => {
+				this.hooks.done.callAsync(stats, (err) => {
 					if (err) return finalCallback(err);
 					return finalCallback(null, stats);
 				});
 				return;
 			}
 
-			this.emitAssets(compilation, err => {
-				if (err) return finalCallback(err);
+			process.nextTick(() => {
+				logger = compilation.getLogger("webpack.Compiler");
+				logger.time("emitAssets");
+				this.emitAssets(compilation, (err) => {
+					/** @type {Logger} */
+					(logger).timeEnd("emitAssets");
+					if (err) return finalCallback(err);
 
-				if (compilation.hooks.needAdditionalPass.call()) {
-					compilation.needAdditionalPass = true;
+					if (compilation.hooks.needAdditionalPass.call()) {
+						compilation.needAdditionalPass = true;
+
+						compilation.startTime = startTime;
+						compilation.endTime = Date.now();
+						/** @type {Logger} */
+						(logger).time("done hook");
+						const stats = new Stats(compilation);
+						this.hooks.done.callAsync(stats, (err) => {
+							/** @type {Logger} */
+							(logger).timeEnd("done hook");
+							if (err) return finalCallback(err);
 
-					const stats = new Stats(compilation);
-					stats.startTime = startTime;
-					stats.endTime = Date.now();
-					this.hooks.done.callAsync(stats, err => {
+							this.hooks.additionalPass.callAsync((err) => {
+								if (err) return finalCallback(err);
+								this.compile(onCompiled);
+							});
+						});
+						return;
+					}
+
+					/** @type {Logger} */
+					(logger).time("emitRecords");
+					this.emitRecords((err) => {
+						/** @type {Logger} */
+						(logger).timeEnd("emitRecords");
 						if (err) return finalCallback(err);
 
-						this.hooks.additionalPass.callAsync(err => {
+						compilation.startTime = startTime;
+						compilation.endTime = Date.now();
+						/** @type {Logger} */
+						(logger).time("done hook");
+						const stats = new Stats(compilation);
+						this.hooks.done.callAsync(stats, (err) => {
+							/** @type {Logger} */
+							(logger).timeEnd("done hook");
 							if (err) return finalCallback(err);
-							this.compile(onCompiled);
+							this.cache.storeBuildDependencies(
+								compilation.buildDependencies,
+								(err) => {
+									if (err) return finalCallback(err);
+									return finalCallback(null, stats);
+								}
+							);
 						});
 					});
-					return;
-				}
+				});
+			});
+		};
+
+		const run = () => {
+			this.hooks.beforeRun.callAsync(this, (err) => {
+				if (err) return finalCallback(err);
 
-				this.emitRecords(err => {
+				this.hooks.run.callAsync(this, (err) => {
 					if (err) return finalCallback(err);
 
-					const stats = new Stats(compilation);
-					stats.startTime = startTime;
-					stats.endTime = Date.now();
-					this.hooks.done.callAsync(stats, err => {
+					this.readRecords((err) => {
 						if (err) return finalCallback(err);
-						return finalCallback(null, stats);
+
+						this.compile(onCompiled);
 					});
 				});
 			});
 		};
 
-		this.hooks.beforeRun.callAsync(this, err => {
-			if (err) return finalCallback(err);
-
-			this.hooks.run.callAsync(this, err => {
+		if (this.idle) {
+			this.cache.endIdle((err) => {
 				if (err) return finalCallback(err);
 
-				this.readRecords(err => {
-					if (err) return finalCallback(err);
-
-					this.compile(onCompiled);
-				});
+				this.idle = false;
+				run();
 			});
-		});
+		} else {
+			run();
+		}
 	}
 
+	/**
+	 * @param {RunAsChildCallback} callback signals when the call finishes
+	 * @returns {void}
+	 */
 	runAsChild(callback) {
-		this.compile((err, compilation) => {
-			if (err) return callback(err);
+		const startTime = Date.now();
+
+		/**
+		 * @param {Error | null} err error
+		 * @param {Chunk[]=} entries entries
+		 * @param {Compilation=} compilation compilation
+		 */
+		const finalCallback = (err, entries, compilation) => {
+			try {
+				callback(err, entries, compilation);
+			} catch (runAsChildErr) {
+				const err = new WebpackError(
+					`compiler.runAsChild callback error: ${runAsChildErr}`,
+					{ cause: runAsChildErr }
+				);
+				err.details = /** @type {Error} */ (runAsChildErr).stack;
+				/** @type {Compilation} */
+				(this.parentCompilation).errors.push(err);
+			}
+		};
+
+		this.compile((err, _compilation) => {
+			if (err) return finalCallback(err);
+
+			const compilation = /** @type {Compilation} */ (_compilation);
+			const parentCompilation = /** @type {Compilation} */ (
+				this.parentCompilation
+			);
+
+			parentCompilation.children.push(compilation);
 
-			this.parentCompilation.children.push(compilation);
-			for (const name of Object.keys(compilation.assets)) {
-				this.parentCompilation.assets[name] = compilation.assets[name];
+			for (const { name, source, info } of compilation.getAssets()) {
+				parentCompilation.emitAsset(name, source, info);
 			}
 
-			const entries = Array.from(
-				compilation.entrypoints.values(),
-				ep => ep.chunks
-			).reduce((array, chunks) => {
-				return array.concat(chunks);
-			}, []);
+			/** @type {Chunk[]} */
+			const entries = [];
 
-			return callback(null, entries, compilation);
+			for (const ep of compilation.entrypoints.values()) {
+				entries.push(...ep.chunks);
+			}
+
+			compilation.startTime = startTime;
+			compilation.endTime = Date.now();
+
+			return finalCallback(null, entries, compilation);
 		});
 	}
 
@@ -250,124 +698,506 @@ class Compiler extends Tapable {
 		}
 	}
 
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @param {ErrorCallback} callback signals when the assets are emitted
+	 * @returns {void}
+	 */
 	emitAssets(compilation, callback) {
+		/** @type {string} */
 		let outputPath;
 
-		const emitFiles = err => {
+		/**
+		 * @param {Error=} err error
+		 * @returns {void}
+		 */
+		const emitFiles = (err) => {
 			if (err) return callback(err);
 
-			asyncLib.forEach(
-				compilation.assets,
-				(source, file, callback) => {
+			const assets = compilation.getAssets();
+			compilation.assets = { ...compilation.assets };
+			/** @type {Map} */
+			const caseInsensitiveMap = new Map();
+			/** @type {Set} */
+			const allTargetPaths = new Set();
+			asyncLib.forEachLimit(
+				assets,
+				15,
+				({ name: file, source, info }, callback) => {
 					let targetFile = file;
-					const queryStringIdx = targetFile.indexOf("?");
-					if (queryStringIdx >= 0) {
-						targetFile = targetFile.substr(0, queryStringIdx);
+					let immutable = info.immutable;
+					const queryOrHashStringIdx = targetFile.search(/[?#]/);
+					if (queryOrHashStringIdx >= 0) {
+						targetFile = targetFile.slice(0, queryOrHashStringIdx);
+						// We may remove the hash, which is in the query string
+						// So we recheck if the file is immutable
+						// This doesn't cover all cases, but immutable is only a performance optimization anyway
+						immutable =
+							immutable &&
+							(includesHash(targetFile, info.contenthash) ||
+								includesHash(targetFile, info.chunkhash) ||
+								includesHash(targetFile, info.modulehash) ||
+								includesHash(targetFile, info.fullhash));
 					}
 
-					const writeOut = err => {
+					/**
+					 * @param {Error=} err error
+					 * @returns {void}
+					 */
+					const writeOut = (err) => {
 						if (err) return callback(err);
-						const targetPath = this.outputFileSystem.join(
+						const targetPath = join(
+							/** @type {OutputFileSystem} */
+							(this.outputFileSystem),
 							outputPath,
 							targetFile
 						);
-						if (source.existsAt === targetPath) {
-							source.emitted = false;
-							return callback();
+						allTargetPaths.add(targetPath);
+
+						// check if the target file has already been written by this Compiler
+						const targetFileGeneration =
+							this._assetEmittingWrittenFiles.get(targetPath);
+
+						// create an cache entry for this Source if not already existing
+						let cacheEntry = this._assetEmittingSourceCache.get(source);
+						if (cacheEntry === undefined) {
+							cacheEntry = {
+								sizeOnlySource: undefined,
+								/** @type {CacheEntry["writtenTo"]} */
+								writtenTo: new Map()
+							};
+							this._assetEmittingSourceCache.set(source, cacheEntry);
 						}
-						let content = source.source();
 
-						if (!Buffer.isBuffer(content)) {
-							content = Buffer.from(content, "utf8");
+						/** @type {SimilarEntry | undefined} */
+						let similarEntry;
+
+						const checkSimilarFile = () => {
+							const caseInsensitiveTargetPath = targetPath.toLowerCase();
+							similarEntry = caseInsensitiveMap.get(caseInsensitiveTargetPath);
+							if (similarEntry !== undefined) {
+								const { path: other, source: otherSource } = similarEntry;
+								if (isSourceEqual(otherSource, source)) {
+									// Size may or may not be available at this point.
+									// If it's not available add to "waiting" list and it will be updated once available
+									if (similarEntry.size !== undefined) {
+										updateWithReplacementSource(similarEntry.size);
+									} else {
+										if (!similarEntry.waiting) similarEntry.waiting = [];
+										similarEntry.waiting.push({ file, cacheEntry });
+									}
+									alreadyWritten();
+								} else {
+									const err =
+										new WebpackError(`Prevent writing to file that only differs in casing or query string from already written file.
+This will lead to a race-condition and corrupted files on case-insensitive file systems.
+${targetPath}
+${other}`);
+									err.file = file;
+									callback(err);
+								}
+								return true;
+							}
+							caseInsensitiveMap.set(
+								caseInsensitiveTargetPath,
+								(similarEntry = /** @type {SimilarEntry} */ ({
+									path: targetPath,
+									source,
+									size: undefined,
+									waiting: undefined
+								}))
+							);
+							return false;
+						};
+
+						/**
+						 * get the binary (Buffer) content from the Source
+						 * @returns {Buffer} content for the source
+						 */
+						const getContent = () => {
+							if (typeof source.buffer === "function") {
+								return source.buffer();
+							}
+							const bufferOrString = source.source();
+							if (Buffer.isBuffer(bufferOrString)) {
+								return bufferOrString;
+							}
+							return Buffer.from(bufferOrString, "utf8");
+						};
+
+						const alreadyWritten = () => {
+							// cache the information that the Source has been already been written to that location
+							if (targetFileGeneration === undefined) {
+								const newGeneration = 1;
+								this._assetEmittingWrittenFiles.set(targetPath, newGeneration);
+								/** @type {CacheEntry} */
+								(cacheEntry).writtenTo.set(targetPath, newGeneration);
+							} else {
+								/** @type {CacheEntry} */
+								(cacheEntry).writtenTo.set(targetPath, targetFileGeneration);
+							}
+							callback();
+						};
+
+						/**
+						 * Write the file to output file system
+						 * @param {Buffer} content content to be written
+						 * @returns {void}
+						 */
+						const doWrite = (content) => {
+							/** @type {OutputFileSystem} */
+							(this.outputFileSystem).writeFile(targetPath, content, (err) => {
+								if (err) return callback(err);
+
+								// information marker that the asset has been emitted
+								compilation.emittedAssets.add(file);
+
+								// cache the information that the Source has been written to that location
+								const newGeneration =
+									targetFileGeneration === undefined
+										? 1
+										: targetFileGeneration + 1;
+								/** @type {CacheEntry} */
+								(cacheEntry).writtenTo.set(targetPath, newGeneration);
+								this._assetEmittingWrittenFiles.set(targetPath, newGeneration);
+								this.hooks.assetEmitted.callAsync(
+									file,
+									{
+										content,
+										source,
+										outputPath,
+										compilation,
+										targetPath
+									},
+									callback
+								);
+							});
+						};
+
+						/**
+						 * @param {number} size size
+						 */
+						const updateWithReplacementSource = (size) => {
+							updateFileWithReplacementSource(
+								file,
+								/** @type {CacheEntry} */ (cacheEntry),
+								size
+							);
+							/** @type {SimilarEntry} */
+							(similarEntry).size = size;
+							if (
+								/** @type {SimilarEntry} */ (similarEntry).waiting !== undefined
+							) {
+								for (const { file, cacheEntry } of /** @type {SimilarEntry} */ (
+									similarEntry
+								).waiting) {
+									updateFileWithReplacementSource(file, cacheEntry, size);
+								}
+							}
+						};
+
+						/**
+						 * @param {string} file file
+						 * @param {CacheEntry} cacheEntry cache entry
+						 * @param {number} size size
+						 */
+						const updateFileWithReplacementSource = (
+							file,
+							cacheEntry,
+							size
+						) => {
+							// Create a replacement resource which only allows to ask for size
+							// This allows to GC all memory allocated by the Source
+							// (expect when the Source is stored in any other cache)
+							if (!cacheEntry.sizeOnlySource) {
+								cacheEntry.sizeOnlySource = new SizeOnlySource(size);
+							}
+							compilation.updateAsset(file, cacheEntry.sizeOnlySource, {
+								size
+							});
+						};
+
+						/**
+						 * @param {IStats} stats stats
+						 * @returns {void}
+						 */
+						const processExistingFile = (stats) => {
+							// skip emitting if it's already there and an immutable file
+							if (immutable) {
+								updateWithReplacementSource(/** @type {number} */ (stats.size));
+								return alreadyWritten();
+							}
+
+							const content = getContent();
+
+							updateWithReplacementSource(content.length);
+
+							// if it exists and content on disk matches content
+							// skip writing the same content again
+							// (to keep mtime and don't trigger watchers)
+							// for a fast negative match file size is compared first
+							if (content.length === stats.size) {
+								compilation.comparedForEmitAssets.add(file);
+								return /** @type {OutputFileSystem} */ (
+									this.outputFileSystem
+								).readFile(targetPath, (err, existingContent) => {
+									if (
+										err ||
+										!content.equals(/** @type {Buffer} */ (existingContent))
+									) {
+										return doWrite(content);
+									}
+									return alreadyWritten();
+								});
+							}
+
+							return doWrite(content);
+						};
+
+						const processMissingFile = () => {
+							const content = getContent();
+
+							updateWithReplacementSource(content.length);
+
+							return doWrite(content);
+						};
+
+						// if the target file has already been written
+						if (targetFileGeneration !== undefined) {
+							// check if the Source has been written to this target file
+							const writtenGeneration = /** @type {CacheEntry} */ (
+								cacheEntry
+							).writtenTo.get(targetPath);
+							if (writtenGeneration === targetFileGeneration) {
+								// if yes, we may skip writing the file
+								// if it's already there
+								// (we assume one doesn't modify files while the Compiler is running, other then removing them)
+
+								if (this._assetEmittingPreviousFiles.has(targetPath)) {
+									const sizeOnlySource = /** @type {SizeOnlySource} */ (
+										/** @type {CacheEntry} */ (cacheEntry).sizeOnlySource
+									);
+
+									// We assume that assets from the last compilation say intact on disk (they are not removed)
+									compilation.updateAsset(file, sizeOnlySource, {
+										size: sizeOnlySource.size()
+									});
+
+									return callback();
+								}
+								// Settings immutable will make it accept file content without comparing when file exist
+								immutable = true;
+							} else if (!immutable) {
+								if (checkSimilarFile()) return;
+								// We wrote to this file before which has very likely a different content
+								// skip comparing and assume content is different for performance
+								// This case happens often during watch mode.
+								return processMissingFile();
+							}
 						}
 
-						source.existsAt = targetPath;
-						source.emitted = true;
-						this.outputFileSystem.writeFile(targetPath, content, callback);
+						if (checkSimilarFile()) return;
+						if (this.options.output.compareBeforeEmit) {
+							/** @type {OutputFileSystem} */
+							(this.outputFileSystem).stat(targetPath, (err, stats) => {
+								const exists = !err && /** @type {IStats} */ (stats).isFile();
+
+								if (exists) {
+									processExistingFile(/** @type {IStats} */ (stats));
+								} else {
+									processMissingFile();
+								}
+							});
+						} else {
+							processMissingFile();
+						}
 					};
 
-					if (targetFile.match(/\/|\\/)) {
-						const dir = path.dirname(targetFile);
-						this.outputFileSystem.mkdirp(
-							this.outputFileSystem.join(outputPath, dir),
-							writeOut
-						);
+					if (/\/|\\/.test(targetFile)) {
+						const fs = /** @type {OutputFileSystem} */ (this.outputFileSystem);
+						const dir = dirname(fs, join(fs, outputPath, targetFile));
+						mkdirp(fs, dir, writeOut);
 					} else {
 						writeOut();
 					}
 				},
-				err => {
-					if (err) return callback(err);
+				(err) => {
+					// Clear map to free up memory
+					caseInsensitiveMap.clear();
+					if (err) {
+						this._assetEmittingPreviousFiles.clear();
+						return callback(err);
+					}
 
-					this.hooks.afterEmit.callAsync(compilation, err => {
+					this._assetEmittingPreviousFiles = allTargetPaths;
+
+					this.hooks.afterEmit.callAsync(compilation, (err) => {
 						if (err) return callback(err);
 
-						return callback();
+						return callback(null);
 					});
 				}
 			);
 		};
 
-		this.hooks.emit.callAsync(compilation, err => {
+		this.hooks.emit.callAsync(compilation, (err) => {
 			if (err) return callback(err);
-			outputPath = compilation.getPath(this.outputPath);
-			this.outputFileSystem.mkdirp(outputPath, emitFiles);
+			outputPath = compilation.getPath(this.outputPath, {});
+			mkdirp(
+				/** @type {OutputFileSystem} */ (this.outputFileSystem),
+				outputPath,
+				emitFiles
+			);
 		});
 	}
 
+	/**
+	 * @param {ErrorCallback} callback signals when the call finishes
+	 * @returns {void}
+	 */
 	emitRecords(callback) {
-		if (!this.recordsOutputPath) return callback();
-		const idx1 = this.recordsOutputPath.lastIndexOf("/");
-		const idx2 = this.recordsOutputPath.lastIndexOf("\\");
-		let recordsOutputPathDirectory = null;
-		if (idx1 > idx2) {
-			recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx1);
-		} else if (idx1 < idx2) {
-			recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx2);
+		if (this.hooks.emitRecords.isUsed()) {
+			if (this.recordsOutputPath) {
+				asyncLib.parallel(
+					[
+						(cb) => this.hooks.emitRecords.callAsync(cb),
+						this._emitRecords.bind(this)
+					],
+					(err) => callback(/** @type {Error | null} */ (err))
+				);
+			} else {
+				this.hooks.emitRecords.callAsync(callback);
+			}
+		} else if (this.recordsOutputPath) {
+			this._emitRecords(callback);
+		} else {
+			callback(null);
 		}
+	}
 
+	/**
+	 * @param {ErrorCallback} callback signals when the call finishes
+	 * @returns {void}
+	 */
+	_emitRecords(callback) {
 		const writeFile = () => {
-			this.outputFileSystem.writeFile(
-				this.recordsOutputPath,
-				JSON.stringify(this.records, undefined, 2),
+			/** @type {OutputFileSystem} */
+			(this.outputFileSystem).writeFile(
+				/** @type {string} */ (this.recordsOutputPath),
+				JSON.stringify(
+					this.records,
+					(n, value) => {
+						if (
+							typeof value === "object" &&
+							value !== null &&
+							!Array.isArray(value)
+						) {
+							const keys = Object.keys(value);
+							if (!isSorted(keys)) {
+								return sortObject(value, keys);
+							}
+						}
+						return value;
+					},
+					2
+				),
 				callback
 			);
 		};
 
+		const recordsOutputPathDirectory = dirname(
+			/** @type {OutputFileSystem} */
+			(this.outputFileSystem),
+			/** @type {string} */
+			(this.recordsOutputPath)
+		);
 		if (!recordsOutputPathDirectory) {
 			return writeFile();
 		}
-		this.outputFileSystem.mkdirp(recordsOutputPathDirectory, err => {
-			if (err) return callback(err);
-			writeFile();
-		});
+		mkdirp(
+			/** @type {OutputFileSystem} */ (this.outputFileSystem),
+			recordsOutputPathDirectory,
+			(err) => {
+				if (err) return callback(err);
+				writeFile();
+			}
+		);
 	}
 
+	/**
+	 * @param {ErrorCallback} callback signals when the call finishes
+	 * @returns {void}
+	 */
 	readRecords(callback) {
+		if (this.hooks.readRecords.isUsed()) {
+			if (this.recordsInputPath) {
+				asyncLib.parallel(
+					[
+						(cb) => this.hooks.readRecords.callAsync(cb),
+						this._readRecords.bind(this)
+					],
+					(err) => callback(/** @type {Error | null} */ (err))
+				);
+			} else {
+				this.records = {};
+				this.hooks.readRecords.callAsync(callback);
+			}
+		} else if (this.recordsInputPath) {
+			this._readRecords(callback);
+		} else {
+			this.records = {};
+			callback(null);
+		}
+	}
+
+	/**
+	 * @param {ErrorCallback} callback signals when the call finishes
+	 * @returns {void}
+	 */
+	_readRecords(callback) {
 		if (!this.recordsInputPath) {
 			this.records = {};
-			return callback();
+			return callback(null);
 		}
-		this.inputFileSystem.stat(this.recordsInputPath, err => {
+		/** @type {InputFileSystem} */
+		(this.inputFileSystem).stat(this.recordsInputPath, (err) => {
 			// It doesn't exist
 			// We can ignore this.
-			if (err) return callback();
+			if (err) return callback(null);
 
-			this.inputFileSystem.readFile(this.recordsInputPath, (err, content) => {
-				if (err) return callback(err);
+			/** @type {InputFileSystem} */
+			(this.inputFileSystem).readFile(
+				/** @type {string} */
+				(this.recordsInputPath),
+				(err, content) => {
+					if (err) return callback(err);
 
-				try {
-					this.records = parseJson(content.toString("utf-8"));
-				} catch (e) {
-					e.message = "Cannot parse records: " + e.message;
-					return callback(e);
-				}
+					try {
+						this.records = parseJson(
+							/** @type {Buffer} */ (content).toString("utf8")
+						);
+					} catch (parseErr) {
+						return callback(
+							new Error(
+								`Cannot parse records: ${/** @type {Error} */ (parseErr).message}`
+							)
+						);
+					}
 
-				return callback();
-			});
+					return callback(null);
+				}
+			);
 		});
 	}
 
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @param {string} compilerName the compiler's name
+	 * @param {number} compilerIndex the compiler's index
+	 * @param {Partial=} outputOptions the output options
+	 * @param {Plugins=} plugins the plugins to apply
+	 * @returns {Compiler} a child compiler
+	 */
 	createChildCompiler(
 		compilation,
 		compilerName,
@@ -375,53 +1205,79 @@ class Compiler extends Tapable {
 		outputOptions,
 		plugins
 	) {
-		const childCompiler = new Compiler(this.context);
-		if (Array.isArray(plugins)) {
-			for (const plugin of plugins) {
-				plugin.apply(childCompiler);
+		const childCompiler = new Compiler(this.context, {
+			...this.options,
+			output: {
+				...this.options.output,
+				...outputOptions
 			}
-		}
-		for (const name in this.hooks) {
-			if (
-				![
-					"make",
-					"compile",
-					"emit",
-					"afterEmit",
-					"invalid",
-					"done",
-					"thisCompilation"
-				].includes(name)
-			) {
-				if (childCompiler.hooks[name]) {
-					childCompiler.hooks[name].taps = this.hooks[name].taps.slice();
-				}
-			}
-		}
+		});
 		childCompiler.name = compilerName;
 		childCompiler.outputPath = this.outputPath;
 		childCompiler.inputFileSystem = this.inputFileSystem;
 		childCompiler.outputFileSystem = null;
 		childCompiler.resolverFactory = this.resolverFactory;
+		childCompiler.modifiedFiles = this.modifiedFiles;
+		childCompiler.removedFiles = this.removedFiles;
 		childCompiler.fileTimestamps = this.fileTimestamps;
 		childCompiler.contextTimestamps = this.contextTimestamps;
+		childCompiler.fsStartTime = this.fsStartTime;
+		childCompiler.cache = this.cache;
+		childCompiler.compilerPath = `${this.compilerPath}${compilerName}|${compilerIndex}|`;
+		childCompiler._backCompat = this._backCompat;
 
-		const relativeCompilerName = makePathsRelative(this.context, compilerName);
+		const relativeCompilerName = makePathsRelative(
+			this.context,
+			compilerName,
+			this.root
+		);
 		if (!this.records[relativeCompilerName]) {
 			this.records[relativeCompilerName] = [];
 		}
 		if (this.records[relativeCompilerName][compilerIndex]) {
-			childCompiler.records = this.records[relativeCompilerName][compilerIndex];
+			childCompiler.records =
+				/** @type {Records} */
+				(this.records[relativeCompilerName][compilerIndex]);
 		} else {
 			this.records[relativeCompilerName].push((childCompiler.records = {}));
 		}
 
-		childCompiler.options = Object.create(this.options);
-		childCompiler.options.output = Object.create(childCompiler.options.output);
-		for (const name in outputOptions) {
-			childCompiler.options.output[name] = outputOptions[name];
-		}
 		childCompiler.parentCompilation = compilation;
+		childCompiler.root = this.root;
+		if (Array.isArray(plugins)) {
+			for (const plugin of plugins) {
+				if (typeof plugin === "function") {
+					/** @type {WebpackPluginFunction} */
+					(plugin).call(childCompiler, childCompiler);
+				} else if (plugin) {
+					plugin.apply(childCompiler);
+				}
+			}
+		}
+		for (const name in this.hooks) {
+			if (
+				![
+					"make",
+					"compile",
+					"emit",
+					"afterEmit",
+					"invalid",
+					"done",
+					"thisCompilation"
+				].includes(name) &&
+				childCompiler.hooks[/** @type {keyof Compiler["hooks"]} */ (name)]
+			) {
+				childCompiler.hooks[
+					/** @type {keyof Compiler["hooks"]} */
+					(name)
+				].taps = [
+					...this.hooks[
+						/** @type {keyof Compiler["hooks"]} */
+						(name)
+					].taps
+				];
+			}
+		}
 
 		compilation.hooks.childCompiler.call(
 			childCompiler,
@@ -433,31 +1289,41 @@ class Compiler extends Tapable {
 	}
 
 	isChild() {
-		return !!this.parentCompilation;
+		return Boolean(this.parentCompilation);
 	}
 
-	createCompilation() {
-		return new Compilation(this);
+	/**
+	 * @param {CompilationParams} params the compilation parameters
+	 * @returns {Compilation} compilation
+	 */
+	createCompilation(params) {
+		this._cleanupLastCompilation();
+		return (this._lastCompilation = new Compilation(this, params));
 	}
 
+	/**
+	 * @param {CompilationParams} params the compilation parameters
+	 * @returns {Compilation} the created compilation
+	 */
 	newCompilation(params) {
-		const compilation = this.createCompilation();
-		compilation.fileTimestamps = this.fileTimestamps;
-		compilation.contextTimestamps = this.contextTimestamps;
+		const compilation = this.createCompilation(params);
 		compilation.name = this.name;
 		compilation.records = this.records;
-		compilation.compilationDependencies = params.compilationDependencies;
 		this.hooks.thisCompilation.call(compilation, params);
 		this.hooks.compilation.call(compilation, params);
 		return compilation;
 	}
 
 	createNormalModuleFactory() {
-		const normalModuleFactory = new NormalModuleFactory(
-			this.options.context,
-			this.resolverFactory,
-			this.options.module || {}
-		);
+		this._cleanupLastNormalModuleFactory();
+		const normalModuleFactory = new NormalModuleFactory({
+			context: this.options.context,
+			fs: /** @type {InputFileSystem} */ (this.inputFileSystem),
+			resolverFactory: this.resolverFactory,
+			options: this.options.module,
+			associatedObjectForCache: this.root
+		});
+		this._lastNormalModuleFactory = normalModuleFactory;
 		this.hooks.normalModuleFactory.call(normalModuleFactory);
 		return normalModuleFactory;
 	}
@@ -471,38 +1337,135 @@ class Compiler extends Tapable {
 	newCompilationParams() {
 		const params = {
 			normalModuleFactory: this.createNormalModuleFactory(),
-			contextModuleFactory: this.createContextModuleFactory(),
-			compilationDependencies: new Set()
+			contextModuleFactory: this.createContextModuleFactory()
 		};
 		return params;
 	}
 
+	/**
+	 * @param {Callback} callback signals when the compilation finishes
+	 * @returns {void}
+	 */
 	compile(callback) {
 		const params = this.newCompilationParams();
-		this.hooks.beforeCompile.callAsync(params, err => {
+		this.hooks.beforeCompile.callAsync(params, (err) => {
 			if (err) return callback(err);
 
 			this.hooks.compile.call(params);
 
 			const compilation = this.newCompilation(params);
 
-			this.hooks.make.callAsync(compilation, err => {
-				if (err) return callback(err);
+			const logger = compilation.getLogger("webpack.Compiler");
 
-				compilation.finish();
+			logger.time("make hook");
+			this.hooks.make.callAsync(compilation, (err) => {
+				logger.timeEnd("make hook");
+				if (err) return callback(err);
 
-				compilation.seal(err => {
+				logger.time("finish make hook");
+				this.hooks.finishMake.callAsync(compilation, (err) => {
+					logger.timeEnd("finish make hook");
 					if (err) return callback(err);
 
-					this.hooks.afterCompile.callAsync(compilation, err => {
-						if (err) return callback(err);
-
-						return callback(null, compilation);
+					process.nextTick(() => {
+						logger.time("finish compilation");
+						compilation.finish((err) => {
+							logger.timeEnd("finish compilation");
+							if (err) return callback(err);
+
+							logger.time("seal compilation");
+							compilation.seal((err) => {
+								logger.timeEnd("seal compilation");
+								if (err) return callback(err);
+
+								logger.time("afterCompile hook");
+								this.hooks.afterCompile.callAsync(compilation, (err) => {
+									logger.timeEnd("afterCompile hook");
+									if (err) return callback(err);
+
+									return callback(null, compilation);
+								});
+							});
+						});
 					});
 				});
 			});
 		});
 	}
+
+	/**
+	 * @param {ErrorCallback} callback signals when the compiler closes
+	 * @returns {void}
+	 */
+	close(callback) {
+		if (this.watching) {
+			// When there is still an active watching, close this first
+			this.watching.close((_err) => {
+				this.close(callback);
+			});
+			return;
+		}
+		this.hooks.shutdown.callAsync((err) => {
+			if (err) return callback(err);
+			// Get rid of reference to last compilation to avoid leaking memory
+			// We can't run this._cleanupLastCompilation() as the Stats to this compilation
+			// might be still in use. We try to get rid of the reference to the cache instead.
+			this._lastCompilation = undefined;
+			this._lastNormalModuleFactory = undefined;
+			this.cache.shutdown(callback);
+		});
+	}
+
+	/**
+	 * Schema validation function with optional pre-compiled check
+	 * @template {EXPECTED_OBJECT | EXPECTED_OBJECT[]} [T=EXPECTED_OBJECT]
+	 * @param {Schema | (() => Schema)} schema schema
+	 * @param {T} value value
+	 * @param {ValidationErrorConfiguration=} options options
+	 * @param {((value: T) => boolean)=} check options
+	 */
+	validate(schema, value, options, check) {
+		// Avoid validation at all when disabled
+		if (this.options.validate === false) {
+			return;
+		}
+
+		/**
+		 * @returns {Schema} schema
+		 */
+		const getSchema = () => {
+			if (typeof schema === "function") {
+				return schema();
+			}
+
+			return schema;
+		};
+
+		// // If we have precompiled schema let's use it
+		if (check) {
+			if (!check(value)) {
+				getValidate()(
+					getSchema(),
+					/** @type {EXPECTED_OBJECT | EXPECTED_OBJECT[]} */
+					(value),
+					options
+				);
+				require("util").deprecate(
+					() => {},
+					"webpack bug: Pre-compiled schema reports error while real schema is happy. This has performance drawbacks.",
+					"DEP_WEBPACK_PRE_COMPILED_SCHEMA_INVALID"
+				)();
+			}
+			return;
+		}
+
+		// Otherwise let's standard validation
+		getValidate()(
+			getSchema(),
+			/** @type {EXPECTED_OBJECT | EXPECTED_OBJECT[]} */ (value),
+			options
+		);
+	}
 }
 
 module.exports = Compiler;
diff --git a/lib/ConcatenationScope.js b/lib/ConcatenationScope.js
new file mode 100644
index 00000000000..bb89fbf71be
--- /dev/null
+++ b/lib/ConcatenationScope.js
@@ -0,0 +1,181 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const {
+	DEFAULT_EXPORT,
+	NAMESPACE_OBJECT_EXPORT
+} = require("./util/concatenate");
+
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./optimize/ConcatenatedModule").ConcatenatedModuleInfo} ConcatenatedModuleInfo */
+/** @typedef {import("./optimize/ConcatenatedModule").ModuleInfo} ModuleInfo */
+/** @typedef {import("./optimize/ConcatenatedModule").ExportName} Ids */
+
+const MODULE_REFERENCE_REGEXP =
+	/^__WEBPACK_MODULE_REFERENCE__(\d+)_([\da-f]+|ns)(_call)?(_directImport)?(_deferredImport)?(?:_asiSafe(\d))?__$/;
+
+/**
+ * @typedef {object} ModuleReferenceOptions
+ * @property {Ids} ids the properties/exports of the module
+ * @property {boolean} call true, when this referenced export is called
+ * @property {boolean} directImport true, when this referenced export is directly imported (not via property access)
+ * @property {boolean} deferredImport true, when this referenced export is deferred
+ * @property {boolean | undefined} asiSafe if the position is ASI safe or unknown
+ */
+
+class ConcatenationScope {
+	/**
+	 * @param {ModuleInfo[] | Map} modulesMap all module info by module
+	 * @param {ConcatenatedModuleInfo} currentModule the current module info
+	 * @param {Set} usedNames all used names
+	 */
+	constructor(modulesMap, currentModule, usedNames) {
+		this._currentModule = currentModule;
+		if (Array.isArray(modulesMap)) {
+			/** @type {Map} */
+			const map = new Map();
+			for (const info of modulesMap) {
+				map.set(info.module, /** @type {ConcatenatedModuleInfo} */ (info));
+			}
+			modulesMap = map;
+		}
+		this.usedNames = usedNames;
+		this._modulesMap = modulesMap;
+	}
+
+	/**
+	 * @param {Module} module the referenced module
+	 * @returns {boolean} true, when it's in the scope
+	 */
+	isModuleInScope(module) {
+		return this._modulesMap.has(module);
+	}
+
+	/**
+	 * @param {string} exportName name of the export
+	 * @param {string} symbol identifier of the export in source code
+	 */
+	registerExport(exportName, symbol) {
+		if (!this._currentModule.exportMap) {
+			this._currentModule.exportMap = new Map();
+		}
+		if (!this._currentModule.exportMap.has(exportName)) {
+			this._currentModule.exportMap.set(exportName, symbol);
+		}
+	}
+
+	/**
+	 * @param {string} exportName name of the export
+	 * @param {string} expression expression to be used
+	 */
+	registerRawExport(exportName, expression) {
+		if (!this._currentModule.rawExportMap) {
+			this._currentModule.rawExportMap = new Map();
+		}
+		if (!this._currentModule.rawExportMap.has(exportName)) {
+			this._currentModule.rawExportMap.set(exportName, expression);
+		}
+	}
+
+	/**
+	 * @param {string} exportName name of the export
+	 * @returns {string | undefined} the expression of the export
+	 */
+	getRawExport(exportName) {
+		if (!this._currentModule.rawExportMap) {
+			return undefined;
+		}
+		return this._currentModule.rawExportMap.get(exportName);
+	}
+
+	/**
+	 * @param {string} exportName name of the export
+	 * @param {string} expression expression to be used
+	 */
+	setRawExportMap(exportName, expression) {
+		if (!this._currentModule.rawExportMap) {
+			this._currentModule.rawExportMap = new Map();
+		}
+		if (this._currentModule.rawExportMap.has(exportName)) {
+			this._currentModule.rawExportMap.set(exportName, expression);
+		}
+	}
+
+	/**
+	 * @param {string} symbol identifier of the export in source code
+	 */
+	registerNamespaceExport(symbol) {
+		this._currentModule.namespaceExportSymbol = symbol;
+	}
+
+	/**
+	 * @param {Module} module the referenced module
+	 * @param {Partial} options options
+	 * @returns {string} the reference as identifier
+	 */
+	createModuleReference(
+		module,
+		{
+			ids = undefined,
+			call = false,
+			directImport = false,
+			deferredImport = false,
+			asiSafe = false
+		}
+	) {
+		const info = /** @type {ModuleInfo} */ (this._modulesMap.get(module));
+		const callFlag = call ? "_call" : "";
+		const directImportFlag = directImport ? "_directImport" : "";
+		const deferredImportFlag = deferredImport ? "_deferredImport" : "";
+		const asiSafeFlag = asiSafe
+			? "_asiSafe1"
+			: asiSafe === false
+				? "_asiSafe0"
+				: "";
+		const exportData = ids
+			? Buffer.from(JSON.stringify(ids), "utf8").toString("hex")
+			: "ns";
+		// a "._" is appended to allow "delete ...", which would cause a SyntaxError in strict mode
+		return `__WEBPACK_MODULE_REFERENCE__${info.index}_${exportData}${callFlag}${directImportFlag}${deferredImportFlag}${asiSafeFlag}__._`;
+	}
+
+	/**
+	 * @param {string} name the identifier
+	 * @returns {boolean} true, when it's an module reference
+	 */
+	static isModuleReference(name) {
+		return MODULE_REFERENCE_REGEXP.test(name);
+	}
+
+	/**
+	 * @param {string} name the identifier
+	 * @returns {ModuleReferenceOptions & { index: number } | null} parsed options and index
+	 */
+	static matchModuleReference(name) {
+		const match = MODULE_REFERENCE_REGEXP.exec(name);
+		if (!match) return null;
+		const index = Number(match[1]);
+		const asiSafe = match[6];
+		return {
+			index,
+			ids:
+				match[2] === "ns"
+					? []
+					: JSON.parse(Buffer.from(match[2], "hex").toString("utf8")),
+			call: Boolean(match[3]),
+			directImport: Boolean(match[4]),
+			deferredImport: Boolean(match[5]),
+			asiSafe: asiSafe ? asiSafe === "1" : undefined
+		};
+	}
+}
+
+ConcatenationScope.DEFAULT_EXPORT = DEFAULT_EXPORT;
+ConcatenationScope.NAMESPACE_OBJECT_EXPORT = NAMESPACE_OBJECT_EXPORT;
+
+module.exports = ConcatenationScope;
diff --git a/lib/ConcurrentCompilationError.js b/lib/ConcurrentCompilationError.js
index 3b590e72c2c..3f53cff5985 100644
--- a/lib/ConcurrentCompilationError.js
+++ b/lib/ConcurrentCompilationError.js
@@ -2,18 +2,17 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Maksim Nazarjev @acupofspirt
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
 
 module.exports = class ConcurrentCompilationError extends WebpackError {
 	constructor() {
-		super();
+		super(
+			"You ran Webpack twice. Each instance only supports a single concurrent compilation at a time."
+		);
 
 		this.name = "ConcurrentCompilationError";
-		this.message =
-			"You ran Webpack twice. Each instance only supports a single concurrent compilation at a time.";
-
-		Error.captureStackTrace(this, this.constructor);
 	}
 };
diff --git a/lib/ConditionalInitFragment.js b/lib/ConditionalInitFragment.js
new file mode 100644
index 00000000000..8ebd758a1cc
--- /dev/null
+++ b/lib/ConditionalInitFragment.js
@@ -0,0 +1,120 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { ConcatSource, PrefixSource } = require("webpack-sources");
+const InitFragment = require("./InitFragment");
+const Template = require("./Template");
+const { mergeRuntime } = require("./util/runtime");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./Generator").GenerateContext} GenerateContext */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/**
+ * @param {string} condition condition
+ * @param {string | Source} source source
+ * @returns {string | Source} wrapped source
+ */
+const wrapInCondition = (condition, source) => {
+	if (typeof source === "string") {
+		return Template.asString([
+			`if (${condition}) {`,
+			Template.indent(source),
+			"}",
+			""
+		]);
+	}
+	return new ConcatSource(
+		`if (${condition}) {\n`,
+		new PrefixSource("\t", source),
+		"}\n"
+	);
+};
+
+/**
+ * @extends {InitFragment}
+ */
+class ConditionalInitFragment extends InitFragment {
+	/**
+	 * @param {string | Source | undefined} content the source code that will be included as initialization code
+	 * @param {number} stage category of initialization code (contribute to order)
+	 * @param {number} position position in the category (contribute to order)
+	 * @param {string | undefined} key unique key to avoid emitting the same initialization code twice
+	 * @param {RuntimeSpec | boolean} runtimeCondition in which runtime this fragment should be executed
+	 * @param {string | Source=} endContent the source code that will be included at the end of the module
+	 */
+	constructor(
+		content,
+		stage,
+		position,
+		key,
+		runtimeCondition = true,
+		endContent = undefined
+	) {
+		super(content, stage, position, key, endContent);
+		this.runtimeCondition = runtimeCondition;
+	}
+
+	/**
+	 * @param {GenerateContext} context context
+	 * @returns {string | Source | undefined} the source code that will be included as initialization code
+	 */
+	getContent(context) {
+		if (this.runtimeCondition === false || !this.content) return "";
+		if (this.runtimeCondition === true) return this.content;
+		const expr = context.runtimeTemplate.runtimeConditionExpression({
+			chunkGraph: context.chunkGraph,
+			runtimeRequirements: context.runtimeRequirements,
+			runtime: context.runtime,
+			runtimeCondition: this.runtimeCondition
+		});
+		if (expr === "true") return this.content;
+		return wrapInCondition(expr, this.content);
+	}
+
+	/**
+	 * @param {GenerateContext} context context
+	 * @returns {string | Source | undefined} the source code that will be included at the end of the module
+	 */
+	getEndContent(context) {
+		if (this.runtimeCondition === false || !this.endContent) return "";
+		if (this.runtimeCondition === true) return this.endContent;
+		const expr = context.runtimeTemplate.runtimeConditionExpression({
+			chunkGraph: context.chunkGraph,
+			runtimeRequirements: context.runtimeRequirements,
+			runtime: context.runtime,
+			runtimeCondition: this.runtimeCondition
+		});
+		if (expr === "true") return this.endContent;
+		return wrapInCondition(expr, this.endContent);
+	}
+
+	/**
+	 * @param {ConditionalInitFragment} other fragment to merge with
+	 * @returns {ConditionalInitFragment} merged fragment
+	 */
+	merge(other) {
+		if (this.runtimeCondition === true) return this;
+		if (other.runtimeCondition === true) return other;
+		if (this.runtimeCondition === false) return other;
+		if (other.runtimeCondition === false) return this;
+		const runtimeCondition = mergeRuntime(
+			this.runtimeCondition,
+			other.runtimeCondition
+		);
+		return new ConditionalInitFragment(
+			this.content,
+			this.stage,
+			this.position,
+			this.key,
+			runtimeCondition,
+			this.endContent
+		);
+	}
+}
+
+module.exports = ConditionalInitFragment;
diff --git a/lib/ConstPlugin.js b/lib/ConstPlugin.js
index 03b279b6490..d3b58911026 100644
--- a/lib/ConstPlugin.js
+++ b/lib/ConstPlugin.js
@@ -2,20 +2,41 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
+
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const CachedConstDependency = require("./dependencies/CachedConstDependency");
 const ConstDependency = require("./dependencies/ConstDependency");
-const NullFactory = require("./NullFactory");
-const ParserHelpers = require("./ParserHelpers");
+const { evaluateToString } = require("./javascript/JavascriptParserHelpers");
+const { parseResource } = require("./util/identifier");
 
-const getQuery = request => {
-	const i = request.indexOf("?");
-	return i !== -1 ? request.substr(i) : "";
-};
+/** @typedef {import("estree").AssignmentProperty} AssignmentProperty */
+/** @typedef {import("estree").Expression} Expression */
+/** @typedef {import("estree").Identifier} Identifier */
+/** @typedef {import("estree").Pattern} Pattern */
+/** @typedef {import("estree").SourceLocation} SourceLocation */
+/** @typedef {import("estree").Statement} Statement */
+/** @typedef {import("estree").Super} Super */
+/** @typedef {import("estree").VariableDeclaration} VariableDeclaration */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
 
+/** @typedef {Set} Declarations */
+
+/**
+ * @param {Declarations} declarations set of declarations
+ * @param {Identifier | Pattern} pattern pattern to collect declarations from
+ */
 const collectDeclaration = (declarations, pattern) => {
 	const stack = [pattern];
 	while (stack.length > 0) {
-		const node = stack.pop();
+		const node = /** @type {Pattern} */ (stack.pop());
 		switch (node.type) {
 			case "Identifier":
 				declarations.add(node.name);
@@ -32,7 +53,7 @@ const collectDeclaration = (declarations, pattern) => {
 				break;
 			case "ObjectPattern":
 				for (const property of node.properties) {
-					stack.push(property.value);
+					stack.push(/** @type {AssignmentProperty} */ (property).value);
 				}
 				break;
 			case "RestElement":
@@ -42,8 +63,15 @@ const collectDeclaration = (declarations, pattern) => {
 	}
 };
 
+/**
+ * @param {Statement} branch branch to get hoisted declarations from
+ * @param {boolean} includeFunctionDeclarations whether to include function declarations
+ * @returns {string[]} hoisted declarations
+ */
 const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
+	/** @type {Declarations} */
 	const declarations = new Set();
+	/** @type {(Statement | null | undefined)[]} */
 	const stack = [branch];
 	while (stack.length > 0) {
 		const node = stack.pop();
@@ -62,12 +90,12 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
 				stack.push(node.alternate);
 				break;
 			case "ForStatement":
-				stack.push(node.init);
+				stack.push(/** @type {VariableDeclaration} */ (node.init));
 				stack.push(node.body);
 				break;
 			case "ForInStatement":
 			case "ForOfStatement":
-				stack.push(node.left);
+				stack.push(/** @type {VariableDeclaration} */ (node.left));
 				stack.push(node.body);
 				break;
 			case "DoWhileStatement":
@@ -91,7 +119,7 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
 				break;
 			case "FunctionDeclaration":
 				if (includeFunctionDeclarations) {
-					collectDeclaration(declarations, node.id);
+					collectDeclaration(declarations, /** @type {Identifier} */ (node.id));
 				}
 				break;
 			case "VariableDeclaration":
@@ -103,99 +131,88 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
 				break;
 		}
 	}
-	return Array.from(declarations);
+	return [...declarations];
 };
 
+const PLUGIN_NAME = "ConstPlugin";
+
 class ConstPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
+		const cachedParseResource = parseResource.bindCache(compiler.root);
 		compiler.hooks.compilation.tap(
-			"ConstPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
 				compilation.dependencyTemplates.set(
 					ConstDependency,
 					new ConstDependency.Template()
 				);
 
-				const handler = parser => {
-					parser.hooks.statementIf.tap("ConstPlugin", statement => {
+				compilation.dependencyTemplates.set(
+					CachedConstDependency,
+					new CachedConstDependency.Template()
+				);
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 */
+				const handler = (parser) => {
+					parser.hooks.terminate.tap(PLUGIN_NAME, (_statement) => true);
+					parser.hooks.statementIf.tap(PLUGIN_NAME, (statement) => {
+						if (parser.scope.isAsmJs) return;
 						const param = parser.evaluateExpression(statement.test);
 						const bool = param.asBool();
 						if (typeof bool === "boolean") {
-							if (statement.test.type !== "Literal") {
-								const dep = new ConstDependency(`${bool}`, param.range);
-								dep.loc = statement.loc;
-								parser.state.current.addDependency(dep);
+							if (!param.couldHaveSideEffects()) {
+								const dep = new ConstDependency(
+									`${bool}`,
+									/** @type {Range} */ (param.range)
+								);
+								dep.loc = /** @type {SourceLocation} */ (statement.loc);
+								parser.state.module.addPresentationalDependency(dep);
+							} else {
+								parser.walkExpression(statement.test);
 							}
 							const branchToRemove = bool
 								? statement.alternate
 								: statement.consequent;
 							if (branchToRemove) {
-								// Before removing the dead branch, the hoisted declarations
-								// must be collected.
-								//
-								// Given the following code:
-								//
-								//     if (true) f() else g()
-								//     if (false) {
-								//       function f() {}
-								//       const g = function g() {}
-								//       if (someTest) {
-								//         let a = 1
-								//         var x, {y, z} = obj
-								//       }
-								//     } else {
-								//       …
-								//     }
-								//
-								// the generated code is:
-								//
-								//     if (true) f() else {}
-								//     if (false) {
-								//       var f, x, y, z;   (in loose mode)
-								//       var x, y, z;      (in strict mode)
-								//     } else {
-								//       …
-								//     }
-								//
-								// NOTE: When code runs in strict mode, `var` declarations
-								// are hoisted but `function` declarations don't.
-								//
-								let declarations;
-								if (parser.scope.isStrict) {
-									// If the code runs in strict mode, variable declarations
-									// using `var` must be hoisted.
-									declarations = getHoistedDeclarations(branchToRemove, false);
-								} else {
-									// Otherwise, collect all hoisted declaration.
-									declarations = getHoistedDeclarations(branchToRemove, true);
-								}
-								let replacement;
-								if (declarations.length > 0) {
-									replacement = `{ var ${declarations.join(", ")}; }`;
-								} else {
-									replacement = "{}";
-								}
-								const dep = new ConstDependency(
-									replacement,
-									branchToRemove.range
-								);
-								dep.loc = branchToRemove.loc;
-								parser.state.current.addDependency(dep);
+								this.eliminateUnusedStatement(parser, branchToRemove, true);
 							}
 							return bool;
 						}
 					});
+					parser.hooks.unusedStatement.tap(PLUGIN_NAME, (statement) => {
+						if (
+							parser.scope.isAsmJs ||
+							// Check top level scope here again
+							parser.scope.topLevelScope === true
+						) {
+							return;
+						}
+						this.eliminateUnusedStatement(parser, statement, false);
+						return true;
+					});
 					parser.hooks.expressionConditionalOperator.tap(
-						"ConstPlugin",
-						expression => {
+						PLUGIN_NAME,
+						(expression) => {
+							if (parser.scope.isAsmJs) return;
 							const param = parser.evaluateExpression(expression.test);
 							const bool = param.asBool();
 							if (typeof bool === "boolean") {
-								if (expression.test.type !== "Literal") {
-									const dep = new ConstDependency(` ${bool}`, param.range);
-									dep.loc = expression.loc;
-									parser.state.current.addDependency(dep);
+								if (!param.couldHaveSideEffects()) {
+									const dep = new ConstDependency(
+										` ${bool}`,
+										/** @type {Range} */ (param.range)
+									);
+									dep.loc = /** @type {SourceLocation} */ (expression.loc);
+									parser.state.module.addPresentationalDependency(dep);
+								} else {
+									parser.walkExpression(expression.test);
 								}
 								// Expressions do not hoist.
 								// It is safe to remove the dead branch.
@@ -206,53 +223,345 @@ class ConstPlugin {
 								//
 								// the generated code is:
 								//
-								//   false ? undefined : otherExpression();
+								//   false ? 0 : otherExpression();
 								//
 								const branchToRemove = bool
 									? expression.alternate
 									: expression.consequent;
 								const dep = new ConstDependency(
-									"undefined",
-									branchToRemove.range
+									"0",
+									/** @type {Range} */ (branchToRemove.range)
 								);
-								dep.loc = branchToRemove.loc;
-								parser.state.current.addDependency(dep);
+								dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
+								parser.state.module.addPresentationalDependency(dep);
 								return bool;
 							}
 						}
 					);
+					parser.hooks.expressionLogicalOperator.tap(
+						PLUGIN_NAME,
+						(expression) => {
+							if (parser.scope.isAsmJs) return;
+							if (
+								expression.operator === "&&" ||
+								expression.operator === "||"
+							) {
+								const param = parser.evaluateExpression(expression.left);
+								const bool = param.asBool();
+								if (typeof bool === "boolean") {
+									// Expressions do not hoist.
+									// It is safe to remove the dead branch.
+									//
+									// ------------------------------------------
+									//
+									// Given the following code:
+									//
+									//   falsyExpression() && someExpression();
+									//
+									// the generated code is:
+									//
+									//   falsyExpression() && false;
+									//
+									// ------------------------------------------
+									//
+									// Given the following code:
+									//
+									//   truthyExpression() && someExpression();
+									//
+									// the generated code is:
+									//
+									//   true && someExpression();
+									//
+									// ------------------------------------------
+									//
+									// Given the following code:
+									//
+									//   truthyExpression() || someExpression();
+									//
+									// the generated code is:
+									//
+									//   truthyExpression() || false;
+									//
+									// ------------------------------------------
+									//
+									// Given the following code:
+									//
+									//   falsyExpression() || someExpression();
+									//
+									// the generated code is:
+									//
+									//   false && someExpression();
+									//
+									const keepRight =
+										(expression.operator === "&&" && bool) ||
+										(expression.operator === "||" && !bool);
+
+									if (
+										!param.couldHaveSideEffects() &&
+										(param.isBoolean() || keepRight)
+									) {
+										// for case like
+										//
+										//   return'development'===process.env.NODE_ENV&&'foo'
+										//
+										// we need a space before the bool to prevent result like
+										//
+										//   returnfalse&&'foo'
+										//
+										const dep = new ConstDependency(
+											` ${bool}`,
+											/** @type {Range} */ (param.range)
+										);
+										dep.loc = /** @type {SourceLocation} */ (expression.loc);
+										parser.state.module.addPresentationalDependency(dep);
+									} else {
+										parser.walkExpression(expression.left);
+									}
+									if (!keepRight) {
+										const dep = new ConstDependency(
+											"0",
+											/** @type {Range} */ (expression.right.range)
+										);
+										dep.loc = /** @type {SourceLocation} */ (expression.loc);
+										parser.state.module.addPresentationalDependency(dep);
+									}
+									return keepRight;
+								}
+							} else if (expression.operator === "??") {
+								const param = parser.evaluateExpression(expression.left);
+								const keepRight = param.asNullish();
+								if (typeof keepRight === "boolean") {
+									// ------------------------------------------
+									//
+									// Given the following code:
+									//
+									//   nonNullish ?? someExpression();
+									//
+									// the generated code is:
+									//
+									//   nonNullish ?? 0;
+									//
+									// ------------------------------------------
+									//
+									// Given the following code:
+									//
+									//   nullish ?? someExpression();
+									//
+									// the generated code is:
+									//
+									//   null ?? someExpression();
+									//
+									if (!param.couldHaveSideEffects() && keepRight) {
+										// cspell:word returnnull
+										// for case like
+										//
+										//   return('development'===process.env.NODE_ENV&&null)??'foo'
+										//
+										// we need a space before the bool to prevent result like
+										//
+										//   returnnull??'foo'
+										//
+										const dep = new ConstDependency(
+											" null",
+											/** @type {Range} */ (param.range)
+										);
+										dep.loc = /** @type {SourceLocation} */ (expression.loc);
+										parser.state.module.addPresentationalDependency(dep);
+									} else {
+										const dep = new ConstDependency(
+											"0",
+											/** @type {Range} */ (expression.right.range)
+										);
+										dep.loc = /** @type {SourceLocation} */ (expression.loc);
+										parser.state.module.addPresentationalDependency(dep);
+										parser.walkExpression(expression.left);
+									}
+
+									return keepRight;
+								}
+							}
+						}
+					);
+					parser.hooks.optionalChaining.tap(PLUGIN_NAME, (expr) => {
+						/** @type {Expression[]} */
+						const optionalExpressionsStack = [];
+						/** @type {Expression | Super} */
+						let next = expr.expression;
+
+						while (
+							next.type === "MemberExpression" ||
+							next.type === "CallExpression"
+						) {
+							if (next.type === "MemberExpression") {
+								if (next.optional) {
+									// SuperNode can not be optional
+									optionalExpressionsStack.push(
+										/** @type {Expression} */ (next.object)
+									);
+								}
+								next = next.object;
+							} else {
+								if (next.optional) {
+									// SuperNode can not be optional
+									optionalExpressionsStack.push(
+										/** @type {Expression} */ (next.callee)
+									);
+								}
+								next = next.callee;
+							}
+						}
+
+						while (optionalExpressionsStack.length) {
+							const expression = optionalExpressionsStack.pop();
+							const evaluated = parser.evaluateExpression(
+								/** @type {Expression} */ (expression)
+							);
+
+							if (evaluated.asNullish()) {
+								// ------------------------------------------
+								//
+								// Given the following code:
+								//
+								//   nullishMemberChain?.a.b();
+								//
+								// the generated code is:
+								//
+								//   undefined;
+								//
+								// ------------------------------------------
+								//
+								const dep = new ConstDependency(
+									" undefined",
+									/** @type {Range} */ (expr.range)
+								);
+								dep.loc = /** @type {SourceLocation} */ (expr.loc);
+								parser.state.module.addPresentationalDependency(dep);
+								return true;
+							}
+						}
+					});
 					parser.hooks.evaluateIdentifier
 						.for("__resourceQuery")
-						.tap("ConstPlugin", expr => {
+						.tap(PLUGIN_NAME, (expr) => {
+							if (parser.scope.isAsmJs) return;
 							if (!parser.state.module) return;
-							return ParserHelpers.evaluateToString(
-								getQuery(parser.state.module.resource)
+							return evaluateToString(
+								cachedParseResource(parser.state.module.resource).query
 							)(expr);
 						});
 					parser.hooks.expression
 						.for("__resourceQuery")
-						.tap("ConstPlugin", () => {
+						.tap(PLUGIN_NAME, (expr) => {
+							if (parser.scope.isAsmJs) return;
+							if (!parser.state.module) return;
+							const dep = new CachedConstDependency(
+								JSON.stringify(
+									cachedParseResource(parser.state.module.resource).query
+								),
+								/** @type {Range} */ (expr.range),
+								"__resourceQuery"
+							);
+							dep.loc = /** @type {SourceLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+							return true;
+						});
+
+					parser.hooks.evaluateIdentifier
+						.for("__resourceFragment")
+						.tap(PLUGIN_NAME, (expr) => {
+							if (parser.scope.isAsmJs) return;
+							if (!parser.state.module) return;
+							return evaluateToString(
+								cachedParseResource(parser.state.module.resource).fragment
+							)(expr);
+						});
+					parser.hooks.expression
+						.for("__resourceFragment")
+						.tap(PLUGIN_NAME, (expr) => {
+							if (parser.scope.isAsmJs) return;
 							if (!parser.state.module) return;
-							parser.state.current.addVariable(
-								"__resourceQuery",
-								JSON.stringify(getQuery(parser.state.module.resource))
+							const dep = new CachedConstDependency(
+								JSON.stringify(
+									cachedParseResource(parser.state.module.resource).fragment
+								),
+								/** @type {Range} */ (expr.range),
+								"__resourceFragment"
 							);
+							dep.loc = /** @type {SourceLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
 							return true;
 						});
 				};
 
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("ConstPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("ConstPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/esm")
-					.tap("ConstPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
 			}
 		);
 	}
+
+	/**
+	 * Eliminate an unused statement.
+	 * @param {JavascriptParser} parser the parser
+	 * @param {Statement} statement the statement to remove
+	 * @param {boolean} alwaysInBlock whether to always generate curly brackets
+	 * @returns {void}
+	 */
+	eliminateUnusedStatement(parser, statement, alwaysInBlock) {
+		// Before removing the unused branch, the hoisted declarations
+		// must be collected.
+		//
+		// Given the following code:
+		//
+		//     if (true) f() else g()
+		//     if (false) {
+		//       function f() {}
+		//       const g = function g() {}
+		//       if (someTest) {
+		//         let a = 1
+		//         var x, {y, z} = obj
+		//       }
+		//     } else {
+		//       …
+		//     }
+		//
+		// the generated code is:
+		//
+		//     if (true) f() else {}
+		//     if (false) {
+		//       var f, x, y, z;   (in loose mode)
+		//       var x, y, z;      (in strict mode)
+		//     } else {
+		//       …
+		//     }
+		//
+		// NOTE: When code runs in strict mode, `var` declarations
+		// are hoisted but `function` declarations don't.
+		//
+		const declarations = parser.scope.isStrict
+			? getHoistedDeclarations(statement, false)
+			: getHoistedDeclarations(statement, true);
+
+		const inBlock = alwaysInBlock || statement.type === "BlockStatement";
+
+		let replacement = inBlock ? "{" : "";
+		replacement +=
+			declarations.length > 0 ? ` var ${declarations.join(", ")}; ` : "";
+		replacement += inBlock ? "}" : "";
+
+		const dep = new ConstDependency(
+			`// removed by dead control flow\n${replacement}`,
+			/** @type {Range} */ (statement.range)
+		);
+		dep.loc = /** @type {SourceLocation} */ (statement.loc);
+		parser.state.module.addPresentationalDependency(dep);
+	}
 }
 
 module.exports = ConstPlugin;
diff --git a/lib/ContextExclusionPlugin.js b/lib/ContextExclusionPlugin.js
index 1333e9dbcfd..6470b6f05f4 100644
--- a/lib/ContextExclusionPlugin.js
+++ b/lib/ContextExclusionPlugin.js
@@ -1,15 +1,31 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+*/
+
 "use strict";
 
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "ContextExclusionPlugin";
+
 class ContextExclusionPlugin {
+	/**
+	 * @param {RegExp} negativeMatcher Matcher regular expression
+	 */
 	constructor(negativeMatcher) {
 		this.negativeMatcher = negativeMatcher;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.contextModuleFactory.tap("ContextExclusionPlugin", cmf => {
-			cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files => {
-				return files.filter(filePath => !this.negativeMatcher.test(filePath));
-			});
+		compiler.hooks.contextModuleFactory.tap(PLUGIN_NAME, (cmf) => {
+			cmf.hooks.contextModuleFiles.tap(PLUGIN_NAME, (files) =>
+				files.filter((filePath) => !this.negativeMatcher.test(filePath))
+			);
 		});
 	}
 }
diff --git a/lib/ContextModule.js b/lib/ContextModule.js
index 175187a6973..219cb43b74e 100644
--- a/lib/ContextModule.js
+++ b/lib/ContextModule.js
@@ -2,122 +2,310 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
-const path = require("path");
-const util = require("util");
+
 const { OriginalSource, RawSource } = require("webpack-sources");
-const Module = require("./Module");
 const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
+const { makeWebpackError } = require("./HookWebpackError");
+const Module = require("./Module");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const Template = require("./Template");
+const WebpackError = require("./WebpackError");
+const {
+	getOutgoingAsyncModules
+} = require("./async-modules/AsyncModuleHelpers");
+const { ImportPhase, ImportPhaseUtils } = require("./dependencies/ImportPhase");
+const {
+	compareLocations,
+	compareModulesById,
+	compareSelect,
+	concatComparators,
+	keepOriginalOrder
+} = require("./util/comparators");
+const {
+	contextify,
+	makePathsRelative,
+	parseResource
+} = require("./util/identifier");
+const makeSerializable = require("./util/makeSerializable");
 
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Chunk").ChunkId} ChunkId */
+/** @typedef {import("./Chunk").ChunkName} ChunkName */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").RawReferencedExports} RawReferencedExports */
+/** @typedef {import("./Generator").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./Module").FileSystemDependencies} FileSystemDependencies */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("./Module").LibIdent} LibIdent */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
 /** @typedef {import("./dependencies/ContextElementDependency")} ContextElementDependency */
+/** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
+
+/** @typedef {"sync" | "eager" | "weak" | "async-weak" | "lazy" | "lazy-once"} ContextMode Context mode */
+
+/**
+ * @typedef {object} ContextOptions
+ * @property {ContextMode} mode
+ * @property {boolean} recursive
+ * @property {RegExp | false | null} regExp
+ * @property {"strict" | boolean=} namespaceObject
+ * @property {string=} addon
+ * @property {ChunkName=} chunkName
+ * @property {RegExp | null=} include
+ * @property {RegExp | null=} exclude
+ * @property {RawChunkGroupOptions=} groupOptions
+ * @property {string=} typePrefix
+ * @property {string=} category
+ * @property {RawReferencedExports | null=} referencedExports exports referenced from modules (won't be mangled)
+ * @property {string | null=} layer
+ * @property {ImportAttributes=} attributes
+ * @property {ImportPhaseType=} phase
+ */
+
+/**
+ * @typedef {object} ContextModuleOptionsExtras
+ * @property {false | string | string[]} resource
+ * @property {string=} resourceQuery
+ * @property {string=} resourceFragment
+ * @property {ResolveOptions=} resolveOptions
+ */
+
+/** @typedef {ContextOptions & ContextModuleOptionsExtras} ContextModuleOptions */
+
+/**
+ * @callback ResolveDependenciesCallback
+ * @param {Error | null} err
+ * @param {ContextElementDependency[]=} dependencies
+ * @returns {void}
+ */
+
+/**
+ * @callback ResolveDependencies
+ * @param {InputFileSystem} fs
+ * @param {ContextModuleOptions} options
+ * @param {ResolveDependenciesCallback} callback
+ */
+
+/** @typedef {1 | 3 | 7 | 9} FakeMapType */
+
+/** @typedef {Record} FakeMap */
+/** @typedef {Record} UserRequestMap */
+/** @typedef {Record} UserRequestsMap */
 
 class ContextModule extends Module {
-	// type ContextMode = "sync" | "eager" | "weak" | "async-weak" | "lazy" | "lazy-once"
-	// type ContextOptions = { resource: string, recursive: boolean, regExp: RegExp, addon?: string, mode?: ContextMode, chunkName?: string, include?: RegExp, exclude?: RegExp, groupOptions?: Object }
-	// resolveDependencies: (fs: FS, options: ContextOptions, (err: Error?, dependencies: Dependency[]) => void) => void
-	// options: ContextOptions
+	/**
+	 * @param {ResolveDependencies} resolveDependencies function to get dependencies in this context
+	 * @param {ContextModuleOptions} options options object
+	 */
 	constructor(resolveDependencies, options) {
-		let resource;
-		let resourceQuery;
-		const queryIdx = options.resource.indexOf("?");
-		if (queryIdx >= 0) {
-			resource = options.resource.substr(0, queryIdx);
-			resourceQuery = options.resource.substr(queryIdx);
+		if (!options || typeof options.resource === "string") {
+			const parsed = parseResource(
+				options ? /** @type {string} */ (options.resource) : ""
+			);
+			const resource = parsed.path;
+			const resourceQuery = (options && options.resourceQuery) || parsed.query;
+			const resourceFragment =
+				(options && options.resourceFragment) || parsed.fragment;
+			const layer = options && options.layer;
+
+			super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, resource, layer);
+			/** @type {ContextModuleOptions} */
+			this.options = {
+				...options,
+				resource,
+				resourceQuery,
+				resourceFragment
+			};
 		} else {
-			resource = options.resource;
-			resourceQuery = "";
+			super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, undefined, options.layer);
+			/** @type {ContextModuleOptions} */
+			this.options = {
+				...options,
+				resource: options.resource,
+				resourceQuery: options.resourceQuery || "",
+				resourceFragment: options.resourceFragment || ""
+			};
 		}
 
-		super("javascript/dynamic", resource);
-
 		// Info from Factory
+		/** @type {ResolveDependencies | undefined} */
 		this.resolveDependencies = resolveDependencies;
-		this.options = Object.assign({}, options, {
-			resource: resource,
-			resourceQuery: resourceQuery
-		});
-		if (options.resolveOptions !== undefined) {
+		if (options && options.resolveOptions !== undefined) {
 			this.resolveOptions = options.resolveOptions;
 		}
 
-		// Info from Build
-		this._contextDependencies = new Set([this.context]);
-
-		if (typeof options.mode !== "string") {
+		if (options && typeof options.mode !== "string") {
 			throw new Error("options.mode is a required option");
 		}
 
 		this._identifier = this._createIdentifier();
+		this._forceBuild = true;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
 	}
 
+	/**
+	 * Assuming this module is in the cache. Update the (cached) module with
+	 * the fresh module from the factory. Usually updates internal references
+	 * and properties.
+	 * @param {Module} module fresh module
+	 * @returns {void}
+	 */
 	updateCacheModule(module) {
-		this.resolveDependencies = module.resolveDependencies;
-		this.options = module.options;
-		this.resolveOptions = module.resolveOptions;
+		const m = /** @type {ContextModule} */ (module);
+		this.resolveDependencies = m.resolveDependencies;
+		this.options = m.options;
 	}
 
-	prettyRegExp(regexString) {
-		// remove the "/" at the front and the beginning
-		// "/foo/" -> "foo"
-		return regexString.substring(1, regexString.length - 1);
+	/**
+	 * Assuming this module is in the cache. Remove internal references to allow freeing some memory.
+	 */
+	cleanupForCache() {
+		super.cleanupForCache();
+		this.resolveDependencies = undefined;
 	}
 
-	contextify(context, request) {
-		return request
-			.split("!")
-			.map(subrequest => {
-				let rp = path.relative(context, subrequest);
-				if (path.sep === "\\") rp = rp.replace(/\\/g, "/");
-				if (rp.indexOf("../") !== 0) rp = "./" + rp;
-				return rp;
-			})
-			.join("!");
+	/**
+	 * @private
+	 * @param {RegExp} regexString RegExp as a string
+	 * @param {boolean=} stripSlash do we need to strip a slsh
+	 * @returns {string} pretty RegExp
+	 */
+	_prettyRegExp(regexString, stripSlash = true) {
+		const str = stripSlash
+			? regexString.source + regexString.flags
+			: `${regexString}`;
+		return str.replace(/!/g, "%21").replace(/\|/g, "%7C");
 	}
 
 	_createIdentifier() {
-		let identifier = this.context;
+		let identifier =
+			this.context ||
+			(typeof this.options.resource === "string" ||
+			this.options.resource === false
+				? `${this.options.resource}`
+				: this.options.resource.join("|"));
 		if (this.options.resourceQuery) {
-			identifier += ` ${this.options.resourceQuery}`;
+			identifier += `|${this.options.resourceQuery}`;
+		}
+		if (this.options.resourceFragment) {
+			identifier += `|${this.options.resourceFragment}`;
 		}
 		if (this.options.mode) {
-			identifier += ` ${this.options.mode}`;
+			identifier += `|${this.options.mode}`;
 		}
 		if (!this.options.recursive) {
-			identifier += " nonrecursive";
+			identifier += "|nonrecursive";
 		}
 		if (this.options.addon) {
-			identifier += ` ${this.options.addon}`;
+			identifier += `|${this.options.addon}`;
 		}
 		if (this.options.regExp) {
-			identifier += ` ${this.options.regExp}`;
+			identifier += `|${this._prettyRegExp(this.options.regExp, false)}`;
 		}
 		if (this.options.include) {
-			identifier += ` include: ${this.options.include}`;
+			identifier += `|include: ${this._prettyRegExp(
+				this.options.include,
+				false
+			)}`;
 		}
 		if (this.options.exclude) {
-			identifier += ` exclude: ${this.options.exclude}`;
+			identifier += `|exclude: ${this._prettyRegExp(
+				this.options.exclude,
+				false
+			)}`;
+		}
+		if (this.options.referencedExports) {
+			identifier += `|referencedExports: ${JSON.stringify(
+				this.options.referencedExports
+			)}`;
+		}
+		if (this.options.chunkName) {
+			identifier += `|chunkName: ${this.options.chunkName}`;
 		}
 		if (this.options.groupOptions) {
-			identifier += ` groupOptions: ${JSON.stringify(
+			identifier += `|groupOptions: ${JSON.stringify(
 				this.options.groupOptions
 			)}`;
 		}
 		if (this.options.namespaceObject === "strict") {
-			identifier += " strict namespace object";
+			identifier += "|strict namespace object";
 		} else if (this.options.namespaceObject) {
-			identifier += " namespace object";
+			identifier += "|namespace object";
+		}
+		if (this.options.attributes) {
+			identifier += `|importAttributes: ${JSON.stringify(this.options.attributes)}`;
+		}
+		if (this.options.phase) {
+			identifier += `|importPhase: ${this.options.phase}`;
+		}
+		if (this.layer) {
+			identifier += `|layer: ${this.layer}`;
 		}
-
 		return identifier;
 	}
 
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
 	identifier() {
 		return this._identifier;
 	}
 
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
 	readableIdentifier(requestShortener) {
-		let identifier = requestShortener.shorten(this.context);
+		/** @type {string} */
+		let identifier;
+
+		if (this.context) {
+			identifier = `${requestShortener.shorten(this.context)}/`;
+		} else if (
+			typeof this.options.resource === "string" ||
+			this.options.resource === false
+		) {
+			identifier = `${requestShortener.shorten(`${this.options.resource}`)}/`;
+		} else {
+			identifier = this.options.resource
+				.map((r) => `${requestShortener.shorten(r)}/`)
+				.join(" ");
+		}
 		if (this.options.resourceQuery) {
 			identifier += ` ${this.options.resourceQuery}`;
 		}
@@ -131,18 +319,28 @@ class ContextModule extends Module {
 			identifier += ` ${requestShortener.shorten(this.options.addon)}`;
 		}
 		if (this.options.regExp) {
-			identifier += ` ${this.prettyRegExp(this.options.regExp + "")}`;
+			identifier += ` ${this._prettyRegExp(this.options.regExp)}`;
 		}
 		if (this.options.include) {
-			identifier += ` include: ${this.prettyRegExp(this.options.include + "")}`;
+			identifier += ` include: ${this._prettyRegExp(this.options.include)}`;
 		}
 		if (this.options.exclude) {
-			identifier += ` exclude: ${this.prettyRegExp(this.options.exclude + "")}`;
+			identifier += ` exclude: ${this._prettyRegExp(this.options.exclude)}`;
+		}
+		if (this.options.referencedExports) {
+			identifier += ` referencedExports: ${this.options.referencedExports
+				.map((e) => e.join("."))
+				.join(", ")}`;
+		}
+		if (this.options.chunkName) {
+			identifier += ` chunkName: ${this.options.chunkName}`;
 		}
 		if (this.options.groupOptions) {
 			const groupOptions = this.options.groupOptions;
 			for (const key of Object.keys(groupOptions)) {
-				identifier += ` ${key}: ${groupOptions[key]}`;
+				identifier += ` ${key}: ${
+					groupOptions[/** @type {keyof RawChunkGroupOptions} */ (key)]
+				}`;
 			}
 		}
 		if (this.options.namespaceObject === "strict") {
@@ -154,8 +352,37 @@ class ContextModule extends Module {
 		return identifier;
 	}
 
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
 	libIdent(options) {
-		let identifier = this.contextify(options.context, this.context);
+		/** @type {string} */
+		let identifier;
+
+		if (this.context) {
+			identifier = contextify(
+				options.context,
+				this.context,
+				options.associatedObjectForCache
+			);
+		} else if (typeof this.options.resource === "string") {
+			identifier = contextify(
+				options.context,
+				this.options.resource,
+				options.associatedObjectForCache
+			);
+		} else if (this.options.resource === false) {
+			identifier = "false";
+		} else {
+			identifier = this.options.resource
+				.map((res) =>
+					contextify(options.context, res, options.associatedObjectForCache)
+				)
+				.join(" ");
+		}
+
+		if (this.layer) identifier = `(${this.layer})/${identifier}`;
 		if (this.options.mode) {
 			identifier += ` ${this.options.mode}`;
 		}
@@ -163,39 +390,86 @@ class ContextModule extends Module {
 			identifier += " recursive";
 		}
 		if (this.options.addon) {
-			identifier += ` ${this.contextify(options.context, this.options.addon)}`;
+			identifier += ` ${contextify(
+				options.context,
+				this.options.addon,
+				options.associatedObjectForCache
+			)}`;
 		}
 		if (this.options.regExp) {
-			identifier += ` ${this.prettyRegExp(this.options.regExp + "")}`;
+			identifier += ` ${this._prettyRegExp(this.options.regExp)}`;
 		}
 		if (this.options.include) {
-			identifier += ` include: ${this.prettyRegExp(this.options.include + "")}`;
+			identifier += ` include: ${this._prettyRegExp(this.options.include)}`;
 		}
 		if (this.options.exclude) {
-			identifier += ` exclude: ${this.prettyRegExp(this.options.exclude + "")}`;
+			identifier += ` exclude: ${this._prettyRegExp(this.options.exclude)}`;
+		}
+		if (this.options.referencedExports) {
+			identifier += ` referencedExports: ${this.options.referencedExports
+				.map((e) => e.join("."))
+				.join(", ")}`;
 		}
 
 		return identifier;
 	}
 
-	needRebuild(fileTimestamps, contextTimestamps) {
-		const ts = contextTimestamps.get(this.context);
-		if (!ts) {
-			return true;
+	/**
+	 * @returns {void}
+	 */
+	invalidateBuild() {
+		this._forceBuild = true;
+	}
+
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild({ fileSystemInfo }, callback) {
+		// build if enforced
+		if (this._forceBuild) return callback(null, true);
+
+		const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+
+		// always build when we have no snapshot and context
+		if (!buildInfo.snapshot) {
+			return callback(null, Boolean(this.context || this.options.resource));
 		}
 
-		return ts >= this.buildInfo.builtTime;
+		fileSystemInfo.checkSnapshotValid(buildInfo.snapshot, (err, valid) => {
+			callback(err, !valid);
+		});
 	}
 
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
 	build(options, compilation, resolver, fs, callback) {
-		this.built = true;
-		this.buildMeta = {};
+		this._forceBuild = false;
+		/** @type {BuildMeta} */
+		this.buildMeta = {
+			exportsType: "default",
+			defaultObject: "redirect-warn"
+		};
 		this.buildInfo = {
-			builtTime: Date.now(),
-			contextDependencies: this._contextDependencies
+			snapshot: undefined
 		};
-		this.resolveDependencies(fs, this.options, (err, dependencies) => {
-			if (err) return callback(err);
+		this.dependencies.length = 0;
+		this.blocks.length = 0;
+		const startTime = Date.now();
+		/** @type {ResolveDependencies} */
+		(this.resolveDependencies)(fs, this.options, (err, dependencies) => {
+			if (err) {
+				return callback(
+					makeWebpackError(err, "ContextModule.resolveDependencies")
+				);
+			}
 
 			// abort if something failed
 			// this will create an empty context
@@ -206,9 +480,17 @@ class ContextModule extends Module {
 
 			// enhance dependencies with meta info
 			for (const dep of dependencies) {
-				dep.loc = dep.userRequest;
+				dep.loc = {
+					name: dep.userRequest
+				};
 				dep.request = this.options.addon + dep.request;
 			}
+			dependencies.sort(
+				concatComparators(
+					compareSelect((a) => a.loc, compareLocations),
+					keepOriginalOrder(this.dependencies)
+				)
+			);
 
 			if (this.options.mode === "sync" || this.options.mode === "eager") {
 				// if we have an sync or eager context
@@ -218,12 +500,10 @@ class ContextModule extends Module {
 				// for the lazy-once mode create a new async dependency block
 				// and add that block to this context
 				if (dependencies.length > 0) {
-					const block = new AsyncDependenciesBlock(
-						Object.assign({}, this.options.groupOptions, {
-							name: this.options.chunkName
-						}),
-						this
-					);
+					const block = new AsyncDependenciesBlock({
+						...this.options.groupOptions,
+						name: this.options.chunkName
+					});
 					for (const dep of dependencies) {
 						block.addDependency(dep);
 					}
@@ -245,20 +525,20 @@ class ContextModule extends Module {
 				for (const dep of dependencies) {
 					let chunkName = this.options.chunkName;
 					if (chunkName) {
-						if (!/\[(index|request)\]/.test(chunkName)) {
+						if (!/\[(?:index|request)\]/.test(chunkName)) {
 							chunkName += "[index]";
 						}
-						chunkName = chunkName.replace(/\[index\]/g, index++);
+						chunkName = chunkName.replace(/\[index\]/g, `${index++}`);
 						chunkName = chunkName.replace(
 							/\[request\]/g,
 							Template.toPath(dep.userRequest)
 						);
 					}
 					const block = new AsyncDependenciesBlock(
-						Object.assign({}, this.options.groupOptions, {
+						{
+							...this.options.groupOptions,
 							name: chunkName
-						}),
-						dep.module,
+						},
 						dep.loc,
 						dep.userRequest
 					);
@@ -267,101 +547,261 @@ class ContextModule extends Module {
 				}
 			} else {
 				callback(
-					new Error(`Unsupported mode "${this.options.mode}" in context`)
+					new WebpackError(`Unsupported mode "${this.options.mode}" in context`)
 				);
 				return;
 			}
-			callback();
+			if (!this.context && !this.options.resource) return callback();
+
+			const snapshotOptions = compilation.options.snapshot.contextModule;
+
+			compilation.fileSystemInfo.createSnapshot(
+				startTime,
+				null,
+				this.context
+					? [this.context]
+					: typeof this.options.resource === "string"
+						? [this.options.resource]
+						: /** @type {string[]} */ (this.options.resource),
+				null,
+				snapshotOptions,
+				(err, snapshot) => {
+					if (err) return callback(err);
+					/** @type {BuildInfo} */
+					(this.buildInfo).snapshot = snapshot;
+					callback();
+				}
+			);
 		});
 	}
 
-	getUserRequestMap(dependencies) {
+	/**
+	 * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
+	 * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
+	 * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
+	 * @param {FileSystemDependencies} buildDependencies set where build dependencies are added to
+	 */
+	addCacheDependencies(
+		fileDependencies,
+		contextDependencies,
+		missingDependencies,
+		buildDependencies
+	) {
+		if (this.context) {
+			contextDependencies.add(this.context);
+		} else if (typeof this.options.resource === "string") {
+			contextDependencies.add(this.options.resource);
+		} else if (this.options.resource === false) {
+			// Do nothing
+		} else {
+			for (const res of this.options.resource) contextDependencies.add(res);
+		}
+	}
+
+	/**
+	 * @param {Dependency[]} dependencies all dependencies
+	 * @param {ChunkGraph} chunkGraph chunk graph
+	 * @returns {UserRequestMap} map with user requests
+	 */
+	getUserRequestMap(dependencies, chunkGraph) {
+		const moduleGraph = chunkGraph.moduleGraph;
 		// if we filter first we get a new array
-		// therefor we dont need to create a clone of dependencies explicitly
+		// therefore we don't need to create a clone of dependencies explicitly
 		// therefore the order of this is !important!
-		return dependencies
-			.filter(dependency => dependency.module)
-			.sort((a, b) => {
-				if (a.userRequest === b.userRequest) {
-					return 0;
-				}
-				return a.userRequest < b.userRequest ? -1 : 1;
-			})
-			.reduce((map, dep) => {
-				map[dep.userRequest] = dep.module.id;
-				return map;
-			}, Object.create(null));
+		const sortedDependencies =
+			/** @type {ContextElementDependency[]} */
+			(dependencies)
+				.filter((dependency) => moduleGraph.getModule(dependency))
+				.sort((a, b) => {
+					if (a.userRequest === b.userRequest) {
+						return 0;
+					}
+					return a.userRequest < b.userRequest ? -1 : 1;
+				});
+		/** @type {UserRequestMap} */
+		const map = Object.create(null);
+		for (const dep of sortedDependencies) {
+			const module = /** @type {Module} */ (moduleGraph.getModule(dep));
+			map[dep.userRequest] =
+				/** @type {ModuleId} */
+				(chunkGraph.getModuleId(module));
+		}
+		return map;
 	}
 
-	getFakeMap(dependencies) {
+	/**
+	 * @param {Dependency[]} dependencies all dependencies
+	 * @param {ChunkGraph} chunkGraph chunk graph
+	 * @returns {FakeMap | FakeMapType} fake map
+	 */
+	getFakeMap(dependencies, chunkGraph) {
 		if (!this.options.namespaceObject) {
 			return 9;
 		}
+		const moduleGraph = chunkGraph.moduleGraph;
+		// bitfield
+		let hasType = 0;
+		const comparator = compareModulesById(chunkGraph);
 		// if we filter first we get a new array
-		// therefor we dont need to create a clone of dependencies explicitly
+		// therefore we don't need to create a clone of dependencies explicitly
 		// therefore the order of this is !important!
-		let hasNonHarmony = false;
-		let hasNamespace = false;
-		let hasNamed = false;
-		const fakeMap = dependencies
-			.filter(dependency => dependency.module)
-			.sort((a, b) => {
-				return b.module.id - a.module.id;
-			})
-			.reduce((map, dep) => {
-				const exportsType =
-					dep.module.buildMeta && dep.module.buildMeta.exportsType;
-				const id = dep.module.id;
-				if (!exportsType) {
-					map[id] = this.options.namespaceObject === "strict" ? 1 : 7;
-					hasNonHarmony = true;
-				} else if (exportsType === "namespace") {
-					map[id] = 9;
-					hasNamespace = true;
-				} else if (exportsType === "named") {
-					map[id] = 3;
-					hasNamed = true;
-				}
-				return map;
-			}, Object.create(null));
-		if (!hasNamespace && hasNonHarmony && !hasNamed) {
-			return this.options.namespaceObject === "strict" ? 1 : 7;
+		const sortedModules = dependencies
+			.map(
+				(dependency) =>
+					/** @type {Module} */ (moduleGraph.getModule(dependency))
+			)
+			.filter(Boolean)
+			.sort(comparator);
+		/** @type {FakeMap} */
+		const fakeMap = Object.create(null);
+		for (const module of sortedModules) {
+			const exportsType = module.getExportsType(
+				moduleGraph,
+				this.options.namespaceObject === "strict"
+			);
+			const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
+			switch (exportsType) {
+				case "namespace":
+					fakeMap[id] = 9;
+					hasType |= 1;
+					break;
+				case "dynamic":
+					fakeMap[id] = 7;
+					hasType |= 2;
+					break;
+				case "default-only":
+					fakeMap[id] = 1;
+					hasType |= 4;
+					break;
+				case "default-with-named":
+					fakeMap[id] = 3;
+					hasType |= 8;
+					break;
+				default:
+					throw new Error(`Unexpected exports type ${exportsType}`);
+			}
 		}
-		if (hasNamespace && !hasNonHarmony && !hasNamed) {
+		if (hasType === 1) {
 			return 9;
 		}
-		if (!hasNamespace && !hasNonHarmony && hasNamed) {
+		if (hasType === 2) {
+			return 7;
+		}
+		if (hasType === 4) {
+			return 1;
+		}
+		if (hasType === 8) {
 			return 3;
 		}
-		if (!hasNamespace && !hasNonHarmony && !hasNamed) {
+		if (hasType === 0) {
 			return 9;
 		}
 		return fakeMap;
 	}
 
+	/**
+	 * @param {FakeMap | FakeMapType} fakeMap fake map
+	 * @returns {string} fake map init statement
+	 */
 	getFakeMapInitStatement(fakeMap) {
 		return typeof fakeMap === "object"
 			? `var fakeMap = ${JSON.stringify(fakeMap, null, "\t")};`
 			: "";
 	}
 
-	getReturn(type) {
+	/**
+	 * @param {Dependency[]} dependencies all dependencies
+	 * @param {ChunkGraph} chunkGraph chunk graph
+	 * @returns {UserRequestsMap} map with user requests
+	 */
+	getModuleDeferredAsyncDepsMap(dependencies, chunkGraph) {
+		const moduleGraph = chunkGraph.moduleGraph;
+		const comparator = compareModulesById(chunkGraph);
+		// if we filter first we get a new array
+		// therefore we don't need to create a clone of dependencies explicitly
+		// therefore the order of this is !important!
+		const sortedModules = dependencies
+			.map(
+				(dependency) =>
+					/** @type {Module} */ (moduleGraph.getModule(dependency))
+			)
+			.filter(Boolean)
+			.sort(comparator);
+		/** @type {UserRequestsMap} */
+		const map = Object.create(null);
+		for (const module of sortedModules) {
+			if (!(/** @type {BuildMeta} */ (module.buildMeta).async)) {
+				const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
+				map[id] = Array.from(
+					getOutgoingAsyncModules(chunkGraph.moduleGraph, module),
+					(m) => chunkGraph.getModuleId(m)
+				).filter((id) => id !== null);
+			}
+		}
+		return map;
+	}
+
+	/**
+	 * @param {false | UserRequestsMap} asyncDepsMap fake map
+	 * @returns {string} async deps map init statement
+	 */
+	getModuleDeferredAsyncDepsMapInitStatement(asyncDepsMap) {
+		return typeof asyncDepsMap === "object"
+			? `var asyncDepsMap = ${JSON.stringify(asyncDepsMap, null, "\t")};`
+			: "";
+	}
+
+	/**
+	 * @param {FakeMapType} type type
+	 * @param {boolean=} asyncModule is async module
+	 * @returns {string} return result
+	 */
+	getReturn(type, asyncModule) {
 		if (type === 9) {
-			return "__webpack_require__(id)";
+			return `${RuntimeGlobals.require}(id)`;
 		}
-		return `__webpack_require__.t(id, ${type})`;
+		return `${RuntimeGlobals.createFakeNamespaceObject}(id, ${type}${
+			asyncModule ? " | 16" : ""
+		})`;
 	}
 
-	getReturnModuleObjectSource(fakeMap, fakeMapDataExpression = "fakeMap[id]") {
-		if (typeof fakeMap === "number") {
-			return `return ${this.getReturn(fakeMap)};`;
+	/**
+	 * @param {FakeMap | FakeMapType} fakeMap fake map
+	 * @param {boolean=} asyncModule is async module
+	 * @param {string=} asyncDeps async deps for deferred module
+	 * @param {string=} fakeMapDataExpression fake map data expression
+	 * @returns {string} module object source
+	 */
+	getReturnModuleObjectSource(
+		fakeMap,
+		asyncModule,
+		asyncDeps,
+		fakeMapDataExpression = "fakeMap[id]"
+	) {
+		const source =
+			typeof fakeMap === "number"
+				? this.getReturn(fakeMap, asyncModule)
+				: `${RuntimeGlobals.createFakeNamespaceObject}(id, ${fakeMapDataExpression}${asyncModule ? " | 16" : ""})`;
+		if (asyncDeps) {
+			if (!asyncModule) {
+				throw new Error("Must be async when module is deferred");
+			}
+			const type =
+				typeof fakeMap === "number" ? fakeMap : fakeMapDataExpression;
+			return `${asyncDeps} ? ${asyncDeps}.length ? ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(${asyncDeps}).then(${RuntimeGlobals.makeDeferredNamespaceObject}.bind(${RuntimeGlobals.require}, id, ${type} ^ 1, true)) : ${RuntimeGlobals.makeDeferredNamespaceObject}(id, ${type} ^ 1 | 16) : ${source}`;
 		}
-		return `return __webpack_require__.t(id, ${fakeMapDataExpression})`;
+		return source;
 	}
 
-	getSyncSource(dependencies, id) {
-		const map = this.getUserRequestMap(dependencies);
-		const fakeMap = this.getFakeMap(dependencies);
+	/**
+	 * @param {Dependency[]} dependencies dependencies
+	 * @param {ModuleId} id module id
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {string} source code
+	 */
+	getSyncSource(dependencies, id, chunkGraph) {
+		const map = this.getUserRequestMap(dependencies, chunkGraph);
+		const fakeMap = this.getFakeMap(dependencies, chunkGraph);
 		const returnModuleObject = this.getReturnModuleObjectSource(fakeMap);
 
 		return `var map = ${JSON.stringify(map, null, "\t")};
@@ -369,16 +809,15 @@ ${this.getFakeMapInitStatement(fakeMap)}
 
 function webpackContext(req) {
 	var id = webpackContextResolve(req);
-	${returnModuleObject}
+	return ${returnModuleObject};
 }
 function webpackContextResolve(req) {
-	var id = map[req];
-	if(!(id + 1)) { // check for number or string
+	if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {
 		var e = new Error("Cannot find module '" + req + "'");
 		e.code = 'MODULE_NOT_FOUND';
 		throw e;
 	}
-	return id;
+	return map[req];
 }
 webpackContext.keys = function webpackContextKeys() {
 	return Object.keys(map);
@@ -388,9 +827,15 @@ module.exports = webpackContext;
 webpackContext.id = ${JSON.stringify(id)};`;
 	}
 
-	getWeakSyncSource(dependencies, id) {
-		const map = this.getUserRequestMap(dependencies);
-		const fakeMap = this.getFakeMap(dependencies);
+	/**
+	 * @param {Dependency[]} dependencies dependencies
+	 * @param {ModuleId} id module id
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {string} source code
+	 */
+	getWeakSyncSource(dependencies, id, chunkGraph) {
+		const map = this.getUserRequestMap(dependencies, chunkGraph);
+		const fakeMap = this.getFakeMap(dependencies, chunkGraph);
 		const returnModuleObject = this.getReturnModuleObjectSource(fakeMap);
 
 		return `var map = ${JSON.stringify(map, null, "\t")};
@@ -398,21 +843,20 @@ ${this.getFakeMapInitStatement(fakeMap)}
 
 function webpackContext(req) {
 	var id = webpackContextResolve(req);
-	if(!__webpack_require__.m[id]) {
+	if(!${RuntimeGlobals.moduleFactories}[id]) {
 		var e = new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
 		e.code = 'MODULE_NOT_FOUND';
 		throw e;
 	}
-	${returnModuleObject}
+	return ${returnModuleObject};
 }
 function webpackContextResolve(req) {
-	var id = map[req];
-	if(!(id + 1)) { // check for number or string
+	if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {
 		var e = new Error("Cannot find module '" + req + "'");
 		e.code = 'MODULE_NOT_FOUND';
 		throw e;
 	}
-	return id;
+	return map[req];
 }
 webpackContext.keys = function webpackContextKeys() {
 	return Object.keys(map);
@@ -422,56 +866,95 @@ webpackContext.id = ${JSON.stringify(id)};
 module.exports = webpackContext;`;
 	}
 
-	getAsyncWeakSource(dependencies, id) {
-		const map = this.getUserRequestMap(dependencies);
-		const fakeMap = this.getFakeMap(dependencies);
-		const returnModuleObject = this.getReturnModuleObjectSource(fakeMap);
+	/**
+	 * @param {Dependency[]} dependencies dependencies
+	 * @param {ModuleId} id module id
+	 * @param {ImportPhaseType} phase import phase
+	 * @param {object} context context
+	 * @param {ChunkGraph} context.chunkGraph the chunk graph
+	 * @param {RuntimeTemplate} context.runtimeTemplate the chunk graph
+	 * @returns {string} source code
+	 */
+	getAsyncWeakSource(dependencies, id, phase, { chunkGraph, runtimeTemplate }) {
+		const map = this.getUserRequestMap(dependencies, chunkGraph);
+		const fakeMap = this.getFakeMap(dependencies, chunkGraph);
+		const asyncDepsMap =
+			ImportPhaseUtils.isDefer(phase) &&
+			this.getModuleDeferredAsyncDepsMap(dependencies, chunkGraph);
+		const returnModuleObject = this.getReturnModuleObjectSource(
+			fakeMap,
+			true,
+			asyncDepsMap ? "asyncDepsMap[id]" : undefined
+		);
 
 		return `var map = ${JSON.stringify(map, null, "\t")};
 ${this.getFakeMapInitStatement(fakeMap)}
+${this.getModuleDeferredAsyncDepsMapInitStatement(asyncDepsMap)}
 
 function webpackAsyncContext(req) {
-	return webpackAsyncContextResolve(req).then(function(id) {
-		if(!__webpack_require__.m[id]) {
-			var e = new Error("Module '" + req + "' ('" + id + "') is not available (weak dependency)");
-			e.code = 'MODULE_NOT_FOUND';
-			throw e;
-		}
-		${returnModuleObject}
-	});
+	return webpackAsyncContextResolve(req).then(${runtimeTemplate.basicFunction(
+		"id",
+		[
+			`if(!${RuntimeGlobals.moduleFactories}[id]) {`,
+			Template.indent([
+				'var e = new Error("Module \'" + req + "\' (\'" + id + "\') is not available (weak dependency)");',
+				"e.code = 'MODULE_NOT_FOUND';",
+				"throw e;"
+			]),
+			"}",
+			`return ${returnModuleObject};`
+		]
+	)});
 }
 function webpackAsyncContextResolve(req) {
 	// Here Promise.resolve().then() is used instead of new Promise() to prevent
 	// uncaught exception popping up in devtools
-	return Promise.resolve().then(function() {
-		var id = map[req];
-		if(!(id + 1)) { // check for number or string
-			var e = new Error("Cannot find module '" + req + "'");
-			e.code = 'MODULE_NOT_FOUND';
-			throw e;
-		}
-		return id;
-	});
+	return Promise.resolve().then(${runtimeTemplate.basicFunction("", [
+		`if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {`,
+		Template.indent([
+			'var e = new Error("Cannot find module \'" + req + "\'");',
+			"e.code = 'MODULE_NOT_FOUND';",
+			"throw e;"
+		]),
+		"}",
+		"return map[req];"
+	])});
 }
-webpackAsyncContext.keys = function webpackAsyncContextKeys() {
-	return Object.keys(map);
-};
+webpackAsyncContext.keys = ${runtimeTemplate.returningFunction(
+			"Object.keys(map)"
+		)};
 webpackAsyncContext.resolve = webpackAsyncContextResolve;
 webpackAsyncContext.id = ${JSON.stringify(id)};
 module.exports = webpackAsyncContext;`;
 	}
 
-	getEagerSource(dependencies, id) {
-		const map = this.getUserRequestMap(dependencies);
-		const fakeMap = this.getFakeMap(dependencies);
-		const thenFunction =
-			fakeMap !== 9
-				? `function(id) {
-		${this.getReturnModuleObjectSource(fakeMap)}
-	}`
-				: "__webpack_require__";
+	/**
+	 * @param {Dependency[]} dependencies dependencies
+	 * @param {ModuleId} id module id
+	 * @param {ImportPhaseType} phase import phase
+	 * @param {object} context context
+	 * @param {ChunkGraph} context.chunkGraph the chunk graph
+	 * @param {RuntimeTemplate} context.runtimeTemplate the chunk graph
+	 * @returns {string} source code
+	 */
+	getEagerSource(dependencies, id, phase, { chunkGraph, runtimeTemplate }) {
+		const map = this.getUserRequestMap(dependencies, chunkGraph);
+		const fakeMap = this.getFakeMap(dependencies, chunkGraph);
+		const asyncDepsMap =
+			ImportPhaseUtils.isDefer(phase) &&
+			this.getModuleDeferredAsyncDepsMap(dependencies, chunkGraph);
+		const thenFunction = runtimeTemplate.returningFunction(
+			this.getReturnModuleObjectSource(
+				fakeMap,
+				true,
+				asyncDepsMap ? "asyncDepsMap[id]" : undefined
+			),
+			"id"
+		);
+
 		return `var map = ${JSON.stringify(map, null, "\t")};
 ${this.getFakeMapInitStatement(fakeMap)}
+${this.getModuleDeferredAsyncDepsMapInitStatement(asyncDepsMap)}
 
 function webpackAsyncContext(req) {
 	return webpackAsyncContextResolve(req).then(${thenFunction});
@@ -479,273 +962,450 @@ function webpackAsyncContext(req) {
 function webpackAsyncContextResolve(req) {
 	// Here Promise.resolve().then() is used instead of new Promise() to prevent
 	// uncaught exception popping up in devtools
-	return Promise.resolve().then(function() {
-		var id = map[req];
-		if(!(id + 1)) { // check for number or string
-			var e = new Error("Cannot find module '" + req + "'");
-			e.code = 'MODULE_NOT_FOUND';
-			throw e;
-		}
-		return id;
-	});
+	return Promise.resolve().then(${runtimeTemplate.basicFunction("", [
+		`if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {`,
+		Template.indent([
+			'var e = new Error("Cannot find module \'" + req + "\'");',
+			"e.code = 'MODULE_NOT_FOUND';",
+			"throw e;"
+		]),
+		"}",
+		"return map[req];"
+	])});
 }
-webpackAsyncContext.keys = function webpackAsyncContextKeys() {
-	return Object.keys(map);
-};
+webpackAsyncContext.keys = ${runtimeTemplate.returningFunction(
+			"Object.keys(map)"
+		)};
 webpackAsyncContext.resolve = webpackAsyncContextResolve;
 webpackAsyncContext.id = ${JSON.stringify(id)};
 module.exports = webpackAsyncContext;`;
 	}
 
-	getLazyOnceSource(block, dependencies, id, runtimeTemplate) {
+	/**
+	 * @param {AsyncDependenciesBlock} block block
+	 * @param {Dependency[]} dependencies dependencies
+	 * @param {ModuleId} id module id
+	 * @param {ImportPhaseType} phase import phase
+	 * @param {object} options options object
+	 * @param {RuntimeTemplate} options.runtimeTemplate the runtime template
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @returns {string} source code
+	 */
+	getLazyOnceSource(
+		block,
+		dependencies,
+		id,
+		phase,
+		{ runtimeTemplate, chunkGraph }
+	) {
 		const promise = runtimeTemplate.blockPromise({
+			chunkGraph,
 			block,
-			message: "lazy-once context"
+			message: "lazy-once context",
+			/** @type {RuntimeRequirements} */
+			runtimeRequirements: new Set()
 		});
-		const map = this.getUserRequestMap(dependencies);
-		const fakeMap = this.getFakeMap(dependencies);
-		const thenFunction =
-			fakeMap !== 9
-				? `function(id) {
-		${this.getReturnModuleObjectSource(fakeMap)};
-	}`
-				: "__webpack_require__";
+		const map = this.getUserRequestMap(dependencies, chunkGraph);
+		const fakeMap = this.getFakeMap(dependencies, chunkGraph);
+		const asyncDepsMap =
+			ImportPhaseUtils.isDefer(phase) &&
+			this.getModuleDeferredAsyncDepsMap(dependencies, chunkGraph);
+		const thenFunction = runtimeTemplate.returningFunction(
+			this.getReturnModuleObjectSource(
+				fakeMap,
+				true,
+				asyncDepsMap ? "asyncDepsMap[id]" : undefined
+			),
+			"id"
+		);
 
 		return `var map = ${JSON.stringify(map, null, "\t")};
 ${this.getFakeMapInitStatement(fakeMap)}
+${this.getModuleDeferredAsyncDepsMapInitStatement(asyncDepsMap)}
 
 function webpackAsyncContext(req) {
 	return webpackAsyncContextResolve(req).then(${thenFunction});
 }
 function webpackAsyncContextResolve(req) {
-	return ${promise}.then(function() {
-		var id = map[req];
-		if(!(id + 1)) { // check for number or string
-			var e = new Error("Cannot find module '" + req + "'");
-			e.code = 'MODULE_NOT_FOUND';
-			throw e;
-		}
-		return id;
-	});
+	return ${promise}.then(${runtimeTemplate.basicFunction("", [
+		`if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {`,
+		Template.indent([
+			'var e = new Error("Cannot find module \'" + req + "\'");',
+			"e.code = 'MODULE_NOT_FOUND';",
+			"throw e;"
+		]),
+		"}",
+		"return map[req];"
+	])});
 }
-webpackAsyncContext.keys = function webpackAsyncContextKeys() {
-	return Object.keys(map);
-};
+webpackAsyncContext.keys = ${runtimeTemplate.returningFunction(
+			"Object.keys(map)"
+		)};
 webpackAsyncContext.resolve = webpackAsyncContextResolve;
 webpackAsyncContext.id = ${JSON.stringify(id)};
 module.exports = webpackAsyncContext;`;
 	}
 
-	getLazySource(blocks, id) {
+	/**
+	 * @param {AsyncDependenciesBlock[]} blocks blocks
+	 * @param {ModuleId} id module id
+	 * @param {ImportPhaseType} phase import phase
+	 * @param {object} context context
+	 * @param {ChunkGraph} context.chunkGraph the chunk graph
+	 * @param {RuntimeTemplate} context.runtimeTemplate the chunk graph
+	 * @returns {string} source code
+	 */
+	getLazySource(blocks, id, phase, { chunkGraph, runtimeTemplate }) {
+		const moduleGraph = chunkGraph.moduleGraph;
 		let hasMultipleOrNoChunks = false;
-		const fakeMap = this.getFakeMap(blocks.map(b => b.dependencies[0]));
-		const map = blocks
-			.filter(block => block.dependencies[0].module)
-			.map(block => ({
-				dependency: block.dependencies[0],
-				block: block,
-				userRequest: block.dependencies[0].userRequest
-			}))
-			.sort((a, b) => {
-				if (a.userRequest === b.userRequest) return 0;
-				return a.userRequest < b.userRequest ? -1 : 1;
+		let hasNoChunk = true;
+		let hasNoModuleDeferred = true;
+		const fakeMap = this.getFakeMap(
+			blocks.map((b) => b.dependencies[0]),
+			chunkGraph
+		);
+		const hasFakeMap = typeof fakeMap === "object";
+		/** @typedef {{ userRequest: string, dependency: ContextElementDependency, chunks: undefined | Chunk[], module: Module, block: AsyncDependenciesBlock, asyncDeps: undefined | ModuleId[] }} Item */
+		/**
+		 * @type {Item[]}
+		 */
+		const items = blocks
+			.map((block) => {
+				const dependency =
+					/** @type {ContextElementDependency} */
+					(block.dependencies[0]);
+				return {
+					dependency,
+					module: /** @type {Module} */ (moduleGraph.getModule(dependency)),
+					block,
+					userRequest: dependency.userRequest,
+					chunks: undefined,
+					asyncDeps: undefined
+				};
 			})
-			.reduce((map, item) => {
-				const chunks =
-					(item.block.chunkGroup && item.block.chunkGroup.chunks) || [];
-				if (chunks.length !== 1) {
-					hasMultipleOrNoChunks = true;
+			.filter((item) => item.module);
+		for (const item of items) {
+			const chunkGroup = chunkGraph.getBlockChunkGroup(item.block);
+			const chunks = (chunkGroup && chunkGroup.chunks) || [];
+			item.chunks = chunks;
+			if (chunks.length > 0) {
+				hasNoChunk = false;
+			}
+			if (chunks.length !== 1) {
+				hasMultipleOrNoChunks = true;
+			}
+			const isModuleDeferred =
+				ImportPhaseUtils.isDefer(phase) &&
+				!(/** @type {BuildMeta} */ (item.module.buildMeta).async);
+			if (isModuleDeferred) {
+				const asyncDeps = Array.from(
+					getOutgoingAsyncModules(chunkGraph.moduleGraph, item.module),
+					(m) => chunkGraph.getModuleId(m)
+				).filter((id) => id !== null);
+				item.asyncDeps = asyncDeps;
+				hasNoModuleDeferred = false;
+			}
+		}
+		const shortMode = hasNoChunk && hasNoModuleDeferred && !hasFakeMap;
+		const sortedItems = items.sort((a, b) => {
+			if (a.userRequest === b.userRequest) return 0;
+			return a.userRequest < b.userRequest ? -1 : 1;
+		});
+		/** @type {Record} */
+		const map = Object.create(null);
+		for (const item of sortedItems) {
+			const moduleId =
+				/** @type {ModuleId} */
+				(chunkGraph.getModuleId(item.module));
+			if (shortMode) {
+				map[item.userRequest] = moduleId;
+			} else {
+				/** @type {(ModuleId | FakeMapType | ChunkId[] | (ModuleId[] | undefined))[]} */
+				const array = [moduleId];
+				if (hasFakeMap) {
+					array.push(fakeMap[moduleId]);
 				}
-				const arrayStart = [item.dependency.module.id];
-				if (typeof fakeMap === "object") {
-					arrayStart.push(fakeMap[item.dependency.module.id]);
+				if (!hasNoChunk) {
+					array.push(
+						/** @type {Chunk[]} */ (item.chunks).map(
+							(chunk) => /** @type {ChunkId} */ (chunk.id)
+						)
+					);
 				}
-				map[item.userRequest] = arrayStart.concat(
-					chunks.map(chunk => chunk.id)
-				);
-
-				return map;
-			}, Object.create(null));
+				if (!hasNoModuleDeferred) {
+					array.push(item.asyncDeps);
+				}
+				map[item.userRequest] = array;
+			}
+		}
 
-		const chunksStartPosition = typeof fakeMap === "object" ? 2 : 1;
-		const requestPrefix = hasMultipleOrNoChunks
-			? `Promise.all(ids.slice(${chunksStartPosition}).map(__webpack_require__.e))`
-			: `__webpack_require__.e(ids[${chunksStartPosition}])`;
+		const chunksPosition = hasFakeMap ? 2 : 1;
+		const asyncDepsPosition = chunksPosition + 1;
+		const requestPrefix = hasNoChunk
+			? "Promise.resolve()"
+			: hasMultipleOrNoChunks
+				? `Promise.all(ids[${chunksPosition}].map(${RuntimeGlobals.ensureChunk}))`
+				: `${RuntimeGlobals.ensureChunk}(ids[${chunksPosition}][0])`;
 		const returnModuleObject = this.getReturnModuleObjectSource(
 			fakeMap,
-			"ids[1]"
+			true,
+			hasNoModuleDeferred ? undefined : `ids[${asyncDepsPosition}]`,
+			shortMode ? "invalid" : "ids[1]"
 		);
 
-		return `var map = ${JSON.stringify(map, null, "\t")};
+		const webpackAsyncContext =
+			requestPrefix === "Promise.resolve()"
+				? `
 function webpackAsyncContext(req) {
-	var ids = map[req];
-	if(!ids) {
-		return Promise.resolve().then(function() {
-			var e = new Error("Cannot find module '" + req + "'");
-			e.code = 'MODULE_NOT_FOUND';
-			throw e;
-		});
+	return Promise.resolve().then(${runtimeTemplate.basicFunction("", [
+		`if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {`,
+		Template.indent([
+			'var e = new Error("Cannot find module \'" + req + "\'");',
+			"e.code = 'MODULE_NOT_FOUND';",
+			"throw e;"
+		]),
+		"}",
+		shortMode ? "var id = map[req];" : "var ids = map[req], id = ids[0];",
+		`return ${returnModuleObject};`
+	])});
+}`
+				: `function webpackAsyncContext(req) {
+	try {
+		if(!${RuntimeGlobals.hasOwnProperty}(map, req)) {
+			return Promise.resolve().then(${runtimeTemplate.basicFunction("", [
+				'var e = new Error("Cannot find module \'" + req + "\'");',
+				"e.code = 'MODULE_NOT_FOUND';",
+				"throw e;"
+			])});
+		}
+	} catch(err) {
+		return Promise.reject(err);
 	}
-	return ${requestPrefix}.then(function() {
-		var id = ids[0];
-		${returnModuleObject}
-	});
-}
-webpackAsyncContext.keys = function webpackAsyncContextKeys() {
-	return Object.keys(map);
-};
+
+	var ids = map[req], id = ids[0];
+	return ${requestPrefix}.then(${runtimeTemplate.returningFunction(returnModuleObject)});
+}`;
+
+		return `var map = ${JSON.stringify(map, null, "\t")};
+${webpackAsyncContext}
+webpackAsyncContext.keys = ${runtimeTemplate.returningFunction(
+			"Object.keys(map)"
+		)};
 webpackAsyncContext.id = ${JSON.stringify(id)};
 module.exports = webpackAsyncContext;`;
 	}
 
-	getSourceForEmptyContext(id) {
+	/**
+	 * @param {ModuleId} id module id
+	 * @param {RuntimeTemplate} runtimeTemplate runtime template
+	 * @returns {string} source for empty async context
+	 */
+	getSourceForEmptyContext(id, runtimeTemplate) {
 		return `function webpackEmptyContext(req) {
 	var e = new Error("Cannot find module '" + req + "'");
 	e.code = 'MODULE_NOT_FOUND';
 	throw e;
 }
-webpackEmptyContext.keys = function() { return []; };
+webpackEmptyContext.keys = ${runtimeTemplate.returningFunction("[]")};
 webpackEmptyContext.resolve = webpackEmptyContext;
-module.exports = webpackEmptyContext;
-webpackEmptyContext.id = ${JSON.stringify(id)};`;
+webpackEmptyContext.id = ${JSON.stringify(id)};
+module.exports = webpackEmptyContext;`;
 	}
 
-	getSourceForEmptyAsyncContext(id) {
+	/**
+	 * @param {ModuleId} id module id
+	 * @param {RuntimeTemplate} runtimeTemplate runtime template
+	 * @returns {string} source for empty async context
+	 */
+	getSourceForEmptyAsyncContext(id, runtimeTemplate) {
 		return `function webpackEmptyAsyncContext(req) {
 	// Here Promise.resolve().then() is used instead of new Promise() to prevent
 	// uncaught exception popping up in devtools
-	return Promise.resolve().then(function() {
-		var e = new Error("Cannot find module '" + req + "'");
-		e.code = 'MODULE_NOT_FOUND';
-		throw e;
-	});
+	return Promise.resolve().then(${runtimeTemplate.basicFunction("", [
+		'var e = new Error("Cannot find module \'" + req + "\'");',
+		"e.code = 'MODULE_NOT_FOUND';",
+		"throw e;"
+	])});
 }
-webpackEmptyAsyncContext.keys = function() { return []; };
+webpackEmptyAsyncContext.keys = ${runtimeTemplate.returningFunction("[]")};
 webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;
-module.exports = webpackEmptyAsyncContext;
-webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
+webpackEmptyAsyncContext.id = ${JSON.stringify(id)};
+module.exports = webpackEmptyAsyncContext;`;
 	}
 
-	getSourceString(asyncMode, runtimeTemplate) {
+	/**
+	 * @param {string} asyncMode module mode
+	 * @param {ImportPhaseType} phase import phase
+	 * @param {CodeGenerationContext} context context info
+	 * @returns {string} the source code
+	 */
+	getSourceString(asyncMode, phase, { runtimeTemplate, chunkGraph }) {
+		const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(this));
 		if (asyncMode === "lazy") {
 			if (this.blocks && this.blocks.length > 0) {
-				return this.getLazySource(this.blocks, this.id);
+				return this.getLazySource(this.blocks, id, phase, {
+					runtimeTemplate,
+					chunkGraph
+				});
 			}
-			return this.getSourceForEmptyAsyncContext(this.id);
+			return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
 		}
 		if (asyncMode === "eager") {
 			if (this.dependencies && this.dependencies.length > 0) {
-				return this.getEagerSource(this.dependencies, this.id);
+				return this.getEagerSource(this.dependencies, id, phase, {
+					chunkGraph,
+					runtimeTemplate
+				});
 			}
-			return this.getSourceForEmptyAsyncContext(this.id);
+			return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
 		}
 		if (asyncMode === "lazy-once") {
 			const block = this.blocks[0];
 			if (block) {
-				return this.getLazyOnceSource(
-					block,
-					block.dependencies,
-					this.id,
-					runtimeTemplate
-				);
+				return this.getLazyOnceSource(block, block.dependencies, id, phase, {
+					runtimeTemplate,
+					chunkGraph
+				});
 			}
-			return this.getSourceForEmptyAsyncContext(this.id);
+			return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
 		}
 		if (asyncMode === "async-weak") {
 			if (this.dependencies && this.dependencies.length > 0) {
-				return this.getAsyncWeakSource(this.dependencies, this.id);
+				return this.getAsyncWeakSource(this.dependencies, id, phase, {
+					chunkGraph,
+					runtimeTemplate
+				});
 			}
-			return this.getSourceForEmptyAsyncContext(this.id);
+			return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
 		}
-		if (asyncMode === "weak") {
-			if (this.dependencies && this.dependencies.length > 0) {
-				return this.getWeakSyncSource(this.dependencies, this.id);
-			}
+		if (
+			asyncMode === "weak" &&
+			this.dependencies &&
+			this.dependencies.length > 0
+		) {
+			return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
 		}
 		if (this.dependencies && this.dependencies.length > 0) {
-			return this.getSyncSource(this.dependencies, this.id);
+			return this.getSyncSource(this.dependencies, id, chunkGraph);
 		}
-		return this.getSourceForEmptyContext(this.id);
+		return this.getSourceForEmptyContext(id, runtimeTemplate);
 	}
 
-	getSource(sourceString) {
-		if (this.useSourceMap) {
-			return new OriginalSource(sourceString, this.identifier());
+	/**
+	 * @param {string} sourceString source content
+	 * @param {Compilation=} compilation the compilation
+	 * @returns {Source} generated source
+	 */
+	getSource(sourceString, compilation) {
+		if (this.useSourceMap || this.useSimpleSourceMap) {
+			return new OriginalSource(
+				sourceString,
+				`webpack://${makePathsRelative(
+					(compilation && compilation.compiler.context) || "",
+					this.identifier(),
+					compilation && compilation.compiler.root
+				)}`
+			);
 		}
 		return new RawSource(sourceString);
 	}
 
-	source(dependencyTemplates, runtimeTemplate) {
-		return this.getSource(
-			this.getSourceString(this.options.mode, runtimeTemplate)
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration(context) {
+		const { chunkGraph, compilation } = context;
+
+		/** @type {Sources} */
+		const sources = new Map();
+		sources.set(
+			JAVASCRIPT_TYPE,
+			this.getSource(
+				this.getSourceString(
+					this.options.mode,
+					this.options.phase || ImportPhase.Evaluation,
+					context
+				),
+				compilation
+			)
 		);
+		/** @type {RuntimeRequirements} */
+		const set = new Set();
+		const allDeps =
+			this.dependencies.length > 0
+				? /** @type {ContextElementDependency[]} */ [...this.dependencies]
+				: [];
+		for (const block of this.blocks) {
+			for (const dep of block.dependencies) {
+				allDeps.push(/** @type {ContextElementDependency} */ (dep));
+			}
+		}
+		set.add(RuntimeGlobals.module);
+		set.add(RuntimeGlobals.hasOwnProperty);
+		if (allDeps.length > 0) {
+			const asyncMode = this.options.mode;
+			set.add(RuntimeGlobals.require);
+			if (asyncMode === "weak") {
+				set.add(RuntimeGlobals.moduleFactories);
+			} else if (asyncMode === "async-weak") {
+				set.add(RuntimeGlobals.moduleFactories);
+				set.add(RuntimeGlobals.ensureChunk);
+			} else if (asyncMode === "lazy" || asyncMode === "lazy-once") {
+				set.add(RuntimeGlobals.ensureChunk);
+			}
+			if (this.getFakeMap(allDeps, chunkGraph) !== 9) {
+				set.add(RuntimeGlobals.createFakeNamespaceObject);
+			}
+			if (
+				ImportPhaseUtils.isDefer(this.options.phase || ImportPhase.Evaluation)
+			) {
+				set.add(RuntimeGlobals.makeDeferredNamespaceObject);
+			}
+		}
+		return {
+			sources,
+			runtimeRequirements: set
+		};
 	}
 
-	size() {
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
 		// base penalty
-		const initialSize = 160;
+		let size = 160;
 
-		// if we dont have dependencies we stop here.
-		return this.dependencies.reduce((size, dependency) => {
+		// if we don't have dependencies we stop here.
+		for (const dependency of this.dependencies) {
 			const element = /** @type {ContextElementDependency} */ (dependency);
-			return size + 5 + element.userRequest.length;
-		}, initialSize);
+			size += 5 + element.userRequest.length;
+		}
+		return size;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this._identifier);
+		write(this._forceBuild);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+		this._identifier = read();
+		this._forceBuild = read();
+		super.deserialize(context);
 	}
 }
 
-// TODO remove in webpack 5
-Object.defineProperty(ContextModule.prototype, "recursive", {
-	configurable: false,
-	get: util.deprecate(function() {
-		return this.options.recursive;
-	}, "ContextModule.recursive has been moved to ContextModule.options.recursive"),
-	set: util.deprecate(function(value) {
-		this.options.recursive = value;
-	}, "ContextModule.recursive has been moved to ContextModule.options.recursive")
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(ContextModule.prototype, "regExp", {
-	configurable: false,
-	get: util.deprecate(function() {
-		return this.options.regExp;
-	}, "ContextModule.regExp has been moved to ContextModule.options.regExp"),
-	set: util.deprecate(function(value) {
-		this.options.regExp = value;
-	}, "ContextModule.regExp has been moved to ContextModule.options.regExp")
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(ContextModule.prototype, "addon", {
-	configurable: false,
-	get: util.deprecate(function() {
-		return this.options.addon;
-	}, "ContextModule.addon has been moved to ContextModule.options.addon"),
-	set: util.deprecate(function(value) {
-		this.options.addon = value;
-	}, "ContextModule.addon has been moved to ContextModule.options.addon")
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(ContextModule.prototype, "async", {
-	configurable: false,
-	get: util.deprecate(function() {
-		return this.options.mode;
-	}, "ContextModule.async has been moved to ContextModule.options.mode"),
-	set: util.deprecate(function(value) {
-		this.options.mode = value;
-	}, "ContextModule.async has been moved to ContextModule.options.mode")
-});
-
-// TODO remove in webpack 5
-Object.defineProperty(ContextModule.prototype, "chunkName", {
-	configurable: false,
-	get: util.deprecate(function() {
-		return this.options.chunkName;
-	}, "ContextModule.chunkName has been moved to ContextModule.options.chunkName"),
-	set: util.deprecate(function(value) {
-		this.options.chunkName = value;
-	}, "ContextModule.chunkName has been moved to ContextModule.options.chunkName")
-});
+makeSerializable(ContextModule, "webpack/lib/ContextModule");
 
 module.exports = ContextModule;
diff --git a/lib/ContextModuleFactory.js b/lib/ContextModuleFactory.js
index 2a52a58f058..b1fc743219d 100644
--- a/lib/ContextModuleFactory.js
+++ b/lib/ContextModuleFactory.js
@@ -2,72 +2,163 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const asyncLib = require("neo-async");
-const path = require("path");
-
-const {
-	Tapable,
-	AsyncSeriesWaterfallHook,
-	SyncWaterfallHook
-} = require("tapable");
+const { AsyncSeriesWaterfallHook, SyncWaterfallHook } = require("tapable");
 const ContextModule = require("./ContextModule");
+const ModuleFactory = require("./ModuleFactory");
 const ContextElementDependency = require("./dependencies/ContextElementDependency");
+const LazySet = require("./util/LazySet");
+const { cachedSetProperty } = require("./util/cleverMerge");
+const { createFakeHook } = require("./util/deprecation");
+const { join } = require("./util/fs");
+
+/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
+/** @typedef {import("./Compilation").FileSystemDependencies} FileSystemDependencies */
+/** @typedef {import("./ContextModule").ContextModuleOptions} ContextModuleOptions */
+/** @typedef {import("./ContextModule").ResolveDependenciesCallback} ResolveDependenciesCallback */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("./ResolverFactory")} ResolverFactory */
+/** @typedef {import("./dependencies/ContextDependency")} ContextDependency */
+/** @typedef {import("./dependencies/ContextDependency").ContextOptions} ContextOptions */
+
+/**
+ * @template T
+ * @typedef {import("./util/deprecation").FakeHook} FakeHook
+ */
+/** @typedef {import("./util/fs").IStats} IStats */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {{ context: string, request: string }} ContextAlternativeRequest */
+
+/**
+ * @typedef {object} ContextResolveData
+ * @property {string} context
+ * @property {string} request
+ * @property {ModuleFactoryCreateData["resolveOptions"]} resolveOptions
+ * @property {FileSystemDependencies} fileDependencies
+ * @property {FileSystemDependencies} missingDependencies
+ * @property {FileSystemDependencies} contextDependencies
+ * @property {ContextDependency[]} dependencies
+ */
+
+/** @typedef {ContextResolveData & ContextOptions} BeforeContextResolveData */
+/** @typedef {BeforeContextResolveData & { resource: string | string[], resourceQuery: string | undefined, resourceFragment: string | undefined, resolveDependencies: ContextModuleFactory["resolveDependencies"] }} AfterContextResolveData */
 
 const EMPTY_RESOLVE_OPTIONS = {};
 
-module.exports = class ContextModuleFactory extends Tapable {
+class ContextModuleFactory extends ModuleFactory {
+	/**
+	 * @param {ResolverFactory} resolverFactory resolverFactory
+	 */
 	constructor(resolverFactory) {
 		super();
-		this.hooks = {
+		/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[], ContextModuleOptions]>} */
+		const alternativeRequests = new AsyncSeriesWaterfallHook([
+			"modules",
+			"options"
+		]);
+		this.hooks = Object.freeze({
+			/** @type {AsyncSeriesWaterfallHook<[BeforeContextResolveData], BeforeContextResolveData | false | void>} */
 			beforeResolve: new AsyncSeriesWaterfallHook(["data"]),
+			/** @type {AsyncSeriesWaterfallHook<[AfterContextResolveData], AfterContextResolveData | false | void>} */
 			afterResolve: new AsyncSeriesWaterfallHook(["data"]),
+			/** @type {SyncWaterfallHook<[string[]]>} */
 			contextModuleFiles: new SyncWaterfallHook(["files"]),
-			alternatives: new AsyncSeriesWaterfallHook(["modules"])
-		};
-		this._pluginCompat.tap("ContextModuleFactory", options => {
-			switch (options.name) {
-				case "before-resolve":
-				case "after-resolve":
-				case "alternatives":
-					options.async = true;
-					break;
-			}
+			/** @type {FakeHook, "tap" | "tapAsync" | "tapPromise" | "name">>} */
+			alternatives: createFakeHook(
+				{
+					name: "alternatives",
+					/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["intercept"]} */
+					intercept: (interceptor) => {
+						throw new Error(
+							"Intercepting fake hook ContextModuleFactory.hooks.alternatives is not possible, use ContextModuleFactory.hooks.alternativeRequests instead"
+						);
+					},
+					/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tap"]} */
+					tap: (options, fn) => {
+						alternativeRequests.tap(options, fn);
+					},
+					/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tapAsync"]} */
+					tapAsync: (options, fn) => {
+						alternativeRequests.tapAsync(options, (items, _options, callback) =>
+							fn(items, callback)
+						);
+					},
+					/** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tapPromise"]} */
+					tapPromise: (options, fn) => {
+						alternativeRequests.tapPromise(options, fn);
+					}
+				},
+				"ContextModuleFactory.hooks.alternatives has deprecated in favor of ContextModuleFactory.hooks.alternativeRequests with an additional options argument.",
+				"DEP_WEBPACK_CONTEXT_MODULE_FACTORY_ALTERNATIVES"
+			),
+			alternativeRequests
 		});
+		/** @type {ResolverFactory} */
 		this.resolverFactory = resolverFactory;
 	}
 
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
 	create(data, callback) {
 		const context = data.context;
-		const dependencies = data.dependencies;
+		const dependencies = /** @type {ContextDependency[]} */ (data.dependencies);
 		const resolveOptions = data.resolveOptions;
 		const dependency = dependencies[0];
+		/** @type {FileSystemDependencies} */
+		const fileDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		const missingDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		const contextDependencies = new LazySet();
 		this.hooks.beforeResolve.callAsync(
-			Object.assign(
-				{
-					context: context,
-					dependencies: dependencies,
-					resolveOptions
-				},
-				dependency.options
-			),
+			{
+				context,
+				dependencies,
+				layer: data.contextInfo.issuerLayer,
+				resolveOptions,
+				fileDependencies,
+				missingDependencies,
+				contextDependencies,
+				...dependency.options
+			},
 			(err, beforeResolveResult) => {
-				if (err) return callback(err);
+				if (err) {
+					return callback(err, {
+						fileDependencies,
+						missingDependencies,
+						contextDependencies
+					});
+				}
 
 				// Ignored
-				if (!beforeResolveResult) return callback();
+				if (!beforeResolveResult) {
+					return callback(null, {
+						fileDependencies,
+						missingDependencies,
+						contextDependencies
+					});
+				}
 
 				const context = beforeResolveResult.context;
 				const request = beforeResolveResult.request;
 				const resolveOptions = beforeResolveResult.resolveOptions;
 
-				let loaders,
-					resource,
-					loadersPrefix = "";
+				/** @type {undefined | string[]} */
+				let loaders;
+				/** @type {undefined | string} */
+				let resource;
+				let loadersPrefix = "";
 				const idx = request.lastIndexOf("!");
 				if (idx >= 0) {
-					let loadersRequest = request.substr(0, idx + 1);
+					let loadersRequest = request.slice(0, idx + 1);
+					/** @type {number} */
 					let i;
 					for (
 						i = 0;
@@ -77,15 +168,11 @@ module.exports = class ContextModuleFactory extends Tapable {
 						loadersPrefix += "!";
 					}
 					loadersRequest = loadersRequest
-						.substr(i)
+						.slice(i)
 						.replace(/!+$/, "")
-						.replace(/!!+/g, "!");
-					if (loadersRequest === "") {
-						loaders = [];
-					} else {
-						loaders = loadersRequest.split("!");
-					}
-					resource = request.substr(idx + 1);
+						.replace(/!{2,}/g, "!");
+					loaders = loadersRequest === "" ? [] : loadersRequest.split("!");
+					resource = request.slice(idx + 1);
 				} else {
 					loaders = [];
 					resource = request;
@@ -93,28 +180,45 @@ module.exports = class ContextModuleFactory extends Tapable {
 
 				const contextResolver = this.resolverFactory.get(
 					"context",
-					resolveOptions || EMPTY_RESOLVE_OPTIONS
-				);
-				const loaderResolver = this.resolverFactory.get(
-					"loader",
-					EMPTY_RESOLVE_OPTIONS
+					dependencies.length > 0
+						? cachedSetProperty(
+								resolveOptions || EMPTY_RESOLVE_OPTIONS,
+								"dependencyType",
+								dependencies[0].category
+							)
+						: resolveOptions
 				);
+				const loaderResolver = this.resolverFactory.get("loader");
 
 				asyncLib.parallel(
 					[
-						callback => {
+						(callback) => {
+							const results = /** @type {ResolveRequest[]} */ ([]);
+							/**
+							 * @param {ResolveRequest} obj obj
+							 * @returns {void}
+							 */
+							const yield_ = (obj) => {
+								results.push(obj);
+							};
+
 							contextResolver.resolve(
 								{},
 								context,
 								resource,
-								{},
-								(err, result) => {
+								{
+									fileDependencies,
+									missingDependencies,
+									contextDependencies,
+									yield: yield_
+								},
+								(err) => {
 									if (err) return callback(err);
-									callback(null, result);
+									callback(null, results);
 								}
 							);
 						},
-						callback => {
+						(callback) => {
 							asyncLib.map(
 								loaders,
 								(loader, callback) => {
@@ -122,7 +226,11 @@ module.exports = class ContextModuleFactory extends Tapable {
 										{},
 										context,
 										loader,
-										{},
+										{
+											fileDependencies,
+											missingDependencies,
+											contextDependencies
+										},
 										(err, result) => {
 											if (err) return callback(err);
 											callback(null, result);
@@ -134,30 +242,59 @@ module.exports = class ContextModuleFactory extends Tapable {
 						}
 					],
 					(err, result) => {
-						if (err) return callback(err);
-
+						if (err) {
+							return callback(err, {
+								fileDependencies,
+								missingDependencies,
+								contextDependencies
+							});
+						}
+						let [contextResult, loaderResult] =
+							/** @type {[ResolveRequest[], string[]]} */ (result);
+						if (contextResult.length > 1) {
+							const first = contextResult[0];
+							contextResult = contextResult.filter((r) => r.path);
+							if (contextResult.length === 0) contextResult.push(first);
+						}
 						this.hooks.afterResolve.callAsync(
-							Object.assign(
-								{
-									addon:
-										loadersPrefix +
-										result[1].join("!") +
-										(result[1].length > 0 ? "!" : ""),
-									resource: result[0],
-									resolveDependencies: this.resolveDependencies.bind(this)
-								},
-								beforeResolveResult
-							),
+							{
+								addon:
+									loadersPrefix +
+									loaderResult.join("!") +
+									(loaderResult.length > 0 ? "!" : ""),
+								resource:
+									contextResult.length > 1
+										? /** @type {string[]} */ (contextResult.map((r) => r.path))
+										: /** @type {string} */ (contextResult[0].path),
+								resolveDependencies: this.resolveDependencies.bind(this),
+								resourceQuery: contextResult[0].query,
+								resourceFragment: contextResult[0].fragment,
+								...beforeResolveResult
+							},
 							(err, result) => {
-								if (err) return callback(err);
+								if (err) {
+									return callback(err, {
+										fileDependencies,
+										missingDependencies,
+										contextDependencies
+									});
+								}
 
 								// Ignored
-								if (!result) return callback();
+								if (!result) {
+									return callback(null, {
+										fileDependencies,
+										missingDependencies,
+										contextDependencies
+									});
+								}
 
-								return callback(
-									null,
-									new ContextModule(result.resolveDependencies, result)
-								);
+								return callback(null, {
+									module: new ContextModule(result.resolveDependencies, result),
+									fileDependencies,
+									missingDependencies,
+									contextDependencies
+								});
 							}
 						);
 					}
@@ -166,67 +303,132 @@ module.exports = class ContextModuleFactory extends Tapable {
 		);
 	}
 
+	/**
+	 * @param {InputFileSystem} fs file system
+	 * @param {ContextModuleOptions} options options
+	 * @param {ResolveDependenciesCallback} callback callback function
+	 * @returns {void}
+	 */
 	resolveDependencies(fs, options, callback) {
 		const cmf = this;
-		let resource = options.resource;
-		let resourceQuery = options.resourceQuery;
-		let recursive = options.recursive;
-		let regExp = options.regExp;
-		let include = options.include;
-		let exclude = options.exclude;
+		const {
+			resource,
+			resourceQuery,
+			resourceFragment,
+			recursive,
+			regExp,
+			include,
+			exclude,
+			referencedExports,
+			category,
+			typePrefix,
+			attributes
+		} = options;
 		if (!regExp || !resource) return callback(null, []);
 
-		const addDirectory = (directory, callback) => {
+		/**
+		 * @param {string} ctx context
+		 * @param {string} directory directory
+		 * @param {Set} visited visited
+		 * @param {ResolveDependenciesCallback} callback callback
+		 */
+		const addDirectoryChecked = (ctx, directory, visited, callback) => {
+			/** @type {NonNullable} */
+			(fs.realpath)(directory, (err, _realPath) => {
+				if (err) return callback(err);
+				const realPath = /** @type {string} */ (_realPath);
+				if (visited.has(realPath)) return callback(null, []);
+				/** @type {Set | undefined} */
+				let recursionStack;
+				addDirectory(
+					ctx,
+					directory,
+					(_, dir, callback) => {
+						if (recursionStack === undefined) {
+							recursionStack = new Set(visited);
+							recursionStack.add(realPath);
+						}
+						addDirectoryChecked(ctx, dir, recursionStack, callback);
+					},
+					callback
+				);
+			});
+		};
+
+		/**
+		 * @param {string} ctx context
+		 * @param {string} directory directory
+		 * @param {(context: string, subResource: string, callback: () => void) => void} addSubDirectory addSubDirectoryFn
+		 * @param {ResolveDependenciesCallback} callback callback
+		 * @returns {void}
+		 */
+		const addDirectory = (ctx, directory, addSubDirectory, callback) => {
 			fs.readdir(directory, (err, files) => {
 				if (err) return callback(err);
-				files = cmf.hooks.contextModuleFiles.call(files);
-				if (!files || files.length === 0) return callback(null, []);
+				const processedFiles = cmf.hooks.contextModuleFiles.call(
+					/** @type {string[]} */ (files).map((file) => file.normalize("NFC"))
+				);
+				if (!processedFiles || processedFiles.length === 0) {
+					return callback(null, []);
+				}
 				asyncLib.map(
-					files.filter(p => p.indexOf(".") !== 0),
+					processedFiles.filter((p) => p.indexOf(".") !== 0),
 					(segment, callback) => {
-						const subResource = path.join(directory, segment);
+						const subResource = join(fs, directory, segment);
 
-						if (!exclude || !subResource.match(exclude)) {
-							fs.stat(subResource, (err, stat) => {
+						if (!exclude || !exclude.test(subResource)) {
+							fs.stat(subResource, (err, _stat) => {
 								if (err) {
 									if (err.code === "ENOENT") {
 										// ENOENT is ok here because the file may have been deleted between
 										// the readdir and stat calls.
 										return callback();
-									} else {
-										return callback(err);
 									}
+									return callback(err);
 								}
 
+								const stat = /** @type {IStats} */ (_stat);
+
 								if (stat.isDirectory()) {
 									if (!recursive) return callback();
-									addDirectory.call(this, subResource, callback);
+									addSubDirectory(ctx, subResource, callback);
 								} else if (
 									stat.isFile() &&
-									(!include || subResource.match(include))
+									(!include || include.test(subResource))
 								) {
+									/** @type {{ context: string, request: string }} */
 									const obj = {
-										context: resource,
-										request:
-											"." +
-											subResource.substr(resource.length).replace(/\\/g, "/")
+										context: ctx,
+										request: `.${subResource.slice(ctx.length).replace(/\\/g, "/")}`
 									};
 
-									this.hooks.alternatives.callAsync(
+									this.hooks.alternativeRequests.callAsync(
 										[obj],
+										options,
 										(err, alternatives) => {
 											if (err) return callback(err);
-											alternatives = alternatives
-												.filter(obj => regExp.test(obj.request))
-												.map(obj => {
-													const dep = new ContextElementDependency(
-														obj.request + resourceQuery,
-														obj.request
-													);
-													dep.optional = true;
-													return dep;
-												});
-											callback(null, alternatives);
+											callback(
+												null,
+												/** @type {ContextAlternativeRequest[]} */
+												(alternatives)
+													.filter((obj) =>
+														regExp.test(/** @type {string} */ (obj.request))
+													)
+													.map((obj) => {
+														const dep = new ContextElementDependency(
+															`${obj.request}${resourceQuery}${resourceFragment}`,
+															obj.request,
+															typePrefix,
+															/** @type {string} */
+															(category),
+															referencedExports,
+															obj.context,
+															attributes
+														);
+														dep.optional = true;
+														return dep;
+													})
+											);
 										}
 									);
 								} else {
@@ -242,15 +444,71 @@ module.exports = class ContextModuleFactory extends Tapable {
 
 						if (!result) return callback(null, []);
 
-						callback(
-							null,
-							result.filter(Boolean).reduce((a, i) => a.concat(i), [])
-						);
+						/** @type {ContextElementDependency[]} */
+						const flattenedResult = [];
+
+						for (const item of result) {
+							if (item) flattenedResult.push(...item);
+						}
+
+						callback(null, flattenedResult);
 					}
 				);
 			});
 		};
 
-		addDirectory(resource, callback);
+		/**
+		 * @param {string} ctx context
+		 * @param {string} dir dir
+		 * @param {ResolveDependenciesCallback} callback callback
+		 * @returns {void}
+		 */
+		const addSubDirectory = (ctx, dir, callback) =>
+			addDirectory(ctx, dir, addSubDirectory, callback);
+
+		/**
+		 * @param {string} resource resource
+		 * @param {ResolveDependenciesCallback} callback callback
+		 */
+		const visitResource = (resource, callback) => {
+			if (typeof fs.realpath === "function") {
+				addDirectoryChecked(
+					resource,
+					resource,
+					/** @type {Set} */
+					new Set(),
+					callback
+				);
+			} else {
+				addDirectory(resource, resource, addSubDirectory, callback);
+			}
+		};
+
+		if (typeof resource === "string") {
+			visitResource(resource, callback);
+		} else {
+			asyncLib.map(resource, visitResource, (err, _result) => {
+				if (err) return callback(err);
+				const result = /** @type {ContextElementDependency[][]} */ (_result);
+
+				// result dependencies should have unique userRequest
+				// ordered by resolve result
+				/** @type {Set} */
+				const temp = new Set();
+				/** @type {ContextElementDependency[]} */
+				const res = [];
+				for (let i = 0; i < result.length; i++) {
+					const inner = result[i];
+					for (const el of inner) {
+						if (temp.has(el.userRequest)) continue;
+						res.push(el);
+						temp.add(el.userRequest);
+					}
+				}
+				callback(null, res);
+			});
+		}
 	}
-};
+}
+
+module.exports = ContextModuleFactory;
diff --git a/lib/ContextReplacementPlugin.js b/lib/ContextReplacementPlugin.js
index 39c29de83bf..b66fbcadb9d 100644
--- a/lib/ContextReplacementPlugin.js
+++ b/lib/ContextReplacementPlugin.js
@@ -2,12 +2,29 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const path = require("path");
 const ContextElementDependency = require("./dependencies/ContextElementDependency");
+const { join } = require("./util/fs");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./ContextModule").ContextModuleOptions} ContextModuleOptions */
+/** @typedef {import("./ContextModuleFactory").BeforeContextResolveData} BeforeContextResolveData */
+/** @typedef {import("./ContextModuleFactory").AfterContextResolveData} AfterContextResolveData */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+
+/** @typedef {Record} NewContentCreateContextMap */
+
+const PLUGIN_NAME = "ContextReplacementPlugin";
 
 class ContextReplacementPlugin {
+	/**
+	 * @param {RegExp} resourceRegExp A regular expression that determines which files will be selected
+	 * @param {(string | ((context: BeforeContextResolveData | AfterContextResolveData) => void) | RegExp | boolean)=} newContentResource A new resource to replace the match
+	 * @param {(boolean | NewContentCreateContextMap | RegExp)=} newContentRecursive If true, all subdirectories are searched for matches
+	 * @param {RegExp=} newContentRegExp A regular expression that determines which files will be selected
+	 */
 	constructor(
 		resourceRegExp,
 		newContentResource,
@@ -16,38 +33,64 @@ class ContextReplacementPlugin {
 	) {
 		this.resourceRegExp = resourceRegExp;
 
+		// new webpack.ContextReplacementPlugin(/selector/, (context) => { /* Logic */ });
 		if (typeof newContentResource === "function") {
 			this.newContentCallback = newContentResource;
-		} else if (
+		}
+		// new ContextReplacementPlugin(/selector/, './folder', { './request': './request' });
+		else if (
 			typeof newContentResource === "string" &&
 			typeof newContentRecursive === "object"
 		) {
 			this.newContentResource = newContentResource;
+			/**
+			 * @param {InputFileSystem} fs input file system
+			 * @param {(err: null | Error, newContentRecursive: NewContentCreateContextMap) => void} callback callback
+			 */
 			this.newContentCreateContextMap = (fs, callback) => {
-				callback(null, newContentRecursive);
+				callback(
+					null,
+					/** @type {NewContentCreateContextMap} */ (newContentRecursive)
+				);
 			};
-		} else if (
+		}
+		// new ContextReplacementPlugin(/selector/, './folder', (context) => { /* Logic */ });
+		else if (
 			typeof newContentResource === "string" &&
 			typeof newContentRecursive === "function"
 		) {
 			this.newContentResource = newContentResource;
 			this.newContentCreateContextMap = newContentRecursive;
 		} else {
+			// new webpack.ContextReplacementPlugin(/selector/, false, /reg-exp/);
 			if (typeof newContentResource !== "string") {
-				newContentRegExp = newContentRecursive;
-				newContentRecursive = newContentResource;
+				newContentRegExp = /** @type {RegExp} */ (newContentRecursive);
+				newContentRecursive = /** @type {boolean} */ (newContentResource);
 				newContentResource = undefined;
 			}
+			// new webpack.ContextReplacementPlugin(/selector/, /de|fr|hu/);
 			if (typeof newContentRecursive !== "boolean") {
-				newContentRegExp = newContentRecursive;
+				newContentRegExp = /** @type {RegExp} */ (newContentRecursive);
 				newContentRecursive = undefined;
 			}
-			this.newContentResource = newContentResource;
-			this.newContentRecursive = newContentRecursive;
-			this.newContentRegExp = newContentRegExp;
+			// new webpack.ContextReplacementPlugin(/selector/, './folder', false, /selector/);
+			this.newContentResource =
+				/** @type {string | undefined} */
+				(newContentResource);
+			this.newContentRecursive =
+				/** @type {boolean | undefined} */
+				(newContentRecursive);
+			this.newContentRegExp =
+				/** @type {RegExp | undefined} */
+				(newContentRegExp);
 		}
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		const resourceRegExp = this.resourceRegExp;
 		const newContentCallback = this.newContentCallback;
@@ -56,17 +99,17 @@ class ContextReplacementPlugin {
 		const newContentRegExp = this.newContentRegExp;
 		const newContentCreateContextMap = this.newContentCreateContextMap;
 
-		compiler.hooks.contextModuleFactory.tap("ContextReplacementPlugin", cmf => {
-			cmf.hooks.beforeResolve.tap("ContextReplacementPlugin", result => {
+		compiler.hooks.contextModuleFactory.tap(PLUGIN_NAME, (cmf) => {
+			cmf.hooks.beforeResolve.tap(PLUGIN_NAME, (result) => {
 				if (!result) return;
 				if (resourceRegExp.test(result.request)) {
-					if (typeof newContentResource !== "undefined") {
+					if (newContentResource !== undefined) {
 						result.request = newContentResource;
 					}
-					if (typeof newContentRecursive !== "undefined") {
+					if (newContentRecursive !== undefined) {
 						result.recursive = newContentRecursive;
 					}
-					if (typeof newContentRegExp !== "undefined") {
+					if (newContentRegExp !== undefined) {
 						result.regExp = newContentRegExp;
 					}
 					if (typeof newContentCallback === "function") {
@@ -79,28 +122,72 @@ class ContextReplacementPlugin {
 				}
 				return result;
 			});
-			cmf.hooks.afterResolve.tap("ContextReplacementPlugin", result => {
+			cmf.hooks.afterResolve.tap(PLUGIN_NAME, (result) => {
 				if (!result) return;
-				if (resourceRegExp.test(result.resource)) {
-					if (typeof newContentResource !== "undefined") {
-						result.resource = path.resolve(result.resource, newContentResource);
+				const isMatchResourceRegExp = () => {
+					if (Array.isArray(result.resource)) {
+						return result.resource.some((item) => resourceRegExp.test(item));
 					}
-					if (typeof newContentRecursive !== "undefined") {
+
+					return resourceRegExp.test(result.resource);
+				};
+				if (isMatchResourceRegExp()) {
+					if (newContentResource !== undefined) {
+						if (
+							newContentResource.startsWith("/") ||
+							(newContentResource.length > 1 && newContentResource[1] === ":")
+						) {
+							result.resource = newContentResource;
+						} else {
+							const rootPath =
+								typeof result.resource === "string"
+									? result.resource
+									: /** @type {string} */
+										(result.resource.find((item) => resourceRegExp.test(item)));
+							result.resource = join(
+								/** @type {InputFileSystem} */
+								(compiler.inputFileSystem),
+								rootPath,
+								newContentResource
+							);
+						}
+					}
+					if (newContentRecursive !== undefined) {
 						result.recursive = newContentRecursive;
 					}
-					if (typeof newContentRegExp !== "undefined") {
+					if (newContentRegExp !== undefined) {
 						result.regExp = newContentRegExp;
 					}
 					if (typeof newContentCreateContextMap === "function") {
-						result.resolveDependencies = createResolveDependenciesFromContextMap(
-							newContentCreateContextMap
-						);
+						result.resolveDependencies =
+							createResolveDependenciesFromContextMap(
+								newContentCreateContextMap
+							);
 					}
 					if (typeof newContentCallback === "function") {
 						const origResource = result.resource;
 						newContentCallback(result);
 						if (result.resource !== origResource) {
-							result.resource = path.resolve(origResource, result.resource);
+							const newResource = Array.isArray(result.resource)
+								? result.resource
+								: [result.resource];
+
+							for (let i = 0; i < newResource.length; i++) {
+								if (
+									!newResource[i].startsWith("/") &&
+									(newResource[i].length <= 1 || newResource[i][1] !== ":")
+								) {
+									// When the function changed it to an relative path
+									newResource[i] = join(
+										/** @type {InputFileSystem} */
+										(compiler.inputFileSystem),
+										origResource[i],
+										newResource[i]
+									);
+								}
+							}
+
+							result.resource = newResource;
 						}
 					} else {
 						for (const d of result.dependencies) {
@@ -114,20 +201,27 @@ class ContextReplacementPlugin {
 	}
 }
 
-const createResolveDependenciesFromContextMap = createContextMap => {
-	const resolveDependenciesFromContextMap = (fs, options, callback) => {
+/**
+ * @param {(fs: InputFileSystem, callback: (err: null | Error, map: NewContentCreateContextMap) => void) => void} createContextMap create context map function
+ * @returns {(fs: InputFileSystem, options: ContextModuleOptions, callback: (err: null | Error, dependencies?: ContextElementDependency[]) => void) => void} resolve resolve dependencies from context map function
+ */
+const createResolveDependenciesFromContextMap =
+	(createContextMap) => (fs, options, callback) => {
 		createContextMap(fs, (err, map) => {
 			if (err) return callback(err);
-			const dependencies = Object.keys(map).map(key => {
-				return new ContextElementDependency(
-					map[key] + options.resourceQuery,
-					key
-				);
-			});
+			const dependencies = Object.keys(map).map(
+				(key) =>
+					new ContextElementDependency(
+						map[key] + options.resourceQuery + options.resourceFragment,
+						key,
+						options.typePrefix,
+						/** @type {string} */
+						(options.category),
+						options.referencedExports
+					)
+			);
 			callback(null, dependencies);
 		});
 	};
-	return resolveDependenciesFromContextMap;
-};
 
 module.exports = ContextReplacementPlugin;
diff --git a/lib/CssModule.js b/lib/CssModule.js
new file mode 100644
index 00000000000..20fb94626f5
--- /dev/null
+++ b/lib/CssModule.js
@@ -0,0 +1,194 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Alexander Akait @alexander-akait
+*/
+
+"use strict";
+
+const NormalModule = require("./NormalModule");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./NormalModule").NormalModuleCreateData} NormalModuleCreateData */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../declarations/WebpackOptions").CssParserExportType} CssParserExportType */
+
+/** @typedef {string | undefined} CssLayer */
+/** @typedef {string | undefined} Supports */
+/** @typedef {string | undefined} Media */
+/** @typedef {[CssLayer, Supports, Media]} InheritanceItem */
+/** @typedef {InheritanceItem[]} Inheritance */
+
+/** @typedef {NormalModuleCreateData & { cssLayer: CssLayer, supports: Supports, media: Media, inheritance?: Inheritance, exportType?: CssParserExportType }} CSSModuleCreateData */
+
+class CssModule extends NormalModule {
+	/**
+	 * @param {CSSModuleCreateData} options options object
+	 */
+	constructor(options) {
+		super(options);
+
+		// Avoid override `layer` for `Module` class, because it is a feature to run module in specific layer
+		/** @type {CSSModuleCreateData['cssLayer']} */
+		this.cssLayer = options.cssLayer;
+		/** @type {CSSModuleCreateData['supports']} */
+		this.supports = options.supports;
+		/** @type {CSSModuleCreateData['media']} */
+		this.media = options.media;
+		/** @type {CSSModuleCreateData['inheritance']} */
+		this.inheritance = options.inheritance;
+		/** @type {CSSModuleCreateData['exportType']} */
+		this.exportType = options.exportType;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		let identifier = super.identifier();
+
+		if (this.cssLayer) {
+			identifier += `|${this.cssLayer}`;
+		}
+
+		if (this.supports) {
+			identifier += `|${this.supports}`;
+		}
+
+		if (this.media) {
+			identifier += `|${this.media}`;
+		}
+
+		if (this.inheritance) {
+			const inheritance = this.inheritance.map(
+				(item, index) =>
+					`inheritance_${index}|${item[0] || ""}|${item[1] || ""}|${
+						item[2] || ""
+					}`
+			);
+
+			identifier += `|${inheritance.join("|")}`;
+		}
+
+		if (this.exportType) {
+			identifier += `|${this.exportType}`;
+		}
+
+		// We generate extra code for HMR, so we need to invalidate the module
+		if (this.hot) {
+			identifier += `|${this.hot}`;
+		}
+
+		return identifier;
+	}
+
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		const readableIdentifier = super.readableIdentifier(requestShortener);
+
+		let identifier = `css ${readableIdentifier}`;
+
+		if (this.cssLayer) {
+			identifier += ` (layer: ${this.cssLayer})`;
+		}
+
+		if (this.supports) {
+			identifier += ` (supports: ${this.supports})`;
+		}
+
+		if (this.media) {
+			identifier += ` (media: ${this.media})`;
+		}
+
+		if (this.exportType) {
+			identifier += ` (exportType: ${this.exportType})`;
+		}
+
+		return identifier;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Update the (cached) module with
+	 * the fresh module from the factory. Usually updates internal references
+	 * and properties.
+	 * @param {Module} module fresh module
+	 * @returns {void}
+	 */
+	updateCacheModule(module) {
+		super.updateCacheModule(module);
+		const m = /** @type {CssModule} */ (module);
+		this.cssLayer = m.cssLayer;
+		this.supports = m.supports;
+		this.media = m.media;
+		this.inheritance = m.inheritance;
+		this.exportType = m.exportType;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this.cssLayer);
+		write(this.supports);
+		write(this.media);
+		write(this.inheritance);
+		write(this.exportType);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {CssModule} the deserialized object
+	 */
+	static deserialize(context) {
+		const obj = new CssModule({
+			// will be deserialized by Module
+			layer: /** @type {EXPECTED_ANY} */ (null),
+			type: "",
+			// will be filled by updateCacheModule
+			resource: "",
+			context: "",
+			request: /** @type {EXPECTED_ANY} */ (null),
+			userRequest: /** @type {EXPECTED_ANY} */ (null),
+			rawRequest: /** @type {EXPECTED_ANY} */ (null),
+			loaders: /** @type {EXPECTED_ANY} */ (null),
+			matchResource: /** @type {EXPECTED_ANY} */ (null),
+			parser: /** @type {EXPECTED_ANY} */ (null),
+			parserOptions: /** @type {EXPECTED_ANY} */ (null),
+			generator: /** @type {EXPECTED_ANY} */ (null),
+			generatorOptions: /** @type {EXPECTED_ANY} */ (null),
+			resolveOptions: /** @type {EXPECTED_ANY} */ (null),
+			cssLayer: /** @type {EXPECTED_ANY} */ (null),
+			supports: /** @type {EXPECTED_ANY} */ (null),
+			media: /** @type {EXPECTED_ANY} */ (null),
+			inheritance: /** @type {EXPECTED_ANY} */ (null),
+			extractSourceMap: /** @type {EXPECTED_ANY} */ (null),
+			exportType: /** @type {EXPECTED_ANY} */ (null)
+		});
+		obj.deserialize(context);
+		return obj;
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+		this.cssLayer = read();
+		this.supports = read();
+		this.media = read();
+		this.inheritance = read();
+		this.exportType = read();
+		super.deserialize(context);
+	}
+}
+
+makeSerializable(CssModule, "webpack/lib/CssModule");
+
+module.exports = CssModule;
diff --git a/lib/DefinePlugin.js b/lib/DefinePlugin.js
index 4d485a9eb95..ff59a902465 100644
--- a/lib/DefinePlugin.js
+++ b/lib/DefinePlugin.js
@@ -2,102 +2,603 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const { SyncWaterfallHook } = require("tapable");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const WebpackError = require("./WebpackError");
 const ConstDependency = require("./dependencies/ConstDependency");
-const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
-const ParserHelpers = require("./ParserHelpers");
-const NullFactory = require("./NullFactory");
-
-const stringifyObj = obj => {
-	return (
-		"Object({" +
-		Object.keys(obj)
-			.map(key => {
+const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
+const { VariableInfo } = require("./javascript/JavascriptParser");
+const {
+	evaluateToString,
+	toConstantDependency
+} = require("./javascript/JavascriptParserHelpers");
+const createHash = require("./util/createHash");
+
+/** @typedef {import("estree").Expression} Expression */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./Module").ValueCacheVersion} ValueCacheVersion */
+/** @typedef {import("./Module").ValueCacheVersions} ValueCacheVersions */
+/** @typedef {import("./NormalModule")} NormalModule */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./Compilation")} Compilation */
+
+/** @typedef {null | undefined | RegExp | EXPECTED_FUNCTION | string | number | boolean | bigint | undefined} CodeValuePrimitive */
+/** @typedef {RecursiveArrayOrRecord} CodeValue */
+
+/**
+ * @typedef {object} RuntimeValueOptions
+ * @property {string[]=} fileDependencies
+ * @property {string[]=} contextDependencies
+ * @property {string[]=} missingDependencies
+ * @property {string[]=} buildDependencies
+ * @property {string | (() => string)=} version
+ */
+
+/** @typedef {(value: { module: NormalModule, key: string, readonly version: ValueCacheVersion }) => CodeValuePrimitive} GeneratorFn */
+
+class RuntimeValue {
+	/**
+	 * @param {GeneratorFn} fn generator function
+	 * @param {true | string[] | RuntimeValueOptions=} options options
+	 */
+	constructor(fn, options) {
+		/** @type {GeneratorFn} */
+		this.fn = fn;
+		if (Array.isArray(options)) {
+			options = {
+				fileDependencies: options
+			};
+		}
+		/** @type {true | RuntimeValueOptions} */
+		this.options = options || {};
+	}
+
+	get fileDependencies() {
+		return this.options === true ? true : this.options.fileDependencies;
+	}
+
+	/**
+	 * @param {JavascriptParser} parser the parser
+	 * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
+	 * @param {string} key the defined key
+	 * @returns {CodeValuePrimitive} code
+	 */
+	exec(parser, valueCacheVersions, key) {
+		const buildInfo = /** @type {BuildInfo} */ (parser.state.module.buildInfo);
+		if (this.options === true) {
+			buildInfo.cacheable = false;
+		} else {
+			if (this.options.fileDependencies) {
+				for (const dep of this.options.fileDependencies) {
+					/** @type {NonNullable} */
+					(buildInfo.fileDependencies).add(dep);
+				}
+			}
+			if (this.options.contextDependencies) {
+				for (const dep of this.options.contextDependencies) {
+					/** @type {NonNullable} */
+					(buildInfo.contextDependencies).add(dep);
+				}
+			}
+			if (this.options.missingDependencies) {
+				for (const dep of this.options.missingDependencies) {
+					/** @type {NonNullable} */
+					(buildInfo.missingDependencies).add(dep);
+				}
+			}
+			if (this.options.buildDependencies) {
+				for (const dep of this.options.buildDependencies) {
+					/** @type {NonNullable} */
+					(buildInfo.buildDependencies).add(dep);
+				}
+			}
+		}
+
+		return this.fn({
+			module: parser.state.module,
+			key,
+			get version() {
+				return /** @type {ValueCacheVersion} */ (
+					valueCacheVersions.get(VALUE_DEP_PREFIX + key)
+				);
+			}
+		});
+	}
+
+	getCacheVersion() {
+		return this.options === true
+			? undefined
+			: (typeof this.options.version === "function"
+					? this.options.version()
+					: this.options.version) || "unset";
+	}
+}
+
+/**
+ * @param {DestructuringAssignmentProperties | undefined} properties properties
+ * @returns {Set | undefined} used keys
+ */
+function getObjKeys(properties) {
+	if (!properties) return;
+	return new Set([...properties].map((p) => p.id));
+}
+
+/** @typedef {Set | null} ObjKeys */
+/** @typedef {boolean | undefined | null} AsiSafe */
+
+/**
+ * @param {EXPECTED_ANY[] | { [k: string]: EXPECTED_ANY }} obj obj
+ * @param {JavascriptParser} parser Parser
+ * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
+ * @param {string} key the defined key
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @param {Logger} logger the logger object
+ * @param {AsiSafe=} asiSafe asi safe (undefined: unknown, null: unneeded)
+ * @param {ObjKeys=} objKeys used keys
+ * @returns {string} code converted to string that evaluates
+ */
+const stringifyObj = (
+	obj,
+	parser,
+	valueCacheVersions,
+	key,
+	runtimeTemplate,
+	logger,
+	asiSafe,
+	objKeys
+) => {
+	/** @type {string} */
+	let code;
+	const arr = Array.isArray(obj);
+	if (arr) {
+		code = `[${obj
+			.map((code) =>
+				toCode(
+					code,
+					parser,
+					valueCacheVersions,
+					key,
+					runtimeTemplate,
+					logger,
+					null
+				)
+			)
+			.join(",")}]`;
+	} else {
+		let keys = Object.keys(obj);
+		if (objKeys) {
+			keys = objKeys.size === 0 ? [] : keys.filter((k) => objKeys.has(k));
+		}
+		code = `{${keys
+			.map((key) => {
 				const code = obj[key];
-				return JSON.stringify(key) + ":" + toCode(code);
+				return `${key === "__proto__" ? '["__proto__"]' : JSON.stringify(key)}:${toCode(
+					code,
+					parser,
+					valueCacheVersions,
+					key,
+					runtimeTemplate,
+					logger,
+					null
+				)}`;
 			})
-			.join(",") +
-		"})"
-	);
+			.join(",")}}`;
+	}
+
+	switch (asiSafe) {
+		case null:
+			return code;
+		case true:
+			return arr ? code : `(${code})`;
+		case false:
+			return arr ? `;${code}` : `;(${code})`;
+		default:
+			return `/*#__PURE__*/Object(${code})`;
+	}
+};
+
+/**
+ * Convert code to a string that evaluates
+ * @param {CodeValue} code Code to evaluate
+ * @param {JavascriptParser} parser Parser
+ * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
+ * @param {string} key the defined key
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @param {Logger} logger the logger object
+ * @param {boolean | undefined | null=} asiSafe asi safe (undefined: unknown, null: unneeded)
+ * @param {ObjKeys=} objKeys used keys
+ * @returns {string} code converted to string that evaluates
+ */
+const toCode = (
+	code,
+	parser,
+	valueCacheVersions,
+	key,
+	runtimeTemplate,
+	logger,
+	asiSafe,
+	objKeys
+) => {
+	const transformToCode = () => {
+		if (code === null) {
+			return "null";
+		}
+		if (code === undefined) {
+			return "undefined";
+		}
+		if (Object.is(code, -0)) {
+			return "-0";
+		}
+		if (code instanceof RuntimeValue) {
+			return toCode(
+				code.exec(parser, valueCacheVersions, key),
+				parser,
+				valueCacheVersions,
+				key,
+				runtimeTemplate,
+				logger,
+				asiSafe
+			);
+		}
+		if (code instanceof RegExp && code.toString) {
+			return code.toString();
+		}
+		if (typeof code === "function" && code.toString) {
+			return `(${code.toString()})`;
+		}
+		if (typeof code === "object") {
+			return stringifyObj(
+				code,
+				parser,
+				valueCacheVersions,
+				key,
+				runtimeTemplate,
+				logger,
+				asiSafe,
+				objKeys
+			);
+		}
+		if (typeof code === "bigint") {
+			return runtimeTemplate.supportsBigIntLiteral()
+				? `${code}n`
+				: `BigInt("${code}")`;
+		}
+		return `${code}`;
+	};
+
+	const strCode = transformToCode();
+
+	logger.debug(`Replaced "${key}" with "${strCode}"`);
+
+	return strCode;
 };
 
-const toCode = code => {
+/**
+ * @param {CodeValue} code code
+ * @returns {string | undefined} result
+ */
+const toCacheVersion = (code) => {
 	if (code === null) {
 		return "null";
 	}
 	if (code === undefined) {
 		return "undefined";
 	}
+	if (Object.is(code, -0)) {
+		return "-0";
+	}
+	if (code instanceof RuntimeValue) {
+		return code.getCacheVersion();
+	}
 	if (code instanceof RegExp && code.toString) {
 		return code.toString();
 	}
 	if (typeof code === "function" && code.toString) {
-		return "(" + code.toString() + ")";
+		return `(${code.toString()})`;
 	}
 	if (typeof code === "object") {
-		return stringifyObj(code);
+		const items = Object.keys(code).map((key) => ({
+			key,
+			value: toCacheVersion(
+				/** @type {Record} */
+				(code)[key]
+			)
+		}));
+		if (items.some(({ value }) => value === undefined)) return;
+		return `{${items.map(({ key, value }) => `${key}: ${value}`).join(", ")}}`;
+	}
+	if (typeof code === "bigint") {
+		return `${code}n`;
 	}
-	return code + "";
+	return `${code}`;
 };
 
+const PLUGIN_NAME = "DefinePlugin";
+const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
+const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
+const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
+const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
+	`${RuntimeGlobals.require}\\s*(!?\\.)`
+);
+const WEBPACK_REQUIRE_IDENTIFIER_REGEXP = new RegExp(RuntimeGlobals.require);
+
+/**
+ * @typedef {object} DefinePluginHooks
+ * @property {SyncWaterfallHook<[Record]>} definitions
+ */
+
+/** @typedef {Record} Definitions */
+
+/** @type {WeakMap} */
+const compilationHooksMap = new WeakMap();
+
 class DefinePlugin {
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @returns {DefinePluginHooks} the attached hooks
+	 */
+	static getCompilationHooks(compilation) {
+		let hooks = compilationHooksMap.get(compilation);
+		if (hooks === undefined) {
+			hooks = {
+				definitions: new SyncWaterfallHook(["definitions"])
+			};
+			compilationHooksMap.set(compilation, hooks);
+		}
+		return hooks;
+	}
+
+	/**
+	 * Create a new define plugin
+	 * @param {Definitions} definitions A map of global object definitions
+	 */
 	constructor(definitions) {
+		/** @type {Definitions} */
 		this.definitions = definitions;
 	}
 
+	/**
+	 * @param {GeneratorFn} fn generator function
+	 * @param {true | string[] | RuntimeValueOptions=} options options
+	 * @returns {RuntimeValue} runtime value
+	 */
+	static runtimeValue(fn, options) {
+		return new RuntimeValue(fn, options);
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		const definitions = this.definitions;
 		compiler.hooks.compilation.tap(
-			"DefinePlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
+				const definitions = this.definitions;
+				const hooks = DefinePlugin.getCompilationHooks(compilation);
+
+				hooks.definitions.tap(PLUGIN_NAME, (previousDefinitions) => ({
+					...previousDefinitions,
+					...definitions
+				}));
+
+				/**
+				 * @type {Map>}
+				 */
+				const finalByNestedKey = new Map();
+				/**
+				 * @type {Map>}
+				 */
+				const nestedByFinalKey = new Map();
+
+				const logger = compilation.getLogger("webpack.DefinePlugin");
 				compilation.dependencyTemplates.set(
 					ConstDependency,
 					new ConstDependency.Template()
 				);
+				const { runtimeTemplate } = compilation;
+
+				const mainHash = createHash(compilation.outputOptions.hashFunction);
+				mainHash.update(
+					/** @type {string} */
+					(compilation.valueCacheVersions.get(VALUE_DEP_MAIN)) || ""
+				);
 
-				const handler = parser => {
+				/**
+				 * Handler
+				 * @param {JavascriptParser} parser Parser
+				 * @returns {void}
+				 */
+				const handler = (parser) => {
+					/** @type {Set} */
+					const hooked = new Set();
+					const mainValue =
+						/** @type {ValueCacheVersion} */
+						(compilation.valueCacheVersions.get(VALUE_DEP_MAIN));
+					parser.hooks.program.tap(PLUGIN_NAME, () => {
+						const buildInfo = /** @type {BuildInfo} */ (
+							parser.state.module.buildInfo
+						);
+						if (!buildInfo.valueDependencies) {
+							buildInfo.valueDependencies = new Map();
+						}
+						buildInfo.valueDependencies.set(VALUE_DEP_MAIN, mainValue);
+					});
+
+					/**
+					 * @param {string} key key
+					 */
+					const addValueDependency = (key) => {
+						const buildInfo =
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo);
+						/** @type {NonNullable} */
+						(buildInfo.valueDependencies).set(
+							VALUE_DEP_PREFIX + key,
+							/** @type {ValueCacheVersion} */
+							(compilation.valueCacheVersions.get(VALUE_DEP_PREFIX + key))
+						);
+					};
+
+					/**
+					 * @template T
+					 * @param {string} key key
+					 * @param {(expression: Expression) => T} fn fn
+					 * @returns {(expression: Expression) => T} result
+					 */
+					const withValueDependency =
+						(key, fn) =>
+						(...args) => {
+							addValueDependency(key);
+							return fn(...args);
+						};
+
+					/**
+					 * Walk definitions
+					 * @param {Definitions} definitions Definitions map
+					 * @param {string} prefix Prefix string
+					 * @returns {void}
+					 */
 					const walkDefinitions = (definitions, prefix) => {
-						Object.keys(definitions).forEach(key => {
+						for (const key of Object.keys(definitions)) {
 							const code = definitions[key];
 							if (
 								code &&
 								typeof code === "object" &&
+								!(code instanceof RuntimeValue) &&
 								!(code instanceof RegExp)
 							) {
-								walkDefinitions(code, prefix + key + ".");
+								walkDefinitions(
+									/** @type {Definitions} */ (code),
+									`${prefix + key}.`
+								);
 								applyObjectDefine(prefix + key, code);
-								return;
+								continue;
 							}
 							applyDefineKey(prefix, key);
 							applyDefine(prefix + key, code);
-						});
+						}
 					};
 
+					/**
+					 * Apply define key
+					 * @param {string} prefix Prefix
+					 * @param {string} key Key
+					 * @returns {void}
+					 */
 					const applyDefineKey = (prefix, key) => {
 						const splittedKey = key.split(".");
-						splittedKey.slice(1).forEach((_, i) => {
+						const firstKey = splittedKey[0];
+						for (const [i, _] of splittedKey.slice(1).entries()) {
 							const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
-							parser.hooks.canRename
-								.for(fullKey)
-								.tap("DefinePlugin", ParserHelpers.approve);
-						});
+							parser.hooks.canRename.for(fullKey).tap(PLUGIN_NAME, () => {
+								addValueDependency(key);
+								if (
+									parser.scope.definitions.get(firstKey) instanceof VariableInfo
+								) {
+									return false;
+								}
+								return true;
+							});
+						}
+						if (prefix === "") {
+							const final = splittedKey[splittedKey.length - 1];
+							const nestedSet = nestedByFinalKey.get(final);
+							if (!nestedSet || nestedSet.size <= 0) return;
+							for (const nested of /** @type {Set} */ (nestedSet)) {
+								if (nested && !hooked.has(nested)) {
+									// only detect the same nested key once
+									hooked.add(nested);
+									parser.hooks.collectDestructuringAssignmentProperties.tap(
+										PLUGIN_NAME,
+										(expr) => {
+											const nameInfo = parser.getNameForExpression(expr);
+											if (nameInfo && nameInfo.name === nested) return true;
+										}
+									);
+									parser.hooks.expression.for(nested).tap(
+										{
+											name: PLUGIN_NAME,
+											// why 100? Ensures it runs after object define
+											stage: 100
+										},
+										(expr) => {
+											const destructed =
+												parser.destructuringAssignmentPropertiesFor(expr);
+											if (destructed === undefined) {
+												return;
+											}
+											/** @type {Definitions} */
+											const obj = Object.create(null);
+											const finalSet = finalByNestedKey.get(nested);
+											for (const { id } of destructed) {
+												const fullKey = `${nested}.${id}`;
+												if (
+													!finalSet ||
+													!finalSet.has(id) ||
+													!definitions[fullKey]
+												) {
+													return;
+												}
+												obj[id] = definitions[fullKey];
+											}
+											let strCode = stringifyObj(
+												obj,
+												parser,
+												compilation.valueCacheVersions,
+												key,
+												runtimeTemplate,
+												logger,
+												!parser.isAsiPosition(
+													/** @type {Range} */ (expr.range)[0]
+												),
+												getObjKeys(destructed)
+											);
+											if (parser.scope.inShorthand) {
+												strCode = `${parser.scope.inShorthand}:${strCode}`;
+											}
+											return toConstantDependency(parser, strCode)(expr);
+										}
+									);
+								}
+							}
+						}
 					};
 
+					/**
+					 * Apply Code
+					 * @param {string} key Key
+					 * @param {CodeValue} code Code
+					 * @returns {void}
+					 */
 					const applyDefine = (key, code) => {
-						const isTypeof = /^typeof\s+/.test(key);
-						if (isTypeof) key = key.replace(/^typeof\s+/, "");
+						const originalKey = key;
+						const isTypeof = TYPEOF_OPERATOR_REGEXP.test(key);
+						if (isTypeof) key = key.replace(TYPEOF_OPERATOR_REGEXP, "");
 						let recurse = false;
 						let recurseTypeof = false;
-						code = toCode(code);
 						if (!isTypeof) {
-							parser.hooks.canRename
-								.for(key)
-								.tap("DefinePlugin", ParserHelpers.approve);
+							parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
+								addValueDependency(originalKey);
+								return true;
+							});
 							parser.hooks.evaluateIdentifier
 								.for(key)
-								.tap("DefinePlugin", expr => {
+								.tap(PLUGIN_NAME, (expr) => {
 									/**
 									 * this is needed in case there is a recursion in the DefinePlugin
 									 * to prevent an endless recursion
@@ -107,26 +608,53 @@ class DefinePlugin {
 									 * });
 									 */
 									if (recurse) return;
+									addValueDependency(originalKey);
 									recurse = true;
-									const res = parser.evaluate(code);
+									const res = parser.evaluate(
+										toCode(
+											code,
+											parser,
+											compilation.valueCacheVersions,
+											key,
+											runtimeTemplate,
+											logger,
+											null
+										)
+									);
 									recurse = false;
-									res.setRange(expr.range);
+									res.setRange(/** @type {Range} */ (expr.range));
 									return res;
 								});
-							parser.hooks.expression
-								.for(key)
-								.tap(
-									"DefinePlugin",
-									/__webpack_require__/.test(code)
-										? ParserHelpers.toConstantDependencyWithWebpackRequire(
-												parser,
-												code
-										  )
-										: ParserHelpers.toConstantDependency(parser, code)
+							parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expr) => {
+								addValueDependency(originalKey);
+								let strCode = toCode(
+									code,
+									parser,
+									compilation.valueCacheVersions,
+									originalKey,
+									runtimeTemplate,
+									logger,
+									!parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
+									null
 								);
+
+								if (parser.scope.inShorthand) {
+									strCode = `${parser.scope.inShorthand}:${strCode}`;
+								}
+
+								if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
+									return toConstantDependency(parser, strCode, [
+										RuntimeGlobals.require
+									])(expr);
+								} else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
+									return toConstantDependency(parser, strCode, [
+										RuntimeGlobals.requireScope
+									])(expr);
+								}
+								return toConstantDependency(parser, strCode)(expr);
+							});
 						}
-						const typeofCode = isTypeof ? code : "typeof (" + code + ")";
-						parser.hooks.evaluateTypeof.for(key).tap("DefinePlugin", expr => {
+						parser.hooks.evaluateTypeof.for(key).tap(PLUGIN_NAME, (expr) => {
 							/**
 							 * this is needed in case there is a recursion in the DefinePlugin
 							 * to prevent an endless recursion
@@ -137,52 +665,111 @@ class DefinePlugin {
 							 */
 							if (recurseTypeof) return;
 							recurseTypeof = true;
+							addValueDependency(originalKey);
+							const codeCode = toCode(
+								code,
+								parser,
+								compilation.valueCacheVersions,
+								originalKey,
+								runtimeTemplate,
+								logger,
+								null
+							);
+							const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
 							const res = parser.evaluate(typeofCode);
 							recurseTypeof = false;
-							res.setRange(expr.range);
+							res.setRange(/** @type {Range} */ (expr.range));
 							return res;
 						});
-						parser.hooks.typeof.for(key).tap("DefinePlugin", expr => {
+						parser.hooks.typeof.for(key).tap(PLUGIN_NAME, (expr) => {
+							addValueDependency(originalKey);
+							const codeCode = toCode(
+								code,
+								parser,
+								compilation.valueCacheVersions,
+								originalKey,
+								runtimeTemplate,
+								logger,
+								null
+							);
+							const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
 							const res = parser.evaluate(typeofCode);
 							if (!res.isString()) return;
-							return ParserHelpers.toConstantDependency(
+							return toConstantDependency(
 								parser,
 								JSON.stringify(res.string)
 							).bind(parser)(expr);
 						});
 					};
 
+					/**
+					 * Apply Object
+					 * @param {string} key Key
+					 * @param {object} obj Object
+					 * @returns {void}
+					 */
 					const applyObjectDefine = (key, obj) => {
-						const code = stringifyObj(obj);
-						parser.hooks.canRename
-							.for(key)
-							.tap("DefinePlugin", ParserHelpers.approve);
+						parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
+							addValueDependency(key);
+							return true;
+						});
 						parser.hooks.evaluateIdentifier
 							.for(key)
-							.tap("DefinePlugin", expr =>
-								new BasicEvaluatedExpression().setTruthy().setRange(expr.range)
-							);
+							.tap(PLUGIN_NAME, (expr) => {
+								addValueDependency(key);
+								return new BasicEvaluatedExpression()
+									.setTruthy()
+									.setSideEffects(false)
+									.setRange(/** @type {Range} */ (expr.range));
+							});
 						parser.hooks.evaluateTypeof
-							.for(key)
-							.tap("DefinePlugin", ParserHelpers.evaluateToString("object"));
-						parser.hooks.expression
 							.for(key)
 							.tap(
-								"DefinePlugin",
-								/__webpack_require__/.test(code)
-									? ParserHelpers.toConstantDependencyWithWebpackRequire(
-											parser,
-											code
-									  )
-									: ParserHelpers.toConstantDependency(parser, code)
+								PLUGIN_NAME,
+								withValueDependency(key, evaluateToString("object"))
 							);
+						parser.hooks.collectDestructuringAssignmentProperties.tap(
+							PLUGIN_NAME,
+							(expr) => {
+								const nameInfo = parser.getNameForExpression(expr);
+								if (nameInfo && nameInfo.name === key) return true;
+							}
+						);
+						parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expr) => {
+							addValueDependency(key);
+							let strCode = stringifyObj(
+								obj,
+								parser,
+								compilation.valueCacheVersions,
+								key,
+								runtimeTemplate,
+								logger,
+								!parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
+								getObjKeys(parser.destructuringAssignmentPropertiesFor(expr))
+							);
+
+							if (parser.scope.inShorthand) {
+								strCode = `${parser.scope.inShorthand}:${strCode}`;
+							}
+
+							if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
+								return toConstantDependency(parser, strCode, [
+									RuntimeGlobals.require
+								])(expr);
+							} else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
+								return toConstantDependency(parser, strCode, [
+									RuntimeGlobals.requireScope
+								])(expr);
+							}
+							return toConstantDependency(parser, strCode)(expr);
+						});
 						parser.hooks.typeof
 							.for(key)
 							.tap(
-								"DefinePlugin",
-								ParserHelpers.toConstantDependency(
-									parser,
-									JSON.stringify("object")
+								PLUGIN_NAME,
+								withValueDependency(
+									key,
+									toConstantDependency(parser, JSON.stringify("object"))
 								)
 							);
 					};
@@ -191,16 +778,101 @@ class DefinePlugin {
 				};
 
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("DefinePlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("DefinePlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/esm")
-					.tap("DefinePlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
+
+				/**
+				 * Walk definitions
+				 * @param {Definitions} definitions Definitions map
+				 * @param {string} prefix Prefix string
+				 * @returns {void}
+				 */
+				const walkDefinitionsForValues = (definitions, prefix) => {
+					for (const key of Object.keys(definitions)) {
+						const code = definitions[key];
+						const version = /** @type {string} */ (toCacheVersion(code));
+						const name = VALUE_DEP_PREFIX + prefix + key;
+						mainHash.update(`|${prefix}${key}`);
+						const oldVersion = compilation.valueCacheVersions.get(name);
+						if (oldVersion === undefined) {
+							compilation.valueCacheVersions.set(name, version);
+						} else if (oldVersion !== version) {
+							const warning = new WebpackError(
+								`${PLUGIN_NAME}\nConflicting values for '${prefix + key}'`
+							);
+							warning.details = `'${oldVersion}' !== '${version}'`;
+							warning.hideStack = true;
+							compilation.warnings.push(warning);
+						}
+						if (
+							code &&
+							typeof code === "object" &&
+							!(code instanceof RuntimeValue) &&
+							!(code instanceof RegExp)
+						) {
+							walkDefinitionsForValues(
+								/** @type {Definitions} */ (code),
+								`${prefix + key}.`
+							);
+						}
+					}
+				};
+
+				/**
+				 * @param {Definitions} definitions Definitions map
+				 * @returns {void}
+				 */
+				const walkDefinitionsForKeys = (definitions) => {
+					/**
+					 * @param {Map>} map Map
+					 * @param {string} key key
+					 * @param {string} value v
+					 * @returns {void}
+					 */
+					const addToMap = (map, key, value) => {
+						if (map.has(key)) {
+							/** @type {Set} */
+							(map.get(key)).add(value);
+						} else {
+							map.set(key, new Set([value]));
+						}
+					};
+					for (const key of Object.keys(definitions)) {
+						const code = definitions[key];
+						if (
+							!code ||
+							typeof code === "object" ||
+							TYPEOF_OPERATOR_REGEXP.test(key)
+						) {
+							continue;
+						}
+						const idx = key.lastIndexOf(".");
+						if (idx <= 0 || idx >= key.length - 1) {
+							continue;
+						}
+						const nested = key.slice(0, idx);
+						const final = key.slice(idx + 1);
+						addToMap(finalByNestedKey, nested, final);
+						addToMap(nestedByFinalKey, final, nested);
+					}
+				};
+
+				walkDefinitionsForKeys(definitions);
+				walkDefinitionsForValues(definitions, "");
+
+				compilation.valueCacheVersions.set(
+					VALUE_DEP_MAIN,
+					mainHash.digest("hex").slice(0, 8)
+				);
 			}
 		);
 	}
 }
+
 module.exports = DefinePlugin;
diff --git a/lib/DelegatedModule.js b/lib/DelegatedModule.js
index 769d030cc5c..ade614f0268 100644
--- a/lib/DelegatedModule.js
+++ b/lib/DelegatedModule.js
@@ -2,73 +2,176 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const { OriginalSource, RawSource } = require("webpack-sources");
-
 const Module = require("./Module");
-const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
-const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
+const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptions} DllReferencePluginOptions */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./Generator").SourceTypes} SourceTypes */
+/** @typedef {import("./LibManifestPlugin").ManifestModuleData} ManifestModuleData */
+/** @typedef {import("./Module").ModuleId} ModuleId */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("./Module").LibIdent} LibIdent */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./dependencies/StaticExportsDependency").Exports} Exports */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+
+/** @typedef {string} DelegatedModuleSourceRequest */
+
+/** @typedef {NonNullable} DelegatedModuleType */
+
+/**
+ * @typedef {object} DelegatedModuleData
+ * @property {BuildMeta=} buildMeta build meta
+ * @property {Exports=} exports exports
+ * @property {ModuleId} id module id
+ */
+
+const RUNTIME_REQUIREMENTS = new Set([
+	RuntimeGlobals.module,
+	RuntimeGlobals.require
+]);
 
 class DelegatedModule extends Module {
+	/**
+	 * @param {DelegatedModuleSourceRequest} sourceRequest source request
+	 * @param {DelegatedModuleData} data data
+	 * @param {DelegatedModuleType} type type
+	 * @param {string} userRequest user request
+	 * @param {string | Module} originalRequest original request
+	 */
 	constructor(sourceRequest, data, type, userRequest, originalRequest) {
-		super("javascript/dynamic", null);
+		super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
 
 		// Info from Factory
 		this.sourceRequest = sourceRequest;
 		this.request = data.id;
-		this.type = type;
+		this.delegationType = type;
 		this.userRequest = userRequest;
 		this.originalRequest = originalRequest;
 		this.delegateData = data;
+
+		// Build info
+		/** @type {undefined | DelegatedSourceDependency} */
+		this.delegatedSourceDependency = undefined;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
 	}
 
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
 	libIdent(options) {
 		return typeof this.originalRequest === "string"
 			? this.originalRequest
 			: this.originalRequest.libIdent(options);
 	}
 
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
 	identifier() {
 		return `delegated ${JSON.stringify(this.request)} from ${
 			this.sourceRequest
 		}`;
 	}
 
-	readableIdentifier() {
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
 		return `delegated ${this.userRequest} from ${this.sourceRequest}`;
 	}
 
-	needRebuild() {
-		return false;
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, !this.buildMeta);
 	}
 
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
 	build(options, compilation, resolver, fs, callback) {
-		this.built = true;
-		this.buildMeta = Object.assign({}, this.delegateData.buildMeta);
+		const delegateData = /** @type {ManifestModuleData} */ (this.delegateData);
+		this.buildMeta = { ...delegateData.buildMeta };
 		this.buildInfo = {};
-		this.addDependency(new DelegatedSourceDependency(this.sourceRequest));
+		this.dependencies.length = 0;
+		this.delegatedSourceDependency = new DelegatedSourceDependency(
+			this.sourceRequest
+		);
+		this.addDependency(this.delegatedSourceDependency);
 		this.addDependency(
-			new DelegatedExportsDependency(this, this.delegateData.exports || true)
+			new StaticExportsDependency(delegateData.exports || true, false)
 		);
 		callback();
 	}
 
-	source(depTemplates, runtime) {
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration({ runtimeTemplate, moduleGraph, chunkGraph }) {
 		const dep = /** @type {DelegatedSourceDependency} */ (this.dependencies[0]);
-		const sourceModule = dep.module;
+		const sourceModule = moduleGraph.getModule(dep);
+		/** @type {string} */
 		let str;
 
 		if (!sourceModule) {
-			str = WebpackMissingModule.moduleCode(this.sourceRequest);
+			str = runtimeTemplate.throwMissingModuleErrorBlock({
+				request: this.sourceRequest
+			});
 		} else {
-			str = `module.exports = (${runtime.moduleExports({
+			str = `module.exports = (${runtimeTemplate.moduleExports({
 				module: sourceModule,
-				request: dep.request
+				chunkGraph,
+				request: dep.request,
+				/** @type {RuntimeRequirements} */
+				runtimeRequirements: new Set()
 			})})`;
 
-			switch (this.type) {
+			switch (this.delegationType) {
 				case "require":
 					str += `(${JSON.stringify(this.request)})`;
 					break;
@@ -80,22 +183,97 @@ class DelegatedModule extends Module {
 			str += ";";
 		}
 
-		if (this.useSourceMap) {
-			return new OriginalSource(str, this.identifier());
+		/** @type {Sources} */
+		const sources = new Map();
+		if (this.useSourceMap || this.useSimpleSourceMap) {
+			sources.set(JAVASCRIPT_TYPE, new OriginalSource(str, this.identifier()));
 		} else {
-			return new RawSource(str);
+			sources.set(JAVASCRIPT_TYPE, new RawSource(str));
 		}
+
+		return {
+			sources,
+			runtimeRequirements: RUNTIME_REQUIREMENTS
+		};
 	}
 
-	size() {
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
 		return 42;
 	}
 
-	updateHash(hash) {
-		hash.update(this.type);
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		hash.update(this.delegationType);
 		hash.update(JSON.stringify(this.request));
-		super.updateHash(hash);
+		super.updateHash(hash, context);
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		// constructor
+		write(this.sourceRequest);
+		write(this.delegateData);
+		write(this.delegationType);
+		write(this.userRequest);
+		write(this.originalRequest);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context\
+	 * @returns {DelegatedModule} DelegatedModule
+	 */
+	static deserialize(context) {
+		const { read } = context;
+		const obj = new DelegatedModule(
+			read(), // sourceRequest
+			read(), // delegateData
+			read(), // delegationType
+			read(), // userRequest
+			read() // originalRequest
+		);
+		obj.deserialize(context);
+		return obj;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Update the (cached) module with
+	 * the fresh module from the factory. Usually updates internal references
+	 * and properties.
+	 * @param {Module} module fresh module
+	 * @returns {void}
+	 */
+	updateCacheModule(module) {
+		super.updateCacheModule(module);
+		const m = /** @type {DelegatedModule} */ (module);
+		this.delegationType = m.delegationType;
+		this.userRequest = m.userRequest;
+		this.originalRequest = m.originalRequest;
+		this.delegateData = m.delegateData;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Remove internal references to allow freeing some memory.
+	 */
+	cleanupForCache() {
+		super.cleanupForCache();
+		this.delegateData =
+			/** @type {EXPECTED_ANY} */
+			(undefined);
 	}
 }
 
+makeSerializable(DelegatedModule, "webpack/lib/DelegatedModule");
+
 module.exports = DelegatedModule;
diff --git a/lib/DelegatedModuleFactoryPlugin.js b/lib/DelegatedModuleFactoryPlugin.js
index 26db0066f75..ff6df295ce0 100644
--- a/lib/DelegatedModuleFactoryPlugin.js
+++ b/lib/DelegatedModuleFactoryPlugin.js
@@ -2,32 +2,57 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const DelegatedModule = require("./DelegatedModule");
 
-// options.source
-// options.type
-// options.context
-// options.scope
-// options.content
+/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptions} DllReferencePluginOptions */
+/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptionsContent} DllReferencePluginOptionsContent */
+/** @typedef {import("./DelegatedModule").DelegatedModuleData} DelegatedModuleData */
+/** @typedef {import("./DelegatedModule").DelegatedModuleSourceRequest} DelegatedModuleSourceRequest */
+/** @typedef {import("./DelegatedModule").DelegatedModuleType} DelegatedModuleType */
+/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
+/** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
+
+/**
+ * @typedef {object} Options
+ * @property {DelegatedModuleSourceRequest} source source
+ * @property {NonNullable} context absolute context path to which lib ident is relative to
+ * @property {DllReferencePluginOptionsContent} content content
+ * @property {DllReferencePluginOptions["type"]} type type
+ * @property {DllReferencePluginOptions["extensions"]} extensions extensions
+ * @property {DllReferencePluginOptions["scope"]} scope scope
+ * @property {AssociatedObjectForCache=} associatedObjectForCache object for caching
+ */
+
+const PLUGIN_NAME = "DelegatedModuleFactoryPlugin";
+
 class DelegatedModuleFactoryPlugin {
+	/**
+	 * @param {Options} options options
+	 */
 	constructor(options) {
 		this.options = options;
 		options.type = options.type || "require";
-		options.extensions = options.extensions || ["", ".js"];
+		options.extensions = options.extensions || ["", ".js", ".json", ".wasm"];
 	}
 
+	/**
+	 * @param {NormalModuleFactory} normalModuleFactory the normal module factory
+	 * @returns {void}
+	 */
 	apply(normalModuleFactory) {
 		const scope = this.options.scope;
 		if (scope) {
-			normalModuleFactory.hooks.factory.tap(
-				"DelegatedModuleFactoryPlugin",
-				factory => (data, callback) => {
-					const dependency = data.dependencies[0];
-					const request = dependency.request;
-					if (request && request.indexOf(scope + "/") === 0) {
-						const innerRequest = "." + request.substr(scope.length);
+			normalModuleFactory.hooks.factorize.tapAsync(
+				PLUGIN_NAME,
+				(data, callback) => {
+					const [dependency] = data.dependencies;
+					const { request } = dependency;
+					if (request && request.startsWith(`${scope}/`)) {
+						const innerRequest = `.${request.slice(scope.length)}`;
+						/** @type {undefined | DelegatedModuleData} */
 						let resolved;
 						if (innerRequest in this.options.content) {
 							resolved = this.options.content[innerRequest];
@@ -36,14 +61,18 @@ class DelegatedModuleFactoryPlugin {
 								new DelegatedModule(
 									this.options.source,
 									resolved,
-									this.options.type,
+									/** @type {DelegatedModuleType} */
+									(this.options.type),
 									innerRequest,
 									request
 								)
 							);
 						}
-						for (let i = 0; i < this.options.extensions.length; i++) {
-							const extension = this.options.extensions[i];
+						const extensions =
+							/** @type {string[]} */
+							(this.options.extensions);
+						for (let i = 0; i < extensions.length; i++) {
+							const extension = extensions[i];
 							const requestPlusExt = innerRequest + extension;
 							if (requestPlusExt in this.options.content) {
 								resolved = this.options.content[requestPlusExt];
@@ -52,7 +81,8 @@ class DelegatedModuleFactoryPlugin {
 									new DelegatedModule(
 										this.options.source,
 										resolved,
-										this.options.type,
+										/** @type {DelegatedModuleType} */
+										(this.options.type),
 										requestPlusExt,
 										request + extension
 									)
@@ -60,30 +90,27 @@ class DelegatedModuleFactoryPlugin {
 							}
 						}
 					}
-					return factory(data, callback);
+					return callback();
 				}
 			);
 		} else {
-			normalModuleFactory.hooks.module.tap(
-				"DelegatedModuleFactoryPlugin",
-				module => {
-					if (module.libIdent) {
-						const request = module.libIdent(this.options);
-						if (request && request in this.options.content) {
-							const resolved = this.options.content[request];
-							return new DelegatedModule(
-								this.options.source,
-								resolved,
-								this.options.type,
-								request,
-								module
-							);
-						}
-					}
-					return module;
+			normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module) => {
+				const request = module.libIdent(this.options);
+				if (request && request in this.options.content) {
+					const resolved = this.options.content[request];
+					return new DelegatedModule(
+						this.options.source,
+						resolved,
+						/** @type {DelegatedModuleType} */
+						(this.options.type),
+						request,
+						module
+					);
 				}
-			);
+				return module;
+			});
 		}
 	}
 }
+
 module.exports = DelegatedModuleFactoryPlugin;
diff --git a/lib/DelegatedPlugin.js b/lib/DelegatedPlugin.js
index 714eb8533cd..64f3941f993 100644
--- a/lib/DelegatedPlugin.js
+++ b/lib/DelegatedPlugin.js
@@ -7,31 +7,41 @@
 
 const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
 const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
-const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
-const NullFactory = require("./NullFactory");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./DelegatedModuleFactoryPlugin").Options} Options */
+
+const PLUGIN_NAME = "DelegatedPlugin";
 
 class DelegatedPlugin {
+	/**
+	 * @param {Options} options options
+	 */
 	constructor(options) {
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"DelegatedPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
 				compilation.dependencyFactories.set(
 					DelegatedSourceDependency,
 					normalModuleFactory
 				);
-				compilation.dependencyFactories.set(
-					DelegatedExportsDependency,
-					new NullFactory()
-				);
 			}
 		);
 
-		compiler.hooks.compile.tap("DelegatedPlugin", ({ normalModuleFactory }) => {
-			new DelegatedModuleFactoryPlugin(this.options).apply(normalModuleFactory);
+		compiler.hooks.compile.tap(PLUGIN_NAME, ({ normalModuleFactory }) => {
+			new DelegatedModuleFactoryPlugin({
+				associatedObjectForCache: compiler.root,
+				...this.options
+			}).apply(normalModuleFactory);
 		});
 	}
 }
diff --git a/lib/DependenciesBlock.js b/lib/DependenciesBlock.js
index 77fe91629b0..44fce9b3c11 100644
--- a/lib/DependenciesBlock.js
+++ b/lib/DependenciesBlock.js
@@ -1,45 +1,70 @@
 /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
 "use strict";
 
-const DependenciesBlockVariable = require("./DependenciesBlockVariable");
+const makeSerializable = require("./util/makeSerializable");
 
-/** @typedef {import("./ChunkGroup")} ChunkGroup */
+/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
 /** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+
+/** @typedef {(d: Dependency) => boolean} DependencyFilterFunction */
 
+/**
+ * DependenciesBlock is the base class for all Module classes in webpack. It describes a
+ * "block" of dependencies which are pointers to other DependenciesBlock instances. For example
+ * when a Module has a CommonJs require statement, the DependencyBlock for the CommonJs module
+ * would be added as a dependency to the Module. DependenciesBlock is inherited by two types of classes:
+ * Module subclasses and AsyncDependenciesBlock subclasses. The only difference between the two is that
+ * AsyncDependenciesBlock subclasses are used for code-splitting (async boundary) and Module subclasses are not.
+ */
 class DependenciesBlock {
 	constructor() {
 		/** @type {Dependency[]} */
 		this.dependencies = [];
+		/** @type {AsyncDependenciesBlock[]} */
 		this.blocks = [];
-		this.variables = [];
-		// TODO remove this line, it's wrong
-		/** @type {ChunkGroup=} */
-		this.chunkGroup = undefined;
+		/** @type {DependenciesBlock | undefined} */
+		this.parent = undefined;
 	}
 
+	getRootBlock() {
+		/** @type {DependenciesBlock} */
+		let current = this;
+		while (current.parent) current = current.parent;
+		return current;
+	}
+
+	/**
+	 * Adds a DependencyBlock to DependencyBlock relationship.
+	 * This is used for when a Module has a AsyncDependencyBlock tie (for code-splitting)
+	 * @param {AsyncDependenciesBlock} block block being added
+	 * @returns {void}
+	 */
 	addBlock(block) {
 		this.blocks.push(block);
 		block.parent = this;
 	}
 
-	addVariable(name, expression, dependencies) {
-		for (let v of this.variables) {
-			if (v.name === name && v.expression === expression) {
-				return;
-			}
-		}
-		this.variables.push(
-			new DependenciesBlockVariable(name, expression, dependencies)
-		);
-	}
-
+	/**
+	 * @param {Dependency} dependency dependency being tied to block.
+	 * This is an "edge" pointing to another "node" on module graph.
+	 * @returns {void}
+	 */
 	addDependency(dependency) {
 		this.dependencies.push(dependency);
 	}
 
+	/**
+	 * @param {Dependency} dependency dependency being removed
+	 * @returns {void}
+	 */
 	removeDependency(dependency) {
 		const idx = this.dependencies.indexOf(dependency);
 		if (idx >= 0) {
@@ -47,45 +72,49 @@ class DependenciesBlock {
 		}
 	}
 
-	updateHash(hash) {
-		for (const dep of this.dependencies) dep.updateHash(hash);
-		for (const block of this.blocks) block.updateHash(hash);
-		for (const variable of this.variables) variable.updateHash(hash);
+	/**
+	 * Removes all dependencies and blocks
+	 * @returns {void}
+	 */
+	clearDependenciesAndBlocks() {
+		this.dependencies.length = 0;
+		this.blocks.length = 0;
 	}
 
-	disconnect() {
-		for (const dep of this.dependencies) dep.disconnect();
-		for (const block of this.blocks) block.disconnect();
-		for (const variable of this.variables) variable.disconnect();
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		for (const dep of this.dependencies) {
+			dep.updateHash(hash, context);
+		}
+		for (const block of this.blocks) {
+			block.updateHash(hash, context);
+		}
 	}
 
-	unseal() {
-		for (const block of this.blocks) block.unseal();
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write }) {
+		write(this.dependencies);
+		write(this.blocks);
 	}
 
-	hasDependencies(filter) {
-		if (filter) {
-			for (const dep of this.dependencies) {
-				if (filter(dep)) return true;
-			}
-		} else {
-			if (this.dependencies.length > 0) {
-				return true;
-			}
-		}
-
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize({ read }) {
+		this.dependencies = read();
+		this.blocks = read();
 		for (const block of this.blocks) {
-			if (block.hasDependencies(filter)) return true;
+			block.parent = this;
 		}
-		for (const variable of this.variables) {
-			if (variable.hasDependencies(filter)) return true;
-		}
-		return false;
-	}
-
-	sortItems() {
-		for (const block of this.blocks) block.sortItems();
 	}
 }
 
+makeSerializable(DependenciesBlock, "webpack/lib/DependenciesBlock");
+
 module.exports = DependenciesBlock;
diff --git a/lib/DependenciesBlockVariable.js b/lib/DependenciesBlockVariable.js
deleted file mode 100644
index 7f7416271aa..00000000000
--- a/lib/DependenciesBlockVariable.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { RawSource, ReplaceSource } = require("webpack-sources");
-
-class DependenciesBlockVariable {
-	constructor(name, expression, dependencies) {
-		this.name = name;
-		this.expression = expression;
-		this.dependencies = dependencies || [];
-	}
-
-	updateHash(hash) {
-		hash.update(this.name);
-		hash.update(this.expression);
-		for (const d of this.dependencies) {
-			d.updateHash(hash);
-		}
-	}
-
-	expressionSource(dependencyTemplates, runtimeTemplate) {
-		const source = new ReplaceSource(new RawSource(this.expression));
-		for (const dep of this.dependencies) {
-			const template = dependencyTemplates.get(dep.constructor);
-			if (!template) {
-				throw new Error(`No template for dependency: ${dep.constructor.name}`);
-			}
-			template.apply(dep, source, runtimeTemplate, dependencyTemplates);
-		}
-		return source;
-	}
-
-	disconnect() {
-		for (const d of this.dependencies) {
-			d.disconnect();
-		}
-	}
-
-	hasDependencies(filter) {
-		if (filter) {
-			if (this.dependencies.some(filter)) return true;
-		} else {
-			if (this.dependencies.length > 0) return true;
-		}
-		return false;
-	}
-}
-
-module.exports = DependenciesBlockVariable;
diff --git a/lib/Dependency.js b/lib/Dependency.js
index 6995c798b19..75f83886876 100644
--- a/lib/Dependency.js
+++ b/lib/Dependency.js
@@ -2,61 +2,389 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const compareLocations = require("./compareLocations");
-const DependencyReference = require("./dependencies/DependencyReference");
+const memoize = require("./util/memoize");
+
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
+/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("./WebpackError")} WebpackError */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+/** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
+/**
+ * @typedef {object} UpdateHashContext
+ * @property {ChunkGraph} chunkGraph
+ * @property {RuntimeSpec} runtime
+ * @property {RuntimeTemplate=} runtimeTemplate
+ */
+
+/**
+ * @typedef {object} SourcePosition
+ * @property {number} line
+ * @property {number=} column
+ */
+
+/**
+ * @typedef {object} RealDependencyLocation
+ * @property {SourcePosition} start
+ * @property {SourcePosition=} end
+ * @property {number=} index
+ */
+
+/**
+ * @typedef {object} SyntheticDependencyLocation
+ * @property {string} name
+ * @property {number=} index
+ */
+
+/** @typedef {SyntheticDependencyLocation | RealDependencyLocation} DependencyLocation */
+
+/** @typedef {string} ExportInfoName */
+
+/**
+ * @typedef {object} ExportSpec
+ * @property {ExportInfoName} name the name of the export
+ * @property {boolean=} canMangle can the export be renamed (defaults to true)
+ * @property {boolean=} terminalBinding is the export a terminal binding that should be checked for export star conflicts
+ * @property {(string | ExportSpec)[]=} exports nested exports
+ * @property {ModuleGraphConnection=} from when reexported: from which module
+ * @property {string[] | null=} export when reexported: from which export
+ * @property {number=} priority when reexported: with which priority
+ * @property {boolean=} hidden export is not visible, because another export blends over it
+ */
+
+/** @typedef {Set} ExportsSpecExcludeExports */
 
-/** @typedef {Object} Position
- *  @property {number} column
- *  @property {number} line
+/**
+ * @typedef {object} ExportsSpec
+ * @property {(string | ExportSpec)[] | true | null} exports exported names, true for unknown exports or null for no exports
+ * @property {ExportsSpecExcludeExports=} excludeExports when exports = true, list of unaffected exports
+ * @property {(Set | null)=} hideExports list of maybe prior exposed, but now hidden exports
+ * @property {ModuleGraphConnection=} from when reexported: from which module
+ * @property {number=} priority when reexported: with which priority
+ * @property {boolean=} canMangle can the export be renamed (defaults to true)
+ * @property {boolean=} terminalBinding are the exports terminal bindings that should be checked for export star conflicts
+ * @property {Module[]=} dependencies module on which the result depends on
  */
 
-/** @typedef {Object} Loc
- *  @property {Position} start
- *  @property {Position} end
+/**
+ * @typedef {object} ReferencedExport
+ * @property {string[]} name name of the referenced export
+ * @property {boolean=} canMangle when false, referenced export can not be mangled, defaults to true
  */
 
+/** @typedef {string[][]} RawReferencedExports */
+/** @typedef {(string[] | ReferencedExport)[]} ReferencedExports */
+
+/** @typedef {(moduleGraphConnection: ModuleGraphConnection, runtime: RuntimeSpec) => ConnectionState} GetConditionFn */
+
+const TRANSITIVE = /** @type {symbol} */ (Symbol("transitive"));
+
+const getIgnoredModule = memoize(() => {
+	const RawModule = require("./RawModule");
+
+	const module = new RawModule("/* (ignored) */", "ignored", "(ignored)");
+	module.factoryMeta = { sideEffectFree: true };
+	return module;
+});
+
 class Dependency {
 	constructor() {
-		this.module = null;
-		// TODO remove in webpack 5
+		/** @type {Module | undefined} */
+		this._parentModule = undefined;
+		/** @type {DependenciesBlock | undefined} */
+		this._parentDependenciesBlock = undefined;
+		/** @type {number} */
+		this._parentDependenciesBlockIndex = -1;
+		// TODO check if this can be moved into ModuleDependency
+		/** @type {boolean} */
 		this.weak = false;
+		// TODO check if this can be moved into ModuleDependency
+		/** @type {boolean | undefined} */
 		this.optional = false;
-		this.loc = undefined;
+		this._locSL = 0;
+		this._locSC = 0;
+		this._locEL = 0;
+		this._locEC = 0;
+		/** @type {undefined | number} */
+		this._locI = undefined;
+		/** @type {undefined | string} */
+		this._locN = undefined;
+		/** @type {undefined | DependencyLocation} */
+		this._loc = undefined;
+	}
+
+	/**
+	 * @returns {string} a display name for the type of dependency
+	 */
+	get type() {
+		return "unknown";
+	}
+
+	/**
+	 * @returns {string} a dependency category, typical categories are "commonjs", "amd", "esm"
+	 */
+	get category() {
+		return "unknown";
+	}
+
+	/**
+	 * @returns {DependencyLocation} location
+	 */
+	get loc() {
+		if (this._loc !== undefined) return this._loc;
+
+		/** @type {SyntheticDependencyLocation & RealDependencyLocation} */
+		const loc = {};
+
+		if (this._locSL > 0) {
+			loc.start = { line: this._locSL, column: this._locSC };
+		}
+		if (this._locEL > 0) {
+			loc.end = { line: this._locEL, column: this._locEC };
+		}
+		if (this._locN !== undefined) {
+			loc.name = this._locN;
+		}
+		if (this._locI !== undefined) {
+			loc.index = this._locI;
+		}
+
+		return (this._loc = loc);
 	}
 
+	set loc(loc) {
+		if ("start" in loc && typeof loc.start === "object") {
+			this._locSL = loc.start.line || 0;
+			this._locSC = loc.start.column || 0;
+		} else {
+			this._locSL = 0;
+			this._locSC = 0;
+		}
+		if ("end" in loc && typeof loc.end === "object") {
+			this._locEL = loc.end.line || 0;
+			this._locEC = loc.end.column || 0;
+		} else {
+			this._locEL = 0;
+			this._locEC = 0;
+		}
+		this._locI = "index" in loc ? loc.index : undefined;
+		this._locN = "name" in loc ? loc.name : undefined;
+		this._loc = loc;
+	}
+
+	/**
+	 * @param {number} startLine start line
+	 * @param {number} startColumn start column
+	 * @param {number} endLine end line
+	 * @param {number} endColumn end column
+	 */
+	setLoc(startLine, startColumn, endLine, endColumn) {
+		this._locSL = startLine;
+		this._locSC = startColumn;
+		this._locEL = endLine;
+		this._locEC = endColumn;
+		this._locI = undefined;
+		this._locN = undefined;
+		this._loc = undefined;
+	}
+
+	/**
+	 * @returns {string | undefined} a request context
+	 */
+	getContext() {
+		return undefined;
+	}
+
+	/**
+	 * @returns {string | null} an identifier to merge equal requests
+	 */
 	getResourceIdentifier() {
 		return null;
 	}
 
-	// Returns the referenced module and export
-	getReference() {
-		if (!this.module) return null;
-		return new DependencyReference(this.module, true, this.weak);
+	/**
+	 * @returns {boolean | TRANSITIVE} true, when changes to the referenced module could affect the referencing module; TRANSITIVE, when changes to the referenced module could affect referencing modules of the referencing module
+	 */
+	couldAffectReferencingModule() {
+		return TRANSITIVE;
+	}
+
+	/**
+	 * Returns the referenced module and export
+	 * @deprecated
+	 * @param {ModuleGraph} moduleGraph module graph
+	 * @returns {never} throws error
+	 */
+	getReference(moduleGraph) {
+		throw new Error(
+			"Dependency.getReference was removed in favor of Dependency.getReferencedExports, ModuleGraph.getModule, ModuleGraph.getConnection(), and ModuleGraphConnection.getActiveState(runtime)"
+		);
+	}
+
+	/**
+	 * Returns list of exports referenced by this dependency
+	 * @param {ModuleGraph} moduleGraph module graph
+	 * @param {RuntimeSpec} runtime the runtime for which the module is analysed
+	 * @returns {ReferencedExports} referenced exports
+	 */
+	getReferencedExports(moduleGraph, runtime) {
+		return Dependency.EXPORTS_OBJECT_REFERENCED;
 	}
 
-	// Returns the exported names
-	getExports() {
+	/**
+	 * @param {ModuleGraph} moduleGraph module graph
+	 * @returns {null | false | GetConditionFn} function to determine if the connection is active
+	 */
+	getCondition(moduleGraph) {
 		return null;
 	}
 
-	getWarnings() {
+	/**
+	 * Returns the exported names
+	 * @param {ModuleGraph} moduleGraph module graph
+	 * @returns {ExportsSpec | undefined} export names
+	 */
+	getExports(moduleGraph) {
+		return undefined;
+	}
+
+	/**
+	 * Returns warnings
+	 * @param {ModuleGraph} moduleGraph module graph
+	 * @returns {WebpackError[] | null | undefined} warnings
+	 */
+	getWarnings(moduleGraph) {
 		return null;
 	}
 
-	getErrors() {
+	/**
+	 * Returns errors
+	 * @param {ModuleGraph} moduleGraph module graph
+	 * @returns {WebpackError[] | null | undefined} errors
+	 */
+	getErrors(moduleGraph) {
 		return null;
 	}
 
-	updateHash(hash) {
-		hash.update((this.module && this.module.id) + "");
+	/**
+	 * Update the hash
+	 * @param {Hash} hash hash to be updated
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {}
+
+	/**
+	 * implement this method to allow the occurrence order plugin to count correctly
+	 * @returns {number} count how often the id is used in this dependency
+	 */
+	getNumberOfIdOccurrences() {
+		return 1;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @returns {ConnectionState} how this dependency connects the module to referencing modules
+	 */
+	getModuleEvaluationSideEffectsState(moduleGraph) {
+		return true;
+	}
+
+	/**
+	 * @param {string} context context directory
+	 * @returns {Module} ignored module
+	 */
+	createIgnoredModule(context) {
+		return getIgnoredModule();
 	}
 
-	disconnect() {
-		this.module = null;
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write }) {
+		write(this.weak);
+		write(this.optional);
+		write(this._locSL);
+		write(this._locSC);
+		write(this._locEL);
+		write(this._locEC);
+		write(this._locI);
+		write(this._locN);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize({ read }) {
+		this.weak = read();
+		this.optional = read();
+		this._locSL = read();
+		this._locSC = read();
+		this._locEL = read();
+		this._locEC = read();
+		this._locI = read();
+		this._locN = read();
 	}
 }
-Dependency.compare = (a, b) => compareLocations(a.loc, b.loc);
+
+/** @type {RawReferencedExports} */
+Dependency.NO_EXPORTS_REFERENCED = [];
+/** @type {RawReferencedExports} */
+Dependency.EXPORTS_OBJECT_REFERENCED = [[]];
+
+// TODO remove in webpack 6
+Object.defineProperty(Dependency.prototype, "module", {
+	/**
+	 * @deprecated
+	 * @returns {EXPECTED_ANY} throws
+	 */
+	get() {
+		throw new Error(
+			"module property was removed from Dependency (use compilation.moduleGraph.getModule(dependency) instead)"
+		);
+	},
+
+	/**
+	 * @deprecated
+	 * @returns {never} throws
+	 */
+	set() {
+		throw new Error(
+			"module property was removed from Dependency (use compilation.moduleGraph.updateModule(dependency, module) instead)"
+		);
+	}
+});
+
+/**
+ * @param {Dependency} dependency dep
+ * @returns {boolean} true if the dependency is a low priority dependency
+ */
+Dependency.isLowPriorityDependency = (dependency) =>
+	/** @type {ModuleDependency} */ (dependency).sourceOrder === Infinity;
+
+// TODO remove in webpack 6
+Object.defineProperty(Dependency.prototype, "disconnect", {
+	/**
+	 * @deprecated
+	 * @returns {EXPECTED_ANY} throws
+	 */
+	get() {
+		throw new Error(
+			"disconnect was removed from Dependency (Dependency no longer carries graph specific information)"
+		);
+	}
+});
+
+Dependency.TRANSITIVE = TRANSITIVE;
 
 module.exports = Dependency;
diff --git a/lib/DependencyTemplate.js b/lib/DependencyTemplate.js
new file mode 100644
index 00000000000..049eed2305a
--- /dev/null
+++ b/lib/DependencyTemplate.js
@@ -0,0 +1,71 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
+/** @typedef {import("./ConcatenationScope")} ConcatenationScope */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").RuntimeSpec} RuntimeSpec */
+/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
+/** @typedef {import("./Generator").GenerateContext} GenerateContext */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+
+/**
+ * @template T
+ * @typedef {import("./InitFragment")} InitFragment
+ */
+
+/**
+ * @typedef {object} DependencyTemplateContext
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
+ * @property {DependencyTemplates} dependencyTemplates the dependency templates
+ * @property {ModuleGraph} moduleGraph the module graph
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ * @property {RuntimeRequirements} runtimeRequirements the requirements for runtime
+ * @property {Module} module current module
+ * @property {RuntimeSpec} runtime current runtimes, for which code is generated
+ * @property {InitFragment[]} initFragments mutable array of init fragments for the current module
+ * @property {ConcatenationScope=} concatenationScope when in a concatenated module, information about other concatenated modules
+ * @property {CodeGenerationResults} codeGenerationResults the code generation results
+ * @property {InitFragment[]} chunkInitFragments chunkInitFragments
+ */
+
+/**
+ * @typedef {object} CssDependencyTemplateContextExtras
+ * @property {CssData} cssData the css exports data
+ * @property {string} type the css exports data
+ */
+
+/**
+ * @typedef {object} CssData
+ * @property {boolean} esModule whether export __esModule
+ * @property {Map} exports the css exports
+ */
+
+/** @typedef {DependencyTemplateContext & CssDependencyTemplateContextExtras} CssDependencyTemplateContext */
+
+class DependencyTemplate {
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {Dependency} dependency the dependency for which the template should be applied
+	 * @param {ReplaceSource} source the current replace source which can be modified
+	 * @param {DependencyTemplateContext} templateContext the context object
+	 * @returns {void}
+	 */
+	apply(dependency, source, templateContext) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+}
+
+module.exports = DependencyTemplate;
diff --git a/lib/DependencyTemplates.js b/lib/DependencyTemplates.js
new file mode 100644
index 00000000000..c66a1f69e0f
--- /dev/null
+++ b/lib/DependencyTemplates.js
@@ -0,0 +1,67 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { DEFAULTS } = require("./config/defaults");
+const createHash = require("./util/createHash");
+
+/** @typedef {import("./Compilation").DependencyConstructor} DependencyConstructor */
+/** @typedef {import("./DependencyTemplate")} DependencyTemplate */
+/** @typedef {import("./util/Hash").HashFunction} HashFunction */
+
+class DependencyTemplates {
+	/**
+	 * @param {HashFunction} hashFunction the hash function to use
+	 */
+	constructor(hashFunction = DEFAULTS.HASH_FUNCTION) {
+		/** @type {Map} */
+		this._map = new Map();
+		/** @type {string} */
+		this._hash = "31d6cfe0d16ae931b73c59d7e0c089c0";
+		/** @type {HashFunction} */
+		this._hashFunction = hashFunction;
+	}
+
+	/**
+	 * @param {DependencyConstructor} dependency Constructor of Dependency
+	 * @returns {DependencyTemplate | undefined} template for this dependency
+	 */
+	get(dependency) {
+		return this._map.get(dependency);
+	}
+
+	/**
+	 * @param {DependencyConstructor} dependency Constructor of Dependency
+	 * @param {DependencyTemplate} dependencyTemplate template for this dependency
+	 * @returns {void}
+	 */
+	set(dependency, dependencyTemplate) {
+		this._map.set(dependency, dependencyTemplate);
+	}
+
+	/**
+	 * @param {string} part additional hash contributor
+	 * @returns {void}
+	 */
+	updateHash(part) {
+		const hash = createHash(this._hashFunction);
+		hash.update(`${this._hash}${part}`);
+		this._hash = hash.digest("hex");
+	}
+
+	getHash() {
+		return this._hash;
+	}
+
+	clone() {
+		const newInstance = new DependencyTemplates(this._hashFunction);
+		newInstance._map = new Map(this._map);
+		newInstance._hash = this._hash;
+		return newInstance;
+	}
+}
+
+module.exports = DependencyTemplates;
diff --git a/lib/DllEntryPlugin.js b/lib/DllEntryPlugin.js
index dbb1a40b3ab..a63946cf96b 100644
--- a/lib/DllEntryPlugin.js
+++ b/lib/DllEntryPlugin.js
@@ -2,22 +2,41 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const DllEntryDependency = require("./dependencies/DllEntryDependency");
-const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
 const DllModuleFactory = require("./DllModuleFactory");
+const DllEntryDependency = require("./dependencies/DllEntryDependency");
+const EntryDependency = require("./dependencies/EntryDependency");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
+
+/** @typedef {string[]} Entries */
+/** @typedef {EntryOptions & { name: string }} Options */
+
+const PLUGIN_NAME = "DllEntryPlugin";
 
 class DllEntryPlugin {
-	constructor(context, entries, name) {
+	/**
+	 * @param {string} context context
+	 * @param {Entries} entries entry names
+	 * @param {Options} options options
+	 */
+	constructor(context, entries, options) {
 		this.context = context;
 		this.entries = entries;
-		this.name = name;
+		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"DllEntryPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
 				const dllModuleFactory = new DllModuleFactory();
 				compilation.dependencyFactories.set(
@@ -25,24 +44,30 @@ class DllEntryPlugin {
 					dllModuleFactory
 				);
 				compilation.dependencyFactories.set(
-					SingleEntryDependency,
+					EntryDependency,
 					normalModuleFactory
 				);
 			}
 		);
-		compiler.hooks.make.tapAsync("DllEntryPlugin", (compilation, callback) => {
+		compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
 			compilation.addEntry(
 				this.context,
 				new DllEntryDependency(
 					this.entries.map((e, idx) => {
-						const dep = new SingleEntryDependency(e);
-						dep.loc = `${this.name}:${idx}`;
+						const dep = new EntryDependency(e);
+						dep.loc = {
+							name: this.options.name,
+							index: idx
+						};
 						return dep;
 					}),
-					this.name
+					this.options.name
 				),
-				this.name,
-				callback
+				this.options,
+				(error) => {
+					if (error) return callback(error);
+					callback();
+				}
 			);
 		});
 	}
diff --git a/lib/DllModule.js b/lib/DllModule.js
index c0a45d731ea..46e9c1a111e 100644
--- a/lib/DllModule.js
+++ b/lib/DllModule.js
@@ -1,54 +1,175 @@
 /*
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
-	*/
+*/
+
 "use strict";
 
 const { RawSource } = require("webpack-sources");
 const Module = require("./Module");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./Generator").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+
+const RUNTIME_REQUIREMENTS = new Set([
+	RuntimeGlobals.require,
+	RuntimeGlobals.module
+]);
 
 class DllModule extends Module {
-	constructor(context, dependencies, name, type) {
-		super("javascript/dynamic", context);
+	/**
+	 * @param {string} context context path
+	 * @param {Dependency[]} dependencies dependencies
+	 * @param {string} name name
+	 */
+	constructor(context, dependencies, name) {
+		super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, context);
 
 		// Info from Factory
+		/** @type {Dependency[]} */
 		this.dependencies = dependencies;
 		this.name = name;
-		this.type = type;
 	}
 
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
 	identifier() {
 		return `dll ${this.name}`;
 	}
 
-	readableIdentifier() {
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
 		return `dll ${this.name}`;
 	}
 
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
 	build(options, compilation, resolver, fs, callback) {
-		this.built = true;
 		this.buildMeta = {};
 		this.buildInfo = {};
 		return callback();
 	}
 
-	source() {
-		return new RawSource("module.exports = __webpack_require__;");
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration(context) {
+		/** @type {Sources} */
+		const sources = new Map();
+		sources.set(
+			JAVASCRIPT_TYPE,
+			new RawSource(`module.exports = ${RuntimeGlobals.require};`)
+		);
+		return {
+			sources,
+			runtimeRequirements: RUNTIME_REQUIREMENTS
+		};
 	}
 
-	needRebuild() {
-		return false;
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, !this.buildMeta);
 	}
 
-	size() {
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
 		return 12;
 	}
 
-	updateHash(hash) {
-		hash.update("dll module");
-		hash.update(this.name || "");
-		super.updateHash(hash);
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		hash.update(`dll module${this.name || ""}`);
+		super.updateHash(hash, context);
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		context.write(this.name);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		this.name = context.read();
+		super.deserialize(context);
+	}
+
+	/**
+	 * Assuming this module is in the cache. Update the (cached) module with
+	 * the fresh module from the factory. Usually updates internal references
+	 * and properties.
+	 * @param {Module} module fresh module
+	 * @returns {void}
+	 */
+	updateCacheModule(module) {
+		super.updateCacheModule(module);
+		this.dependencies = module.dependencies;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Remove internal references to allow freeing some memory.
+	 */
+	cleanupForCache() {
+		super.cleanupForCache();
+		this.dependencies = /** @type {EXPECTED_ANY} */ (undefined);
 	}
 }
 
+makeSerializable(DllModule, "webpack/lib/DllModule");
+
 module.exports = DllModule;
diff --git a/lib/DllModuleFactory.js b/lib/DllModuleFactory.js
index f5d12ddc4be..41aa1610726 100644
--- a/lib/DllModuleFactory.js
+++ b/lib/DllModuleFactory.js
@@ -2,27 +2,36 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const { Tapable } = require("tapable");
 const DllModule = require("./DllModule");
+const ModuleFactory = require("./ModuleFactory");
+
+/** @typedef {import("./ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./dependencies/DllEntryDependency")} DllEntryDependency */
 
-class DllModuleFactory extends Tapable {
+class DllModuleFactory extends ModuleFactory {
 	constructor() {
 		super();
-		this.hooks = {};
+		this.hooks = Object.freeze({});
 	}
+
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
 	create(data, callback) {
-		const dependency = data.dependencies[0];
-		callback(
-			null,
-			new DllModule(
+		const dependency = /** @type {DllEntryDependency} */ (data.dependencies[0]);
+		callback(null, {
+			module: new DllModule(
 				data.context,
 				dependency.dependencies,
-				dependency.name,
-				dependency.type
+				dependency.name
 			)
-		);
+		});
 	}
 }
 
diff --git a/lib/DllPlugin.js b/lib/DllPlugin.js
index 5542833719b..01b1c68535d 100644
--- a/lib/DllPlugin.js
+++ b/lib/DllPlugin.js
@@ -1,42 +1,71 @@
 /*
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
-	*/
+*/
+
 "use strict";
 
 const DllEntryPlugin = require("./DllEntryPlugin");
+const FlagAllModulesAsUsedPlugin = require("./FlagAllModulesAsUsedPlugin");
 const LibManifestPlugin = require("./LibManifestPlugin");
-const FlagInitialModulesAsUsedPlugin = require("./FlagInitialModulesAsUsedPlugin");
 
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/DllPlugin.json");
+/** @typedef {import("../declarations/plugins/DllPlugin").DllPluginOptions} DllPluginOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./DllEntryPlugin").Entries} Entries */
+/** @typedef {import("./DllEntryPlugin").Options} Options */
+
+const PLUGIN_NAME = "DllPlugin";
 
 class DllPlugin {
+	/**
+	 * @param {DllPluginOptions} options options object
+	 */
 	constructor(options) {
-		validateOptions(schema, options, "Dll Plugin");
+		/** @type {DllPluginOptions} */
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.entryOption.tap("DllPlugin", (context, entry) => {
-			const itemToPlugin = (item, name) => {
-				if (Array.isArray(item)) {
-					return new DllEntryPlugin(context, item, name);
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/DllPlugin.json"),
+				this.options,
+				{
+					name: "Dll Plugin",
+					baseDataPath: "options"
+				},
+				(options) => require("../schemas/plugins/DllPlugin.check")(options)
+			);
+		});
+
+		const entryOnly = this.options.entryOnly !== false;
+		compiler.hooks.entryOption.tap(PLUGIN_NAME, (context, entry) => {
+			if (typeof entry !== "function") {
+				for (const name of Object.keys(entry)) {
+					/** @type {Options} */
+					const options = { name };
+					new DllEntryPlugin(
+						context,
+						/** @type {Entries} */
+						(entry[name].import),
+						options
+					).apply(compiler);
 				}
-				throw new Error("DllPlugin: supply an Array as entry");
-			};
-			if (typeof entry === "object" && !Array.isArray(entry)) {
-				Object.keys(entry).forEach(name => {
-					itemToPlugin(entry[name], name).apply(compiler);
-				});
 			} else {
-				itemToPlugin(entry, "main").apply(compiler);
+				throw new Error(
+					`${PLUGIN_NAME} doesn't support dynamic entry (function) yet`
+				);
 			}
 			return true;
 		});
-		new LibManifestPlugin(this.options).apply(compiler);
-		if (!this.options.entryOnly) {
-			new FlagInitialModulesAsUsedPlugin("DllPlugin").apply(compiler);
+		new LibManifestPlugin({ ...this.options, entryOnly }).apply(compiler);
+		if (!entryOnly) {
+			new FlagAllModulesAsUsedPlugin(PLUGIN_NAME).apply(compiler);
 		}
 	}
 }
diff --git a/lib/DllReferencePlugin.js b/lib/DllReferencePlugin.js
index b8cf3013be3..15eaffe722a 100644
--- a/lib/DllReferencePlugin.js
+++ b/lib/DllReferencePlugin.js
@@ -2,82 +2,189 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const parseJson = require("json-parse-better-errors");
-const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
+const parseJson = require("json-parse-even-better-errors");
 const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
 const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
-const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency");
-const NullFactory = require("./NullFactory");
+const WebpackError = require("./WebpackError");
+const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
+const makePathsRelative = require("./util/identifier").makePathsRelative;
+
+/** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
+/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptions} DllReferencePluginOptions */
+/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptionsContent} DllReferencePluginOptionsContent */
+/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptionsManifest} DllReferencePluginOptionsManifest */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Compiler").CompilationParams} CompilationParams */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
 
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/DllReferencePlugin.json");
+/** @typedef {{ path: string, data: DllReferencePluginOptionsManifest | undefined, error: Error | undefined }} CompilationDataItem */
+
+const PLUGIN_NAME = "DllReferencePlugin";
 
 class DllReferencePlugin {
+	/**
+	 * @param {DllReferencePluginOptions} options options object
+	 */
 	constructor(options) {
-		validateOptions(schema, options, "Dll Reference Plugin");
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/DllReferencePlugin.json"),
+				this.options,
+				{
+					name: "Dll Reference Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../schemas/plugins/DllReferencePlugin.check")(options)
+			);
+		});
 		compiler.hooks.compilation.tap(
-			"DllReferencePlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
 				compilation.dependencyFactories.set(
 					DelegatedSourceDependency,
 					normalModuleFactory
 				);
-				compilation.dependencyFactories.set(
-					DelegatedExportsDependency,
-					new NullFactory()
-				);
 			}
 		);
 
-		compiler.hooks.beforeCompile.tapAsync(
-			"DllReferencePlugin",
-			(params, callback) => {
+		/** @type {WeakMap} */
+		const compilationData = new WeakMap();
+
+		compiler.hooks.beforeCompile.tapAsync(PLUGIN_NAME, (params, callback) => {
+			if ("manifest" in this.options) {
 				const manifest = this.options.manifest;
 				if (typeof manifest === "string") {
-					params.compilationDependencies.add(manifest);
-					compiler.inputFileSystem.readFile(manifest, (err, result) => {
+					/** @type {InputFileSystem} */
+					(compiler.inputFileSystem).readFile(manifest, (err, result) => {
 						if (err) return callback(err);
-						params["dll reference " + manifest] = parseJson(
-							result.toString("utf-8")
-						);
+						/** @type {CompilationDataItem} */
+						const data = {
+							path: manifest,
+							data: undefined,
+							error: undefined
+						};
+						// Catch errors parsing the manifest so that blank
+						// or malformed manifest files don't kill the process.
+						try {
+							data.data = parseJson(
+								/** @type {Buffer} */ (result).toString("utf8")
+							);
+						} catch (parseErr) {
+							// Store the error in the params so that it can
+							// be added as a compilation error later on.
+							const manifestPath = makePathsRelative(
+								compiler.context,
+								manifest,
+								compiler.root
+							);
+							data.error = new DllManifestError(
+								manifestPath,
+								/** @type {Error} */ (parseErr).message
+							);
+						}
+						compilationData.set(params, data);
 						return callback();
 					});
-				} else {
-					return callback();
+					return;
 				}
 			}
-		);
+			return callback();
+		});
 
-		compiler.hooks.compile.tap("DllReferencePlugin", params => {
-			let manifest = this.options.manifest;
-			if (typeof manifest === "string") {
-				manifest = params["dll reference " + manifest];
+		compiler.hooks.compile.tap(PLUGIN_NAME, (params) => {
+			let name = this.options.name;
+			let sourceType = this.options.sourceType;
+			let resolvedContent =
+				"content" in this.options ? this.options.content : undefined;
+			if ("manifest" in this.options) {
+				const manifestParameter = this.options.manifest;
+				/** @type {undefined | DllReferencePluginOptionsManifest} */
+				let manifest;
+				if (typeof manifestParameter === "string") {
+					const data =
+						/** @type {CompilationDataItem} */
+						(compilationData.get(params));
+					// If there was an error parsing the manifest
+					// file, exit now because the error will be added
+					// as a compilation error in the "compilation" hook.
+					if (data.error) {
+						return;
+					}
+					manifest = data.data;
+				} else {
+					manifest = manifestParameter;
+				}
+				if (manifest) {
+					if (!name) name = manifest.name;
+					if (!sourceType) sourceType = manifest.type;
+					if (!resolvedContent) resolvedContent = manifest.content;
+				}
 			}
-			const name = this.options.name || manifest.name;
-			const sourceType =
-				this.options.sourceType || (manifest && manifest.type) || "var";
+			/** @type {Externals} */
 			const externals = {};
-			const source = "dll-reference " + name;
-			externals[source] = name;
+			const source = `dll-reference ${name}`;
+			externals[source] = /** @type {string} */ (name);
 			const normalModuleFactory = params.normalModuleFactory;
-			new ExternalModuleFactoryPlugin(sourceType, externals).apply(
+			new ExternalModuleFactoryPlugin(sourceType || "var", externals).apply(
 				normalModuleFactory
 			);
 			new DelegatedModuleFactoryPlugin({
-				source: source,
+				source,
 				type: this.options.type,
 				scope: this.options.scope,
-				context: this.options.context || compiler.options.context,
-				content: this.options.content || manifest.content,
-				extensions: this.options.extensions
+				context: this.options.context || compiler.context,
+				content:
+					/** @type {DllReferencePluginOptionsContent} */
+					(resolvedContent),
+				extensions: this.options.extensions,
+				associatedObjectForCache: compiler.root
 			}).apply(normalModuleFactory);
 		});
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation, params) => {
+			if ("manifest" in this.options) {
+				const manifest = this.options.manifest;
+				if (typeof manifest === "string") {
+					const data =
+						/** @type {CompilationDataItem} */
+						(compilationData.get(params));
+					// If there was an error parsing the manifest file, add the
+					// error as a compilation error to make the compilation fail.
+					if (data.error) {
+						compilation.errors.push(
+							/** @type {DllManifestError} */ (data.error)
+						);
+					}
+					compilation.fileDependencies.add(manifest);
+				}
+			}
+		});
+	}
+}
+
+class DllManifestError extends WebpackError {
+	/**
+	 * @param {string} filename filename of the manifest
+	 * @param {string} message error message
+	 */
+	constructor(filename, message) {
+		super();
+
+		this.name = "DllManifestError";
+		this.message = `Dll manifest ${filename}\n${message}`;
 	}
 }
 
diff --git a/lib/DotenvPlugin.js b/lib/DotenvPlugin.js
new file mode 100644
index 00000000000..82d1d99de90
--- /dev/null
+++ b/lib/DotenvPlugin.js
@@ -0,0 +1,470 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Natsu @xiaoxiaojx
+*/
+
+"use strict";
+
+const FileSystemInfo = require("./FileSystemInfo");
+const { join } = require("./util/fs");
+
+/** @typedef {import("../declarations/WebpackOptions").DotenvPluginOptions} DotenvPluginOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./CacheFacade").ItemCacheFacade} ItemCacheFacade */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */
+
+/** @typedef {Exclude} Prefix */
+/** @typedef {Record} Env */
+
+const DEFAULT_TEMPLATE = [
+	".env",
+	".env.local",
+	".env.[mode]",
+	".env.[mode].local"
+];
+
+// Regex for parsing .env files
+// ported from https://github.com/motdotla/dotenv/blob/master/lib/main.js#L49
+const LINE =
+	/^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;
+
+const PLUGIN_NAME = "DotenvPlugin";
+
+/**
+ * Parse .env file content
+ * ported from https://github.com/motdotla/dotenv/blob/master/lib/main.js#L49
+ * @param {string | Buffer} src the source content to parse
+ * @returns {Env} parsed environment variables object
+ */
+function parse(src) {
+	const obj = /** @type {Env} */ (Object.create(null));
+
+	// Convert buffer to string
+	let lines = src.toString();
+
+	// Convert line breaks to same format
+	lines = lines.replace(/\r\n?/g, "\n");
+
+	/** @type {null | RegExpExecArray} */
+	let match;
+
+	while ((match = LINE.exec(lines)) !== null) {
+		const key = match[1];
+
+		// Default undefined or null to empty string
+		let value = match[2] || "";
+
+		// Remove whitespace
+		value = value.trim();
+
+		// Check if double quoted
+		const maybeQuote = value[0];
+
+		// Remove surrounding quotes
+		value = value.replace(/^(['"`])([\s\S]*)\1$/gm, "$2");
+
+		// Expand newlines if double quoted
+		if (maybeQuote === '"') {
+			value = value.replace(/\\n/g, "\n");
+			value = value.replace(/\\r/g, "\r");
+		}
+
+		// Add to object
+		obj[key] = value;
+	}
+
+	return obj;
+}
+
+/**
+ * Resolve escape sequences
+ * ported from https://github.com/motdotla/dotenv-expand
+ * @param {string} value value to resolve
+ * @returns {string} resolved value
+ */
+function _resolveEscapeSequences(value) {
+	return value.replace(/\\\$/g, "$");
+}
+
+/**
+ * Expand environment variable value
+ * ported from https://github.com/motdotla/dotenv-expand
+ * @param {string} value value to expand
+ * @param {Record} processEnv process.env object
+ * @param {Env} runningParsed running parsed object
+ * @returns {string} expanded value
+ */
+function expandValue(value, processEnv, runningParsed) {
+	const env = { ...runningParsed, ...processEnv }; // process.env wins
+
+	const regex = /(?} */
+	const seen = new Set(); // self-referential checker
+
+	while ((match = regex.exec(result)) !== null) {
+		seen.add(result);
+
+		const [template, bracedExpression, unbracedExpression] = match;
+		const expression = bracedExpression || unbracedExpression;
+
+		// match the operators `:+`, `+`, `:-`, and `-`
+		const opRegex = /(:\+|\+|:-|-)/;
+		// find first match
+		const opMatch = expression.match(opRegex);
+		const splitter = opMatch ? opMatch[0] : null;
+
+		const r = expression.split(/** @type {string} */ (splitter));
+		// const r = splitter ? expression.split(splitter) : [expression];
+
+		/** @type {string} */
+		let defaultValue;
+		/** @type {undefined | null | string} */
+		let value;
+
+		const key = r.shift();
+
+		if ([":+", "+"].includes(splitter || "")) {
+			defaultValue = env[key || ""] ? r.join(splitter || "") : "";
+			value = null;
+		} else {
+			defaultValue = r.join(splitter || "");
+			value = env[key || ""];
+		}
+
+		if (value) {
+			// self-referential check
+			result = seen.has(value)
+				? result.replace(template, defaultValue)
+				: result.replace(template, value);
+		} else {
+			result = result.replace(template, defaultValue);
+		}
+
+		// if the result equaled what was in process.env and runningParsed then stop expanding
+		if (result === runningParsed[key || ""]) {
+			break;
+		}
+
+		regex.lastIndex = 0; // reset regex search position to re-evaluate after each replacement
+	}
+
+	return result;
+}
+
+/**
+ * Expand environment variables in parsed object
+ * ported from https://github.com/motdotla/dotenv-expand
+ * @param {{ parsed: Env, processEnv: Record }} options expand options
+ * @returns {{ parsed: Env }} expanded options
+ */
+function expand(options) {
+	// for use with progressive expansion
+	const runningParsed = /** @type {Env} */ (Object.create(null));
+	const processEnv = options.processEnv;
+
+	// dotenv.config() ran before this so the assumption is process.env has already been set
+	for (const key in options.parsed) {
+		let value = options.parsed[key];
+
+		// short-circuit scenario: process.env was already set prior to the file value
+		value =
+			Object.prototype.hasOwnProperty.call(processEnv, key) &&
+			processEnv[key] !== value
+				? /** @type {string} */ (processEnv[key])
+				: expandValue(value, processEnv, runningParsed);
+
+		const resolvedValue = _resolveEscapeSequences(value);
+
+		options.parsed[key] = resolvedValue;
+		// for use with progressive expansion
+		runningParsed[key] = resolvedValue;
+	}
+
+	// Part of `dotenv-expand` code, but we don't need it because of we don't modify `process.env`
+	// for (const processKey in options.parsed) {
+	// 	if (processEnv) {
+	// 		processEnv[processKey] = options.parsed[processKey];
+	// 	}
+	// }
+
+	return options;
+}
+
+/**
+ * Format environment variables as DefinePlugin definitions
+ * @param {Env} env environment variables
+ * @returns {Record} formatted definitions
+ */
+const envToDefinitions = (env) => {
+	const definitions = /** @type {Record} */ ({});
+
+	for (const [key, value] of Object.entries(env)) {
+		const defValue = JSON.stringify(value);
+		definitions[`process.env.${key}`] = defValue;
+		definitions[`import.meta.env.${key}`] = defValue;
+	}
+
+	return definitions;
+};
+
+class DotenvPlugin {
+	/**
+	 * @param {DotenvPluginOptions=} options options object
+	 */
+	constructor(options = {}) {
+		/** @type {DotenvPluginOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => {
+					const { definitions } = require("../schemas/WebpackOptions.json");
+
+					return {
+						definitions,
+						oneOf: [{ $ref: "#/definitions/DotenvPluginOptions" }]
+					};
+				},
+				this.options,
+				{
+					name: "Dotenv Plugin",
+					baseDataPath: "options"
+				}
+			);
+		});
+		const definePlugin = new compiler.webpack.DefinePlugin({});
+		const prefixes = Array.isArray(this.options.prefix)
+			? this.options.prefix
+			: [this.options.prefix || "WEBPACK_"];
+		/** @type {string | false} */
+		const dir =
+			typeof this.options.dir === "string"
+				? this.options.dir
+				: typeof this.options.dir === "undefined"
+					? compiler.context
+					: this.options.dir;
+
+		/** @type {undefined | Snapshot} */
+		let snapshot;
+
+		const cache = compiler.getCache(PLUGIN_NAME);
+		const identifier = JSON.stringify(
+			this.options.template || DEFAULT_TEMPLATE
+		);
+		const itemCache = cache.getItemCache(identifier, null);
+
+		compiler.hooks.beforeCompile.tapPromise(PLUGIN_NAME, async () => {
+			const { parsed, snapshot: newSnapshot } = dir
+				? await this._loadEnv(compiler, itemCache, dir)
+				: { parsed: {} };
+			const env = this._getEnv(prefixes, parsed);
+
+			definePlugin.definitions = envToDefinitions(env || {});
+			snapshot = newSnapshot;
+		});
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			if (snapshot) {
+				compilation.fileDependencies.addAll(snapshot.getFileIterable());
+				compilation.missingDependencies.addAll(snapshot.getMissingIterable());
+			}
+		});
+
+		definePlugin.apply(compiler);
+	}
+
+	/**
+	 * Get list of env files to load based on mode and template
+	 * Similar to Vite's getEnvFilesForMode
+	 * @private
+	 * @param {InputFileSystem} inputFileSystem the input file system
+	 * @param {string | false} dir the directory containing .env files
+	 * @param {string | undefined} mode the mode (e.g., 'production', 'development')
+	 * @returns {string[]} array of file paths to load
+	 */
+	_getEnvFilesForMode(inputFileSystem, dir, mode) {
+		if (!dir) {
+			return [];
+		}
+
+		const templates = this.options.template || DEFAULT_TEMPLATE;
+
+		return templates
+			.map((pattern) => pattern.replace(/\[mode\]/g, mode || "development"))
+			.map((file) => join(inputFileSystem, dir, file));
+	}
+
+	/**
+	 * Get parsed env variables from `.env` files
+	 * @private
+	 * @param {InputFileSystem} fs input file system
+	 * @param {string} dir dir to load `.env` files
+	 * @param {string} mode mode
+	 * @returns {Promise<{ parsed: Env, fileDependencies: string[], missingDependencies: string[] }>} parsed env variables and dependencies
+	 */
+	async _getParsed(fs, dir, mode) {
+		/** @type {string[]} */
+		const fileDependencies = [];
+		/** @type {string[]} */
+		const missingDependencies = [];
+
+		// Get env files to load
+		const envFiles = this._getEnvFilesForMode(fs, dir, mode);
+
+		// Read all files
+		const contents = await Promise.all(
+			envFiles.map((filePath) =>
+				this._loadFile(fs, filePath).then(
+					(content) => {
+						fileDependencies.push(filePath);
+						return content;
+					},
+					() => {
+						// File doesn't exist, add to missingDependencies (this is normal)
+						missingDependencies.push(filePath);
+						return "";
+					}
+				)
+			)
+		);
+
+		// Parse all files and merge (later files override earlier ones)
+		// Similar to Vite's implementation
+		const parsed = /** @type {Env} */ (Object.create(null));
+
+		for (const content of contents) {
+			if (!content) continue;
+			const entries = parse(content);
+			for (const key in entries) {
+				parsed[key] = entries[key];
+			}
+		}
+
+		return { parsed, fileDependencies, missingDependencies };
+	}
+
+	/**
+	 * @private
+	 * @param {Compiler} compiler compiler
+	 * @param {ItemCacheFacade} itemCache item cache facade
+	 * @param {string} dir directory to read
+	 * @returns {Promise<{ parsed: Env, snapshot: Snapshot }>} parsed result and snapshot
+	 */
+	async _loadEnv(compiler, itemCache, dir) {
+		const fs = /** @type {InputFileSystem} */ (compiler.inputFileSystem);
+		const fileSystemInfo = new FileSystemInfo(fs, {
+			unmanagedPaths: compiler.unmanagedPaths,
+			managedPaths: compiler.managedPaths,
+			immutablePaths: compiler.immutablePaths,
+			hashFunction: compiler.options.output.hashFunction
+		});
+
+		const result = await itemCache.getPromise();
+
+		if (result) {
+			const isSnapshotValid = await new Promise((resolve, reject) => {
+				fileSystemInfo.checkSnapshotValid(result.snapshot, (error, isValid) => {
+					if (error) {
+						reject(error);
+
+						return;
+					}
+
+					resolve(isValid);
+				});
+			});
+
+			if (isSnapshotValid) {
+				return { parsed: result.parsed, snapshot: result.snapshot };
+			}
+		}
+
+		const { parsed, fileDependencies, missingDependencies } =
+			await this._getParsed(
+				fs,
+				dir,
+				/** @type {string} */
+				(compiler.options.mode)
+			);
+
+		const startTime = Date.now();
+		const newSnapshot = await new Promise((resolve, reject) => {
+			fileSystemInfo.createSnapshot(
+				startTime,
+				fileDependencies,
+				null,
+				missingDependencies,
+				// `.env` files are build dependencies
+				compiler.options.snapshot.buildDependencies,
+				(err, snapshot) => {
+					if (err) return reject(err);
+					resolve(snapshot);
+				}
+			);
+		});
+
+		await itemCache.storePromise({ parsed, snapshot: newSnapshot });
+
+		return { parsed, snapshot: newSnapshot };
+	}
+
+	/**
+	 * Generate env variables
+	 * @private
+	 * @param {Prefix} prefixes expose only environment variables that start with these prefixes
+	 * @param {Env} parsed parsed env variables
+	 * @returns {Env} env variables
+	 */
+	_getEnv(prefixes, parsed) {
+		// Always expand environment variables (like Vite does)
+		// Make a copy of process.env so that dotenv-expand doesn't modify global process.env
+		const processEnv = { ...process.env };
+		expand({ parsed, processEnv });
+		const env = /** @type {Env} */ (Object.create(null));
+
+		// Get all keys from parser and process.env
+		const keys = [...Object.keys(parsed), ...Object.keys(process.env)];
+
+		// Prioritize actual env variables from `process.env`, fallback to parsed
+		for (const key of keys) {
+			if (prefixes.some((prefix) => key.startsWith(prefix))) {
+				env[key] =
+					Object.prototype.hasOwnProperty.call(process.env, key) &&
+					process.env[key]
+						? process.env[key]
+						: parsed[key];
+			}
+		}
+
+		return env;
+	}
+
+	/**
+	 * Load a file with proper path resolution
+	 * @private
+	 * @param {InputFileSystem} fs the input file system
+	 * @param {string} file the file to load
+	 * @returns {Promise} the content of the file
+	 */
+	_loadFile(fs, file) {
+		return new Promise((resolve, reject) => {
+			fs.readFile(file, (err, content) => {
+				if (err) reject(err);
+				else resolve(/** @type {Buffer} */ (content).toString() || "");
+			});
+		});
+	}
+}
+
+module.exports = DotenvPlugin;
diff --git a/lib/DynamicEntryPlugin.js b/lib/DynamicEntryPlugin.js
index 0f1fabf0e8b..5f22cd25646 100644
--- a/lib/DynamicEntryPlugin.js
+++ b/lib/DynamicEntryPlugin.js
@@ -2,72 +2,92 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Naoyuki Kanezawa @nkzawa
 */
+
 "use strict";
 
-const MultiEntryDependency = require("./dependencies/MultiEntryDependency");
-const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
-const MultiModuleFactory = require("./MultiModuleFactory");
-const MultiEntryPlugin = require("./MultiEntryPlugin");
-const SingleEntryPlugin = require("./SingleEntryPlugin");
+const EntryOptionPlugin = require("./EntryOptionPlugin");
+const EntryPlugin = require("./EntryPlugin");
+const EntryDependency = require("./dependencies/EntryDependency");
+
+/** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescriptionNormalized */
+/** @typedef {import("../declarations/WebpackOptions").EntryStatic} EntryStatic */
+/** @typedef {import("../declarations/WebpackOptions").EntryStaticNormalized} EntryStaticNormalized */
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "DynamicEntryPlugin";
+
+/** @typedef {() => EntryStatic | Promise} RawEntryDynamic */
+/** @typedef {() => Promise} EntryDynamic */
 
 class DynamicEntryPlugin {
+	/**
+	 * @param {string} context the context path
+	 * @param {EntryDynamic} entry the entry value
+	 */
 	constructor(context, entry) {
+		/** @type {string} */
 		this.context = context;
+		/** @type {EntryDynamic} */
 		this.entry = entry;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"DynamicEntryPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				const multiModuleFactory = new MultiModuleFactory();
-
 				compilation.dependencyFactories.set(
-					MultiEntryDependency,
-					multiModuleFactory
-				);
-				compilation.dependencyFactories.set(
-					SingleEntryDependency,
+					EntryDependency,
 					normalModuleFactory
 				);
 			}
 		);
 
-		compiler.hooks.make.tapAsync(
-			"DynamicEntryPlugin",
-			(compilation, callback) => {
-				const addEntry = (entry, name) => {
-					const dep = DynamicEntryPlugin.createDependency(entry, name);
-					return new Promise((resolve, reject) => {
-						compilation.addEntry(this.context, dep, name, err => {
-							if (err) return reject(err);
-							resolve();
-						});
-					});
-				};
-
-				Promise.resolve(this.entry()).then(entry => {
-					if (typeof entry === "string" || Array.isArray(entry)) {
-						addEntry(entry, "main").then(() => callback(), callback);
-					} else if (typeof entry === "object") {
-						Promise.all(
-							Object.keys(entry).map(name => {
-								return addEntry(entry[name], name);
-							})
-						).then(() => callback(), callback);
+		compiler.hooks.make.tapPromise(PLUGIN_NAME, (compilation) =>
+			Promise.resolve(this.entry())
+				.then((entry) => {
+					/** @type {Promise[]} */
+					const promises = [];
+					for (const name of Object.keys(entry)) {
+						const desc = entry[name];
+						const options = EntryOptionPlugin.entryDescriptionToOptions(
+							compiler,
+							name,
+							desc
+						);
+						for (const entry of /** @type {NonNullable} */ (
+							desc.import
+						)) {
+							promises.push(
+								new Promise(
+									/**
+									 * @param {(value?: undefined) => void} resolve resolve
+									 * @param {(reason?: Error) => void} reject reject
+									 */
+									(resolve, reject) => {
+										compilation.addEntry(
+											this.context,
+											EntryPlugin.createDependency(entry, options),
+											options,
+											(err) => {
+												if (err) return reject(err);
+												resolve();
+											}
+										);
+									}
+								)
+							);
+						}
 					}
-				});
-			}
+					return Promise.all(promises);
+				})
+				.then(() => {})
 		);
 	}
 }
 
 module.exports = DynamicEntryPlugin;
-
-DynamicEntryPlugin.createDependency = (entry, name) => {
-	if (Array.isArray(entry)) {
-		return MultiEntryPlugin.createDependency(entry, name);
-	} else {
-		return SingleEntryPlugin.createDependency(entry, name);
-	}
-};
diff --git a/lib/EntryModuleNotFoundError.js b/lib/EntryModuleNotFoundError.js
deleted file mode 100644
index b2458d6f24f..00000000000
--- a/lib/EntryModuleNotFoundError.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const WebpackError = require("./WebpackError");
-
-class EntryModuleNotFoundError extends WebpackError {
-	constructor(err) {
-		super("Entry module not found: " + err);
-
-		this.name = "EntryModuleNotFoundError";
-		this.details = err.details;
-		this.error = err;
-
-		Error.captureStackTrace(this, this.constructor);
-	}
-}
-
-module.exports = EntryModuleNotFoundError;
diff --git a/lib/EntryOptionPlugin.js b/lib/EntryOptionPlugin.js
index c8c3ce75588..320c6d65430 100644
--- a/lib/EntryOptionPlugin.js
+++ b/lib/EntryOptionPlugin.js
@@ -2,32 +2,97 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const SingleEntryPlugin = require("./SingleEntryPlugin");
-const MultiEntryPlugin = require("./MultiEntryPlugin");
-const DynamicEntryPlugin = require("./DynamicEntryPlugin");
+/** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescription */
+/** @typedef {import("../declarations/WebpackOptions").EntryNormalized} Entry */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
 
-const itemToPlugin = (context, item, name) => {
-	if (Array.isArray(item)) {
-		return new MultiEntryPlugin(context, item, name);
-	}
-	return new SingleEntryPlugin(context, item, name);
-};
+const PLUGIN_NAME = "EntryOptionPlugin";
 
-module.exports = class EntryOptionPlugin {
+class EntryOptionPlugin {
+	/**
+	 * @param {Compiler} compiler the compiler instance one is tapping into
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.entryOption.tap("EntryOptionPlugin", (context, entry) => {
-			if (typeof entry === "string" || Array.isArray(entry)) {
-				itemToPlugin(context, entry, "main").apply(compiler);
-			} else if (typeof entry === "object") {
-				for (const name of Object.keys(entry)) {
-					itemToPlugin(context, entry[name], name).apply(compiler);
-				}
-			} else if (typeof entry === "function") {
-				new DynamicEntryPlugin(context, entry).apply(compiler);
-			}
+		compiler.hooks.entryOption.tap(PLUGIN_NAME, (context, entry) => {
+			EntryOptionPlugin.applyEntryOption(compiler, context, entry);
 			return true;
 		});
 	}
-};
+
+	/**
+	 * @param {Compiler} compiler the compiler
+	 * @param {string} context context directory
+	 * @param {Entry} entry request
+	 * @returns {void}
+	 */
+	static applyEntryOption(compiler, context, entry) {
+		if (typeof entry === "function") {
+			const DynamicEntryPlugin = require("./DynamicEntryPlugin");
+
+			new DynamicEntryPlugin(context, entry).apply(compiler);
+		} else {
+			const EntryPlugin = require("./EntryPlugin");
+
+			for (const name of Object.keys(entry)) {
+				const desc = entry[name];
+				const options = EntryOptionPlugin.entryDescriptionToOptions(
+					compiler,
+					name,
+					desc
+				);
+				const descImport =
+					/** @type {Exclude} */
+					(desc.import);
+				for (const entry of descImport) {
+					new EntryPlugin(context, entry, options).apply(compiler);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {Compiler} compiler the compiler
+	 * @param {string} name entry name
+	 * @param {EntryDescription} desc entry description
+	 * @returns {EntryOptions} options for the entry
+	 */
+	static entryDescriptionToOptions(compiler, name, desc) {
+		/** @type {EntryOptions} */
+		const options = {
+			name,
+			filename: desc.filename,
+			runtime: desc.runtime,
+			layer: desc.layer,
+			dependOn: desc.dependOn,
+			baseUri: desc.baseUri,
+			publicPath: desc.publicPath,
+			chunkLoading: desc.chunkLoading,
+			asyncChunks: desc.asyncChunks,
+			wasmLoading: desc.wasmLoading,
+			library: desc.library
+		};
+		if (desc.chunkLoading) {
+			const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");
+
+			EnableChunkLoadingPlugin.checkEnabled(compiler, desc.chunkLoading);
+		}
+		if (desc.wasmLoading) {
+			const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");
+
+			EnableWasmLoadingPlugin.checkEnabled(compiler, desc.wasmLoading);
+		}
+		if (desc.library) {
+			const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
+
+			EnableLibraryPlugin.checkEnabled(compiler, desc.library.type);
+		}
+		return options;
+	}
+}
+
+module.exports = EntryOptionPlugin;
diff --git a/lib/EntryPlugin.js b/lib/EntryPlugin.js
new file mode 100644
index 00000000000..35392d871ba
--- /dev/null
+++ b/lib/EntryPlugin.js
@@ -0,0 +1,72 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const EntryDependency = require("./dependencies/EntryDependency");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
+
+const PLUGIN_NAME = "EntryPlugin";
+
+class EntryPlugin {
+	/**
+	 * An entry plugin which will handle creation of the EntryDependency
+	 * @param {string} context context path
+	 * @param {string} entry entry path
+	 * @param {EntryOptions | string=} options entry options (passing a string is deprecated)
+	 */
+	constructor(context, entry, options) {
+		this.context = context;
+		this.entry = entry;
+		this.options = options || "";
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				compilation.dependencyFactories.set(
+					EntryDependency,
+					normalModuleFactory
+				);
+			}
+		);
+
+		const { entry, options, context } = this;
+		const dep = EntryPlugin.createDependency(entry, options);
+
+		compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
+			compilation.addEntry(context, dep, options, (err) => {
+				callback(err);
+			});
+		});
+	}
+
+	/**
+	 * @param {string} entry entry request
+	 * @param {EntryOptions | string} options entry options (passing string is deprecated)
+	 * @returns {EntryDependency} the dependency
+	 */
+	static createDependency(entry, options) {
+		const dep = new EntryDependency(entry);
+		// TODO webpack 6 remove string option
+		dep.loc = {
+			name:
+				typeof options === "object"
+					? /** @type {string} */ (options.name)
+					: options
+		};
+		return dep;
+	}
+}
+
+module.exports = EntryPlugin;
diff --git a/lib/Entrypoint.js b/lib/Entrypoint.js
index 892855e1607..d04086fc448 100644
--- a/lib/Entrypoint.js
+++ b/lib/Entrypoint.js
@@ -2,11 +2,16 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const ChunkGroup = require("./ChunkGroup");
+const SortableSet = require("./util/SortableSet");
+
+/** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescription */
+/** @typedef {import("./Chunk")} Chunk */
 
-/** @typedef {import("./Chunk.js")} Chunk */
+/** @typedef {{ name?: string } & Omit} EntryOptions */
 
 /**
  * Entrypoint serves as an encapsulation primitive for chunks that are
@@ -17,20 +22,32 @@ const ChunkGroup = require("./ChunkGroup");
 class Entrypoint extends ChunkGroup {
 	/**
 	 * Creates an instance of Entrypoint.
-	 * @param {string} name the name of the entrypoint
+	 * @param {EntryOptions | string} entryOptions the options for the entrypoint (or name)
+	 * @param {boolean=} initial false, when the entrypoint is not initial loaded
 	 */
-	constructor(name) {
-		super(name);
+	constructor(entryOptions, initial = true) {
+		if (typeof entryOptions === "string") {
+			entryOptions = { name: entryOptions };
+		}
+		super({
+			name: entryOptions.name
+		});
+		this.options = entryOptions;
 		/** @type {Chunk=} */
-		this.runtimeChunk = undefined;
+		this._runtimeChunk = undefined;
+		/** @type {Chunk=} */
+		this._entrypointChunk = undefined;
+		/** @type {boolean} */
+		this._initial = initial;
+		/** @type {SortableSet} */
+		this._dependOn = new SortableSet();
 	}
 
 	/**
-	 * isInitial will always return true for Entrypoint ChunkGroup.
-	 * @returns {true} returns true as all entrypoints are initial ChunkGroups
+	 * @returns {boolean} true, when this chunk group will be loaded on initial page load
 	 */
 	isInitial() {
-		return true;
+		return this._initial;
 	}
 
 	/**
@@ -39,15 +56,64 @@ class Entrypoint extends ChunkGroup {
 	 * @returns {void}
 	 */
 	setRuntimeChunk(chunk) {
-		this.runtimeChunk = chunk;
+		this._runtimeChunk = chunk;
 	}
 
 	/**
 	 * Fetches the chunk reference containing the webpack bootstrap code
-	 * @returns {Chunk} returns the runtime chunk or first chunk in `this.chunks`
+	 * @returns {Chunk | null} returns the runtime chunk or null if there is none
 	 */
 	getRuntimeChunk() {
-		return this.runtimeChunk || this.chunks[0];
+		if (this._runtimeChunk) return this._runtimeChunk;
+		for (const parent of this.parentsIterable) {
+			if (parent instanceof Entrypoint) return parent.getRuntimeChunk();
+		}
+		return null;
+	}
+
+	/**
+	 * Sets the chunk with the entrypoint modules for an entrypoint.
+	 * @param {Chunk} chunk the chunk being set as the entrypoint chunk.
+	 * @returns {void}
+	 */
+	setEntrypointChunk(chunk) {
+		this._entrypointChunk = chunk;
+	}
+
+	/**
+	 * Returns the chunk which contains the entrypoint modules
+	 * (or at least the execution of them)
+	 * @returns {Chunk} chunk
+	 */
+	getEntrypointChunk() {
+		return /** @type {Chunk} */ (this._entrypointChunk);
+	}
+
+	/**
+	 * @param {Chunk} oldChunk chunk to be replaced
+	 * @param {Chunk} newChunk New chunk that will be replaced with
+	 * @returns {boolean | undefined} returns true if the replacement was successful
+	 */
+	replaceChunk(oldChunk, newChunk) {
+		if (this._runtimeChunk === oldChunk) this._runtimeChunk = newChunk;
+		if (this._entrypointChunk === oldChunk) this._entrypointChunk = newChunk;
+		return super.replaceChunk(oldChunk, newChunk);
+	}
+
+	/**
+	 * @param {Entrypoint} entrypoint the entrypoint
+	 * @returns {void}
+	 */
+	addDependOn(entrypoint) {
+		this._dependOn.add(entrypoint);
+	}
+
+	/**
+	 * @param {Entrypoint} entrypoint the entrypoint
+	 * @returns {boolean} true if the entrypoint is in the dependOn set
+	 */
+	dependOn(entrypoint) {
+		return this._dependOn.has(entrypoint);
 	}
 }
 
diff --git a/lib/EnvironmentNotSupportAsyncWarning.js b/lib/EnvironmentNotSupportAsyncWarning.js
new file mode 100644
index 00000000000..2d6ed51d983
--- /dev/null
+++ b/lib/EnvironmentNotSupportAsyncWarning.js
@@ -0,0 +1,51 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Gengkun He @ahabhgk
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {"asyncWebAssembly" | "topLevelAwait" | "external promise" | "external script" | "external import" | "external module"} Feature */
+
+class EnvironmentNotSupportAsyncWarning extends WebpackError {
+	/**
+	 * Creates an instance of EnvironmentNotSupportAsyncWarning.
+	 * @param {Module} module module
+	 * @param {Feature} feature feature
+	 */
+	constructor(module, feature) {
+		const message = `The generated code contains 'async/await' because this module is using "${feature}".
+However, your target environment does not appear to support 'async/await'.
+As a result, the code may not run as expected or may cause runtime errors.`;
+		super(message);
+
+		/** @type {string} */
+		this.name = "EnvironmentNotSupportAsyncWarning";
+		/** @type {Module} */
+		this.module = module;
+	}
+
+	/**
+	 * Creates an instance of EnvironmentNotSupportAsyncWarning.
+	 * @param {Module} module module
+	 * @param {RuntimeTemplate} runtimeTemplate compilation
+	 * @param {Feature} feature feature
+	 */
+	static check(module, runtimeTemplate, feature) {
+		if (!runtimeTemplate.supportsAsyncFunction()) {
+			module.addWarning(new EnvironmentNotSupportAsyncWarning(module, feature));
+		}
+	}
+}
+
+makeSerializable(
+	EnvironmentNotSupportAsyncWarning,
+	"webpack/lib/EnvironmentNotSupportAsyncWarning"
+);
+
+module.exports = EnvironmentNotSupportAsyncWarning;
diff --git a/lib/EnvironmentPlugin.js b/lib/EnvironmentPlugin.js
index 388ce817372..3fc560c48e8 100644
--- a/lib/EnvironmentPlugin.js
+++ b/lib/EnvironmentPlugin.js
@@ -6,59 +6,68 @@
 "use strict";
 
 const DefinePlugin = require("./DefinePlugin");
+const WebpackError = require("./WebpackError");
 
-const needsEnvVarFix =
-	["8", "9"].indexOf(process.versions.node.split(".")[0]) >= 0 &&
-	process.platform === "win32";
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./DefinePlugin").CodeValue} CodeValue */
+
+const PLUGIN_NAME = "EnvironmentPlugin";
 
 class EnvironmentPlugin {
+	/**
+	 * @param {(string | string[] | Record)[]} keys keys
+	 */
 	constructor(...keys) {
 		if (keys.length === 1 && Array.isArray(keys[0])) {
+			/** @type {string[]} */
 			this.keys = keys[0];
 			this.defaultValues = {};
 		} else if (keys.length === 1 && keys[0] && typeof keys[0] === "object") {
 			this.keys = Object.keys(keys[0]);
-			this.defaultValues = keys[0];
+			this.defaultValues =
+				/** @type {Record} */
+				(keys[0]);
 		} else {
-			this.keys = keys;
+			this.keys = /** @type {string[]} */ (keys);
 			this.defaultValues = {};
 		}
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		const definitions = this.keys.reduce((defs, key) => {
-			// TODO remove once the fix has made its way into Node 8.
-			// Work around https://github.com/nodejs/node/pull/18463,
-			// affecting Node 8 & 9 by performing an OS-level
-			// operation that always succeeds before reading
-			// environment variables:
-			if (needsEnvVarFix) require("os").cpus();
+		const definePlugin = new DefinePlugin({});
 
-			const value =
-				process.env[key] !== undefined
-					? process.env[key]
-					: this.defaultValues[key];
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
+			/** @type {Record} */
+			const definitions = {};
+			for (const key of this.keys) {
+				const value =
+					process.env[key] !== undefined
+						? process.env[key]
+						: this.defaultValues[key];
 
-			if (value === undefined) {
-				compiler.hooks.thisCompilation.tap("EnvironmentPlugin", compilation => {
-					const error = new Error(
-						`EnvironmentPlugin - ${key} environment variable is undefined.\n\n` +
+				if (value === undefined) {
+					const error = new WebpackError(
+						`${PLUGIN_NAME} - ${key} environment variable is undefined.\n\n` +
 							"You can pass an object with default values to suppress this warning.\n" +
 							"See https://webpack.js.org/plugins/environment-plugin for example."
 					);
 
 					error.name = "EnvVariableNotDefinedError";
-					compilation.warnings.push(error);
-				});
+					compilation.errors.push(error);
+				}
+				const defValue =
+					value === undefined ? "undefined" : JSON.stringify(value);
+				definitions[`process.env.${key}`] = defValue;
+				definitions[`import.meta.env.${key}`] = defValue;
 			}
-
-			defs[`process.env.${key}`] =
-				typeof value === "undefined" ? "undefined" : JSON.stringify(value);
-
-			return defs;
-		}, {});
-
-		new DefinePlugin(definitions).apply(compiler);
+			definePlugin.definitions = definitions;
+		});
+		definePlugin.apply(compiler);
 	}
 }
 
diff --git a/lib/ErrorHelpers.js b/lib/ErrorHelpers.js
index 900ae4d59e8..b23d1f1b421 100644
--- a/lib/ErrorHelpers.js
+++ b/lib/ErrorHelpers.js
@@ -2,59 +2,99 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const loaderFlag = "LOADER_EXECUTION";
 
 const webpackOptionsFlag = "WEBPACK_OPTIONS";
 
-exports.cutOffByFlag = (stack, flag) => {
-	stack = stack.split("\n");
-	for (let i = 0; i < stack.length; i++) {
-		if (stack[i].includes(flag)) {
-			stack.length = i;
+/**
+ * @param {string} stack stack trace
+ * @param {string} flag flag to cut off
+ * @returns {string} stack trace without the specified flag included
+ */
+const cutOffByFlag = (stack, flag) => {
+	const errorStack = stack.split("\n");
+	for (let i = 0; i < errorStack.length; i++) {
+		if (errorStack[i].includes(flag)) {
+			errorStack.length = i;
 		}
 	}
-	return stack.join("\n");
+	return errorStack.join("\n");
 };
 
-exports.cutOffLoaderExecution = stack =>
-	exports.cutOffByFlag(stack, loaderFlag);
+/**
+ * @param {string} stack stack trace
+ * @returns {string} stack trace without the loader execution flag included
+ */
+const cutOffLoaderExecution = (stack) => cutOffByFlag(stack, loaderFlag);
+
+/**
+ * @param {string} stack stack trace
+ * @returns {string} stack trace without the webpack options flag included
+ */
+const cutOffWebpackOptions = (stack) => cutOffByFlag(stack, webpackOptionsFlag);
 
-exports.cutOffWebpackOptions = stack =>
-	exports.cutOffByFlag(stack, webpackOptionsFlag);
+/**
+ * @param {string} stack stack trace
+ * @param {string} message error message
+ * @returns {string} stack trace without the message included
+ */
+const cutOffMultilineMessage = (stack, message) => {
+	const stackSplitByLines = stack.split("\n");
+	const messageSplitByLines = message.split("\n");
 
-exports.cutOffMultilineMessage = (stack, message) => {
-	stack = stack.split("\n");
-	message = message.split("\n");
+	/** @type {string[]} */
+	const result = [];
 
-	return stack
-		.reduce(
-			(acc, line, idx) =>
-				line.includes(message[idx]) ? acc : acc.concat(line),
-			[]
-		)
-		.join("\n");
+	for (const [idx, line] of stackSplitByLines.entries()) {
+		if (!line.includes(messageSplitByLines[idx])) result.push(line);
+	}
+
+	return result.join("\n");
 };
 
-exports.cutOffMessage = (stack, message) => {
+/**
+ * @param {string} stack stack trace
+ * @param {string} message error message
+ * @returns {string} stack trace without the message included
+ */
+const cutOffMessage = (stack, message) => {
 	const nextLine = stack.indexOf("\n");
 	if (nextLine === -1) {
 		return stack === message ? "" : stack;
-	} else {
-		const firstLine = stack.substr(0, nextLine);
-		return firstLine === message ? stack.substr(nextLine + 1) : stack;
 	}
+	const firstLine = stack.slice(0, nextLine);
+	return firstLine === message ? stack.slice(nextLine + 1) : stack;
 };
 
-exports.cleanUp = (stack, message) => {
-	stack = exports.cutOffLoaderExecution(stack);
-	stack = exports.cutOffMessage(stack, message);
+/**
+ * @param {string} stack stack trace
+ * @param {string} message error message
+ * @returns {string} stack trace without the loader execution flag and message included
+ */
+const cleanUp = (stack, message) => {
+	stack = cutOffLoaderExecution(stack);
+	stack = cutOffMessage(stack, message);
 	return stack;
 };
 
-exports.cleanUpWebpackOptions = (stack, message) => {
-	stack = exports.cutOffWebpackOptions(stack);
-	stack = exports.cutOffMultilineMessage(stack, message);
+/**
+ * @param {string} stack stack trace
+ * @param {string} message error message
+ * @returns {string} stack trace without the webpack options flag and message included
+ */
+const cleanUpWebpackOptions = (stack, message) => {
+	stack = cutOffWebpackOptions(stack);
+	stack = cutOffMultilineMessage(stack, message);
 	return stack;
 };
+
+module.exports.cleanUp = cleanUp;
+module.exports.cleanUpWebpackOptions = cleanUpWebpackOptions;
+module.exports.cutOffByFlag = cutOffByFlag;
+module.exports.cutOffLoaderExecution = cutOffLoaderExecution;
+module.exports.cutOffMessage = cutOffMessage;
+module.exports.cutOffMultilineMessage = cutOffMultilineMessage;
+module.exports.cutOffWebpackOptions = cutOffWebpackOptions;
diff --git a/lib/EvalDevToolModulePlugin.js b/lib/EvalDevToolModulePlugin.js
index 2af11f9c3a4..45a0b6d5f00 100644
--- a/lib/EvalDevToolModulePlugin.js
+++ b/lib/EvalDevToolModulePlugin.js
@@ -2,24 +2,132 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const EvalDevToolModuleTemplatePlugin = require("./EvalDevToolModuleTemplatePlugin");
+const { ConcatSource, RawSource } = require("webpack-sources");
+const ExternalModule = require("./ExternalModule");
+const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolNamespace} DevtoolNamespace */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolModuleFilenameTemplate} DevtoolModuleFilenameTemplate */
+/** @typedef {import("./Compiler")} Compiler */
+
+/** @type {WeakMap} */
+const cache = new WeakMap();
+
+const devtoolWarning = new RawSource(`/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+`);
+
+/**
+ * @typedef {object} EvalDevToolModulePluginOptions
+ * @property {DevtoolNamespace=} namespace namespace
+ * @property {string=} sourceUrlComment source url comment
+ * @property {DevtoolModuleFilenameTemplate=} moduleFilenameTemplate module filename template
+ */
+
+const PLUGIN_NAME = "EvalDevToolModulePlugin";
 
 class EvalDevToolModulePlugin {
-	constructor(options) {
-		this.sourceUrlComment = options.sourceUrlComment;
-		this.moduleFilenameTemplate = options.moduleFilenameTemplate;
-		this.namespace = options.namespace;
+	/**
+	 * @param {EvalDevToolModulePluginOptions=} options options
+	 */
+	constructor(options = {}) {
+		/** @type {DevtoolNamespace} */
+		this.namespace = options.namespace || "";
+		/** @type {string} */
+		this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]";
+		/** @type {DevtoolModuleFilenameTemplate} */
+		this.moduleFilenameTemplate =
+			options.moduleFilenameTemplate ||
+			"webpack://[namespace]/[resourcePath]?[loaders]";
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.compilation.tap("EvalDevToolModulePlugin", compilation => {
-			new EvalDevToolModuleTemplatePlugin({
-				sourceUrlComment: this.sourceUrlComment,
-				moduleFilenameTemplate: this.moduleFilenameTemplate,
-				namespace: this.namespace
-			}).apply(compilation.moduleTemplates.javascript);
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
+			hooks.renderModuleContent.tap(
+				PLUGIN_NAME,
+				(source, module, { chunk, runtimeTemplate, chunkGraph }) => {
+					const cacheEntry = cache.get(source);
+					if (cacheEntry !== undefined) return cacheEntry;
+					if (module instanceof ExternalModule) {
+						cache.set(source, source);
+						return source;
+					}
+					const content = source.source();
+					const namespace = compilation.getPath(this.namespace, {
+						chunk
+					});
+					const str = ModuleFilenameHelpers.createFilename(
+						module,
+						{
+							moduleFilenameTemplate: this.moduleFilenameTemplate,
+							namespace
+						},
+						{
+							requestShortener: runtimeTemplate.requestShortener,
+							chunkGraph,
+							hashFunction: compilation.outputOptions.hashFunction
+						}
+					);
+					const footer = `\n${this.sourceUrlComment.replace(
+						/\[url\]/g,
+						encodeURI(str)
+							.replace(/%2F/g, "/")
+							.replace(/%20/g, "_")
+							.replace(/%5E/g, "^")
+							.replace(/%5C/g, "\\")
+							.replace(/^\//, "")
+					)}`;
+					const result = new RawSource(
+						`eval(${
+							compilation.outputOptions.trustedTypes
+								? `${RuntimeGlobals.createScript}(${JSON.stringify(
+										`{${content + footer}\n}`
+									)})`
+								: JSON.stringify(`{${content + footer}\n}`)
+						});`
+					);
+					cache.set(source, result);
+					return result;
+				}
+			);
+			hooks.inlineInRuntimeBailout.tap(
+				PLUGIN_NAME,
+				() => "the eval devtool is used."
+			);
+			hooks.render.tap(
+				PLUGIN_NAME,
+				(source) => new ConcatSource(devtoolWarning, source)
+			);
+			hooks.chunkHash.tap(PLUGIN_NAME, (chunk, hash) => {
+				hash.update(PLUGIN_NAME);
+				hash.update("2");
+			});
+			if (compilation.outputOptions.trustedTypes) {
+				compilation.hooks.additionalModuleRuntimeRequirements.tap(
+					PLUGIN_NAME,
+					(module, set, _context) => {
+						set.add(RuntimeGlobals.createScript);
+					}
+				);
+			}
 		});
 	}
 }
diff --git a/lib/EvalDevToolModuleTemplatePlugin.js b/lib/EvalDevToolModuleTemplatePlugin.js
deleted file mode 100644
index ab5dd1aac1c..00000000000
--- a/lib/EvalDevToolModuleTemplatePlugin.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { RawSource } = require("webpack-sources");
-const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
-
-const cache = new WeakMap();
-
-class EvalDevToolModuleTemplatePlugin {
-	constructor(options) {
-		this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]";
-		this.moduleFilenameTemplate =
-			options.moduleFilenameTemplate ||
-			"webpack://[namespace]/[resourcePath]?[loaders]";
-		this.namespace = options.namespace || "";
-	}
-
-	apply(moduleTemplate) {
-		moduleTemplate.hooks.module.tap(
-			"EvalDevToolModuleTemplatePlugin",
-			(source, module) => {
-				const cacheEntry = cache.get(source);
-				if (cacheEntry !== undefined) return cacheEntry;
-				const content = source.source();
-				const str = ModuleFilenameHelpers.createFilename(
-					module,
-					{
-						moduleFilenameTemplate: this.moduleFilenameTemplate,
-						namespace: this.namespace
-					},
-					moduleTemplate.runtimeTemplate.requestShortener
-				);
-				const footer =
-					"\n" +
-					this.sourceUrlComment.replace(
-						/\[url\]/g,
-						encodeURI(str)
-							.replace(/%2F/g, "/")
-							.replace(/%20/g, "_")
-							.replace(/%5E/g, "^")
-							.replace(/%5C/g, "\\")
-							.replace(/^\//, "")
-					);
-				const result = new RawSource(
-					`eval(${JSON.stringify(content + footer)});`
-				);
-				cache.set(source, result);
-				return result;
-			}
-		);
-		moduleTemplate.hooks.hash.tap("EvalDevToolModuleTemplatePlugin", hash => {
-			hash.update("EvalDevToolModuleTemplatePlugin");
-			hash.update("2");
-		});
-	}
-}
-
-module.exports = EvalDevToolModuleTemplatePlugin;
diff --git a/lib/EvalSourceMapDevToolModuleTemplatePlugin.js b/lib/EvalSourceMapDevToolModuleTemplatePlugin.js
deleted file mode 100644
index ac22c68976e..00000000000
--- a/lib/EvalSourceMapDevToolModuleTemplatePlugin.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { RawSource } = require("webpack-sources");
-const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
-
-const cache = new WeakMap();
-
-class EvalSourceMapDevToolModuleTemplatePlugin {
-	constructor(compilation, options) {
-		this.compilation = compilation;
-		this.sourceMapComment =
-			options.append || "//# sourceURL=[module]\n//# sourceMappingURL=[url]";
-		this.moduleFilenameTemplate =
-			options.moduleFilenameTemplate ||
-			"webpack://[namespace]/[resource-path]?[hash]";
-		this.namespace = options.namespace || "";
-		this.options = options;
-	}
-
-	apply(moduleTemplate) {
-		const self = this;
-		const options = this.options;
-		const matchModule = ModuleFilenameHelpers.matchObject.bind(
-			ModuleFilenameHelpers,
-			options
-		);
-		moduleTemplate.hooks.module.tap(
-			"EvalSourceMapDevToolModuleTemplatePlugin",
-			(source, module) => {
-				const cachedSource = cache.get(source);
-				if (cachedSource !== undefined) {
-					return cachedSource;
-				}
-
-				if (!matchModule(module.resource)) {
-					return source;
-				}
-
-				/** @type {{ [key: string]: TODO; }} */
-				let sourceMap;
-				let content;
-				if (source.sourceAndMap) {
-					const sourceAndMap = source.sourceAndMap(options);
-					sourceMap = sourceAndMap.map;
-					content = sourceAndMap.source;
-				} else {
-					sourceMap = source.map(options);
-					content = source.source();
-				}
-				if (!sourceMap) {
-					return source;
-				}
-
-				// Clone (flat) the sourcemap to ensure that the mutations below do not persist.
-				sourceMap = Object.keys(sourceMap).reduce((obj, key) => {
-					obj[key] = sourceMap[key];
-					return obj;
-				}, {});
-				const modules = sourceMap.sources.map(source => {
-					const module = self.compilation.findModule(source);
-					return module || source;
-				});
-				let moduleFilenames = modules.map(module => {
-					return ModuleFilenameHelpers.createFilename(
-						module,
-						{
-							moduleFilenameTemplate: self.moduleFilenameTemplate,
-							namespace: self.namespace
-						},
-						moduleTemplate.runtimeTemplate.requestShortener
-					);
-				});
-				moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(
-					moduleFilenames,
-					(filename, i, n) => {
-						for (let j = 0; j < n; j++) filename += "*";
-						return filename;
-					}
-				);
-				sourceMap.sources = moduleFilenames;
-				sourceMap.sourceRoot = options.sourceRoot || "";
-				sourceMap.file = `${module.id}.js`;
-
-				const footer =
-					self.sourceMapComment.replace(
-						/\[url\]/g,
-						`data:application/json;charset=utf-8;base64,${Buffer.from(
-							JSON.stringify(sourceMap),
-							"utf8"
-						).toString("base64")}`
-					) + `\n//# sourceURL=webpack-internal:///${module.id}\n`; // workaround for chrome bug
-
-				const evalSource = new RawSource(
-					`eval(${JSON.stringify(content + footer)});`
-				);
-
-				cache.set(source, evalSource);
-
-				return evalSource;
-			}
-		);
-		moduleTemplate.hooks.hash.tap(
-			"EvalSourceMapDevToolModuleTemplatePlugin",
-			hash => {
-				hash.update("eval-source-map");
-				hash.update("2");
-			}
-		);
-	}
-}
-module.exports = EvalSourceMapDevToolModuleTemplatePlugin;
diff --git a/lib/EvalSourceMapDevToolPlugin.js b/lib/EvalSourceMapDevToolPlugin.js
index daf9aaddfc6..abdb4ab585e 100644
--- a/lib/EvalSourceMapDevToolPlugin.js
+++ b/lib/EvalSourceMapDevToolPlugin.js
@@ -2,39 +2,250 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const EvalSourceMapDevToolModuleTemplatePlugin = require("./EvalSourceMapDevToolModuleTemplatePlugin");
+const { ConcatSource, RawSource } = require("webpack-sources");
+const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
+const NormalModule = require("./NormalModule");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+const ConcatenatedModule = require("./optimize/ConcatenatedModule");
+const generateDebugId = require("./util/generateDebugId");
+const { makePathsAbsolute } = require("./util/identifier");
+
+/** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolNamespace} DevtoolNamespace */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolModuleFilenameTemplate} DevtoolModuleFilenameTemplate */
+/** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").SourceMapDevToolPluginOptions} SourceMapDevToolPluginOptions */
+/** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").Rules} Rules */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+
+/** @type {WeakMap} */
+const cache = new WeakMap();
+
+const devtoolWarning = new RawSource(`/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+`);
+
+const PLUGIN_NAME = "EvalSourceMapDevToolPlugin";
 
 class EvalSourceMapDevToolPlugin {
-	constructor(options) {
-		if (arguments.length > 1) {
-			throw new Error(
-				"EvalSourceMapDevToolPlugin only takes one argument (pass an options object)"
-			);
-		}
-		if (typeof options === "string") {
+	/**
+	 * @param {SourceMapDevToolPluginOptions | string=} inputOptions Options object
+	 */
+	constructor(inputOptions = {}) {
+		/** @type {SourceMapDevToolPluginOptions} */
+		let options;
+		if (typeof inputOptions === "string") {
 			options = {
-				append: options
+				append: inputOptions
 			};
+		} else {
+			options = inputOptions;
 		}
-		if (!options) options = {};
+		/** @type {string} */
+		this.sourceMapComment =
+			options.append && typeof options.append !== "function"
+				? options.append
+				: "//# sourceURL=[module]\n//# sourceMappingURL=[url]";
+		/** @type {DevtoolModuleFilenameTemplate} */
+		this.moduleFilenameTemplate =
+			options.moduleFilenameTemplate ||
+			"webpack://[namespace]/[resource-path]?[hash]";
+		/** @type {DevtoolNamespace} */
+		this.namespace = options.namespace || "";
+		/** @type {SourceMapDevToolPluginOptions} */
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		const options = this.options;
-		compiler.hooks.compilation.tap(
-			"EvalSourceMapDevToolPlugin",
-			compilation => {
-				new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
-				new EvalSourceMapDevToolModuleTemplatePlugin(
-					compilation,
-					options
-				).apply(compilation.moduleTemplates.javascript);
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
+			new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
+			const matchModule = ModuleFilenameHelpers.matchObject.bind(
+				ModuleFilenameHelpers,
+				options
+			);
+			hooks.renderModuleContent.tap(
+				PLUGIN_NAME,
+				(source, m, { chunk, runtimeTemplate, chunkGraph }) => {
+					const cachedSource = cache.get(source);
+					if (cachedSource !== undefined) {
+						return cachedSource;
+					}
+
+					/**
+					 * @param {Source} r result
+					 * @returns {Source} result
+					 */
+					const result = (r) => {
+						cache.set(source, r);
+						return r;
+					};
+
+					if (m instanceof NormalModule) {
+						const module = /** @type {NormalModule} */ (m);
+						if (!matchModule(module.resource)) {
+							return result(source);
+						}
+					} else if (m instanceof ConcatenatedModule) {
+						const concatModule = /** @type {ConcatenatedModule} */ (m);
+						if (concatModule.rootModule instanceof NormalModule) {
+							const module = /** @type {NormalModule} */ (
+								concatModule.rootModule
+							);
+							if (!matchModule(module.resource)) {
+								return result(source);
+							}
+						} else {
+							return result(source);
+						}
+					} else {
+						return result(source);
+					}
+
+					const namespace = compilation.getPath(this.namespace, {
+						chunk
+					});
+					/** @type {RawSourceMap} */
+					let sourceMap;
+					/** @type {string | Buffer} */
+					let content;
+					if (source.sourceAndMap) {
+						const sourceAndMap = source.sourceAndMap(options);
+						sourceMap = /** @type {RawSourceMap} */ (sourceAndMap.map);
+						content = sourceAndMap.source;
+					} else {
+						sourceMap = /** @type {RawSourceMap} */ (source.map(options));
+						content = source.source();
+					}
+					if (!sourceMap) {
+						return result(source);
+					}
+
+					// Clone (flat) the sourcemap to ensure that the mutations below do not persist.
+					sourceMap = { ...sourceMap };
+					const context = compiler.context;
+					const root = compiler.root;
+					const modules = sourceMap.sources.map((source) => {
+						if (!source.startsWith("webpack://")) return source;
+						source = makePathsAbsolute(context, source.slice(10), root);
+						const module = compilation.findModule(source);
+						return module || source;
+					});
+					let moduleFilenames = modules.map((module) =>
+						ModuleFilenameHelpers.createFilename(
+							module,
+							{
+								moduleFilenameTemplate: this.moduleFilenameTemplate,
+								namespace
+							},
+							{
+								requestShortener: runtimeTemplate.requestShortener,
+								chunkGraph,
+								hashFunction: compilation.outputOptions.hashFunction
+							}
+						)
+					);
+					moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(
+						moduleFilenames,
+						(filename, i, n) => {
+							for (let j = 0; j < n; j++) filename += "*";
+							return filename;
+						}
+					);
+					sourceMap.sources = moduleFilenames;
+					if (options.ignoreList) {
+						const ignoreList = sourceMap.sources.reduce(
+							/** @type {(acc: number[], sourceName: string, idx: number) => number[]} */ (
+								(acc, sourceName, idx) => {
+									const rule = /** @type {Rules} */ (options.ignoreList);
+									if (ModuleFilenameHelpers.matchPart(sourceName, rule)) {
+										acc.push(idx);
+									}
+									return acc;
+								}
+							),
+							[]
+						);
+						if (ignoreList.length > 0) {
+							sourceMap.ignoreList = ignoreList;
+						}
+					}
+
+					if (options.noSources) {
+						sourceMap.sourcesContent = undefined;
+					}
+					sourceMap.sourceRoot = options.sourceRoot || "";
+					const moduleId =
+						/** @type {ModuleId} */
+						(chunkGraph.getModuleId(m));
+					sourceMap.file =
+						typeof moduleId === "number" ? `${moduleId}.js` : moduleId;
+
+					if (options.debugIds) {
+						sourceMap.debugId = generateDebugId(content, sourceMap.file);
+					}
+
+					const footer = `${this.sourceMapComment.replace(
+						/\[url\]/g,
+						`data:application/json;charset=utf-8;base64,${Buffer.from(
+							JSON.stringify(sourceMap),
+							"utf8"
+						).toString("base64")}`
+					)}\n//# sourceURL=webpack-internal:///${moduleId}\n`; // workaround for chrome bug
+
+					return result(
+						new RawSource(
+							`eval(${
+								compilation.outputOptions.trustedTypes
+									? `${RuntimeGlobals.createScript}(${JSON.stringify(
+											`{${content + footer}\n}`
+										)})`
+									: JSON.stringify(`{${content + footer}\n}`)
+							});`
+						)
+					);
+				}
+			);
+			hooks.inlineInRuntimeBailout.tap(
+				PLUGIN_NAME,
+				() => "the eval-source-map devtool is used."
+			);
+			hooks.render.tap(
+				PLUGIN_NAME,
+				(source) => new ConcatSource(devtoolWarning, source)
+			);
+			hooks.chunkHash.tap(PLUGIN_NAME, (chunk, hash) => {
+				hash.update(PLUGIN_NAME);
+				hash.update("2");
+			});
+			if (compilation.outputOptions.trustedTypes) {
+				compilation.hooks.additionalModuleRuntimeRequirements.tap(
+					PLUGIN_NAME,
+					(module, set, context) => {
+						set.add(RuntimeGlobals.createScript);
+					}
+				);
 			}
-		);
+		});
 	}
 }
 
diff --git a/lib/ExportPropertyMainTemplatePlugin.js b/lib/ExportPropertyMainTemplatePlugin.js
deleted file mode 100644
index 90df031aabb..00000000000
--- a/lib/ExportPropertyMainTemplatePlugin.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { ConcatSource } = require("webpack-sources");
-
-/** @typedef {import("./Compilation")} Compilation */
-
-/**
- * @param {string[]} accessor the accessor to convert to path
- * @returns {string} the path
- */
-const accessorToObjectAccess = accessor => {
-	return accessor.map(a => `[${JSON.stringify(a)}]`).join("");
-};
-
-class ExportPropertyMainTemplatePlugin {
-	/**
-	 * @param {string|string[]} property the name of the property to export
-	 */
-	constructor(property) {
-		this.property = property;
-	}
-
-	/**
-	 * @param {Compilation} compilation the compilation instance
-	 * @returns {void}
-	 */
-	apply(compilation) {
-		const { mainTemplate, chunkTemplate } = compilation;
-
-		const onRenderWithEntry = (source, chunk, hash) => {
-			const postfix = `${accessorToObjectAccess([].concat(this.property))}`;
-			return new ConcatSource(source, postfix);
-		};
-
-		for (const template of [mainTemplate, chunkTemplate]) {
-			template.hooks.renderWithEntry.tap(
-				"ExportPropertyMainTemplatePlugin",
-				onRenderWithEntry
-			);
-		}
-
-		mainTemplate.hooks.hash.tap("ExportPropertyMainTemplatePlugin", hash => {
-			hash.update("export property");
-			hash.update(`${this.property}`);
-		});
-	}
-}
-
-module.exports = ExportPropertyMainTemplatePlugin;
diff --git a/lib/ExportsInfo.js b/lib/ExportsInfo.js
new file mode 100644
index 00000000000..fceb09a3ee1
--- /dev/null
+++ b/lib/ExportsInfo.js
@@ -0,0 +1,1663 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
+const { equals } = require("./util/ArrayHelpers");
+const SortableSet = require("./util/SortableSet");
+const makeSerializable = require("./util/makeSerializable");
+const { forEachRuntime } = require("./util/runtime");
+
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").RuntimeSpec} RuntimeSpec */
+/** @typedef {import("./Dependency").ExportInfoName} ExportInfoName */
+/** @typedef {import("./Dependency").ExportsSpecExcludeExports} ExportsSpecExcludeExports */
+/** @typedef {import("./dependencies/HarmonyImportDependency")} HarmonyImportDependency */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+
+/** @typedef {typeof UsageState.OnlyPropertiesUsed | typeof UsageState.NoInfo | typeof UsageState.Unknown | typeof UsageState.Used} RuntimeUsageStateType */
+/** @typedef {typeof UsageState.Unused | RuntimeUsageStateType} UsageStateType */
+
+/** @typedef {Map} UsedInRuntime */
+/** @typedef {{ module: Module, export: ExportInfoName[], deferred: boolean }} TargetItemWithoutConnection */
+/** @typedef {{ module: Module, connection: ModuleGraphConnection, export: ExportInfoName[] | undefined }} TargetItemWithConnection */
+/** @typedef {(target: TargetItemWithConnection) => boolean} ResolveTargetFilter */
+/** @typedef {(module: Module) => boolean} ValidTargetModuleFilter */
+/** @typedef {{ connection: ModuleGraphConnection, export: ExportInfoName[], priority: number }} TargetItem */
+/** @typedef {Map} Target */
+
+/** @typedef {string | null} ExportInfoUsedName */
+/** @typedef {boolean | null} ExportInfoProvided */
+
+/** @typedef {Map} Exports */
+/** @typedef {string | string[] | false} UsedName */
+/** @typedef {Set} AlreadyVisitedExportInfo */
+
+/**
+ * @typedef {object} RestoreProvidedDataExports
+ * @property {ExportInfoName} name
+ * @property {ExportInfo["provided"]} provided
+ * @property {ExportInfo["canMangleProvide"]} canMangleProvide
+ * @property {ExportInfo["terminalBinding"]} terminalBinding
+ * @property {RestoreProvidedData | undefined} exportsInfo
+ */
+
+const UsageState = Object.freeze({
+	Unused: /** @type {0} */ (0),
+	OnlyPropertiesUsed: /** @type {1} */ (1),
+	NoInfo: /** @type {2} */ (2),
+	Unknown: /** @type {3} */ (3),
+	Used: /** @type {4} */ (4)
+});
+
+const RETURNS_TRUE = () => true;
+
+const CIRCULAR = Symbol("circular target");
+
+class RestoreProvidedData {
+	/**
+	 * @param {RestoreProvidedDataExports[]} exports exports
+	 * @param {ExportInfo["provided"]} otherProvided other provided
+	 * @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
+	 * @param {ExportInfo["terminalBinding"]} otherTerminalBinding other terminal binding
+	 */
+	constructor(
+		exports,
+		otherProvided,
+		otherCanMangleProvide,
+		otherTerminalBinding
+	) {
+		this.exports = exports;
+		this.otherProvided = otherProvided;
+		this.otherCanMangleProvide = otherCanMangleProvide;
+		this.otherTerminalBinding = otherTerminalBinding;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write }) {
+		write(this.exports);
+		write(this.otherProvided);
+		write(this.otherCanMangleProvide);
+		write(this.otherTerminalBinding);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {RestoreProvidedData} RestoreProvidedData
+	 */
+	static deserialize({ read }) {
+		return new RestoreProvidedData(read(), read(), read(), read());
+	}
+}
+
+makeSerializable(
+	RestoreProvidedData,
+	"webpack/lib/ModuleGraph",
+	"RestoreProvidedData"
+);
+
+class ExportsInfo {
+	constructor() {
+		/** @type {Exports} */
+		this._exports = new Map();
+		/** @type {ExportInfo} */
+		this._otherExportsInfo = new ExportInfo(null);
+		/** @type {ExportInfo} */
+		this._sideEffectsOnlyInfo = new ExportInfo("*side effects only*");
+		/** @type {boolean} */
+		this._exportsAreOrdered = false;
+		/** @type {ExportsInfo=} */
+		this._redirectTo = undefined;
+	}
+
+	/**
+	 * @returns {Iterable} all owned exports in any order
+	 */
+	get ownedExports() {
+		return this._exports.values();
+	}
+
+	/**
+	 * @returns {Iterable} all owned exports in order
+	 */
+	get orderedOwnedExports() {
+		if (!this._exportsAreOrdered) {
+			this._sortExports();
+		}
+		return this._exports.values();
+	}
+
+	/**
+	 * @returns {Iterable} all exports in any order
+	 */
+	get exports() {
+		if (this._redirectTo !== undefined) {
+			const map = new Map(this._redirectTo._exports);
+			for (const [key, value] of this._exports) {
+				map.set(key, value);
+			}
+			return map.values();
+		}
+		return this._exports.values();
+	}
+
+	/**
+	 * @returns {Iterable} all exports in order
+	 */
+	get orderedExports() {
+		if (!this._exportsAreOrdered) {
+			this._sortExports();
+		}
+		if (this._redirectTo !== undefined) {
+			/** @type {Exports} */
+			const map = new Map(
+				Array.from(this._redirectTo.orderedExports, (item) => [item.name, item])
+			);
+			for (const [key, value] of this._exports) {
+				map.set(key, value);
+			}
+			// sorting should be pretty fast as map contains
+			// a lot of presorted items
+			this._sortExportsMap(map);
+			return map.values();
+		}
+		return this._exports.values();
+	}
+
+	/**
+	 * @returns {ExportInfo} the export info of unlisted exports
+	 */
+	get otherExportsInfo() {
+		if (this._redirectTo !== undefined) {
+			return this._redirectTo.otherExportsInfo;
+		}
+		return this._otherExportsInfo;
+	}
+
+	/**
+	 * @param {Exports} exports exports
+	 * @private
+	 */
+	_sortExportsMap(exports) {
+		if (exports.size > 1) {
+			/** @type {ExportInfoName[]} */
+			const namesInOrder = [];
+			for (const entry of exports.values()) {
+				namesInOrder.push(entry.name);
+			}
+			namesInOrder.sort();
+			let i = 0;
+			for (const entry of exports.values()) {
+				const name = namesInOrder[i];
+				if (entry.name !== name) break;
+				i++;
+			}
+			for (; i < namesInOrder.length; i++) {
+				const name = namesInOrder[i];
+				const correctEntry = /** @type {ExportInfo} */ (exports.get(name));
+				exports.delete(name);
+				exports.set(name, correctEntry);
+			}
+		}
+	}
+
+	_sortExports() {
+		this._sortExportsMap(this._exports);
+		this._exportsAreOrdered = true;
+	}
+
+	/**
+	 * @param {ExportsInfo | undefined} exportsInfo exports info
+	 * @returns {boolean} result
+	 */
+	setRedirectNamedTo(exportsInfo) {
+		if (this._redirectTo === exportsInfo) return false;
+		this._redirectTo = exportsInfo;
+		return true;
+	}
+
+	setHasProvideInfo() {
+		for (const exportInfo of this._exports.values()) {
+			if (exportInfo.provided === undefined) {
+				exportInfo.provided = false;
+			}
+			if (exportInfo.canMangleProvide === undefined) {
+				exportInfo.canMangleProvide = true;
+			}
+		}
+		if (this._redirectTo !== undefined) {
+			this._redirectTo.setHasProvideInfo();
+		} else {
+			if (this._otherExportsInfo.provided === undefined) {
+				this._otherExportsInfo.provided = false;
+			}
+			if (this._otherExportsInfo.canMangleProvide === undefined) {
+				this._otherExportsInfo.canMangleProvide = true;
+			}
+		}
+	}
+
+	setHasUseInfo() {
+		for (const exportInfo of this._exports.values()) {
+			exportInfo.setHasUseInfo();
+		}
+		this._sideEffectsOnlyInfo.setHasUseInfo();
+		if (this._redirectTo !== undefined) {
+			this._redirectTo.setHasUseInfo();
+		} else {
+			this._otherExportsInfo.setHasUseInfo();
+		}
+	}
+
+	/**
+	 * @param {ExportInfoName} name export name
+	 * @returns {ExportInfo} export info for this name
+	 */
+	getOwnExportInfo(name) {
+		const info = this._exports.get(name);
+		if (info !== undefined) return info;
+		const newInfo = new ExportInfo(name, this._otherExportsInfo);
+		this._exports.set(name, newInfo);
+		this._exportsAreOrdered = false;
+		return newInfo;
+	}
+
+	/**
+	 * @param {ExportInfoName} name export name
+	 * @returns {ExportInfo} export info for this name
+	 */
+	getExportInfo(name) {
+		const info = this._exports.get(name);
+		if (info !== undefined) return info;
+		if (this._redirectTo !== undefined) {
+			return this._redirectTo.getExportInfo(name);
+		}
+		const newInfo = new ExportInfo(name, this._otherExportsInfo);
+		this._exports.set(name, newInfo);
+		this._exportsAreOrdered = false;
+		return newInfo;
+	}
+
+	/**
+	 * @param {ExportInfoName} name export name
+	 * @returns {ExportInfo} export info for this name
+	 */
+	getReadOnlyExportInfo(name) {
+		const info = this._exports.get(name);
+		if (info !== undefined) return info;
+		if (this._redirectTo !== undefined) {
+			return this._redirectTo.getReadOnlyExportInfo(name);
+		}
+		return this._otherExportsInfo;
+	}
+
+	/**
+	 * @param {ExportInfoName[]} name export name
+	 * @returns {ExportInfo | undefined} export info for this name
+	 */
+	getReadOnlyExportInfoRecursive(name) {
+		const exportInfo = this.getReadOnlyExportInfo(name[0]);
+		if (name.length === 1) return exportInfo;
+		if (!exportInfo.exportsInfo) return;
+		return exportInfo.exportsInfo.getReadOnlyExportInfoRecursive(name.slice(1));
+	}
+
+	/**
+	 * @param {ExportInfoName[]=} name the export name
+	 * @returns {ExportsInfo | undefined} the nested exports info
+	 */
+	getNestedExportsInfo(name) {
+		if (Array.isArray(name) && name.length > 0) {
+			const info = this.getReadOnlyExportInfo(name[0]);
+			if (!info.exportsInfo) return;
+			return info.exportsInfo.getNestedExportsInfo(name.slice(1));
+		}
+		return this;
+	}
+
+	/**
+	 * @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
+	 * @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
+	 * @param {Dependency=} targetKey use this as key for the target
+	 * @param {ModuleGraphConnection=} targetModule set this module as target
+	 * @param {number=} priority priority
+	 * @returns {boolean} true, if this call changed something
+	 */
+	setUnknownExportsProvided(
+		canMangle,
+		excludeExports,
+		targetKey,
+		targetModule,
+		priority
+	) {
+		let changed = false;
+		if (excludeExports) {
+			for (const name of excludeExports) {
+				// Make sure these entries exist, so they can get different info
+				this.getExportInfo(name);
+			}
+		}
+		for (const exportInfo of this._exports.values()) {
+			if (!canMangle && exportInfo.canMangleProvide !== false) {
+				exportInfo.canMangleProvide = false;
+				changed = true;
+			}
+			if (excludeExports && excludeExports.has(exportInfo.name)) continue;
+			if (exportInfo.provided !== true && exportInfo.provided !== null) {
+				exportInfo.provided = null;
+				changed = true;
+			}
+			if (targetKey) {
+				exportInfo.setTarget(
+					targetKey,
+					/** @type {ModuleGraphConnection} */
+					(targetModule),
+					[exportInfo.name],
+					-1
+				);
+			}
+		}
+		if (this._redirectTo !== undefined) {
+			if (
+				this._redirectTo.setUnknownExportsProvided(
+					canMangle,
+					excludeExports,
+					targetKey,
+					targetModule,
+					priority
+				)
+			) {
+				changed = true;
+			}
+		} else {
+			if (
+				this._otherExportsInfo.provided !== true &&
+				this._otherExportsInfo.provided !== null
+			) {
+				this._otherExportsInfo.provided = null;
+				changed = true;
+			}
+			if (!canMangle && this._otherExportsInfo.canMangleProvide !== false) {
+				this._otherExportsInfo.canMangleProvide = false;
+				changed = true;
+			}
+			if (targetKey) {
+				this._otherExportsInfo.setTarget(
+					targetKey,
+					/** @type {ModuleGraphConnection} */ (targetModule),
+					undefined,
+					priority
+				);
+			}
+		}
+		return changed;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, when something changed
+	 */
+	setUsedInUnknownWay(runtime) {
+		let changed = false;
+		for (const exportInfo of this._exports.values()) {
+			if (exportInfo.setUsedInUnknownWay(runtime)) {
+				changed = true;
+			}
+		}
+		if (this._redirectTo !== undefined) {
+			if (this._redirectTo.setUsedInUnknownWay(runtime)) {
+				changed = true;
+			}
+		} else {
+			if (
+				this._otherExportsInfo.setUsedConditionally(
+					(used) => used < UsageState.Unknown,
+					UsageState.Unknown,
+					runtime
+				)
+			) {
+				changed = true;
+			}
+			if (this._otherExportsInfo.canMangleUse !== false) {
+				this._otherExportsInfo.canMangleUse = false;
+				changed = true;
+			}
+		}
+		return changed;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, when something changed
+	 */
+	setUsedWithoutInfo(runtime) {
+		let changed = false;
+		for (const exportInfo of this._exports.values()) {
+			if (exportInfo.setUsedWithoutInfo(runtime)) {
+				changed = true;
+			}
+		}
+		if (this._redirectTo !== undefined) {
+			if (this._redirectTo.setUsedWithoutInfo(runtime)) {
+				changed = true;
+			}
+		} else {
+			if (this._otherExportsInfo.setUsed(UsageState.NoInfo, runtime)) {
+				changed = true;
+			}
+			if (this._otherExportsInfo.canMangleUse !== false) {
+				this._otherExportsInfo.canMangleUse = false;
+				changed = true;
+			}
+		}
+		return changed;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, when something changed
+	 */
+	setAllKnownExportsUsed(runtime) {
+		let changed = false;
+		for (const exportInfo of this._exports.values()) {
+			if (!exportInfo.provided) continue;
+			if (exportInfo.setUsed(UsageState.Used, runtime)) {
+				changed = true;
+			}
+		}
+		return changed;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, when something changed
+	 */
+	setUsedForSideEffectsOnly(runtime) {
+		return this._sideEffectsOnlyInfo.setUsedConditionally(
+			(used) => used === UsageState.Unused,
+			UsageState.Used,
+			runtime
+		);
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, when the module exports are used in any way
+	 */
+	isUsed(runtime) {
+		if (this._redirectTo !== undefined) {
+			if (this._redirectTo.isUsed(runtime)) {
+				return true;
+			}
+		} else if (this._otherExportsInfo.getUsed(runtime) !== UsageState.Unused) {
+			return true;
+		}
+		for (const exportInfo of this._exports.values()) {
+			if (exportInfo.getUsed(runtime) !== UsageState.Unused) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, when the module is used in any way
+	 */
+	isModuleUsed(runtime) {
+		if (this.isUsed(runtime)) return true;
+		if (this._sideEffectsOnlyInfo.getUsed(runtime) !== UsageState.Unused) {
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {SortableSet | boolean | null} set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown)
+	 */
+	getUsedExports(runtime) {
+		switch (this._otherExportsInfo.getUsed(runtime)) {
+			case UsageState.NoInfo:
+				return null;
+			case UsageState.Unknown:
+			case UsageState.OnlyPropertiesUsed:
+			case UsageState.Used:
+				return true;
+		}
+
+		/** @type {ExportInfoName[]} */
+		const array = [];
+		if (!this._exportsAreOrdered) this._sortExports();
+		for (const exportInfo of this._exports.values()) {
+			switch (exportInfo.getUsed(runtime)) {
+				case UsageState.NoInfo:
+					return null;
+				case UsageState.Unknown:
+					return true;
+				case UsageState.OnlyPropertiesUsed:
+				case UsageState.Used:
+					array.push(exportInfo.name);
+			}
+		}
+		if (this._redirectTo !== undefined) {
+			const inner = this._redirectTo.getUsedExports(runtime);
+			if (inner === null) return null;
+			if (inner === true) return true;
+			if (inner !== false) {
+				for (const item of inner) {
+					array.push(item);
+				}
+			}
+		}
+		if (array.length === 0) {
+			switch (this._sideEffectsOnlyInfo.getUsed(runtime)) {
+				case UsageState.NoInfo:
+					return null;
+				case UsageState.Unused:
+					return false;
+			}
+		}
+		return /** @type {SortableSet} */ (new SortableSet(array));
+	}
+
+	/**
+	 * @returns {null | true | ExportInfoName[]} list of exports when known
+	 */
+	getProvidedExports() {
+		switch (this._otherExportsInfo.provided) {
+			case undefined:
+				return null;
+			case null:
+				return true;
+			case true:
+				return true;
+		}
+
+		/** @type {ExportInfoName[]} */
+		const array = [];
+		if (!this._exportsAreOrdered) this._sortExports();
+		for (const exportInfo of this._exports.values()) {
+			switch (exportInfo.provided) {
+				case undefined:
+					return null;
+				case null:
+					return true;
+				case true:
+					array.push(exportInfo.name);
+			}
+		}
+		if (this._redirectTo !== undefined) {
+			const inner = this._redirectTo.getProvidedExports();
+			if (inner === null) return null;
+			if (inner === true) return true;
+			for (const item of inner) {
+				if (!array.includes(item)) {
+					array.push(item);
+				}
+			}
+		}
+		return array;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {ExportInfo[]} exports that are relevant (not unused and potential provided)
+	 */
+	getRelevantExports(runtime) {
+		/** @type {ExportInfo[]} */
+		const list = [];
+		for (const exportInfo of this._exports.values()) {
+			const used = exportInfo.getUsed(runtime);
+			if (used === UsageState.Unused) continue;
+			if (exportInfo.provided === false) continue;
+			list.push(exportInfo);
+		}
+		if (this._redirectTo !== undefined) {
+			for (const exportInfo of this._redirectTo.getRelevantExports(runtime)) {
+				if (!this._exports.has(exportInfo.name)) list.push(exportInfo);
+			}
+		}
+		if (
+			this._otherExportsInfo.provided !== false &&
+			this._otherExportsInfo.getUsed(runtime) !== UsageState.Unused
+		) {
+			list.push(this._otherExportsInfo);
+		}
+		return list;
+	}
+
+	/**
+	 * @param {ExportInfoName | ExportInfoName[]} name the name of the export
+	 * @returns {boolean | undefined | null} if the export is provided
+	 */
+	isExportProvided(name) {
+		if (Array.isArray(name)) {
+			const info = this.getReadOnlyExportInfo(name[0]);
+			if (info.exportsInfo && name.length > 1) {
+				return info.exportsInfo.isExportProvided(name.slice(1));
+			}
+			return info.provided ? name.length === 1 || undefined : info.provided;
+		}
+		const info = this.getReadOnlyExportInfo(name);
+		return info.provided;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime runtime
+	 * @returns {string} key representing the usage
+	 */
+	getUsageKey(runtime) {
+		/** @type {(string | number)[]} */
+		const key = [];
+		if (this._redirectTo !== undefined) {
+			key.push(this._redirectTo.getUsageKey(runtime));
+		} else {
+			key.push(this._otherExportsInfo.getUsed(runtime));
+		}
+		key.push(this._sideEffectsOnlyInfo.getUsed(runtime));
+		for (const exportInfo of this.orderedOwnedExports) {
+			key.push(exportInfo.getUsed(runtime));
+		}
+		return key.join("|");
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtimeA first runtime
+	 * @param {RuntimeSpec} runtimeB second runtime
+	 * @returns {boolean} true, when equally used
+	 */
+	isEquallyUsed(runtimeA, runtimeB) {
+		if (this._redirectTo !== undefined) {
+			if (!this._redirectTo.isEquallyUsed(runtimeA, runtimeB)) return false;
+		} else if (
+			this._otherExportsInfo.getUsed(runtimeA) !==
+			this._otherExportsInfo.getUsed(runtimeB)
+		) {
+			return false;
+		}
+		if (
+			this._sideEffectsOnlyInfo.getUsed(runtimeA) !==
+			this._sideEffectsOnlyInfo.getUsed(runtimeB)
+		) {
+			return false;
+		}
+		for (const exportInfo of this.ownedExports) {
+			if (exportInfo.getUsed(runtimeA) !== exportInfo.getUsed(runtimeB)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * @param {ExportInfoName | ExportInfoName[]} name export name
+	 * @param {RuntimeSpec} runtime check usage for this runtime only
+	 * @returns {UsageStateType} usage status
+	 */
+	getUsed(name, runtime) {
+		if (Array.isArray(name)) {
+			if (name.length === 0) return this.otherExportsInfo.getUsed(runtime);
+			const info = this.getReadOnlyExportInfo(name[0]);
+			if (info.exportsInfo && name.length > 1) {
+				return info.exportsInfo.getUsed(name.slice(1), runtime);
+			}
+			return info.getUsed(runtime);
+		}
+		const info = this.getReadOnlyExportInfo(name);
+		return info.getUsed(runtime);
+	}
+
+	/**
+	 * @param {ExportInfoName | ExportInfoName[]} name the export name
+	 * @param {RuntimeSpec} runtime check usage for this runtime only
+	 * @returns {UsedName} the used name
+	 */
+	getUsedName(name, runtime) {
+		if (Array.isArray(name)) {
+			// TODO improve this
+			if (name.length === 0) {
+				if (!this.isUsed(runtime)) return false;
+				return name;
+			}
+			const info = this.getReadOnlyExportInfo(name[0]);
+			const x = info.getUsedName(name[0], runtime);
+			if (x === false) return false;
+			const arr =
+				/** @type {ExportInfoName[]} */
+				(x === name[0] && name.length === 1 ? name : [x]);
+			if (name.length === 1) {
+				return arr;
+			}
+			if (
+				info.exportsInfo &&
+				info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
+			) {
+				const nested = info.exportsInfo.getUsedName(name.slice(1), runtime);
+				if (!nested) return false;
+				return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
+			}
+			return [...arr, ...name.slice(1)];
+		}
+		const info = this.getReadOnlyExportInfo(name);
+		const usedName = info.getUsedName(name, runtime);
+		return usedName;
+	}
+
+	/**
+	 * @param {Hash} hash the hash
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {void}
+	 */
+	updateHash(hash, runtime) {
+		this._updateHash(hash, runtime, new Set());
+	}
+
+	/**
+	 * @param {Hash} hash the hash
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {Set} alreadyVisitedExportsInfo for circular references
+	 * @returns {void}
+	 */
+	_updateHash(hash, runtime, alreadyVisitedExportsInfo) {
+		const set = new Set(alreadyVisitedExportsInfo);
+		set.add(this);
+		for (const exportInfo of this.orderedExports) {
+			if (exportInfo.hasInfo(this._otherExportsInfo, runtime)) {
+				exportInfo._updateHash(hash, runtime, set);
+			}
+		}
+		this._sideEffectsOnlyInfo._updateHash(hash, runtime, set);
+		this._otherExportsInfo._updateHash(hash, runtime, set);
+		if (this._redirectTo !== undefined) {
+			this._redirectTo._updateHash(hash, runtime, set);
+		}
+	}
+
+	/**
+	 * @returns {RestoreProvidedData} restore provided data
+	 */
+	getRestoreProvidedData() {
+		const otherProvided = this._otherExportsInfo.provided;
+		const otherCanMangleProvide = this._otherExportsInfo.canMangleProvide;
+		const otherTerminalBinding = this._otherExportsInfo.terminalBinding;
+		/** @type {RestoreProvidedDataExports[]} */
+		const exports = [];
+		for (const exportInfo of this.orderedExports) {
+			if (
+				exportInfo.provided !== otherProvided ||
+				exportInfo.canMangleProvide !== otherCanMangleProvide ||
+				exportInfo.terminalBinding !== otherTerminalBinding ||
+				exportInfo.exportsInfoOwned
+			) {
+				exports.push({
+					name: exportInfo.name,
+					provided: exportInfo.provided,
+					canMangleProvide: exportInfo.canMangleProvide,
+					terminalBinding: exportInfo.terminalBinding,
+					exportsInfo: exportInfo.exportsInfoOwned
+						? /** @type {NonNullable} */
+							(exportInfo.exportsInfo).getRestoreProvidedData()
+						: undefined
+				});
+			}
+		}
+		return new RestoreProvidedData(
+			exports,
+			otherProvided,
+			otherCanMangleProvide,
+			otherTerminalBinding
+		);
+	}
+
+	/**
+	 * @param {RestoreProvidedData} data data
+	 */
+	restoreProvided({
+		otherProvided,
+		otherCanMangleProvide,
+		otherTerminalBinding,
+		exports
+	}) {
+		let wasEmpty = true;
+		for (const exportInfo of this._exports.values()) {
+			wasEmpty = false;
+			exportInfo.provided = otherProvided;
+			exportInfo.canMangleProvide = otherCanMangleProvide;
+			exportInfo.terminalBinding = otherTerminalBinding;
+		}
+		this._otherExportsInfo.provided = otherProvided;
+		this._otherExportsInfo.canMangleProvide = otherCanMangleProvide;
+		this._otherExportsInfo.terminalBinding = otherTerminalBinding;
+		for (const exp of exports) {
+			const exportInfo = this.getExportInfo(exp.name);
+			exportInfo.provided = exp.provided;
+			exportInfo.canMangleProvide = exp.canMangleProvide;
+			exportInfo.terminalBinding = exp.terminalBinding;
+			if (exp.exportsInfo) {
+				const exportsInfo = exportInfo.createNestedExportsInfo();
+				exportsInfo.restoreProvided(exp.exportsInfo);
+			}
+		}
+		if (wasEmpty) this._exportsAreOrdered = true;
+	}
+}
+
+class ExportInfo {
+	/**
+	 * @param {ExportInfoName | null} name the original name of the export
+	 * @param {ExportInfo=} initFrom init values from this ExportInfo
+	 */
+	constructor(name, initFrom) {
+		/** @type {ExportInfoName} */
+		this.name = /** @type {ExportInfoName} */ (name);
+		/**
+		 * @private
+		 * @type {ExportInfoUsedName}
+		 */
+		this._usedName = initFrom ? initFrom._usedName : null;
+		/**
+		 * @private
+		 * @type {UsageStateType | undefined}
+		 */
+		this._globalUsed = initFrom ? initFrom._globalUsed : undefined;
+		/**
+		 * @private
+		 * @type {UsedInRuntime | undefined}
+		 */
+		this._usedInRuntime =
+			initFrom && initFrom._usedInRuntime
+				? new Map(initFrom._usedInRuntime)
+				: undefined;
+		/**
+		 * @private
+		 * @type {boolean}
+		 */
+		this._hasUseInRuntimeInfo = initFrom
+			? initFrom._hasUseInRuntimeInfo
+			: false;
+		/**
+		 * true: it is provided
+		 * false: it is not provided
+		 * null: only the runtime knows if it is provided
+		 * undefined: it was not determined if it is provided
+		 * @type {ExportInfoProvided | undefined}
+		 */
+		this.provided = initFrom ? initFrom.provided : undefined;
+		/**
+		 * is the export a terminal binding that should be checked for export star conflicts
+		 * @type {boolean}
+		 */
+		this.terminalBinding = initFrom ? initFrom.terminalBinding : false;
+		/**
+		 * true: it can be mangled
+		 * false: is can not be mangled
+		 * undefined: it was not determined if it can be mangled
+		 * @type {boolean | undefined}
+		 */
+		this.canMangleProvide = initFrom ? initFrom.canMangleProvide : undefined;
+		/**
+		 * true: it can be mangled
+		 * false: is can not be mangled
+		 * undefined: it was not determined if it can be mangled
+		 * @type {boolean | undefined}
+		 */
+		this.canMangleUse = initFrom ? initFrom.canMangleUse : undefined;
+		/** @type {boolean} */
+		this.exportsInfoOwned = false;
+		/** @type {ExportsInfo | undefined} */
+		this.exportsInfo = undefined;
+		/** @type {Target | undefined} */
+		this._target = undefined;
+		if (initFrom && initFrom._target) {
+			this._target = /** @type {Target} */ (new Map());
+			for (const [key, value] of initFrom._target) {
+				this._target.set(key, {
+					connection: value.connection,
+					export: value.export || [name],
+					priority: value.priority
+				});
+			}
+		}
+		/** @type {Target | undefined} */
+		this._maxTarget = undefined;
+	}
+
+	get canMangle() {
+		switch (this.canMangleProvide) {
+			case undefined:
+				return this.canMangleUse === false ? false : undefined;
+			case false:
+				return false;
+			case true:
+				switch (this.canMangleUse) {
+					case undefined:
+						return undefined;
+					case false:
+						return false;
+					case true:
+						return true;
+				}
+		}
+		throw new Error(
+			`Unexpected flags for canMangle ${this.canMangleProvide} ${this.canMangleUse}`
+		);
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime only apply to this runtime
+	 * @returns {boolean} true, when something changed
+	 */
+	setUsedInUnknownWay(runtime) {
+		let changed = false;
+		if (
+			this.setUsedConditionally(
+				(used) => used < UsageState.Unknown,
+				UsageState.Unknown,
+				runtime
+			)
+		) {
+			changed = true;
+		}
+		if (this.canMangleUse !== false) {
+			this.canMangleUse = false;
+			changed = true;
+		}
+		return changed;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime only apply to this runtime
+	 * @returns {boolean} true, when something changed
+	 */
+	setUsedWithoutInfo(runtime) {
+		let changed = false;
+		if (this.setUsed(UsageState.NoInfo, runtime)) {
+			changed = true;
+		}
+		if (this.canMangleUse !== false) {
+			this.canMangleUse = false;
+			changed = true;
+		}
+		return changed;
+	}
+
+	setHasUseInfo() {
+		if (!this._hasUseInRuntimeInfo) {
+			this._hasUseInRuntimeInfo = true;
+		}
+		if (this.canMangleUse === undefined) {
+			this.canMangleUse = true;
+		}
+		if (this.exportsInfoOwned) {
+			/** @type {ExportsInfo} */
+			(this.exportsInfo).setHasUseInfo();
+		}
+	}
+
+	/**
+	 * @param {(condition: UsageStateType) => boolean} condition compare with old value
+	 * @param {UsageStateType} newValue set when condition is true
+	 * @param {RuntimeSpec} runtime only apply to this runtime
+	 * @returns {boolean} true when something has changed
+	 */
+	setUsedConditionally(condition, newValue, runtime) {
+		if (runtime === undefined) {
+			if (this._globalUsed === undefined) {
+				this._globalUsed = newValue;
+				return true;
+			}
+			if (this._globalUsed !== newValue && condition(this._globalUsed)) {
+				this._globalUsed = newValue;
+				return true;
+			}
+		} else if (this._usedInRuntime === undefined) {
+			if (newValue !== UsageState.Unused && condition(UsageState.Unused)) {
+				this._usedInRuntime = new Map();
+				forEachRuntime(runtime, (runtime) =>
+					/** @type {UsedInRuntime} */
+					(this._usedInRuntime).set(/** @type {string} */ (runtime), newValue)
+				);
+				return true;
+			}
+		} else {
+			let changed = false;
+			forEachRuntime(runtime, (runtime_) => {
+				const runtime = /** @type {string} */ (runtime_);
+				const usedInRuntime =
+					/** @type {UsedInRuntime} */
+					(this._usedInRuntime);
+				let oldValue =
+					/** @type {UsageStateType} */
+					(usedInRuntime.get(runtime));
+				if (oldValue === undefined) oldValue = UsageState.Unused;
+				if (newValue !== oldValue && condition(oldValue)) {
+					if (newValue === UsageState.Unused) {
+						usedInRuntime.delete(runtime);
+					} else {
+						usedInRuntime.set(runtime, newValue);
+					}
+					changed = true;
+				}
+			});
+			if (changed) {
+				if (this._usedInRuntime.size === 0) this._usedInRuntime = undefined;
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param {UsageStateType} newValue new value of the used state
+	 * @param {RuntimeSpec} runtime only apply to this runtime
+	 * @returns {boolean} true when something has changed
+	 */
+	setUsed(newValue, runtime) {
+		if (runtime === undefined) {
+			if (this._globalUsed !== newValue) {
+				this._globalUsed = newValue;
+				return true;
+			}
+		} else if (this._usedInRuntime === undefined) {
+			if (newValue !== UsageState.Unused) {
+				this._usedInRuntime = new Map();
+				forEachRuntime(runtime, (runtime) =>
+					/** @type {UsedInRuntime} */
+					(this._usedInRuntime).set(/** @type {string} */ (runtime), newValue)
+				);
+				return true;
+			}
+		} else {
+			let changed = false;
+			forEachRuntime(runtime, (_runtime) => {
+				const runtime = /** @type {string} */ (_runtime);
+				const usedInRuntime =
+					/** @type {UsedInRuntime} */
+					(this._usedInRuntime);
+				let oldValue =
+					/** @type {UsageStateType} */
+					(usedInRuntime.get(runtime));
+				if (oldValue === undefined) oldValue = UsageState.Unused;
+				if (newValue !== oldValue) {
+					if (newValue === UsageState.Unused) {
+						usedInRuntime.delete(runtime);
+					} else {
+						usedInRuntime.set(runtime, newValue);
+					}
+					changed = true;
+				}
+			});
+			if (changed) {
+				if (this._usedInRuntime.size === 0) this._usedInRuntime = undefined;
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Dependency} key the key
+	 * @returns {boolean} true, if something has changed
+	 */
+	unsetTarget(key) {
+		if (!this._target) return false;
+		if (this._target.delete(key)) {
+			this._maxTarget = undefined;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Dependency} key the key
+	 * @param {ModuleGraphConnection} connection the target module if a single one
+	 * @param {ExportInfoName[] | null=} exportName the exported name
+	 * @param {number=} priority priority
+	 * @returns {boolean} true, if something has changed
+	 */
+	setTarget(key, connection, exportName, priority = 0) {
+		if (exportName) exportName = [...exportName];
+		if (!this._target) {
+			this._target = /** @type {Target} */ (new Map());
+			this._target.set(key, {
+				connection,
+				export: /** @type {ExportInfoName[]} */ (exportName),
+				priority
+			});
+			return true;
+		}
+		const oldTarget = this._target.get(key);
+		if (!oldTarget) {
+			if (oldTarget === null && !connection) return false;
+			this._target.set(key, {
+				connection,
+				export: /** @type {ExportInfoName[]} */ (exportName),
+				priority
+			});
+			this._maxTarget = undefined;
+			return true;
+		}
+		if (
+			oldTarget.connection !== connection ||
+			oldTarget.priority !== priority ||
+			(exportName
+				? !oldTarget.export || !equals(oldTarget.export, exportName)
+				: oldTarget.export)
+		) {
+			oldTarget.connection = connection;
+			oldTarget.export = /** @type {ExportInfoName[]} */ (exportName);
+			oldTarget.priority = priority;
+			this._maxTarget = undefined;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime for this runtime
+	 * @returns {UsageStateType} usage state
+	 */
+	getUsed(runtime) {
+		if (!this._hasUseInRuntimeInfo) return UsageState.NoInfo;
+		if (this._globalUsed !== undefined) return this._globalUsed;
+		if (this._usedInRuntime === undefined) {
+			return UsageState.Unused;
+		} else if (typeof runtime === "string") {
+			const value = this._usedInRuntime.get(runtime);
+			return value === undefined ? UsageState.Unused : value;
+		} else if (runtime === undefined) {
+			/** @type {UsageStateType} */
+			let max = UsageState.Unused;
+			for (const value of this._usedInRuntime.values()) {
+				if (value === UsageState.Used) {
+					return UsageState.Used;
+				}
+				if (max < value) max = value;
+			}
+			return max;
+		}
+
+		/** @type {UsageStateType} */
+		let max = UsageState.Unused;
+		for (const item of runtime) {
+			const value = this._usedInRuntime.get(item);
+			if (value !== undefined) {
+				if (value === UsageState.Used) {
+					return UsageState.Used;
+				}
+				if (max < value) max = value;
+			}
+		}
+		return max;
+	}
+
+	/**
+	 * get used name
+	 * @param {string | undefined} fallbackName fallback name for used exports with no name
+	 * @param {RuntimeSpec} runtime check usage for this runtime only
+	 * @returns {string | false} used name
+	 */
+	getUsedName(fallbackName, runtime) {
+		if (this._hasUseInRuntimeInfo) {
+			if (this._globalUsed !== undefined) {
+				if (this._globalUsed === UsageState.Unused) return false;
+			} else {
+				if (this._usedInRuntime === undefined) return false;
+				if (typeof runtime === "string") {
+					if (!this._usedInRuntime.has(runtime)) {
+						return false;
+					}
+				} else if (
+					runtime !== undefined &&
+					[...runtime].every(
+						(runtime) =>
+							!(/** @type {UsedInRuntime} */ (this._usedInRuntime).has(runtime))
+					)
+				) {
+					return false;
+				}
+			}
+		}
+		if (this._usedName !== null) return this._usedName;
+		return /** @type {string | false} */ (this.name || fallbackName);
+	}
+
+	/**
+	 * @returns {boolean} true, when a mangled name of this export is set
+	 */
+	hasUsedName() {
+		return this._usedName !== null;
+	}
+
+	/**
+	 * Sets the mangled name of this export
+	 * @param {string} name the new name
+	 * @returns {void}
+	 */
+	setUsedName(name) {
+		this._usedName = name;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
+	 * @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
+	 */
+	getTerminalBinding(moduleGraph, resolveTargetFilter = RETURNS_TRUE) {
+		if (this.terminalBinding) return this;
+		const target = this.getTarget(moduleGraph, resolveTargetFilter);
+		if (!target) return;
+		const exportsInfo = moduleGraph.getExportsInfo(target.module);
+		if (!target.export) return exportsInfo;
+		return exportsInfo.getReadOnlyExportInfoRecursive(target.export);
+	}
+
+	isReexport() {
+		return !this.terminalBinding && this._target && this._target.size > 0;
+	}
+
+	_getMaxTarget() {
+		if (this._maxTarget !== undefined) return this._maxTarget;
+		if (/** @type {Target} */ (this._target).size <= 1) {
+			return (this._maxTarget = this._target);
+		}
+		let maxPriority = -Infinity;
+		let minPriority = Infinity;
+		for (const { priority } of /** @type {Target} */ (this._target).values()) {
+			if (maxPriority < priority) maxPriority = priority;
+			if (minPriority > priority) minPriority = priority;
+		}
+		// This should be very common
+		if (maxPriority === minPriority) return (this._maxTarget = this._target);
+
+		// This is an edge case
+		/** @type {Target} */
+		const map = new Map();
+		for (const [key, value] of /** @type {Target} */ (this._target)) {
+			if (maxPriority === value.priority) {
+				map.set(key, value);
+			}
+		}
+		this._maxTarget = map;
+		return map;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
+	 * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
+	 */
+	findTarget(moduleGraph, validTargetModuleFilter) {
+		return this._findTarget(moduleGraph, validTargetModuleFilter, new Set());
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
+	 * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
+	 * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
+	 */
+	_findTarget(moduleGraph, validTargetModuleFilter, alreadyVisited) {
+		if (!this._target || this._target.size === 0) return;
+		const rawTarget =
+			/** @type {Target} */
+			(this._getMaxTarget()).values().next().value;
+		if (!rawTarget) return;
+		/** @type {TargetItemWithoutConnection} */
+		let target = {
+			module: rawTarget.connection.module,
+			export: rawTarget.export,
+			deferred: Boolean(
+				rawTarget.connection.dependency &&
+				ImportPhaseUtils.isDefer(
+					/** @type {HarmonyImportDependency} */ (
+						rawTarget.connection.dependency
+					).phase
+				)
+			)
+		};
+		for (;;) {
+			if (validTargetModuleFilter(target.module)) return target;
+			const exportsInfo = moduleGraph.getExportsInfo(target.module);
+			const exportInfo = exportsInfo.getExportInfo(target.export[0]);
+			if (alreadyVisited.has(exportInfo)) return null;
+			const newTarget = exportInfo._findTarget(
+				moduleGraph,
+				validTargetModuleFilter,
+				alreadyVisited
+			);
+			if (!newTarget) return false;
+			if (target.export.length === 1) {
+				target = newTarget;
+			} else {
+				target = {
+					module: newTarget.module,
+					export: newTarget.export
+						? [...newTarget.export, ...target.export.slice(1)]
+						: target.export.slice(1),
+					deferred: newTarget.deferred
+				};
+			}
+		}
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
+	 * @returns {TargetItemWithConnection | undefined} the target
+	 */
+	getTarget(moduleGraph, resolveTargetFilter = RETURNS_TRUE) {
+		const result = this._getTarget(moduleGraph, resolveTargetFilter, undefined);
+		if (result === CIRCULAR) return;
+		return result;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
+	 * @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
+	 * @returns {TargetItemWithConnection | CIRCULAR | undefined} the target
+	 */
+	_getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
+		/**
+		 * @param {TargetItem | undefined | null} inputTarget unresolved target
+		 * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
+		 * @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
+		 */
+		const resolveTarget = (inputTarget, alreadyVisited) => {
+			if (!inputTarget) return null;
+			if (!inputTarget.export) {
+				return {
+					module: inputTarget.connection.module,
+					connection: inputTarget.connection,
+					export: undefined
+				};
+			}
+			/** @type {TargetItemWithConnection} */
+			let target = {
+				module: inputTarget.connection.module,
+				connection: inputTarget.connection,
+				export: inputTarget.export
+			};
+			if (!resolveTargetFilter(target)) return target;
+			let alreadyVisitedOwned = false;
+			for (;;) {
+				const exportsInfo = moduleGraph.getExportsInfo(target.module);
+				const exportInfo = exportsInfo.getExportInfo(
+					/** @type {NonNullable} */
+					(target.export)[0]
+				);
+				if (!exportInfo) return target;
+				if (alreadyVisited.has(exportInfo)) return CIRCULAR;
+				const newTarget = exportInfo._getTarget(
+					moduleGraph,
+					resolveTargetFilter,
+					alreadyVisited
+				);
+				if (newTarget === CIRCULAR) return CIRCULAR;
+				if (!newTarget) return target;
+				if (
+					/** @type {NonNullable} */
+					(target.export).length === 1
+				) {
+					target = newTarget;
+					if (!target.export) return target;
+				} else {
+					target = {
+						module: newTarget.module,
+						connection: newTarget.connection,
+						export: newTarget.export
+							? [
+									...newTarget.export,
+									.../** @type {NonNullable} */
+									(target.export).slice(1)
+								]
+							: /** @type {NonNullable} */
+								(target.export).slice(1)
+					};
+				}
+				if (!resolveTargetFilter(target)) return target;
+				if (!alreadyVisitedOwned) {
+					alreadyVisited = new Set(alreadyVisited);
+					alreadyVisitedOwned = true;
+				}
+				alreadyVisited.add(exportInfo);
+			}
+		};
+
+		if (!this._target || this._target.size === 0) return;
+		if (alreadyVisited && alreadyVisited.has(this)) return CIRCULAR;
+		const newAlreadyVisited = new Set(alreadyVisited);
+		newAlreadyVisited.add(this);
+		const values = /** @type {Target} */ (this._getMaxTarget()).values();
+		const target = resolveTarget(values.next().value, newAlreadyVisited);
+		if (target === CIRCULAR) return CIRCULAR;
+		if (target === null) return;
+		let result = values.next();
+		while (!result.done) {
+			const t = resolveTarget(result.value, newAlreadyVisited);
+			if (t === CIRCULAR) return CIRCULAR;
+			if (t === null) return;
+			if (t.module !== target.module) return;
+			if (!t.export !== !target.export) return;
+			if (
+				target.export &&
+				!equals(/** @type {ArrayLike} */ (t.export), target.export)
+			) {
+				return;
+			}
+			result = values.next();
+		}
+		return target;
+	}
+
+	/**
+	 * Move the target forward as long resolveTargetFilter is fulfilled
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
+	 * @param {(target: TargetItemWithConnection) => ModuleGraphConnection=} updateOriginalConnection updates the original connection instead of using the target connection
+	 * @returns {TargetItemWithConnection | undefined} the resolved target when moved
+	 */
+	moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
+		const target = this._getTarget(moduleGraph, resolveTargetFilter, undefined);
+		if (target === CIRCULAR) return;
+		if (!target) return;
+		const originalTarget =
+			/** @type {TargetItem} */
+			(
+				/** @type {Target} */
+				(this._getMaxTarget()).values().next().value
+			);
+		if (
+			originalTarget.connection === target.connection &&
+			originalTarget.export === target.export
+		) {
+			return;
+		}
+		/** @type {Target} */
+		(this._target).clear();
+		/** @type {Target} */
+		(this._target).set(undefined, {
+			connection: updateOriginalConnection
+				? updateOriginalConnection(target)
+				: target.connection,
+			export: /** @type {NonNullable} */ (
+				target.export
+			),
+			priority: 0
+		});
+		return target;
+	}
+
+	/**
+	 * @returns {ExportsInfo} an exports info
+	 */
+	createNestedExportsInfo() {
+		if (this.exportsInfoOwned) {
+			return /** @type {ExportsInfo} */ (this.exportsInfo);
+		}
+		this.exportsInfoOwned = true;
+		const oldExportsInfo = this.exportsInfo;
+		this.exportsInfo = new ExportsInfo();
+		this.exportsInfo.setHasProvideInfo();
+		if (oldExportsInfo) {
+			this.exportsInfo.setRedirectNamedTo(oldExportsInfo);
+		}
+		return this.exportsInfo;
+	}
+
+	getNestedExportsInfo() {
+		return this.exportsInfo;
+	}
+
+	/**
+	 * @param {ExportInfo} baseInfo base info
+	 * @param {RuntimeSpec} runtime runtime
+	 * @returns {boolean} true when has info, otherwise false
+	 */
+	hasInfo(baseInfo, runtime) {
+		return (
+			(this._usedName && this._usedName !== this.name) ||
+			this.provided ||
+			this.terminalBinding ||
+			this.getUsed(runtime) !== baseInfo.getUsed(runtime)
+		);
+	}
+
+	/**
+	 * @param {Hash} hash the hash
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {void}
+	 */
+	updateHash(hash, runtime) {
+		this._updateHash(hash, runtime, new Set());
+	}
+
+	/**
+	 * @param {Hash} hash the hash
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {Set} alreadyVisitedExportsInfo for circular references
+	 */
+	_updateHash(hash, runtime, alreadyVisitedExportsInfo) {
+		hash.update(
+			`${this._usedName || this.name}${this.getUsed(runtime)}${this.provided}${
+				this.terminalBinding
+			}`
+		);
+		if (this.exportsInfo && !alreadyVisitedExportsInfo.has(this.exportsInfo)) {
+			this.exportsInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
+		}
+	}
+
+	getUsedInfo() {
+		if (this._globalUsed !== undefined) {
+			switch (this._globalUsed) {
+				case UsageState.Unused:
+					return "unused";
+				case UsageState.NoInfo:
+					return "no usage info";
+				case UsageState.Unknown:
+					return "maybe used (runtime-defined)";
+				case UsageState.Used:
+					return "used";
+				case UsageState.OnlyPropertiesUsed:
+					return "only properties used";
+			}
+		} else if (this._usedInRuntime !== undefined) {
+			/** @type {Map} */
+			const map = new Map();
+			for (const [runtime, used] of this._usedInRuntime) {
+				const list = map.get(used);
+				if (list !== undefined) list.push(runtime);
+				else map.set(used, [runtime]);
+			}
+			// eslint-disable-next-line array-callback-return
+			const specificInfo = Array.from(map, ([used, runtimes]) => {
+				switch (used) {
+					case UsageState.NoInfo:
+						return `no usage info in ${runtimes.join(", ")}`;
+					case UsageState.Unknown:
+						return `maybe used in ${runtimes.join(", ")} (runtime-defined)`;
+					case UsageState.Used:
+						return `used in ${runtimes.join(", ")}`;
+					case UsageState.OnlyPropertiesUsed:
+						return `only properties used in ${runtimes.join(", ")}`;
+				}
+			});
+			if (specificInfo.length > 0) {
+				return specificInfo.join("; ");
+			}
+		}
+		return this._hasUseInRuntimeInfo ? "unused" : "no usage info";
+	}
+
+	getProvidedInfo() {
+		switch (this.provided) {
+			case undefined:
+				return "no provided info";
+			case null:
+				return "maybe provided (runtime-defined)";
+			case true:
+				return "provided";
+			case false:
+				return "not provided";
+		}
+	}
+
+	getRenameInfo() {
+		if (this._usedName !== null && this._usedName !== this.name) {
+			return `renamed to ${JSON.stringify(this._usedName).slice(1, -1)}`;
+		}
+		switch (this.canMangleProvide) {
+			case undefined:
+				switch (this.canMangleUse) {
+					case undefined:
+						return "missing provision and use info prevents renaming";
+					case false:
+						return "usage prevents renaming (no provision info)";
+					case true:
+						return "missing provision info prevents renaming";
+				}
+				break;
+			case true:
+				switch (this.canMangleUse) {
+					case undefined:
+						return "missing usage info prevents renaming";
+					case false:
+						return "usage prevents renaming";
+					case true:
+						return "could be renamed";
+				}
+				break;
+			case false:
+				switch (this.canMangleUse) {
+					case undefined:
+						return "provision prevents renaming (no use info)";
+					case false:
+						return "usage and provision prevents renaming";
+					case true:
+						return "provision prevents renaming";
+				}
+				break;
+		}
+		throw new Error(
+			`Unexpected flags for getRenameInfo ${this.canMangleProvide} ${this.canMangleUse}`
+		);
+	}
+}
+
+module.exports = ExportsInfo;
+module.exports.ExportInfo = ExportInfo;
+module.exports.RestoreProvidedData = RestoreProvidedData;
+module.exports.UsageState = UsageState;
diff --git a/lib/ExportsInfoApiPlugin.js b/lib/ExportsInfoApiPlugin.js
new file mode 100644
index 00000000000..2fdf8bdbecd
--- /dev/null
+++ b/lib/ExportsInfoApiPlugin.js
@@ -0,0 +1,87 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const ConstDependency = require("./dependencies/ConstDependency");
+const ExportsInfoDependency = require("./dependencies/ExportsInfoDependency");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+
+const PLUGIN_NAME = "ExportsInfoApiPlugin";
+
+class ExportsInfoApiPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				compilation.dependencyTemplates.set(
+					ExportsInfoDependency,
+					new ExportsInfoDependency.Template()
+				);
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @returns {void}
+				 */
+				const handler = (parser) => {
+					parser.hooks.expressionMemberChain
+						.for("__webpack_exports_info__")
+						.tap(PLUGIN_NAME, (expr, members) => {
+							const dep =
+								members.length >= 2
+									? new ExportsInfoDependency(
+											/** @type {Range} */ (expr.range),
+											members.slice(0, -1),
+											members[members.length - 1]
+										)
+									: new ExportsInfoDependency(
+											/** @type {Range} */ (expr.range),
+											null,
+											members[0]
+										);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addDependency(dep);
+							return true;
+						});
+					parser.hooks.expression
+						.for("__webpack_exports_info__")
+						.tap(PLUGIN_NAME, (expr) => {
+							const dep = new ConstDependency(
+								"true",
+								/** @type {Range} */ (expr.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+							return true;
+						});
+				};
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
+			}
+		);
+	}
+}
+
+module.exports = ExportsInfoApiPlugin;
diff --git a/lib/ExtendedAPIPlugin.js b/lib/ExtendedAPIPlugin.js
deleted file mode 100644
index a894a9faf7a..00000000000
--- a/lib/ExtendedAPIPlugin.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const Template = require("./Template");
-const ConstDependency = require("./dependencies/ConstDependency");
-const ParserHelpers = require("./ParserHelpers");
-const NullFactory = require("./NullFactory");
-
-const REPLACEMENTS = {
-	__webpack_hash__: "__webpack_require__.h", // eslint-disable-line camelcase
-	__webpack_chunkname__: "__webpack_require__.cn" // eslint-disable-line camelcase
-};
-const REPLACEMENT_TYPES = {
-	__webpack_hash__: "string", // eslint-disable-line camelcase
-	__webpack_chunkname__: "string" // eslint-disable-line camelcase
-};
-
-class ExtendedAPIPlugin {
-	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"ExtendedAPIPlugin",
-			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
-				compilation.dependencyTemplates.set(
-					ConstDependency,
-					new ConstDependency.Template()
-				);
-
-				const mainTemplate = compilation.mainTemplate;
-				mainTemplate.hooks.requireExtensions.tap(
-					"ExtendedAPIPlugin",
-					(source, chunk, hash) => {
-						const buf = [source];
-						buf.push("");
-						buf.push("// __webpack_hash__");
-						buf.push(`${mainTemplate.requireFn}.h = ${JSON.stringify(hash)};`);
-						buf.push("");
-						buf.push("// __webpack_chunkname__");
-						buf.push(
-							`${mainTemplate.requireFn}.cn = ${JSON.stringify(chunk.name)};`
-						);
-						return Template.asString(buf);
-					}
-				);
-				mainTemplate.hooks.globalHash.tap("ExtendedAPIPlugin", () => true);
-
-				const handler = (parser, parserOptions) => {
-					Object.keys(REPLACEMENTS).forEach(key => {
-						parser.hooks.expression
-							.for(key)
-							.tap(
-								"ExtendedAPIPlugin",
-								ParserHelpers.toConstantDependencyWithWebpackRequire(
-									parser,
-									REPLACEMENTS[key]
-								)
-							);
-						parser.hooks.evaluateTypeof
-							.for(key)
-							.tap(
-								"ExtendedAPIPlugin",
-								ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key])
-							);
-					});
-				};
-
-				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("ExtendedAPIPlugin", handler);
-				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("ExtendedAPIPlugin", handler);
-				normalModuleFactory.hooks.parser
-					.for("javascript/esm")
-					.tap("ExtendedAPIPlugin", handler);
-			}
-		);
-	}
-}
-
-module.exports = ExtendedAPIPlugin;
diff --git a/lib/ExternalModule.js b/lib/ExternalModule.js
index 98d1560b883..153d21473f0 100644
--- a/lib/ExternalModule.js
+++ b/lib/ExternalModule.js
@@ -2,158 +2,1201 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const { SyncBailHook } = require("tapable");
 const { OriginalSource, RawSource } = require("webpack-sources");
+const ConcatenationScope = require("./ConcatenationScope");
+const EnvironmentNotSupportAsyncWarning = require("./EnvironmentNotSupportAsyncWarning");
+const { UsageState } = require("./ExportsInfo");
+const InitFragment = require("./InitFragment");
 const Module = require("./Module");
-const WebpackMissingModule = require("./dependencies/WebpackMissingModule");
+const {
+	CSS_IMPORT_TYPES,
+	CSS_URL_TYPES,
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const Template = require("./Template");
+const { DEFAULTS } = require("./config/defaults");
+const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
+const createHash = require("./util/createHash");
+const extractUrlAndGlobal = require("./util/extractUrlAndGlobal");
+const makeSerializable = require("./util/makeSerializable");
+const { propertyAccess } = require("./util/property");
+const { register } = require("./util/serialization");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
+/** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Compilation").UnsafeCacheData} UnsafeCacheData */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./ExportsInfo")} ExportsInfo */
+/** @typedef {import("./Generator").GenerateContext} GenerateContext */
+/** @typedef {import("./Generator").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").ModuleId} ModuleId */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
+/** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("./Module").LibIdent} LibIdent */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
+/** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
+/** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
+/** @typedef {{ sourceType: "css-url" }} AssetDependencyMeta */
+
+/** @typedef {ImportDependencyMeta | CssImportDependencyMeta | AssetDependencyMeta} DependencyMeta */
+
+/**
+ * @typedef {object} SourceData
+ * @property {boolean=} iife
+ * @property {string=} init
+ * @property {string} expression
+ * @property {InitFragment[]=} chunkInitFragments
+ * @property {ReadOnlyRuntimeRequirements=} runtimeRequirements
+ * @property {[string, string][]=} specifiers
+ */
+
+/** @typedef {true | [string, string][]} Imported */
+
+/** @type {RuntimeRequirements} */
+const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
+/** @type {RuntimeRequirements} */
+const RUNTIME_REQUIREMENTS_FOR_SCRIPT = new Set([RuntimeGlobals.loadScript]);
+/** @type {RuntimeRequirements} */
+const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
+	RuntimeGlobals.definePropertyGetters
+]);
+/** @type {RuntimeRequirements} */
+const EMPTY_RUNTIME_REQUIREMENTS = new Set();
+
+/**
+ * @param {string | string[]} variableName the variable name or path
+ * @param {string} type the module system
+ * @returns {SourceData} the generated source
+ */
+const getSourceForGlobalVariableExternal = (variableName, type) => {
+	if (!Array.isArray(variableName)) {
+		// make it an array as the look up works the same basically
+		variableName = [variableName];
+	}
+
+	// needed for e.g. window["some"]["thing"]
+	const objectLookup = variableName
+		.map((r) => `[${JSON.stringify(r)}]`)
+		.join("");
+	return {
+		iife: type === "this",
+		expression: `${type}${objectLookup}`
+	};
+};
+
+/** @typedef {string | string[]} ModuleAndSpecifiers */
+
+/**
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
+ * @returns {SourceData} the generated source
+ */
+const getSourceForCommonJsExternal = (moduleAndSpecifiers) => {
+	if (!Array.isArray(moduleAndSpecifiers)) {
+		return {
+			expression: `require(${JSON.stringify(moduleAndSpecifiers)})`
+		};
+	}
+	const moduleName = moduleAndSpecifiers[0];
+	return {
+		expression: `require(${JSON.stringify(moduleName)})${propertyAccess(
+			moduleAndSpecifiers,
+			1
+		)}`
+	};
+};
+
+/**
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @returns {InitFragment} code
+ */
+const getExternalModuleNodeCommonjsInitFragment = (runtimeTemplate) => {
+	const importMetaName = runtimeTemplate.outputOptions.importMetaName;
+
+	return new InitFragment(
+		`import { createRequire as __WEBPACK_EXTERNAL_createRequire } from ${runtimeTemplate.renderNodePrefixForCoreModule(
+			"module"
+		)};\n${runtimeTemplate.renderConst()} __WEBPACK_EXTERNAL_createRequire_require = __WEBPACK_EXTERNAL_createRequire(${importMetaName}.url);\n`,
+		InitFragment.STAGE_HARMONY_IMPORTS,
+		0,
+		"external module node-commonjs"
+	);
+};
+
+/**
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @returns {SourceData} the generated source
+ */
+const getSourceForCommonJsExternalInNodeModule = (
+	moduleAndSpecifiers,
+	runtimeTemplate
+) => {
+	const chunkInitFragments = [
+		getExternalModuleNodeCommonjsInitFragment(runtimeTemplate)
+	];
+	if (!Array.isArray(moduleAndSpecifiers)) {
+		return {
+			chunkInitFragments,
+			expression: `__WEBPACK_EXTERNAL_createRequire_require(${JSON.stringify(
+				moduleAndSpecifiers
+			)})`
+		};
+	}
+	const moduleName = moduleAndSpecifiers[0];
+	return {
+		chunkInitFragments,
+		expression: `__WEBPACK_EXTERNAL_createRequire_require(${JSON.stringify(
+			moduleName
+		)})${propertyAccess(moduleAndSpecifiers, 1)}`
+	};
+};
+
+/**
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
+ * @returns {SourceData} the generated source
+ */
+const getSourceForImportExternal = (
+	moduleAndSpecifiers,
+	runtimeTemplate,
+	dependencyMeta
+) => {
+	const importName = runtimeTemplate.outputOptions.importFunctionName;
+	if (
+		!runtimeTemplate.supportsDynamicImport() &&
+		(importName === "import" || importName === "module-import")
+	) {
+		throw new Error(
+			"The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
+		);
+	}
+	const attributes =
+		dependencyMeta && dependencyMeta.attributes
+			? dependencyMeta.attributes._isLegacyAssert
+				? `, { assert: ${JSON.stringify(
+						dependencyMeta.attributes,
+						importAssertionReplacer
+					)} }`
+				: `, { with: ${JSON.stringify(dependencyMeta.attributes)} }`
+			: "";
+	if (!Array.isArray(moduleAndSpecifiers)) {
+		return {
+			expression: `${importName}(${JSON.stringify(
+				moduleAndSpecifiers
+			)}${attributes});`
+		};
+	}
+	if (moduleAndSpecifiers.length === 1) {
+		return {
+			expression: `${importName}(${JSON.stringify(
+				moduleAndSpecifiers[0]
+			)}${attributes});`
+		};
+	}
+	const moduleName = moduleAndSpecifiers[0];
+	return {
+		expression: `${importName}(${JSON.stringify(
+			moduleName
+		)}${attributes}).then(${runtimeTemplate.returningFunction(
+			`module${propertyAccess(moduleAndSpecifiers, 1)}`,
+			"module"
+		)});`
+	};
+};
+
+/**
+ * @param {string} key key
+ * @param {ImportAttributes | string | boolean | undefined} value value
+ * @returns {ImportAttributes | string | boolean | undefined} replaced value
+ */
+const importAssertionReplacer = (key, value) => {
+	if (key === "_isLegacyAssert") {
+		return;
+	}
+
+	return value;
+};
+
+/**
+ * @extends {InitFragment}
+ */
+class ModuleExternalInitFragment extends InitFragment {
+	/**
+	 * @param {string} request import source
+	 * @param {Imported} imported the imported specifiers
+	 * @param {string=} ident recomputed ident
+	 * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
+	 * @param {HashFunction=} hashFunction the hash function to use
+	 */
+	constructor(
+		request,
+		imported,
+		ident,
+		dependencyMeta,
+		hashFunction = DEFAULTS.HASH_FUNCTION
+	) {
+		if (ident === undefined) {
+			ident = Template.toIdentifier(request);
+			if (ident !== request) {
+				ident += `_${createHash(hashFunction)
+					.update(request)
+					.digest("hex")
+					.slice(0, 8)}`;
+			}
+		}
+
+		super(
+			"",
+			InitFragment.STAGE_HARMONY_IMPORTS,
+			0,
+			`external module import ${ident} ${imported === true ? imported : imported.join(" ")}`
+		);
+		this._ident = ident;
+		this._request = request;
+		this._dependencyMeta = dependencyMeta;
+		this._identifier = this.buildIdentifier(ident);
+		this._imported = this.buildImported(imported);
+	}
+
+	/**
+	 * @returns {Imported} imported
+	 */
+	getImported() {
+		return this._imported;
+	}
+
+	/**
+	 * @param {Imported} imported imported
+	 */
+	setImported(imported) {
+		this._imported = imported;
+	}
+
+	/**
+	 * @param {GenerateContext} context context
+	 * @returns {string | Source | undefined} the source code that will be included as initialization code
+	 */
+	getContent(context) {
+		const {
+			_dependencyMeta: dependencyMeta,
+			_imported: imported,
+			_request: request,
+			_identifier: identifier
+		} = this;
+		const attributes =
+			dependencyMeta && dependencyMeta.attributes
+				? dependencyMeta.attributes._isLegacyAssert &&
+					dependencyMeta.attributes._isLegacyAssert
+					? ` assert ${JSON.stringify(
+							dependencyMeta.attributes,
+							importAssertionReplacer
+						)}`
+					: ` with ${JSON.stringify(dependencyMeta.attributes)}`
+				: "";
+		let content = "";
+		if (imported === true) {
+			// namespace
+			content = `import * as ${identifier} from ${JSON.stringify(request)}${
+				attributes
+			};\n`;
+		} else if (imported.length === 0) {
+			// just import, no use
+			content = `import ${JSON.stringify(request)}${attributes};\n`;
+		} else {
+			content = `import { ${imported
+				.map(([name, finalName]) => {
+					if (name !== finalName) {
+						return `${name} as ${finalName}`;
+					}
+					return name;
+				})
+				.join(", ")} } from ${JSON.stringify(request)}${attributes};\n`;
+		}
+		return content;
+	}
+
+	getNamespaceIdentifier() {
+		return this._identifier;
+	}
+
+	/**
+	 * @param {string} ident ident
+	 * @returns {string} identifier
+	 */
+	buildIdentifier(ident) {
+		return `__WEBPACK_EXTERNAL_MODULE_${ident}__`;
+	}
+
+	/**
+	 * @param {Imported} imported imported
+	 * @returns {Imported} normalized imported
+	 */
+	buildImported(imported) {
+		if (Array.isArray(imported)) {
+			return imported.map(([name]) => {
+				const ident = `${this._ident}_${name}`;
+				return [name, this.buildIdentifier(ident)];
+			});
+		}
+		return imported;
+	}
+}
+
+register(
+	ModuleExternalInitFragment,
+	"webpack/lib/ExternalModule",
+	"ModuleExternalInitFragment",
+	{
+		serialize(obj, { write }) {
+			write(obj._request);
+			write(obj._imported);
+			write(obj._ident);
+			write(obj._dependencyMeta);
+		},
+		deserialize({ read }) {
+			return new ModuleExternalInitFragment(read(), read(), read(), read());
+		}
+	}
+);
+
+/**
+ * @param {string} input input
+ * @param {ExportsInfo} exportsInfo the exports info
+ * @param {RuntimeSpec=} runtime the runtime
+ * @param {RuntimeTemplate=} runtimeTemplate the runtime template
+ * @returns {string | undefined} the module remapping
+ */
+const generateModuleRemapping = (
+	input,
+	exportsInfo,
+	runtime,
+	runtimeTemplate
+) => {
+	if (exportsInfo.otherExportsInfo.getUsed(runtime) === UsageState.Unused) {
+		/** @type {string[]} */
+		const properties = [];
+		for (const exportInfo of exportsInfo.orderedExports) {
+			const used = exportInfo.getUsedName(exportInfo.name, runtime);
+			if (!used) continue;
+			const nestedInfo = exportInfo.getNestedExportsInfo();
+			if (nestedInfo) {
+				const nestedExpr = generateModuleRemapping(
+					`${input}${propertyAccess([exportInfo.name])}`,
+					nestedInfo
+				);
+				if (nestedExpr) {
+					properties.push(`[${JSON.stringify(used)}]: y(${nestedExpr})`);
+					continue;
+				}
+			}
+			properties.push(
+				`[${JSON.stringify(used)}]: ${
+					/** @type {RuntimeTemplate} */ (runtimeTemplate).returningFunction(
+						`${input}${propertyAccess([exportInfo.name])}`
+					)
+				}`
+			);
+		}
+		return `x({ ${properties.join(", ")} })`;
+	}
+};
+
+/**
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
+ * @param {ExportsInfo} exportsInfo exports info of this module
+ * @param {RuntimeSpec} runtime the runtime
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @param {ImportDependencyMeta} dependencyMeta the dependency meta
+ * @param {ConcatenationScope=} concatenationScope concatenationScope
+ * @returns {SourceData} the generated source
+ */
+const getSourceForModuleExternal = (
+	moduleAndSpecifiers,
+	exportsInfo,
+	runtime,
+	runtimeTemplate,
+	dependencyMeta,
+	concatenationScope
+) => {
+	/** @type {Imported} */
+	let imported = true;
+	if (concatenationScope) {
+		const usedExports = exportsInfo.getUsedExports(runtime);
+		switch (usedExports) {
+			case true:
+			case null:
+				// unknown exports
+				imported = true;
+				break;
+			case false:
+				// no used exports
+				imported = [];
+				break;
+			default:
+				imported = [...usedExports.entries()];
+		}
+	}
+
+	if (!Array.isArray(moduleAndSpecifiers)) {
+		moduleAndSpecifiers = [moduleAndSpecifiers];
+	}
+
+	// Return to `namespace` when the external request includes a specific export
+	if (moduleAndSpecifiers.length > 1) {
+		imported = true;
+	}
+
+	const initFragment = new ModuleExternalInitFragment(
+		moduleAndSpecifiers[0],
+		imported,
+		undefined,
+		dependencyMeta,
+		runtimeTemplate.outputOptions.hashFunction
+	);
+	const normalizedImported = initFragment.getImported();
+
+	const baseAccess = `${initFragment.getNamespaceIdentifier()}${propertyAccess(
+		moduleAndSpecifiers,
+		1
+	)}`;
+	let expression = baseAccess;
+
+	const useNamespace = imported === true;
+	/** @type {undefined | string} */
+	let moduleRemapping;
+	if (useNamespace) {
+		moduleRemapping = generateModuleRemapping(
+			baseAccess,
+			exportsInfo,
+			runtime,
+			runtimeTemplate
+		);
+		expression = moduleRemapping || baseAccess;
+	}
+	return {
+		expression,
+		init: moduleRemapping
+			? `var x = ${runtimeTemplate.basicFunction(
+					"y",
+					`var x = {}; ${RuntimeGlobals.definePropertyGetters}(x, y); return x`
+				)} \nvar y = ${runtimeTemplate.returningFunction(
+					runtimeTemplate.returningFunction("x"),
+					"x"
+				)}`
+			: undefined,
+		specifiers: normalizedImported === true ? undefined : normalizedImported,
+		runtimeRequirements: moduleRemapping
+			? RUNTIME_REQUIREMENTS_FOR_MODULE
+			: undefined,
+		chunkInitFragments: [
+			/** @type {InitFragment} */ (initFragment)
+		]
+	};
+};
+
+/**
+ * @param {string | string[]} urlAndGlobal the script request
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @returns {SourceData} the generated source
+ */
+const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
+	if (typeof urlAndGlobal === "string") {
+		urlAndGlobal = extractUrlAndGlobal(urlAndGlobal);
+	}
+	const url = urlAndGlobal[0];
+	const globalName = urlAndGlobal[1];
+	return {
+		init: "var __webpack_error__ = new Error();",
+		expression: `new Promise(${runtimeTemplate.basicFunction(
+			"resolve, reject",
+			[
+				`if(typeof ${globalName} !== "undefined") return resolve();`,
+				`${RuntimeGlobals.loadScript}(${JSON.stringify(
+					url
+				)}, ${runtimeTemplate.basicFunction("event", [
+					`if(typeof ${globalName} !== "undefined") return resolve();`,
+					"var errorType = event && (event.type === 'load' ? 'missing' : event.type);",
+					"var realSrc = event && event.target && event.target.src;",
+					"__webpack_error__.message = 'Loading script failed.\\n(' + errorType + ': ' + realSrc + ')';",
+					"__webpack_error__.name = 'ScriptExternalLoadError';",
+					"__webpack_error__.type = errorType;",
+					"__webpack_error__.request = realSrc;",
+					"reject(__webpack_error__);"
+				])}, ${JSON.stringify(globalName)});`
+			]
+		)}).then(${runtimeTemplate.returningFunction(
+			`${globalName}${propertyAccess(urlAndGlobal, 2)}`
+		)})`,
+		runtimeRequirements: RUNTIME_REQUIREMENTS_FOR_SCRIPT
+	};
+};
+
+/**
+ * @param {string} variableName the variable name to check
+ * @param {string} request the request path
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @returns {string} the generated source
+ */
+const checkExternalVariable = (variableName, request, runtimeTemplate) =>
+	`if(typeof ${variableName} === 'undefined') { ${runtimeTemplate.throwMissingModuleErrorBlock(
+		{ request }
+	)} }\n`;
+
+/**
+ * @param {ModuleId | string} id the module id
+ * @param {boolean} optional true, if the module is optional
+ * @param {string | string[]} request the request path
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @returns {SourceData} the generated source
+ */
+const getSourceForAmdOrUmdExternal = (
+	id,
+	optional,
+	request,
+	runtimeTemplate
+) => {
+	const externalVariable = `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(
+		`${id}`
+	)}__`;
+	return {
+		init: optional
+			? checkExternalVariable(
+					externalVariable,
+					Array.isArray(request) ? request.join(".") : request,
+					runtimeTemplate
+				)
+			: undefined,
+		expression: externalVariable
+	};
+};
+
+/**
+ * @param {boolean} optional true, if the module is optional
+ * @param {string | string[]} request the request path
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
+ * @returns {SourceData} the generated source
+ */
+const getSourceForDefaultCase = (optional, request, runtimeTemplate) => {
+	if (!Array.isArray(request)) {
+		// make it an array as the look up works the same basically
+		request = [request];
+	}
+
+	const variableName = request[0];
+	const objectLookup = propertyAccess(request, 1);
+	return {
+		init: optional
+			? checkExternalVariable(variableName, request.join("."), runtimeTemplate)
+			: undefined,
+		expression: `${variableName}${objectLookup}`
+	};
+};
+
+/** @typedef {Record} RequestRecord */
+/** @typedef {string | string[] | RequestRecord} ExternalModuleRequest */
+
+/**
+ * @typedef {object} ExternalModuleHooks
+ * @property {SyncBailHook<[Chunk, Compilation], boolean>} chunkCondition
+ */
+
+/** @type {WeakMap} */
+const compilationHooksMap = new WeakMap();
 
 class ExternalModule extends Module {
-	constructor(request, type, userRequest) {
-		super("javascript/dynamic", null);
+	/**
+	 * @param {ExternalModuleRequest} request request
+	 * @param {ExternalsType} type type
+	 * @param {string} userRequest user request
+	 * @param {DependencyMeta=} dependencyMeta dependency meta
+	 */
+	constructor(request, type, userRequest, dependencyMeta) {
+		super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
 
 		// Info from Factory
+		/** @type {ExternalModuleRequest} */
 		this.request = request;
+		/** @type {ExternalsType} */
 		this.externalType = type;
+		/** @type {string} */
 		this.userRequest = userRequest;
-		this.external = true;
+		/** @type {DependencyMeta=} */
+		this.dependencyMeta = dependencyMeta;
 	}
 
-	libIdent() {
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @returns {ExternalModuleHooks} the attached hooks
+	 */
+	static getCompilationHooks(compilation) {
+		let hooks = compilationHooksMap.get(compilation);
+		if (hooks === undefined) {
+			hooks = {
+				chunkCondition: new SyncBailHook(["chunk", "compilation"])
+			};
+			compilationHooksMap.set(compilation, hooks);
+		}
+		return hooks;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		if (
+			this.externalType === "asset" &&
+			this.dependencyMeta &&
+			/** @type {AssetDependencyMeta} */
+			(this.dependencyMeta).sourceType === "css-url"
+		) {
+			return CSS_URL_TYPES;
+		} else if (this.externalType === "css-import") {
+			return CSS_IMPORT_TYPES;
+		}
+
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
+	libIdent(options) {
 		return this.userRequest;
 	}
 
-	chunkCondition(chunk) {
-		return chunk.hasEntryModule();
+	/**
+	 * @param {Chunk} chunk the chunk which condition should be checked
+	 * @param {Compilation} compilation the compilation
+	 * @returns {boolean} true if the module can be placed in the chunk
+	 */
+	chunkCondition(chunk, compilation) {
+		const { chunkCondition } = ExternalModule.getCompilationHooks(compilation);
+		const condition = chunkCondition.call(chunk, compilation);
+		if (condition !== undefined) return condition;
+
+		const type = this._resolveExternalType(this.externalType);
+
+		// For `import()` externals, keep them in the initial chunk to avoid loading
+		// them asynchronously twice and to improve runtime performance.
+		if (["css-import", "module"].includes(type)) {
+			return true;
+		}
+		return compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0;
 	}
 
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
 	identifier() {
-		return "external " + JSON.stringify(this.request);
+		return `external ${this._resolveExternalType(this.externalType)} ${JSON.stringify(this.request)}`;
 	}
 
-	readableIdentifier() {
-		return "external " + JSON.stringify(this.request);
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		return `external ${JSON.stringify(this.request)}`;
 	}
 
-	needRebuild() {
-		return false;
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, !this.buildMeta);
 	}
 
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
 	build(options, compilation, resolver, fs, callback) {
-		this.built = true;
-		this.buildMeta = {};
-		this.buildInfo = {};
+		this.buildMeta = {
+			async: false,
+			exportsType: undefined
+		};
+		this.buildInfo = {
+			strict: true,
+			topLevelDeclarations: new Set(),
+			javascriptModule: compilation.outputOptions.module
+		};
+		const { request, externalType } = this._getRequestAndExternalType();
+		this.buildMeta.exportsType = "dynamic";
+		let canMangle = false;
+		this.clearDependenciesAndBlocks();
+		switch (externalType) {
+			case "this":
+				this.buildInfo.strict = false;
+				break;
+			case "system":
+				if (!Array.isArray(request) || request.length === 1) {
+					this.buildMeta.exportsType = "namespace";
+					canMangle = true;
+				}
+				break;
+			case "module":
+				if (this.buildInfo.javascriptModule) {
+					if (!Array.isArray(request) || request.length === 1) {
+						this.buildMeta.exportsType = "namespace";
+						canMangle = true;
+					}
+				} else {
+					this.buildMeta.async = true;
+					EnvironmentNotSupportAsyncWarning.check(
+						this,
+						compilation.runtimeTemplate,
+						"external module"
+					);
+					if (!Array.isArray(request) || request.length === 1) {
+						this.buildMeta.exportsType = "namespace";
+						canMangle = false;
+					}
+				}
+				break;
+			case "script":
+				this.buildMeta.async = true;
+				EnvironmentNotSupportAsyncWarning.check(
+					this,
+					compilation.runtimeTemplate,
+					"external script"
+				);
+				break;
+			case "promise":
+				this.buildMeta.async = true;
+				EnvironmentNotSupportAsyncWarning.check(
+					this,
+					compilation.runtimeTemplate,
+					"external promise"
+				);
+				break;
+			case "import":
+				this.buildMeta.async = true;
+				EnvironmentNotSupportAsyncWarning.check(
+					this,
+					compilation.runtimeTemplate,
+					"external import"
+				);
+				if (!Array.isArray(request) || request.length === 1) {
+					this.buildMeta.exportsType = "namespace";
+					canMangle = false;
+				}
+				break;
+		}
+		this.addDependency(new StaticExportsDependency(true, canMangle));
 		callback();
 	}
 
-	getSourceForGlobalVariableExternal(variableName, type) {
-		if (!Array.isArray(variableName)) {
-			// make it an array as the look up works the same basically
-			variableName = [variableName];
-		}
-
-		// needed for e.g. window["some"]["thing"]
-		const objectLookup = variableName
-			.map(r => `[${JSON.stringify(r)}]`)
-			.join("");
-		return `(function() { module.exports = ${type}${objectLookup}; }());`;
+	/**
+	 * restore unsafe cache data
+	 * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
+	 * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
+	 */
+	restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
+		this._restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory);
 	}
 
-	getSourceForCommonJsExternal(moduleAndSpecifiers) {
-		if (!Array.isArray(moduleAndSpecifiers)) {
-			return `module.exports = require(${JSON.stringify(
-				moduleAndSpecifiers
-			)});`;
+	/**
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(context) {
+		switch (this.externalType) {
+			case "amd":
+			case "amd-require":
+			case "umd":
+			case "umd2":
+			case "system":
+			case "jsonp":
+				return `${this.externalType} externals can't be concatenated`;
 		}
-
-		const moduleName = moduleAndSpecifiers[0];
-		const objectLookup = moduleAndSpecifiers
-			.slice(1)
-			.map(r => `[${JSON.stringify(r)}]`)
-			.join("");
-		return `module.exports = require(${moduleName})${objectLookup};`;
+		return undefined;
 	}
 
-	checkExternalVariable(variableToCheck, request) {
-		return `if(typeof ${variableToCheck} === 'undefined') {${WebpackMissingModule.moduleCode(
-			request
-		)}}\n`;
+	/**
+	 * @private
+	 * @returns {{ request: string | string[], externalType: ExternalsType }} the request and external type
+	 */
+	_getRequestAndExternalType() {
+		let { request, externalType } = this;
+		if (typeof request === "object" && !Array.isArray(request)) {
+			request = request[externalType];
+		}
+		externalType = this._resolveExternalType(externalType);
+		return { request, externalType };
 	}
 
-	getSourceForAmdOrUmdExternal(id, optional, request) {
-		const externalVariable = `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(
-			`${id}`
-		)}__`;
-		const missingModuleError = optional
-			? this.checkExternalVariable(externalVariable, request)
-			: "";
-		return `${missingModuleError}module.exports = ${externalVariable};`;
-	}
+	/**
+	 * Resolve the detailed external type from the raw external type.
+	 * e.g. resolve "module" or "import" from "module-import" type
+	 * @param {ExternalsType} externalType raw external type
+	 * @returns {ExternalsType} resolved external type
+	 */
+	_resolveExternalType(externalType) {
+		if (externalType === "module-import") {
+			if (
+				this.dependencyMeta &&
+				/** @type {ImportDependencyMeta} */
+				(this.dependencyMeta).externalType
+			) {
+				return /** @type {ImportDependencyMeta} */ (this.dependencyMeta)
+					.externalType;
+			}
+			return "module";
+		} else if (externalType === "asset") {
+			if (
+				this.dependencyMeta &&
+				/** @type {AssetDependencyMeta} */
+				(this.dependencyMeta).sourceType
+			) {
+				return /** @type {AssetDependencyMeta} */ (this.dependencyMeta)
+					.sourceType;
+			}
 
-	getSourceForDefaultCase(optional, request) {
-		const missingModuleError = optional
-			? this.checkExternalVariable(request, request)
-			: "";
-		return `${missingModuleError}module.exports = ${request};`;
+			return "asset";
+		}
+
+		return externalType;
 	}
 
-	getSourceString(runtime) {
-		const request =
-			typeof this.request === "object"
-				? this.request[this.externalType]
-				: this.request;
-		switch (this.externalType) {
+	/**
+	 * @private
+	 * @param {string | string[]} request request
+	 * @param {ExternalsType} externalType the external type
+	 * @param {RuntimeTemplate} runtimeTemplate the runtime template
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @param {DependencyMeta | undefined} dependencyMeta the dependency meta
+	 * @param {ConcatenationScope=} concatenationScope concatenationScope
+	 * @returns {SourceData} the source data
+	 */
+	_getSourceData(
+		request,
+		externalType,
+		runtimeTemplate,
+		moduleGraph,
+		chunkGraph,
+		runtime,
+		dependencyMeta,
+		concatenationScope
+	) {
+		switch (externalType) {
 			case "this":
 			case "window":
 			case "self":
-				return this.getSourceForGlobalVariableExternal(
-					request,
-					this.externalType
-				);
+				return getSourceForGlobalVariableExternal(request, this.externalType);
 			case "global":
-				return this.getSourceForGlobalVariableExternal(
-					runtime.outputOptions.globalObject,
-					this.externalType
+				return getSourceForGlobalVariableExternal(
+					request,
+					runtimeTemplate.globalObject
 				);
 			case "commonjs":
 			case "commonjs2":
-				return this.getSourceForCommonJsExternal(request);
+			case "commonjs-module":
+			case "commonjs-static":
+				return getSourceForCommonJsExternal(request);
+			case "node-commonjs":
+				return /** @type {BuildInfo} */ (this.buildInfo).javascriptModule
+					? getSourceForCommonJsExternalInNodeModule(request, runtimeTemplate)
+					: getSourceForCommonJsExternal(request);
 			case "amd":
+			case "amd-require":
 			case "umd":
 			case "umd2":
-				return this.getSourceForAmdOrUmdExternal(
-					this.id,
-					this.optional,
-					request
+			case "system":
+			case "jsonp": {
+				const id = chunkGraph.getModuleId(this);
+				return getSourceForAmdOrUmdExternal(
+					id !== null ? id : this.identifier(),
+					this.isOptional(moduleGraph),
+					request,
+					runtimeTemplate
 				);
+			}
+			case "import":
+				return getSourceForImportExternal(
+					request,
+					runtimeTemplate,
+					/** @type {ImportDependencyMeta} */ (dependencyMeta)
+				);
+			case "script":
+				return getSourceForScriptExternal(request, runtimeTemplate);
+			case "module": {
+				if (!(/** @type {BuildInfo} */ (this.buildInfo).javascriptModule)) {
+					if (!runtimeTemplate.supportsDynamicImport()) {
+						throw new Error(
+							`The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script${
+								runtimeTemplate.supportsEcmaScriptModuleSyntax()
+									? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
+									: ""
+							}`
+						);
+					}
+					return getSourceForImportExternal(
+						request,
+						runtimeTemplate,
+						/** @type {ImportDependencyMeta} */ (dependencyMeta)
+					);
+				}
+				if (!runtimeTemplate.supportsEcmaScriptModuleSyntax()) {
+					throw new Error(
+						"The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
+					);
+				}
+				return getSourceForModuleExternal(
+					request,
+					moduleGraph.getExportsInfo(this),
+					runtime,
+					runtimeTemplate,
+					/** @type {ImportDependencyMeta} */ (dependencyMeta),
+					concatenationScope
+				);
+			}
+			case "var":
+			case "promise":
+			case "assign":
 			default:
-				return this.getSourceForDefaultCase(this.optional, request);
+				return getSourceForDefaultCase(
+					this.isOptional(moduleGraph),
+					request,
+					runtimeTemplate
+				);
 		}
 	}
 
-	getSource(sourceString) {
-		if (this.useSourceMap) {
-			return new OriginalSource(sourceString, this.identifier());
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration({
+		runtimeTemplate,
+		moduleGraph,
+		chunkGraph,
+		runtime,
+		concatenationScope
+	}) {
+		const { request, externalType } = this._getRequestAndExternalType();
+		switch (externalType) {
+			case "asset": {
+				/** @type {Sources} */
+				const sources = new Map();
+				sources.set(
+					JAVASCRIPT_TYPE,
+					new RawSource(`module.exports = ${JSON.stringify(request)};`)
+				);
+				/** @type {CodeGenerationResultData} */
+				const data = new Map();
+				data.set("url", { javascript: /** @type {string} */ (request) });
+				return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
+			}
+			case "css-url": {
+				/** @type {Sources} */
+				const sources = new Map();
+				/** @type {CodeGenerationResultData} */
+				const data = new Map();
+				data.set("url", { "css-url": /** @type {string} */ (request) });
+				return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
+			}
+			case "css-import": {
+				/** @type {Sources} */
+				const sources = new Map();
+				const dependencyMeta = /** @type {CssImportDependencyMeta} */ (
+					this.dependencyMeta
+				);
+				const layer =
+					dependencyMeta.layer !== undefined
+						? ` layer(${dependencyMeta.layer})`
+						: "";
+				const supports = dependencyMeta.supports
+					? ` supports(${dependencyMeta.supports})`
+					: "";
+				const media = dependencyMeta.media ? ` ${dependencyMeta.media}` : "";
+				sources.set(
+					"css-import",
+					new RawSource(
+						`@import url(${JSON.stringify(
+							request
+						)})${layer}${supports}${media};`
+					)
+				);
+				return {
+					sources,
+					runtimeRequirements: EMPTY_RUNTIME_REQUIREMENTS
+				};
+			}
+			default: {
+				const sourceData = this._getSourceData(
+					request,
+					externalType,
+					runtimeTemplate,
+					moduleGraph,
+					chunkGraph,
+					runtime,
+					this.dependencyMeta,
+					concatenationScope
+				);
+
+				// sourceString can be empty str only when there is concatenationScope
+				let sourceString = sourceData.expression;
+				if (sourceData.iife) {
+					sourceString = `(function() { return ${sourceString}; }())`;
+				}
+
+				const specifiers = sourceData.specifiers;
+				if (specifiers) {
+					sourceString = "";
+					const scope = /** @type {ConcatenationScope} */ (concatenationScope);
+					for (const [specifier, finalName] of specifiers) {
+						scope.registerRawExport(specifier, finalName);
+					}
+				} else if (concatenationScope) {
+					sourceString = `${runtimeTemplate.renderConst()} ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
+					concatenationScope.registerNamespaceExport(
+						ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+					);
+				} else {
+					sourceString = `module.exports = ${sourceString};`;
+				}
+				if (sourceData.init) {
+					sourceString = `${sourceData.init}\n${sourceString}`;
+				}
+
+				/** @type {undefined | CodeGenerationResultData} */
+				let data;
+				if (sourceData.chunkInitFragments) {
+					data = new Map();
+					data.set("chunkInitFragments", sourceData.chunkInitFragments);
+				}
+
+				/** @type {Sources} */
+				const sources = new Map();
+				if (this.useSourceMap || this.useSimpleSourceMap) {
+					sources.set(
+						JAVASCRIPT_TYPE,
+						new OriginalSource(sourceString, this.identifier())
+					);
+				} else {
+					sources.set(JAVASCRIPT_TYPE, new RawSource(sourceString));
+				}
+
+				let runtimeRequirements = sourceData.runtimeRequirements;
+				if (!concatenationScope) {
+					if (!runtimeRequirements) {
+						runtimeRequirements = RUNTIME_REQUIREMENTS;
+					} else {
+						const set = new Set(runtimeRequirements);
+						set.add(RuntimeGlobals.module);
+						runtimeRequirements = set;
+					}
+				}
+
+				return {
+					sources,
+					runtimeRequirements:
+						runtimeRequirements || EMPTY_RUNTIME_REQUIREMENTS,
+					data
+				};
+			}
 		}
+	}
 
-		return new RawSource(sourceString);
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		return 42;
 	}
 
-	source(dependencyTemplates, runtime) {
-		return this.getSource(this.getSourceString(runtime));
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		const { chunkGraph } = context;
+		hash.update(
+			`${this._resolveExternalType(this.externalType)}${JSON.stringify(this.request)}${this.isOptional(
+				chunkGraph.moduleGraph
+			)}`
+		);
+		super.updateHash(hash, context);
 	}
 
-	size() {
-		return 42;
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.request);
+		write(this.externalType);
+		write(this.userRequest);
+		write(this.dependencyMeta);
+
+		super.serialize(context);
 	}
 
-	updateHash(hash) {
-		hash.update(this.externalType);
-		hash.update(JSON.stringify(this.request));
-		hash.update(JSON.stringify(Boolean(this.optional)));
-		super.updateHash(hash);
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.request = read();
+		this.externalType = read();
+		this.userRequest = read();
+		this.dependencyMeta = read();
+
+		super.deserialize(context);
 	}
 }
 
+makeSerializable(ExternalModule, "webpack/lib/ExternalModule");
+
 module.exports = ExternalModule;
+module.exports.ModuleExternalInitFragment = ModuleExternalInitFragment;
+module.exports.getExternalModuleNodeCommonjsInitFragment =
+	getExternalModuleNodeCommonjsInitFragment;
diff --git a/lib/ExternalModuleFactoryPlugin.js b/lib/ExternalModuleFactoryPlugin.js
index 40c2156609e..ab593187ae3 100644
--- a/lib/ExternalModuleFactoryPlugin.js
+++ b/lib/ExternalModuleFactoryPlugin.js
@@ -2,52 +2,238 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const util = require("util");
 const ExternalModule = require("./ExternalModule");
+const ContextElementDependency = require("./dependencies/ContextElementDependency");
+const CssImportDependency = require("./dependencies/CssImportDependency");
+const CssUrlDependency = require("./dependencies/CssUrlDependency");
+const HarmonyImportDependency = require("./dependencies/HarmonyImportDependency");
+const ImportDependency = require("./dependencies/ImportDependency");
+const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
+
+/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
+/** @typedef {import("../declarations/WebpackOptions").ExternalItem} ExternalItem */
+/** @typedef {import("../declarations/WebpackOptions").ExternalItemValue} ExternalItemValue */
+/** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectKnown} ExternalItemObjectKnown */
+/** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectUnknown} ExternalItemObjectUnknown */
+/** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./ExternalModule").DependencyMeta} DependencyMeta */
+/** @typedef {import("./ModuleFactory").IssuerLayer} IssuerLayer */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
+/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
+
+/** @typedef {((context: string, request: string, callback: (err?: Error | null, result?: string | false, resolveRequest?: import("enhanced-resolve").ResolveRequest) => void) => void)} ExternalItemFunctionDataGetResolveCallbackResult */
+/** @typedef {((context: string, request: string) => Promise)} ExternalItemFunctionDataGetResolveResult */
+/** @typedef {(options?: ResolveOptions) => ExternalItemFunctionDataGetResolveCallbackResult | ExternalItemFunctionDataGetResolveResult} ExternalItemFunctionDataGetResolve */
+
+/**
+ * @typedef {object} ExternalItemFunctionData
+ * @property {string} context the directory in which the request is placed
+ * @property {ModuleFactoryCreateDataContextInfo} contextInfo contextual information
+ * @property {string} dependencyType the category of the referencing dependency
+ * @property {ExternalItemFunctionDataGetResolve} getResolve get a resolve function with the current resolver options
+ * @property {string} request the request as written by the user in the require/import expression/statement
+ */
+
+/** @typedef {((data: ExternalItemFunctionData, callback: (err?: (Error | null), result?: ExternalItemValue) => void) => void)} ExternalItemFunctionCallback */
+/** @typedef {((data: import("../lib/ExternalModuleFactoryPlugin").ExternalItemFunctionData) => Promise)} ExternalItemFunctionPromise */
+
+const UNSPECIFIED_EXTERNAL_TYPE_REGEXP = /^[a-z0-9-]+ /;
+const EMPTY_RESOLVE_OPTIONS = {};
+
+// TODO webpack 6 remove this
+const callDeprecatedExternals = util.deprecate(
+	/**
+	 * @param {EXPECTED_FUNCTION} externalsFunction externals function
+	 * @param {string} context context
+	 * @param {string} request request
+	 * @param {(err: Error | null | undefined, value: ExternalValue | undefined, ty: ExternalsType | undefined) => void} cb cb
+	 */
+	(externalsFunction, context, request, cb) => {
+		// eslint-disable-next-line no-useless-call
+		externalsFunction.call(null, context, request, cb);
+	},
+	"The externals-function should be defined like ({context, request}, cb) => { ... }",
+	"DEP_WEBPACK_EXTERNALS_FUNCTION_PARAMETERS"
+);
+
+/** @typedef {(layer: string | null) => ExternalItem} ExternalItemByLayerFn */
+/** @typedef {ExternalItemObjectKnown & ExternalItemObjectUnknown} ExternalItemObject */
+
+/**
+ * @template {ExternalItemObject} T
+ * @typedef {WeakMap>>} ExternalWeakCache
+ */
+
+/** @type {ExternalWeakCache} */
+const cache = new WeakMap();
+
+/**
+ * @param {ExternalItemObject} obj obj
+ * @param {IssuerLayer} layer layer
+ * @returns {Omit} result
+ */
+const resolveLayer = (obj, layer) => {
+	let map = cache.get(obj);
+	if (map === undefined) {
+		map = new Map();
+		cache.set(obj, map);
+	} else {
+		const cacheEntry = map.get(layer);
+		if (cacheEntry !== undefined) return cacheEntry;
+	}
+	const result = resolveByProperty(obj, "byLayer", layer);
+	map.set(layer, result);
+	return result;
+};
+
+/** @typedef {string | string[] | boolean | Record} ExternalValue */
+
+const PLUGIN_NAME = "ExternalModuleFactoryPlugin";
 
 class ExternalModuleFactoryPlugin {
+	/**
+	 * @param {ExternalsType | ((dependency: Dependency) => ExternalsType)} type default external type
+	 * @param {Externals} externals externals config
+	 */
 	constructor(type, externals) {
 		this.type = type;
 		this.externals = externals;
 	}
 
+	/**
+	 * @param {NormalModuleFactory} normalModuleFactory the normal module factory
+	 * @returns {void}
+	 */
 	apply(normalModuleFactory) {
 		const globalType = this.type;
-		normalModuleFactory.hooks.factory.tap(
-			"ExternalModuleFactoryPlugin",
-			factory => (data, callback) => {
+		normalModuleFactory.hooks.factorize.tapAsync(
+			PLUGIN_NAME,
+			(data, callback) => {
 				const context = data.context;
+				const contextInfo = data.contextInfo;
 				const dependency = data.dependencies[0];
+				const dependencyType = data.dependencyType;
 
+				/** @typedef {(err?: Error | null, externalModule?: ExternalModule) => void} HandleExternalCallback */
+
+				/**
+				 * @param {ExternalValue} value the external config
+				 * @param {ExternalsType | undefined} type type of external
+				 * @param {HandleExternalCallback} callback callback
+				 * @returns {void}
+				 */
 				const handleExternal = (value, type, callback) => {
-					if (typeof type === "function") {
-						callback = type;
-						type = undefined;
+					if (value === false) {
+						// Not externals, fallback to original factory
+						return callback();
 					}
-					if (value === false) return factory(data, callback);
-					if (value === true) value = dependency.request;
-					if (typeof type === "undefined" && /^[a-z0-9]+ /.test(value)) {
-						const idx = value.indexOf(" ");
-						type = value.substr(0, idx);
-						value = value.substr(idx + 1);
+					/** @type {ExternalValue} */
+					let externalConfig = value === true ? dependency.request : value;
+					// When no explicit type is specified, extract it from the externalConfig
+					if (type === undefined) {
+						if (
+							typeof externalConfig === "string" &&
+							UNSPECIFIED_EXTERNAL_TYPE_REGEXP.test(externalConfig)
+						) {
+							const idx = externalConfig.indexOf(" ");
+							type =
+								/** @type {ExternalsType} */
+								(externalConfig.slice(0, idx));
+							externalConfig = externalConfig.slice(idx + 1);
+						} else if (
+							Array.isArray(externalConfig) &&
+							externalConfig.length > 0 &&
+							UNSPECIFIED_EXTERNAL_TYPE_REGEXP.test(externalConfig[0])
+						) {
+							const firstItem = externalConfig[0];
+							const idx = firstItem.indexOf(" ");
+							type = /** @type {ExternalsType} */ (firstItem.slice(0, idx));
+							externalConfig = [
+								firstItem.slice(idx + 1),
+								...externalConfig.slice(1)
+							];
+						}
 					}
+
+					const defaultType =
+						typeof globalType === "function"
+							? globalType(dependency)
+							: globalType;
+					const resolvedType = type || defaultType;
+
+					// TODO make it pluggable/add hooks to `ExternalModule` to allow output modules own externals?
+					/** @type {DependencyMeta | undefined} */
+					let dependencyMeta;
+
+					if (
+						dependency instanceof HarmonyImportDependency ||
+						dependency instanceof ImportDependency ||
+						dependency instanceof ContextElementDependency
+					) {
+						const externalType =
+							dependency instanceof HarmonyImportDependency
+								? "module"
+								: dependency instanceof ImportDependency
+									? "import"
+									: undefined;
+
+						dependencyMeta = {
+							attributes: dependency.attributes,
+							externalType
+						};
+					} else if (dependency instanceof CssImportDependency) {
+						dependencyMeta = {
+							layer: dependency.layer,
+							supports: dependency.supports,
+							media: dependency.media
+						};
+					}
+
+					if (
+						resolvedType === "asset" &&
+						dependency instanceof CssUrlDependency
+					) {
+						dependencyMeta = { sourceType: "css-url" };
+					}
+
 					callback(
 						null,
-						new ExternalModule(value, type || globalType, dependency.request)
+						new ExternalModule(
+							externalConfig,
+							resolvedType,
+							dependency.request,
+							dependencyMeta
+						)
 					);
-					return true;
 				};
 
+				/**
+				 * @param {Externals} externals externals config
+				 * @param {HandleExternalCallback} callback callback
+				 * @returns {void}
+				 */
 				const handleExternals = (externals, callback) => {
 					if (typeof externals === "string") {
 						if (externals === dependency.request) {
-							return handleExternal(dependency.request, callback);
+							return handleExternal(dependency.request, undefined, callback);
 						}
 					} else if (Array.isArray(externals)) {
 						let i = 0;
 						const next = () => {
+							/** @type {boolean | undefined} */
 							let asyncFlag;
+							/**
+							 * @param {(Error | null)=} err err
+							 * @param {ExternalModule=} module module
+							 * @returns {void}
+							 */
 							const handleExternalsAndCallback = (err, module) => {
 								if (err) return callback(err);
 								if (!module) {
@@ -64,7 +250,7 @@ class ExternalModuleFactoryPlugin {
 								asyncFlag = true;
 								if (i >= externals.length) return callback();
 								handleExternals(externals[i++], handleExternalsAndCallback);
-							} while (!asyncFlag); // eslint-disable-line keyword-spacing
+							} while (!asyncFlag);
 							asyncFlag = false;
 						};
 
@@ -72,39 +258,113 @@ class ExternalModuleFactoryPlugin {
 						return;
 					} else if (externals instanceof RegExp) {
 						if (externals.test(dependency.request)) {
-							return handleExternal(dependency.request, callback);
+							return handleExternal(dependency.request, undefined, callback);
 						}
 					} else if (typeof externals === "function") {
-						externals.call(
-							null,
-							context,
-							dependency.request,
-							(err, value, type) => {
-								if (err) return callback(err);
-								if (typeof value !== "undefined") {
-									handleExternal(value, type, callback);
-								} else {
-									callback();
-								}
+						/**
+						 * @param {Error | null | undefined} err err
+						 * @param {ExternalValue=} value value
+						 * @param {ExternalsType=} type type
+						 * @returns {void}
+						 */
+						const cb = (err, value, type) => {
+							if (err) return callback(err);
+							if (value !== undefined) {
+								handleExternal(value, type, callback);
+							} else {
+								callback();
 							}
-						);
+						};
+						if (externals.length === 3) {
+							// TODO webpack 6 remove this
+							callDeprecatedExternals(
+								externals,
+								context,
+								dependency.request,
+								cb
+							);
+						} else {
+							const promise = externals(
+								{
+									context,
+									request: dependency.request,
+									dependencyType,
+									contextInfo,
+									getResolve: (options) => (context, request, callback) => {
+										/** @type {ResolveContext} */
+										const resolveContext = {
+											fileDependencies: data.fileDependencies,
+											missingDependencies: data.missingDependencies,
+											contextDependencies: data.contextDependencies
+										};
+										let resolver = normalModuleFactory.getResolver(
+											"normal",
+											dependencyType
+												? cachedSetProperty(
+														data.resolveOptions || EMPTY_RESOLVE_OPTIONS,
+														"dependencyType",
+														dependencyType
+													)
+												: data.resolveOptions
+										);
+										if (options) resolver = resolver.withOptions(options);
+										if (callback) {
+											resolver.resolve(
+												{},
+												context,
+												request,
+												resolveContext,
+												callback
+											);
+										} else {
+											return new Promise((resolve, reject) => {
+												resolver.resolve(
+													{},
+													context,
+													request,
+													resolveContext,
+													(err, result) => {
+														if (err) reject(err);
+														else resolve(result);
+													}
+												);
+											});
+										}
+									}
+								},
+								cb
+							);
+							if (promise && promise.then) {
+								promise.then((r) => cb(null, r), cb);
+							}
+						}
 						return;
-					} else if (
-						typeof externals === "object" &&
-						Object.prototype.hasOwnProperty.call(externals, dependency.request)
-					) {
-						return handleExternal(externals[dependency.request], callback);
+					} else if (typeof externals === "object") {
+						const resolvedExternals = resolveLayer(
+							externals,
+							/** @type {IssuerLayer} */
+							(contextInfo.issuerLayer)
+						);
+						if (
+							Object.prototype.hasOwnProperty.call(
+								resolvedExternals,
+								dependency.request
+							)
+						) {
+							return handleExternal(
+								resolvedExternals[dependency.request],
+								undefined,
+								callback
+							);
+						}
 					}
 					callback();
 				};
 
-				handleExternals(this.externals, (err, module) => {
-					if (err) return callback(err);
-					if (!module) return handleExternal(false, callback);
-					return callback(null, module);
-				});
+				handleExternals(this.externals, callback);
 			}
 		);
 	}
 }
+
 module.exports = ExternalModuleFactoryPlugin;
diff --git a/lib/ExternalsPlugin.js b/lib/ExternalsPlugin.js
index 697f1aaa0f1..d8d60e637fd 100644
--- a/lib/ExternalsPlugin.js
+++ b/lib/ExternalsPlugin.js
@@ -2,21 +2,91 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const { ModuleExternalInitFragment } = require("./ExternalModule");
 const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
+const ConcatenatedModule = require("./optimize/ConcatenatedModule");
+
+/** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
+/** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./ExternalModule").Imported} Imported */
+/** @typedef {import("./Dependency")} Dependency */
+
+const PLUGIN_NAME = "ExternalsPlugin";
 
 class ExternalsPlugin {
+	/**
+	 * @param {ExternalsType | ((dependency: Dependency) => ExternalsType)} type default external type
+	 * @param {Externals} externals externals config
+	 */
 	constructor(type, externals) {
 		this.type = type;
 		this.externals = externals;
 	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.compile.tap("ExternalsPlugin", ({ normalModuleFactory }) => {
+		compiler.hooks.compile.tap(PLUGIN_NAME, ({ normalModuleFactory }) => {
 			new ExternalModuleFactoryPlugin(this.type, this.externals).apply(
 				normalModuleFactory
 			);
 		});
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const { concatenatedModuleInfo } =
+				ConcatenatedModule.getCompilationHooks(compilation);
+			concatenatedModuleInfo.tap(PLUGIN_NAME, (updatedInfo, moduleInfo) => {
+				const rawExportMap = updatedInfo.rawExportMap;
+
+				if (!rawExportMap) {
+					return;
+				}
+
+				const chunkInitFragments = moduleInfo.chunkInitFragments;
+				const moduleExternalInitFragments =
+					/** @type {ModuleExternalInitFragment[]} */
+					(
+						chunkInitFragments
+							? /** @type {unknown[]} */
+								(chunkInitFragments).filter(
+									(fragment) => fragment instanceof ModuleExternalInitFragment
+								)
+							: []
+					);
+
+				let initFragmentChanged = false;
+
+				for (const fragment of moduleExternalInitFragments) {
+					const imported = fragment.getImported();
+
+					if (Array.isArray(imported)) {
+						const newImported =
+							/** @type {Imported} */
+							(
+								imported.map(([specifier, finalName]) => [
+									specifier,
+									rawExportMap.has(specifier)
+										? rawExportMap.get(specifier)
+										: finalName
+								])
+							);
+						fragment.setImported(newImported);
+						initFragmentChanged = true;
+					}
+				}
+
+				if (initFragmentChanged) {
+					return true;
+				}
+			});
+		});
 	}
 }
 
diff --git a/lib/FalseIIFEUmdWarning.js b/lib/FalseIIFEUmdWarning.js
new file mode 100644
index 00000000000..565eefa633b
--- /dev/null
+++ b/lib/FalseIIFEUmdWarning.js
@@ -0,0 +1,20 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Arka Pratim Chaudhuri @arkapratimc
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+class FalseIIFEUmdWarning extends WebpackError {
+	constructor() {
+		super();
+		/** @type {string} */
+		this.name = "FalseIIFEUmdWarning";
+		this.message =
+			"Configuration:\nSetting 'output.iife' to 'false' is incompatible with 'output.library.type' set to 'umd'. This configuration may cause unexpected behavior, as UMD libraries are expected to use an IIFE (Immediately Invoked Function Expression) to support various module formats. Consider setting 'output.iife' to 'true' or choosing a different 'library.type' to ensure compatibility.\nLearn more: https://webpack.js.org/configuration/output/";
+	}
+}
+
+module.exports = FalseIIFEUmdWarning;
diff --git a/lib/FileSystemInfo.js b/lib/FileSystemInfo.js
new file mode 100644
index 00000000000..5c64e59ead7
--- /dev/null
+++ b/lib/FileSystemInfo.js
@@ -0,0 +1,4133 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const nodeModule = require("module");
+const { isAbsolute } = require("path");
+const { create: createResolver } = require("enhanced-resolve");
+const asyncLib = require("neo-async");
+const { DEFAULTS } = require("./config/defaults");
+const AsyncQueue = require("./util/AsyncQueue");
+const StackedCacheMap = require("./util/StackedCacheMap");
+const createHash = require("./util/createHash");
+const { dirname, join, lstatReadlinkAbsolute, relative } = require("./util/fs");
+const makeSerializable = require("./util/makeSerializable");
+const memoize = require("./util/memoize");
+const processAsyncTree = require("./util/processAsyncTree");
+
+/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
+/** @typedef {import("enhanced-resolve").ResolveFunctionAsync} ResolveFunctionAsync */
+/** @typedef {import("./WebpackError")} WebpackError */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
+/** @typedef {import("./util/fs").JsonObject} JsonObject */
+/** @typedef {import("./util/fs").IStats} IStats */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/**
+ * @template T
+ * @typedef {import("./util/AsyncQueue").Callback} ProcessorCallback
+ */
+/**
+ * @template T, R
+ * @typedef {import("./util/AsyncQueue").Processor} Processor
+ */
+
+const supportsEsm = Number(process.versions.modules) >= 83;
+
+/** @type {Set} */
+const builtinModules = new Set(nodeModule.builtinModules);
+
+let FS_ACCURACY = 2000;
+
+/** @type {Set} */
+const EMPTY_SET = new Set();
+
+const RBDT_RESOLVE_INITIAL = 0;
+const RBDT_RESOLVE_FILE = 1;
+const RBDT_RESOLVE_DIRECTORY = 2;
+const RBDT_RESOLVE_CJS_FILE = 3;
+const RBDT_RESOLVE_CJS_FILE_AS_CHILD = 4;
+const RBDT_RESOLVE_ESM_FILE = 5;
+const RBDT_DIRECTORY = 6;
+const RBDT_FILE = 7;
+const RBDT_DIRECTORY_DEPENDENCIES = 8;
+const RBDT_FILE_DEPENDENCIES = 9;
+
+/** @typedef {RBDT_RESOLVE_INITIAL | RBDT_RESOLVE_FILE | RBDT_RESOLVE_DIRECTORY | RBDT_RESOLVE_CJS_FILE | RBDT_RESOLVE_CJS_FILE_AS_CHILD | RBDT_RESOLVE_ESM_FILE | RBDT_DIRECTORY | RBDT_FILE | RBDT_DIRECTORY_DEPENDENCIES | RBDT_FILE_DEPENDENCIES} JobType */
+
+const INVALID = Symbol("invalid");
+
+// eslint-disable-next-line jsdoc/ts-no-empty-object-type
+/** @typedef {{  }} ExistenceOnlyTimeEntry */
+
+/**
+ * @typedef {object} FileSystemInfoEntry
+ * @property {number} safeTime
+ * @property {number=} timestamp
+ */
+
+/**
+ * @typedef {object} ResolvedContextFileSystemInfoEntry
+ * @property {number} safeTime
+ * @property {string=} timestampHash
+ */
+
+/** @typedef {Set} Symlinks */
+
+/**
+ * @typedef {object} ContextFileSystemInfoEntry
+ * @property {number} safeTime
+ * @property {string=} timestampHash
+ * @property {ResolvedContextFileSystemInfoEntry=} resolved
+ * @property {Symlinks=} symlinks
+ */
+
+/**
+ * @typedef {object} TimestampAndHash
+ * @property {number} safeTime
+ * @property {number=} timestamp
+ * @property {string} hash
+ */
+
+/**
+ * @typedef {object} ResolvedContextTimestampAndHash
+ * @property {number} safeTime
+ * @property {string=} timestampHash
+ * @property {string} hash
+ */
+
+/**
+ * @typedef {object} ContextTimestampAndHash
+ * @property {number} safeTime
+ * @property {string=} timestampHash
+ * @property {string} hash
+ * @property {ResolvedContextTimestampAndHash=} resolved
+ * @property {Symlinks=} symlinks
+ */
+
+/**
+ * @typedef {object} ContextHash
+ * @property {string} hash
+ * @property {string=} resolved
+ * @property {Symlinks=} symlinks
+ */
+
+/** @typedef {Set} SnapshotContent */
+
+/**
+ * @typedef {object} SnapshotOptimizationEntry
+ * @property {Snapshot} snapshot
+ * @property {number} shared
+ * @property {SnapshotContent | undefined} snapshotContent
+ * @property {Set | undefined} children
+ */
+
+/** @typedef {Map} ResolveResults */
+
+/** @typedef {Set} Files */
+/** @typedef {Set} Directories */
+/** @typedef {Set} Missing */
+
+/**
+ * @typedef {object} ResolveDependencies
+ * @property {Files} files list of files
+ * @property {Directories} directories list of directories
+ * @property {Missing} missing list of missing entries
+ */
+
+/**
+ * @typedef {object} ResolveBuildDependenciesResult
+ * @property {Files} files list of files
+ * @property {Directories} directories list of directories
+ * @property {Missing} missing list of missing entries
+ * @property {ResolveResults} resolveResults stored resolve results
+ * @property {ResolveDependencies} resolveDependencies dependencies of the resolving
+ */
+
+/**
+ * @typedef {object} SnapshotOptions
+ * @property {boolean=} hash should use hash to snapshot
+ * @property {boolean=} timestamp should use timestamp to snapshot
+ */
+
+const DONE_ITERATOR_RESULT = new Set().keys().next();
+
+// cspell:word tshs
+// Tsh = Timestamp + Hash
+// Tshs = Timestamp + Hash combinations
+
+class SnapshotIterator {
+	/**
+	 * @param {() => IteratorResult} next next
+	 */
+	constructor(next) {
+		this.next = next;
+	}
+}
+
+/**
+ * @template T
+ * @typedef {(snapshot: Snapshot) => T[]} GetMapsFunction
+ */
+
+/**
+ * @template T
+ */
+class SnapshotIterable {
+	/**
+	 * @param {Snapshot} snapshot snapshot
+	 * @param {GetMapsFunction} getMaps get maps function
+	 */
+	constructor(snapshot, getMaps) {
+		this.snapshot = snapshot;
+		this.getMaps = getMaps;
+	}
+
+	[Symbol.iterator]() {
+		let state = 0;
+		/** @type {IterableIterator} */
+		let it;
+		/** @type {GetMapsFunction} */
+		let getMaps;
+		/** @type {T[]} */
+		let maps;
+		/** @type {Snapshot} */
+		let snapshot;
+		/** @type {Snapshot[] | undefined} */
+		let queue;
+		return new SnapshotIterator(() => {
+			for (;;) {
+				switch (state) {
+					case 0:
+						snapshot = this.snapshot;
+						getMaps = this.getMaps;
+						maps = getMaps(snapshot);
+						state = 1;
+					/* falls through */
+					case 1:
+						if (maps.length > 0) {
+							const map = maps.pop();
+							if (map !== undefined) {
+								it =
+									/** @type {Set | Map} */
+									(map).keys();
+								state = 2;
+							} else {
+								break;
+							}
+						} else {
+							state = 3;
+							break;
+						}
+					/* falls through */
+					case 2: {
+						const result = it.next();
+						if (!result.done) return result;
+						state = 1;
+						break;
+					}
+					case 3: {
+						const children = snapshot.children;
+						if (children !== undefined) {
+							if (children.size === 1) {
+								// shortcut for a single child
+								// avoids allocation of queue
+								for (const child of children) snapshot = child;
+								maps = getMaps(snapshot);
+								state = 1;
+								break;
+							}
+							if (queue === undefined) queue = [];
+							for (const child of children) {
+								queue.push(child);
+							}
+						}
+						if (queue !== undefined && queue.length > 0) {
+							snapshot = /** @type {Snapshot} */ (queue.pop());
+							maps = getMaps(snapshot);
+							state = 1;
+							break;
+						} else {
+							state = 4;
+						}
+					}
+					/* falls through */
+					case 4:
+						return DONE_ITERATOR_RESULT;
+				}
+			}
+		});
+	}
+}
+
+/** @typedef {Map} FileTimestamps */
+/** @typedef {Map} FileHashes */
+/** @typedef {Map} FileTshs */
+/** @typedef {Map} ContextTimestamps */
+/** @typedef {Map} ContextHashes */
+/** @typedef {Map} ContextTshs */
+/** @typedef {Map} MissingExistence */
+/** @typedef {Map} ManagedItemInfo */
+/** @typedef {Set} ManagedFiles */
+/** @typedef {Set} ManagedContexts */
+/** @typedef {Set} ManagedMissing */
+/** @typedef {Set} Children */
+
+class Snapshot {
+	constructor() {
+		this._flags = 0;
+		/** @type {Iterable | undefined} */
+		this._cachedFileIterable = undefined;
+		/** @type {Iterable | undefined} */
+		this._cachedContextIterable = undefined;
+		/** @type {Iterable | undefined} */
+		this._cachedMissingIterable = undefined;
+		/** @type {number | undefined} */
+		this.startTime = undefined;
+		/** @type {FileTimestamps | undefined} */
+		this.fileTimestamps = undefined;
+		/** @type {FileHashes | undefined} */
+		this.fileHashes = undefined;
+		/** @type {FileTshs | undefined} */
+		this.fileTshs = undefined;
+		/** @type {ContextTimestamps | undefined} */
+		this.contextTimestamps = undefined;
+		/** @type {ContextHashes | undefined} */
+		this.contextHashes = undefined;
+		/** @type {ContextTshs | undefined} */
+		this.contextTshs = undefined;
+		/** @type {MissingExistence | undefined} */
+		this.missingExistence = undefined;
+		/** @type {ManagedItemInfo | undefined} */
+		this.managedItemInfo = undefined;
+		/** @type {ManagedFiles | undefined} */
+		this.managedFiles = undefined;
+		/** @type {ManagedContexts | undefined} */
+		this.managedContexts = undefined;
+		/** @type {ManagedMissing | undefined} */
+		this.managedMissing = undefined;
+		/** @type {Children | undefined} */
+		this.children = undefined;
+	}
+
+	hasStartTime() {
+		return (this._flags & 1) !== 0;
+	}
+
+	/**
+	 * @param {number} value start value
+	 */
+	setStartTime(value) {
+		this._flags |= 1;
+		this.startTime = value;
+	}
+
+	/**
+	 * @param {number | undefined} value value
+	 * @param {Snapshot} snapshot snapshot
+	 */
+	setMergedStartTime(value, snapshot) {
+		if (value) {
+			if (snapshot.hasStartTime()) {
+				this.setStartTime(
+					Math.min(
+						value,
+						/** @type {NonNullable} */
+						(snapshot.startTime)
+					)
+				);
+			} else {
+				this.setStartTime(value);
+			}
+		} else if (snapshot.hasStartTime()) {
+			this.setStartTime(
+				/** @type {NonNullable} */
+				(snapshot.startTime)
+			);
+		}
+	}
+
+	hasFileTimestamps() {
+		return (this._flags & 2) !== 0;
+	}
+
+	/**
+	 * @param {FileTimestamps} value file timestamps
+	 */
+	setFileTimestamps(value) {
+		this._flags |= 2;
+		this.fileTimestamps = value;
+	}
+
+	hasFileHashes() {
+		return (this._flags & 4) !== 0;
+	}
+
+	/**
+	 * @param {FileHashes} value file hashes
+	 */
+	setFileHashes(value) {
+		this._flags |= 4;
+		this.fileHashes = value;
+	}
+
+	hasFileTshs() {
+		return (this._flags & 8) !== 0;
+	}
+
+	/**
+	 * @param {FileTshs} value file tshs
+	 */
+	setFileTshs(value) {
+		this._flags |= 8;
+		this.fileTshs = value;
+	}
+
+	hasContextTimestamps() {
+		return (this._flags & 0x10) !== 0;
+	}
+
+	/**
+	 * @param {ContextTimestamps} value context timestamps
+	 */
+	setContextTimestamps(value) {
+		this._flags |= 0x10;
+		this.contextTimestamps = value;
+	}
+
+	hasContextHashes() {
+		return (this._flags & 0x20) !== 0;
+	}
+
+	/**
+	 * @param {ContextHashes} value context hashes
+	 */
+	setContextHashes(value) {
+		this._flags |= 0x20;
+		this.contextHashes = value;
+	}
+
+	hasContextTshs() {
+		return (this._flags & 0x40) !== 0;
+	}
+
+	/**
+	 * @param {ContextTshs} value context tshs
+	 */
+	setContextTshs(value) {
+		this._flags |= 0x40;
+		this.contextTshs = value;
+	}
+
+	hasMissingExistence() {
+		return (this._flags & 0x80) !== 0;
+	}
+
+	/**
+	 * @param {MissingExistence} value context tshs
+	 */
+	setMissingExistence(value) {
+		this._flags |= 0x80;
+		this.missingExistence = value;
+	}
+
+	hasManagedItemInfo() {
+		return (this._flags & 0x100) !== 0;
+	}
+
+	/**
+	 * @param {ManagedItemInfo} value managed item info
+	 */
+	setManagedItemInfo(value) {
+		this._flags |= 0x100;
+		this.managedItemInfo = value;
+	}
+
+	hasManagedFiles() {
+		return (this._flags & 0x200) !== 0;
+	}
+
+	/**
+	 * @param {ManagedFiles} value managed files
+	 */
+	setManagedFiles(value) {
+		this._flags |= 0x200;
+		this.managedFiles = value;
+	}
+
+	hasManagedContexts() {
+		return (this._flags & 0x400) !== 0;
+	}
+
+	/**
+	 * @param {ManagedContexts} value managed contexts
+	 */
+	setManagedContexts(value) {
+		this._flags |= 0x400;
+		this.managedContexts = value;
+	}
+
+	hasManagedMissing() {
+		return (this._flags & 0x800) !== 0;
+	}
+
+	/**
+	 * @param {ManagedMissing} value managed missing
+	 */
+	setManagedMissing(value) {
+		this._flags |= 0x800;
+		this.managedMissing = value;
+	}
+
+	hasChildren() {
+		return (this._flags & 0x1000) !== 0;
+	}
+
+	/**
+	 * @param {Children} value children
+	 */
+	setChildren(value) {
+		this._flags |= 0x1000;
+		this.children = value;
+	}
+
+	/**
+	 * @param {Snapshot} child children
+	 */
+	addChild(child) {
+		if (!this.hasChildren()) {
+			this.setChildren(new Set());
+		}
+		/** @type {Children} */
+		(this.children).add(child);
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write }) {
+		write(this._flags);
+		if (this.hasStartTime()) write(this.startTime);
+		if (this.hasFileTimestamps()) write(this.fileTimestamps);
+		if (this.hasFileHashes()) write(this.fileHashes);
+		if (this.hasFileTshs()) write(this.fileTshs);
+		if (this.hasContextTimestamps()) write(this.contextTimestamps);
+		if (this.hasContextHashes()) write(this.contextHashes);
+		if (this.hasContextTshs()) write(this.contextTshs);
+		if (this.hasMissingExistence()) write(this.missingExistence);
+		if (this.hasManagedItemInfo()) write(this.managedItemInfo);
+		if (this.hasManagedFiles()) write(this.managedFiles);
+		if (this.hasManagedContexts()) write(this.managedContexts);
+		if (this.hasManagedMissing()) write(this.managedMissing);
+		if (this.hasChildren()) write(this.children);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize({ read }) {
+		this._flags = read();
+		if (this.hasStartTime()) this.startTime = read();
+		if (this.hasFileTimestamps()) this.fileTimestamps = read();
+		if (this.hasFileHashes()) this.fileHashes = read();
+		if (this.hasFileTshs()) this.fileTshs = read();
+		if (this.hasContextTimestamps()) this.contextTimestamps = read();
+		if (this.hasContextHashes()) this.contextHashes = read();
+		if (this.hasContextTshs()) this.contextTshs = read();
+		if (this.hasMissingExistence()) this.missingExistence = read();
+		if (this.hasManagedItemInfo()) this.managedItemInfo = read();
+		if (this.hasManagedFiles()) this.managedFiles = read();
+		if (this.hasManagedContexts()) this.managedContexts = read();
+		if (this.hasManagedMissing()) this.managedMissing = read();
+		if (this.hasChildren()) this.children = read();
+	}
+
+	/**
+	 * @template T
+	 * @param {GetMapsFunction} getMaps first
+	 * @returns {SnapshotIterable} iterable
+	 */
+	_createIterable(getMaps) {
+		return new SnapshotIterable(this, getMaps);
+	}
+
+	/**
+	 * @returns {Iterable} iterable
+	 */
+	getFileIterable() {
+		if (this._cachedFileIterable === undefined) {
+			this._cachedFileIterable = this._createIterable((s) => [
+				s.fileTimestamps,
+				s.fileHashes,
+				s.fileTshs,
+				s.managedFiles
+			]);
+		}
+		return this._cachedFileIterable;
+	}
+
+	/**
+	 * @returns {Iterable} iterable
+	 */
+	getContextIterable() {
+		if (this._cachedContextIterable === undefined) {
+			this._cachedContextIterable = this._createIterable((s) => [
+				s.contextTimestamps,
+				s.contextHashes,
+				s.contextTshs,
+				s.managedContexts
+			]);
+		}
+		return this._cachedContextIterable;
+	}
+
+	/**
+	 * @returns {Iterable} iterable
+	 */
+	getMissingIterable() {
+		if (this._cachedMissingIterable === undefined) {
+			this._cachedMissingIterable = this._createIterable((s) => [
+				s.missingExistence,
+				s.managedMissing
+			]);
+		}
+		return this._cachedMissingIterable;
+	}
+}
+
+makeSerializable(Snapshot, "webpack/lib/FileSystemInfo", "Snapshot");
+
+const MIN_COMMON_SNAPSHOT_SIZE = 3;
+
+/**
+ * @template U, T
+ * @typedef {U extends true ? Set : Map} SnapshotOptimizationValue
+ */
+
+/**
+ * @template T
+ * @template {boolean} [U=false]
+ */
+class SnapshotOptimization {
+	/**
+	 * @param {(snapshot: Snapshot) => boolean} has has value
+	 * @param {(snapshot: Snapshot) => SnapshotOptimizationValue | undefined} get get value
+	 * @param {(snapshot: Snapshot, value: SnapshotOptimizationValue) => void} set set value
+	 * @param {boolean=} useStartTime use the start time of snapshots
+	 * @param {U=} isSet value is an Set instead of a Map
+	 */
+	constructor(
+		has,
+		get,
+		set,
+		useStartTime = true,
+		isSet = /** @type {U} */ (false)
+	) {
+		this._has = has;
+		this._get = get;
+		this._set = set;
+		this._useStartTime = useStartTime;
+		/** @type {U} */
+		this._isSet = isSet;
+		/** @type {Map} */
+		this._map = new Map();
+		this._statItemsShared = 0;
+		this._statItemsUnshared = 0;
+		this._statSharedSnapshots = 0;
+		this._statReusedSharedSnapshots = 0;
+	}
+
+	getStatisticMessage() {
+		const total = this._statItemsShared + this._statItemsUnshared;
+		if (total === 0) return;
+		return `${
+			this._statItemsShared && Math.round((this._statItemsShared * 100) / total)
+		}% (${this._statItemsShared}/${total}) entries shared via ${
+			this._statSharedSnapshots
+		} shared snapshots (${
+			this._statReusedSharedSnapshots + this._statSharedSnapshots
+		} times referenced)`;
+	}
+
+	clear() {
+		this._map.clear();
+		this._statItemsShared = 0;
+		this._statItemsUnshared = 0;
+		this._statSharedSnapshots = 0;
+		this._statReusedSharedSnapshots = 0;
+	}
+
+	/**
+	 * @param {Snapshot} newSnapshot snapshot
+	 * @param {Set} capturedFiles files to snapshot/share
+	 * @returns {void}
+	 */
+	optimize(newSnapshot, capturedFiles) {
+		if (capturedFiles.size === 0) {
+			return;
+		}
+		/**
+		 * @param {SnapshotOptimizationEntry} entry optimization entry
+		 * @returns {void}
+		 */
+		const increaseSharedAndStoreOptimizationEntry = (entry) => {
+			if (entry.children !== undefined) {
+				for (const child of entry.children) {
+					increaseSharedAndStoreOptimizationEntry(child);
+				}
+			}
+			entry.shared++;
+			storeOptimizationEntry(entry);
+		};
+		/**
+		 * @param {SnapshotOptimizationEntry} entry optimization entry
+		 * @returns {void}
+		 */
+		const storeOptimizationEntry = (entry) => {
+			for (const path of /** @type {SnapshotContent} */ (
+				entry.snapshotContent
+			)) {
+				const old =
+					/** @type {SnapshotOptimizationEntry} */
+					(this._map.get(path));
+				if (old.shared < entry.shared) {
+					this._map.set(path, entry);
+				}
+				capturedFiles.delete(path);
+			}
+		};
+
+		/** @type {SnapshotOptimizationEntry | undefined} */
+		let newOptimizationEntry;
+
+		const capturedFilesSize = capturedFiles.size;
+
+		/** @type {Set | undefined} */
+		const optimizationEntries = new Set();
+
+		for (const path of capturedFiles) {
+			const optimizationEntry = this._map.get(path);
+			if (optimizationEntry === undefined) {
+				if (newOptimizationEntry === undefined) {
+					newOptimizationEntry = {
+						snapshot: newSnapshot,
+						shared: 0,
+						snapshotContent: undefined,
+						children: undefined
+					};
+				}
+				this._map.set(path, newOptimizationEntry);
+			} else {
+				optimizationEntries.add(optimizationEntry);
+			}
+		}
+
+		optimizationEntriesLabel: for (const optimizationEntry of optimizationEntries) {
+			const snapshot = optimizationEntry.snapshot;
+			if (optimizationEntry.shared > 0) {
+				// It's a shared snapshot
+				// We can't change it, so we can only use it when all files match
+				// and startTime is compatible
+				if (
+					this._useStartTime &&
+					newSnapshot.startTime &&
+					(!snapshot.startTime || snapshot.startTime > newSnapshot.startTime)
+				) {
+					continue;
+				}
+				/** @type {Set} */
+				const nonSharedFiles = new Set();
+				const snapshotContent =
+					/** @type {NonNullable} */
+					(optimizationEntry.snapshotContent);
+				const snapshotEntries =
+					/** @type {SnapshotOptimizationValue} */
+					(this._get(snapshot));
+				for (const path of snapshotContent) {
+					if (!capturedFiles.has(path)) {
+						if (!snapshotEntries.has(path)) {
+							// File is not shared and can't be removed from the snapshot
+							// because it's in a child of the snapshot
+							continue optimizationEntriesLabel;
+						}
+						nonSharedFiles.add(path);
+					}
+				}
+				if (nonSharedFiles.size === 0) {
+					// The complete snapshot is shared
+					// add it as child
+					newSnapshot.addChild(snapshot);
+					increaseSharedAndStoreOptimizationEntry(optimizationEntry);
+					this._statReusedSharedSnapshots++;
+				} else {
+					// Only a part of the snapshot is shared
+					const sharedCount = snapshotContent.size - nonSharedFiles.size;
+					if (sharedCount < MIN_COMMON_SNAPSHOT_SIZE) {
+						// Common part it too small
+						continue;
+					}
+					// Extract common timestamps from both snapshots
+					/** @type {Set | Map} */
+					let commonMap;
+					if (this._isSet) {
+						commonMap = new Set();
+						for (const path of /** @type {Set} */ (snapshotEntries)) {
+							if (nonSharedFiles.has(path)) continue;
+							commonMap.add(path);
+							snapshotEntries.delete(path);
+						}
+					} else {
+						commonMap = new Map();
+						const map = /** @type {Map} */ (snapshotEntries);
+						for (const [path, value] of map) {
+							if (nonSharedFiles.has(path)) continue;
+							commonMap.set(path, value);
+							snapshotEntries.delete(path);
+						}
+					}
+					// Create and attach snapshot
+					const commonSnapshot = new Snapshot();
+					if (this._useStartTime) {
+						commonSnapshot.setMergedStartTime(newSnapshot.startTime, snapshot);
+					}
+					this._set(
+						commonSnapshot,
+						/** @type {SnapshotOptimizationValue} */ (commonMap)
+					);
+					newSnapshot.addChild(commonSnapshot);
+					snapshot.addChild(commonSnapshot);
+					// Create optimization entry
+					const newEntry = {
+						snapshot: commonSnapshot,
+						shared: optimizationEntry.shared + 1,
+						snapshotContent: new Set(commonMap.keys()),
+						children: undefined
+					};
+					if (optimizationEntry.children === undefined) {
+						optimizationEntry.children = new Set();
+					}
+					optimizationEntry.children.add(newEntry);
+					storeOptimizationEntry(newEntry);
+					this._statSharedSnapshots++;
+				}
+			} else {
+				// It's a unshared snapshot
+				// We can extract a common shared snapshot
+				// with all common files
+				const snapshotEntries = this._get(snapshot);
+				if (snapshotEntries === undefined) {
+					// Incomplete snapshot, that can't be used
+					continue;
+				}
+				/** @type {Set | Map} */
+				let commonMap;
+				if (this._isSet) {
+					commonMap = new Set();
+					const set = /** @type {Set} */ (snapshotEntries);
+					if (capturedFiles.size < set.size) {
+						for (const path of capturedFiles) {
+							if (set.has(path)) commonMap.add(path);
+						}
+					} else {
+						for (const path of set) {
+							if (capturedFiles.has(path)) commonMap.add(path);
+						}
+					}
+				} else {
+					commonMap = new Map();
+					const map = /** @type {Map} */ (snapshotEntries);
+					for (const path of capturedFiles) {
+						const ts = map.get(path);
+						if (ts === undefined) continue;
+						commonMap.set(path, ts);
+					}
+				}
+
+				if (commonMap.size < MIN_COMMON_SNAPSHOT_SIZE) {
+					// Common part it too small
+					continue;
+				}
+				// Create and attach snapshot
+				const commonSnapshot = new Snapshot();
+				if (this._useStartTime) {
+					commonSnapshot.setMergedStartTime(newSnapshot.startTime, snapshot);
+				}
+				this._set(
+					commonSnapshot,
+					/** @type {SnapshotOptimizationValue} */
+					(commonMap)
+				);
+				newSnapshot.addChild(commonSnapshot);
+				snapshot.addChild(commonSnapshot);
+				// Remove files from snapshot
+				for (const path of commonMap.keys()) snapshotEntries.delete(path);
+				const sharedCount = commonMap.size;
+				this._statItemsUnshared -= sharedCount;
+				this._statItemsShared += sharedCount;
+				// Create optimization entry
+				storeOptimizationEntry({
+					snapshot: commonSnapshot,
+					shared: 2,
+					snapshotContent: new Set(commonMap.keys()),
+					children: undefined
+				});
+				this._statSharedSnapshots++;
+			}
+		}
+		const unshared = capturedFiles.size;
+		this._statItemsUnshared += unshared;
+		this._statItemsShared += capturedFilesSize - unshared;
+	}
+}
+
+/**
+ * @param {string} str input
+ * @returns {string} result
+ */
+const parseString = (str) => {
+	if (str[0] === "'" || str[0] === "`") {
+		str = `"${str.slice(1, -1).replace(/"/g, '\\"')}"`;
+	}
+	return JSON.parse(str);
+};
+
+/* istanbul ignore next */
+/**
+ * @param {number} mtime mtime
+ */
+const applyMtime = (mtime) => {
+	if (FS_ACCURACY > 1 && mtime % 2 !== 0) FS_ACCURACY = 1;
+	else if (FS_ACCURACY > 10 && mtime % 20 !== 0) FS_ACCURACY = 10;
+	else if (FS_ACCURACY > 100 && mtime % 200 !== 0) FS_ACCURACY = 100;
+	else if (FS_ACCURACY > 1000 && mtime % 2000 !== 0) FS_ACCURACY = 1000;
+};
+
+/**
+ * @template T
+ * @template K
+ * @param {Map | undefined} a source map
+ * @param {Map | undefined} b joining map
+ * @returns {Map} joined map
+ */
+const mergeMaps = (a, b) => {
+	if (!b || b.size === 0) return /** @type {Map} */ (a);
+	if (!a || a.size === 0) return /** @type {Map} */ (b);
+	/** @type {Map} */
+	const map = new Map(a);
+	for (const [key, value] of b) {
+		map.set(key, value);
+	}
+	return map;
+};
+
+/**
+ * @template T
+ * @param {Set | undefined} a source map
+ * @param {Set | undefined} b joining map
+ * @returns {Set} joined map
+ */
+const mergeSets = (a, b) => {
+	if (!b || b.size === 0) return /** @type {Set} */ (a);
+	if (!a || a.size === 0) return /** @type {Set} */ (b);
+	/** @type {Set} */
+	const map = new Set(a);
+	for (const item of b) {
+		map.add(item);
+	}
+	return map;
+};
+
+/**
+ * Finding file or directory to manage
+ * @param {string} managedPath path that is managing by {@link FileSystemInfo}
+ * @param {string} path path to file or directory
+ * @returns {string | null} managed item
+ * @example
+ * getManagedItem(
+ *   '/Users/user/my-project/node_modules/',
+ *   '/Users/user/my-project/node_modules/package/index.js'
+ * ) === '/Users/user/my-project/node_modules/package'
+ * getManagedItem(
+ *   '/Users/user/my-project/node_modules/',
+ *   '/Users/user/my-project/node_modules/package1/node_modules/package2'
+ * ) === '/Users/user/my-project/node_modules/package1/node_modules/package2'
+ * getManagedItem(
+ *   '/Users/user/my-project/node_modules/',
+ *   '/Users/user/my-project/node_modules/.bin/script.js'
+ * ) === null // hidden files are disallowed as managed items
+ * getManagedItem(
+ *   '/Users/user/my-project/node_modules/',
+ *   '/Users/user/my-project/node_modules/package'
+ * ) === '/Users/user/my-project/node_modules/package'
+ */
+const getManagedItem = (managedPath, path) => {
+	let i = managedPath.length;
+	let slashes = 1;
+	let startingPosition = true;
+	loop: while (i < path.length) {
+		switch (path.charCodeAt(i)) {
+			case 47: // slash
+			case 92: // backslash
+				if (--slashes === 0) break loop;
+				startingPosition = true;
+				break;
+			case 46: // .
+				// hidden files are disallowed as managed items
+				// it's probably .yarn-integrity or .cache
+				if (startingPosition) return null;
+				break;
+			case 64: // @
+				if (!startingPosition) return null;
+				slashes++;
+				break;
+			default:
+				startingPosition = false;
+				break;
+		}
+		i++;
+	}
+	if (i === path.length) slashes--;
+	// return null when path is incomplete
+	if (slashes !== 0) return null;
+	// if (path.slice(i + 1, i + 13) === "node_modules")
+	if (
+		path.length >= i + 13 &&
+		path.charCodeAt(i + 1) === 110 &&
+		path.charCodeAt(i + 2) === 111 &&
+		path.charCodeAt(i + 3) === 100 &&
+		path.charCodeAt(i + 4) === 101 &&
+		path.charCodeAt(i + 5) === 95 &&
+		path.charCodeAt(i + 6) === 109 &&
+		path.charCodeAt(i + 7) === 111 &&
+		path.charCodeAt(i + 8) === 100 &&
+		path.charCodeAt(i + 9) === 117 &&
+		path.charCodeAt(i + 10) === 108 &&
+		path.charCodeAt(i + 11) === 101 &&
+		path.charCodeAt(i + 12) === 115
+	) {
+		// if this is the end of the path
+		if (path.length === i + 13) {
+			// return the node_modules directory
+			// it's special
+			return path;
+		}
+		const c = path.charCodeAt(i + 13);
+		// if next symbol is slash or backslash
+		if (c === 47 || c === 92) {
+			// Managed subpath
+			return getManagedItem(path.slice(0, i + 14), path);
+		}
+	}
+	return path.slice(0, i);
+};
+
+/**
+ * @template {ContextFileSystemInfoEntry | ContextTimestampAndHash} T
+ * @param {T | null} entry entry
+ * @returns {T["resolved"] | null | undefined} the resolved entry
+ */
+const getResolvedTimestamp = (entry) => {
+	if (entry === null) return null;
+	if (entry.resolved !== undefined) return entry.resolved;
+	return entry.symlinks === undefined ? entry : undefined;
+};
+
+/**
+ * @param {ContextHash | null} entry entry
+ * @returns {string | null | undefined} the resolved entry
+ */
+const getResolvedHash = (entry) => {
+	if (entry === null) return null;
+	if (entry.resolved !== undefined) return entry.resolved;
+	return entry.symlinks === undefined ? entry.hash : undefined;
+};
+
+/**
+ * @template T
+ * @param {Set} source source
+ * @param {Set} target target
+ */
+const addAll = (source, target) => {
+	for (const key of source) target.add(key);
+};
+
+const getEsModuleLexer = memoize(() => require("es-module-lexer"));
+
+/** @typedef {Set} LoggedPaths */
+
+/** @typedef {FileSystemInfoEntry | "ignore" | null} FileTimestamp */
+/** @typedef {ContextFileSystemInfoEntry | "ignore" | null} ContextTimestamp */
+/** @typedef {ResolvedContextFileSystemInfoEntry | "ignore" | null} ResolvedContextTimestamp */
+
+/** @typedef {(err?: WebpackError | null, result?: boolean) => void} CheckSnapshotValidCallback */
+
+/**
+ * Used to access information about the filesystem in a cached way
+ */
+class FileSystemInfo {
+	/**
+	 * @param {InputFileSystem} fs file system
+	 * @param {object} options options
+	 * @param {Iterable=} options.unmanagedPaths paths that are not managed by a package manager and the contents are subject to change
+	 * @param {Iterable=} options.managedPaths paths that are only managed by a package manager
+	 * @param {Iterable=} options.immutablePaths paths that are immutable
+	 * @param {Logger=} options.logger logger used to log invalid snapshots
+	 * @param {HashFunction=} options.hashFunction the hash function to use
+	 */
+	constructor(
+		fs,
+		{
+			unmanagedPaths = [],
+			managedPaths = [],
+			immutablePaths = [],
+			logger,
+			hashFunction = DEFAULTS.HASH_FUNCTION
+		} = {}
+	) {
+		this.fs = fs;
+		this.logger = logger;
+		this._remainingLogs = logger ? 40 : 0;
+		/** @type {LoggedPaths | undefined} */
+		this._loggedPaths = logger ? new Set() : undefined;
+		this._hashFunction = hashFunction;
+		/** @type {WeakMap} */
+		this._snapshotCache = new WeakMap();
+		this._fileTimestampsOptimization = new SnapshotOptimization(
+			(s) => s.hasFileTimestamps(),
+			(s) => s.fileTimestamps,
+			(s, v) => s.setFileTimestamps(v)
+		);
+		this._fileHashesOptimization = new SnapshotOptimization(
+			(s) => s.hasFileHashes(),
+			(s) => s.fileHashes,
+			(s, v) => s.setFileHashes(v),
+			false
+		);
+		this._fileTshsOptimization = new SnapshotOptimization(
+			(s) => s.hasFileTshs(),
+			(s) => s.fileTshs,
+			(s, v) => s.setFileTshs(v)
+		);
+		this._contextTimestampsOptimization = new SnapshotOptimization(
+			(s) => s.hasContextTimestamps(),
+			(s) => s.contextTimestamps,
+			(s, v) => s.setContextTimestamps(v)
+		);
+		this._contextHashesOptimization = new SnapshotOptimization(
+			(s) => s.hasContextHashes(),
+			(s) => s.contextHashes,
+			(s, v) => s.setContextHashes(v),
+			false
+		);
+		this._contextTshsOptimization = new SnapshotOptimization(
+			(s) => s.hasContextTshs(),
+			(s) => s.contextTshs,
+			(s, v) => s.setContextTshs(v)
+		);
+		this._missingExistenceOptimization = new SnapshotOptimization(
+			(s) => s.hasMissingExistence(),
+			(s) => s.missingExistence,
+			(s, v) => s.setMissingExistence(v),
+			false
+		);
+		this._managedItemInfoOptimization = new SnapshotOptimization(
+			(s) => s.hasManagedItemInfo(),
+			(s) => s.managedItemInfo,
+			(s, v) => s.setManagedItemInfo(v),
+			false
+		);
+		this._managedFilesOptimization = new SnapshotOptimization(
+			(s) => s.hasManagedFiles(),
+			(s) => s.managedFiles,
+			(s, v) => s.setManagedFiles(v),
+			false,
+			true
+		);
+		this._managedContextsOptimization = new SnapshotOptimization(
+			(s) => s.hasManagedContexts(),
+			(s) => s.managedContexts,
+			(s, v) => s.setManagedContexts(v),
+			false,
+			true
+		);
+		this._managedMissingOptimization = new SnapshotOptimization(
+			(s) => s.hasManagedMissing(),
+			(s) => s.managedMissing,
+			(s, v) => s.setManagedMissing(v),
+			false,
+			true
+		);
+		/** @type {StackedCacheMap} */
+		this._fileTimestamps = new StackedCacheMap();
+		/** @type {Map} */
+		this._fileHashes = new Map();
+		/** @type {Map} */
+		this._fileTshs = new Map();
+		/** @type {StackedCacheMap} */
+		this._contextTimestamps = new StackedCacheMap();
+		/** @type {Map} */
+		this._contextHashes = new Map();
+		/** @type {Map} */
+		this._contextTshs = new Map();
+		/** @type {Map} */
+		this._managedItems = new Map();
+		/** @type {AsyncQueue} */
+		this.fileTimestampQueue = new AsyncQueue({
+			name: "file timestamp",
+			parallelism: 30,
+			processor: this._readFileTimestamp.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.fileHashQueue = new AsyncQueue({
+			name: "file hash",
+			parallelism: 10,
+			processor: this._readFileHash.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.contextTimestampQueue = new AsyncQueue({
+			name: "context timestamp",
+			parallelism: 2,
+			processor: this._readContextTimestamp.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.contextHashQueue = new AsyncQueue({
+			name: "context hash",
+			parallelism: 2,
+			processor: this._readContextHash.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.contextTshQueue = new AsyncQueue({
+			name: "context hash and timestamp",
+			parallelism: 2,
+			processor: this._readContextTimestampAndHash.bind(this)
+		});
+		/** @type {AsyncQueue} */
+		this.managedItemQueue = new AsyncQueue({
+			name: "managed item info",
+			parallelism: 10,
+			processor: this._getManagedItemInfo.bind(this)
+		});
+		/** @type {AsyncQueue>} */
+		this.managedItemDirectoryQueue = new AsyncQueue({
+			name: "managed item directory info",
+			parallelism: 10,
+			processor: this._getManagedItemDirectoryInfo.bind(this)
+		});
+		const _unmanagedPaths = [...unmanagedPaths];
+		/** @type {string[]} */
+		this.unmanagedPathsWithSlash = _unmanagedPaths
+			.filter((p) => typeof p === "string")
+			.map((p) => join(fs, p, "_").slice(0, -1));
+		/** @type {RegExp[]} */
+		this.unmanagedPathsRegExps = _unmanagedPaths.filter(
+			(p) => typeof p !== "string"
+		);
+
+		this.managedPaths = [...managedPaths];
+		/** @type {string[]} */
+		this.managedPathsWithSlash = this.managedPaths
+			.filter((p) => typeof p === "string")
+			.map((p) => join(fs, p, "_").slice(0, -1));
+		/** @type {RegExp[]} */
+		this.managedPathsRegExps = this.managedPaths.filter(
+			(p) => typeof p !== "string"
+		);
+
+		this.immutablePaths = [...immutablePaths];
+		/** @type {string[]} */
+		this.immutablePathsWithSlash = this.immutablePaths
+			.filter((p) => typeof p === "string")
+			.map((p) => join(fs, p, "_").slice(0, -1));
+		/** @type {RegExp[]} */
+		this.immutablePathsRegExps = this.immutablePaths.filter(
+			(p) => typeof p !== "string"
+		);
+
+		this._cachedDeprecatedFileTimestamps = undefined;
+		this._cachedDeprecatedContextTimestamps = undefined;
+
+		this._warnAboutExperimentalEsmTracking = false;
+
+		this._statCreatedSnapshots = 0;
+		this._statTestedSnapshotsCached = 0;
+		this._statTestedSnapshotsNotCached = 0;
+		this._statTestedChildrenCached = 0;
+		this._statTestedChildrenNotCached = 0;
+		this._statTestedEntries = 0;
+	}
+
+	logStatistics() {
+		const logger = /** @type {Logger} */ (this.logger);
+		/**
+		 * @param {string} header header
+		 * @param {string | undefined} message message
+		 */
+		const logWhenMessage = (header, message) => {
+			if (message) {
+				logger.log(`${header}: ${message}`);
+			}
+		};
+		logger.log(`${this._statCreatedSnapshots} new snapshots created`);
+		logger.log(
+			`${
+				this._statTestedSnapshotsNotCached &&
+				Math.round(
+					(this._statTestedSnapshotsNotCached * 100) /
+						(this._statTestedSnapshotsCached +
+							this._statTestedSnapshotsNotCached)
+				)
+			}% root snapshot uncached (${this._statTestedSnapshotsNotCached} / ${
+				this._statTestedSnapshotsCached + this._statTestedSnapshotsNotCached
+			})`
+		);
+		logger.log(
+			`${
+				this._statTestedChildrenNotCached &&
+				Math.round(
+					(this._statTestedChildrenNotCached * 100) /
+						(this._statTestedChildrenCached + this._statTestedChildrenNotCached)
+				)
+			}% children snapshot uncached (${this._statTestedChildrenNotCached} / ${
+				this._statTestedChildrenCached + this._statTestedChildrenNotCached
+			})`
+		);
+		logger.log(`${this._statTestedEntries} entries tested`);
+		logger.log(
+			`File info in cache: ${this._fileTimestamps.size} timestamps ${this._fileHashes.size} hashes ${this._fileTshs.size} timestamp hash combinations`
+		);
+		logWhenMessage(
+			"File timestamp snapshot optimization",
+			this._fileTimestampsOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"File hash snapshot optimization",
+			this._fileHashesOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"File timestamp hash combination snapshot optimization",
+			this._fileTshsOptimization.getStatisticMessage()
+		);
+		logger.log(
+			`Directory info in cache: ${this._contextTimestamps.size} timestamps ${this._contextHashes.size} hashes ${this._contextTshs.size} timestamp hash combinations`
+		);
+		logWhenMessage(
+			"Directory timestamp snapshot optimization",
+			this._contextTimestampsOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"Directory hash snapshot optimization",
+			this._contextHashesOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"Directory timestamp hash combination snapshot optimization",
+			this._contextTshsOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"Missing items snapshot optimization",
+			this._missingExistenceOptimization.getStatisticMessage()
+		);
+		logger.log(`Managed items info in cache: ${this._managedItems.size} items`);
+		logWhenMessage(
+			"Managed items snapshot optimization",
+			this._managedItemInfoOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"Managed files snapshot optimization",
+			this._managedFilesOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"Managed contexts snapshot optimization",
+			this._managedContextsOptimization.getStatisticMessage()
+		);
+		logWhenMessage(
+			"Managed missing snapshot optimization",
+			this._managedMissingOptimization.getStatisticMessage()
+		);
+	}
+
+	/**
+	 * @private
+	 * @param {string} path path
+	 * @param {string} reason reason
+	 * @param {EXPECTED_ANY[]} args arguments
+	 */
+	_log(path, reason, ...args) {
+		const key = path + reason;
+		const loggedPaths = /** @type {LoggedPaths} */ (this._loggedPaths);
+		if (loggedPaths.has(key)) return;
+		loggedPaths.add(key);
+		/** @type {Logger} */
+		(this.logger).debug(`${path} invalidated because ${reason}`, ...args);
+		if (--this._remainingLogs === 0) {
+			/** @type {Logger} */
+			(this.logger).debug(
+				"Logging limit has been reached and no further logging will be emitted by FileSystemInfo"
+			);
+		}
+	}
+
+	clear() {
+		this._remainingLogs = this.logger ? 40 : 0;
+		if (this._loggedPaths !== undefined) this._loggedPaths.clear();
+
+		this._snapshotCache = new WeakMap();
+		this._fileTimestampsOptimization.clear();
+		this._fileHashesOptimization.clear();
+		this._fileTshsOptimization.clear();
+		this._contextTimestampsOptimization.clear();
+		this._contextHashesOptimization.clear();
+		this._contextTshsOptimization.clear();
+		this._missingExistenceOptimization.clear();
+		this._managedItemInfoOptimization.clear();
+		this._managedFilesOptimization.clear();
+		this._managedContextsOptimization.clear();
+		this._managedMissingOptimization.clear();
+		this._fileTimestamps.clear();
+		this._fileHashes.clear();
+		this._fileTshs.clear();
+		this._contextTimestamps.clear();
+		this._contextHashes.clear();
+		this._contextTshs.clear();
+		this._managedItems.clear();
+		this._managedItems.clear();
+
+		this._cachedDeprecatedFileTimestamps = undefined;
+		this._cachedDeprecatedContextTimestamps = undefined;
+
+		this._statCreatedSnapshots = 0;
+		this._statTestedSnapshotsCached = 0;
+		this._statTestedSnapshotsNotCached = 0;
+		this._statTestedChildrenCached = 0;
+		this._statTestedChildrenNotCached = 0;
+		this._statTestedEntries = 0;
+	}
+
+	/**
+	 * @param {ReadonlyMap} map timestamps
+	 * @param {boolean=} immutable if 'map' is immutable and FileSystemInfo can keep referencing it
+	 * @returns {void}
+	 */
+	addFileTimestamps(map, immutable) {
+		this._fileTimestamps.addAll(
+			/** @type {ReadonlyMap} */
+			(map),
+			immutable
+		);
+		this._cachedDeprecatedFileTimestamps = undefined;
+	}
+
+	/**
+	 * @param {ReadonlyMap} map timestamps
+	 * @param {boolean=} immutable if 'map' is immutable and FileSystemInfo can keep referencing it
+	 * @returns {void}
+	 */
+	addContextTimestamps(map, immutable) {
+		this._contextTimestamps.addAll(
+			/** @type {ReadonlyMap} */
+			(map),
+			immutable
+		);
+		this._cachedDeprecatedContextTimestamps = undefined;
+	}
+
+	/**
+	 * @param {string} path file path
+	 * @param {(err?: WebpackError | null, fileTimestamp?: FileTimestamp) => void} callback callback function
+	 * @returns {void}
+	 */
+	getFileTimestamp(path, callback) {
+		const cache = this._fileTimestamps.get(path);
+		if (cache !== undefined) return callback(null, cache);
+		this.fileTimestampQueue.add(path, callback);
+	}
+
+	/**
+	 * @param {string} path context path
+	 * @param {(err?: WebpackError | null, resolvedContextTimestamp?: ResolvedContextTimestamp) => void} callback callback function
+	 * @returns {void}
+	 */
+	getContextTimestamp(path, callback) {
+		const cache = this._contextTimestamps.get(path);
+		if (cache !== undefined) {
+			if (cache === "ignore") return callback(null, "ignore");
+			const resolved = getResolvedTimestamp(cache);
+			if (resolved !== undefined) return callback(null, resolved);
+			return this._resolveContextTimestamp(
+				/** @type {ResolvedContextFileSystemInfoEntry} */
+				(cache),
+				callback
+			);
+		}
+		this.contextTimestampQueue.add(path, (err, _entry) => {
+			if (err) return callback(err);
+			const entry = /** @type {ContextFileSystemInfoEntry} */ (_entry);
+			const resolved = getResolvedTimestamp(entry);
+			if (resolved !== undefined) return callback(null, resolved);
+			this._resolveContextTimestamp(entry, callback);
+		});
+	}
+
+	/**
+	 * @private
+	 * @param {string} path context path
+	 * @param {(err?: WebpackError | null, contextTimestamp?: ContextTimestamp) => void} callback callback function
+	 * @returns {void}
+	 */
+	_getUnresolvedContextTimestamp(path, callback) {
+		const cache = this._contextTimestamps.get(path);
+		if (cache !== undefined) return callback(null, cache);
+		this.contextTimestampQueue.add(path, callback);
+	}
+
+	/**
+	 * @param {string} path file path
+	 * @param {(err?: WebpackError | null, hash?: string | null) => void} callback callback function
+	 * @returns {void}
+	 */
+	getFileHash(path, callback) {
+		const cache = this._fileHashes.get(path);
+		if (cache !== undefined) return callback(null, cache);
+		this.fileHashQueue.add(path, callback);
+	}
+
+	/**
+	 * @param {string} path context path
+	 * @param {(err?: WebpackError | null, contextHash?: string) => void} callback callback function
+	 * @returns {void}
+	 */
+	getContextHash(path, callback) {
+		const cache = this._contextHashes.get(path);
+		if (cache !== undefined) {
+			const resolved = getResolvedHash(cache);
+			if (resolved !== undefined) {
+				return callback(null, /** @type {string} */ (resolved));
+			}
+			return this._resolveContextHash(cache, callback);
+		}
+		this.contextHashQueue.add(path, (err, _entry) => {
+			if (err) return callback(err);
+			const entry = /** @type {ContextHash} */ (_entry);
+			const resolved = getResolvedHash(entry);
+			if (resolved !== undefined) {
+				return callback(null, /** @type {string} */ (resolved));
+			}
+			this._resolveContextHash(entry, callback);
+		});
+	}
+
+	/**
+	 * @private
+	 * @param {string} path context path
+	 * @param {(err?: WebpackError | null, contextHash?: ContextHash | null) => void} callback callback function
+	 * @returns {void}
+	 */
+	_getUnresolvedContextHash(path, callback) {
+		const cache = this._contextHashes.get(path);
+		if (cache !== undefined) return callback(null, cache);
+		this.contextHashQueue.add(path, callback);
+	}
+
+	/**
+	 * @param {string} path context path
+	 * @param {(err?: WebpackError | null, resolvedContextTimestampAndHash?: ResolvedContextTimestampAndHash | null) => void} callback callback function
+	 * @returns {void}
+	 */
+	getContextTsh(path, callback) {
+		const cache = this._contextTshs.get(path);
+		if (cache !== undefined) {
+			const resolved = getResolvedTimestamp(cache);
+			if (resolved !== undefined) return callback(null, resolved);
+			return this._resolveContextTsh(cache, callback);
+		}
+		this.contextTshQueue.add(path, (err, _entry) => {
+			if (err) return callback(err);
+			const entry = /** @type {ContextTimestampAndHash} */ (_entry);
+			const resolved = getResolvedTimestamp(entry);
+			if (resolved !== undefined) return callback(null, resolved);
+			this._resolveContextTsh(entry, callback);
+		});
+	}
+
+	/**
+	 * @private
+	 * @param {string} path context path
+	 * @param {(err?: WebpackError | null, contextTimestampAndHash?: ContextTimestampAndHash | null) => void} callback callback function
+	 * @returns {void}
+	 */
+	_getUnresolvedContextTsh(path, callback) {
+		const cache = this._contextTshs.get(path);
+		if (cache !== undefined) return callback(null, cache);
+		this.contextTshQueue.add(path, callback);
+	}
+
+	_createBuildDependenciesResolvers() {
+		const resolveContext = createResolver({
+			resolveToContext: true,
+			exportsFields: [],
+			fileSystem: this.fs
+		});
+		const resolveCjs = createResolver({
+			extensions: [".js", ".json", ".node"],
+			conditionNames: ["require", "node"],
+			exportsFields: ["exports"],
+			fileSystem: this.fs
+		});
+		const resolveCjsAsChild = createResolver({
+			extensions: [".js", ".json", ".node"],
+			conditionNames: ["require", "node"],
+			exportsFields: [],
+			fileSystem: this.fs
+		});
+		const resolveEsm = createResolver({
+			extensions: [".js", ".json", ".node"],
+			fullySpecified: true,
+			conditionNames: ["import", "node"],
+			exportsFields: ["exports"],
+			fileSystem: this.fs
+		});
+		return { resolveContext, resolveEsm, resolveCjs, resolveCjsAsChild };
+	}
+
+	/**
+	 * @param {string} context context directory
+	 * @param {Iterable} deps dependencies
+	 * @param {(err?: Error | null, resolveBuildDependenciesResult?: ResolveBuildDependenciesResult) => void} callback callback function
+	 * @returns {void}
+	 */
+	resolveBuildDependencies(context, deps, callback) {
+		const { resolveContext, resolveEsm, resolveCjs, resolveCjsAsChild } =
+			this._createBuildDependenciesResolvers();
+
+		/** @type {Files} */
+		const files = new Set();
+		/** @type {Symlinks} */
+		const fileSymlinks = new Set();
+		/** @type {Directories} */
+		const directories = new Set();
+		/** @type {Symlinks} */
+		const directorySymlinks = new Set();
+		/** @type {Missing} */
+		const missing = new Set();
+		/** @type {ResolveDependencies["files"]} */
+		const resolveFiles = new Set();
+		/** @type {ResolveDependencies["directories"]} */
+		const resolveDirectories = new Set();
+		/** @type {ResolveDependencies["missing"]} */
+		const resolveMissing = new Set();
+		/** @type {ResolveResults} */
+		const resolveResults = new Map();
+		/** @type {Set} */
+		const invalidResolveResults = new Set();
+		const resolverContext = {
+			fileDependencies: resolveFiles,
+			contextDependencies: resolveDirectories,
+			missingDependencies: resolveMissing
+		};
+		/**
+		 * @param {undefined | boolean | string} expected expected result
+		 * @returns {string} expected result
+		 */
+		const expectedToString = (expected) =>
+			expected ? ` (expected ${expected})` : "";
+		/** @typedef {{ type: JobType, context: string | undefined, path: string, issuer: Job | undefined, expected: undefined | boolean | string }} Job */
+
+		/**
+		 * @param {Job} job job
+		 * @returns {string} result
+		 */
+		const jobToString = (job) => {
+			switch (job.type) {
+				case RBDT_RESOLVE_FILE:
+					return `resolve file ${job.path}${expectedToString(job.expected)}`;
+				case RBDT_RESOLVE_DIRECTORY:
+					return `resolve directory ${job.path}`;
+				case RBDT_RESOLVE_CJS_FILE:
+					return `resolve commonjs file ${job.path}${expectedToString(
+						job.expected
+					)}`;
+				case RBDT_RESOLVE_ESM_FILE:
+					return `resolve esm file ${job.path}${expectedToString(
+						job.expected
+					)}`;
+				case RBDT_DIRECTORY:
+					return `directory ${job.path}`;
+				case RBDT_FILE:
+					return `file ${job.path}`;
+				case RBDT_DIRECTORY_DEPENDENCIES:
+					return `directory dependencies ${job.path}`;
+				case RBDT_FILE_DEPENDENCIES:
+					return `file dependencies ${job.path}`;
+			}
+			return `unknown ${job.type} ${job.path}`;
+		};
+		/**
+		 * @param {Job} job job
+		 * @returns {string} string value
+		 */
+		const pathToString = (job) => {
+			let result = ` at ${jobToString(job)}`;
+			/** @type {Job | undefined} */
+			(job) = job.issuer;
+			while (job !== undefined) {
+				result += `\n at ${jobToString(job)}`;
+				job = /** @type {Job} */ (job.issuer);
+			}
+			return result;
+		};
+		const logger = /** @type {Logger} */ (this.logger);
+		processAsyncTree(
+			Array.from(
+				deps,
+				(dep) =>
+					/** @type {Job} */ ({
+						type: RBDT_RESOLVE_INITIAL,
+						context,
+						path: dep,
+						expected: undefined,
+						issuer: undefined
+					})
+			),
+			20,
+			(job, push, callback) => {
+				const { type, context, path, expected } = job;
+				/**
+				 * @param {string} path path
+				 * @returns {void}
+				 */
+				const resolveDirectory = (path) => {
+					const key = `d\n${context}\n${path}`;
+					if (resolveResults.has(key)) {
+						return callback();
+					}
+					resolveResults.set(key, undefined);
+					resolveContext(
+						/** @type {string} */ (context),
+						path,
+						resolverContext,
+						(err, _, result) => {
+							if (err) {
+								if (expected === false) {
+									resolveResults.set(key, false);
+									return callback();
+								}
+								invalidResolveResults.add(key);
+								err.message += `\nwhile resolving '${path}' in ${context} to a directory`;
+								return callback(err);
+							}
+							const resultPath = /** @type {ResolveRequest} */ (result).path;
+							resolveResults.set(key, resultPath);
+							push({
+								type: RBDT_DIRECTORY,
+								context: undefined,
+								path: /** @type {string} */ (resultPath),
+								expected: undefined,
+								issuer: job
+							});
+							callback();
+						}
+					);
+				};
+				/**
+				 * @param {string} path path
+				 * @param {("f" | "c" | "e")=} symbol symbol
+				 * @param {(ResolveFunctionAsync)=} resolve resolve fn
+				 * @returns {void}
+				 */
+				const resolveFile = (path, symbol, resolve) => {
+					const key = `${symbol}\n${context}\n${path}`;
+					if (resolveResults.has(key)) {
+						return callback();
+					}
+					resolveResults.set(key, undefined);
+					/** @type {ResolveFunctionAsync} */
+					(resolve)(
+						/** @type {string} */ (context),
+						path,
+						resolverContext,
+						(err, _, result) => {
+							if (typeof expected === "string") {
+								if (!err && result && result.path === expected) {
+									resolveResults.set(key, result.path);
+								} else {
+									invalidResolveResults.add(key);
+									logger.warn(
+										`Resolving '${path}' in ${context} for build dependencies doesn't lead to expected result '${expected}', but to '${
+											err || (result && result.path)
+										}' instead. Resolving dependencies are ignored for this path.\n${pathToString(
+											job
+										)}`
+									);
+								}
+							} else {
+								if (err) {
+									if (expected === false) {
+										resolveResults.set(key, false);
+										return callback();
+									}
+									invalidResolveResults.add(key);
+									err.message += `\nwhile resolving '${path}' in ${context} as file\n${pathToString(
+										job
+									)}`;
+									return callback(err);
+								}
+								const resultPath = /** @type {ResolveRequest} */ (result).path;
+								resolveResults.set(key, resultPath);
+								push({
+									type: RBDT_FILE,
+									context: undefined,
+									path: /** @type {string} */ (resultPath),
+									expected: undefined,
+									issuer: job
+								});
+							}
+							callback();
+						}
+					);
+				};
+				const resolvedType =
+					type === RBDT_RESOLVE_INITIAL
+						? /[\\/]$/.test(path)
+							? RBDT_RESOLVE_DIRECTORY
+							: RBDT_RESOLVE_FILE
+						: type;
+				switch (resolvedType) {
+					case RBDT_RESOLVE_FILE: {
+						resolveFile(
+							path,
+							"f",
+							/\.mjs$/.test(path) ? resolveEsm : resolveCjs
+						);
+						break;
+					}
+					case RBDT_RESOLVE_DIRECTORY: {
+						resolveDirectory(
+							type === RBDT_RESOLVE_INITIAL ? path.slice(0, -1) : path
+						);
+						break;
+					}
+					case RBDT_RESOLVE_CJS_FILE: {
+						resolveFile(path, "f", resolveCjs);
+						break;
+					}
+					case RBDT_RESOLVE_CJS_FILE_AS_CHILD: {
+						resolveFile(path, "c", resolveCjsAsChild);
+						break;
+					}
+					case RBDT_RESOLVE_ESM_FILE: {
+						resolveFile(path, "e", resolveEsm);
+						break;
+					}
+					case RBDT_FILE: {
+						if (files.has(path)) {
+							callback();
+							break;
+						}
+						files.add(path);
+						/** @type {NonNullable} */
+						(this.fs.realpath)(path, (err, _realPath) => {
+							if (err) return callback(err);
+							const realPath = /** @type {string} */ (_realPath);
+							if (realPath !== path) {
+								fileSymlinks.add(path);
+								resolveFiles.add(path);
+								if (files.has(realPath)) return callback();
+								files.add(realPath);
+							}
+							push({
+								type: RBDT_FILE_DEPENDENCIES,
+								context: undefined,
+								path: realPath,
+								expected: undefined,
+								issuer: job
+							});
+							callback();
+						});
+						break;
+					}
+					case RBDT_DIRECTORY: {
+						if (directories.has(path)) {
+							callback();
+							break;
+						}
+						directories.add(path);
+						/** @type {NonNullable} */
+						(this.fs.realpath)(path, (err, _realPath) => {
+							if (err) return callback(err);
+							const realPath = /** @type {string} */ (_realPath);
+							if (realPath !== path) {
+								directorySymlinks.add(path);
+								resolveFiles.add(path);
+								if (directories.has(realPath)) return callback();
+								directories.add(realPath);
+							}
+							push({
+								type: RBDT_DIRECTORY_DEPENDENCIES,
+								context: undefined,
+								path: realPath,
+								expected: undefined,
+								issuer: job
+							});
+							callback();
+						});
+						break;
+					}
+					case RBDT_FILE_DEPENDENCIES: {
+						// Check for known files without dependencies
+						if (/\.json5?$|\.yarn-integrity$|yarn\.lock$|\.ya?ml/.test(path)) {
+							process.nextTick(callback);
+							break;
+						}
+						// Check commonjs cache for the module
+						/** @type {NodeModule | undefined} */
+						const module = require.cache[path];
+						if (
+							module &&
+							Array.isArray(module.children) &&
+							// https://github.com/nodejs/node/issues/59868
+							// Force use `es-module-lexer` for mjs
+							!/\.mjs$/.test(path)
+						) {
+							children: for (const child of module.children) {
+								const childPath = child.filename;
+								if (childPath) {
+									push({
+										type: RBDT_FILE,
+										context: undefined,
+										path: childPath,
+										expected: undefined,
+										issuer: job
+									});
+									const context = dirname(this.fs, path);
+									for (const modulePath of module.paths) {
+										if (childPath.startsWith(modulePath)) {
+											const subPath = childPath.slice(modulePath.length + 1);
+											const packageMatch = /^@[^\\/]+[\\/][^\\/]+/.exec(
+												subPath
+											);
+											if (packageMatch) {
+												push({
+													type: RBDT_FILE,
+													context: undefined,
+													path: `${
+														modulePath +
+														childPath[modulePath.length] +
+														packageMatch[0] +
+														childPath[modulePath.length]
+													}package.json`,
+													expected: false,
+													issuer: job
+												});
+											}
+											let request = subPath.replace(/\\/g, "/");
+											if (request.endsWith(".js")) {
+												request = request.slice(0, -3);
+											}
+											push({
+												type: RBDT_RESOLVE_CJS_FILE_AS_CHILD,
+												context,
+												path: request,
+												expected: child.filename,
+												issuer: job
+											});
+											continue children;
+										}
+									}
+									let request = relative(this.fs, context, childPath);
+									if (request.endsWith(".js")) request = request.slice(0, -3);
+									request = request.replace(/\\/g, "/");
+									if (!request.startsWith("../") && !isAbsolute(request)) {
+										request = `./${request}`;
+									}
+									push({
+										type: RBDT_RESOLVE_CJS_FILE,
+										context,
+										path: request,
+										expected: child.filename,
+										issuer: job
+									});
+								}
+							}
+						} else if (supportsEsm && /\.m?js$/.test(path)) {
+							if (!this._warnAboutExperimentalEsmTracking) {
+								logger.log(
+									"Node.js doesn't offer a (nice) way to introspect the ESM dependency graph yet.\n" +
+										"Until a full solution is available webpack uses an experimental ESM tracking based on parsing.\n" +
+										"As best effort webpack parses the ESM files to guess dependencies. But this can lead to expensive and incorrect tracking."
+								);
+								this._warnAboutExperimentalEsmTracking = true;
+							}
+
+							const lexer = getEsModuleLexer();
+
+							lexer.init.then(() => {
+								this.fs.readFile(path, (err, content) => {
+									if (err) return callback(err);
+									try {
+										const context = dirname(this.fs, path);
+										const source = /** @type {Buffer} */ (content).toString();
+										const [imports] = lexer.parse(source);
+										/** @type {Set} */
+										const added = new Set();
+										for (const imp of imports) {
+											try {
+												/** @type {string} */
+												let dependency;
+												if (imp.d === -1) {
+													// import ... from "..."
+													dependency = parseString(
+														source.slice(imp.s - 1, imp.e + 1)
+													);
+												} else if (imp.d > -1) {
+													// import()
+													const expr = source.slice(imp.s, imp.e).trim();
+													dependency = parseString(expr);
+												} else {
+													// e.g. import.meta
+													continue;
+												}
+
+												// We should not track Node.js build dependencies
+												if (dependency.startsWith("node:")) continue;
+												if (builtinModules.has(dependency)) continue;
+												// Avoid extra jobs for identical imports
+												if (added.has(dependency)) continue;
+
+												push({
+													type: RBDT_RESOLVE_ESM_FILE,
+													context,
+													path: dependency,
+													expected: imp.d > -1 ? false : undefined,
+													issuer: job
+												});
+												added.add(dependency);
+											} catch (err1) {
+												logger.warn(
+													`Parsing of ${path} for build dependencies failed at 'import(${source.slice(
+														imp.s,
+														imp.e
+													)})'.\n` +
+														"Build dependencies behind this expression are ignored and might cause incorrect cache invalidation."
+												);
+												logger.debug(pathToString(job));
+												logger.debug(/** @type {Error} */ (err1).stack);
+											}
+										}
+									} catch (err2) {
+										logger.warn(
+											`Parsing of ${path} for build dependencies failed and all dependencies of this file are ignored, which might cause incorrect cache invalidation..`
+										);
+										logger.debug(pathToString(job));
+										logger.debug(/** @type {Error} */ (err2).stack);
+									}
+									process.nextTick(callback);
+								});
+							}, callback);
+							break;
+						} else {
+							logger.log(
+								`Assuming ${path} has no dependencies as we were unable to assign it to any module system.`
+							);
+							logger.debug(pathToString(job));
+						}
+						process.nextTick(callback);
+						break;
+					}
+					case RBDT_DIRECTORY_DEPENDENCIES: {
+						const match =
+							/(^.+[\\/]node_modules[\\/](?:@[^\\/]+[\\/])?[^\\/]+)/.exec(path);
+						const packagePath = match ? match[1] : path;
+						const packageJson = join(this.fs, packagePath, "package.json");
+						this.fs.readFile(packageJson, (err, content) => {
+							if (err) {
+								if (err.code === "ENOENT") {
+									resolveMissing.add(packageJson);
+									const parent = dirname(this.fs, packagePath);
+									if (parent !== packagePath) {
+										push({
+											type: RBDT_DIRECTORY_DEPENDENCIES,
+											context: undefined,
+											path: parent,
+											expected: undefined,
+											issuer: job
+										});
+									}
+									callback();
+									return;
+								}
+								return callback(err);
+							}
+							resolveFiles.add(packageJson);
+							/** @type {JsonObject} */
+							let packageData;
+							try {
+								packageData = JSON.parse(
+									/** @type {Buffer} */
+									(content).toString("utf8")
+								);
+							} catch (parseErr) {
+								return callback(/** @type {Error} */ (parseErr));
+							}
+							const depsObject = packageData.dependencies;
+							const optionalDepsObject = packageData.optionalDependencies;
+							/** @type {Set} */
+							const allDeps = new Set();
+							/** @type {Set} */
+							const optionalDeps = new Set();
+							if (typeof depsObject === "object" && depsObject) {
+								for (const dep of Object.keys(depsObject)) {
+									allDeps.add(dep);
+								}
+							}
+							if (
+								typeof optionalDepsObject === "object" &&
+								optionalDepsObject
+							) {
+								for (const dep of Object.keys(optionalDepsObject)) {
+									allDeps.add(dep);
+									optionalDeps.add(dep);
+								}
+							}
+							for (const dep of allDeps) {
+								push({
+									type: RBDT_RESOLVE_DIRECTORY,
+									context: packagePath,
+									path: dep,
+									expected: !optionalDeps.has(dep),
+									issuer: job
+								});
+							}
+							callback();
+						});
+						break;
+					}
+				}
+			},
+			(err) => {
+				if (err) return callback(err);
+				for (const l of fileSymlinks) files.delete(l);
+				for (const l of directorySymlinks) directories.delete(l);
+				for (const k of invalidResolveResults) resolveResults.delete(k);
+				callback(null, {
+					files,
+					directories,
+					missing,
+					resolveResults,
+					resolveDependencies: {
+						files: resolveFiles,
+						directories: resolveDirectories,
+						missing: resolveMissing
+					}
+				});
+			}
+		);
+	}
+
+	/**
+	 * @param {ResolveResults} resolveResults results from resolving
+	 * @param {(err?: Error | null, result?: boolean) => void} callback callback with true when resolveResults resolve the same way
+	 * @returns {void}
+	 */
+	checkResolveResultsValid(resolveResults, callback) {
+		const { resolveCjs, resolveCjsAsChild, resolveEsm, resolveContext } =
+			this._createBuildDependenciesResolvers();
+		asyncLib.eachLimit(
+			resolveResults,
+			20,
+			([key, expectedResult], callback) => {
+				const [type, context, path] = key.split("\n");
+				switch (type) {
+					case "d":
+						resolveContext(context, path, {}, (err, _, result) => {
+							if (expectedResult === false) {
+								return callback(err ? undefined : INVALID);
+							}
+							if (err) return callback(err);
+							const resultPath = /** @type {ResolveRequest} */ (result).path;
+							if (resultPath !== expectedResult) return callback(INVALID);
+							callback();
+						});
+						break;
+					case "f":
+						resolveCjs(context, path, {}, (err, _, result) => {
+							if (expectedResult === false) {
+								return callback(err ? undefined : INVALID);
+							}
+							if (err) return callback(err);
+							const resultPath = /** @type {ResolveRequest} */ (result).path;
+							if (resultPath !== expectedResult) return callback(INVALID);
+							callback();
+						});
+						break;
+					case "c":
+						resolveCjsAsChild(context, path, {}, (err, _, result) => {
+							if (expectedResult === false) {
+								return callback(err ? undefined : INVALID);
+							}
+							if (err) return callback(err);
+							const resultPath = /** @type {ResolveRequest} */ (result).path;
+							if (resultPath !== expectedResult) return callback(INVALID);
+							callback();
+						});
+						break;
+					case "e":
+						resolveEsm(context, path, {}, (err, _, result) => {
+							if (expectedResult === false) {
+								return callback(err ? undefined : INVALID);
+							}
+							if (err) return callback(err);
+							const resultPath = /** @type {ResolveRequest} */ (result).path;
+							if (resultPath !== expectedResult) return callback(INVALID);
+							callback();
+						});
+						break;
+					default:
+						callback(new Error("Unexpected type in resolve result key"));
+						break;
+				}
+			},
+			/**
+			 * @param {Error | typeof INVALID=} err error or invalid flag
+			 * @returns {void}
+			 */
+			/** @type {import("neo-async").ErrorCallback} */ (
+				(err) => {
+					if (err === INVALID) {
+						return callback(null, false);
+					}
+					if (err) {
+						return callback(err);
+					}
+					return callback(null, true);
+				}
+			)
+		);
+	}
+
+	/**
+	 * @param {number | null | undefined} startTime when processing the files has started
+	 * @param {Iterable | null | undefined} files all files
+	 * @param {Iterable | null | undefined} directories all directories
+	 * @param {Iterable | null | undefined} missing all missing files or directories
+	 * @param {SnapshotOptions | null | undefined} options options object (for future extensions)
+	 * @param {(err: WebpackError | null, snapshot: Snapshot | null) => void} callback callback function
+	 * @returns {void}
+	 */
+	createSnapshot(startTime, files, directories, missing, options, callback) {
+		/** @type {FileTimestamps} */
+		const fileTimestamps = new Map();
+		/** @type {FileHashes} */
+		const fileHashes = new Map();
+		/** @type {FileTshs} */
+		const fileTshs = new Map();
+		/** @type {ContextTimestamps} */
+		const contextTimestamps = new Map();
+		/** @type {ContextHashes} */
+		const contextHashes = new Map();
+		/** @type {ContextTshs} */
+		const contextTshs = new Map();
+		/** @type {MissingExistence} */
+		const missingExistence = new Map();
+		/** @type {ManagedItemInfo} */
+		const managedItemInfo = new Map();
+		/** @type {ManagedFiles} */
+		const managedFiles = new Set();
+		/** @type {ManagedContexts} */
+		const managedContexts = new Set();
+		/** @type {ManagedMissing} */
+		const managedMissing = new Set();
+		/** @type {Children} */
+		const children = new Set();
+
+		const snapshot = new Snapshot();
+		if (startTime) snapshot.setStartTime(startTime);
+
+		/** @type {Set} */
+		const managedItems = new Set();
+
+		/** 1 = timestamp, 2 = hash, 3 = timestamp + hash */
+		const mode = options && options.hash ? (options.timestamp ? 3 : 2) : 1;
+
+		let jobs = 1;
+		const jobDone = () => {
+			if (--jobs === 0) {
+				if (fileTimestamps.size !== 0) {
+					snapshot.setFileTimestamps(fileTimestamps);
+				}
+				if (fileHashes.size !== 0) {
+					snapshot.setFileHashes(fileHashes);
+				}
+				if (fileTshs.size !== 0) {
+					snapshot.setFileTshs(fileTshs);
+				}
+				if (contextTimestamps.size !== 0) {
+					snapshot.setContextTimestamps(contextTimestamps);
+				}
+				if (contextHashes.size !== 0) {
+					snapshot.setContextHashes(contextHashes);
+				}
+				if (contextTshs.size !== 0) {
+					snapshot.setContextTshs(contextTshs);
+				}
+				if (missingExistence.size !== 0) {
+					snapshot.setMissingExistence(missingExistence);
+				}
+				if (managedItemInfo.size !== 0) {
+					snapshot.setManagedItemInfo(managedItemInfo);
+				}
+				this._managedFilesOptimization.optimize(snapshot, managedFiles);
+				if (managedFiles.size !== 0) {
+					snapshot.setManagedFiles(managedFiles);
+				}
+				this._managedContextsOptimization.optimize(snapshot, managedContexts);
+				if (managedContexts.size !== 0) {
+					snapshot.setManagedContexts(managedContexts);
+				}
+				this._managedMissingOptimization.optimize(snapshot, managedMissing);
+				if (managedMissing.size !== 0) {
+					snapshot.setManagedMissing(managedMissing);
+				}
+				if (children.size !== 0) {
+					snapshot.setChildren(children);
+				}
+				this._snapshotCache.set(snapshot, true);
+				this._statCreatedSnapshots++;
+
+				callback(null, snapshot);
+			}
+		};
+		const jobError = () => {
+			if (jobs > 0) {
+				// large negative number instead of NaN or something else to keep jobs to stay a SMI (v8)
+				jobs = -100000000;
+				callback(null, null);
+			}
+		};
+		/**
+		 * @param {string} path path
+		 * @param {ManagedFiles} managedSet managed set
+		 * @returns {boolean} true when managed
+		 */
+		const checkManaged = (path, managedSet) => {
+			for (const unmanagedPath of this.unmanagedPathsRegExps) {
+				if (unmanagedPath.test(path)) return false;
+			}
+			for (const unmanagedPath of this.unmanagedPathsWithSlash) {
+				if (path.startsWith(unmanagedPath)) return false;
+			}
+			for (const immutablePath of this.immutablePathsRegExps) {
+				if (immutablePath.test(path)) {
+					managedSet.add(path);
+					return true;
+				}
+			}
+			for (const immutablePath of this.immutablePathsWithSlash) {
+				if (path.startsWith(immutablePath)) {
+					managedSet.add(path);
+					return true;
+				}
+			}
+			for (const managedPath of this.managedPathsRegExps) {
+				const match = managedPath.exec(path);
+				if (match) {
+					const managedItem = getManagedItem(match[1], path);
+					if (managedItem) {
+						managedItems.add(managedItem);
+						managedSet.add(path);
+						return true;
+					}
+				}
+			}
+			for (const managedPath of this.managedPathsWithSlash) {
+				if (path.startsWith(managedPath)) {
+					const managedItem = getManagedItem(managedPath, path);
+					if (managedItem) {
+						managedItems.add(managedItem);
+						managedSet.add(path);
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+		/**
+		 * @param {Iterable} items items
+		 * @param {Set} managedSet managed set
+		 * @returns {Set} result
+		 */
+		const captureNonManaged = (items, managedSet) => {
+			/** @type {Set} */
+			const capturedItems = new Set();
+			for (const path of items) {
+				if (!checkManaged(path, managedSet)) capturedItems.add(path);
+			}
+			return capturedItems;
+		};
+		/**
+		 * @param {ManagedFiles} capturedFiles captured files
+		 */
+		const processCapturedFiles = (capturedFiles) => {
+			if (capturedFiles.size === 0) {
+				return;
+			}
+			switch (mode) {
+				case 3:
+					this._fileTshsOptimization.optimize(snapshot, capturedFiles);
+					for (const path of capturedFiles) {
+						const cache = this._fileTshs.get(path);
+						if (cache !== undefined) {
+							fileTshs.set(path, cache);
+						} else {
+							jobs++;
+							this._getFileTimestampAndHash(path, (err, entry) => {
+								if (err) {
+									if (this.logger) {
+										this.logger.debug(
+											`Error snapshotting file timestamp hash combination of ${path}: ${err.stack}`
+										);
+									}
+									jobError();
+								} else {
+									fileTshs.set(path, /** @type {TimestampAndHash} */ (entry));
+									jobDone();
+								}
+							});
+						}
+					}
+					break;
+				case 2:
+					this._fileHashesOptimization.optimize(snapshot, capturedFiles);
+					for (const path of capturedFiles) {
+						const cache = this._fileHashes.get(path);
+						if (cache !== undefined) {
+							fileHashes.set(path, cache);
+						} else {
+							jobs++;
+							this.fileHashQueue.add(path, (err, entry) => {
+								if (err) {
+									if (this.logger) {
+										this.logger.debug(
+											`Error snapshotting file hash of ${path}: ${err.stack}`
+										);
+									}
+									jobError();
+								} else {
+									fileHashes.set(path, /** @type {string} */ (entry));
+									jobDone();
+								}
+							});
+						}
+					}
+					break;
+				case 1:
+					this._fileTimestampsOptimization.optimize(snapshot, capturedFiles);
+					for (const path of capturedFiles) {
+						const cache = this._fileTimestamps.get(path);
+						if (cache !== undefined) {
+							if (cache !== "ignore") {
+								fileTimestamps.set(path, cache);
+							}
+						} else {
+							jobs++;
+							this.fileTimestampQueue.add(path, (err, entry) => {
+								if (err) {
+									if (this.logger) {
+										this.logger.debug(
+											`Error snapshotting file timestamp of ${path}: ${err.stack}`
+										);
+									}
+									jobError();
+								} else {
+									fileTimestamps.set(
+										path,
+										/** @type {FileSystemInfoEntry} */
+										(entry)
+									);
+									jobDone();
+								}
+							});
+						}
+					}
+					break;
+			}
+		};
+		if (files) {
+			processCapturedFiles(captureNonManaged(files, managedFiles));
+		}
+		/**
+		 * @param {ManagedContexts} capturedDirectories captured directories
+		 */
+		const processCapturedDirectories = (capturedDirectories) => {
+			if (capturedDirectories.size === 0) {
+				return;
+			}
+			switch (mode) {
+				case 3:
+					this._contextTshsOptimization.optimize(snapshot, capturedDirectories);
+					for (const path of capturedDirectories) {
+						const cache = this._contextTshs.get(path);
+						/** @type {ResolvedContextTimestampAndHash | null | undefined} */
+						let resolved;
+						if (
+							cache !== undefined &&
+							(resolved = getResolvedTimestamp(cache)) !== undefined
+						) {
+							contextTshs.set(path, resolved);
+						} else {
+							jobs++;
+							/**
+							 * @param {(WebpackError | null)=} err error
+							 * @param {(ResolvedContextTimestampAndHash | null)=} entry entry
+							 * @returns {void}
+							 */
+							const callback = (err, entry) => {
+								if (err) {
+									if (this.logger) {
+										this.logger.debug(
+											`Error snapshotting context timestamp hash combination of ${path}: ${err.stack}`
+										);
+									}
+									jobError();
+								} else {
+									contextTshs.set(
+										path,
+										/** @type {ResolvedContextTimestampAndHash | null} */
+										(entry)
+									);
+									jobDone();
+								}
+							};
+							if (cache !== undefined) {
+								this._resolveContextTsh(cache, callback);
+							} else {
+								this.getContextTsh(path, callback);
+							}
+						}
+					}
+					break;
+				case 2:
+					this._contextHashesOptimization.optimize(
+						snapshot,
+						capturedDirectories
+					);
+					for (const path of capturedDirectories) {
+						const cache = this._contextHashes.get(path);
+						/** @type {undefined | null | string} */
+						let resolved;
+						if (
+							cache !== undefined &&
+							(resolved = getResolvedHash(cache)) !== undefined
+						) {
+							contextHashes.set(path, resolved);
+						} else {
+							jobs++;
+							/**
+							 * @param {(WebpackError | null)=} err err
+							 * @param {string=} entry entry
+							 */
+							const callback = (err, entry) => {
+								if (err) {
+									if (this.logger) {
+										this.logger.debug(
+											`Error snapshotting context hash of ${path}: ${err.stack}`
+										);
+									}
+									jobError();
+								} else {
+									contextHashes.set(path, /** @type {string} */ (entry));
+									jobDone();
+								}
+							};
+							if (cache !== undefined) {
+								this._resolveContextHash(cache, callback);
+							} else {
+								this.getContextHash(path, callback);
+							}
+						}
+					}
+					break;
+				case 1:
+					this._contextTimestampsOptimization.optimize(
+						snapshot,
+						capturedDirectories
+					);
+					for (const path of capturedDirectories) {
+						const cache = this._contextTimestamps.get(path);
+						if (cache === "ignore") continue;
+						/** @type {undefined | null | ResolvedContextFileSystemInfoEntry} */
+						let resolved;
+						if (
+							cache !== undefined &&
+							(resolved = getResolvedTimestamp(cache)) !== undefined
+						) {
+							contextTimestamps.set(path, resolved);
+						} else {
+							jobs++;
+							/**
+							 * @param {(Error | null)=} err error
+							 * @param {FileTimestamp=} entry entry
+							 * @returns {void}
+							 */
+							const callback = (err, entry) => {
+								if (err) {
+									if (this.logger) {
+										this.logger.debug(
+											`Error snapshotting context timestamp of ${path}: ${err.stack}`
+										);
+									}
+									jobError();
+								} else {
+									contextTimestamps.set(
+										path,
+										/** @type {FileSystemInfoEntry | null} */
+										(entry)
+									);
+									jobDone();
+								}
+							};
+							if (cache !== undefined) {
+								this._resolveContextTimestamp(
+									/** @type {ContextFileSystemInfoEntry} */
+									(cache),
+									callback
+								);
+							} else {
+								this.getContextTimestamp(path, callback);
+							}
+						}
+					}
+					break;
+			}
+		};
+		if (directories) {
+			processCapturedDirectories(
+				captureNonManaged(directories, managedContexts)
+			);
+		}
+		/**
+		 * @param {ManagedMissing} capturedMissing captured missing
+		 */
+		const processCapturedMissing = (capturedMissing) => {
+			if (capturedMissing.size === 0) {
+				return;
+			}
+			this._missingExistenceOptimization.optimize(snapshot, capturedMissing);
+			for (const path of capturedMissing) {
+				const cache = this._fileTimestamps.get(path);
+				if (cache !== undefined) {
+					if (cache !== "ignore") {
+						missingExistence.set(path, Boolean(cache));
+					}
+				} else {
+					jobs++;
+					this.fileTimestampQueue.add(path, (err, entry) => {
+						if (err) {
+							if (this.logger) {
+								this.logger.debug(
+									`Error snapshotting missing timestamp of ${path}: ${err.stack}`
+								);
+							}
+							jobError();
+						} else {
+							missingExistence.set(path, Boolean(entry));
+							jobDone();
+						}
+					});
+				}
+			}
+		};
+		if (missing) {
+			processCapturedMissing(captureNonManaged(missing, managedMissing));
+		}
+		this._managedItemInfoOptimization.optimize(snapshot, managedItems);
+		for (const path of managedItems) {
+			const cache = this._managedItems.get(path);
+			if (cache !== undefined) {
+				if (!cache.startsWith("*")) {
+					managedFiles.add(join(this.fs, path, "package.json"));
+				} else if (cache === "*nested") {
+					managedMissing.add(join(this.fs, path, "package.json"));
+				}
+				managedItemInfo.set(path, cache);
+			} else {
+				jobs++;
+				this.managedItemQueue.add(path, (err, entry) => {
+					if (err) {
+						if (this.logger) {
+							this.logger.debug(
+								`Error snapshotting managed item ${path}: ${err.stack}`
+							);
+						}
+						jobError();
+					} else if (entry) {
+						if (!entry.startsWith("*")) {
+							managedFiles.add(join(this.fs, path, "package.json"));
+						} else if (cache === "*nested") {
+							managedMissing.add(join(this.fs, path, "package.json"));
+						}
+						managedItemInfo.set(path, entry);
+						jobDone();
+					} else {
+						// Fallback to normal snapshotting
+						/**
+						 * @param {Set} set set
+						 * @param {(set: Set) => void} fn fn
+						 */
+						const process = (set, fn) => {
+							if (set.size === 0) return;
+							/** @type {Set} */
+							const captured = new Set();
+							for (const file of set) {
+								if (file.startsWith(path)) captured.add(file);
+							}
+							if (captured.size > 0) fn(captured);
+						};
+						process(managedFiles, processCapturedFiles);
+						process(managedContexts, processCapturedDirectories);
+						process(managedMissing, processCapturedMissing);
+						jobDone();
+					}
+				});
+			}
+		}
+		jobDone();
+	}
+
+	/**
+	 * @param {Snapshot} snapshot1 a snapshot
+	 * @param {Snapshot} snapshot2 a snapshot
+	 * @returns {Snapshot} merged snapshot
+	 */
+	mergeSnapshots(snapshot1, snapshot2) {
+		const snapshot = new Snapshot();
+		if (snapshot1.hasStartTime() && snapshot2.hasStartTime()) {
+			snapshot.setStartTime(
+				Math.min(
+					/** @type {NonNullable} */
+					(snapshot1.startTime),
+					/** @type {NonNullable} */
+					(snapshot2.startTime)
+				)
+			);
+		} else if (snapshot2.hasStartTime()) {
+			snapshot.startTime = snapshot2.startTime;
+		} else if (snapshot1.hasStartTime()) {
+			snapshot.startTime = snapshot1.startTime;
+		}
+		if (snapshot1.hasFileTimestamps() || snapshot2.hasFileTimestamps()) {
+			snapshot.setFileTimestamps(
+				mergeMaps(snapshot1.fileTimestamps, snapshot2.fileTimestamps)
+			);
+		}
+		if (snapshot1.hasFileHashes() || snapshot2.hasFileHashes()) {
+			snapshot.setFileHashes(
+				mergeMaps(snapshot1.fileHashes, snapshot2.fileHashes)
+			);
+		}
+		if (snapshot1.hasFileTshs() || snapshot2.hasFileTshs()) {
+			snapshot.setFileTshs(mergeMaps(snapshot1.fileTshs, snapshot2.fileTshs));
+		}
+		if (snapshot1.hasContextTimestamps() || snapshot2.hasContextTimestamps()) {
+			snapshot.setContextTimestamps(
+				mergeMaps(snapshot1.contextTimestamps, snapshot2.contextTimestamps)
+			);
+		}
+		if (snapshot1.hasContextHashes() || snapshot2.hasContextHashes()) {
+			snapshot.setContextHashes(
+				mergeMaps(snapshot1.contextHashes, snapshot2.contextHashes)
+			);
+		}
+		if (snapshot1.hasContextTshs() || snapshot2.hasContextTshs()) {
+			snapshot.setContextTshs(
+				mergeMaps(snapshot1.contextTshs, snapshot2.contextTshs)
+			);
+		}
+		if (snapshot1.hasMissingExistence() || snapshot2.hasMissingExistence()) {
+			snapshot.setMissingExistence(
+				mergeMaps(snapshot1.missingExistence, snapshot2.missingExistence)
+			);
+		}
+		if (snapshot1.hasManagedItemInfo() || snapshot2.hasManagedItemInfo()) {
+			snapshot.setManagedItemInfo(
+				mergeMaps(snapshot1.managedItemInfo, snapshot2.managedItemInfo)
+			);
+		}
+		if (snapshot1.hasManagedFiles() || snapshot2.hasManagedFiles()) {
+			snapshot.setManagedFiles(
+				mergeSets(snapshot1.managedFiles, snapshot2.managedFiles)
+			);
+		}
+		if (snapshot1.hasManagedContexts() || snapshot2.hasManagedContexts()) {
+			snapshot.setManagedContexts(
+				mergeSets(snapshot1.managedContexts, snapshot2.managedContexts)
+			);
+		}
+		if (snapshot1.hasManagedMissing() || snapshot2.hasManagedMissing()) {
+			snapshot.setManagedMissing(
+				mergeSets(snapshot1.managedMissing, snapshot2.managedMissing)
+			);
+		}
+		if (snapshot1.hasChildren() || snapshot2.hasChildren()) {
+			snapshot.setChildren(mergeSets(snapshot1.children, snapshot2.children));
+		}
+		if (
+			this._snapshotCache.get(snapshot1) === true &&
+			this._snapshotCache.get(snapshot2) === true
+		) {
+			this._snapshotCache.set(snapshot, true);
+		}
+		return snapshot;
+	}
+
+	/**
+	 * @param {Snapshot} snapshot the snapshot made
+	 * @param {CheckSnapshotValidCallback} callback callback function
+	 * @returns {void}
+	 */
+	checkSnapshotValid(snapshot, callback) {
+		const cachedResult = this._snapshotCache.get(snapshot);
+		if (cachedResult !== undefined) {
+			this._statTestedSnapshotsCached++;
+			if (typeof cachedResult === "boolean") {
+				callback(null, cachedResult);
+			} else {
+				cachedResult.push(callback);
+			}
+			return;
+		}
+		this._statTestedSnapshotsNotCached++;
+		this._checkSnapshotValidNoCache(snapshot, callback);
+	}
+
+	/**
+	 * @private
+	 * @param {Snapshot} snapshot the snapshot made
+	 * @param {CheckSnapshotValidCallback} callback callback function
+	 * @returns {void}
+	 */
+	_checkSnapshotValidNoCache(snapshot, callback) {
+		/** @type {number | undefined} */
+		let startTime;
+		if (snapshot.hasStartTime()) {
+			startTime = snapshot.startTime;
+		}
+		let jobs = 1;
+		const jobDone = () => {
+			if (--jobs === 0) {
+				this._snapshotCache.set(snapshot, true);
+				callback(null, true);
+			}
+		};
+		const invalid = () => {
+			if (jobs > 0) {
+				// large negative number instead of NaN or something else to keep jobs to stay a SMI (v8)
+				jobs = -100000000;
+				this._snapshotCache.set(snapshot, false);
+				callback(null, false);
+			}
+		};
+		/**
+		 * @param {string} path path
+		 * @param {WebpackError} err err
+		 */
+		const invalidWithError = (path, err) => {
+			if (this._remainingLogs > 0) {
+				this._log(path, "error occurred: %s", err);
+			}
+			invalid();
+		};
+		/**
+		 * @param {string} path file path
+		 * @param {string | null} current current hash
+		 * @param {string | null} snap snapshot hash
+		 * @returns {boolean} true, if ok
+		 */
+		const checkHash = (path, current, snap) => {
+			if (current !== snap) {
+				// If hash differ it's invalid
+				if (this._remainingLogs > 0) {
+					this._log(path, "hashes differ (%s != %s)", current, snap);
+				}
+				return false;
+			}
+			return true;
+		};
+		/**
+		 * @param {string} path file path
+		 * @param {boolean} current current entry
+		 * @param {boolean} snap entry from snapshot
+		 * @returns {boolean} true, if ok
+		 */
+		const checkExistence = (path, current, snap) => {
+			if (!current !== !snap) {
+				// If existence of item differs
+				// it's invalid
+				if (this._remainingLogs > 0) {
+					this._log(
+						path,
+						current ? "it didn't exist before" : "it does no longer exist"
+					);
+				}
+				return false;
+			}
+			return true;
+		};
+		/**
+		 * @param {string} path file path
+		 * @param {FileSystemInfoEntry | null} c current entry
+		 * @param {FileSystemInfoEntry | null} s entry from snapshot
+		 * @param {boolean} log log reason
+		 * @returns {boolean} true, if ok
+		 */
+		const checkFile = (path, c, s, log = true) => {
+			if (c === s) return true;
+			if (!checkExistence(path, Boolean(c), Boolean(s))) return false;
+			if (c) {
+				// For existing items only
+				if (typeof startTime === "number" && c.safeTime > startTime) {
+					// If a change happened after starting reading the item
+					// this may no longer be valid
+					if (log && this._remainingLogs > 0) {
+						this._log(
+							path,
+							"it may have changed (%d) after the start time of the snapshot (%d)",
+							c.safeTime,
+							startTime
+						);
+					}
+					return false;
+				}
+				const snap = /** @type {FileSystemInfoEntry} */ (s);
+				if (snap.timestamp !== undefined && c.timestamp !== snap.timestamp) {
+					// If we have a timestamp (it was a file or symlink) and it differs from current timestamp
+					// it's invalid
+					if (log && this._remainingLogs > 0) {
+						this._log(
+							path,
+							"timestamps differ (%d != %d)",
+							c.timestamp,
+							snap.timestamp
+						);
+					}
+					return false;
+				}
+			}
+			return true;
+		};
+		/**
+		 * @param {string} path file path
+		 * @param {ResolvedContextFileSystemInfoEntry | null} c current entry
+		 * @param {ResolvedContextFileSystemInfoEntry | null} s entry from snapshot
+		 * @param {boolean} log log reason
+		 * @returns {boolean} true, if ok
+		 */
+		const checkContext = (path, c, s, log = true) => {
+			if (c === s) return true;
+			if (!checkExistence(path, Boolean(c), Boolean(s))) return false;
+			if (c) {
+				// For existing items only
+				if (typeof startTime === "number" && c.safeTime > startTime) {
+					// If a change happened after starting reading the item
+					// this may no longer be valid
+					if (log && this._remainingLogs > 0) {
+						this._log(
+							path,
+							"it may have changed (%d) after the start time of the snapshot (%d)",
+							c.safeTime,
+							startTime
+						);
+					}
+					return false;
+				}
+				const snap = /** @type {ResolvedContextFileSystemInfoEntry} */ (s);
+				if (
+					snap.timestampHash !== undefined &&
+					c.timestampHash !== snap.timestampHash
+				) {
+					// If we have a timestampHash (it was a directory) and it differs from current timestampHash
+					// it's invalid
+					if (log && this._remainingLogs > 0) {
+						this._log(
+							path,
+							"timestamps hashes differ (%s != %s)",
+							c.timestampHash,
+							snap.timestampHash
+						);
+					}
+					return false;
+				}
+			}
+			return true;
+		};
+		if (snapshot.hasChildren()) {
+			/**
+			 * @param {(WebpackError | null)=} err err
+			 * @param {boolean=} result result
+			 * @returns {void}
+			 */
+			const childCallback = (err, result) => {
+				if (err || !result) return invalid();
+				jobDone();
+			};
+			for (const child of /** @type {Children} */ (snapshot.children)) {
+				const cache = this._snapshotCache.get(child);
+				if (cache !== undefined) {
+					this._statTestedChildrenCached++;
+					/* istanbul ignore else */
+					if (typeof cache === "boolean") {
+						if (cache === false) {
+							invalid();
+							return;
+						}
+					} else {
+						jobs++;
+						cache.push(childCallback);
+					}
+				} else {
+					this._statTestedChildrenNotCached++;
+					jobs++;
+					this._checkSnapshotValidNoCache(child, childCallback);
+				}
+			}
+		}
+		if (snapshot.hasFileTimestamps()) {
+			const fileTimestamps =
+				/** @type {FileTimestamps} */
+				(snapshot.fileTimestamps);
+			this._statTestedEntries += fileTimestamps.size;
+			for (const [path, ts] of fileTimestamps) {
+				const cache = this._fileTimestamps.get(path);
+				if (cache !== undefined) {
+					if (cache !== "ignore" && !checkFile(path, cache, ts)) {
+						invalid();
+						return;
+					}
+				} else {
+					jobs++;
+					this.fileTimestampQueue.add(path, (err, entry) => {
+						if (err) return invalidWithError(path, err);
+						if (
+							!checkFile(
+								path,
+								/** @type {FileSystemInfoEntry | null} */ (entry),
+								ts
+							)
+						) {
+							invalid();
+						} else {
+							jobDone();
+						}
+					});
+				}
+			}
+		}
+		/**
+		 * @param {string} path file path
+		 * @param {string | null} hash hash
+		 */
+		const processFileHashSnapshot = (path, hash) => {
+			const cache = this._fileHashes.get(path);
+			if (cache !== undefined) {
+				if (cache !== "ignore" && !checkHash(path, cache, hash)) {
+					invalid();
+				}
+			} else {
+				jobs++;
+				this.fileHashQueue.add(path, (err, entry) => {
+					if (err) return invalidWithError(path, err);
+					if (!checkHash(path, /** @type {string} */ (entry), hash)) {
+						invalid();
+					} else {
+						jobDone();
+					}
+				});
+			}
+		};
+		if (snapshot.hasFileHashes()) {
+			const fileHashes = /** @type {FileHashes} */ (snapshot.fileHashes);
+			this._statTestedEntries += fileHashes.size;
+			for (const [path, hash] of fileHashes) {
+				processFileHashSnapshot(path, hash);
+			}
+		}
+		if (snapshot.hasFileTshs()) {
+			const fileTshs = /** @type {FileTshs} */ (snapshot.fileTshs);
+			this._statTestedEntries += fileTshs.size;
+			for (const [path, tsh] of fileTshs) {
+				if (typeof tsh === "string") {
+					processFileHashSnapshot(path, tsh);
+				} else {
+					const cache = this._fileTimestamps.get(path);
+					if (cache !== undefined) {
+						if (cache === "ignore" || !checkFile(path, cache, tsh, false)) {
+							processFileHashSnapshot(path, tsh && tsh.hash);
+						}
+					} else {
+						jobs++;
+						this.fileTimestampQueue.add(path, (err, entry) => {
+							if (err) return invalidWithError(path, err);
+							if (
+								!checkFile(
+									path,
+									/** @type {FileSystemInfoEntry | null} */
+									(entry),
+									tsh,
+									false
+								)
+							) {
+								processFileHashSnapshot(path, tsh && tsh.hash);
+							}
+							jobDone();
+						});
+					}
+				}
+			}
+		}
+		if (snapshot.hasContextTimestamps()) {
+			const contextTimestamps =
+				/** @type {ContextTimestamps} */
+				(snapshot.contextTimestamps);
+			this._statTestedEntries += contextTimestamps.size;
+			for (const [path, ts] of contextTimestamps) {
+				const cache = this._contextTimestamps.get(path);
+				if (cache === "ignore") continue;
+				/** @type {undefined | null | ResolvedContextFileSystemInfoEntry} */
+				let resolved;
+				if (
+					cache !== undefined &&
+					(resolved = getResolvedTimestamp(cache)) !== undefined
+				) {
+					if (!checkContext(path, resolved, ts)) {
+						invalid();
+						return;
+					}
+				} else {
+					jobs++;
+					/**
+					 * @param {(WebpackError | null)=} err error
+					 * @param {ResolvedContextTimestamp=} entry entry
+					 * @returns {void}
+					 */
+					const callback = (err, entry) => {
+						if (err) return invalidWithError(path, err);
+						if (
+							!checkContext(
+								path,
+								/** @type {ResolvedContextFileSystemInfoEntry | null} */
+								(entry),
+								ts
+							)
+						) {
+							invalid();
+						} else {
+							jobDone();
+						}
+					};
+					if (cache !== undefined) {
+						this._resolveContextTimestamp(
+							/** @type {ContextFileSystemInfoEntry} */
+							(cache),
+							callback
+						);
+					} else {
+						this.getContextTimestamp(path, callback);
+					}
+				}
+			}
+		}
+		/**
+		 * @param {string} path path
+		 * @param {string | null} hash hash
+		 */
+		const processContextHashSnapshot = (path, hash) => {
+			const cache = this._contextHashes.get(path);
+			/** @type {undefined | null | string} */
+			let resolved;
+			if (
+				cache !== undefined &&
+				(resolved = getResolvedHash(cache)) !== undefined
+			) {
+				if (!checkHash(path, resolved, hash)) {
+					invalid();
+				}
+			} else {
+				jobs++;
+				/**
+				 * @param {(WebpackError | null)=} err err
+				 * @param {string=} entry entry
+				 * @returns {void}
+				 */
+				const callback = (err, entry) => {
+					if (err) return invalidWithError(path, err);
+					if (!checkHash(path, /** @type {string} */ (entry), hash)) {
+						invalid();
+					} else {
+						jobDone();
+					}
+				};
+				if (cache !== undefined) {
+					this._resolveContextHash(cache, callback);
+				} else {
+					this.getContextHash(path, callback);
+				}
+			}
+		};
+		if (snapshot.hasContextHashes()) {
+			const contextHashes =
+				/** @type {ContextHashes} */
+				(snapshot.contextHashes);
+			this._statTestedEntries += contextHashes.size;
+			for (const [path, hash] of contextHashes) {
+				processContextHashSnapshot(path, hash);
+			}
+		}
+		if (snapshot.hasContextTshs()) {
+			const contextTshs = /** @type {ContextTshs} */ (snapshot.contextTshs);
+			this._statTestedEntries += contextTshs.size;
+			for (const [path, tsh] of contextTshs) {
+				if (typeof tsh === "string") {
+					processContextHashSnapshot(path, tsh);
+				} else {
+					const cache = this._contextTimestamps.get(path);
+					if (cache === "ignore") continue;
+					/** @type {undefined | null | ResolvedContextFileSystemInfoEntry} */
+					let resolved;
+					if (
+						cache !== undefined &&
+						(resolved = getResolvedTimestamp(cache)) !== undefined
+					) {
+						if (!checkContext(path, resolved, tsh, false)) {
+							processContextHashSnapshot(path, tsh && tsh.hash);
+						}
+					} else {
+						jobs++;
+						/**
+						 * @param {(WebpackError | null)=} err error
+						 * @param {ResolvedContextTimestamp=} entry entry
+						 * @returns {void}
+						 */
+						const callback = (err, entry) => {
+							if (err) return invalidWithError(path, err);
+							if (
+								!checkContext(
+									path,
+									// TODO: test with `"ignore"`
+									/** @type {ResolvedContextFileSystemInfoEntry | null} */
+									(entry),
+									tsh,
+									false
+								)
+							) {
+								processContextHashSnapshot(path, tsh && tsh.hash);
+							}
+							jobDone();
+						};
+						if (cache !== undefined) {
+							this._resolveContextTimestamp(
+								/** @type {ContextFileSystemInfoEntry} */
+								(cache),
+								callback
+							);
+						} else {
+							this.getContextTimestamp(path, callback);
+						}
+					}
+				}
+			}
+		}
+		if (snapshot.hasMissingExistence()) {
+			const missingExistence =
+				/** @type {MissingExistence} */
+				(snapshot.missingExistence);
+			this._statTestedEntries += missingExistence.size;
+			for (const [path, existence] of missingExistence) {
+				const cache = this._fileTimestamps.get(path);
+				if (cache !== undefined) {
+					if (
+						cache !== "ignore" &&
+						!checkExistence(path, Boolean(cache), Boolean(existence))
+					) {
+						invalid();
+						return;
+					}
+				} else {
+					jobs++;
+					this.fileTimestampQueue.add(path, (err, entry) => {
+						if (err) return invalidWithError(path, err);
+						if (!checkExistence(path, Boolean(entry), Boolean(existence))) {
+							invalid();
+						} else {
+							jobDone();
+						}
+					});
+				}
+			}
+		}
+		if (snapshot.hasManagedItemInfo()) {
+			const managedItemInfo =
+				/** @type {ManagedItemInfo} */
+				(snapshot.managedItemInfo);
+			this._statTestedEntries += managedItemInfo.size;
+			for (const [path, info] of managedItemInfo) {
+				const cache = this._managedItems.get(path);
+				if (cache !== undefined) {
+					if (!checkHash(path, cache, info)) {
+						invalid();
+						return;
+					}
+				} else {
+					jobs++;
+					this.managedItemQueue.add(path, (err, entry) => {
+						if (err) return invalidWithError(path, err);
+						if (!checkHash(path, /** @type {string} */ (entry), info)) {
+							invalid();
+						} else {
+							jobDone();
+						}
+					});
+				}
+			}
+		}
+		jobDone();
+
+		// if there was an async action
+		// try to join multiple concurrent request for this snapshot
+		if (jobs > 0) {
+			const callbacks = [callback];
+			callback = (err, result) => {
+				for (const callback of callbacks) callback(err, result);
+			};
+			this._snapshotCache.set(snapshot, callbacks);
+		}
+	}
+
+	/**
+	 * @private
+	 * @type {Processor}
+	 */
+	_readFileTimestamp(path, callback) {
+		this.fs.stat(path, (err, _stat) => {
+			if (err) {
+				if (err.code === "ENOENT") {
+					this._fileTimestamps.set(path, null);
+					this._cachedDeprecatedFileTimestamps = undefined;
+					return callback(null, null);
+				}
+				return callback(/** @type {WebpackError} */ (err));
+			}
+			const stat = /** @type {IStats} */ (_stat);
+			/** @type {FileSystemInfoEntry} */
+			let ts;
+			if (stat.isDirectory()) {
+				ts = {
+					safeTime: 0,
+					timestamp: undefined
+				};
+			} else {
+				const mtime = Number(stat.mtime);
+
+				if (mtime) applyMtime(mtime);
+
+				ts = {
+					safeTime: mtime ? mtime + FS_ACCURACY : Infinity,
+					timestamp: mtime
+				};
+			}
+
+			this._fileTimestamps.set(path, ts);
+			this._cachedDeprecatedFileTimestamps = undefined;
+
+			callback(null, ts);
+		});
+	}
+
+	/**
+	 * @private
+	 * @type {Processor}
+	 */
+	_readFileHash(path, callback) {
+		this.fs.readFile(path, (err, content) => {
+			if (err) {
+				if (err.code === "EISDIR") {
+					this._fileHashes.set(path, "directory");
+					return callback(null, "directory");
+				}
+				if (err.code === "ENOENT") {
+					this._fileHashes.set(path, null);
+					return callback(null, null);
+				}
+				if (err.code === "ERR_FS_FILE_TOO_LARGE") {
+					/** @type {Logger} */
+					(this.logger).warn(`Ignoring ${path} for hashing as it's very large`);
+					this._fileHashes.set(path, "too large");
+					return callback(null, "too large");
+				}
+				return callback(/** @type {WebpackError} */ (err));
+			}
+
+			const hash = createHash(this._hashFunction);
+
+			hash.update(/** @type {string | Buffer} */ (content));
+
+			const digest = hash.digest("hex");
+
+			this._fileHashes.set(path, digest);
+
+			callback(null, digest);
+		});
+	}
+
+	/**
+	 * @private
+	 * @param {string} path path
+	 * @param {(err: WebpackError | null, timestampAndHash?: TimestampAndHash | string) => void} callback callback
+	 */
+	_getFileTimestampAndHash(path, callback) {
+		/**
+		 * @param {string} hash hash
+		 * @returns {void}
+		 */
+		const continueWithHash = (hash) => {
+			const cache = this._fileTimestamps.get(path);
+			if (cache !== undefined) {
+				if (cache !== "ignore") {
+					/** @type {TimestampAndHash} */
+					const result = {
+						.../** @type {FileSystemInfoEntry} */ (cache),
+						hash
+					};
+					this._fileTshs.set(path, result);
+					return callback(null, result);
+				}
+				this._fileTshs.set(path, hash);
+				return callback(null, hash);
+			}
+			this.fileTimestampQueue.add(path, (err, entry) => {
+				if (err) {
+					return callback(err);
+				}
+				/** @type {TimestampAndHash} */
+				const result = {
+					.../** @type {FileSystemInfoEntry} */ (entry),
+					hash
+				};
+				this._fileTshs.set(path, result);
+				return callback(null, result);
+			});
+		};
+
+		const cache = this._fileHashes.get(path);
+		if (cache !== undefined) {
+			continueWithHash(/** @type {string} */ (cache));
+		} else {
+			this.fileHashQueue.add(path, (err, entry) => {
+				if (err) {
+					return callback(err);
+				}
+				continueWithHash(/** @type {string} */ (entry));
+			});
+		}
+	}
+
+	/**
+	 * @private
+	 * @template T
+	 * @template ItemType
+	 * @param {object} options options
+	 * @param {string} options.path path
+	 * @param {(value: string) => ItemType} options.fromImmutablePath called when context item is an immutable path
+	 * @param {(value: string) => ItemType} options.fromManagedItem called when context item is a managed path
+	 * @param {(value: string, result: string, callback: (err?: WebpackError | null, itemType?: ItemType) => void) => void} options.fromSymlink called when context item is a symlink
+	 * @param {(value: string, stats: IStats, callback: (err?: WebpackError | null, itemType?: ItemType | null) => void) => void} options.fromFile called when context item is a file
+	 * @param {(value: string, stats: IStats, callback: (err?: WebpackError | null, itemType?: ItemType) => void) => void} options.fromDirectory called when context item is a directory
+	 * @param {(arr: string[], arr1: ItemType[]) => T} options.reduce called from all context items
+	 * @param {(err?: Error | null, result?: T | null) => void} callback callback
+	 */
+	_readContext(
+		{
+			path,
+			fromImmutablePath,
+			fromManagedItem,
+			fromSymlink,
+			fromFile,
+			fromDirectory,
+			reduce
+		},
+		callback
+	) {
+		this.fs.readdir(path, (err, _files) => {
+			if (err) {
+				if (err.code === "ENOENT") {
+					return callback(null, null);
+				}
+				return callback(err);
+			}
+			const files = /** @type {string[]} */ (_files)
+				.map((file) => file.normalize("NFC"))
+				.filter((file) => !/^\./.test(file))
+				.sort();
+			asyncLib.map(
+				files,
+				(file, callback) => {
+					const child = join(this.fs, path, file);
+					for (const immutablePath of this.immutablePathsRegExps) {
+						if (immutablePath.test(path)) {
+							// ignore any immutable path for timestamping
+							return callback(null, fromImmutablePath(path));
+						}
+					}
+					for (const immutablePath of this.immutablePathsWithSlash) {
+						if (path.startsWith(immutablePath)) {
+							// ignore any immutable path for timestamping
+							return callback(null, fromImmutablePath(path));
+						}
+					}
+					for (const managedPath of this.managedPathsRegExps) {
+						const match = managedPath.exec(path);
+						if (match) {
+							const managedItem = getManagedItem(match[1], path);
+							if (managedItem) {
+								// construct timestampHash from managed info
+								return this.managedItemQueue.add(managedItem, (err, info) => {
+									if (err) return callback(err);
+									return callback(
+										null,
+										fromManagedItem(/** @type {string} */ (info))
+									);
+								});
+							}
+						}
+					}
+					for (const managedPath of this.managedPathsWithSlash) {
+						if (path.startsWith(managedPath)) {
+							const managedItem = getManagedItem(managedPath, child);
+							if (managedItem) {
+								// construct timestampHash from managed info
+								return this.managedItemQueue.add(managedItem, (err, info) => {
+									if (err) return callback(err);
+									return callback(
+										null,
+										fromManagedItem(/** @type {string} */ (info))
+									);
+								});
+							}
+						}
+					}
+
+					lstatReadlinkAbsolute(this.fs, child, (err, _stat) => {
+						if (err) return callback(err);
+
+						const stat = /** @type {IStats | string} */ (_stat);
+
+						if (typeof stat === "string") {
+							return fromSymlink(child, stat, callback);
+						}
+
+						if (stat.isFile()) {
+							return fromFile(child, stat, callback);
+						}
+						if (stat.isDirectory()) {
+							return fromDirectory(child, stat, callback);
+						}
+						callback(null, null);
+					});
+				},
+				(err, results) => {
+					if (err) return callback(err);
+					const result = reduce(files, /** @type {ItemType[]} */ (results));
+					callback(null, result);
+				}
+			);
+		});
+	}
+
+	/**
+	 * @private
+	 * @type {Processor}
+	 */
+	_readContextTimestamp(path, callback) {
+		this._readContext(
+			{
+				path,
+				fromImmutablePath: () =>
+					/** @type {ContextFileSystemInfoEntry | FileSystemInfoEntry | "ignore" | null} */
+					(null),
+				fromManagedItem: (info) => ({
+					safeTime: 0,
+					timestampHash: info
+				}),
+				fromSymlink: (file, target, callback) => {
+					callback(
+						null,
+						/** @type {ContextFileSystemInfoEntry} */
+						({
+							timestampHash: target,
+							symlinks: new Set([target])
+						})
+					);
+				},
+				fromFile: (file, stat, callback) => {
+					// Prefer the cached value over our new stat to report consistent results
+					const cache = this._fileTimestamps.get(file);
+					if (cache !== undefined) {
+						return callback(null, cache === "ignore" ? null : cache);
+					}
+
+					const mtime = Number(stat.mtime);
+
+					if (mtime) applyMtime(mtime);
+
+					/** @type {FileSystemInfoEntry} */
+					const ts = {
+						safeTime: mtime ? mtime + FS_ACCURACY : Infinity,
+						timestamp: mtime
+					};
+
+					this._fileTimestamps.set(file, ts);
+					this._cachedDeprecatedFileTimestamps = undefined;
+					callback(null, ts);
+				},
+				fromDirectory: (directory, stat, callback) => {
+					this.contextTimestampQueue.increaseParallelism();
+					this._getUnresolvedContextTimestamp(directory, (err, tsEntry) => {
+						this.contextTimestampQueue.decreaseParallelism();
+						callback(err, tsEntry);
+					});
+				},
+				reduce: (files, tsEntries) => {
+					/** @type {undefined | Symlinks} */
+					let symlinks;
+
+					const hash = createHash(this._hashFunction);
+
+					for (const file of files) hash.update(file);
+					let safeTime = 0;
+					for (const _e of tsEntries) {
+						if (!_e) {
+							hash.update("n");
+							continue;
+						}
+						const entry =
+							/** @type {FileSystemInfoEntry | ContextFileSystemInfoEntry} */
+							(_e);
+						if (/** @type {FileSystemInfoEntry} */ (entry).timestamp) {
+							hash.update("f");
+							hash.update(
+								`${/** @type {FileSystemInfoEntry} */ (entry).timestamp}`
+							);
+						} else if (
+							/** @type {ContextFileSystemInfoEntry} */ (entry).timestampHash
+						) {
+							hash.update("d");
+							hash.update(
+								`${/** @type {ContextFileSystemInfoEntry} */ (entry).timestampHash}`
+							);
+						}
+						if (
+							/** @type {ContextFileSystemInfoEntry} */
+							(entry).symlinks !== undefined
+						) {
+							if (symlinks === undefined) symlinks = new Set();
+							addAll(
+								/** @type {ContextFileSystemInfoEntry} */ (entry).symlinks,
+								symlinks
+							);
+						}
+						if (entry.safeTime) {
+							safeTime = Math.max(safeTime, entry.safeTime);
+						}
+					}
+
+					const digest = hash.digest("hex");
+					/** @type {ContextFileSystemInfoEntry} */
+					const result = {
+						safeTime,
+						timestampHash: digest
+					};
+					if (symlinks) result.symlinks = symlinks;
+					return result;
+				}
+			},
+			(err, result) => {
+				if (err) return callback(/** @type {WebpackError} */ (err));
+				this._contextTimestamps.set(path, result);
+				this._cachedDeprecatedContextTimestamps = undefined;
+
+				callback(null, result);
+			}
+		);
+	}
+
+	/**
+	 * @private
+	 * @param {ContextFileSystemInfoEntry} entry entry
+	 * @param {(err?: WebpackError | null, resolvedContextTimestamp?: ResolvedContextTimestamp) => void} callback callback
+	 * @returns {void}
+	 */
+	_resolveContextTimestamp(entry, callback) {
+		/** @type {string[]} */
+		const hashes = [];
+		let safeTime = 0;
+		processAsyncTree(
+			/** @type {NonNullable} */ (entry.symlinks),
+			10,
+			(target, push, callback) => {
+				this._getUnresolvedContextTimestamp(target, (err, entry) => {
+					if (err) return callback(err);
+					if (entry && entry !== "ignore") {
+						hashes.push(/** @type {string} */ (entry.timestampHash));
+						if (entry.safeTime) {
+							safeTime = Math.max(safeTime, entry.safeTime);
+						}
+						if (entry.symlinks !== undefined) {
+							for (const target of entry.symlinks) push(target);
+						}
+					}
+					callback();
+				});
+			},
+			(err) => {
+				if (err) return callback(/** @type {WebpackError} */ (err));
+				const hash = createHash(this._hashFunction);
+				hash.update(/** @type {string} */ (entry.timestampHash));
+				if (entry.safeTime) {
+					safeTime = Math.max(safeTime, entry.safeTime);
+				}
+				hashes.sort();
+				for (const h of hashes) {
+					hash.update(h);
+				}
+				callback(
+					null,
+					(entry.resolved = {
+						safeTime,
+						timestampHash: hash.digest("hex")
+					})
+				);
+			}
+		);
+	}
+
+	/**
+	 * @private
+	 * @type {Processor}
+	 */
+	_readContextHash(path, callback) {
+		this._readContext(
+			{
+				path,
+				fromImmutablePath: () => /** @type {ContextHash | ""} */ (""),
+				fromManagedItem: (info) => info || "",
+				fromSymlink: (file, target, callback) => {
+					callback(
+						null,
+						/** @type {ContextHash} */
+						({
+							hash: target,
+							symlinks: new Set([target])
+						})
+					);
+				},
+				fromFile: (file, stat, callback) =>
+					this.getFileHash(file, (err, hash) => {
+						callback(err, hash || "");
+					}),
+				fromDirectory: (directory, stat, callback) => {
+					this.contextHashQueue.increaseParallelism();
+					this._getUnresolvedContextHash(directory, (err, hash) => {
+						this.contextHashQueue.decreaseParallelism();
+						callback(err, hash || "");
+					});
+				},
+				/**
+				 * @param {string[]} files files
+				 * @param {(string | ContextHash)[]} fileHashes hashes
+				 * @returns {ContextHash} reduced hash
+				 */
+				reduce: (files, fileHashes) => {
+					/** @type {undefined | Symlinks} */
+					let symlinks;
+					const hash = createHash(this._hashFunction);
+
+					for (const file of files) hash.update(file);
+					for (const entry of fileHashes) {
+						if (typeof entry === "string") {
+							hash.update(entry);
+						} else {
+							hash.update(entry.hash);
+							if (entry.symlinks) {
+								if (symlinks === undefined) symlinks = new Set();
+								addAll(entry.symlinks, symlinks);
+							}
+						}
+					}
+
+					/** @type {ContextHash} */
+					const result = {
+						hash: hash.digest("hex")
+					};
+					if (symlinks) result.symlinks = symlinks;
+					return result;
+				}
+			},
+			(err, _result) => {
+				if (err) return callback(/** @type {WebpackError} */ (err));
+				const result = /** @type {ContextHash} */ (_result);
+				this._contextHashes.set(path, result);
+				return callback(null, result);
+			}
+		);
+	}
+
+	/**
+	 * @private
+	 * @param {ContextHash} entry context hash
+	 * @param {(err: WebpackError | null, contextHash?: string) => void} callback callback
+	 * @returns {void}
+	 */
+	_resolveContextHash(entry, callback) {
+		/** @type {string[]} */
+		const hashes = [];
+		processAsyncTree(
+			/** @type {NonNullable} */ (entry.symlinks),
+			10,
+			(target, push, callback) => {
+				this._getUnresolvedContextHash(target, (err, hash) => {
+					if (err) return callback(err);
+					if (hash) {
+						hashes.push(hash.hash);
+						if (hash.symlinks !== undefined) {
+							for (const target of hash.symlinks) push(target);
+						}
+					}
+					callback();
+				});
+			},
+			(err) => {
+				if (err) return callback(/** @type {WebpackError} */ (err));
+				const hash = createHash(this._hashFunction);
+				hash.update(entry.hash);
+				hashes.sort();
+				for (const h of hashes) {
+					hash.update(h);
+				}
+				callback(null, (entry.resolved = hash.digest("hex")));
+			}
+		);
+	}
+
+	/**
+	 * @private
+	 * @type {Processor}
+	 */
+	_readContextTimestampAndHash(path, callback) {
+		/**
+		 * @param {ContextTimestamp} timestamp timestamp
+		 * @param {ContextHash} hash hash
+		 */
+		const finalize = (timestamp, hash) => {
+			const result =
+				/** @type {ContextTimestampAndHash} */
+				(timestamp === "ignore" ? hash : { ...timestamp, ...hash });
+			this._contextTshs.set(path, result);
+			callback(null, result);
+		};
+		const cachedHash = this._contextHashes.get(path);
+		const cachedTimestamp = this._contextTimestamps.get(path);
+		if (cachedHash !== undefined) {
+			if (cachedTimestamp !== undefined) {
+				finalize(cachedTimestamp, cachedHash);
+			} else {
+				this.contextTimestampQueue.add(path, (err, entry) => {
+					if (err) return callback(err);
+					finalize(
+						/** @type {ContextFileSystemInfoEntry} */
+						(entry),
+						cachedHash
+					);
+				});
+			}
+		} else if (cachedTimestamp !== undefined) {
+			this.contextHashQueue.add(path, (err, entry) => {
+				if (err) return callback(err);
+				finalize(cachedTimestamp, /** @type {ContextHash} */ (entry));
+			});
+		} else {
+			this._readContext(
+				{
+					path,
+					fromImmutablePath: () =>
+						/** @type {ContextTimestampAndHash | Omit | string | null} */ (
+							null
+						),
+					fromManagedItem: (info) => ({
+						safeTime: 0,
+						timestampHash: info,
+						hash: info || ""
+					}),
+					fromSymlink: (file, target, callback) => {
+						callback(null, {
+							timestampHash: target,
+							hash: target,
+							symlinks: new Set([target])
+						});
+					},
+					fromFile: (file, stat, callback) => {
+						this._getFileTimestampAndHash(file, callback);
+					},
+					fromDirectory: (directory, stat, callback) => {
+						this.contextTshQueue.increaseParallelism();
+						this.contextTshQueue.add(directory, (err, result) => {
+							this.contextTshQueue.decreaseParallelism();
+							callback(err, result);
+						});
+					},
+					/**
+					 * @param {string[]} files files
+					 * @param {(Partial & Partial | string | null)[]} results results
+					 * @returns {ContextTimestampAndHash} tsh
+					 */
+					reduce: (files, results) => {
+						/** @type {undefined | Symlinks} */
+						let symlinks;
+
+						const tsHash = createHash(this._hashFunction);
+						const hash = createHash(this._hashFunction);
+
+						for (const file of files) {
+							tsHash.update(file);
+							hash.update(file);
+						}
+						let safeTime = 0;
+						for (const entry of results) {
+							if (!entry) {
+								tsHash.update("n");
+								continue;
+							}
+							if (typeof entry === "string") {
+								tsHash.update("n");
+								hash.update(entry);
+								continue;
+							}
+							if (entry.timestamp) {
+								tsHash.update("f");
+								tsHash.update(`${entry.timestamp}`);
+							} else if (entry.timestampHash) {
+								tsHash.update("d");
+								tsHash.update(`${entry.timestampHash}`);
+							}
+							if (entry.symlinks !== undefined) {
+								if (symlinks === undefined) symlinks = new Set();
+								addAll(entry.symlinks, symlinks);
+							}
+							if (entry.safeTime) {
+								safeTime = Math.max(safeTime, entry.safeTime);
+							}
+							hash.update(/** @type {string} */ (entry.hash));
+						}
+
+						/** @type {ContextTimestampAndHash} */
+						const result = {
+							safeTime,
+							timestampHash: tsHash.digest("hex"),
+							hash: hash.digest("hex")
+						};
+						if (symlinks) result.symlinks = symlinks;
+						return result;
+					}
+				},
+				(err, _result) => {
+					if (err) return callback(/** @type {WebpackError} */ (err));
+					const result = /** @type {ContextTimestampAndHash} */ (_result);
+					this._contextTshs.set(path, result);
+					return callback(null, result);
+				}
+			);
+		}
+	}
+
+	/**
+	 * @private
+	 * @param {ContextTimestampAndHash} entry entry
+	 * @param {ProcessorCallback} callback callback
+	 * @returns {void}
+	 */
+	_resolveContextTsh(entry, callback) {
+		/** @type {string[]} */
+		const hashes = [];
+		/** @type {string[]} */
+		const tsHashes = [];
+		let safeTime = 0;
+		processAsyncTree(
+			/** @type {NonNullable} */ (entry.symlinks),
+			10,
+			(target, push, callback) => {
+				this._getUnresolvedContextTsh(target, (err, entry) => {
+					if (err) return callback(err);
+					if (entry) {
+						hashes.push(entry.hash);
+						if (entry.timestampHash) tsHashes.push(entry.timestampHash);
+						if (entry.safeTime) {
+							safeTime = Math.max(safeTime, entry.safeTime);
+						}
+						if (entry.symlinks !== undefined) {
+							for (const target of entry.symlinks) push(target);
+						}
+					}
+					callback();
+				});
+			},
+			(err) => {
+				if (err) return callback(/** @type {WebpackError} */ (err));
+				const hash = createHash(this._hashFunction);
+				const tsHash = createHash(this._hashFunction);
+				hash.update(entry.hash);
+				if (entry.timestampHash) tsHash.update(entry.timestampHash);
+				if (entry.safeTime) {
+					safeTime = Math.max(safeTime, entry.safeTime);
+				}
+				hashes.sort();
+				for (const h of hashes) {
+					hash.update(h);
+				}
+				tsHashes.sort();
+				for (const h of tsHashes) {
+					tsHash.update(h);
+				}
+				callback(
+					null,
+					(entry.resolved = {
+						safeTime,
+						timestampHash: tsHash.digest("hex"),
+						hash: hash.digest("hex")
+					})
+				);
+			}
+		);
+	}
+
+	/**
+	 * @private
+	 * @type {Processor>}
+	 */
+	_getManagedItemDirectoryInfo(path, callback) {
+		this.fs.readdir(path, (err, elements) => {
+			if (err) {
+				if (err.code === "ENOENT" || err.code === "ENOTDIR") {
+					return callback(null, EMPTY_SET);
+				}
+				return callback(/** @type {WebpackError} */ (err));
+			}
+			const set = new Set(
+				/** @type {string[]} */
+				(elements).map((element) => join(this.fs, path, element))
+			);
+			callback(null, set);
+		});
+	}
+
+	/**
+	 * @private
+	 * @type {Processor}
+	 */
+	_getManagedItemInfo(path, callback) {
+		const dir = dirname(this.fs, path);
+		this.managedItemDirectoryQueue.add(dir, (err, elements) => {
+			if (err) {
+				return callback(err);
+			}
+			if (!(/** @type {Set} */ (elements).has(path))) {
+				// file or directory doesn't exist
+				this._managedItems.set(path, "*missing");
+				return callback(null, "*missing");
+			}
+			// something exists
+			// it may be a file or directory
+			if (
+				path.endsWith("node_modules") &&
+				(path.endsWith("/node_modules") || path.endsWith("\\node_modules"))
+			) {
+				// we are only interested in existence of this special directory
+				this._managedItems.set(path, "*node_modules");
+				return callback(null, "*node_modules");
+			}
+
+			// we assume it's a directory, as files shouldn't occur in managed paths
+			const packageJsonPath = join(this.fs, path, "package.json");
+			this.fs.readFile(packageJsonPath, (err, content) => {
+				if (err) {
+					if (err.code === "ENOENT" || err.code === "ENOTDIR") {
+						// no package.json or path is not a directory
+						this.fs.readdir(path, (err, elements) => {
+							if (
+								!err &&
+								/** @type {string[]} */ (elements).length === 1 &&
+								/** @type {string[]} */ (elements)[0] === "node_modules"
+							) {
+								// This is only a grouping folder e.g. used by yarn
+								// we are only interested in existence of this special directory
+								this._managedItems.set(path, "*nested");
+								return callback(null, "*nested");
+							}
+							/** @type {Logger} */
+							(this.logger).warn(
+								`Managed item ${path} isn't a directory or doesn't contain a package.json (see snapshot.managedPaths option)`
+							);
+							return callback();
+						});
+						return;
+					}
+					return callback(/** @type {WebpackError} */ (err));
+				}
+				/** @type {JsonObject} */
+				let data;
+				try {
+					data = JSON.parse(/** @type {Buffer} */ (content).toString("utf8"));
+				} catch (parseErr) {
+					return callback(/** @type {WebpackError} */ (parseErr));
+				}
+				if (!data.name) {
+					/** @type {Logger} */
+					(this.logger).warn(
+						`${packageJsonPath} doesn't contain a "name" property (see snapshot.managedPaths option)`
+					);
+					return callback();
+				}
+				const info = `${data.name || ""}@${data.version || ""}`;
+				this._managedItems.set(path, info);
+				callback(null, info);
+			});
+		});
+	}
+
+	getDeprecatedFileTimestamps() {
+		if (this._cachedDeprecatedFileTimestamps !== undefined) {
+			return this._cachedDeprecatedFileTimestamps;
+		}
+		/** @type {Map} */
+		const map = new Map();
+		for (const [path, info] of this._fileTimestamps) {
+			if (info) map.set(path, typeof info === "object" ? info.safeTime : null);
+		}
+		return (this._cachedDeprecatedFileTimestamps = map);
+	}
+
+	getDeprecatedContextTimestamps() {
+		if (this._cachedDeprecatedContextTimestamps !== undefined) {
+			return this._cachedDeprecatedContextTimestamps;
+		}
+		/** @type {Map} */
+		const map = new Map();
+		for (const [path, info] of this._contextTimestamps) {
+			if (info) map.set(path, typeof info === "object" ? info.safeTime : null);
+		}
+		return (this._cachedDeprecatedContextTimestamps = map);
+	}
+}
+
+module.exports = FileSystemInfo;
+module.exports.Snapshot = Snapshot;
diff --git a/lib/FlagAllModulesAsUsedPlugin.js b/lib/FlagAllModulesAsUsedPlugin.js
new file mode 100644
index 00000000000..0f5969cac7a
--- /dev/null
+++ b/lib/FlagAllModulesAsUsedPlugin.js
@@ -0,0 +1,55 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { getEntryRuntime, mergeRuntimeOwned } = require("./util/runtime");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Module").FactoryMeta} FactoryMeta */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+const PLUGIN_NAME = "FlagAllModulesAsUsedPlugin";
+class FlagAllModulesAsUsedPlugin {
+	/**
+	 * @param {string} explanation explanation
+	 */
+	constructor(explanation) {
+		this.explanation = explanation;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const moduleGraph = compilation.moduleGraph;
+			compilation.hooks.optimizeDependencies.tap(PLUGIN_NAME, (modules) => {
+				/** @type {RuntimeSpec} */
+				let runtime;
+				for (const [name, { options }] of compilation.entries) {
+					runtime = mergeRuntimeOwned(
+						runtime,
+						getEntryRuntime(compilation, name, options)
+					);
+				}
+				for (const module of modules) {
+					const exportsInfo = moduleGraph.getExportsInfo(module);
+					exportsInfo.setUsedInUnknownWay(runtime);
+					moduleGraph.addExtraReason(module, this.explanation);
+					if (module.factoryMeta === undefined) {
+						module.factoryMeta = {};
+					}
+					/** @type {FactoryMeta} */
+					(module.factoryMeta).sideEffectFree = false;
+				}
+			});
+		});
+	}
+}
+
+module.exports = FlagAllModulesAsUsedPlugin;
diff --git a/lib/FlagDependencyExportsPlugin.js b/lib/FlagDependencyExportsPlugin.js
index 0aafb0b4aa2..853abba0496 100644
--- a/lib/FlagDependencyExportsPlugin.js
+++ b/lib/FlagDependencyExportsPlugin.js
@@ -2,144 +2,435 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const asyncLib = require("neo-async");
 const Queue = require("./util/Queue");
 
-const addToSet = (a, b) => {
-	let changed = false;
-	for (const item of b) {
-		if (!a.has(item)) {
-			a.add(item);
-			changed = true;
-		}
-	}
-	return changed;
-};
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").ExportSpec} ExportSpec */
+/** @typedef {import("./Dependency").ExportsSpec} ExportsSpec */
+/** @typedef {import("./ExportsInfo")} ExportsInfo */
+/** @typedef {import("./ExportsInfo").ExportInfoName} ExportInfoName */
+/** @typedef {import("./ExportsInfo").RestoreProvidedData} RestoreProvidedData */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+
+const PLUGIN_NAME = "FlagDependencyExportsPlugin";
+const PLUGIN_LOGGER_NAME = `webpack.${PLUGIN_NAME}`;
 
 class FlagDependencyExportsPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"FlagDependencyExportsPlugin",
-			compilation => {
-				compilation.hooks.finishModules.tap(
-					"FlagDependencyExportsPlugin",
-					modules => {
-						const dependencies = new Map();
-
-						const queue = new Queue();
-
-						let module;
-						let moduleWithExports;
-						let moduleProvidedExports;
-
-						const processDependenciesBlock = depBlock => {
-							for (const dep of depBlock.dependencies) {
-								if (processDependency(dep)) return true;
-							}
-							for (const variable of depBlock.variables) {
-								for (const dep of variable.dependencies) {
-									if (processDependency(dep)) return true;
-								}
-							}
-							for (const block of depBlock.blocks) {
-								if (processDependenciesBlock(block)) return true;
-							}
-							return false;
-						};
-
-						const processDependency = dep => {
-							const exportDesc = dep.getExports && dep.getExports();
-							if (!exportDesc) return;
-							moduleWithExports = true;
-							const exports = exportDesc.exports;
-							// break early if it's only in the worst state
-							if (module.buildMeta.providedExports === true) {
-								return true;
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const moduleGraph = compilation.moduleGraph;
+			const cache = compilation.getCache(PLUGIN_NAME);
+			compilation.hooks.finishModules.tapAsync(
+				PLUGIN_NAME,
+				(modules, callback) => {
+					const logger = compilation.getLogger(PLUGIN_LOGGER_NAME);
+					let statRestoredFromMemCache = 0;
+					let statRestoredFromCache = 0;
+					let statNoExports = 0;
+					let statFlaggedUncached = 0;
+					let statNotCached = 0;
+					let statQueueItemsProcessed = 0;
+
+					const { moduleMemCaches } = compilation;
+
+					/** @type {Queue} */
+					const queue = new Queue();
+
+					// Step 1: Try to restore cached provided export info from cache
+					logger.time("restore cached provided exports");
+					asyncLib.each(
+						/** @type {import("neo-async").IterableCollection} */ (
+							/** @type {unknown} */ (modules)
+						),
+						(module, callback) => {
+							const exportsInfo = moduleGraph.getExportsInfo(module);
+							// If the module doesn't have an exportsType, it's a module
+							// without declared exports.
+							if (
+								(!module.buildMeta || !module.buildMeta.exportsType) &&
+								exportsInfo.otherExportsInfo.provided !== null
+							) {
+								// It's a module without declared exports
+								statNoExports++;
+								exportsInfo.setHasProvideInfo();
+								exportsInfo.setUnknownExportsProvided();
+								return callback();
 							}
-							// break if it should move to the worst state
-							if (exports === true) {
-								module.buildMeta.providedExports = true;
-								notifyDependencies();
-								return true;
+							// If the module has no hash, it's uncacheable
+							if (
+								typeof (/** @type {BuildInfo} */ (module.buildInfo).hash) !==
+								"string"
+							) {
+								statFlaggedUncached++;
+								// Enqueue uncacheable module for determining the exports
+								queue.enqueue(module);
+								exportsInfo.setHasProvideInfo();
+								return callback();
 							}
-							// merge in new exports
-							if (Array.isArray(exports)) {
-								if (addToSet(moduleProvidedExports, exports)) {
-									notifyDependencies();
-								}
+							const memCache = moduleMemCaches && moduleMemCaches.get(module);
+							const memCacheValue = memCache && memCache.get(this);
+							if (memCacheValue !== undefined) {
+								statRestoredFromMemCache++;
+								exportsInfo.restoreProvided(memCacheValue);
+								return callback();
 							}
-							// store dependencies
-							const exportDeps = exportDesc.dependencies;
-							if (exportDeps) {
-								for (const exportDependency of exportDeps) {
-									// add dependency for this module
-									const set = dependencies.get(exportDependency);
-									if (set === undefined) {
-										dependencies.set(exportDependency, new Set([module]));
+							cache.get(
+								module.identifier(),
+								/** @type {BuildInfo} */
+								(module.buildInfo).hash,
+								(err, result) => {
+									if (err) return callback(err);
+
+									if (result !== undefined) {
+										statRestoredFromCache++;
+										exportsInfo.restoreProvided(result);
 									} else {
-										set.add(module);
+										statNotCached++;
+										// Without cached info enqueue module for determining the exports
+										queue.enqueue(module);
+										exportsInfo.setHasProvideInfo();
 									}
+									callback();
 								}
-							}
-							return false;
-						};
-
-						const notifyDependencies = () => {
-							const deps = dependencies.get(module);
-							if (deps !== undefined) {
-								for (const dep of deps) {
-									queue.enqueue(dep);
+							);
+						},
+						(err) => {
+							logger.timeEnd("restore cached provided exports");
+							if (err) return callback(err);
+
+							/** @type {Set} */
+							const modulesToStore = new Set();
+
+							/** @type {Map>} */
+							const dependencies = new Map();
+
+							/** @type {Module} */
+							let module;
+
+							/** @type {ExportsInfo} */
+							let exportsInfo;
+
+							/** @type {Map} */
+							const exportsSpecsFromDependencies = new Map();
+
+							let cacheable = true;
+							let changed = false;
+
+							/**
+							 * @param {DependenciesBlock} depBlock the dependencies block
+							 * @returns {void}
+							 */
+							const processDependenciesBlock = (depBlock) => {
+								for (const dep of depBlock.dependencies) {
+									processDependency(dep);
 								}
-							}
-						};
+								for (const block of depBlock.blocks) {
+									processDependenciesBlock(block);
+								}
+							};
 
-						// Start with all modules without provided exports
-						for (const module of modules) {
-							if (!module.buildMeta.providedExports) {
-								queue.enqueue(module);
-							}
-						}
+							/**
+							 * @param {Dependency} dep the dependency
+							 * @returns {void}
+							 */
+							const processDependency = (dep) => {
+								const exportDesc = dep.getExports(moduleGraph);
+								if (!exportDesc) return;
+								exportsSpecsFromDependencies.set(dep, exportDesc);
+							};
+
+							/**
+							 * @param {Dependency} dep dependency
+							 * @param {ExportsSpec} exportDesc info
+							 * @returns {void}
+							 */
+							const processExportsSpec = (dep, exportDesc) => {
+								const exports = exportDesc.exports;
+								const globalCanMangle = exportDesc.canMangle;
+								const globalFrom = exportDesc.from;
+								const globalPriority = exportDesc.priority;
+								const globalTerminalBinding =
+									exportDesc.terminalBinding || false;
+								const exportDeps = exportDesc.dependencies;
+								if (exportDesc.hideExports) {
+									for (const name of exportDesc.hideExports) {
+										const exportInfo = exportsInfo.getExportInfo(name);
+										exportInfo.unsetTarget(dep);
+									}
+								}
+								if (exports === true) {
+									// unknown exports
+									if (
+										exportsInfo.setUnknownExportsProvided(
+											globalCanMangle,
+											exportDesc.excludeExports,
+											globalFrom && dep,
+											globalFrom,
+											globalPriority
+										)
+									) {
+										changed = true;
+									}
+								} else if (Array.isArray(exports)) {
+									/**
+									 * merge in new exports
+									 * @param {ExportsInfo} exportsInfo own exports info
+									 * @param {(ExportSpec | string)[]} exports list of exports
+									 */
+									const mergeExports = (exportsInfo, exports) => {
+										for (const exportNameOrSpec of exports) {
+											/** @type {ExportInfoName} */
+											let name;
+											let canMangle = globalCanMangle;
+											let terminalBinding = globalTerminalBinding;
+											/** @type {ExportSpec["exports"]} */
+											let exports;
+											let from = globalFrom;
+											/** @type {ExportSpec["export"]} */
+											let fromExport;
+											let priority = globalPriority;
+											let hidden = false;
+											if (typeof exportNameOrSpec === "string") {
+												name = exportNameOrSpec;
+											} else {
+												name = exportNameOrSpec.name;
+												if (exportNameOrSpec.canMangle !== undefined) {
+													canMangle = exportNameOrSpec.canMangle;
+												}
+												if (exportNameOrSpec.export !== undefined) {
+													fromExport = exportNameOrSpec.export;
+												}
+												if (exportNameOrSpec.exports !== undefined) {
+													exports = exportNameOrSpec.exports;
+												}
+												if (exportNameOrSpec.from !== undefined) {
+													from = exportNameOrSpec.from;
+												}
+												if (exportNameOrSpec.priority !== undefined) {
+													priority = exportNameOrSpec.priority;
+												}
+												if (exportNameOrSpec.terminalBinding !== undefined) {
+													terminalBinding = exportNameOrSpec.terminalBinding;
+												}
+												if (exportNameOrSpec.hidden !== undefined) {
+													hidden = exportNameOrSpec.hidden;
+												}
+											}
+											const exportInfo = exportsInfo.getExportInfo(name);
 
-						while (queue.length > 0) {
-							module = queue.dequeue();
-
-							if (module.buildMeta.providedExports !== true) {
-								moduleWithExports =
-									module.buildMeta && module.buildMeta.exportsType;
-								moduleProvidedExports = Array.isArray(
-									module.buildMeta.providedExports
-								)
-									? new Set(module.buildMeta.providedExports)
-									: new Set();
+											if (
+												exportInfo.provided === false ||
+												exportInfo.provided === null
+											) {
+												exportInfo.provided = true;
+												changed = true;
+											}
+
+											if (
+												exportInfo.canMangleProvide !== false &&
+												canMangle === false
+											) {
+												exportInfo.canMangleProvide = false;
+												changed = true;
+											}
+
+											if (terminalBinding && !exportInfo.terminalBinding) {
+												exportInfo.terminalBinding = true;
+												changed = true;
+											}
+
+											if (exports) {
+												const nestedExportsInfo =
+													exportInfo.createNestedExportsInfo();
+												mergeExports(
+													/** @type {ExportsInfo} */ (nestedExportsInfo),
+													exports
+												);
+											}
+
+											if (
+												from &&
+												(hidden
+													? exportInfo.unsetTarget(dep)
+													: exportInfo.setTarget(
+															dep,
+															from,
+															fromExport === undefined ? [name] : fromExport,
+															priority
+														))
+											) {
+												changed = true;
+											}
+
+											// Recalculate target exportsInfo
+											const target = exportInfo.getTarget(moduleGraph);
+											/** @type {undefined | ExportsInfo} */
+											let targetExportsInfo;
+											if (target) {
+												const targetModuleExportsInfo =
+													moduleGraph.getExportsInfo(target.module);
+												targetExportsInfo =
+													targetModuleExportsInfo.getNestedExportsInfo(
+														target.export
+													);
+												// add dependency for this module
+												const set = dependencies.get(target.module);
+												if (set === undefined) {
+													dependencies.set(target.module, new Set([module]));
+												} else {
+													set.add(module);
+												}
+											}
+
+											if (exportInfo.exportsInfoOwned) {
+												if (
+													/** @type {ExportsInfo} */
+													(exportInfo.exportsInfo).setRedirectNamedTo(
+														targetExportsInfo
+													)
+												) {
+													changed = true;
+												}
+											} else if (exportInfo.exportsInfo !== targetExportsInfo) {
+												exportInfo.exportsInfo = targetExportsInfo;
+												changed = true;
+											}
+										}
+									};
+									mergeExports(exportsInfo, exports);
+								}
+								// store dependencies
+								if (exportDeps) {
+									cacheable = false;
+									for (const exportDependency of exportDeps) {
+										// add dependency for this module
+										const set = dependencies.get(exportDependency);
+										if (set === undefined) {
+											dependencies.set(exportDependency, new Set([module]));
+										} else {
+											set.add(module);
+										}
+									}
+								}
+							};
+
+							const notifyDependencies = () => {
+								const deps = dependencies.get(module);
+								if (deps !== undefined) {
+									for (const dep of deps) {
+										queue.enqueue(dep);
+									}
+								}
+							};
+
+							logger.time("figure out provided exports");
+							while (queue.length > 0) {
+								module = /** @type {Module} */ (queue.dequeue());
+
+								statQueueItemsProcessed++;
+
+								exportsInfo = moduleGraph.getExportsInfo(module);
+
+								cacheable = true;
+								changed = false;
+
+								exportsSpecsFromDependencies.clear();
+								moduleGraph.freeze();
 								processDependenciesBlock(module);
-								if (!moduleWithExports) {
-									module.buildMeta.providedExports = true;
+								moduleGraph.unfreeze();
+								for (const [dep, exportsSpec] of exportsSpecsFromDependencies) {
+									processExportsSpec(dep, exportsSpec);
+								}
+
+								if (cacheable) {
+									modulesToStore.add(module);
+								}
+
+								if (changed) {
 									notifyDependencies();
-								} else if (module.buildMeta.providedExports !== true) {
-									module.buildMeta.providedExports = Array.from(
-										moduleProvidedExports
-									);
 								}
 							}
+							logger.timeEnd("figure out provided exports");
+
+							logger.log(
+								`${Math.round(
+									(100 * (statFlaggedUncached + statNotCached)) /
+										(statRestoredFromMemCache +
+											statRestoredFromCache +
+											statNotCached +
+											statFlaggedUncached +
+											statNoExports)
+								)}% of exports of modules have been determined (${statNoExports} no declared exports, ${statNotCached} not cached, ${statFlaggedUncached} flagged uncacheable, ${statRestoredFromCache} from cache, ${statRestoredFromMemCache} from mem cache, ${
+									statQueueItemsProcessed - statNotCached - statFlaggedUncached
+								} additional calculations due to dependencies)`
+							);
+
+							logger.time("store provided exports into cache");
+							asyncLib.each(
+								modulesToStore,
+								(module, callback) => {
+									if (
+										typeof (
+											/** @type {BuildInfo} */
+											(module.buildInfo).hash
+										) !== "string"
+									) {
+										// not cacheable
+										return callback();
+									}
+									const cachedData = moduleGraph
+										.getExportsInfo(module)
+										.getRestoreProvidedData();
+									const memCache =
+										moduleMemCaches && moduleMemCaches.get(module);
+									if (memCache) {
+										memCache.set(this, cachedData);
+									}
+									cache.store(
+										module.identifier(),
+										/** @type {BuildInfo} */
+										(module.buildInfo).hash,
+										cachedData,
+										callback
+									);
+								},
+								(err) => {
+									logger.timeEnd("store provided exports into cache");
+									callback(err);
+								}
+							);
 						}
-					}
-				);
-				const providedExportsCache = new WeakMap();
-				compilation.hooks.rebuildModule.tap(
-					"FlagDependencyExportsPlugin",
-					module => {
-						providedExportsCache.set(module, module.buildMeta.providedExports);
-					}
+					);
+				}
+			);
+
+			/** @type {WeakMap} */
+			const providedExportsCache = new WeakMap();
+			compilation.hooks.rebuildModule.tap(PLUGIN_NAME, (module) => {
+				providedExportsCache.set(
+					module,
+					moduleGraph.getExportsInfo(module).getRestoreProvidedData()
 				);
-				compilation.hooks.finishRebuildingModule.tap(
-					"FlagDependencyExportsPlugin",
-					module => {
-						module.buildMeta.providedExports = providedExportsCache.get(module);
-					}
+			});
+			compilation.hooks.finishRebuildingModule.tap(PLUGIN_NAME, (module) => {
+				moduleGraph.getExportsInfo(module).restoreProvided(
+					/** @type {RestoreProvidedData} */
+					(providedExportsCache.get(module))
 				);
-			}
-		);
+			});
+		});
 	}
 }
 
diff --git a/lib/FlagDependencyUsagePlugin.js b/lib/FlagDependencyUsagePlugin.js
index e464c1cd6ac..bc9985f0d72 100644
--- a/lib/FlagDependencyUsagePlugin.js
+++ b/lib/FlagDependencyUsagePlugin.js
@@ -2,110 +2,347 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const addToSet = (a, b) => {
-	for (const item of b) {
-		if (!a.includes(item)) a.push(item);
-	}
-	return a;
-};
+const Dependency = require("./Dependency");
+const { UsageState } = require("./ExportsInfo");
+const ModuleGraphConnection = require("./ModuleGraphConnection");
+const { STAGE_DEFAULT } = require("./OptimizationStages");
+const ArrayQueue = require("./util/ArrayQueue");
+const TupleQueue = require("./util/TupleQueue");
+const { getEntryRuntime, mergeRuntimeOwned } = require("./util/runtime");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import("./Dependency").ReferencedExport} ReferencedExport */
+/** @typedef {import("./Dependency").ReferencedExports} ReferencedExports */
+/** @typedef {import("./ExportsInfo")} ExportsInfo */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+const { NO_EXPORTS_REFERENCED, EXPORTS_OBJECT_REFERENCED } = Dependency;
 
-const isSubset = (biggerSet, subset) => {
-	if (biggerSet === true) return true;
-	if (subset === true) return false;
-	return subset.every(item => biggerSet.indexOf(item) >= 0);
-};
+const PLUGIN_NAME = "FlagDependencyUsagePlugin";
+const PLUGIN_LOGGER_NAME = `webpack.${PLUGIN_NAME}`;
 
 class FlagDependencyUsagePlugin {
+	/**
+	 * @param {boolean} global do a global analysis instead of per runtime
+	 */
+	constructor(global) {
+		/** @type {boolean} */
+		this.global = global;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.compilation.tap("FlagDependencyUsagePlugin", compilation => {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const moduleGraph = compilation.moduleGraph;
 			compilation.hooks.optimizeDependencies.tap(
-				"FlagDependencyUsagePlugin",
-				modules => {
-					const processModule = (module, usedExports) => {
-						module.used = true;
-						if (module.usedExports === true) return;
-						if (usedExports === true) {
-							module.usedExports = true;
-						} else if (Array.isArray(usedExports)) {
-							const old = module.usedExports ? module.usedExports.length : -1;
-							module.usedExports = addToSet(
-								module.usedExports || [],
-								usedExports
-							);
-							if (module.usedExports.length === old) {
+				{ name: PLUGIN_NAME, stage: STAGE_DEFAULT },
+				(modules) => {
+					if (compilation.moduleMemCaches) {
+						throw new Error(
+							"optimization.usedExports can't be used with cacheUnaffected as export usage is a global effect"
+						);
+					}
+
+					const logger = compilation.getLogger(PLUGIN_LOGGER_NAME);
+					/** @type {Map} */
+					const exportInfoToModuleMap = new Map();
+
+					/** @type {TupleQueue} */
+					const queue = new TupleQueue();
+
+					/**
+					 * @param {Module} module module to process
+					 * @param {ReferencedExports} usedExports list of used exports
+					 * @param {RuntimeSpec} runtime part of which runtime
+					 * @param {boolean} forceSideEffects always apply side effects
+					 * @returns {void}
+					 */
+					const processReferencedModule = (
+						module,
+						usedExports,
+						runtime,
+						forceSideEffects
+					) => {
+						const exportsInfo = moduleGraph.getExportsInfo(module);
+						if (usedExports.length > 0) {
+							if (!module.buildMeta || !module.buildMeta.exportsType) {
+								if (exportsInfo.setUsedWithoutInfo(runtime)) {
+									queue.enqueue(module, runtime);
+								}
 								return;
 							}
-						} else if (Array.isArray(module.usedExports)) {
-							return;
+							for (const usedExportInfo of usedExports) {
+								/** @type {string[]} */
+								let usedExport;
+								let canMangle = true;
+								if (Array.isArray(usedExportInfo)) {
+									usedExport = usedExportInfo;
+								} else {
+									usedExport = usedExportInfo.name;
+									canMangle = usedExportInfo.canMangle !== false;
+								}
+								if (usedExport.length === 0) {
+									if (exportsInfo.setUsedInUnknownWay(runtime)) {
+										queue.enqueue(module, runtime);
+									}
+								} else {
+									let currentExportsInfo = exportsInfo;
+									for (let i = 0; i < usedExport.length; i++) {
+										const exportInfo = currentExportsInfo.getExportInfo(
+											usedExport[i]
+										);
+										if (canMangle === false) {
+											exportInfo.canMangleUse = false;
+										}
+										const lastOne = i === usedExport.length - 1;
+										if (!lastOne) {
+											const nestedInfo = exportInfo.getNestedExportsInfo();
+											if (nestedInfo) {
+												if (
+													exportInfo.setUsedConditionally(
+														(used) => used === UsageState.Unused,
+														UsageState.OnlyPropertiesUsed,
+														runtime
+													)
+												) {
+													const currentModule =
+														currentExportsInfo === exportsInfo
+															? module
+															: exportInfoToModuleMap.get(currentExportsInfo);
+													if (currentModule) {
+														queue.enqueue(currentModule, runtime);
+													}
+												}
+												currentExportsInfo = nestedInfo;
+												continue;
+											}
+										}
+										if (
+											exportInfo.setUsedConditionally(
+												(v) => v !== UsageState.Used,
+												UsageState.Used,
+												runtime
+											)
+										) {
+											const currentModule =
+												currentExportsInfo === exportsInfo
+													? module
+													: exportInfoToModuleMap.get(currentExportsInfo);
+											if (currentModule) {
+												queue.enqueue(currentModule, runtime);
+											}
+										}
+										break;
+									}
+								}
+							}
 						} else {
-							module.usedExports = false;
-						}
-
-						// for a module without side effects we stop tracking usage here when no export is used
-						// This module won't be evaluated in this case
-						if (module.factoryMeta.sideEffectFree) {
-							if (module.usedExports === false) return;
+							// for a module without side effects we stop tracking usage here when no export is used
+							// This module won't be evaluated in this case
+							// TODO webpack 6 remove this check
 							if (
-								Array.isArray(module.usedExports) &&
-								module.usedExports.length === 0
-							)
+								!forceSideEffects &&
+								module.factoryMeta !== undefined &&
+								module.factoryMeta.sideEffectFree
+							) {
 								return;
+							}
+							if (exportsInfo.setUsedForSideEffectsOnly(runtime)) {
+								queue.enqueue(module, runtime);
+							}
 						}
-
-						queue.push([module, module.usedExports]);
 					};
 
-					const processDependenciesBlock = (depBlock, usedExports) => {
-						for (const dep of depBlock.dependencies) {
-							processDependency(dep);
-						}
-						for (const variable of depBlock.variables) {
-							for (const dep of variable.dependencies) {
-								processDependency(dep);
+					/**
+					 * @param {DependenciesBlock} module the module
+					 * @param {RuntimeSpec} runtime part of which runtime
+					 * @param {boolean} forceSideEffects always apply side effects
+					 * @returns {void}
+					 */
+					const processModule = (module, runtime, forceSideEffects) => {
+						/** @typedef {Map} ExportMaps */
+						/** @type {Map} */
+						const map = new Map();
+
+						/** @type {ArrayQueue} */
+						const queue = new ArrayQueue();
+						queue.enqueue(module);
+						for (;;) {
+							const block = queue.dequeue();
+							if (block === undefined) break;
+							for (const b of block.blocks) {
+								if (b.groupOptions && b.groupOptions.entryOptions) {
+									processModule(
+										b,
+										this.global
+											? undefined
+											: b.groupOptions.entryOptions.runtime || undefined,
+										true
+									);
+								} else {
+									queue.enqueue(b);
+								}
+							}
+							for (const dep of block.dependencies) {
+								const connection = moduleGraph.getConnection(dep);
+								if (!connection || !connection.module) {
+									continue;
+								}
+								const activeState = connection.getActiveState(runtime);
+								if (activeState === false) continue;
+								const { module } = connection;
+								if (activeState === ModuleGraphConnection.TRANSITIVE_ONLY) {
+									processModule(module, runtime, false);
+									continue;
+								}
+								const oldReferencedExports = map.get(module);
+								if (oldReferencedExports === EXPORTS_OBJECT_REFERENCED) {
+									continue;
+								}
+								const referencedExports =
+									compilation.getDependencyReferencedExports(dep, runtime);
+								if (
+									oldReferencedExports === undefined ||
+									oldReferencedExports === NO_EXPORTS_REFERENCED ||
+									referencedExports === EXPORTS_OBJECT_REFERENCED
+								) {
+									map.set(module, referencedExports);
+								} else if (
+									oldReferencedExports !== undefined &&
+									referencedExports === NO_EXPORTS_REFERENCED
+								) {
+									continue;
+								} else {
+									/** @type {undefined | ExportMaps} */
+									let exportsMap;
+									if (Array.isArray(oldReferencedExports)) {
+										exportsMap = new Map();
+										for (const item of oldReferencedExports) {
+											if (Array.isArray(item)) {
+												exportsMap.set(item.join("\n"), item);
+											} else {
+												exportsMap.set(item.name.join("\n"), item);
+											}
+										}
+										map.set(module, exportsMap);
+									} else {
+										exportsMap = oldReferencedExports;
+									}
+									for (const item of referencedExports) {
+										if (Array.isArray(item)) {
+											const key = item.join("\n");
+											const oldItem = exportsMap.get(key);
+											if (oldItem === undefined) {
+												exportsMap.set(key, item);
+											}
+											// if oldItem is already an array we have to do nothing
+											// if oldItem is an ReferencedExport object, we don't have to do anything
+											// as canMangle defaults to true for arrays
+										} else {
+											const key = item.name.join("\n");
+											const oldItem = exportsMap.get(key);
+											if (oldItem === undefined || Array.isArray(oldItem)) {
+												exportsMap.set(key, item);
+											} else {
+												exportsMap.set(key, {
+													name: item.name,
+													canMangle: item.canMangle && oldItem.canMangle
+												});
+											}
+										}
+									}
+								}
 							}
 						}
-						for (const block of depBlock.blocks) {
-							queue.push([block, usedExports]);
-						}
-					};
 
-					const processDependency = dep => {
-						// TODO remove dep.getReference existance check in webpack 5
-						const reference = dep.getReference && dep.getReference();
-						if (!reference) return;
-						const module = reference.module;
-						const importedNames = reference.importedNames;
-						const oldUsed = module.used;
-						const oldUsedExports = module.usedExports;
-						if (
-							!oldUsed ||
-							(importedNames &&
-								(!oldUsedExports || !isSubset(oldUsedExports, importedNames)))
-						) {
-							processModule(module, importedNames);
+						for (const [module, referencedExports] of map) {
+							if (Array.isArray(referencedExports)) {
+								processReferencedModule(
+									module,
+									referencedExports,
+									runtime,
+									forceSideEffects
+								);
+							} else {
+								processReferencedModule(
+									module,
+									[...referencedExports.values()],
+									runtime,
+									forceSideEffects
+								);
+							}
 						}
 					};
 
+					logger.time("initialize exports usage");
 					for (const module of modules) {
-						module.used = false;
+						const exportsInfo = moduleGraph.getExportsInfo(module);
+						exportInfoToModuleMap.set(exportsInfo, module);
+						exportsInfo.setHasUseInfo();
 					}
+					logger.timeEnd("initialize exports usage");
+
+					logger.time("trace exports usage in graph");
 
-					const queue = [];
-					for (const preparedEntrypoint of compilation._preparedEntrypoints) {
-						if (preparedEntrypoint.module) {
-							processModule(preparedEntrypoint.module, true);
+					/**
+					 * @param {Dependency} dep dependency
+					 * @param {RuntimeSpec} runtime runtime
+					 */
+					const processEntryDependency = (dep, runtime) => {
+						const module = moduleGraph.getModule(dep);
+						if (module) {
+							processReferencedModule(
+								module,
+								NO_EXPORTS_REFERENCED,
+								runtime,
+								true
+							);
+						}
+					};
+					/** @type {RuntimeSpec} */
+					let globalRuntime;
+					for (const [
+						entryName,
+						{ dependencies: deps, includeDependencies: includeDeps, options }
+					] of compilation.entries) {
+						const runtime = this.global
+							? undefined
+							: getEntryRuntime(compilation, entryName, options);
+						for (const dep of deps) {
+							processEntryDependency(dep, runtime);
+						}
+						for (const dep of includeDeps) {
+							processEntryDependency(dep, runtime);
 						}
+						globalRuntime = mergeRuntimeOwned(globalRuntime, runtime);
+					}
+					for (const dep of compilation.globalEntry.dependencies) {
+						processEntryDependency(dep, globalRuntime);
+					}
+					for (const dep of compilation.globalEntry.includeDependencies) {
+						processEntryDependency(dep, globalRuntime);
 					}
 
 					while (queue.length) {
-						const queueItem = queue.pop();
-						processDependenciesBlock(queueItem[0], queueItem[1]);
+						const [module, runtime] = /** @type {[Module, RuntimeSpec]} */ (
+							queue.dequeue()
+						);
+						processModule(module, runtime, false);
 					}
+					logger.timeEnd("trace exports usage in graph");
 				}
 			);
 		});
 	}
 }
+
 module.exports = FlagDependencyUsagePlugin;
diff --git a/lib/FlagEntryExportAsUsedPlugin.js b/lib/FlagEntryExportAsUsedPlugin.js
new file mode 100644
index 00000000000..71e770d92ae
--- /dev/null
+++ b/lib/FlagEntryExportAsUsedPlugin.js
@@ -0,0 +1,56 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { getEntryRuntime } = require("./util/runtime");
+
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "FlagEntryExportAsUsedPlugin";
+
+class FlagEntryExportAsUsedPlugin {
+	/**
+	 * @param {boolean} nsObjectUsed true, if the ns object is used
+	 * @param {string} explanation explanation for the reason
+	 */
+	constructor(nsObjectUsed, explanation) {
+		this.nsObjectUsed = nsObjectUsed;
+		this.explanation = explanation;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
+			const moduleGraph = compilation.moduleGraph;
+			compilation.hooks.seal.tap(PLUGIN_NAME, () => {
+				for (const [
+					entryName,
+					{ dependencies: deps, options }
+				] of compilation.entries) {
+					const runtime = getEntryRuntime(compilation, entryName, options);
+					for (const dep of deps) {
+						const module = moduleGraph.getModule(dep);
+						if (module) {
+							const exportsInfo = moduleGraph.getExportsInfo(module);
+							if (this.nsObjectUsed) {
+								exportsInfo.setUsedInUnknownWay(runtime);
+							} else {
+								exportsInfo.setAllKnownExportsUsed(runtime);
+							}
+							moduleGraph.addExtraReason(module, this.explanation);
+						}
+					}
+				}
+			});
+		});
+	}
+}
+
+module.exports = FlagEntryExportAsUsedPlugin;
diff --git a/lib/FlagInitialModulesAsUsedPlugin.js b/lib/FlagInitialModulesAsUsedPlugin.js
deleted file mode 100644
index 7272ddb3a35..00000000000
--- a/lib/FlagInitialModulesAsUsedPlugin.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-class FlagInitialModulesAsUsedPlugin {
-	constructor(explanation) {
-		this.explanation = explanation;
-	}
-
-	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"FlagInitialModulesAsUsedPlugin",
-			compilation => {
-				compilation.hooks.afterOptimizeChunks.tap(
-					"FlagInitialModulesAsUsedPlugin",
-					chunks => {
-						for (const chunk of chunks) {
-							if (!chunk.isOnlyInitial()) {
-								return;
-							}
-							for (const module of chunk.modulesIterable) {
-								module.used = true;
-								module.usedExports = true;
-								module.addReason(null, null, this.explanation);
-							}
-						}
-					}
-				);
-			}
-		);
-	}
-}
-
-module.exports = FlagInitialModulesAsUsedPlugin;
diff --git a/lib/FunctionModulePlugin.js b/lib/FunctionModulePlugin.js
deleted file mode 100644
index fc4b2707f0a..00000000000
--- a/lib/FunctionModulePlugin.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const FunctionModuleTemplatePlugin = require("./FunctionModuleTemplatePlugin");
-
-class FunctionModulePlugin {
-	apply(compiler) {
-		compiler.hooks.compilation.tap("FunctionModulePlugin", compilation => {
-			new FunctionModuleTemplatePlugin().apply(
-				compilation.moduleTemplates.javascript
-			);
-		});
-	}
-}
-
-module.exports = FunctionModulePlugin;
diff --git a/lib/FunctionModuleTemplatePlugin.js b/lib/FunctionModuleTemplatePlugin.js
deleted file mode 100644
index cf2e1b0eae4..00000000000
--- a/lib/FunctionModuleTemplatePlugin.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { ConcatSource } = require("webpack-sources");
-const Template = require("./Template");
-
-class FunctionModuleTemplatePlugin {
-	apply(moduleTemplate) {
-		moduleTemplate.hooks.render.tap(
-			"FunctionModuleTemplatePlugin",
-			(moduleSource, module) => {
-				const source = new ConcatSource();
-				const args = [module.moduleArgument];
-				// TODO remove HACK checking type for javascript
-				if (module.type && module.type.startsWith("javascript")) {
-					args.push(module.exportsArgument);
-					if (module.hasDependencies(d => d.requireWebpackRequire !== false)) {
-						args.push("__webpack_require__");
-					}
-				} else if (module.type && module.type.startsWith("json")) {
-					// no additional arguments needed
-				} else {
-					args.push(module.exportsArgument, "__webpack_require__");
-				}
-				source.add("/***/ (function(" + args.join(", ") + ") {\n\n");
-				if (module.buildInfo.strict) source.add('"use strict";\n');
-				source.add(moduleSource);
-				source.add("\n\n/***/ })");
-				return source;
-			}
-		);
-
-		moduleTemplate.hooks.package.tap(
-			"FunctionModuleTemplatePlugin",
-			(moduleSource, module) => {
-				if (moduleTemplate.runtimeTemplate.outputOptions.pathinfo) {
-					const source = new ConcatSource();
-					const req = module.readableIdentifier(
-						moduleTemplate.runtimeTemplate.requestShortener
-					);
-					source.add("/*!****" + req.replace(/./g, "*") + "****!*\\\n");
-					source.add("  !*** " + req.replace(/\*\//g, "*_/") + " ***!\n");
-					source.add("  \\****" + req.replace(/./g, "*") + "****/\n");
-					if (
-						Array.isArray(module.buildMeta.providedExports) &&
-						module.buildMeta.providedExports.length === 0
-					) {
-						source.add(Template.toComment("no exports provided") + "\n");
-					} else if (Array.isArray(module.buildMeta.providedExports)) {
-						source.add(
-							Template.toComment(
-								"exports provided: " +
-									module.buildMeta.providedExports.join(", ")
-							) + "\n"
-						);
-					} else if (module.buildMeta.providedExports) {
-						source.add(Template.toComment("no static exports found") + "\n");
-					}
-					if (
-						Array.isArray(module.usedExports) &&
-						module.usedExports.length === 0
-					) {
-						source.add(Template.toComment("no exports used") + "\n");
-					} else if (Array.isArray(module.usedExports)) {
-						source.add(
-							Template.toComment(
-								"exports used: " + module.usedExports.join(", ")
-							) + "\n"
-						);
-					} else if (module.usedExports) {
-						source.add(Template.toComment("all exports used") + "\n");
-					}
-					if (module.optimizationBailout) {
-						for (const text of module.optimizationBailout) {
-							let code;
-							if (typeof text === "function") {
-								code = text(moduleTemplate.runtimeTemplate.requestShortener);
-							} else {
-								code = text;
-							}
-							source.add(Template.toComment(`${code}`) + "\n");
-						}
-					}
-					source.add(moduleSource);
-					return source;
-				}
-				return moduleSource;
-			}
-		);
-
-		moduleTemplate.hooks.hash.tap("FunctionModuleTemplatePlugin", hash => {
-			hash.update("FunctionModuleTemplatePlugin");
-			hash.update("2");
-		});
-	}
-}
-module.exports = FunctionModuleTemplatePlugin;
diff --git a/lib/Generator.js b/lib/Generator.js
index 441f22872de..30a10439847 100644
--- a/lib/Generator.js
+++ b/lib/Generator.js
@@ -2,50 +2,186 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-/** @typedef {import("./Module")} Module */
-/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+const { JAVASCRIPT_TYPE } = require("./ModuleSourceTypeConstants");
+
 /** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
+/** @typedef {import("./ConcatenationScope")} ConcatenationScope */
+/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
+/** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
+/** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./Module").SourceType} SourceType */
+/** @typedef {import("./Module").SourceTypes} SourceTypes */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./NormalModule")} NormalModule */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/**
+ * @typedef {object} GenerateContext
+ * @property {DependencyTemplates} dependencyTemplates mapping from dependencies to templates
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
+ * @property {ModuleGraph} moduleGraph the module graph
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ * @property {RuntimeRequirements} runtimeRequirements the requirements for runtime
+ * @property {RuntimeSpec} runtime the runtime
+ * @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
+ * @property {CodeGenerationResults=} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that)
+ * @property {SourceType} type which kind of code should be generated
+ * @property {() => CodeGenerationResultData=} getData get access to the code generation data
+ */
 
 /**
- *
+ * @callback GenerateErrorFn
+ * @param {Error} error the error
+ * @param {NormalModule} module module for which the code should be generated
+ * @param {GenerateContext} generateContext context for generate
+ * @returns {Source | null} generated code
  */
+
+/**
+ * @typedef {object} UpdateHashContext
+ * @property {NormalModule} module the module
+ * @property {ChunkGraph} chunkGraph
+ * @property {RuntimeSpec} runtime
+ * @property {RuntimeTemplate=} runtimeTemplate
+ */
+
 class Generator {
+	/**
+	 * @param {{ [key in SourceType]?: Generator }} map map of types
+	 * @returns {ByTypeGenerator} generator by type
+	 */
 	static byType(map) {
 		return new ByTypeGenerator(map);
 	}
 
+	/* istanbul ignore next */
 	/**
 	 * @abstract
-	 * @param {Module} module module for which the code should be generated
-	 * @param {Map} dependencyTemplates mapping from dependencies to templates
-	 * @param {RuntimeTemplate} runtimeTemplate the runtime template
-	 * @param {string} type which kind of code should be generated
-	 * @returns {Source} generated code
+	 * @param {NormalModule} module fresh module
+	 * @returns {SourceTypes} available types (do not mutate)
+	 */
+	getTypes(module) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {NormalModule} module the module
+	 * @param {SourceType=} type source type
+	 * @returns {number} estimate size of the module
+	 */
+	getSize(module, type) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generate(
+		module,
+		{ dependencyTemplates, runtimeTemplate, moduleGraph, type }
+	) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the bailout reason should be determined
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
 	 */
-	generate(module, dependencyTemplates, runtimeTemplate, type) {
-		throw new Error("Generator.generate: must be overriden");
+	getConcatenationBailoutReason(module, context) {
+		return `Module Concatenation is not implemented for ${this.constructor.name}`;
+	}
+
+	/**
+	 * @param {Hash} hash hash that will be modified
+	 * @param {UpdateHashContext} updateHashContext context for updating hash
+	 */
+	updateHash(hash, { module, runtime }) {
+		// no nothing
+	}
+}
+
+/**
+ * @this {ByTypeGenerator}
+ * @type {GenerateErrorFn}
+ */
+function generateError(error, module, generateContext) {
+	const type = generateContext.type;
+	const generator =
+		/** @type {Generator & { generateError?: GenerateErrorFn }} */
+		(this.map[type]);
+	if (!generator) {
+		throw new Error(`Generator.byType: no generator specified for ${type}`);
 	}
+	if (typeof generator.generateError === "undefined") {
+		return null;
+	}
+	return generator.generateError(error, module, generateContext);
 }
 
 class ByTypeGenerator extends Generator {
+	/**
+	 * @param {{ [key in SourceType]?: Generator }} map map of types
+	 */
 	constructor(map) {
 		super();
 		this.map = map;
+		this._types = /** @type {SourceTypes} */ (new Set(Object.keys(map)));
+		/** @type {GenerateErrorFn | undefined} */
+		this.generateError = generateError.bind(this);
+	}
+
+	/**
+	 * @param {NormalModule} module fresh module
+	 * @returns {SourceTypes} available types (do not mutate)
+	 */
+	getTypes(module) {
+		return this._types;
 	}
 
-	generate(module, dependencyTemplates, runtimeTemplate, type) {
+	/**
+	 * @param {NormalModule} module the module
+	 * @param {SourceType=} type source type
+	 * @returns {number} estimate size of the module
+	 */
+	getSize(module, type = JAVASCRIPT_TYPE) {
+		const t = type;
+		const generator = this.map[t];
+		return generator ? generator.getSize(module, t) : 0;
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generate(module, generateContext) {
+		const type = generateContext.type;
 		const generator = this.map[type];
 		if (!generator) {
 			throw new Error(`Generator.byType: no generator specified for ${type}`);
 		}
-		return generator.generate(
-			module,
-			dependencyTemplates,
-			runtimeTemplate,
-			type
-		);
+		return generator.generate(module, generateContext);
 	}
 }
 
diff --git a/lib/GraphHelpers.js b/lib/GraphHelpers.js
index d668159705a..c1d79eec344 100644
--- a/lib/GraphHelpers.js
+++ b/lib/GraphHelpers.js
@@ -1,7 +1,13 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
 /** @typedef {import("./Chunk")} Chunk */
 /** @typedef {import("./ChunkGroup")} ChunkGroup */
-/** @typedef {import("./Module")} Module */
-/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import(".").Entrypoint} Entrypoint */
 
 /**
  * @param {ChunkGroup} chunkGroup the ChunkGroup to connect
@@ -26,39 +32,15 @@ const connectChunkGroupParentAndChild = (parent, child) => {
 };
 
 /**
- * @param {Chunk} chunk Chunk to connect to Module
- * @param {Module} module Module to connect to Chunk
- * @returns {void}
- */
-const connectChunkAndModule = (chunk, module) => {
-	if (module.addChunk(chunk)) {
-		chunk.addModule(module);
-	}
-};
-
-/**
- * @param {Chunk} chunk Chunk being disconnected
- * @param {Module} module Module being disconnected
+ * @param {Entrypoint} entrypoint the entrypoint
+ * @param {Entrypoint} dependOnEntrypoint the dependOnEntrypoint
  * @returns {void}
  */
-const disconnectChunkAndModule = (chunk, module) => {
-	chunk.removeModule(module);
-	module.removeChunk(chunk);
-};
-
-/**
- * @param {DependenciesBlock} depBlock DepBlock being tied to ChunkGroup
- * @param {ChunkGroup} chunkGroup ChunkGroup being tied to DepBlock
- * @returns {void}
- */
-const connectDependenciesBlockAndChunkGroup = (depBlock, chunkGroup) => {
-	if (chunkGroup.addBlock(depBlock)) {
-		depBlock.chunkGroup = chunkGroup;
-	}
+const connectEntrypointAndDependOn = (entrypoint, dependOnEntrypoint) => {
+	entrypoint.addDependOn(dependOnEntrypoint);
 };
 
-exports.connectChunkGroupAndChunk = connectChunkGroupAndChunk;
-exports.connectChunkGroupParentAndChild = connectChunkGroupParentAndChild;
-exports.connectChunkAndModule = connectChunkAndModule;
-exports.disconnectChunkAndModule = disconnectChunkAndModule;
-exports.connectDependenciesBlockAndChunkGroup = connectDependenciesBlockAndChunkGroup;
+module.exports.connectChunkGroupAndChunk = connectChunkGroupAndChunk;
+module.exports.connectChunkGroupParentAndChild =
+	connectChunkGroupParentAndChild;
+module.exports.connectEntrypointAndDependOn = connectEntrypointAndDependOn;
diff --git a/lib/HarmonyLinkingError.js b/lib/HarmonyLinkingError.js
index 78ce16dde45..9c8b137345b 100644
--- a/lib/HarmonyLinkingError.js
+++ b/lib/HarmonyLinkingError.js
@@ -1,6 +1,7 @@
 /*
 	MIT License http://www.opensource.org/licenses/mit-license.php
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
@@ -9,9 +10,8 @@ module.exports = class HarmonyLinkingError extends WebpackError {
 	/** @param {string} message Error message */
 	constructor(message) {
 		super(message);
+		/** @type {string} */
 		this.name = "HarmonyLinkingError";
 		this.hideStack = true;
-
-		Error.captureStackTrace(this, this.constructor);
 	}
 };
diff --git a/lib/HashedModuleIdsPlugin.js b/lib/HashedModuleIdsPlugin.js
deleted file mode 100644
index aeb9f1d9346..00000000000
--- a/lib/HashedModuleIdsPlugin.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-const createHash = require("./util/createHash");
-
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/HashedModuleIdsPlugin.json");
-
-class HashedModuleIdsPlugin {
-	constructor(options) {
-		validateOptions(schema, options || {}, "Hashed Module Ids Plugin");
-
-		this.options = Object.assign(
-			{
-				context: null,
-				hashFunction: "md4",
-				hashDigest: "base64",
-				hashDigestLength: 4
-			},
-			options
-		);
-	}
-
-	apply(compiler) {
-		const options = this.options;
-		compiler.hooks.compilation.tap("HashedModuleIdsPlugin", compilation => {
-			const usedIds = new Set();
-			compilation.hooks.beforeModuleIds.tap(
-				"HashedModuleIdsPlugin",
-				modules => {
-					for (const module of modules) {
-						if (module.id === null && module.libIdent) {
-							const id = module.libIdent({
-								context: this.options.context || compiler.options.context
-							});
-							const hash = createHash(options.hashFunction);
-							hash.update(id);
-							const hashId = hash.digest(options.hashDigest);
-							let len = options.hashDigestLength;
-							while (usedIds.has(hashId.substr(0, len))) len++;
-							module.id = hashId.substr(0, len);
-							usedIds.add(module.id);
-						}
-					}
-				}
-			);
-		});
-	}
-}
-
-module.exports = HashedModuleIdsPlugin;
diff --git a/lib/HookWebpackError.js b/lib/HookWebpackError.js
new file mode 100644
index 00000000000..287371cce7b
--- /dev/null
+++ b/lib/HookWebpackError.js
@@ -0,0 +1,121 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sean Larkin @thelarkinn
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
+/**
+ * @template T
+ * @callback Callback
+ * @param {Error | null} err
+ * @param {T=} stats
+ * @returns {void}
+ */
+
+class HookWebpackError extends WebpackError {
+	/**
+	 * Creates an instance of HookWebpackError.
+	 * @param {Error} error inner error
+	 * @param {string} hook name of hook
+	 */
+	constructor(error, hook) {
+		super(error ? error.message : undefined, error ? { cause: error } : {});
+
+		this.hook = hook;
+		this.error = error;
+		/** @type {string} */
+		this.name = "HookWebpackError";
+		this.hideStack = true;
+		this.stack += `\n-- inner error --\n${error ? error.stack : ""}`;
+		this.details = `caused by plugins in ${hook}\n${error ? error.stack : ""}`;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.error);
+		write(this.hook);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.error = read();
+		this.hook = read();
+
+		super.deserialize(context);
+	}
+}
+
+makeSerializable(HookWebpackError, "webpack/lib/HookWebpackError");
+
+module.exports = HookWebpackError;
+
+/**
+ * @param {Error} error an error
+ * @param {string} hook name of the hook
+ * @returns {WebpackError} a webpack error
+ */
+const makeWebpackError = (error, hook) => {
+	if (error instanceof WebpackError) return error;
+	return new HookWebpackError(error, hook);
+};
+
+module.exports.makeWebpackError = makeWebpackError;
+
+/**
+ * @template T
+ * @param {(err: WebpackError | null, result?: T) => void} callback webpack error callback
+ * @param {string} hook name of hook
+ * @returns {Callback} generic callback
+ */
+const makeWebpackErrorCallback = (callback, hook) => (err, result) => {
+	if (err) {
+		if (err instanceof WebpackError) {
+			callback(err);
+			return;
+		}
+		callback(new HookWebpackError(err, hook));
+		return;
+	}
+	callback(null, result);
+};
+
+module.exports.makeWebpackErrorCallback = makeWebpackErrorCallback;
+
+/**
+ * @template T
+ * @param {() => T} fn function which will be wrapping in try catch
+ * @param {string} hook name of hook
+ * @returns {T} the result
+ */
+const tryRunOrWebpackError = (fn, hook) => {
+	/** @type {T} */
+	let r;
+	try {
+		r = fn();
+	} catch (err) {
+		if (err instanceof WebpackError) {
+			throw err;
+		}
+		throw new HookWebpackError(/** @type {Error} */ (err), hook);
+	}
+	return r;
+};
+
+module.exports.tryRunOrWebpackError = tryRunOrWebpackError;
diff --git a/lib/HotModuleReplacement.runtime.js b/lib/HotModuleReplacement.runtime.js
deleted file mode 100644
index 4afddedc939..00000000000
--- a/lib/HotModuleReplacement.runtime.js
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-/*global $hash$ $requestTimeout$ installedModules $require$ hotDownloadManifest hotDownloadUpdateChunk hotDisposeChunk modules */
-module.exports = function() {
-	var hotApplyOnUpdate = true;
-	var hotCurrentHash = $hash$; // eslint-disable-line no-unused-vars
-	var hotRequestTimeout = $requestTimeout$;
-	var hotCurrentModuleData = {};
-	var hotCurrentChildModule; // eslint-disable-line no-unused-vars
-	var hotCurrentParents = []; // eslint-disable-line no-unused-vars
-	var hotCurrentParentsTemp = []; // eslint-disable-line no-unused-vars
-
-	// eslint-disable-next-line no-unused-vars
-	function hotCreateRequire(moduleId) {
-		var me = installedModules[moduleId];
-		if (!me) return $require$;
-		var fn = function(request) {
-			if (me.hot.active) {
-				if (installedModules[request]) {
-					if (installedModules[request].parents.indexOf(moduleId) === -1) {
-						installedModules[request].parents.push(moduleId);
-					}
-				} else {
-					hotCurrentParents = [moduleId];
-					hotCurrentChildModule = request;
-				}
-				if (me.children.indexOf(request) === -1) {
-					me.children.push(request);
-				}
-			} else {
-				console.warn(
-					"[HMR] unexpected require(" +
-						request +
-						") from disposed module " +
-						moduleId
-				);
-				hotCurrentParents = [];
-			}
-			return $require$(request);
-		};
-		var ObjectFactory = function ObjectFactory(name) {
-			return {
-				configurable: true,
-				enumerable: true,
-				get: function() {
-					return $require$[name];
-				},
-				set: function(value) {
-					$require$[name] = value;
-				}
-			};
-		};
-		for (var name in $require$) {
-			if (
-				Object.prototype.hasOwnProperty.call($require$, name) &&
-				name !== "e" &&
-				name !== "t"
-			) {
-				Object.defineProperty(fn, name, ObjectFactory(name));
-			}
-		}
-		fn.e = function(chunkId) {
-			if (hotStatus === "ready") hotSetStatus("prepare");
-			hotChunksLoading++;
-			return $require$.e(chunkId).then(finishChunkLoading, function(err) {
-				finishChunkLoading();
-				throw err;
-			});
-
-			function finishChunkLoading() {
-				hotChunksLoading--;
-				if (hotStatus === "prepare") {
-					if (!hotWaitingFilesMap[chunkId]) {
-						hotEnsureUpdateChunk(chunkId);
-					}
-					if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
-						hotUpdateDownloaded();
-					}
-				}
-			}
-		};
-		fn.t = function(value, mode) {
-			if (mode & 1) value = fn(value);
-			return $require$.t(value, mode & ~1);
-		};
-		return fn;
-	}
-
-	// eslint-disable-next-line no-unused-vars
-	function hotCreateModule(moduleId) {
-		var hot = {
-			// private stuff
-			_acceptedDependencies: {},
-			_declinedDependencies: {},
-			_selfAccepted: false,
-			_selfDeclined: false,
-			_disposeHandlers: [],
-			_main: hotCurrentChildModule !== moduleId,
-
-			// Module API
-			active: true,
-			accept: function(dep, callback) {
-				if (typeof dep === "undefined") hot._selfAccepted = true;
-				else if (typeof dep === "function") hot._selfAccepted = dep;
-				else if (typeof dep === "object")
-					for (var i = 0; i < dep.length; i++)
-						hot._acceptedDependencies[dep[i]] = callback || function() {};
-				else hot._acceptedDependencies[dep] = callback || function() {};
-			},
-			decline: function(dep) {
-				if (typeof dep === "undefined") hot._selfDeclined = true;
-				else if (typeof dep === "object")
-					for (var i = 0; i < dep.length; i++)
-						hot._declinedDependencies[dep[i]] = true;
-				else hot._declinedDependencies[dep] = true;
-			},
-			dispose: function(callback) {
-				hot._disposeHandlers.push(callback);
-			},
-			addDisposeHandler: function(callback) {
-				hot._disposeHandlers.push(callback);
-			},
-			removeDisposeHandler: function(callback) {
-				var idx = hot._disposeHandlers.indexOf(callback);
-				if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
-			},
-
-			// Management API
-			check: hotCheck,
-			apply: hotApply,
-			status: function(l) {
-				if (!l) return hotStatus;
-				hotStatusHandlers.push(l);
-			},
-			addStatusHandler: function(l) {
-				hotStatusHandlers.push(l);
-			},
-			removeStatusHandler: function(l) {
-				var idx = hotStatusHandlers.indexOf(l);
-				if (idx >= 0) hotStatusHandlers.splice(idx, 1);
-			},
-
-			//inherit from previous dispose call
-			data: hotCurrentModuleData[moduleId]
-		};
-		hotCurrentChildModule = undefined;
-		return hot;
-	}
-
-	var hotStatusHandlers = [];
-	var hotStatus = "idle";
-
-	function hotSetStatus(newStatus) {
-		hotStatus = newStatus;
-		for (var i = 0; i < hotStatusHandlers.length; i++)
-			hotStatusHandlers[i].call(null, newStatus);
-	}
-
-	// while downloading
-	var hotWaitingFiles = 0;
-	var hotChunksLoading = 0;
-	var hotWaitingFilesMap = {};
-	var hotRequestedFilesMap = {};
-	var hotAvailableFilesMap = {};
-	var hotDeferred;
-
-	// The update info
-	var hotUpdate, hotUpdateNewHash;
-
-	function toModuleId(id) {
-		var isNumber = +id + "" === id;
-		return isNumber ? +id : id;
-	}
-
-	function hotCheck(apply) {
-		if (hotStatus !== "idle") {
-			throw new Error("check() is only allowed in idle status");
-		}
-		hotApplyOnUpdate = apply;
-		hotSetStatus("check");
-		return hotDownloadManifest(hotRequestTimeout).then(function(update) {
-			if (!update) {
-				hotSetStatus("idle");
-				return null;
-			}
-			hotRequestedFilesMap = {};
-			hotWaitingFilesMap = {};
-			hotAvailableFilesMap = update.c;
-			hotUpdateNewHash = update.h;
-
-			hotSetStatus("prepare");
-			var promise = new Promise(function(resolve, reject) {
-				hotDeferred = {
-					resolve: resolve,
-					reject: reject
-				};
-			});
-			hotUpdate = {};
-			/*foreachInstalledChunks*/
-			{
-				// eslint-disable-line no-lone-blocks
-				/*globals chunkId */
-				hotEnsureUpdateChunk(chunkId);
-			}
-			if (
-				hotStatus === "prepare" &&
-				hotChunksLoading === 0 &&
-				hotWaitingFiles === 0
-			) {
-				hotUpdateDownloaded();
-			}
-			return promise;
-		});
-	}
-
-	// eslint-disable-next-line no-unused-vars
-	function hotAddUpdateChunk(chunkId, moreModules) {
-		if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
-			return;
-		hotRequestedFilesMap[chunkId] = false;
-		for (var moduleId in moreModules) {
-			if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
-				hotUpdate[moduleId] = moreModules[moduleId];
-			}
-		}
-		if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
-			hotUpdateDownloaded();
-		}
-	}
-
-	function hotEnsureUpdateChunk(chunkId) {
-		if (!hotAvailableFilesMap[chunkId]) {
-			hotWaitingFilesMap[chunkId] = true;
-		} else {
-			hotRequestedFilesMap[chunkId] = true;
-			hotWaitingFiles++;
-			hotDownloadUpdateChunk(chunkId);
-		}
-	}
-
-	function hotUpdateDownloaded() {
-		hotSetStatus("ready");
-		var deferred = hotDeferred;
-		hotDeferred = null;
-		if (!deferred) return;
-		if (hotApplyOnUpdate) {
-			// Wrap deferred object in Promise to mark it as a well-handled Promise to
-			// avoid triggering uncaught exception warning in Chrome.
-			// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
-			Promise.resolve()
-				.then(function() {
-					return hotApply(hotApplyOnUpdate);
-				})
-				.then(
-					function(result) {
-						deferred.resolve(result);
-					},
-					function(err) {
-						deferred.reject(err);
-					}
-				);
-		} else {
-			var outdatedModules = [];
-			for (var id in hotUpdate) {
-				if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
-					outdatedModules.push(toModuleId(id));
-				}
-			}
-			deferred.resolve(outdatedModules);
-		}
-	}
-
-	function hotApply(options) {
-		if (hotStatus !== "ready")
-			throw new Error("apply() is only allowed in ready status");
-		options = options || {};
-
-		var cb;
-		var i;
-		var j;
-		var module;
-		var moduleId;
-
-		function getAffectedStuff(updateModuleId) {
-			var outdatedModules = [updateModuleId];
-			var outdatedDependencies = {};
-
-			var queue = outdatedModules.slice().map(function(id) {
-				return {
-					chain: [id],
-					id: id
-				};
-			});
-			while (queue.length > 0) {
-				var queueItem = queue.pop();
-				var moduleId = queueItem.id;
-				var chain = queueItem.chain;
-				module = installedModules[moduleId];
-				if (!module || module.hot._selfAccepted) continue;
-				if (module.hot._selfDeclined) {
-					return {
-						type: "self-declined",
-						chain: chain,
-						moduleId: moduleId
-					};
-				}
-				if (module.hot._main) {
-					return {
-						type: "unaccepted",
-						chain: chain,
-						moduleId: moduleId
-					};
-				}
-				for (var i = 0; i < module.parents.length; i++) {
-					var parentId = module.parents[i];
-					var parent = installedModules[parentId];
-					if (!parent) continue;
-					if (parent.hot._declinedDependencies[moduleId]) {
-						return {
-							type: "declined",
-							chain: chain.concat([parentId]),
-							moduleId: moduleId,
-							parentId: parentId
-						};
-					}
-					if (outdatedModules.indexOf(parentId) !== -1) continue;
-					if (parent.hot._acceptedDependencies[moduleId]) {
-						if (!outdatedDependencies[parentId])
-							outdatedDependencies[parentId] = [];
-						addAllToSet(outdatedDependencies[parentId], [moduleId]);
-						continue;
-					}
-					delete outdatedDependencies[parentId];
-					outdatedModules.push(parentId);
-					queue.push({
-						chain: chain.concat([parentId]),
-						id: parentId
-					});
-				}
-			}
-
-			return {
-				type: "accepted",
-				moduleId: updateModuleId,
-				outdatedModules: outdatedModules,
-				outdatedDependencies: outdatedDependencies
-			};
-		}
-
-		function addAllToSet(a, b) {
-			for (var i = 0; i < b.length; i++) {
-				var item = b[i];
-				if (a.indexOf(item) === -1) a.push(item);
-			}
-		}
-
-		// at begin all updates modules are outdated
-		// the "outdated" status can propagate to parents if they don't accept the children
-		var outdatedDependencies = {};
-		var outdatedModules = [];
-		var appliedUpdate = {};
-
-		var warnUnexpectedRequire = function warnUnexpectedRequire() {
-			console.warn(
-				"[HMR] unexpected require(" + result.moduleId + ") to disposed module"
-			);
-		};
-
-		for (var id in hotUpdate) {
-			if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
-				moduleId = toModuleId(id);
-				/** @type {TODO} */
-				var result;
-				if (hotUpdate[id]) {
-					result = getAffectedStuff(moduleId);
-				} else {
-					result = {
-						type: "disposed",
-						moduleId: id
-					};
-				}
-				/** @type {Error|false} */
-				var abortError = false;
-				var doApply = false;
-				var doDispose = false;
-				var chainInfo = "";
-				if (result.chain) {
-					chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
-				}
-				switch (result.type) {
-					case "self-declined":
-						if (options.onDeclined) options.onDeclined(result);
-						if (!options.ignoreDeclined)
-							abortError = new Error(
-								"Aborted because of self decline: " +
-									result.moduleId +
-									chainInfo
-							);
-						break;
-					case "declined":
-						if (options.onDeclined) options.onDeclined(result);
-						if (!options.ignoreDeclined)
-							abortError = new Error(
-								"Aborted because of declined dependency: " +
-									result.moduleId +
-									" in " +
-									result.parentId +
-									chainInfo
-							);
-						break;
-					case "unaccepted":
-						if (options.onUnaccepted) options.onUnaccepted(result);
-						if (!options.ignoreUnaccepted)
-							abortError = new Error(
-								"Aborted because " + moduleId + " is not accepted" + chainInfo
-							);
-						break;
-					case "accepted":
-						if (options.onAccepted) options.onAccepted(result);
-						doApply = true;
-						break;
-					case "disposed":
-						if (options.onDisposed) options.onDisposed(result);
-						doDispose = true;
-						break;
-					default:
-						throw new Error("Unexception type " + result.type);
-				}
-				if (abortError) {
-					hotSetStatus("abort");
-					return Promise.reject(abortError);
-				}
-				if (doApply) {
-					appliedUpdate[moduleId] = hotUpdate[moduleId];
-					addAllToSet(outdatedModules, result.outdatedModules);
-					for (moduleId in result.outdatedDependencies) {
-						if (
-							Object.prototype.hasOwnProperty.call(
-								result.outdatedDependencies,
-								moduleId
-							)
-						) {
-							if (!outdatedDependencies[moduleId])
-								outdatedDependencies[moduleId] = [];
-							addAllToSet(
-								outdatedDependencies[moduleId],
-								result.outdatedDependencies[moduleId]
-							);
-						}
-					}
-				}
-				if (doDispose) {
-					addAllToSet(outdatedModules, [result.moduleId]);
-					appliedUpdate[moduleId] = warnUnexpectedRequire;
-				}
-			}
-		}
-
-		// Store self accepted outdated modules to require them later by the module system
-		var outdatedSelfAcceptedModules = [];
-		for (i = 0; i < outdatedModules.length; i++) {
-			moduleId = outdatedModules[i];
-			if (
-				installedModules[moduleId] &&
-				installedModules[moduleId].hot._selfAccepted
-			)
-				outdatedSelfAcceptedModules.push({
-					module: moduleId,
-					errorHandler: installedModules[moduleId].hot._selfAccepted
-				});
-		}
-
-		// Now in "dispose" phase
-		hotSetStatus("dispose");
-		Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
-			if (hotAvailableFilesMap[chunkId] === false) {
-				hotDisposeChunk(chunkId);
-			}
-		});
-
-		var idx;
-		var queue = outdatedModules.slice();
-		while (queue.length > 0) {
-			moduleId = queue.pop();
-			module = installedModules[moduleId];
-			if (!module) continue;
-
-			var data = {};
-
-			// Call dispose handlers
-			var disposeHandlers = module.hot._disposeHandlers;
-			for (j = 0; j < disposeHandlers.length; j++) {
-				cb = disposeHandlers[j];
-				cb(data);
-			}
-			hotCurrentModuleData[moduleId] = data;
-
-			// disable module (this disables requires from this module)
-			module.hot.active = false;
-
-			// remove module from cache
-			delete installedModules[moduleId];
-
-			// when disposing there is no need to call dispose handler
-			delete outdatedDependencies[moduleId];
-
-			// remove "parents" references from all children
-			for (j = 0; j < module.children.length; j++) {
-				var child = installedModules[module.children[j]];
-				if (!child) continue;
-				idx = child.parents.indexOf(moduleId);
-				if (idx >= 0) {
-					child.parents.splice(idx, 1);
-				}
-			}
-		}
-
-		// remove outdated dependency from module children
-		var dependency;
-		var moduleOutdatedDependencies;
-		for (moduleId in outdatedDependencies) {
-			if (
-				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
-			) {
-				module = installedModules[moduleId];
-				if (module) {
-					moduleOutdatedDependencies = outdatedDependencies[moduleId];
-					for (j = 0; j < moduleOutdatedDependencies.length; j++) {
-						dependency = moduleOutdatedDependencies[j];
-						idx = module.children.indexOf(dependency);
-						if (idx >= 0) module.children.splice(idx, 1);
-					}
-				}
-			}
-		}
-
-		// Not in "apply" phase
-		hotSetStatus("apply");
-
-		hotCurrentHash = hotUpdateNewHash;
-
-		// insert new code
-		for (moduleId in appliedUpdate) {
-			if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
-				modules[moduleId] = appliedUpdate[moduleId];
-			}
-		}
-
-		// call accept handlers
-		var error = null;
-		for (moduleId in outdatedDependencies) {
-			if (
-				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
-			) {
-				module = installedModules[moduleId];
-				if (module) {
-					moduleOutdatedDependencies = outdatedDependencies[moduleId];
-					var callbacks = [];
-					for (i = 0; i < moduleOutdatedDependencies.length; i++) {
-						dependency = moduleOutdatedDependencies[i];
-						cb = module.hot._acceptedDependencies[dependency];
-						if (cb) {
-							if (callbacks.indexOf(cb) !== -1) continue;
-							callbacks.push(cb);
-						}
-					}
-					for (i = 0; i < callbacks.length; i++) {
-						cb = callbacks[i];
-						try {
-							cb(moduleOutdatedDependencies);
-						} catch (err) {
-							if (options.onErrored) {
-								options.onErrored({
-									type: "accept-errored",
-									moduleId: moduleId,
-									dependencyId: moduleOutdatedDependencies[i],
-									error: err
-								});
-							}
-							if (!options.ignoreErrored) {
-								if (!error) error = err;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		// Load self accepted modules
-		for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
-			var item = outdatedSelfAcceptedModules[i];
-			moduleId = item.module;
-			hotCurrentParents = [moduleId];
-			try {
-				$require$(moduleId);
-			} catch (err) {
-				if (typeof item.errorHandler === "function") {
-					try {
-						item.errorHandler(err);
-					} catch (err2) {
-						if (options.onErrored) {
-							options.onErrored({
-								type: "self-accept-error-handler-errored",
-								moduleId: moduleId,
-								error: err2,
-								originalError: err
-							});
-						}
-						if (!options.ignoreErrored) {
-							if (!error) error = err2;
-						}
-						if (!error) error = err;
-					}
-				} else {
-					if (options.onErrored) {
-						options.onErrored({
-							type: "self-accept-errored",
-							moduleId: moduleId,
-							error: err
-						});
-					}
-					if (!options.ignoreErrored) {
-						if (!error) error = err;
-					}
-				}
-			}
-		}
-
-		// handle errors in accept handlers and self accepted module load
-		if (error) {
-			hotSetStatus("fail");
-			return Promise.reject(error);
-		}
-
-		hotSetStatus("idle");
-		return new Promise(function(resolve) {
-			resolve(outdatedModules);
-		});
-	}
-};
diff --git a/lib/HotModuleReplacementPlugin.js b/lib/HotModuleReplacementPlugin.js
index 4b0edac7241..efe4719d5c8 100644
--- a/lib/HotModuleReplacementPlugin.js
+++ b/lib/HotModuleReplacementPlugin.js
@@ -2,51 +2,324 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const { SyncBailHook } = require("tapable");
 const { RawSource } = require("webpack-sources");
-const Template = require("./Template");
+const ChunkGraph = require("./ChunkGraph");
+const Compilation = require("./Compilation");
+const HotUpdateChunk = require("./HotUpdateChunk");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM,
+	WEBPACK_MODULE_TYPE_RUNTIME
+} = require("./ModuleTypeConstants");
+const NormalModule = require("./NormalModule");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const WebpackError = require("./WebpackError");
+const { chunkHasCss } = require("./css/CssModulesPlugin");
+const ConstDependency = require("./dependencies/ConstDependency");
+const ImportMetaHotAcceptDependency = require("./dependencies/ImportMetaHotAcceptDependency");
+const ImportMetaHotDeclineDependency = require("./dependencies/ImportMetaHotDeclineDependency");
 const ModuleHotAcceptDependency = require("./dependencies/ModuleHotAcceptDependency");
 const ModuleHotDeclineDependency = require("./dependencies/ModuleHotDeclineDependency");
-const ConstDependency = require("./dependencies/ConstDependency");
-const NullFactory = require("./NullFactory");
-const ParserHelpers = require("./ParserHelpers");
-
-module.exports = class HotModuleReplacementPlugin {
-	constructor(options) {
-		this.options = options || {};
-		this.multiStep = this.options.multiStep;
-		this.fullBuildTimeout = this.options.fullBuildTimeout || 200;
-		this.requestTimeout = this.options.requestTimeout || 10000;
+const HotModuleReplacementRuntimeModule = require("./hmr/HotModuleReplacementRuntimeModule");
+const JavascriptParser = require("./javascript/JavascriptParser");
+const {
+	evaluateToIdentifier
+} = require("./javascript/JavascriptParserHelpers");
+const { find, isSubset } = require("./util/SetHelpers");
+const TupleSet = require("./util/TupleSet");
+const { compareModulesById } = require("./util/comparators");
+const {
+	forEachRuntime,
+	getRuntimeKey,
+	intersectRuntime,
+	keyToRuntime,
+	mergeRuntimeOwned,
+	subtractRuntime
+} = require("./util/runtime");
+
+/** @typedef {import("estree").CallExpression} CallExpression */
+/** @typedef {import("estree").Expression} Expression */
+/** @typedef {import("estree").SpreadElement} SpreadElement */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Chunk").ChunkId} ChunkId */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compilation").Records} Records */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./RuntimeModule")} RuntimeModule */
+/** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
+/** @typedef {import("./javascript/JavascriptParserHelpers").Range} Range */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/** @typedef {string[]} Requests */
+
+/**
+ * @typedef {object} HMRJavascriptParserHooks
+ * @property {SyncBailHook<[Expression | SpreadElement, Requests], void>} hotAcceptCallback
+ * @property {SyncBailHook<[CallExpression, Requests], void>} hotAcceptWithoutCallback
+ */
+
+/** @typedef {number} HotIndex */
+/** @typedef {Record} FullHashChunkModuleHashes */
+/** @typedef {Record} ChunkModuleHashes */
+/** @typedef {Record} ChunkHashes */
+/** @typedef {Record} ChunkRuntime */
+/** @typedef {Record} ChunkModuleIds */
+
+/** @typedef {Set} ChunkIds */
+/** @typedef {Set} ModuleSet */
+
+/** @typedef {{ updatedChunkIds: ChunkIds, removedChunkIds: ChunkIds, removedModules: ModuleSet, filename: string, assetInfo: AssetInfo }} HotUpdateMainContentByRuntimeItem */
+/** @typedef {Map} HotUpdateMainContentByRuntime */
+
+/** @type {WeakMap} */
+const parserHooksMap = new WeakMap();
+
+const PLUGIN_NAME = "HotModuleReplacementPlugin";
+
+class HotModuleReplacementPlugin {
+	/**
+	 * @param {JavascriptParser} parser the parser
+	 * @returns {HMRJavascriptParserHooks} the attached hooks
+	 */
+	static getParserHooks(parser) {
+		if (!(parser instanceof JavascriptParser)) {
+			throw new TypeError(
+				"The 'parser' argument must be an instance of JavascriptParser"
+			);
+		}
+		let hooks = parserHooksMap.get(parser);
+		if (hooks === undefined) {
+			hooks = {
+				hotAcceptCallback: new SyncBailHook(["expression", "requests"]),
+				hotAcceptWithoutCallback: new SyncBailHook(["expression", "requests"])
+			};
+			parserHooksMap.set(parser, hooks);
+		}
+		return hooks;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		const multiStep = this.multiStep;
-		const fullBuildTimeout = this.fullBuildTimeout;
-		const requestTimeout = this.requestTimeout;
-		const hotUpdateChunkFilename =
-			compiler.options.output.hotUpdateChunkFilename;
-		const hotUpdateMainFilename = compiler.options.output.hotUpdateMainFilename;
-		compiler.hooks.additionalPass.tapAsync(
-			"HotModuleReplacementPlugin",
-			callback => {
-				if (multiStep) return setTimeout(callback, fullBuildTimeout);
-				return callback();
+		const { _backCompat: backCompat } = compiler;
+		if (compiler.options.output.strictModuleErrorHandling === undefined) {
+			compiler.options.output.strictModuleErrorHandling = true;
+		}
+		const runtimeRequirements = [RuntimeGlobals.module];
+
+		/**
+		 * @param {JavascriptParser} parser the parser
+		 * @param {typeof ModuleHotAcceptDependency} ParamDependency dependency
+		 * @returns {(expr: CallExpression) => boolean | undefined} callback
+		 */
+		const createAcceptHandler = (parser, ParamDependency) => {
+			const { hotAcceptCallback, hotAcceptWithoutCallback } =
+				HotModuleReplacementPlugin.getParserHooks(parser);
+
+			return (expr) => {
+				const module = parser.state.module;
+				const dep = new ConstDependency(
+					`${module.moduleArgument}.hot.accept`,
+					/** @type {Range} */ (expr.callee.range),
+					runtimeRequirements
+				);
+				dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+				module.addPresentationalDependency(dep);
+				/** @type {BuildInfo} */
+				(module.buildInfo).moduleConcatenationBailout =
+					"Hot Module Replacement";
+
+				if (expr.arguments.length >= 1) {
+					const arg = parser.evaluateExpression(expr.arguments[0]);
+					/** @type {BasicEvaluatedExpression[]} */
+					let params = [];
+					if (arg.isString()) {
+						params = [arg];
+					} else if (arg.isArray()) {
+						params =
+							/** @type {BasicEvaluatedExpression[]} */
+							(arg.items).filter((param) => param.isString());
+					}
+					/** @type {Requests} */
+					const requests = [];
+					if (params.length > 0) {
+						for (const [idx, param] of params.entries()) {
+							const request = /** @type {string} */ (param.string);
+							const dep = new ParamDependency(
+								request,
+								/** @type {Range} */ (param.range)
+							);
+							dep.optional = true;
+							dep.loc = Object.create(
+								/** @type {DependencyLocation} */ (expr.loc)
+							);
+							dep.loc.index = idx;
+							module.addDependency(dep);
+							requests.push(request);
+						}
+						if (expr.arguments.length > 1) {
+							hotAcceptCallback.call(expr.arguments[1], requests);
+							for (let i = 1; i < expr.arguments.length; i++) {
+								parser.walkExpression(expr.arguments[i]);
+							}
+							return true;
+						}
+						hotAcceptWithoutCallback.call(expr, requests);
+						return true;
+					}
+				}
+				parser.walkExpressions(expr.arguments);
+				return true;
+			};
+		};
+
+		/**
+		 * @param {JavascriptParser} parser the parser
+		 * @param {typeof ModuleHotDeclineDependency} ParamDependency dependency
+		 * @returns {(expr: CallExpression) => boolean | undefined} callback
+		 */
+		const createDeclineHandler = (parser, ParamDependency) => (expr) => {
+			const module = parser.state.module;
+			const dep = new ConstDependency(
+				`${module.moduleArgument}.hot.decline`,
+				/** @type {Range} */ (expr.callee.range),
+				runtimeRequirements
+			);
+			dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+			module.addPresentationalDependency(dep);
+			/** @type {BuildInfo} */
+			(module.buildInfo).moduleConcatenationBailout = "Hot Module Replacement";
+			if (expr.arguments.length === 1) {
+				const arg = parser.evaluateExpression(expr.arguments[0]);
+				/** @type {BasicEvaluatedExpression[]} */
+				let params = [];
+				if (arg.isString()) {
+					params = [arg];
+				} else if (arg.isArray()) {
+					params =
+						/** @type {BasicEvaluatedExpression[]} */
+						(arg.items).filter((param) => param.isString());
+				}
+				for (const [idx, param] of params.entries()) {
+					const dep = new ParamDependency(
+						/** @type {string} */ (param.string),
+						/** @type {Range} */ (param.range)
+					);
+					dep.optional = true;
+					dep.loc = Object.create(/** @type {DependencyLocation} */ (expr.loc));
+					dep.loc.index = idx;
+					module.addDependency(dep);
+				}
 			}
-		);
-		compiler.hooks.compilation.tap(
-			"HotModuleReplacementPlugin",
-			(compilation, { normalModuleFactory }) => {
-				const hotUpdateChunkTemplate = compilation.hotUpdateChunkTemplate;
-				if (!hotUpdateChunkTemplate) return;
+			return true;
+		};
 
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
-				compilation.dependencyTemplates.set(
-					ConstDependency,
-					new ConstDependency.Template()
+		/**
+		 * @param {JavascriptParser} parser the parser
+		 * @returns {(expr: Expression) => boolean | undefined} callback
+		 */
+		const createHMRExpressionHandler = (parser) => (expr) => {
+			const module = parser.state.module;
+			const dep = new ConstDependency(
+				`${module.moduleArgument}.hot`,
+				/** @type {Range} */ (expr.range),
+				runtimeRequirements
+			);
+			dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+			module.addPresentationalDependency(dep);
+			/** @type {BuildInfo} */
+			(module.buildInfo).moduleConcatenationBailout = "Hot Module Replacement";
+			return true;
+		};
+
+		/**
+		 * @param {JavascriptParser} parser the parser
+		 * @returns {void}
+		 */
+		const applyModuleHot = (parser) => {
+			parser.hooks.evaluateIdentifier.for("module.hot").tap(
+				{
+					name: PLUGIN_NAME,
+					before: "NodeStuffPlugin"
+				},
+				(expr) =>
+					evaluateToIdentifier(
+						"module.hot",
+						"module",
+						() => ["hot"],
+						true
+					)(expr)
+			);
+			parser.hooks.call
+				.for("module.hot.accept")
+				.tap(
+					PLUGIN_NAME,
+					createAcceptHandler(parser, ModuleHotAcceptDependency)
+				);
+			parser.hooks.call
+				.for("module.hot.decline")
+				.tap(
+					PLUGIN_NAME,
+					createDeclineHandler(parser, ModuleHotDeclineDependency)
+				);
+			parser.hooks.expression
+				.for("module.hot")
+				.tap(PLUGIN_NAME, createHMRExpressionHandler(parser));
+		};
+
+		/**
+		 * @param {JavascriptParser} parser the parser
+		 * @returns {void}
+		 */
+		const applyImportMetaHot = (parser) => {
+			parser.hooks.evaluateIdentifier
+				.for("import.meta.webpackHot")
+				.tap(PLUGIN_NAME, (expr) =>
+					evaluateToIdentifier(
+						"import.meta.webpackHot",
+						"import.meta",
+						() => ["webpackHot"],
+						true
+					)(expr)
+				);
+			parser.hooks.call
+				.for("import.meta.webpackHot.accept")
+				.tap(
+					PLUGIN_NAME,
+					createAcceptHandler(parser, ImportMetaHotAcceptDependency)
+				);
+			parser.hooks.call
+				.for("import.meta.webpackHot.decline")
+				.tap(
+					PLUGIN_NAME,
+					createDeclineHandler(parser, ImportMetaHotDeclineDependency)
 				);
+			parser.hooks.expression
+				.for("import.meta.webpackHot")
+				.tap(PLUGIN_NAME, createHMRExpressionHandler(parser));
+		};
 
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				// This applies the HMR plugin only to the targeted compiler
+				// It should not affect child compilations
+				if (compilation.compiler !== compiler) return;
+
+				// #region module.hot.* API
 				compilation.dependencyFactories.set(
 					ModuleHotAcceptDependency,
 					normalModuleFactory
@@ -55,7 +328,6 @@ module.exports = class HotModuleReplacementPlugin {
 					ModuleHotAcceptDependency,
 					new ModuleHotAcceptDependency.Template()
 				);
-
 				compilation.dependencyFactories.set(
 					ModuleHotDeclineDependency,
 					normalModuleFactory
@@ -64,350 +336,595 @@ module.exports = class HotModuleReplacementPlugin {
 					ModuleHotDeclineDependency,
 					new ModuleHotDeclineDependency.Template()
 				);
+				// #endregion
 
-				compilation.hooks.record.tap(
-					"HotModuleReplacementPlugin",
-					(compilation, records) => {
-						if (records.hash === compilation.hash) return;
-						records.hash = compilation.hash;
-						records.moduleHashs = {};
-						for (const module of compilation.modules) {
-							const identifier = module.identifier();
-							records.moduleHashs[identifier] = module.hash;
-						}
-						records.chunkHashs = {};
-						for (const chunk of compilation.chunks) {
-							records.chunkHashs[chunk.id] = chunk.hash;
-						}
-						records.chunkModuleIds = {};
-						for (const chunk of compilation.chunks) {
-							records.chunkModuleIds[chunk.id] = Array.from(
-								chunk.modulesIterable,
-								m => m.id
-							);
-						}
-					}
+				// #region import.meta.webpackHot.* API
+				compilation.dependencyFactories.set(
+					ImportMetaHotAcceptDependency,
+					normalModuleFactory
+				);
+				compilation.dependencyTemplates.set(
+					ImportMetaHotAcceptDependency,
+					new ImportMetaHotAcceptDependency.Template()
+				);
+				compilation.dependencyFactories.set(
+					ImportMetaHotDeclineDependency,
+					normalModuleFactory
+				);
+				compilation.dependencyTemplates.set(
+					ImportMetaHotDeclineDependency,
+					new ImportMetaHotDeclineDependency.Template()
 				);
-				let initialPass = false;
-				let recompilation = false;
-				compilation.hooks.afterHash.tap("HotModuleReplacementPlugin", () => {
-					let records = compilation.records;
-					if (!records) {
-						initialPass = true;
-						return;
+				// #endregion
+
+				/** @type {HotIndex} */
+				let hotIndex = 0;
+				/** @type {FullHashChunkModuleHashes} */
+				const fullHashChunkModuleHashes = {};
+				/** @type {ChunkModuleHashes} */
+				const chunkModuleHashes = {};
+
+				compilation.hooks.record.tap(PLUGIN_NAME, (compilation, records) => {
+					if (records.hash === compilation.hash) return;
+					const chunkGraph = compilation.chunkGraph;
+					records.hash = compilation.hash;
+					records.hotIndex = hotIndex;
+					records.fullHashChunkModuleHashes = fullHashChunkModuleHashes;
+					records.chunkModuleHashes = chunkModuleHashes;
+					records.chunkHashes = {};
+					records.chunkRuntime = {};
+					for (const chunk of compilation.chunks) {
+						const chunkId = /** @type {ChunkId} */ (chunk.id);
+						records.chunkHashes[chunkId] = /** @type {string} */ (chunk.hash);
+						records.chunkRuntime[chunkId] = getRuntimeKey(chunk.runtime);
 					}
-					if (!records.hash) initialPass = true;
-					const preHash = records.preHash || "x";
-					const prepreHash = records.prepreHash || "x";
-					if (preHash === compilation.hash) {
-						recompilation = true;
-						compilation.modifyHash(prepreHash);
-						return;
+					records.chunkModuleIds = {};
+					for (const chunk of compilation.chunks) {
+						const chunkId = /** @type {ChunkId} */ (chunk.id);
+
+						records.chunkModuleIds[chunkId] = Array.from(
+							chunkGraph.getOrderedChunkModulesIterable(
+								chunk,
+								compareModulesById(chunkGraph)
+							),
+							(m) => /** @type {ModuleId} */ (chunkGraph.getModuleId(m))
+						);
 					}
-					records.prepreHash = records.hash || "x";
-					records.preHash = compilation.hash;
-					compilation.modifyHash(records.prepreHash);
 				});
-				compilation.hooks.shouldGenerateChunkAssets.tap(
-					"HotModuleReplacementPlugin",
-					() => {
-						if (multiStep && !recompilation && !initialPass) return false;
-					}
-				);
-				compilation.hooks.needAdditionalPass.tap(
-					"HotModuleReplacementPlugin",
-					() => {
-						if (multiStep && !recompilation && !initialPass) return true;
+				/** @type {TupleSet} */
+				const updatedModules = new TupleSet();
+				/** @type {TupleSet} */
+				const fullHashModules = new TupleSet();
+				/** @type {TupleSet} */
+				const nonCodeGeneratedModules = new TupleSet();
+				compilation.hooks.fullHash.tap(PLUGIN_NAME, (hash) => {
+					const chunkGraph = compilation.chunkGraph;
+					const records = /** @type {Records} */ (compilation.records);
+					for (const chunk of compilation.chunks) {
+						/**
+						 * @param {Module} module module
+						 * @returns {string} module hash
+						 */
+						const getModuleHash = (module) => {
+							const codeGenerationResults =
+								/** @type {CodeGenerationResults} */
+								(compilation.codeGenerationResults);
+							if (codeGenerationResults.has(module, chunk.runtime)) {
+								return codeGenerationResults.getHash(module, chunk.runtime);
+							}
+							nonCodeGeneratedModules.add(module, chunk.runtime);
+							return chunkGraph.getModuleHash(module, chunk.runtime);
+						};
+						const fullHashModulesInThisChunk =
+							chunkGraph.getChunkFullHashModulesSet(chunk);
+						if (fullHashModulesInThisChunk !== undefined) {
+							for (const module of fullHashModulesInThisChunk) {
+								fullHashModules.add(module, chunk);
+							}
+						}
+						const modules = chunkGraph.getChunkModulesIterable(chunk);
+						if (modules !== undefined) {
+							if (records.chunkModuleHashes) {
+								if (fullHashModulesInThisChunk !== undefined) {
+									for (const module of modules) {
+										const key = `${chunk.id}|${module.identifier()}`;
+										const hash = getModuleHash(module);
+										if (
+											fullHashModulesInThisChunk.has(
+												/** @type {RuntimeModule} */
+												(module)
+											)
+										) {
+											if (
+												/** @type {FullHashChunkModuleHashes} */
+												(records.fullHashChunkModuleHashes)[key] !== hash
+											) {
+												updatedModules.add(module, chunk);
+											}
+											fullHashChunkModuleHashes[key] = hash;
+										} else {
+											if (records.chunkModuleHashes[key] !== hash) {
+												updatedModules.add(module, chunk);
+											}
+											chunkModuleHashes[key] = hash;
+										}
+									}
+								} else {
+									for (const module of modules) {
+										const key = `${chunk.id}|${module.identifier()}`;
+										const hash = getModuleHash(module);
+										if (records.chunkModuleHashes[key] !== hash) {
+											updatedModules.add(module, chunk);
+										}
+										chunkModuleHashes[key] = hash;
+									}
+								}
+							} else if (fullHashModulesInThisChunk !== undefined) {
+								for (const module of modules) {
+									const key = `${chunk.id}|${module.identifier()}`;
+									const hash = getModuleHash(module);
+									if (
+										fullHashModulesInThisChunk.has(
+											/** @type {RuntimeModule} */ (module)
+										)
+									) {
+										fullHashChunkModuleHashes[key] = hash;
+									} else {
+										chunkModuleHashes[key] = hash;
+									}
+								}
+							} else {
+								for (const module of modules) {
+									const key = `${chunk.id}|${module.identifier()}`;
+									const hash = getModuleHash(module);
+									chunkModuleHashes[key] = hash;
+								}
+							}
+						}
 					}
-				);
-				compilation.hooks.additionalChunkAssets.tap(
-					"HotModuleReplacementPlugin",
+
+					hotIndex = records.hotIndex || 0;
+					if (updatedModules.size > 0) hotIndex++;
+
+					hash.update(`${hotIndex}`);
+				});
+				compilation.hooks.processAssets.tap(
+					{
+						name: PLUGIN_NAME,
+						stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
+					},
 					() => {
-						const records = compilation.records;
+						const chunkGraph = compilation.chunkGraph;
+						const records = /** @type {Records} */ (compilation.records);
 						if (records.hash === compilation.hash) return;
 						if (
-							!records.moduleHashs ||
-							!records.chunkHashs ||
+							!records.chunkModuleHashes ||
+							!records.chunkHashes ||
 							!records.chunkModuleIds
-						)
+						) {
 							return;
+						}
+						const codeGenerationResults =
+							/** @type {CodeGenerationResults} */
+							(compilation.codeGenerationResults);
+						for (const [module, chunk] of fullHashModules) {
+							const key = `${chunk.id}|${module.identifier()}`;
+							const hash = nonCodeGeneratedModules.has(module, chunk.runtime)
+								? chunkGraph.getModuleHash(module, chunk.runtime)
+								: codeGenerationResults.getHash(module, chunk.runtime);
+							if (records.chunkModuleHashes[key] !== hash) {
+								updatedModules.add(module, chunk);
+							}
+							chunkModuleHashes[key] = hash;
+						}
+
+						/** @type {HotUpdateMainContentByRuntime} */
+						const hotUpdateMainContentByRuntime = new Map();
+						/** @type {RuntimeSpec} */
+						let allOldRuntime;
+						const chunkRuntime =
+							/** @type {ChunkRuntime} */
+							(records.chunkRuntime);
+						for (const key of Object.keys(chunkRuntime)) {
+							const runtime = keyToRuntime(chunkRuntime[key]);
+							allOldRuntime = mergeRuntimeOwned(allOldRuntime, runtime);
+						}
+						forEachRuntime(allOldRuntime, (runtime) => {
+							const { path: filename, info: assetInfo } =
+								compilation.getPathWithInfo(
+									compilation.outputOptions.hotUpdateMainFilename,
+									{
+										hash: records.hash,
+										runtime
+									}
+								);
+							hotUpdateMainContentByRuntime.set(
+								/** @type {string} */ (runtime),
+								{
+									/** @type {ChunkIds} */
+									updatedChunkIds: new Set(),
+									/** @type {ChunkIds} */
+									removedChunkIds: new Set(),
+									/** @type {ModuleSet} */
+									removedModules: new Set(),
+									filename,
+									assetInfo
+								}
+							);
+						});
+						if (hotUpdateMainContentByRuntime.size === 0) return;
+
+						// Create a list of all active modules to verify which modules are removed completely
+						/** @type {Map} */
+						const allModules = new Map();
 						for (const module of compilation.modules) {
-							const identifier = module.identifier();
-							let hash = module.hash;
-							module.hotUpdate = records.moduleHashs[identifier] !== hash;
+							const id =
+								/** @type {ModuleId} */
+								(chunkGraph.getModuleId(module));
+							allModules.set(id, module);
 						}
-						const hotUpdateMainContent = {
-							h: compilation.hash,
-							c: {}
-						};
-						for (const key of Object.keys(records.chunkHashs)) {
-							const chunkId = isNaN(+key) ? key : +key;
-							const currentChunk = compilation.chunks.find(
-								chunk => chunk.id === chunkId
+
+						// List of completely removed modules
+						/** @type {Set} */
+						const completelyRemovedModules = new Set();
+
+						for (const key of Object.keys(records.chunkHashes)) {
+							const oldRuntime = keyToRuntime(
+								/** @type {ChunkRuntime} */
+								(records.chunkRuntime)[key]
+							);
+							/** @type {Module[]} */
+							const remainingModules = [];
+							// Check which modules are removed
+							for (const id of records.chunkModuleIds[key]) {
+								const module = allModules.get(id);
+								if (module === undefined) {
+									completelyRemovedModules.add(id);
+								} else {
+									remainingModules.push(module);
+								}
+							}
+
+							/** @type {ChunkId | null} */
+							let chunkId;
+							/** @type {undefined | Module[]} */
+							let newModules;
+							/** @type {undefined | RuntimeModule[]} */
+							let newRuntimeModules;
+							/** @type {undefined | RuntimeModule[]} */
+							let newFullHashModules;
+							/** @type {undefined | RuntimeModule[]} */
+							let newDependentHashModules;
+							/** @type {RuntimeSpec} */
+							let newRuntime;
+							/** @type {RuntimeSpec} */
+							let removedFromRuntime;
+							const currentChunk = find(
+								compilation.chunks,
+								(chunk) => `${chunk.id}` === key
 							);
 							if (currentChunk) {
-								const newModules = currentChunk
-									.getModules()
-									.filter(module => module.hotUpdate);
-								const allModules = new Set();
-								for (const module of currentChunk.modulesIterable) {
-									allModules.add(module.id);
+								chunkId = currentChunk.id;
+								newRuntime = intersectRuntime(
+									currentChunk.runtime,
+									allOldRuntime
+								);
+								if (newRuntime === undefined) continue;
+								newModules = chunkGraph
+									.getChunkModules(currentChunk)
+									.filter((module) => updatedModules.has(module, currentChunk));
+								newRuntimeModules = [
+									...chunkGraph.getChunkRuntimeModulesIterable(currentChunk)
+								].filter((module) => updatedModules.has(module, currentChunk));
+								const fullHashModules =
+									chunkGraph.getChunkFullHashModulesIterable(currentChunk);
+								newFullHashModules =
+									fullHashModules &&
+									[...fullHashModules].filter((module) =>
+										updatedModules.has(module, currentChunk)
+									);
+								const dependentHashModules =
+									chunkGraph.getChunkDependentHashModulesIterable(currentChunk);
+								newDependentHashModules =
+									dependentHashModules &&
+									[...dependentHashModules].filter((module) =>
+										updatedModules.has(module, currentChunk)
+									);
+								removedFromRuntime = subtractRuntime(oldRuntime, newRuntime);
+							} else {
+								// chunk has completely removed
+								chunkId = `${Number(key)}` === key ? Number(key) : key;
+								removedFromRuntime = oldRuntime;
+								newRuntime = oldRuntime;
+							}
+							if (removedFromRuntime) {
+								// chunk was removed from some runtimes
+								forEachRuntime(removedFromRuntime, (runtime) => {
+									const item =
+										/** @type {HotUpdateMainContentByRuntimeItem} */
+										(
+											hotUpdateMainContentByRuntime.get(
+												/** @type {string} */ (runtime)
+											)
+										);
+									item.removedChunkIds.add(/** @type {ChunkId} */ (chunkId));
+								});
+								// dispose modules from the chunk in these runtimes
+								// where they are no longer in this runtime
+								for (const module of remainingModules) {
+									const moduleKey = `${key}|${module.identifier()}`;
+									const oldHash = records.chunkModuleHashes[moduleKey];
+									const runtimes = chunkGraph.getModuleRuntimes(module);
+									if (oldRuntime === newRuntime && runtimes.has(newRuntime)) {
+										// Module is still in the same runtime combination
+										const hash = nonCodeGeneratedModules.has(module, newRuntime)
+											? chunkGraph.getModuleHash(module, newRuntime)
+											: codeGenerationResults.getHash(module, newRuntime);
+										if (hash !== oldHash) {
+											if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) {
+												newRuntimeModules = newRuntimeModules || [];
+												newRuntimeModules.push(
+													/** @type {RuntimeModule} */ (module)
+												);
+											} else {
+												newModules = newModules || [];
+												newModules.push(module);
+											}
+										}
+									} else {
+										// module is no longer in this runtime combination
+										// We (incorrectly) assume that it's not in an overlapping runtime combination
+										// and dispose it from the main runtimes the chunk was removed from
+										forEachRuntime(removedFromRuntime, (runtime) => {
+											// If the module is still used in this runtime, do not dispose it
+											// This could create a bad runtime state where the module is still loaded,
+											// but no chunk which contains it. This means we don't receive further HMR updates
+											// to this module and that's bad.
+											// TODO force load one of the chunks which contains the module
+											for (const moduleRuntime of runtimes) {
+												if (typeof moduleRuntime === "string") {
+													if (moduleRuntime === runtime) return;
+												} else if (
+													moduleRuntime !== undefined &&
+													moduleRuntime.has(/** @type {string} */ (runtime))
+												) {
+													return;
+												}
+											}
+											const item =
+												/** @type {HotUpdateMainContentByRuntimeItem} */ (
+													hotUpdateMainContentByRuntime.get(
+														/** @type {string} */ (runtime)
+													)
+												);
+											item.removedModules.add(module);
+										});
+									}
 								}
-								const removedModules = records.chunkModuleIds[chunkId].filter(
-									id => !allModules.has(id)
+							}
+							if (
+								(newModules && newModules.length > 0) ||
+								(newRuntimeModules && newRuntimeModules.length > 0)
+							) {
+								const hotUpdateChunk = new HotUpdateChunk();
+								if (backCompat) {
+									ChunkGraph.setChunkGraphForChunk(hotUpdateChunk, chunkGraph);
+								}
+								hotUpdateChunk.id = chunkId;
+								hotUpdateChunk.runtime = currentChunk
+									? currentChunk.runtime
+									: newRuntime;
+								if (currentChunk) {
+									for (const group of currentChunk.groupsIterable) {
+										hotUpdateChunk.addGroup(group);
+									}
+								}
+								chunkGraph.attachModules(hotUpdateChunk, newModules || []);
+								chunkGraph.attachRuntimeModules(
+									hotUpdateChunk,
+									newRuntimeModules || []
 								);
-								if (newModules.length > 0 || removedModules.length > 0) {
-									const source = hotUpdateChunkTemplate.render(
-										chunkId,
-										newModules,
-										removedModules,
-										compilation.hash,
-										compilation.moduleTemplates.javascript,
-										compilation.dependencyTemplates
+								if (newFullHashModules) {
+									chunkGraph.attachFullHashModules(
+										hotUpdateChunk,
+										newFullHashModules
 									);
-									const filename = compilation.getPath(hotUpdateChunkFilename, {
-										hash: records.hash,
-										chunk: currentChunk
-									});
-									compilation.additionalChunkAssets.push(filename);
-									compilation.assets[filename] = source;
-									hotUpdateMainContent.c[chunkId] = true;
-									currentChunk.files.push(filename);
-									compilation.hooks.chunkAsset.call(
-										"HotModuleReplacementPlugin",
-										currentChunk,
-										filename
+								}
+								if (newDependentHashModules) {
+									chunkGraph.attachDependentHashModules(
+										hotUpdateChunk,
+										newDependentHashModules
 									);
 								}
-							} else {
-								hotUpdateMainContent.c[chunkId] = false;
+								const renderManifest = compilation.getRenderManifest({
+									chunk: hotUpdateChunk,
+									hash: /** @type {string} */ (records.hash),
+									fullHash: /** @type {string} */ (records.hash),
+									outputOptions: compilation.outputOptions,
+									moduleTemplates: compilation.moduleTemplates,
+									dependencyTemplates: compilation.dependencyTemplates,
+									codeGenerationResults: /** @type {CodeGenerationResults} */ (
+										compilation.codeGenerationResults
+									),
+									runtimeTemplate: compilation.runtimeTemplate,
+									moduleGraph: compilation.moduleGraph,
+									chunkGraph
+								});
+								for (const entry of renderManifest) {
+									/** @type {string} */
+									let filename;
+									/** @type {AssetInfo} */
+									let assetInfo;
+									if ("filename" in entry) {
+										filename = entry.filename;
+										assetInfo = entry.info;
+									} else {
+										({ path: filename, info: assetInfo } =
+											compilation.getPathWithInfo(
+												entry.filenameTemplate,
+												entry.pathOptions
+											));
+									}
+									const source = entry.render();
+									compilation.additionalChunkAssets.push(filename);
+									compilation.emitAsset(filename, source, {
+										hotModuleReplacement: true,
+										...assetInfo
+									});
+									if (currentChunk) {
+										currentChunk.files.add(filename);
+										compilation.hooks.chunkAsset.call(currentChunk, filename);
+									}
+								}
+								forEachRuntime(newRuntime, (runtime) => {
+									const item =
+										/** @type {HotUpdateMainContentByRuntimeItem} */ (
+											hotUpdateMainContentByRuntime.get(
+												/** @type {string} */ (runtime)
+											)
+										);
+									item.updatedChunkIds.add(/** @type {ChunkId} */ (chunkId));
+								});
 							}
 						}
-						const source = new RawSource(JSON.stringify(hotUpdateMainContent));
-						const filename = compilation.getPath(hotUpdateMainFilename, {
-							hash: records.hash
-						});
-						compilation.assets[filename] = source;
-					}
-				);
-
-				const mainTemplate = compilation.mainTemplate;
-
-				mainTemplate.hooks.hash.tap("HotModuleReplacementPlugin", hash => {
-					hash.update("HotMainTemplateDecorator");
-				});
-
-				mainTemplate.hooks.moduleRequire.tap(
-					"HotModuleReplacementPlugin",
-					(_, chunk, hash, varModuleId) => {
-						return `hotCreateRequire(${varModuleId})`;
-					}
-				);
-
-				mainTemplate.hooks.requireExtensions.tap(
-					"HotModuleReplacementPlugin",
-					source => {
-						const buf = [source];
-						buf.push("");
-						buf.push("// __webpack_hash__");
-						buf.push(
-							mainTemplate.requireFn +
-								".h = function() { return hotCurrentHash; };"
-						);
-						return Template.asString(buf);
-					}
-				);
+						const completelyRemovedModulesArray = [...completelyRemovedModules];
+						/** @type {Map>} */
+						const hotUpdateMainContentByFilename = new Map();
+						for (const {
+							removedChunkIds,
+							removedModules,
+							updatedChunkIds,
+							filename,
+							assetInfo
+						} of hotUpdateMainContentByRuntime.values()) {
+							const old = hotUpdateMainContentByFilename.get(filename);
+							if (
+								old &&
+								(!isSubset(old.removedChunkIds, removedChunkIds) ||
+									!isSubset(old.removedModules, removedModules) ||
+									!isSubset(old.updatedChunkIds, updatedChunkIds))
+							) {
+								compilation.warnings.push(
+									new WebpackError(`HotModuleReplacementPlugin
+The configured output.hotUpdateMainFilename doesn't lead to unique filenames per runtime and HMR update differs between runtimes.
+This might lead to incorrect runtime behavior of the applied update.
+To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename option, or use the default config.`)
+								);
+								for (const chunkId of removedChunkIds) {
+									old.removedChunkIds.add(chunkId);
+								}
+								for (const chunkId of removedModules) {
+									old.removedModules.add(chunkId);
+								}
+								for (const chunkId of updatedChunkIds) {
+									old.updatedChunkIds.add(chunkId);
+								}
+								continue;
+							}
+							hotUpdateMainContentByFilename.set(filename, {
+								removedChunkIds,
+								removedModules,
+								updatedChunkIds,
+								assetInfo
+							});
+						}
+						for (const [
+							filename,
+							{ removedChunkIds, removedModules, updatedChunkIds, assetInfo }
+						] of hotUpdateMainContentByFilename) {
+							/** @type {{ c: ChunkId[], r: ChunkId[], m: ModuleId[], css?: { r: ChunkId[] } }} */
+							const hotUpdateMainJson = {
+								c: [...updatedChunkIds],
+								r: [...removedChunkIds],
+								m:
+									removedModules.size === 0
+										? completelyRemovedModulesArray
+										: [
+												...completelyRemovedModulesArray,
+												...Array.from(
+													removedModules,
+													(m) =>
+														/** @type {ModuleId} */ (chunkGraph.getModuleId(m))
+												)
+											]
+							};
 
-				const needChunkLoadingCode = chunk => {
-					for (const chunkGroup of chunk.groupsIterable) {
-						if (chunkGroup.chunks.length > 1) return true;
-						if (chunkGroup.getNumberOfChildren() > 0) return true;
-					}
-					return false;
-				};
-
-				mainTemplate.hooks.bootstrap.tap(
-					"HotModuleReplacementPlugin",
-					(source, chunk, hash) => {
-						source = mainTemplate.hooks.hotBootstrap.call(source, chunk, hash);
-						return Template.asString([
-							source,
-							"",
-							hotInitCode
-								.replace(/\$require\$/g, mainTemplate.requireFn)
-								.replace(/\$hash\$/g, JSON.stringify(hash))
-								.replace(/\$requestTimeout\$/g, requestTimeout)
-								.replace(
-									/\/\*foreachInstalledChunks\*\//g,
-									needChunkLoadingCode(chunk)
-										? "for(var chunkId in installedChunks)"
-										: `var chunkId = ${JSON.stringify(chunk.id)};`
-								)
-						]);
-					}
-				);
+							// Build CSS removed chunks list (chunks in updatedChunkIds that no longer have CSS)
+							/** @type {ChunkId[]} */
+							const cssRemovedChunkIds = [];
+							if (compilation.options.experiments.css) {
+								for (const chunkId of updatedChunkIds) {
+									for (const /** @type {Chunk} */ chunk of compilation.chunks) {
+										if (chunk.id === chunkId) {
+											if (!chunkHasCss(chunk, chunkGraph)) {
+												cssRemovedChunkIds.push(chunkId);
+											}
+											break;
+										}
+									}
+								}
+							}
 
-				mainTemplate.hooks.globalHash.tap(
-					"HotModuleReplacementPlugin",
-					() => true
-				);
+							if (cssRemovedChunkIds.length > 0) {
+								hotUpdateMainJson.css = { r: cssRemovedChunkIds };
+							}
 
-				mainTemplate.hooks.currentHash.tap(
-					"HotModuleReplacementPlugin",
-					(_, length) => {
-						if (isFinite(length)) {
-							return `hotCurrentHash.substr(0, ${length})`;
-						} else {
-							return "hotCurrentHash";
+							const source = new RawSource(
+								(filename.endsWith(".json") ? "" : "export default ") +
+									JSON.stringify(hotUpdateMainJson)
+							);
+							compilation.emitAsset(filename, source, {
+								hotModuleReplacement: true,
+								...assetInfo
+							});
 						}
 					}
 				);
 
-				mainTemplate.hooks.moduleObj.tap(
-					"HotModuleReplacementPlugin",
-					(source, chunk, hash, varModuleId) => {
-						return Template.asString([
-							`${source},`,
-							`hot: hotCreateModule(${varModuleId}),`,
-							"parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),",
-							"children: []"
-						]);
-					}
-				);
-
-				const handler = (parser, parserOptions) => {
-					parser.hooks.expression
-						.for("__webpack_hash__")
-						.tap(
-							"HotModuleReplacementPlugin",
-							ParserHelpers.toConstantDependencyWithWebpackRequire(
-								parser,
-								"__webpack_require__.h()"
-							)
-						);
-					parser.hooks.evaluateTypeof
-						.for("__webpack_hash__")
-						.tap(
-							"HotModuleReplacementPlugin",
-							ParserHelpers.evaluateToString("string")
+				compilation.hooks.additionalTreeRuntimeRequirements.tap(
+					PLUGIN_NAME,
+					(chunk, runtimeRequirements) => {
+						runtimeRequirements.add(RuntimeGlobals.hmrDownloadManifest);
+						runtimeRequirements.add(RuntimeGlobals.hmrDownloadUpdateHandlers);
+						runtimeRequirements.add(RuntimeGlobals.interceptModuleExecution);
+						runtimeRequirements.add(RuntimeGlobals.moduleCache);
+						compilation.addRuntimeModule(
+							chunk,
+							new HotModuleReplacementRuntimeModule()
 						);
-					parser.hooks.evaluateIdentifier.for("module.hot").tap(
-						{
-							name: "HotModuleReplacementPlugin",
-							before: "NodeStuffPlugin"
-						},
-						expr => {
-							return ParserHelpers.evaluateToIdentifier(
-								"module.hot",
-								!!parser.state.compilation.hotUpdateChunkTemplate
-							)(expr);
-						}
-					);
-					// TODO webpack 5: refactor this, no custom hooks
-					if (!parser.hooks.hotAcceptCallback) {
-						parser.hooks.hotAcceptCallback = new SyncBailHook([
-							"expression",
-							"requests"
-						]);
-					}
-					if (!parser.hooks.hotAcceptWithoutCallback) {
-						parser.hooks.hotAcceptWithoutCallback = new SyncBailHook([
-							"expression",
-							"requests"
-						]);
 					}
-					parser.hooks.call
-						.for("module.hot.accept")
-						.tap("HotModuleReplacementPlugin", expr => {
-							if (!parser.state.compilation.hotUpdateChunkTemplate) {
-								return false;
-							}
-							if (expr.arguments.length >= 1) {
-								const arg = parser.evaluateExpression(expr.arguments[0]);
-								let params = [];
-								let requests = [];
-								if (arg.isString()) {
-									params = [arg];
-								} else if (arg.isArray()) {
-									params = arg.items.filter(param => param.isString());
-								}
-								if (params.length > 0) {
-									params.forEach((param, idx) => {
-										const request = param.string;
-										const dep = new ModuleHotAcceptDependency(
-											request,
-											param.range
-										);
-										dep.optional = true;
-										dep.loc = Object.create(expr.loc);
-										dep.loc.index = idx;
-										parser.state.module.addDependency(dep);
-										requests.push(request);
-									});
-									if (expr.arguments.length > 1) {
-										parser.hooks.hotAcceptCallback.call(
-											expr.arguments[1],
-											requests
-										);
-										parser.walkExpression(expr.arguments[1]); // other args are ignored
-										return true;
-									} else {
-										parser.hooks.hotAcceptWithoutCallback.call(expr, requests);
-										return true;
-									}
-								}
-							}
-						});
-					parser.hooks.call
-						.for("module.hot.decline")
-						.tap("HotModuleReplacementPlugin", expr => {
-							if (!parser.state.compilation.hotUpdateChunkTemplate) {
-								return false;
-							}
-							if (expr.arguments.length === 1) {
-								const arg = parser.evaluateExpression(expr.arguments[0]);
-								let params = [];
-								if (arg.isString()) {
-									params = [arg];
-								} else if (arg.isArray()) {
-									params = arg.items.filter(param => param.isString());
-								}
-								params.forEach((param, idx) => {
-									const dep = new ModuleHotDeclineDependency(
-										param.string,
-										param.range
-									);
-									dep.optional = true;
-									dep.loc = Object.create(expr.loc);
-									dep.loc.index = idx;
-									parser.state.module.addDependency(dep);
-								});
-							}
-						});
-					parser.hooks.expression
-						.for("module.hot")
-						.tap("HotModuleReplacementPlugin", ParserHelpers.skipTraversal);
-				};
+				);
 
-				// TODO add HMR support for javascript/esm
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("HotModuleReplacementPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, (parser) => {
+						applyModuleHot(parser);
+						applyImportMetaHot(parser);
+					});
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("HotModuleReplacementPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, (parser) => {
+						applyModuleHot(parser);
+					});
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, (parser) => {
+						applyImportMetaHot(parser);
+					});
+				normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module) => {
+					module.hot = true;
+					return module;
+				});
 
-				compilation.hooks.normalModuleLoader.tap(
-					"HotModuleReplacementPlugin",
-					context => {
+				NormalModule.getCompilationHooks(compilation).loader.tap(
+					PLUGIN_NAME,
+					(context) => {
 						context.hot = true;
 					}
 				);
 			}
 		);
 	}
-};
+}
 
-const hotInitCode = Template.getFunctionContent(
-	require("./HotModuleReplacement.runtime.js")
-);
+module.exports = HotModuleReplacementPlugin;
diff --git a/lib/HotUpdateChunk.js b/lib/HotUpdateChunk.js
index 17eaf128178..73b3925b074 100644
--- a/lib/HotUpdateChunk.js
+++ b/lib/HotUpdateChunk.js
@@ -2,6 +2,7 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const Chunk = require("./Chunk");
@@ -9,7 +10,6 @@ const Chunk = require("./Chunk");
 class HotUpdateChunk extends Chunk {
 	constructor() {
 		super();
-		this.removedModules = undefined;
 	}
 }
 
diff --git a/lib/HotUpdateChunkTemplate.js b/lib/HotUpdateChunkTemplate.js
deleted file mode 100644
index 92ab8db08c9..00000000000
--- a/lib/HotUpdateChunkTemplate.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const Template = require("./Template");
-const HotUpdateChunk = require("./HotUpdateChunk");
-const { Tapable, SyncWaterfallHook, SyncHook } = require("tapable");
-
-module.exports = class HotUpdateChunkTemplate extends Tapable {
-	constructor(outputOptions) {
-		super();
-		this.outputOptions = outputOptions || {};
-		this.hooks = {
-			modules: new SyncWaterfallHook([
-				"source",
-				"modules",
-				"removedModules",
-				"moduleTemplate",
-				"dependencyTemplates"
-			]),
-			render: new SyncWaterfallHook([
-				"source",
-				"modules",
-				"removedModules",
-				"hash",
-				"id",
-				"moduleTemplate",
-				"dependencyTemplates"
-			]),
-			hash: new SyncHook(["hash"])
-		};
-	}
-
-	render(
-		id,
-		modules,
-		removedModules,
-		hash,
-		moduleTemplate,
-		dependencyTemplates
-	) {
-		const hotUpdateChunk = new HotUpdateChunk();
-		hotUpdateChunk.id = id;
-		hotUpdateChunk.setModules(modules);
-		hotUpdateChunk.removedModules = removedModules;
-		const modulesSource = Template.renderChunkModules(
-			hotUpdateChunk,
-			m => typeof m.source === "function",
-			moduleTemplate,
-			dependencyTemplates
-		);
-		const core = this.hooks.modules.call(
-			modulesSource,
-			modules,
-			removedModules,
-			moduleTemplate,
-			dependencyTemplates
-		);
-		const source = this.hooks.render.call(
-			core,
-			modules,
-			removedModules,
-			hash,
-			id,
-			moduleTemplate,
-			dependencyTemplates
-		);
-		return source;
-	}
-
-	updateHash(hash) {
-		hash.update("HotUpdateChunkTemplate");
-		hash.update("1");
-		this.hooks.hash.call(hash);
-	}
-};
diff --git a/lib/IgnoreErrorModuleFactory.js b/lib/IgnoreErrorModuleFactory.js
new file mode 100644
index 00000000000..423277935c3
--- /dev/null
+++ b/lib/IgnoreErrorModuleFactory.js
@@ -0,0 +1,39 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+const ModuleFactory = require("./ModuleFactory");
+
+/** @typedef {import("./ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
+
+/**
+ * Ignores error when module is unresolved
+ */
+class IgnoreErrorModuleFactory extends ModuleFactory {
+	/**
+	 * @param {NormalModuleFactory} normalModuleFactory normalModuleFactory instance
+	 */
+	constructor(normalModuleFactory) {
+		super();
+
+		this.normalModuleFactory = normalModuleFactory;
+	}
+
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
+	create(data, callback) {
+		this.normalModuleFactory.create(data, (err, result) =>
+			callback(null, result)
+		);
+	}
+}
+
+module.exports = IgnoreErrorModuleFactory;
diff --git a/lib/IgnorePlugin.js b/lib/IgnorePlugin.js
index 5cc6c62f80f..7c5be534bb2 100644
--- a/lib/IgnorePlugin.js
+++ b/lib/IgnorePlugin.js
@@ -2,68 +2,103 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-class IgnorePlugin {
-	constructor(resourceRegExp, contextRegExp) {
-		this.resourceRegExp = resourceRegExp;
-		this.contextRegExp = contextRegExp;
+const RawModule = require("./RawModule");
+const EntryDependency = require("./dependencies/EntryDependency");
+
+/** @typedef {import("../declarations/plugins/IgnorePlugin").IgnorePluginOptions} IgnorePluginOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
+/** @typedef {import("./ContextModuleFactory").BeforeContextResolveData} BeforeContextResolveData */
+
+/** @typedef {(resource: string, context: string) => boolean} CheckResourceFn */
+
+const PLUGIN_NAME = "IgnorePlugin";
 
+class IgnorePlugin {
+	/**
+	 * @param {IgnorePluginOptions} options IgnorePlugin options
+	 */
+	constructor(options) {
+		this.options = options;
 		this.checkIgnore = this.checkIgnore.bind(this);
 	}
 
-	/*
-	 * Only returns true if a "resourceRegExp" exists
-	 * and the resource given matches the regexp.
+	/**
+	 * Note that if "contextRegExp" is given, both the "resourceRegExp" and "contextRegExp" have to match.
+	 * @param {ResolveData | BeforeContextResolveData} resolveData resolve data
+	 * @returns {false | undefined} returns false when the request should be ignored, otherwise undefined
 	 */
-	checkResource(resource) {
-		if (!this.resourceRegExp) {
+	checkIgnore(resolveData) {
+		if (
+			"checkResource" in this.options &&
+			this.options.checkResource &&
+			this.options.checkResource(resolveData.request, resolveData.context)
+		) {
 			return false;
 		}
-		return this.resourceRegExp.test(resource);
-	}
 
-	/*
-	 * Returns true if contextRegExp does not exist
-	 * or if context matches the given regexp.
-	 */
-	checkContext(context) {
-		if (!this.contextRegExp) {
-			return true;
+		if (
+			"resourceRegExp" in this.options &&
+			this.options.resourceRegExp &&
+			this.options.resourceRegExp.test(resolveData.request)
+		) {
+			if ("contextRegExp" in this.options && this.options.contextRegExp) {
+				// if "contextRegExp" is given,
+				// both the "resourceRegExp" and "contextRegExp" have to match.
+				if (this.options.contextRegExp.test(resolveData.context)) {
+					return false;
+				}
+			} else {
+				return false;
+			}
 		}
-		return this.contextRegExp.test(context);
 	}
 
-	/*
-	 * Returns true if result should be ignored.
-	 * false if it shouldn't.
-	 *
-	 * Not that if "contextRegExp" is given, both the "resourceRegExp"
-	 * and "contextRegExp" have to match.
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
 	 */
-	checkResult(result) {
-		if (!result) {
-			return true;
-		}
-		return (
-			this.checkResource(result.request) && this.checkContext(result.context)
-		);
-	}
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				require("../schemas/plugins/IgnorePlugin.json"),
+				this.options,
+				{
+					name: "Ignore Plugin",
+					baseDataPath: "options"
+				},
+				(options) => require("../schemas/plugins/IgnorePlugin.check")(options)
+			);
+		});
 
-	checkIgnore(result) {
-		// check if result is ignored
-		if (this.checkResult(result)) {
-			return null;
-		}
-		return result;
-	}
+		compiler.hooks.normalModuleFactory.tap(PLUGIN_NAME, (nmf) => {
+			nmf.hooks.beforeResolve.tap(PLUGIN_NAME, (resolveData) => {
+				const result = this.checkIgnore(resolveData);
 
-	apply(compiler) {
-		compiler.hooks.normalModuleFactory.tap("IgnorePlugin", nmf => {
-			nmf.hooks.beforeResolve.tap("IgnorePlugin", this.checkIgnore);
+				if (
+					result === false &&
+					resolveData.dependencies.length > 0 &&
+					resolveData.dependencies[0] instanceof EntryDependency
+				) {
+					const module = new RawModule(
+						"",
+						"ignored-entry-module",
+						"(ignored-entry-module)"
+					);
+					module.factoryMeta = { sideEffectFree: true };
+
+					resolveData.ignoredModule = module;
+				}
+
+				return result;
+			});
 		});
-		compiler.hooks.contextModuleFactory.tap("IgnorePlugin", cmf => {
-			cmf.hooks.beforeResolve.tap("IgnorePlugin", this.checkIgnore);
+		compiler.hooks.contextModuleFactory.tap(PLUGIN_NAME, (cmf) => {
+			cmf.hooks.beforeResolve.tap(PLUGIN_NAME, this.checkIgnore);
 		});
 	}
 }
diff --git a/lib/IgnoreWarningsPlugin.js b/lib/IgnoreWarningsPlugin.js
new file mode 100644
index 00000000000..276113e6955
--- /dev/null
+++ b/lib/IgnoreWarningsPlugin.js
@@ -0,0 +1,41 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Compilation")} Compilation */
+
+/** @typedef {(warning: Error, compilation: Compilation) => boolean} IgnoreFn */
+
+const PLUGIN_NAME = "IgnoreWarningsPlugin";
+
+class IgnoreWarningsPlugin {
+	/**
+	 * @param {IgnoreFn[]} ignoreWarnings conditions to ignore warnings
+	 */
+	constructor(ignoreWarnings) {
+		/** @type {IgnoreFn[]} */
+		this._ignoreWarnings = ignoreWarnings;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.hooks.processWarnings.tap(PLUGIN_NAME, (warnings) =>
+				warnings.filter(
+					(warning) =>
+						!this._ignoreWarnings.some((ignore) => ignore(warning, compilation))
+				)
+			);
+		});
+	}
+}
+
+module.exports = IgnoreWarningsPlugin;
diff --git a/lib/InitFragment.js b/lib/InitFragment.js
new file mode 100644
index 00000000000..44cdc3e3a30
--- /dev/null
+++ b/lib/InitFragment.js
@@ -0,0 +1,204 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Florent Cailhol @ooflorent
+*/
+
+"use strict";
+
+const { ConcatSource } = require("webpack-sources");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./Generator").GenerateContext} GenerateContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
+/** @typedef {string} InitFragmentKey */
+
+/**
+ * @template GenerateContext
+ * @typedef {object} MaybeMergeableInitFragment
+ * @property {InitFragmentKey=} key
+ * @property {number} stage
+ * @property {number} position
+ * @property {(context: GenerateContext) => string | Source | undefined} getContent
+ * @property {(context: GenerateContext) => string | Source | undefined} getEndContent
+ * @property {(fragments: MaybeMergeableInitFragment) => MaybeMergeableInitFragment=} merge
+ * @property {(fragments: MaybeMergeableInitFragment[]) => MaybeMergeableInitFragment[]=} mergeAll
+ */
+
+/**
+ * @template T
+ * @param {T} fragment the init fragment
+ * @param {number} index index
+ * @returns {[T, number]} tuple with both
+ */
+const extractFragmentIndex = (fragment, index) => [fragment, index];
+
+/**
+ * @template T
+ * @param {[MaybeMergeableInitFragment, number]} a first pair
+ * @param {[MaybeMergeableInitFragment, number]} b second pair
+ * @returns {number} sort value
+ */
+const sortFragmentWithIndex = ([a, i], [b, j]) => {
+	const stageCmp = a.stage - b.stage;
+	if (stageCmp !== 0) return stageCmp;
+	const positionCmp = a.position - b.position;
+	if (positionCmp !== 0) return positionCmp;
+	return i - j;
+};
+
+/**
+ * @template GenerateContext
+ * @implements {MaybeMergeableInitFragment}
+ */
+class InitFragment {
+	/**
+	 * @param {string | Source | undefined} content the source code that will be included as initialization code
+	 * @param {number} stage category of initialization code (contribute to order)
+	 * @param {number} position position in the category (contribute to order)
+	 * @param {InitFragmentKey=} key unique key to avoid emitting the same initialization code twice
+	 * @param {string | Source=} endContent the source code that will be included at the end of the module
+	 */
+	constructor(content, stage, position, key, endContent) {
+		this.content = content;
+		this.stage = stage;
+		this.position = position;
+		this.key = key;
+		this.endContent = endContent;
+	}
+
+	/**
+	 * @param {GenerateContext} context context
+	 * @returns {string | Source | undefined} the source code that will be included as initialization code
+	 */
+	getContent(context) {
+		return this.content;
+	}
+
+	/**
+	 * @param {GenerateContext} context context
+	 * @returns {string | Source | undefined} the source code that will be included at the end of the module
+	 */
+	getEndContent(context) {
+		return this.endContent;
+	}
+
+	/**
+	 * @template Context
+	 * @param {Source} source sources
+	 * @param {MaybeMergeableInitFragment[]} initFragments init fragments
+	 * @param {Context} context context
+	 * @returns {Source} source
+	 */
+	static addToSource(source, initFragments, context) {
+		if (initFragments.length > 0) {
+			// Sort fragments by position. If 2 fragments have the same position,
+			// use their index.
+			const sortedFragments = initFragments
+				.map(extractFragmentIndex)
+				.sort(sortFragmentWithIndex);
+
+			// Deduplicate fragments. If a fragment has no key, it is always included.
+			/** @type {Map | MaybeMergeableInitFragment[]>} */
+			const keyedFragments = new Map();
+			for (const [fragment] of sortedFragments) {
+				if (typeof fragment.mergeAll === "function") {
+					if (!fragment.key) {
+						throw new Error(
+							`InitFragment with mergeAll function must have a valid key: ${fragment.constructor.name}`
+						);
+					}
+					const oldValue = keyedFragments.get(fragment.key);
+					if (oldValue === undefined) {
+						keyedFragments.set(fragment.key, fragment);
+					} else if (Array.isArray(oldValue)) {
+						oldValue.push(fragment);
+					} else {
+						keyedFragments.set(fragment.key, [oldValue, fragment]);
+					}
+					continue;
+				} else if (typeof fragment.merge === "function") {
+					const key = /** @type {InitFragmentKey} */ (fragment.key);
+					const oldValue =
+						/** @type {MaybeMergeableInitFragment} */
+						(keyedFragments.get(key));
+					if (oldValue !== undefined) {
+						keyedFragments.set(key, fragment.merge(oldValue));
+						continue;
+					}
+				}
+				keyedFragments.set(fragment.key || Symbol("fragment key"), fragment);
+			}
+
+			const concatSource = new ConcatSource();
+			/** @type {(string | Source)[]} */
+			const endContents = [];
+			for (let fragment of keyedFragments.values()) {
+				if (Array.isArray(fragment)) {
+					fragment =
+						/** @type {[MaybeMergeableInitFragment & { mergeAll: (fragments: MaybeMergeableInitFragment[]) => MaybeMergeableInitFragment[] }, ...MaybeMergeableInitFragment[]]} */
+						(fragment)[0].mergeAll(fragment);
+				}
+				const content =
+					/** @type {MaybeMergeableInitFragment} */
+					(fragment).getContent(context);
+				if (content) {
+					concatSource.add(content);
+				}
+				const endContent =
+					/** @type {MaybeMergeableInitFragment} */
+					(fragment).getEndContent(context);
+				if (endContent) {
+					endContents.push(endContent);
+				}
+			}
+
+			concatSource.add(source);
+			for (const content of endContents.reverse()) {
+				concatSource.add(content);
+			}
+			return concatSource;
+		}
+		return source;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.content);
+		write(this.stage);
+		write(this.position);
+		write(this.key);
+		write(this.endContent);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.content = read();
+		this.stage = read();
+		this.position = read();
+		this.key = read();
+		this.endContent = read();
+	}
+}
+
+makeSerializable(InitFragment, "webpack/lib/InitFragment");
+
+InitFragment.STAGE_CONSTANTS = 10;
+InitFragment.STAGE_ASYNC_BOUNDARY = 20;
+InitFragment.STAGE_HARMONY_EXPORTS = 30;
+InitFragment.STAGE_HARMONY_IMPORTS = 40;
+InitFragment.STAGE_PROVIDES = 50;
+InitFragment.STAGE_ASYNC_DEPENDENCIES = 60;
+InitFragment.STAGE_ASYNC_HARMONY_IMPORTS = 70;
+
+module.exports = InitFragment;
diff --git a/lib/InvalidDependenciesModuleWarning.js b/lib/InvalidDependenciesModuleWarning.js
new file mode 100644
index 00000000000..73e6a7c617b
--- /dev/null
+++ b/lib/InvalidDependenciesModuleWarning.js
@@ -0,0 +1,44 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Module")} Module */
+
+class InvalidDependenciesModuleWarning extends WebpackError {
+	/**
+	 * @param {Module} module module tied to dependency
+	 * @param {Iterable} deps invalid dependencies
+	 */
+	constructor(module, deps) {
+		const orderedDeps = deps ? [...deps].sort() : [];
+		const depsList = orderedDeps.map((dep) => ` * ${JSON.stringify(dep)}`);
+		super(`Invalid dependencies have been reported by plugins or loaders for this module. All reported dependencies need to be absolute paths.
+Invalid dependencies may lead to broken watching and caching.
+As best effort we try to convert all invalid values to absolute paths and converting globs into context dependencies, but this is deprecated behavior.
+Loaders: Pass absolute paths to this.addDependency (existing files), this.addMissingDependency (not existing files), and this.addContextDependency (directories).
+Plugins: Pass absolute paths to fileDependencies (existing files), missingDependencies (not existing files), and contextDependencies (directories).
+Globs: They are not supported. Pass absolute path to the directory as context dependencies.
+The following invalid values have been reported:
+${depsList.slice(0, 3).join("\n")}${
+			depsList.length > 3 ? "\n * and more ..." : ""
+		}`);
+
+		/** @type {string} */
+		this.name = "InvalidDependenciesModuleWarning";
+		this.details = depsList.slice(3).join("\n");
+		this.module = module;
+	}
+}
+
+makeSerializable(
+	InvalidDependenciesModuleWarning,
+	"webpack/lib/InvalidDependenciesModuleWarning"
+);
+
+module.exports = InvalidDependenciesModuleWarning;
diff --git a/lib/JavascriptGenerator.js b/lib/JavascriptGenerator.js
deleted file mode 100644
index 882f7d4d4a6..00000000000
--- a/lib/JavascriptGenerator.js
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { RawSource, ReplaceSource } = require("webpack-sources");
-
-// TODO: clean up this file
-// replace with newer constructs
-
-// TODO: remove DependencyVariables and replace them with something better
-
-class JavascriptGenerator {
-	generate(module, dependencyTemplates, runtimeTemplate) {
-		const originalSource = module.originalSource();
-		if (!originalSource) {
-			return new RawSource("throw new Error('No source available');");
-		}
-
-		const source = new ReplaceSource(originalSource);
-
-		this.sourceBlock(
-			module,
-			module,
-			[],
-			dependencyTemplates,
-			source,
-			runtimeTemplate
-		);
-
-		return source;
-	}
-
-	sourceBlock(
-		module,
-		block,
-		availableVars,
-		dependencyTemplates,
-		source,
-		runtimeTemplate
-	) {
-		for (const dependency of block.dependencies) {
-			this.sourceDependency(
-				dependency,
-				dependencyTemplates,
-				source,
-				runtimeTemplate
-			);
-		}
-
-		/**
-		 * Get the variables of all blocks that we need to inject.
-		 * These will contain the variable name and its expression.
-		 * The name will be added as a parameter in a IIFE the expression as its value.
-		 */
-		const vars = block.variables.reduce((result, value) => {
-			const variable = this.sourceVariables(
-				value,
-				availableVars,
-				dependencyTemplates,
-				runtimeTemplate
-			);
-
-			if (variable) {
-				result.push(variable);
-			}
-
-			return result;
-		}, []);
-
-		/**
-		 * if we actually have variables
-		 * this is important as how #splitVariablesInUniqueNamedChunks works
-		 * it will always return an array in an array which would lead to a IIFE wrapper around
-		 * a module if we do this with an empty vars array.
-		 */
-		if (vars.length > 0) {
-			/**
-			 * Split all variables up into chunks of unique names.
-			 * e.g. imagine you have the following variable names that need to be injected:
-			 * [foo, bar, baz, foo, some, more]
-			 * we can not inject "foo" twice, therefore we just make two IIFEs like so:
-			 * (function(foo, bar, baz){
-			 *   (function(foo, some, more){
-			 *     …
-			 *   }(…));
-			 * }(…));
-			 *
-			 * "splitVariablesInUniqueNamedChunks" splits the variables shown above up to this:
-			 * [[foo, bar, baz], [foo, some, more]]
-			 */
-			const injectionVariableChunks = this.splitVariablesInUniqueNamedChunks(
-				vars
-			);
-
-			// create all the beginnings of IIFEs
-			const functionWrapperStarts = injectionVariableChunks.map(
-				variableChunk => {
-					return this.variableInjectionFunctionWrapperStartCode(
-						variableChunk.map(variable => variable.name)
-					);
-				}
-			);
-
-			// and all the ends
-			const functionWrapperEnds = injectionVariableChunks.map(variableChunk => {
-				return this.variableInjectionFunctionWrapperEndCode(
-					module,
-					variableChunk.map(variable => variable.expression),
-					block
-				);
-			});
-
-			// join them to one big string
-			const varStartCode = functionWrapperStarts.join("");
-
-			// reverse the ends first before joining them, as the last added must be the inner most
-			const varEndCode = functionWrapperEnds.reverse().join("");
-
-			// if we have anything, add it to the source
-			if (varStartCode && varEndCode) {
-				const start = block.range ? block.range[0] : -10;
-				const end = block.range
-					? block.range[1]
-					: module.originalSource().size() + 1;
-				source.insert(start + 0.5, varStartCode);
-				source.insert(end + 0.5, "\n/* WEBPACK VAR INJECTION */" + varEndCode);
-			}
-		}
-
-		for (const childBlock of block.blocks) {
-			this.sourceBlock(
-				module,
-				childBlock,
-				availableVars.concat(vars),
-				dependencyTemplates,
-				source,
-				runtimeTemplate
-			);
-		}
-	}
-
-	sourceDependency(dependency, dependencyTemplates, source, runtimeTemplate) {
-		const template = dependencyTemplates.get(dependency.constructor);
-		if (!template) {
-			throw new Error(
-				"No template for dependency: " + dependency.constructor.name
-			);
-		}
-		template.apply(dependency, source, runtimeTemplate, dependencyTemplates);
-	}
-
-	sourceVariables(
-		variable,
-		availableVars,
-		dependencyTemplates,
-		runtimeTemplate
-	) {
-		const name = variable.name;
-		const expr = variable.expressionSource(
-			dependencyTemplates,
-			runtimeTemplate
-		);
-
-		if (
-			availableVars.some(
-				v => v.name === name && v.expression.source() === expr.source()
-			)
-		) {
-			return;
-		}
-		return {
-			name: name,
-			expression: expr
-		};
-	}
-
-	/*
-	 * creates the start part of a IIFE around the module to inject a variable name
-	 * (function(…){   <- this part
-	 * }.call(…))
-	 */
-	variableInjectionFunctionWrapperStartCode(varNames) {
-		const args = varNames.join(", ");
-		return `/* WEBPACK VAR INJECTION */(function(${args}) {`;
-	}
-
-	contextArgument(module, block) {
-		if (this === block) {
-			return module.exportsArgument;
-		}
-		return "this";
-	}
-
-	/*
-	 * creates the end part of a IIFE around the module to inject a variable name
-	 * (function(…){
-	 * }.call(…))   <- this part
-	 */
-	variableInjectionFunctionWrapperEndCode(module, varExpressions, block) {
-		const firstParam = this.contextArgument(module, block);
-		const furtherParams = varExpressions.map(e => e.source()).join(", ");
-		return `}.call(${firstParam}, ${furtherParams}))`;
-	}
-
-	splitVariablesInUniqueNamedChunks(vars) {
-		const startState = [[]];
-		return vars.reduce((chunks, variable) => {
-			const current = chunks[chunks.length - 1];
-			// check if variable with same name exists already
-			// if so create a new chunk of variables.
-			const variableNameAlreadyExists = current.some(
-				v => v.name === variable.name
-			);
-
-			if (variableNameAlreadyExists) {
-				// start new chunk with current variable
-				chunks.push([variable]);
-			} else {
-				// else add it to current chunk
-				current.push(variable);
-			}
-			return chunks;
-		}, startState);
-	}
-}
-
-module.exports = JavascriptGenerator;
diff --git a/lib/JavascriptMetaInfoPlugin.js b/lib/JavascriptMetaInfoPlugin.js
new file mode 100644
index 00000000000..606dca5e3e2
--- /dev/null
+++ b/lib/JavascriptMetaInfoPlugin.js
@@ -0,0 +1,78 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sergey Melyukov @smelukov
+*/
+
+"use strict";
+
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const InnerGraph = require("./optimize/InnerGraph");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+
+const PLUGIN_NAME = "JavascriptMetaInfoPlugin";
+
+class JavascriptMetaInfoPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @returns {void}
+				 */
+				const handler = (parser) => {
+					parser.hooks.call.for("eval").tap(PLUGIN_NAME, () => {
+						const buildInfo =
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo);
+						buildInfo.moduleConcatenationBailout = "eval()";
+						const currentSymbol = InnerGraph.getTopLevelSymbol(parser.state);
+						if (currentSymbol) {
+							InnerGraph.addUsage(parser.state, null, currentSymbol);
+						} else {
+							InnerGraph.bailout(parser.state);
+						}
+					});
+					parser.hooks.finish.tap(PLUGIN_NAME, () => {
+						const buildInfo =
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo);
+						let topLevelDeclarations = buildInfo.topLevelDeclarations;
+						if (topLevelDeclarations === undefined) {
+							topLevelDeclarations = buildInfo.topLevelDeclarations = new Set();
+						}
+						for (const name of parser.scope.definitions.asSet()) {
+							if (parser.isVariableDefined(name)) {
+								topLevelDeclarations.add(name);
+							}
+						}
+					});
+				};
+
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
+			}
+		);
+	}
+}
+
+module.exports = JavascriptMetaInfoPlugin;
diff --git a/lib/JavascriptModulesPlugin.js b/lib/JavascriptModulesPlugin.js
deleted file mode 100644
index 5e0aaf8c4c7..00000000000
--- a/lib/JavascriptModulesPlugin.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const Parser = require("./Parser");
-const Template = require("./Template");
-const { ConcatSource } = require("webpack-sources");
-const JavascriptGenerator = require("./JavascriptGenerator");
-const createHash = require("./util/createHash");
-
-class JavascriptModulesPlugin {
-	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"JavascriptModulesPlugin",
-			(compilation, { normalModuleFactory }) => {
-				normalModuleFactory.hooks.createParser
-					.for("javascript/auto")
-					.tap("JavascriptModulesPlugin", options => {
-						return new Parser(options, "auto");
-					});
-				normalModuleFactory.hooks.createParser
-					.for("javascript/dynamic")
-					.tap("JavascriptModulesPlugin", options => {
-						return new Parser(options, "script");
-					});
-				normalModuleFactory.hooks.createParser
-					.for("javascript/esm")
-					.tap("JavascriptModulesPlugin", options => {
-						return new Parser(options, "module");
-					});
-				normalModuleFactory.hooks.createGenerator
-					.for("javascript/auto")
-					.tap("JavascriptModulesPlugin", () => {
-						return new JavascriptGenerator();
-					});
-				normalModuleFactory.hooks.createGenerator
-					.for("javascript/dynamic")
-					.tap("JavascriptModulesPlugin", () => {
-						return new JavascriptGenerator();
-					});
-				normalModuleFactory.hooks.createGenerator
-					.for("javascript/esm")
-					.tap("JavascriptModulesPlugin", () => {
-						return new JavascriptGenerator();
-					});
-				compilation.mainTemplate.hooks.renderManifest.tap(
-					"JavascriptModulesPlugin",
-					(result, options) => {
-						const chunk = options.chunk;
-						const hash = options.hash;
-						const fullHash = options.fullHash;
-						const outputOptions = options.outputOptions;
-						const moduleTemplates = options.moduleTemplates;
-						const dependencyTemplates = options.dependencyTemplates;
-
-						const filenameTemplate =
-							chunk.filenameTemplate || outputOptions.filename;
-
-						const useChunkHash = compilation.mainTemplate.useChunkHash(chunk);
-
-						result.push({
-							render: () =>
-								compilation.mainTemplate.render(
-									hash,
-									chunk,
-									moduleTemplates.javascript,
-									dependencyTemplates
-								),
-							filenameTemplate,
-							pathOptions: {
-								noChunkHash: !useChunkHash,
-								contentHashType: "javascript",
-								chunk
-							},
-							identifier: `chunk${chunk.id}`,
-							hash: useChunkHash ? chunk.hash : fullHash
-						});
-						return result;
-					}
-				);
-				compilation.mainTemplate.hooks.modules.tap(
-					"JavascriptModulesPlugin",
-					(source, chunk, hash, moduleTemplate, dependencyTemplates) => {
-						return Template.renderChunkModules(
-							chunk,
-							m => typeof m.source === "function",
-							moduleTemplate,
-							dependencyTemplates,
-							"/******/ "
-						);
-					}
-				);
-				compilation.chunkTemplate.hooks.renderManifest.tap(
-					"JavascriptModulesPlugin",
-					(result, options) => {
-						const chunk = options.chunk;
-						const outputOptions = options.outputOptions;
-						const moduleTemplates = options.moduleTemplates;
-						const dependencyTemplates = options.dependencyTemplates;
-						const filenameTemplate =
-							chunk.filenameTemplate || outputOptions.chunkFilename;
-
-						result.push({
-							render: () =>
-								this.renderJavascript(
-									compilation.chunkTemplate,
-									chunk,
-									moduleTemplates.javascript,
-									dependencyTemplates
-								),
-							filenameTemplate,
-							pathOptions: {
-								chunk,
-								contentHashType: "javascript"
-							},
-							identifier: `chunk${chunk.id}`,
-							hash: chunk.hash
-						});
-
-						return result;
-					}
-				);
-				compilation.hooks.contentHash.tap("JavascriptModulesPlugin", chunk => {
-					const outputOptions = compilation.outputOptions;
-					const {
-						hashSalt,
-						hashDigest,
-						hashDigestLength,
-						hashFunction
-					} = outputOptions;
-					const hash = createHash(hashFunction);
-					if (hashSalt) hash.update(hashSalt);
-					const template = chunk.hasRuntime()
-						? compilation.mainTemplate
-						: compilation.chunkTemplate;
-					template.updateHashForChunk(hash, chunk);
-					for (const m of chunk.modulesIterable) {
-						if (typeof m.source === "function") {
-							hash.update(m.hash);
-						}
-					}
-					chunk.contentHash.javascript = hash
-						.digest(hashDigest)
-						.substr(0, hashDigestLength);
-				});
-			}
-		);
-	}
-
-	renderJavascript(chunkTemplate, chunk, moduleTemplate, dependencyTemplates) {
-		const moduleSources = Template.renderChunkModules(
-			chunk,
-			m => typeof m.source === "function",
-			moduleTemplate,
-			dependencyTemplates
-		);
-		const core = chunkTemplate.hooks.modules.call(
-			moduleSources,
-			chunk,
-			moduleTemplate,
-			dependencyTemplates
-		);
-		let source = chunkTemplate.hooks.render.call(
-			core,
-			chunk,
-			moduleTemplate,
-			dependencyTemplates
-		);
-		if (chunk.hasEntryModule()) {
-			source = chunkTemplate.hooks.renderWithEntry.call(source, chunk);
-		}
-		chunk.rendered = true;
-		return new ConcatSource(source, ";");
-	}
-}
-
-module.exports = JavascriptModulesPlugin;
diff --git a/lib/JsonGenerator.js b/lib/JsonGenerator.js
deleted file mode 100644
index 508ae5ccc51..00000000000
--- a/lib/JsonGenerator.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { ConcatSource } = require("webpack-sources");
-
-const stringifySafe = data =>
-	JSON.stringify(data).replace(
-		/\u2028|\u2029/g,
-		str => (str === "\u2029" ? "\\u2029" : "\\u2028")
-	); // invalid in JavaScript but valid JSON
-
-class JsonGenerator {
-	generate(module, dependencyTemplates, runtimeTemplate) {
-		const source = new ConcatSource();
-		const data = module.buildInfo.jsonData;
-		if (
-			Array.isArray(module.buildMeta.providedExports) &&
-			!module.isUsed("default")
-		) {
-			// Only some exports are used: We can optimize here, by only generating a part of the JSON
-			const reducedJson = {};
-			for (const exportName of module.buildMeta.providedExports) {
-				if (exportName === "default") continue;
-				const used = module.isUsed(exportName);
-				if (used) {
-					reducedJson[used] = data[exportName];
-				}
-			}
-			source.add(
-				`${module.moduleArgument}.exports = ${stringifySafe(reducedJson)};`
-			);
-		} else {
-			source.add(`${module.moduleArgument}.exports = ${stringifySafe(data)};`);
-		}
-		return source;
-	}
-}
-
-module.exports = JsonGenerator;
diff --git a/lib/JsonModulesPlugin.js b/lib/JsonModulesPlugin.js
deleted file mode 100644
index 20b8a034c8a..00000000000
--- a/lib/JsonModulesPlugin.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const JsonParser = require("./JsonParser");
-const JsonGenerator = require("./JsonGenerator");
-
-class JsonModulesPlugin {
-	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"JsonModulesPlugin",
-			(compilation, { normalModuleFactory }) => {
-				normalModuleFactory.hooks.createParser
-					.for("json")
-					.tap("JsonModulesPlugin", () => {
-						return new JsonParser();
-					});
-				normalModuleFactory.hooks.createGenerator
-					.for("json")
-					.tap("JsonModulesPlugin", () => {
-						return new JsonGenerator();
-					});
-			}
-		);
-	}
-}
-
-module.exports = JsonModulesPlugin;
diff --git a/lib/JsonParser.js b/lib/JsonParser.js
deleted file mode 100644
index f0c59777bb3..00000000000
--- a/lib/JsonParser.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const parseJson = require("json-parse-better-errors");
-const JsonExportsDependency = require("./dependencies/JsonExportsDependency");
-
-class JsonParser {
-	constructor(options) {
-		this.options = options;
-	}
-
-	parse(source, state) {
-		const data = parseJson(source[0] === "\ufeff" ? source.slice(1) : source);
-		state.module.buildInfo.jsonData = data;
-		state.module.buildMeta.exportsType = "named";
-		if (typeof data === "object" && data) {
-			state.module.addDependency(new JsonExportsDependency(Object.keys(data)));
-		}
-		state.module.addDependency(new JsonExportsDependency(["default"]));
-		return state;
-	}
-}
-
-module.exports = JsonParser;
diff --git a/lib/LibManifestPlugin.js b/lib/LibManifestPlugin.js
index 54dbf10a0fa..3b7aba99b8d 100644
--- a/lib/LibManifestPlugin.js
+++ b/lib/LibManifestPlugin.js
@@ -2,80 +2,137 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const path = require("path");
 const asyncLib = require("neo-async");
-const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
+const EntryDependency = require("./dependencies/EntryDependency");
+const { someInIterable } = require("./util/IterableHelpers");
+const { compareModulesById } = require("./util/comparators");
+const { dirname, mkdirp } = require("./util/fs");
+
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Compiler").IntermediateFileSystem} IntermediateFileSystem */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./ExportsInfo").ExportInfoName} ExportInfoName */
+
+/**
+ * @typedef {object} ManifestModuleData
+ * @property {ModuleId} id
+ * @property {BuildMeta=} buildMeta
+ * @property {ExportInfoName[]=} exports
+ */
+
+/**
+ * @typedef {object} LibManifestPluginOptions
+ * @property {string=} context Context of requests in the manifest file (defaults to the webpack context).
+ * @property {boolean=} entryOnly If true, only entry points will be exposed (default: true).
+ * @property {boolean=} format If true, manifest json file (output) will be formatted.
+ * @property {string=} name Name of the exposed dll function (external name, use value of 'output.library').
+ * @property {string} path Absolute path to the manifest json file (output).
+ * @property {string=} type Type of the dll bundle (external type, use value of 'output.libraryTarget').
+ */
+
+const PLUGIN_NAME = "LibManifestPlugin";
 
 class LibManifestPlugin {
+	/**
+	 * @param {LibManifestPluginOptions} options the options
+	 */
 	constructor(options) {
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.emit.tapAsync(
-			"LibManifestPlugin",
+			{ name: PLUGIN_NAME, stage: 110 },
 			(compilation, callback) => {
-				asyncLib.forEach(
-					compilation.chunks,
+				const moduleGraph = compilation.moduleGraph;
+				// store used paths to detect issue and output an error. #18200
+				/** @type {Set} */
+				const usedPaths = new Set();
+				asyncLib.each(
+					[...compilation.chunks],
 					(chunk, callback) => {
-						if (!chunk.isOnlyInitial()) {
+						if (!chunk.canBeInitial()) {
 							callback();
 							return;
 						}
+						const chunkGraph = compilation.chunkGraph;
 						const targetPath = compilation.getPath(this.options.path, {
-							hash: compilation.hash,
 							chunk
 						});
+						if (usedPaths.has(targetPath)) {
+							callback(new Error("each chunk must have a unique path"));
+							return;
+						}
+						usedPaths.add(targetPath);
 						const name =
 							this.options.name &&
 							compilation.getPath(this.options.name, {
-								hash: compilation.hash,
-								chunk
+								chunk,
+								contentHashType: "javascript"
+							});
+						const content = Object.create(null);
+						for (const module of chunkGraph.getOrderedChunkModulesIterable(
+							chunk,
+							compareModulesById(chunkGraph)
+						)) {
+							if (
+								this.options.entryOnly &&
+								!someInIterable(
+									moduleGraph.getIncomingConnections(module),
+									(c) => c.dependency instanceof EntryDependency
+								)
+							) {
+								continue;
+							}
+							const ident = module.libIdent({
+								context: this.options.context || compiler.context,
+								associatedObjectForCache: compiler.root
 							});
+							if (ident) {
+								const exportsInfo = moduleGraph.getExportsInfo(module);
+								const providedExports = exportsInfo.getProvidedExports();
+								/** @type {ManifestModuleData} */
+								const data = {
+									id: /** @type {ModuleId} */ (chunkGraph.getModuleId(module)),
+									buildMeta: /** @type {BuildMeta} */ (module.buildMeta),
+									exports: Array.isArray(providedExports)
+										? providedExports
+										: undefined
+								};
+								content[ident] = data;
+							}
+						}
 						const manifest = {
 							name,
 							type: this.options.type,
-							content: Array.from(chunk.modulesIterable, module => {
-								if (
-									this.options.entryOnly &&
-									!module.reasons.some(
-										r => r.dependency instanceof SingleEntryDependency
-									)
-								) {
-									return;
-								}
-								if (module.libIdent) {
-									const ident = module.libIdent({
-										context: this.options.context || compiler.options.context
-									});
-									if (ident) {
-										return {
-											ident,
-											data: {
-												id: module.id,
-												buildMeta: module.buildMeta
-											}
-										};
-									}
-								}
-							})
-								.filter(Boolean)
-								.reduce((obj, item) => {
-									obj[item.ident] = item.data;
-									return obj;
-								}, Object.create(null))
+							content
 						};
-						const content = Buffer.from(JSON.stringify(manifest), "utf8");
-						compiler.outputFileSystem.mkdirp(path.dirname(targetPath), err => {
-							if (err) return callback(err);
-							compiler.outputFileSystem.writeFile(
-								targetPath,
-								content,
-								callback
+						// Apply formatting to content if format flag is true;
+						const manifestContent = this.options.format
+							? JSON.stringify(manifest, null, 2)
+							: JSON.stringify(manifest);
+						const buffer = Buffer.from(manifestContent, "utf8");
+						const intermediateFileSystem =
+							/** @type {IntermediateFileSystem} */ (
+								compiler.intermediateFileSystem
 							);
-						});
+						mkdirp(
+							intermediateFileSystem,
+							dirname(intermediateFileSystem, targetPath),
+							(err) => {
+								if (err) return callback(err);
+								intermediateFileSystem.writeFile(targetPath, buffer, callback);
+							}
+						);
 					},
 					callback
 				);
@@ -83,4 +140,5 @@ class LibManifestPlugin {
 		);
 	}
 }
+
 module.exports = LibManifestPlugin;
diff --git a/lib/LibraryTemplatePlugin.js b/lib/LibraryTemplatePlugin.js
index 484442efcbc..91cc4ab1440 100644
--- a/lib/LibraryTemplatePlugin.js
+++ b/lib/LibraryTemplatePlugin.js
@@ -2,151 +2,46 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const SetVarMainTemplatePlugin = require("./SetVarMainTemplatePlugin");
+const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
 
+/** @typedef {import("../declarations/WebpackOptions").AuxiliaryComment} AuxiliaryComment */
+/** @typedef {import("../declarations/WebpackOptions").LibraryExport} LibraryExport */
+/** @typedef {import("../declarations/WebpackOptions").LibraryName} LibraryName */
+/** @typedef {import("../declarations/WebpackOptions").LibraryType} LibraryType */
+/** @typedef {import("../declarations/WebpackOptions").UmdNamedDefine} UmdNamedDefine */
 /** @typedef {import("./Compiler")} Compiler */
 
-/**
- * @param {string[]} accessor the accessor to convert to path
- * @returns {string} the path
- */
-const accessorToObjectAccess = accessor => {
-	return accessor.map(a => `[${JSON.stringify(a)}]`).join("");
-};
-
-/**
- * @param {string=} base the path prefix
- * @param {string|string[]} accessor the accessor
- * @param {string=} joinWith the element separator
- * @returns {string} the path
- */
-const accessorAccess = (base, accessor, joinWith = "; ") => {
-	const accessors = Array.isArray(accessor) ? accessor : [accessor];
-	return accessors
-		.map((_, idx) => {
-			const a = base
-				? base + accessorToObjectAccess(accessors.slice(0, idx + 1))
-				: accessors[0] + accessorToObjectAccess(accessors.slice(1, idx + 1));
-			if (idx === accessors.length - 1) return a;
-			if (idx === 0 && typeof base === "undefined") {
-				return `${a} = typeof ${a} === "object" ? ${a} : {}`;
-			}
-			return `${a} = ${a} || {}`;
-		})
-		.join(joinWith);
-};
-
+// TODO webpack 6 remove
 class LibraryTemplatePlugin {
 	/**
-	 * @param {string} name name of library
-	 * @param {string} target type of library
-	 * @param {boolean} umdNamedDefine setting this to true will name the UMD module
-	 * @param {string|TODO} auxiliaryComment comment in the UMD wrapper
-	 * @param {string|string[]} exportProperty which export should be exposed as library
+	 * @param {LibraryName} name name of library
+	 * @param {LibraryType} target type of library
+	 * @param {UmdNamedDefine} umdNamedDefine setting this to true will name the UMD module
+	 * @param {AuxiliaryComment} auxiliaryComment comment in the UMD wrapper
+	 * @param {LibraryExport} exportProperty which export should be exposed as library
 	 */
 	constructor(name, target, umdNamedDefine, auxiliaryComment, exportProperty) {
-		this.name = name;
-		this.target = target;
-		this.umdNamedDefine = umdNamedDefine;
-		this.auxiliaryComment = auxiliaryComment;
-		this.exportProperty = exportProperty;
+		this.library = {
+			type: target || "var",
+			name,
+			umdNamedDefine,
+			auxiliaryComment,
+			export: exportProperty
+		};
 	}
 
 	/**
+	 * Apply the plugin
 	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
 	apply(compiler) {
-		compiler.hooks.thisCompilation.tap("LibraryTemplatePlugin", compilation => {
-			if (this.exportProperty) {
-				const ExportPropertyMainTemplatePlugin = require("./ExportPropertyMainTemplatePlugin");
-				new ExportPropertyMainTemplatePlugin(this.exportProperty).apply(
-					compilation
-				);
-			}
-			switch (this.target) {
-				case "var":
-					new SetVarMainTemplatePlugin(
-						`var ${accessorAccess(undefined, this.name)}`,
-						false
-					).apply(compilation);
-					break;
-				case "assign":
-					new SetVarMainTemplatePlugin(
-						accessorAccess(undefined, this.name),
-						false
-					).apply(compilation);
-					break;
-				case "this":
-				case "self":
-				case "window":
-					if (this.name) {
-						new SetVarMainTemplatePlugin(
-							accessorAccess(this.target, this.name),
-							false
-						).apply(compilation);
-					} else {
-						new SetVarMainTemplatePlugin(this.target, true).apply(compilation);
-					}
-					break;
-				case "global":
-					if (this.name) {
-						new SetVarMainTemplatePlugin(
-							accessorAccess(
-								compilation.runtimeTemplate.outputOptions.globalObject,
-								this.name
-							),
-							false
-						).apply(compilation);
-					} else {
-						new SetVarMainTemplatePlugin(
-							compilation.runtimeTemplate.outputOptions.globalObject,
-							true
-						).apply(compilation);
-					}
-					break;
-				case "commonjs":
-					if (this.name) {
-						new SetVarMainTemplatePlugin(
-							accessorAccess("exports", this.name),
-							false
-						).apply(compilation);
-					} else {
-						new SetVarMainTemplatePlugin("exports", true).apply(compilation);
-					}
-					break;
-				case "commonjs2":
-				case "commonjs-module":
-					new SetVarMainTemplatePlugin("module.exports", false).apply(
-						compilation
-					);
-					break;
-				case "amd": {
-					const AmdMainTemplatePlugin = require("./AmdMainTemplatePlugin");
-					new AmdMainTemplatePlugin(this.name).apply(compilation);
-					break;
-				}
-				case "umd":
-				case "umd2": {
-					const UmdMainTemplatePlugin = require("./UmdMainTemplatePlugin");
-					new UmdMainTemplatePlugin(this.name, {
-						optionalAmdExternalAsGlobal: this.target === "umd2",
-						namedDefine: this.umdNamedDefine,
-						auxiliaryComment: this.auxiliaryComment
-					}).apply(compilation);
-					break;
-				}
-				case "jsonp": {
-					const JsonpExportMainTemplatePlugin = require("./web/JsonpExportMainTemplatePlugin");
-					new JsonpExportMainTemplatePlugin(this.name).apply(compilation);
-					break;
-				}
-				default:
-					throw new Error(`${this.target} is not a valid Library target`);
-			}
-		});
+		const { output } = compiler.options;
+		output.library = this.library;
+		new EnableLibraryPlugin(this.library.type).apply(compiler);
 	}
 }
 
diff --git a/lib/LoaderOptionsPlugin.js b/lib/LoaderOptionsPlugin.js
index 5d13e2c0643..f74da6d5c75 100644
--- a/lib/LoaderOptionsPlugin.js
+++ b/lib/LoaderOptionsPlugin.js
@@ -2,46 +2,76 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
+const NormalModule = require("./NormalModule");
 
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/LoaderOptionsPlugin.json");
+/** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./ModuleFilenameHelpers").MatchObject} MatchObject  */
 
-class LoaderOptionsPlugin {
-	constructor(options) {
-		validateOptions(schema, options || {}, "Loader Options Plugin");
+/**
+ * @template T
+ * @typedef {import("../declarations/LoaderContext").LoaderContext} LoaderContext
+ */
 
+const PLUGIN_NAME = "LoaderOptionsPlugin";
+
+class LoaderOptionsPlugin {
+	/**
+	 * @param {LoaderOptionsPluginOptions & MatchObject} options options object
+	 */
+	constructor(options = {}) {
+		// If no options are set then generate empty options object
 		if (typeof options !== "object") options = {};
 		if (!options.test) {
-			options.test = {
-				test: () => true
-			};
+			options.test = () => true;
 		}
+		/** @type {LoaderOptionsPluginOptions & MatchObject} */
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		const options = this.options;
-		compiler.hooks.compilation.tap("LoaderOptionsPlugin", compilation => {
-			compilation.hooks.normalModuleLoader.tap(
-				"LoaderOptionsPlugin",
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/LoaderOptionsPlugin.json"),
+				this.options,
+				{
+					name: "Loader Options Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../schemas/plugins/LoaderOptionsPlugin.check")(options)
+			);
+		});
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			NormalModule.getCompilationHooks(compilation).loader.tap(
+				PLUGIN_NAME,
 				(context, module) => {
 					const resource = module.resource;
 					if (!resource) return;
 					const i = resource.indexOf("?");
 					if (
 						ModuleFilenameHelpers.matchObject(
-							options,
-							i < 0 ? resource : resource.substr(0, i)
+							this.options,
+							i < 0 ? resource : resource.slice(0, i)
 						)
 					) {
-						for (const key of Object.keys(options)) {
+						for (const key of Object.keys(this.options)) {
 							if (key === "include" || key === "exclude" || key === "test") {
 								continue;
 							}
-							context[key] = options[key];
+
+							/** @type {LoaderContext & Record} */
+							(context)[key] = this.options[key];
 						}
 					}
 				}
diff --git a/lib/LoaderTargetPlugin.js b/lib/LoaderTargetPlugin.js
index 99ffbc9979d..8f3664122c3 100644
--- a/lib/LoaderTargetPlugin.js
+++ b/lib/LoaderTargetPlugin.js
@@ -2,18 +2,33 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const NormalModule = require("./NormalModule");
+
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "LoaderTargetPlugin";
+
 class LoaderTargetPlugin {
+	/**
+	 * @param {string} target the target
+	 */
 	constructor(target) {
 		this.target = target;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.compilation.tap("LoaderTargetPlugin", compilation => {
-			compilation.hooks.normalModuleLoader.tap(
-				"LoaderTargetPlugin",
-				loaderContext => {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			NormalModule.getCompilationHooks(compilation).loader.tap(
+				PLUGIN_NAME,
+				(loaderContext) => {
 					loaderContext.target = this.target;
 				}
 			);
diff --git a/lib/MainTemplate.js b/lib/MainTemplate.js
index 3463546fea6..c18f50431c7 100644
--- a/lib/MainTemplate.js
+++ b/lib/MainTemplate.js
@@ -2,86 +2,264 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const {
-	ConcatSource,
-	OriginalSource,
-	PrefixSource,
-	RawSource
-} = require("webpack-sources");
-const {
-	Tapable,
-	SyncWaterfallHook,
-	SyncHook,
-	SyncBailHook
-} = require("tapable");
-const Template = require("./Template");
+const util = require("util");
+const { SyncWaterfallHook } = require("tapable");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const memoize = require("./util/memoize");
 
-/** @typedef {import("webpack-sources").ConcatSource} ConcatSource */
+/** @typedef {import("tapable").Tap} Tap */
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */
 /** @typedef {import("./ModuleTemplate")} ModuleTemplate */
 /** @typedef {import("./Chunk")} Chunk */
-/** @typedef {import("./Module")} Module} */
-/** @typedef {import("crypto").Hash} Hash} */
-
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compilation").InterpolatedPathAndAssetInfo} InterpolatedPathAndAssetInfo */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").RenderBootstrapContext} RenderBootstrapContext */
+/** @typedef {import("./Template").RenderManifestOptions} RenderManifestOptions */
+/** @typedef {import("./Template").RenderManifestEntry} RenderManifestEntry */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+/** @typedef {import("./TemplatedPathPlugin").PathData} PathData */
 /**
- * @typedef {Object} RenderManifestOptions
- * @property {Chunk} chunk the chunk used to render
- * @property {Hash} hash
- * @property {string} fullHash
- * @property {TODO} outputOptions
- * @property {{javascript: ModuleTemplate, webassembly: ModuleTemplate}} moduleTemplates
- * @property {Map} dependencyTemplates
+ * @template T
+ * @typedef {import("tapable").IfSet} IfSet
  */
 
-// require function shortcuts:
-// __webpack_require__.s = the module id of the entry point
-// __webpack_require__.c = the module cache
-// __webpack_require__.m = the module functions
-// __webpack_require__.p = the bundle public path
-// __webpack_require__.i = the identity function used for harmony imports
-// __webpack_require__.e = the chunk ensure function
-// __webpack_require__.d = the exported property define getter function
-// __webpack_require__.o = Object.prototype.hasOwnProperty.call
-// __webpack_require__.r = define compatibility on export
-// __webpack_require__.t = create a fake namespace object
-// __webpack_require__.n = compatibility get default export
-// __webpack_require__.h = the webpack hash
-// __webpack_require__.w = an object containing all installed WebAssembly.Instance export objects keyed by module id
-// __webpack_require__.oe = the uncaught error handler for the webpack runtime
-// __webpack_require__.nc = the script nonce
+const getJavascriptModulesPlugin = memoize(() =>
+	require("./javascript/JavascriptModulesPlugin")
+);
+const getJsonpTemplatePlugin = memoize(() =>
+	require("./web/JsonpTemplatePlugin")
+);
+const getLoadScriptRuntimeModule = memoize(() =>
+	require("./runtime/LoadScriptRuntimeModule")
+);
 
-module.exports = class MainTemplate extends Tapable {
+// TODO webpack 6 remove this class
+class MainTemplate {
 	/**
-	 *
-	 * @param {TODO=} outputOptions output options for the MainTemplate
+	 * @param {OutputOptions} outputOptions output options for the MainTemplate
+	 * @param {Compilation} compilation the compilation
 	 */
-	constructor(outputOptions) {
-		super();
-		/** @type {TODO?} */
-		this.outputOptions = outputOptions || {};
-		this.hooks = {
-			/** @type {SyncWaterfallHook} */
-			renderManifest: new SyncWaterfallHook(["result", "options"]),
-			modules: new SyncWaterfallHook([
-				"modules",
-				"chunk",
-				"hash",
-				"moduleTemplate",
-				"dependencyTemplates"
-			]),
-			moduleObj: new SyncWaterfallHook([
-				"source",
-				"chunk",
-				"hash",
-				"moduleIdExpression"
-			]),
-			requireEnsure: new SyncWaterfallHook([
-				"source",
-				"chunk",
-				"hash",
-				"chunkIdExpression"
-			]),
+	constructor(outputOptions, compilation) {
+		/** @type {OutputOptions} */
+		this._outputOptions = outputOptions || {};
+		this.hooks = Object.freeze({
+			renderManifest: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(renderManifestEntries: RenderManifestEntry[], renderManifestOptions: RenderManifestOptions) => RenderManifestEntry[]} fn fn
+					 */
+					(options, fn) => {
+						compilation.hooks.renderManifest.tap(
+							options,
+							(entries, options) => {
+								if (!options.chunk.hasRuntime()) return entries;
+								return fn(entries, options);
+							}
+						);
+					},
+					"MainTemplate.hooks.renderManifest is deprecated (use Compilation.hooks.renderManifest instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_RENDER_MANIFEST"
+				)
+			},
+			modules: {
+				tap: () => {
+					throw new Error(
+						"MainTemplate.hooks.modules has been removed (there is no replacement, please create an issue to request that)"
+					);
+				}
+			},
+			moduleObj: {
+				tap: () => {
+					throw new Error(
+						"MainTemplate.hooks.moduleObj has been removed (there is no replacement, please create an issue to request that)"
+					);
+				}
+			},
+			require: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(value: string, renderBootstrapContext: RenderBootstrapContext) => string} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderRequire.tap(options, fn);
+					},
+					"MainTemplate.hooks.require is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderRequire instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_REQUIRE"
+				)
+			},
+			beforeStartup: {
+				tap: () => {
+					throw new Error(
+						"MainTemplate.hooks.beforeStartup has been removed (use RuntimeGlobals.startupOnlyBefore instead)"
+					);
+				}
+			},
+			startup: {
+				tap: () => {
+					throw new Error(
+						"MainTemplate.hooks.startup has been removed (use RuntimeGlobals.startup instead)"
+					);
+				}
+			},
+			afterStartup: {
+				tap: () => {
+					throw new Error(
+						"MainTemplate.hooks.afterStartup has been removed (use RuntimeGlobals.startupOnlyAfter instead)"
+					);
+				}
+			},
+			render: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, chunk: Chunk, hash: string | undefined, moduleTemplate: ModuleTemplate, dependencyTemplates: DependencyTemplates) => Source} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.render.tap(options, (source, renderContext) => {
+								if (
+									renderContext.chunkGraph.getNumberOfEntryModules(
+										renderContext.chunk
+									) === 0 ||
+									!renderContext.chunk.hasRuntime()
+								) {
+									return source;
+								}
+								return fn(
+									source,
+									renderContext.chunk,
+									compilation.hash,
+									compilation.moduleTemplates.javascript,
+									compilation.dependencyTemplates
+								);
+							});
+					},
+					"MainTemplate.hooks.render is deprecated (use JavascriptModulesPlugin.getCompilationHooks().render instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_RENDER"
+				)
+			},
+			renderWithEntry: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, chunk: Chunk, hash: string | undefined) => Source} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.render.tap(options, (source, renderContext) => {
+								if (
+									renderContext.chunkGraph.getNumberOfEntryModules(
+										renderContext.chunk
+									) === 0 ||
+									!renderContext.chunk.hasRuntime()
+								) {
+									return source;
+								}
+								return fn(source, renderContext.chunk, compilation.hash);
+							});
+					},
+					"MainTemplate.hooks.renderWithEntry is deprecated (use JavascriptModulesPlugin.getCompilationHooks().render instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_RENDER_WITH_ENTRY"
+				)
+			},
+			assetPath: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(value: string, path: PathData, assetInfo: AssetInfo | undefined) => string} fn fn
+					 */
+					(options, fn) => {
+						compilation.hooks.assetPath.tap(options, fn);
+					},
+					"MainTemplate.hooks.assetPath is deprecated (use Compilation.hooks.assetPath instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_ASSET_PATH"
+				),
+				call: util.deprecate(
+					/**
+					 * @param {TemplatePath} filename used to get asset path with hash
+					 * @param {PathData} options context data
+					 * @returns {string} interpolated path
+					 */
+					(filename, options) => compilation.getAssetPath(filename, options),
+					"MainTemplate.hooks.assetPath is deprecated (use Compilation.hooks.assetPath instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_ASSET_PATH"
+				)
+			},
+			hash: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(hash: Hash) => void} fn fn
+					 */
+					(options, fn) => {
+						compilation.hooks.fullHash.tap(options, fn);
+					},
+					"MainTemplate.hooks.hash is deprecated (use Compilation.hooks.fullHash instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_HASH"
+				)
+			},
+			hashForChunk: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(hash: Hash, chunk: Chunk) => void} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.chunkHash.tap(options, (chunk, hash) => {
+								if (!chunk.hasRuntime()) return;
+								return fn(hash, chunk);
+							});
+					},
+					"MainTemplate.hooks.hashForChunk is deprecated (use JavascriptModulesPlugin.getCompilationHooks().chunkHash instead)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_HASH_FOR_CHUNK"
+				)
+			},
+			globalHashPaths: {
+				tap: util.deprecate(
+					() => {},
+					"MainTemplate.hooks.globalHashPaths has been removed (it's no longer needed)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_HASH_FOR_CHUNK"
+				)
+			},
+			globalHash: {
+				tap: util.deprecate(
+					() => {},
+					"MainTemplate.hooks.globalHash has been removed (it's no longer needed)",
+					"DEP_WEBPACK_MAIN_TEMPLATE_HASH_FOR_CHUNK"
+				)
+			},
+			hotBootstrap: {
+				tap: () => {
+					throw new Error(
+						"MainTemplate.hooks.hotBootstrap has been removed (use your own RuntimeModule instead)"
+					);
+				}
+			},
+
+			// for compatibility:
+			/** @type {SyncWaterfallHook<[string, Chunk, string, ModuleTemplate, DependencyTemplates]>} */
 			bootstrap: new SyncWaterfallHook([
 				"source",
 				"chunk",
@@ -89,405 +267,105 @@ module.exports = class MainTemplate extends Tapable {
 				"moduleTemplate",
 				"dependencyTemplates"
 			]),
+			/** @type {SyncWaterfallHook<[string, Chunk, string]>} */
 			localVars: new SyncWaterfallHook(["source", "chunk", "hash"]),
-			require: new SyncWaterfallHook(["source", "chunk", "hash"]),
+			/** @type {SyncWaterfallHook<[string, Chunk, string]>} */
 			requireExtensions: new SyncWaterfallHook(["source", "chunk", "hash"]),
-			beforeStartup: new SyncWaterfallHook(["source", "chunk", "hash"]),
-			startup: new SyncWaterfallHook(["source", "chunk", "hash"]),
-			render: new SyncWaterfallHook([
-				"source",
-				"chunk",
-				"hash",
-				"moduleTemplate",
-				"dependencyTemplates"
-			]),
-			renderWithEntry: new SyncWaterfallHook(["source", "chunk", "hash"]),
-			moduleRequire: new SyncWaterfallHook([
-				"source",
-				"chunk",
-				"hash",
-				"moduleIdExpression"
-			]),
-			addModule: new SyncWaterfallHook([
+			/** @type {SyncWaterfallHook<[string, Chunk, string, string]>} */
+			requireEnsure: new SyncWaterfallHook([
 				"source",
 				"chunk",
 				"hash",
-				"moduleIdExpression",
-				"moduleExpression"
+				"chunkIdExpression"
 			]),
-			currentHash: new SyncWaterfallHook(["source", "requestedLength"]),
-			assetPath: new SyncWaterfallHook(["path", "options"]),
-			hash: new SyncHook(["hash"]),
-			hashForChunk: new SyncHook(["hash", "chunk"]),
-			globalHashPaths: new SyncWaterfallHook(["paths"]),
-			globalHash: new SyncBailHook(["chunk", "paths"]),
-
-			// TODO this should be moved somewhere else
-			// It's weird here
-			hotBootstrap: new SyncWaterfallHook(["source", "chunk", "hash"])
-		};
-		this.hooks.startup.tap("MainTemplate", (source, chunk, hash) => {
-			/** @type {string[]} */
-			const buf = [];
-			if (chunk.entryModule) {
-				buf.push("// Load entry module and return exports");
-				buf.push(
-					`return ${this.renderRequireFunctionForModule(
-						hash,
-						chunk,
-						JSON.stringify(chunk.entryModule.id)
-					)}(${this.requireFn}.s = ${JSON.stringify(chunk.entryModule.id)});`
-				);
+			get jsonpScript() {
+				const hooks =
+					getLoadScriptRuntimeModule().getCompilationHooks(compilation);
+				return hooks.createScript;
+			},
+			get linkPrefetch() {
+				const hooks = getJsonpTemplatePlugin().getCompilationHooks(compilation);
+				return hooks.linkPrefetch;
+			},
+			get linkPreload() {
+				const hooks = getJsonpTemplatePlugin().getCompilationHooks(compilation);
+				return hooks.linkPreload;
 			}
-			return Template.asString(buf);
-		});
-		this.hooks.render.tap(
-			"MainTemplate",
-			(bootstrapSource, chunk, hash, moduleTemplate, dependencyTemplates) => {
-				const source = new ConcatSource();
-				source.add("/******/ (function(modules) { // webpackBootstrap\n");
-				source.add(new PrefixSource("/******/", bootstrapSource));
-				source.add("/******/ })\n");
-				source.add(
-					"/************************************************************************/\n"
-				);
-				source.add("/******/ (");
-				source.add(
-					this.hooks.modules.call(
-						new RawSource(""),
-						chunk,
-						hash,
-						moduleTemplate,
-						dependencyTemplates
-					)
-				);
-				source.add(")");
-				return source;
-			}
-		);
-		this.hooks.localVars.tap("MainTemplate", (source, chunk, hash) => {
-			return Template.asString([
-				source,
-				"// The module cache",
-				"var installedModules = {};"
-			]);
 		});
-		this.hooks.require.tap("MainTemplate", (source, chunk, hash) => {
-			return Template.asString([
-				source,
-				"// Check if module is in cache",
-				"if(installedModules[moduleId]) {",
-				Template.indent("return installedModules[moduleId].exports;"),
-				"}",
-				"// Create a new module (and put it into the cache)",
-				"var module = installedModules[moduleId] = {",
-				Template.indent(this.hooks.moduleObj.call("", chunk, hash, "moduleId")),
-				"};",
-				"",
-				Template.asString(
-					outputOptions.strictModuleExceptionHandling
-						? [
-								"// Execute the module function",
-								"var threw = true;",
-								"try {",
-								Template.indent([
-									`modules[moduleId].call(module.exports, module, module.exports, ${this.renderRequireFunctionForModule(
-										hash,
-										chunk,
-										"moduleId"
-									)});`,
-									"threw = false;"
-								]),
-								"} finally {",
-								Template.indent([
-									"if(threw) delete installedModules[moduleId];"
-								]),
-								"}"
-						  ]
-						: [
-								"// Execute the module function",
-								`modules[moduleId].call(module.exports, module, module.exports, ${this.renderRequireFunctionForModule(
-									hash,
-									chunk,
-									"moduleId"
-								)});`
-						  ]
-				),
-				"",
-				"// Flag the module as loaded",
-				"module.l = true;",
-				"",
-				"// Return the exports of the module",
-				"return module.exports;"
-			]);
-		});
-		this.hooks.moduleObj.tap(
-			"MainTemplate",
-			(source, chunk, hash, varModuleId) => {
-				return Template.asString(["i: moduleId,", "l: false,", "exports: {}"]);
-			}
-		);
-		this.hooks.requireExtensions.tap("MainTemplate", (source, chunk, hash) => {
-			const buf = [];
-			const chunkMaps = chunk.getChunkMaps();
-			// Check if there are non initial chunks which need to be imported using require-ensure
-			if (Object.keys(chunkMaps.hash).length) {
-				buf.push("// This file contains only the entry chunk.");
-				buf.push("// The chunk loading function for additional chunks");
-				buf.push(`${this.requireFn}.e = function requireEnsure(chunkId) {`);
-				buf.push(Template.indent("var promises = [];"));
-				buf.push(
-					Template.indent(
-						this.hooks.requireEnsure.call("", chunk, hash, "chunkId")
-					)
-				);
-				buf.push(Template.indent("return Promise.all(promises);"));
-				buf.push("};");
-			}
-			buf.push("");
-			buf.push("// expose the modules object (__webpack_modules__)");
-			buf.push(`${this.requireFn}.m = modules;`);
 
-			buf.push("");
-			buf.push("// expose the module cache");
-			buf.push(`${this.requireFn}.c = installedModules;`);
-
-			buf.push("");
-			buf.push("// define getter function for harmony exports");
-			buf.push(`${this.requireFn}.d = function(exports, name, getter) {`);
-			buf.push(
-				Template.indent([
-					`if(!${this.requireFn}.o(exports, name)) {`,
-					Template.indent([
-						"Object.defineProperty(exports, name, { enumerable: true, get: getter });"
-					]),
-					"}"
-				])
-			);
-			buf.push("};");
-
-			buf.push("");
-			buf.push("// define __esModule on exports");
-			buf.push(`${this.requireFn}.r = function(exports) {`);
-			buf.push(
-				Template.indent([
-					"if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {",
-					Template.indent([
-						"Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });"
-					]),
-					"}",
-					"Object.defineProperty(exports, '__esModule', { value: true });"
-				])
-			);
-			buf.push("};");
-
-			buf.push("");
-			buf.push("// create a fake namespace object");
-			buf.push("// mode & 1: value is a module id, require it");
-			buf.push("// mode & 2: merge all properties of value into the ns");
-			buf.push("// mode & 4: return value when already ns object");
-			buf.push("// mode & 8|1: behave like require");
-			buf.push(`${this.requireFn}.t = function(value, mode) {`);
-			buf.push(
-				Template.indent([
-					`if(mode & 1) value = ${this.requireFn}(value);`,
-					`if(mode & 8) return value;`,
-					"if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;",
-					"var ns = Object.create(null);",
-					`${this.requireFn}.r(ns);`,
-					"Object.defineProperty(ns, 'default', { enumerable: true, value: value });",
-					"if(mode & 2 && typeof value != 'string') for(var key in value) " +
-						`${this.requireFn}.d(ns, key, function(key) { ` +
-						"return value[key]; " +
-						"}.bind(null, key));",
-					"return ns;"
-				])
-			);
-			buf.push("};");
-
-			buf.push("");
-			buf.push(
-				"// getDefaultExport function for compatibility with non-harmony modules"
-			);
-			buf.push(this.requireFn + ".n = function(module) {");
-			buf.push(
-				Template.indent([
-					"var getter = module && module.__esModule ?",
-					Template.indent([
-						"function getDefault() { return module['default']; } :",
-						"function getModuleExports() { return module; };"
-					]),
-					`${this.requireFn}.d(getter, 'a', getter);`,
-					"return getter;"
-				])
-			);
-			buf.push("};");
-
-			buf.push("");
-			buf.push("// Object.prototype.hasOwnProperty.call");
-			buf.push(
-				`${
-					this.requireFn
-				}.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };`
-			);
-
-			const publicPath = this.getPublicPath({
-				hash: hash
-			});
-			buf.push("");
-			buf.push("// __webpack_public_path__");
-			buf.push(`${this.requireFn}.p = ${JSON.stringify(publicPath)};`);
-			return Template.asString(buf);
-		});
-
-		this.requireFn = "__webpack_require__";
-	}
-
-	/**
-	 *
-	 * @param {RenderManifestOptions} options render manifest options
-	 * @returns {TODO[]} returns render manifest
-	 */
-	getRenderManifest(options) {
-		const result = [];
-
-		this.hooks.renderManifest.call(result, options);
-
-		return result;
-	}
-
-	/**
-	 *
-	 * @param {string} hash hash to be used for render call
-	 * @param {Chunk} chunk Chunk instance
-	 * @param {ModuleTemplate} moduleTemplate ModuleTemplate instance for render
-	 * @param {TODO} dependencyTemplates DependencyTemplate[]s
-	 * @returns {ConcatSource} the newly generated source from rendering
-	 */
-	render(hash, chunk, moduleTemplate, dependencyTemplates) {
-		const buf = [];
-		buf.push(
-			this.hooks.bootstrap.call(
-				"",
-				chunk,
-				hash,
-				moduleTemplate,
-				dependencyTemplates
-			)
-		);
-		buf.push(this.hooks.localVars.call("", chunk, hash));
-		buf.push("");
-		buf.push("// The require function");
-		buf.push(`function ${this.requireFn}(moduleId) {`);
-		buf.push(Template.indent(this.hooks.require.call("", chunk, hash)));
-		buf.push("}");
-		buf.push("");
-		buf.push(
-			Template.asString(this.hooks.requireExtensions.call("", chunk, hash))
-		);
-		buf.push("");
-		buf.push(Template.asString(this.hooks.beforeStartup.call("", chunk, hash)));
-		buf.push(Template.asString(this.hooks.startup.call("", chunk, hash)));
-		let source = this.hooks.render.call(
-			new OriginalSource(
-				Template.prefix(buf, " \t") + "\n",
-				"webpack/bootstrap"
-			),
-			chunk,
-			hash,
-			moduleTemplate,
-			dependencyTemplates
+		this.renderCurrentHashCode = util.deprecate(
+			/**
+			 * @deprecated
+			 * @param {string} hash the hash
+			 * @param {number=} length length of the hash
+			 * @returns {string} generated code
+			 */
+			(hash, length) => {
+				if (length) {
+					return `${RuntimeGlobals.getFullHash} ? ${
+						RuntimeGlobals.getFullHash
+					}().slice(0, ${length}) : ${hash.slice(0, length)}`;
+				}
+				return `${RuntimeGlobals.getFullHash} ? ${RuntimeGlobals.getFullHash}() : ${hash}`;
+			},
+			"MainTemplate.renderCurrentHashCode is deprecated (use RuntimeGlobals.getFullHash runtime function instead)",
+			"DEP_WEBPACK_MAIN_TEMPLATE_RENDER_CURRENT_HASH_CODE"
 		);
-		if (chunk.hasEntryModule()) {
-			source = this.hooks.renderWithEntry.call(source, chunk, hash);
-		}
-		if (!source) {
-			throw new Error(
-				"Compiler error: MainTemplate plugin 'render' should return something"
-			);
-		}
-		chunk.rendered = true;
-		return new ConcatSource(source, ";");
-	}
 
-	/**
-	 *
-	 * @param {string} hash hash for render fn
-	 * @param {Chunk} chunk Chunk instance for require
-	 * @param {(number|string)=} varModuleId module id
-	 * @returns {TODO} the moduleRequire hook call return signature
-	 */
-	renderRequireFunctionForModule(hash, chunk, varModuleId) {
-		return this.hooks.moduleRequire.call(
-			this.requireFn,
-			chunk,
-			hash,
-			varModuleId
+		this.getPublicPath = util.deprecate(
+			/**
+			 * @param {PathData} options context data
+			 * @returns {string} interpolated path
+			 */ (options) =>
+				compilation.getAssetPath(compilation.outputOptions.publicPath, options),
+			"MainTemplate.getPublicPath is deprecated (use Compilation.getAssetPath(compilation.outputOptions.publicPath, options) instead)",
+			"DEP_WEBPACK_MAIN_TEMPLATE_GET_PUBLIC_PATH"
 		);
-	}
 
-	/**
-	 *
-	 * @param {string} hash hash for render add fn
-	 * @param {Chunk} chunk Chunk instance for require add fn
-	 * @param {(string|number)=} varModuleId module id
-	 * @param {Module} varModule Module instance
-	 * @returns {TODO} renderAddModule call
-	 */
-	renderAddModule(hash, chunk, varModuleId, varModule) {
-		return this.hooks.addModule.call(
-			`modules[${varModuleId}] = ${varModule};`,
-			chunk,
-			hash,
-			varModuleId,
-			varModule
+		this.getAssetPath = util.deprecate(
+			/**
+			 * @param {TemplatePath} path used to get asset path with hash
+			 * @param {PathData} options context data
+			 * @returns {string} interpolated path
+			 */
+			(path, options) => compilation.getAssetPath(path, options),
+			"MainTemplate.getAssetPath is deprecated (use Compilation.getAssetPath instead)",
+			"DEP_WEBPACK_MAIN_TEMPLATE_GET_ASSET_PATH"
 		);
-	}
 
-	/**
-	 *
-	 * @param {string} hash string hash
-	 * @param {number} length length
-	 * @returns {string} call hook return
-	 */
-	renderCurrentHashCode(hash, length) {
-		length = length || Infinity;
-		return this.hooks.currentHash.call(
-			JSON.stringify(hash.substr(0, length)),
-			length
+		this.getAssetPathWithInfo = util.deprecate(
+			/**
+			 * @param {TemplatePath} path used to get asset path with hash
+			 * @param {PathData} options context data
+			 * @returns {InterpolatedPathAndAssetInfo} interpolated path and asset info
+			 */
+			(path, options) => compilation.getAssetPathWithInfo(path, options),
+			"MainTemplate.getAssetPathWithInfo is deprecated (use Compilation.getAssetPath instead)",
+			"DEP_WEBPACK_MAIN_TEMPLATE_GET_ASSET_PATH_WITH_INFO"
 		);
 	}
+}
 
-	/**
-	 *
-	 * @param {object} options get public path options
-	 * @returns {string} hook call
-	 */
-	getPublicPath(options) {
-		return this.hooks.assetPath.call(
-			this.outputOptions.publicPath || "",
-			options
-		);
-	}
+Object.defineProperty(MainTemplate.prototype, "requireFn", {
+	get: util.deprecate(
+		() => RuntimeGlobals.require,
+		`MainTemplate.requireFn is deprecated (use "${RuntimeGlobals.require}")`,
+		"DEP_WEBPACK_MAIN_TEMPLATE_REQUIRE_FN"
+	)
+});
 
-	getAssetPath(path, options) {
-		return this.hooks.assetPath.call(path, options);
-	}
+Object.defineProperty(MainTemplate.prototype, "outputOptions", {
+	get: util.deprecate(
+		/**
+		 * @this {MainTemplate}
+		 * @returns {OutputOptions} output options
+		 */
+		function outputOptions() {
+			return this._outputOptions;
+		},
+		"MainTemplate.outputOptions is deprecated (use Compilation.outputOptions instead)",
+		"DEP_WEBPACK_MAIN_TEMPLATE_OUTPUT_OPTIONS"
+	)
+});
 
-	updateHash(hash) {
-		hash.update("maintemplate");
-		hash.update("3");
-		hash.update(this.outputOptions.publicPath + "");
-		this.hooks.hash.call(hash);
-	}
-
-	updateHashForChunk(hash, chunk) {
-		this.updateHash(hash);
-		this.hooks.hashForChunk.call(hash, chunk);
-	}
-
-	useChunkHash(chunk) {
-		const paths = this.hooks.globalHashPaths.call([]);
-		return !this.hooks.globalHash.call(chunk, paths);
-	}
-};
+module.exports = MainTemplate;
diff --git a/lib/ManifestPlugin.js b/lib/ManifestPlugin.js
new file mode 100644
index 00000000000..170f37cbab3
--- /dev/null
+++ b/lib/ManifestPlugin.js
@@ -0,0 +1,244 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Haijie Xie @hai-x
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const Compilation = require("./Compilation");
+const HotUpdateChunk = require("./HotUpdateChunk");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Chunk").ChunkName} ChunkName */
+/** @typedef {import("./Chunk").ChunkId} ChunkId */
+/** @typedef {import("./Compilation").Asset} Asset */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+
+/** @typedef {import("../declarations/plugins/ManifestPlugin").ManifestPluginOptions} ManifestPluginOptions */
+/** @typedef {import("../declarations/plugins/ManifestPlugin").ManifestObject} ManifestObject */
+/** @typedef {import("../declarations/plugins/ManifestPlugin").ManifestEntrypoint} ManifestEntrypoint */
+/** @typedef {import("../declarations/plugins/ManifestPlugin").ManifestItem} ManifestItem */
+
+/** @typedef {(item: ManifestItem) => boolean} Filter */
+/** @typedef {(manifest: ManifestObject) => ManifestObject} Generate */
+/** @typedef {(manifest: ManifestObject) => string} Serialize */
+
+const PLUGIN_NAME = "ManifestPlugin";
+
+/**
+ * @param {string} filename filename
+ * @returns {string} extname
+ */
+const extname = (filename) => {
+	const replaced = filename.replace(/\?.*/, "");
+	const split = replaced.split(".");
+	const last = split.pop();
+	if (!last) return "";
+	return last && /^(?:gz|br|map)$/i.test(last)
+		? `${split.pop()}.${last}`
+		: last;
+};
+
+const DEFAULT_PREFIX = "[publicpath]";
+const DEFAULT_FILENAME = "manifest.json";
+
+class ManifestPlugin {
+	/**
+	 * @param {ManifestPluginOptions} options options
+	 */
+	constructor(options = {}) {
+		/** @type {ManifestPluginOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/ManifestPlugin.json"),
+				this.options,
+				{
+					name: "ManifestPlugin",
+					baseDataPath: "options"
+				},
+				(options) => require("../schemas/plugins/ManifestPlugin.check")(options)
+			);
+		});
+
+		const entrypoints = this.options.entrypoints || true;
+		const serialize =
+			this.options.serialize ||
+			((manifest) => JSON.stringify(manifest, null, 2));
+
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.hooks.processAssets.tap(
+				{
+					name: PLUGIN_NAME,
+					stage: Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
+				},
+				() => {
+					const hashDigestLength = compilation.outputOptions.hashDigestLength;
+					const publicPath = compilation.getPath(
+						compilation.outputOptions.publicPath
+					);
+
+					/**
+					 * @param {string | string[]} value value
+					 * @returns {RegExp} regexp to remove hash
+					 */
+					const createHashRegExp = (value) =>
+						new RegExp(
+							`(?:\\.${Array.isArray(value) ? `(${value.join("|")})` : value})(?=\\.)`,
+							"gi"
+						);
+
+					/**
+					 * @param {string} name name
+					 * @param {AssetInfo | null} info asset info
+					 * @returns {string} hash removed name
+					 */
+					const removeHash = (name, info) => {
+						// Handles hashes that match configured `hashDigestLength`
+						// i.e. index.XXXX.html -> index.html (html-webpack-plugin)
+						if (hashDigestLength <= 0) return name;
+						const reg = createHashRegExp(`[a-f0-9]{${hashDigestLength},32}`);
+						return name.replace(reg, "");
+					};
+
+					/**
+					 * @param {Chunk} chunk chunk
+					 * @returns {ChunkName | ChunkId} chunk name or chunk id
+					 */
+					const getName = (chunk) => {
+						if (chunk.name) return chunk.name;
+
+						return chunk.id;
+					};
+
+					/** @type {ManifestObject} */
+					let manifest = {};
+
+					if (entrypoints) {
+						/** @type {ManifestObject["entrypoints"]} */
+						const entrypoints = {};
+
+						for (const [name, entrypoint] of compilation.entrypoints) {
+							/** @type {string[]} */
+							const imports = [];
+
+							for (const chunk of entrypoint.chunks) {
+								for (const file of chunk.files) {
+									const name = getName(chunk);
+
+									imports.push(name ? `${name}.${extname(file)}` : file);
+								}
+							}
+
+							/** @type {ManifestEntrypoint} */
+							const item = { imports };
+							const parents = entrypoint
+								.getParents()
+								.map((item) => /** @type {string} */ (item.name));
+
+							if (parents.length > 0) {
+								item.parents = parents;
+							}
+
+							entrypoints[name] = item;
+						}
+
+						manifest.entrypoints = entrypoints;
+					}
+
+					/** @type {ManifestObject["assets"]} */
+					const assets = {};
+
+					/** @type {Set} */
+					const added = new Set();
+
+					/**
+					 * @param {string} file file
+					 * @param {string=} usedName usedName
+					 * @returns {void}
+					 */
+					const handleFile = (file, usedName) => {
+						if (added.has(file)) return;
+						added.add(file);
+
+						const asset = compilation.getAsset(file);
+						if (!asset) return;
+						const sourceFilename = asset.info.sourceFilename;
+						const name =
+							usedName ||
+							sourceFilename ||
+							// Fallback for unofficial plugins, just remove hash from filename
+							removeHash(file, asset.info);
+
+						const prefix = (this.options.prefix || DEFAULT_PREFIX).replace(
+							/\[publicpath\]/gi,
+							() => (publicPath === "auto" ? "/" : publicPath)
+						);
+						/** @type {ManifestItem} */
+						const item = { file: prefix + file };
+
+						if (sourceFilename) {
+							item.src = sourceFilename;
+						}
+
+						if (this.options.filter) {
+							const needKeep = this.options.filter(item);
+
+							if (!needKeep) {
+								return;
+							}
+						}
+
+						assets[name] = item;
+					};
+
+					for (const chunk of compilation.chunks) {
+						if (chunk instanceof HotUpdateChunk) continue;
+
+						for (const auxiliaryFile of chunk.auxiliaryFiles) {
+							handleFile(auxiliaryFile);
+						}
+
+						const name = getName(chunk);
+
+						for (const file of chunk.files) {
+							handleFile(file, name ? `${name}.${extname(file)}` : file);
+						}
+					}
+
+					for (const asset of compilation.getAssets()) {
+						if (asset.info.hotModuleReplacement) {
+							continue;
+						}
+
+						handleFile(asset.name);
+					}
+
+					manifest.assets = assets;
+
+					if (this.options.generate) {
+						manifest = this.options.generate(manifest);
+					}
+
+					compilation.emitAsset(
+						this.options.filename || DEFAULT_FILENAME,
+						new RawSource(serialize(manifest)),
+						{ manifest: true }
+					);
+				}
+			);
+		});
+	}
+}
+
+module.exports = ManifestPlugin;
diff --git a/lib/MemoryOutputFileSystem.js b/lib/MemoryOutputFileSystem.js
deleted file mode 100644
index 8476148882a..00000000000
--- a/lib/MemoryOutputFileSystem.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-module.exports = require("memory-fs");
diff --git a/lib/Module.js b/lib/Module.js
index 4341414aca4..cb16d4f56b8 100644
--- a/lib/Module.js
+++ b/lib/Module.js
@@ -2,384 +2,1380 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const util = require("util");
-
+const ChunkGraph = require("./ChunkGraph");
 const DependenciesBlock = require("./DependenciesBlock");
-const ModuleReason = require("./ModuleReason");
-const SortableSet = require("./util/SortableSet");
-const Template = require("./Template");
+const ModuleGraph = require("./ModuleGraph");
+const {
+	JAVASCRIPT_TYPE,
+	UNKNOWN_TYPE
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_TYPES } = require("./ModuleSourceTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const { first } = require("./util/SetHelpers");
+const { compareChunksById } = require("./util/comparators");
+const makeSerializable = require("./util/makeSerializable");
 
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
 /** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./ChunkGroup")} ChunkGroup */
+/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compilation").FileSystemDependencies} FileSystemDependencies */
+/** @typedef {import("./Compilation").UnsafeCacheData} UnsafeCacheData */
+/** @typedef {import("./ConcatenationScope")} ConcatenationScope */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./DependencyTemplate").CssData} CssData */
+/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
+/** @typedef {import("./ModuleSourceTypeConstants").AllTypes} AllTypes */
+/** @typedef {import("./FileSystemInfo")} FileSystemInfo */
+/** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */
+/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
+/** @typedef {import("./ModuleTypeConstants").ModuleTypes} ModuleTypes */
+/** @typedef {import("./ModuleGraph").OptimizationBailouts} OptimizationBailouts */
+/** @typedef {import("./ModuleProfile")} ModuleProfile */
+/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
 /** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/**
+ * @template T
+ * @typedef {import("./InitFragment")} InitFragment
+ */
+/** @typedef {import("./WebpackError")} WebpackError */
+/** @typedef {import("./json/JsonData")} JsonData */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+/**
+ * @template T
+ * @typedef {import("./util/SortableSet")} SortableSet
+ */
+/** @typedef {"namespace" | "default-only" | "default-with-named" | "dynamic"} ExportsType */
+
+/**
+ * @template T
+ * @typedef {import("./util/LazySet")} LazySet
+ */
+
+/**
+ * @typedef {object} SourceContext
+ * @property {DependencyTemplates} dependencyTemplates the dependency templates
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
+ * @property {ModuleGraph} moduleGraph the module graph
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ * @property {RuntimeSpec} runtime the runtimes code should be generated for
+ * @property {string=} type the type of source that should be generated
+ */
+
+/** @typedef {AllTypes} KnownSourceType */
+/** @typedef {KnownSourceType | string} SourceType */
+/** @typedef {ReadonlySet} SourceTypes */
+
+/** @typedef {ReadonlySet} BasicSourceTypes */
+
+// TODO webpack 6: compilation will be required in CodeGenerationContext
+/**
+ * @typedef {object} CodeGenerationContext
+ * @property {DependencyTemplates} dependencyTemplates the dependency templates
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
+ * @property {ModuleGraph} moduleGraph the module graph
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ * @property {RuntimeSpec} runtime the runtimes code should be generated for
+ * @property {RuntimeSpec[]} runtimes all runtimes code should be generated for
+ * @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
+ * @property {CodeGenerationResults | undefined} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that)
+ * @property {Compilation=} compilation the compilation
+ * @property {SourceTypes=} sourceTypes source types
+ */
+
+/**
+ * @typedef {object} ConcatenationBailoutReasonContext
+ * @property {ModuleGraph} moduleGraph the module graph
+ * @property {ChunkGraph} chunkGraph the chunk graph
+ */
+
+/** @typedef {Set} RuntimeRequirements */
+/** @typedef {ReadonlySet} ReadOnlyRuntimeRequirements */
+
+/**
+ * @typedef {object} AllCodeGenerationSchemas
+ * @property {Set} topLevelDeclarations top level declarations for javascript modules
+ * @property {InitFragment[]} chunkInitFragments chunk init fragments for javascript modules
+ * @property {{ javascript?: string, ["css-url"]?: string }} url url for css and javascript modules
+ * @property {string} filename a filename for asset modules
+ * @property {AssetInfo} assetInfo an asset info for asset modules
+ * @property {string} fullContentHash a full content hash for asset modules
+ * @property {[{ shareScope: string, initStage: number, init: string }]} share-init share-init for modules federation
+ */
+
+/**
+ * @template {string} K
+ * @typedef {K extends keyof AllCodeGenerationSchemas ? AllCodeGenerationSchemas[K] : EXPECTED_ANY} CodeGenValue
+ */
+
+/**
+ * @typedef {object} CodeGenMapOverloads
+ * @property {(key: K) => CodeGenValue | undefined} get
+ * @property {(key: K, value: CodeGenValue) => CodeGenerationResultData} set
+ * @property {(key: K) => boolean} has
+ * @property {(key: K) => boolean} delete
+ */
+
+/**
+ * @typedef {Omit, "get" | "set" | "has" | "delete"> & CodeGenMapOverloads} CodeGenerationResultData
+ */
+
+/** @typedef {Map} Sources */
+
+/**
+ * @typedef {object} CodeGenerationResult
+ * @property {Sources} sources the resulting sources for all source types
+ * @property {CodeGenerationResultData=} data the resulting data for all source types
+ * @property {ReadOnlyRuntimeRequirements | null} runtimeRequirements the runtime requirements
+ * @property {string=} hash a hash of the code generation result (will be automatically calculated from sources and runtimeRequirements if not provided)
+ */
+
+/**
+ * @typedef {object} LibIdentOptions
+ * @property {string} context absolute context path to which lib ident is relative to
+ * @property {AssociatedObjectForCache=} associatedObjectForCache object for caching
+ */
+
+/**
+ * @typedef {object} KnownBuildMeta
+ * @property {("default" | "namespace" | "flagged" | "dynamic")=} exportsType
+ * @property {(false | "redirect" | "redirect-warn")=} defaultObject
+ * @property {boolean=} strictHarmonyModule
+ * @property {boolean=} treatAsCommonJs
+ * @property {boolean=} async
+ * @property {boolean=} sideEffectFree
+ * @property {boolean=} isCSSModule
+ * @property {Record=} jsIncompatibleExports
+ * @property {Map>=} exportsFinalNameByRuntime
+ * @property {Map=} exportsSourceByRuntime
+ */
+
+/**
+ * @typedef {object} KnownBuildInfo
+ * @property {boolean=} cacheable
+ * @property {boolean=} parsed
+ * @property {boolean=} strict
+ * @property {string=} moduleArgument using in AMD
+ * @property {string=} exportsArgument using in AMD
+ * @property {string=} moduleConcatenationBailout using in CommonJs
+ * @property {boolean=} needCreateRequire using in APIPlugin
+ * @property {string=} resourceIntegrity using in HttpUriPlugin
+ * @property {FileSystemDependencies=} fileDependencies using in NormalModule
+ * @property {FileSystemDependencies=} contextDependencies using in NormalModule
+ * @property {FileSystemDependencies=} missingDependencies using in NormalModule
+ * @property {FileSystemDependencies=} buildDependencies using in NormalModule
+ * @property {ValueCacheVersions=} valueDependencies using in NormalModule
+ * @property {Record=} assets using in NormalModule
+ * @property {Map=} assetsInfo using in NormalModule
+ * @property {string=} hash using in NormalModule
+ * @property {(Snapshot | null)=} snapshot using in ContextModule
+ * @property {string=} fullContentHash for assets modules
+ * @property {string=} filename for assets modules
+ * @property {boolean=} dataUrl for assets modules
+ * @property {AssetInfo=} assetInfo for assets modules
+ * @property {boolean=} javascriptModule for external modules
+ * @property {boolean=} active for lazy compilation modules
+ * @property {CssData=} cssData for css modules
+ * @property {JsonData=} jsonData for json modules
+ * @property {Set=} topLevelDeclarations top level declaration names
+ */
+
+/** @typedef {string | Set} ValueCacheVersion */
+/** @typedef {Map} ValueCacheVersions */
+
+/**
+ * @typedef {object} NeedBuildContext
+ * @property {Compilation} compilation
+ * @property {FileSystemInfo} fileSystemInfo
+ * @property {ValueCacheVersions} valueCacheVersions
+ */
+
+/** @typedef {(err?: WebpackError | null, needBuild?: boolean) => void} NeedBuildCallback */
+
+/** @typedef {(err?: WebpackError) => void} BuildCallback */
+
+/** @typedef {KnownBuildMeta & Record} BuildMeta */
+/** @typedef {KnownBuildInfo & Record} BuildInfo */
+
+/**
+ * @typedef {object} FactoryMeta
+ * @property {boolean=} sideEffectFree
+ */
 
 const EMPTY_RESOLVE_OPTIONS = {};
 
 let debugId = 1000;
 
-const sortById = (a, b) => {
-	return a.id - b.id;
-};
+/** @type {SourceTypes} */
+const DEFAULT_TYPES_UNKNOWN = new Set([UNKNOWN_TYPE]);
+
+const deprecatedNeedRebuild = util.deprecate(
+	/**
+	 * @param {Module} module the module
+	 * @param {NeedBuildContext} context context info
+	 * @returns {boolean} true, when rebuild is needed
+	 */
+	(module, context) =>
+		module.needRebuild(
+			context.fileSystemInfo.getDeprecatedFileTimestamps(),
+			context.fileSystemInfo.getDeprecatedContextTimestamps()
+		),
+	"Module.needRebuild is deprecated in favor of Module.needBuild",
+	"DEP_WEBPACK_MODULE_NEED_REBUILD"
+);
 
-const sortByDebugId = (a, b) => {
-	return a.debugId - b.debugId;
-};
+/** @typedef {string} LibIdent */
+/** @typedef {string} NameForCondition */
 
 /** @typedef {(requestShortener: RequestShortener) => string} OptimizationBailoutFunction */
 
 class Module extends DependenciesBlock {
-	constructor(type, context = null) {
+	/**
+	 * @param {ModuleTypes | ""} type the module type, when deserializing the type is not known and is an empty string
+	 * @param {(string | null)=} context an optional context
+	 * @param {(string | null)=} layer an optional layer in which the module is
+	 */
+	constructor(type, context = null, layer = null) {
 		super();
-		/** @type {string} */
+
+		/** @type {ModuleTypes} */
 		this.type = type;
-		/** @type {string} */
+		/** @type {string | null} */
 		this.context = context;
+		/** @type {string | null} */
+		this.layer = layer;
+		/** @type {boolean} */
+		this.needId = true;
 
 		// Unique Id
 		/** @type {number} */
 		this.debugId = debugId++;
 
-		// Hash
-		/** @type {string} */
-		this.hash = undefined;
-		/** @type {string} */
-		this.renderedHash = undefined;
-
 		// Info from Factory
-		/** @type {object} */
+		/** @type {ResolveOptions | undefined} */
 		this.resolveOptions = EMPTY_RESOLVE_OPTIONS;
-		/** @type {object} */
-		this.factoryMeta = {};
+		/** @type {FactoryMeta | undefined} */
+		this.factoryMeta = undefined;
+		// TODO refactor this -> options object filled from Factory
+		// TODO webpack 6: use an enum
+		/** @type {boolean} */
+		this.useSourceMap = false;
+		/** @type {boolean} */
+		this.useSimpleSourceMap = false;
 
+		// Is in hot context, i.e. HotModuleReplacementPlugin.js enabled
+		// TODO do we need hot here?
+		/** @type {boolean} */
+		this.hot = false;
 		// Info from Build
-		/** @type {Error[]} */
-		this.warnings = [];
-		/** @type {Error[]} */
-		this.errors = [];
-		/** @type {object} */
+		/** @type {WebpackError[] | undefined} */
+		this._warnings = undefined;
+		/** @type {WebpackError[] | undefined} */
+		this._errors = undefined;
+		/** @type {BuildMeta | undefined} */
 		this.buildMeta = undefined;
-		/** @type {object} */
+		/** @type {BuildInfo | undefined} */
 		this.buildInfo = undefined;
+		/** @type {Dependency[] | undefined} */
+		this.presentationalDependencies = undefined;
+		/** @type {Dependency[] | undefined} */
+		this.codeGenerationDependencies = undefined;
+	}
 
-		// Graph (per Compilation)
-		/** @type {ModuleReason[]} */
-		this.reasons = [];
-		/** @type {SortableSet} */
-		this._chunks = new SortableSet(undefined, sortById);
+	// TODO remove in webpack 6
+	// BACKWARD-COMPAT START
+	/**
+	 * @deprecated
+	 * @returns {ModuleId | null} module id
+	 */
+	get id() {
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.id",
+			"DEP_WEBPACK_MODULE_ID"
+		).getModuleId(this);
+	}
 
-		// Info from Compilation (per Compilation)
-		/** @type {number|string} */
-		this.id = null;
-		/** @type {number} */
-		this.index = null;
-		/** @type {number} */
-		this.index2 = null;
-		/** @type {number} */
-		this.depth = null;
-		/** @type {Module} */
-		this.issuer = null;
-		/** @type {undefined | object} */
-		this.profile = undefined;
-		/** @type {boolean} */
-		this.prefetched = false;
-		/** @type {boolean} */
-		this.built = false;
+	/**
+	 * @deprecated
+	 * @param {ModuleId} value value
+	 */
+	set id(value) {
+		if (value === "") {
+			this.needId = false;
+			return;
+		}
+		ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.id",
+			"DEP_WEBPACK_MODULE_ID"
+		).setModuleId(this, value);
+	}
 
-		// Info from Optimization (per Compilation)
-		/** @type {null | boolean} */
-		this.used = null;
-		/** @type {false | true | string[]} */
-		this.usedExports = null;
-		/** @type {(string | OptimizationBailoutFunction)[]} */
-		this.optimizationBailout = [];
+	/**
+	 * @deprecated
+	 * @returns {string} the hash of the module
+	 */
+	get hash() {
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.hash",
+			"DEP_WEBPACK_MODULE_HASH"
+		).getModuleHash(this, undefined);
+	}
 
-		// delayed operations
-		/** @type {undefined | {oldChunk: Chunk, newChunks: Chunk[]}[] } */
-		this._rewriteChunkInReasons = undefined;
+	/**
+	 * @deprecated
+	 * @returns {string} the shortened hash of the module
+	 */
+	get renderedHash() {
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.renderedHash",
+			"DEP_WEBPACK_MODULE_RENDERED_HASH"
+		).getRenderedModuleHash(this, undefined);
+	}
 
-		/** @type {boolean} */
-		this.useSourceMap = false;
+	/**
+	 * @deprecated
+	 * @returns {ModuleProfile | undefined} module profile
+	 */
+	get profile() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.profile",
+			"DEP_WEBPACK_MODULE_PROFILE"
+		).getProfile(this);
+	}
 
-		// info from build
-		this._source = null;
+	/**
+	 * @deprecated
+	 * @param {ModuleProfile | undefined} value module profile
+	 */
+	set profile(value) {
+		ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.profile",
+			"DEP_WEBPACK_MODULE_PROFILE"
+		).setProfile(this, value);
 	}
 
-	get exportsArgument() {
-		return (this.buildInfo && this.buildInfo.exportsArgument) || "exports";
+	/**
+	 * @deprecated
+	 * @returns {number | null} the pre order index
+	 */
+	get index() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.index",
+			"DEP_WEBPACK_MODULE_INDEX"
+		).getPreOrderIndex(this);
 	}
 
-	get moduleArgument() {
-		return (this.buildInfo && this.buildInfo.moduleArgument) || "module";
+	/**
+	 * @deprecated
+	 * @param {number} value the pre order index
+	 */
+	set index(value) {
+		ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.index",
+			"DEP_WEBPACK_MODULE_INDEX"
+		).setPreOrderIndex(this, value);
 	}
 
-	disconnect() {
-		this.hash = undefined;
-		this.renderedHash = undefined;
+	/**
+	 * @deprecated
+	 * @returns {number | null} the post order index
+	 */
+	get index2() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.index2",
+			"DEP_WEBPACK_MODULE_INDEX2"
+		).getPostOrderIndex(this);
+	}
 
-		this.reasons.length = 0;
-		this._rewriteChunkInReasons = undefined;
-		this._chunks.clear();
+	/**
+	 * @deprecated
+	 * @param {number} value the post order index
+	 */
+	set index2(value) {
+		ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.index2",
+			"DEP_WEBPACK_MODULE_INDEX2"
+		).setPostOrderIndex(this, value);
+	}
 
-		this.id = null;
-		this.index = null;
-		this.index2 = null;
-		this.depth = null;
-		this.issuer = null;
-		this.profile = undefined;
-		this.prefetched = false;
-		this.built = false;
+	/**
+	 * @deprecated
+	 * @returns {number | null} the depth
+	 */
+	get depth() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.depth",
+			"DEP_WEBPACK_MODULE_DEPTH"
+		).getDepth(this);
+	}
 
-		this.used = null;
-		this.usedExports = null;
-		this.optimizationBailout.length = 0;
-		super.disconnect();
+	/**
+	 * @deprecated
+	 * @param {number} value the depth
+	 */
+	set depth(value) {
+		ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.depth",
+			"DEP_WEBPACK_MODULE_DEPTH"
+		).setDepth(this, value);
 	}
 
-	unseal() {
-		this.id = null;
-		this.index = null;
-		this.index2 = null;
-		this.depth = null;
-		this._chunks.clear();
-		super.unseal();
+	/**
+	 * @deprecated
+	 * @returns {Module | null | undefined} issuer
+	 */
+	get issuer() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.issuer",
+			"DEP_WEBPACK_MODULE_ISSUER"
+		).getIssuer(this);
 	}
 
-	setChunks(chunks) {
-		this._chunks = new SortableSet(chunks, sortById);
+	/**
+	 * @deprecated
+	 * @param {Module | null} value issuer
+	 */
+	set issuer(value) {
+		ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.issuer",
+			"DEP_WEBPACK_MODULE_ISSUER"
+		).setIssuer(this, value);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {boolean | SortableSet | null} used exports
+	 */
+	get usedExports() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.usedExports",
+			"DEP_WEBPACK_MODULE_USED_EXPORTS"
+		).getUsedExports(this, undefined);
+	}
+
+	/**
+	 * @deprecated
+	 * @returns {OptimizationBailouts} list
+	 */
+	get optimizationBailout() {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.optimizationBailout",
+			"DEP_WEBPACK_MODULE_OPTIMIZATION_BAILOUT"
+		).getOptimizationBailout(this);
+	}
+
+	/**
+	 * @deprecated
+	 * @returns {boolean} true when optional, otherwise false
+	 */
+	get optional() {
+		return this.isOptional(
+			ModuleGraph.getModuleGraphForModule(
+				this,
+				"Module.optional",
+				"DEP_WEBPACK_MODULE_OPTIONAL"
+			)
+		);
+	}
+
+	/**
+	 * @deprecated
+	 * @param {Chunk} chunk the chunk
+	 * @returns {boolean} true, when the module was added
+	 */
 	addChunk(chunk) {
-		if (this._chunks.has(chunk)) return false;
-		this._chunks.add(chunk);
+		const chunkGraph = ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.addChunk",
+			"DEP_WEBPACK_MODULE_ADD_CHUNK"
+		);
+		if (chunkGraph.isModuleInChunk(this, chunk)) return false;
+		chunkGraph.connectChunkAndModule(chunk, this);
 		return true;
 	}
 
+	/**
+	 * @deprecated
+	 * @param {Chunk} chunk the chunk
+	 * @returns {void}
+	 */
 	removeChunk(chunk) {
-		if (this._chunks.delete(chunk)) {
-			chunk.removeModule(this);
-			return true;
-		}
-		return false;
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.removeChunk",
+			"DEP_WEBPACK_MODULE_REMOVE_CHUNK"
+		).disconnectChunkAndModule(chunk, this);
 	}
 
+	/**
+	 * @deprecated
+	 * @param {Chunk} chunk the chunk
+	 * @returns {boolean} true, when the module is in the chunk
+	 */
 	isInChunk(chunk) {
-		return this._chunks.has(chunk);
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.isInChunk",
+			"DEP_WEBPACK_MODULE_IS_IN_CHUNK"
+		).isModuleInChunk(this, chunk);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {boolean} true when is entry module, otherwise false
+	 */
 	isEntryModule() {
-		for (const chunk of this._chunks) {
-			if (chunk.entryModule === this) return true;
-		}
-		return false;
-	}
-
-	get optional() {
-		return (
-			this.reasons.length > 0 &&
-			this.reasons.every(r => r.dependency && r.dependency.optional)
-		);
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.isEntryModule",
+			"DEP_WEBPACK_MODULE_IS_ENTRY_MODULE"
+		).isEntryModule(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {Chunk[]} chunks
+	 */
 	getChunks() {
-		return Array.from(this._chunks);
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.getChunks",
+			"DEP_WEBPACK_MODULE_GET_CHUNKS"
+		).getModuleChunks(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {number} number of chunks
+	 */
 	getNumberOfChunks() {
-		return this._chunks.size;
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.getNumberOfChunks",
+			"DEP_WEBPACK_MODULE_GET_NUMBER_OF_CHUNKS"
+		).getNumberOfModuleChunks(this);
 	}
 
+	/**
+	 * @deprecated
+	 * @returns {Iterable} chunks
+	 */
 	get chunksIterable() {
-		return this._chunks;
-	}
-
-	hasEqualsChunks(otherModule) {
-		if (this._chunks.size !== otherModule._chunks.size) return false;
-		this._chunks.sortWith(sortByDebugId);
-		otherModule._chunks.sortWith(sortByDebugId);
-		const a = this._chunks[Symbol.iterator]();
-		const b = otherModule._chunks[Symbol.iterator]();
-		// eslint-disable-next-line no-constant-condition
-		while (true) {
-			const aItem = a.next();
-			const bItem = b.next();
-			if (aItem.done) return true;
-			if (aItem.value !== bItem.value) return false;
-		}
+		return ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.chunksIterable",
+			"DEP_WEBPACK_MODULE_CHUNKS_ITERABLE"
+		).getOrderedModuleChunksIterable(this, compareChunksById);
 	}
 
-	addReason(module, dependency, explanation) {
-		this.reasons.push(new ModuleReason(module, dependency, explanation));
+	/**
+	 * @deprecated
+	 * @param {string} exportName a name of an export
+	 * @returns {boolean | null} true, if the export is provided why the module.
+	 * null, if it's unknown.
+	 * false, if it's not provided.
+	 */
+	isProvided(exportName) {
+		return ModuleGraph.getModuleGraphForModule(
+			this,
+			"Module.usedExports",
+			"DEP_WEBPACK_MODULE_USED_EXPORTS"
+		).isExportProvided(this, exportName);
 	}
+	// BACKWARD-COMPAT END
 
-	removeReason(module, dependency) {
-		for (let i = 0; i < this.reasons.length; i++) {
-			let r = this.reasons[i];
-			if (r.module === module && r.dependency === dependency) {
-				this.reasons.splice(i, 1);
-				return true;
+	/**
+	 * @returns {string} name of the exports argument
+	 */
+	get exportsArgument() {
+		return (this.buildInfo && this.buildInfo.exportsArgument) || "exports";
+	}
+
+	/**
+	 * @returns {string} name of the module argument
+	 */
+	get moduleArgument() {
+		return (this.buildInfo && this.buildInfo.moduleArgument) || "module";
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {boolean | undefined} strict the importing module is strict
+	 * @returns {ExportsType} export type
+	 * "namespace": Exports is already a namespace object. namespace = exports.
+	 * "dynamic": Check at runtime if __esModule is set. When set: namespace = { ...exports, default: exports }. When not set: namespace = { default: exports }.
+	 * "default-only": Provide a namespace object with only default export. namespace = { default: exports }
+	 * "default-with-named": Provide a namespace object with named and default export. namespace = { ...exports, default: exports }
+	 */
+	getExportsType(moduleGraph, strict) {
+		switch (this.buildMeta && this.buildMeta.exportsType) {
+			case "flagged":
+				return strict ? "default-with-named" : "namespace";
+			case "namespace":
+				return "namespace";
+			case "default":
+				switch (/** @type {BuildMeta} */ (this.buildMeta).defaultObject) {
+					case "redirect":
+						return "default-with-named";
+					case "redirect-warn":
+						return strict ? "default-only" : "default-with-named";
+					default:
+						return "default-only";
+				}
+			case "dynamic": {
+				if (strict) return "default-with-named";
+				// Try to figure out value of __esModule by following reexports
+				const handleDefault = () => {
+					switch (/** @type {BuildMeta} */ (this.buildMeta).defaultObject) {
+						case "redirect":
+						case "redirect-warn":
+							return "default-with-named";
+						default:
+							return "default-only";
+					}
+				};
+				const exportInfo = moduleGraph.getReadOnlyExportInfo(
+					this,
+					"__esModule"
+				);
+				if (exportInfo.provided === false) {
+					return handleDefault();
+				}
+				const target = exportInfo.getTarget(moduleGraph);
+				if (
+					!target ||
+					!target.export ||
+					target.export.length !== 1 ||
+					target.export[0] !== "__esModule"
+				) {
+					return "dynamic";
+				}
+				switch (
+					target.module.buildMeta &&
+					target.module.buildMeta.exportsType
+				) {
+					case "flagged":
+					case "namespace":
+						return "namespace";
+					case "default":
+						return handleDefault();
+					default:
+						return "dynamic";
+				}
 			}
+			default:
+				return strict ? "default-with-named" : "dynamic";
 		}
-		return false;
 	}
 
-	hasReasonForChunk(chunk) {
-		if (this._rewriteChunkInReasons) {
-			for (const operation of this._rewriteChunkInReasons) {
-				this._doRewriteChunkInReasons(operation.oldChunk, operation.newChunks);
-			}
-			this._rewriteChunkInReasons = undefined;
+	/**
+	 * @param {Dependency} presentationalDependency dependency being tied to module.
+	 * This is a Dependency without edge in the module graph. It's only for presentation.
+	 * @returns {void}
+	 */
+	addPresentationalDependency(presentationalDependency) {
+		if (this.presentationalDependencies === undefined) {
+			this.presentationalDependencies = [];
 		}
-		for (let i = 0; i < this.reasons.length; i++) {
-			if (this.reasons[i].hasChunk(chunk)) return true;
+		this.presentationalDependencies.push(presentationalDependency);
+	}
+
+	/**
+	 * @param {Dependency} codeGenerationDependency dependency being tied to module.
+	 * This is a Dependency where the code generation result of the referenced module is needed during code generation.
+	 * The Dependency should also be added to normal dependencies via addDependency.
+	 * @returns {void}
+	 */
+	addCodeGenerationDependency(codeGenerationDependency) {
+		if (this.codeGenerationDependencies === undefined) {
+			this.codeGenerationDependencies = [];
 		}
-		return false;
+		this.codeGenerationDependencies.push(codeGenerationDependency);
 	}
 
-	hasReasons() {
-		return this.reasons.length > 0;
+	/**
+	 * Removes all dependencies and blocks
+	 * @returns {void}
+	 */
+	clearDependenciesAndBlocks() {
+		if (this.presentationalDependencies !== undefined) {
+			this.presentationalDependencies.length = 0;
+		}
+		if (this.codeGenerationDependencies !== undefined) {
+			this.codeGenerationDependencies.length = 0;
+		}
+		super.clearDependenciesAndBlocks();
 	}
 
-	rewriteChunkInReasons(oldChunk, newChunks) {
-		// This is expensive. Delay operation until we really need the data
-		if (this._rewriteChunkInReasons === undefined) {
-			this._rewriteChunkInReasons = [];
+	/**
+	 * @param {WebpackError} warning the warning
+	 * @returns {void}
+	 */
+	addWarning(warning) {
+		if (this._warnings === undefined) {
+			this._warnings = [];
 		}
-		this._rewriteChunkInReasons.push({
-			oldChunk,
-			newChunks
-		});
+		this._warnings.push(warning);
+	}
+
+	/**
+	 * @returns {Iterable | undefined} list of warnings if any
+	 */
+	getWarnings() {
+		return this._warnings;
 	}
 
-	_doRewriteChunkInReasons(oldChunk, newChunks) {
-		for (let i = 0; i < this.reasons.length; i++) {
-			this.reasons[i].rewriteChunks(oldChunk, newChunks);
+	/**
+	 * @returns {number} number of warnings
+	 */
+	getNumberOfWarnings() {
+		return this._warnings !== undefined ? this._warnings.length : 0;
+	}
+
+	/**
+	 * @param {WebpackError} error the error
+	 * @returns {void}
+	 */
+	addError(error) {
+		if (this._errors === undefined) {
+			this._errors = [];
 		}
+		this._errors.push(error);
+	}
+
+	/**
+	 * @returns {Iterable | undefined} list of errors if any
+	 */
+	getErrors() {
+		return this._errors;
 	}
 
-	isUsed(exportName) {
-		if (!exportName) return this.used !== false;
-		if (this.used === null || this.usedExports === null) return exportName;
-		if (!this.used) return false;
-		if (!this.usedExports) return false;
-		if (this.usedExports === true) return exportName;
-		let idx = this.usedExports.indexOf(exportName);
-		if (idx < 0) return false;
+	/**
+	 * @returns {number} number of errors
+	 */
+	getNumberOfErrors() {
+		return this._errors !== undefined ? this._errors.length : 0;
+	}
 
-		// Mangle export name if possible
-		if (this.isProvided(exportName)) {
-			if (this.buildMeta.exportsType === "namespace") {
-				return Template.numberToIdentifer(idx);
-			}
+	/**
+	 * removes all warnings and errors
+	 * @returns {void}
+	 */
+	clearWarningsAndErrors() {
+		if (this._warnings !== undefined) {
+			this._warnings.length = 0;
+		}
+		if (this._errors !== undefined) {
+			this._errors.length = 0;
+		}
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @returns {boolean} true, if the module is optional
+	 */
+	isOptional(moduleGraph) {
+		let hasConnections = false;
+		for (const r of moduleGraph.getIncomingConnections(this)) {
 			if (
-				this.buildMeta.exportsType === "named" &&
-				!this.usedExports.includes("default")
+				!r.dependency ||
+				!r.dependency.optional ||
+				!r.isTargetActive(undefined)
 			) {
-				return Template.numberToIdentifer(idx);
+				return false;
 			}
+			hasConnections = true;
 		}
-		return exportName;
+		return hasConnections;
 	}
 
-	isProvided(exportName) {
-		if (!Array.isArray(this.buildMeta.providedExports)) return null;
-		return this.buildMeta.providedExports.includes(exportName);
+	/**
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {Chunk} chunk a chunk
+	 * @param {Chunk=} ignoreChunk chunk to be ignored
+	 * @returns {boolean} true, if the module is accessible from "chunk" when ignoring "ignoreChunk"
+	 */
+	isAccessibleInChunk(chunkGraph, chunk, ignoreChunk) {
+		// Check if module is accessible in ALL chunk groups
+		for (const chunkGroup of chunk.groupsIterable) {
+			if (!this.isAccessibleInChunkGroup(chunkGraph, chunkGroup)) return false;
+		}
+		return true;
 	}
 
+	/**
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @param {ChunkGroup} chunkGroup a chunk group
+	 * @param {Chunk=} ignoreChunk chunk to be ignored
+	 * @returns {boolean} true, if the module is accessible from "chunkGroup" when ignoring "ignoreChunk"
+	 */
+	isAccessibleInChunkGroup(chunkGraph, chunkGroup, ignoreChunk) {
+		const queue = new Set([chunkGroup]);
+
+		// Check if module is accessible from all items of the queue
+		queueFor: for (const cg of queue) {
+			// 1. If module is in one of the chunks of the group we can continue checking the next items
+			//    because it's accessible.
+			for (const chunk of cg.chunks) {
+				if (chunk !== ignoreChunk && chunkGraph.isModuleInChunk(this, chunk)) {
+					continue queueFor;
+				}
+			}
+			// 2. If the chunk group is initial, we can break here because it's not accessible.
+			if (chunkGroup.isInitial()) return false;
+			// 3. Enqueue all parents because it must be accessible from ALL parents
+			for (const parent of chunkGroup.parentsIterable) queue.add(parent);
+		}
+		// When we processed through the whole list and we didn't bailout, the module is accessible
+		return true;
+	}
+
+	/**
+	 * @param {Chunk} chunk a chunk
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {boolean} true, if the module has any reason why "chunk" should be included
+	 */
+	hasReasonForChunk(chunk, moduleGraph, chunkGraph) {
+		// check for each reason if we need the chunk
+		for (const [
+			fromModule,
+			connections
+		] of moduleGraph.getIncomingConnectionsByOriginModule(this)) {
+			if (!connections.some((c) => c.isTargetActive(chunk.runtime))) continue;
+			for (const originChunk of chunkGraph.getModuleChunksIterable(
+				/** @type {Module} */ (fromModule)
+			)) {
+				// return true if module this is not reachable from originChunk when ignoring chunk
+				if (!this.isAccessibleInChunk(chunkGraph, originChunk, chunk)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true if at least one other module depends on this module
+	 */
+	hasReasons(moduleGraph, runtime) {
+		for (const c of moduleGraph.getIncomingConnections(this)) {
+			if (c.isTargetActive(runtime)) return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @returns {string} for debugging
+	 */
 	toString() {
-		return `Module[${this.id || this.debugId}]`;
+		return `Module[${this.debugId}: ${this.identifier()}]`;
 	}
 
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		callback(
+			null,
+			!this.buildMeta ||
+				this.needRebuild === Module.prototype.needRebuild ||
+				deprecatedNeedRebuild(this, context)
+		);
+	}
+
+	/**
+	 * @deprecated Use needBuild instead
+	 * @param {Map} fileTimestamps timestamps of files
+	 * @param {Map} contextTimestamps timestamps of directories
+	 * @returns {boolean} true, if the module needs a rebuild
+	 */
 	needRebuild(fileTimestamps, contextTimestamps) {
 		return true;
 	}
 
-	updateHash(hash) {
-		hash.update(`${this.id}`);
-		hash.update(JSON.stringify(this.usedExports));
-		super.updateHash(hash);
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(
+		hash,
+		context = {
+			chunkGraph: ChunkGraph.getChunkGraphForModule(
+				this,
+				"Module.updateHash",
+				"DEP_WEBPACK_MODULE_UPDATE_HASH"
+			),
+			runtime: undefined
+		}
+	) {
+		const { chunkGraph, runtime } = context;
+		hash.update(chunkGraph.getModuleGraphHash(this, runtime));
+		if (this.presentationalDependencies !== undefined) {
+			for (const dep of this.presentationalDependencies) {
+				dep.updateHash(hash, context);
+			}
+		}
+		super.updateHash(hash, context);
 	}
 
-	sortItems(sortChunks) {
-		super.sortItems();
-		if (sortChunks) this._chunks.sort();
-		this.reasons.sort((a, b) => {
-			if (a.module === b.module) return 0;
-			if (!a.module) return -1;
-			if (!b.module) return 1;
-			return sortById(a.module, b.module);
-		});
-		if (Array.isArray(this.usedExports)) {
-			this.usedExports.sort();
+	/**
+	 * @returns {void}
+	 */
+	invalidateBuild() {
+		// should be overridden to support this feature
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/**
+	 * @abstract
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		// Better override this method to return the correct types
+		if (this.source === Module.prototype.source) {
+			return DEFAULT_TYPES_UNKNOWN;
 		}
+		return JAVASCRIPT_TYPES;
 	}
 
-	unbuild() {
-		this.dependencies.length = 0;
-		this.blocks.length = 0;
-		this.variables.length = 0;
-		this.buildMeta = undefined;
-		this.buildInfo = undefined;
-		this.disconnect();
+	/**
+	 * Basic source types are high-level categories like javascript, css, webassembly, etc.
+	 * We only have built-in knowledge about the javascript basic type here; other basic types may be
+	 * added or changed over time by generators and do not need to be handled or detected here.
+	 *
+	 * Some modules, e.g. RemoteModule, may return non-basic source types like "remote" and "share-init"
+	 * from getSourceTypes(), but their generated output is still JavaScript, i.e. their basic type is JS.
+	 * @returns {BasicSourceTypes} types available (do not mutate)
+	 */
+	getSourceBasicTypes() {
+		return this.getSourceTypes();
+	}
+
+	/**
+	 * @abstract
+	 * @deprecated Use codeGeneration() instead
+	 * @param {DependencyTemplates} dependencyTemplates the dependency templates
+	 * @param {RuntimeTemplate} runtimeTemplate the runtime template
+	 * @param {SourceType=} type the type of source that should be generated
+	 * @returns {Source} generated source
+	 */
+	source(dependencyTemplates, runtimeTemplate, type = JAVASCRIPT_TYPE) {
+		if (this.codeGeneration === Module.prototype.codeGeneration) {
+			const AbstractMethodError = require("./AbstractMethodError");
+
+			throw new AbstractMethodError();
+		}
+		const chunkGraph = ChunkGraph.getChunkGraphForModule(
+			this,
+			"Module.source() is deprecated. Use Compilation.codeGenerationResults.getSource(module, runtime, type) instead",
+			"DEP_WEBPACK_MODULE_SOURCE"
+		);
+		/** @type {CodeGenerationContext} */
+		const codeGenContext = {
+			dependencyTemplates,
+			runtimeTemplate,
+			moduleGraph: chunkGraph.moduleGraph,
+			chunkGraph,
+			runtime: undefined,
+			runtimes: [],
+			codeGenerationResults: undefined
+		};
+		const sources = this.codeGeneration(codeGenContext).sources;
+
+		return /** @type {Source} */ (
+			type
+				? sources.get(type)
+				: sources.get(/** @type {SourceType} */ (first(this.getSourceTypes())))
+		);
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
+	libIdent(options) {
+		return null;
+	}
+
+	/**
+	 * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
+	 */
+	nameForCondition() {
+		return null;
 	}
 
-	get arguments() {
-		throw new Error("Module.arguments was removed, there is no replacement.");
+	/**
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(context) {
+		return `Module Concatenation is not implemented for ${this.constructor.name}`;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
+	 */
+	getSideEffectsConnectionState(moduleGraph) {
+		return true;
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration(context) {
+		// Best override this method
+		/** @type {Sources} */
+		const sources = new Map();
+		for (const type of this.getSourceTypes()) {
+			if (type !== UNKNOWN_TYPE) {
+				sources.set(
+					type,
+					this.source(
+						context.dependencyTemplates,
+						context.runtimeTemplate,
+						type
+					)
+				);
+			}
+		}
+		return {
+			sources,
+			runtimeRequirements: new Set([
+				RuntimeGlobals.module,
+				RuntimeGlobals.exports,
+				RuntimeGlobals.require
+			])
+		};
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk which condition should be checked
+	 * @param {Compilation} compilation the compilation
+	 * @returns {boolean} true if the module can be placed in the chunk
+	 */
+	chunkCondition(chunk, compilation) {
+		return true;
 	}
 
-	set arguments(value) {
-		throw new Error("Module.arguments was removed, there is no replacement.");
+	hasChunkCondition() {
+		return this.chunkCondition !== Module.prototype.chunkCondition;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Update the (cached) module with
+	 * the fresh module from the factory. Usually updates internal references
+	 * and properties.
+	 * @param {Module} module fresh module
+	 * @returns {void}
+	 */
+	updateCacheModule(module) {
+		this.type = module.type;
+		this.layer = module.layer;
+		this.context = module.context;
+		this.factoryMeta = module.factoryMeta;
+		this.resolveOptions = module.resolveOptions;
+	}
+
+	/**
+	 * Module should be unsafe cached. Get data that's needed for that.
+	 * This data will be passed to restoreFromUnsafeCache later.
+	 * @returns {UnsafeCacheData} cached data
+	 */
+	getUnsafeCacheData() {
+		return {
+			factoryMeta: this.factoryMeta,
+			resolveOptions: this.resolveOptions
+		};
+	}
+
+	/**
+	 * restore unsafe cache data
+	 * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
+	 * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
+	 */
+	_restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
+		this.factoryMeta = unsafeCacheData.factoryMeta;
+		this.resolveOptions = unsafeCacheData.resolveOptions;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Remove internal references to allow freeing some memory.
+	 */
+	cleanupForCache() {
+		this.factoryMeta = undefined;
+		this.resolveOptions = undefined;
+	}
+
+	/**
+	 * @returns {Source | null} the original source for the module before webpack transformation
+	 */
+	originalSource() {
+		return null;
+	}
+
+	/**
+	 * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
+	 * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
+	 * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
+	 * @param {FileSystemDependencies} buildDependencies set where build dependencies are added to
+	 */
+	addCacheDependencies(
+		fileDependencies,
+		contextDependencies,
+		missingDependencies,
+		buildDependencies
+	) {}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this.type);
+		write(this.layer);
+		write(this.context);
+		write(this.resolveOptions);
+		write(this.factoryMeta);
+		write(this.useSourceMap);
+		write(this.useSimpleSourceMap);
+		write(this.hot);
+		write(
+			this._warnings !== undefined && this._warnings.length === 0
+				? undefined
+				: this._warnings
+		);
+		write(
+			this._errors !== undefined && this._errors.length === 0
+				? undefined
+				: this._errors
+		);
+		write(this.buildMeta);
+		write(this.buildInfo);
+		write(this.presentationalDependencies);
+		write(this.codeGenerationDependencies);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+		this.type = read();
+		this.layer = read();
+		this.context = read();
+		this.resolveOptions = read();
+		this.factoryMeta = read();
+		this.useSourceMap = read();
+		this.useSimpleSourceMap = read();
+		this.hot = read();
+		this._warnings = read();
+		this._errors = read();
+		this.buildMeta = read();
+		this.buildInfo = read();
+		this.presentationalDependencies = read();
+		this.codeGenerationDependencies = read();
+		super.deserialize(context);
+	}
+
+	// TODO remove in webpack 6
+	/**
+	 * @deprecated In webpack 6, call getSourceBasicTypes() directly on the module instance instead of using this static method.
+	 * @param {Module} module the module
+	 * @returns {ReturnType} the source types of the module
+	 */
+	static getSourceBasicTypes(module) {
+		if (!(module instanceof Module)) {
+			// https://github.com/webpack/webpack/issues/20597
+			// fallback to javascript
+			return JAVASCRIPT_TYPES;
+		}
+		return module.getSourceBasicTypes();
 	}
 }
 
-// TODO remove in webpack 5
-Object.defineProperty(Module.prototype, "forEachChunk", {
-	configurable: false,
-	value: util.deprecate(function(fn) {
-		this._chunks.forEach(fn);
-	}, "Module.forEachChunk: Use for(const chunk of module.chunksIterable) instead")
-});
+makeSerializable(Module, "webpack/lib/Module");
 
-// TODO remove in webpack 5
-Object.defineProperty(Module.prototype, "mapChunks", {
-	configurable: false,
-	value: util.deprecate(function(fn) {
-		return Array.from(this._chunks, fn);
-	}, "Module.mapChunks: Use Array.from(module.chunksIterable, fn) instead")
+// TODO remove in webpack 6
+Object.defineProperty(Module.prototype, "hasEqualsChunks", {
+	/**
+	 * @deprecated
+	 * @returns {EXPECTED_ANY} throw an error
+	 */
+	get() {
+		throw new Error(
+			"Module.hasEqualsChunks was renamed (use hasEqualChunks instead)"
+		);
+	}
 });
 
-// TODO remove in webpack 5
-Object.defineProperty(Module.prototype, "entry", {
-	configurable: false,
+// TODO remove in webpack 6
+Object.defineProperty(Module.prototype, "isUsed", {
+	/**
+	 * @deprecated
+	 * @returns {EXPECTED_ANY} throw an error
+	 */
 	get() {
-		throw new Error("Module.entry was removed. Use Chunk.entryModule");
-	},
-	set() {
-		throw new Error("Module.entry was removed. Use Chunk.entryModule");
+		throw new Error(
+			"Module.isUsed was renamed (use getUsedName, isExportUsed or isModuleUsed instead)"
+		);
 	}
 });
 
-// TODO remove in webpack 5
-Object.defineProperty(Module.prototype, "meta", {
-	configurable: false,
-	get: util.deprecate(function() {
-		return this.buildMeta;
-	}, "Module.meta was renamed to Module.buildMeta"),
-	set: util.deprecate(function(value) {
-		this.buildMeta = value;
-	}, "Module.meta was renamed to Module.buildMeta")
+// TODO remove in webpack 6
+Object.defineProperty(Module.prototype, "errors", {
+	/**
+	 * @deprecated
+	 * @returns {WebpackError[]} errors
+	 */
+	get: util.deprecate(
+		/**
+		 * @this {Module}
+		 * @returns {WebpackError[]} errors
+		 */
+		function errors() {
+			if (this._errors === undefined) {
+				this._errors = [];
+			}
+			return this._errors;
+		},
+		"Module.errors was removed (use getErrors instead)",
+		"DEP_WEBPACK_MODULE_ERRORS"
+	)
 });
 
-/** @type {function(): string} */
-Module.prototype.identifier = null;
-
-/** @type {function(RequestShortener): string} */
-Module.prototype.readableIdentifier = null;
+// TODO remove in webpack 6
+Object.defineProperty(Module.prototype, "warnings", {
+	/**
+	 * @deprecated
+	 * @returns {WebpackError[]} warnings
+	 */
+	get: util.deprecate(
+		/**
+		 * @this {Module}
+		 * @returns {WebpackError[]} warnings
+		 */
+		function warnings() {
+			if (this._warnings === undefined) {
+				this._warnings = [];
+			}
+			return this._warnings;
+		},
+		"Module.warnings was removed (use getWarnings instead)",
+		"DEP_WEBPACK_MODULE_WARNINGS"
+	)
+});
 
-Module.prototype.build = null;
-Module.prototype.source = null;
-Module.prototype.size = null;
-Module.prototype.nameForCondition = null;
-Module.prototype.updateCacheModule = null;
+// TODO remove in webpack 6
+Object.defineProperty(Module.prototype, "used", {
+	/**
+	 * @deprecated
+	 * @returns {EXPECTED_ANY} throw an error
+	 */
+	get() {
+		throw new Error(
+			"Module.used was refactored (use ModuleGraph.getUsedExports instead)"
+		);
+	},
+	/**
+	 * @param {EXPECTED_ANY} value value
+	 */
+	set(value) {
+		throw new Error(
+			"Module.used was refactored (use ModuleGraph.setUsedExports instead)"
+		);
+	}
+});
 
 module.exports = Module;
diff --git a/lib/ModuleBuildError.js b/lib/ModuleBuildError.js
index d6b498eef23..55601c16849 100644
--- a/lib/ModuleBuildError.js
+++ b/lib/ModuleBuildError.js
@@ -2,51 +2,82 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const WebpackError = require("./WebpackError");
 const { cutOffLoaderExecution } = require("./ErrorHelpers");
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
+/** @typedef {Error & { hideStack?: boolean }} ErrorWithHideStack */
 
 class ModuleBuildError extends WebpackError {
-	constructor(module, err, { from = null } = {}) {
+	/**
+	 * @param {string | ErrorWithHideStack} err error thrown
+	 * @param {{ from?: string | null }} info additional info
+	 */
+	constructor(err, { from = null } = {}) {
 		let message = "Module build failed";
-		let details = undefined;
-		if (from) {
-			message += ` (from ${from}):\n`;
-		} else {
-			message += ": ";
-		}
+		/** @type {undefined | string} */
+		let details;
+
+		message += from ? ` (from ${from}):\n` : ": ";
+
 		if (err !== null && typeof err === "object") {
 			if (typeof err.stack === "string" && err.stack) {
 				const stack = cutOffLoaderExecution(err.stack);
+
 				if (!err.hideStack) {
 					message += stack;
 				} else {
 					details = stack;
-					if (typeof err.message === "string" && err.message) {
-						message += err.message;
-					} else {
-						message += err;
-					}
+
+					message +=
+						typeof err.message === "string" && err.message ? err.message : err;
 				}
 			} else if (typeof err.message === "string" && err.message) {
 				message += err.message;
 			} else {
-				message += err;
+				message += String(err);
 			}
 		} else {
-			message = err;
+			message += String(err);
 		}
 
 		super(message);
 
+		/** @type {string} */
 		this.name = "ModuleBuildError";
 		this.details = details;
-		this.module = module;
 		this.error = err;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
 
-		Error.captureStackTrace(this, this.constructor);
+		write(this.error);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.error = read();
+
+		super.deserialize(context);
 	}
 }
 
+makeSerializable(ModuleBuildError, "webpack/lib/ModuleBuildError");
+
 module.exports = ModuleBuildError;
diff --git a/lib/ModuleDependencyError.js b/lib/ModuleDependencyError.js
index cb16cc34a1a..d907a173c04 100644
--- a/lib/ModuleDependencyError.js
+++ b/lib/ModuleDependencyError.js
@@ -2,33 +2,42 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
 
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
 /** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleBuildError").ErrorWithHideStack} ErrorWithHideStack */
 
 class ModuleDependencyError extends WebpackError {
 	/**
 	 * Creates an instance of ModuleDependencyError.
 	 * @param {Module} module module tied to dependency
-	 * @param {Error} err error thrown
-	 * @param {TODO} loc location of dependency
+	 * @param {ErrorWithHideStack} err error thrown
+	 * @param {DependencyLocation} loc location of dependency
 	 */
 	constructor(module, err, loc) {
 		super(err.message);
 
+		/** @type {string} */
 		this.name = "ModuleDependencyError";
-		this.details = err.stack
-			.split("\n")
-			.slice(1)
-			.join("\n");
+		this.details =
+			err && !err.hideStack
+				? /** @type {string} */ (err.stack).split("\n").slice(1).join("\n")
+				: undefined;
 		this.module = module;
 		this.loc = loc;
+		/** error is not (de)serialized, so it might be undefined after deserialization */
 		this.error = err;
-		this.origin = module.issuer;
 
-		Error.captureStackTrace(this, this.constructor);
+		if (err && err.hideStack && err.stack) {
+			this.stack = /** @type {string} */ `${err.stack
+				.split("\n")
+				.slice(1)
+				.join("\n")}\n\n${this.stack}`;
+		}
 	}
 }
 
diff --git a/lib/ModuleDependencyWarning.js b/lib/ModuleDependencyWarning.js
index be62791cbdc..a4365e062d7 100644
--- a/lib/ModuleDependencyWarning.js
+++ b/lib/ModuleDependencyWarning.js
@@ -2,24 +2,48 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleDependencyError").ErrorWithHideStack} ErrorWithHideStack */
 
-module.exports = class ModuleDependencyWarning extends WebpackError {
+class ModuleDependencyWarning extends WebpackError {
+	/**
+	 * @param {Module} module module tied to dependency
+	 * @param {ErrorWithHideStack} err error thrown
+	 * @param {DependencyLocation} loc location of dependency
+	 */
 	constructor(module, err, loc) {
-		super(err.message);
+		super(err ? err.message : "");
 
+		/** @type {string} */
 		this.name = "ModuleDependencyWarning";
-		this.details = err.stack
-			.split("\n")
-			.slice(1)
-			.join("\n");
+		this.details =
+			err && !err.hideStack
+				? /** @type {string} */ (err.stack).split("\n").slice(1).join("\n")
+				: undefined;
 		this.module = module;
 		this.loc = loc;
+		/** error is not (de)serialized, so it might be undefined after deserialization */
 		this.error = err;
-		this.origin = module.issuer;
 
-		Error.captureStackTrace(this, this.constructor);
+		if (err && err.hideStack && err.stack) {
+			this.stack = /** @type {string} */ `${err.stack
+				.split("\n")
+				.slice(1)
+				.join("\n")}\n\n${this.stack}`;
+		}
 	}
-};
+}
+
+makeSerializable(
+	ModuleDependencyWarning,
+	"webpack/lib/ModuleDependencyWarning"
+);
+
+module.exports = ModuleDependencyWarning;
diff --git a/lib/ModuleError.js b/lib/ModuleError.js
index 7079d613292..02903bbd788 100644
--- a/lib/ModuleError.js
+++ b/lib/ModuleError.js
@@ -2,35 +2,68 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const WebpackError = require("./WebpackError");
 const { cleanUp } = require("./ErrorHelpers");
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
 
 class ModuleError extends WebpackError {
-	constructor(module, err, { from = null } = {}) {
+	/**
+	 * @param {Error} err error thrown
+	 * @param {{ from?: string | null }} info additional info
+	 */
+	constructor(err, { from = null } = {}) {
 		let message = "Module Error";
-		if (from) {
-			message += ` (from ${from}):\n`;
-		} else {
-			message += ": ";
-		}
+
+		message += from ? ` (from ${from}):\n` : ": ";
+
 		if (err && typeof err === "object" && err.message) {
 			message += err.message;
 		} else if (err) {
 			message += err;
 		}
+
 		super(message);
+
+		/** @type {string} */
 		this.name = "ModuleError";
-		this.module = module;
+		/** @type {Error} */
 		this.error = err;
+		/** @type {string | undefined} */
 		this.details =
 			err && typeof err === "object" && err.stack
 				? cleanUp(err.stack, this.message)
 				: undefined;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.error);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
 
-		Error.captureStackTrace(this, this.constructor);
+		this.error = read();
+
+		super.deserialize(context);
 	}
 }
 
+makeSerializable(ModuleError, "webpack/lib/ModuleError");
+
 module.exports = ModuleError;
diff --git a/lib/ModuleFactory.js b/lib/ModuleFactory.js
new file mode 100644
index 00000000000..76ece881537
--- /dev/null
+++ b/lib/ModuleFactory.js
@@ -0,0 +1,57 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Module")} Module */
+
+/**
+ * @typedef {object} ModuleFactoryResult
+ * @property {Module=} module the created module or unset if no module was created
+ * @property {Set=} fileDependencies
+ * @property {Set=} contextDependencies
+ * @property {Set=} missingDependencies
+ * @property {boolean=} cacheable allow to use the unsafe cache
+ */
+
+/** @typedef {string | null} IssuerLayer */
+
+/**
+ * @typedef {object} ModuleFactoryCreateDataContextInfo
+ * @property {string} issuer
+ * @property {IssuerLayer} issuerLayer
+ * @property {string=} compiler
+ */
+
+/**
+ * @typedef {object} ModuleFactoryCreateData
+ * @property {ModuleFactoryCreateDataContextInfo} contextInfo
+ * @property {ResolveOptions=} resolveOptions
+ * @property {string} context
+ * @property {Dependency[]} dependencies
+ */
+
+/**
+ * @typedef {(err?: Error | null, result?: ModuleFactoryResult) => void} ModuleFactoryCallback
+ */
+
+class ModuleFactory {
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
+	create(data, callback) {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+}
+
+module.exports = ModuleFactory;
diff --git a/lib/ModuleFilenameHelpers.js b/lib/ModuleFilenameHelpers.js
index 105e89e3fa8..8c6c4d08737 100644
--- a/lib/ModuleFilenameHelpers.js
+++ b/lib/ModuleFilenameHelpers.js
@@ -2,20 +2,37 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const NormalModule = require("./NormalModule");
+const { DEFAULTS } = require("./config/defaults");
 const createHash = require("./util/createHash");
+const memoize = require("./util/memoize");
+
+/** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+
+/** @typedef {(str: string) => boolean} MatcherFn */
+/** @typedef {string | RegExp | MatcherFn | (string | RegExp | MatcherFn)[]} Matcher */
+/** @typedef {{ test?: Matcher, include?: Matcher, exclude?: Matcher }} MatchObject */
 
-const ModuleFilenameHelpers = exports;
+const ModuleFilenameHelpers = module.exports;
 
+// TODO webpack 6: consider removing these
 ModuleFilenameHelpers.ALL_LOADERS_RESOURCE = "[all-loaders][resource]";
-ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE = /\[all-?loaders\]\[resource\]/gi;
+ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE =
+	/\[all-?loaders\]\[resource\]/gi;
 ModuleFilenameHelpers.LOADERS_RESOURCE = "[loaders][resource]";
 ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE = /\[loaders\]\[resource\]/gi;
 ModuleFilenameHelpers.RESOURCE = "[resource]";
 ModuleFilenameHelpers.REGEXP_RESOURCE = /\[resource\]/gi;
 ModuleFilenameHelpers.ABSOLUTE_RESOURCE_PATH = "[absolute-resource-path]";
-ModuleFilenameHelpers.REGEXP_ABSOLUTE_RESOURCE_PATH = /\[abs(olute)?-?resource-?path\]/gi;
+// cSpell:words olute
+ModuleFilenameHelpers.REGEXP_ABSOLUTE_RESOURCE_PATH =
+	/\[abs(olute)?-?resource-?path\]/gi;
 ModuleFilenameHelpers.RESOURCE_PATH = "[resource-path]";
 ModuleFilenameHelpers.REGEXP_RESOURCE_PATH = /\[resource-?path\]/gi;
 ModuleFilenameHelpers.ALL_LOADERS = "[all-loaders]";
@@ -31,148 +48,341 @@ ModuleFilenameHelpers.REGEXP_HASH = /\[hash\]/gi;
 ModuleFilenameHelpers.NAMESPACE = "[namespace]";
 ModuleFilenameHelpers.REGEXP_NAMESPACE = /\[namespace\]/gi;
 
-const getAfter = (str, token) => {
+/** @typedef {() => string} ReturnStringCallback */
+
+/**
+ * Returns a function that returns the part of the string after the token
+ * @param {ReturnStringCallback} strFn the function to get the string
+ * @param {string} token the token to search for
+ * @returns {ReturnStringCallback} a function that returns the part of the string after the token
+ */
+const getAfter = (strFn, token) => () => {
+	const str = strFn();
 	const idx = str.indexOf(token);
-	return idx < 0 ? "" : str.substr(idx);
+	return idx < 0 ? "" : str.slice(idx);
 };
 
-const getBefore = (str, token) => {
+/**
+ * Returns a function that returns the part of the string before the token
+ * @param {ReturnStringCallback} strFn the function to get the string
+ * @param {string} token the token to search for
+ * @returns {ReturnStringCallback} a function that returns the part of the string before the token
+ */
+const getBefore = (strFn, token) => () => {
+	const str = strFn();
 	const idx = str.lastIndexOf(token);
-	return idx < 0 ? "" : str.substr(0, idx);
+	return idx < 0 ? "" : str.slice(0, idx);
 };
 
-const getHash = str => {
-	const hash = createHash("md4");
-	hash.update(str);
-	return hash.digest("hex").substr(0, 4);
-};
+/**
+ * Returns a function that returns a hash of the string
+ * @param {ReturnStringCallback} strFn the function to get the string
+ * @param {HashFunction=} hashFunction the hash function to use
+ * @returns {ReturnStringCallback} a function that returns the hash of the string
+ */
+const getHash =
+	(strFn, hashFunction = DEFAULTS.HASH_FUNCTION) =>
+	() => {
+		const hash = createHash(hashFunction);
+		hash.update(strFn());
+		const digest = hash.digest("hex");
+		return digest.slice(0, 4);
+	};
 
-const asRegExp = test => {
-	if (typeof test === "string") {
-		test = new RegExp("^" + test.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"));
+/**
+ * @template T
+ * Returns a lazy object. The object is lazy in the sense that the properties are
+ * only evaluated when they are accessed. This is only obtained by setting a function as the value for each key.
+ * @param {Record T>} obj the object to convert to a lazy access object
+ * @returns {Record} the lazy access object
+ */
+const lazyObject = (obj) => {
+	const newObj = /** @type {Record} */ ({});
+	for (const key of Object.keys(obj)) {
+		const fn = obj[key];
+		Object.defineProperty(newObj, key, {
+			get: () => fn(),
+			set: (v) => {
+				Object.defineProperty(newObj, key, {
+					value: v,
+					enumerable: true,
+					writable: true
+				});
+			},
+			enumerable: true,
+			configurable: true
+		});
 	}
-	return test;
+	return newObj;
 };
 
-ModuleFilenameHelpers.createFilename = (module, options, requestShortener) => {
-	const opts = Object.assign(
-		{
-			namespace: "",
-			moduleFilenameTemplate: ""
-		},
-		typeof options === "object"
+const SQUARE_BRACKET_TAG_REGEXP = /\[\\*([\w-]+)\\*\]/g;
+/**
+ * @typedef {object} ModuleFilenameTemplateContext
+ * @property {string} identifier the identifier of the module
+ * @property {string} shortIdentifier the shortened identifier of the module
+ * @property {string} resource the resource of the module request
+ * @property {string} resourcePath the resource path of the module request
+ * @property {string} absoluteResourcePath the absolute resource path of the module request
+ * @property {string} loaders the loaders of the module request
+ * @property {string} allLoaders the all loaders of the module request
+ * @property {string} query the query of the module identifier
+ * @property {string} moduleId the module id of the module
+ * @property {string} hash the hash of the module identifier
+ * @property {string} namespace the module namespace
+ */
+/** @typedef {((context: ModuleFilenameTemplateContext) => string)} ModuleFilenameTemplateFunction */
+/** @typedef {string | ModuleFilenameTemplateFunction} ModuleFilenameTemplate */
+
+/**
+ * @param {Module | string} module the module
+ * @param {{ namespace?: string, moduleFilenameTemplate?: ModuleFilenameTemplate }} options options
+ * @param {{ requestShortener: RequestShortener, chunkGraph: ChunkGraph, hashFunction?: HashFunction }} contextInfo context info
+ * @returns {string} the filename
+ */
+ModuleFilenameHelpers.createFilename = (
+	// eslint-disable-next-line default-param-last
+	module = "",
+	options,
+	{ requestShortener, chunkGraph, hashFunction = DEFAULTS.HASH_FUNCTION }
+) => {
+	const opts = {
+		namespace: "",
+		moduleFilenameTemplate: "",
+		...(typeof options === "object"
 			? options
 			: {
 					moduleFilenameTemplate: options
-			  }
-	);
+				})
+	};
 
+	/** @type {ReturnStringCallback} */
 	let absoluteResourcePath;
+	/** @type {ReturnStringCallback} */
 	let hash;
+	/** @type {ReturnStringCallback} */
 	let identifier;
+	/** @type {ReturnStringCallback} */
 	let moduleId;
+	/** @type {ReturnStringCallback} */
 	let shortIdentifier;
-	if (module === undefined) module = "";
 	if (typeof module === "string") {
-		shortIdentifier = requestShortener.shorten(module);
+		shortIdentifier =
+			/** @type {ReturnStringCallback} */
+			(memoize(() => requestShortener.shorten(module)));
 		identifier = shortIdentifier;
-		moduleId = "";
-		absoluteResourcePath = module.split("!").pop();
-		hash = getHash(identifier);
+		moduleId = () => "";
+		absoluteResourcePath = () =>
+			/** @type {string} */ (module.split("!").pop());
+		hash = getHash(identifier, hashFunction);
 	} else {
-		shortIdentifier = module.readableIdentifier(requestShortener);
-		identifier = requestShortener.shorten(module.identifier());
-		moduleId = module.id;
-		absoluteResourcePath = module
-			.identifier()
-			.split("!")
-			.pop();
-		hash = getHash(identifier);
+		shortIdentifier = memoize(() =>
+			module.readableIdentifier(requestShortener)
+		);
+		identifier =
+			/** @type {ReturnStringCallback} */
+			(memoize(() => requestShortener.shorten(module.identifier())));
+		moduleId =
+			/** @type {ReturnStringCallback} */
+			(() => chunkGraph.getModuleId(module));
+		absoluteResourcePath = () =>
+			module instanceof NormalModule
+				? module.resource
+				: /** @type {string} */ (module.identifier().split("!").pop());
+		hash = getHash(identifier, hashFunction);
 	}
-	const resource = shortIdentifier.split("!").pop();
+	const resource =
+		/** @type {ReturnStringCallback} */
+		(memoize(() => shortIdentifier().split("!").pop()));
+
 	const loaders = getBefore(shortIdentifier, "!");
 	const allLoaders = getBefore(identifier, "!");
 	const query = getAfter(resource, "?");
-	const resourcePath = resource.substr(0, resource.length - query.length);
+	const resourcePath = () => {
+		const q = query().length;
+		return q === 0 ? resource() : resource().slice(0, -q);
+	};
 	if (typeof opts.moduleFilenameTemplate === "function") {
-		return opts.moduleFilenameTemplate({
-			identifier: identifier,
-			shortIdentifier: shortIdentifier,
-			resource: resource,
-			resourcePath: resourcePath,
-			absoluteResourcePath: absoluteResourcePath,
-			allLoaders: allLoaders,
-			query: query,
-			moduleId: moduleId,
-			hash: hash,
-			namespace: opts.namespace
-		});
+		return opts.moduleFilenameTemplate(
+			/** @type {ModuleFilenameTemplateContext} */
+			(
+				lazyObject({
+					identifier,
+					shortIdentifier,
+					resource,
+					resourcePath: memoize(resourcePath),
+					absoluteResourcePath: memoize(absoluteResourcePath),
+					loaders: memoize(loaders),
+					allLoaders: memoize(allLoaders),
+					query: memoize(query),
+					moduleId: memoize(moduleId),
+					hash: memoize(hash),
+					namespace: () => opts.namespace
+				})
+			)
+		);
 	}
-	return opts.moduleFilenameTemplate
-		.replace(ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE, identifier)
-		.replace(ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE, shortIdentifier)
-		.replace(ModuleFilenameHelpers.REGEXP_RESOURCE, resource)
-		.replace(ModuleFilenameHelpers.REGEXP_RESOURCE_PATH, resourcePath)
+
+	// TODO webpack 6: consider removing alternatives without dashes
+	/** @type {Map string>} */
+	const replacements = new Map([
+		["identifier", identifier],
+		["short-identifier", shortIdentifier],
+		["resource", resource],
+		["resource-path", resourcePath],
+		// cSpell:words resourcepath
+		["resourcepath", resourcePath],
+		["absolute-resource-path", absoluteResourcePath],
+		["abs-resource-path", absoluteResourcePath],
+		// cSpell:words absoluteresource
+		["absoluteresource-path", absoluteResourcePath],
+		// cSpell:words absresource
+		["absresource-path", absoluteResourcePath],
+		// cSpell:words resourcepath
+		["absolute-resourcepath", absoluteResourcePath],
+		// cSpell:words resourcepath
+		["abs-resourcepath", absoluteResourcePath],
+		// cSpell:words absoluteresourcepath
+		["absoluteresourcepath", absoluteResourcePath],
+		// cSpell:words absresourcepath
+		["absresourcepath", absoluteResourcePath],
+		["all-loaders", allLoaders],
+		// cSpell:words allloaders
+		["allloaders", allLoaders],
+		["loaders", loaders],
+		["query", query],
+		["id", moduleId],
+		["hash", hash],
+		["namespace", () => opts.namespace]
+	]);
+
+	// TODO webpack 6: consider removing weird double placeholders
+	return /** @type {string} */ (opts.moduleFilenameTemplate)
+		.replace(ModuleFilenameHelpers.REGEXP_ALL_LOADERS_RESOURCE, "[identifier]")
 		.replace(
-			ModuleFilenameHelpers.REGEXP_ABSOLUTE_RESOURCE_PATH,
-			absoluteResourcePath
+			ModuleFilenameHelpers.REGEXP_LOADERS_RESOURCE,
+			"[short-identifier]"
 		)
-		.replace(ModuleFilenameHelpers.REGEXP_ALL_LOADERS, allLoaders)
-		.replace(ModuleFilenameHelpers.REGEXP_LOADERS, loaders)
-		.replace(ModuleFilenameHelpers.REGEXP_QUERY, query)
-		.replace(ModuleFilenameHelpers.REGEXP_ID, moduleId)
-		.replace(ModuleFilenameHelpers.REGEXP_HASH, hash)
-		.replace(ModuleFilenameHelpers.REGEXP_NAMESPACE, opts.namespace);
+		.replace(SQUARE_BRACKET_TAG_REGEXP, (match, content) => {
+			if (content.length + 2 === match.length) {
+				const replacement = replacements.get(content.toLowerCase());
+				if (replacement !== undefined) {
+					return replacement();
+				}
+			} else if (match.startsWith("[\\") && match.endsWith("\\]")) {
+				return `[${match.slice(2, -2)}]`;
+			}
+			return match;
+		});
 };
 
+/**
+ * Replaces duplicate items in an array with new values generated by a callback function.
+ * The callback function is called with the duplicate item, the index of the duplicate item, and the number of times the item has been replaced.
+ * The callback function should return the new value for the duplicate item.
+ * @template T
+ * @param {T[]} array the array with duplicates to be replaced
+ * @param {(duplicateItem: T, duplicateItemIndex: number, numberOfTimesReplaced: number) => T} fn callback function to generate new values for the duplicate items
+ * @param {(firstElement: T, nextElement: T) => -1 | 0 | 1=} comparator optional comparator function to sort the duplicate items
+ * @returns {T[]} the array with duplicates replaced
+ * @example
+ * ```js
+ * const array = ["a", "b", "c", "a", "b", "a"];
+ * const result = ModuleFilenameHelpers.replaceDuplicates(array, (item, index, count) => `${item}-${count}`);
+ * // result: ["a-1", "b-1", "c", "a-2", "b-2", "a-3"]
+ * ```
+ */
 ModuleFilenameHelpers.replaceDuplicates = (array, fn, comparator) => {
 	const countMap = Object.create(null);
 	const posMap = Object.create(null);
-	array.forEach((item, idx) => {
+
+	for (const [idx, item] of array.entries()) {
 		countMap[item] = countMap[item] || [];
 		countMap[item].push(idx);
 		posMap[item] = 0;
-	});
+	}
 	if (comparator) {
-		Object.keys(countMap).forEach(item => {
+		for (const item of Object.keys(countMap)) {
 			countMap[item].sort(comparator);
-		});
+		}
 	}
 	return array.map((item, i) => {
 		if (countMap[item].length > 1) {
 			if (comparator && countMap[item][0] === i) return item;
 			return fn(item, i, posMap[item]++);
-		} else {
-			return item;
 		}
+		return item;
 	});
 };
 
-ModuleFilenameHelpers.matchPart = (str, test) => {
+/**
+ * Tests if a string matches a RegExp or an array of RegExp.
+ * @param {string} str string to test
+ * @param {Matcher} test value which will be used to match against the string
+ * @returns {boolean} true, when the RegExp matches
+ * @example
+ * ```js
+ * ModuleFilenameHelpers.matchPart("foo.js", "foo"); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", "foo.js"); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", "foo."); // false
+ * ModuleFilenameHelpers.matchPart("foo.js", "foo*"); // false
+ * ModuleFilenameHelpers.matchPart("foo.js", "foo.*"); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", /^foo/); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", [/^foo/, "bar"]); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", [/^foo/, "bar"]); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", [/^foo/, /^bar/]); // true
+ * ModuleFilenameHelpers.matchPart("foo.js", [/^baz/, /^bar/]); // false
+ * ```
+ */
+const matchPart = (str, test) => {
 	if (!test) return true;
-	test = asRegExp(test);
-	if (Array.isArray(test)) {
-		return test.map(asRegExp).some(regExp => regExp.test(str));
-	} else {
+	if (test instanceof RegExp) {
 		return test.test(str);
+	} else if (typeof test === "string") {
+		return str.startsWith(test);
+	} else if (typeof test === "function") {
+		return test(str);
 	}
+
+	return test.some((test) => matchPart(str, test));
 };
 
+ModuleFilenameHelpers.matchPart = matchPart;
+
+/**
+ * Tests if a string matches a match object. The match object can have the following properties:
+ * - `test`: a RegExp or an array of RegExp
+ * - `include`: a RegExp or an array of RegExp
+ * - `exclude`: a RegExp or an array of RegExp
+ *
+ * The `test` property is tested first, then `include` and then `exclude`.
+ * @param {MatchObject} obj a match object to test against the string
+ * @param {string} str string to test against the matching object
+ * @returns {boolean} true, when the object matches
+ * @example
+ * ```js
+ * ModuleFilenameHelpers.matchObject({ test: "foo.js" }, "foo.js"); // true
+ * ModuleFilenameHelpers.matchObject({ test: /^foo/ }, "foo.js"); // true
+ * ModuleFilenameHelpers.matchObject({ test: [/^foo/, "bar"] }, "foo.js"); // true
+ * ModuleFilenameHelpers.matchObject({ test: [/^foo/, "bar"] }, "baz.js"); // false
+ * ModuleFilenameHelpers.matchObject({ include: "foo.js" }, "foo.js"); // true
+ * ModuleFilenameHelpers.matchObject({ include: "foo.js" }, "bar.js"); // false
+ * ModuleFilenameHelpers.matchObject({ include: /^foo/ }, "foo.js"); // true
+ * ModuleFilenameHelpers.matchObject({ include: [/^foo/, "bar"] }, "foo.js"); // true
+ * ModuleFilenameHelpers.matchObject({ include: [/^foo/, "bar"] }, "baz.js"); // false
+ * ModuleFilenameHelpers.matchObject({ exclude: "foo.js" }, "foo.js"); // false
+ * ModuleFilenameHelpers.matchObject({ exclude: [/^foo/, "bar"] }, "foo.js"); // false
+ * ```
+ */
 ModuleFilenameHelpers.matchObject = (obj, str) => {
-	if (obj.test) {
-		if (!ModuleFilenameHelpers.matchPart(str, obj.test)) {
-			return false;
-		}
+	if (obj.test && !ModuleFilenameHelpers.matchPart(str, obj.test)) {
+		return false;
 	}
-	if (obj.include) {
-		if (!ModuleFilenameHelpers.matchPart(str, obj.include)) {
-			return false;
-		}
+	if (obj.include && !ModuleFilenameHelpers.matchPart(str, obj.include)) {
+		return false;
 	}
-	if (obj.exclude) {
-		if (ModuleFilenameHelpers.matchPart(str, obj.exclude)) {
-			return false;
-		}
+	if (obj.exclude && ModuleFilenameHelpers.matchPart(str, obj.exclude)) {
+		return false;
 	}
 	return true;
 };
diff --git a/lib/ModuleGraph.js b/lib/ModuleGraph.js
new file mode 100644
index 00000000000..afa2077cf05
--- /dev/null
+++ b/lib/ModuleGraph.js
@@ -0,0 +1,1027 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const util = require("util");
+const ExportsInfo = require("./ExportsInfo");
+const ModuleGraphConnection = require("./ModuleGraphConnection");
+const HarmonyImportDependency = require("./dependencies/HarmonyImportDependency");
+const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
+const SortableSet = require("./util/SortableSet");
+const WeakTupleMap = require("./util/WeakTupleMap");
+const { sortWithSourceOrder } = require("./util/comparators");
+
+/** @typedef {import("./Compilation").ModuleMemCaches} ModuleMemCaches */
+/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./ExportsInfo").ExportInfo} ExportInfo */
+/** @typedef {import("./ExportsInfo").ExportInfoName} ExportInfoName */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleProfile")} ModuleProfile */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+/** @typedef {import("./dependencies/HarmonyImportSideEffectDependency")} HarmonyImportSideEffectDependency */
+/** @typedef {import("./dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
+/** @typedef {import("./util/comparators").DependencySourceOrder} DependencySourceOrder */
+
+/**
+ * @callback OptimizationBailoutFunction
+ * @param {RequestShortener} requestShortener
+ * @returns {string}
+ */
+
+/** @type {Iterable} */
+const EMPTY_SET = new Set();
+
+/**
+ * @template {Module | null | undefined} T
+ * @param {SortableSet} set input
+ * @param {(connection: ModuleGraphConnection) => T} getKey function to extract key from connection
+ * @returns {ReadonlyMap>} mapped by key
+ */
+const getConnectionsByKey = (set, getKey) => {
+	/** @type {Map} */
+	const map = new Map();
+	/** @type {T | 0} */
+	let lastKey = 0;
+	/** @type {ModuleGraphConnection[] | undefined} */
+	let lastList;
+	for (const connection of set) {
+		const key = getKey(connection);
+		if (lastKey === key) {
+			/** @type {ModuleGraphConnection[]} */
+			(lastList).push(connection);
+		} else {
+			lastKey = key;
+			const list = map.get(key);
+			if (list !== undefined) {
+				lastList = list;
+				list.push(connection);
+			} else {
+				const list = [connection];
+				lastList = list;
+				map.set(key, list);
+			}
+		}
+	}
+	return map;
+};
+
+/**
+ * @param {SortableSet} set input
+ * @returns {ReadonlyMap>} mapped by origin module
+ */
+const getConnectionsByOriginModule = (set) =>
+	getConnectionsByKey(set, (connection) => connection.originModule);
+
+/**
+ * @param {SortableSet} set input
+ * @returns {ReadonlyMap>} mapped by module
+ */
+const getConnectionsByModule = (set) =>
+	getConnectionsByKey(set, (connection) => connection.module);
+
+/** @typedef {SortableSet} IncomingConnections */
+/** @typedef {SortableSet} OutgoingConnections */
+/** @typedef {Module | null | undefined} Issuer */
+/** @typedef {(string | OptimizationBailoutFunction)[]} OptimizationBailouts */
+
+class ModuleGraphModule {
+	constructor() {
+		/** @type {IncomingConnections} */
+		this.incomingConnections = new SortableSet();
+		/** @type {OutgoingConnections | undefined} */
+		this.outgoingConnections = undefined;
+		/** @type {Issuer} */
+		this.issuer = undefined;
+		/** @type {OptimizationBailouts} */
+		this.optimizationBailout = [];
+		/** @type {ExportsInfo} */
+		this.exports = new ExportsInfo();
+		/** @type {number | null} */
+		this.preOrderIndex = null;
+		/** @type {number | null} */
+		this.postOrderIndex = null;
+		/** @type {number | null} */
+		this.depth = null;
+		/** @type {ModuleProfile | undefined} */
+		this.profile = undefined;
+		/** @type {boolean} */
+		this.async = false;
+		/** @type {ModuleGraphConnection[] | undefined} */
+		this._unassignedConnections = undefined;
+	}
+}
+
+/** @typedef {(moduleGraphConnection: ModuleGraphConnection) => boolean} FilterConnection */
+
+/** @typedef {EXPECTED_OBJECT} MetaKey */
+
+/** @typedef {import("./dependencies/CommonJsExportRequireDependency").idsSymbol} CommonJsExportRequireDependencyIDsSymbol */
+/** @typedef {import("./dependencies/HarmonyImportSpecifierDependency").idsSymbol} HarmonyImportSpecifierDependencyIDsSymbol */
+/** @typedef {import("./dependencies/HarmonyExportImportedSpecifierDependency").idsSymbol} HarmonyExportImportedSpecifierDependencyIDsSymbol */
+
+/**
+ * @typedef {object} KnownMeta
+ * @property {Map=} importVarMap
+ * @property {Map=} deferredImportVarMap
+ */
+
+/** @typedef {KnownMeta & Record & Record} Meta */
+
+class ModuleGraph {
+	constructor() {
+		/**
+		 * @type {WeakMap}
+		 * @private
+		 */
+		this._dependencyMap = new WeakMap();
+		/**
+		 * @type {Map}
+		 * @private
+		 */
+		this._moduleMap = new Map();
+		/**
+		 * @type {WeakMap}
+		 * @private
+		 */
+		this._metaMap = new WeakMap();
+		/**
+		 * @type {WeakTupleMap | undefined}
+		 * @private
+		 */
+		this._cache = undefined;
+		/**
+		 * @type {ModuleMemCaches | undefined}
+		 * @private
+		 */
+		this._moduleMemCaches = undefined;
+
+		/**
+		 * @type {string | undefined}
+		 * @private
+		 */
+		this._cacheStage = undefined;
+
+		/**
+		 * @type {WeakMap}
+		 * @private
+		 */
+		this._dependencySourceOrderMap = new WeakMap();
+
+		/**
+		 * @type {Set}
+		 * @private
+		 */
+		this._modulesNeedingSort = new Set();
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {ModuleGraphModule} the internal module
+	 */
+	_getModuleGraphModule(module) {
+		let mgm = this._moduleMap.get(module);
+		if (mgm === undefined) {
+			mgm = new ModuleGraphModule();
+			this._moduleMap.set(module, mgm);
+		}
+		return mgm;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency
+	 * @param {DependenciesBlock} block parent block
+	 * @param {Module} module parent module
+	 * @param {number=} indexInBlock position in block
+	 * @returns {void}
+	 */
+	setParents(dependency, block, module, indexInBlock = -1) {
+		dependency._parentDependenciesBlockIndex = indexInBlock;
+		dependency._parentDependenciesBlock = block;
+		dependency._parentModule = module;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency
+	 * @param {number} index the index
+	 * @returns {void}
+	 */
+	setParentDependenciesBlockIndex(dependency, index) {
+		dependency._parentDependenciesBlockIndex = index;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency
+	 * @returns {Module | undefined} parent module
+	 */
+	getParentModule(dependency) {
+		return dependency._parentModule;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency
+	 * @returns {DependenciesBlock | undefined} parent block
+	 */
+	getParentBlock(dependency) {
+		return dependency._parentDependenciesBlock;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency
+	 * @returns {number} index
+	 */
+	getParentBlockIndex(dependency) {
+		return dependency._parentDependenciesBlockIndex;
+	}
+
+	/**
+	 * @param {Module | null} originModule the referencing module
+	 * @param {Dependency} dependency the referencing dependency
+	 * @param {Module} module the referenced module
+	 * @returns {void}
+	 */
+	setResolvedModule(originModule, dependency, module) {
+		const connection = new ModuleGraphConnection(
+			originModule,
+			dependency,
+			module,
+			undefined,
+			dependency.weak,
+			dependency.getCondition(this)
+		);
+		const connections = this._getModuleGraphModule(module).incomingConnections;
+		connections.add(connection);
+		if (originModule) {
+			const mgm = this._getModuleGraphModule(originModule);
+			if (mgm._unassignedConnections === undefined) {
+				mgm._unassignedConnections = [];
+			}
+			mgm._unassignedConnections.push(connection);
+			if (mgm.outgoingConnections === undefined) {
+				mgm.outgoingConnections = new SortableSet();
+			}
+			mgm.outgoingConnections.add(connection);
+		} else {
+			this._dependencyMap.set(dependency, connection);
+		}
+	}
+
+	/**
+	 * @param {Dependency} dependency the referencing dependency
+	 * @param {Module} module the referenced module
+	 * @returns {void}
+	 */
+	updateModule(dependency, module) {
+		const connection =
+			/** @type {ModuleGraphConnection} */
+			(this.getConnection(dependency));
+		if (connection.module === module) return;
+		const newConnection = connection.clone();
+		newConnection.module = module;
+		this._dependencyMap.set(dependency, newConnection);
+		connection.setActive(false);
+		const originMgm = this._getModuleGraphModule(
+			/** @type {Module} */ (connection.originModule)
+		);
+		/** @type {OutgoingConnections} */
+		(originMgm.outgoingConnections).add(newConnection);
+		const targetMgm = this._getModuleGraphModule(module);
+		targetMgm.incomingConnections.add(newConnection);
+	}
+
+	/**
+	 * @param {Dependency} dependency the need update dependency
+	 * @param {ModuleGraphConnection=} connection the target connection
+	 * @param {Module=} parentModule the parent module
+	 * @returns {void}
+	 */
+	updateParent(dependency, connection, parentModule) {
+		if (this._dependencySourceOrderMap.has(dependency)) {
+			return;
+		}
+		if (!connection || !parentModule) {
+			return;
+		}
+		const originDependency = connection.dependency;
+
+		// src/index.js
+		// import { c } from "lib/c" -> c = 0
+		// import { a, b } from "lib" -> a and b have the same source order -> a = b = 1
+		// import { d } from "lib/d" -> d = 2
+		const currentSourceOrder =
+			/** @type {HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */
+			(dependency).sourceOrder;
+
+		// lib/index.js (reexport)
+		// import { a } from "lib/a" -> a = 0
+		// import { b } from "lib/b" -> b = 1
+		const originSourceOrder =
+			/** @type {HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */
+			(originDependency).sourceOrder;
+		if (
+			typeof currentSourceOrder === "number" &&
+			typeof originSourceOrder === "number"
+		) {
+			// src/index.js
+			// import { c } from "lib/c" -> c = 0
+			// import { a } from "lib/a" -> a = 1.0 = 1(main) + 0.0(sub)
+			// import { b } from "lib/b" -> b = 1.1 = 1(main) + 0.1(sub)
+			// import { d } from "lib/d" -> d = 2
+			this._dependencySourceOrderMap.set(dependency, {
+				main: currentSourceOrder,
+				sub: originSourceOrder
+			});
+
+			// Save for later batch sorting
+			this._modulesNeedingSort.add(parentModule);
+		}
+	}
+
+	/**
+	 * @returns {void}
+	 */
+	finishUpdateParent() {
+		if (this._modulesNeedingSort.size === 0) {
+			return;
+		}
+		for (const mod of this._modulesNeedingSort) {
+			// If dependencies like HarmonyImportSideEffectDependency and HarmonyImportSpecifierDependency have a SourceOrder,
+			// we sort based on it; otherwise, we preserve the original order.
+			sortWithSourceOrder(
+				mod.dependencies,
+				this._dependencySourceOrderMap,
+				(dep, index) => this.setParentDependenciesBlockIndex(dep, index)
+			);
+		}
+		this._modulesNeedingSort.clear();
+	}
+
+	/**
+	 * @param {Dependency} dependency the referencing dependency
+	 * @returns {void}
+	 */
+	removeConnection(dependency) {
+		const connection =
+			/** @type {ModuleGraphConnection} */
+			(this.getConnection(dependency));
+		const targetMgm = this._getModuleGraphModule(connection.module);
+		targetMgm.incomingConnections.delete(connection);
+		const originMgm = this._getModuleGraphModule(
+			/** @type {Module} */ (connection.originModule)
+		);
+		/** @type {OutgoingConnections} */
+		(originMgm.outgoingConnections).delete(connection);
+		this._dependencyMap.set(dependency, null);
+	}
+
+	/**
+	 * @param {Dependency} dependency the referencing dependency
+	 * @param {string} explanation an explanation
+	 * @returns {void}
+	 */
+	addExplanation(dependency, explanation) {
+		const connection =
+			/** @type {ModuleGraphConnection} */
+			(this.getConnection(dependency));
+		connection.addExplanation(explanation);
+	}
+
+	/**
+	 * @param {Module} sourceModule the source module
+	 * @param {Module} targetModule the target module
+	 * @returns {void}
+	 */
+	cloneModuleAttributes(sourceModule, targetModule) {
+		const oldMgm = this._getModuleGraphModule(sourceModule);
+		const newMgm = this._getModuleGraphModule(targetModule);
+		newMgm.postOrderIndex = oldMgm.postOrderIndex;
+		newMgm.preOrderIndex = oldMgm.preOrderIndex;
+		newMgm.depth = oldMgm.depth;
+		newMgm.exports = oldMgm.exports;
+		newMgm.async = oldMgm.async;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {void}
+	 */
+	removeModuleAttributes(module) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.postOrderIndex = null;
+		mgm.preOrderIndex = null;
+		mgm.depth = null;
+		mgm.async = false;
+	}
+
+	/**
+	 * @returns {void}
+	 */
+	removeAllModuleAttributes() {
+		for (const mgm of this._moduleMap.values()) {
+			mgm.postOrderIndex = null;
+			mgm.preOrderIndex = null;
+			mgm.depth = null;
+			mgm.async = false;
+		}
+	}
+
+	/**
+	 * @param {Module} oldModule the old referencing module
+	 * @param {Module} newModule the new referencing module
+	 * @param {FilterConnection} filterConnection filter predicate for replacement
+	 * @returns {void}
+	 */
+	moveModuleConnections(oldModule, newModule, filterConnection) {
+		if (oldModule === newModule) return;
+		const oldMgm = this._getModuleGraphModule(oldModule);
+		const newMgm = this._getModuleGraphModule(newModule);
+		// Outgoing connections
+		const oldConnections = oldMgm.outgoingConnections;
+		if (oldConnections !== undefined) {
+			if (newMgm.outgoingConnections === undefined) {
+				newMgm.outgoingConnections = new SortableSet();
+			}
+			const newConnections = newMgm.outgoingConnections;
+			for (const connection of oldConnections) {
+				if (filterConnection(connection)) {
+					connection.originModule = newModule;
+					newConnections.add(connection);
+					oldConnections.delete(connection);
+				}
+			}
+		}
+		// Incoming connections
+		const oldConnections2 = oldMgm.incomingConnections;
+		const newConnections2 = newMgm.incomingConnections;
+		for (const connection of oldConnections2) {
+			if (filterConnection(connection)) {
+				connection.module = newModule;
+				newConnections2.add(connection);
+				oldConnections2.delete(connection);
+			}
+		}
+	}
+
+	/**
+	 * @param {Module} oldModule the old referencing module
+	 * @param {Module} newModule the new referencing module
+	 * @param {FilterConnection} filterConnection filter predicate for replacement
+	 * @returns {void}
+	 */
+	copyOutgoingModuleConnections(oldModule, newModule, filterConnection) {
+		if (oldModule === newModule) return;
+		const oldMgm = this._getModuleGraphModule(oldModule);
+		const newMgm = this._getModuleGraphModule(newModule);
+		// Outgoing connections
+		const oldConnections = oldMgm.outgoingConnections;
+		if (oldConnections !== undefined) {
+			if (newMgm.outgoingConnections === undefined) {
+				newMgm.outgoingConnections = new SortableSet();
+			}
+			const newConnections = newMgm.outgoingConnections;
+			for (const connection of oldConnections) {
+				if (filterConnection(connection)) {
+					const newConnection = connection.clone();
+					newConnection.originModule = newModule;
+					newConnections.add(newConnection);
+					if (newConnection.module !== undefined) {
+						const otherMgm = this._getModuleGraphModule(newConnection.module);
+						otherMgm.incomingConnections.add(newConnection);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {Module} module the referenced module
+	 * @param {string} explanation an explanation why it's referenced
+	 * @returns {void}
+	 */
+	addExtraReason(module, explanation) {
+		const connections = this._getModuleGraphModule(module).incomingConnections;
+		connections.add(new ModuleGraphConnection(null, null, module, explanation));
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency to look for a referenced module
+	 * @returns {Module | null} the referenced module
+	 */
+	getResolvedModule(dependency) {
+		const connection = this.getConnection(dependency);
+		return connection !== undefined ? connection.resolvedModule : null;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency to look for a referenced module
+	 * @returns {ModuleGraphConnection | undefined} the connection
+	 */
+	getConnection(dependency) {
+		const connection = this._dependencyMap.get(dependency);
+		if (connection === undefined) {
+			const module = this.getParentModule(dependency);
+			if (module !== undefined) {
+				const mgm = this._getModuleGraphModule(module);
+				if (
+					mgm._unassignedConnections &&
+					mgm._unassignedConnections.length !== 0
+				) {
+					/** @type {undefined | ModuleGraphConnection} */
+					let foundConnection;
+					for (const connection of mgm._unassignedConnections) {
+						this._dependencyMap.set(
+							/** @type {Dependency} */ (connection.dependency),
+							connection
+						);
+						if (connection.dependency === dependency) {
+							foundConnection = connection;
+						}
+					}
+					mgm._unassignedConnections.length = 0;
+					if (foundConnection !== undefined) {
+						return foundConnection;
+					}
+				}
+			}
+			this._dependencyMap.set(dependency, null);
+			return;
+		}
+		return connection === null ? undefined : connection;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency to look for a referenced module
+	 * @returns {Module | null} the referenced module
+	 */
+	getModule(dependency) {
+		const connection = this.getConnection(dependency);
+		return connection !== undefined ? connection.module : null;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency to look for a referencing module
+	 * @returns {Module | null} the referencing module
+	 */
+	getOrigin(dependency) {
+		const connection = this.getConnection(dependency);
+		return connection !== undefined ? connection.originModule : null;
+	}
+
+	/**
+	 * @param {Dependency} dependency the dependency to look for a referencing module
+	 * @returns {Module | null} the original referencing module
+	 */
+	getResolvedOrigin(dependency) {
+		const connection = this.getConnection(dependency);
+		return connection !== undefined ? connection.resolvedOriginModule : null;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {Iterable} reasons why a module is included
+	 */
+	getIncomingConnections(module) {
+		const connections = this._getModuleGraphModule(module).incomingConnections;
+		return connections;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {Iterable} list of outgoing connections
+	 */
+	getOutgoingConnections(module) {
+		const connections = this._getModuleGraphModule(module).outgoingConnections;
+		return connections === undefined ? EMPTY_SET : connections;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {ReadonlyMap>} reasons why a module is included, in a map by source module
+	 */
+	getIncomingConnectionsByOriginModule(module) {
+		const connections = this._getModuleGraphModule(module).incomingConnections;
+		return connections.getFromUnorderedCache(getConnectionsByOriginModule);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {ReadonlyMap> | undefined} connections to modules, in a map by module
+	 */
+	getOutgoingConnectionsByModule(module) {
+		const connections = this._getModuleGraphModule(module).outgoingConnections;
+		return connections === undefined
+			? undefined
+			: connections.getFromUnorderedCache(getConnectionsByModule);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {ModuleProfile | undefined} the module profile
+	 */
+	getProfile(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.profile;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {ModuleProfile | undefined} profile the module profile
+	 * @returns {void}
+	 */
+	setProfile(module, profile) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.profile = profile;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {Issuer} the issuer module
+	 */
+	getIssuer(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.issuer;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {Module | null} issuer the issuer module
+	 * @returns {void}
+	 */
+	setIssuer(module, issuer) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.issuer = issuer;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {Module | null} issuer the issuer module
+	 * @returns {void}
+	 */
+	setIssuerIfUnset(module, issuer) {
+		const mgm = this._getModuleGraphModule(module);
+		if (mgm.issuer === undefined) mgm.issuer = issuer;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {OptimizationBailouts} optimization bailouts
+	 */
+	getOptimizationBailout(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.optimizationBailout;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {null | true | ExportInfoName[]} the provided exports
+	 */
+	getProvidedExports(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.exports.getProvidedExports();
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {ExportInfoName | ExportInfoName[]} exportName a name of an export
+	 * @returns {boolean | null} true, if the export is provided by the module.
+	 * null, if it's unknown.
+	 * false, if it's not provided.
+	 */
+	isExportProvided(module, exportName) {
+		const mgm = this._getModuleGraphModule(module);
+		const result = mgm.exports.isExportProvided(exportName);
+		return result === undefined ? null : result;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {ExportsInfo} info about the exports
+	 */
+	getExportsInfo(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.exports;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {string} exportName the export
+	 * @returns {ExportInfo} info about the export
+	 */
+	getExportInfo(module, exportName) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.exports.getExportInfo(exportName);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {string} exportName the export
+	 * @returns {ExportInfo} info about the export (do not modify)
+	 */
+	getReadOnlyExportInfo(module, exportName) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.exports.getReadOnlyExportInfo(exportName);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {false | true | SortableSet | null} the used exports
+	 * false: module is not used at all.
+	 * true: the module namespace/object export is used.
+	 * SortableSet: these export names are used.
+	 * empty SortableSet: module is used but no export.
+	 * null: unknown, worst case should be assumed.
+	 */
+	getUsedExports(module, runtime) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.exports.getUsedExports(runtime);
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {number | null} the index of the module
+	 */
+	getPreOrderIndex(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.preOrderIndex;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {number | null} the index of the module
+	 */
+	getPostOrderIndex(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.postOrderIndex;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {number} index the index of the module
+	 * @returns {void}
+	 */
+	setPreOrderIndex(module, index) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.preOrderIndex = index;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {number} index the index of the module
+	 * @returns {boolean} true, if the index was set
+	 */
+	setPreOrderIndexIfUnset(module, index) {
+		const mgm = this._getModuleGraphModule(module);
+		if (mgm.preOrderIndex === null) {
+			mgm.preOrderIndex = index;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {number} index the index of the module
+	 * @returns {void}
+	 */
+	setPostOrderIndex(module, index) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.postOrderIndex = index;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {number} index the index of the module
+	 * @returns {boolean} true, if the index was set
+	 */
+	setPostOrderIndexIfUnset(module, index) {
+		const mgm = this._getModuleGraphModule(module);
+		if (mgm.postOrderIndex === null) {
+			mgm.postOrderIndex = index;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {number | null} the depth of the module
+	 */
+	getDepth(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.depth;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {number} depth the depth of the module
+	 * @returns {void}
+	 */
+	setDepth(module, depth) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.depth = depth;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {number} depth the depth of the module
+	 * @returns {boolean} true, if the depth was set
+	 */
+	setDepthIfLower(module, depth) {
+		const mgm = this._getModuleGraphModule(module);
+		if (mgm.depth === null || mgm.depth > depth) {
+			mgm.depth = depth;
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {boolean} true, if the module is async
+	 */
+	isAsync(module) {
+		const mgm = this._getModuleGraphModule(module);
+		return mgm.async;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {boolean} true, if the module is used as a deferred module at least once
+	 */
+	isDeferred(module) {
+		if (this.isAsync(module)) return false;
+		const connections = this.getIncomingConnections(module);
+		for (const connection of connections) {
+			if (
+				!connection.dependency ||
+				!(connection.dependency instanceof HarmonyImportDependency)
+			) {
+				continue;
+			}
+			if (ImportPhaseUtils.isDefer(connection.dependency.phase)) return true;
+		}
+		return false;
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @returns {void}
+	 */
+	setAsync(module) {
+		const mgm = this._getModuleGraphModule(module);
+		mgm.async = true;
+	}
+
+	/**
+	 * @param {MetaKey} thing any thing
+	 * @returns {Meta} metadata
+	 */
+	getMeta(thing) {
+		let meta = this._metaMap.get(thing);
+		if (meta === undefined) {
+			meta = /** @type {Meta} */ (Object.create(null));
+			this._metaMap.set(thing, meta);
+		}
+		return meta;
+	}
+
+	/**
+	 * @param {MetaKey} thing any thing
+	 * @returns {Meta | undefined} metadata
+	 */
+	getMetaIfExisting(thing) {
+		return this._metaMap.get(thing);
+	}
+
+	/**
+	 * @param {string=} cacheStage a persistent stage name for caching
+	 */
+	freeze(cacheStage) {
+		this._cache = new WeakTupleMap();
+		this._cacheStage = cacheStage;
+	}
+
+	unfreeze() {
+		this._cache = undefined;
+		this._cacheStage = undefined;
+	}
+
+	/**
+	 * @template {EXPECTED_ANY[]} T
+	 * @template R
+	 * @param {(moduleGraph: ModuleGraph, ...args: T) => R} fn computer
+	 * @param {T} args arguments
+	 * @returns {R} computed value or cached
+	 */
+	cached(fn, ...args) {
+		if (this._cache === undefined) return fn(this, ...args);
+		return this._cache.provide(fn, ...args, () => fn(this, ...args));
+	}
+
+	/**
+	 * @param {ModuleMemCaches} moduleMemCaches mem caches for modules for better caching
+	 */
+	setModuleMemCaches(moduleMemCaches) {
+		this._moduleMemCaches = moduleMemCaches;
+	}
+
+	/**
+	 * @template {Dependency} D
+	 * @template {EXPECTED_ANY[]} ARGS
+	 * @template R
+	 * @param {D} dependency dependency
+	 * @param {[...ARGS, (moduleGraph: ModuleGraph, dependency: D, ...args: ARGS) => R]} args arguments, last argument is a function called with moduleGraph, dependency, ...args
+	 * @returns {R} computed value or cached
+	 */
+	dependencyCacheProvide(dependency, ...args) {
+		const fn =
+			/** @type {(moduleGraph: ModuleGraph, dependency: D, ...args: EXPECTED_ANY[]) => R} */
+			(args.pop());
+		if (this._moduleMemCaches && this._cacheStage) {
+			const memCache = this._moduleMemCaches.get(
+				/** @type {Module} */
+				(this.getParentModule(dependency))
+			);
+			if (memCache !== undefined) {
+				return memCache.provide(dependency, this._cacheStage, ...args, () =>
+					fn(this, dependency, ...args)
+				);
+			}
+		}
+		if (this._cache === undefined) return fn(this, dependency, ...args);
+		return this._cache.provide(dependency, ...args, () =>
+			fn(this, dependency, ...args)
+		);
+	}
+
+	// TODO remove in webpack 6
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @param {string} deprecateMessage message for the deprecation message
+	 * @param {string} deprecationCode code for the deprecation
+	 * @returns {ModuleGraph} the module graph
+	 */
+	static getModuleGraphForModule(module, deprecateMessage, deprecationCode) {
+		const fn = deprecateMap.get(deprecateMessage);
+		if (fn) return fn(module);
+		const newFn = util.deprecate(
+			/**
+			 * @param {Module} module the module
+			 * @returns {ModuleGraph} the module graph
+			 */
+			(module) => {
+				const moduleGraph = moduleGraphForModuleMap.get(module);
+				if (!moduleGraph) {
+					throw new Error(
+						`${
+							deprecateMessage
+						}There was no ModuleGraph assigned to the Module for backward-compat (Use the new API)`
+					);
+				}
+				return moduleGraph;
+			},
+			`${deprecateMessage}: Use new ModuleGraph API`,
+			deprecationCode
+		);
+		deprecateMap.set(deprecateMessage, newFn);
+		return newFn(module);
+	}
+
+	// TODO remove in webpack 6
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @returns {void}
+	 */
+	static setModuleGraphForModule(module, moduleGraph) {
+		moduleGraphForModuleMap.set(module, moduleGraph);
+	}
+
+	// TODO remove in webpack 6
+	/**
+	 * @deprecated
+	 * @param {Module} module the module
+	 * @returns {void}
+	 */
+	static clearModuleGraphForModule(module) {
+		moduleGraphForModuleMap.delete(module);
+	}
+}
+
+// TODO remove in webpack 6
+/** @type {WeakMap} */
+const moduleGraphForModuleMap = new WeakMap();
+
+// TODO remove in webpack 6
+/** @type {Map ModuleGraph>} */
+const deprecateMap = new Map();
+
+module.exports = ModuleGraph;
+module.exports.ModuleGraphConnection = ModuleGraphConnection;
diff --git a/lib/ModuleGraphConnection.js b/lib/ModuleGraphConnection.js
new file mode 100644
index 00000000000..061c0426eec
--- /dev/null
+++ b/lib/ModuleGraphConnection.js
@@ -0,0 +1,199 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Dependency").GetConditionFn} GetConditionFn */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/**
+ * Module itself is not connected, but transitive modules are connected transitively.
+ */
+const TRANSITIVE_ONLY = Symbol("transitive only");
+
+/**
+ * While determining the active state, this flag is used to signal a circular connection.
+ */
+const CIRCULAR_CONNECTION = Symbol("circular connection");
+
+/** @typedef {boolean | typeof TRANSITIVE_ONLY | typeof CIRCULAR_CONNECTION} ConnectionState */
+
+/**
+ * @param {ConnectionState} a first
+ * @param {ConnectionState} b second
+ * @returns {ConnectionState} merged
+ */
+const addConnectionStates = (a, b) => {
+	if (a === true || b === true) return true;
+	if (a === false) return b;
+	if (b === false) return a;
+	if (a === TRANSITIVE_ONLY) return b;
+	if (b === TRANSITIVE_ONLY) return a;
+	return a;
+};
+
+/**
+ * @param {ConnectionState} a first
+ * @param {ConnectionState} b second
+ * @returns {ConnectionState} intersected
+ */
+const intersectConnectionStates = (a, b) => {
+	if (a === false || b === false) return false;
+	if (a === true) return b;
+	if (b === true) return a;
+	if (a === CIRCULAR_CONNECTION) return b;
+	if (b === CIRCULAR_CONNECTION) return a;
+	return a;
+};
+
+class ModuleGraphConnection {
+	/**
+	 * @param {Module | null} originModule the referencing module
+	 * @param {Dependency | null} dependency the referencing dependency
+	 * @param {Module} module the referenced module
+	 * @param {string=} explanation some extra detail
+	 * @param {boolean=} weak the reference is weak
+	 * @param {false | null | GetConditionFn=} condition condition for the connection
+	 */
+	constructor(
+		originModule,
+		dependency,
+		module,
+		explanation,
+		weak = false,
+		condition = undefined
+	) {
+		/** @type {Module | null} */
+		this.originModule = originModule;
+		/** @type {Module | null} */
+		this.resolvedOriginModule = originModule;
+		/** @type {Dependency | null} */
+		this.dependency = dependency;
+		/** @type {Module} */
+		this.resolvedModule = module;
+		/** @type {Module} */
+		this.module = module;
+		/** @type {boolean | undefined} */
+		this.weak = weak;
+		/** @type {boolean} */
+		this.conditional = Boolean(condition);
+		/** @type {boolean} */
+		this._active = condition !== false;
+		/** @type {false | null | GetConditionFn | undefined} */
+		this.condition = condition || undefined;
+		/** @type {Set | undefined} */
+		this.explanations = undefined;
+		if (explanation) {
+			this.explanations = new Set();
+			this.explanations.add(explanation);
+		}
+	}
+
+	clone() {
+		const clone = new ModuleGraphConnection(
+			this.resolvedOriginModule,
+			this.dependency,
+			this.resolvedModule,
+			undefined,
+			this.weak,
+			this.condition
+		);
+		clone.originModule = this.originModule;
+		clone.module = this.module;
+		clone.conditional = this.conditional;
+		clone._active = this._active;
+		if (this.explanations) clone.explanations = new Set(this.explanations);
+		return clone;
+	}
+
+	/**
+	 * @param {GetConditionFn} condition condition for the connection
+	 * @returns {void}
+	 */
+	addCondition(condition) {
+		if (this.conditional) {
+			const old =
+				/** @type {GetConditionFn} */
+				(this.condition);
+			/** @type {GetConditionFn} */
+			(this.condition) = (c, r) =>
+				intersectConnectionStates(old(c, r), condition(c, r));
+		} else if (this._active) {
+			this.conditional = true;
+			this.condition = condition;
+		}
+	}
+
+	/**
+	 * @param {string} explanation the explanation to add
+	 * @returns {void}
+	 */
+	addExplanation(explanation) {
+		if (this.explanations === undefined) {
+			this.explanations = new Set();
+		}
+		this.explanations.add(explanation);
+	}
+
+	get explanation() {
+		if (this.explanations === undefined) return "";
+		return [...this.explanations].join(" ");
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, if the connection is active
+	 */
+	isActive(runtime) {
+		if (!this.conditional) return this._active;
+
+		return (
+			/** @type {GetConditionFn} */ (this.condition)(this, runtime) !== false
+		);
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {boolean} true, if the connection is active
+	 */
+	isTargetActive(runtime) {
+		if (!this.conditional) return this._active;
+		return (
+			/** @type {GetConditionFn} */ (this.condition)(this, runtime) === true
+		);
+	}
+
+	/**
+	 * @param {RuntimeSpec} runtime the runtime
+	 * @returns {ConnectionState} true: fully active, false: inactive, TRANSITIVE: direct module inactive, but transitive connection maybe active
+	 */
+	getActiveState(runtime) {
+		if (!this.conditional) return this._active;
+		return /** @type {GetConditionFn} */ (this.condition)(this, runtime);
+	}
+
+	/**
+	 * @param {boolean} value active or not
+	 * @returns {void}
+	 */
+	setActive(value) {
+		this.conditional = false;
+		this._active = value;
+	}
+}
+
+/** @typedef {typeof TRANSITIVE_ONLY} TRANSITIVE_ONLY */
+/** @typedef {typeof CIRCULAR_CONNECTION} CIRCULAR_CONNECTION */
+
+module.exports = ModuleGraphConnection;
+module.exports.CIRCULAR_CONNECTION = /** @type {typeof CIRCULAR_CONNECTION} */ (
+	CIRCULAR_CONNECTION
+);
+module.exports.TRANSITIVE_ONLY = /** @type {typeof TRANSITIVE_ONLY} */ (
+	TRANSITIVE_ONLY
+);
+module.exports.addConnectionStates = addConnectionStates;
diff --git a/lib/ModuleHashingError.js b/lib/ModuleHashingError.js
new file mode 100644
index 00000000000..d8998643f9b
--- /dev/null
+++ b/lib/ModuleHashingError.js
@@ -0,0 +1,31 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+/** @typedef {import("./Module")} Module */
+
+class ModuleHashingError extends WebpackError {
+	/**
+	 * Create a new ModuleHashingError
+	 * @param {Module} module related module
+	 * @param {Error} error Original error
+	 */
+	constructor(module, error) {
+		super();
+
+		/** @type {string} */
+		this.name = "ModuleHashingError";
+		this.error = error;
+		this.message = error.message;
+		this.details = error.stack;
+		this.module = module;
+	}
+}
+
+/** @type {typeof ModuleHashingError} */
+module.exports = ModuleHashingError;
diff --git a/lib/ModuleInfoHeaderPlugin.js b/lib/ModuleInfoHeaderPlugin.js
new file mode 100644
index 00000000000..98eec368d87
--- /dev/null
+++ b/lib/ModuleInfoHeaderPlugin.js
@@ -0,0 +1,318 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { CachedSource, ConcatSource, RawSource } = require("webpack-sources");
+const { UsageState } = require("./ExportsInfo");
+const Template = require("./Template");
+const CssModulesPlugin = require("./css/CssModulesPlugin");
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./ExportsInfo")} ExportsInfo */
+/** @typedef {import("./ExportsInfo").ExportInfo} ExportInfo */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+
+/**
+ * @template T
+ * @param {Iterable} iterable iterable
+ * @returns {string} joined with comma
+ */
+const joinIterableWithComma = (iterable) => {
+	// This is more performant than Array.from().join(", ")
+	// as it doesn't create an array
+	let str = "";
+	let first = true;
+	for (const item of iterable) {
+		if (first) {
+			first = false;
+		} else {
+			str += ", ";
+		}
+		str += item;
+	}
+	return str;
+};
+
+/**
+ * @param {ConcatSource} source output
+ * @param {string} indent spacing
+ * @param {ExportsInfo} exportsInfo data
+ * @param {ModuleGraph} moduleGraph moduleGraph
+ * @param {RequestShortener} requestShortener requestShortener
+ * @param {Set} alreadyPrinted deduplication set
+ * @returns {void}
+ */
+const printExportsInfoToSource = (
+	source,
+	indent,
+	exportsInfo,
+	moduleGraph,
+	requestShortener,
+	alreadyPrinted = new Set()
+) => {
+	const otherExportsInfo = exportsInfo.otherExportsInfo;
+
+	let alreadyPrintedExports = 0;
+
+	// determine exports to print
+	/** @type {ExportInfo[]} */
+	const printedExports = [];
+	for (const exportInfo of exportsInfo.orderedExports) {
+		if (!alreadyPrinted.has(exportInfo)) {
+			alreadyPrinted.add(exportInfo);
+			printedExports.push(exportInfo);
+		} else {
+			alreadyPrintedExports++;
+		}
+	}
+	let showOtherExports = false;
+	if (!alreadyPrinted.has(otherExportsInfo)) {
+		alreadyPrinted.add(otherExportsInfo);
+		showOtherExports = true;
+	} else {
+		alreadyPrintedExports++;
+	}
+
+	// print the exports
+	for (const exportInfo of printedExports) {
+		const target = exportInfo.getTarget(moduleGraph);
+		source.add(
+			`${Template.toComment(
+				`${indent}export ${JSON.stringify(exportInfo.name).slice(
+					1,
+					-1
+				)} [${exportInfo.getProvidedInfo()}] [${exportInfo.getUsedInfo()}] [${exportInfo.getRenameInfo()}]${
+					target
+						? ` -> ${target.module.readableIdentifier(requestShortener)}${
+								target.export
+									? ` .${target.export
+											.map((e) => JSON.stringify(e).slice(1, -1))
+											.join(".")}`
+									: ""
+							}`
+						: ""
+				}`
+			)}\n`
+		);
+		if (exportInfo.exportsInfo) {
+			printExportsInfoToSource(
+				source,
+				`${indent}  `,
+				exportInfo.exportsInfo,
+				moduleGraph,
+				requestShortener,
+				alreadyPrinted
+			);
+		}
+	}
+
+	if (alreadyPrintedExports) {
+		source.add(
+			`${Template.toComment(
+				`${indent}... (${alreadyPrintedExports} already listed exports)`
+			)}\n`
+		);
+	}
+
+	if (showOtherExports) {
+		const target = otherExportsInfo.getTarget(moduleGraph);
+		if (
+			target ||
+			otherExportsInfo.provided !== false ||
+			otherExportsInfo.getUsed(undefined) !== UsageState.Unused
+		) {
+			const title =
+				printedExports.length > 0 || alreadyPrintedExports > 0
+					? "other exports"
+					: "exports";
+			source.add(
+				`${Template.toComment(
+					`${indent}${title} [${otherExportsInfo.getProvidedInfo()}] [${otherExportsInfo.getUsedInfo()}]${
+						target
+							? ` -> ${target.module.readableIdentifier(requestShortener)}`
+							: ""
+					}`
+				)}\n`
+			);
+		}
+	}
+};
+
+/** @typedef {{ header: RawSource | undefined, full: WeakMap }} CacheEntry */
+/** @type {WeakMap>} */
+const caches = new WeakMap();
+
+const PLUGIN_NAME = "ModuleInfoHeaderPlugin";
+
+class ModuleInfoHeaderPlugin {
+	/**
+	 * @param {boolean=} verbose add more information like exports, runtime requirements and bailouts
+	 */
+	constructor(verbose = true) {
+		/** @type {boolean} */
+		this._verbose = verbose;
+	}
+
+	/**
+	 * @param {Compiler} compiler the compiler
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		const { _verbose: verbose } = this;
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const javascriptHooks =
+				JavascriptModulesPlugin.getCompilationHooks(compilation);
+			javascriptHooks.renderModulePackage.tap(
+				PLUGIN_NAME,
+				(
+					moduleSource,
+					module,
+					{ chunk, chunkGraph, moduleGraph, runtimeTemplate }
+				) => {
+					const { requestShortener } = runtimeTemplate;
+					/** @type {undefined | CacheEntry} */
+					let cacheEntry;
+					let cache = caches.get(requestShortener);
+					if (cache === undefined) {
+						caches.set(requestShortener, (cache = new WeakMap()));
+						cache.set(
+							module,
+							(cacheEntry = { header: undefined, full: new WeakMap() })
+						);
+					} else {
+						cacheEntry = cache.get(module);
+						if (cacheEntry === undefined) {
+							cache.set(
+								module,
+								(cacheEntry = { header: undefined, full: new WeakMap() })
+							);
+						} else if (!verbose) {
+							const cachedSource = cacheEntry.full.get(moduleSource);
+							if (cachedSource !== undefined) return cachedSource;
+						}
+					}
+					const source = new ConcatSource();
+					let header = cacheEntry.header;
+					if (header === undefined) {
+						header = this.generateHeader(module, requestShortener);
+						cacheEntry.header = header;
+					}
+					source.add(header);
+					if (verbose) {
+						const exportsType = /** @type {BuildMeta} */ (module.buildMeta)
+							.exportsType;
+						source.add(
+							`${Template.toComment(
+								exportsType
+									? `${exportsType} exports`
+									: "unknown exports (runtime-defined)"
+							)}\n`
+						);
+						if (exportsType) {
+							const exportsInfo = moduleGraph.getExportsInfo(module);
+							printExportsInfoToSource(
+								source,
+								"",
+								exportsInfo,
+								moduleGraph,
+								requestShortener
+							);
+						}
+						source.add(
+							`${Template.toComment(
+								`runtime requirements: ${joinIterableWithComma(
+									chunkGraph.getModuleRuntimeRequirements(module, chunk.runtime)
+								)}`
+							)}\n`
+						);
+						const optimizationBailout =
+							moduleGraph.getOptimizationBailout(module);
+						if (optimizationBailout) {
+							for (const text of optimizationBailout) {
+								const code =
+									typeof text === "function" ? text(requestShortener) : text;
+								source.add(`${Template.toComment(`${code}`)}\n`);
+							}
+						}
+						source.add(moduleSource);
+						return source;
+					}
+					source.add(moduleSource);
+					const cachedSource = new CachedSource(source);
+					cacheEntry.full.set(moduleSource, cachedSource);
+					return cachedSource;
+				}
+			);
+			javascriptHooks.chunkHash.tap(PLUGIN_NAME, (_chunk, hash) => {
+				hash.update(PLUGIN_NAME);
+				hash.update("1");
+			});
+			const cssHooks = CssModulesPlugin.getCompilationHooks(compilation);
+			cssHooks.renderModulePackage.tap(
+				PLUGIN_NAME,
+				(moduleSource, module, { runtimeTemplate }) => {
+					const { requestShortener } = runtimeTemplate;
+					/** @type {undefined | CacheEntry} */
+					let cacheEntry;
+					let cache = caches.get(requestShortener);
+					if (cache === undefined) {
+						caches.set(requestShortener, (cache = new WeakMap()));
+						cache.set(
+							module,
+							(cacheEntry = { header: undefined, full: new WeakMap() })
+						);
+					} else {
+						cacheEntry = cache.get(module);
+						if (cacheEntry === undefined) {
+							cache.set(
+								module,
+								(cacheEntry = { header: undefined, full: new WeakMap() })
+							);
+						} else if (!verbose) {
+							const cachedSource = cacheEntry.full.get(moduleSource);
+							if (cachedSource !== undefined) return cachedSource;
+						}
+					}
+					const source = new ConcatSource();
+					let header = cacheEntry.header;
+					if (header === undefined) {
+						header = this.generateHeader(module, requestShortener);
+						cacheEntry.header = header;
+					}
+					source.add(header);
+					source.add(moduleSource);
+					const cachedSource = new CachedSource(source);
+					cacheEntry.full.set(moduleSource, cachedSource);
+					return cachedSource;
+				}
+			);
+			cssHooks.chunkHash.tap(PLUGIN_NAME, (_chunk, hash) => {
+				hash.update(PLUGIN_NAME);
+				hash.update("1");
+			});
+		});
+	}
+
+	/**
+	 * @param {Module} module the module
+	 * @param {RequestShortener} requestShortener request shortener
+	 * @returns {RawSource} the header
+	 */
+	generateHeader(module, requestShortener) {
+		const req = module.readableIdentifier(requestShortener);
+		const reqStr = req.replace(/\*\//g, "*_/");
+		const reqStrStar = "*".repeat(reqStr.length);
+		const headerStr = `/*!****${reqStrStar}****!*\\\n  !*** ${reqStr} ***!\n  \\****${reqStrStar}****/\n`;
+		return new RawSource(headerStr);
+	}
+}
+
+module.exports = ModuleInfoHeaderPlugin;
diff --git a/lib/ModuleNotFoundError.js b/lib/ModuleNotFoundError.js
index cdfc3147b16..92a6feebc6d 100644
--- a/lib/ModuleNotFoundError.js
+++ b/lib/ModuleNotFoundError.js
@@ -2,21 +2,88 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
 
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Module")} Module */
+
+const previouslyPolyfilledBuiltinModules = {
+	assert: "assert/",
+	buffer: "buffer/",
+	console: "console-browserify",
+	constants: "constants-browserify",
+	crypto: "crypto-browserify",
+	domain: "domain-browser",
+	events: "events/",
+	http: "stream-http",
+	https: "https-browserify",
+	os: "os-browserify/browser",
+	path: "path-browserify",
+	punycode: "punycode/",
+	process: "process/browser",
+	querystring: "querystring-es3",
+	stream: "stream-browserify",
+	_stream_duplex: "readable-stream/duplex",
+	_stream_passthrough: "readable-stream/passthrough",
+	_stream_readable: "readable-stream/readable",
+	_stream_transform: "readable-stream/transform",
+	_stream_writable: "readable-stream/writable",
+	string_decoder: "string_decoder/",
+	sys: "util/",
+	timers: "timers-browserify",
+	tty: "tty-browserify",
+	url: "url/",
+	util: "util/",
+	vm: "vm-browserify",
+	zlib: "browserify-zlib"
+};
+
 class ModuleNotFoundError extends WebpackError {
-	constructor(module, err) {
-		super("Module not found: " + err);
+	/**
+	 * @param {Module | null} module module tied to dependency
+	 * @param {Error & { details?: string }} err error thrown
+	 * @param {DependencyLocation} loc location of dependency
+	 */
+	constructor(module, err, loc) {
+		let message = `Module not found: ${err.toString()}`;
 
+		// TODO remove in webpack 6
+		const match = err.message.match(/Can't resolve '([^']+)'/);
+		if (match) {
+			const request = match[1];
+			const alias =
+				previouslyPolyfilledBuiltinModules[
+					/** @type {keyof previouslyPolyfilledBuiltinModules} */ (request)
+				];
+			if (alias) {
+				const pathIndex = alias.indexOf("/");
+				const dependency = pathIndex > 0 ? alias.slice(0, pathIndex) : alias;
+				message +=
+					"\n\n" +
+					"BREAKING CHANGE: " +
+					"webpack < 5 used to include polyfills for node.js core modules by default.\n" +
+					"This is no longer the case. Verify if you need this module and configure a polyfill for it.\n\n";
+				message +=
+					"If you want to include a polyfill, you need to:\n" +
+					`\t- add a fallback 'resolve.fallback: { "${request}": require.resolve("${alias}") }'\n` +
+					`\t- install '${dependency}'\n`;
+				message +=
+					"If you don't want to include a polyfill, you can use an empty module like this:\n" +
+					`\tresolve.fallback: { "${request}": false }`;
+			}
+		}
+
+		super(message);
+
+		/** @type {string} */
 		this.name = "ModuleNotFoundError";
 		this.details = err.details;
-		this.missing = err.missing;
 		this.module = module;
 		this.error = err;
-
-		Error.captureStackTrace(this, this.constructor);
+		this.loc = loc;
 	}
 }
 
diff --git a/lib/ModuleParseError.js b/lib/ModuleParseError.js
index 32c7a69c116..aeb63bf81ca 100644
--- a/lib/ModuleParseError.js
+++ b/lib/ModuleParseError.js
@@ -2,56 +2,124 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Dependency").SourcePosition} SourcePosition */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
 
-/** @typedef {import("./Module")} Module */
+const WASM_HEADER = Buffer.from([0x00, 0x61, 0x73, 0x6d]);
 
 class ModuleParseError extends WebpackError {
 	/**
-	 * @param {Module} module the errored module
-	 * @param {string} source source code
-	 * @param {Error&any} err the parse error
+	 * @param {string | Buffer} source source code
+	 * @param {Error & { loc?: SourcePosition }} err the parse error
+	 * @param {string[]} loaders the loaders used
+	 * @param {string} type module type
 	 */
-	constructor(module, source, err) {
-		let message = "Module parse failed: " + err.message;
-		let loc = undefined;
-		message += "\nYou may need an appropriate loader to handle this file type.";
+	constructor(source, err, loaders, type) {
+		let message = `Module parse failed: ${err && err.message}`;
+		/** @type {undefined | DependencyLocation} */
+		let loc;
+
+		if (
+			((Buffer.isBuffer(source) && source.subarray(0, 4).equals(WASM_HEADER)) ||
+				(typeof source === "string" && /^\0asm/.test(source))) &&
+			!type.startsWith("webassembly")
+		) {
+			message +=
+				"\nThe module seem to be a WebAssembly module, but module is not flagged as WebAssembly module for webpack.";
+			message +=
+				"\nBREAKING CHANGE: Since webpack 5 WebAssembly is not enabled by default and flagged as experimental feature.";
+			message +=
+				"\nYou need to enable one of the WebAssembly experiments via 'experiments.asyncWebAssembly: true' (based on async modules) or 'experiments.syncWebAssembly: true' (like webpack 4, deprecated).";
+			message +=
+				"\nFor files that transpile to WebAssembly, make sure to set the module type in the 'module.rules' section of the config (e. g. 'type: \"webassembly/async\"').";
+		} else if (!loaders) {
+			message +=
+				"\nYou may need an appropriate loader to handle this file type. " +
+				"See https://webpack.js.org/concepts/loaders";
+		} else if (loaders.length >= 1) {
+			message += `\nFile was processed with these loaders:${loaders
+				.map((loader) => `\n * ${loader}`)
+				.join("")}`;
+			message +=
+				"\nYou may need an additional loader to handle the result of these loaders.";
+		} else {
+			message +=
+				"\nYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders";
+		}
+
 		if (
+			err &&
 			err.loc &&
 			typeof err.loc === "object" &&
 			typeof err.loc.line === "number"
 		) {
-			var lineNumber = err.loc.line;
-			if (/[\0\u0001\u0002\u0003\u0004\u0005\u0006\u0007]/.test(source)) {
+			const lineNumber = err.loc.line;
+
+			if (
+				Buffer.isBuffer(source) ||
+				// eslint-disable-next-line no-control-regex
+				/[\0\u0001\u0002\u0003\u0004\u0005\u0006\u0007]/.test(source)
+			) {
 				// binary file
 				message += "\n(Source code omitted for this binary file)";
 			} else {
-				const sourceLines = source.split("\n");
+				const sourceLines = source.split(/\r?\n/);
 				const start = Math.max(0, lineNumber - 3);
 				const linesBefore = sourceLines.slice(start, lineNumber - 1);
 				const theLine = sourceLines[lineNumber - 1];
 				const linesAfter = sourceLines.slice(lineNumber, lineNumber + 2);
-				message +=
-					linesBefore.map(l => `\n| ${l}`).join("") +
-					`\n> ${theLine}` +
-					linesAfter.map(l => `\n| ${l}`).join("");
+
+				message += `${linesBefore
+					.map((l) => `\n| ${l}`)
+					.join(
+						""
+					)}\n> ${theLine}${linesAfter.map((l) => `\n| ${l}`).join("")}`;
 			}
-			loc = err.loc;
-		} else {
-			message += "\n" + err.stack;
+
+			loc = { start: err.loc };
+		} else if (err && err.stack) {
+			message += `\n${err.stack}`;
 		}
 
 		super(message);
 
+		/** @type {string} */
 		this.name = "ModuleParseError";
-		this.module = module;
 		this.loc = loc;
 		this.error = err;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.error);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.error = read();
 
-		Error.captureStackTrace(this, this.constructor);
+		super.deserialize(context);
 	}
 }
 
+makeSerializable(ModuleParseError, "webpack/lib/ModuleParseError");
+
 module.exports = ModuleParseError;
diff --git a/lib/ModuleProfile.js b/lib/ModuleProfile.js
new file mode 100644
index 00000000000..65dba49eb7c
--- /dev/null
+++ b/lib/ModuleProfile.js
@@ -0,0 +1,108 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+class ModuleProfile {
+	constructor() {
+		this.startTime = Date.now();
+
+		this.factoryStartTime = 0;
+		this.factoryEndTime = 0;
+		this.factory = 0;
+		this.factoryParallelismFactor = 0;
+
+		this.restoringStartTime = 0;
+		this.restoringEndTime = 0;
+		this.restoring = 0;
+		this.restoringParallelismFactor = 0;
+
+		this.integrationStartTime = 0;
+		this.integrationEndTime = 0;
+		this.integration = 0;
+		this.integrationParallelismFactor = 0;
+
+		this.buildingStartTime = 0;
+		this.buildingEndTime = 0;
+		this.building = 0;
+		this.buildingParallelismFactor = 0;
+
+		this.storingStartTime = 0;
+		this.storingEndTime = 0;
+		this.storing = 0;
+		this.storingParallelismFactor = 0;
+
+		/** @type {{ start: number, end: number }[] | undefined} */
+		this.additionalFactoryTimes = undefined;
+		this.additionalFactories = 0;
+		this.additionalFactoriesParallelismFactor = 0;
+
+		/** @deprecated */
+		this.additionalIntegration = 0;
+	}
+
+	markFactoryStart() {
+		this.factoryStartTime = Date.now();
+	}
+
+	markFactoryEnd() {
+		this.factoryEndTime = Date.now();
+		this.factory = this.factoryEndTime - this.factoryStartTime;
+	}
+
+	markRestoringStart() {
+		this.restoringStartTime = Date.now();
+	}
+
+	markRestoringEnd() {
+		this.restoringEndTime = Date.now();
+		this.restoring = this.restoringEndTime - this.restoringStartTime;
+	}
+
+	markIntegrationStart() {
+		this.integrationStartTime = Date.now();
+	}
+
+	markIntegrationEnd() {
+		this.integrationEndTime = Date.now();
+		this.integration = this.integrationEndTime - this.integrationStartTime;
+	}
+
+	markBuildingStart() {
+		this.buildingStartTime = Date.now();
+	}
+
+	markBuildingEnd() {
+		this.buildingEndTime = Date.now();
+		this.building = this.buildingEndTime - this.buildingStartTime;
+	}
+
+	markStoringStart() {
+		this.storingStartTime = Date.now();
+	}
+
+	markStoringEnd() {
+		this.storingEndTime = Date.now();
+		this.storing = this.storingEndTime - this.storingStartTime;
+	}
+
+	// This depends on timing so we ignore it for coverage
+	/* istanbul ignore next */
+	/**
+	 * Merge this profile into another one
+	 * @param {ModuleProfile} realProfile the profile to merge into
+	 * @returns {void}
+	 */
+	mergeInto(realProfile) {
+		realProfile.additionalFactories = this.factory;
+		(realProfile.additionalFactoryTimes =
+			realProfile.additionalFactoryTimes || []).push({
+			start: this.factoryStartTime,
+			end: this.factoryEndTime
+		});
+	}
+}
+
+module.exports = ModuleProfile;
diff --git a/lib/ModuleReason.js b/lib/ModuleReason.js
deleted file mode 100644
index 239584b6c1e..00000000000
--- a/lib/ModuleReason.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-class ModuleReason {
-	constructor(module, dependency, explanation) {
-		this.module = module;
-		this.dependency = dependency;
-		this.explanation = explanation;
-		this._chunks = null;
-	}
-
-	hasChunk(chunk) {
-		if (this._chunks) {
-			if (this._chunks.has(chunk)) return true;
-		} else if (this.module && this.module._chunks.has(chunk)) return true;
-		return false;
-	}
-
-	rewriteChunks(oldChunk, newChunks) {
-		if (!this._chunks) {
-			if (this.module) {
-				if (!this.module._chunks.has(oldChunk)) return;
-				this._chunks = new Set(this.module._chunks);
-			} else {
-				this._chunks = new Set();
-			}
-		}
-		if (this._chunks.has(oldChunk)) {
-			this._chunks.delete(oldChunk);
-			for (let i = 0; i < newChunks.length; i++) {
-				this._chunks.add(newChunks[i]);
-			}
-		}
-	}
-}
-
-module.exports = ModuleReason;
diff --git a/lib/ModuleRestoreError.js b/lib/ModuleRestoreError.js
new file mode 100644
index 00000000000..02a9a3888c6
--- /dev/null
+++ b/lib/ModuleRestoreError.js
@@ -0,0 +1,46 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+/** @typedef {import("./Module")} Module */
+
+class ModuleRestoreError extends WebpackError {
+	/**
+	 * @param {Module} module module tied to dependency
+	 * @param {string | Error} err error thrown
+	 */
+	constructor(module, err) {
+		let message = "Module restore failed: ";
+		/** @type {string | undefined} */
+		const details = undefined;
+		if (err !== null && typeof err === "object") {
+			if (typeof err.stack === "string" && err.stack) {
+				const stack = err.stack;
+				message += stack;
+			} else if (typeof err.message === "string" && err.message) {
+				message += err.message;
+			} else {
+				message += err;
+			}
+		} else {
+			message += String(err);
+		}
+
+		super(message);
+
+		/** @type {string} */
+		this.name = "ModuleRestoreError";
+		/** @type {string | undefined} */
+		this.details = details;
+		this.module = module;
+		this.error = err;
+	}
+}
+
+/** @type {typeof ModuleRestoreError} */
+module.exports = ModuleRestoreError;
diff --git a/lib/ModuleSourceTypeConstants.js b/lib/ModuleSourceTypeConstants.js
new file mode 100644
index 00000000000..c17038dede1
--- /dev/null
+++ b/lib/ModuleSourceTypeConstants.js
@@ -0,0 +1,179 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Alexander Akait @alexander-akait
+*/
+
+"use strict";
+
+/**
+ * @type {Readonly<"javascript">}
+ */
+const JAVASCRIPT_TYPE = "javascript";
+
+/**
+ * @type {Readonly<"runtime">}
+ */
+const RUNTIME_TYPE = "runtime";
+
+/**
+ * @type {Readonly<"webassembly">}
+ */
+const WEBASSEMBLY_TYPE = "webassembly";
+
+/**
+ * @type {Readonly<"asset">}
+ */
+const ASSET_TYPE = "asset";
+
+/**
+ * @type {Readonly<"css">}
+ */
+const CSS_TYPE = "css";
+
+/**
+ * @type {Readonly<"css-import">}
+ */
+const CSS_IMPORT_TYPE = "css-import";
+
+/**
+ * @type {Readonly<"css-url">}
+ */
+const CSS_URL_TYPE = "css-url";
+
+/**
+ * @type {Readonly<"share-init">}
+ */
+const SHARED_INIT_TYPE = "share-init";
+
+/**
+ * @type {Readonly<"remote">}
+ */
+const REMOTE_GENERATOR_TYPE = "remote";
+
+/**
+ * @type {Readonly<"consume-shared">}
+ */
+const CONSUME_SHARED_GENERATOR_TYPE = "consume-shared";
+
+/**
+ * @type {Readonly<"unknown">}
+ */
+const UNKNOWN_TYPE = "unknown";
+
+/**
+ * @typedef {JAVASCRIPT_TYPE | RUNTIME_TYPE | WEBASSEMBLY_TYPE | ASSET_TYPE | CSS_TYPE | CSS_IMPORT_TYPE | CSS_URL_TYPE | SHARED_INIT_TYPE | REMOTE_GENERATOR_TYPE | CONSUME_SHARED_GENERATOR_TYPE | UNKNOWN_TYPE} AllTypes
+ */
+
+/**
+ * @type {ReadonlySet}
+ */
+const NO_TYPES = new Set();
+
+/**
+ * @type {ReadonlySet<"asset">}
+ */
+const ASSET_TYPES = new Set([ASSET_TYPE]);
+
+/**
+ * @type {ReadonlySet<"asset" | "javascript" | "asset">}
+ */
+const ASSET_AND_JAVASCRIPT_TYPES = new Set([ASSET_TYPE, JAVASCRIPT_TYPE]);
+
+/**
+ * @type {ReadonlySet<"css-url" | "asset">}
+ */
+const ASSET_AND_CSS_URL_TYPES = new Set([ASSET_TYPE, CSS_URL_TYPE]);
+
+/**
+ * @type {ReadonlySet<"javascript" | "css-url" | "asset">}
+ */
+const ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES = new Set([
+	ASSET_TYPE,
+	JAVASCRIPT_TYPE,
+	CSS_URL_TYPE
+]);
+
+/**
+ * @type {ReadonlySet<"javascript">}
+ */
+const JAVASCRIPT_TYPES = new Set([JAVASCRIPT_TYPE]);
+
+/**
+ * @type {ReadonlySet<"javascript" | "css-url">}
+ */
+const JAVASCRIPT_AND_CSS_URL_TYPES = new Set([JAVASCRIPT_TYPE, CSS_URL_TYPE]);
+
+/**
+ * @type {ReadonlySet<"javascript" | "css">}
+ */
+const JAVASCRIPT_AND_CSS_TYPES = new Set([JAVASCRIPT_TYPE, CSS_TYPE]);
+
+/**
+ * @type {ReadonlySet<"css">}
+ */
+const CSS_TYPES = new Set([CSS_TYPE]);
+
+/**
+ * @type {ReadonlySet<"css-url">}
+ */
+const CSS_URL_TYPES = new Set([CSS_URL_TYPE]);
+/**
+ * @type {ReadonlySet<"css-import">}
+ */
+const CSS_IMPORT_TYPES = new Set([CSS_IMPORT_TYPE]);
+
+/**
+ * @type {ReadonlySet<"webassembly">}
+ */
+const WEBASSEMBLY_TYPES = new Set([WEBASSEMBLY_TYPE]);
+
+/**
+ * @type {ReadonlySet<"runtime">}
+ */
+const RUNTIME_TYPES = new Set([RUNTIME_TYPE]);
+
+/**
+ * @type {ReadonlySet<"remote" | "share-init">}
+ */
+const REMOTE_AND_SHARE_INIT_TYPES = new Set([
+	REMOTE_GENERATOR_TYPE,
+	SHARED_INIT_TYPE
+]);
+
+/**
+ * @type {ReadonlySet<"consume-shared">}
+ */
+const CONSUME_SHARED_TYPES = new Set([CONSUME_SHARED_GENERATOR_TYPE]);
+
+/**
+ * @type {ReadonlySet<"share-init">}
+ */
+const SHARED_INIT_TYPES = new Set([SHARED_INIT_TYPE]);
+
+module.exports.ASSET_AND_CSS_URL_TYPES = ASSET_AND_CSS_URL_TYPES;
+module.exports.ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES =
+	ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES;
+module.exports.ASSET_AND_JAVASCRIPT_TYPES = ASSET_AND_JAVASCRIPT_TYPES;
+module.exports.ASSET_TYPE = ASSET_TYPE;
+module.exports.ASSET_TYPES = ASSET_TYPES;
+module.exports.CONSUME_SHARED_TYPES = CONSUME_SHARED_TYPES;
+module.exports.CSS_IMPORT_TYPE = CSS_IMPORT_TYPE;
+module.exports.CSS_IMPORT_TYPES = CSS_IMPORT_TYPES;
+module.exports.CSS_TYPE = CSS_TYPE;
+module.exports.CSS_TYPE = CSS_TYPE;
+module.exports.CSS_TYPES = CSS_TYPES;
+module.exports.CSS_URL_TYPE = CSS_URL_TYPE;
+module.exports.CSS_URL_TYPES = CSS_URL_TYPES;
+module.exports.JAVASCRIPT_AND_CSS_TYPES = JAVASCRIPT_AND_CSS_TYPES;
+module.exports.JAVASCRIPT_AND_CSS_URL_TYPES = JAVASCRIPT_AND_CSS_URL_TYPES;
+module.exports.JAVASCRIPT_TYPE = JAVASCRIPT_TYPE;
+module.exports.JAVASCRIPT_TYPES = JAVASCRIPT_TYPES;
+module.exports.NO_TYPES = NO_TYPES;
+module.exports.REMOTE_AND_SHARE_INIT_TYPES = REMOTE_AND_SHARE_INIT_TYPES;
+module.exports.RUNTIME_TYPE = RUNTIME_TYPE;
+module.exports.RUNTIME_TYPES = RUNTIME_TYPES;
+module.exports.SHARED_INIT_TYPE = SHARED_INIT_TYPE;
+module.exports.SHARED_INIT_TYPES = SHARED_INIT_TYPES;
+module.exports.UNKNOWN_TYPE = UNKNOWN_TYPE;
+module.exports.WEBASSEMBLY_TYPE = WEBASSEMBLY_TYPE;
+module.exports.WEBASSEMBLY_TYPES = WEBASSEMBLY_TYPES;
diff --git a/lib/ModuleStoreError.js b/lib/ModuleStoreError.js
new file mode 100644
index 00000000000..3308e68ae22
--- /dev/null
+++ b/lib/ModuleStoreError.js
@@ -0,0 +1,45 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+/** @typedef {import("./Module")} Module */
+
+class ModuleStoreError extends WebpackError {
+	/**
+	 * @param {Module} module module tied to dependency
+	 * @param {string | Error} err error thrown
+	 */
+	constructor(module, err) {
+		let message = "Module storing failed: ";
+		/** @type {string | undefined} */
+		const details = undefined;
+		if (err !== null && typeof err === "object") {
+			if (typeof err.stack === "string" && err.stack) {
+				const stack = err.stack;
+				message += stack;
+			} else if (typeof err.message === "string" && err.message) {
+				message += err.message;
+			} else {
+				message += err;
+			}
+		} else {
+			message += String(err);
+		}
+
+		super(message);
+
+		/** @type {string} */
+		this.name = "ModuleStoreError";
+		this.details = /** @type {string | undefined} */ (details);
+		this.module = module;
+		this.error = err;
+	}
+}
+
+/** @type {typeof ModuleStoreError} */
+module.exports = ModuleStoreError;
diff --git a/lib/ModuleTemplate.js b/lib/ModuleTemplate.js
index 06e787ed930..267d62ce23b 100644
--- a/lib/ModuleTemplate.js
+++ b/lib/ModuleTemplate.js
@@ -2,92 +2,172 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const { Tapable, SyncWaterfallHook, SyncHook } = require("tapable");
+const util = require("util");
+const memoize = require("./util/memoize");
 
+/** @typedef {import("tapable").Tap} Tap */
 /** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
 /** @typedef {import("./Module")} Module */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").ModuleRenderContext}  ModuleRenderContext */
+/** @typedef {import("./util/Hash")} Hash */
 
-module.exports = class ModuleTemplate extends Tapable {
-	constructor(runtimeTemplate, type) {
-		super();
-		this.runtimeTemplate = runtimeTemplate;
-		this.type = type;
-		this.hooks = {
-			content: new SyncWaterfallHook([
-				"source",
-				"module",
-				"options",
-				"dependencyTemplates"
-			]),
-			module: new SyncWaterfallHook([
-				"source",
-				"module",
-				"options",
-				"dependencyTemplates"
-			]),
-			render: new SyncWaterfallHook([
-				"source",
-				"module",
-				"options",
-				"dependencyTemplates"
-			]),
-			package: new SyncWaterfallHook([
-				"source",
-				"module",
-				"options",
-				"dependencyTemplates"
-			]),
-			hash: new SyncHook(["hash"])
-		};
-	}
+/**
+ * @template T
+ * @typedef {import("tapable").IfSet} IfSet
+ */
+
+const getJavascriptModulesPlugin = memoize(() =>
+	require("./javascript/JavascriptModulesPlugin")
+);
 
+// TODO webpack 6: remove this class
+class ModuleTemplate {
 	/**
-	 * @param {Module} module the module
-	 * @param {TODO} dependencyTemplates templates for dependencies
-	 * @param {TODO} options render options
-	 * @returns {Source} the source
+	 * @param {RuntimeTemplate} runtimeTemplate the runtime template
+	 * @param {Compilation} compilation the compilation
 	 */
-	render(module, dependencyTemplates, options) {
-		try {
-			const moduleSource = module.source(
-				dependencyTemplates,
-				this.runtimeTemplate,
-				this.type
-			);
-			const moduleSourcePostContent = this.hooks.content.call(
-				moduleSource,
-				module,
-				options,
-				dependencyTemplates
-			);
-			const moduleSourcePostModule = this.hooks.module.call(
-				moduleSourcePostContent,
-				module,
-				options,
-				dependencyTemplates
-			);
-			const moduleSourcePostRender = this.hooks.render.call(
-				moduleSourcePostModule,
-				module,
-				options,
-				dependencyTemplates
-			);
-			return this.hooks.package.call(
-				moduleSourcePostRender,
-				module,
-				options,
-				dependencyTemplates
-			);
-		} catch (e) {
-			e.message = `${module.identifier()}\n${e.message}`;
-			throw e;
-		}
+	constructor(runtimeTemplate, compilation) {
+		this._runtimeTemplate = runtimeTemplate;
+		this.type = "javascript";
+		this.hooks = Object.freeze({
+			content: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, module: Module, moduleRenderContext: ModuleRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderModuleContent.tap(
+								options,
+								(source, module, renderContext) =>
+									fn(
+										source,
+										module,
+										renderContext,
+										renderContext.dependencyTemplates
+									)
+							);
+					},
+					"ModuleTemplate.hooks.content is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
+					"DEP_MODULE_TEMPLATE_CONTENT"
+				)
+			},
+			module: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, module: Module, moduleRenderContext: ModuleRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderModuleContent.tap(
+								options,
+								(source, module, renderContext) =>
+									fn(
+										source,
+										module,
+										renderContext,
+										renderContext.dependencyTemplates
+									)
+							);
+					},
+					"ModuleTemplate.hooks.module is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
+					"DEP_MODULE_TEMPLATE_MODULE"
+				)
+			},
+			render: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, module: Module, chunkRenderContext: ChunkRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderModuleContainer.tap(
+								options,
+								(source, module, renderContext) =>
+									fn(
+										source,
+										module,
+										renderContext,
+										renderContext.dependencyTemplates
+									)
+							);
+					},
+					"ModuleTemplate.hooks.render is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContainer instead)",
+					"DEP_MODULE_TEMPLATE_RENDER"
+				)
+			},
+			package: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(source: Source, module: Module, chunkRenderContext: ChunkRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
+					 */
+					(options, fn) => {
+						getJavascriptModulesPlugin()
+							.getCompilationHooks(compilation)
+							.renderModulePackage.tap(
+								options,
+								(source, module, renderContext) =>
+									fn(
+										source,
+										module,
+										renderContext,
+										renderContext.dependencyTemplates
+									)
+							);
+					},
+					"ModuleTemplate.hooks.package is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModulePackage instead)",
+					"DEP_MODULE_TEMPLATE_PACKAGE"
+				)
+			},
+			hash: {
+				tap: util.deprecate(
+					/**
+					 * @template AdditionalOptions
+					 * @param {string | Tap & IfSet} options options
+					 * @param {(hash: Hash) => void} fn fn
+					 */
+					(options, fn) => {
+						compilation.hooks.fullHash.tap(options, fn);
+					},
+					"ModuleTemplate.hooks.hash is deprecated (use Compilation.hooks.fullHash instead)",
+					"DEP_MODULE_TEMPLATE_HASH"
+				)
+			}
+		});
 	}
+}
 
-	updateHash(hash) {
-		hash.update("1");
-		this.hooks.hash.call(hash);
-	}
-};
+Object.defineProperty(ModuleTemplate.prototype, "runtimeTemplate", {
+	get: util.deprecate(
+		/**
+		 * @this {ModuleTemplate}
+		 * @returns {RuntimeTemplate} output options
+		 */
+		function runtimeTemplate() {
+			return this._runtimeTemplate;
+		},
+		"ModuleTemplate.runtimeTemplate is deprecated (use Compilation.runtimeTemplate instead)",
+		"DEP_WEBPACK_CHUNK_TEMPLATE_OUTPUT_OPTIONS"
+	)
+});
+
+module.exports = ModuleTemplate;
diff --git a/lib/ModuleTypeConstants.js b/lib/ModuleTypeConstants.js
new file mode 100644
index 00000000000..fe0e98f82fb
--- /dev/null
+++ b/lib/ModuleTypeConstants.js
@@ -0,0 +1,190 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sean Larkin @TheLarkInn
+*/
+
+"use strict";
+
+/**
+ * @type {Readonly<"javascript/auto">}
+ */
+const JAVASCRIPT_MODULE_TYPE_AUTO = "javascript/auto";
+
+/**
+ * @type {Readonly<"javascript/dynamic">}
+ */
+const JAVASCRIPT_MODULE_TYPE_DYNAMIC = "javascript/dynamic";
+
+/**
+ * @type {Readonly<"javascript/esm">}
+ * This is the module type used for _strict_ ES Module syntax. This means that all legacy formats
+ * that webpack supports (CommonJS, AMD, SystemJS) are not supported.
+ */
+const JAVASCRIPT_MODULE_TYPE_ESM = "javascript/esm";
+
+/**
+ * @type {Readonly<"json">}
+ * This is the module type used for JSON files. JSON files are always parsed as ES Module.
+ */
+const JSON_MODULE_TYPE = "json";
+
+/**
+ * @type {Readonly<"webassembly/async">}
+ * This is the module type used for WebAssembly modules. In webpack 5 they are always treated as async modules.
+ */
+const WEBASSEMBLY_MODULE_TYPE_ASYNC = "webassembly/async";
+
+/**
+ * @type {Readonly<"webassembly/sync">}
+ * This is the module type used for WebAssembly modules. In webpack 4 they are always treated as sync modules.
+ * There is a legacy option to support this usage in webpack 5 and up.
+ */
+const WEBASSEMBLY_MODULE_TYPE_SYNC = "webassembly/sync";
+
+/**
+ * @type {Readonly<"css">}
+ * This is the module type used for CSS files.
+ */
+const CSS_MODULE_TYPE = "css";
+
+/**
+ * @type {Readonly<"css/global">}
+ * This is the module type used for CSS modules files where you need to use `:local` in selector list to hash classes.
+ */
+const CSS_MODULE_TYPE_GLOBAL = "css/global";
+
+/**
+ * @type {Readonly<"css/module">}
+ * This is the module type used for CSS modules files, by default all classes are hashed.
+ */
+const CSS_MODULE_TYPE_MODULE = "css/module";
+
+/**
+ * @type {Readonly<"css/auto">}
+ * This is the module type used for CSS files, the module will be parsed as CSS modules if it's filename contains `.module.` or `.modules.`.
+ */
+const CSS_MODULE_TYPE_AUTO = "css/auto";
+
+/**
+ * @type {Readonly<"asset">}
+ * This is the module type used for automatically choosing between `asset/inline`, `asset/resource` based on asset size limit (8096).
+ */
+const ASSET_MODULE_TYPE = "asset";
+
+/**
+ * @type {Readonly<"asset/inline">}
+ * This is the module type used for assets that are inlined as a data URI. This is the equivalent of `url-loader`.
+ */
+const ASSET_MODULE_TYPE_INLINE = "asset/inline";
+
+/**
+ * @type {Readonly<"asset/resource">}
+ * This is the module type used for assets that are copied to the output directory. This is the equivalent of `file-loader`.
+ */
+const ASSET_MODULE_TYPE_RESOURCE = "asset/resource";
+
+/**
+ * @type {Readonly<"asset/source">}
+ * This is the module type used for assets that are imported as source code. This is the equivalent of `raw-loader`.
+ */
+const ASSET_MODULE_TYPE_SOURCE = "asset/source";
+
+/**
+ * @type {Readonly<"asset/bytes">}
+ * This is the module type used for assets that are imported as Uint8Array.
+ */
+const ASSET_MODULE_TYPE_BYTES = "asset/bytes";
+
+/**
+ * @type {Readonly<"asset/raw-data-url">}
+ * This is the module type used for the ignored asset module.
+ */
+const ASSET_MODULE_TYPE_RAW_DATA_URL = "asset/raw-data-url";
+
+/**
+ * @type {Readonly<"runtime">}
+ * This is the module type used for the webpack runtime abstractions.
+ */
+const WEBPACK_MODULE_TYPE_RUNTIME = "runtime";
+
+/**
+ * @type {Readonly<"fallback-module">}
+ * This is the module type used for the ModuleFederation feature's FallbackModule class.
+ */
+const WEBPACK_MODULE_TYPE_FALLBACK = "fallback-module";
+
+/**
+ * @type {Readonly<"remote-module">}
+ * This is the module type used for the ModuleFederation feature's RemoteModule class.
+ */
+const WEBPACK_MODULE_TYPE_REMOTE = "remote-module";
+
+/**
+ * @type {Readonly<"provide-module">}
+ * This is the module type used for the ModuleFederation feature's ProvideModule class.
+ */
+const WEBPACK_MODULE_TYPE_PROVIDE = "provide-module";
+
+/**
+ * @type {Readonly<"consume-shared-module">}
+ * This is the module type used for the ModuleFederation feature's ConsumeSharedModule class.
+ */
+const WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = "consume-shared-module";
+
+/**
+ * @type {Readonly<"lazy-compilation-proxy">}
+ * Module type used for `experiments.lazyCompilation` feature. See `LazyCompilationPlugin` for more information.
+ */
+const WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = "lazy-compilation-proxy";
+
+/** @typedef {"javascript/auto" | "javascript/dynamic" | "javascript/esm"} JavaScriptModuleTypes */
+/** @typedef {"json"} JSONModuleType */
+/** @typedef {"webassembly/async" | "webassembly/sync"} WebAssemblyModuleTypes */
+/** @typedef {"css" | "css/global" | "css/module" | "css/auto"} CSSModuleTypes */
+/** @typedef {"asset" | "asset/inline" | "asset/resource" | "asset/source" | "asset/raw-data-url"} AssetModuleTypes */
+/** @typedef {"runtime" | "fallback-module" | "remote-module" | "provide-module" | "consume-shared-module" | "lazy-compilation-proxy"} WebpackModuleTypes */
+/** @typedef {string} UnknownModuleTypes */
+/** @typedef {JavaScriptModuleTypes | JSONModuleType | WebAssemblyModuleTypes | CSSModuleTypes | AssetModuleTypes | WebpackModuleTypes | UnknownModuleTypes} ModuleTypes */
+
+module.exports.ASSET_MODULE_TYPE = ASSET_MODULE_TYPE;
+module.exports.ASSET_MODULE_TYPE_BYTES = ASSET_MODULE_TYPE_BYTES;
+module.exports.ASSET_MODULE_TYPE_INLINE = ASSET_MODULE_TYPE_INLINE;
+module.exports.ASSET_MODULE_TYPE_RAW_DATA_URL = ASSET_MODULE_TYPE_RAW_DATA_URL;
+module.exports.ASSET_MODULE_TYPE_RESOURCE = ASSET_MODULE_TYPE_RESOURCE;
+module.exports.ASSET_MODULE_TYPE_SOURCE = ASSET_MODULE_TYPE_SOURCE;
+/** @type {CSSModuleTypes[]} */
+module.exports.CSS_MODULES = [
+	CSS_MODULE_TYPE,
+	CSS_MODULE_TYPE_GLOBAL,
+	CSS_MODULE_TYPE_MODULE,
+	CSS_MODULE_TYPE_AUTO
+];
+module.exports.CSS_MODULE_TYPE = CSS_MODULE_TYPE;
+module.exports.CSS_MODULE_TYPE_AUTO = CSS_MODULE_TYPE_AUTO;
+module.exports.CSS_MODULE_TYPE_GLOBAL = CSS_MODULE_TYPE_GLOBAL;
+module.exports.CSS_MODULE_TYPE_MODULE = CSS_MODULE_TYPE_MODULE;
+/** @type {JavaScriptModuleTypes[]} */
+module.exports.JAVASCRIPT_MODULES = [
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+];
+module.exports.JAVASCRIPT_MODULE_TYPE_AUTO = JAVASCRIPT_MODULE_TYPE_AUTO;
+module.exports.JAVASCRIPT_MODULE_TYPE_DYNAMIC = JAVASCRIPT_MODULE_TYPE_DYNAMIC;
+module.exports.JAVASCRIPT_MODULE_TYPE_ESM = JAVASCRIPT_MODULE_TYPE_ESM;
+module.exports.JSON_MODULE_TYPE = JSON_MODULE_TYPE;
+/** @type {WebAssemblyModuleTypes[]} */
+module.exports.WEBASSEMBLY_MODULES = [
+	WEBASSEMBLY_MODULE_TYPE_ASYNC,
+	WEBASSEMBLY_MODULE_TYPE_SYNC
+];
+module.exports.WEBASSEMBLY_MODULE_TYPE_ASYNC = WEBASSEMBLY_MODULE_TYPE_ASYNC;
+module.exports.WEBASSEMBLY_MODULE_TYPE_SYNC = WEBASSEMBLY_MODULE_TYPE_SYNC;
+module.exports.WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE =
+	WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE;
+module.exports.WEBPACK_MODULE_TYPE_FALLBACK = WEBPACK_MODULE_TYPE_FALLBACK;
+module.exports.WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY =
+	WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY;
+module.exports.WEBPACK_MODULE_TYPE_PROVIDE = WEBPACK_MODULE_TYPE_PROVIDE;
+module.exports.WEBPACK_MODULE_TYPE_REMOTE = WEBPACK_MODULE_TYPE_REMOTE;
+module.exports.WEBPACK_MODULE_TYPE_RUNTIME = WEBPACK_MODULE_TYPE_RUNTIME;
diff --git a/lib/ModuleWarning.js b/lib/ModuleWarning.js
index 13068192c16..4c6dde1cbb0 100644
--- a/lib/ModuleWarning.js
+++ b/lib/ModuleWarning.js
@@ -2,35 +2,67 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const WebpackError = require("./WebpackError");
 const { cleanUp } = require("./ErrorHelpers");
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
 
 class ModuleWarning extends WebpackError {
-	constructor(module, warning, { from = null } = {}) {
+	/**
+	 * @param {Error} warning error thrown
+	 * @param {{ from?: string | null }} info additional info
+	 */
+	constructor(warning, { from = null } = {}) {
 		let message = "Module Warning";
-		if (from) {
-			message += ` (from ${from}):\n`;
-		} else {
-			message += ": ";
-		}
+
+		message += from ? ` (from ${from}):\n` : ": ";
+
 		if (warning && typeof warning === "object" && warning.message) {
 			message += warning.message;
 		} else if (warning) {
-			message += warning;
+			message += String(warning);
 		}
+
 		super(message);
+
+		/** @type {string} */
 		this.name = "ModuleWarning";
-		this.module = module;
 		this.warning = warning;
 		this.details =
 			warning && typeof warning === "object" && warning.stack
 				? cleanUp(warning.stack, this.message)
 				: undefined;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.warning);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
 
-		Error.captureStackTrace(this, this.constructor);
+		this.warning = read();
+
+		super.deserialize(context);
 	}
 }
 
+makeSerializable(ModuleWarning, "webpack/lib/ModuleWarning");
+
+/** @type {typeof ModuleWarning} */
 module.exports = ModuleWarning;
diff --git a/lib/MultiCompiler.js b/lib/MultiCompiler.js
index cdc7fb5089e..65ea34295d6 100644
--- a/lib/MultiCompiler.js
+++ b/lib/MultiCompiler.js
@@ -2,57 +2,169 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const { Tapable, SyncHook, MultiHook } = require("tapable");
 const asyncLib = require("neo-async");
-const MultiWatching = require("./MultiWatching");
-const MultiStats = require("./MultiStats");
+const { MultiHook, SyncHook } = require("tapable");
+
 const ConcurrentCompilationError = require("./ConcurrentCompilationError");
+const MultiStats = require("./MultiStats");
+const MultiWatching = require("./MultiWatching");
+const WebpackError = require("./WebpackError");
+const ArrayQueue = require("./util/ArrayQueue");
 
-module.exports = class MultiCompiler extends Tapable {
-	constructor(compilers) {
-		super();
-		this.hooks = {
-			done: new SyncHook(["stats"]),
-			invalid: new MultiHook(compilers.map(c => c.hooks.invalid)),
-			run: new MultiHook(compilers.map(c => c.hooks.run)),
-			watchClose: new SyncHook([]),
-			watchRun: new MultiHook(compilers.map(c => c.hooks.watchRun))
-		};
+/**
+ * @template T
+ * @typedef {import("tapable").AsyncSeriesHook} AsyncSeriesHook
+ */
+/**
+ * @template T
+ * @template R
+ * @typedef {import("tapable").SyncBailHook} SyncBailHook
+ */
+/** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
+/** @typedef {import("../declarations/WebpackOptions").WatchOptions} WatchOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/**
+ * @template T
+ * @template [R=void]
+ * @typedef {import("./webpack").Callback} Callback
+ */
+/** @typedef {import("./webpack").ErrorCallback} ErrorCallback */
+/** @typedef {import("./Stats")} Stats */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
+/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
+/** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
+
+/**
+ * @callback RunWithDependenciesHandler
+ * @param {Compiler} compiler
+ * @param {Callback} callback
+ * @returns {void}
+ */
+
+/**
+ * @typedef {object} MultiCompilerOptions
+ * @property {number=} parallelism how many Compilers are allows to run at the same time in parallel
+ */
+
+/** @typedef {ReadonlyArray & MultiCompilerOptions} MultiWebpackOptions */
+
+const CLASS_NAME = "MultiCompiler";
+
+module.exports = class MultiCompiler {
+	/**
+	 * @param {Compiler[] | Record} compilers child compilers
+	 * @param {MultiCompilerOptions} options options
+	 */
+	constructor(compilers, options) {
 		if (!Array.isArray(compilers)) {
-			compilers = Object.keys(compilers).map(name => {
-				compilers[name].name = name;
-				return compilers[name];
+			/** @type {Compiler[]} */
+			compilers = Object.keys(compilers).map((name) => {
+				/** @type {Record} */
+				(compilers)[name].name = name;
+				return /** @type {Record} */ (compilers)[name];
 			});
 		}
+
+		this.hooks = Object.freeze({
+			/** @type {SyncHook<[MultiStats]>} */
+			done: new SyncHook(["stats"]),
+			/** @type {MultiHook>} */
+			invalid: new MultiHook(compilers.map((c) => c.hooks.invalid)),
+			/** @type {MultiHook>} */
+			run: new MultiHook(compilers.map((c) => c.hooks.run)),
+			/** @type {SyncHook<[]>} */
+			watchClose: new SyncHook([]),
+			/** @type {MultiHook>} */
+			watchRun: new MultiHook(compilers.map((c) => c.hooks.watchRun)),
+			/** @type {MultiHook>} */
+			infrastructureLog: new MultiHook(
+				compilers.map((c) => c.hooks.infrastructureLog)
+			)
+		});
 		this.compilers = compilers;
+		/** @type {MultiCompilerOptions} */
+		this._options = {
+			parallelism: options.parallelism || Infinity
+		};
+		/** @type {WeakMap} */
+		this.dependencies = new WeakMap();
+		this.running = false;
+
+		/** @type {(Stats | null)[]} */
+		const compilerStats = this.compilers.map(() => null);
 		let doneCompilers = 0;
-		let compilerStats = [];
-		let index = 0;
-		for (const compiler of this.compilers) {
+		for (let index = 0; index < this.compilers.length; index++) {
+			const compiler = this.compilers[index];
+			const compilerIndex = index;
 			let compilerDone = false;
-			const compilerIndex = index++;
 			// eslint-disable-next-line no-loop-func
-			compiler.hooks.done.tap("MultiCompiler", stats => {
+			compiler.hooks.done.tap(CLASS_NAME, (stats) => {
 				if (!compilerDone) {
 					compilerDone = true;
 					doneCompilers++;
 				}
 				compilerStats[compilerIndex] = stats;
 				if (doneCompilers === this.compilers.length) {
-					this.hooks.done.call(new MultiStats(compilerStats));
+					this.hooks.done.call(
+						new MultiStats(/** @type {Stats[]} */ (compilerStats))
+					);
 				}
 			});
 			// eslint-disable-next-line no-loop-func
-			compiler.hooks.invalid.tap("MultiCompiler", () => {
+			compiler.hooks.invalid.tap(CLASS_NAME, () => {
 				if (compilerDone) {
 					compilerDone = false;
 					doneCompilers--;
 				}
 			});
 		}
-		this.running = false;
+		this._validateCompilersOptions();
+	}
+
+	_validateCompilersOptions() {
+		if (this.compilers.length < 2) return;
+		/**
+		 * @param {Compiler} compiler compiler
+		 * @param {WebpackError} warning warning
+		 */
+		const addWarning = (compiler, warning) => {
+			compiler.hooks.thisCompilation.tap(CLASS_NAME, (compilation) => {
+				compilation.warnings.push(warning);
+			});
+		};
+		/** @type {Set} */
+		const cacheNames = new Set();
+		for (const compiler of this.compilers) {
+			if (compiler.options.cache && "name" in compiler.options.cache) {
+				const name = /** @type {string} */ (compiler.options.cache.name);
+				if (cacheNames.has(name)) {
+					addWarning(
+						compiler,
+						new WebpackError(
+							`${
+								compiler.name
+									? `Compiler with name "${compiler.name}" doesn't use unique cache name. `
+									: ""
+							}Please set unique "cache.name" option. Name "${name}" already used.`
+						)
+					);
+				} else {
+					cacheNames.add(name);
+				}
+			}
+		}
+	}
+
+	get options() {
+		return Object.assign(
+			this.compilers.map((c) => c.options),
+			this._options
+		);
 	}
 
 	get outputPath() {
@@ -74,26 +186,85 @@ module.exports = class MultiCompiler extends Tapable {
 		throw new Error("Cannot read inputFileSystem of a MultiCompiler");
 	}
 
-	get outputFileSystem() {
-		throw new Error("Cannot read outputFileSystem of a MultiCompiler");
-	}
-
+	/**
+	 * @param {InputFileSystem} value the new input file system
+	 */
 	set inputFileSystem(value) {
 		for (const compiler of this.compilers) {
 			compiler.inputFileSystem = value;
 		}
 	}
 
+	get outputFileSystem() {
+		throw new Error("Cannot read outputFileSystem of a MultiCompiler");
+	}
+
+	/**
+	 * @param {OutputFileSystem} value the new output file system
+	 */
 	set outputFileSystem(value) {
 		for (const compiler of this.compilers) {
 			compiler.outputFileSystem = value;
 		}
 	}
 
+	get watchFileSystem() {
+		throw new Error("Cannot read watchFileSystem of a MultiCompiler");
+	}
+
+	/**
+	 * @param {WatchFileSystem} value the new watch file system
+	 */
+	set watchFileSystem(value) {
+		for (const compiler of this.compilers) {
+			compiler.watchFileSystem = value;
+		}
+	}
+
+	/**
+	 * @param {IntermediateFileSystem} value the new intermediate file system
+	 */
+	set intermediateFileSystem(value) {
+		for (const compiler of this.compilers) {
+			compiler.intermediateFileSystem = value;
+		}
+	}
+
+	get intermediateFileSystem() {
+		throw new Error("Cannot read outputFileSystem of a MultiCompiler");
+	}
+
+	/**
+	 * @param {string | (() => string)} name name of the logger, or function called once to get the logger name
+	 * @returns {Logger} a logger with that name
+	 */
+	getInfrastructureLogger(name) {
+		return this.compilers[0].getInfrastructureLogger(name);
+	}
+
+	/**
+	 * @param {Compiler} compiler the child compiler
+	 * @param {string[]} dependencies its dependencies
+	 * @returns {void}
+	 */
+	setDependencies(compiler, dependencies) {
+		this.dependencies.set(compiler, dependencies);
+	}
+
+	/**
+	 * @param {Callback} callback signals when the validation is complete
+	 * @returns {boolean} true if the dependencies are valid
+	 */
 	validateDependencies(callback) {
+		/** @type {Set<{ source: Compiler, target: Compiler }>} */
 		const edges = new Set();
+		/** @type {string[]} */
 		const missing = [];
-		const targetFound = compiler => {
+		/**
+		 * @param {Compiler} compiler compiler
+		 * @returns {boolean} target was found
+		 */
+		const targetFound = (compiler) => {
 			for (const edge of edges) {
 				if (edge.target === compiler) {
 					return true;
@@ -101,16 +272,21 @@ module.exports = class MultiCompiler extends Tapable {
 			}
 			return false;
 		};
-		const sortEdges = (e1, e2) => {
-			return (
-				e1.source.name.localeCompare(e2.source.name) ||
-				e1.target.name.localeCompare(e2.target.name)
-			);
-		};
+		/**
+		 * @param {{ source: Compiler, target: Compiler }} e1 edge 1
+		 * @param {{ source: Compiler, target: Compiler }} e2 edge 2
+		 * @returns {number} result
+		 */
+		const sortEdges = (e1, e2) =>
+			/** @type {string} */
+			(e1.source.name).localeCompare(/** @type {string} */ (e2.source.name)) ||
+			/** @type {string} */
+			(e1.target.name).localeCompare(/** @type {string} */ (e2.target.name));
 		for (const source of this.compilers) {
-			if (source.dependencies) {
-				for (const dep of source.dependencies) {
-					const target = this.compilers.find(c => c.name === dep);
+			const dependencies = this.dependencies.get(source);
+			if (dependencies) {
+				for (const dep of dependencies) {
+					const target = this.compilers.find((c) => c.name === dep);
 					if (!target) {
 						missing.push(dep);
 					} else {
@@ -122,8 +298,11 @@ module.exports = class MultiCompiler extends Tapable {
 				}
 			}
 		}
-		const errors = missing.map(m => `Compiler dependency \`${m}\` not found.`);
-		const stack = this.compilers.filter(c => !targetFound(c));
+		/** @type {string[]} */
+		const errors = missing.map(
+			(m) => `Compiler dependency \`${m}\` not found.`
+		);
+		const stack = this.compilers.filter((c) => !targetFound(c));
 		while (stack.length > 0) {
 			const current = stack.pop();
 			for (const edge of edges) {
@@ -137,9 +316,10 @@ module.exports = class MultiCompiler extends Tapable {
 			}
 		}
 		if (edges.size > 0) {
-			const lines = Array.from(edges)
+			/** @type {string[]} */
+			const lines = [...edges]
 				.sort(sortEdges)
-				.map(edge => `${edge.source.name} -> ${edge.target.name}`);
+				.map((edge) => `${edge.source.name} -> ${edge.target.name}`);
 			lines.unshift("Circular dependency found in compiler dependencies.");
 			errors.unshift(lines.join("\n"));
 		}
@@ -151,17 +331,35 @@ module.exports = class MultiCompiler extends Tapable {
 		return true;
 	}
 
+	// TODO webpack 6 remove
+	/**
+	 * @deprecated This method should have been private
+	 * @param {Compiler[]} compilers the child compilers
+	 * @param {RunWithDependenciesHandler} fn a handler to run for each compiler
+	 * @param {Callback} callback the compiler's handler
+	 * @returns {void}
+	 */
 	runWithDependencies(compilers, fn, callback) {
+		/** @type {Set} */
 		const fulfilledNames = new Set();
 		let remainingCompilers = compilers;
-		const isDependencyFulfilled = d => fulfilledNames.has(d);
+		/**
+		 * @param {string} d dependency
+		 * @returns {boolean} when dependency was fulfilled
+		 */
+		const isDependencyFulfilled = (d) => fulfilledNames.has(d);
+		/**
+		 * @returns {Compiler[]} compilers
+		 */
 		const getReadyCompilers = () => {
-			let readyCompilers = [];
-			let list = remainingCompilers;
+			/** @type {Compiler[]} */
+			const readyCompilers = [];
+			const list = remainingCompilers;
 			remainingCompilers = [];
 			for (const c of list) {
+				const dependencies = this.dependencies.get(c);
 				const ready =
-					!c.dependencies || c.dependencies.every(isDependencyFulfilled);
+					!dependencies || dependencies.every(isDependencyFulfilled);
 				if (ready) {
 					readyCompilers.push(c);
 				} else {
@@ -170,104 +368,285 @@ module.exports = class MultiCompiler extends Tapable {
 			}
 			return readyCompilers;
 		};
-		const runCompilers = callback => {
-			if (remainingCompilers.length === 0) return callback();
+		/**
+		 * @param {Callback} callback callback
+		 * @returns {void}
+		 */
+		const runCompilers = (callback) => {
+			if (remainingCompilers.length === 0) return callback(null);
 			asyncLib.map(
 				getReadyCompilers(),
 				(compiler, callback) => {
-					fn(compiler, err => {
+					fn(compiler, (err) => {
 						if (err) return callback(err);
-						fulfilledNames.add(compiler.name);
+						fulfilledNames.add(/** @type {string} */ (compiler.name));
 						runCompilers(callback);
 					});
 				},
-				callback
+				(err, results) => {
+					callback(/** @type {Error | null} */ (err), results);
+				}
 			);
 		};
 		runCompilers(callback);
 	}
 
+	/**
+	 * @template SetupResult
+	 * @param {(compiler: Compiler, index: number, doneCallback: Callback, isBlocked: () => boolean, setChanged: () => void, setInvalid: () => void) => SetupResult} setup setup a single compiler
+	 * @param {(compiler: Compiler, setupResult: SetupResult, callback: Callback) => void} run run/continue a single compiler
+	 * @param {Callback} callback callback when all compilers are done, result includes Stats of all changed compilers
+	 * @returns {SetupResult[]} result of setup
+	 */
+	_runGraph(setup, run, callback) {
+		/** @typedef {{ compiler: Compiler, setupResult: undefined | SetupResult, result: undefined | Stats, state: "pending" | "blocked" | "queued" | "starting" | "running" | "running-outdated" | "done", children: Node[], parents: Node[] }} Node */
+
+		// State transitions for nodes:
+		// -> blocked (initial)
+		// blocked -> starting [running++] (when all parents done)
+		// queued -> starting [running++] (when processing the queue)
+		// starting -> running (when run has been called)
+		// running -> done [running--] (when compilation is done)
+		// done -> pending (when invalidated from file change)
+		// pending -> blocked [add to queue] (when invalidated from aggregated changes)
+		// done -> blocked [add to queue] (when invalidated, from parent invalidation)
+		// running -> running-outdated (when invalidated, either from change or parent invalidation)
+		// running-outdated -> blocked [running--] (when compilation is done)
+
+		/** @type {Node[]} */
+		const nodes = this.compilers.map((compiler) => ({
+			compiler,
+			setupResult: undefined,
+			result: undefined,
+			state: "blocked",
+			children: [],
+			parents: []
+		}));
+		/** @type {Map} */
+		const compilerToNode = new Map();
+		for (const node of nodes) {
+			compilerToNode.set(/** @type {string} */ (node.compiler.name), node);
+		}
+		for (const node of nodes) {
+			const dependencies = this.dependencies.get(node.compiler);
+			if (!dependencies) continue;
+			for (const dep of dependencies) {
+				const parent = /** @type {Node} */ (compilerToNode.get(dep));
+				node.parents.push(parent);
+				parent.children.push(node);
+			}
+		}
+		/** @type {ArrayQueue} */
+		const queue = new ArrayQueue();
+		for (const node of nodes) {
+			if (node.parents.length === 0) {
+				node.state = "queued";
+				queue.enqueue(node);
+			}
+		}
+		let errored = false;
+		let running = 0;
+		const parallelism = /** @type {number} */ (this._options.parallelism);
+		/**
+		 * @param {Node} node node
+		 * @param {(Error | null)=} err error
+		 * @param {Stats=} stats result
+		 * @returns {void}
+		 */
+		const nodeDone = (node, err, stats) => {
+			if (errored) return;
+			if (err) {
+				errored = true;
+				return asyncLib.each(
+					nodes,
+					(node, callback) => {
+						if (node.compiler.watching) {
+							node.compiler.watching.close(callback);
+						} else {
+							callback();
+						}
+					},
+					() => callback(err)
+				);
+			}
+			node.result = stats;
+			running--;
+			if (node.state === "running") {
+				node.state = "done";
+				for (const child of node.children) {
+					if (child.state === "blocked") queue.enqueue(child);
+				}
+			} else if (node.state === "running-outdated") {
+				node.state = "blocked";
+				queue.enqueue(node);
+			}
+			processQueue();
+		};
+		/**
+		 * @param {Node} node node
+		 * @returns {void}
+		 */
+		const nodeInvalidFromParent = (node) => {
+			if (node.state === "done") {
+				node.state = "blocked";
+			} else if (node.state === "running") {
+				node.state = "running-outdated";
+			}
+			for (const child of node.children) {
+				nodeInvalidFromParent(child);
+			}
+		};
+		/**
+		 * @param {Node} node node
+		 * @returns {void}
+		 */
+		const nodeInvalid = (node) => {
+			if (node.state === "done") {
+				node.state = "pending";
+			} else if (node.state === "running") {
+				node.state = "running-outdated";
+			}
+			for (const child of node.children) {
+				nodeInvalidFromParent(child);
+			}
+		};
+		/**
+		 * @param {Node} node node
+		 * @returns {void}
+		 */
+		const nodeChange = (node) => {
+			nodeInvalid(node);
+			if (node.state === "pending") {
+				node.state = "blocked";
+			}
+			if (node.state === "blocked") {
+				queue.enqueue(node);
+				processQueue();
+			}
+		};
+
+		/** @type {SetupResult[]} */
+		const setupResults = [];
+		for (const [i, node] of nodes.entries()) {
+			setupResults.push(
+				(node.setupResult = setup(
+					node.compiler,
+					i,
+					nodeDone.bind(null, node),
+					() => node.state !== "starting" && node.state !== "running",
+					() => nodeChange(node),
+					() => nodeInvalid(node)
+				))
+			);
+		}
+		let processing = true;
+		const processQueue = () => {
+			if (processing) return;
+			processing = true;
+			process.nextTick(processQueueWorker);
+		};
+		const processQueueWorker = () => {
+			// eslint-disable-next-line no-unmodified-loop-condition
+			while (running < parallelism && queue.length > 0 && !errored) {
+				const node = /** @type {Node} */ (queue.dequeue());
+				if (
+					node.state === "queued" ||
+					(node.state === "blocked" &&
+						node.parents.every((p) => p.state === "done"))
+				) {
+					running++;
+					node.state = "starting";
+					run(
+						node.compiler,
+						/** @type {SetupResult} */ (node.setupResult),
+						nodeDone.bind(null, node)
+					);
+					node.state = "running";
+				}
+			}
+			processing = false;
+			if (
+				!errored &&
+				running === 0 &&
+				nodes.every((node) => node.state === "done")
+			) {
+				/** @type {Stats[]} */
+				const stats = [];
+				for (const node of nodes) {
+					const result = node.result;
+					if (result) {
+						node.result = undefined;
+						stats.push(result);
+					}
+				}
+				if (stats.length > 0) {
+					callback(null, new MultiStats(stats));
+				}
+			}
+		};
+		processQueueWorker();
+		return setupResults;
+	}
+
+	/**
+	 * @param {WatchOptions | WatchOptions[]} watchOptions the watcher's options
+	 * @param {Callback} handler signals when the call finishes
+	 * @returns {MultiWatching | undefined} a compiler watcher
+	 */
 	watch(watchOptions, handler) {
-		if (this.running) return handler(new ConcurrentCompilationError());
+		if (this.running) {
+			handler(new ConcurrentCompilationError());
+			return;
+		}
+		this.running = true;
 
-		let watchings = [];
-		let allStats = this.compilers.map(() => null);
-		let compilerStatus = this.compilers.map(() => false);
 		if (this.validateDependencies(handler)) {
-			this.running = true;
-			this.runWithDependencies(
-				this.compilers,
-				(compiler, callback) => {
-					const compilerIdx = this.compilers.indexOf(compiler);
-					let firstRun = true;
-					let watching = compiler.watch(
-						Array.isArray(watchOptions)
-							? watchOptions[compilerIdx]
-							: watchOptions,
-						(err, stats) => {
-							if (err) handler(err);
-							if (stats) {
-								allStats[compilerIdx] = stats;
-								compilerStatus[compilerIdx] = "new";
-								if (compilerStatus.every(Boolean)) {
-									const freshStats = allStats.filter((s, idx) => {
-										return compilerStatus[idx] === "new";
-									});
-									compilerStatus.fill(true);
-									const multiStats = new MultiStats(freshStats);
-									handler(null, multiStats);
-								}
-							}
-							if (firstRun && !err) {
-								firstRun = false;
-								callback();
-							}
-						}
+			const watchings = this._runGraph(
+				(compiler, idx, callback, isBlocked, setChanged, setInvalid) => {
+					const watching = compiler.watch(
+						Array.isArray(watchOptions) ? watchOptions[idx] : watchOptions,
+						callback
 					);
-					watchings.push(watching);
+					if (watching) {
+						watching._onInvalid = setInvalid;
+						watching._onChange = setChanged;
+						watching._isBlocked = isBlocked;
+					}
+					return watching;
 				},
-				() => {
-					// ignore
-				}
+				(compiler, watching, _callback) => {
+					if (compiler.watching !== watching) return;
+					if (!watching.running) watching.invalidate();
+				},
+				handler
 			);
+			return new MultiWatching(watchings, this);
 		}
 
-		return new MultiWatching(watchings, this);
+		return new MultiWatching([], this);
 	}
 
+	/**
+	 * @param {Callback} callback signals when the call finishes
+	 * @returns {void}
+	 */
 	run(callback) {
 		if (this.running) {
-			return callback(new ConcurrentCompilationError());
+			callback(new ConcurrentCompilationError());
+			return;
 		}
+		this.running = true;
 
-		const finalCallback = (err, stats) => {
-			this.running = false;
-
-			if (callback !== undefined) {
-				return callback(err, stats);
-			}
-		};
-
-		const allStats = this.compilers.map(() => null);
 		if (this.validateDependencies(callback)) {
-			this.running = true;
-			this.runWithDependencies(
-				this.compilers,
-				(compiler, callback) => {
-					const compilerIdx = this.compilers.indexOf(compiler);
-					compiler.run((err, stats) => {
-						if (err) {
-							return callback(err);
-						}
-						allStats[compilerIdx] = stats;
-						callback();
-					});
-				},
-				err => {
-					if (err) {
-						return finalCallback(err);
+			this._runGraph(
+				() => {},
+				(compiler, setupResult, callback) => compiler.run(callback),
+				(err, stats) => {
+					this.running = false;
+
+					if (callback !== undefined) {
+						return callback(err, stats);
 					}
-					finalCallback(null, new MultiStats(allStats));
 				}
 			);
 		}
@@ -280,4 +659,20 @@ module.exports = class MultiCompiler extends Tapable {
 			}
 		}
 	}
+
+	/**
+	 * @param {ErrorCallback} callback signals when the compiler closes
+	 * @returns {void}
+	 */
+	close(callback) {
+		asyncLib.each(
+			this.compilers,
+			(compiler, callback) => {
+				compiler.close(callback);
+			},
+			(error) => {
+				callback(/** @type {Error | null} */ (error));
+			}
+		);
+	}
 };
diff --git a/lib/MultiEntryPlugin.js b/lib/MultiEntryPlugin.js
deleted file mode 100644
index 29e8064298c..00000000000
--- a/lib/MultiEntryPlugin.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const MultiEntryDependency = require("./dependencies/MultiEntryDependency");
-const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
-const MultiModuleFactory = require("./MultiModuleFactory");
-
-module.exports = class MultiEntryPlugin {
-	constructor(context, entries, name) {
-		this.context = context;
-		this.entries = entries;
-		this.name = name;
-	}
-
-	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"MultiEntryPlugin",
-			(compilation, { normalModuleFactory }) => {
-				const multiModuleFactory = new MultiModuleFactory();
-
-				compilation.dependencyFactories.set(
-					MultiEntryDependency,
-					multiModuleFactory
-				);
-				compilation.dependencyFactories.set(
-					SingleEntryDependency,
-					normalModuleFactory
-				);
-			}
-		);
-
-		compiler.hooks.make.tapAsync(
-			"MultiEntryPlugin",
-			(compilation, callback) => {
-				const { context, entries, name } = this;
-
-				const dep = MultiEntryPlugin.createDependency(entries, name);
-				compilation.addEntry(context, dep, name, callback);
-			}
-		);
-	}
-
-	static createDependency(entries, name) {
-		return new MultiEntryDependency(
-			entries.map((e, idx) => {
-				const dep = new SingleEntryDependency(e);
-				// Because entrypoints are not dependencies found in an
-				// existing module, we give it a synthetic id
-				dep.loc = `${name}:${100000 + idx}`;
-				return dep;
-			}),
-			name
-		);
-	}
-};
diff --git a/lib/MultiModule.js b/lib/MultiModule.js
deleted file mode 100644
index 6aee82f6694..00000000000
--- a/lib/MultiModule.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const Module = require("./Module");
-const Template = require("./Template");
-const { RawSource } = require("webpack-sources");
-
-class MultiModule extends Module {
-	constructor(context, dependencies, name) {
-		super("javascript/dynamic", context);
-
-		// Info from Factory
-		this.dependencies = dependencies;
-		this.name = name;
-		this._identifier = `multi ${this.dependencies
-			.map(d => d.request)
-			.join(" ")}`;
-	}
-
-	identifier() {
-		return this._identifier;
-	}
-
-	readableIdentifier(requestShortener) {
-		return `multi ${this.dependencies
-			.map(d => requestShortener.shorten(d.request))
-			.join(" ")}`;
-	}
-
-	build(options, compilation, resolver, fs, callback) {
-		this.built = true;
-		this.buildMeta = {};
-		this.buildInfo = {};
-		return callback();
-	}
-
-	needRebuild() {
-		return false;
-	}
-
-	size() {
-		return 16 + this.dependencies.length * 12;
-	}
-
-	updateHash(hash) {
-		hash.update("multi module");
-		hash.update(this.name || "");
-		super.updateHash(hash);
-	}
-
-	source(dependencyTemplates, runtimeTemplate) {
-		const str = [];
-		let idx = 0;
-		for (const dep of this.dependencies) {
-			if (dep.module) {
-				if (idx === this.dependencies.length - 1) {
-					str.push("module.exports = ");
-				}
-				str.push("__webpack_require__(");
-				if (runtimeTemplate.outputOptions.pathinfo) {
-					str.push(Template.toComment(dep.request));
-				}
-				str.push(`${JSON.stringify(dep.module.id)}`);
-				str.push(")");
-			} else {
-				const content = require("./dependencies/WebpackMissingModule").module(
-					dep.request
-				);
-				str.push(content);
-			}
-			str.push(";\n");
-			idx++;
-		}
-		return new RawSource(str.join(""));
-	}
-}
-
-module.exports = MultiModule;
diff --git a/lib/MultiModuleFactory.js b/lib/MultiModuleFactory.js
deleted file mode 100644
index 5d29b2056a5..00000000000
--- a/lib/MultiModuleFactory.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { Tapable } = require("tapable");
-const MultiModule = require("./MultiModule");
-
-module.exports = class MultiModuleFactory extends Tapable {
-	constructor() {
-		super();
-		this.hooks = {};
-	}
-
-	create(data, callback) {
-		const dependency = data.dependencies[0];
-		callback(
-			null,
-			new MultiModule(data.context, dependency.dependencies, dependency.name)
-		);
-	}
-};
diff --git a/lib/MultiStats.js b/lib/MultiStats.js
index 4713524b8db..bd84e7a3d87 100644
--- a/lib/MultiStats.js
+++ b/lib/MultiStats.js
@@ -2,90 +2,211 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const Stats = require("./Stats");
+const identifierUtils = require("./util/identifier");
+
+/** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
+/** @typedef {import("../declarations/WebpackOptions").StatsValue} StatsValue */
+/** @typedef {import("./Compilation").CreateStatsOptionsContext} CreateStatsOptionsContext */
+/** @typedef {import("./Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
+/** @typedef {import("./Stats")} Stats */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").KnownStatsCompilation} KnownStatsCompilation */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsError} StatsError */
+
+/**
+ * @param {string} str string
+ * @param {string} prefix pref
+ * @returns {string} indent
+ */
+const indent = (str, prefix) => {
+	const rem = str.replace(/\n([^\n])/g, `\n${prefix}$1`);
+	return prefix + rem;
+};
 
-const optionOrFallback = (optionValue, fallbackValue) =>
-	optionValue !== undefined ? optionValue : fallbackValue;
+/** @typedef {StatsOptions} MultiStatsOptions */
+/** @typedef {{ version: boolean, hash: boolean, errorsCount: boolean, warningsCount: boolean, errors: boolean, warnings: boolean, children: NormalizedStatsOptions[] }} ChildOptions */
 
 class MultiStats {
+	/**
+	 * @param {Stats[]} stats the child stats
+	 */
 	constructor(stats) {
 		this.stats = stats;
-		this.hash = stats.map(stat => stat.hash).join("");
 	}
 
+	get hash() {
+		return this.stats.map((stat) => stat.hash).join("");
+	}
+
+	/**
+	 * @returns {boolean} true if a child compilation encountered an error
+	 */
 	hasErrors() {
-		return this.stats
-			.map(stat => stat.hasErrors())
-			.reduce((a, b) => a || b, false);
+		return this.stats.some((stat) => stat.hasErrors());
 	}
 
+	/**
+	 * @returns {boolean} true if a child compilation had a warning
+	 */
 	hasWarnings() {
-		return this.stats
-			.map(stat => stat.hasWarnings())
-			.reduce((a, b) => a || b, false);
+		return this.stats.some((stat) => stat.hasWarnings());
 	}
 
-	toJson(options, forToString) {
-		if (typeof options === "boolean" || typeof options === "string") {
-			options = Stats.presetToOptions(options);
-		} else if (!options) {
-			options = {};
-		}
-		const jsons = this.stats.map((stat, idx) => {
-			const childOptions = Stats.getChildOptions(options, idx);
-			const obj = stat.toJson(childOptions, forToString);
-			obj.name = stat.compilation && stat.compilation.name;
+	/**
+	 * @param {undefined | StatsValue} options stats options
+	 * @param {CreateStatsOptionsContext} context context
+	 * @returns {ChildOptions} context context
+	 */
+	_createChildOptions(options, context) {
+		const getCreateStatsOptions = () => {
+			if (!options) {
+				options = {};
+			}
+
+			const { children: childrenOptions = undefined, ...baseOptions } =
+				typeof options === "string"
+					? { preset: options }
+					: /** @type {StatsOptions} */ (options);
+
+			return { childrenOptions, baseOptions };
+		};
+
+		const children = this.stats.map((stat, idx) => {
+			if (typeof options === "boolean") {
+				return stat.compilation.createStatsOptions(options, context);
+			}
+			const { childrenOptions, baseOptions } = getCreateStatsOptions();
+			const childOptions = Array.isArray(childrenOptions)
+				? childrenOptions[idx]
+				: childrenOptions;
+			if (typeof childOptions === "boolean") {
+				return stat.compilation.createStatsOptions(childOptions, context);
+			}
+			return stat.compilation.createStatsOptions(
+				{
+					...baseOptions,
+					...(typeof childOptions === "string"
+						? { preset: childOptions }
+						: childOptions && typeof childOptions === "object"
+							? childOptions
+							: undefined)
+				},
+				context
+			);
+		});
+		return {
+			version: children.every((o) => o.version),
+			hash: children.every((o) => o.hash),
+			errorsCount: children.every((o) => o.errorsCount),
+			warningsCount: children.every((o) => o.warningsCount),
+			errors: children.every((o) => o.errors),
+			warnings: children.every((o) => o.warnings),
+			children
+		};
+	}
+
+	/**
+	 * @param {StatsValue=} options stats options
+	 * @returns {StatsCompilation} json output
+	 */
+	toJson(options) {
+		const childOptions = this._createChildOptions(options, {
+			forToString: false
+		});
+		/** @type {KnownStatsCompilation} */
+		const obj = {};
+		obj.children = this.stats.map((stat, idx) => {
+			const obj = stat.toJson(childOptions.children[idx]);
+			const compilationName = stat.compilation.name;
+			const name =
+				compilationName &&
+				identifierUtils.makePathsRelative(
+					stat.compilation.compiler.context,
+					compilationName,
+					stat.compilation.compiler.root
+				);
+			obj.name = name;
 			return obj;
 		});
-		const showVersion =
-			typeof options.version === "undefined"
-				? jsons.every(j => j.version)
-				: options.version !== false;
-		const showHash =
-			typeof options.hash === "undefined"
-				? jsons.every(j => j.hash)
-				: options.hash !== false;
-		if (showVersion) {
-			for (const j of jsons) {
-				delete j.version;
+		if (childOptions.version) {
+			obj.version = obj.children[0].version;
+		}
+		if (childOptions.hash) {
+			obj.hash = obj.children.map((j) => j.hash).join("");
+		}
+		/**
+		 * @param {StatsCompilation} j stats error
+		 * @param {StatsError} obj Stats error
+		 * @returns {StatsError} result
+		 */
+		const mapError = (j, obj) => ({
+			...obj,
+			compilerPath: obj.compilerPath ? `${j.name}.${obj.compilerPath}` : j.name
+		});
+		if (childOptions.errors) {
+			obj.errors = [];
+			for (const j of obj.children) {
+				const errors =
+					/** @type {NonNullable} */
+					(j.errors);
+				for (const i of errors) {
+					obj.errors.push(mapError(j, i));
+				}
+			}
+		}
+		if (childOptions.warnings) {
+			obj.warnings = [];
+			for (const j of obj.children) {
+				const warnings =
+					/** @type {NonNullable} */
+					(j.warnings);
+				for (const i of warnings) {
+					obj.warnings.push(mapError(j, i));
+				}
+			}
+		}
+		if (childOptions.errorsCount) {
+			obj.errorsCount = 0;
+			for (const j of obj.children) {
+				obj.errorsCount += /** @type {number} */ (j.errorsCount);
+			}
+		}
+		if (childOptions.warningsCount) {
+			obj.warningsCount = 0;
+			for (const j of obj.children) {
+				obj.warningsCount += /** @type {number} */ (j.warningsCount);
 			}
 		}
-		const obj = {
-			errors: jsons.reduce((arr, j) => {
-				return arr.concat(
-					j.errors.map(msg => {
-						return `(${j.name}) ${msg}`;
-					})
-				);
-			}, []),
-			warnings: jsons.reduce((arr, j) => {
-				return arr.concat(
-					j.warnings.map(msg => {
-						return `(${j.name}) ${msg}`;
-					})
-				);
-			}, [])
-		};
-		if (showVersion) obj.version = require("../package.json").version;
-		if (showHash) obj.hash = this.hash;
-		if (options.children !== false) obj.children = jsons;
 		return obj;
 	}
 
+	/**
+	 * @param {StatsValue=} options stats options
+	 * @returns {string} string output
+	 */
 	toString(options) {
-		if (typeof options === "boolean" || typeof options === "string") {
-			options = Stats.presetToOptions(options);
-		} else if (!options) {
-			options = {};
-		}
-
-		const useColors = optionOrFallback(options.colors, false);
-
-		const obj = this.toJson(options, true);
-
-		return Stats.jsonToString(obj, useColors);
+		const childOptions = this._createChildOptions(options, {
+			forToString: true
+		});
+		const results = this.stats.map((stat, idx) => {
+			const str = stat.toString(childOptions.children[idx]);
+			const compilationName = stat.compilation.name;
+			const name =
+				compilationName &&
+				identifierUtils
+					.makePathsRelative(
+						stat.compilation.compiler.context,
+						compilationName,
+						stat.compilation.compiler.root
+					)
+					.replace(/\|/g, " ");
+			if (!str) return str;
+			return name ? `${name}:\n${indent(str, "  ")}` : str;
+		});
+		return results.filter(Boolean).join("\n\n");
 	}
 }
 
diff --git a/lib/MultiWatching.js b/lib/MultiWatching.js
index 48e012c871c..ac451839000 100644
--- a/lib/MultiWatching.js
+++ b/lib/MultiWatching.js
@@ -2,33 +2,72 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const asyncLib = require("neo-async");
 
+/** @typedef {import("./MultiCompiler")} MultiCompiler */
+/** @typedef {import("./Watching")} Watching */
+/** @typedef {import("./webpack").ErrorCallback} ErrorCallback */
+
 class MultiWatching {
+	/**
+	 * @param {Watching[]} watchings child compilers' watchers
+	 * @param {MultiCompiler} compiler the compiler
+	 */
 	constructor(watchings, compiler) {
 		this.watchings = watchings;
 		this.compiler = compiler;
 	}
 
-	invalidate() {
+	/**
+	 * @param {ErrorCallback=} callback signals when the build has completed again
+	 * @returns {void}
+	 */
+	invalidate(callback) {
+		if (callback) {
+			asyncLib.each(
+				this.watchings,
+				(watching, callback) => watching.invalidate(callback),
+				(err) => {
+					callback(/** @type {Error | null} */ (err));
+				}
+			);
+		} else {
+			for (const watching of this.watchings) {
+				watching.invalidate();
+			}
+		}
+	}
+
+	suspend() {
+		for (const watching of this.watchings) {
+			watching.suspend();
+		}
+	}
+
+	resume() {
 		for (const watching of this.watchings) {
-			watching.invalidate();
+			watching.resume();
 		}
 	}
 
+	/**
+	 * @param {ErrorCallback} callback signals when the watcher is closed
+	 * @returns {void}
+	 */
 	close(callback) {
-		asyncLib.forEach(
+		asyncLib.each(
 			this.watchings,
 			(watching, finishedCallback) => {
 				watching.close(finishedCallback);
 			},
-			err => {
+			(err) => {
 				this.compiler.hooks.watchClose.call();
 				if (typeof callback === "function") {
 					this.compiler.running = false;
-					callback(err);
+					callback(/** @type {Error | null} */ (err));
 				}
 			}
 		);
diff --git a/lib/NamedChunksPlugin.js b/lib/NamedChunksPlugin.js
deleted file mode 100644
index 0cb5b6bf3d1..00000000000
--- a/lib/NamedChunksPlugin.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-class NamedChunksPlugin {
-	static defaultNameResolver(chunk) {
-		return chunk.name || null;
-	}
-
-	constructor(nameResolver) {
-		this.nameResolver = nameResolver || NamedChunksPlugin.defaultNameResolver;
-	}
-
-	apply(compiler) {
-		compiler.hooks.compilation.tap("NamedChunksPlugin", compilation => {
-			compilation.hooks.beforeChunkIds.tap("NamedChunksPlugin", chunks => {
-				for (const chunk of chunks) {
-					if (chunk.id === null) {
-						chunk.id = this.nameResolver(chunk);
-					}
-				}
-			});
-		});
-	}
-}
-
-module.exports = NamedChunksPlugin;
diff --git a/lib/NamedModulesPlugin.js b/lib/NamedModulesPlugin.js
deleted file mode 100644
index a3857ac8e90..00000000000
--- a/lib/NamedModulesPlugin.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const createHash = require("./util/createHash");
-const RequestShortener = require("./RequestShortener");
-
-const getHash = str => {
-	const hash = createHash("md4");
-	hash.update(str);
-	return hash.digest("hex").substr(0, 4);
-};
-
-class NamedModulesPlugin {
-	constructor(options) {
-		this.options = options || {};
-	}
-
-	apply(compiler) {
-		compiler.hooks.compilation.tap("NamedModulesPlugin", compilation => {
-			compilation.hooks.beforeModuleIds.tap("NamedModulesPlugin", modules => {
-				const namedModules = new Map();
-				const context = this.options.context || compiler.options.context;
-
-				for (const module of modules) {
-					if (module.id === null && module.libIdent) {
-						module.id = module.libIdent({ context });
-					}
-
-					if (module.id !== null) {
-						const namedModule = namedModules.get(module.id);
-						if (namedModule !== undefined) {
-							namedModule.push(module);
-						} else {
-							namedModules.set(module.id, [module]);
-						}
-					}
-				}
-
-				for (const namedModule of namedModules.values()) {
-					if (namedModule.length > 1) {
-						for (const module of namedModule) {
-							const requestShortener = new RequestShortener(context);
-							module.id = `${module.id}?${getHash(
-								requestShortener.shorten(module.identifier())
-							)}`;
-						}
-					}
-				}
-			});
-		});
-	}
-}
-
-module.exports = NamedModulesPlugin;
diff --git a/lib/NoEmitOnErrorsPlugin.js b/lib/NoEmitOnErrorsPlugin.js
index 2c37c497989..f0a7f00332f 100644
--- a/lib/NoEmitOnErrorsPlugin.js
+++ b/lib/NoEmitOnErrorsPlugin.js
@@ -2,15 +2,25 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "NoEmitOnErrorsPlugin";
+
 class NoEmitOnErrorsPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.shouldEmit.tap("NoEmitOnErrorsPlugin", compilation => {
+		compiler.hooks.shouldEmit.tap(PLUGIN_NAME, (compilation) => {
 			if (compilation.getStats().hasErrors()) return false;
 		});
-		compiler.hooks.compilation.tap("NoEmitOnErrorsPlugin", compilation => {
-			compilation.hooks.shouldRecord.tap("NoEmitOnErrorsPlugin", () => {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.hooks.shouldRecord.tap(PLUGIN_NAME, () => {
 				if (compilation.getStats().hasErrors()) return false;
 			});
 		});
diff --git a/lib/NoModeWarning.js b/lib/NoModeWarning.js
index 1fbc3426af9..729d2ba3080 100644
--- a/lib/NoModeWarning.js
+++ b/lib/NoModeWarning.js
@@ -2,22 +2,22 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
 
 module.exports = class NoModeWarning extends WebpackError {
-	constructor(modules) {
+	constructor() {
 		super();
 
+		/** @type {string} */
 		this.name = "NoModeWarning";
 		this.message =
 			"configuration\n" +
-			"The 'mode' option has not been set, webpack will fallback to 'production' for this value. " +
+			"The 'mode' option has not been set, webpack will fallback to 'production' for this value.\n" +
 			"Set 'mode' option to 'development' or 'production' to enable defaults for each environment.\n" +
 			"You can also set it to 'none' to disable any default behavior. " +
-			"Learn more: https://webpack.js.org/concepts/mode/";
-
-		Error.captureStackTrace(this, this.constructor);
+			"Learn more: https://webpack.js.org/configuration/mode/";
 	}
 };
diff --git a/lib/NodeStuffInWebError.js b/lib/NodeStuffInWebError.js
new file mode 100644
index 00000000000..d82b979c9e7
--- /dev/null
+++ b/lib/NodeStuffInWebError.js
@@ -0,0 +1,35 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+
+class NodeStuffInWebError extends WebpackError {
+	/**
+	 * @param {DependencyLocation} loc loc
+	 * @param {string} expression expression
+	 * @param {string} description description
+	 */
+	constructor(loc, expression, description) {
+		super(
+			`${JSON.stringify(
+				expression
+			)} has been used, it will be undefined in next major version.
+${description}`
+		);
+
+		/** @type {string} */
+		this.name = "NodeStuffInWebError";
+		this.loc = loc;
+	}
+}
+
+makeSerializable(NodeStuffInWebError, "webpack/lib/NodeStuffInWebError");
+
+module.exports = NodeStuffInWebError;
diff --git a/lib/NodeStuffPlugin.js b/lib/NodeStuffPlugin.js
index 9ee407cd6df..54760f34d6a 100644
--- a/lib/NodeStuffPlugin.js
+++ b/lib/NodeStuffPlugin.js
@@ -2,178 +2,586 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const path = require("path");
-const ParserHelpers = require("./ParserHelpers");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const NodeStuffInWebError = require("./NodeStuffInWebError");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const CachedConstDependency = require("./dependencies/CachedConstDependency");
 const ConstDependency = require("./dependencies/ConstDependency");
+const ExternalModuleDependency = require("./dependencies/ExternalModuleDependency");
+const ExternalModuleInitFragmentDependency = require("./dependencies/ExternalModuleInitFragmentDependency");
+const ImportMetaPlugin = require("./dependencies/ImportMetaPlugin");
+const { evaluateToString } = require("./javascript/JavascriptParserHelpers");
+const { relative } = require("./util/fs");
+const { parseResource } = require("./util/identifier");
+
+/** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
+/** @typedef {import("../declarations/WebpackOptions").NodeOptions} NodeOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./NormalModule")} NormalModule */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Expression} Expression */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
 
-const NullFactory = require("./NullFactory");
+const PLUGIN_NAME = "NodeStuffPlugin";
+const URL_MODULE_CONSTANT_FUNCTION_NAME = "__webpack_fileURLToPath__";
 
 class NodeStuffPlugin {
+	/**
+	 * @param {NodeOptions} options options
+	 */
 	constructor(options) {
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		const options = this.options;
+		const { options } = this;
+
 		compiler.hooks.compilation.tap(
-			"NodeStuffPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
 				compilation.dependencyTemplates.set(
-					ConstDependency,
-					new ConstDependency.Template()
+					ExternalModuleDependency,
+					new ExternalModuleDependency.Template()
+				);
+				compilation.dependencyTemplates.set(
+					ExternalModuleInitFragmentDependency,
+					new ExternalModuleInitFragmentDependency.Template()
 				);
 
-				const handler = (parser, parserOptions) => {
-					if (parserOptions.node === false) return;
-
-					let localOptions = options;
-					if (parserOptions.node) {
-						localOptions = Object.assign({}, localOptions, parserOptions.node);
-					}
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {NodeOptions} nodeOptions options
+				 * @returns {void}
+				 */
+				const globalHandler = (parser, nodeOptions) => {
+					/**
+					 * @param {Expression} expr expression
+					 * @returns {ConstDependency} const dependency
+					 */
+					const getGlobalDep = (expr) => {
+						if (compilation.outputOptions.environment.globalThis) {
+							return new ConstDependency(
+								"globalThis",
+								/** @type {Range} */ (expr.range)
+							);
+						}
 
-					const setConstant = (expressionName, value) => {
-						parser.hooks.expression
-							.for(expressionName)
-							.tap("NodeStuffPlugin", () => {
-								parser.state.current.addVariable(
-									expressionName,
-									JSON.stringify(value)
-								);
-								return true;
-							});
+						return new ConstDependency(
+							RuntimeGlobals.global,
+							/** @type {Range} */ (expr.range),
+							[RuntimeGlobals.global]
+						);
 					};
 
-					const setModuleConstant = (expressionName, fn) => {
-						parser.hooks.expression
-							.for(expressionName)
-							.tap("NodeStuffPlugin", () => {
-								parser.state.current.addVariable(
-									expressionName,
-									JSON.stringify(fn(parser.state.module))
-								);
-								return true;
-							});
-					};
-					const context = compiler.context;
-					if (localOptions.__filename === "mock") {
-						setConstant("__filename", "/index.js");
-					} else if (localOptions.__filename) {
-						setModuleConstant("__filename", module =>
-							path.relative(context, module.resource)
-						);
-					}
-					parser.hooks.evaluateIdentifier
-						.for("__filename")
-						.tap("NodeStuffPlugin", expr => {
-							if (!parser.state.module) return;
-							const resource = parser.state.module.resource;
-							const i = resource.indexOf("?");
-							return ParserHelpers.evaluateToString(
-								i < 0 ? resource : resource.substr(0, i)
-							)(expr);
+					const withWarning = nodeOptions.global === "warn";
+
+					parser.hooks.expression.for("global").tap(PLUGIN_NAME, (expr) => {
+						const dep = getGlobalDep(expr);
+						dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+						parser.state.module.addPresentationalDependency(dep);
+
+						if (withWarning) {
+							parser.state.module.addWarning(
+								new NodeStuffInWebError(
+									dep.loc,
+									"global",
+									"The global namespace object is a Node.js feature and isn't available in browsers."
+								)
+							);
+						}
+					});
+
+					parser.hooks.rename.for("global").tap(PLUGIN_NAME, (expr) => {
+						const dep = getGlobalDep(expr);
+						dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+						parser.state.module.addPresentationalDependency(dep);
+						return false;
+					});
+				};
+
+				const hooks = ImportMetaPlugin.getCompilationHooks(compilation);
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
+				 * @param {(module: NormalModule) => string} fn function
+				 * @param {"filename" | "dirname"} property a property
+				 * @returns {void}
+				 */
+				const setModuleConstant = (parser, expressionName, fn, property) => {
+					parser.hooks.expression
+						.for(expressionName)
+						.tap(PLUGIN_NAME, (expr) => {
+							const dep = new ConstDependency(
+								fn(parser.state.module),
+								/** @type {Range} */
+								(expr.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+							return true;
 						});
-					if (localOptions.__dirname === "mock") {
-						setConstant("__dirname", "/");
-					} else if (localOptions.__dirname) {
-						setModuleConstant("__dirname", module =>
-							path.relative(context, module.context)
-						);
-					}
-					parser.hooks.evaluateIdentifier
-						.for("__dirname")
-						.tap("NodeStuffPlugin", expr => {
-							if (!parser.state.module) return;
-							return ParserHelpers.evaluateToString(
-								parser.state.module.context
-							)(expr);
+
+					if (
+						expressionName === "import.meta.filename" ||
+						expressionName === "import.meta.dirname"
+					) {
+						hooks.propertyInDestructuring.tap(PLUGIN_NAME, (usingProperty) => {
+							if (usingProperty.id === property) {
+								return `${property}: ${fn(parser.state.module)},`;
+							}
 						});
+					}
+				};
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
+				 * @param {(module: NormalModule) => string} fn function
+				 * @param {"filename" | "dirname"} property a property
+				 * @param {string=} warning warning
+				 * @returns {void}
+				 */
+				const setCachedModuleConstant = (
+					parser,
+					expressionName,
+					fn,
+					property,
+					warning
+				) => {
 					parser.hooks.expression
-						.for("require.main")
-						.tap(
-							"NodeStuffPlugin",
-							ParserHelpers.toConstantDependencyWithWebpackRequire(
-								parser,
-								"__webpack_require__.c[__webpack_require__.s]"
-							)
-						);
-					parser.hooks.expression
-						.for("require.extensions")
-						.tap(
-							"NodeStuffPlugin",
-							ParserHelpers.expressionIsUnsupported(
-								parser,
-								"require.extensions is not supported by webpack. Use a loader instead."
-							)
-						);
-					parser.hooks.expression
-						.for("module.loaded")
-						.tap("NodeStuffPlugin", expr => {
-							parser.state.module.buildMeta.moduleConcatenationBailout =
-								"module.loaded";
-							return ParserHelpers.toConstantDependency(parser, "module.l")(
-								expr
+						.for(expressionName)
+						.tap(PLUGIN_NAME, (expr) => {
+							const dep = new CachedConstDependency(
+								JSON.stringify(fn(parser.state.module)),
+								/** @type {Range} */
+								(expr.range),
+								`__webpack_${property}__`
 							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+
+							if (warning) {
+								parser.state.module.addWarning(
+									new NodeStuffInWebError(dep.loc, expressionName, warning)
+								);
+							}
+
+							return true;
 						});
+
+					if (
+						expressionName === "import.meta.filename" ||
+						expressionName === "import.meta.dirname"
+					) {
+						hooks.propertyInDestructuring.tap(PLUGIN_NAME, (usingProperty) => {
+							if (property === usingProperty.id) {
+								if (warning) {
+									parser.state.module.addWarning(
+										new NodeStuffInWebError(
+											usingProperty.loc,
+											expressionName,
+											warning
+										)
+									);
+								}
+
+								return `${property}: ${JSON.stringify(fn(parser.state.module))},`;
+							}
+						});
+					}
+				};
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
+				 * @param {string} value value
+				 * @param {"filename" | "dirname"} property a property
+				 * @param {string=} warning warning
+				 * @returns {void}
+				 */
+				const setConstant = (
+					parser,
+					expressionName,
+					value,
+					property,
+					warning
+				) =>
+					setCachedModuleConstant(
+						parser,
+						expressionName,
+						() => value,
+						property,
+						warning
+					);
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
+				 * @param {"dirname" | "filename"} property property
+				 * @param {() => string} value function to get value
+				 * @returns {void}
+				 */
+				const setUrlModuleConstant = (
+					parser,
+					expressionName,
+					property,
+					value
+				) => {
 					parser.hooks.expression
-						.for("module.id")
-						.tap("NodeStuffPlugin", expr => {
-							parser.state.module.buildMeta.moduleConcatenationBailout =
-								"module.id";
-							return ParserHelpers.toConstantDependency(parser, "module.i")(
-								expr
+						.for(expressionName)
+						.tap(PLUGIN_NAME, (expr) => {
+							// We use `CachedConstDependency` because of `eval` devtool, there is no `import.meta` inside `eval()`
+							const { importMetaName, environment, module } =
+								compilation.outputOptions;
+
+							// Generate `import.meta.dirname` and `import.meta.filename` when:
+							// - they are supported by the environment
+							// - it is a universal target, because we can't use `import mod from "node:url"; ` at the top file
+							if (
+								environment.importMetaDirnameAndFilename ||
+								(compiler.platform.web === null &&
+									compiler.platform.node === null &&
+									module)
+							) {
+								const dep = new CachedConstDependency(
+									`${importMetaName}.${property}`,
+									/** @type {Range} */
+									(expr.range),
+									`__webpack_${property}__`,
+									CachedConstDependency.PLACE_CHUNK
+								);
+
+								dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+								parser.state.module.addPresentationalDependency(dep);
+								return;
+							}
+
+							const dep = new ExternalModuleDependency(
+								"url",
+								[
+									{
+										name: "fileURLToPath",
+										value: URL_MODULE_CONSTANT_FUNCTION_NAME
+									}
+								],
+								undefined,
+								`${URL_MODULE_CONSTANT_FUNCTION_NAME}(${value()})`,
+								/** @type {Range} */ (expr.range),
+								`__webpack_${property}__`,
+								ExternalModuleDependency.PLACE_CHUNK
 							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addPresentationalDependency(dep);
+
+							return true;
 						});
-					parser.hooks.expression
-						.for("module.exports")
-						.tap("NodeStuffPlugin", () => {
-							const module = parser.state.module;
-							const isHarmony =
-								module.buildMeta && module.buildMeta.exportsType;
-							if (!isHarmony) return true;
+
+					if (
+						expressionName === "import.meta.filename" ||
+						expressionName === "import.meta.dirname"
+					) {
+						hooks.propertyInDestructuring.tap(PLUGIN_NAME, (usingProperty) => {
+							if (property === usingProperty.id) {
+								const { importMetaName, environment, module } =
+									compilation.outputOptions;
+
+								if (
+									environment.importMetaDirnameAndFilename ||
+									(compiler.platform.web === null &&
+										compiler.platform.node === null &&
+										module)
+								) {
+									const dep = new CachedConstDependency(
+										`${importMetaName}.${property}`,
+										null,
+										`__webpack_${property}__`,
+										CachedConstDependency.PLACE_CHUNK
+									);
+									dep.loc = /** @type {DependencyLocation} */ (
+										usingProperty.loc
+									);
+									parser.state.module.addPresentationalDependency(dep);
+									return `${property}: __webpack_${property}__,`;
+								}
+
+								const dep = new ExternalModuleDependency(
+									"url",
+									[
+										{
+											name: "fileURLToPath",
+											value: URL_MODULE_CONSTANT_FUNCTION_NAME
+										}
+									],
+									undefined,
+									`${URL_MODULE_CONSTANT_FUNCTION_NAME}(${value()})`,
+									null,
+									`__webpack_${property}__`,
+									ExternalModuleDependency.PLACE_CHUNK
+								);
+
+								dep.loc = /** @type {DependencyLocation} */ (usingProperty.loc);
+								parser.state.module.addPresentationalDependency(dep);
+
+								return `${property}: __webpack_${property}__,`;
+							}
 						});
-					parser.hooks.evaluateIdentifier
-						.for("module.hot")
-						.tap(
-							"NodeStuffPlugin",
-							ParserHelpers.evaluateToIdentifier("module.hot", false)
-						);
-					parser.hooks.expression.for("module").tap("NodeStuffPlugin", () => {
-						const module = parser.state.module;
-						const isHarmony = module.buildMeta && module.buildMeta.exportsType;
-						let moduleJsPath = path.join(
-							__dirname,
-							"..",
-							"buildin",
-							isHarmony ? "harmony-module.js" : "module.js"
-						);
-						if (module.context) {
-							moduleJsPath = path.relative(
-								parser.state.module.context,
-								moduleJsPath
-							);
-							if (!/^[A-Z]:/i.test(moduleJsPath)) {
-								moduleJsPath = `./${moduleJsPath.replace(/\\/g, "/")}`;
+					}
+				};
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {NodeOptions} nodeOptions options
+				 * @param {{ dirname: "__dirname" | "import.meta.dirname", filename: "__filename" | "import.meta.filename" }} identifiers options
+				 * @returns {void}
+				 */
+				const dirnameAndFilenameHandler = (
+					parser,
+					nodeOptions,
+					{ dirname, filename }
+				) => {
+					// Keep `import.meta.filename` in code
+					if (
+						nodeOptions.__filename === false &&
+						filename === "import.meta.filename"
+					) {
+						setModuleConstant(parser, filename, () => filename, "filename");
+					}
+
+					if (nodeOptions.__filename) {
+						switch (nodeOptions.__filename) {
+							case "mock":
+								setConstant(parser, filename, "/index.js", "filename");
+								break;
+							case "warn-mock":
+								setConstant(
+									parser,
+									filename,
+									"/index.js",
+									"filename",
+									"__filename is a Node.js feature and isn't available in browsers."
+								);
+								break;
+							case "node-module": {
+								const importMetaName = compilation.outputOptions.importMetaName;
+
+								setUrlModuleConstant(
+									parser,
+									filename,
+									"filename",
+									() => `${importMetaName}.url`
+								);
+								break;
+							}
+							case "eval-only":
+								// Keep `import.meta.filename` in the source code for the ES module output, or create a fallback using `import.meta.url` if possible
+								if (compilation.outputOptions.module) {
+									const { importMetaName } = compilation.outputOptions;
+
+									setUrlModuleConstant(
+										parser,
+										filename,
+										"filename",
+										() => `${importMetaName}.url`
+									);
+								}
+								// Replace `import.meta.filename` with `__filename` for the non-ES module output
+								else if (filename === "import.meta.filename") {
+									setModuleConstant(
+										parser,
+										filename,
+										() => "__filename",
+										"filename"
+									);
+								}
+								break;
+							case true:
+								setCachedModuleConstant(
+									parser,
+									filename,
+									(module) =>
+										relative(
+											/** @type {InputFileSystem} */ (compiler.inputFileSystem),
+											compiler.context,
+											module.resource
+										),
+									"filename"
+								);
+								break;
+						}
+
+						parser.hooks.evaluateIdentifier
+							.for("__filename")
+							.tap(PLUGIN_NAME, (expr) => {
+								if (!parser.state.module) return;
+								const resource = parseResource(parser.state.module.resource);
+								return evaluateToString(resource.path)(expr);
+							});
+					}
+
+					// Keep `import.meta.dirname` in code
+					if (
+						nodeOptions.__dirname === false &&
+						dirname === "import.meta.dirname"
+					) {
+						setModuleConstant(parser, dirname, () => dirname, "dirname");
+					}
+
+					if (nodeOptions.__dirname) {
+						switch (nodeOptions.__dirname) {
+							case "mock":
+								setConstant(parser, dirname, "/", "dirname");
+								break;
+							case "warn-mock":
+								setConstant(
+									parser,
+									dirname,
+									"/",
+									"dirname",
+									"__dirname is a Node.js feature and isn't available in browsers."
+								);
+								break;
+							case "node-module": {
+								const importMetaName = compilation.outputOptions.importMetaName;
+
+								setUrlModuleConstant(
+									parser,
+									dirname,
+									"dirname",
+									() => `${importMetaName}.url.replace(/\\/(?:[^\\/]*)$/, "")`
+								);
+								break;
 							}
+							case "eval-only":
+								// Keep `import.meta.dirname` in the source code for the ES module output and replace `__dirname` on `import.meta.dirname`
+								if (compilation.outputOptions.module) {
+									const { importMetaName } = compilation.outputOptions;
+
+									setUrlModuleConstant(
+										parser,
+										dirname,
+										"dirname",
+										() => `${importMetaName}.url.replace(/\\/(?:[^\\/]*)$/, "")`
+									);
+								}
+								// Replace `import.meta.dirname` with `__dirname` for the non-ES module output
+								else if (dirname === "import.meta.dirname") {
+									setModuleConstant(
+										parser,
+										dirname,
+										() => "__dirname",
+										"dirname"
+									);
+								}
+								break;
+							case true:
+								setCachedModuleConstant(
+									parser,
+									dirname,
+									(module) =>
+										relative(
+											/** @type {InputFileSystem} */ (compiler.inputFileSystem),
+											compiler.context,
+											/** @type {string} */ (module.context)
+										),
+									"dirname"
+								);
+								break;
 						}
-						return ParserHelpers.addParsedVariableToModule(
+
+						parser.hooks.evaluateIdentifier
+							.for(dirname)
+							.tap(PLUGIN_NAME, (expr) => {
+								if (!parser.state.module) return;
+								return evaluateToString(
+									/** @type {string} */
+									(parser.state.module.context)
+								)(expr);
+							});
+					}
+				};
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {JavascriptParserOptions} parserOptions the javascript parser options
+				 * @param {boolean} a true when we need to handle `__filename` and `__dirname`, otherwise false
+				 * @param {boolean} b true when we need to handle `import.meta.filename` and `import.meta.dirname`, otherwise false
+				 */
+				const handler = (parser, parserOptions, a, b) => {
+					if (b && parserOptions.node === false) {
+						// Keep `import.meta.dirname` and `import.meta.filename` in code
+						setModuleConstant(
 							parser,
-							"module",
-							`require(${JSON.stringify(moduleJsPath)})(module)`
+							"import.meta.dirname",
+							() => "import.meta.dirname",
+							"dirname"
 						);
-					});
+						setModuleConstant(
+							parser,
+							"import.meta.filename",
+							() => "import.meta.filename",
+							"filename"
+						);
+						return;
+					}
+
+					let localOptions = options;
+
+					if (parserOptions.node) {
+						localOptions = { ...localOptions, ...parserOptions.node };
+					}
+
+					if (localOptions.global !== false) {
+						globalHandler(parser, localOptions);
+					}
+
+					if (a) {
+						dirnameAndFilenameHandler(parser, localOptions, {
+							dirname: "__dirname",
+							filename: "__filename"
+						});
+					}
+
+					if (b && parserOptions.importMeta !== false) {
+						dirnameAndFilenameHandler(parser, localOptions, {
+							dirname: "import.meta.dirname",
+							filename: "import.meta.filename"
+						});
+					}
 				};
 
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("NodeStuffPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, (parser, parserOptions) => {
+						handler(parser, parserOptions, true, true);
+					});
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("NodeStuffPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, (parser, parserOptions) => {
+						handler(parser, parserOptions, true, false);
+					});
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, (parser, parserOptions) => {
+						handler(parser, parserOptions, false, true);
+					});
 			}
 		);
 	}
 }
+
 module.exports = NodeStuffPlugin;
diff --git a/lib/NormalModule.js b/lib/NormalModule.js
index 1e65bce91a1..4b4b9c0c2c6 100644
--- a/lib/NormalModule.js
+++ b/lib/NormalModule.js
@@ -2,234 +2,886 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-"use strict";
 
-const path = require("path");
-const NativeModule = require("module");
+"use strict";
 
+const querystring = require("querystring");
+const parseJson = require("json-parse-even-better-errors");
+const { getContext, runLoaders } = require("loader-runner");
+const {
+	AsyncSeriesBailHook,
+	HookMap,
+	SyncHook,
+	SyncWaterfallHook
+} = require("tapable");
 const {
 	CachedSource,
-	LineToLineMappedSource,
 	OriginalSource,
 	RawSource,
 	SourceMapSource
 } = require("webpack-sources");
-const { getContext, runLoaders } = require("loader-runner");
-
-const WebpackError = require("./WebpackError");
+const Compilation = require("./Compilation");
+const HookWebpackError = require("./HookWebpackError");
 const Module = require("./Module");
-const ModuleParseError = require("./ModuleParseError");
 const ModuleBuildError = require("./ModuleBuildError");
 const ModuleError = require("./ModuleError");
+const ModuleGraphConnection = require("./ModuleGraphConnection");
+const ModuleParseError = require("./ModuleParseError");
+const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
 const ModuleWarning = require("./ModuleWarning");
+const RuntimeGlobals = require("./RuntimeGlobals");
+const UnhandledSchemeError = require("./UnhandledSchemeError");
+const WebpackError = require("./WebpackError");
+const formatLocation = require("./formatLocation");
+const LazySet = require("./util/LazySet");
+const { isSubset } = require("./util/SetHelpers");
+const { getScheme } = require("./util/URLAbsoluteSpecifier");
+const {
+	compareLocations,
+	compareSelect,
+	concatComparators,
+	keepOriginalOrder,
+	sortWithSourceOrder
+} = require("./util/comparators");
 const createHash = require("./util/createHash");
+const { createFakeHook } = require("./util/deprecation");
+const { join } = require("./util/fs");
+const {
+	absolutify,
+	contextify,
+	makePathsRelative
+} = require("./util/identifier");
+const makeSerializable = require("./util/makeSerializable");
+const memoize = require("./util/memoize");
+
+/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
+/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("../declarations/WebpackOptions").NoParse} NoParse */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./Generator")} Generator */
+/** @typedef {import("./Generator").GenerateErrorFn} GenerateErrorFn */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./Module").FileSystemDependencies} FileSystemDependencies */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
+/** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("./Module").KnownBuildInfo} KnownBuildInfo */
+/** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("./Module").LibIdent} LibIdent */
+/** @typedef {import("./Module").NameForCondition} NameForCondition */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./Module").SourceType} SourceType */
+/** @typedef {import("./Module").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").UnsafeCacheData} UnsafeCacheData */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
+/** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
+/** @typedef {import("./NormalModuleFactory").NormalModuleTypes} NormalModuleTypes */
+/** @typedef {import("./NormalModuleFactory").ResourceSchemeData} ResourceSchemeData */
+/** @typedef {import("./Parser")} Parser */
+/** @typedef {import("./Parser").PreparsedAst} PreparsedAst */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
+/** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
+/**
+ * @template T
+ * @typedef {import("./util/deprecation").FakeHook} FakeHook
+ */
+
+/** @typedef {{ [k: string]: EXPECTED_ANY }} ParserOptions */
+/** @typedef {{ [k: string]: EXPECTED_ANY }} GeneratorOptions */
+
+/**
+ * @template T
+ * @typedef {import("../declarations/LoaderContext").LoaderContext} LoaderContext
+ */
+
+/**
+ * @template T
+ * @typedef {import("../declarations/LoaderContext").NormalModuleLoaderContext} NormalModuleLoaderContext
+ */
+
+/** @typedef {(content: string) => boolean} NoParseFn */
+
+const getInvalidDependenciesModuleWarning = memoize(() =>
+	require("./InvalidDependenciesModuleWarning")
+);
+
+const getExtractSourceMap = memoize(() => require("./util/extractSourceMap"));
+
+const getValidate = memoize(() => require("schema-utils").validate);
+
+const ABSOLUTE_PATH_REGEX = /^(?:[a-z]:\\|\\\\|\/)/i;
+
+/**
+ * @typedef {object} LoaderItem
+ * @property {string} loader
+ * @property {string | null | undefined | Record} options
+ * @property {string | null=} ident
+ * @property {string | null=} type
+ */
+
+/**
+ * @param {string} context absolute context path
+ * @param {string} source a source path
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
+ * @returns {string} new source path
+ */
+const contextifySourceUrl = (context, source, associatedObjectForCache) => {
+	if (source.startsWith("webpack://")) return source;
+	return `webpack://${makePathsRelative(
+		context,
+		source,
+		associatedObjectForCache
+	)}`;
+};
 
-const asString = buf => {
-	if (Buffer.isBuffer(buf)) {
-		return buf.toString("utf-8");
+/**
+ * @param {string} context absolute context path
+ * @param {string | RawSourceMap} sourceMap a source map
+ * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
+ * @returns {string | RawSourceMap} new source map
+ */
+const contextifySourceMap = (context, sourceMap, associatedObjectForCache) => {
+	if (typeof sourceMap === "string" || !Array.isArray(sourceMap.sources)) {
+		return sourceMap;
 	}
-	return buf;
+	const { sourceRoot } = sourceMap;
+	/** @type {(source: string) => string} */
+	const mapper = !sourceRoot
+		? (source) => source
+		: sourceRoot.endsWith("/")
+			? (source) =>
+					source.startsWith("/")
+						? `${sourceRoot.slice(0, -1)}${source}`
+						: `${sourceRoot}${source}`
+			: (source) =>
+					source.startsWith("/")
+						? `${sourceRoot}${source}`
+						: `${sourceRoot}/${source}`;
+	const newSources = sourceMap.sources.map((source) =>
+		contextifySourceUrl(context, mapper(source), associatedObjectForCache)
+	);
+	return {
+		...sourceMap,
+		file: "x",
+		sourceRoot: undefined,
+		sources: newSources
+	};
 };
 
-const asBuffer = str => {
-	if (!Buffer.isBuffer(str)) {
-		return Buffer.from(str, "utf-8");
+/**
+ * @param {string | Buffer} input the input
+ * @returns {string} the converted string
+ */
+const asString = (input) => {
+	if (Buffer.isBuffer(input)) {
+		return input.toString("utf8");
 	}
-	return str;
+	return input;
 };
 
-const contextify = (context, request) => {
-	return request
-		.split("!")
-		.map(r => {
-			const splitPath = r.split("?");
-			if (/^[a-zA-Z]:\\/.test(splitPath[0])) {
-				splitPath[0] = path.win32.relative(context, splitPath[0]);
-				if (!/^[a-zA-Z]:\\/.test(splitPath[0])) {
-					splitPath[0] = splitPath[0].replace(/\\/g, "/");
-				}
-			}
-			if (/^\//.test(splitPath[0])) {
-				splitPath[0] = path.posix.relative(context, splitPath[0]);
-			}
-			if (!/^(\.\.\/|\/|[a-zA-Z]:\\)/.test(splitPath[0])) {
-				splitPath[0] = "./" + splitPath[0];
-			}
-			return splitPath.join("?");
-		})
-		.join("!");
+/**
+ * @param {string | Buffer} input the input
+ * @returns {Buffer} the converted buffer
+ */
+const asBuffer = (input) => {
+	if (!Buffer.isBuffer(input)) {
+		return Buffer.from(input, "utf8");
+	}
+	return input;
 };
 
 class NonErrorEmittedError extends WebpackError {
+	/**
+	 * @param {EXPECTED_ANY} error value which is not an instance of Error
+	 */
 	constructor(error) {
 		super();
 
 		this.name = "NonErrorEmittedError";
-		this.message = "(Emitted value instead of an instance of Error) " + error;
-
-		Error.captureStackTrace(this, this.constructor);
+		this.message = `(Emitted value instead of an instance of Error) ${error}`;
 	}
 }
 
+makeSerializable(
+	NonErrorEmittedError,
+	"webpack/lib/NormalModule",
+	"NonErrorEmittedError"
+);
+
+/** @typedef {[string | Buffer, string | RawSourceMap | undefined, PreparsedAst | undefined]}  Result */
+
+/** @typedef {LoaderContext} AnyLoaderContext */
+
 /**
- * @typedef {Object} CachedSourceEntry
- * @property {TODO} source the generated source
- * @property {string} hash the hash value
+ * @deprecated Use the `readResource` hook instead.
+ * @typedef {HookMap>>} DeprecatedReadResourceForScheme
  */
 
+/**
+ * @typedef {object} NormalModuleCompilationHooks
+ * @property {SyncHook<[AnyLoaderContext, NormalModule]>} loader
+ * @property {SyncHook<[LoaderItem[], NormalModule, AnyLoaderContext]>} beforeLoaders
+ * @property {SyncHook<[NormalModule]>} beforeParse
+ * @property {SyncHook<[NormalModule]>} beforeSnapshot
+ * @property {DeprecatedReadResourceForScheme} readResourceForScheme
+ * @property {HookMap>} readResource
+ * @property {SyncWaterfallHook<[Result, NormalModule]>} processResult
+ * @property {AsyncSeriesBailHook<[NormalModule, NeedBuildContext], boolean>} needBuild
+ */
+
+/**
+ * @typedef {object} NormalModuleCreateData
+ * @property {string=} layer an optional layer in which the module is
+ * @property {NormalModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
+ * @property {string} request request string
+ * @property {string} userRequest request intended by user (without loaders from config)
+ * @property {string} rawRequest request without resolving
+ * @property {LoaderItem[]} loaders list of loaders
+ * @property {string} resource path + query of the real resource
+ * @property {(ResourceSchemeData & Partial)=} resourceResolveData resource resolve data
+ * @property {string} context context directory for resolving
+ * @property {string=} matchResource path + query of the matched resource (virtual)
+ * @property {Parser} parser the parser used
+ * @property {ParserOptions=} parserOptions the options of the parser used
+ * @property {Generator} generator the generator used
+ * @property {GeneratorOptions=} generatorOptions the options of the generator used
+ * @property {ResolveOptions=} resolveOptions options used for resolving requests from this module
+ * @property {boolean} extractSourceMap enable/disable extracting source map
+ */
+
+/**
+ * @typedef {(resourcePath: string, getLoaderContext: (resourcePath: string) => AnyLoaderContext) => Promise>} ReadResource
+ */
+
+/** @type {WeakMap} */
+const compilationHooksMap = new WeakMap();
+
 class NormalModule extends Module {
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @returns {NormalModuleCompilationHooks} the attached hooks
+	 */
+	static getCompilationHooks(compilation) {
+		if (!(compilation instanceof Compilation)) {
+			throw new TypeError(
+				"The 'compilation' argument must be an instance of Compilation"
+			);
+		}
+		let hooks = compilationHooksMap.get(compilation);
+		if (hooks === undefined) {
+			hooks = {
+				loader: new SyncHook(["loaderContext", "module"]),
+				beforeLoaders: new SyncHook(["loaders", "module", "loaderContext"]),
+				beforeParse: new SyncHook(["module"]),
+				beforeSnapshot: new SyncHook(["module"]),
+				// TODO webpack 6 deprecate
+				readResourceForScheme: new HookMap((scheme) => {
+					const hook =
+						/** @type {NormalModuleCompilationHooks} */
+						(hooks).readResource.for(scheme);
+					return createFakeHook(
+						/** @type {AsyncSeriesBailHook<[string, NormalModule], string | Buffer | null>} */ ({
+							tap: (options, fn) =>
+								hook.tap(options, (loaderContext) =>
+									fn(
+										loaderContext.resource,
+										/** @type {NormalModule} */ (loaderContext._module)
+									)
+								),
+							tapAsync: (options, fn) =>
+								hook.tapAsync(options, (loaderContext, callback) =>
+									fn(
+										loaderContext.resource,
+										/** @type {NormalModule} */ (loaderContext._module),
+										callback
+									)
+								),
+							tapPromise: (options, fn) =>
+								hook.tapPromise(options, (loaderContext) =>
+									fn(
+										loaderContext.resource,
+										/** @type {NormalModule} */ (loaderContext._module)
+									)
+								)
+						})
+					);
+				}),
+				readResource: new HookMap(
+					() => new AsyncSeriesBailHook(["loaderContext"])
+				),
+				processResult: new SyncWaterfallHook(["result", "module"]),
+				needBuild: new AsyncSeriesBailHook(["module", "context"])
+			};
+			compilationHooksMap.set(
+				compilation,
+				/** @type {NormalModuleCompilationHooks} */ (hooks)
+			);
+		}
+		return /** @type {NormalModuleCompilationHooks} */ (hooks);
+	}
+
+	/**
+	 * @param {NormalModuleCreateData} options options object
+	 */
 	constructor({
+		layer,
 		type,
 		request,
 		userRequest,
 		rawRequest,
 		loaders,
 		resource,
+		resourceResolveData,
+		context,
 		matchResource,
 		parser,
+		parserOptions,
 		generator,
-		resolveOptions
+		generatorOptions,
+		resolveOptions,
+		extractSourceMap
 	}) {
-		super(type, getContext(resource));
+		super(type, context || getContext(resource), layer);
 
 		// Info from Factory
+		/** @type {NormalModuleCreateData['request']} */
 		this.request = request;
+		/** @type {NormalModuleCreateData['userRequest']} */
 		this.userRequest = userRequest;
+		/** @type {NormalModuleCreateData['rawRequest']} */
 		this.rawRequest = rawRequest;
-		this.binary = type.startsWith("webassembly");
+		/** @type {boolean} */
+		this.binary = /^(?:asset|webassembly)\b/.test(type);
+		/** @type {NormalModuleCreateData['parser'] | undefined} */
 		this.parser = parser;
+		/** @type {NormalModuleCreateData['parserOptions']} */
+		this.parserOptions = parserOptions;
+		/** @type {NormalModuleCreateData['generator'] | undefined} */
 		this.generator = generator;
+		/** @type {NormalModuleCreateData['generatorOptions']} */
+		this.generatorOptions = generatorOptions;
+		/** @type {NormalModuleCreateData['resource']} */
 		this.resource = resource;
+		/** @type {NormalModuleCreateData['resourceResolveData']} */
+		this.resourceResolveData = resourceResolveData;
+		/** @type {NormalModuleCreateData['matchResource']} */
 		this.matchResource = matchResource;
+		/** @type {NormalModuleCreateData['loaders']} */
 		this.loaders = loaders;
-		if (resolveOptions !== undefined) this.resolveOptions = resolveOptions;
+		if (resolveOptions !== undefined) {
+			// already declared in super class
+			/** @type {NormalModuleCreateData['resolveOptions']} */
+			this.resolveOptions = resolveOptions;
+		}
+		/** @type {NormalModuleCreateData['extractSourceMap']} */
+		this.extractSourceMap = extractSourceMap;
 
 		// Info from Build
+		/** @type {WebpackError | null} */
 		this.error = null;
+		/**
+		 * @private
+		 * @type {Source | null}
+		 */
 		this._source = null;
-		this._buildHash = "";
-		this.buildTimestamp = undefined;
-		/** @private @type {Map} */
-		this._cachedSources = new Map();
-
-		// Options for the NormalModule set by plugins
-		// TODO refactor this -> options object filled from Factory
-		this.useSourceMap = false;
-		this.lineToLine = false;
-
+		/**
+		 * @private
+		 * @type {Map | undefined}
+		 */
+		this._sourceSizes = undefined;
+		/**
+		 * @private
+		 * @type {undefined | SourceTypes}
+		 */
+		this._sourceTypes = undefined;
 		// Cache
+		/**
+		 * @private
+		 * @type {BuildMeta}
+		 */
 		this._lastSuccessfulBuildMeta = {};
+		/**
+		 * @private
+		 * @type {boolean}
+		 */
+		this._forceBuild = true;
+		/**
+		 * @private
+		 * @type {boolean}
+		 */
+		this._isEvaluatingSideEffects = false;
+		/**
+		 * @private
+		 * @type {WeakSet | undefined}
+		 */
+		this._addedSideEffectsBailout = undefined;
+		/**
+		 * @private
+		 * @type {CodeGenerationResultData}
+		 */
+		this._codeGeneratorData = new Map();
 	}
 
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
 	identifier() {
-		return this.request;
+		if (this.layer === null) {
+			if (this.type === JAVASCRIPT_MODULE_TYPE_AUTO) {
+				return this.request;
+			}
+			return `${this.type}|${this.request}`;
+		}
+		return `${this.type}|${this.request}|${this.layer}`;
 	}
 
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
 	readableIdentifier(requestShortener) {
-		return requestShortener.shorten(this.userRequest);
+		return /** @type {string} */ (requestShortener.shorten(this.userRequest));
 	}
 
+	/**
+	 * @returns {string | null} return the resource path
+	 */
+	getResource() {
+		return this.matchResource || this.resource;
+	}
+
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
 	libIdent(options) {
-		return contextify(options.context, this.userRequest);
+		let ident = contextify(
+			options.context,
+			this.userRequest,
+			options.associatedObjectForCache
+		);
+		if (this.layer) ident = `(${this.layer})/${ident}`;
+		return ident;
 	}
 
+	/**
+	 * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
+	 */
 	nameForCondition() {
-		const resource = this.matchResource || this.resource;
+		const resource = /** @type {string} */ (this.getResource());
 		const idx = resource.indexOf("?");
-		if (idx >= 0) return resource.substr(0, idx);
+		if (idx >= 0) return resource.slice(0, idx);
 		return resource;
 	}
 
+	/**
+	 * Assuming this module is in the cache. Update the (cached) module with
+	 * the fresh module from the factory. Usually updates internal references
+	 * and properties.
+	 * @param {Module} module fresh module
+	 * @returns {void}
+	 */
 	updateCacheModule(module) {
-		this.type = module.type;
-		this.request = module.request;
-		this.userRequest = module.userRequest;
-		this.rawRequest = module.rawRequest;
-		this.parser = module.parser;
-		this.generator = module.generator;
-		this.resource = module.resource;
-		this.matchResource = module.matchResource;
-		this.loaders = module.loaders;
-		this.resolveOptions = module.resolveOptions;
-	}
-
-	createSourceForAsset(name, content, sourceMap) {
-		if (!sourceMap) {
-			return new RawSource(content);
+		super.updateCacheModule(module);
+		const m = /** @type {NormalModule} */ (module);
+		this.binary = m.binary;
+		this.request = m.request;
+		this.userRequest = m.userRequest;
+		this.rawRequest = m.rawRequest;
+		this.parser = m.parser;
+		this.parserOptions = m.parserOptions;
+		this.generator = m.generator;
+		this.generatorOptions = m.generatorOptions;
+		this.resource = m.resource;
+		this.resourceResolveData = m.resourceResolveData;
+		this.context = m.context;
+		this.matchResource = m.matchResource;
+		this.loaders = m.loaders;
+		this.extractSourceMap = m.extractSourceMap;
+	}
+
+	/**
+	 * Assuming this module is in the cache. Remove internal references to allow freeing some memory.
+	 */
+	cleanupForCache() {
+		// Make sure to cache types and sizes before cleanup when this module has been built
+		// They are accessed by the stats and we don't want them to crash after cleanup
+		// TODO reconsider this for webpack 6
+		if (this.buildInfo) {
+			if (this._sourceTypes === undefined) this.getSourceTypes();
+			for (const type of /** @type {SourceTypes} */ (this._sourceTypes)) {
+				this.size(type);
+			}
 		}
+		super.cleanupForCache();
+		this.parser = undefined;
+		this.parserOptions = undefined;
+		this.generator = undefined;
+		this.generatorOptions = undefined;
+	}
+
+	/**
+	 * Module should be unsafe cached. Get data that's needed for that.
+	 * This data will be passed to restoreFromUnsafeCache later.
+	 * @returns {UnsafeCacheData} cached data
+	 */
+	getUnsafeCacheData() {
+		const data = super.getUnsafeCacheData();
+		data.parserOptions = this.parserOptions;
+		data.generatorOptions = this.generatorOptions;
+		return data;
+	}
+
+	/**
+	 * restore unsafe cache data
+	 * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
+	 * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
+	 */
+	restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
+		this._restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory);
+	}
 
-		if (typeof sourceMap === "string") {
-			return new OriginalSource(content, sourceMap);
+	/**
+	 * restore unsafe cache data
+	 * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
+	 * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
+	 */
+	_restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
+		super._restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory);
+		this.parserOptions = unsafeCacheData.parserOptions;
+		this.parser = normalModuleFactory.getParser(this.type, this.parserOptions);
+		this.generatorOptions = unsafeCacheData.generatorOptions;
+		this.generator = normalModuleFactory.getGenerator(
+			this.type,
+			this.generatorOptions
+		);
+		// we assume the generator behaves identically and keep cached sourceTypes/Sizes
+	}
+
+	/**
+	 * @param {string} context the compilation context
+	 * @param {string} name the asset name
+	 * @param {string | Buffer} content the content
+	 * @param {(string | RawSourceMap)=} sourceMap an optional source map
+	 * @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
+	 * @returns {Source} the created source
+	 */
+	createSourceForAsset(
+		context,
+		name,
+		content,
+		sourceMap,
+		associatedObjectForCache
+	) {
+		if (sourceMap) {
+			if (
+				typeof sourceMap === "string" &&
+				(this.useSourceMap || this.useSimpleSourceMap)
+			) {
+				return new OriginalSource(
+					content,
+					contextifySourceUrl(context, sourceMap, associatedObjectForCache)
+				);
+			}
+
+			if (this.useSourceMap) {
+				return new SourceMapSource(
+					content,
+					name,
+					contextifySourceMap(
+						context,
+						/** @type {RawSourceMap} */
+						(sourceMap),
+						associatedObjectForCache
+					)
+				);
+			}
 		}
 
-		return new SourceMapSource(content, name, sourceMap);
+		return new RawSource(content);
 	}
 
-	createLoaderContext(resolver, options, compilation, fs) {
-		const requestShortener = compilation.runtimeTemplate.requestShortener;
+	/**
+	 * @private
+	 * @template T
+	 * @param {ResolverWithOptions} resolver a resolver
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {InputFileSystem} fs file system from reading
+	 * @param {NormalModuleCompilationHooks} hooks the hooks
+	 * @returns {import("../declarations/LoaderContext").LoaderContext} loader context
+	 */
+	_createLoaderContext(resolver, options, compilation, fs, hooks) {
+		const { requestShortener } = compilation.runtimeTemplate;
+		const getCurrentLoaderName = () => {
+			const currentLoader = this.getCurrentLoader(
+				/** @type {AnyLoaderContext} */
+				(loaderContext)
+			);
+			if (!currentLoader) return "(not in loader scope)";
+			return requestShortener.shorten(currentLoader.loader);
+		};
+		/**
+		 * @returns {ResolveContext} resolve context
+		 */
+		const getResolveContext = () => ({
+			fileDependencies: {
+				add: (d) =>
+					/** @type {AnyLoaderContext} */
+					(loaderContext).addDependency(d)
+			},
+			contextDependencies: {
+				add: (d) =>
+					/** @type {AnyLoaderContext} */
+					(loaderContext).addContextDependency(d)
+			},
+			missingDependencies: {
+				add: (d) =>
+					/** @type {AnyLoaderContext} */
+					(loaderContext).addMissingDependency(d)
+			}
+		});
+		const getAbsolutify = memoize(() =>
+			absolutify.bindCache(compilation.compiler.root)
+		);
+		const getAbsolutifyInContext = memoize(() =>
+			absolutify.bindContextCache(
+				/** @type {string} */
+				(this.context),
+				compilation.compiler.root
+			)
+		);
+		const getContextify = memoize(() =>
+			contextify.bindCache(compilation.compiler.root)
+		);
+		const getContextifyInContext = memoize(() =>
+			contextify.bindContextCache(
+				/** @type {string} */
+				(this.context),
+				compilation.compiler.root
+			)
+		);
+		const utils = {
+			/**
+			 * @param {string} context context
+			 * @param {string} request request
+			 * @returns {string} result
+			 */
+			absolutify: (context, request) =>
+				context === this.context
+					? getAbsolutifyInContext()(request)
+					: getAbsolutify()(context, request),
+			/**
+			 * @param {string} context context
+			 * @param {string} request request
+			 * @returns {string} result
+			 */
+			contextify: (context, request) =>
+				context === this.context
+					? getContextifyInContext()(request)
+					: getContextify()(context, request),
+			/**
+			 * @param {HashFunction=} type type
+			 * @returns {Hash} hash
+			 */
+			createHash: (type) =>
+				createHash(type || compilation.outputOptions.hashFunction)
+		};
+		/** @type {NormalModuleLoaderContext} */
 		const loaderContext = {
 			version: 2,
-			emitWarning: warning => {
+			/**
+			 * @param {import("../declarations/LoaderContext").Schema=} schema schema
+			 * @returns {T} options
+			 */
+			getOptions: (schema) => {
+				const loader = this.getCurrentLoader(
+					/** @type {AnyLoaderContext} */
+					(loaderContext)
+				);
+
+				let { options } = /** @type {LoaderItem} */ (loader);
+
+				if (typeof options === "string") {
+					if (options.startsWith("{") && options.endsWith("}")) {
+						try {
+							options = parseJson(options);
+						} catch (err) {
+							throw new Error(
+								`Cannot parse string options: ${/** @type {Error} */ (err).message}`,
+								{ cause: err }
+							);
+						}
+					} else {
+						options = querystring.parse(options, "&", "=", {
+							maxKeys: 0
+						});
+					}
+				}
+
+				if (options === null || options === undefined) {
+					options = {};
+				}
+
+				if (schema && compilation.options.validate) {
+					let name = "Loader";
+					let baseDataPath = "options";
+					/** @type {RegExpExecArray | null} */
+					let match;
+					if (schema.title && (match = /^(.+) (.+)$/.exec(schema.title))) {
+						[, name, baseDataPath] = match;
+					}
+					getValidate()(schema, /** @type {EXPECTED_OBJECT} */ (options), {
+						name,
+						baseDataPath
+					});
+				}
+
+				return /** @type {T} */ (options);
+			},
+			emitWarning: (warning) => {
 				if (!(warning instanceof Error)) {
 					warning = new NonErrorEmittedError(warning);
 				}
-				const currentLoader = this.getCurrentLoader(loaderContext);
-				this.warnings.push(
-					new ModuleWarning(this, warning, {
-						from: requestShortener.shorten(currentLoader.loader)
+				this.addWarning(
+					new ModuleWarning(warning, {
+						from: getCurrentLoaderName()
 					})
 				);
 			},
-			emitError: error => {
+			emitError: (error) => {
 				if (!(error instanceof Error)) {
 					error = new NonErrorEmittedError(error);
 				}
-				const currentLoader = this.getCurrentLoader(loaderContext);
-				this.errors.push(
-					new ModuleError(this, error, {
-						from: requestShortener.shorten(currentLoader.loader)
+				this.addError(
+					new ModuleError(error, {
+						from: getCurrentLoaderName()
 					})
 				);
 			},
-			exec: (code, filename) => {
-				// @ts-ignore Argument of type 'this' is not assignable to parameter of type 'Module'.
-				const module = new NativeModule(filename, this);
-				// @ts-ignore _nodeModulePaths is deprecated and undocumented Node.js API
-				module.paths = NativeModule._nodeModulePaths(this.context);
-				module.filename = filename;
-				module._compile(code, filename);
-				return module.exports;
+			getLogger: (name) => {
+				const currentLoader = this.getCurrentLoader(
+					/** @type {AnyLoaderContext} */
+					(loaderContext)
+				);
+				return compilation.getLogger(() =>
+					[currentLoader && currentLoader.loader, name, this.identifier()]
+						.filter(Boolean)
+						.join("|")
+				);
 			},
 			resolve(context, request, callback) {
-				resolver.resolve({}, context, request, {}, callback);
+				resolver.resolve({}, context, request, getResolveContext(), callback);
+			},
+			getResolve(options) {
+				const child = options ? resolver.withOptions(options) : resolver;
+				return /** @type {ReturnType["getResolve"]>} */ (
+					(context, request, callback) => {
+						if (callback) {
+							child.resolve(
+								{},
+								context,
+								request,
+								getResolveContext(),
+								callback
+							);
+						} else {
+							return new Promise((resolve, reject) => {
+								child.resolve(
+									{},
+									context,
+									request,
+									getResolveContext(),
+									(err, result) => {
+										if (err) reject(err);
+										else resolve(result);
+									}
+								);
+							});
+						}
+					}
+				);
 			},
-			emitFile: (name, content, sourceMap) => {
-				if (!this.buildInfo.assets) {
-					this.buildInfo.assets = Object.create(null);
+			emitFile: (name, content, sourceMap, assetInfo) => {
+				const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+
+				if (!buildInfo.assets) {
+					buildInfo.assets = Object.create(null);
+					buildInfo.assetsInfo = new Map();
 				}
-				this.buildInfo.assets[name] = this.createSourceForAsset(
+
+				const assets =
+					/** @type {NonNullable} */
+					(buildInfo.assets);
+				const assetsInfo =
+					/** @type {NonNullable} */
+					(buildInfo.assetsInfo);
+
+				assets[name] = this.createSourceForAsset(
+					options.context,
 					name,
 					content,
-					sourceMap
+					sourceMap,
+					compilation.compiler.root
 				);
+				assetsInfo.set(name, assetInfo);
+			},
+			addBuildDependency: (dep) => {
+				const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+
+				if (buildInfo.buildDependencies === undefined) {
+					buildInfo.buildDependencies = new LazySet();
+				}
+				buildInfo.buildDependencies.add(dep);
 			},
+			utils,
 			rootContext: options.context,
 			webpack: true,
-			sourceMap: !!this.useSourceMap,
+			sourceMap: Boolean(this.useSourceMap),
+			mode: options.mode || "production",
+			hashFunction: options.output.hashFunction,
+			hashDigest: options.output.hashDigest,
+			hashDigestLength: options.output.hashDigestLength,
+			hashSalt: options.output.hashSalt,
 			_module: this,
 			_compilation: compilation,
 			_compiler: compilation.compiler,
-			fs: fs
+			fs
 		};
 
-		compilation.hooks.normalModuleLoader.call(loaderContext, this);
-		if (options.loader) {
-			Object.assign(loaderContext, options.loader);
-		}
+		Object.assign(loaderContext, options.loader);
+
+		hooks.loader.call(
+			/** @type {AnyLoaderContext} */
+			(loaderContext),
+			this
+		);
 
-		return loaderContext;
+		return /** @type {AnyLoaderContext} */ (loaderContext);
 	}
 
+	/**
+	 * @param {AnyLoaderContext} loaderContext loader context
+	 * @param {number} index index
+	 * @returns {LoaderItem | null} loader
+	 */
 	getCurrentLoader(loaderContext, index = loaderContext.loaderIndex) {
 		if (
 			this.loaders &&
@@ -243,125 +895,300 @@ class NormalModule extends Module {
 		return null;
 	}
 
-	createSource(source, resourceBuffer, sourceMap) {
+	/**
+	 * @param {string} context the compilation context
+	 * @param {string | Buffer} content the content
+	 * @param {(string | RawSourceMap | null)=} sourceMap an optional source map
+	 * @param {AssociatedObjectForCache=} associatedObjectForCache object for caching
+	 * @returns {Source} the created source
+	 */
+	createSource(context, content, sourceMap, associatedObjectForCache) {
+		if (Buffer.isBuffer(content)) {
+			return new RawSource(content);
+		}
+
 		// if there is no identifier return raw source
 		if (!this.identifier) {
-			return new RawSource(source);
+			return new RawSource(content);
 		}
 
 		// from here on we assume we have an identifier
 		const identifier = this.identifier();
 
-		if (this.lineToLine && resourceBuffer) {
-			return new LineToLineMappedSource(
-				source,
-				identifier,
-				asString(resourceBuffer)
-			);
-		}
-
 		if (this.useSourceMap && sourceMap) {
-			return new SourceMapSource(source, identifier, sourceMap);
+			return new SourceMapSource(
+				content,
+				contextifySourceUrl(context, identifier, associatedObjectForCache),
+				contextifySourceMap(context, sourceMap, associatedObjectForCache)
+			);
 		}
 
-		if (Buffer.isBuffer(source)) {
-			return new RawSource(source);
+		if (this.useSourceMap || this.useSimpleSourceMap) {
+			return new OriginalSource(
+				content,
+				contextifySourceUrl(context, identifier, associatedObjectForCache)
+			);
 		}
 
-		return new OriginalSource(source, identifier);
+		return new RawSource(content);
 	}
 
-	doBuild(options, compilation, resolver, fs, callback) {
-		const loaderContext = this.createLoaderContext(
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {NormalModuleCompilationHooks} hooks the hooks
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	_doBuild(options, compilation, resolver, fs, hooks, callback) {
+		const loaderContext = this._createLoaderContext(
 			resolver,
 			options,
 			compilation,
-			fs
+			fs,
+			hooks
 		);
 
+		/**
+		 * @param {Error | null} err err
+		 * @param {(Result | null)=} result_ result
+		 * @returns {void}
+		 */
+		const processResult = (err, result_) => {
+			if (err) {
+				if (!(err instanceof Error)) {
+					err = new NonErrorEmittedError(err);
+				}
+				const currentLoader = this.getCurrentLoader(loaderContext);
+				const error = new ModuleBuildError(err, {
+					from:
+						currentLoader &&
+						compilation.runtimeTemplate.requestShortener.shorten(
+							currentLoader.loader
+						)
+				});
+				return callback(error);
+			}
+			const result = hooks.processResult.call(
+				/** @type {Result} */
+				(result_),
+				this
+			);
+			const source = result[0];
+			const sourceMap = result.length >= 1 ? result[1] : null;
+			const extraInfo = result.length >= 2 ? result[2] : null;
+
+			if (!Buffer.isBuffer(source) && typeof source !== "string") {
+				const currentLoader = this.getCurrentLoader(loaderContext, 0);
+				const err = new Error(
+					`Final loader (${
+						currentLoader
+							? compilation.runtimeTemplate.requestShortener.shorten(
+									currentLoader.loader
+								)
+							: "unknown"
+					}) didn't return a Buffer or String`
+				);
+				const error = new ModuleBuildError(err);
+				return callback(error);
+			}
+
+			const isBinaryModule =
+				this.generatorOptions && this.generatorOptions.binary !== undefined
+					? this.generatorOptions.binary
+					: this.binary;
+
+			this._source = this.createSource(
+				options.context,
+				isBinaryModule ? asBuffer(source) : asString(source),
+				sourceMap,
+				compilation.compiler.root
+			);
+			if (this._sourceSizes !== undefined) this._sourceSizes.clear();
+			/** @type {PreparsedAst | null} */
+			this._ast =
+				typeof extraInfo === "object" &&
+				extraInfo !== null &&
+				extraInfo.webpackAST !== undefined
+					? extraInfo.webpackAST
+					: null;
+			return callback();
+		};
+
+		const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+
+		buildInfo.fileDependencies = new LazySet();
+		buildInfo.contextDependencies = new LazySet();
+		buildInfo.missingDependencies = new LazySet();
+		buildInfo.cacheable = true;
+
+		try {
+			hooks.beforeLoaders.call(
+				this.loaders,
+				this,
+				/** @type {AnyLoaderContext} */
+				(loaderContext)
+			);
+		} catch (err) {
+			processResult(/** @type {Error} */ (err));
+			return;
+		}
+
+		if (this.loaders.length > 0) {
+			/** @type {BuildInfo} */
+			(this.buildInfo).buildDependencies = new LazySet();
+		}
+
 		runLoaders(
 			{
 				resource: this.resource,
 				loaders: this.loaders,
 				context: loaderContext,
-				readResource: fs.readFile.bind(fs)
+				/**
+				 * @param {AnyLoaderContext} loaderContext the loader context
+				 * @param {string} resourcePath the resource Path
+				 * @param {(err: Error | null, result?: string | Buffer, sourceMap?: Result[1]) => void} callback callback
+				 * @returns {Promise}
+				 */
+				processResource: async (loaderContext, resourcePath, callback) => {
+					/** @type {ReadResource} */
+					const readResource = (resourcePath, getLoaderContext) => {
+						const scheme = getScheme(resourcePath);
+						return new Promise((resolve, reject) => {
+							hooks.readResource
+								.for(scheme)
+								.callAsync(getLoaderContext(resourcePath), (err, result) => {
+									if (err) {
+										reject(err);
+									} else {
+										if (typeof result !== "string" && !result) {
+											return reject(
+												new UnhandledSchemeError(
+													/** @type {string} */
+													(scheme),
+													resourcePath
+												)
+											);
+										}
+										resolve(result);
+									}
+								});
+						});
+					};
+					try {
+						const result = await readResource(
+							resourcePath,
+							() => loaderContext
+						);
+						if (
+							this.extractSourceMap &&
+							(this.useSourceMap || this.useSimpleSourceMap)
+						) {
+							try {
+								const { source, sourceMap } = await getExtractSourceMap()(
+									result,
+									resourcePath,
+									/** @type {ReadResource} */
+									(resourcePath) =>
+										readResource(
+											resourcePath,
+											(resourcePath) =>
+												/** @type {AnyLoaderContext} */
+												({
+													addDependency(dependency) {
+														loaderContext.addDependency(dependency);
+													},
+													fs: loaderContext.fs,
+													_module: undefined,
+													resourcePath,
+													resource: resourcePath
+												})
+										).catch((err) => {
+											throw new Error(
+												`Failed to parse source map. ${/** @type {Error} */ (err).message}`
+											);
+										})
+								);
+								return callback(null, source, sourceMap);
+							} catch (err) {
+								this.addWarning(new ModuleWarning(/** @type {Error} */ (err)));
+								return callback(null, result);
+							}
+						}
+						return callback(null, result);
+					} catch (error) {
+						return callback(/** @type {Error} */ (error));
+					}
+				}
 			},
 			(err, result) => {
-				if (result) {
-					this.buildInfo.cacheable = result.cacheable;
-					this.buildInfo.fileDependencies = new Set(result.fileDependencies);
-					this.buildInfo.contextDependencies = new Set(
-						result.contextDependencies
+				// Cleanup loaderContext to avoid leaking memory in ICs
+				loaderContext._compilation =
+					loaderContext._compiler =
+					loaderContext._module =
+					loaderContext.fs =
+						/** @type {EXPECTED_ANY} */
+						(undefined);
+
+				if (!result) {
+					/** @type {BuildInfo} */
+					(this.buildInfo).cacheable = false;
+					return processResult(
+						err || new Error("No result from loader-runner processing"),
+						null
 					);
 				}
 
-				if (err) {
-					if (!(err instanceof Error)) {
-						err = new NonErrorEmittedError(err);
-					}
-					const currentLoader = this.getCurrentLoader(loaderContext);
-					const error = new ModuleBuildError(this, err, {
-						from:
-							currentLoader &&
-							compilation.runtimeTemplate.requestShortener.shorten(
-								currentLoader.loader
-							)
-					});
-					return callback(error);
+				const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+
+				const fileDependencies =
+					/** @type {NonNullable} */
+					(buildInfo.fileDependencies);
+				const contextDependencies =
+					/** @type {NonNullable} */
+					(buildInfo.contextDependencies);
+				const missingDependencies =
+					/** @type {NonNullable} */
+					(buildInfo.missingDependencies);
+
+				fileDependencies.addAll(result.fileDependencies);
+				contextDependencies.addAll(result.contextDependencies);
+				missingDependencies.addAll(result.missingDependencies);
+				for (const loader of this.loaders) {
+					const buildDependencies =
+						/** @type {NonNullable} */
+						(buildInfo.buildDependencies);
+
+					buildDependencies.add(loader.loader);
 				}
-
-				const resourceBuffer = result.resourceBuffer;
-				const source = result.result[0];
-				const sourceMap = result.result.length >= 1 ? result.result[1] : null;
-				const extraInfo = result.result.length >= 2 ? result.result[2] : null;
-
-				if (!Buffer.isBuffer(source) && typeof source !== "string") {
-					const currentLoader = this.getCurrentLoader(loaderContext, 0);
-					const err = new Error(
-						`Final loader (${
-							currentLoader
-								? compilation.runtimeTemplate.requestShortener.shorten(
-										currentLoader.loader
-								  )
-								: "unknown"
-						}) didn't return a Buffer or String`
-					);
-					const error = new ModuleBuildError(this, err);
-					return callback(error);
-				}
-
-				this._source = this.createSource(
-					this.binary ? asBuffer(source) : asString(source),
-					resourceBuffer,
-					sourceMap
-				);
-				this._ast =
-					typeof extraInfo === "object" &&
-					extraInfo !== null &&
-					extraInfo.webpackAST !== undefined
-						? extraInfo.webpackAST
-						: null;
-				return callback();
+				buildInfo.cacheable = buildInfo.cacheable && result.cacheable;
+				processResult(err, result.result);
 			}
 		);
 	}
 
+	/**
+	 * @param {WebpackError} error the error
+	 * @returns {void}
+	 */
 	markModuleAsErrored(error) {
 		// Restore build meta from successful build to keep importing state
-		this.buildMeta = Object.assign({}, this._lastSuccessfulBuildMeta);
-
+		this.buildMeta = { ...this._lastSuccessfulBuildMeta };
 		this.error = error;
-		this.errors.push(this.error);
-		this._source = new RawSource(
-			"throw new Error(" + JSON.stringify(this.error.message) + ");"
-		);
-		this._ast = null;
+		this.addError(error);
 	}
 
+	/**
+	 * @param {Exclude} rule rule
+	 * @param {string} content content
+	 * @returns {boolean} result
+	 */
 	applyNoParseRule(rule, content) {
 		// must start with "rule" if rule is a string
 		if (typeof rule === "string") {
-			return content.indexOf(rule) === 0;
+			return content.startsWith(rule);
 		}
 
 		if (typeof rule === "function") {
@@ -371,9 +1198,11 @@ class NormalModule extends Module {
 		return rule.test(content);
 	}
 
-	// check if module should not be parsed
-	// returns "true" if the module should !not! be parsed
-	// returns "false" if the module !must! be parsed
+	/**
+	 * @param {undefined | NoParse} noParseRule no parse rule
+	 * @param {string} request request
+	 * @returns {boolean} check if module should not be parsed, returns "true" if the module should !not! be parsed, returns "false" if the module !must! be parsed
+	 */
 	shouldPreventParsing(noParseRule, request) {
 		// if no noParseRule exists, return false
 		// the module !must! be parsed.
@@ -399,6 +1228,10 @@ class NormalModule extends Module {
 		return false;
 	}
 
+	/**
+	 * @param {Compilation} compilation compilation
+	 * @private
+	 */
 	_initBuildHash(compilation) {
 		const hash = createHash(compilation.outputOptions.hashFunction);
 		if (this._source) {
@@ -407,28 +1240,46 @@ class NormalModule extends Module {
 		}
 		hash.update("meta");
 		hash.update(JSON.stringify(this.buildMeta));
-		this._buildHash = hash.digest("hex");
+		/** @type {BuildInfo} */
+		(this.buildInfo).hash = hash.digest("hex");
 	}
 
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
 	build(options, compilation, resolver, fs, callback) {
-		this.buildTimestamp = Date.now();
-		this.built = true;
+		this._forceBuild = false;
 		this._source = null;
+		if (this._sourceSizes !== undefined) this._sourceSizes.clear();
+		this._sourceTypes = undefined;
 		this._ast = null;
-		this._buildHash = "";
 		this.error = null;
-		this.errors.length = 0;
-		this.warnings.length = 0;
+		this.clearWarningsAndErrors();
+		this.clearDependenciesAndBlocks();
 		this.buildMeta = {};
 		this.buildInfo = {
 			cacheable: false,
-			fileDependencies: new Set(),
-			contextDependencies: new Set()
+			parsed: true,
+			fileDependencies: undefined,
+			contextDependencies: undefined,
+			missingDependencies: undefined,
+			buildDependencies: undefined,
+			valueDependencies: undefined,
+			hash: undefined,
+			assets: undefined,
+			assetsInfo: undefined
 		};
 
-		return this.doBuild(options, compilation, resolver, fs, err => {
-			this._cachedSources.clear();
+		const startTime = compilation.compiler.fsStartTime || Date.now();
+
+		const hooks = NormalModule.getCompilationHooks(compilation);
 
+		return this._doBuild(options, compilation, resolver, fs, hooks, (err) => {
 			// if we have an error mark module as failed and exit
 			if (err) {
 				this.markModuleAsErrored(err);
@@ -436,119 +1287,516 @@ class NormalModule extends Module {
 				return callback();
 			}
 
-			// check if this module should !not! be parsed.
-			// if so, exit here;
-			const noParseRule = options.module && options.module.noParse;
-			if (this.shouldPreventParsing(noParseRule, this.request)) {
-				this._initBuildHash(compilation);
-				return callback();
-			}
-
-			const handleParseError = e => {
-				const source = this._source.source();
-				const error = new ModuleParseError(this, source, e);
+			/**
+			 * @param {Error} e error
+			 * @returns {void}
+			 */
+			const handleParseError = (e) => {
+				const source = /** @type {Source} */ (this._source).source();
+				const loaders = this.loaders.map((item) =>
+					contextify(options.context, item.loader, compilation.compiler.root)
+				);
+				const error = new ModuleParseError(source, e, loaders, this.type);
 				this.markModuleAsErrored(error);
 				this._initBuildHash(compilation);
 				return callback();
 			};
 
-			const handleParseResult = result => {
-				this._lastSuccessfulBuildMeta = this.buildMeta;
+			const handleParseResult = () => {
+				this.dependencies.sort(
+					concatComparators(
+						compareSelect((a) => a.loc, compareLocations),
+						keepOriginalOrder(this.dependencies)
+					)
+				);
+				sortWithSourceOrder(this.dependencies, new WeakMap());
 				this._initBuildHash(compilation);
-				return callback();
+				this._lastSuccessfulBuildMeta =
+					/** @type {BuildMeta} */
+					(this.buildMeta);
+				return handleBuildDone();
 			};
 
-			try {
-				const result = this.parser.parse(
-					this._ast || this._source.source(),
-					{
-						current: this,
-						module: this,
-						compilation: compilation,
-						options: options
-					},
-					(err, result) => {
+			const handleBuildDone = () => {
+				try {
+					hooks.beforeSnapshot.call(this);
+				} catch (err) {
+					this.markModuleAsErrored(/** @type {WebpackError} */ (err));
+					return callback();
+				}
+
+				const snapshotOptions = compilation.options.snapshot.module;
+				const { cacheable } = /** @type {BuildInfo} */ (this.buildInfo);
+				if (!cacheable || !snapshotOptions) {
+					return callback();
+				}
+				// add warning for all non-absolute paths in fileDependencies, etc
+				// This makes it easier to find problems with watching and/or caching
+				/** @type {undefined | Set} */
+				let nonAbsoluteDependencies;
+				/**
+				 * @param {FileSystemDependencies} deps deps
+				 */
+				const checkDependencies = (deps) => {
+					for (const dep of deps) {
+						if (!ABSOLUTE_PATH_REGEX.test(dep)) {
+							if (nonAbsoluteDependencies === undefined) {
+								nonAbsoluteDependencies = new Set();
+							}
+							nonAbsoluteDependencies.add(dep);
+							deps.delete(dep);
+							try {
+								const depWithoutGlob = dep.replace(/[\\/]?\*.*$/, "");
+								const absolute = join(
+									compilation.fileSystemInfo.fs,
+									/** @type {string} */
+									(this.context),
+									depWithoutGlob
+								);
+								if (absolute !== dep && ABSOLUTE_PATH_REGEX.test(absolute)) {
+									(depWithoutGlob !== dep
+										? /** @type {NonNullable} */
+											(
+												/** @type {BuildInfo} */
+												(this.buildInfo).contextDependencies
+											)
+										: deps
+									).add(absolute);
+								}
+							} catch (_err) {
+								// ignore
+							}
+						}
+					}
+				};
+				const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+				const fileDependencies =
+					/** @type {NonNullable} */
+					(buildInfo.fileDependencies);
+				const contextDependencies =
+					/** @type {NonNullable} */
+					(buildInfo.contextDependencies);
+				const missingDependencies =
+					/** @type {NonNullable} */
+					(buildInfo.missingDependencies);
+				checkDependencies(fileDependencies);
+				checkDependencies(missingDependencies);
+				checkDependencies(contextDependencies);
+				if (nonAbsoluteDependencies !== undefined) {
+					const InvalidDependenciesModuleWarning =
+						getInvalidDependenciesModuleWarning();
+					this.addWarning(
+						new InvalidDependenciesModuleWarning(this, nonAbsoluteDependencies)
+					);
+				}
+				// convert file/context/missingDependencies into filesystem snapshot
+				compilation.fileSystemInfo.createSnapshot(
+					startTime,
+					fileDependencies,
+					contextDependencies,
+					missingDependencies,
+					snapshotOptions,
+					(err, snapshot) => {
 						if (err) {
-							handleParseError(err);
-						} else {
-							handleParseResult(result);
+							this.markModuleAsErrored(err);
+							return;
 						}
+						buildInfo.fileDependencies = undefined;
+						buildInfo.contextDependencies = undefined;
+						buildInfo.missingDependencies = undefined;
+						buildInfo.snapshot = snapshot;
+						return callback();
 					}
 				);
-				if (result !== undefined) {
-					// parse is sync
-					handleParseResult(result);
-				}
-			} catch (e) {
-				handleParseError(e);
+			};
+
+			try {
+				hooks.beforeParse.call(this);
+			} catch (err) {
+				this.markModuleAsErrored(/** @type {WebpackError} */ (err));
+				this._initBuildHash(compilation);
+				return callback();
+			}
+
+			// check if this module should !not! be parsed.
+			// if so, exit here;
+			const noParseRule = options.module && options.module.noParse;
+			if (this.shouldPreventParsing(noParseRule, this.request)) {
+				// We assume that we need module and exports
+				/** @type {BuildInfo} */
+				(this.buildInfo).parsed = false;
+				this._initBuildHash(compilation);
+				return handleBuildDone();
 			}
+
+			try {
+				const source = /** @type {Source} */ (this._source).source();
+				/** @type {Parser} */
+				(this.parser).parse(this._ast || source, {
+					source,
+					current: this,
+					module: this,
+					compilation,
+					options
+				});
+			} catch (parseErr) {
+				handleParseError(/** @type {Error} */ (parseErr));
+				return;
+			}
+			handleParseResult();
 		});
 	}
 
-	getHashDigest(dependencyTemplates) {
-		let dtHash = dependencyTemplates.get("hash");
-		return `${this.hash}-${dtHash}`;
+	/**
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(context) {
+		return /** @type {Generator} */ (
+			this.generator
+		).getConcatenationBailoutReason(this, context);
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
+	 */
+	getSideEffectsConnectionState(moduleGraph) {
+		if (this.factoryMeta !== undefined) {
+			if (this.factoryMeta.sideEffectFree) return false;
+			if (this.factoryMeta.sideEffectFree === false) return true;
+		}
+		if (this.buildMeta !== undefined && this.buildMeta.sideEffectFree) {
+			if (this._isEvaluatingSideEffects) {
+				return ModuleGraphConnection.CIRCULAR_CONNECTION;
+			}
+			this._isEvaluatingSideEffects = true;
+			/** @type {ConnectionState} */
+			let current = false;
+			for (const dep of this.dependencies) {
+				const state = dep.getModuleEvaluationSideEffectsState(moduleGraph);
+				if (state === true) {
+					if (
+						this._addedSideEffectsBailout === undefined
+							? ((this._addedSideEffectsBailout = new WeakSet()), true)
+							: !this._addedSideEffectsBailout.has(moduleGraph)
+					) {
+						this._addedSideEffectsBailout.add(moduleGraph);
+						moduleGraph
+							.getOptimizationBailout(this)
+							.push(
+								() =>
+									`Dependency (${
+										dep.type
+									}) with side effects at ${formatLocation(dep.loc)}`
+							);
+					}
+					this._isEvaluatingSideEffects = false;
+					return true;
+				} else if (state !== ModuleGraphConnection.CIRCULAR_CONNECTION) {
+					current = ModuleGraphConnection.addConnectionStates(current, state);
+				}
+			}
+			this._isEvaluatingSideEffects = false;
+			// When caching is implemented here, make sure to not cache when
+			// at least one circular connection was in the loop above
+			return current;
+		}
+		return true;
 	}
 
-	source(dependencyTemplates, runtimeTemplate, type = "javascript") {
-		const hashDigest = this.getHashDigest(dependencyTemplates);
-		const cacheEntry = this._cachedSources.get(type);
-		if (cacheEntry !== undefined && cacheEntry.hash === hashDigest) {
-			// We can reuse the cached source
-			return cacheEntry.source;
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		if (this._sourceTypes === undefined) {
+			this._sourceTypes = /** @type {Generator} */ (this.generator).getTypes(
+				this
+			);
 		}
+		return this._sourceTypes;
+	}
 
-		const source = this.generator.generate(
-			this,
-			dependencyTemplates,
-			runtimeTemplate,
-			type
-		);
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration({
+		dependencyTemplates,
+		runtimeTemplate,
+		moduleGraph,
+		chunkGraph,
+		runtime,
+		concatenationScope,
+		codeGenerationResults,
+		sourceTypes
+	}) {
+		/** @type {RuntimeRequirements} */
+		const runtimeRequirements = new Set();
 
-		const cachedSource = new CachedSource(source);
-		this._cachedSources.set(type, {
-			source: cachedSource,
-			hash: hashDigest
-		});
-		return cachedSource;
+		const { parsed } = /** @type {BuildInfo} */ (this.buildInfo);
+
+		if (!parsed) {
+			runtimeRequirements.add(RuntimeGlobals.module);
+			runtimeRequirements.add(RuntimeGlobals.exports);
+			runtimeRequirements.add(RuntimeGlobals.thisAsExports);
+		}
+
+		const getData = () => this._codeGeneratorData;
+
+		/** @type {Sources} */
+		const sources = new Map();
+		for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
+			// TODO webpack@6 make generateError required
+			const generator =
+				/** @type {Generator & { generateError?: GenerateErrorFn }} */
+				(this.generator);
+			const source = this.error
+				? generator.generateError
+					? generator.generateError(this.error, this, {
+							dependencyTemplates,
+							runtimeTemplate,
+							moduleGraph,
+							chunkGraph,
+							runtimeRequirements,
+							runtime,
+							concatenationScope,
+							codeGenerationResults,
+							getData,
+							type
+						})
+					: new RawSource(
+							`throw new Error(${JSON.stringify(this.error.message)});`
+						)
+				: generator.generate(this, {
+						dependencyTemplates,
+						runtimeTemplate,
+						moduleGraph,
+						chunkGraph,
+						runtimeRequirements,
+						runtime,
+						concatenationScope,
+						codeGenerationResults,
+						getData,
+						type
+					});
+
+			if (source) {
+				sources.set(type, new CachedSource(source));
+			}
+		}
+
+		/** @type {CodeGenerationResult} */
+		const resultEntry = {
+			sources,
+			runtimeRequirements,
+			data: this._codeGeneratorData
+		};
+		return resultEntry;
 	}
 
+	/**
+	 * @returns {Source | null} the original source for the module before webpack transformation
+	 */
 	originalSource() {
 		return this._source;
 	}
 
-	needRebuild(fileTimestamps, contextTimestamps) {
-		// always try to rebuild in case of an error
-		if (this.error) return true;
+	/**
+	 * @returns {void}
+	 */
+	invalidateBuild() {
+		this._forceBuild = true;
+	}
 
-		// always rebuild when module is not cacheable
-		if (!this.buildInfo.cacheable) return true;
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		const { fileSystemInfo, compilation, valueCacheVersions } = context;
+		// build if enforced
+		if (this._forceBuild) return callback(null, true);
+
+		// always try to build in case of an error
+		if (this.error) return callback(null, true);
+
+		const { cacheable, snapshot, valueDependencies } =
+			/** @type {BuildInfo} */ (this.buildInfo);
+
+		// always build when module is not cacheable
+		if (!cacheable) return callback(null, true);
+
+		// build when there is no snapshot to check
+		if (!snapshot) return callback(null, true);
+
+		// build when valueDependencies have changed
+		if (valueDependencies) {
+			if (!valueCacheVersions) return callback(null, true);
+			for (const [key, value] of valueDependencies) {
+				if (value === undefined) return callback(null, true);
+				const current = valueCacheVersions.get(key);
+				if (
+					value !== current &&
+					(typeof value === "string" ||
+						typeof current === "string" ||
+						current === undefined ||
+						!isSubset(value, current))
+				) {
+					return callback(null, true);
+				}
+			}
+		}
 
-		// Check timestamps of all dependencies
-		// Missing timestamp -> need rebuild
-		// Timestamp bigger than buildTimestamp -> need rebuild
-		for (const file of this.buildInfo.fileDependencies) {
-			const timestamp = fileTimestamps.get(file);
-			if (!timestamp) return true;
-			if (timestamp >= this.buildTimestamp) return true;
+		// check snapshot for validity
+		fileSystemInfo.checkSnapshotValid(snapshot, (err, valid) => {
+			if (err) return callback(err);
+			if (!valid) return callback(null, true);
+			const hooks = NormalModule.getCompilationHooks(compilation);
+			hooks.needBuild.callAsync(this, context, (err, needBuild) => {
+				if (err) {
+					return callback(
+						HookWebpackError.makeWebpackError(
+							err,
+							"NormalModule.getCompilationHooks().needBuild"
+						)
+					);
+				}
+				callback(null, Boolean(needBuild));
+			});
+		});
+	}
+
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		const cachedSize =
+			this._sourceSizes === undefined ? undefined : this._sourceSizes.get(type);
+		if (cachedSize !== undefined) {
+			return cachedSize;
 		}
-		for (const file of this.buildInfo.contextDependencies) {
-			const timestamp = contextTimestamps.get(file);
-			if (!timestamp) return true;
-			if (timestamp >= this.buildTimestamp) return true;
+		const size = Math.max(
+			1,
+			/** @type {Generator} */ (this.generator).getSize(this, type)
+		);
+		if (this._sourceSizes === undefined) {
+			this._sourceSizes = new Map();
+		}
+		this._sourceSizes.set(type, size);
+		return size;
+	}
+
+	/**
+	 * @param {FileSystemDependencies} fileDependencies set where file dependencies are added to
+	 * @param {FileSystemDependencies} contextDependencies set where context dependencies are added to
+	 * @param {FileSystemDependencies} missingDependencies set where missing dependencies are added to
+	 * @param {FileSystemDependencies} buildDependencies set where build dependencies are added to
+	 */
+	addCacheDependencies(
+		fileDependencies,
+		contextDependencies,
+		missingDependencies,
+		buildDependencies
+	) {
+		const { snapshot, buildDependencies: buildDeps } =
+			/** @type {BuildInfo} */ (this.buildInfo);
+		if (snapshot) {
+			fileDependencies.addAll(snapshot.getFileIterable());
+			contextDependencies.addAll(snapshot.getContextIterable());
+			missingDependencies.addAll(snapshot.getMissingIterable());
+		} else {
+			const {
+				fileDependencies: fileDeps,
+				contextDependencies: contextDeps,
+				missingDependencies: missingDeps
+			} = /** @type {BuildInfo} */ (this.buildInfo);
+			if (fileDeps !== undefined) fileDependencies.addAll(fileDeps);
+			if (contextDeps !== undefined) contextDependencies.addAll(contextDeps);
+			if (missingDeps !== undefined) missingDependencies.addAll(missingDeps);
+		}
+		if (buildDeps !== undefined) {
+			buildDependencies.addAll(buildDeps);
 		}
-		// elsewise -> no rebuild needed
-		return false;
 	}
 
-	size() {
-		return this._source ? this._source.size() : -1;
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
+		hash.update(
+			/** @type {string} */
+			(buildInfo.hash)
+		);
+		/** @type {Generator} */
+		(this.generator).updateHash(hash, {
+			module: this,
+			...context
+		});
+		super.updateHash(hash, context);
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		// deserialize
+		write(this._source);
+		write(this.error);
+		write(this._lastSuccessfulBuildMeta);
+		write(this._forceBuild);
+		write(this._codeGeneratorData);
+		super.serialize(context);
 	}
 
-	updateHash(hash) {
-		hash.update(this._buildHash);
-		super.updateHash(hash);
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {NormalModule} module
+	 */
+	static deserialize(context) {
+		const obj = new NormalModule({
+			// will be deserialized by Module
+			layer: /** @type {EXPECTED_ANY} */ (null),
+			type: "",
+			// will be filled by updateCacheModule
+			resource: "",
+			context: "",
+			request: /** @type {EXPECTED_ANY} */ (null),
+			userRequest: /** @type {EXPECTED_ANY} */ (null),
+			rawRequest: /** @type {EXPECTED_ANY} */ (null),
+			loaders: /** @type {EXPECTED_ANY} */ (null),
+			matchResource: /** @type {EXPECTED_ANY} */ (null),
+			parser: /** @type {EXPECTED_ANY} */ (null),
+			parserOptions: /** @type {EXPECTED_ANY} */ (null),
+			generator: /** @type {EXPECTED_ANY} */ (null),
+			generatorOptions: /** @type {EXPECTED_ANY} */ (null),
+			resolveOptions: /** @type {EXPECTED_ANY} */ (null),
+			extractSourceMap: /** @type {EXPECTED_ANY} */ (null)
+		});
+		obj.deserialize(context);
+		return obj;
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+		this._source = read();
+		this.error = read();
+		this._lastSuccessfulBuildMeta = read();
+		this._forceBuild = read();
+		this._codeGeneratorData = read();
+		super.deserialize(context);
 	}
 }
 
+makeSerializable(NormalModule, "webpack/lib/NormalModule");
+
 module.exports = NormalModule;
diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js
index 23ef0ae1dde..9e16889eab9 100644
--- a/lib/NormalModuleFactory.js
+++ b/lib/NormalModuleFactory.js
@@ -1,443 +1,1329 @@
 /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
 "use strict";
 
-const path = require("path");
+const { getContext } = require("loader-runner");
 const asyncLib = require("neo-async");
 const {
-	Tapable,
-	AsyncSeriesWaterfallHook,
-	SyncWaterfallHook,
+	AsyncSeriesBailHook,
+	HookMap,
 	SyncBailHook,
 	SyncHook,
-	HookMap
+	SyncWaterfallHook
 } = require("tapable");
+const ChunkGraph = require("./ChunkGraph");
+const Module = require("./Module");
+const ModuleFactory = require("./ModuleFactory");
+const ModuleGraph = require("./ModuleGraph");
+const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
 const NormalModule = require("./NormalModule");
-const RawModule = require("./RawModule");
-const RuleSet = require("./RuleSet");
-const cachedMerge = require("./util/cachedMerge");
+const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
+const BasicEffectRulePlugin = require("./rules/BasicEffectRulePlugin");
+const BasicMatcherRulePlugin = require("./rules/BasicMatcherRulePlugin");
+const ObjectMatcherRulePlugin = require("./rules/ObjectMatcherRulePlugin");
+const RuleSetCompiler = require("./rules/RuleSetCompiler");
+const UseEffectRulePlugin = require("./rules/UseEffectRulePlugin");
+const LazySet = require("./util/LazySet");
+const { getScheme } = require("./util/URLAbsoluteSpecifier");
+const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge");
+const { join } = require("./util/fs");
+const {
+	parseResource,
+	parseResourceWithoutFragment
+} = require("./util/identifier");
+
+/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
+/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
+/** @typedef {import("../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
+/** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
+/** @typedef {import("./Compilation").FileSystemDependencies} FileSystemDependencies */
+/** @typedef {import("./Generator")} Generator */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
+/** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
+/** @typedef {import("./NormalModule").GeneratorOptions} GeneratorOptions */
+/** @typedef {import("./NormalModule").LoaderItem} LoaderItem */
+/** @typedef {import("./NormalModule").NormalModuleCreateData} NormalModuleCreateData */
+/** @typedef {import("./NormalModule").ParserOptions} ParserOptions */
+/** @typedef {import("./Parser")} Parser */
+/** @typedef {import("./ResolverFactory")} ResolverFactory */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
+/** @typedef {import("./dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
+/** @typedef {import("./dependencies/ImportPhase").ImportPhaseName} ImportPhaseName */
+/** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
+/** @typedef {import("./rules/RuleSetCompiler").RuleSetRules} RuleSetRules */
+/** @typedef {import("./rules/RuleSetCompiler").RuleSet} RuleSet */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
+
+/**
+ * @template T
+ * @typedef {import("./Compiler").Callback} Callback
+ */
+
+/** @typedef {Pick} ModuleSettings */
+/** @typedef {Partial} CreateData */
+
+/**
+ * @typedef {object} ResolveData
+ * @property {ModuleFactoryCreateData["contextInfo"]} contextInfo
+ * @property {ModuleFactoryCreateData["resolveOptions"]} resolveOptions
+ * @property {string} context
+ * @property {string} request
+ * @property {ImportPhaseName=} phase
+ * @property {ImportAttributes=} attributes
+ * @property {ModuleDependency[]} dependencies
+ * @property {string} dependencyType
+ * @property {CreateData} createData
+ * @property {FileSystemDependencies} fileDependencies
+ * @property {FileSystemDependencies} missingDependencies
+ * @property {FileSystemDependencies} contextDependencies
+ * @property {Module=} ignoredModule
+ * @property {boolean} cacheable allow to use the unsafe cache
+ */
+
+/**
+ * @typedef {object} ResourceData
+ * @property {string} resource
+ * @property {string=} path
+ * @property {string=} query
+ * @property {string=} fragment
+ * @property {string=} context
+ */
+
+/**
+ * @typedef {object} ResourceSchemeData
+ * @property {string=} mimetype mime type of the resource
+ * @property {string=} parameters additional parameters for the resource
+ * @property {"base64" | false=} encoding encoding of the resource
+ * @property {string=} encodedContent encoded content of the resource
+ */
+
+/** @typedef {ResourceData & { data: ResourceSchemeData & Partial }} ResourceDataWithData */
+
+/**
+ * @typedef {object} ParsedLoaderRequest
+ * @property {string} loader loader
+ * @property {string | undefined} options options
+ */
+
+/** @typedef {import("./ModuleTypeConstants").JAVASCRIPT_MODULE_TYPE_AUTO} JAVASCRIPT_MODULE_TYPE_AUTO */
+/** @typedef {import("./ModuleTypeConstants").JAVASCRIPT_MODULE_TYPE_DYNAMIC} JAVASCRIPT_MODULE_TYPE_DYNAMIC */
+/** @typedef {import("./ModuleTypeConstants").JAVASCRIPT_MODULE_TYPE_ESM} JAVASCRIPT_MODULE_TYPE_ESM */
+/** @typedef {import("./ModuleTypeConstants").JSON_MODULE_TYPE} JSON_MODULE_TYPE */
+/** @typedef {import("./ModuleTypeConstants").ASSET_MODULE_TYPE} ASSET_MODULE_TYPE */
+/** @typedef {import("./ModuleTypeConstants").ASSET_MODULE_TYPE_INLINE} ASSET_MODULE_TYPE_INLINE */
+/** @typedef {import("./ModuleTypeConstants").ASSET_MODULE_TYPE_RESOURCE} ASSET_MODULE_TYPE_RESOURCE */
+/** @typedef {import("./ModuleTypeConstants").ASSET_MODULE_TYPE_SOURCE} ASSET_MODULE_TYPE_SOURCE */
+/** @typedef {import("./ModuleTypeConstants").ASSET_MODULE_TYPE_BYTES} ASSET_MODULE_TYPE_BYTES */
+/** @typedef {import("./ModuleTypeConstants").WEBASSEMBLY_MODULE_TYPE_ASYNC} WEBASSEMBLY_MODULE_TYPE_ASYNC */
+/** @typedef {import("./ModuleTypeConstants").WEBASSEMBLY_MODULE_TYPE_SYNC} WEBASSEMBLY_MODULE_TYPE_SYNC */
+/** @typedef {import("./ModuleTypeConstants").CSS_MODULE_TYPE} CSS_MODULE_TYPE */
+/** @typedef {import("./ModuleTypeConstants").CSS_MODULE_TYPE_GLOBAL} CSS_MODULE_TYPE_GLOBAL */
+/** @typedef {import("./ModuleTypeConstants").CSS_MODULE_TYPE_MODULE} CSS_MODULE_TYPE_MODULE */
+/** @typedef {import("./ModuleTypeConstants").CSS_MODULE_TYPE_AUTO} CSS_MODULE_TYPE_AUTO */
+
+/** @typedef {JAVASCRIPT_MODULE_TYPE_AUTO | JAVASCRIPT_MODULE_TYPE_DYNAMIC | JAVASCRIPT_MODULE_TYPE_ESM | JSON_MODULE_TYPE | ASSET_MODULE_TYPE | ASSET_MODULE_TYPE_INLINE | ASSET_MODULE_TYPE_RESOURCE | ASSET_MODULE_TYPE_SOURCE | WEBASSEMBLY_MODULE_TYPE_ASYNC | WEBASSEMBLY_MODULE_TYPE_SYNC | CSS_MODULE_TYPE | CSS_MODULE_TYPE_GLOBAL | CSS_MODULE_TYPE_MODULE | CSS_MODULE_TYPE_AUTO} KnownNormalModuleTypes */
+/** @typedef {KnownNormalModuleTypes | string} NormalModuleTypes */
 
 const EMPTY_RESOLVE_OPTIONS = {};
+/** @type {ParserOptions} */
+const EMPTY_PARSER_OPTIONS = {};
+/** @type {GeneratorOptions} */
+const EMPTY_GENERATOR_OPTIONS = {};
+/** @type {ParsedLoaderRequest[]} */
+const EMPTY_ELEMENTS = [];
 
 const MATCH_RESOURCE_REGEX = /^([^!]+)!=!/;
+const LEADING_DOT_EXTENSION_REGEX = /^[^.]/;
 
-const loaderToIdent = data => {
+/**
+ * @param {LoaderItem} data data
+ * @returns {string} ident
+ */
+const loaderToIdent = (data) => {
 	if (!data.options) {
 		return data.loader;
 	}
 	if (typeof data.options === "string") {
-		return data.loader + "?" + data.options;
+		return `${data.loader}?${data.options}`;
 	}
 	if (typeof data.options !== "object") {
 		throw new Error("loader options must be string or object");
 	}
 	if (data.ident) {
-		return data.loader + "??" + data.ident;
+		return `${data.loader}??${data.ident}`;
 	}
-	return data.loader + "?" + JSON.stringify(data.options);
+	return `${data.loader}?${JSON.stringify(data.options)}`;
 };
 
-const identToLoaderRequest = resultString => {
-	const idx = resultString.indexOf("?");
-	if (idx >= 0) {
-		const loader = resultString.substr(0, idx);
-		const options = resultString.substr(idx + 1);
-		return {
-			loader,
-			options
-		};
-	} else {
-		return {
-			loader: resultString,
-			options: undefined
-		};
+/**
+ * @param {LoaderItem[]} loaders loaders
+ * @param {string} resource resource
+ * @returns {string} stringified loaders and resource
+ */
+const stringifyLoadersAndResource = (loaders, resource) => {
+	let str = "";
+	for (const loader of loaders) {
+		str += `${loaderToIdent(loader)}!`;
+	}
+	return str + resource;
+};
+
+/**
+ * @param {number} times times
+ * @param {(err?: null | Error) => void} callback callback
+ * @returns {(err?: null | Error) => void} callback
+ */
+const needCalls = (times, callback) => (err) => {
+	if (--times === 0) {
+		return callback(err);
+	}
+	if (err && times > 0) {
+		times = Number.NaN;
+		return callback(err);
+	}
+};
+
+/**
+ * @template T
+ * @template O
+ * @param {T} globalOptions global options
+ * @param {string} type type
+ * @param {O} localOptions local options
+ * @returns {T & O | T | O} result
+ */
+const mergeGlobalOptions = (globalOptions, type, localOptions) => {
+	const parts = type.split("/");
+	/** @type {undefined | T} */
+	let result;
+	let current = "";
+	for (const part of parts) {
+		current = current ? `${current}/${part}` : part;
+		const options =
+			/** @type {T} */
+			(globalOptions[/** @type {keyof T} */ (current)]);
+		if (typeof options === "object") {
+			result =
+				result === undefined ? options : cachedCleverMerge(result, options);
+		}
+	}
+	if (result === undefined) {
+		return localOptions;
 	}
+	return cachedCleverMerge(result, localOptions);
 };
 
-const dependencyCache = new WeakMap();
+// TODO webpack 6 remove
+/**
+ * @template {import("tapable").Hook} T
+ * @param {string} name name
+ * @param {T} hook hook
+ * @returns {string} result
+ */
+const deprecationChangedHookMessage = (name, hook) => {
+	const names = hook.taps.map((tapped) => tapped.name).join(", ");
+
+	return (
+		`NormalModuleFactory.${name} (${names}) is no longer a waterfall hook, but a bailing hook instead. ` +
+		"Do not return the passed object, but modify it instead. " +
+		"Returning false will ignore the request and results in no module created."
+	);
+};
+
+const ruleSetCompiler = new RuleSetCompiler([
+	new BasicMatcherRulePlugin("test", "resource"),
+	new BasicMatcherRulePlugin("scheme"),
+	new BasicMatcherRulePlugin("mimetype"),
+	new BasicMatcherRulePlugin("dependency"),
+	new BasicMatcherRulePlugin("include", "resource"),
+	new BasicMatcherRulePlugin("exclude", "resource", true),
+	new BasicMatcherRulePlugin("resource"),
+	new BasicMatcherRulePlugin("resourceQuery"),
+	new BasicMatcherRulePlugin("resourceFragment"),
+	new BasicMatcherRulePlugin("realResource"),
+	new BasicMatcherRulePlugin("issuer"),
+	new BasicMatcherRulePlugin("compiler"),
+	new BasicMatcherRulePlugin("issuerLayer"),
+	new BasicMatcherRulePlugin("phase"),
+	new ObjectMatcherRulePlugin("assert", "attributes", (value) => {
+		if (value) {
+			return (
+				/** @type {ImportAttributes} */ (value)._isLegacyAssert !== undefined
+			);
+		}
+
+		return false;
+	}),
+	new ObjectMatcherRulePlugin("with", "attributes", (value) => {
+		if (value) {
+			return !(/** @type {ImportAttributes} */ (value)._isLegacyAssert);
+		}
+		return false;
+	}),
+	new ObjectMatcherRulePlugin("descriptionData"),
+	new BasicEffectRulePlugin("type"),
+	new BasicEffectRulePlugin("sideEffects"),
+	new BasicEffectRulePlugin("parser"),
+	new BasicEffectRulePlugin("resolve"),
+	new BasicEffectRulePlugin("generator"),
+	new BasicEffectRulePlugin("layer"),
+	new BasicEffectRulePlugin("extractSourceMap"),
+	new UseEffectRulePlugin()
+]);
+
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
+/** @typedef {import("./javascript/JavascriptGenerator")} JavascriptGenerator */
+/** @typedef {import("../declarations/WebpackOptions").EmptyGeneratorOptions} EmptyGeneratorOptions */
+
+/** @typedef {import("./json/JsonParser")} JsonParser */
+/** @typedef {import("../declarations/WebpackOptions").JsonParserOptions} JsonParserOptions */
+/** @typedef {import("./json/JsonGenerator")} JsonGenerator */
+/** @typedef {import("../declarations/WebpackOptions").JsonGeneratorOptions} JsonGeneratorOptions */
+
+/** @typedef {import("./asset/AssetParser")} AssetParser */
+/** @typedef {import("./asset/AssetSourceParser")} AssetSourceParser */
+/** @typedef {import("./asset/AssetBytesParser")} AssetBytesParser */
+/** @typedef {import("../declarations/WebpackOptions").AssetParserOptions} AssetParserOptions */
+/** @typedef {import("../declarations/WebpackOptions").EmptyParserOptions} EmptyParserOptions */
+/** @typedef {import("./asset/AssetGenerator")} AssetGenerator */
+/** @typedef {import("../declarations/WebpackOptions").AssetGeneratorOptions} AssetGeneratorOptions */
+/** @typedef {import("../declarations/WebpackOptions").AssetInlineGeneratorOptions} AssetInlineGeneratorOptions */
+/** @typedef {import("../declarations/WebpackOptions").AssetResourceGeneratorOptions} AssetResourceGeneratorOptions */
+/** @typedef {import("./asset/AssetSourceGenerator")} AssetSourceGenerator */
+/** @typedef {import("./asset/AssetBytesGenerator")} AssetBytesGenerator */
+
+/** @typedef {import("./wasm-async/AsyncWebAssemblyParser")} AsyncWebAssemblyParser */
+/** @typedef {import("./wasm-sync/WebAssemblyParser")} WebAssemblyParser */
+
+/** @typedef {import("./css/CssParser")} CssParser */
+/** @typedef {import("../declarations/WebpackOptions").CssParserOptions} CssParserOptions */
+/** @typedef {import("../declarations/WebpackOptions").CssModuleParserOptions} CssModuleParserOptions */
+/** @typedef {import("./css/CssGenerator")} CssGenerator */
+/** @typedef {import("../declarations/WebpackOptions").CssGeneratorOptions} CssGeneratorOptions */
+/** @typedef {import("../declarations/WebpackOptions").CssModuleGeneratorOptions} CssModuleGeneratorOptions */
+
+/* eslint-disable jsdoc/type-formatting */
+/**
+ * @typedef {[
+ * [JAVASCRIPT_MODULE_TYPE_AUTO, JavascriptParser, JavascriptParserOptions, JavascriptGenerator, EmptyGeneratorOptions],
+ * [JAVASCRIPT_MODULE_TYPE_DYNAMIC, JavascriptParser, JavascriptParserOptions, JavascriptGenerator, EmptyGeneratorOptions],
+ * [JAVASCRIPT_MODULE_TYPE_ESM, JavascriptParser, JavascriptParserOptions, JavascriptGenerator, EmptyGeneratorOptions],
+ * [JSON_MODULE_TYPE, JsonParser, JsonParserOptions, JsonGenerator, JsonGeneratorOptions],
+ * [ASSET_MODULE_TYPE, AssetParser, AssetParserOptions, AssetGenerator, AssetGeneratorOptions],
+ * [ASSET_MODULE_TYPE_INLINE, AssetParser, EmptyParserOptions, AssetGenerator, AssetGeneratorOptions],
+ * [ASSET_MODULE_TYPE_RESOURCE, AssetParser, EmptyParserOptions, AssetGenerator, AssetGeneratorOptions],
+ * [ASSET_MODULE_TYPE_SOURCE, AssetSourceParser, EmptyParserOptions, AssetSourceGenerator, EmptyGeneratorOptions],
+ * [ASSET_MODULE_TYPE_BYTES, AssetBytesParser, EmptyParserOptions, AssetBytesGenerator, EmptyGeneratorOptions],
+ * [WEBASSEMBLY_MODULE_TYPE_ASYNC, AsyncWebAssemblyParser, EmptyParserOptions, Generator, EmptyParserOptions],
+ * [WEBASSEMBLY_MODULE_TYPE_SYNC, WebAssemblyParser, EmptyParserOptions, Generator, EmptyParserOptions],
+ * [CSS_MODULE_TYPE, CssParser, CssParserOptions, CssGenerator, CssGeneratorOptions],
+ * [CSS_MODULE_TYPE_AUTO, CssParser, CssModuleParserOptions, CssGenerator, CssModuleGeneratorOptions],
+ * [CSS_MODULE_TYPE_MODULE, CssParser, CssModuleParserOptions, CssGenerator, CssModuleGeneratorOptions],
+ * [CSS_MODULE_TYPE_GLOBAL, CssParser, CssModuleParserOptions, CssGenerator, CssModuleGeneratorOptions],
+ * [string, Parser, ParserOptions, Generator, GeneratorOptions],
+ * ]} ParsersAndGeneratorsByTypes
+ */
+/* eslint-enable jsdoc/type-formatting */
+
+/**
+ * @template {unknown[]} T
+ * @template {number[]} I
+ * @typedef {{ [K in keyof I]: K extends keyof I ? I[K] extends keyof T ? T[I[K]] : never : never }} ExtractTupleElements
+ */
 
-class NormalModuleFactory extends Tapable {
-	constructor(context, resolverFactory, options) {
+/**
+ * @template {unknown[]} T
+ * @template {number[]} A
+ * @template [R=void]
+ * @typedef {T extends [infer Head extends [string, ...unknown[]], ...infer Tail extends [string, ...unknown[]][]] ? Record, R extends number ? Head[R] : R>> & RecordFactoryFromTuple : unknown } RecordFactoryFromTuple
+ */
+
+class NormalModuleFactory extends ModuleFactory {
+	/**
+	 * @param {object} param params
+	 * @param {string=} param.context context
+	 * @param {InputFileSystem} param.fs file system
+	 * @param {ResolverFactory} param.resolverFactory resolverFactory
+	 * @param {ModuleOptions} param.options options
+	 * @param {AssociatedObjectForCache} param.associatedObjectForCache an object to which the cache will be attached
+	 */
+	constructor({
+		context,
+		fs,
+		resolverFactory,
+		options,
+		associatedObjectForCache
+	}) {
 		super();
-		this.hooks = {
-			resolver: new SyncWaterfallHook(["resolver"]),
-			factory: new SyncWaterfallHook(["factory"]),
-			beforeResolve: new AsyncSeriesWaterfallHook(["data"]),
-			afterResolve: new AsyncSeriesWaterfallHook(["data"]),
-			createModule: new SyncBailHook(["data"]),
-			module: new SyncWaterfallHook(["module", "data"]),
+		this.hooks = Object.freeze({
+			/** @type {AsyncSeriesBailHook<[ResolveData], Module | false | void>} */
+			resolve: new AsyncSeriesBailHook(["resolveData"]),
+			/** @type {HookMap>} */
+			resolveForScheme: new HookMap(
+				() => new AsyncSeriesBailHook(["resourceData", "resolveData"])
+			),
+			/** @type {HookMap>} */
+			resolveInScheme: new HookMap(
+				() => new AsyncSeriesBailHook(["resourceData", "resolveData"])
+			),
+			/** @type {AsyncSeriesBailHook<[ResolveData], Module | undefined>} */
+			factorize: new AsyncSeriesBailHook(["resolveData"]),
+			/** @type {AsyncSeriesBailHook<[ResolveData], false | void>} */
+			beforeResolve: new AsyncSeriesBailHook(["resolveData"]),
+			/** @type {AsyncSeriesBailHook<[ResolveData], false | void>} */
+			afterResolve: new AsyncSeriesBailHook(["resolveData"]),
+			/** @type {AsyncSeriesBailHook<[CreateData, ResolveData], Module | void>} */
+			createModule: new AsyncSeriesBailHook(["createData", "resolveData"]),
+			/** @type {SyncWaterfallHook<[Module, CreateData, ResolveData]>} */
+			module: new SyncWaterfallHook(["module", "createData", "resolveData"]),
+			/** @type {import("tapable").TypedHookMap>} */
 			createParser: new HookMap(() => new SyncBailHook(["parserOptions"])),
+			/** @type {import("tapable").TypedHookMap>} */
 			parser: new HookMap(() => new SyncHook(["parser", "parserOptions"])),
+			/** @type {import("tapable").TypedHookMap>} */
 			createGenerator: new HookMap(
 				() => new SyncBailHook(["generatorOptions"])
 			),
+			/** @type {import("tapable").TypedHookMap>} */
 			generator: new HookMap(
 				() => new SyncHook(["generator", "generatorOptions"])
+			),
+			/** @type {HookMap>} */
+			createModuleClass: new HookMap(
+				() => new SyncBailHook(["createData", "resolveData"])
 			)
-		};
-		this._pluginCompat.tap("NormalModuleFactory", options => {
-			switch (options.name) {
-				case "before-resolve":
-				case "after-resolve":
-					options.async = true;
-					break;
-				case "parser":
-					this.hooks.parser
-						.for("javascript/auto")
-						.tap(options.fn.name || "unnamed compat plugin", options.fn);
-					return true;
-			}
-			let match;
-			match = /^parser (.+)$/.exec(options.name);
-			if (match) {
-				this.hooks.parser
-					.for(match[1])
-					.tap(
-						options.fn.name || "unnamed compat plugin",
-						options.fn.bind(this)
-					);
-				return true;
-			}
-			match = /^create-parser (.+)$/.exec(options.name);
-			if (match) {
-				this.hooks.createParser
-					.for(match[1])
-					.tap(
-						options.fn.name || "unnamed compat plugin",
-						options.fn.bind(this)
-					);
-				return true;
-			}
 		});
+		/** @type {ResolverFactory} */
 		this.resolverFactory = resolverFactory;
-		this.ruleSet = new RuleSet(options.defaultRules.concat(options.rules));
-		this.cachePredicate =
-			typeof options.unsafeCache === "function"
-				? options.unsafeCache
-				: Boolean.bind(null, options.unsafeCache);
+		/** @type {RuleSet} */
+		this.ruleSet = ruleSetCompiler.compile([
+			{
+				rules: /** @type {RuleSetRules} */ (options.defaultRules)
+			},
+			{
+				rules: /** @type {RuleSetRules} */ (options.rules)
+			}
+		]);
+		/** @type {string} */
 		this.context = context || "";
-		this.parserCache = Object.create(null);
-		this.generatorCache = Object.create(null);
-		this.hooks.factory.tap("NormalModuleFactory", () => (result, callback) => {
-			let resolver = this.hooks.resolver.call(null);
+		/** @type {InputFileSystem} */
+		this.fs = fs;
+		this._globalParserOptions = options.parser;
+		this._globalGeneratorOptions = options.generator;
+		/** @type {Map>} */
+		this.parserCache = new Map();
+		/** @type {Map>} */
+		this.generatorCache = new Map();
+		/** @type {Set} */
+		this._restoredUnsafeCacheEntries = new Set();
 
-			// Ignored
-			if (!resolver) return callback();
+		/** @type {(resource: string) => import("./util/identifier").ParsedResource} */
+		const cacheParseResource = parseResource.bindCache(
+			associatedObjectForCache
+		);
+		const cachedParseResourceWithoutFragment =
+			parseResourceWithoutFragment.bindCache(associatedObjectForCache);
+		this._parseResourceWithoutFragment = cachedParseResourceWithoutFragment;
 
-			resolver(result, (err, data) => {
-				if (err) return callback(err);
+		this.hooks.factorize.tapAsync(
+			{
+				name: "NormalModuleFactory",
+				stage: 100
+			},
+			(resolveData, callback) => {
+				this.hooks.resolve.callAsync(resolveData, (err, result) => {
+					if (err) return callback(err);
 
-				// Ignored
-				if (!data) return callback();
+					// Ignored
+					if (result === false) return callback();
 
-				// direct module
-				if (typeof data.source === "function") return callback(null, data);
+					// direct module
+					if (result instanceof Module) return callback(null, result);
 
-				this.hooks.afterResolve.callAsync(data, (err, result) => {
-					if (err) return callback(err);
+					if (typeof result === "object") {
+						throw new Error(
+							`${deprecationChangedHookMessage(
+								"resolve",
+								this.hooks.resolve
+							)} Returning a Module object will result in this module used as result.`
+						);
+					}
 
-					// Ignored
-					if (!result) return callback();
+					this.hooks.afterResolve.callAsync(resolveData, (err, result) => {
+						if (err) return callback(err);
 
-					let createdModule = this.hooks.createModule.call(result);
-					if (!createdModule) {
-						if (!result.request) {
-							return callback(new Error("Empty dependency (no request)"));
+						if (typeof result === "object") {
+							throw new Error(
+								deprecationChangedHookMessage(
+									"afterResolve",
+									this.hooks.afterResolve
+								)
+							);
 						}
 
-						createdModule = new NormalModule(result);
-					}
+						// Ignored
+						if (result === false) return callback();
 
-					createdModule = this.hooks.module.call(createdModule, result);
+						const createData = resolveData.createData;
 
-					return callback(null, createdModule);
+						this.hooks.createModule.callAsync(
+							createData,
+							resolveData,
+							(err, createdModule) => {
+								if (!createdModule) {
+									if (!resolveData.request) {
+										return callback(new Error("Empty dependency (no request)"));
+									}
+
+									// TODO webpack 6 make it required and move javascript/wasm/asset properties to own module
+									createdModule = this.hooks.createModuleClass
+										.for(
+											/** @type {ModuleSettings} */
+											(createData.settings).type
+										)
+										.call(createData, resolveData);
+
+									if (!createdModule) {
+										createdModule = /** @type {Module} */ (
+											new NormalModule(
+												/** @type {NormalModuleCreateData} */
+												(createData)
+											)
+										);
+									}
+								}
+
+								createdModule = this.hooks.module.call(
+									createdModule,
+									createData,
+									resolveData
+								);
+
+								return callback(null, createdModule);
+							}
+						);
+					});
 				});
-			});
-		});
-		this.hooks.resolver.tap("NormalModuleFactory", () => (data, callback) => {
-			const contextInfo = data.contextInfo;
-			const context = data.context;
-			const request = data.request;
-
-			const loaderResolver = this.getResolver("loader");
-			const normalResolver = this.getResolver("normal", data.resolveOptions);
-
-			let matchResource = undefined;
-			let requestWithoutMatchResource = request;
-			const matchResourceMatch = MATCH_RESOURCE_REGEX.exec(request);
-			if (matchResourceMatch) {
-				matchResource = matchResourceMatch[1];
-				if (/^\.\.?\//.test(matchResource)) {
-					matchResource = path.join(context, matchResource);
-				}
-				requestWithoutMatchResource = request.substr(
-					matchResourceMatch[0].length
-				);
 			}
+		);
+		this.hooks.resolve.tapAsync(
+			{
+				name: "NormalModuleFactory",
+				stage: 100
+			},
+			(data, callback) => {
+				const {
+					contextInfo,
+					context,
+					dependencies,
+					dependencyType,
+					request,
+					phase,
+					attributes,
+					resolveOptions,
+					fileDependencies,
+					missingDependencies,
+					contextDependencies
+				} = data;
+				const loaderResolver = this.getResolver("loader");
 
-			const noPreAutoLoaders = requestWithoutMatchResource.startsWith("-!");
-			const noAutoLoaders =
-				noPreAutoLoaders || requestWithoutMatchResource.startsWith("!");
-			const noPrePostAutoLoaders = requestWithoutMatchResource.startsWith("!!");
-			let elements = requestWithoutMatchResource
-				.replace(/^-?!+/, "")
-				.replace(/!!+/g, "!")
-				.split("!");
-			let resource = elements.pop();
-			elements = elements.map(identToLoaderRequest);
-
-			asyncLib.parallel(
-				[
-					callback =>
-						this.resolveRequestArray(
-							contextInfo,
-							context,
-							elements,
-							loaderResolver,
-							callback
-						),
-					callback => {
-						if (resource === "" || resource[0] === "?") {
-							return callback(null, {
-								resource
-							});
-						}
+				/** @type {ResourceData | undefined} */
+				let matchResourceData;
+				/** @type {string} */
+				let unresolvedResource;
+				/** @type {ParsedLoaderRequest[]} */
+				let elements;
+				let noPreAutoLoaders = false;
+				let noAutoLoaders = false;
+				let noPrePostAutoLoaders = false;
 
-						normalResolver.resolve(
-							contextInfo,
-							context,
-							resource,
-							{},
-							(err, resource, resourceResolveData) => {
-								if (err) return callback(err);
-								callback(null, {
-									resourceResolveData,
-									resource
-								});
+				const contextScheme = getScheme(context);
+				/** @type {string | undefined} */
+				let scheme = getScheme(request);
+
+				if (!scheme) {
+					/** @type {string} */
+					let requestWithoutMatchResource = request;
+					const matchResourceMatch = MATCH_RESOURCE_REGEX.exec(request);
+					if (matchResourceMatch) {
+						let matchResource = matchResourceMatch[1];
+						// Check if matchResource starts with ./ or ../
+						if (matchResource.charCodeAt(0) === 46) {
+							// 46 is "."
+							const secondChar = matchResource.charCodeAt(1);
+							if (
+								secondChar === 47 || // 47 is "/"
+								(secondChar === 46 && matchResource.charCodeAt(2) === 47) // "../"
+							) {
+								// Resolve relative path against context
+								matchResource = join(this.fs, context, matchResource);
 							}
+						}
+
+						matchResourceData = {
+							...cacheParseResource(matchResource),
+							resource: matchResource
+						};
+						requestWithoutMatchResource = request.slice(
+							matchResourceMatch[0].length
 						);
 					}
-				],
-				(err, results) => {
+
+					scheme = getScheme(requestWithoutMatchResource);
+
+					if (!scheme && !contextScheme) {
+						const firstChar = requestWithoutMatchResource.charCodeAt(0);
+						const secondChar = requestWithoutMatchResource.charCodeAt(1);
+						noPreAutoLoaders = firstChar === 45 && secondChar === 33; // startsWith "-!"
+						noAutoLoaders = noPreAutoLoaders || firstChar === 33; // startsWith "!"
+						noPrePostAutoLoaders = firstChar === 33 && secondChar === 33; // startsWith "!!";
+						const rawElements = requestWithoutMatchResource
+							.slice(
+								noPreAutoLoaders || noPrePostAutoLoaders
+									? 2
+									: noAutoLoaders
+										? 1
+										: 0
+							)
+							.split(/!+/);
+						unresolvedResource = /** @type {string} */ (rawElements.pop());
+						elements = rawElements.map((el) => {
+							const { path, query } = cachedParseResourceWithoutFragment(el);
+							return {
+								loader: path,
+								options: query ? query.slice(1) : undefined
+							};
+						});
+						scheme = getScheme(unresolvedResource);
+					} else {
+						unresolvedResource = requestWithoutMatchResource;
+						elements = EMPTY_ELEMENTS;
+					}
+				} else {
+					unresolvedResource = request;
+					elements = EMPTY_ELEMENTS;
+				}
+
+				/** @type {ResolveContext} */
+				const resolveContext = {
+					fileDependencies,
+					missingDependencies,
+					contextDependencies
+				};
+
+				/** @type {ResourceDataWithData} */
+				let resourceData;
+
+				/** @type {undefined | LoaderItem[]} */
+				let loaders;
+
+				const continueCallback = needCalls(2, (err) => {
 					if (err) return callback(err);
-					let loaders = results[0];
-					const resourceResolveData = results[1].resourceResolveData;
-					resource = results[1].resource;
 
 					// translate option idents
 					try {
-						for (const item of loaders) {
+						for (const item of /** @type {LoaderItem[]} */ (loaders)) {
 							if (typeof item.options === "string" && item.options[0] === "?") {
-								const ident = item.options.substr(1);
-								item.options = this.ruleSet.findOptionsByIdent(ident);
+								const ident = item.options.slice(1);
+								if (ident === "[[missing ident]]") {
+									throw new Error(
+										"No ident is provided by referenced loader. " +
+											"When using a function for Rule.use in config you need to " +
+											"provide an 'ident' property for referenced loader options."
+									);
+								}
+								item.options = this.ruleSet.references.get(ident);
+								if (item.options === undefined) {
+									throw new Error(
+										"Invalid ident is provided by referenced loader"
+									);
+								}
 								item.ident = ident;
 							}
 						}
-					} catch (e) {
-						return callback(e);
+					} catch (identErr) {
+						return callback(/** @type {Error} */ (identErr));
 					}
 
-					if (resource === false) {
+					if (!resourceData) {
 						// ignored
-						return callback(
-							null,
-							new RawModule(
-								"/* (ignored) */",
-								`ignored ${context} ${request}`,
-								`${request} (ignored)`
-							)
-						);
+						return callback(null, dependencies[0].createIgnoredModule(context));
 					}
 
 					const userRequest =
-						(matchResource !== undefined ? `${matchResource}!=!` : "") +
-						loaders
-							.map(loaderToIdent)
-							.concat([resource])
-							.join("!");
-
-					let resourcePath =
-						matchResource !== undefined ? matchResource : resource;
-					let resourceQuery = "";
-					const queryIndex = resourcePath.indexOf("?");
-					if (queryIndex >= 0) {
-						resourceQuery = resourcePath.substr(queryIndex);
-						resourcePath = resourcePath.substr(0, queryIndex);
-					}
+						(matchResourceData !== undefined
+							? `${matchResourceData.resource}!=!`
+							: "") +
+						stringifyLoadersAndResource(
+							/** @type {LoaderItem[]} */ (loaders),
+							resourceData.resource
+						);
 
-					const result = this.ruleSet.exec({
-						resource: resourcePath,
-						realResource:
-							matchResource !== undefined
-								? resource.replace(/\?.*/, "")
-								: resourcePath,
-						resourceQuery,
-						issuer: contextInfo.issuer,
-						compiler: contextInfo.compiler
-					});
+					/** @type {ModuleSettings} */
 					const settings = {};
+					/** @type {LoaderItem[]} */
 					const useLoadersPost = [];
+					/** @type {LoaderItem[]} */
 					const useLoaders = [];
+					/** @type {LoaderItem[]} */
 					const useLoadersPre = [];
-					for (const r of result) {
-						if (r.type === "use") {
-							if (r.enforce === "post" && !noPrePostAutoLoaders) {
-								useLoadersPost.push(r.value);
-							} else if (
-								r.enforce === "pre" &&
-								!noPreAutoLoaders &&
-								!noPrePostAutoLoaders
-							) {
-								useLoadersPre.push(r.value);
+
+					// handle .webpack[] suffix
+					/** @type {string} */
+					let resource;
+					/** @type {RegExpExecArray | null} */
+					let match;
+					if (
+						matchResourceData &&
+						typeof (resource = matchResourceData.resource) === "string" &&
+						(match = /\.webpack\[([^\]]+)\]$/.exec(resource))
+					) {
+						settings.type = match[1];
+						matchResourceData.resource = matchResourceData.resource.slice(
+							0,
+							-settings.type.length - 10
+						);
+					} else {
+						settings.type = JAVASCRIPT_MODULE_TYPE_AUTO;
+						const resourceDataForRules = matchResourceData || resourceData;
+
+						const result = this.ruleSet.exec({
+							resource: resourceDataForRules.path,
+							realResource: resourceData.path,
+							resourceQuery: resourceDataForRules.query,
+							resourceFragment: resourceDataForRules.fragment,
+							scheme,
+							phase,
+							attributes,
+							mimetype: matchResourceData
+								? ""
+								: resourceData.data.mimetype || "",
+							dependency: dependencyType,
+							descriptionData: matchResourceData
+								? undefined
+								: resourceData.data.descriptionFileData,
+							issuer: contextInfo.issuer,
+							compiler: contextInfo.compiler,
+							issuerLayer: contextInfo.issuerLayer || ""
+						});
+						for (const r of result) {
+							// https://github.com/webpack/webpack/issues/16466
+							// if a request exists PrePostAutoLoaders, should disable modifying Rule.type
+							if (r.type === "type" && noPrePostAutoLoaders) {
+								continue;
+							}
+							if (r.type === "use") {
+								if (!noAutoLoaders && !noPrePostAutoLoaders) {
+									useLoaders.push(r.value);
+								}
+							} else if (r.type === "use-post") {
+								if (!noPrePostAutoLoaders) {
+									useLoadersPost.push(r.value);
+								}
+							} else if (r.type === "use-pre") {
+								if (!noPreAutoLoaders && !noPrePostAutoLoaders) {
+									useLoadersPre.push(r.value);
+								}
 							} else if (
-								!r.enforce &&
-								!noAutoLoaders &&
-								!noPrePostAutoLoaders
+								typeof r.value === "object" &&
+								r.value !== null &&
+								typeof settings[
+									/** @type {keyof ModuleSettings} */
+									(r.type)
+								] === "object" &&
+								settings[/** @type {keyof ModuleSettings} */ (r.type)] !== null
 							) {
-								useLoaders.push(r.value);
+								const type = /** @type {keyof ModuleSettings} */ (r.type);
+								settings[type] = cachedCleverMerge(settings[type], r.value);
+							} else {
+								const type = /** @type {keyof ModuleSettings} */ (r.type);
+								settings[type] = r.value;
 							}
-						} else if (
-							typeof r.value === "object" &&
-							r.value !== null &&
-							typeof settings[r.type] === "object" &&
-							settings[r.type] !== null
-						) {
-							settings[r.type] = cachedMerge(settings[r.type], r.value);
-						} else {
-							settings[r.type] = r.value;
 						}
 					}
-					asyncLib.parallel(
-						[
-							this.resolveRequestArray.bind(
-								this,
-								contextInfo,
-								this.context,
-								useLoadersPost,
-								loaderResolver
-							),
-							this.resolveRequestArray.bind(
-								this,
-								contextInfo,
-								this.context,
-								useLoaders,
-								loaderResolver
-							),
-							this.resolveRequestArray.bind(
-								this,
-								contextInfo,
-								this.context,
-								useLoadersPre,
-								loaderResolver
-							)
-						],
-						(err, results) => {
-							if (err) return callback(err);
-							loaders = results[0].concat(loaders, results[1], results[2]);
-							process.nextTick(() => {
-								const type = settings.type;
-								const resolveOptions = settings.resolve;
-								callback(null, {
-									context: context,
-									request: loaders
-										.map(loaderToIdent)
-										.concat([resource])
-										.join("!"),
-									dependencies: data.dependencies,
-									userRequest,
-									rawRequest: request,
-									loaders,
-									resource,
-									matchResource,
-									resourceResolveData,
-									settings,
-									type,
-									parser: this.getParser(type, settings.parser),
-									generator: this.getGenerator(type, settings.generator),
-									resolveOptions
-								});
+
+					/** @type {undefined | LoaderItem[]} */
+					let postLoaders;
+					/** @type {undefined | LoaderItem[]} */
+					let normalLoaders;
+					/** @type {undefined | LoaderItem[]} */
+					let preLoaders;
+
+					const continueCallback = needCalls(3, (err) => {
+						if (err) {
+							return callback(err);
+						}
+						const allLoaders = /** @type {LoaderItem[]} */ (postLoaders);
+						if (matchResourceData === undefined) {
+							for (const loader of /** @type {LoaderItem[]} */ (loaders)) {
+								allLoaders.push(loader);
+							}
+							for (const loader of /** @type {LoaderItem[]} */ (
+								normalLoaders
+							)) {
+								allLoaders.push(loader);
+							}
+						} else {
+							for (const loader of /** @type {LoaderItem[]} */ (
+								normalLoaders
+							)) {
+								allLoaders.push(loader);
+							}
+							for (const loader of /** @type {LoaderItem[]} */ (loaders)) {
+								allLoaders.push(loader);
+							}
+						}
+						for (const loader of /** @type {LoaderItem[]} */ (preLoaders)) {
+							allLoaders.push(loader);
+						}
+						const type = /** @type {NormalModuleTypes} */ (settings.type);
+						const resolveOptions = settings.resolve;
+						const layer = settings.layer;
+
+						try {
+							Object.assign(data.createData, {
+								layer:
+									layer === undefined ? contextInfo.issuerLayer || null : layer,
+								request: stringifyLoadersAndResource(
+									allLoaders,
+									resourceData.resource
+								),
+								userRequest,
+								rawRequest: request,
+								loaders: allLoaders,
+								resource: resourceData.resource,
+								context:
+									resourceData.context || getContext(resourceData.resource),
+								matchResource: matchResourceData
+									? matchResourceData.resource
+									: undefined,
+								resourceResolveData: resourceData.data,
+								settings,
+								type,
+								parser: this.getParser(type, settings.parser),
+								parserOptions: settings.parser,
+								generator: this.getGenerator(type, settings.generator),
+								generatorOptions: settings.generator,
+								resolveOptions,
+								extractSourceMap: settings.extractSourceMap || false
 							});
+						} catch (createDataErr) {
+							return callback(/** @type {Error} */ (createDataErr));
+						}
+						callback();
+					});
+					this.resolveRequestArray(
+						contextInfo,
+						this.context,
+						useLoadersPost,
+						loaderResolver,
+						resolveContext,
+						(err, result) => {
+							postLoaders = result;
+							continueCallback(err);
+						}
+					);
+					this.resolveRequestArray(
+						contextInfo,
+						this.context,
+						useLoaders,
+						loaderResolver,
+						resolveContext,
+						(err, result) => {
+							normalLoaders = result;
+							continueCallback(err);
+						}
+					);
+					this.resolveRequestArray(
+						contextInfo,
+						this.context,
+						useLoadersPre,
+						loaderResolver,
+						resolveContext,
+						(err, result) => {
+							preLoaders = result;
+							continueCallback(err);
 						}
 					);
+				});
+
+				this.resolveRequestArray(
+					contextInfo,
+					contextScheme ? this.context : context,
+					/** @type {LoaderItem[]} */ (elements),
+					loaderResolver,
+					resolveContext,
+					(err, result) => {
+						if (err) return continueCallback(err);
+						loaders = result;
+						continueCallback();
+					}
+				);
+
+				/**
+				 * @param {string} context context
+				 */
+				const defaultResolve = (context) => {
+					if (/^(?:$|\?)/.test(unresolvedResource)) {
+						resourceData = {
+							...cacheParseResource(unresolvedResource),
+							resource: unresolvedResource,
+							data: {}
+						};
+						continueCallback();
+					}
+
+					// resource without scheme and with path
+					else {
+						const normalResolver = this.getResolver(
+							"normal",
+							dependencyType
+								? cachedSetProperty(
+										resolveOptions || EMPTY_RESOLVE_OPTIONS,
+										"dependencyType",
+										dependencyType
+									)
+								: resolveOptions
+						);
+						this.resolveResource(
+							contextInfo,
+							context,
+							unresolvedResource,
+							normalResolver,
+							resolveContext,
+							(err, _resolvedResource, resolvedResourceResolveData) => {
+								if (err) return continueCallback(err);
+								if (_resolvedResource !== false) {
+									const resolvedResource =
+										/** @type {string} */
+										(_resolvedResource);
+									resourceData = {
+										...cacheParseResource(resolvedResource),
+										resource: resolvedResource,
+										data:
+											/** @type {ResolveRequest} */
+											(resolvedResourceResolveData)
+									};
+								}
+								continueCallback();
+							}
+						);
+					}
+				};
+
+				// resource with scheme
+				if (scheme) {
+					resourceData = {
+						resource: unresolvedResource,
+						data: {},
+						path: undefined,
+						query: undefined,
+						fragment: undefined,
+						context: undefined
+					};
+					this.hooks.resolveForScheme
+						.for(scheme)
+						.callAsync(resourceData, data, (err) => {
+							if (err) return continueCallback(err);
+							continueCallback();
+						});
 				}
-			);
-		});
+
+				// resource within scheme
+				else if (contextScheme) {
+					resourceData = {
+						resource: unresolvedResource,
+						data: {},
+						path: undefined,
+						query: undefined,
+						fragment: undefined,
+						context: undefined
+					};
+					this.hooks.resolveInScheme
+						.for(contextScheme)
+						.callAsync(resourceData, data, (err, handled) => {
+							if (err) return continueCallback(err);
+							if (!handled) return defaultResolve(this.context);
+							continueCallback();
+						});
+				}
+
+				// resource without scheme and without path
+				else {
+					defaultResolve(context);
+				}
+			}
+		);
 	}
 
+	cleanupForCache() {
+		for (const module of this._restoredUnsafeCacheEntries) {
+			ChunkGraph.clearChunkGraphForModule(module);
+			ModuleGraph.clearModuleGraphForModule(module);
+			module.cleanupForCache();
+		}
+	}
+
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
 	create(data, callback) {
-		const dependencies = data.dependencies;
-		const cacheEntry = dependencyCache.get(dependencies[0]);
-		if (cacheEntry) return callback(null, cacheEntry);
+		const dependencies = /** @type {ModuleDependency[]} */ (data.dependencies);
 		const context = data.context || this.context;
 		const resolveOptions = data.resolveOptions || EMPTY_RESOLVE_OPTIONS;
-		const request = dependencies[0].request;
-		const contextInfo = data.contextInfo || {};
-		this.hooks.beforeResolve.callAsync(
-			{
-				contextInfo,
-				resolveOptions,
-				context,
-				request,
-				dependencies
-			},
-			(err, result) => {
-				if (err) return callback(err);
+		const dependency = dependencies[0];
+		const request = dependency.request;
+		const attributes =
+			/** @type {ModuleDependency & { attributes: ImportAttributes }} */
+			(dependency).attributes;
+		const phase =
+			typeof (
+				/** @type {ModuleDependency & { phase?: ImportPhaseType }} */
+				(dependency).phase
+			) === "number"
+				? ImportPhaseUtils.stringify(
+						/** @type {ModuleDependency & { phase?: ImportPhaseType }} */
+						(dependency).phase
+					)
+				: "evaluation";
+		const dependencyType = dependency.category || "";
+		const contextInfo = data.contextInfo;
+		/** @type {FileSystemDependencies} */
+		const fileDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		const missingDependencies = new LazySet();
+		/** @type {FileSystemDependencies} */
+		const contextDependencies = new LazySet();
+		/** @type {ResolveData} */
+		const resolveData = {
+			contextInfo,
+			resolveOptions,
+			context,
+			request,
+			phase,
+			attributes,
+			dependencies,
+			dependencyType,
+			fileDependencies,
+			missingDependencies,
+			contextDependencies,
+			createData: {},
+			cacheable: true
+		};
+		this.hooks.beforeResolve.callAsync(resolveData, (err, result) => {
+			if (err) {
+				return callback(err, {
+					fileDependencies,
+					missingDependencies,
+					contextDependencies,
+					cacheable: false
+				});
+			}
 
-				// Ignored
-				if (!result) return callback();
+			// Ignored
+			if (result === false) {
+				/** @type {ModuleFactoryResult} * */
+				const factoryResult = {
+					fileDependencies,
+					missingDependencies,
+					contextDependencies,
+					cacheable: resolveData.cacheable
+				};
 
-				const factory = this.hooks.factory.call(null);
+				if (resolveData.ignoredModule) {
+					factoryResult.module = resolveData.ignoredModule;
+				}
 
-				// Ignored
-				if (!factory) return callback();
+				return callback(null, factoryResult);
+			}
 
-				factory(result, (err, module) => {
-					if (err) return callback(err);
+			if (typeof result === "object") {
+				throw new Error(
+					deprecationChangedHookMessage(
+						"beforeResolve",
+						this.hooks.beforeResolve
+					)
+				);
+			}
 
-					if (module && this.cachePredicate(module)) {
-						for (const d of dependencies) {
-							dependencyCache.set(d, module);
+			this.hooks.factorize.callAsync(resolveData, (err, module) => {
+				if (err) {
+					return callback(err, {
+						fileDependencies,
+						missingDependencies,
+						contextDependencies,
+						cacheable: false
+					});
+				}
+
+				/** @type {ModuleFactoryResult} * */
+				const factoryResult = {
+					module,
+					fileDependencies,
+					missingDependencies,
+					contextDependencies,
+					cacheable: resolveData.cacheable
+				};
+
+				callback(null, factoryResult);
+			});
+		});
+	}
+
+	/**
+	 * @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
+	 * @param {string} context context
+	 * @param {string} unresolvedResource unresolved resource
+	 * @param {ResolverWithOptions} resolver resolver
+	 * @param {ResolveContext} resolveContext resolver context
+	 * @param {(err: null | Error, res?: string | false, req?: ResolveRequest) => void} callback callback
+	 */
+	resolveResource(
+		contextInfo,
+		context,
+		unresolvedResource,
+		resolver,
+		resolveContext,
+		callback
+	) {
+		resolver.resolve(
+			contextInfo,
+			context,
+			unresolvedResource,
+			resolveContext,
+			(err, resolvedResource, resolvedResourceResolveData) => {
+				if (err) {
+					return this._resolveResourceErrorHints(
+						err,
+						contextInfo,
+						context,
+						unresolvedResource,
+						resolver,
+						resolveContext,
+						(err2, hints) => {
+							if (err2) {
+								err.message += `
+A fatal error happened during resolving additional hints for this error: ${err2.message}`;
+								err.stack += `
+
+A fatal error happened during resolving additional hints for this error:
+${err2.stack}`;
+								return callback(err);
+							}
+							if (hints && hints.length > 0) {
+								err.message += `
+${hints.join("\n\n")}`;
+							}
+
+							// Check if the extension is missing a leading dot (e.g. "js" instead of ".js")
+							let appendResolveExtensionsHint = false;
+							const specifiedExtensions = [...resolver.options.extensions];
+							const expectedExtensions = specifiedExtensions.map(
+								(extension) => {
+									if (LEADING_DOT_EXTENSION_REGEX.test(extension)) {
+										appendResolveExtensionsHint = true;
+										return `.${extension}`;
+									}
+									return extension;
+								}
+							);
+							if (appendResolveExtensionsHint) {
+								err.message += `\nDid you miss the leading dot in 'resolve.extensions'? Did you mean '${JSON.stringify(
+									expectedExtensions
+								)}' instead of '${JSON.stringify(specifiedExtensions)}'?`;
+							}
+
+							callback(err);
 						}
-					}
+					);
+				}
+				callback(err, resolvedResource, resolvedResourceResolveData);
+			}
+		);
+	}
 
-					callback(null, module);
-				});
+	/**
+	 * @param {Error} error error
+	 * @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
+	 * @param {string} context context
+	 * @param {string} unresolvedResource unresolved resource
+	 * @param {ResolverWithOptions} resolver resolver
+	 * @param {ResolveContext} resolveContext resolver context
+	 * @param {Callback} callback callback
+	 * @private
+	 */
+	_resolveResourceErrorHints(
+		error,
+		contextInfo,
+		context,
+		unresolvedResource,
+		resolver,
+		resolveContext,
+		callback
+	) {
+		asyncLib.parallel(
+			[
+				(callback) => {
+					if (!resolver.options.fullySpecified) return callback();
+					resolver
+						.withOptions({
+							fullySpecified: false
+						})
+						.resolve(
+							contextInfo,
+							context,
+							unresolvedResource,
+							resolveContext,
+							(err, resolvedResource) => {
+								if (!err && resolvedResource) {
+									const resource = parseResource(resolvedResource).path.replace(
+										/^.*[\\/]/,
+										""
+									);
+									return callback(
+										null,
+										`Did you mean '${resource}'?
+BREAKING CHANGE: The request '${unresolvedResource}' failed to resolve only because it was resolved as fully specified
+(probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '*.mjs' file, or a '*.js' file where the package.json contains '"type": "module"').
+The extension in the request is mandatory for it to be fully specified.
+Add the extension to the request.`
+									);
+								}
+								callback();
+							}
+						);
+				},
+				(callback) => {
+					if (!resolver.options.enforceExtension) return callback();
+					resolver
+						.withOptions({
+							enforceExtension: false,
+							extensions: []
+						})
+						.resolve(
+							contextInfo,
+							context,
+							unresolvedResource,
+							resolveContext,
+							(err, resolvedResource) => {
+								if (!err && resolvedResource) {
+									let hint = "";
+									const match = /\.[^.]+(?:\?|$)/.exec(unresolvedResource);
+									if (match) {
+										const fixedRequest = unresolvedResource.replace(
+											/(\.[^.]+)(\?|$)/,
+											"$2"
+										);
+										hint = resolver.options.extensions.has(match[1])
+											? `Did you mean '${fixedRequest}'?`
+											: `Did you mean '${fixedRequest}'? Also note that '${match[1]}' is not in 'resolve.extensions' yet and need to be added for this to work?`;
+									} else {
+										hint =
+											"Did you mean to omit the extension or to remove 'resolve.enforceExtension'?";
+									}
+									return callback(
+										null,
+										`The request '${unresolvedResource}' failed to resolve only because 'resolve.enforceExtension' was specified.
+${hint}
+Including the extension in the request is no longer possible. Did you mean to enforce including the extension in requests with 'resolve.extensions: []' instead?`
+									);
+								}
+								callback();
+							}
+						);
+				},
+				(callback) => {
+					if (
+						/^\.\.?\//.test(unresolvedResource) ||
+						resolver.options.preferRelative
+					) {
+						return callback();
+					}
+					resolver.resolve(
+						contextInfo,
+						context,
+						`./${unresolvedResource}`,
+						resolveContext,
+						(err, resolvedResource) => {
+							if (err || !resolvedResource) return callback();
+							const moduleDirectories = resolver.options.modules
+								.map((m) => (Array.isArray(m) ? m.join(", ") : m))
+								.join(", ");
+							callback(
+								null,
+								`Did you mean './${unresolvedResource}'?
+Requests that should resolve in the current directory need to start with './'.
+Requests that start with a name are treated as module requests and resolve within module directories (${moduleDirectories}).
+If changing the source code is not an option there is also a resolve options called 'preferRelative' which tries to resolve these kind of requests in the current directory too.`
+							);
+						}
+					);
+				}
+			],
+			(err, hints) => {
+				if (err) return callback(err);
+				callback(null, /** @type {string[]} */ (hints).filter(Boolean));
 			}
 		);
 	}
 
-	resolveRequestArray(contextInfo, context, array, resolver, callback) {
-		if (array.length === 0) return callback(null, []);
+	/**
+	 * @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
+	 * @param {string} context context
+	 * @param {LoaderItem[]} array array
+	 * @param {ResolverWithOptions} resolver resolver
+	 * @param {ResolveContext} resolveContext resolve context
+	 * @param {Callback} callback callback
+	 * @returns {void} result
+	 */
+	resolveRequestArray(
+		contextInfo,
+		context,
+		array,
+		resolver,
+		resolveContext,
+		callback
+	) {
+		// LoaderItem
+		if (array.length === 0) return callback(null, array);
 		asyncLib.map(
 			array,
+			/**
+			 * @param {LoaderItem} item item
+			 * @param {Callback} callback callback
+			 */
 			(item, callback) => {
 				resolver.resolve(
 					contextInfo,
 					context,
 					item.loader,
-					{},
-					(err, result) => {
+					resolveContext,
+					(err, result, resolveRequest) => {
 						if (
 							err &&
 							/^[^/]*$/.test(item.loader) &&
-							!/-loader$/.test(item.loader)
+							!item.loader.endsWith("-loader")
 						) {
 							return resolver.resolve(
 								contextInfo,
 								context,
-								item.loader + "-loader",
-								{},
-								err2 => {
+								`${item.loader}-loader`,
+								resolveContext,
+								(err2) => {
 									if (!err2) {
 										err.message =
-											err.message +
-											"\n" +
+											`${err.message}\n` +
 											"BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.\n" +
-											`                 You need to specify '${
-												item.loader
-											}-loader' instead of '${item.loader}',\n` +
+											`                 You need to specify '${item.loader}-loader' instead of '${item.loader}',\n` +
 											"                 see https://webpack.js.org/migrate/3/#automatic-loader-module-name-extension-removed";
 									}
 									callback(err);
@@ -446,38 +1332,83 @@ class NormalModuleFactory extends Tapable {
 						}
 						if (err) return callback(err);
 
-						const optionsOnly = item.options
-							? {
-									options: item.options
-							  }
-							: undefined;
-						return callback(
-							null,
-							Object.assign({}, item, identToLoaderRequest(result), optionsOnly)
+						const parsedResult = this._parseResourceWithoutFragment(
+							/** @type {string} */
+							(result)
 						);
+
+						const type = /\.mjs$/i.test(parsedResult.path)
+							? "module"
+							: /\.cjs$/i.test(parsedResult.path)
+								? "commonjs"
+								: /** @type {ResolveRequest} */
+									(resolveRequest).descriptionFileData === undefined
+									? undefined
+									: /** @type {string} */
+										(
+											/** @type {ResolveRequest} */
+											(resolveRequest).descriptionFileData.type
+										);
+						/** @type {LoaderItem} */
+						const resolved = {
+							loader: parsedResult.path,
+							type,
+							options:
+								item.options === undefined
+									? parsedResult.query
+										? parsedResult.query.slice(1)
+										: undefined
+									: item.options,
+							ident: item.options === undefined ? undefined : item.ident
+						};
+
+						return callback(null, resolved);
 					}
 				);
 			},
-			callback
+			(err, value) => {
+				callback(
+					/** @type {Error | null} */ (err),
+					/** @type {(LoaderItem)[]} */ (value)
+				);
+			}
 		);
 	}
 
-	getParser(type, parserOptions) {
-		let ident = type;
-		if (parserOptions) {
-			if (parserOptions.ident) {
-				ident = `${type}|${parserOptions.ident}`;
-			} else {
-				ident = JSON.stringify([type, parserOptions]);
-			}
+	/**
+	 * @param {string} type type
+	 * @param {ParserOptions} parserOptions parser options
+	 * @returns {Parser} parser
+	 */
+	getParser(type, parserOptions = EMPTY_PARSER_OPTIONS) {
+		let cache = this.parserCache.get(type);
+
+		if (cache === undefined) {
+			cache = new WeakMap();
+			this.parserCache.set(type, cache);
 		}
-		if (ident in this.parserCache) {
-			return this.parserCache[ident];
+
+		let parser = cache.get(parserOptions);
+
+		if (parser === undefined) {
+			parser = this.createParser(type, parserOptions);
+			cache.set(parserOptions, parser);
 		}
-		return (this.parserCache[ident] = this.createParser(type, parserOptions));
+
+		return parser;
 	}
 
+	/**
+	 * @param {string} type type
+	 * @param {ParserOptions} parserOptions parser options
+	 * @returns {Parser} parser
+	 */
 	createParser(type, parserOptions = {}) {
+		parserOptions = mergeGlobalOptions(
+			this._globalParserOptions,
+			type,
+			parserOptions
+		);
 		const parser = this.hooks.createParser.for(type).call(parserOptions);
 		if (!parser) {
 			throw new Error(`No parser registered for ${type}`);
@@ -486,25 +1417,40 @@ class NormalModuleFactory extends Tapable {
 		return parser;
 	}
 
-	getGenerator(type, generatorOptions) {
-		let ident = type;
-		if (generatorOptions) {
-			if (generatorOptions.ident) {
-				ident = `${type}|${generatorOptions.ident}`;
-			} else {
-				ident = JSON.stringify([type, generatorOptions]);
-			}
+	/**
+	 * @param {string} type type of generator
+	 * @param {GeneratorOptions} generatorOptions generator options
+	 * @returns {Generator} generator
+	 */
+	getGenerator(type, generatorOptions = EMPTY_GENERATOR_OPTIONS) {
+		let cache = this.generatorCache.get(type);
+
+		if (cache === undefined) {
+			cache = new WeakMap();
+			this.generatorCache.set(type, cache);
 		}
-		if (ident in this.generatorCache) {
-			return this.generatorCache[ident];
+
+		let generator = cache.get(generatorOptions);
+
+		if (generator === undefined) {
+			generator = this.createGenerator(type, generatorOptions);
+			cache.set(generatorOptions, generator);
 		}
-		return (this.generatorCache[ident] = this.createGenerator(
-			type,
-			generatorOptions
-		));
+
+		return generator;
 	}
 
+	/**
+	 * @param {string} type type of generator
+	 * @param {GeneratorOptions} generatorOptions generator options
+	 * @returns {Generator} generator
+	 */
 	createGenerator(type, generatorOptions = {}) {
+		generatorOptions = mergeGlobalOptions(
+			this._globalGeneratorOptions,
+			type,
+			generatorOptions
+		);
 		const generator = this.hooks.createGenerator
 			.for(type)
 			.call(generatorOptions);
@@ -515,11 +1461,13 @@ class NormalModuleFactory extends Tapable {
 		return generator;
 	}
 
+	/**
+	 * @param {Parameters[0]} type type of resolver
+	 * @param {Parameters[1]=} resolveOptions options
+	 * @returns {ReturnType} the resolver
+	 */
 	getResolver(type, resolveOptions) {
-		return this.resolverFactory.get(
-			type,
-			resolveOptions || EMPTY_RESOLVE_OPTIONS
-		);
+		return this.resolverFactory.get(type, resolveOptions);
 	}
 }
 
diff --git a/lib/NormalModuleReplacementPlugin.js b/lib/NormalModuleReplacementPlugin.js
index d4f23a58bae..aa7eea7d6a2 100644
--- a/lib/NormalModuleReplacementPlugin.js
+++ b/lib/NormalModuleReplacementPlugin.js
@@ -2,49 +2,73 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const path = require("path");
+const { dirname, join } = require("./util/fs");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+
+/** @typedef {(resolveData: ResolveData) => void} ModuleReplacer */
+
+const PLUGIN_NAME = "NormalModuleReplacementPlugin";
 
 class NormalModuleReplacementPlugin {
+	/**
+	 * Create an instance of the plugin
+	 * @param {RegExp} resourceRegExp the resource matcher
+	 * @param {string | ModuleReplacer} newResource the resource replacement
+	 */
 	constructor(resourceRegExp, newResource) {
 		this.resourceRegExp = resourceRegExp;
 		this.newResource = newResource;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		const resourceRegExp = this.resourceRegExp;
 		const newResource = this.newResource;
-		compiler.hooks.normalModuleFactory.tap(
-			"NormalModuleReplacementPlugin",
-			nmf => {
-				nmf.hooks.beforeResolve.tap("NormalModuleReplacementPlugin", result => {
-					if (!result) return;
-					if (resourceRegExp.test(result.request)) {
-						if (typeof newResource === "function") {
-							newResource(result);
-						} else {
-							result.request = newResource;
-						}
+		compiler.hooks.normalModuleFactory.tap(PLUGIN_NAME, (nmf) => {
+			nmf.hooks.beforeResolve.tap(PLUGIN_NAME, (result) => {
+				if (resourceRegExp.test(result.request)) {
+					if (typeof newResource === "function") {
+						newResource(result);
+					} else {
+						result.request = newResource;
 					}
-					return result;
-				});
-				nmf.hooks.afterResolve.tap("NormalModuleReplacementPlugin", result => {
-					if (!result) return;
-					if (resourceRegExp.test(result.resource)) {
-						if (typeof newResource === "function") {
-							newResource(result);
+				}
+			});
+			nmf.hooks.afterResolve.tap(PLUGIN_NAME, (result) => {
+				const createData = result.createData;
+				if (resourceRegExp.test(/** @type {string} */ (createData.resource))) {
+					if (typeof newResource === "function") {
+						newResource(result);
+					} else {
+						const fs =
+							/** @type {InputFileSystem} */
+							(compiler.inputFileSystem);
+						if (
+							newResource.startsWith("/") ||
+							(newResource.length > 1 && newResource[1] === ":")
+						) {
+							createData.resource = newResource;
 						} else {
-							result.resource = path.resolve(
-								path.dirname(result.resource),
+							createData.resource = join(
+								fs,
+								dirname(fs, /** @type {string} */ (createData.resource)),
 								newResource
 							);
 						}
 					}
-					return result;
-				});
-			}
-		);
+				}
+			});
+		});
 	}
 }
 
diff --git a/lib/NullFactory.js b/lib/NullFactory.js
index 90ede1fe3f1..f420508ca7d 100644
--- a/lib/NullFactory.js
+++ b/lib/NullFactory.js
@@ -2,11 +2,23 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-class NullFactory {
+const ModuleFactory = require("./ModuleFactory");
+
+/** @typedef {import("./ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+
+class NullFactory extends ModuleFactory {
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
 	create(data, callback) {
 		return callback();
 	}
 }
+
 module.exports = NullFactory;
diff --git a/lib/OptimizationStages.js b/lib/OptimizationStages.js
new file mode 100644
index 00000000000..c464b8abef3
--- /dev/null
+++ b/lib/OptimizationStages.js
@@ -0,0 +1,10 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Florent Cailhol @ooflorent
+*/
+
+"use strict";
+
+module.exports.STAGE_ADVANCED = 10;
+module.exports.STAGE_BASIC = -10;
+module.exports.STAGE_DEFAULT = 0;
diff --git a/lib/OptionsApply.js b/lib/OptionsApply.js
index 3b1ec316485..ed1b188a8d3 100644
--- a/lib/OptionsApply.js
+++ b/lib/OptionsApply.js
@@ -2,9 +2,23 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./config/normalization").WebpackOptionsInterception} WebpackOptionsInterception */
+/** @typedef {import("./Compiler")} Compiler */
+
 class OptionsApply {
-	process(options, compiler) {}
+	/**
+	 * @param {WebpackOptions} options options object
+	 * @param {Compiler} compiler compiler object
+	 * @param {WebpackOptionsInterception=} interception intercepted options
+	 * @returns {WebpackOptions} options object
+	 */
+	process(options, compiler, interception) {
+		return options;
+	}
 }
+
 module.exports = OptionsApply;
diff --git a/lib/OptionsDefaulter.js b/lib/OptionsDefaulter.js
deleted file mode 100644
index c5ff612d8d7..00000000000
--- a/lib/OptionsDefaulter.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const getProperty = (obj, name) => {
-	name = name.split(".");
-	for (let i = 0; i < name.length - 1; i++) {
-		obj = obj[name[i]];
-		if (typeof obj !== "object" || !obj || Array.isArray(obj)) return;
-	}
-	return obj[name.pop()];
-};
-
-const setProperty = (obj, name, value) => {
-	name = name.split(".");
-	for (let i = 0; i < name.length - 1; i++) {
-		if (typeof obj[name[i]] !== "object" && typeof obj[name[i]] !== "undefined")
-			return;
-		if (Array.isArray(obj[name[i]])) return;
-		if (!obj[name[i]]) obj[name[i]] = {};
-		obj = obj[name[i]];
-	}
-	obj[name.pop()] = value;
-};
-
-class OptionsDefaulter {
-	constructor() {
-		this.defaults = {};
-		this.config = {};
-	}
-
-	process(options) {
-		options = Object.assign({}, options);
-		for (let name in this.defaults) {
-			switch (this.config[name]) {
-				case undefined:
-					if (getProperty(options, name) === undefined) {
-						setProperty(options, name, this.defaults[name]);
-					}
-					break;
-				case "call":
-					setProperty(
-						options,
-						name,
-						this.defaults[name].call(this, getProperty(options, name), options)
-					);
-					break;
-				case "make":
-					if (getProperty(options, name) === undefined) {
-						setProperty(options, name, this.defaults[name].call(this, options));
-					}
-					break;
-				case "append": {
-					let oldValue = getProperty(options, name);
-					if (!Array.isArray(oldValue)) {
-						oldValue = [];
-					}
-					oldValue.push(...this.defaults[name]);
-					setProperty(options, name, oldValue);
-					break;
-				}
-				default:
-					throw new Error(
-						"OptionsDefaulter cannot process " + this.config[name]
-					);
-			}
-		}
-		return options;
-	}
-
-	set(name, config, def) {
-		if (def !== undefined) {
-			this.defaults[name] = def;
-			this.config[name] = config;
-		} else {
-			this.defaults[name] = config;
-			delete this.config[name];
-		}
-	}
-}
-
-module.exports = OptionsDefaulter;
diff --git a/lib/Parser.js b/lib/Parser.js
index 515df38771f..d495f5e035f 100644
--- a/lib/Parser.js
+++ b/lib/Parser.js
@@ -2,2192 +2,39 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-"use strict";
-
-// Syntax: https://developer.mozilla.org/en/SpiderMonkey/Parser_API
-
-const acorn = require("acorn-dynamic-import").default;
-const { Tapable, SyncBailHook, HookMap } = require("tapable");
-const util = require("util");
-const vm = require("vm");
-const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
-const StackedSetMap = require("./util/StackedSetMap");
-const TrackingSet = require("./util/TrackingSet");
-
-const joinRanges = (startRange, endRange) => {
-	if (!endRange) return startRange;
-	if (!startRange) return endRange;
-	return [startRange[0], endRange[1]];
-};
-
-const defaultParserOptions = {
-	ranges: true,
-	locations: true,
-	ecmaVersion: 2019,
-	sourceType: "module",
-	onComment: null,
-	plugins: {
-		dynamicImport: true
-	}
-};
-
-// regexp to match at lease one "magic comment"
-const webpackCommentRegExp = new RegExp(/(^|\W)webpack[A-Z]{1,}[A-Za-z]{1,}:/);
-
-const EMPTY_ARRAY = [];
-
-const EMPTY_COMMENT_OPTIONS = {
-	options: null,
-	errors: null
-};
-
-class Parser extends Tapable {
-	constructor(options, sourceType = "auto") {
-		super();
-		this.hooks = {
-			evaluateTypeof: new HookMap(() => new SyncBailHook(["expression"])),
-			evaluate: new HookMap(() => new SyncBailHook(["expression"])),
-			evaluateIdentifier: new HookMap(() => new SyncBailHook(["expression"])),
-			evaluateDefinedIdentifier: new HookMap(
-				() => new SyncBailHook(["expression"])
-			),
-			evaluateCallExpressionMember: new HookMap(
-				() => new SyncBailHook(["expression", "param"])
-			),
-			statement: new SyncBailHook(["statement"]),
-			statementIf: new SyncBailHook(["statement"]),
-			label: new HookMap(() => new SyncBailHook(["statement"])),
-			import: new SyncBailHook(["statement", "source"]),
-			importSpecifier: new SyncBailHook([
-				"statement",
-				"source",
-				"exportName",
-				"identifierName"
-			]),
-			export: new SyncBailHook(["statement"]),
-			exportImport: new SyncBailHook(["statement", "source"]),
-			exportDeclaration: new SyncBailHook(["statement", "declaration"]),
-			exportExpression: new SyncBailHook(["statement", "declaration"]),
-			exportSpecifier: new SyncBailHook([
-				"statement",
-				"identifierName",
-				"exportName",
-				"index"
-			]),
-			exportImportSpecifier: new SyncBailHook([
-				"statement",
-				"source",
-				"identifierName",
-				"exportName",
-				"index"
-			]),
-			varDeclaration: new HookMap(() => new SyncBailHook(["declaration"])),
-			varDeclarationLet: new HookMap(() => new SyncBailHook(["declaration"])),
-			varDeclarationConst: new HookMap(() => new SyncBailHook(["declaration"])),
-			varDeclarationVar: new HookMap(() => new SyncBailHook(["declaration"])),
-			canRename: new HookMap(() => new SyncBailHook(["initExpression"])),
-			rename: new HookMap(() => new SyncBailHook(["initExpression"])),
-			assigned: new HookMap(() => new SyncBailHook(["expression"])),
-			assign: new HookMap(() => new SyncBailHook(["expression"])),
-			typeof: new HookMap(() => new SyncBailHook(["expression"])),
-			importCall: new SyncBailHook(["expression"]),
-			call: new HookMap(() => new SyncBailHook(["expression"])),
-			callAnyMember: new HookMap(() => new SyncBailHook(["expression"])),
-			new: new HookMap(() => new SyncBailHook(["expression"])),
-			expression: new HookMap(() => new SyncBailHook(["expression"])),
-			expressionAnyMember: new HookMap(() => new SyncBailHook(["expression"])),
-			expressionConditionalOperator: new SyncBailHook(["expression"]),
-			program: new SyncBailHook(["ast", "comments"])
-		};
-		const HOOK_MAP_COMPAT_CONFIG = {
-			evaluateTypeof: /^evaluate typeof (.+)$/,
-			evaluateIdentifier: /^evaluate Identifier (.+)$/,
-			evaluateDefinedIdentifier: /^evaluate defined Identifier (.+)$/,
-			evaluateCallExpressionMember: /^evaluate CallExpression .(.+)$/,
-			evaluate: /^evaluate (.+)$/,
-			label: /^label (.+)$/,
-			varDeclarationLet: /^var-let (.+)$/,
-			varDeclarationConst: /^var-const (.+)$/,
-			varDeclarationVar: /^var-var (.+)$/,
-			varDeclaration: /^var (.+)$/,
-			canRename: /^can-rename (.+)$/,
-			rename: /^rename (.+)$/,
-			typeof: /^typeof (.+)$/,
-			assigned: /^assigned (.+)$/,
-			assign: /^assign (.+)$/,
-			callAnyMember: /^call (.+)\.\*$/,
-			call: /^call (.+)$/,
-			new: /^new (.+)$/,
-			expressionConditionalOperator: /^expression \?:$/,
-			expressionAnyMember: /^expression (.+)\.\*$/,
-			expression: /^expression (.+)$/
-		};
-		this._pluginCompat.tap("Parser", options => {
-			for (const name of Object.keys(HOOK_MAP_COMPAT_CONFIG)) {
-				const regexp = HOOK_MAP_COMPAT_CONFIG[name];
-				const match = regexp.exec(options.name);
-				if (match) {
-					if (match[1]) {
-						this.hooks[name].tap(
-							match[1],
-							options.fn.name || "unnamed compat plugin",
-							options.fn.bind(this)
-						);
-					} else {
-						this.hooks[name].tap(
-							options.fn.name || "unnamed compat plugin",
-							options.fn.bind(this)
-						);
-					}
-					return true;
-				}
-			}
-		});
-		this.options = options;
-		this.sourceType = sourceType;
-		this.scope = undefined;
-		this.state = undefined;
-		this.comments = undefined;
-		this.initializeEvaluating();
-	}
-
-	initializeEvaluating() {
-		this.hooks.evaluate.for("Literal").tap("Parser", expr => {
-			switch (typeof expr.value) {
-				case "number":
-					return new BasicEvaluatedExpression()
-						.setNumber(expr.value)
-						.setRange(expr.range);
-				case "string":
-					return new BasicEvaluatedExpression()
-						.setString(expr.value)
-						.setRange(expr.range);
-				case "boolean":
-					return new BasicEvaluatedExpression()
-						.setBoolean(expr.value)
-						.setRange(expr.range);
-			}
-			if (expr.value === null) {
-				return new BasicEvaluatedExpression().setNull().setRange(expr.range);
-			}
-			if (expr.value instanceof RegExp) {
-				return new BasicEvaluatedExpression()
-					.setRegExp(expr.value)
-					.setRange(expr.range);
-			}
-		});
-		this.hooks.evaluate.for("LogicalExpression").tap("Parser", expr => {
-			let left;
-			let leftAsBool;
-			let right;
-			if (expr.operator === "&&") {
-				left = this.evaluateExpression(expr.left);
-				leftAsBool = left && left.asBool();
-				if (leftAsBool === false) return left.setRange(expr.range);
-				if (leftAsBool !== true) return;
-				right = this.evaluateExpression(expr.right);
-				return right.setRange(expr.range);
-			} else if (expr.operator === "||") {
-				left = this.evaluateExpression(expr.left);
-				leftAsBool = left && left.asBool();
-				if (leftAsBool === true) return left.setRange(expr.range);
-				if (leftAsBool !== false) return;
-				right = this.evaluateExpression(expr.right);
-				return right.setRange(expr.range);
-			}
-		});
-		this.hooks.evaluate.for("BinaryExpression").tap("Parser", expr => {
-			let left;
-			let right;
-			let res;
-			if (expr.operator === "+") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				res = new BasicEvaluatedExpression();
-				if (left.isString()) {
-					if (right.isString()) {
-						res.setString(left.string + right.string);
-					} else if (right.isNumber()) {
-						res.setString(left.string + right.number);
-					} else if (
-						right.isWrapped() &&
-						right.prefix &&
-						right.prefix.isString()
-					) {
-						res.setWrapped(
-							new BasicEvaluatedExpression()
-								.setString(left.string + right.prefix.string)
-								.setRange(joinRanges(left.range, right.prefix.range)),
-							right.postfix
-						);
-					} else if (right.isWrapped()) {
-						res.setWrapped(
-							new BasicEvaluatedExpression()
-								.setString(left.string)
-								.setRange(left.range),
-							right.postfix
-						);
-					} else {
-						res.setWrapped(left, null);
-					}
-				} else if (left.isNumber()) {
-					if (right.isString()) {
-						res.setString(left.number + right.string);
-					} else if (right.isNumber()) {
-						res.setNumber(left.number + right.number);
-					}
-				} else if (left.isWrapped()) {
-					if (left.postfix && left.postfix.isString() && right.isString()) {
-						res.setWrapped(
-							left.prefix,
-							new BasicEvaluatedExpression()
-								.setString(left.postfix.string + right.string)
-								.setRange(joinRanges(left.postfix.range, right.range))
-						);
-					} else if (
-						left.postfix &&
-						left.postfix.isString() &&
-						right.isNumber()
-					) {
-						res.setWrapped(
-							left.prefix,
-							new BasicEvaluatedExpression()
-								.setString(left.postfix.string + right.number)
-								.setRange(joinRanges(left.postfix.range, right.range))
-						);
-					} else if (right.isString()) {
-						res.setWrapped(left.prefix, right);
-					} else if (right.isNumber()) {
-						res.setWrapped(
-							left.prefix,
-							new BasicEvaluatedExpression()
-								.setString(right.number + "")
-								.setRange(right.range)
-						);
-					} else {
-						res.setWrapped(left.prefix, new BasicEvaluatedExpression());
-					}
-				} else {
-					if (right.isString()) {
-						res.setWrapped(null, right);
-					}
-				}
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "-") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number - right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "*") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number * right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "/") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number / right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "**") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(Math.pow(left.number, right.number));
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "==" || expr.operator === "===") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				res = new BasicEvaluatedExpression();
-				res.setRange(expr.range);
-				if (left.isString() && right.isString()) {
-					return res.setBoolean(left.string === right.string);
-				} else if (left.isNumber() && right.isNumber()) {
-					return res.setBoolean(left.number === right.number);
-				} else if (left.isBoolean() && right.isBoolean()) {
-					return res.setBoolean(left.bool === right.bool);
-				}
-			} else if (expr.operator === "!=" || expr.operator === "!==") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				res = new BasicEvaluatedExpression();
-				res.setRange(expr.range);
-				if (left.isString() && right.isString()) {
-					return res.setBoolean(left.string !== right.string);
-				} else if (left.isNumber() && right.isNumber()) {
-					return res.setBoolean(left.number !== right.number);
-				} else if (left.isBoolean() && right.isBoolean()) {
-					return res.setBoolean(left.bool !== right.bool);
-				}
-			} else if (expr.operator === "&") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number & right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "|") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number | right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "^") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number ^ right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === ">>>") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number >>> right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === ">>") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number >> right.number);
-				res.setRange(expr.range);
-				return res;
-			} else if (expr.operator === "<<") {
-				left = this.evaluateExpression(expr.left);
-				right = this.evaluateExpression(expr.right);
-				if (!left || !right) return;
-				if (!left.isNumber() || !right.isNumber()) return;
-				res = new BasicEvaluatedExpression();
-				res.setNumber(left.number << right.number);
-				res.setRange(expr.range);
-				return res;
-			}
-		});
-		this.hooks.evaluate.for("UnaryExpression").tap("Parser", expr => {
-			if (expr.operator === "typeof") {
-				let res;
-				let name;
-				if (expr.argument.type === "Identifier") {
-					name =
-						this.scope.renames.get(expr.argument.name) || expr.argument.name;
-					if (!this.scope.definitions.has(name)) {
-						const hook = this.hooks.evaluateTypeof.get(name);
-						if (hook !== undefined) {
-							res = hook.call(expr);
-							if (res !== undefined) return res;
-						}
-					}
-				}
-				if (expr.argument.type === "MemberExpression") {
-					const exprName = this.getNameForExpression(expr.argument);
-					if (exprName && exprName.free) {
-						const hook = this.hooks.evaluateTypeof.get(exprName.name);
-						if (hook !== undefined) {
-							res = hook.call(expr);
-							if (res !== undefined) return res;
-						}
-					}
-				}
-				if (expr.argument.type === "FunctionExpression") {
-					return new BasicEvaluatedExpression()
-						.setString("function")
-						.setRange(expr.range);
-				}
-				const arg = this.evaluateExpression(expr.argument);
-				if (arg.isString() || arg.isWrapped()) {
-					return new BasicEvaluatedExpression()
-						.setString("string")
-						.setRange(expr.range);
-				}
-				if (arg.isNumber()) {
-					return new BasicEvaluatedExpression()
-						.setString("number")
-						.setRange(expr.range);
-				}
-				if (arg.isBoolean()) {
-					return new BasicEvaluatedExpression()
-						.setString("boolean")
-						.setRange(expr.range);
-				}
-				if (arg.isArray() || arg.isConstArray() || arg.isRegExp()) {
-					return new BasicEvaluatedExpression()
-						.setString("object")
-						.setRange(expr.range);
-				}
-			} else if (expr.operator === "!") {
-				const argument = this.evaluateExpression(expr.argument);
-				if (!argument) return;
-				if (argument.isBoolean()) {
-					return new BasicEvaluatedExpression()
-						.setBoolean(!argument.bool)
-						.setRange(expr.range);
-				}
-				if (argument.isTruthy()) {
-					return new BasicEvaluatedExpression()
-						.setBoolean(false)
-						.setRange(expr.range);
-				}
-				if (argument.isFalsy()) {
-					return new BasicEvaluatedExpression()
-						.setBoolean(true)
-						.setRange(expr.range);
-				}
-				if (argument.isString()) {
-					return new BasicEvaluatedExpression()
-						.setBoolean(!argument.string)
-						.setRange(expr.range);
-				}
-				if (argument.isNumber()) {
-					return new BasicEvaluatedExpression()
-						.setBoolean(!argument.number)
-						.setRange(expr.range);
-				}
-			} else if (expr.operator === "~") {
-				const argument = this.evaluateExpression(expr.argument);
-				if (!argument) return;
-				if (!argument.isNumber()) return;
-				const res = new BasicEvaluatedExpression();
-				res.setNumber(~argument.number);
-				res.setRange(expr.range);
-				return res;
-			}
-		});
-		this.hooks.evaluateTypeof.for("undefined").tap("Parser", expr => {
-			return new BasicEvaluatedExpression()
-				.setString("undefined")
-				.setRange(expr.range);
-		});
-		this.hooks.evaluate.for("Identifier").tap("Parser", expr => {
-			const name = this.scope.renames.get(expr.name) || expr.name;
-			if (!this.scope.definitions.has(expr.name)) {
-				const hook = this.hooks.evaluateIdentifier.get(name);
-				if (hook !== undefined) {
-					const result = hook.call(expr);
-					if (result) return result;
-				}
-				return new BasicEvaluatedExpression()
-					.setIdentifier(name)
-					.setRange(expr.range);
-			} else {
-				const hook = this.hooks.evaluateDefinedIdentifier.get(name);
-				if (hook !== undefined) {
-					return hook.call(expr);
-				}
-			}
-		});
-		this.hooks.evaluate.for("ThisExpression").tap("Parser", expr => {
-			const name = this.scope.renames.get("this");
-			if (name) {
-				const hook = this.hooks.evaluateIdentifier.get(name);
-				if (hook !== undefined) {
-					const result = hook.call(expr);
-					if (result) return result;
-				}
-				return new BasicEvaluatedExpression()
-					.setIdentifier(name)
-					.setRange(expr.range);
-			}
-		});
-		this.hooks.evaluate.for("MemberExpression").tap("Parser", expression => {
-			let exprName = this.getNameForExpression(expression);
-			if (exprName) {
-				if (exprName.free) {
-					const hook = this.hooks.evaluateIdentifier.get(exprName.name);
-					if (hook !== undefined) {
-						const result = hook.call(expression);
-						if (result) return result;
-					}
-					return new BasicEvaluatedExpression()
-						.setIdentifier(exprName.name)
-						.setRange(expression.range);
-				} else {
-					const hook = this.hooks.evaluateDefinedIdentifier.get(exprName.name);
-					if (hook !== undefined) {
-						return hook.call(expression);
-					}
-				}
-			}
-		});
-		this.hooks.evaluate.for("CallExpression").tap("Parser", expr => {
-			if (expr.callee.type !== "MemberExpression") return;
-			if (
-				expr.callee.property.type !==
-				(expr.callee.computed ? "Literal" : "Identifier")
-			)
-				return;
-			const param = this.evaluateExpression(expr.callee.object);
-			if (!param) return;
-			const property = expr.callee.property.name || expr.callee.property.value;
-			const hook = this.hooks.evaluateCallExpressionMember.get(property);
-			if (hook !== undefined) {
-				return hook.call(expr, param);
-			}
-		});
-		this.hooks.evaluateCallExpressionMember
-			.for("replace")
-			.tap("Parser", (expr, param) => {
-				if (!param.isString()) return;
-				if (expr.arguments.length !== 2) return;
-				let arg1 = this.evaluateExpression(expr.arguments[0]);
-				let arg2 = this.evaluateExpression(expr.arguments[1]);
-				if (!arg1.isString() && !arg1.isRegExp()) return;
-				arg1 = arg1.regExp || arg1.string;
-				if (!arg2.isString()) return;
-				arg2 = arg2.string;
-				return new BasicEvaluatedExpression()
-					.setString(param.string.replace(arg1, arg2))
-					.setRange(expr.range);
-			});
-		["substr", "substring"].forEach(fn => {
-			this.hooks.evaluateCallExpressionMember
-				.for(fn)
-				.tap("Parser", (expr, param) => {
-					if (!param.isString()) return;
-					let arg1;
-					let result,
-						str = param.string;
-					switch (expr.arguments.length) {
-						case 1:
-							arg1 = this.evaluateExpression(expr.arguments[0]);
-							if (!arg1.isNumber()) return;
-							result = str[fn](arg1.number);
-							break;
-						case 2: {
-							arg1 = this.evaluateExpression(expr.arguments[0]);
-							const arg2 = this.evaluateExpression(expr.arguments[1]);
-							if (!arg1.isNumber()) return;
-							if (!arg2.isNumber()) return;
-							result = str[fn](arg1.number, arg2.number);
-							break;
-						}
-						default:
-							return;
-					}
-					return new BasicEvaluatedExpression()
-						.setString(result)
-						.setRange(expr.range);
-				});
-		});
-
-		/**
-		 * @param {string} kind "cooked" | "raw"
-		 * @param {TODO[]} quasis quasis
-		 * @param {TODO[]} expressions expressions
-		 * @returns {BasicEvaluatedExpression[]} Simplified template
-		 */
-		const getSimplifiedTemplateResult = (kind, quasis, expressions) => {
-			const parts = [];
-
-			for (let i = 0; i < quasis.length; i++) {
-				parts.push(
-					new BasicEvaluatedExpression()
-						.setString(quasis[i].value[kind])
-						.setRange(quasis[i].range)
-				);
-
-				if (i > 0) {
-					const prevExpr = parts[parts.length - 2],
-						lastExpr = parts[parts.length - 1];
-					const expr = this.evaluateExpression(expressions[i - 1]);
-					if (!(expr.isString() || expr.isNumber())) continue;
-
-					prevExpr.setString(
-						prevExpr.string +
-							(expr.isString() ? expr.string : expr.number) +
-							lastExpr.string
-					);
-					prevExpr.setRange([prevExpr.range[0], lastExpr.range[1]]);
-					parts.pop();
-				}
-			}
-			return parts;
-		};
-
-		this.hooks.evaluate.for("TemplateLiteral").tap("Parser", node => {
-			const parts = getSimplifiedTemplateResult.call(
-				this,
-				"cooked",
-				node.quasis,
-				node.expressions
-			);
-			if (parts.length === 1) {
-				return parts[0].setRange(node.range);
-			}
-			return new BasicEvaluatedExpression()
-				.setTemplateString(parts)
-				.setRange(node.range);
-		});
-		this.hooks.evaluate.for("TaggedTemplateExpression").tap("Parser", node => {
-			if (this.evaluateExpression(node.tag).identifier !== "String.raw") return;
-			const parts = getSimplifiedTemplateResult.call(
-				this,
-				"raw",
-				node.quasi.quasis,
-				node.quasi.expressions
-			);
-			return new BasicEvaluatedExpression()
-				.setTemplateString(parts)
-				.setRange(node.range);
-		});
-
-		this.hooks.evaluateCallExpressionMember
-			.for("concat")
-			.tap("Parser", (expr, param) => {
-				if (!param.isString() && !param.isWrapped()) return;
-
-				let stringSuffix = null;
-				let hasUnknownParams = false;
-				for (let i = expr.arguments.length - 1; i >= 0; i--) {
-					const argExpr = this.evaluateExpression(expr.arguments[i]);
-					if (!argExpr.isString() && !argExpr.isNumber()) {
-						hasUnknownParams = true;
-						break;
-					}
-
-					const value = argExpr.isString()
-						? argExpr.string
-						: "" + argExpr.number;
-
-					const newString = value + (stringSuffix ? stringSuffix.string : "");
-					const newRange = [
-						argExpr.range[0],
-						(stringSuffix || argExpr).range[1]
-					];
-					stringSuffix = new BasicEvaluatedExpression()
-						.setString(newString)
-						.setRange(newRange);
-				}
-
-				if (hasUnknownParams) {
-					const prefix = param.isString() ? param : param.prefix;
-					return new BasicEvaluatedExpression()
-						.setWrapped(prefix, stringSuffix)
-						.setRange(expr.range);
-				} else if (param.isWrapped()) {
-					const postfix = stringSuffix || param.postfix;
-					return new BasicEvaluatedExpression()
-						.setWrapped(param.prefix, postfix)
-						.setRange(expr.range);
-				} else {
-					const newString =
-						param.string + (stringSuffix ? stringSuffix.string : "");
-					return new BasicEvaluatedExpression()
-						.setString(newString)
-						.setRange(expr.range);
-				}
-			});
-		this.hooks.evaluateCallExpressionMember
-			.for("split")
-			.tap("Parser", (expr, param) => {
-				if (!param.isString()) return;
-				if (expr.arguments.length !== 1) return;
-				let result;
-				const arg = this.evaluateExpression(expr.arguments[0]);
-				if (arg.isString()) {
-					result = param.string.split(arg.string);
-				} else if (arg.isRegExp()) {
-					result = param.string.split(arg.regExp);
-				} else {
-					return;
-				}
-				return new BasicEvaluatedExpression()
-					.setArray(result)
-					.setRange(expr.range);
-			});
-		this.hooks.evaluate.for("ConditionalExpression").tap("Parser", expr => {
-			const condition = this.evaluateExpression(expr.test);
-			const conditionValue = condition.asBool();
-			let res;
-			if (conditionValue === undefined) {
-				const consequent = this.evaluateExpression(expr.consequent);
-				const alternate = this.evaluateExpression(expr.alternate);
-				if (!consequent || !alternate) return;
-				res = new BasicEvaluatedExpression();
-				if (consequent.isConditional()) {
-					res.setOptions(consequent.options);
-				} else {
-					res.setOptions([consequent]);
-				}
-				if (alternate.isConditional()) {
-					res.addOptions(alternate.options);
-				} else {
-					res.addOptions([alternate]);
-				}
-			} else {
-				res = this.evaluateExpression(
-					conditionValue ? expr.consequent : expr.alternate
-				);
-			}
-			res.setRange(expr.range);
-			return res;
-		});
-		this.hooks.evaluate.for("ArrayExpression").tap("Parser", expr => {
-			const items = expr.elements.map(element => {
-				return element !== null && this.evaluateExpression(element);
-			});
-			if (!items.every(Boolean)) return;
-			return new BasicEvaluatedExpression()
-				.setItems(items)
-				.setRange(expr.range);
-		});
-	}
-
-	getRenameIdentifier(expr) {
-		const result = this.evaluateExpression(expr);
-		if (result && result.isIdentifier()) {
-			return result.identifier;
-		}
-	}
-
-	walkClass(classy) {
-		if (classy.superClass) this.walkExpression(classy.superClass);
-		if (classy.body && classy.body.type === "ClassBody") {
-			const wasTopLevel = this.scope.topLevelScope;
-			this.scope.topLevelScope = false;
-			for (const methodDefinition of classy.body.body) {
-				if (methodDefinition.type === "MethodDefinition") {
-					this.walkMethodDefinition(methodDefinition);
-				}
-			}
-			this.scope.topLevelScope = wasTopLevel;
-		}
-	}
-
-	walkMethodDefinition(methodDefinition) {
-		if (methodDefinition.computed && methodDefinition.key) {
-			this.walkExpression(methodDefinition.key);
-		}
-		if (methodDefinition.value) {
-			this.walkExpression(methodDefinition.value);
-		}
-	}
-
-	// Prewalking iterates the scope for variable declarations
-	prewalkStatements(statements) {
-		for (let index = 0, len = statements.length; index < len; index++) {
-			const statement = statements[index];
-			this.prewalkStatement(statement);
-		}
-	}
-
-	// Walking iterates the statements and expressions and processes them
-	walkStatements(statements) {
-		for (let index = 0, len = statements.length; index < len; index++) {
-			const statement = statements[index];
-			this.walkStatement(statement);
-		}
-	}
-
-	prewalkStatement(statement) {
-		switch (statement.type) {
-			case "BlockStatement":
-				this.prewalkBlockStatement(statement);
-				break;
-			case "ClassDeclaration":
-				this.prewalkClassDeclaration(statement);
-				break;
-			case "DoWhileStatement":
-				this.prewalkDoWhileStatement(statement);
-				break;
-			case "ExportAllDeclaration":
-				this.prewalkExportAllDeclaration(statement);
-				break;
-			case "ExportDefaultDeclaration":
-				this.prewalkExportDefaultDeclaration(statement);
-				break;
-			case "ExportNamedDeclaration":
-				this.prewalkExportNamedDeclaration(statement);
-				break;
-			case "ForInStatement":
-				this.prewalkForInStatement(statement);
-				break;
-			case "ForOfStatement":
-				this.prewalkForOfStatement(statement);
-				break;
-			case "ForStatement":
-				this.prewalkForStatement(statement);
-				break;
-			case "FunctionDeclaration":
-				this.prewalkFunctionDeclaration(statement);
-				break;
-			case "IfStatement":
-				this.prewalkIfStatement(statement);
-				break;
-			case "ImportDeclaration":
-				this.prewalkImportDeclaration(statement);
-				break;
-			case "LabeledStatement":
-				this.prewalkLabeledStatement(statement);
-				break;
-			case "SwitchStatement":
-				this.prewalkSwitchStatement(statement);
-				break;
-			case "TryStatement":
-				this.prewalkTryStatement(statement);
-				break;
-			case "VariableDeclaration":
-				this.prewalkVariableDeclaration(statement);
-				break;
-			case "WhileStatement":
-				this.prewalkWhileStatement(statement);
-				break;
-			case "WithStatement":
-				this.prewalkWithStatement(statement);
-				break;
-		}
-	}
-
-	walkStatement(statement) {
-		if (this.hooks.statement.call(statement) !== undefined) return;
-		switch (statement.type) {
-			case "BlockStatement":
-				this.walkBlockStatement(statement);
-				break;
-			case "ClassDeclaration":
-				this.walkClassDeclaration(statement);
-				break;
-			case "DoWhileStatement":
-				this.walkDoWhileStatement(statement);
-				break;
-			case "ExportDefaultDeclaration":
-				this.walkExportDefaultDeclaration(statement);
-				break;
-			case "ExportNamedDeclaration":
-				this.walkExportNamedDeclaration(statement);
-				break;
-			case "ExpressionStatement":
-				this.walkExpressionStatement(statement);
-				break;
-			case "ForInStatement":
-				this.walkForInStatement(statement);
-				break;
-			case "ForOfStatement":
-				this.walkForOfStatement(statement);
-				break;
-			case "ForStatement":
-				this.walkForStatement(statement);
-				break;
-			case "FunctionDeclaration":
-				this.walkFunctionDeclaration(statement);
-				break;
-			case "IfStatement":
-				this.walkIfStatement(statement);
-				break;
-			case "LabeledStatement":
-				this.walkLabeledStatement(statement);
-				break;
-			case "ReturnStatement":
-				this.walkReturnStatement(statement);
-				break;
-			case "SwitchStatement":
-				this.walkSwitchStatement(statement);
-				break;
-			case "ThrowStatement":
-				this.walkThrowStatement(statement);
-				break;
-			case "TryStatement":
-				this.walkTryStatement(statement);
-				break;
-			case "VariableDeclaration":
-				this.walkVariableDeclaration(statement);
-				break;
-			case "WhileStatement":
-				this.walkWhileStatement(statement);
-				break;
-			case "WithStatement":
-				this.walkWithStatement(statement);
-				break;
-		}
-	}
-
-	// Real Statements
-	prewalkBlockStatement(statement) {
-		this.prewalkStatements(statement.body);
-	}
-
-	walkBlockStatement(statement) {
-		this.walkStatements(statement.body);
-	}
-
-	walkExpressionStatement(statement) {
-		this.walkExpression(statement.expression);
-	}
-
-	prewalkIfStatement(statement) {
-		this.prewalkStatement(statement.consequent);
-		if (statement.alternate) {
-			this.prewalkStatement(statement.alternate);
-		}
-	}
-
-	walkIfStatement(statement) {
-		const result = this.hooks.statementIf.call(statement);
-		if (result === undefined) {
-			this.walkExpression(statement.test);
-			this.walkStatement(statement.consequent);
-			if (statement.alternate) {
-				this.walkStatement(statement.alternate);
-			}
-		} else {
-			if (result) {
-				this.walkStatement(statement.consequent);
-			} else if (statement.alternate) {
-				this.walkStatement(statement.alternate);
-			}
-		}
-	}
-
-	prewalkLabeledStatement(statement) {
-		this.prewalkStatement(statement.body);
-	}
-
-	walkLabeledStatement(statement) {
-		const hook = this.hooks.label.get(statement.label.name);
-		if (hook !== undefined) {
-			const result = hook.call(statement);
-			if (result === true) return;
-		}
-		this.walkStatement(statement.body);
-	}
-
-	prewalkWithStatement(statement) {
-		this.prewalkStatement(statement.body);
-	}
-
-	walkWithStatement(statement) {
-		this.walkExpression(statement.object);
-		this.walkStatement(statement.body);
-	}
-
-	prewalkSwitchStatement(statement) {
-		this.prewalkSwitchCases(statement.cases);
-	}
-
-	walkSwitchStatement(statement) {
-		this.walkExpression(statement.discriminant);
-		this.walkSwitchCases(statement.cases);
-	}
-
-	walkTerminatingStatement(statement) {
-		if (statement.argument) this.walkExpression(statement.argument);
-	}
-
-	walkReturnStatement(statement) {
-		this.walkTerminatingStatement(statement);
-	}
-
-	walkThrowStatement(statement) {
-		this.walkTerminatingStatement(statement);
-	}
-
-	prewalkTryStatement(statement) {
-		this.prewalkStatement(statement.block);
-	}
-
-	walkTryStatement(statement) {
-		if (this.scope.inTry) {
-			this.walkStatement(statement.block);
-		} else {
-			this.scope.inTry = true;
-			this.walkStatement(statement.block);
-			this.scope.inTry = false;
-		}
-		if (statement.handler) this.walkCatchClause(statement.handler);
-		if (statement.finalizer) this.walkStatement(statement.finalizer);
-	}
-
-	prewalkWhileStatement(statement) {
-		this.prewalkStatement(statement.body);
-	}
-
-	walkWhileStatement(statement) {
-		this.walkExpression(statement.test);
-		this.walkStatement(statement.body);
-	}
-
-	prewalkDoWhileStatement(statement) {
-		this.prewalkStatement(statement.body);
-	}
-
-	walkDoWhileStatement(statement) {
-		this.walkStatement(statement.body);
-		this.walkExpression(statement.test);
-	}
-
-	prewalkForStatement(statement) {
-		if (statement.init) {
-			if (statement.init.type === "VariableDeclaration") {
-				this.prewalkStatement(statement.init);
-			}
-		}
-		this.prewalkStatement(statement.body);
-	}
-
-	walkForStatement(statement) {
-		if (statement.init) {
-			if (statement.init.type === "VariableDeclaration") {
-				this.walkStatement(statement.init);
-			} else {
-				this.walkExpression(statement.init);
-			}
-		}
-		if (statement.test) {
-			this.walkExpression(statement.test);
-		}
-		if (statement.update) {
-			this.walkExpression(statement.update);
-		}
-		this.walkStatement(statement.body);
-	}
-
-	prewalkForInStatement(statement) {
-		if (statement.left.type === "VariableDeclaration") {
-			this.prewalkVariableDeclaration(statement.left);
-		}
-		this.prewalkStatement(statement.body);
-	}
-
-	walkForInStatement(statement) {
-		if (statement.left.type === "VariableDeclaration") {
-			this.walkVariableDeclaration(statement.left);
-		} else {
-			this.walkPattern(statement.left);
-		}
-		this.walkExpression(statement.right);
-		this.walkStatement(statement.body);
-	}
-
-	prewalkForOfStatement(statement) {
-		if (statement.left.type === "VariableDeclaration") {
-			this.prewalkVariableDeclaration(statement.left);
-		}
-		this.prewalkStatement(statement.body);
-	}
-
-	walkForOfStatement(statement) {
-		if (statement.left.type === "VariableDeclaration") {
-			this.walkVariableDeclaration(statement.left);
-		} else {
-			this.walkPattern(statement.left);
-		}
-		this.walkExpression(statement.right);
-		this.walkStatement(statement.body);
-	}
-
-	// Declarations
-	prewalkFunctionDeclaration(statement) {
-		if (statement.id) {
-			this.scope.renames.set(statement.id.name, null);
-			this.scope.definitions.add(statement.id.name);
-		}
-	}
-
-	walkFunctionDeclaration(statement) {
-		const wasTopLevel = this.scope.topLevelScope;
-		this.scope.topLevelScope = false;
-		this.inScope(statement.params, () => {
-			for (const param of statement.params) {
-				this.walkPattern(param);
-			}
-			if (statement.body.type === "BlockStatement") {
-				this.detectStrictMode(statement.body.body);
-				this.prewalkStatement(statement.body);
-				this.walkStatement(statement.body);
-			} else {
-				this.walkExpression(statement.body);
-			}
-		});
-		this.scope.topLevelScope = wasTopLevel;
-	}
-
-	prewalkImportDeclaration(statement) {
-		const source = statement.source.value;
-		this.hooks.import.call(statement, source);
-		for (const specifier of statement.specifiers) {
-			const name = specifier.local.name;
-			this.scope.renames.set(name, null);
-			this.scope.definitions.add(name);
-			switch (specifier.type) {
-				case "ImportDefaultSpecifier":
-					this.hooks.importSpecifier.call(statement, source, "default", name);
-					break;
-				case "ImportSpecifier":
-					this.hooks.importSpecifier.call(
-						statement,
-						source,
-						specifier.imported.name,
-						name
-					);
-					break;
-				case "ImportNamespaceSpecifier":
-					this.hooks.importSpecifier.call(statement, source, null, name);
-					break;
-			}
-		}
-	}
-
-	prewalkExportNamedDeclaration(statement) {
-		let source;
-		if (statement.source) {
-			source = statement.source.value;
-			this.hooks.exportImport.call(statement, source);
-		} else {
-			this.hooks.export.call(statement);
-		}
-		if (statement.declaration) {
-			if (
-				!this.hooks.exportDeclaration.call(statement, statement.declaration)
-			) {
-				const originalDefinitions = this.scope.definitions;
-				const tracker = new TrackingSet(this.scope.definitions);
-				this.scope.definitions = tracker;
-				this.prewalkStatement(statement.declaration);
-				const newDefs = Array.from(tracker.getAddedItems());
-				this.scope.definitions = originalDefinitions;
-				for (let index = newDefs.length - 1; index >= 0; index--) {
-					const def = newDefs[index];
-					this.hooks.exportSpecifier.call(statement, def, def, index);
-				}
-			}
-		}
-		if (statement.specifiers) {
-			for (
-				let specifierIndex = 0;
-				specifierIndex < statement.specifiers.length;
-				specifierIndex++
-			) {
-				const specifier = statement.specifiers[specifierIndex];
-				switch (specifier.type) {
-					case "ExportSpecifier": {
-						const name = specifier.exported.name;
-						if (source) {
-							this.hooks.exportImportSpecifier.call(
-								statement,
-								source,
-								specifier.local.name,
-								name,
-								specifierIndex
-							);
-						} else {
-							this.hooks.exportSpecifier.call(
-								statement,
-								specifier.local.name,
-								name,
-								specifierIndex
-							);
-						}
-						break;
-					}
-				}
-			}
-		}
-	}
-
-	walkExportNamedDeclaration(statement) {
-		if (statement.declaration) {
-			this.walkStatement(statement.declaration);
-		}
-	}
-
-	prewalkExportDefaultDeclaration(statement) {
-		if (statement.declaration.id) {
-			const originalDefinitions = this.scope.definitions;
-			const tracker = new TrackingSet(this.scope.definitions);
-			this.scope.definitions = tracker;
-			this.prewalkStatement(statement.declaration);
-			const newDefs = Array.from(tracker.getAddedItems());
-			this.scope.definitions = originalDefinitions;
-			for (let index = 0, len = newDefs.length; index < len; index++) {
-				const def = newDefs[index];
-				this.hooks.exportSpecifier.call(statement, def, "default");
-			}
-		}
-	}
-
-	walkExportDefaultDeclaration(statement) {
-		this.hooks.export.call(statement);
-		if (
-			statement.declaration.id &&
-			statement.declaration.type !== "FunctionExpression" &&
-			statement.declaration.type !== "ClassExpression"
-		) {
-			if (
-				!this.hooks.exportDeclaration.call(statement, statement.declaration)
-			) {
-				this.walkStatement(statement.declaration);
-			}
-		} else {
-			// Acorn parses `export default function() {}` as `FunctionDeclaration` and
-			// `export default class {}` as `ClassDeclaration`, both with `id = null`.
-			// These nodes must be treated as expressions.
-			if (statement.declaration.type === "FunctionDeclaration") {
-				this.walkFunctionDeclaration(statement.declaration);
-			} else if (statement.declaration.type === "ClassDeclaration") {
-				this.walkClassDeclaration(statement.declaration);
-			} else {
-				this.walkExpression(statement.declaration);
-			}
-			if (!this.hooks.exportExpression.call(statement, statement.declaration)) {
-				this.hooks.exportSpecifier.call(
-					statement,
-					statement.declaration,
-					"default"
-				);
-			}
-		}
-	}
-
-	prewalkExportAllDeclaration(statement) {
-		const source = statement.source.value;
-		this.hooks.exportImport.call(statement, source);
-		this.hooks.exportImportSpecifier.call(statement, source, null, null, 0);
-	}
 
-	prewalkVariableDeclaration(statement) {
-		const hookMap =
-			statement.kind === "const"
-				? this.hooks.varDeclarationConst
-				: statement.kind === "let"
-					? this.hooks.varDeclarationLet
-					: this.hooks.varDeclarationVar;
-		for (const declarator of statement.declarations) {
-			switch (declarator.type) {
-				case "VariableDeclarator": {
-					this.enterPattern(declarator.id, (name, decl) => {
-						let hook = hookMap.get(name);
-						if (hook === undefined || !hook.call(decl)) {
-							hook = this.hooks.varDeclaration.get(name);
-							if (hook === undefined || !hook.call(decl)) {
-								this.scope.renames.set(name, null);
-								this.scope.definitions.add(name);
-							}
-						}
-					});
-					break;
-				}
-			}
-		}
-	}
-
-	walkVariableDeclaration(statement) {
-		for (const declarator of statement.declarations) {
-			switch (declarator.type) {
-				case "VariableDeclarator": {
-					const renameIdentifier =
-						declarator.init && this.getRenameIdentifier(declarator.init);
-					if (renameIdentifier && declarator.id.type === "Identifier") {
-						const hook = this.hooks.canRename.get(renameIdentifier);
-						if (hook !== undefined && hook.call(declarator.init)) {
-							// renaming with "var a = b;"
-							const hook = this.hooks.rename.get(renameIdentifier);
-							if (hook === undefined || !hook.call(declarator.init)) {
-								this.scope.renames.set(
-									declarator.id.name,
-									this.scope.renames.get(renameIdentifier) || renameIdentifier
-								);
-								this.scope.definitions.delete(declarator.id.name);
-							}
-							break;
-						}
-					}
-					this.walkPattern(declarator.id);
-					if (declarator.init) this.walkExpression(declarator.init);
-					break;
-				}
-			}
-		}
-	}
-
-	prewalkClassDeclaration(statement) {
-		if (statement.id) {
-			this.scope.renames.set(statement.id.name, null);
-			this.scope.definitions.add(statement.id.name);
-		}
-	}
-
-	walkClassDeclaration(statement) {
-		this.walkClass(statement);
-	}
-
-	prewalkSwitchCases(switchCases) {
-		for (let index = 0, len = switchCases.length; index < len; index++) {
-			const switchCase = switchCases[index];
-			this.prewalkStatements(switchCase.consequent);
-		}
-	}
-
-	walkSwitchCases(switchCases) {
-		for (let index = 0, len = switchCases.length; index < len; index++) {
-			const switchCase = switchCases[index];
-
-			if (switchCase.test) {
-				this.walkExpression(switchCase.test);
-			}
-			this.walkStatements(switchCase.consequent);
-		}
-	}
-
-	walkCatchClause(catchClause) {
-		// Error binding is optional in catch clause since ECMAScript 2019
-		const errorBinding =
-			catchClause.param === null ? EMPTY_ARRAY : [catchClause.param];
-
-		this.inScope(errorBinding, () => {
-			this.prewalkStatement(catchClause.body);
-			this.walkStatement(catchClause.body);
-		});
-	}
-
-	walkPattern(pattern) {
-		switch (pattern.type) {
-			case "ArrayPattern":
-				this.walkArrayPattern(pattern);
-				break;
-			case "AssignmentPattern":
-				this.walkAssignmentPattern(pattern);
-				break;
-			case "MemberExpression":
-				this.walkMemberExpression(pattern);
-				break;
-			case "ObjectPattern":
-				this.walkObjectPattern(pattern);
-				break;
-			case "RestElement":
-				this.walkRestElement(pattern);
-				break;
-		}
-	}
-
-	walkAssignmentPattern(pattern) {
-		this.walkExpression(pattern.right);
-		this.walkPattern(pattern.left);
-	}
-
-	walkObjectPattern(pattern) {
-		for (let i = 0, len = pattern.properties.length; i < len; i++) {
-			const prop = pattern.properties[i];
-			if (prop) {
-				if (prop.computed) this.walkExpression(prop.key);
-				if (prop.value) this.walkPattern(prop.value);
-			}
-		}
-	}
-
-	walkArrayPattern(pattern) {
-		for (let i = 0, len = pattern.elements.length; i < len; i++) {
-			const element = pattern.elements[i];
-			if (element) this.walkPattern(element);
-		}
-	}
-
-	walkRestElement(pattern) {
-		this.walkPattern(pattern.argument);
-	}
-
-	walkExpressions(expressions) {
-		for (const expression of expressions) {
-			if (expression) {
-				this.walkExpression(expression);
-			}
-		}
-	}
-
-	walkExpression(expression) {
-		switch (expression.type) {
-			case "ArrayExpression":
-				this.walkArrayExpression(expression);
-				break;
-			case "ArrowFunctionExpression":
-				this.walkArrowFunctionExpression(expression);
-				break;
-			case "AssignmentExpression":
-				this.walkAssignmentExpression(expression);
-				break;
-			case "AwaitExpression":
-				this.walkAwaitExpression(expression);
-				break;
-			case "BinaryExpression":
-				this.walkBinaryExpression(expression);
-				break;
-			case "CallExpression":
-				this.walkCallExpression(expression);
-				break;
-			case "ClassExpression":
-				this.walkClassExpression(expression);
-				break;
-			case "ConditionalExpression":
-				this.walkConditionalExpression(expression);
-				break;
-			case "FunctionExpression":
-				this.walkFunctionExpression(expression);
-				break;
-			case "Identifier":
-				this.walkIdentifier(expression);
-				break;
-			case "LogicalExpression":
-				this.walkLogicalExpression(expression);
-				break;
-			case "MemberExpression":
-				this.walkMemberExpression(expression);
-				break;
-			case "NewExpression":
-				this.walkNewExpression(expression);
-				break;
-			case "ObjectExpression":
-				this.walkObjectExpression(expression);
-				break;
-			case "SequenceExpression":
-				this.walkSequenceExpression(expression);
-				break;
-			case "SpreadElement":
-				this.walkSpreadElement(expression);
-				break;
-			case "TaggedTemplateExpression":
-				this.walkTaggedTemplateExpression(expression);
-				break;
-			case "TemplateLiteral":
-				this.walkTemplateLiteral(expression);
-				break;
-			case "ThisExpression":
-				this.walkThisExpression(expression);
-				break;
-			case "UnaryExpression":
-				this.walkUnaryExpression(expression);
-				break;
-			case "UpdateExpression":
-				this.walkUpdateExpression(expression);
-				break;
-			case "YieldExpression":
-				this.walkYieldExpression(expression);
-				break;
-		}
-	}
-
-	walkAwaitExpression(expression) {
-		this.walkExpression(expression.argument);
-	}
-
-	walkArrayExpression(expression) {
-		if (expression.elements) {
-			this.walkExpressions(expression.elements);
-		}
-	}
-
-	walkSpreadElement(expression) {
-		if (expression.argument) {
-			this.walkExpression(expression.argument);
-		}
-	}
-
-	walkObjectExpression(expression) {
-		for (
-			let propIndex = 0, len = expression.properties.length;
-			propIndex < len;
-			propIndex++
-		) {
-			const prop = expression.properties[propIndex];
-			if (prop.type === "SpreadElement") {
-				this.walkExpression(prop.argument);
-				continue;
-			}
-			if (prop.computed) {
-				this.walkExpression(prop.key);
-			}
-			if (prop.shorthand) {
-				this.scope.inShorthand = true;
-			}
-			this.walkExpression(prop.value);
-			if (prop.shorthand) {
-				this.scope.inShorthand = false;
-			}
-		}
-	}
-
-	walkFunctionExpression(expression) {
-		const wasTopLevel = this.scope.topLevelScope;
-		this.scope.topLevelScope = false;
-		this.inScope(expression.params, () => {
-			for (const param of expression.params) {
-				this.walkPattern(param);
-			}
-			if (expression.body.type === "BlockStatement") {
-				this.detectStrictMode(expression.body.body);
-				this.prewalkStatement(expression.body);
-				this.walkStatement(expression.body);
-			} else {
-				this.walkExpression(expression.body);
-			}
-		});
-		this.scope.topLevelScope = wasTopLevel;
-	}
-
-	walkArrowFunctionExpression(expression) {
-		this.inScope(expression.params, () => {
-			for (const param of expression.params) {
-				this.walkPattern(param);
-			}
-			if (expression.body.type === "BlockStatement") {
-				this.detectStrictMode(expression.body.body);
-				this.prewalkStatement(expression.body);
-				this.walkStatement(expression.body);
-			} else {
-				this.walkExpression(expression.body);
-			}
-		});
-	}
-
-	walkSequenceExpression(expression) {
-		if (expression.expressions) this.walkExpressions(expression.expressions);
-	}
-
-	walkUpdateExpression(expression) {
-		this.walkExpression(expression.argument);
-	}
-
-	walkUnaryExpression(expression) {
-		if (expression.operator === "typeof") {
-			const exprName = this.getNameForExpression(expression.argument);
-			if (exprName && exprName.free) {
-				const hook = this.hooks.typeof.get(exprName.name);
-				if (hook !== undefined) {
-					const result = hook.call(expression);
-					if (result === true) return;
-				}
-			}
-		}
-		this.walkExpression(expression.argument);
-	}
-
-	walkLeftRightExpression(expression) {
-		this.walkExpression(expression.left);
-		this.walkExpression(expression.right);
-	}
-
-	walkBinaryExpression(expression) {
-		this.walkLeftRightExpression(expression);
-	}
-
-	walkLogicalExpression(expression) {
-		this.walkLeftRightExpression(expression);
-	}
-
-	walkAssignmentExpression(expression) {
-		const renameIdentifier = this.getRenameIdentifier(expression.right);
-		if (expression.left.type === "Identifier" && renameIdentifier) {
-			const hook = this.hooks.canRename.get(renameIdentifier);
-			if (hook !== undefined && hook.call(expression.right)) {
-				// renaming "a = b;"
-				const hook = this.hooks.rename.get(renameIdentifier);
-				if (hook === undefined || !hook.call(expression.right)) {
-					this.scope.renames.set(expression.left.name, renameIdentifier);
-					this.scope.definitions.delete(expression.left.name);
-				}
-				return;
-			}
-		}
-		if (expression.left.type === "Identifier") {
-			const assignedHook = this.hooks.assigned.get(expression.left.name);
-			if (assignedHook === undefined || !assignedHook.call(expression)) {
-				this.walkExpression(expression.right);
-			}
-			this.scope.renames.set(expression.left.name, null);
-			const assignHook = this.hooks.assign.get(expression.left.name);
-			if (assignHook === undefined || !assignHook.call(expression)) {
-				this.walkExpression(expression.left);
-			}
-			return;
-		}
-		this.walkExpression(expression.right);
-		this.walkPattern(expression.left);
-		this.enterPattern(expression.left, (name, decl) => {
-			this.scope.renames.set(name, null);
-		});
-	}
-
-	walkConditionalExpression(expression) {
-		const result = this.hooks.expressionConditionalOperator.call(expression);
-		if (result === undefined) {
-			this.walkExpression(expression.test);
-			this.walkExpression(expression.consequent);
-			if (expression.alternate) {
-				this.walkExpression(expression.alternate);
-			}
-		} else {
-			if (result) {
-				this.walkExpression(expression.consequent);
-			} else if (expression.alternate) {
-				this.walkExpression(expression.alternate);
-			}
-		}
-	}
-
-	walkNewExpression(expression) {
-		const callee = this.evaluateExpression(expression.callee);
-		if (callee.isIdentifier()) {
-			const hook = this.hooks.new.get(callee.identifier);
-			if (hook !== undefined) {
-				const result = hook.call(expression);
-				if (result === true) {
-					return;
-				}
-			}
-		}
-
-		this.walkExpression(expression.callee);
-		if (expression.arguments) {
-			this.walkExpressions(expression.arguments);
-		}
-	}
-
-	walkYieldExpression(expression) {
-		if (expression.argument) {
-			this.walkExpression(expression.argument);
-		}
-	}
-
-	walkTemplateLiteral(expression) {
-		if (expression.expressions) {
-			this.walkExpressions(expression.expressions);
-		}
-	}
-
-	walkTaggedTemplateExpression(expression) {
-		if (expression.tag) {
-			this.walkExpression(expression.tag);
-		}
-		if (expression.quasi && expression.quasi.expressions) {
-			this.walkExpressions(expression.quasi.expressions);
-		}
-	}
-
-	walkClassExpression(expression) {
-		this.walkClass(expression);
-	}
-
-	_walkIIFE(functionExpression, options, currentThis) {
-		const renameArgOrThis = argOrThis => {
-			const renameIdentifier = this.getRenameIdentifier(argOrThis);
-			if (renameIdentifier) {
-				const hook = this.hooks.canRename.get(renameIdentifier);
-				if (hook !== undefined && hook.call(argOrThis)) {
-					const hook = this.hooks.rename.get(renameIdentifier);
-					if (hook === undefined || !hook.call(argOrThis)) {
-						return renameIdentifier;
-					}
-				}
-			}
-			this.walkExpression(argOrThis);
-		};
-		const params = functionExpression.params;
-		const renameThis = currentThis ? renameArgOrThis(currentThis) : null;
-		const args = options.map(renameArgOrThis);
-		const wasTopLevel = this.scope.topLevelScope;
-		this.scope.topLevelScope = false;
-		this.inScope(params.filter((identifier, idx) => !args[idx]), () => {
-			if (renameThis) {
-				this.scope.renames.set("this", renameThis);
-			}
-			for (let i = 0; i < args.length; i++) {
-				const param = args[i];
-				if (!param) continue;
-				if (!params[i] || params[i].type !== "Identifier") continue;
-				this.scope.renames.set(params[i].name, param);
-			}
-			if (functionExpression.body.type === "BlockStatement") {
-				this.prewalkStatement(functionExpression.body);
-				this.walkStatement(functionExpression.body);
-			} else {
-				this.walkExpression(functionExpression.body);
-			}
-		});
-		this.scope.topLevelScope = wasTopLevel;
-	}
-
-	walkCallExpression(expression) {
-		if (
-			expression.callee.type === "MemberExpression" &&
-			expression.callee.object.type === "FunctionExpression" &&
-			!expression.callee.computed &&
-			(expression.callee.property.name === "call" ||
-				expression.callee.property.name === "bind") &&
-			expression.arguments.length > 0
-		) {
-			// (function(…) { }.call/bind(?, …))
-			this._walkIIFE(
-				expression.callee.object,
-				expression.arguments.slice(1),
-				expression.arguments[0]
-			);
-		} else if (expression.callee.type === "FunctionExpression") {
-			// (function(…) { }(…))
-			this._walkIIFE(expression.callee, expression.arguments, null);
-		} else if (expression.callee.type === "Import") {
-			let result = this.hooks.importCall.call(expression);
-			if (result === true) return;
-
-			if (expression.arguments) this.walkExpressions(expression.arguments);
-		} else {
-			const callee = this.evaluateExpression(expression.callee);
-			if (callee.isIdentifier()) {
-				const callHook = this.hooks.call.get(callee.identifier);
-				if (callHook !== undefined) {
-					let result = callHook.call(expression);
-					if (result === true) return;
-				}
-				let identifier = callee.identifier.replace(/\.[^.]+$/, "");
-				if (identifier !== callee.identifier) {
-					const callAnyHook = this.hooks.callAnyMember.get(identifier);
-					if (callAnyHook !== undefined) {
-						let result = callAnyHook.call(expression);
-						if (result === true) return;
-					}
-				}
-			}
-
-			if (expression.callee) this.walkExpression(expression.callee);
-			if (expression.arguments) this.walkExpressions(expression.arguments);
-		}
-	}
-
-	walkMemberExpression(expression) {
-		const exprName = this.getNameForExpression(expression);
-		if (exprName && exprName.free) {
-			const expressionHook = this.hooks.expression.get(exprName.name);
-			if (expressionHook !== undefined) {
-				const result = expressionHook.call(expression);
-				if (result === true) return;
-			}
-			const expressionAnyMemberHook = this.hooks.expressionAnyMember.get(
-				exprName.nameGeneral
-			);
-			if (expressionAnyMemberHook !== undefined) {
-				const result = expressionAnyMemberHook.call(expression);
-				if (result === true) return;
-			}
-		}
-		this.walkExpression(expression.object);
-		if (expression.computed === true) this.walkExpression(expression.property);
-	}
-
-	walkThisExpression(expression) {
-		const expressionHook = this.hooks.expression.get("this");
-		if (expressionHook !== undefined) {
-			expressionHook.call(expression);
-		}
-	}
-
-	walkIdentifier(expression) {
-		if (!this.scope.definitions.has(expression.name)) {
-			const hook = this.hooks.expression.get(
-				this.scope.renames.get(expression.name) || expression.name
-			);
-			if (hook !== undefined) {
-				const result = hook.call(expression);
-				if (result === true) return;
-			}
-		}
-	}
-
-	inScope(params, fn) {
-		const oldScope = this.scope;
-		this.scope = {
-			topLevelScope: oldScope.topLevelScope,
-			inTry: false,
-			inShorthand: false,
-			isStrict: oldScope.isStrict,
-			definitions: oldScope.definitions.createChild(),
-			renames: oldScope.renames.createChild()
-		};
-
-		this.scope.renames.set("this", null);
-
-		for (const param of params) {
-			if (typeof param !== "string") {
-				this.enterPattern(param, param => {
-					this.scope.renames.set(param, null);
-					this.scope.definitions.add(param);
-				});
-			} else if (param) {
-				this.scope.renames.set(param, null);
-				this.scope.definitions.add(param);
-			}
-		}
-
-		fn();
-		this.scope = oldScope;
-	}
-
-	detectStrictMode(statements) {
-		const isStrict =
-			statements.length >= 1 &&
-			statements[0].type === "ExpressionStatement" &&
-			statements[0].expression.type === "Literal" &&
-			statements[0].expression.value === "use strict";
-		if (isStrict) {
-			this.scope.isStrict = true;
-		}
-	}
-
-	enterPattern(pattern, onIdent) {
-		if (!pattern) return;
-		switch (pattern.type) {
-			case "ArrayPattern":
-				this.enterArrayPattern(pattern, onIdent);
-				break;
-			case "AssignmentPattern":
-				this.enterAssignmentPattern(pattern, onIdent);
-				break;
-			case "Identifier":
-				this.enterIdentifier(pattern, onIdent);
-				break;
-			case "ObjectPattern":
-				this.enterObjectPattern(pattern, onIdent);
-				break;
-			case "RestElement":
-				this.enterRestElement(pattern, onIdent);
-				break;
-		}
-	}
-
-	enterIdentifier(pattern, onIdent) {
-		onIdent(pattern.name, pattern);
-	}
-
-	enterObjectPattern(pattern, onIdent) {
-		for (
-			let propIndex = 0, len = pattern.properties.length;
-			propIndex < len;
-			propIndex++
-		) {
-			const prop = pattern.properties[propIndex];
-			this.enterPattern(prop.value, onIdent);
-		}
-	}
-
-	enterArrayPattern(pattern, onIdent) {
-		for (
-			let elementIndex = 0, len = pattern.elements.length;
-			elementIndex < len;
-			elementIndex++
-		) {
-			const element = pattern.elements[elementIndex];
-			this.enterPattern(element, onIdent);
-		}
-	}
-
-	enterRestElement(pattern, onIdent) {
-		this.enterPattern(pattern.argument, onIdent);
-	}
-
-	enterAssignmentPattern(pattern, onIdent) {
-		this.enterPattern(pattern.left, onIdent);
-	}
-
-	evaluateExpression(expression) {
-		try {
-			const hook = this.hooks.evaluate.get(expression.type);
-			if (hook !== undefined) {
-				const result = hook.call(expression);
-				if (result !== undefined) return result;
-			}
-		} catch (e) {
-			console.warn(e);
-			// ignore error
-		}
-		return new BasicEvaluatedExpression().setRange(expression.range);
-	}
-
-	parseString(expression) {
-		switch (expression.type) {
-			case "BinaryExpression":
-				if (expression.operator === "+") {
-					return (
-						this.parseString(expression.left) +
-						this.parseString(expression.right)
-					);
-				}
-				break;
-			case "Literal":
-				return expression.value + "";
-		}
-		throw new Error(
-			expression.type + " is not supported as parameter for require"
-		);
-	}
-
-	parseCalculatedString(expression) {
-		switch (expression.type) {
-			case "BinaryExpression":
-				if (expression.operator === "+") {
-					const left = this.parseCalculatedString(expression.left);
-					const right = this.parseCalculatedString(expression.right);
-					if (left.code) {
-						return {
-							range: left.range,
-							value: left.value,
-							code: true,
-							conditional: false
-						};
-					} else if (right.code) {
-						return {
-							range: [
-								left.range[0],
-								right.range ? right.range[1] : left.range[1]
-							],
-							value: left.value + right.value,
-							code: true,
-							conditional: false
-						};
-					} else {
-						return {
-							range: [left.range[0], right.range[1]],
-							value: left.value + right.value,
-							code: false,
-							conditional: false
-						};
-					}
-				}
-				break;
-			case "ConditionalExpression": {
-				const consequent = this.parseCalculatedString(expression.consequent);
-				const alternate = this.parseCalculatedString(expression.alternate);
-				const items = [];
-				if (consequent.conditional) {
-					items.push(...consequent.conditional);
-				} else if (!consequent.code) {
-					items.push(consequent);
-				} else {
-					break;
-				}
-				if (alternate.conditional) {
-					items.push(...alternate.conditional);
-				} else if (!alternate.code) {
-					items.push(alternate);
-				} else {
-					break;
-				}
-				return {
-					range: undefined,
-					value: "",
-					code: true,
-					conditional: items
-				};
-			}
-			case "Literal":
-				return {
-					range: expression.range,
-					value: expression.value + "",
-					code: false,
-					conditional: false
-				};
-		}
-		return {
-			range: undefined,
-			value: "",
-			code: true,
-			conditional: false
-		};
-	}
-
-	parse(source, initialState) {
-		let ast;
-		let comments;
-		if (typeof source === "object" && source !== null) {
-			ast = source;
-			comments = source.comments;
-		} else {
-			comments = [];
-			ast = Parser.parse(source, {
-				sourceType: this.sourceType,
-				onComment: comments
-			});
-		}
-
-		const oldScope = this.scope;
-		const oldState = this.state;
-		const oldComments = this.comments;
-		this.scope = {
-			topLevelScope: true,
-			inTry: false,
-			inShorthand: false,
-			isStrict: false,
-			definitions: new StackedSetMap(),
-			renames: new StackedSetMap()
-		};
-		const state = (this.state = initialState || {});
-		this.comments = comments;
-		if (this.hooks.program.call(ast, comments) === undefined) {
-			this.detectStrictMode(ast.body);
-			this.prewalkStatements(ast.body);
-			this.walkStatements(ast.body);
-		}
-		this.scope = oldScope;
-		this.state = oldState;
-		this.comments = oldComments;
-		return state;
-	}
-
-	evaluate(source) {
-		const ast = Parser.parse("(" + source + ")", {
-			sourceType: this.sourceType,
-			locations: false
-		});
-		if (ast.body.length !== 1 || ast.body[0].type !== "ExpressionStatement") {
-			throw new Error("evaluate: Source is not a expression");
-		}
-		return this.evaluateExpression(ast.body[0].expression);
-	}
-
-	getComments(range) {
-		return this.comments.filter(
-			comment => comment.range[0] >= range[0] && comment.range[1] <= range[1]
-		);
-	}
-
-	parseCommentOptions(range) {
-		const comments = this.getComments(range);
-		if (comments.length === 0) {
-			return EMPTY_COMMENT_OPTIONS;
-		}
-		let options = {};
-		let errors = [];
-		for (const comment of comments) {
-			const { value } = comment;
-			if (value && webpackCommentRegExp.test(value)) {
-				// try compile only if webpack options comment is present
-				try {
-					const val = vm.runInNewContext(`(function(){return {${value}};})()`);
-					Object.assign(options, val);
-				} catch (e) {
-					e.comment = comment;
-					errors.push(e);
-				}
-			}
-		}
-		return { options, errors };
-	}
-
-	getNameForExpression(expression) {
-		let expr = expression;
-		const exprName = [];
-		while (
-			expr.type === "MemberExpression" &&
-			expr.property.type === (expr.computed ? "Literal" : "Identifier")
-		) {
-			exprName.push(expr.computed ? expr.property.value : expr.property.name);
-			expr = expr.object;
-		}
-		let free;
-		if (expr.type === "Identifier") {
-			free = !this.scope.definitions.has(expr.name);
-			exprName.push(this.scope.renames.get(expr.name) || expr.name);
-		} else if (
-			expr.type === "ThisExpression" &&
-			this.scope.renames.get("this")
-		) {
-			free = true;
-			exprName.push(this.scope.renames.get("this"));
-		} else if (expr.type === "ThisExpression") {
-			free = this.scope.topLevelScope;
-			exprName.push("this");
-		} else {
-			return null;
-		}
-		let prefix = "";
-		for (let i = exprName.length - 1; i >= 2; i--) {
-			prefix += exprName[i] + ".";
-		}
-		if (exprName.length > 1) {
-			prefix += exprName[1];
-		}
-		const name = prefix ? prefix + "." + exprName[0] : exprName[0];
-		const nameGeneral = prefix;
-		return {
-			name,
-			nameGeneral,
-			free
-		};
-	}
+"use strict";
 
-	static parse(code, options) {
-		const type = options ? options.sourceType : "module";
-		const parserOptions = Object.assign(
-			Object.create(null),
-			defaultParserOptions,
-			options
-		);
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./NormalModule")} NormalModule */
 
-		if (type === "auto") {
-			parserOptions.sourceType = "module";
-		}
+/** @typedef {Record} PreparsedAst */
 
-		let ast;
-		let error;
-		let threw = false;
-		try {
-			ast = acorn.parse(code, parserOptions);
-		} catch (e) {
-			error = e;
-			threw = true;
-		}
+/**
+ * @typedef {object} ParserStateBase
+ * @property {string | Buffer} source
+ * @property {NormalModule} current
+ * @property {NormalModule} module
+ * @property {Compilation} compilation
+ * @property {WebpackOptions} options
+ */
 
-		if (threw && type === "auto") {
-			parserOptions.sourceType = "script";
-			if (Array.isArray(parserOptions.onComment)) {
-				parserOptions.onComment.length = 0;
-			}
-			try {
-				ast = acorn.parse(code, parserOptions);
-				threw = false;
-			} catch (e) {
-				threw = true;
-			}
-		}
+/** @typedef {ParserStateBase & Record} ParserState */
 
-		if (threw) {
-			throw error;
-		}
+class Parser {
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @param {string | Buffer | PreparsedAst} source the source to parse
+	 * @param {ParserState} state the parser state
+	 * @returns {ParserState} the parser state
+	 */
+	parse(source, state) {
+		const AbstractMethodError = require("./AbstractMethodError");
 
-		return ast;
+		throw new AbstractMethodError();
 	}
 }
 
-// TODO remove in webpack 5
-Object.defineProperty(Parser.prototype, "getCommentOptions", {
-	configurable: false,
-	value: util.deprecate(function(range) {
-		return this.parseCommentOptions(range).options;
-	}, "Parser.getCommentOptions: Use Parser.parseCommentOptions(range) instead")
-});
-
 module.exports = Parser;
diff --git a/lib/ParserHelpers.js b/lib/ParserHelpers.js
deleted file mode 100644
index 5248f12fe55..00000000000
--- a/lib/ParserHelpers.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-const path = require("path");
-
-const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
-const ConstDependency = require("./dependencies/ConstDependency");
-const UnsupportedFeatureWarning = require("./UnsupportedFeatureWarning");
-
-const ParserHelpers = exports;
-
-ParserHelpers.addParsedVariableToModule = (parser, name, expression) => {
-	if (!parser.state.current.addVariable) return false;
-	var deps = [];
-	parser.parse(expression, {
-		current: {
-			addDependency: dep => {
-				dep.userRequest = name;
-				deps.push(dep);
-			}
-		},
-		module: parser.state.module
-	});
-	parser.state.current.addVariable(name, expression, deps);
-	return true;
-};
-
-ParserHelpers.requireFileAsExpression = (context, pathToModule) => {
-	var moduleJsPath = path.relative(context, pathToModule);
-	if (!/^[A-Z]:/i.test(moduleJsPath)) {
-		moduleJsPath = "./" + moduleJsPath.replace(/\\/g, "/");
-	}
-	return "require(" + JSON.stringify(moduleJsPath) + ")";
-};
-
-ParserHelpers.toConstantDependency = (parser, value) => {
-	return function constDependency(expr) {
-		var dep = new ConstDependency(value, expr.range, false);
-		dep.loc = expr.loc;
-		parser.state.current.addDependency(dep);
-		return true;
-	};
-};
-
-ParserHelpers.toConstantDependencyWithWebpackRequire = (parser, value) => {
-	return function constDependencyWithWebpackRequire(expr) {
-		var dep = new ConstDependency(value, expr.range, true);
-		dep.loc = expr.loc;
-		parser.state.current.addDependency(dep);
-		return true;
-	};
-};
-
-ParserHelpers.evaluateToString = value => {
-	return function stringExpression(expr) {
-		return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
-	};
-};
-
-ParserHelpers.evaluateToBoolean = value => {
-	return function booleanExpression(expr) {
-		return new BasicEvaluatedExpression()
-			.setBoolean(value)
-			.setRange(expr.range);
-	};
-};
-
-ParserHelpers.evaluateToIdentifier = (identifier, truthy) => {
-	return function identifierExpression(expr) {
-		let evex = new BasicEvaluatedExpression()
-			.setIdentifier(identifier)
-			.setRange(expr.range);
-		if (truthy === true) {
-			evex = evex.setTruthy();
-		} else if (truthy === false) {
-			evex = evex.setFalsy();
-		}
-		return evex;
-	};
-};
-
-ParserHelpers.expressionIsUnsupported = (parser, message) => {
-	return function unsupportedExpression(expr) {
-		var dep = new ConstDependency("(void 0)", expr.range, false);
-		dep.loc = expr.loc;
-		parser.state.current.addDependency(dep);
-		if (!parser.state.module) return;
-		parser.state.module.warnings.push(
-			new UnsupportedFeatureWarning(parser.state.module, message, expr.loc)
-		);
-		return true;
-	};
-};
-
-ParserHelpers.skipTraversal = function skipTraversal() {
-	return true;
-};
-
-ParserHelpers.approve = function approve() {
-	return true;
-};
diff --git a/lib/PlatformPlugin.js b/lib/PlatformPlugin.js
new file mode 100644
index 00000000000..57a8808ceda
--- /dev/null
+++ b/lib/PlatformPlugin.js
@@ -0,0 +1,41 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Authors Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./config/target").PlatformTargetProperties} PlatformTargetProperties */
+
+const PLUGIN_NAME = "PlatformPlugin";
+
+/**
+ * Should be used only for "target === false" or
+ * when you want to overwrite platform target properties
+ */
+class PlatformPlugin {
+	/**
+	 * @param {Partial} platform target properties
+	 */
+	constructor(platform) {
+		/** @type {Partial} */
+		this.platform = platform;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.environment.tap(PLUGIN_NAME, () => {
+			compiler.platform = {
+				...compiler.platform,
+				...this.platform
+			};
+		});
+	}
+}
+
+module.exports = PlatformPlugin;
diff --git a/lib/PrefetchPlugin.js b/lib/PrefetchPlugin.js
index cc9d17c0c86..52cf9647bb1 100644
--- a/lib/PrefetchPlugin.js
+++ b/lib/PrefetchPlugin.js
@@ -2,22 +2,38 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
+
 const PrefetchDependency = require("./dependencies/PrefetchDependency");
 
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "PrefetchPlugin";
+
 class PrefetchPlugin {
+	/**
+	 * @param {string} context context or request if context is not set
+	 * @param {string=} request request
+	 */
 	constructor(context, request) {
-		if (!request) {
-			this.request = context;
-		} else {
+		if (request) {
 			this.context = context;
 			this.request = request;
+		} else {
+			this.context = null;
+			this.request = context;
 		}
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"PrefetchPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
 				compilation.dependencyFactories.set(
 					PrefetchDependency,
@@ -25,13 +41,16 @@ class PrefetchPlugin {
 				);
 			}
 		);
-		compiler.hooks.make.tapAsync("PrefetchPlugin", (compilation, callback) => {
-			compilation.prefetch(
+		compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
+			compilation.addModuleChain(
 				this.context || compiler.context,
 				new PrefetchDependency(this.request),
-				callback
+				(err) => {
+					callback(err);
+				}
 			);
 		});
 	}
 }
+
 module.exports = PrefetchPlugin;
diff --git a/lib/ProgressPlugin.js b/lib/ProgressPlugin.js
index 32cd6d2cb20..0afdfddf7e2 100644
--- a/lib/ProgressPlugin.js
+++ b/lib/ProgressPlugin.js
@@ -2,245 +2,721 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const createDefaultHandler = profile => {
-	let lineCaretPosition = 0;
-	let lastState;
-	let lastStateTime;
+const Compiler = require("./Compiler");
+const MultiCompiler = require("./MultiCompiler");
+const NormalModule = require("./NormalModule");
+const { contextify } = require("./util/identifier");
+
+/** @typedef {import("tapable").Tap} Tap */
+/**
+ * @template T, R, AdditionalOptions
+ * @typedef {import("tapable").Hook} Hook
+ */
+/** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginArgument} ProgressPluginArgument */
+/** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginOptions} ProgressPluginOptions */
+/** @typedef {import("./Compilation").FactorizeModuleOptions} FactorizeModuleOptions */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+
+/**
+ * @template T, K, R
+ * @typedef {import("./util/AsyncQueue")} AsyncQueue
+ */
+
+/**
+ * @typedef {object} CountsData
+ * @property {number} modulesCount modules count
+ * @property {number} dependenciesCount dependencies count
+ */
 
+/**
+ * @param {number} a a
+ * @param {number} b b
+ * @param {number} c c
+ * @returns {number} median
+ */
+const median3 = (a, b, c) => a + b + c - Math.max(a, b, c) - Math.min(a, b, c);
+
+/** @typedef {(percentage: number, msg: string, ...args: string[]) => void} HandlerFn */
+
+/**
+ * @param {boolean | null | undefined} profile need profile
+ * @param {Logger} logger logger
+ * @returns {HandlerFn} default handler
+ */
+const createDefaultHandler = (profile, logger) => {
+	/** @type {{ value: string | undefined, time: number }[]} */
+	const lastStateInfo = [];
+
+	/** @type {HandlerFn} */
 	const defaultHandler = (percentage, msg, ...args) => {
-		let state = msg;
-		const details = args;
-		if (percentage < 1) {
-			percentage = Math.floor(percentage * 100);
-			msg = `${percentage}% ${msg}`;
-			if (percentage < 100) {
-				msg = ` ${msg}`;
-			}
-			if (percentage < 10) {
-				msg = ` ${msg}`;
-			}
-			for (let detail of details) {
-				if (!detail) continue;
-				if (detail.length > 40) {
-					detail = `…${detail.substr(detail.length - 39)}`;
-				}
-				msg += ` ${detail}`;
-			}
-		}
 		if (profile) {
-			state = state.replace(/^\d+\/\d+\s+/, "");
 			if (percentage === 0) {
-				lastState = null;
-				lastStateTime = Date.now();
-			} else if (state !== lastState || percentage === 1) {
-				const now = Date.now();
-				if (lastState) {
-					const stateMsg = `${now - lastStateTime}ms ${lastState}`;
-					goToLineStart(stateMsg);
-					process.stderr.write(stateMsg + "\n");
-					lineCaretPosition = 0;
+				lastStateInfo.length = 0;
+			}
+			const fullState = [msg, ...args];
+			const state = fullState.map((s) => s.replace(/\d+\/\d+ /g, ""));
+			const now = Date.now();
+			const len = Math.max(state.length, lastStateInfo.length);
+			for (let i = len; i >= 0; i--) {
+				const stateItem = i < state.length ? state[i] : undefined;
+				const lastStateItem =
+					i < lastStateInfo.length ? lastStateInfo[i] : undefined;
+				if (lastStateItem) {
+					if (stateItem !== lastStateItem.value) {
+						const diff = now - lastStateItem.time;
+						if (lastStateItem.value) {
+							let reportState = lastStateItem.value;
+							if (i > 0) {
+								reportState = `${lastStateInfo[i - 1].value} > ${reportState}`;
+							}
+							const stateMsg = `${" | ".repeat(i)}${diff} ms ${reportState}`;
+							const d = diff;
+							// This depends on timing so we ignore it for coverage
+							/* eslint-disable no-lone-blocks */
+							/* istanbul ignore next */
+							{
+								if (d > 10000) {
+									logger.error(stateMsg);
+								} else if (d > 1000) {
+									logger.warn(stateMsg);
+								} else if (d > 10) {
+									logger.info(stateMsg);
+								} else if (d > 5) {
+									logger.log(stateMsg);
+								} else {
+									logger.debug(stateMsg);
+								}
+							}
+							/* eslint-enable no-lone-blocks */
+						}
+						if (stateItem === undefined) {
+							lastStateInfo.length = i;
+						} else {
+							lastStateItem.value = stateItem;
+							lastStateItem.time = now;
+							lastStateInfo.length = i + 1;
+						}
+					}
+				} else {
+					lastStateInfo[i] = {
+						value: stateItem,
+						time: now
+					};
 				}
-				lastState = state;
-				lastStateTime = now;
 			}
 		}
-		goToLineStart(msg);
-		process.stderr.write(msg);
-	};
-
-	const goToLineStart = nextMessage => {
-		let str = "";
-		for (; lineCaretPosition > nextMessage.length; lineCaretPosition--) {
-			str += "\b \b";
-		}
-		for (var i = 0; i < lineCaretPosition; i++) {
-			str += "\b";
-		}
-		lineCaretPosition = nextMessage.length;
-		if (str) process.stderr.write(str);
+		logger.status(`${Math.floor(percentage * 100)}%`, msg, ...args);
+		if (percentage === 1 || (!msg && args.length === 0)) logger.status();
 	};
 
 	return defaultHandler;
 };
 
+const SKIPPED_QUEUE_CONTEXTS = ["import-module", "load-module"];
+
+/**
+ * @callback ReportProgress
+ * @param {number} p percentage
+ * @param {...string} args additional arguments
+ * @returns {void}
+ */
+
+/** @type {WeakMap} */
+const progressReporters = new WeakMap();
+
+const PLUGIN_NAME = "ProgressPlugin";
+
+/** @type {Required>} */
+const DEFAULT_OPTIONS = {
+	profile: false,
+	modulesCount: 5000,
+	dependenciesCount: 10000,
+	modules: true,
+	dependencies: true,
+	activeModules: false,
+	entries: true,
+	percentBy: null
+};
+
 class ProgressPlugin {
-	constructor(options) {
+	/**
+	 * @param {Compiler} compiler the current compiler
+	 * @returns {ReportProgress | undefined} a progress reporter, if any
+	 */
+	static getReporter(compiler) {
+		return progressReporters.get(compiler);
+	}
+
+	/**
+	 * @param {ProgressPluginArgument} options options
+	 */
+	constructor(options = {}) {
 		if (typeof options === "function") {
 			options = {
 				handler: options
 			};
 		}
-		options = options || {};
-		this.profile = options.profile;
+
+		/** @type {ProgressPluginOptions} */
+		this.options = options;
+
+		this.profile = options.profile || DEFAULT_OPTIONS.profile;
 		this.handler = options.handler;
+		this.modulesCount = options.modulesCount || DEFAULT_OPTIONS.modulesCount;
+		this.dependenciesCount =
+			options.dependenciesCount || DEFAULT_OPTIONS.dependenciesCount;
+		this.showEntries = options.entries || DEFAULT_OPTIONS.entries;
+		this.showModules = options.modules || DEFAULT_OPTIONS.modules;
+		this.showDependencies =
+			options.dependencies || DEFAULT_OPTIONS.dependencies;
+		this.showActiveModules =
+			options.activeModules || DEFAULT_OPTIONS.activeModules;
+		this.percentBy = options.percentBy || DEFAULT_OPTIONS.percentBy;
 	}
 
+	/**
+	 * @param {Compiler | MultiCompiler} compiler webpack compiler
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		const handler = this.handler || createDefaultHandler(this.profile);
-		if (compiler.compilers) {
-			const states = new Array(compiler.compilers.length);
-			compiler.compilers.forEach((compiler, idx) => {
-				new ProgressPlugin((p, msg, ...args) => {
-					states[idx] = [p, msg, ...args];
-					handler(
-						states
-							.map(state => (state && state[0]) || 0)
-							.reduce((a, b) => a + b) / states.length,
-						`[${idx}] ${msg}`,
-						...args
+		const handler =
+			this.handler ||
+			createDefaultHandler(
+				this.profile,
+				compiler.getInfrastructureLogger("webpack.Progress")
+			);
+		if (compiler instanceof MultiCompiler) {
+			this._applyOnMultiCompiler(compiler, handler);
+		} else if (compiler instanceof Compiler) {
+			this._applyOnCompiler(compiler, handler);
+		}
+	}
+
+	/**
+	 * @param {MultiCompiler} compiler webpack multi-compiler
+	 * @param {HandlerFn} handler function that executes for every progress step
+	 * @returns {void}
+	 */
+	_applyOnMultiCompiler(compiler, handler) {
+		const states = compiler.compilers.map(
+			() => /** @type {[number, ...string[]]} */ ([0])
+		);
+		for (const [idx, item] of compiler.compilers.entries()) {
+			new ProgressPlugin((p, msg, ...args) => {
+				states[idx] = [p, msg, ...args];
+				let sum = 0;
+				for (const [p] of states) sum += p;
+				handler(sum / states.length, `[${idx}] ${msg}`, ...args);
+			}).apply(item);
+		}
+	}
+
+	/**
+	 * @param {Compiler} compiler webpack compiler
+	 * @param {HandlerFn} handler function that executes for every progress step
+	 * @returns {void}
+	 */
+	_applyOnCompiler(compiler, handler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/ProgressPlugin.json"),
+				this.options,
+				{
+					name: "Progress Plugin",
+					baseDataPath: "options"
+				},
+				(options) => require("../schemas/plugins/ProgressPlugin.check")(options)
+			);
+		});
+
+		const showEntries = this.showEntries;
+		const showModules = this.showModules;
+		const showDependencies = this.showDependencies;
+		const showActiveModules = this.showActiveModules;
+		let lastActiveModule = "";
+		let currentLoader = "";
+		let lastModulesCount = 0;
+		let lastDependenciesCount = 0;
+		let lastEntriesCount = 0;
+		let modulesCount = 0;
+		let skippedModulesCount = 0;
+		let dependenciesCount = 0;
+		let skippedDependenciesCount = 0;
+		let entriesCount = 1;
+		let doneModules = 0;
+		let doneDependencies = 0;
+		let doneEntries = 0;
+		/** @type {Set} */
+		const activeModules = new Set();
+		let lastUpdate = 0;
+
+		const updateThrottled = () => {
+			if (lastUpdate + 500 < Date.now()) update();
+		};
+
+		const update = () => {
+			/** @type {string[]} */
+			const items = [];
+			const percentByModules =
+				doneModules /
+				Math.max(lastModulesCount || this.modulesCount || 1, modulesCount);
+			const percentByEntries =
+				doneEntries /
+				Math.max(lastEntriesCount || this.dependenciesCount || 1, entriesCount);
+			const percentByDependencies =
+				doneDependencies /
+				Math.max(lastDependenciesCount || 1, dependenciesCount);
+			/** @type {number} */
+			let percentageFactor;
+
+			switch (this.percentBy) {
+				case "entries":
+					percentageFactor = percentByEntries;
+					break;
+				case "dependencies":
+					percentageFactor = percentByDependencies;
+					break;
+				case "modules":
+					percentageFactor = percentByModules;
+					break;
+				default:
+					percentageFactor = median3(
+						percentByModules,
+						percentByEntries,
+						percentByDependencies
 					);
-				}).apply(compiler);
-			});
-		} else {
-			let lastModulesCount = 0;
-			let moduleCount = 500;
-			let doneModules = 0;
-			const activeModules = [];
-
-			const update = module => {
-				handler(
-					0.1 + (doneModules / Math.max(lastModulesCount, moduleCount)) * 0.6,
-					"building modules",
-					`${doneModules}/${moduleCount} modules`,
-					`${activeModules.length} active`,
-					activeModules[activeModules.length - 1]
+			}
+
+			const percentage = 0.1 + percentageFactor * 0.55;
+
+			if (currentLoader) {
+				items.push(
+					`import loader ${contextify(
+						compiler.context,
+						currentLoader,
+						compiler.root
+					)}`
 				);
-			};
+			} else {
+				/** @type {string[]} */
+				const statItems = [];
+				if (showEntries) {
+					statItems.push(`${doneEntries}/${entriesCount} entries`);
+				}
+				if (showDependencies) {
+					statItems.push(
+						`${doneDependencies}/${dependenciesCount} dependencies`
+					);
+				}
+				if (showModules) {
+					statItems.push(`${doneModules}/${modulesCount} modules`);
+				}
+				if (showActiveModules) {
+					statItems.push(`${activeModules.size} active`);
+				}
+				if (statItems.length > 0) {
+					items.push(statItems.join(" "));
+				}
+				if (showActiveModules) {
+					items.push(lastActiveModule);
+				}
+			}
+			handler(percentage, "building", ...items);
+			lastUpdate = Date.now();
+		};
+
+		/**
+		 * @template T
+		 * @param {AsyncQueue} factorizeQueue async queue
+		 * @param {T} _item item
+		 */
+		const factorizeAdd = (factorizeQueue, _item) => {
+			if (SKIPPED_QUEUE_CONTEXTS.includes(factorizeQueue.getContext())) {
+				skippedDependenciesCount++;
+			}
+			dependenciesCount++;
+			if (dependenciesCount < 50 || dependenciesCount % 100 === 0) {
+				updateThrottled();
+			}
+		};
+
+		const factorizeDone = () => {
+			doneDependencies++;
+			if (doneDependencies < 50 || doneDependencies % 100 === 0) {
+				updateThrottled();
+			}
+		};
 
-			const moduleDone = module => {
-				doneModules++;
+		/**
+		 * @template T
+		 * @param {AsyncQueue} addModuleQueue async queue
+		 * @param {T} _item item
+		 */
+		const moduleAdd = (addModuleQueue, _item) => {
+			if (SKIPPED_QUEUE_CONTEXTS.includes(addModuleQueue.getContext())) {
+				skippedModulesCount++;
+			}
+			modulesCount++;
+			if (modulesCount < 50 || modulesCount % 100 === 0) updateThrottled();
+		};
+
+		// only used when showActiveModules is set
+		/**
+		 * @param {Module} module the module
+		 */
+		const moduleBuild = (module) => {
+			const ident = module.identifier();
+			if (ident) {
+				activeModules.add(ident);
+				lastActiveModule = ident;
+				update();
+			}
+		};
+
+		/**
+		 * @param {Dependency} entry entry dependency
+		 * @param {EntryOptions} options options object
+		 */
+		const entryAdd = (entry, options) => {
+			entriesCount++;
+			if (entriesCount < 5 || entriesCount % 10 === 0) updateThrottled();
+		};
+
+		/**
+		 * @param {Module} module the module
+		 */
+		const moduleDone = (module) => {
+			doneModules++;
+			if (showActiveModules) {
 				const ident = module.identifier();
 				if (ident) {
-					const idx = activeModules.indexOf(ident);
-					if (idx >= 0) activeModules.splice(idx, 1);
+					activeModules.delete(ident);
+					if (lastActiveModule === ident) {
+						lastActiveModule = "";
+						for (const m of activeModules) {
+							lastActiveModule = m;
+						}
+						update();
+						return;
+					}
 				}
-				update();
-			};
-			compiler.hooks.compilation.tap("ProgressPlugin", compilation => {
-				if (compilation.compiler.isChild()) return;
-				lastModulesCount = moduleCount;
-				moduleCount = 0;
-				doneModules = 0;
-				handler(0, "compiling");
-				compilation.hooks.buildModule.tap("ProgressPlugin", module => {
-					moduleCount++;
-					const ident = module.identifier();
-					if (ident) {
-						activeModules.push(ident);
+			}
+			if (doneModules < 50 || doneModules % 100 === 0) updateThrottled();
+		};
+
+		/**
+		 * @param {Dependency} entry entry dependency
+		 * @param {EntryOptions} options options object
+		 */
+		const entryDone = (entry, options) => {
+			doneEntries++;
+			update();
+		};
+
+		const cache = compiler.getCache(PLUGIN_NAME).getItemCache("counts", null);
+
+		/** @type {Promise | undefined} */
+		let cacheGetPromise;
+
+		compiler.hooks.beforeCompile.tap(PLUGIN_NAME, () => {
+			if (!cacheGetPromise) {
+				cacheGetPromise = cache.getPromise().then(
+					(data) => {
+						if (data) {
+							lastModulesCount = lastModulesCount || data.modulesCount;
+							lastDependenciesCount =
+								lastDependenciesCount || data.dependenciesCount;
+						}
+						return data;
+					},
+					(_err) => {
+						// Ignore error
 					}
-					update();
-				});
-				compilation.hooks.failedModule.tap("ProgressPlugin", moduleDone);
-				compilation.hooks.succeedModule.tap("ProgressPlugin", moduleDone);
-				const hooks = {
-					finishModules: "finish module graph",
-					seal: "sealing",
-					optimizeDependenciesBasic: "basic dependencies optimization",
-					optimizeDependencies: "dependencies optimization",
-					optimizeDependenciesAdvanced: "advanced dependencies optimization",
-					afterOptimizeDependencies: "after dependencies optimization",
-					optimize: "optimizing",
-					optimizeModulesBasic: "basic module optimization",
-					optimizeModules: "module optimization",
-					optimizeModulesAdvanced: "advanced module optimization",
-					afterOptimizeModules: "after module optimization",
-					optimizeChunksBasic: "basic chunk optimization",
-					optimizeChunks: "chunk optimization",
-					optimizeChunksAdvanced: "advanced chunk optimization",
-					afterOptimizeChunks: "after chunk optimization",
-					optimizeTree: "module and chunk tree optimization",
-					afterOptimizeTree: "after module and chunk tree optimization",
-					optimizeChunkModulesBasic: "basic chunk modules optimization",
-					optimizeChunkModules: "chunk modules optimization",
-					optimizeChunkModulesAdvanced: "advanced chunk modules optimization",
-					afterOptimizeChunkModules: "after chunk modules optimization",
-					reviveModules: "module reviving",
-					optimizeModuleOrder: "module order optimization",
-					advancedOptimizeModuleOrder: "advanced module order optimization",
-					beforeModuleIds: "before module ids",
-					moduleIds: "module ids",
-					optimizeModuleIds: "module id optimization",
-					afterOptimizeModuleIds: "module id optimization",
-					reviveChunks: "chunk reviving",
-					optimizeChunkOrder: "chunk order optimization",
-					beforeChunkIds: "before chunk ids",
-					optimizeChunkIds: "chunk id optimization",
-					afterOptimizeChunkIds: "after chunk id optimization",
-					recordModules: "record modules",
-					recordChunks: "record chunks",
-					beforeHash: "hashing",
-					afterHash: "after hashing",
-					recordHash: "record hash",
-					beforeModuleAssets: "module assets processing",
-					beforeChunkAssets: "chunk assets processing",
-					additionalChunkAssets: "additional chunk assets processing",
-					record: "recording",
-					additionalAssets: "additional asset processing",
-					optimizeChunkAssets: "chunk asset optimization",
-					afterOptimizeChunkAssets: "after chunk asset optimization",
-					optimizeAssets: "asset optimization",
-					afterOptimizeAssets: "after asset optimization",
-					afterSeal: "after seal"
-				};
-				const numberOfHooks = Object.keys(hooks).length;
-				Object.keys(hooks).forEach((name, idx) => {
-					const title = hooks[name];
-					const percentage = (idx / numberOfHooks) * 0.25 + 0.7;
-					compilation.hooks[name].intercept({
-						name: "ProgressPlugin",
-						context: true,
-						call: () => {
-							handler(percentage, title);
-						},
-						tap: (context, tap) => {
-							if (context) {
-								// p is percentage from 0 to 1
-								// args is any number of messages in a hierarchical matter
-								context.reportProgress = (p, ...args) => {
-									handler(percentage, title, tap.name, ...args);
-								};
+				);
+			}
+		});
+
+		compiler.hooks.afterCompile.tapPromise(PLUGIN_NAME, (compilation) => {
+			if (compilation.compiler.isChild()) return Promise.resolve();
+			return /** @type {Promise} */ (cacheGetPromise).then(
+				async (oldData) => {
+					const realModulesCount = modulesCount - skippedModulesCount;
+					const realDependenciesCount =
+						dependenciesCount - skippedDependenciesCount;
+
+					if (
+						!oldData ||
+						oldData.modulesCount !== realModulesCount ||
+						oldData.dependenciesCount !== realDependenciesCount
+					) {
+						await cache.storePromise({
+							modulesCount: realModulesCount,
+							dependenciesCount: realDependenciesCount
+						});
+					}
+				}
+			);
+		});
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			if (compilation.compiler.isChild()) return;
+			lastModulesCount = modulesCount;
+			lastEntriesCount = entriesCount;
+			lastDependenciesCount = dependenciesCount;
+			modulesCount =
+				skippedModulesCount =
+				dependenciesCount =
+				skippedDependenciesCount =
+				entriesCount =
+					0;
+			doneModules = doneDependencies = doneEntries = 0;
+
+			compilation.factorizeQueue.hooks.added.tap(PLUGIN_NAME, (item) =>
+				factorizeAdd(compilation.factorizeQueue, item)
+			);
+			compilation.factorizeQueue.hooks.result.tap(PLUGIN_NAME, factorizeDone);
+
+			compilation.addModuleQueue.hooks.added.tap(PLUGIN_NAME, (item) =>
+				moduleAdd(compilation.addModuleQueue, item)
+			);
+			compilation.processDependenciesQueue.hooks.result.tap(
+				PLUGIN_NAME,
+				moduleDone
+			);
+
+			if (showActiveModules) {
+				compilation.hooks.buildModule.tap(PLUGIN_NAME, moduleBuild);
+			}
+
+			compilation.hooks.addEntry.tap(PLUGIN_NAME, entryAdd);
+			compilation.hooks.failedEntry.tap(PLUGIN_NAME, entryDone);
+			compilation.hooks.succeedEntry.tap(PLUGIN_NAME, entryDone);
+
+			// @ts-expect-error avoid dynamic require if bundled with webpack
+			if (typeof __webpack_require__ !== "function") {
+				/** @type {Set} */
+				const requiredLoaders = new Set();
+				NormalModule.getCompilationHooks(compilation).beforeLoaders.tap(
+					PLUGIN_NAME,
+					(loaders) => {
+						for (const loader of loaders) {
+							if (
+								loader.type !== "module" &&
+								!requiredLoaders.has(loader.loader)
+							) {
+								requiredLoaders.add(loader.loader);
+								currentLoader = loader.loader;
+								update();
+								require(loader.loader);
 							}
-							handler(percentage, title, tap.name);
 						}
-					});
+						if (currentLoader) {
+							currentLoader = "";
+							update();
+						}
+					}
+				);
+			}
+
+			const hooks = {
+				finishModules: "finish module graph",
+				seal: "plugins",
+				optimizeDependencies: "dependencies optimization",
+				afterOptimizeDependencies: "after dependencies optimization",
+				beforeChunks: "chunk graph",
+				afterChunks: "after chunk graph",
+				optimize: "optimizing",
+				optimizeModules: "module optimization",
+				afterOptimizeModules: "after module optimization",
+				optimizeChunks: "chunk optimization",
+				afterOptimizeChunks: "after chunk optimization",
+				optimizeTree: "module and chunk tree optimization",
+				afterOptimizeTree: "after module and chunk tree optimization",
+				optimizeChunkModules: "chunk modules optimization",
+				afterOptimizeChunkModules: "after chunk modules optimization",
+				reviveModules: "module reviving",
+				beforeModuleIds: "before module ids",
+				moduleIds: "module ids",
+				optimizeModuleIds: "module id optimization",
+				afterOptimizeModuleIds: "module id optimization",
+				reviveChunks: "chunk reviving",
+				beforeChunkIds: "before chunk ids",
+				chunkIds: "chunk ids",
+				optimizeChunkIds: "chunk id optimization",
+				afterOptimizeChunkIds: "after chunk id optimization",
+				recordModules: "record modules",
+				recordChunks: "record chunks",
+				beforeModuleHash: "module hashing",
+				beforeCodeGeneration: "code generation",
+				beforeRuntimeRequirements: "runtime requirements",
+				beforeHash: "hashing",
+				afterHash: "after hashing",
+				recordHash: "record hash",
+				beforeModuleAssets: "module assets processing",
+				beforeChunkAssets: "chunk assets processing",
+				processAssets: "asset processing",
+				afterProcessAssets: "after asset optimization",
+				record: "recording",
+				afterSeal: "after seal"
+			};
+			const numberOfHooks = Object.keys(hooks).length;
+			for (const [idx, name] of Object.keys(hooks).entries()) {
+				const title = hooks[/** @type {keyof typeof hooks} */ (name)];
+				const percentage = (idx / numberOfHooks) * 0.25 + 0.7;
+				compilation.hooks[/** @type {keyof typeof hooks} */ (name)].intercept({
+					name: PLUGIN_NAME,
+					call() {
+						handler(percentage, "sealing", title);
+					},
+					done() {
+						progressReporters.set(compiler, undefined);
+						handler(percentage, "sealing", title);
+					},
+					result() {
+						handler(percentage, "sealing", title);
+					},
+					error() {
+						handler(percentage, "sealing", title);
+					},
+					tap(tap) {
+						// p is percentage from 0 to 1
+						// args is any number of messages in a hierarchical matter
+						progressReporters.set(compilation.compiler, (p, ...args) => {
+							handler(percentage, "sealing", title, tap.name, ...args);
+						});
+						handler(percentage, "sealing", title, tap.name);
+					}
 				});
-			});
-			compiler.hooks.emit.intercept({
-				name: "ProgressPlugin",
-				context: true,
-				call: () => {
-					handler(0.95, "emitting");
+			}
+		});
+		compiler.hooks.make.intercept({
+			name: PLUGIN_NAME,
+			call() {
+				handler(0.1, "building");
+			},
+			done() {
+				handler(0.65, "building");
+			}
+		});
+		/**
+		 * @template {Hook} T
+		 * @param {T} hook hook
+		 * @param {number} progress progress from 0 to 1
+		 * @param {string} category category
+		 * @param {string} name name
+		 */
+		const interceptHook = (hook, progress, category, name) => {
+			hook.intercept({
+				name: PLUGIN_NAME,
+				call() {
+					handler(progress, category, name);
 				},
-				tap: (context, tap) => {
-					if (context) {
-						context.reportProgress = (p, ...args) => {
-							handler(0.95, "emitting", tap.name, ...args);
-						};
-					}
-					handler(0.95, "emitting", tap.name);
-				}
-			});
-			compiler.hooks.afterEmit.intercept({
-				name: "ProgressPlugin",
-				context: true,
-				call: () => {
-					handler(0.98, "after emitting");
+				done() {
+					progressReporters.set(compiler, undefined);
+					handler(progress, category, name);
 				},
-				tap: (context, tap) => {
-					if (context) {
-						context.reportProgress = (p, ...args) => {
-							handler(0.98, "after emitting", tap.name, ...args);
-						};
-					}
-					handler(0.98, "after emitting", tap.name);
+				result() {
+					handler(progress, category, name);
+				},
+				error() {
+					handler(progress, category, name);
+				},
+				/**
+				 * @param {Tap} tap tap
+				 */
+				tap(tap) {
+					progressReporters.set(compiler, (p, ...args) => {
+						handler(progress, category, name, tap.name, ...args);
+					});
+					handler(progress, category, name, tap.name);
 				}
 			});
-			compiler.hooks.done.tap("ProgressPlugin", () => {
+		};
+		compiler.cache.hooks.endIdle.intercept({
+			name: PLUGIN_NAME,
+			call() {
+				handler(0, "");
+			}
+		});
+		interceptHook(compiler.cache.hooks.endIdle, 0.01, "cache", "end idle");
+		compiler.hooks.beforeRun.intercept({
+			name: PLUGIN_NAME,
+			call() {
+				handler(0, "");
+			}
+		});
+		interceptHook(compiler.hooks.beforeRun, 0.01, "setup", "before run");
+		interceptHook(compiler.hooks.run, 0.02, "setup", "run");
+		interceptHook(compiler.hooks.watchRun, 0.03, "setup", "watch run");
+		interceptHook(
+			compiler.hooks.normalModuleFactory,
+			0.04,
+			"setup",
+			"normal module factory"
+		);
+		interceptHook(
+			compiler.hooks.contextModuleFactory,
+			0.05,
+			"setup",
+			"context module factory"
+		);
+		interceptHook(
+			compiler.hooks.beforeCompile,
+			0.06,
+			"setup",
+			"before compile"
+		);
+		interceptHook(compiler.hooks.compile, 0.07, "setup", "compile");
+		interceptHook(compiler.hooks.thisCompilation, 0.08, "setup", "compilation");
+		interceptHook(compiler.hooks.compilation, 0.09, "setup", "compilation");
+		interceptHook(compiler.hooks.finishMake, 0.69, "building", "finish");
+		interceptHook(compiler.hooks.emit, 0.95, "emitting", "emit");
+		interceptHook(compiler.hooks.afterEmit, 0.98, "emitting", "after emit");
+		interceptHook(compiler.hooks.done, 0.99, "done", "plugins");
+		compiler.hooks.done.intercept({
+			name: PLUGIN_NAME,
+			done() {
+				handler(0.99, "");
+			}
+		});
+		interceptHook(
+			compiler.cache.hooks.storeBuildDependencies,
+			0.99,
+			"cache",
+			"store build dependencies"
+		);
+		interceptHook(compiler.cache.hooks.shutdown, 0.99, "cache", "shutdown");
+		interceptHook(compiler.cache.hooks.beginIdle, 0.99, "cache", "begin idle");
+		interceptHook(
+			compiler.hooks.watchClose,
+			0.99,
+			"end",
+			"closing watch compilation"
+		);
+		compiler.cache.hooks.beginIdle.intercept({
+			name: PLUGIN_NAME,
+			done() {
 				handler(1, "");
-			});
-		}
+			}
+		});
+		compiler.cache.hooks.shutdown.intercept({
+			name: PLUGIN_NAME,
+			done() {
+				handler(1, "");
+			}
+		});
 	}
 }
+
+ProgressPlugin.defaultOptions = DEFAULT_OPTIONS;
+
+ProgressPlugin.createDefaultHandler = createDefaultHandler;
+
 module.exports = ProgressPlugin;
diff --git a/lib/ProvidePlugin.js b/lib/ProvidePlugin.js
index b09d8c864da..68f2d0a8f15 100644
--- a/lib/ProvidePlugin.js
+++ b/lib/ProvidePlugin.js
@@ -2,85 +2,120 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const ParserHelpers = require("./ParserHelpers");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
 const ConstDependency = require("./dependencies/ConstDependency");
+const ProvidedDependency = require("./dependencies/ProvidedDependency");
+const { approve } = require("./javascript/JavascriptParserHelpers");
+
+/** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
 
-const NullFactory = require("./NullFactory");
+const PLUGIN_NAME = "ProvidePlugin";
 
 class ProvidePlugin {
+	/**
+	 * @param {Record} definitions the provided identifiers
+	 */
 	constructor(definitions) {
 		this.definitions = definitions;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		const definitions = this.definitions;
 		compiler.hooks.compilation.tap(
-			"ProvidePlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
 				compilation.dependencyTemplates.set(
 					ConstDependency,
 					new ConstDependency.Template()
 				);
+				compilation.dependencyFactories.set(
+					ProvidedDependency,
+					normalModuleFactory
+				);
+				compilation.dependencyTemplates.set(
+					ProvidedDependency,
+					new ProvidedDependency.Template()
+				);
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {JavascriptParserOptions} parserOptions options
+				 * @returns {void}
+				 */
 				const handler = (parser, parserOptions) => {
-					Object.keys(definitions).forEach(name => {
-						var request = [].concat(definitions[name]);
-						var splittedName = name.split(".");
+					for (const name of Object.keys(definitions)) {
+						const request = [
+							...(Array.isArray(definitions[name])
+								? definitions[name]
+								: [definitions[name]])
+						];
+						const splittedName = name.split(".");
 						if (splittedName.length > 0) {
-							splittedName.slice(1).forEach((_, i) => {
+							for (const [i, _] of splittedName.slice(1).entries()) {
 								const name = splittedName.slice(0, i + 1).join(".");
-								parser.hooks.canRename
-									.for(name)
-									.tap("ProvidePlugin", ParserHelpers.approve);
-							});
-						}
-						parser.hooks.expression.for(name).tap("ProvidePlugin", expr => {
-							let nameIdentifier = name;
-							const scopedName = name.includes(".");
-							let expression = `require(${JSON.stringify(request[0])})`;
-							if (scopedName) {
-								nameIdentifier = `__webpack_provided_${name.replace(
-									/\./g,
-									"_dot_"
-								)}`;
-							}
-							if (request.length > 1) {
-								expression += request
-									.slice(1)
-									.map(r => `[${JSON.stringify(r)}]`)
-									.join("");
-							}
-							if (
-								!ParserHelpers.addParsedVariableToModule(
-									parser,
-									nameIdentifier,
-									expression
-								)
-							) {
-								return false;
-							}
-							if (scopedName) {
-								ParserHelpers.toConstantDependency(parser, nameIdentifier)(
-									expr
-								);
+								parser.hooks.canRename.for(name).tap(PLUGIN_NAME, approve);
 							}
+						}
+
+						parser.hooks.expression.for(name).tap(PLUGIN_NAME, (expr) => {
+							const nameIdentifier = name.includes(".")
+								? `__webpack_provided_${name.replace(/\./g, "_dot_")}`
+								: name;
+							const dep = new ProvidedDependency(
+								request[0],
+								nameIdentifier,
+								request.slice(1),
+								/** @type {Range} */ (expr.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addDependency(dep);
 							return true;
 						});
-					});
+
+						parser.hooks.call.for(name).tap(PLUGIN_NAME, (expr) => {
+							const nameIdentifier = name.includes(".")
+								? `__webpack_provided_${name.replace(/\./g, "_dot_")}`
+								: name;
+							const dep = new ProvidedDependency(
+								request[0],
+								nameIdentifier,
+								request.slice(1),
+								/** @type {Range} */ (expr.callee.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.callee.loc);
+							parser.state.module.addDependency(dep);
+							parser.walkExpressions(expr.arguments);
+							return true;
+						});
+					}
 				};
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("ProvidePlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("ProvidePlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/esm")
-					.tap("ProvidePlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
 			}
 		);
 	}
 }
+
 module.exports = ProvidePlugin;
diff --git a/lib/RawModule.js b/lib/RawModule.js
index ab3fd3ab5bd..3eb0c3eb211 100644
--- a/lib/RawModule.js
+++ b/lib/RawModule.js
@@ -2,38 +2,103 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const Module = require("./Module");
 const { OriginalSource, RawSource } = require("webpack-sources");
+const Module = require("./Module");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("./ModuleSourceTypeConstants");
+const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
+const makeSerializable = require("./util/makeSerializable");
 
-module.exports = class RawModule extends Module {
-	constructor(source, identifier, readableIdentifier) {
-		super("javascript/dynamic", null);
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./Generator").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+
+class RawModule extends Module {
+	/**
+	 * @param {string} source source code
+	 * @param {string} identifier unique identifier
+	 * @param {string=} readableIdentifier readable identifier
+	 * @param {ReadOnlyRuntimeRequirements=} runtimeRequirements runtime requirements needed for the source code
+	 */
+	constructor(source, identifier, readableIdentifier, runtimeRequirements) {
+		super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
 		this.sourceStr = source;
 		this.identifierStr = identifier || this.sourceStr;
 		this.readableIdentifierStr = readableIdentifier || this.identifierStr;
-		this.built = false;
+		this.runtimeRequirements = runtimeRequirements || null;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
 	}
 
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
 	identifier() {
 		return this.identifierStr;
 	}
 
-	size() {
-		return this.sourceStr.length;
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		return Math.max(1, this.sourceStr.length);
 	}
 
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
 	readableIdentifier(requestShortener) {
-		return requestShortener.shorten(this.readableIdentifierStr);
+		return /** @type {string} */ (
+			requestShortener.shorten(this.readableIdentifierStr)
+		);
 	}
 
-	needRebuild() {
-		return false;
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, !this.buildMeta);
 	}
 
-	build(options, compilations, resolver, fs, callback) {
-		this.built = true;
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
 		this.buildMeta = {};
 		this.buildInfo = {
 			cacheable: true
@@ -41,16 +106,75 @@ module.exports = class RawModule extends Module {
 		callback();
 	}
 
-	source() {
-		if (this.useSourceMap) {
-			return new OriginalSource(this.sourceStr, this.identifier());
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
+	 */
+	getSideEffectsConnectionState(moduleGraph) {
+		if (this.factoryMeta !== undefined) {
+			if (this.factoryMeta.sideEffectFree) return false;
+			if (this.factoryMeta.sideEffectFree === false) return true;
+		}
+		return true;
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration(context) {
+		/** @type {Sources} */
+		const sources = new Map();
+		if (this.useSourceMap || this.useSimpleSourceMap) {
+			sources.set(
+				JAVASCRIPT_TYPE,
+				new OriginalSource(this.sourceStr, this.identifier())
+			);
 		} else {
-			return new RawSource(this.sourceStr);
+			sources.set(JAVASCRIPT_TYPE, new RawSource(this.sourceStr));
 		}
+		return { sources, runtimeRequirements: this.runtimeRequirements };
 	}
 
-	updateHash(hash) {
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
 		hash.update(this.sourceStr);
-		super.updateHash(hash);
+		super.updateHash(hash, context);
 	}
-};
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.sourceStr);
+		write(this.identifierStr);
+		write(this.readableIdentifierStr);
+		write(this.runtimeRequirements);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.sourceStr = read();
+		this.identifierStr = read();
+		this.readableIdentifierStr = read();
+		this.runtimeRequirements = read();
+
+		super.deserialize(context);
+	}
+}
+
+makeSerializable(RawModule, "webpack/lib/RawModule");
+
+module.exports = RawModule;
diff --git a/lib/RecordIdsPlugin.js b/lib/RecordIdsPlugin.js
index 88c6a9a3c76..abf1b306c54 100644
--- a/lib/RecordIdsPlugin.js
+++ b/lib/RecordIdsPlugin.js
@@ -2,38 +2,47 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const { compareNumbers } = require("./util/comparators");
 const identifierUtils = require("./util/identifier");
 
-/** @typedef {import("./Compiler")} Compiler */
 /** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Compiler")} Compiler */
 /** @typedef {import("./Module")} Module */
 
 /**
- * @typedef {Object} RecordsChunks
+ * @typedef {object} RecordsChunks
  * @property {Record=} byName
  * @property {Record=} bySource
  * @property {number[]=} usedIds
  */
 
 /**
- * @typedef {Object} RecordsModules
+ * @typedef {object} RecordsModules
  * @property {Record=} byIdentifier
- * @property {Record=} bySource
- * @property {Record=} usedIds
+ * @property {number[]=} usedIds
  */
 
 /**
- * @typedef {Object} Records
+ * @typedef {object} Records
  * @property {RecordsChunks=} chunks
  * @property {RecordsModules=} modules
  */
 
+/**
+ * @typedef {object} RecordIdsPluginOptions
+ * @property {boolean=} portableIds true, when ids need to be portable
+ */
+
+/** @typedef {Set} UsedIds */
+
+const PLUGIN_NAME = "RecordIdsPlugin";
+
 class RecordIdsPlugin {
 	/**
-	 * @param {Object} options Options object
-	 * @param {boolean=} options.portableIds true, when ids need to be portable
+	 * @param {RecordIdsPluginOptions=} options object
 	 */
 	constructor(options) {
 		this.options = options || {};
@@ -45,112 +54,101 @@ class RecordIdsPlugin {
 	 */
 	apply(compiler) {
 		const portableIds = this.options.portableIds;
-		compiler.hooks.compilation.tap("RecordIdsPlugin", compilation => {
-			compilation.hooks.recordModules.tap(
-				"RecordIdsPlugin",
-				/**
-				 * @param {Module[]} modules the modules array
-				 * @param {Records} records the records object
-				 * @returns {void}
-				 */
-				(modules, records) => {
-					if (!records.modules) records.modules = {};
-					if (!records.modules.byIdentifier) records.modules.byIdentifier = {};
-					if (!records.modules.usedIds) records.modules.usedIds = {};
+
+		const makePathsRelative =
+			identifierUtils.makePathsRelative.bindContextCache(
+				compiler.context,
+				compiler.root
+			);
+
+		/**
+		 * @param {Module} module the module
+		 * @returns {string} the (portable) identifier
+		 */
+		const getModuleIdentifier = (module) => {
+			if (portableIds) {
+				return makePathsRelative(module.identifier());
+			}
+			return module.identifier();
+		};
+
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.hooks.recordModules.tap(PLUGIN_NAME, (modules, records) => {
+				const chunkGraph = compilation.chunkGraph;
+				if (!records.modules) records.modules = {};
+				if (!records.modules.byIdentifier) records.modules.byIdentifier = {};
+				/** @type {UsedIds} */
+				const usedIds = new Set();
+				for (const module of modules) {
+					const moduleId = chunkGraph.getModuleId(module);
+					if (typeof moduleId !== "number") continue;
+					const identifier = getModuleIdentifier(module);
+					records.modules.byIdentifier[identifier] = moduleId;
+					usedIds.add(moduleId);
+				}
+				records.modules.usedIds = [...usedIds].sort(compareNumbers);
+			});
+			compilation.hooks.reviveModules.tap(PLUGIN_NAME, (modules, records) => {
+				if (!records.modules) return;
+				if (records.modules.byIdentifier) {
+					const chunkGraph = compilation.chunkGraph;
+					/** @type {UsedIds} */
+					const usedIds = new Set();
 					for (const module of modules) {
-						if (typeof module.id !== "number") continue;
-						const identifier = portableIds
-							? identifierUtils.makePathsRelative(
-									compiler.context,
-									module.identifier(),
-									compilation.cache
-							  )
-							: module.identifier();
-						records.modules.byIdentifier[identifier] = module.id;
-						records.modules.usedIds[module.id] = module.id;
+						const moduleId = chunkGraph.getModuleId(module);
+						if (moduleId !== null) continue;
+						const identifier = getModuleIdentifier(module);
+						const id = records.modules.byIdentifier[identifier];
+						if (id === undefined) continue;
+						if (usedIds.has(id)) continue;
+						usedIds.add(id);
+						chunkGraph.setModuleId(module, id);
 					}
 				}
-			);
-			compilation.hooks.reviveModules.tap(
-				"RecordIdsPlugin",
-				/**
-				 * @param {Module[]} modules the modules array
-				 * @param {Records} records the records object
-				 * @returns {void}
-				 */
-				(modules, records) => {
-					if (!records.modules) return;
-					if (records.modules.byIdentifier) {
-						/** @type {Set} */
-						const usedIds = new Set();
-						for (const module of modules) {
-							if (module.id !== null) continue;
-							const identifier = portableIds
-								? identifierUtils.makePathsRelative(
-										compiler.context,
-										module.identifier(),
-										compilation.cache
-								  )
-								: module.identifier();
-							const id = records.modules.byIdentifier[identifier];
-							if (id === undefined) continue;
-							if (usedIds.has(id)) continue;
-							usedIds.add(id);
-							module.id = id;
-						}
-					}
-					if (Array.isArray(records.modules.usedIds)) {
-						compilation.usedModuleIds = new Set(records.modules.usedIds);
-					}
+				if (Array.isArray(records.modules.usedIds)) {
+					compilation.usedModuleIds = new Set(records.modules.usedIds);
 				}
-			);
+			});
 
-			/**
-			 * @param {Module} module the module
-			 * @returns {string} the (portable) identifier
-			 */
-			const getModuleIdentifier = module => {
-				if (portableIds) {
-					return identifierUtils.makePathsRelative(
-						compiler.context,
-						module.identifier(),
-						compilation.cache
-					);
-				}
-				return module.identifier();
-			};
+			/** @typedef {string[]} ChunkSources */
 
 			/**
 			 * @param {Chunk} chunk the chunk
-			 * @returns {string[]} sources of the chunk
+			 * @returns {ChunkSources} sources of the chunk
 			 */
-			const getChunkSources = chunk => {
-				/** @type {string[]} */
+			const getChunkSources = (chunk) => {
+				/** @type {ChunkSources} */
 				const sources = [];
 				for (const chunkGroup of chunk.groupsIterable) {
 					const index = chunkGroup.chunks.indexOf(chunk);
-					for (const origin of chunkGroup.origins) {
-						if (origin.module) {
-							if (origin.request) {
-								sources.push(
-									`${index} ${getModuleIdentifier(origin.module)} ${
-										origin.request
-									}`
-								);
-							} else if (typeof origin.loc === "string") {
-								sources.push(
-									`${index} ${getModuleIdentifier(origin.module)} ${origin.loc}`
-								);
-							} else if (
-								origin.loc &&
-								typeof origin.loc === "object" &&
-								origin.loc.start
-							) {
-								sources.push(
-									`${index} ${getModuleIdentifier(
-										origin.module
-									)} ${JSON.stringify(origin.loc.start)}`
-								);
+					if (chunkGroup.name) {
+						sources.push(`${index} ${chunkGroup.name}`);
+					} else {
+						for (const origin of chunkGroup.origins) {
+							if (origin.module) {
+								if (origin.request) {
+									sources.push(
+										`${index} ${getModuleIdentifier(origin.module)} ${
+											origin.request
+										}`
+									);
+								} else if (typeof origin.loc === "string") {
+									sources.push(
+										`${index} ${getModuleIdentifier(origin.module)} ${
+											origin.loc
+										}`
+									);
+								} else if (
+									origin.loc &&
+									typeof origin.loc === "object" &&
+									"start" in origin.loc
+								) {
+									sources.push(
+										`${index} ${getModuleIdentifier(
+											origin.module
+										)} ${JSON.stringify(origin.loc.start)}`
+									);
+								}
 							}
 						}
 					}
@@ -158,73 +156,61 @@ class RecordIdsPlugin {
 				return sources;
 			};
 
-			compilation.hooks.recordChunks.tap(
-				"RecordIdsPlugin",
-				/**
-				 * @param {Chunk[]} chunks the chunks array
-				 * @param {Records} records the records object
-				 * @returns {void}
-				 */
-				(chunks, records) => {
-					if (!records.chunks) records.chunks = {};
-					if (!records.chunks.byName) records.chunks.byName = {};
-					if (!records.chunks.bySource) records.chunks.bySource = {};
-					/** @type {Set} */
-					const usedIds = new Set();
+			compilation.hooks.recordChunks.tap(PLUGIN_NAME, (chunks, records) => {
+				if (!records.chunks) records.chunks = {};
+				if (!records.chunks.byName) records.chunks.byName = {};
+				if (!records.chunks.bySource) records.chunks.bySource = {};
+				/** @type {UsedIds} */
+				const usedIds = new Set();
+				for (const chunk of chunks) {
+					if (typeof chunk.id !== "number") continue;
+					const name = chunk.name;
+					if (name) records.chunks.byName[name] = chunk.id;
+					const sources = getChunkSources(chunk);
+					for (const source of sources) {
+						records.chunks.bySource[source] = chunk.id;
+					}
+					usedIds.add(chunk.id);
+				}
+				records.chunks.usedIds = [...usedIds].sort(compareNumbers);
+			});
+			compilation.hooks.reviveChunks.tap(PLUGIN_NAME, (chunks, records) => {
+				if (!records.chunks) return;
+				/** @type {UsedIds} */
+				const usedIds = new Set();
+				if (records.chunks.byName) {
 					for (const chunk of chunks) {
-						if (typeof chunk.id !== "number") continue;
-						const name = chunk.name;
-						if (name) records.chunks.byName[name] = chunk.id;
-						const sources = getChunkSources(chunk);
-						for (const source of sources) {
-							records.chunks.bySource[source] = chunk.id;
-						}
-						usedIds.add(chunk.id);
+						if (chunk.id !== null) continue;
+						if (!chunk.name) continue;
+						const id = records.chunks.byName[chunk.name];
+						if (id === undefined) continue;
+						if (usedIds.has(id)) continue;
+						usedIds.add(id);
+						chunk.id = id;
+						chunk.ids = [id];
 					}
-					records.chunks.usedIds = Array.from(usedIds).sort();
 				}
-			);
-			compilation.hooks.reviveChunks.tap(
-				"RecordIdsPlugin",
-				/**
-				 * @param {Chunk[]} chunks the chunks array
-				 * @param {Records} records the records object
-				 * @returns {void}
-				 */
-				(chunks, records) => {
-					if (!records.chunks) return;
-					/** @type {Set} */
-					const usedIds = new Set();
-					if (records.chunks.byName) {
-						for (const chunk of chunks) {
-							if (chunk.id !== null) continue;
-							if (!chunk.name) continue;
-							const id = records.chunks.byName[chunk.name];
+				if (records.chunks.bySource) {
+					for (const chunk of chunks) {
+						if (chunk.id !== null) continue;
+						const sources = getChunkSources(chunk);
+						for (const source of sources) {
+							const id = records.chunks.bySource[source];
 							if (id === undefined) continue;
 							if (usedIds.has(id)) continue;
 							usedIds.add(id);
 							chunk.id = id;
+							chunk.ids = [id];
+							break;
 						}
 					}
-					if (records.chunks.bySource) {
-						for (const chunk of chunks) {
-							const sources = getChunkSources(chunk);
-							for (const source of sources) {
-								const id = records.chunks.bySource[source];
-								if (id === undefined) continue;
-								if (usedIds.has(id)) continue;
-								usedIds.add(id);
-								chunk.id = id;
-								break;
-							}
-						}
-					}
-					if (Array.isArray(records.chunks.usedIds)) {
-						compilation.usedChunkIds = new Set(records.chunks.usedIds);
-					}
 				}
-			);
+				if (Array.isArray(records.chunks.usedIds)) {
+					compilation.usedChunkIds = new Set(records.chunks.usedIds);
+				}
+			});
 		});
 	}
 }
+
 module.exports = RecordIdsPlugin;
diff --git a/lib/RemovedPluginError.js b/lib/RemovedPluginError.js
deleted file mode 100644
index 626c3b4fb2c..00000000000
--- a/lib/RemovedPluginError.js
+++ /dev/null
@@ -1,11 +0,0 @@
-"use strict";
-
-const WebpackError = require("./WebpackError");
-
-module.exports = class RemovedPluginError extends WebpackError {
-	constructor(message) {
-		super(message);
-
-		Error.captureStackTrace(this, this.constructor);
-	}
-};
diff --git a/lib/RequestShortener.js b/lib/RequestShortener.js
index 7b007816a8c..b39bc2e7384 100644
--- a/lib/RequestShortener.js
+++ b/lib/RequestShortener.js
@@ -2,81 +2,34 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-"use strict";
 
-const path = require("path");
-const NORMALIZE_SLASH_DIRECTION_REGEXP = /\\/g;
-const PATH_CHARS_REGEXP = /[-[\]{}()*+?.,\\^$|#\s]/g;
-const SEPARATOR_REGEXP = /[/\\]$/;
-const FRONT_OR_BACK_BANG_REGEXP = /^!|!$/g;
-const INDEX_JS_REGEXP = /\/index.js(!|\?|\(query\))/g;
-const MATCH_RESOURCE_REGEXP = /!=!/;
+"use strict";
 
-const normalizeBackSlashDirection = request => {
-	return request.replace(NORMALIZE_SLASH_DIRECTION_REGEXP, "/");
-};
+const { contextify } = require("./util/identifier");
 
-const createRegExpForPath = path => {
-	const regexpTypePartial = path.replace(PATH_CHARS_REGEXP, "\\$&");
-	return new RegExp(`(^|!)${regexpTypePartial}`, "g");
-};
+/** @typedef {import("./util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
 
 class RequestShortener {
-	constructor(directory) {
-		directory = normalizeBackSlashDirection(directory);
-		if (SEPARATOR_REGEXP.test(directory)) {
-			directory = directory.substr(0, directory.length - 1);
-		}
-
-		if (directory) {
-			this.currentDirectoryRegExp = createRegExpForPath(directory);
-		}
-
-		const dirname = path.dirname(directory);
-		const endsWithSeparator = SEPARATOR_REGEXP.test(dirname);
-		const parentDirectory = endsWithSeparator
-			? dirname.substr(0, dirname.length - 1)
-			: dirname;
-		if (parentDirectory && parentDirectory !== directory) {
-			this.parentDirectoryRegExp = createRegExpForPath(parentDirectory);
-		}
-
-		if (__dirname.length >= 2) {
-			const buildins = normalizeBackSlashDirection(path.join(__dirname, ".."));
-			const buildinsAsModule =
-				this.currentDirectoryRegExp &&
-				this.currentDirectoryRegExp.test(buildins);
-			this.buildinsAsModule = buildinsAsModule;
-			this.buildinsRegExp = createRegExpForPath(buildins);
-		}
-
-		this.cache = new Map();
+	/**
+	 * @param {string} dir the directory
+	 * @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
+	 */
+	constructor(dir, associatedObjectForCache) {
+		this.contextify = contextify.bindContextCache(
+			dir,
+			associatedObjectForCache
+		);
 	}
 
+	/**
+	 * @param {string | undefined | null} request the request to shorten
+	 * @returns {string | undefined | null} the shortened request
+	 */
 	shorten(request) {
-		if (!request) return request;
-		const cacheEntry = this.cache.get(request);
-		if (cacheEntry !== undefined) {
-			return cacheEntry;
-		}
-		let result = normalizeBackSlashDirection(request);
-		if (this.buildinsAsModule && this.buildinsRegExp) {
-			result = result.replace(this.buildinsRegExp, "!(webpack)");
-		}
-		if (this.currentDirectoryRegExp) {
-			result = result.replace(this.currentDirectoryRegExp, "!.");
-		}
-		if (this.parentDirectoryRegExp) {
-			result = result.replace(this.parentDirectoryRegExp, "!..");
-		}
-		if (!this.buildinsAsModule && this.buildinsRegExp) {
-			result = result.replace(this.buildinsRegExp, "!(webpack)");
+		if (!request) {
+			return request;
 		}
-		result = result.replace(INDEX_JS_REGEXP, "$1");
-		result = result.replace(FRONT_OR_BACK_BANG_REGEXP, "");
-		result = result.replace(MATCH_RESOURCE_REGEXP, " = ");
-		this.cache.set(request, result);
-		return result;
+		return this.contextify(request);
 	}
 }
 
diff --git a/lib/RequireJsStuffPlugin.js b/lib/RequireJsStuffPlugin.js
index 84793c8a997..c9acc6643dd 100644
--- a/lib/RequireJsStuffPlugin.js
+++ b/lib/RequireJsStuffPlugin.js
@@ -2,67 +2,82 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const ParserHelpers = require("./ParserHelpers");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC
+} = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const ConstDependency = require("./dependencies/ConstDependency");
-const NullFactory = require("./NullFactory");
+const {
+	toConstantDependency
+} = require("./javascript/JavascriptParserHelpers");
+
+/** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+
+const PLUGIN_NAME = "RequireJsStuffPlugin";
 
 module.exports = class RequireJsStuffPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"RequireJsStuffPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(ConstDependency, new NullFactory());
 				compilation.dependencyTemplates.set(
 					ConstDependency,
 					new ConstDependency.Template()
 				);
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {JavascriptParserOptions} parserOptions options
+				 * @returns {void}
+				 */
 				const handler = (parser, parserOptions) => {
 					if (
-						typeof parserOptions.requireJs !== "undefined" &&
+						parserOptions.requireJs === undefined ||
 						!parserOptions.requireJs
-					)
+					) {
 						return;
+					}
 
 					parser.hooks.call
 						.for("require.config")
-						.tap(
-							"RequireJsStuffPlugin",
-							ParserHelpers.toConstantDependency(parser, "undefined")
-						);
+						.tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
 					parser.hooks.call
 						.for("requirejs.config")
-						.tap(
-							"RequireJsStuffPlugin",
-							ParserHelpers.toConstantDependency(parser, "undefined")
-						);
+						.tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
 
 					parser.hooks.expression
 						.for("require.version")
 						.tap(
-							"RequireJsStuffPlugin",
-							ParserHelpers.toConstantDependency(
-								parser,
-								JSON.stringify("0.0.0")
-							)
+							PLUGIN_NAME,
+							toConstantDependency(parser, JSON.stringify("0.0.0"))
 						);
 					parser.hooks.expression
 						.for("requirejs.onError")
 						.tap(
-							"RequireJsStuffPlugin",
-							ParserHelpers.toConstantDependencyWithWebpackRequire(
+							PLUGIN_NAME,
+							toConstantDependency(
 								parser,
-								"__webpack_require__.oe"
+								RuntimeGlobals.uncaughtErrorHandler,
+								[RuntimeGlobals.uncaughtErrorHandler]
 							)
 						);
 				};
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("RequireJsStuffPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("RequireJsStuffPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
 			}
 		);
 	}
diff --git a/lib/ResolverFactory.js b/lib/ResolverFactory.js
index 47028ee7ffe..62f7e05db9e 100644
--- a/lib/ResolverFactory.js
+++ b/lib/ResolverFactory.js
@@ -1,64 +1,156 @@
 /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
 "use strict";
 
-const { Tapable, HookMap, SyncHook, SyncWaterfallHook } = require("tapable");
 const Factory = require("enhanced-resolve").ResolverFactory;
+const { HookMap, SyncHook, SyncWaterfallHook } = require("tapable");
+const {
+	cachedCleverMerge,
+	removeOperations,
+	resolveByProperty
+} = require("./util/cleverMerge");
+
+/** @typedef {import("enhanced-resolve").ResolveOptions} ResolveOptions */
+/** @typedef {import("enhanced-resolve").Resolver} Resolver */
+/** @typedef {import("../declarations/WebpackOptions").ResolveOptions} WebpackResolveOptions */
+/** @typedef {import("../declarations/WebpackOptions").ResolvePluginInstance} ResolvePluginInstance */
+
+/** @typedef {WebpackResolveOptions & { dependencyType?: string, resolveToContext?: boolean }} ResolveOptionsWithDependencyType */
+/**
+ * @typedef {object} WithOptions
+ * @property {(options: Partial) => ResolverWithOptions} withOptions create a resolver with additional/different options
+ */
+
+/** @typedef {Resolver & WithOptions} ResolverWithOptions */
+
+// need to be hoisted on module level for caching identity
+/** @type {ResolveOptionsWithDependencyType} */
+const EMPTY_RESOLVE_OPTIONS = {};
+
+/**
+ * @param {ResolveOptionsWithDependencyType} resolveOptionsWithDepType enhanced options
+ * @returns {ResolveOptions} merged options
+ */
+const convertToResolveOptions = (resolveOptionsWithDepType) => {
+	const { dependencyType, plugins, ...remaining } = resolveOptionsWithDepType;
+
+	// check type compat
+	/** @type {Partial} */
+	const partialOptions = {
+		...remaining,
+		plugins:
+			plugins &&
+			/** @type {ResolvePluginInstance[]} */ (
+				plugins.filter((item) => item !== "...")
+			)
+	};
+
+	if (!partialOptions.fileSystem) {
+		throw new Error(
+			"fileSystem is missing in resolveOptions, but it's required for enhanced-resolve"
+		);
+	}
+	// These weird types validate that we checked all non-optional properties
+	const options =
+		/** @type {Partial & Pick} */ (
+			partialOptions
+		);
+
+	return /** @type {ResolveOptions} */ (
+		removeOperations(
+			resolveByProperty(options, "byDependency", dependencyType),
+			// Keep the `unsafeCache` because it can be a `Proxy`
+			["unsafeCache"]
+		)
+	);
+};
 
-module.exports = class ResolverFactory extends Tapable {
+/**
+ * @typedef {object} ResolverCache
+ * @property {WeakMap} direct
+ * @property {Map} stringified
+ */
+
+module.exports = class ResolverFactory {
 	constructor() {
-		super();
-		this.hooks = {
+		this.hooks = Object.freeze({
+			/** @type {HookMap>} */
 			resolveOptions: new HookMap(
 				() => new SyncWaterfallHook(["resolveOptions"])
 			),
-			resolver: new HookMap(() => new SyncHook(["resolver", "resolveOptions"]))
-		};
-		this._pluginCompat.tap("ResolverFactory", options => {
-			let match;
-			match = /^resolve-options (.+)$/.exec(options.name);
-			if (match) {
-				this.hooks.resolveOptions.tap(
-					match[1],
-					options.fn.name || "unnamed compat plugin",
-					options.fn
-				);
-				return true;
-			}
-			match = /^resolver (.+)$/.exec(options.name);
-			if (match) {
-				this.hooks.resolver.tap(
-					match[1],
-					options.fn.name || "unnamed compat plugin",
-					options.fn
-				);
-				return true;
-			}
+			/** @type {HookMap>} */
+			resolver: new HookMap(
+				() => new SyncHook(["resolver", "resolveOptions", "userResolveOptions"])
+			)
 		});
-		this.cache1 = new WeakMap();
-		this.cache2 = new Map();
+		/** @type {Map} */
+		this.cache = new Map();
 	}
 
-	get(type, resolveOptions) {
-		const cachedResolver = this.cache1.get(resolveOptions);
-		if (cachedResolver) return cachedResolver();
-		const ident = `${type}|${JSON.stringify(resolveOptions)}`;
-		const resolver = this.cache2.get(ident);
-		if (resolver) return resolver;
+	/**
+	 * @param {string} type type of resolver
+	 * @param {ResolveOptionsWithDependencyType=} resolveOptions options
+	 * @returns {ResolverWithOptions} the resolver
+	 */
+	get(type, resolveOptions = EMPTY_RESOLVE_OPTIONS) {
+		let typedCaches = this.cache.get(type);
+		if (!typedCaches) {
+			typedCaches = {
+				direct: new WeakMap(),
+				stringified: new Map()
+			};
+			this.cache.set(type, typedCaches);
+		}
+		const cachedResolver = typedCaches.direct.get(resolveOptions);
+		if (cachedResolver) {
+			return cachedResolver;
+		}
+		const ident = JSON.stringify(resolveOptions);
+		const resolver = typedCaches.stringified.get(ident);
+		if (resolver) {
+			typedCaches.direct.set(resolveOptions, resolver);
+			return resolver;
+		}
 		const newResolver = this._create(type, resolveOptions);
-		this.cache2.set(ident, newResolver);
+		typedCaches.direct.set(resolveOptions, newResolver);
+		typedCaches.stringified.set(ident, newResolver);
 		return newResolver;
 	}
 
-	_create(type, resolveOptions) {
-		resolveOptions = this.hooks.resolveOptions.for(type).call(resolveOptions);
-		const resolver = Factory.createResolver(resolveOptions);
+	/**
+	 * @param {string} type type of resolver
+	 * @param {ResolveOptionsWithDependencyType} resolveOptionsWithDepType options
+	 * @returns {ResolverWithOptions} the resolver
+	 */
+	_create(type, resolveOptionsWithDepType) {
+		/** @type {ResolveOptionsWithDependencyType} */
+		const originalResolveOptions = { ...resolveOptionsWithDepType };
+
+		const resolveOptions = convertToResolveOptions(
+			this.hooks.resolveOptions.for(type).call(resolveOptionsWithDepType)
+		);
+		const resolver = /** @type {ResolverWithOptions} */ (
+			Factory.createResolver(resolveOptions)
+		);
 		if (!resolver) {
 			throw new Error("No resolver created");
 		}
-		this.hooks.resolver.for(type).call(resolver, resolveOptions);
+		/** @type {WeakMap, ResolverWithOptions>} */
+		const childCache = new WeakMap();
+		resolver.withOptions = (options) => {
+			const cacheEntry = childCache.get(options);
+			if (cacheEntry !== undefined) return cacheEntry;
+			const mergedOptions = cachedCleverMerge(originalResolveOptions, options);
+			const resolver = this.get(type, mergedOptions);
+			childCache.set(options, resolver);
+			return resolver;
+		};
+		this.hooks.resolver
+			.for(type)
+			.call(resolver, resolveOptions, originalResolveOptions);
 		return resolver;
 	}
 };
diff --git a/lib/RuleSet.js b/lib/RuleSet.js
deleted file mode 100644
index abc44c1a9b4..00000000000
--- a/lib/RuleSet.js
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-/*
-: 
-: []
-: {
-	resource: {
-		test: ,
-		include: ,
-		exclude: ,
-	},
-	resource: , -> resource.test
-	test: , -> resource.test
-	include: , -> resource.include
-	exclude: , -> resource.exclude
-	resourceQuery: ,
-	compiler: ,
-	issuer: ,
-	use: "loader", -> use[0].loader
-	loader: <>, -> use[0].loader
-	loaders: <>, -> use
-	options: {}, -> use[0].options,
-	query: {}, -> options
-	parser: {},
-	use: [
-		"loader" -> use[x].loader
-	],
-	use: [
-		{
-			loader: "loader",
-			options: {}
-		}
-	],
-	rules: [
-		
-	],
-	oneOf: [
-		
-	]
-}
-
-: /regExp/
-: function(arg) {}
-: "starting"
-: [] // or
-: { and: [] }
-: { or: [] }
-: { not: [] }
-: { test: , include: , exclude:  }
-
-
-normalized:
-
-{
-	resource: function(),
-	resourceQuery: function(),
-	compiler: function(),
-	issuer: function(),
-	use: [
-		{
-			loader: string,
-			options: string,
-			: 
-		}
-	],
-	rules: [],
-	oneOf: [],
-	: ,
-}
-
-*/
-
-"use strict";
-
-const notMatcher = matcher => {
-	return function(str) {
-		return !matcher(str);
-	};
-};
-
-const orMatcher = items => {
-	return function(str) {
-		for (let i = 0; i < items.length; i++) {
-			if (items[i](str)) return true;
-		}
-		return false;
-	};
-};
-
-const andMatcher = items => {
-	return function(str) {
-		for (let i = 0; i < items.length; i++) {
-			if (!items[i](str)) return false;
-		}
-		return true;
-	};
-};
-
-module.exports = class RuleSet {
-	constructor(rules) {
-		this.references = Object.create(null);
-		this.rules = RuleSet.normalizeRules(rules, this.references, "ref-");
-	}
-
-	static normalizeRules(rules, refs, ident) {
-		if (Array.isArray(rules)) {
-			return rules.map((rule, idx) => {
-				return RuleSet.normalizeRule(rule, refs, `${ident}-${idx}`);
-			});
-		} else if (rules) {
-			return [RuleSet.normalizeRule(rules, refs, ident)];
-		} else {
-			return [];
-		}
-	}
-
-	static normalizeRule(rule, refs, ident) {
-		if (typeof rule === "string") {
-			return {
-				use: [
-					{
-						loader: rule
-					}
-				]
-			};
-		}
-		if (!rule) {
-			throw new Error("Unexcepted null when object was expected as rule");
-		}
-		if (typeof rule !== "object") {
-			throw new Error(
-				"Unexcepted " +
-					typeof rule +
-					" when object was expected as rule (" +
-					rule +
-					")"
-			);
-		}
-
-		const newRule = {};
-		let useSource;
-		let resourceSource;
-		let condition;
-
-		const checkUseSource = newSource => {
-			if (useSource && useSource !== newSource) {
-				throw new Error(
-					RuleSet.buildErrorMessage(
-						rule,
-						new Error(
-							"Rule can only have one result source (provided " +
-								newSource +
-								" and " +
-								useSource +
-								")"
-						)
-					)
-				);
-			}
-			useSource = newSource;
-		};
-
-		const checkResourceSource = newSource => {
-			if (resourceSource && resourceSource !== newSource) {
-				throw new Error(
-					RuleSet.buildErrorMessage(
-						rule,
-						new Error(
-							"Rule can only have one resource source (provided " +
-								newSource +
-								" and " +
-								resourceSource +
-								")"
-						)
-					)
-				);
-			}
-			resourceSource = newSource;
-		};
-
-		if (rule.test || rule.include || rule.exclude) {
-			checkResourceSource("test + include + exclude");
-			condition = {
-				test: rule.test,
-				include: rule.include,
-				exclude: rule.exclude
-			};
-			try {
-				newRule.resource = RuleSet.normalizeCondition(condition);
-			} catch (error) {
-				throw new Error(RuleSet.buildErrorMessage(condition, error));
-			}
-		}
-
-		if (rule.resource) {
-			checkResourceSource("resource");
-			try {
-				newRule.resource = RuleSet.normalizeCondition(rule.resource);
-			} catch (error) {
-				throw new Error(RuleSet.buildErrorMessage(rule.resource, error));
-			}
-		}
-
-		if (rule.realResource) {
-			try {
-				newRule.realResource = RuleSet.normalizeCondition(rule.realResource);
-			} catch (error) {
-				throw new Error(RuleSet.buildErrorMessage(rule.realResource, error));
-			}
-		}
-
-		if (rule.resourceQuery) {
-			try {
-				newRule.resourceQuery = RuleSet.normalizeCondition(rule.resourceQuery);
-			} catch (error) {
-				throw new Error(RuleSet.buildErrorMessage(rule.resourceQuery, error));
-			}
-		}
-
-		if (rule.compiler) {
-			try {
-				newRule.compiler = RuleSet.normalizeCondition(rule.compiler);
-			} catch (error) {
-				throw new Error(RuleSet.buildErrorMessage(rule.compiler, error));
-			}
-		}
-
-		if (rule.issuer) {
-			try {
-				newRule.issuer = RuleSet.normalizeCondition(rule.issuer);
-			} catch (error) {
-				throw new Error(RuleSet.buildErrorMessage(rule.issuer, error));
-			}
-		}
-
-		if (rule.loader && rule.loaders) {
-			throw new Error(
-				RuleSet.buildErrorMessage(
-					rule,
-					new Error(
-						"Provided loader and loaders for rule (use only one of them)"
-					)
-				)
-			);
-		}
-
-		const loader = rule.loaders || rule.loader;
-		if (typeof loader === "string" && !rule.options && !rule.query) {
-			checkUseSource("loader");
-			newRule.use = RuleSet.normalizeUse(loader.split("!"), ident);
-		} else if (typeof loader === "string" && (rule.options || rule.query)) {
-			checkUseSource("loader + options/query");
-			newRule.use = RuleSet.normalizeUse(
-				{
-					loader: loader,
-					options: rule.options,
-					query: rule.query
-				},
-				ident
-			);
-		} else if (loader && (rule.options || rule.query)) {
-			throw new Error(
-				RuleSet.buildErrorMessage(
-					rule,
-					new Error(
-						"options/query cannot be used with loaders (use options for each array item)"
-					)
-				)
-			);
-		} else if (loader) {
-			checkUseSource("loaders");
-			newRule.use = RuleSet.normalizeUse(loader, ident);
-		} else if (rule.options || rule.query) {
-			throw new Error(
-				RuleSet.buildErrorMessage(
-					rule,
-					new Error(
-						"options/query provided without loader (use loader + options)"
-					)
-				)
-			);
-		}
-
-		if (rule.use) {
-			checkUseSource("use");
-			newRule.use = RuleSet.normalizeUse(rule.use, ident);
-		}
-
-		if (rule.rules) {
-			newRule.rules = RuleSet.normalizeRules(
-				rule.rules,
-				refs,
-				`${ident}-rules`
-			);
-		}
-
-		if (rule.oneOf) {
-			newRule.oneOf = RuleSet.normalizeRules(
-				rule.oneOf,
-				refs,
-				`${ident}-oneOf`
-			);
-		}
-
-		const keys = Object.keys(rule).filter(key => {
-			return ![
-				"resource",
-				"resourceQuery",
-				"compiler",
-				"test",
-				"include",
-				"exclude",
-				"issuer",
-				"loader",
-				"options",
-				"query",
-				"loaders",
-				"use",
-				"rules",
-				"oneOf"
-			].includes(key);
-		});
-		for (const key of keys) {
-			newRule[key] = rule[key];
-		}
-
-		if (Array.isArray(newRule.use)) {
-			for (const item of newRule.use) {
-				if (item.ident) {
-					refs[item.ident] = item.options;
-				}
-			}
-		}
-
-		return newRule;
-	}
-
-	static buildErrorMessage(condition, error) {
-		const conditionAsText = JSON.stringify(
-			condition,
-			(key, value) => {
-				return value === undefined ? "undefined" : value;
-			},
-			2
-		);
-		return error.message + " in " + conditionAsText;
-	}
-
-	static normalizeUse(use, ident) {
-		if (typeof use === "function") {
-			return data => RuleSet.normalizeUse(use(data), ident);
-		}
-		if (Array.isArray(use)) {
-			return use
-				.map((item, idx) => RuleSet.normalizeUse(item, `${ident}-${idx}`))
-				.reduce((arr, items) => arr.concat(items), []);
-		}
-		return [RuleSet.normalizeUseItem(use, ident)];
-	}
-
-	static normalizeUseItemString(useItemString) {
-		const idx = useItemString.indexOf("?");
-		if (idx >= 0) {
-			return {
-				loader: useItemString.substr(0, idx),
-				options: useItemString.substr(idx + 1)
-			};
-		}
-		return {
-			loader: useItemString,
-			options: undefined
-		};
-	}
-
-	static normalizeUseItem(item, ident) {
-		if (typeof item === "string") {
-			return RuleSet.normalizeUseItemString(item);
-		}
-
-		const newItem = {};
-
-		if (item.options && item.query) {
-			throw new Error("Provided options and query in use");
-		}
-
-		if (!item.loader) {
-			throw new Error("No loader specified");
-		}
-
-		newItem.options = item.options || item.query;
-
-		if (typeof newItem.options === "object" && newItem.options) {
-			if (newItem.options.ident) {
-				newItem.ident = newItem.options.ident;
-			} else {
-				newItem.ident = ident;
-			}
-		}
-
-		const keys = Object.keys(item).filter(function(key) {
-			return !["options", "query"].includes(key);
-		});
-
-		for (const key of keys) {
-			newItem[key] = item[key];
-		}
-
-		return newItem;
-	}
-
-	static normalizeCondition(condition) {
-		if (!condition) throw new Error("Expected condition but got falsy value");
-		if (typeof condition === "string") {
-			return str => str.indexOf(condition) === 0;
-		}
-		if (typeof condition === "function") {
-			return condition;
-		}
-		if (condition instanceof RegExp) {
-			return condition.test.bind(condition);
-		}
-		if (Array.isArray(condition)) {
-			const items = condition.map(c => RuleSet.normalizeCondition(c));
-			return orMatcher(items);
-		}
-		if (typeof condition !== "object") {
-			throw Error(
-				"Unexcepted " +
-					typeof condition +
-					" when condition was expected (" +
-					condition +
-					")"
-			);
-		}
-
-		const matchers = [];
-		Object.keys(condition).forEach(key => {
-			const value = condition[key];
-			switch (key) {
-				case "or":
-				case "include":
-				case "test":
-					if (value) matchers.push(RuleSet.normalizeCondition(value));
-					break;
-				case "and":
-					if (value) {
-						const items = value.map(c => RuleSet.normalizeCondition(c));
-						matchers.push(andMatcher(items));
-					}
-					break;
-				case "not":
-				case "exclude":
-					if (value) {
-						const matcher = RuleSet.normalizeCondition(value);
-						matchers.push(notMatcher(matcher));
-					}
-					break;
-				default:
-					throw new Error("Unexcepted property " + key + " in condition");
-			}
-		});
-		if (matchers.length === 0) {
-			throw new Error("Excepted condition but got " + condition);
-		}
-		if (matchers.length === 1) {
-			return matchers[0];
-		}
-		return andMatcher(matchers);
-	}
-
-	exec(data) {
-		const result = [];
-		this._run(
-			data,
-			{
-				rules: this.rules
-			},
-			result
-		);
-		return result;
-	}
-
-	_run(data, rule, result) {
-		// test conditions
-		if (rule.resource && !data.resource) return false;
-		if (rule.realResource && !data.realResource) return false;
-		if (rule.resourceQuery && !data.resourceQuery) return false;
-		if (rule.compiler && !data.compiler) return false;
-		if (rule.issuer && !data.issuer) return false;
-		if (rule.resource && !rule.resource(data.resource)) return false;
-		if (rule.realResource && !rule.realResource(data.realResource))
-			return false;
-		if (data.issuer && rule.issuer && !rule.issuer(data.issuer)) return false;
-		if (
-			data.resourceQuery &&
-			rule.resourceQuery &&
-			!rule.resourceQuery(data.resourceQuery)
-		) {
-			return false;
-		}
-		if (data.compiler && rule.compiler && !rule.compiler(data.compiler)) {
-			return false;
-		}
-
-		// apply
-		const keys = Object.keys(rule).filter(key => {
-			return ![
-				"resource",
-				"realResource",
-				"resourceQuery",
-				"compiler",
-				"issuer",
-				"rules",
-				"oneOf",
-				"use",
-				"enforce"
-			].includes(key);
-		});
-		for (const key of keys) {
-			result.push({
-				type: key,
-				value: rule[key]
-			});
-		}
-
-		if (rule.use) {
-			const process = use => {
-				if (typeof use === "function") {
-					process(use(data));
-				} else if (Array.isArray(use)) {
-					use.forEach(process);
-				} else {
-					result.push({
-						type: "use",
-						value: use,
-						enforce: rule.enforce
-					});
-				}
-			};
-			process(rule.use);
-		}
-
-		if (rule.rules) {
-			for (let i = 0; i < rule.rules.length; i++) {
-				this._run(data, rule.rules[i], result);
-			}
-		}
-
-		if (rule.oneOf) {
-			for (let i = 0; i < rule.oneOf.length; i++) {
-				if (this._run(data, rule.oneOf[i], result)) break;
-			}
-		}
-
-		return true;
-	}
-
-	findOptionsByIdent(ident) {
-		const options = this.references[ident];
-		if (!options) {
-			throw new Error("Can't find options with ident '" + ident + "'");
-		}
-		return options;
-	}
-};
diff --git a/lib/RuntimeGlobals.js b/lib/RuntimeGlobals.js
new file mode 100644
index 00000000000..80e906bea29
--- /dev/null
+++ b/lib/RuntimeGlobals.js
@@ -0,0 +1,456 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/**
+ * the AMD define function
+ */
+module.exports.amdDefine = "__webpack_require__.amdD";
+
+/**
+ * the AMD options
+ */
+module.exports.amdOptions = "__webpack_require__.amdO";
+
+/**
+ * Creates an async module. The body function must be a async function.
+ * "module.exports" will be decorated with an AsyncModulePromise.
+ * The body function will be called.
+ * To handle async dependencies correctly do this: "([a, b, c] = await handleDependencies([a, b, c]));".
+ * If "hasAwaitAfterDependencies" is truthy, "handleDependencies()" must be called at the end of the body function.
+ * Signature: function(
+ * module: Module,
+ * body: (handleDependencies: (deps: AsyncModulePromise[]) => Promise & () => void,
+ * hasAwaitAfterDependencies?: boolean
+ * ) => void
+ */
+module.exports.asyncModule = "__webpack_require__.a";
+
+/**
+ * The internal symbol that asyncModule is using.
+ */
+module.exports.asyncModuleDoneSymbol = "__webpack_require__.aD";
+
+/**
+ * The internal symbol that asyncModule is using.
+ */
+module.exports.asyncModuleExportSymbol = "__webpack_require__.aE";
+
+/**
+ * the baseURI of current document
+ */
+module.exports.baseURI = "__webpack_require__.b";
+
+/**
+ * global callback functions for installing chunks
+ */
+module.exports.chunkCallback = "webpackChunk";
+
+/**
+ * the chunk name of the chunk with the runtime
+ */
+module.exports.chunkName = "__webpack_require__.cn";
+
+/**
+ * compatibility get default export
+ */
+module.exports.compatGetDefaultExport = "__webpack_require__.n";
+
+/**
+ * compile a wasm module from id and hash, returning WebAssembly.Module
+ */
+module.exports.compileWasm = "__webpack_require__.vs";
+
+/**
+ * create a fake namespace object
+ */
+module.exports.createFakeNamespaceObject = "__webpack_require__.t";
+
+/**
+ * function to promote a string to a TrustedScript using webpack's Trusted
+ * Types policy
+ * Arguments: (script: string) => TrustedScript
+ */
+module.exports.createScript = "__webpack_require__.ts";
+
+/**
+ * function to promote a string to a TrustedScriptURL using webpack's Trusted
+ * Types policy
+ * Arguments: (url: string) => TrustedScriptURL
+ */
+module.exports.createScriptUrl = "__webpack_require__.tu";
+
+/**
+ * merge multiple CSS stylesheets (CSSStyleSheet or string) into one CSS text string
+ * Arguments: (sheets: Array | CSSStyleSheet | string) => string
+ */
+module.exports.cssInjectStyle = "__webpack_require__.is";
+module.exports.cssMergeStyleSheets = "__webpack_require__.mcs";
+
+/**
+ * The current scope when getting a module from a remote
+ */
+module.exports.currentRemoteGetScope = "__webpack_require__.R";
+
+/**
+ * resolve async transitive dependencies for deferred module
+ */
+module.exports.deferredModuleAsyncTransitiveDependencies =
+	"__webpack_require__.zT";
+
+/**
+ * the internal symbol for getting the async transitive dependencies for deferred module
+ */
+module.exports.deferredModuleAsyncTransitiveDependenciesSymbol =
+	"__webpack_require__.zS";
+
+/**
+ * the exported property define getters function
+ */
+module.exports.definePropertyGetters = "__webpack_require__.d";
+
+/**
+ * the chunk ensure function
+ */
+module.exports.ensureChunk = "__webpack_require__.e";
+
+/**
+ * an object with handlers to ensure a chunk
+ */
+module.exports.ensureChunkHandlers = "__webpack_require__.f";
+
+/**
+ * a runtime requirement if ensureChunkHandlers should include loading of chunk needed for entries
+ */
+module.exports.ensureChunkIncludeEntries =
+	"__webpack_require__.f (include entries)";
+
+/**
+ * the module id of the entry point
+ */
+module.exports.entryModuleId = "__webpack_require__.s";
+
+/**
+ * esm module id
+ */
+module.exports.esmId = "__webpack_esm_id__";
+
+/**
+ * esm module ids
+ */
+module.exports.esmIds = "__webpack_esm_ids__";
+
+/**
+ * esm modules
+ */
+module.exports.esmModules = "__webpack_esm_modules__";
+
+/**
+ * esm runtime
+ */
+module.exports.esmRuntime = "__webpack_esm_runtime__";
+
+/**
+ * the internal exports object
+ */
+module.exports.exports = "__webpack_exports__";
+
+/**
+ * method to install a chunk that was loaded somehow
+ * Signature: ({ id, ids, modules, runtime }) => void
+ */
+module.exports.externalInstallChunk = "__webpack_require__.C";
+
+/**
+ * the filename of the css part of the chunk
+ */
+module.exports.getChunkCssFilename = "__webpack_require__.k";
+
+/**
+ * the filename of the script part of the chunk
+ */
+module.exports.getChunkScriptFilename = "__webpack_require__.u";
+
+/**
+ * the filename of the css part of the hot update chunk
+ */
+module.exports.getChunkUpdateCssFilename = "__webpack_require__.hk";
+
+/**
+ * the filename of the script part of the hot update chunk
+ */
+module.exports.getChunkUpdateScriptFilename = "__webpack_require__.hu";
+
+/**
+ * the webpack hash
+ */
+module.exports.getFullHash = "__webpack_require__.h";
+
+/**
+ * function to return webpack's Trusted Types policy
+ * Arguments: () => TrustedTypePolicy
+ */
+module.exports.getTrustedTypesPolicy = "__webpack_require__.tt";
+
+/**
+ * the filename of the HMR manifest
+ */
+module.exports.getUpdateManifestFilename = "__webpack_require__.hmrF";
+
+/**
+ * the global object
+ */
+module.exports.global = "__webpack_require__.g";
+
+/**
+ * harmony module decorator
+ */
+module.exports.harmonyModuleDecorator = "__webpack_require__.hmd";
+
+/**
+ * a flag when a module/chunk/tree has css modules
+ */
+module.exports.hasCssModules = "has css modules";
+
+/**
+ * a flag when a chunk has a fetch priority
+ */
+module.exports.hasFetchPriority = "has fetch priority";
+
+/**
+ * the shorthand for Object.prototype.hasOwnProperty
+ * using of it decreases the compiled bundle size
+ */
+module.exports.hasOwnProperty = "__webpack_require__.o";
+
+/**
+ * function downloading the update manifest
+ */
+module.exports.hmrDownloadManifest = "__webpack_require__.hmrM";
+
+/**
+ * array with handler functions to download chunk updates
+ */
+module.exports.hmrDownloadUpdateHandlers = "__webpack_require__.hmrC";
+
+/**
+ * array with handler functions when a module should be invalidated
+ */
+module.exports.hmrInvalidateModuleHandlers = "__webpack_require__.hmrI";
+
+/**
+ * object with all hmr module data for all modules
+ */
+module.exports.hmrModuleData = "__webpack_require__.hmrD";
+
+/**
+ * the prefix for storing state of runtime modules when hmr is enabled
+ */
+module.exports.hmrRuntimeStatePrefix = "__webpack_require__.hmrS";
+
+/**
+ * The sharing init sequence function (only runs once per share scope).
+ * Has one argument, the name of the share scope.
+ * Creates a share scope if not existing
+ */
+module.exports.initializeSharing = "__webpack_require__.I";
+
+/**
+ * instantiate a wasm instance from module exports object, id, hash and importsObject
+ */
+module.exports.instantiateWasm = "__webpack_require__.v";
+
+/**
+ * interceptor for module executions
+ */
+module.exports.interceptModuleExecution = "__webpack_require__.i";
+
+/**
+ * function to load a script tag.
+ * Arguments: (url: string, done: (event) => void), key?: string | number, chunkId?: string | number) => void
+ * done function is called when loading has finished or timeout occurred.
+ * It will attach to existing script tags with data-webpack == uniqueName + ":" + key or src == url.
+ */
+module.exports.loadScript = "__webpack_require__.l";
+
+/**
+ * make a deferred namespace object
+ */
+module.exports.makeDeferredNamespaceObject = "__webpack_require__.z";
+
+/**
+ * define compatibility on export
+ */
+module.exports.makeNamespaceObject = "__webpack_require__.r";
+
+/**
+ * make a optimized deferred namespace object
+ */
+module.exports.makeOptimizedDeferredNamespaceObject = "__webpack_require__.zO";
+
+/**
+ * the internal module object
+ */
+module.exports.module = "module";
+
+/**
+ * the module cache
+ */
+module.exports.moduleCache = "__webpack_require__.c";
+
+/**
+ * the module functions
+ */
+module.exports.moduleFactories = "__webpack_require__.m";
+
+/**
+ * the module functions, with only write access
+ */
+module.exports.moduleFactoriesAddOnly = "__webpack_require__.m (add only)";
+
+/**
+ * the internal module object
+ */
+module.exports.moduleId = "module.id";
+
+/**
+ * the internal module object
+ */
+module.exports.moduleLoaded = "module.loaded";
+
+/**
+ * node.js module decorator
+ */
+module.exports.nodeModuleDecorator = "__webpack_require__.nmd";
+
+/**
+ * register deferred code, which will run when certain
+ * chunks are loaded.
+ * Signature: (chunkIds: Id[], fn: () => any, priority: int >= 0 = 0) => any
+ * Returned value will be returned directly when all chunks are already loaded
+ * When (priority & 1) it will wait for all other handlers with lower priority to
+ * be executed before itself is executed
+ */
+module.exports.onChunksLoaded = "__webpack_require__.O";
+
+/**
+ * the chunk prefetch function
+ */
+module.exports.prefetchChunk = "__webpack_require__.E";
+
+/**
+ * an object with handlers to prefetch a chunk
+ */
+module.exports.prefetchChunkHandlers = "__webpack_require__.F";
+
+/**
+ * the chunk preload function
+ */
+module.exports.preloadChunk = "__webpack_require__.G";
+
+/**
+ * an object with handlers to preload a chunk
+ */
+module.exports.preloadChunkHandlers = "__webpack_require__.H";
+
+/**
+ * the bundle public path
+ */
+module.exports.publicPath = "__webpack_require__.p";
+
+/**
+ * a RelativeURL class when relative URLs are used
+ */
+module.exports.relativeUrl = "__webpack_require__.U";
+
+/**
+ * the internal require function
+ */
+module.exports.require = "__webpack_require__";
+
+/**
+ * access to properties of the internal require function/object
+ */
+module.exports.requireScope = "__webpack_require__.*";
+
+/**
+ * runtime need to return the exports of the last entry module
+ */
+module.exports.returnExportsFromRuntime = "return-exports-from-runtime";
+
+/**
+ * the runtime id of the current runtime
+ */
+module.exports.runtimeId = "__webpack_require__.j";
+
+/**
+ * the script nonce
+ */
+module.exports.scriptNonce = "__webpack_require__.nc";
+
+/**
+ * an object with all share scopes
+ */
+module.exports.shareScopeMap = "__webpack_require__.S";
+
+/**
+ * startup signal from runtime
+ * This will be called when the runtime chunk has been loaded.
+ */
+module.exports.startup = "__webpack_require__.x";
+
+/**
+ * method to startup an entrypoint with needed chunks.
+ * Signature: (moduleId: Id, chunkIds: Id[]) => any.
+ * Returns the exports of the module or a Promise
+ */
+module.exports.startupEntrypoint = "__webpack_require__.X";
+
+/**
+ * @deprecated
+ * creating a default startup function with the entry modules
+ */
+module.exports.startupNoDefault = "__webpack_require__.x (no default handler)";
+
+/**
+ * startup signal from runtime but only used to add logic after the startup
+ */
+module.exports.startupOnlyAfter = "__webpack_require__.x (only after)";
+
+/**
+ * startup signal from runtime but only used to add sync logic before the startup
+ */
+module.exports.startupOnlyBefore = "__webpack_require__.x (only before)";
+
+/**
+ * the System polyfill object
+ */
+module.exports.system = "__webpack_require__.System";
+
+/**
+ * the System.register context object
+ */
+module.exports.systemContext = "__webpack_require__.y";
+
+/**
+ * top-level this need to be the exports object
+ */
+module.exports.thisAsExports = "top-level-this-exports";
+
+/**
+ * to binary helper, convert base64 to Uint8Array
+ */
+module.exports.toBinary = "__webpack_require__.tb";
+
+/**
+ * the uncaught error handler for the webpack runtime
+ */
+module.exports.uncaughtErrorHandler = "__webpack_require__.oe";
+
+/**
+ * an object containing all installed WebAssembly.Instance export objects keyed by module id
+ */
+module.exports.wasmInstances = "__webpack_require__.w";
diff --git a/lib/RuntimeModule.js b/lib/RuntimeModule.js
new file mode 100644
index 00000000000..104e22df0bc
--- /dev/null
+++ b/lib/RuntimeModule.js
@@ -0,0 +1,242 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const OriginalSource = require("webpack-sources").OriginalSource;
+const Module = require("./Module");
+const {
+	JAVASCRIPT_TYPES,
+	RUNTIME_TYPES
+} = require("./ModuleSourceTypeConstants");
+const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
+
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("./Generator").SourceTypes} SourceTypes */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./Module").BuildCallback} BuildCallback */
+/** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("./Module").Sources} Sources */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("./util/Hash")} Hash */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./Module").BasicSourceTypes} BasicSourceTypes */
+
+class RuntimeModule extends Module {
+	/**
+	 * @param {string} name a readable name
+	 * @param {number=} stage an optional stage
+	 */
+	constructor(name, stage = 0) {
+		super(WEBPACK_MODULE_TYPE_RUNTIME);
+		/** @type {string} */
+		this.name = name;
+		/** @type {number} */
+		this.stage = stage;
+		/** @type {BuildMeta} */
+		this.buildMeta = {};
+		/** @type {BuildInfo} */
+		this.buildInfo = {};
+		/** @type {Compilation | undefined} */
+		this.compilation = undefined;
+		/** @type {Chunk | undefined} */
+		this.chunk = undefined;
+		/** @type {ChunkGraph | undefined} */
+		this.chunkGraph = undefined;
+		/** @type {boolean} */
+		this.fullHash = false;
+		/** @type {boolean} */
+		this.dependentHash = false;
+		/** @type {string | undefined | null} */
+		this._cachedGeneratedCode = undefined;
+	}
+
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @param {Chunk} chunk the chunk
+	 * @param {ChunkGraph} chunkGraph the chunk graph
+	 * @returns {void}
+	 */
+	attach(compilation, chunk, chunkGraph = compilation.chunkGraph) {
+		this.compilation = compilation;
+		this.chunk = chunk;
+		this.chunkGraph = chunkGraph;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		return `webpack/runtime/${this.name}`;
+	}
+
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		return `webpack/runtime/${this.name}`;
+	}
+
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, false);
+	}
+
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
+		// do nothing
+		// should not be called as runtime modules are added later to the compilation
+		callback();
+	}
+
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		hash.update(this.name);
+		hash.update(`${this.stage}`);
+		try {
+			if (this.fullHash || this.dependentHash) {
+				// Do not use getGeneratedCode here, because i. e. compilation hash might be not
+				// ready at this point. We will cache it later instead.
+				hash.update(/** @type {string} */ (this.generate()));
+			} else {
+				hash.update(/** @type {string} */ (this.getGeneratedCode()));
+			}
+		} catch (err) {
+			hash.update(/** @type {Error} */ (err).message);
+		}
+		super.updateHash(hash, context);
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return RUNTIME_TYPES;
+	}
+
+	/**
+	 * Basic source types are high-level categories like javascript, css, webassembly, etc.
+	 * We only have built-in knowledge about the javascript basic type here; other basic types may be
+	 * added or changed over time by generators and do not need to be handled or detected here.
+	 *
+	 * Some modules, e.g. RemoteModule, may return non-basic source types like "remote" and "share-init"
+	 * from getSourceTypes(), but their generated output is still JavaScript, i.e. their basic type is JS.
+	 * @returns {BasicSourceTypes} types available (do not mutate)
+	 */
+	getSourceBasicTypes() {
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration(context) {
+		/** @type {Sources} */
+		const sources = new Map();
+		const generatedCode = this.getGeneratedCode();
+		if (generatedCode) {
+			sources.set(
+				WEBPACK_MODULE_TYPE_RUNTIME,
+				this.useSourceMap || this.useSimpleSourceMap
+					? new OriginalSource(generatedCode, this.identifier())
+					: new RawSource(generatedCode)
+			);
+		}
+		return {
+			sources,
+			runtimeRequirements: null
+		};
+	}
+
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		try {
+			const source = this.getGeneratedCode();
+			return source ? source.length : 0;
+		} catch (_err) {
+			return 0;
+		}
+	}
+
+	/* istanbul ignore next */
+	/**
+	 * @abstract
+	 * @returns {string | null} runtime code
+	 */
+	generate() {
+		const AbstractMethodError = require("./AbstractMethodError");
+
+		throw new AbstractMethodError();
+	}
+
+	/**
+	 * @returns {string | null} runtime code
+	 */
+	getGeneratedCode() {
+		if (this._cachedGeneratedCode) {
+			return this._cachedGeneratedCode;
+		}
+		return (this._cachedGeneratedCode = this.generate());
+	}
+
+	/**
+	 * @returns {boolean} true, if the runtime module should get it's own scope
+	 */
+	shouldIsolate() {
+		return true;
+	}
+}
+
+/**
+ * Runtime modules without any dependencies to other runtime modules
+ */
+RuntimeModule.STAGE_NORMAL = 0;
+
+/**
+ * Runtime modules with simple dependencies on other runtime modules
+ */
+RuntimeModule.STAGE_BASIC = 5;
+
+/**
+ * Runtime modules which attach to handlers of other runtime modules
+ */
+RuntimeModule.STAGE_ATTACH = 10;
+
+/**
+ * Runtime modules which trigger actions on bootstrap
+ */
+RuntimeModule.STAGE_TRIGGER = 20;
+
+module.exports = RuntimeModule;
diff --git a/lib/RuntimePlugin.js b/lib/RuntimePlugin.js
new file mode 100644
index 00000000000..0f30ad19bfe
--- /dev/null
+++ b/lib/RuntimePlugin.js
@@ -0,0 +1,547 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const RuntimeGlobals = require("./RuntimeGlobals");
+const RuntimeRequirementsDependency = require("./dependencies/RuntimeRequirementsDependency");
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+const AsyncModuleRuntimeModule = require("./runtime/AsyncModuleRuntimeModule");
+const AutoPublicPathRuntimeModule = require("./runtime/AutoPublicPathRuntimeModule");
+const BaseUriRuntimeModule = require("./runtime/BaseUriRuntimeModule");
+const CompatGetDefaultExportRuntimeModule = require("./runtime/CompatGetDefaultExportRuntimeModule");
+const CompatRuntimeModule = require("./runtime/CompatRuntimeModule");
+const CreateFakeNamespaceObjectRuntimeModule = require("./runtime/CreateFakeNamespaceObjectRuntimeModule");
+const CreateScriptRuntimeModule = require("./runtime/CreateScriptRuntimeModule");
+const CreateScriptUrlRuntimeModule = require("./runtime/CreateScriptUrlRuntimeModule");
+const DefinePropertyGettersRuntimeModule = require("./runtime/DefinePropertyGettersRuntimeModule");
+const EnsureChunkRuntimeModule = require("./runtime/EnsureChunkRuntimeModule");
+const GetChunkFilenameRuntimeModule = require("./runtime/GetChunkFilenameRuntimeModule");
+const GetMainFilenameRuntimeModule = require("./runtime/GetMainFilenameRuntimeModule");
+const GetTrustedTypesPolicyRuntimeModule = require("./runtime/GetTrustedTypesPolicyRuntimeModule");
+const GlobalRuntimeModule = require("./runtime/GlobalRuntimeModule");
+const HasOwnPropertyRuntimeModule = require("./runtime/HasOwnPropertyRuntimeModule");
+const LoadScriptRuntimeModule = require("./runtime/LoadScriptRuntimeModule");
+const {
+	MakeDeferredNamespaceObjectRuntimeModule,
+	MakeOptimizedDeferredNamespaceObjectRuntimeModule
+} = require("./runtime/MakeDeferredNamespaceObjectRuntime");
+const MakeNamespaceObjectRuntimeModule = require("./runtime/MakeNamespaceObjectRuntimeModule");
+const NonceRuntimeModule = require("./runtime/NonceRuntimeModule");
+const OnChunksLoadedRuntimeModule = require("./runtime/OnChunksLoadedRuntimeModule");
+const PublicPathRuntimeModule = require("./runtime/PublicPathRuntimeModule");
+const RelativeUrlRuntimeModule = require("./runtime/RelativeUrlRuntimeModule");
+const RuntimeIdRuntimeModule = require("./runtime/RuntimeIdRuntimeModule");
+const SystemContextRuntimeModule = require("./runtime/SystemContextRuntimeModule");
+const ToBinaryRuntimeModule = require("./runtime/ToBinaryRuntimeModule");
+const ShareRuntimeModule = require("./sharing/ShareRuntimeModule");
+const StringXor = require("./util/StringXor");
+const memoize = require("./util/memoize");
+
+/** @typedef {import("../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Compiler")} Compiler */
+
+const getJavascriptModulesPlugin = memoize(() =>
+	require("./javascript/JavascriptModulesPlugin")
+);
+const getCssModulesPlugin = memoize(() => require("./css/CssModulesPlugin"));
+
+const GLOBALS_ON_REQUIRE = [
+	RuntimeGlobals.chunkName,
+	RuntimeGlobals.runtimeId,
+	RuntimeGlobals.compatGetDefaultExport,
+	RuntimeGlobals.createFakeNamespaceObject,
+	RuntimeGlobals.createScript,
+	RuntimeGlobals.createScriptUrl,
+	RuntimeGlobals.getTrustedTypesPolicy,
+	RuntimeGlobals.definePropertyGetters,
+	RuntimeGlobals.ensureChunk,
+	RuntimeGlobals.entryModuleId,
+	RuntimeGlobals.getFullHash,
+	RuntimeGlobals.global,
+	RuntimeGlobals.makeNamespaceObject,
+	RuntimeGlobals.moduleCache,
+	RuntimeGlobals.moduleFactories,
+	RuntimeGlobals.moduleFactoriesAddOnly,
+	RuntimeGlobals.interceptModuleExecution,
+	RuntimeGlobals.publicPath,
+	RuntimeGlobals.baseURI,
+	RuntimeGlobals.relativeUrl,
+	// TODO webpack 6 - rename to nonce, because we use it for CSS too
+	RuntimeGlobals.scriptNonce,
+	RuntimeGlobals.uncaughtErrorHandler,
+	RuntimeGlobals.asyncModule,
+	RuntimeGlobals.wasmInstances,
+	RuntimeGlobals.instantiateWasm,
+	RuntimeGlobals.shareScopeMap,
+	RuntimeGlobals.initializeSharing,
+	RuntimeGlobals.loadScript,
+	RuntimeGlobals.systemContext,
+	RuntimeGlobals.onChunksLoaded,
+	RuntimeGlobals.makeOptimizedDeferredNamespaceObject,
+	RuntimeGlobals.makeDeferredNamespaceObject
+];
+
+const MODULE_DEPENDENCIES = {
+	[RuntimeGlobals.moduleLoaded]: [RuntimeGlobals.module],
+	[RuntimeGlobals.moduleId]: [RuntimeGlobals.module]
+};
+
+const TREE_DEPENDENCIES = {
+	[RuntimeGlobals.definePropertyGetters]: [RuntimeGlobals.hasOwnProperty],
+	[RuntimeGlobals.compatGetDefaultExport]: [
+		RuntimeGlobals.definePropertyGetters
+	],
+	[RuntimeGlobals.createFakeNamespaceObject]: [
+		RuntimeGlobals.definePropertyGetters,
+		RuntimeGlobals.makeNamespaceObject,
+		RuntimeGlobals.require
+	],
+	[RuntimeGlobals.makeOptimizedDeferredNamespaceObject]: [
+		RuntimeGlobals.require
+	],
+	[RuntimeGlobals.makeDeferredNamespaceObject]: [
+		RuntimeGlobals.createFakeNamespaceObject,
+		RuntimeGlobals.require
+	],
+	[RuntimeGlobals.initializeSharing]: [RuntimeGlobals.shareScopeMap],
+	[RuntimeGlobals.shareScopeMap]: [RuntimeGlobals.hasOwnProperty]
+};
+
+const FULLHASH_REGEXP = /\[(?:full)?hash(?::\d+)?\]/;
+
+const PLUGIN_NAME = "RuntimePlugin";
+
+class RuntimePlugin {
+	/**
+	 * @param {Compiler} compiler the Compiler
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const globalChunkLoading = compilation.outputOptions.chunkLoading;
+			/**
+			 * @param {Chunk} chunk chunk
+			 * @returns {boolean} true, when chunk loading is disabled for the chunk
+			 */
+			const isChunkLoadingDisabledForChunk = (chunk) => {
+				const options = chunk.getEntryOptions();
+				const chunkLoading =
+					options && options.chunkLoading !== undefined
+						? options.chunkLoading
+						: globalChunkLoading;
+				return chunkLoading === false;
+			};
+			compilation.dependencyTemplates.set(
+				RuntimeRequirementsDependency,
+				new RuntimeRequirementsDependency.Template()
+			);
+			for (const req of GLOBALS_ON_REQUIRE) {
+				compilation.hooks.runtimeRequirementInModule
+					.for(req)
+					.tap(PLUGIN_NAME, (module, set) => {
+						set.add(RuntimeGlobals.requireScope);
+					});
+				compilation.hooks.runtimeRequirementInTree
+					.for(req)
+					.tap(PLUGIN_NAME, (module, set) => {
+						set.add(RuntimeGlobals.requireScope);
+					});
+			}
+			for (const req of Object.keys(TREE_DEPENDENCIES)) {
+				const deps =
+					TREE_DEPENDENCIES[/** @type {keyof TREE_DEPENDENCIES} */ (req)];
+				compilation.hooks.runtimeRequirementInTree
+					.for(req)
+					.tap(PLUGIN_NAME, (chunk, set) => {
+						for (const dep of deps) set.add(dep);
+					});
+			}
+			for (const req of Object.keys(MODULE_DEPENDENCIES)) {
+				const deps =
+					MODULE_DEPENDENCIES[/** @type {keyof MODULE_DEPENDENCIES} */ (req)];
+				compilation.hooks.runtimeRequirementInModule
+					.for(req)
+					.tap(PLUGIN_NAME, (chunk, set) => {
+						for (const dep of deps) set.add(dep);
+					});
+			}
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.definePropertyGetters)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new DefinePropertyGettersRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.makeNamespaceObject)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new MakeNamespaceObjectRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.createFakeNamespaceObject)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new CreateFakeNamespaceObjectRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.makeOptimizedDeferredNamespaceObject)
+				.tap("RuntimePlugin", (chunk, runtimeRequirement) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new MakeOptimizedDeferredNamespaceObjectRuntimeModule(
+							runtimeRequirement.has(RuntimeGlobals.asyncModule)
+						)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.makeDeferredNamespaceObject)
+				.tap("RuntimePlugin", (chunk, runtimeRequirement) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new MakeDeferredNamespaceObjectRuntimeModule(
+							runtimeRequirement.has(RuntimeGlobals.asyncModule)
+						)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.hasOwnProperty)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new HasOwnPropertyRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.compatGetDefaultExport)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new CompatGetDefaultExportRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.runtimeId)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(chunk, new RuntimeIdRuntimeModule());
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.publicPath)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					const { outputOptions } = compilation;
+					const { publicPath: globalPublicPath, scriptType } = outputOptions;
+					const entryOptions = chunk.getEntryOptions();
+					const publicPath =
+						entryOptions && entryOptions.publicPath !== undefined
+							? entryOptions.publicPath
+							: globalPublicPath;
+
+					if (publicPath === "auto") {
+						const module = new AutoPublicPathRuntimeModule();
+						if (
+							scriptType !== "module" &&
+							!outputOptions.environment.globalThis
+						) {
+							set.add(RuntimeGlobals.global);
+						}
+
+						compilation.addRuntimeModule(chunk, module);
+					} else {
+						const module = new PublicPathRuntimeModule(publicPath);
+
+						if (
+							typeof publicPath !== "string" ||
+							/\[(?:full)?hash\]/.test(publicPath)
+						) {
+							module.fullHash = true;
+						}
+
+						compilation.addRuntimeModule(chunk, module);
+					}
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.global)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(chunk, new GlobalRuntimeModule());
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.asyncModule)
+				.tap(PLUGIN_NAME, (chunk) => {
+					const experiments = compilation.options.experiments;
+					compilation.addRuntimeModule(
+						chunk,
+						new AsyncModuleRuntimeModule(experiments.deferImport)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.systemContext)
+				.tap(PLUGIN_NAME, (chunk) => {
+					const entryOptions = chunk.getEntryOptions();
+					const libraryType =
+						entryOptions && entryOptions.library !== undefined
+							? entryOptions.library.type
+							: /** @type {LibraryOptions} */
+								(compilation.outputOptions.library).type;
+
+					if (libraryType === "system") {
+						compilation.addRuntimeModule(
+							chunk,
+							new SystemContextRuntimeModule()
+						);
+					}
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.getChunkScriptFilename)
+				.tap(PLUGIN_NAME, (chunk, set, { chunkGraph }) => {
+					if (
+						typeof compilation.outputOptions.chunkFilename === "string" &&
+						FULLHASH_REGEXP.test(compilation.outputOptions.chunkFilename)
+					) {
+						set.add(RuntimeGlobals.getFullHash);
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new GetChunkFilenameRuntimeModule(
+							"javascript",
+							"javascript",
+							RuntimeGlobals.getChunkScriptFilename,
+							(chunk) =>
+								getJavascriptModulesPlugin().chunkHasJs(chunk, chunkGraph) &&
+								(chunk.filenameTemplate ||
+									(chunk.canBeInitial()
+										? compilation.outputOptions.filename
+										: compilation.outputOptions.chunkFilename)),
+							set.has(RuntimeGlobals.hmrDownloadUpdateHandlers)
+						)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.getChunkCssFilename)
+				.tap(PLUGIN_NAME, (chunk, set, { chunkGraph }) => {
+					if (
+						typeof compilation.outputOptions.cssChunkFilename === "string" &&
+						FULLHASH_REGEXP.test(compilation.outputOptions.cssChunkFilename)
+					) {
+						set.add(RuntimeGlobals.getFullHash);
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new GetChunkFilenameRuntimeModule(
+							"css",
+							"css",
+							RuntimeGlobals.getChunkCssFilename,
+							(chunk) => {
+								const cssModulePlugin = getCssModulesPlugin();
+
+								return (
+									cssModulePlugin.chunkHasCss(chunk, chunkGraph) &&
+									cssModulePlugin.getChunkFilenameTemplate(
+										chunk,
+										compilation.outputOptions
+									)
+								);
+							},
+							set.has(RuntimeGlobals.hmrDownloadUpdateHandlers)
+						)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.getChunkUpdateScriptFilename)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					if (
+						FULLHASH_REGEXP.test(
+							compilation.outputOptions.hotUpdateChunkFilename
+						)
+					) {
+						set.add(RuntimeGlobals.getFullHash);
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new GetChunkFilenameRuntimeModule(
+							"javascript",
+							"javascript update",
+							RuntimeGlobals.getChunkUpdateScriptFilename,
+							(_chunk) => compilation.outputOptions.hotUpdateChunkFilename,
+							true
+						)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.getUpdateManifestFilename)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					if (
+						FULLHASH_REGEXP.test(
+							compilation.outputOptions.hotUpdateMainFilename
+						)
+					) {
+						set.add(RuntimeGlobals.getFullHash);
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new GetMainFilenameRuntimeModule(
+							"update manifest",
+							RuntimeGlobals.getUpdateManifestFilename,
+							compilation.outputOptions.hotUpdateMainFilename
+						)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.ensureChunk)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					const hasAsyncChunks = chunk.hasAsyncChunks();
+					if (hasAsyncChunks) {
+						set.add(RuntimeGlobals.ensureChunkHandlers);
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new EnsureChunkRuntimeModule(set)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.ensureChunkIncludeEntries)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					set.add(RuntimeGlobals.ensureChunkHandlers);
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.shareScopeMap)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					compilation.addRuntimeModule(chunk, new ShareRuntimeModule());
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.loadScript)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					const withCreateScriptUrl = Boolean(
+						compilation.outputOptions.trustedTypes
+					);
+					if (withCreateScriptUrl) {
+						set.add(RuntimeGlobals.createScriptUrl);
+					}
+					const withFetchPriority = set.has(RuntimeGlobals.hasFetchPriority);
+					compilation.addRuntimeModule(
+						chunk,
+						new LoadScriptRuntimeModule(withCreateScriptUrl, withFetchPriority)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.createScript)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					if (compilation.outputOptions.trustedTypes) {
+						set.add(RuntimeGlobals.getTrustedTypesPolicy);
+					}
+					compilation.addRuntimeModule(chunk, new CreateScriptRuntimeModule());
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.createScriptUrl)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					if (compilation.outputOptions.trustedTypes) {
+						set.add(RuntimeGlobals.getTrustedTypesPolicy);
+					}
+					compilation.addRuntimeModule(
+						chunk,
+						new CreateScriptUrlRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.getTrustedTypesPolicy)
+				.tap(PLUGIN_NAME, (chunk, set) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new GetTrustedTypesPolicyRuntimeModule(set)
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.relativeUrl)
+				.tap(PLUGIN_NAME, (chunk, _set) => {
+					compilation.addRuntimeModule(chunk, new RelativeUrlRuntimeModule());
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.onChunksLoaded)
+				.tap(PLUGIN_NAME, (chunk, _set) => {
+					compilation.addRuntimeModule(
+						chunk,
+						new OnChunksLoadedRuntimeModule()
+					);
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.baseURI)
+				.tap(PLUGIN_NAME, (chunk) => {
+					if (isChunkLoadingDisabledForChunk(chunk)) {
+						compilation.addRuntimeModule(chunk, new BaseUriRuntimeModule());
+						return true;
+					}
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.scriptNonce)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(chunk, new NonceRuntimeModule());
+					return true;
+				});
+			compilation.hooks.runtimeRequirementInTree
+				.for(RuntimeGlobals.toBinary)
+				.tap(PLUGIN_NAME, (chunk) => {
+					compilation.addRuntimeModule(chunk, new ToBinaryRuntimeModule());
+					return true;
+				});
+			// TODO webpack 6: remove CompatRuntimeModule
+			compilation.hooks.additionalTreeRuntimeRequirements.tap(
+				PLUGIN_NAME,
+				(chunk, _set) => {
+					const { mainTemplate } = compilation;
+					if (
+						mainTemplate.hooks.bootstrap.isUsed() ||
+						mainTemplate.hooks.localVars.isUsed() ||
+						mainTemplate.hooks.requireEnsure.isUsed() ||
+						mainTemplate.hooks.requireExtensions.isUsed()
+					) {
+						compilation.addRuntimeModule(chunk, new CompatRuntimeModule());
+					}
+				}
+			);
+			JavascriptModulesPlugin.getCompilationHooks(compilation).chunkHash.tap(
+				PLUGIN_NAME,
+				(chunk, hash, { chunkGraph }) => {
+					const xor = new StringXor();
+					for (const m of chunkGraph.getChunkRuntimeModulesIterable(chunk)) {
+						xor.add(chunkGraph.getModuleHash(m, chunk.runtime));
+					}
+					xor.updateHash(hash);
+				}
+			);
+		});
+	}
+}
+
+module.exports = RuntimePlugin;
diff --git a/lib/RuntimeTemplate.js b/lib/RuntimeTemplate.js
index 92292d389c1..de3ee2932b2 100644
--- a/lib/RuntimeTemplate.js
+++ b/lib/RuntimeTemplate.js
@@ -2,142 +2,686 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const InitFragment = require("./InitFragment");
+const RuntimeGlobals = require("./RuntimeGlobals");
 const Template = require("./Template");
+const {
+	getOutgoingAsyncModules
+} = require("./async-modules/AsyncModuleHelpers");
+const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
+const {
+	getMakeDeferredNamespaceModeFromExportsType,
+	getOptimizedDeferredModule
+} = require("./runtime/MakeDeferredNamespaceObjectRuntime");
+const { equals } = require("./util/ArrayHelpers");
+const compileBooleanMatcher = require("./util/compileBooleanMatcher");
+const memoize = require("./util/memoize");
+const { propertyAccess } = require("./util/property");
+const { forEachRuntime, subtractRuntime } = require("./util/runtime");
+
+const getHarmonyImportDependency = memoize(() =>
+	require("./dependencies/HarmonyImportDependency")
+);
+const getImportDependency = memoize(() =>
+	require("./dependencies/ImportDependency")
+);
+
+/** @typedef {import("./config/defaults").OutputNormalizedWithDefaults} OutputOptions */
+/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Dependency")} Dependency */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./Module").BuildMeta} BuildMeta */
+/** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./RequestShortener")} RequestShortener */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+/** @typedef {import("./dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
+/** @typedef {import("./NormalModuleFactory").ModuleDependency} ModuleDependency */
+
+/**
+ * @param {Module} module the module
+ * @param {ChunkGraph} chunkGraph the chunk graph
+ * @returns {string} error message
+ */
+const noModuleIdErrorMessage = (
+	module,
+	chunkGraph
+) => `Module ${module.identifier()} has no id assigned.
+This should not happen.
+It's in these chunks: ${
+	Array.from(
+		chunkGraph.getModuleChunksIterable(module),
+		(c) => c.name || c.id || c.debugId
+	).join(", ") || "none"
+} (If module is in no chunk this indicates a bug in some chunk/module optimization logic)
+Module has these incoming connections: ${Array.from(
+	chunkGraph.moduleGraph.getIncomingConnections(module),
+	(connection) =>
+		`\n - ${
+			connection.originModule && connection.originModule.identifier()
+		} ${connection.dependency && connection.dependency.type} ${
+			(connection.explanations && [...connection.explanations].join(", ")) || ""
+		}`
+).join("")}`;
+
+/**
+ * @param {string | undefined} definition global object definition
+ * @returns {string | undefined} save to use global object
+ */
+function getGlobalObject(definition) {
+	if (!definition) return definition;
+	const trimmed = definition.trim();
 
-module.exports = class RuntimeTemplate {
-	constructor(outputOptions, requestShortener) {
-		this.outputOptions = outputOptions || {};
+	if (
+		// identifier, we do not need real identifier regarding ECMAScript/Unicode
+		/^[_\p{L}][_0-9\p{L}]*$/iu.test(trimmed) ||
+		// iife
+		// call expression
+		// expression in parentheses
+		/^(?:[_\p{L}][_0-9\p{L}]*)?\(.*\)$/iu.test(trimmed)
+	) {
+		return trimmed;
+	}
+
+	return `Object(${trimmed})`;
+}
+
+class RuntimeTemplate {
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @param {OutputOptions} outputOptions the compilation output options
+	 * @param {RequestShortener} requestShortener the request shortener
+	 */
+	constructor(compilation, outputOptions, requestShortener) {
+		this.compilation = compilation;
+		this.outputOptions = /** @type {OutputOptions} */ (outputOptions || {});
 		this.requestShortener = requestShortener;
+		this.globalObject =
+			/** @type {string} */
+			(getGlobalObject(outputOptions.globalObject));
+		this.contentHashReplacement = "X".repeat(outputOptions.hashDigestLength);
+	}
+
+	isIIFE() {
+		return this.outputOptions.iife;
+	}
+
+	isModule() {
+		return this.outputOptions.module;
+	}
+
+	isNeutralPlatform() {
+		return (
+			!this.compilation.compiler.platform.web &&
+			!this.compilation.compiler.platform.node
+		);
+	}
+
+	supportsConst() {
+		return this.outputOptions.environment.const;
+	}
+
+	supportsMethodShorthand() {
+		return this.outputOptions.environment.methodShorthand;
+	}
+
+	supportsArrowFunction() {
+		return this.outputOptions.environment.arrowFunction;
+	}
+
+	supportsAsyncFunction() {
+		return this.outputOptions.environment.asyncFunction;
+	}
+
+	supportsOptionalChaining() {
+		return this.outputOptions.environment.optionalChaining;
+	}
+
+	supportsForOf() {
+		return this.outputOptions.environment.forOf;
+	}
+
+	supportsDestructuring() {
+		return this.outputOptions.environment.destructuring;
+	}
+
+	supportsBigIntLiteral() {
+		return this.outputOptions.environment.bigIntLiteral;
+	}
+
+	supportsDynamicImport() {
+		return this.outputOptions.environment.dynamicImport;
+	}
+
+	supportsEcmaScriptModuleSyntax() {
+		return this.outputOptions.environment.module;
+	}
+
+	supportTemplateLiteral() {
+		return this.outputOptions.environment.templateLiteral;
+	}
+
+	supportNodePrefixForCoreModules() {
+		return this.outputOptions.environment.nodePrefixForCoreModules;
+	}
+
+	/**
+	 * @param {string} mod a module
+	 * @returns {string} a module with `node:` prefix when supported, otherwise an original name
+	 */
+	renderNodePrefixForCoreModule(mod) {
+		return this.outputOptions.environment.nodePrefixForCoreModules
+			? `"node:${mod}"`
+			: `"${mod}"`;
+	}
+
+	/**
+	 * @returns {"const" | "var"} return `const` when it is supported, otherwise `var`
+	 */
+	renderConst() {
+		return this.supportsConst() ? "const" : "var";
+	}
+
+	/**
+	 * @param {string} returnValue return value
+	 * @param {string} args arguments
+	 * @returns {string} returning function
+	 */
+	returningFunction(returnValue, args = "") {
+		return this.supportsArrowFunction()
+			? `(${args}) => (${returnValue})`
+			: `function(${args}) { return ${returnValue}; }`;
+	}
+
+	/**
+	 * @param {string} args arguments
+	 * @param {string | string[]} body body
+	 * @returns {string} basic function
+	 */
+	basicFunction(args, body) {
+		return this.supportsArrowFunction()
+			? `(${args}) => {\n${Template.indent(body)}\n}`
+			: `function(${args}) {\n${Template.indent(body)}\n}`;
+	}
+
+	/**
+	 * @param {(string | { expr: string })[]} args args
+	 * @returns {string} result expression
+	 */
+	concatenation(...args) {
+		const len = args.length;
+
+		if (len === 2) return this._es5Concatenation(args);
+		if (len === 0) return '""';
+		if (len === 1) {
+			return typeof args[0] === "string"
+				? JSON.stringify(args[0])
+				: `"" + ${args[0].expr}`;
+		}
+		if (!this.supportTemplateLiteral()) return this._es5Concatenation(args);
+
+		// cost comparison between template literal and concatenation:
+		// both need equal surroundings: `xxx` vs "xxx"
+		// template literal has constant cost of 3 chars for each expression
+		// es5 concatenation has cost of 3 + n chars for n expressions in row
+		// when a es5 concatenation ends with an expression it reduces cost by 3
+		// when a es5 concatenation starts with an single expression it reduces cost by 3
+		// e. g. `${a}${b}${c}` (3*3 = 9) is longer than ""+a+b+c ((3+3)-3 = 3)
+		// e. g. `x${a}x${b}x${c}x` (3*3 = 9) is shorter than "x"+a+"x"+b+"x"+c+"x" (4+4+4 = 12)
+
+		let templateCost = 0;
+		let concatenationCost = 0;
+
+		let lastWasExpr = false;
+		for (const arg of args) {
+			const isExpr = typeof arg !== "string";
+			if (isExpr) {
+				templateCost += 3;
+				concatenationCost += lastWasExpr ? 1 : 4;
+			}
+			lastWasExpr = isExpr;
+		}
+		if (lastWasExpr) concatenationCost -= 3;
+		if (typeof args[0] !== "string" && typeof args[1] === "string") {
+			concatenationCost -= 3;
+		}
+
+		if (concatenationCost <= templateCost) return this._es5Concatenation(args);
+
+		return `\`${args
+			.map((arg) => (typeof arg === "string" ? arg : `\${${arg.expr}}`))
+			.join("")}\``;
+	}
+
+	/**
+	 * @param {(string | { expr: string })[]} args args (len >= 2)
+	 * @returns {string} result expression
+	 * @private
+	 */
+	_es5Concatenation(args) {
+		const str = args
+			.map((arg) => (typeof arg === "string" ? JSON.stringify(arg) : arg.expr))
+			.join(" + ");
+
+		// when the first two args are expression, we need to prepend "" + to force string
+		// concatenation instead of number addition.
+		return typeof args[0] !== "string" && typeof args[1] !== "string"
+			? `"" + ${str}`
+			: str;
+	}
+
+	/**
+	 * @param {string} expression expression
+	 * @param {string} args arguments
+	 * @returns {string} expression function code
+	 */
+	expressionFunction(expression, args = "") {
+		return this.supportsArrowFunction()
+			? `(${args}) => (${expression})`
+			: `function(${args}) { ${expression}; }`;
+	}
+
+	/**
+	 * @returns {string} empty function code
+	 */
+	emptyFunction() {
+		return this.supportsArrowFunction() ? "x => {}" : "function() {}";
+	}
+
+	/**
+	 * @param {string[]} items items
+	 * @param {string} value value
+	 * @returns {string} destructure array code
+	 */
+	destructureArray(items, value) {
+		return this.supportsDestructuring()
+			? `var [${items.join(", ")}] = ${value};`
+			: Template.asString(
+					items.map((item, i) => `var ${item} = ${value}[${i}];`)
+				);
+	}
+
+	/**
+	 * @param {string[]} items items
+	 * @param {string} value value
+	 * @returns {string} destructure object code
+	 */
+	destructureObject(items, value) {
+		return this.supportsDestructuring()
+			? `var {${items.join(", ")}} = ${value};`
+			: Template.asString(
+					items.map(
+						(item) => `var ${item} = ${value}${propertyAccess([item])};`
+					)
+				);
+	}
+
+	/**
+	 * @param {string} args arguments
+	 * @param {string} body body
+	 * @returns {string} IIFE code
+	 */
+	iife(args, body) {
+		return `(${this.basicFunction(args, body)})()`;
+	}
+
+	/**
+	 * @param {string} variable variable
+	 * @param {string} array array
+	 * @param {string | string[]} body body
+	 * @returns {string} for each code
+	 */
+	forEach(variable, array, body) {
+		return this.supportsForOf()
+			? `for(const ${variable} of ${array}) {\n${Template.indent(body)}\n}`
+			: `${array}.forEach(function(${variable}) {\n${Template.indent(
+					body
+				)}\n});`;
 	}
 
 	/**
 	 * Add a comment
 	 * @param {object} options Information content of the comment
 	 * @param {string=} options.request request string used originally
-	 * @param {string=} options.chunkName name of the chunk referenced
+	 * @param {(string | null)=} options.chunkName name of the chunk referenced
 	 * @param {string=} options.chunkReason reason information of the chunk
 	 * @param {string=} options.message additional message
 	 * @param {string=} options.exportName name of the export
 	 * @returns {string} comment
 	 */
 	comment({ request, chunkName, chunkReason, message, exportName }) {
+		/** @type {string} */
 		let content;
 		if (this.outputOptions.pathinfo) {
 			content = [message, request, chunkName, chunkReason]
 				.filter(Boolean)
-				.map(item => this.requestShortener.shorten(item))
+				.map((item) => this.requestShortener.shorten(item))
 				.join(" | ");
 		} else {
 			content = [message, chunkName, chunkReason]
 				.filter(Boolean)
-				.map(item => this.requestShortener.shorten(item))
+				.map((item) => this.requestShortener.shorten(item))
 				.join(" | ");
 		}
 		if (!content) return "";
 		if (this.outputOptions.pathinfo) {
-			return Template.toComment(content) + " ";
-		} else {
-			return Template.toNormalComment(content) + " ";
+			return `${Template.toComment(content)} `;
 		}
+		return `${Template.toNormalComment(content)} `;
 	}
 
-	throwMissingModuleErrorFunction({ request }) {
+	/**
+	 * @param {object} options generation options
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} generated error block
+	 */
+	throwMissingModuleErrorBlock({ request }) {
 		const err = `Cannot find module '${request}'`;
-		return `function webpackMissingModule() { var e = new Error(${JSON.stringify(
+		return `var e = new Error(${JSON.stringify(
 			err
-		)}); e.code = 'MODULE_NOT_FOUND'; throw e; }`;
+		)}); e.code = 'MODULE_NOT_FOUND'; throw e;`;
+	}
+
+	/**
+	 * @param {object} options generation options
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} generated error function
+	 */
+	throwMissingModuleErrorFunction({ request }) {
+		return `function webpackMissingModule() { ${this.throwMissingModuleErrorBlock(
+			{ request }
+		)} }`;
 	}
 
+	/**
+	 * @param {object} options generation options
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} generated error IIFE
+	 */
 	missingModule({ request }) {
-		return `!(${this.throwMissingModuleErrorFunction({ request })}())`;
+		return `Object(${this.throwMissingModuleErrorFunction({ request })}())`;
 	}
 
+	/**
+	 * @param {object} options generation options
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} generated error statement
+	 */
 	missingModuleStatement({ request }) {
 		return `${this.missingModule({ request })};\n`;
 	}
 
+	/**
+	 * @param {object} options generation options
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} generated error code
+	 */
 	missingModulePromise({ request }) {
 		return `Promise.resolve().then(${this.throwMissingModuleErrorFunction({
 			request
 		})})`;
 	}
 
-	moduleId({ module, request }) {
+	/**
+	 * @param {object} options options object
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {Module} options.module the module
+	 * @param {string=} options.request the request that should be printed as comment
+	 * @param {string=} options.idExpr expression to use as id expression
+	 * @param {"expression" | "promise" | "statements"} options.type which kind of code should be returned
+	 * @returns {string} the code
+	 */
+	weakError({ module, chunkGraph, request, idExpr, type }) {
+		const moduleId = chunkGraph.getModuleId(module);
+		const errorMessage =
+			moduleId === null
+				? JSON.stringify("Module is not available (weak dependency)")
+				: idExpr
+					? `"Module '" + ${idExpr} + "' is not available (weak dependency)"`
+					: JSON.stringify(
+							`Module '${moduleId}' is not available (weak dependency)`
+						);
+		const comment = request ? `${Template.toNormalComment(request)} ` : "";
+		const errorStatements = `var e = new Error(${errorMessage}); ${
+			comment
+		}e.code = 'MODULE_NOT_FOUND'; throw e;`;
+		switch (type) {
+			case "statements":
+				return errorStatements;
+			case "promise":
+				return `Promise.resolve().then(${this.basicFunction(
+					"",
+					errorStatements
+				)})`;
+			case "expression":
+				return this.iife("", errorStatements);
+		}
+	}
+
+	/**
+	 * @param {object} options options object
+	 * @param {Module} options.module the module
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {string=} options.request the request that should be printed as comment
+	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
+	 * @returns {string} the expression
+	 */
+	moduleId({ module, chunkGraph, request, weak }) {
 		if (!module) {
 			return this.missingModule({
 				request
 			});
 		}
-		if (module.id === null) {
+		const moduleId = chunkGraph.getModuleId(module);
+		if (moduleId === null) {
+			if (weak) {
+				return "null /* weak dependency, without id */";
+			}
 			throw new Error(
-				`RuntimeTemplate.moduleId(): Module ${module.identifier()} has no id. This should not happen.`
+				`RuntimeTemplate.moduleId(): ${noModuleIdErrorMessage(
+					module,
+					chunkGraph
+				)}`
 			);
 		}
-		return `${this.comment({ request })}${JSON.stringify(module.id)}`;
+		return `${this.comment({ request })}${JSON.stringify(moduleId)}`;
 	}
 
-	moduleRaw({ module, request }) {
+	/**
+	 * @param {object} options options object
+	 * @param {Module | null} options.module the module
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {string=} options.request the request that should be printed as comment
+	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} the expression
+	 */
+	moduleRaw({ module, chunkGraph, request, weak, runtimeRequirements }) {
 		if (!module) {
 			return this.missingModule({
 				request
 			});
 		}
-		return `__webpack_require__(${this.moduleId({ module, request })})`;
+		const moduleId = chunkGraph.getModuleId(module);
+		if (moduleId === null) {
+			if (weak) {
+				// only weak referenced modules don't get an id
+				// we can always emit an error emitting code here
+				return this.weakError({
+					module,
+					chunkGraph,
+					request,
+					type: "expression"
+				});
+			}
+			throw new Error(
+				`RuntimeTemplate.moduleId(): ${noModuleIdErrorMessage(
+					module,
+					chunkGraph
+				)}`
+			);
+		}
+		runtimeRequirements.add(RuntimeGlobals.require);
+		return `${RuntimeGlobals.require}(${this.moduleId({
+			module,
+			chunkGraph,
+			request,
+			weak
+		})})`;
 	}
 
-	moduleExports({ module, request }) {
+	/**
+	 * @param {object} options options object
+	 * @param {Module | null} options.module the module
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {string} options.request the request that should be printed as comment
+	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} the expression
+	 */
+	moduleExports({ module, chunkGraph, request, weak, runtimeRequirements }) {
 		return this.moduleRaw({
 			module,
-			request
+			chunkGraph,
+			request,
+			weak,
+			runtimeRequirements
 		});
 	}
 
-	moduleNamespace({ module, request, strict }) {
+	/**
+	 * @param {object} options options object
+	 * @param {Module} options.module the module
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {string} options.request the request that should be printed as comment
+	 * @param {boolean=} options.strict if the current module is in strict esm mode
+	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} the expression
+	 */
+	moduleNamespace({
+		module,
+		chunkGraph,
+		request,
+		strict,
+		weak,
+		runtimeRequirements
+	}) {
 		if (!module) {
 			return this.missingModule({
 				request
 			});
 		}
+		if (chunkGraph.getModuleId(module) === null) {
+			if (weak) {
+				// only weak referenced modules don't get an id
+				// we can always emit an error emitting code here
+				return this.weakError({
+					module,
+					chunkGraph,
+					request,
+					type: "expression"
+				});
+			}
+			throw new Error(
+				`RuntimeTemplate.moduleNamespace(): ${noModuleIdErrorMessage(
+					module,
+					chunkGraph
+				)}`
+			);
+		}
 		const moduleId = this.moduleId({
 			module,
-			request
+			chunkGraph,
+			request,
+			weak
 		});
-		const exportsType = module.buildMeta && module.buildMeta.exportsType;
-		if (exportsType === "namespace") {
-			const rawModule = this.moduleRaw({
-				module,
-				request
-			});
-			return rawModule;
-		} else if (exportsType === "named") {
-			return `__webpack_require__.t(${moduleId}, 3)`;
-		} else if (strict) {
-			return `__webpack_require__.t(${moduleId}, 1)`;
-		} else {
-			return `__webpack_require__.t(${moduleId}, 7)`;
+		const exportsType = module.getExportsType(chunkGraph.moduleGraph, strict);
+		switch (exportsType) {
+			case "namespace":
+				return this.moduleRaw({
+					module,
+					chunkGraph,
+					request,
+					weak,
+					runtimeRequirements
+				});
+			case "default-with-named":
+				runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
+				return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 3)`;
+			case "default-only":
+				runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
+				return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 1)`;
+			case "dynamic":
+				runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
+				return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 7)`;
 		}
 	}
 
-	moduleNamespacePromise({ block, module, request, message, strict, weak }) {
+	/**
+	 * @param {object} options options object
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {AsyncDependenciesBlock=} options.block the current dependencies block
+	 * @param {Module} options.module the module
+	 * @param {string} options.request the request that should be printed as comment
+	 * @param {string} options.message a message for the comment
+	 * @param {boolean=} options.strict if the current module is in strict esm mode
+	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
+	 * @param {Dependency} options.dependency dependency
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} the promise expression
+	 */
+	moduleNamespacePromise({
+		chunkGraph,
+		block,
+		module,
+		request,
+		message,
+		strict,
+		weak,
+		dependency,
+		runtimeRequirements
+	}) {
 		if (!module) {
 			return this.missingModulePromise({
 				request
 			});
 		}
-		if (module.id === null) {
+		const moduleId = chunkGraph.getModuleId(module);
+		if (moduleId === null) {
+			if (weak) {
+				// only weak referenced modules don't get an id
+				// we can always emit an error emitting code here
+				return this.weakError({
+					module,
+					chunkGraph,
+					request,
+					type: "promise"
+				});
+			}
 			throw new Error(
-				`RuntimeTemplate.moduleNamespacePromise(): Module ${module.identifier()} has no id. This should not happen.`
+				`RuntimeTemplate.moduleNamespacePromise(): ${noModuleIdErrorMessage(
+					module,
+					chunkGraph
+				)}`
 			);
 		}
 		const promise = this.blockPromise({
+			chunkGraph,
 			block,
-			message
+			message,
+			runtimeRequirements
 		});
 
-		let getModuleFunction;
-		let idExpr = JSON.stringify(module.id);
+		/** @type {string} */
+		let appending;
+		let idExpr = JSON.stringify(chunkGraph.getModuleId(module));
 		const comment = this.comment({
 			request
 		});
@@ -148,75 +692,295 @@ module.exports = class RuntimeTemplate {
 				header += `var id = ${idExpr}; `;
 				idExpr = "id";
 			}
-			header += `if(!__webpack_require__.m[${idExpr}]) { var e = new Error("Module '" + ${idExpr} + "' is not available (weak dependency)"); e.code = 'MODULE_NOT_FOUND'; throw e; } `;
+			runtimeRequirements.add(RuntimeGlobals.moduleFactories);
+			header += `if(!${
+				RuntimeGlobals.moduleFactories
+			}[${idExpr}]) { ${this.weakError({
+				module,
+				chunkGraph,
+				request,
+				idExpr,
+				type: "statements"
+			})} } `;
 		}
-		const moduleId = this.moduleId({
-			module,
-			request
-		});
-		const exportsType = module.buildMeta && module.buildMeta.exportsType;
-		if (exportsType === "namespace") {
-			if (header) {
-				const rawModule = this.moduleRaw({
-					module,
-					request
-				});
-				getModuleFunction = `function() { ${header}return ${rawModule}; }`;
-			} else {
-				getModuleFunction = `__webpack_require__.bind(null, ${comment}${idExpr})`;
-			}
-		} else if (exportsType === "named") {
-			if (header) {
-				getModuleFunction = `function() { ${header}return __webpack_require__.t(${moduleId}, 3); }`;
-			} else {
-				getModuleFunction = `__webpack_require__.t.bind(null, ${comment}${idExpr}, 3)`;
-			}
-		} else if (strict) {
-			if (header) {
-				getModuleFunction = `function() { ${header}return __webpack_require__.t(${moduleId}, 1); }`;
+		const exportsType = module.getExportsType(chunkGraph.moduleGraph, strict);
+
+		const isModuleDeferred =
+			(dependency instanceof getHarmonyImportDependency() ||
+				dependency instanceof getImportDependency()) &&
+			ImportPhaseUtils.isDefer(dependency.phase) &&
+			!(/** @type {BuildMeta} */ (module.buildMeta).async);
+
+		if (isModuleDeferred) {
+			runtimeRequirements.add(RuntimeGlobals.makeDeferredNamespaceObject);
+
+			let mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
+			if (mode) mode = `${mode} | 16`;
+
+			const asyncDeps = Array.from(
+				getOutgoingAsyncModules(chunkGraph.moduleGraph, module),
+				(m) => chunkGraph.getModuleId(m)
+			).filter((id) => id !== null);
+			if (asyncDeps.length) {
+				if (header) {
+					appending = `.then(${this.basicFunction(
+						"",
+						`${header}return ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(${JSON.stringify(asyncDeps)});`
+					)})`;
+				} else {
+					runtimeRequirements.add(RuntimeGlobals.require);
+					appending = `.then(${this.returningFunction(`${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(${JSON.stringify(asyncDeps)})`)})`;
+				}
+				appending += `.then(${RuntimeGlobals.makeDeferredNamespaceObject}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}, ${mode}))`;
+			} else if (header) {
+				appending = `.then(${this.basicFunction(
+					"",
+					`${header}return ${RuntimeGlobals.makeDeferredNamespaceObject}(${comment}${idExpr}, ${mode});`
+				)})`;
 			} else {
-				getModuleFunction = `__webpack_require__.t.bind(null, ${comment}${idExpr}, 1)`;
+				runtimeRequirements.add(RuntimeGlobals.require);
+				appending = `.then(${RuntimeGlobals.makeDeferredNamespaceObject}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}, ${mode}))`;
 			}
 		} else {
-			if (header) {
-				getModuleFunction = `function() { ${header}return __webpack_require__.t(${moduleId}, 7); }`;
-			} else {
-				getModuleFunction = `__webpack_require__.t.bind(null, ${comment}${idExpr}, 7)`;
+			let fakeType = 16;
+			switch (exportsType) {
+				case "namespace":
+					if (header) {
+						const rawModule = this.moduleRaw({
+							module,
+							chunkGraph,
+							request,
+							weak,
+							runtimeRequirements
+						});
+						appending = `.then(${this.basicFunction(
+							"",
+							`${header}return ${rawModule};`
+						)})`;
+					} else {
+						runtimeRequirements.add(RuntimeGlobals.require);
+						appending = `.then(${RuntimeGlobals.require}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}))`;
+					}
+					break;
+				case "dynamic":
+					fakeType |= 4;
+				/* fall through */
+				case "default-with-named":
+					fakeType |= 2;
+				/* fall through */
+				case "default-only":
+					runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
+					if (chunkGraph.moduleGraph.isAsync(module)) {
+						if (header) {
+							const rawModule = this.moduleRaw({
+								module,
+								chunkGraph,
+								request,
+								weak,
+								runtimeRequirements
+							});
+							appending = `.then(${this.basicFunction(
+								"",
+								`${header}return ${rawModule};`
+							)})`;
+						} else {
+							runtimeRequirements.add(RuntimeGlobals.require);
+							appending = `.then(${RuntimeGlobals.require}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}))`;
+						}
+						appending += `.then(${this.returningFunction(
+							`${RuntimeGlobals.createFakeNamespaceObject}(m, ${fakeType})`,
+							"m"
+						)})`;
+					} else {
+						fakeType |= 1;
+						if (header) {
+							const moduleIdExpr = this.moduleId({
+								module,
+								chunkGraph,
+								request,
+								weak
+							});
+							const returnExpression = `${RuntimeGlobals.createFakeNamespaceObject}(${moduleIdExpr}, ${fakeType})`;
+							appending = `.then(${this.basicFunction(
+								"",
+								`${header}return ${returnExpression};`
+							)})`;
+						} else {
+							appending = `.then(${RuntimeGlobals.createFakeNamespaceObject}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}, ${fakeType}))`;
+						}
+					}
+					break;
 			}
 		}
 
-		return `${promise || "Promise.resolve()"}.then(${getModuleFunction})`;
+		return `${promise || "Promise.resolve()"}${appending}`;
 	}
 
-	importStatement({ update, module, request, importVar, originModule }) {
+	/**
+	 * @param {object} options options object
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {RuntimeSpec=} options.runtime runtime for which this code will be generated
+	 * @param {RuntimeSpec | boolean=} options.runtimeCondition only execute the statement in some runtimes
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} expression
+	 */
+	runtimeConditionExpression({
+		chunkGraph,
+		runtimeCondition,
+		runtime,
+		runtimeRequirements
+	}) {
+		if (runtimeCondition === undefined) return "true";
+		if (typeof runtimeCondition === "boolean") return `${runtimeCondition}`;
+		/** @type {Set} */
+		const positiveRuntimeIds = new Set();
+		forEachRuntime(runtimeCondition, (runtime) =>
+			positiveRuntimeIds.add(
+				`${chunkGraph.getRuntimeId(/** @type {string} */ (runtime))}`
+			)
+		);
+		/** @type {Set} */
+		const negativeRuntimeIds = new Set();
+		forEachRuntime(subtractRuntime(runtime, runtimeCondition), (runtime) =>
+			negativeRuntimeIds.add(
+				`${chunkGraph.getRuntimeId(/** @type {string} */ (runtime))}`
+			)
+		);
+		runtimeRequirements.add(RuntimeGlobals.runtimeId);
+		return compileBooleanMatcher.fromLists(
+			[...positiveRuntimeIds],
+			[...negativeRuntimeIds]
+		)(RuntimeGlobals.runtimeId);
+	}
+
+	/**
+	 * @param {object} options options object
+	 * @param {boolean=} options.update whether a new variable should be created or the existing one updated
+	 * @param {Module} options.module the module
+	 * @param {Module} options.originModule module in which the statement is emitted
+	 * @param {ModuleGraph} options.moduleGraph the module graph
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @param {string} options.importVar name of the import variable
+	 * @param {string=} options.request the request that should be printed as comment
+	 * @param {boolean=} options.weak true, if this is a weak dependency
+	 * @param {ModuleDependency=} options.dependency module dependency
+	 * @returns {[string, string]} the import statement and the compat statement
+	 */
+	importStatement({
+		update,
+		module,
+		moduleGraph,
+		chunkGraph,
+		request,
+		importVar,
+		originModule,
+		weak,
+		dependency,
+		runtimeRequirements
+	}) {
 		if (!module) {
-			return this.missingModuleStatement({
-				request
-			});
+			return [
+				this.missingModuleStatement({
+					request
+				}),
+				""
+			];
+		}
+
+		if (chunkGraph.getModuleId(module) === null) {
+			if (weak) {
+				// only weak referenced modules don't get an id
+				// we can always emit an error emitting code here
+				return [
+					this.weakError({
+						module,
+						chunkGraph,
+						request,
+						type: "statements"
+					}),
+					""
+				];
+			}
+			throw new Error(
+				`RuntimeTemplate.importStatement(): ${noModuleIdErrorMessage(
+					module,
+					chunkGraph
+				)}`
+			);
 		}
 		const moduleId = this.moduleId({
 			module,
-			request
+			chunkGraph,
+			request,
+			weak
 		});
 		const optDeclaration = update ? "" : "var ";
 
-		const exportsType = module.buildMeta && module.buildMeta.exportsType;
-		let content = `/* harmony import */ ${optDeclaration}${importVar} = __webpack_require__(${moduleId});\n`;
+		const exportsType = module.getExportsType(
+			chunkGraph.moduleGraph,
+			/** @type {BuildMeta} */
+			(originModule.buildMeta).strictHarmonyModule
+		);
+		runtimeRequirements.add(RuntimeGlobals.require);
+
+		/** @type {string} */
+		let importContent;
+
+		const isModuleDeferred =
+			(dependency instanceof getHarmonyImportDependency() ||
+				dependency instanceof getImportDependency()) &&
+			ImportPhaseUtils.isDefer(dependency.phase) &&
+			!(/** @type {BuildMeta} */ (module.buildMeta).async);
 
-		if (!exportsType && !originModule.buildMeta.strictHarmonyModule) {
-			content += `/* harmony import */ ${optDeclaration}${importVar}_default = /*#__PURE__*/__webpack_require__.n(${importVar});\n`;
+		if (isModuleDeferred) {
+			/** @type {Set} */
+			const outgoingAsyncModules = getOutgoingAsyncModules(moduleGraph, module);
+
+			importContent = `/* deferred harmony import */ ${optDeclaration}${importVar} = ${getOptimizedDeferredModule(
+				moduleId,
+				exportsType,
+				Array.from(outgoingAsyncModules, (mod) => chunkGraph.getModuleId(mod)),
+				runtimeRequirements
+			)};\n`;
+
+			return [importContent, ""];
 		}
-		if (exportsType === "named") {
-			if (Array.isArray(module.buildMeta.providedExports)) {
-				content += `${optDeclaration}${importVar}_namespace = /*#__PURE__*/__webpack_require__.t(${moduleId}, 1);\n`;
-			} else {
-				content += `${optDeclaration}${importVar}_namespace = /*#__PURE__*/__webpack_require__.t(${moduleId});\n`;
-			}
+		importContent = `/* harmony import */ ${optDeclaration}${importVar} = ${RuntimeGlobals.require}(${moduleId});\n`;
+
+		if (exportsType === "dynamic") {
+			runtimeRequirements.add(RuntimeGlobals.compatGetDefaultExport);
+			return [
+				importContent,
+				`/* harmony import */ ${optDeclaration}${importVar}_default = /*#__PURE__*/${RuntimeGlobals.compatGetDefaultExport}(${importVar});\n`
+			];
 		}
-		return content;
+		return [importContent, ""];
 	}
 
+	/**
+	 * @template GenerateContext
+	 * @param {object} options options
+	 * @param {ModuleGraph} options.moduleGraph the module graph
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {Module} options.module the module
+	 * @param {string} options.request the request
+	 * @param {string | string[]} options.exportName the export name
+	 * @param {Module} options.originModule the origin module
+	 * @param {boolean | undefined} options.asiSafe true, if location is safe for ASI, a bracket can be emitted
+	 * @param {boolean | undefined} options.isCall true, if expression will be called
+	 * @param {boolean | null} options.callContext when false, call context will not be preserved
+	 * @param {boolean} options.defaultInterop when true and accessing the default exports, interop code will be generated
+	 * @param {string} options.importVar the identifier name of the import variable
+	 * @param {InitFragment[]} options.initFragments init fragments will be added here
+	 * @param {RuntimeSpec} options.runtime runtime for which this code will be generated
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @param {ModuleDependency} options.dependency module dependency
+	 * @returns {string} expression
+	 */
 	exportFromImport({
+		moduleGraph,
+		chunkGraph,
 		module,
 		request,
 		exportName,
@@ -224,97 +988,301 @@ module.exports = class RuntimeTemplate {
 		asiSafe,
 		isCall,
 		callContext,
-		importVar
+		defaultInterop,
+		importVar,
+		initFragments,
+		runtime,
+		runtimeRequirements,
+		dependency
 	}) {
 		if (!module) {
 			return this.missingModule({
 				request
 			});
 		}
-		const exportsType = module.buildMeta && module.buildMeta.exportsType;
-
-		if (!exportsType) {
-			if (exportName === "default") {
-				if (!originModule.buildMeta.strictHarmonyModule) {
-					if (isCall) {
-						return `${importVar}_default()`;
-					} else if (asiSafe) {
-						return `(${importVar}_default())`;
-					} else {
-						return `${importVar}_default.a`;
+		if (!Array.isArray(exportName)) {
+			exportName = exportName ? [exportName] : [];
+		}
+		const exportsType = module.getExportsType(
+			moduleGraph,
+			/** @type {BuildMeta} */
+			(originModule.buildMeta).strictHarmonyModule
+		);
+
+		const isModuleDeferred =
+			(dependency instanceof getHarmonyImportDependency() ||
+				dependency instanceof getImportDependency()) &&
+			ImportPhaseUtils.isDefer(dependency.phase) &&
+			!(/** @type {BuildMeta} */ (module.buildMeta).async);
+
+		if (defaultInterop) {
+			// when the defaultInterop is used (when a ESM imports a CJS module),
+			if (exportName.length > 0 && exportName[0] === "default") {
+				if (isModuleDeferred && exportsType !== "namespace") {
+					const exportsInfo = moduleGraph.getExportsInfo(module);
+					const name = exportName.slice(1);
+					const used = exportsInfo.getUsedName(name, runtime);
+					if (!used) {
+						const comment = Template.toNormalComment(
+							`unused export ${propertyAccess(exportName)}`
+						);
+						return `${comment} undefined`;
 					}
-				} else {
-					return importVar;
+					const access = `${importVar}.a${propertyAccess(used)}`;
+					if (isCall || asiSafe === undefined) {
+						return access;
+					}
+					return asiSafe ? `(${access})` : `;(${access})`;
 				}
-			} else if (originModule.buildMeta.strictHarmonyModule) {
-				if (exportName) {
-					return "/* non-default import from non-esm module */undefined";
-				} else {
-					return `/*#__PURE__*/__webpack_require__.t(${importVar})`;
+				// accessing the .default property is same thing as `require()` the module.
+
+				// For example:
+				// import mod from "cjs";    mod.default.x;
+				// is translated to
+				// var mod = require("cjs"); mod.x;
+				switch (exportsType) {
+					case "dynamic":
+						if (isCall) {
+							return `${importVar}_default()${propertyAccess(exportName, 1)}`;
+						}
+						return asiSafe
+							? `(${importVar}_default()${propertyAccess(exportName, 1)})`
+							: asiSafe === false
+								? `;(${importVar}_default()${propertyAccess(exportName, 1)})`
+								: `${importVar}_default.a${propertyAccess(exportName, 1)}`;
+
+					case "default-only":
+					case "default-with-named":
+						exportName = exportName.slice(1);
+						break;
+				}
+			} else if (exportName.length > 0) {
+				// the property used is not .default.
+				// For example:
+				// import * as ns from "cjs"; cjs.prop;
+				if (exportsType === "default-only") {
+					// in the strictest case, it is a runtime error (e.g. NodeJS behavior of CJS-ESM interop).
+					return `/* non-default import from non-esm module */undefined${propertyAccess(
+						exportName,
+						1
+					)}`;
+				} else if (
+					exportsType !== "namespace" &&
+					exportName[0] === "__esModule"
+				) {
+					return "/* __esModule */true";
 				}
+			} else if (isModuleDeferred) {
+				// now exportName.length is 0
+				// fall through to the end of this function, create the namespace there.
+			} else if (
+				exportsType === "default-only" ||
+				exportsType === "default-with-named"
+			) {
+				// now exportName.length is 0, which means the namespace object is used in an unknown way
+				// for example:
+				// import * as ns from "cjs"; console.log(ns);
+				// we will need to createFakeNamespaceObject that simulates ES Module namespace object
+				runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject);
+				initFragments.push(
+					new InitFragment(
+						`var ${importVar}_namespace_cache;\n`,
+						InitFragment.STAGE_CONSTANTS,
+						-1,
+						`${importVar}_namespace_cache`
+					)
+				);
+				return `/*#__PURE__*/ ${
+					asiSafe ? "" : asiSafe === false ? ";" : "Object"
+				}(${importVar}_namespace_cache || (${importVar}_namespace_cache = ${
+					RuntimeGlobals.createFakeNamespaceObject
+				}(${importVar}${exportsType === "default-only" ? "" : ", 2"})))`;
 			}
 		}
 
-		if (exportsType === "named") {
-			if (exportName === "default") {
-				return importVar;
-			} else if (!exportName) {
-				return `${importVar}_namespace`;
+		if (exportName.length > 0) {
+			const exportsInfo = moduleGraph.getExportsInfo(module);
+			// in some case the exported item is renamed (get this by getUsedName). for example,
+			// x.default might be emitted as x.Z (default is renamed to Z)
+			const used = exportsInfo.getUsedName(exportName, runtime);
+			if (!used) {
+				const comment = Template.toNormalComment(
+					`unused export ${propertyAccess(exportName)}`
+				);
+				return `${comment} undefined`;
 			}
-		}
-
-		if (exportName) {
-			const used = module.isUsed(exportName);
-			const comment =
-				used !== exportName ? Template.toNormalComment(exportName) + " " : "";
-			const access = `${importVar}[${comment}${JSON.stringify(used)}]`;
-			if (isCall) {
-				if (callContext === false && asiSafe) {
-					return `(0,${access})`;
-				} else if (callContext === false) {
-					return `Object(${access})`;
-				}
+			const comment = equals(used, exportName)
+				? ""
+				: `${Template.toNormalComment(propertyAccess(exportName))} `;
+			const access = `${importVar}${
+				isModuleDeferred ? ".a" : ""
+			}${comment}${propertyAccess(used)}`;
+			if (isCall && callContext === false) {
+				return asiSafe
+					? `(0,${access})`
+					: asiSafe === false
+						? `;(0,${access})`
+						: `/*#__PURE__*/Object(${access})`;
 			}
 			return access;
-		} else {
-			return importVar;
 		}
+		if (isModuleDeferred) {
+			initFragments.push(
+				new InitFragment(
+					`var ${importVar}_deferred_namespace_cache;\n`,
+					InitFragment.STAGE_CONSTANTS,
+					-1,
+					`${importVar}_deferred_namespace_cache`
+				)
+			);
+
+			runtimeRequirements.add(RuntimeGlobals.makeDeferredNamespaceObject);
+			const id = chunkGraph.getModuleId(module);
+			const type = getMakeDeferredNamespaceModeFromExportsType(exportsType);
+			const init = `${
+				RuntimeGlobals.makeDeferredNamespaceObject
+			}(${JSON.stringify(id)}, ${type})`;
+
+			return `/*#__PURE__*/ ${
+				asiSafe ? "" : asiSafe === false ? ";" : "Object"
+			}(${importVar}_deferred_namespace_cache || (${importVar}_deferred_namespace_cache = ${init}))`;
+		}
+		// if we hit here, the importVar is either
+		// - already a ES module namespace object
+		// - or imported by a way that does not need interop.
+		return importVar;
 	}
 
-	blockPromise({ block, message }) {
-		if (!block || !block.chunkGroup || block.chunkGroup.chunks.length === 0) {
+	/**
+	 * @param {object} options options
+	 * @param {AsyncDependenciesBlock | undefined} options.block the async block
+	 * @param {string} options.message the message
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} expression
+	 */
+	blockPromise({ block, message, chunkGraph, runtimeRequirements }) {
+		if (!block) {
 			const comment = this.comment({
 				message
 			});
 			return `Promise.resolve(${comment.trim()})`;
 		}
-		const chunks = block.chunkGroup.chunks.filter(
-			chunk => !chunk.hasRuntime() && chunk.id !== null
+		const chunkGroup = chunkGraph.getBlockChunkGroup(block);
+		if (!chunkGroup || chunkGroup.chunks.length === 0) {
+			const comment = this.comment({
+				message
+			});
+			return `Promise.resolve(${comment.trim()})`;
+		}
+		const chunks = chunkGroup.chunks.filter(
+			(chunk) => !chunk.hasRuntime() && chunk.id !== null
 		);
 		const comment = this.comment({
 			message,
-			chunkName: block.chunkName,
-			chunkReason: block.chunkReason
+			chunkName: block.chunkName
 		});
 		if (chunks.length === 1) {
 			const chunkId = JSON.stringify(chunks[0].id);
-			return `__webpack_require__.e(${comment}${chunkId})`;
+			runtimeRequirements.add(RuntimeGlobals.ensureChunk);
+
+			const fetchPriority = chunkGroup.options.fetchPriority;
+
+			if (fetchPriority) {
+				runtimeRequirements.add(RuntimeGlobals.hasFetchPriority);
+			}
+
+			return `${RuntimeGlobals.ensureChunk}(${comment}${chunkId}${
+				fetchPriority ? `, ${JSON.stringify(fetchPriority)}` : ""
+			})`;
 		} else if (chunks.length > 0) {
-			const requireChunkId = chunk =>
-				`__webpack_require__.e(${JSON.stringify(chunk.id)})`;
+			runtimeRequirements.add(RuntimeGlobals.ensureChunk);
+
+			const fetchPriority = chunkGroup.options.fetchPriority;
+
+			if (fetchPriority) {
+				runtimeRequirements.add(RuntimeGlobals.hasFetchPriority);
+			}
+
+			/**
+			 * @param {Chunk} chunk chunk
+			 * @returns {string} require chunk id code
+			 */
+			const requireChunkId = (chunk) =>
+				`${RuntimeGlobals.ensureChunk}(${JSON.stringify(chunk.id)}${
+					fetchPriority ? `, ${JSON.stringify(fetchPriority)}` : ""
+				})`;
 			return `Promise.all(${comment.trim()}[${chunks
 				.map(requireChunkId)
 				.join(", ")}])`;
-		} else {
-			return `Promise.resolve(${comment.trim()})`;
 		}
+		return `Promise.resolve(${comment.trim()})`;
 	}
 
-	onError() {
-		return "__webpack_require__.oe";
+	/**
+	 * @param {object} options options
+	 * @param {AsyncDependenciesBlock} options.block the async block
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} expression
+	 */
+	asyncModuleFactory({ block, chunkGraph, runtimeRequirements, request }) {
+		const dep = block.dependencies[0];
+		const module = chunkGraph.moduleGraph.getModule(dep);
+		const ensureChunk = this.blockPromise({
+			block,
+			message: "",
+			chunkGraph,
+			runtimeRequirements
+		});
+		const factory = this.returningFunction(
+			this.moduleRaw({
+				module,
+				chunkGraph,
+				request,
+				runtimeRequirements
+			})
+		);
+		return this.returningFunction(
+			ensureChunk.startsWith("Promise.resolve(")
+				? `${factory}`
+				: `${ensureChunk}.then(${this.returningFunction(factory)})`
+		);
 	}
 
-	defineEsModuleFlagStatement({ exportsArgument }) {
-		return `__webpack_require__.r(${exportsArgument});\n`;
+	/**
+	 * @param {object} options options
+	 * @param {Dependency} options.dependency the dependency
+	 * @param {ChunkGraph} options.chunkGraph the chunk graph
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @param {string=} options.request request string used originally
+	 * @returns {string} expression
+	 */
+	syncModuleFactory({ dependency, chunkGraph, runtimeRequirements, request }) {
+		const module = chunkGraph.moduleGraph.getModule(dependency);
+		const factory = this.returningFunction(
+			this.moduleRaw({
+				module,
+				chunkGraph,
+				request,
+				runtimeRequirements
+			})
+		);
+		return this.returningFunction(factory);
+	}
+
+	/**
+	 * @param {object} options options
+	 * @param {string} options.exportsArgument the name of the exports object
+	 * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
+	 * @returns {string} statement
+	 */
+	defineEsModuleFlagStatement({ exportsArgument, runtimeRequirements }) {
+		runtimeRequirements.add(RuntimeGlobals.makeNamespaceObject);
+		runtimeRequirements.add(RuntimeGlobals.exports);
+		return `${RuntimeGlobals.makeNamespaceObject}(${exportsArgument});\n`;
 	}
-};
+}
+
+module.exports = RuntimeTemplate;
diff --git a/lib/SelfModuleFactory.js b/lib/SelfModuleFactory.js
new file mode 100644
index 00000000000..97562b280c9
--- /dev/null
+++ b/lib/SelfModuleFactory.js
@@ -0,0 +1,33 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("./ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+
+class SelfModuleFactory {
+	/**
+	 * @param {ModuleGraph} moduleGraph module graph
+	 */
+	constructor(moduleGraph) {
+		this.moduleGraph = moduleGraph;
+	}
+
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
+	create(data, callback) {
+		const module = this.moduleGraph.getParentModule(data.dependencies[0]);
+		callback(null, {
+			module
+		});
+	}
+}
+
+module.exports = SelfModuleFactory;
diff --git a/lib/SetVarMainTemplatePlugin.js b/lib/SetVarMainTemplatePlugin.js
deleted file mode 100644
index 63db2821a54..00000000000
--- a/lib/SetVarMainTemplatePlugin.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { ConcatSource } = require("webpack-sources");
-
-/** @typedef {import("./Compilation")} Compilation */
-
-class SetVarMainTemplatePlugin {
-	/**
-	 * @param {string} varExpression the accessor where the library is exported
-	 * @param {boolean} copyObject specify copying the exports
-	 */
-	constructor(varExpression, copyObject) {
-		/** @type {string} */
-		this.varExpression = varExpression;
-		/** @type {boolean} */
-		this.copyObject = copyObject;
-	}
-
-	/**
-	 * @param {Compilation} compilation the compilation instance
-	 * @returns {void}
-	 */
-	apply(compilation) {
-		const { mainTemplate, chunkTemplate } = compilation;
-
-		const onRenderWithEntry = (source, chunk, hash) => {
-			const varExpression = mainTemplate.getAssetPath(this.varExpression, {
-				hash,
-				chunk
-			});
-			if (this.copyObject) {
-				return new ConcatSource(
-					`(function(e, a) { for(var i in a) e[i] = a[i]; }(${varExpression}, `,
-					source,
-					"))"
-				);
-			} else {
-				const prefix = `${varExpression} =\n`;
-				return new ConcatSource(prefix, source);
-			}
-		};
-
-		for (const template of [mainTemplate, chunkTemplate]) {
-			template.hooks.renderWithEntry.tap(
-				"SetVarMainTemplatePlugin",
-				onRenderWithEntry
-			);
-		}
-
-		mainTemplate.hooks.globalHashPaths.tap(
-			"SetVarMainTemplatePlugin",
-			paths => {
-				if (this.varExpression) paths.push(this.varExpression);
-				return paths;
-			}
-		);
-		mainTemplate.hooks.hash.tap("SetVarMainTemplatePlugin", hash => {
-			hash.update("set var");
-			hash.update(`${this.varExpression}`);
-			hash.update(`${this.copyObject}`);
-		});
-	}
-}
-
-module.exports = SetVarMainTemplatePlugin;
diff --git a/lib/SingleEntryPlugin.js b/lib/SingleEntryPlugin.js
index 755a6b59725..65791735c79 100644
--- a/lib/SingleEntryPlugin.js
+++ b/lib/SingleEntryPlugin.js
@@ -1,44 +1,8 @@
 /*
 	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
+	Author Sean Larkin @thelarkinn
 */
-"use strict";
-const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
-
-class SingleEntryPlugin {
-	constructor(context, entry, name) {
-		this.context = context;
-		this.entry = entry;
-		this.name = name;
-	}
-
-	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"SingleEntryPlugin",
-			(compilation, { normalModuleFactory }) => {
-				compilation.dependencyFactories.set(
-					SingleEntryDependency,
-					normalModuleFactory
-				);
-			}
-		);
 
-		compiler.hooks.make.tapAsync(
-			"SingleEntryPlugin",
-			(compilation, callback) => {
-				const { entry, name, context } = this;
-
-				const dep = SingleEntryPlugin.createDependency(entry, name);
-				compilation.addEntry(context, dep, name, callback);
-			}
-		);
-	}
-
-	static createDependency(entry, name) {
-		const dep = new SingleEntryDependency(entry);
-		dep.loc = name;
-		return dep;
-	}
-}
+"use strict";
 
-module.exports = SingleEntryPlugin;
+module.exports = require("./EntryPlugin");
diff --git a/lib/SizeFormatHelpers.js b/lib/SizeFormatHelpers.js
index c4677f60bf8..9a89d78cd48 100644
--- a/lib/SizeFormatHelpers.js
+++ b/lib/SizeFormatHelpers.js
@@ -2,11 +2,14 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Sean Larkin @thelarkinn
 */
-"use strict";
 
-const SizeFormatHelpers = exports;
+"use strict";
 
-SizeFormatHelpers.formatSize = size => {
+/**
+ * @param {number=} size the size in bytes
+ * @returns {string} the formatted size
+ */
+module.exports.formatSize = (size) => {
 	if (typeof size !== "number" || Number.isNaN(size) === true) {
 		return "unknown size";
 	}
@@ -18,7 +21,5 @@ SizeFormatHelpers.formatSize = size => {
 	const abbreviations = ["bytes", "KiB", "MiB", "GiB"];
 	const index = Math.floor(Math.log(size) / Math.log(1024));
 
-	return `${+(size / Math.pow(1024, index)).toPrecision(3)} ${
-		abbreviations[index]
-	}`;
+	return `${Number((size / 1024 ** index).toPrecision(3))} ${abbreviations[index]}`;
 };
diff --git a/lib/SourceMapDevToolModuleOptionsPlugin.js b/lib/SourceMapDevToolModuleOptionsPlugin.js
index e593ced7b3d..73869566f9f 100644
--- a/lib/SourceMapDevToolModuleOptionsPlugin.js
+++ b/lib/SourceMapDevToolModuleOptionsPlugin.js
@@ -2,47 +2,50 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+
+/** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").SourceMapDevToolPluginOptions} SourceMapDevToolPluginOptions */
+/** @typedef {import("./Compilation")} Compilation */
+
+const PLUGIN_NAME = "SourceMapDevToolModuleOptionsPlugin";
 
 class SourceMapDevToolModuleOptionsPlugin {
-	constructor(options) {
+	/**
+	 * @param {SourceMapDevToolPluginOptions=} options options
+	 */
+	constructor(options = {}) {
+		/** @type {SourceMapDevToolPluginOptions} */
 		this.options = options;
 	}
 
+	/**
+	 * @param {Compilation} compilation the compiler instance
+	 * @returns {void}
+	 */
 	apply(compilation) {
 		const options = this.options;
 		if (options.module !== false) {
-			compilation.hooks.buildModule.tap(
-				"SourceMapDevToolModuleOptionsPlugin",
-				module => {
-					module.useSourceMap = true;
-				}
-			);
-		}
-		if (options.lineToLine === true) {
-			compilation.hooks.buildModule.tap(
-				"SourceMapDevToolModuleOptionsPlugin",
-				module => {
-					module.lineToLine = true;
-				}
-			);
-		} else if (options.lineToLine) {
-			compilation.hooks.buildModule.tap(
-				"SourceMapDevToolModuleOptionsPlugin",
-				module => {
-					if (!module.resource) return;
-					let resourcePath = module.resource;
-					const idx = resourcePath.indexOf("?");
-					if (idx >= 0) resourcePath = resourcePath.substr(0, idx);
-					module.lineToLine = ModuleFilenameHelpers.matchObject(
-						options.lineToLine,
-						resourcePath
-					);
-				}
-			);
+			compilation.hooks.buildModule.tap(PLUGIN_NAME, (module) => {
+				module.useSourceMap = true;
+			});
+			compilation.hooks.runtimeModule.tap(PLUGIN_NAME, (module) => {
+				module.useSourceMap = true;
+			});
+		} else {
+			compilation.hooks.buildModule.tap(PLUGIN_NAME, (module) => {
+				module.useSimpleSourceMap = true;
+			});
+			compilation.hooks.runtimeModule.tap(PLUGIN_NAME, (module) => {
+				module.useSimpleSourceMap = true;
+			});
 		}
+		JavascriptModulesPlugin.getCompilationHooks(compilation).useSourceMap.tap(
+			PLUGIN_NAME,
+			() => true
+		);
 	}
 }
 
diff --git a/lib/SourceMapDevToolPlugin.js b/lib/SourceMapDevToolPlugin.js
index 111d7a877ff..a837493a391 100644
--- a/lib/SourceMapDevToolPlugin.js
+++ b/lib/SourceMapDevToolPlugin.js
@@ -2,35 +2,98 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const path = require("path");
+const asyncLib = require("neo-async");
 const { ConcatSource, RawSource } = require("webpack-sources");
+const Compilation = require("./Compilation");
 const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
+const ProgressPlugin = require("./ProgressPlugin");
 const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
 const createHash = require("./util/createHash");
+const { dirname, relative } = require("./util/fs");
+const generateDebugId = require("./util/generateDebugId");
+const { makePathsAbsolute } = require("./util/identifier");
+
+/** @typedef {import("webpack-sources").MapOptions} MapOptions */
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolNamespace} DevtoolNamespace */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolModuleFilenameTemplate} DevtoolModuleFilenameTemplate */
+/** @typedef {import("../declarations/WebpackOptions").DevtoolFallbackModuleFilenameTemplate} DevtoolFallbackModuleFilenameTemplate */
+/** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").SourceMapDevToolPluginOptions} SourceMapDevToolPluginOptions */
+/** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").Rules} Rules */
+/** @typedef {import("./CacheFacade").ItemCacheFacade} ItemCacheFacade */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Compilation").Asset} Asset */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./NormalModule").RawSourceMap} RawSourceMap */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
+
+/**
+ * @typedef {object} SourceMapTask
+ * @property {Source} asset
+ * @property {AssetInfo} assetInfo
+ * @property {(string | Module)[]} modules
+ * @property {string} source
+ * @property {string} file
+ * @property {RawSourceMap} sourceMap
+ * @property {ItemCacheFacade} cacheItem cache item
+ */
 
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/SourceMapDevToolPlugin.json");
+const METACHARACTERS_REGEXP = /[-[\]\\/{}()*+?.^$|]/g;
+const CONTENT_HASH_DETECT_REGEXP = /\[contenthash(?::\w+)?\]/;
+const CSS_AND_JS_MODULE_EXTENSIONS_REGEXP = /\.((c|m)?js|css)($|\?)/i;
+const CSS_EXTENSION_DETECT_REGEXP = /\.css(?:$|\?)/i;
+const MAP_URL_COMMENT_REGEXP = /\[map\]/g;
+const URL_COMMENT_REGEXP = /\[url\]/g;
+const URL_FORMATTING_REGEXP = /^\n\/\/(.*)$/;
 
-const basename = name => {
-	if (!name.includes("/")) return name;
-	return name.substr(name.lastIndexOf("/") + 1);
+/**
+ * Reset's .lastIndex of stateful Regular Expressions
+ * For when `test` or `exec` is called on them
+ * @param {RegExp} regexp Stateful Regular Expression to be reset
+ * @returns {void}
+ */
+const resetRegexpState = (regexp) => {
+	regexp.lastIndex = -1;
 };
 
-const assetsCache = new WeakMap();
-
-const getTaskForFile = (file, chunk, options, compilation) => {
-	const asset = compilation.assets[file];
-	const cache = assetsCache.get(asset);
-	if (cache && cache.file === file) {
-		for (const cachedFile in cache.assets) {
-			compilation.assets[cachedFile] = cache.assets[cachedFile];
-			if (cachedFile !== file) chunk.files.push(cachedFile);
-		}
-		return;
-	}
-	let source, sourceMap;
+/**
+ * Escapes regular expression metacharacters
+ * @param {string} str String to quote
+ * @returns {string} Escaped string
+ */
+const quoteMeta = (str) => str.replace(METACHARACTERS_REGEXP, "\\$&");
+
+/**
+ * Creating {@link SourceMapTask} for given file
+ * @param {string} file current compiled file
+ * @param {Source} asset the asset
+ * @param {AssetInfo} assetInfo the asset info
+ * @param {MapOptions} options source map options
+ * @param {Compilation} compilation compilation instance
+ * @param {ItemCacheFacade} cacheItem cache item
+ * @returns {SourceMapTask | undefined} created task instance or `undefined`
+ */
+const getTaskForFile = (
+	file,
+	asset,
+	assetInfo,
+	options,
+	compilation,
+	cacheItem
+) => {
+	/** @type {string | Buffer} */
+	let source;
+	/** @type {null | RawSourceMap} */
+	let sourceMap;
+	/**
+	 * Check if asset can build source map
+	 */
 	if (asset.sourceAndMap) {
 		const sourceAndMap = asset.sourceAndMap(options);
 		sourceMap = sourceAndMap.map;
@@ -39,44 +102,79 @@ const getTaskForFile = (file, chunk, options, compilation) => {
 		sourceMap = asset.map(options);
 		source = asset.source();
 	}
-	if (sourceMap) {
-		return {
-			chunk,
-			file,
-			asset,
-			source,
-			sourceMap,
-			modules: undefined
-		};
-	}
-};
+	if (!sourceMap || typeof source !== "string") return;
+	const context = compilation.options.context;
+	const root = compilation.compiler.root;
+	const cachedAbsolutify = makePathsAbsolute.bindContextCache(context, root);
+	const modules = sourceMap.sources.map((source) => {
+		if (!source.startsWith("webpack://")) return source;
+		source = cachedAbsolutify(source.slice(10));
+		const module = compilation.findModule(source);
+		return module || source;
+	});
 
-class SourceMapDevToolPlugin {
-	constructor(options) {
-		if (arguments.length > 1) {
-			throw new Error(
-				"SourceMapDevToolPlugin only takes one argument (pass an options object)"
-			);
-		}
+	return {
+		file,
+		asset,
+		source,
+		assetInfo,
+		sourceMap,
+		modules,
+		cacheItem
+	};
+};
 
-		validateOptions(schema, options || {}, "SourceMap DevTool Plugin");
+const PLUGIN_NAME = "SourceMapDevToolPlugin";
 
-		if (!options) options = {};
+class SourceMapDevToolPlugin {
+	/**
+	 * @param {SourceMapDevToolPluginOptions=} options options object
+	 * @throws {Error} throws error, if got more than 1 arguments
+	 */
+	constructor(options = {}) {
+		/** @type {undefined | null | false | string} */
 		this.sourceMapFilename = options.filename;
+		/** @type {false | TemplatePath} */
 		this.sourceMappingURLComment =
 			options.append === false
 				? false
-				: options.append || "\n//# sourceMappingURL=[url]";
+				: // eslint-disable-next-line no-useless-concat
+					options.append || "\n//# source" + "MappingURL=[url]";
+		/** @type {DevtoolModuleFilenameTemplate} */
 		this.moduleFilenameTemplate =
 			options.moduleFilenameTemplate || "webpack://[namespace]/[resourcePath]";
+		/** @type {DevtoolFallbackModuleFilenameTemplate} */
 		this.fallbackModuleFilenameTemplate =
 			options.fallbackModuleFilenameTemplate ||
 			"webpack://[namespace]/[resourcePath]?[hash]";
+		/** @type {DevtoolNamespace} */
 		this.namespace = options.namespace || "";
+		/** @type {SourceMapDevToolPluginOptions} */
 		this.options = options;
 	}
 
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/SourceMapDevToolPlugin.json"),
+				this.options,
+				{
+					name: "SourceMap DevTool Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../schemas/plugins/SourceMapDevToolPlugin.check")(options)
+			);
+		});
+
+		const outputFs =
+			/** @type {OutputFileSystem} */
+			(compiler.outputFileSystem);
 		const sourceMapFilename = this.sourceMapFilename;
 		const sourceMappingURLComment = this.sourceMappingURLComment;
 		const moduleFilenameTemplate = this.moduleFilenameTemplate;
@@ -84,214 +182,463 @@ class SourceMapDevToolPlugin {
 		const fallbackModuleFilenameTemplate = this.fallbackModuleFilenameTemplate;
 		const requestShortener = compiler.requestShortener;
 		const options = this.options;
-		options.test = options.test || /\.(js|css)($|\?)/i;
+		options.test = options.test || CSS_AND_JS_MODULE_EXTENSIONS_REGEXP;
 
+		/** @type {(filename: string) => boolean} */
 		const matchObject = ModuleFilenameHelpers.matchObject.bind(
 			undefined,
 			options
 		);
 
-		compiler.hooks.compilation.tap("SourceMapDevToolPlugin", compilation => {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
 			new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
 
-			compilation.hooks.afterOptimizeChunkAssets.tap(
+			compilation.hooks.processAssets.tapAsync(
 				{
-					name: "SourceMapDevToolPlugin",
-					context: true
+					name: PLUGIN_NAME,
+					stage: Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING,
+					additionalAssets: true
 				},
-				(context, chunks) => {
+				(assets, callback) => {
+					const chunkGraph = compilation.chunkGraph;
+					const cache = compilation.getCache(PLUGIN_NAME);
+					/** @type {Map} */
 					const moduleToSourceNameMapping = new Map();
 					const reportProgress =
-						context && context.reportProgress
-							? context.reportProgress
-							: () => {};
+						ProgressPlugin.getReporter(compilation.compiler) || (() => {});
 
-					const files = [];
-					for (const chunk of chunks) {
+					/** @type {Map} */
+					const fileToChunk = new Map();
+					for (const chunk of compilation.chunks) {
 						for (const file of chunk.files) {
-							if (matchObject(file)) {
-								files.push({
-									file,
-									chunk
-								});
-							}
+							fileToChunk.set(file, chunk);
+						}
+						for (const file of chunk.auxiliaryFiles) {
+							fileToChunk.set(file, chunk);
+						}
+					}
+
+					/** @type {string[]} */
+					const files = [];
+					for (const file of Object.keys(assets)) {
+						if (matchObject(file)) {
+							files.push(file);
 						}
 					}
 
-					reportProgress(0.0);
+					reportProgress(0);
+					/** @type {SourceMapTask[]} */
 					const tasks = [];
-					files.forEach(({ file, chunk }, idx) => {
-						reportProgress(
-							(0.5 * idx) / files.length,
-							file,
-							"generate SourceMap"
-						);
-						const task = getTaskForFile(file, chunk, options, compilation);
-
-						if (task) {
-							const modules = task.sourceMap.sources.map(source => {
-								const module = compilation.findModule(source);
-								return module || source;
+					let fileIndex = 0;
+
+					asyncLib.each(
+						files,
+						(file, callback) => {
+							const asset =
+								/** @type {Readonly} */
+								(compilation.getAsset(file));
+							if (asset.info.related && asset.info.related.sourceMap) {
+								fileIndex++;
+								return callback();
+							}
+
+							const chunk = fileToChunk.get(file);
+							const sourceMapNamespace = compilation.getPath(this.namespace, {
+								chunk
 							});
 
-							for (let idx = 0; idx < modules.length; idx++) {
-								const module = modules[idx];
-								if (!moduleToSourceNameMapping.get(module)) {
-									moduleToSourceNameMapping.set(
-										module,
-										ModuleFilenameHelpers.createFilename(
-											module,
-											{
-												moduleFilenameTemplate: moduleFilenameTemplate,
-												namespace: namespace
-											},
-											requestShortener
-										)
+							const cacheItem = cache.getItemCache(
+								file,
+								cache.mergeEtags(
+									cache.getLazyHashedEtag(asset.source),
+									sourceMapNamespace
+								)
+							);
+
+							cacheItem.get((err, cacheEntry) => {
+								if (err) {
+									return callback(err);
+								}
+								/**
+								 * If presented in cache, reassigns assets. Cache assets already have source maps.
+								 */
+								if (cacheEntry) {
+									const { assets, assetsInfo } = cacheEntry;
+									for (const cachedFile of Object.keys(assets)) {
+										if (cachedFile === file) {
+											compilation.updateAsset(
+												cachedFile,
+												assets[cachedFile],
+												assetsInfo[cachedFile]
+											);
+										} else {
+											compilation.emitAsset(
+												cachedFile,
+												assets[cachedFile],
+												assetsInfo[cachedFile]
+											);
+										}
+										/**
+										 * Add file to chunk, if not presented there
+										 */
+										if (cachedFile !== file && chunk !== undefined) {
+											chunk.auxiliaryFiles.add(cachedFile);
+										}
+									}
+
+									reportProgress(
+										(0.5 * ++fileIndex) / files.length,
+										file,
+										"restored cached SourceMap"
 									);
+
+									return callback();
 								}
-							}
 
-							task.modules = modules;
+								reportProgress(
+									(0.5 * fileIndex) / files.length,
+									file,
+									"generate SourceMap"
+								);
 
-							tasks.push(task);
-						}
-					});
-
-					reportProgress(0.5, "resolve sources");
-					const usedNamesSet = new Set(moduleToSourceNameMapping.values());
-					const conflictDetectionSet = new Set();
-
-					// all modules in defined order (longest identifier first)
-					const allModules = Array.from(moduleToSourceNameMapping.keys()).sort(
-						(a, b) => {
-							const ai = typeof a === "string" ? a : a.identifier();
-							const bi = typeof b === "string" ? b : b.identifier();
-							return ai.length - bi.length;
-						}
-					);
+								/** @type {SourceMapTask | undefined} */
+								const task = getTaskForFile(
+									file,
+									asset.source,
+									asset.info,
+									{
+										module: options.module,
+										columns: options.columns
+									},
+									compilation,
+									cacheItem
+								);
 
-					// find modules with conflicting source names
-					for (let idx = 0; idx < allModules.length; idx++) {
-						const module = allModules[idx];
-						let sourceName = moduleToSourceNameMapping.get(module);
-						let hasName = conflictDetectionSet.has(sourceName);
-						if (!hasName) {
-							conflictDetectionSet.add(sourceName);
-							continue;
-						}
+								if (task) {
+									const modules = task.modules;
 
-						// try the fallback name first
-						sourceName = ModuleFilenameHelpers.createFilename(
-							module,
-							{
-								moduleFilenameTemplate: fallbackModuleFilenameTemplate,
-								namespace: namespace
-							},
-							requestShortener
-						);
-						hasName = usedNamesSet.has(sourceName);
-						if (!hasName) {
-							moduleToSourceNameMapping.set(module, sourceName);
-							usedNamesSet.add(sourceName);
-							continue;
-						}
+									for (let idx = 0; idx < modules.length; idx++) {
+										const module = modules[idx];
 
-						// elsewise just append stars until we have a valid name
-						while (hasName) {
-							sourceName += "*";
-							hasName = usedNamesSet.has(sourceName);
-						}
-						moduleToSourceNameMapping.set(module, sourceName);
-						usedNamesSet.add(sourceName);
-					}
-					tasks.forEach((task, index) => {
-						reportProgress(
-							0.5 + (0.5 * index) / tasks.length,
-							task.file,
-							"attach SourceMap"
-						);
-						const assets = Object.create(null);
-						const chunk = task.chunk;
-						const file = task.file;
-						const asset = task.asset;
-						const sourceMap = task.sourceMap;
-						const source = task.source;
-						const modules = task.modules;
-						const moduleFilenames = modules.map(m =>
-							moduleToSourceNameMapping.get(m)
-						);
-						sourceMap.sources = moduleFilenames;
-						if (options.noSources) {
-							sourceMap.sourcesContent = undefined;
-						}
-						sourceMap.sourceRoot = options.sourceRoot || "";
-						sourceMap.file = file;
-						assetsCache.set(asset, { file, assets });
-						let currentSourceMappingURLComment = sourceMappingURLComment;
-						if (
-							currentSourceMappingURLComment !== false &&
-							/\.css($|\?)/i.test(file)
-						) {
-							currentSourceMappingURLComment = currentSourceMappingURLComment.replace(
-								/^\n\/\/(.*)$/,
-								"\n/*$1*/"
-							);
-						}
-						const sourceMapString = JSON.stringify(sourceMap);
-						if (sourceMapFilename) {
-							let filename = file;
-							let query = "";
-							const idx = filename.indexOf("?");
-							if (idx >= 0) {
-								query = filename.substr(idx);
-								filename = filename.substr(0, idx);
-							}
-							let sourceMapFile = compilation.getPath(sourceMapFilename, {
-								chunk,
-								filename: options.fileContext
-									? path.relative(options.fileContext, filename)
-									: filename,
-								query,
-								basename: basename(filename),
-								contentHash: createHash("md4")
-									.update(sourceMapString)
-									.digest("hex")
+										if (
+											typeof module === "string" &&
+											/^(?:data|https?):/.test(module)
+										) {
+											moduleToSourceNameMapping.set(module, module);
+											continue;
+										}
+
+										if (!moduleToSourceNameMapping.get(module)) {
+											moduleToSourceNameMapping.set(
+												module,
+												ModuleFilenameHelpers.createFilename(
+													module,
+													{
+														moduleFilenameTemplate,
+														namespace: sourceMapNamespace
+													},
+													{
+														requestShortener,
+														chunkGraph,
+														hashFunction: compilation.outputOptions.hashFunction
+													}
+												)
+											);
+										}
+									}
+
+									tasks.push(task);
+								}
+
+								reportProgress(
+									(0.5 * ++fileIndex) / files.length,
+									file,
+									"generated SourceMap"
+								);
+
+								callback();
 							});
-							const sourceMapUrl = options.publicPath
-								? options.publicPath + sourceMapFile.replace(/\\/g, "/")
-								: path
-										.relative(path.dirname(file), sourceMapFile)
-										.replace(/\\/g, "/");
-							if (currentSourceMappingURLComment !== false) {
-								assets[file] = compilation.assets[file] = new ConcatSource(
-									new RawSource(source),
-									currentSourceMappingURLComment.replace(
-										/\[url\]/g,
-										sourceMapUrl
-									)
+						},
+						(err) => {
+							if (err) {
+								return callback(err);
+							}
+
+							reportProgress(0.5, "resolve sources");
+							/** @type {Set} */
+							const usedNamesSet = new Set(moduleToSourceNameMapping.values());
+							/** @type {Set} */
+							const conflictDetectionSet = new Set();
+
+							/**
+							 * all modules in defined order (longest identifier first)
+							 * @type {(string | Module)[]}
+							 */
+							const allModules = [...moduleToSourceNameMapping.keys()].sort(
+								(a, b) => {
+									const ai = typeof a === "string" ? a : a.identifier();
+									const bi = typeof b === "string" ? b : b.identifier();
+									return ai.length - bi.length;
+								}
+							);
+
+							// find modules with conflicting source names
+							for (let idx = 0; idx < allModules.length; idx++) {
+								const module = allModules[idx];
+								let sourceName =
+									/** @type {string} */
+									(moduleToSourceNameMapping.get(module));
+								let hasName = conflictDetectionSet.has(sourceName);
+								if (!hasName) {
+									conflictDetectionSet.add(sourceName);
+									continue;
+								}
+
+								// try the fallback name first
+								sourceName = ModuleFilenameHelpers.createFilename(
+									module,
+									{
+										moduleFilenameTemplate: fallbackModuleFilenameTemplate,
+										namespace
+									},
+									{
+										requestShortener,
+										chunkGraph,
+										hashFunction: compilation.outputOptions.hashFunction
+									}
 								);
+								hasName = usedNamesSet.has(sourceName);
+								if (!hasName) {
+									moduleToSourceNameMapping.set(module, sourceName);
+									usedNamesSet.add(sourceName);
+									continue;
+								}
+
+								// otherwise just append stars until we have a valid name
+								while (hasName) {
+									sourceName += "*";
+									hasName = usedNamesSet.has(sourceName);
+								}
+								moduleToSourceNameMapping.set(module, sourceName);
+								usedNamesSet.add(sourceName);
 							}
-							assets[sourceMapFile] = compilation.assets[
-								sourceMapFile
-							] = new RawSource(sourceMapString);
-							chunk.files.push(sourceMapFile);
-						} else {
-							assets[file] = compilation.assets[file] = new ConcatSource(
-								new RawSource(source),
-								currentSourceMappingURLComment
-									.replace(/\[map\]/g, () => sourceMapString)
-									.replace(
-										/\[url\]/g,
-										() =>
-											`data:application/json;charset=utf-8;base64,${Buffer.from(
-												sourceMapString,
-												"utf-8"
-											).toString("base64")}`
-									)
+
+							let taskIndex = 0;
+
+							asyncLib.each(
+								tasks,
+								(task, callback) => {
+									/** @type {Record} */
+									const assets = Object.create(null);
+									/** @type {Record} */
+									const assetsInfo = Object.create(null);
+									const file = task.file;
+									const chunk = fileToChunk.get(file);
+									const sourceMap = task.sourceMap;
+									const source = task.source;
+									const modules = task.modules;
+
+									reportProgress(
+										0.5 + (0.5 * taskIndex) / tasks.length,
+										file,
+										"attach SourceMap"
+									);
+
+									const moduleFilenames = modules.map((m) =>
+										moduleToSourceNameMapping.get(m)
+									);
+									sourceMap.sources = /** @type {string[]} */ (moduleFilenames);
+									if (options.ignoreList) {
+										const ignoreList = sourceMap.sources.reduce(
+											/** @type {(acc: number[], sourceName: string, idx: number) => number[]} */ (
+												(acc, sourceName, idx) => {
+													const rule = /** @type {Rules} */ (
+														options.ignoreList
+													);
+													if (
+														ModuleFilenameHelpers.matchPart(sourceName, rule)
+													) {
+														acc.push(idx);
+													}
+													return acc;
+												}
+											),
+											[]
+										);
+										if (ignoreList.length > 0) {
+											sourceMap.ignoreList = ignoreList;
+										}
+									}
+
+									if (options.noSources) {
+										sourceMap.sourcesContent = undefined;
+									}
+									sourceMap.sourceRoot = options.sourceRoot || "";
+									sourceMap.file = file;
+									const usesContentHash =
+										sourceMapFilename &&
+										CONTENT_HASH_DETECT_REGEXP.test(sourceMapFilename);
+
+									resetRegexpState(CONTENT_HASH_DETECT_REGEXP);
+
+									// If SourceMap and asset uses contenthash, avoid a circular dependency by hiding hash in `file`
+									if (usesContentHash && task.assetInfo.contenthash) {
+										const contenthash = task.assetInfo.contenthash;
+										const pattern = Array.isArray(contenthash)
+											? contenthash.map(quoteMeta).join("|")
+											: quoteMeta(contenthash);
+										sourceMap.file = sourceMap.file.replace(
+											new RegExp(pattern, "g"),
+											(m) => "x".repeat(m.length)
+										);
+									}
+
+									/** @type {false | TemplatePath} */
+									let currentSourceMappingURLComment = sourceMappingURLComment;
+									const cssExtensionDetected =
+										CSS_EXTENSION_DETECT_REGEXP.test(file);
+									resetRegexpState(CSS_EXTENSION_DETECT_REGEXP);
+									if (
+										currentSourceMappingURLComment !== false &&
+										typeof currentSourceMappingURLComment !== "function" &&
+										cssExtensionDetected
+									) {
+										currentSourceMappingURLComment =
+											currentSourceMappingURLComment.replace(
+												URL_FORMATTING_REGEXP,
+												"\n/*$1*/"
+											);
+									}
+
+									if (options.debugIds) {
+										const debugId = generateDebugId(source, sourceMap.file);
+										sourceMap.debugId = debugId;
+
+										const debugIdComment = `\n//# debugId=${debugId}`;
+										currentSourceMappingURLComment =
+											currentSourceMappingURLComment
+												? `${debugIdComment}${currentSourceMappingURLComment}`
+												: debugIdComment;
+									}
+
+									const sourceMapString = JSON.stringify(sourceMap);
+									if (sourceMapFilename) {
+										const filename = file;
+										const sourceMapContentHash = usesContentHash
+											? createHash(compilation.outputOptions.hashFunction)
+													.update(sourceMapString)
+													.digest("hex")
+											: undefined;
+
+										const pathParams = {
+											chunk,
+											filename: options.fileContext
+												? relative(
+														outputFs,
+														`/${options.fileContext}`,
+														`/${filename}`
+													)
+												: filename,
+											contentHash: sourceMapContentHash
+										};
+										const { path: sourceMapFile, info: sourceMapInfo } =
+											compilation.getPathWithInfo(
+												sourceMapFilename,
+												pathParams
+											);
+										const sourceMapUrl = options.publicPath
+											? options.publicPath + sourceMapFile
+											: relative(
+													outputFs,
+													dirname(outputFs, `/${file}`),
+													`/${sourceMapFile}`
+												);
+										/** @type {Source} */
+										let asset = new RawSource(source);
+										if (currentSourceMappingURLComment !== false) {
+											// Add source map url to compilation asset, if currentSourceMappingURLComment is set
+											asset = new ConcatSource(
+												asset,
+												compilation.getPath(currentSourceMappingURLComment, {
+													url: sourceMapUrl,
+													...pathParams
+												})
+											);
+										}
+										const assetInfo = {
+											related: { sourceMap: sourceMapFile }
+										};
+										assets[file] = asset;
+										assetsInfo[file] = assetInfo;
+										compilation.updateAsset(file, asset, assetInfo);
+										// Add source map file to compilation assets and chunk files
+										const sourceMapAsset = new RawSource(sourceMapString);
+										const sourceMapAssetInfo = {
+											...sourceMapInfo,
+											development: true
+										};
+										assets[sourceMapFile] = sourceMapAsset;
+										assetsInfo[sourceMapFile] = sourceMapAssetInfo;
+										compilation.emitAsset(
+											sourceMapFile,
+											sourceMapAsset,
+											sourceMapAssetInfo
+										);
+										if (chunk !== undefined) {
+											chunk.auxiliaryFiles.add(sourceMapFile);
+										}
+									} else {
+										if (currentSourceMappingURLComment === false) {
+											throw new Error(
+												`${PLUGIN_NAME}: append can't be false when no filename is provided`
+											);
+										}
+										if (typeof currentSourceMappingURLComment === "function") {
+											throw new Error(
+												`${PLUGIN_NAME}: append can't be a function when no filename is provided`
+											);
+										}
+										/**
+										 * Add source map as data url to asset
+										 */
+										const asset = new ConcatSource(
+											new RawSource(source),
+											currentSourceMappingURLComment
+												.replace(MAP_URL_COMMENT_REGEXP, () => sourceMapString)
+												.replace(
+													URL_COMMENT_REGEXP,
+													() =>
+														`data:application/json;charset=utf-8;base64,${Buffer.from(
+															sourceMapString,
+															"utf8"
+														).toString("base64")}`
+												)
+										);
+										assets[file] = asset;
+										assetsInfo[file] = undefined;
+										compilation.updateAsset(file, asset);
+									}
+
+									task.cacheItem.store({ assets, assetsInfo }, (err) => {
+										reportProgress(
+											0.5 + (0.5 * ++taskIndex) / tasks.length,
+											task.file,
+											"attached SourceMap"
+										);
+
+										if (err) {
+											return callback(err);
+										}
+										callback();
+									});
+								},
+								(err) => {
+									reportProgress(1);
+									callback(err);
+								}
 							);
 						}
-					});
-					reportProgress(1.0);
+					);
 				}
 			);
 		});
diff --git a/lib/Stats.js b/lib/Stats.js
index 5179c8108a0..9a1c6b113f8 100644
--- a/lib/Stats.js
+++ b/lib/Stats.js
@@ -2,1413 +2,87 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-"use strict";
 
-const RequestShortener = require("./RequestShortener");
-const SizeFormatHelpers = require("./SizeFormatHelpers");
-const formatLocation = require("./formatLocation");
-const identifierUtils = require("./util/identifier");
+"use strict";
 
-const optionsOrFallback = (...args) => {
-	let optionValues = [];
-	optionValues.push(...args);
-	return optionValues.find(optionValue => typeof optionValue !== "undefined");
-};
+/** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
+/** @typedef {import("../declarations/WebpackOptions").StatsValue} StatsValue */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
 
 class Stats {
+	/**
+	 * @param {Compilation} compilation webpack compilation
+	 */
 	constructor(compilation) {
 		this.compilation = compilation;
-		this.hash = compilation.hash;
-		this.startTime = undefined;
-		this.endTime = undefined;
 	}
 
-	static filterWarnings(warnings, warningsFilter) {
-		// we dont have anything to filter so all warnings can be shown
-		if (!warningsFilter) {
-			return warnings;
-		}
-
-		// create a chain of filters
-		// if they return "true" a warning should be suppressed
-		const normalizedWarningsFilters = [].concat(warningsFilter).map(filter => {
-			if (typeof filter === "string") {
-				return warning => warning.includes(filter);
-			}
-
-			if (filter instanceof RegExp) {
-				return warning => filter.test(warning);
-			}
-
-			if (typeof filter === "function") {
-				return filter;
-			}
+	get hash() {
+		return this.compilation.hash;
+	}
 
-			throw new Error(
-				`Can only filter warnings with Strings or RegExps. (Given: ${filter})`
-			);
-		});
-		return warnings.filter(warning => {
-			return !normalizedWarningsFilters.some(check => check(warning));
-		});
+	get startTime() {
+		return this.compilation.startTime;
 	}
 
-	formatFilePath(filePath) {
-		const OPTIONS_REGEXP = /^(\s|\S)*!/;
-		return filePath.includes("!")
-			? `${filePath.replace(OPTIONS_REGEXP, "")} (${filePath})`
-			: `${filePath}`;
+	get endTime() {
+		return this.compilation.endTime;
 	}
 
+	/**
+	 * @returns {boolean} true if the compilation had a warning
+	 */
 	hasWarnings() {
 		return (
-			this.compilation.warnings.length > 0 ||
-			this.compilation.children.some(child => child.getStats().hasWarnings())
+			this.compilation.getWarnings().length > 0 ||
+			this.compilation.children.some((child) => child.getStats().hasWarnings())
 		);
 	}
 
+	/**
+	 * @returns {boolean} true if the compilation encountered an error
+	 */
 	hasErrors() {
 		return (
 			this.compilation.errors.length > 0 ||
-			this.compilation.children.some(child => child.getStats().hasErrors())
+			this.compilation.children.some((child) => child.getStats().hasErrors())
 		);
 	}
 
-	// remove a prefixed "!" that can be specified to reverse sort order
-	normalizeFieldKey(field) {
-		if (field[0] === "!") {
-			return field.substr(1);
-		}
-		return field;
-	}
-
-	// if a field is prefixed by a "!" reverse sort order
-	sortOrderRegular(field) {
-		if (field[0] === "!") {
-			return false;
-		}
-		return true;
-	}
-
-	toJson(options, forToString) {
-		if (typeof options === "boolean" || typeof options === "string") {
-			options = Stats.presetToOptions(options);
-		} else if (!options) {
-			options = {};
-		}
-
-		const optionOrLocalFallback = (v, def) =>
-			typeof v !== "undefined"
-				? v
-				: typeof options.all !== "undefined"
-					? options.all
-					: def;
-
-		const testAgainstGivenOption = item => {
-			if (typeof item === "string") {
-				const regExp = new RegExp(
-					`[\\\\/]${item.replace(
-						/[-[\]{}()*+?.\\^$|]/g,
-						"\\$&"
-					)}([\\\\/]|$|!|\\?)`
-				); // eslint-disable-line no-useless-escape
-				return ident => regExp.test(ident);
-			}
-			if (item && typeof item === "object" && typeof item.test === "function") {
-				return ident => item.test(ident);
-			}
-			if (typeof item === "function") {
-				return item;
-			}
-			if (typeof item === "boolean") {
-				return () => item;
-			}
-		};
-
-		const compilation = this.compilation;
-		const context = optionsOrFallback(
-			options.context,
-			compilation.compiler.context
-		);
-		const requestShortener =
-			compilation.compiler.context === context
-				? compilation.requestShortener
-				: new RequestShortener(context);
-		const showPerformance = optionOrLocalFallback(options.performance, true);
-		const showHash = optionOrLocalFallback(options.hash, true);
-		const showEnv = optionOrLocalFallback(options.env, false);
-		const showVersion = optionOrLocalFallback(options.version, true);
-		const showTimings = optionOrLocalFallback(options.timings, true);
-		const showBuiltAt = optionOrLocalFallback(options.builtAt, true);
-		const showAssets = optionOrLocalFallback(options.assets, true);
-		const showEntrypoints = optionOrLocalFallback(options.entrypoints, true);
-		const showChunkGroups = optionOrLocalFallback(
-			options.chunkGroups,
-			!forToString
-		);
-		const showChunks = optionOrLocalFallback(options.chunks, !forToString);
-		const showChunkModules = optionOrLocalFallback(options.chunkModules, true);
-		const showChunkOrigins = optionOrLocalFallback(
-			options.chunkOrigins,
-			!forToString
-		);
-		const showModules = optionOrLocalFallback(options.modules, true);
-		const showNestedModules = optionOrLocalFallback(
-			options.nestedModules,
-			true
-		);
-		const showModuleAssets = optionOrLocalFallback(
-			options.moduleAssets,
-			!forToString
-		);
-		const showDepth = optionOrLocalFallback(options.depth, !forToString);
-		const showCachedModules = optionOrLocalFallback(options.cached, true);
-		const showCachedAssets = optionOrLocalFallback(options.cachedAssets, true);
-		const showReasons = optionOrLocalFallback(options.reasons, !forToString);
-		const showUsedExports = optionOrLocalFallback(
-			options.usedExports,
-			!forToString
-		);
-		const showProvidedExports = optionOrLocalFallback(
-			options.providedExports,
-			!forToString
-		);
-		const showOptimizationBailout = optionOrLocalFallback(
-			options.optimizationBailout,
-			!forToString
-		);
-		const showChildren = optionOrLocalFallback(options.children, true);
-		const showSource = optionOrLocalFallback(options.source, !forToString);
-		const showModuleTrace = optionOrLocalFallback(options.moduleTrace, true);
-		const showErrors = optionOrLocalFallback(options.errors, true);
-		const showErrorDetails = optionOrLocalFallback(
-			options.errorDetails,
-			!forToString
-		);
-		const showWarnings = optionOrLocalFallback(options.warnings, true);
-		const warningsFilter = optionsOrFallback(options.warningsFilter, null);
-		const showPublicPath = optionOrLocalFallback(
-			options.publicPath,
-			!forToString
-		);
-		const excludeModules = []
-			.concat(optionsOrFallback(options.excludeModules, options.exclude, []))
-			.map(testAgainstGivenOption);
-		const excludeAssets = []
-			.concat(optionsOrFallback(options.excludeAssets, []))
-			.map(testAgainstGivenOption);
-		const maxModules = optionsOrFallback(
-			options.maxModules,
-			forToString ? 15 : Infinity
-		);
-		const sortModules = optionsOrFallback(options.modulesSort, "id");
-		const sortChunks = optionsOrFallback(options.chunksSort, "id");
-		const sortAssets = optionsOrFallback(options.assetsSort, "");
-		const showOutputPath = optionOrLocalFallback(
-			options.outputPath,
-			!forToString
-		);
-
-		if (!showCachedModules) {
-			excludeModules.push((ident, module) => !module.built);
-		}
-
-		const createModuleFilter = () => {
-			let i = 0;
-			return module => {
-				if (excludeModules.length > 0) {
-					const ident = requestShortener.shorten(module.resource);
-					const excluded = excludeModules.some(fn => fn(ident, module));
-					if (excluded) return false;
-				}
-				const result = i < maxModules;
-				i++;
-				return result;
-			};
-		};
-
-		const createAssetFilter = () => {
-			return asset => {
-				if (excludeAssets.length > 0) {
-					const ident = asset.name;
-					const excluded = excludeAssets.some(fn => fn(ident, asset));
-					if (excluded) return false;
-				}
-				return showCachedAssets || asset.emitted;
-			};
-		};
-
-		const sortByFieldAndOrder = (fieldKey, a, b) => {
-			if (a[fieldKey] === null && b[fieldKey] === null) return 0;
-			if (a[fieldKey] === null) return 1;
-			if (b[fieldKey] === null) return -1;
-			if (a[fieldKey] === b[fieldKey]) return 0;
-			return a[fieldKey] < b[fieldKey] ? -1 : 1;
-		};
-
-		const sortByField = field => (a, b) => {
-			if (!field) {
-				return 0;
-			}
-
-			const fieldKey = this.normalizeFieldKey(field);
-
-			// if a field is prefixed with a "!" the sort is reversed!
-			const sortIsRegular = this.sortOrderRegular(field);
-
-			return sortByFieldAndOrder(
-				fieldKey,
-				sortIsRegular ? a : b,
-				sortIsRegular ? b : a
-			);
-		};
-
-		const formatError = e => {
-			let text = "";
-			if (typeof e === "string") {
-				e = { message: e };
-			}
-			if (e.chunk) {
-				text += `chunk ${e.chunk.name || e.chunk.id}${
-					e.chunk.hasRuntime()
-						? " [entry]"
-						: e.chunk.canBeInitial()
-							? " [initial]"
-							: ""
-				}\n`;
-			}
-			if (e.file) {
-				text += `${e.file}\n`;
-			}
-			if (
-				e.module &&
-				e.module.readableIdentifier &&
-				typeof e.module.readableIdentifier === "function"
-			) {
-				text += this.formatFilePath(
-					e.module.readableIdentifier(requestShortener)
-				);
-				if (typeof e.loc === "object") {
-					const locInfo = formatLocation(e.loc);
-					if (locInfo) text += ` ${locInfo}`;
-				}
-				text += "\n";
-			}
-			text += e.message;
-			if (showErrorDetails && e.details) {
-				text += `\n${e.details}`;
-			}
-			if (showErrorDetails && e.missing) {
-				text += e.missing.map(item => `\n[${item}]`).join("");
-			}
-			if (showModuleTrace && e.origin) {
-				text += `\n @ ${this.formatFilePath(
-					e.origin.readableIdentifier(requestShortener)
-				)}`;
-				if (typeof e.originLoc === "object") {
-					const locInfo = formatLocation(e.originLoc);
-					if (locInfo) text += ` ${locInfo}`;
-				}
-				if (e.dependencies) {
-					for (const dep of e.dependencies) {
-						if (!dep.loc) continue;
-						if (typeof dep.loc === "string") continue;
-						const locInfo = formatLocation(dep.loc);
-						if (!locInfo) continue;
-						text += ` ${locInfo}`;
-					}
-				}
-				let current = e.origin;
-				while (current.issuer) {
-					current = current.issuer;
-					text += `\n @ ${current.readableIdentifier(requestShortener)}`;
-				}
-			}
-			return text;
-		};
-
-		const obj = {
-			errors: compilation.errors.map(formatError),
-			warnings: Stats.filterWarnings(
-				compilation.warnings.map(formatError),
-				warningsFilter
-			)
-		};
-
-		//We just hint other renderers since actually omitting
-		//errors/warnings from the JSON would be kind of weird.
-		Object.defineProperty(obj, "_showWarnings", {
-			value: showWarnings,
-			enumerable: false
-		});
-		Object.defineProperty(obj, "_showErrors", {
-			value: showErrors,
-			enumerable: false
+	/**
+	 * @param {StatsValue=} options stats options
+	 * @returns {StatsCompilation} json output
+	 */
+	toJson(options) {
+		const normalizedOptions = this.compilation.createStatsOptions(options, {
+			forToString: false
 		});
 
-		if (showVersion) {
-			obj.version = require("../package.json").version;
-		}
-
-		if (showHash) obj.hash = this.hash;
-		if (showTimings && this.startTime && this.endTime) {
-			obj.time = this.endTime - this.startTime;
-		}
-
-		if (showBuiltAt && this.endTime) {
-			obj.builtAt = this.endTime;
-		}
-
-		if (showEnv && options._env) {
-			obj.env = options._env;
-		}
+		const statsFactory = this.compilation.createStatsFactory(normalizedOptions);
 
-		if (compilation.needAdditionalPass) {
-			obj.needAdditionalPass = true;
-		}
-		if (showPublicPath) {
-			obj.publicPath = this.compilation.mainTemplate.getPublicPath({
-				hash: this.compilation.hash
-			});
-		}
-		if (showOutputPath) {
-			obj.outputPath = this.compilation.mainTemplate.outputOptions.path;
-		}
-		if (showAssets) {
-			const assetsByFile = {};
-			const compilationAssets = Object.keys(compilation.assets);
-			obj.assetsByChunkName = {};
-			obj.assets = compilationAssets
-				.map(asset => {
-					const obj = {
-						name: asset,
-						size: compilation.assets[asset].size(),
-						chunks: [],
-						chunkNames: [],
-						emitted: compilation.assets[asset].emitted
-					};
-
-					if (showPerformance) {
-						obj.isOverSizeLimit = compilation.assets[asset].isOverSizeLimit;
-					}
-
-					assetsByFile[asset] = obj;
-					return obj;
-				})
-				.filter(createAssetFilter());
-			obj.filteredAssets = compilationAssets.length - obj.assets.length;
-
-			for (const chunk of compilation.chunks) {
-				for (const asset of chunk.files) {
-					if (assetsByFile[asset]) {
-						for (const id of chunk.ids) {
-							assetsByFile[asset].chunks.push(id);
-						}
-						if (chunk.name) {
-							assetsByFile[asset].chunkNames.push(chunk.name);
-							if (obj.assetsByChunkName[chunk.name]) {
-								obj.assetsByChunkName[chunk.name] = []
-									.concat(obj.assetsByChunkName[chunk.name])
-									.concat([asset]);
-							} else {
-								obj.assetsByChunkName[chunk.name] = asset;
-							}
-						}
-					}
-				}
-			}
-			obj.assets.sort(sortByField(sortAssets));
-		}
-
-		const fnChunkGroup = groupMap => {
-			const obj = {};
-			for (const keyValuePair of groupMap) {
-				const name = keyValuePair[0];
-				const cg = keyValuePair[1];
-				const children = cg.getChildrenByOrders();
-				obj[name] = {
-					chunks: cg.chunks.map(c => c.id),
-					assets: cg.chunks.reduce(
-						(array, c) => array.concat(c.files || []),
-						[]
-					),
-					children: Object.keys(children).reduce((obj, key) => {
-						const groups = children[key];
-						obj[key] = groups.map(group => ({
-							name: group.name,
-							chunks: group.chunks.map(c => c.id),
-							assets: group.chunks.reduce(
-								(array, c) => array.concat(c.files || []),
-								[]
-							)
-						}));
-						return obj;
-					}, Object.create(null)),
-					childAssets: Object.keys(children).reduce((obj, key) => {
-						const groups = children[key];
-						obj[key] = Array.from(
-							groups.reduce((set, group) => {
-								for (const chunk of group.chunks) {
-									for (const asset of chunk.files) {
-										set.add(asset);
-									}
-								}
-								return set;
-							}, new Set())
-						);
-						return obj;
-					}, Object.create(null))
-				};
-				if (showPerformance) {
-					obj[name].isOverSizeLimit = cg.isOverSizeLimit;
-				}
-			}
-
-			return obj;
-		};
-
-		if (showEntrypoints) {
-			obj.entrypoints = fnChunkGroup(compilation.entrypoints);
-		}
-
-		if (showChunkGroups) {
-			obj.namedChunkGroups = fnChunkGroup(compilation.namedChunkGroups);
-		}
-
-		const fnModule = module => {
-			const path = [];
-			let current = module;
-			while (current.issuer) {
-				path.push((current = current.issuer));
-			}
-			path.reverse();
-			const obj = {
-				id: module.id,
-				identifier: module.identifier(),
-				name: module.readableIdentifier(requestShortener),
-				index: module.index,
-				index2: module.index2,
-				size: module.size(),
-				cacheable: module.buildInfo.cacheable,
-				built: !!module.built,
-				optional: module.optional,
-				prefetched: module.prefetched,
-				chunks: Array.from(module.chunksIterable, chunk => chunk.id),
-				issuer: module.issuer && module.issuer.identifier(),
-				issuerId: module.issuer && module.issuer.id,
-				issuerName:
-					module.issuer && module.issuer.readableIdentifier(requestShortener),
-				issuerPath:
-					module.issuer &&
-					path.map(module => ({
-						id: module.id,
-						identifier: module.identifier(),
-						name: module.readableIdentifier(requestShortener),
-						profile: module.profile
-					})),
-				profile: module.profile,
-				failed: !!module.error,
-				errors: module.errors ? module.errors.length : 0,
-				warnings: module.warnings ? module.warnings.length : 0
-			};
-			if (showModuleAssets) {
-				obj.assets = Object.keys(module.buildInfo.assets || {});
-			}
-			if (showReasons) {
-				obj.reasons = module.reasons
-					.map(reason => {
-						const obj = {
-							moduleId: reason.module ? reason.module.id : null,
-							moduleIdentifier: reason.module
-								? reason.module.identifier()
-								: null,
-							module: reason.module
-								? reason.module.readableIdentifier(requestShortener)
-								: null,
-							moduleName: reason.module
-								? reason.module.readableIdentifier(requestShortener)
-								: null,
-							type: reason.dependency ? reason.dependency.type : null,
-							explanation: reason.explanation,
-							userRequest: reason.dependency
-								? reason.dependency.userRequest
-								: null
-						};
-						if (reason.dependency) {
-							const locInfo = formatLocation(reason.dependency.loc);
-							if (locInfo) {
-								obj.loc = locInfo;
-							}
-						}
-						return obj;
-					})
-					.sort((a, b) => a.moduleId - b.moduleId);
-			}
-			if (showUsedExports) {
-				if (module.used === true) {
-					obj.usedExports = module.usedExports;
-				} else if (module.used === false) {
-					obj.usedExports = false;
-				}
-			}
-			if (showProvidedExports) {
-				obj.providedExports = Array.isArray(module.buildMeta.providedExports)
-					? module.buildMeta.providedExports
-					: null;
-			}
-			if (showOptimizationBailout) {
-				obj.optimizationBailout = module.optimizationBailout.map(item => {
-					if (typeof item === "function") return item(requestShortener);
-					return item;
-				});
-			}
-			if (showDepth) {
-				obj.depth = module.depth;
-			}
-			if (showNestedModules) {
-				if (module.modules) {
-					const modules = module.modules;
-					obj.modules = modules
-						.sort(sortByField("depth"))
-						.filter(createModuleFilter())
-						.map(fnModule);
-					obj.filteredModules = modules.length - obj.modules.length;
-					obj.modules.sort(sortByField(sortModules));
-				}
-			}
-			if (showSource && module._source) {
-				obj.source = module._source.source();
-			}
-			return obj;
-		};
-		if (showChunks) {
-			obj.chunks = compilation.chunks.map(chunk => {
-				const parents = new Set();
-				const children = new Set();
-				const siblings = new Set();
-				const childIdByOrder = chunk.getChildIdsByOrders();
-				for (const chunkGroup of chunk.groupsIterable) {
-					for (const parentGroup of chunkGroup.parentsIterable) {
-						for (const chunk of parentGroup.chunks) {
-							parents.add(chunk.id);
-						}
-					}
-					for (const childGroup of chunkGroup.childrenIterable) {
-						for (const chunk of childGroup.chunks) {
-							children.add(chunk.id);
-						}
-					}
-					for (const sibling of chunkGroup.chunks) {
-						if (sibling !== chunk) siblings.add(sibling.id);
-					}
-				}
-				const obj = {
-					id: chunk.id,
-					rendered: chunk.rendered,
-					initial: chunk.canBeInitial(),
-					entry: chunk.hasRuntime(),
-					recorded: chunk.recorded,
-					reason: chunk.chunkReason,
-					size: chunk.modulesSize(),
-					names: chunk.name ? [chunk.name] : [],
-					files: chunk.files.slice(),
-					hash: chunk.renderedHash,
-					siblings: Array.from(siblings).sort(),
-					parents: Array.from(parents).sort(),
-					children: Array.from(children).sort(),
-					childrenByOrder: childIdByOrder
-				};
-				if (showChunkModules) {
-					obj.modules = chunk
-						.getModules()
-						.sort(sortByField("depth"))
-						.filter(createModuleFilter())
-						.map(fnModule);
-					obj.filteredModules = chunk.getNumberOfModules() - obj.modules.length;
-					obj.modules.sort(sortByField(sortModules));
-				}
-				if (showChunkOrigins) {
-					obj.origins = Array.from(chunk.groupsIterable, g => g.origins)
-						.reduce((a, b) => a.concat(b), [])
-						.map(origin => ({
-							moduleId: origin.module ? origin.module.id : undefined,
-							module: origin.module ? origin.module.identifier() : "",
-							moduleIdentifier: origin.module ? origin.module.identifier() : "",
-							moduleName: origin.module
-								? origin.module.readableIdentifier(requestShortener)
-								: "",
-							loc: formatLocation(origin.loc),
-							request: origin.request,
-							reasons: origin.reasons || []
-						}))
-						.sort((a, b) => {
-							if (
-								typeof a.moduleId === "number" &&
-								typeof b.moduleId !== "number"
-							)
-								return 1;
-							if (
-								typeof a.moduleId !== "number" &&
-								typeof b.moduleId === "number"
-							)
-								return -1;
-							if (
-								typeof a.moduleId === "number" &&
-								typeof b.moduleId === "number"
-							) {
-								const diffId = a.moduleId - b.moduleId;
-								if (diffId !== 0) return diffId;
-							}
-							if (a.loc < b.loc) return -1;
-							if (a.loc > b.loc) return 1;
-							return 0;
-						});
-				}
-				return obj;
-			});
-			obj.chunks.sort(sortByField(sortChunks));
-		}
-		if (showModules) {
-			obj.modules = compilation.modules
-				.slice()
-				.sort(sortByField("depth"))
-				.filter(createModuleFilter())
-				.map(fnModule);
-			obj.filteredModules = compilation.modules.length - obj.modules.length;
-			obj.modules.sort(sortByField(sortModules));
-		}
-		if (showChildren) {
-			obj.children = compilation.children.map((child, idx) => {
-				const childOptions = Stats.getChildOptions(options, idx);
-				const obj = new Stats(child).toJson(childOptions, forToString);
-				delete obj.hash;
-				delete obj.version;
-				if (child.name) {
-					obj.name = identifierUtils.makePathsRelative(
-						context,
-						child.name,
-						compilation.cache
-					);
-				}
-				return obj;
-			});
-		}
-
-		return obj;
+		return statsFactory.create("compilation", this.compilation, {
+			compilation: this.compilation
+		});
 	}
 
+	/**
+	 * @param {StatsValue=} options stats options
+	 * @returns {string} string output
+	 */
 	toString(options) {
-		if (typeof options === "boolean" || typeof options === "string") {
-			options = Stats.presetToOptions(options);
-		} else if (!options) {
-			options = {};
-		}
-
-		const useColors = optionsOrFallback(options.colors, false);
-
-		const obj = this.toJson(options, true);
-
-		return Stats.jsonToString(obj, useColors);
-	}
-
-	static jsonToString(obj, useColors) {
-		const buf = [];
-
-		const defaultColors = {
-			bold: "\u001b[1m",
-			yellow: "\u001b[1m\u001b[33m",
-			red: "\u001b[1m\u001b[31m",
-			green: "\u001b[1m\u001b[32m",
-			cyan: "\u001b[1m\u001b[36m",
-			magenta: "\u001b[1m\u001b[35m"
-		};
-
-		const colors = Object.keys(defaultColors).reduce(
-			(obj, color) => {
-				obj[color] = str => {
-					if (useColors) {
-						buf.push(
-							useColors === true || useColors[color] === undefined
-								? defaultColors[color]
-								: useColors[color]
-						);
-					}
-					buf.push(str);
-					if (useColors) {
-						buf.push("\u001b[39m\u001b[22m");
-					}
-				};
-				return obj;
-			},
-			{
-				normal: str => buf.push(str)
-			}
-		);
-
-		const coloredTime = time => {
-			let times = [800, 400, 200, 100];
-			if (obj.time) {
-				times = [obj.time / 2, obj.time / 4, obj.time / 8, obj.time / 16];
-			}
-			if (time < times[3]) colors.normal(`${time}ms`);
-			else if (time < times[2]) colors.bold(`${time}ms`);
-			else if (time < times[1]) colors.green(`${time}ms`);
-			else if (time < times[0]) colors.yellow(`${time}ms`);
-			else colors.red(`${time}ms`);
-		};
-
-		const newline = () => buf.push("\n");
-
-		const getText = (arr, row, col) => {
-			return arr[row][col].value;
-		};
-
-		const table = (array, align, splitter) => {
-			const rows = array.length;
-			const cols = array[0].length;
-			const colSizes = new Array(cols);
-			for (let col = 0; col < cols; col++) {
-				colSizes[col] = 0;
-			}
-			for (let row = 0; row < rows; row++) {
-				for (let col = 0; col < cols; col++) {
-					const value = `${getText(array, row, col)}`;
-					if (value.length > colSizes[col]) {
-						colSizes[col] = value.length;
-					}
-				}
-			}
-			for (let row = 0; row < rows; row++) {
-				for (let col = 0; col < cols; col++) {
-					const format = array[row][col].color;
-					const value = `${getText(array, row, col)}`;
-					let l = value.length;
-					if (align[col] === "l") {
-						format(value);
-					}
-					for (; l < colSizes[col] && col !== cols - 1; l++) {
-						colors.normal(" ");
-					}
-					if (align[col] === "r") {
-						format(value);
-					}
-					if (col + 1 < cols && colSizes[col] !== 0) {
-						colors.normal(splitter || "  ");
-					}
-				}
-				newline();
-			}
-		};
-
-		const getAssetColor = (asset, defaultColor) => {
-			if (asset.isOverSizeLimit) {
-				return colors.yellow;
-			}
-
-			return defaultColor;
-		};
-
-		if (obj.hash) {
-			colors.normal("Hash: ");
-			colors.bold(obj.hash);
-			newline();
-		}
-		if (obj.version) {
-			colors.normal("Version: webpack ");
-			colors.bold(obj.version);
-			newline();
-		}
-		if (typeof obj.time === "number") {
-			colors.normal("Time: ");
-			colors.bold(obj.time);
-			colors.normal("ms");
-			newline();
-		}
-		if (typeof obj.builtAt === "number") {
-			const builtAtDate = new Date(obj.builtAt);
-			colors.normal("Built at: ");
-			colors.normal(
-				builtAtDate.toLocaleDateString(undefined, {
-					day: "2-digit",
-					month: "2-digit",
-					year: "numeric"
-				})
-			);
-			colors.normal(" ");
-			colors.bold(builtAtDate.toLocaleTimeString());
-			newline();
-		}
-		if (obj.env) {
-			colors.normal("Environment (--env): ");
-			colors.bold(JSON.stringify(obj.env, null, 2));
-			newline();
-		}
-		if (obj.publicPath) {
-			colors.normal("PublicPath: ");
-			colors.bold(obj.publicPath);
-			newline();
-		}
-
-		if (obj.assets && obj.assets.length > 0) {
-			const t = [
-				[
-					{
-						value: "Asset",
-						color: colors.bold
-					},
-					{
-						value: "Size",
-						color: colors.bold
-					},
-					{
-						value: "Chunks",
-						color: colors.bold
-					},
-					{
-						value: "",
-						color: colors.bold
-					},
-					{
-						value: "",
-						color: colors.bold
-					},
-					{
-						value: "Chunk Names",
-						color: colors.bold
-					}
-				]
-			];
-			for (const asset of obj.assets) {
-				t.push([
-					{
-						value: asset.name,
-						color: getAssetColor(asset, colors.green)
-					},
-					{
-						value: SizeFormatHelpers.formatSize(asset.size),
-						color: getAssetColor(asset, colors.normal)
-					},
-					{
-						value: asset.chunks.join(", "),
-						color: colors.bold
-					},
-					{
-						value: asset.emitted ? "[emitted]" : "",
-						color: colors.green
-					},
-					{
-						value: asset.isOverSizeLimit ? "[big]" : "",
-						color: getAssetColor(asset, colors.normal)
-					},
-					{
-						value: asset.chunkNames.join(", "),
-						color: colors.normal
-					}
-				]);
-			}
-			table(t, "rrrlll");
-		}
-		if (obj.filteredAssets > 0) {
-			colors.normal(" ");
-			if (obj.assets.length > 0) colors.normal("+ ");
-			colors.normal(obj.filteredAssets);
-			if (obj.assets.length > 0) colors.normal(" hidden");
-			colors.normal(obj.filteredAssets !== 1 ? " assets" : " asset");
-			newline();
-		}
-
-		const processChunkGroups = (namedGroups, prefix) => {
-			for (const name of Object.keys(namedGroups)) {
-				const cg = namedGroups[name];
-				colors.normal(`${prefix} `);
-				colors.bold(name);
-				if (cg.isOverSizeLimit) {
-					colors.normal(" ");
-					colors.yellow("[big]");
-				}
-				colors.normal(" =");
-				for (const asset of cg.assets) {
-					colors.normal(" ");
-					colors.green(asset);
-				}
-				for (const name of Object.keys(cg.childAssets)) {
-					const assets = cg.childAssets[name];
-					if (assets && assets.length > 0) {
-						colors.normal(" ");
-						colors.magenta(`(${name}:`);
-						for (const asset of assets) {
-							colors.normal(" ");
-							colors.green(asset);
-						}
-						colors.magenta(")");
-					}
-				}
-				newline();
-			}
-		};
-
-		if (obj.entrypoints) {
-			processChunkGroups(obj.entrypoints, "Entrypoint");
-		}
-
-		if (obj.namedChunkGroups) {
-			let outputChunkGroups = obj.namedChunkGroups;
-			if (obj.entrypoints) {
-				outputChunkGroups = Object.keys(outputChunkGroups)
-					.filter(name => !obj.entrypoints[name])
-					.reduce((result, name) => {
-						result[name] = obj.namedChunkGroups[name];
-						return result;
-					}, {});
-			}
-			processChunkGroups(outputChunkGroups, "Chunk Group");
-		}
-
-		const modulesByIdentifier = {};
-		if (obj.modules) {
-			for (const module of obj.modules) {
-				modulesByIdentifier[`$${module.identifier}`] = module;
-			}
-		} else if (obj.chunks) {
-			for (const chunk of obj.chunks) {
-				if (chunk.modules) {
-					for (const module of chunk.modules) {
-						modulesByIdentifier[`$${module.identifier}`] = module;
-					}
-				}
-			}
-		}
-
-		const processModuleAttributes = module => {
-			colors.normal(" ");
-			colors.normal(SizeFormatHelpers.formatSize(module.size));
-			if (module.chunks) {
-				for (const chunk of module.chunks) {
-					colors.normal(" {");
-					colors.yellow(chunk);
-					colors.normal("}");
-				}
-			}
-			if (typeof module.depth === "number") {
-				colors.normal(` [depth ${module.depth}]`);
-			}
-			if (module.cacheable === false) {
-				colors.red(" [not cacheable]");
-			}
-			if (module.optional) {
-				colors.yellow(" [optional]");
-			}
-			if (module.built) {
-				colors.green(" [built]");
-			}
-			if (module.assets && module.assets.length) {
-				colors.magenta(
-					` [${module.assets.length} asset${
-						module.assets.length === 1 ? "" : "s"
-					}]`
-				);
-			}
-			if (module.prefetched) {
-				colors.magenta(" [prefetched]");
-			}
-			if (module.failed) colors.red(" [failed]");
-			if (module.warnings) {
-				colors.yellow(
-					` [${module.warnings} warning${module.warnings === 1 ? "" : "s"}]`
-				);
-			}
-			if (module.errors) {
-				colors.red(
-					` [${module.errors} error${module.errors === 1 ? "" : "s"}]`
-				);
-			}
-		};
-
-		const processModuleContent = (module, prefix) => {
-			if (Array.isArray(module.providedExports)) {
-				colors.normal(prefix);
-				if (module.providedExports.length === 0) {
-					colors.cyan("[no exports]");
-				} else {
-					colors.cyan(`[exports: ${module.providedExports.join(", ")}]`);
-				}
-				newline();
-			}
-			if (module.usedExports !== undefined) {
-				if (module.usedExports !== true) {
-					colors.normal(prefix);
-					if (module.usedExports === null) {
-						colors.cyan("[used exports unknown]");
-					} else if (module.usedExports === false) {
-						colors.cyan("[no exports used]");
-					} else if (
-						Array.isArray(module.usedExports) &&
-						module.usedExports.length === 0
-					) {
-						colors.cyan("[no exports used]");
-					} else if (Array.isArray(module.usedExports)) {
-						const providedExportsCount = Array.isArray(module.providedExports)
-							? module.providedExports.length
-							: null;
-						if (
-							providedExportsCount !== null &&
-							providedExportsCount === module.usedExports.length
-						) {
-							colors.cyan("[all exports used]");
-						} else {
-							colors.cyan(
-								`[only some exports used: ${module.usedExports.join(", ")}]`
-							);
-						}
-					}
-					newline();
-				}
-			}
-			if (Array.isArray(module.optimizationBailout)) {
-				for (const item of module.optimizationBailout) {
-					colors.normal(prefix);
-					colors.yellow(item);
-					newline();
-				}
-			}
-			if (module.reasons) {
-				for (const reason of module.reasons) {
-					colors.normal(prefix);
-					if (reason.type) {
-						colors.normal(reason.type);
-						colors.normal(" ");
-					}
-					if (reason.userRequest) {
-						colors.cyan(reason.userRequest);
-						colors.normal(" ");
-					}
-					if (reason.moduleId !== null) {
-						colors.normal("[");
-						colors.normal(reason.moduleId);
-						colors.normal("]");
-					}
-					if (reason.module && reason.module !== reason.moduleId) {
-						colors.normal(" ");
-						colors.magenta(reason.module);
-					}
-					if (reason.loc) {
-						colors.normal(" ");
-						colors.normal(reason.loc);
-					}
-					if (reason.explanation) {
-						colors.normal(" ");
-						colors.cyan(reason.explanation);
-					}
-					newline();
-				}
-			}
-			if (module.profile) {
-				colors.normal(prefix);
-				let sum = 0;
-				if (module.issuerPath) {
-					for (const m of module.issuerPath) {
-						colors.normal("[");
-						colors.normal(m.id);
-						colors.normal("] ");
-						if (m.profile) {
-							const time = (m.profile.factory || 0) + (m.profile.building || 0);
-							coloredTime(time);
-							sum += time;
-							colors.normal(" ");
-						}
-						colors.normal("-> ");
-					}
-				}
-				for (const key of Object.keys(module.profile)) {
-					colors.normal(`${key}:`);
-					const time = module.profile[key];
-					coloredTime(time);
-					colors.normal(" ");
-					sum += time;
-				}
-				colors.normal("= ");
-				coloredTime(sum);
-				newline();
-			}
-			if (module.modules) {
-				processModulesList(module, prefix + "| ");
-			}
-		};
-
-		const processModulesList = (obj, prefix) => {
-			if (obj.modules) {
-				let maxModuleId = 0;
-				for (const module of obj.modules) {
-					if (typeof module.id === "number") {
-						if (maxModuleId < module.id) maxModuleId = module.id;
-					}
-				}
-				let contentPrefix = prefix + "    ";
-				if (maxModuleId >= 10) contentPrefix += " ";
-				if (maxModuleId >= 100) contentPrefix += " ";
-				if (maxModuleId >= 1000) contentPrefix += " ";
-				for (const module of obj.modules) {
-					colors.normal(prefix);
-					const name = module.name || module.identifier;
-					if (typeof module.id === "string" || typeof module.id === "number") {
-						if (typeof module.id === "number") {
-							if (module.id < 1000 && maxModuleId >= 1000) colors.normal(" ");
-							if (module.id < 100 && maxModuleId >= 100) colors.normal(" ");
-							if (module.id < 10 && maxModuleId >= 10) colors.normal(" ");
-						} else {
-							if (maxModuleId >= 1000) colors.normal(" ");
-							if (maxModuleId >= 100) colors.normal(" ");
-							if (maxModuleId >= 10) colors.normal(" ");
-						}
-						if (name !== module.id) {
-							colors.normal("[");
-							colors.normal(module.id);
-							colors.normal("]");
-							colors.normal(" ");
-						} else {
-							colors.normal("[");
-							colors.bold(module.id);
-							colors.normal("]");
-						}
-					}
-					if (name !== module.id) {
-						colors.bold(name);
-					}
-					processModuleAttributes(module);
-					newline();
-					processModuleContent(module, contentPrefix);
-				}
-				if (obj.filteredModules > 0) {
-					colors.normal(prefix);
-					colors.normal("   ");
-					if (obj.modules.length > 0) colors.normal(" + ");
-					colors.normal(obj.filteredModules);
-					if (obj.modules.length > 0) colors.normal(" hidden");
-					colors.normal(obj.filteredModules !== 1 ? " modules" : " module");
-					newline();
-				}
-			}
-		};
-
-		if (obj.chunks) {
-			for (const chunk of obj.chunks) {
-				colors.normal("chunk ");
-				if (chunk.id < 1000) colors.normal(" ");
-				if (chunk.id < 100) colors.normal(" ");
-				if (chunk.id < 10) colors.normal(" ");
-				colors.normal("{");
-				colors.yellow(chunk.id);
-				colors.normal("} ");
-				colors.green(chunk.files.join(", "));
-				if (chunk.names && chunk.names.length > 0) {
-					colors.normal(" (");
-					colors.normal(chunk.names.join(", "));
-					colors.normal(")");
-				}
-				colors.normal(" ");
-				colors.normal(SizeFormatHelpers.formatSize(chunk.size));
-				for (const id of chunk.parents) {
-					colors.normal(" <{");
-					colors.yellow(id);
-					colors.normal("}>");
-				}
-				for (const id of chunk.siblings) {
-					colors.normal(" ={");
-					colors.yellow(id);
-					colors.normal("}=");
-				}
-				for (const id of chunk.children) {
-					colors.normal(" >{");
-					colors.yellow(id);
-					colors.normal("}<");
-				}
-				if (chunk.childrenByOrder) {
-					for (const name of Object.keys(chunk.childrenByOrder)) {
-						const children = chunk.childrenByOrder[name];
-						colors.normal(" ");
-						colors.magenta(`(${name}:`);
-						for (const id of children) {
-							colors.normal(" {");
-							colors.yellow(id);
-							colors.normal("}");
-						}
-						colors.magenta(")");
-					}
-				}
-				if (chunk.entry) {
-					colors.yellow(" [entry]");
-				} else if (chunk.initial) {
-					colors.yellow(" [initial]");
-				}
-				if (chunk.rendered) {
-					colors.green(" [rendered]");
-				}
-				if (chunk.recorded) {
-					colors.green(" [recorded]");
-				}
-				if (chunk.reason) {
-					colors.yellow(` ${chunk.reason}`);
-				}
-				newline();
-				if (chunk.origins) {
-					for (const origin of chunk.origins) {
-						colors.normal("    > ");
-						if (origin.reasons && origin.reasons.length) {
-							colors.yellow(origin.reasons.join(" "));
-							colors.normal(" ");
-						}
-						if (origin.request) {
-							colors.normal(origin.request);
-							colors.normal(" ");
-						}
-						if (origin.module) {
-							colors.normal("[");
-							colors.normal(origin.moduleId);
-							colors.normal("] ");
-							const module = modulesByIdentifier[`$${origin.module}`];
-							if (module) {
-								colors.bold(module.name);
-								colors.normal(" ");
-							}
-						}
-						if (origin.loc) {
-							colors.normal(origin.loc);
-						}
-						newline();
-					}
-				}
-				processModulesList(chunk, " ");
-			}
-		}
-
-		processModulesList(obj, "");
-
-		if (obj._showWarnings && obj.warnings) {
-			for (const warning of obj.warnings) {
-				newline();
-				colors.yellow(`WARNING in ${warning}`);
-				newline();
-			}
-		}
-		if (obj._showErrors && obj.errors) {
-			for (const error of obj.errors) {
-				newline();
-				colors.red(`ERROR in ${error}`);
-				newline();
-			}
-		}
-		if (obj.children) {
-			for (const child of obj.children) {
-				const childString = Stats.jsonToString(child, useColors);
-				if (childString) {
-					if (child.name) {
-						colors.normal("Child ");
-						colors.bold(child.name);
-						colors.normal(":");
-					} else {
-						colors.normal("Child");
-					}
-					newline();
-					buf.push("    ");
-					buf.push(childString.replace(/\n/g, "\n    "));
-					newline();
-				}
-			}
-		}
-		if (obj.needAdditionalPass) {
-			colors.yellow(
-				"Compilation needs an additional pass and will compile again."
-			);
-		}
+		const normalizedOptions = this.compilation.createStatsOptions(options, {
+			forToString: true
+		});
 
-		while (buf[buf.length - 1] === "\n") {
-			buf.pop();
-		}
-		return buf.join("");
-	}
+		const statsFactory = this.compilation.createStatsFactory(normalizedOptions);
+		const statsPrinter = this.compilation.createStatsPrinter(normalizedOptions);
 
-	static presetToOptions(name) {
-		// Accepted values: none, errors-only, minimal, normal, detailed, verbose
-		// Any other falsy value will behave as 'none', truthy values as 'normal'
-		const pn =
-			(typeof name === "string" && name.toLowerCase()) || name || "none";
-		switch (pn) {
-			case "none":
-				return {
-					all: false
-				};
-			case "verbose":
-				return {
-					entrypoints: true,
-					chunkGroups: true,
-					modules: false,
-					chunks: true,
-					chunkModules: true,
-					chunkOrigins: true,
-					depth: true,
-					env: true,
-					reasons: true,
-					usedExports: true,
-					providedExports: true,
-					optimizationBailout: true,
-					errorDetails: true,
-					publicPath: true,
-					exclude: false,
-					maxModules: Infinity
-				};
-			case "detailed":
-				return {
-					entrypoints: true,
-					chunkGroups: true,
-					chunks: true,
-					chunkModules: false,
-					chunkOrigins: true,
-					depth: true,
-					usedExports: true,
-					providedExports: true,
-					optimizationBailout: true,
-					errorDetails: true,
-					publicPath: true,
-					exclude: false,
-					maxModules: Infinity
-				};
-			case "minimal":
-				return {
-					all: false,
-					modules: true,
-					maxModules: 0,
-					errors: true,
-					warnings: true
-				};
-			case "errors-only":
-				return {
-					all: false,
-					errors: true,
-					moduleTrace: true
-				};
-			default:
-				return {};
-		}
-	}
-
-	static getChildOptions(options, idx) {
-		let innerOptions;
-		if (Array.isArray(options.children)) {
-			if (idx < options.children.length) {
-				innerOptions = options.children[idx];
-			}
-		} else if (typeof options.children === "object" && options.children) {
-			innerOptions = options.children;
-		}
-		if (typeof innerOptions === "boolean" || typeof innerOptions === "string") {
-			innerOptions = Stats.presetToOptions(innerOptions);
-		}
-		if (!innerOptions) {
-			return options;
-		}
-		const childOptions = Object.assign({}, options);
-		delete childOptions.children; // do not inherit children
-		return Object.assign(childOptions, innerOptions);
+		const data = statsFactory.create("compilation", this.compilation, {
+			compilation: this.compilation
+		});
+		const result = statsPrinter.print("compilation", data);
+		return result === undefined ? "" : result;
 	}
 }
 
diff --git a/lib/Template.js b/lib/Template.js
index 443e357678c..e32c26eda72 100644
--- a/lib/Template.js
+++ b/lib/Template.js
@@ -2,52 +2,95 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-/** @typedef {import("./Module")} Module */
+
+"use strict";
+
+const { ConcatSource, PrefixSource } = require("webpack-sources");
+const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
+const RuntimeGlobals = require("./RuntimeGlobals");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("./config/defaults").OutputNormalizedWithDefaults} OutputOptions */
 /** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compilation").PathData} PathData */
+/** @typedef {import("./DependencyTemplates")} DependencyTemplates */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
 /** @typedef {import("./ModuleTemplate")} ModuleTemplate */
-/** @typedef {import("webpack-sources").ConcatSource} ConcatSource */
-
-const { ConcatSource } = require("webpack-sources");
-const HotUpdateChunk = require("./HotUpdateChunk");
+/** @typedef {import("./RuntimeModule")} RuntimeModule */
+/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
+/** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
 
 const START_LOWERCASE_ALPHABET_CODE = "a".charCodeAt(0);
 const START_UPPERCASE_ALPHABET_CODE = "A".charCodeAt(0);
 const DELTA_A_TO_Z = "z".charCodeAt(0) - START_LOWERCASE_ALPHABET_CODE + 1;
+const NUMBER_OF_IDENTIFIER_START_CHARS = DELTA_A_TO_Z * 2 + 2; // a-z A-Z _ $
+const NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS =
+	NUMBER_OF_IDENTIFIER_START_CHARS + 10; // a-z A-Z _ $ 0-9
 const FUNCTION_CONTENT_REGEX = /^function\s?\(\)\s?\{\r?\n?|\r?\n?\}$/g;
 const INDENT_MULTILINE_REGEX = /^\t/gm;
 const LINE_SEPARATOR_REGEX = /\r?\n/g;
-const IDENTIFIER_NAME_REPLACE_REGEX = /^([^a-zA-Z$_])/;
-const IDENTIFIER_ALPHA_NUMERIC_NAME_REPLACE_REGEX = /[^a-zA-Z0-9$]+/g;
+const IDENTIFIER_NAME_REPLACE_REGEX = /^([^a-z$_])/i;
+const IDENTIFIER_ALPHA_NUMERIC_NAME_REPLACE_REGEX = /[^a-z0-9$]+/gi;
 const COMMENT_END_REGEX = /\*\//g;
-const PATH_NAME_NORMALIZE_REPLACE_REGEX = /[^a-zA-Z0-9_!§$()=\-^°]+/g;
+const PATH_NAME_NORMALIZE_REPLACE_REGEX = /[^a-z0-9_!§$()=\-^°]+/gi;
 const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g;
 
 /**
- * @typedef {Object} HasId
- * @property {number | string} id
- * */
+ * @typedef {object} RenderManifestOptions
+ * @property {Chunk} chunk the chunk used to render
+ * @property {string} hash
+ * @property {string} fullHash
+ * @property {OutputOptions} outputOptions
+ * @property {CodeGenerationResults} codeGenerationResults
+ * @property {{ javascript: ModuleTemplate }} moduleTemplates
+ * @property {DependencyTemplates} dependencyTemplates
+ * @property {RuntimeTemplate} runtimeTemplate
+ * @property {ModuleGraph} moduleGraph
+ * @property {ChunkGraph} chunkGraph
+ */
+
+/** @typedef {RenderManifestEntryTemplated | RenderManifestEntryStatic} RenderManifestEntry */
+
+/**
+ * @typedef {object} RenderManifestEntryTemplated
+ * @property {() => Source} render
+ * @property {TemplatePath} filenameTemplate
+ * @property {PathData=} pathOptions
+ * @property {AssetInfo=} info
+ * @property {string} identifier
+ * @property {string=} hash
+ * @property {boolean=} auxiliary
+ */
+
+/**
+ * @typedef {object} RenderManifestEntryStatic
+ * @property {() => Source} render
+ * @property {string} filename
+ * @property {AssetInfo} info
+ * @property {string} identifier
+ * @property {string=} hash
+ * @property {boolean=} auxiliary
+ */
 
 /**
- * @typedef {function(Module, number): boolean} ModuleFilterPredicate
+ * @typedef {(module: Module) => boolean} ModuleFilterPredicate
  */
 
 /**
- * @param {HasId} a first id object to be sorted
- * @param {HasId} b second id object to be sorted against
- * @returns {-1|0|1} the sort value
+ * @typedef {object} Stringable
+ * @property {() => string} toString
  */
-const stringifyIdSortPredicate = (a, b) => {
-	var aId = a.id + "";
-	var bId = b.id + "";
-	if (aId < bId) return -1;
-	if (aId > bId) return 1;
-	return 0;
-};
 
 class Template {
 	/**
-	 *
-	 * @param {Function} fn - a runtime function (.runtime.js) "template"
+	 * @param {Stringable} fn a runtime function (.runtime.js) "template"
 	 * @returns {string} the updated and normalized function string
 	 */
 	static getFunctionContent(fn) {
@@ -57,6 +100,7 @@ class Template {
 			.replace(INDENT_MULTILINE_REGEX, "")
 			.replace(LINE_SEPARATOR_REGEX, "\n");
 	}
+
 	/**
 	 * @param {string} str the string converted to identifier
 	 * @returns {string} created identifier
@@ -67,8 +111,8 @@ class Template {
 			.replace(IDENTIFIER_NAME_REPLACE_REGEX, "_$1")
 			.replace(IDENTIFIER_ALPHA_NUMERIC_NAME_REPLACE_REGEX, "_");
 	}
+
 	/**
-	 *
 	 * @param {string} str string to be converted to commented in bundle code
 	 * @returns {string} returns a commented version of string
 	 */
@@ -78,7 +122,6 @@ class Template {
 	}
 
 	/**
-	 *
 	 * @param {string} str string to be converted to "normal comment"
 	 * @returns {string} returns a commented version of string
 	 */
@@ -98,67 +141,103 @@ class Template {
 			.replace(MATCH_PADDED_HYPHENS_REPLACE_REGEX, "");
 	}
 
-	// map number to a single character a-z, A-Z or <_ + number> if number is too big
+	// map number to a single character a-z, A-Z or multiple characters if number is too big
 	/**
-	 *
 	 * @param {number} n number to convert to ident
 	 * @returns {string} returns single character ident
 	 */
-	static numberToIdentifer(n) {
+	static numberToIdentifier(n) {
+		if (n >= NUMBER_OF_IDENTIFIER_START_CHARS) {
+			// use multiple letters
+			return (
+				Template.numberToIdentifier(n % NUMBER_OF_IDENTIFIER_START_CHARS) +
+				Template.numberToIdentifierContinuation(
+					Math.floor(n / NUMBER_OF_IDENTIFIER_START_CHARS)
+				)
+			);
+		}
+
 		// lower case
 		if (n < DELTA_A_TO_Z) {
 			return String.fromCharCode(START_LOWERCASE_ALPHABET_CODE + n);
 		}
+		n -= DELTA_A_TO_Z;
 
 		// upper case
-		if (n < DELTA_A_TO_Z * 2) {
-			return String.fromCharCode(
-				START_UPPERCASE_ALPHABET_CODE + n - DELTA_A_TO_Z
+		if (n < DELTA_A_TO_Z) {
+			return String.fromCharCode(START_UPPERCASE_ALPHABET_CODE + n);
+		}
+
+		if (n === DELTA_A_TO_Z) return "_";
+		return "$";
+	}
+
+	/**
+	 * @param {number} n number to convert to ident
+	 * @returns {string} returns single character ident
+	 */
+	static numberToIdentifierContinuation(n) {
+		if (n >= NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS) {
+			// use multiple letters
+			return (
+				Template.numberToIdentifierContinuation(
+					n % NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS
+				) +
+				Template.numberToIdentifierContinuation(
+					Math.floor(n / NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS)
+				)
 			);
 		}
 
-		// use multiple letters
-		return (
-			Template.numberToIdentifer(n % (2 * DELTA_A_TO_Z)) +
-			Template.numberToIdentifer(Math.floor(n / (2 * DELTA_A_TO_Z)))
-		);
+		// lower case
+		if (n < DELTA_A_TO_Z) {
+			return String.fromCharCode(START_LOWERCASE_ALPHABET_CODE + n);
+		}
+		n -= DELTA_A_TO_Z;
+
+		// upper case
+		if (n < DELTA_A_TO_Z) {
+			return String.fromCharCode(START_UPPERCASE_ALPHABET_CODE + n);
+		}
+		n -= DELTA_A_TO_Z;
+
+		// numbers
+		if (n < 10) {
+			return `${n}`;
+		}
+
+		if (n === 10) return "_";
+		return "$";
 	}
 
 	/**
-	 *
-	 * @param {string | string[]} str string to convert to identity
+	 * @param {string | string[]} s string to convert to identity
 	 * @returns {string} converted identity
 	 */
-	static indent(str) {
-		if (Array.isArray(str)) {
-			return str.map(Template.indent).join("\n");
-		} else {
-			str = str.trimRight();
-			if (!str) return "";
-			var ind = str[0] === "\n" ? "" : "\t";
-			return ind + str.replace(/\n([^\n])/g, "\n\t$1");
+	static indent(s) {
+		if (Array.isArray(s)) {
+			return s.map(Template.indent).join("\n");
 		}
+		const str = s.trimEnd();
+		if (!str) return "";
+		const ind = str[0] === "\n" ? "" : "\t";
+		return ind + str.replace(/\n([^\n])/g, "\n\t$1");
 	}
 
 	/**
-	 *
-	 * @param {string|string[]} str string to create prefix for
+	 * @param {string | string[]} s string to create prefix for
 	 * @param {string} prefix prefix to compose
 	 * @returns {string} returns new prefix string
 	 */
-	static prefix(str, prefix) {
-		if (Array.isArray(str)) {
-			str = str.join("\n");
-		}
-		str = str.trim();
+	static prefix(s, prefix) {
+		const str = Template.asString(s).trim();
 		if (!str) return "";
 		const ind = str[0] === "\n" ? "" : prefix;
-		return ind + str.replace(/\n([^\n])/g, "\n" + prefix + "$1");
+		return ind + str.replace(/\n([^\n])/g, `\n${prefix}$1`);
 	}
 
 	/**
-	 *
-	 * @param {string|string[]} str string or string collection
+	 * @param {string | string[]} str string or string collection
 	 * @returns {string} returns a single string from array
 	 */
 	static asString(str) {
@@ -169,8 +248,8 @@ class Template {
 	}
 
 	/**
-	 * @typedef {Object} WithId
-	 * @property {string|number} id
+	 * @typedef {object} WithId
+	 * @property {string | number} id
 	 */
 
 	/**
@@ -179,108 +258,170 @@ class Template {
 	 * or false if not every module has a number based id
 	 */
 	static getModulesArrayBounds(modules) {
-		var maxId = -Infinity;
-		var minId = Infinity;
+		let maxId = -Infinity;
+		let minId = Infinity;
 		for (const module of modules) {
-			if (typeof module.id !== "number") return false;
-			if (maxId < module.id) maxId = /** @type {number} */ (module.id);
-			if (minId > module.id) minId = /** @type {number} */ (module.id);
+			const moduleId = module.id;
+			if (typeof moduleId !== "number") return false;
+			if (maxId < moduleId) maxId = moduleId;
+			if (minId > moduleId) minId = moduleId;
 		}
-		if (minId < 16 + ("" + minId).length) {
+		if (minId < 16 + String(minId).length) {
 			// add minId x ',' instead of 'Array(minId).concat(…)'
 			minId = 0;
 		}
-		var objectOverhead = modules
-			.map(module => {
-				var idLength = (module.id + "").length;
-				return idLength + 2;
-			})
-			.reduce((a, b) => {
-				return a + b;
-			}, -1);
-		var arrayOverhead = minId === 0 ? maxId : 16 + ("" + minId).length + maxId;
+		// start with -1 because the first module needs no comma
+		let objectOverhead = -1;
+		for (const module of modules) {
+			// module id + colon + comma
+			objectOverhead += `${module.id}`.length + 2;
+		}
+		// number of commas, or when starting non-zero the length of Array(minId).concat()
+		const arrayOverhead = minId === 0 ? maxId : 16 + `${minId}`.length + maxId;
 		return arrayOverhead < objectOverhead ? [minId, maxId] : false;
 	}
 
 	/**
-	 * @param {Chunk} chunk chunk whose modules will be rendered
-	 * @param {ModuleFilterPredicate} filterFn function used to filter modules from chunk to render
-	 * @param {ModuleTemplate} moduleTemplate ModuleTemplate instance used to render modules
-	 * @param {TODO | TODO[]} dependencyTemplates templates needed for each module to render dependencies
+	 * @param {ChunkRenderContext} renderContext render context
+	 * @param {Module[]} modules modules to render (should be ordered by identifier)
+	 * @param {(module: Module, renderInArray?: boolean) => Source | null} renderModule function to render a module
 	 * @param {string=} prefix applying prefix strings
-	 * @returns {ConcatSource} rendered chunk modules in a Source object
+	 * @returns {Source | null} rendered chunk modules in a Source object or null if no modules
 	 */
-	static renderChunkModules(
-		chunk,
-		filterFn,
-		moduleTemplate,
-		dependencyTemplates,
-		prefix
-	) {
-		if (!prefix) prefix = "";
-		var source = new ConcatSource();
-		const modules = chunk.getModules().filter(filterFn);
-		if (chunk instanceof HotUpdateChunk) {
-			var removedModules = chunk.removedModules;
-		}
-		if (
-			modules.length === 0 &&
-			(!removedModules || removedModules.length === 0)
-		) {
-			source.add("[]");
-			return source;
+	static renderChunkModules(renderContext, modules, renderModule, prefix = "") {
+		const { chunkGraph } = renderContext;
+		const source = new ConcatSource();
+		if (modules.length === 0) {
+			return null;
 		}
-		var allModules = modules.map(module => {
-			return {
-				id: module.id,
-				source: moduleTemplate.render(module, dependencyTemplates, {
-					chunk
-				})
-			};
-		});
-		if (removedModules && removedModules.length > 0) {
-			for (const id of removedModules) {
-				allModules.push({
-					id: id,
-					source: "false"
-				});
-			}
-		}
-		var bounds = Template.getModulesArrayBounds(allModules);
+		/** @type {{ id: ModuleId, module: Module }[]} */
+		const modulesWithId = modules.map((m) => ({
+			id: /** @type {ModuleId} */ (chunkGraph.getModuleId(m)),
+			module: m
+		}));
+		const bounds = Template.getModulesArrayBounds(modulesWithId);
+		const renderInObject = bounds === false;
+
+		/** @type {{ id: ModuleId, source: Source | "false" }[]} */
+		const allModules = modulesWithId.map(({ id, module }) => ({
+			id,
+			source: renderModule(module, renderInObject) || "false"
+		}));
 
 		if (bounds) {
 			// Render a spare array
-			var minId = bounds[0];
-			var maxId = bounds[1];
-			if (minId !== 0) source.add("Array(" + minId + ").concat(");
+			const minId = bounds[0];
+			const maxId = bounds[1];
+			if (minId !== 0) {
+				source.add(`Array(${minId}).concat(`);
+			}
 			source.add("[\n");
+			/** @type {Map} */
 			const modules = new Map();
 			for (const module of allModules) {
 				modules.set(module.id, module);
 			}
-			for (var idx = minId; idx <= maxId; idx++) {
-				var module = modules.get(idx);
-				if (idx !== minId) source.add(",\n");
-				source.add("/* " + idx + " */");
+			for (let idx = minId; idx <= maxId; idx++) {
+				const module = modules.get(idx);
+				if (idx !== minId) {
+					source.add(",\n");
+				}
+				source.add(`/* ${idx} */`);
 				if (module) {
 					source.add("\n");
 					source.add(module.source);
 				}
 			}
-			source.add("\n" + prefix + "]");
-			if (minId !== 0) source.add(")");
+			source.add(`\n${prefix}]`);
+			if (minId !== 0) {
+				source.add(")");
+			}
 		} else {
 			// Render an object
 			source.add("{\n");
-			allModules.sort(stringifyIdSortPredicate).forEach((module, idx) => {
-				if (idx !== 0) source.add(",\n");
-				source.add(`\n/***/ ${JSON.stringify(module.id)}:\n`);
+			for (let i = 0; i < allModules.length; i++) {
+				const module = allModules[i];
+				if (i !== 0) {
+					source.add(",\n");
+				}
+				source.add(
+					`\n/***/ ${JSON.stringify(module.id)}${renderContext.runtimeTemplate.supportsMethodShorthand() && module.source !== "false" ? "" : ":"}\n`
+				);
 				source.add(module.source);
-			});
-			source.add("\n\n" + prefix + "}");
+			}
+			source.add(`\n\n${prefix}}`);
+		}
+		return source;
+	}
+
+	/**
+	 * @param {RuntimeModule[]} runtimeModules array of runtime modules in order
+	 * @param {RenderContext & { codeGenerationResults?: CodeGenerationResults }} renderContext render context
+	 * @returns {Source} rendered runtime modules in a Source object
+	 */
+	static renderRuntimeModules(runtimeModules, renderContext) {
+		const source = new ConcatSource();
+		for (const module of runtimeModules) {
+			const codeGenerationResults = renderContext.codeGenerationResults;
+			/** @type {undefined | Source} */
+			let runtimeSource;
+			if (codeGenerationResults) {
+				runtimeSource = codeGenerationResults.getSource(
+					module,
+					renderContext.chunk.runtime,
+					WEBPACK_MODULE_TYPE_RUNTIME
+				);
+			} else {
+				const codeGenResult = module.codeGeneration({
+					chunkGraph: renderContext.chunkGraph,
+					dependencyTemplates: renderContext.dependencyTemplates,
+					moduleGraph: renderContext.moduleGraph,
+					runtimeTemplate: renderContext.runtimeTemplate,
+					runtime: renderContext.chunk.runtime,
+					runtimes: [renderContext.chunk.runtime],
+					codeGenerationResults
+				});
+				if (!codeGenResult) continue;
+				runtimeSource = codeGenResult.sources.get("runtime");
+			}
+			if (runtimeSource) {
+				source.add(`${Template.toNormalComment(module.identifier())}\n`);
+				if (!module.shouldIsolate()) {
+					source.add(runtimeSource);
+					source.add("\n\n");
+				} else if (renderContext.runtimeTemplate.supportsArrowFunction()) {
+					source.add("(() => {\n");
+					source.add(new PrefixSource("\t", runtimeSource));
+					source.add("\n})();\n\n");
+				} else {
+					source.add("!function() {\n");
+					source.add(new PrefixSource("\t", runtimeSource));
+					source.add("\n}();\n\n");
+				}
+			}
 		}
 		return source;
 	}
+
+	/**
+	 * @param {RuntimeModule[]} runtimeModules array of runtime modules in order
+	 * @param {RenderContext} renderContext render context
+	 * @returns {Source} rendered chunk runtime modules in a Source object
+	 */
+	static renderChunkRuntimeModules(runtimeModules, renderContext) {
+		return new PrefixSource(
+			"/******/ ",
+			new ConcatSource(
+				`function(${RuntimeGlobals.require}) { // webpackRuntimeModules\n`,
+				this.renderRuntimeModules(runtimeModules, renderContext),
+				"}\n"
+			)
+		);
+	}
 }
 
 module.exports = Template;
+module.exports.NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS =
+	NUMBER_OF_IDENTIFIER_CONTINUATION_CHARS;
+module.exports.NUMBER_OF_IDENTIFIER_START_CHARS =
+	NUMBER_OF_IDENTIFIER_START_CHARS;
diff --git a/lib/TemplatedPathPlugin.js b/lib/TemplatedPathPlugin.js
index 8cd1ef40a44..25ef66ea18a 100644
--- a/lib/TemplatedPathPlugin.js
+++ b/lib/TemplatedPathPlugin.js
@@ -2,172 +2,400 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Jason Anderson @diurnalist
 */
+
 "use strict";
 
-const REGEXP_HASH = /\[hash(?::(\d+))?\]/gi,
-	REGEXP_CHUNKHASH = /\[chunkhash(?::(\d+))?\]/gi,
-	REGEXP_MODULEHASH = /\[modulehash(?::(\d+))?\]/gi,
-	REGEXP_CONTENTHASH = /\[contenthash(?::(\d+))?\]/gi,
-	REGEXP_NAME = /\[name\]/gi,
-	REGEXP_ID = /\[id\]/gi,
-	REGEXP_MODULEID = /\[moduleid\]/gi,
-	REGEXP_FILE = /\[file\]/gi,
-	REGEXP_QUERY = /\[query\]/gi,
-	REGEXP_FILEBASE = /\[filebase\]/gi;
-
-// Using global RegExp for .test is dangerous
-// We use a normal RegExp instead of .test
-const REGEXP_HASH_FOR_TEST = new RegExp(REGEXP_HASH.source, "i"),
-	REGEXP_CHUNKHASH_FOR_TEST = new RegExp(REGEXP_CHUNKHASH.source, "i"),
-	REGEXP_CONTENTHASH_FOR_TEST = new RegExp(REGEXP_CONTENTHASH.source, "i"),
-	REGEXP_NAME_FOR_TEST = new RegExp(REGEXP_NAME.source, "i");
-
-const withHashLength = (replacer, handlerFn) => {
-	const fn = (match, hashLength, ...args) => {
-		const length = hashLength && parseInt(hashLength, 10);
-		if (length && handlerFn) {
-			return handlerFn(length);
+const { basename, extname } = require("path");
+const util = require("util");
+const mime = require("mime-types");
+const Chunk = require("./Chunk");
+const Module = require("./Module");
+const { parseResource } = require("./util/identifier");
+
+/** @typedef {import("./ChunkGraph")} ChunkGraph */
+/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("./Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("./Compilation").PathData} PathData */
+/** @typedef {import("./Compiler")} Compiler */
+
+const REGEXP = /\[\\*([\w:]+)\\*\]/g;
+
+/** @type {PathData["prepareId"]} */
+const prepareId = (id) => {
+	if (typeof id !== "string") return id;
+
+	if (/^"\s\+*.*\+\s*"$/.test(id)) {
+		const match = /^"\s\+*\s*(.*)\s*\+\s*"$/.exec(id);
+
+		return `" + (${
+			/** @type {string[]} */ (match)[1]
+		} + "").replace(/(^[.-]|[^a-zA-Z0-9_-])+/g, "_") + "`;
+	}
+
+	return id.replace(/(^[.-]|[^a-z0-9_-])+/gi, "_");
+};
+
+/**
+ * @callback ReplacerFunction
+ * @param {string} match
+ * @param {string | undefined} arg
+ * @param {string} input
+ */
+
+/**
+ * @param {ReplacerFunction} replacer replacer
+ * @param {((arg0: number) => string) | undefined} handler handler
+ * @param {AssetInfo | undefined} assetInfo asset info
+ * @param {string} hashName hash name
+ * @returns {Replacer} hash replacer function
+ */
+const hashLength = (replacer, handler, assetInfo, hashName) => {
+	/** @type {Replacer} */
+	const fn = (match, arg, input) => {
+		/** @type {string} */
+		let result;
+		const length = arg && Number.parseInt(arg, 10);
+
+		if (length && handler) {
+			result = handler(length);
+		} else {
+			const hash = replacer(match, arg, input);
+
+			result = length ? hash.slice(0, length) : hash;
+		}
+		if (assetInfo) {
+			assetInfo.immutable = true;
+			if (Array.isArray(assetInfo[hashName])) {
+				assetInfo[hashName] = [...assetInfo[hashName], result];
+			} else if (assetInfo[hashName]) {
+				assetInfo[hashName] = [assetInfo[hashName], result];
+			} else {
+				assetInfo[hashName] = result;
+			}
 		}
-		const hash = replacer(match, hashLength, ...args);
-		return length ? hash.slice(0, length) : hash;
+		return result;
 	};
+
 	return fn;
 };
 
-const getReplacer = (value, allowEmpty) => {
-	const fn = (match, ...args) => {
-		// last argument in replacer is the entire input string
-		const input = args[args.length - 1];
+/** @typedef {(match: string, arg: string | undefined, input: string) => string} Replacer */
+
+/**
+ * @param {string | number | null | undefined | (() => string | number | null | undefined)} value value
+ * @param {boolean=} allowEmpty allow empty
+ * @returns {Replacer} replacer
+ */
+const replacer = (value, allowEmpty) => {
+	/** @type {Replacer} */
+	const fn = (match, arg, input) => {
+		if (typeof value === "function") {
+			value = value();
+		}
 		if (value === null || value === undefined) {
 			if (!allowEmpty) {
 				throw new Error(
 					`Path variable ${match} not implemented in this context: ${input}`
 				);
 			}
+
 			return "";
-		} else {
-			return `${value}`;
 		}
+
+		return `${value}`;
 	};
+
 	return fn;
 };
 
-const replacePathVariables = (path, data) => {
-	const chunk = data.chunk;
-	const chunkId = chunk && chunk.id;
-	const chunkName = chunk && (chunk.name || chunk.id);
-	const chunkHash = chunk && (chunk.renderedHash || chunk.hash);
-	const chunkHashWithLength = chunk && chunk.hashWithLength;
-	const contentHashType = data.contentHashType;
-	const contentHash =
-		(chunk && chunk.contentHash && chunk.contentHash[contentHashType]) ||
-		data.contentHash;
-	const contentHashWithLength =
-		(chunk &&
-			chunk.contentHashWithLength &&
-			chunk.contentHashWithLength[contentHashType]) ||
-		data.contentHashWithLength;
-	const module = data.module;
-	const moduleId = module && module.id;
-	const moduleHash = module && (module.renderedHash || module.hash);
-	const moduleHashWithLength = module && module.hashWithLength;
+/** @type {Map EXPECTED_ANY>} */
+const deprecationCache = new Map();
+const deprecatedFunction = (() => () => {})();
+/**
+ * @template {(...args: EXPECTED_ANY[]) => EXPECTED_ANY} T
+ * @param {T} fn function
+ * @param {string} message message
+ * @param {string} code code
+ * @returns {T} function with deprecation output
+ */
+const deprecated = (fn, message, code) => {
+	let d = deprecationCache.get(message);
+	if (d === undefined) {
+		d = util.deprecate(deprecatedFunction, message, code);
+		deprecationCache.set(message, d);
+	}
+	return /** @type {T} */ (
+		(...args) => {
+			d();
+			return fn(...args);
+		}
+	);
+};
+
+/** @typedef {(pathData: PathData, assetInfo?: AssetInfo) => string} TemplatePathFn */
+/** @typedef {string | TemplatePathFn} TemplatePath */
 
-	if (typeof path === "function") {
-		path = path(data);
+/**
+ * @param {TemplatePath} path the raw path
+ * @param {PathData} data context data
+ * @param {AssetInfo=} assetInfo extra info about the asset (will be written to)
+ * @returns {string} the interpolated path
+ */
+const interpolate = (path, data, assetInfo) => {
+	const chunkGraph = data.chunkGraph;
+
+	/** @type {Map} */
+	const replacements = new Map();
+
+	// Filename context
+	//
+	// Placeholders
+	//
+	// for /some/path/file.js?query#fragment:
+	// [file] - /some/path/file.js
+	// [query] - ?query
+	// [fragment] - #fragment
+	// [base] - file.js
+	// [path] - /some/path/
+	// [name] - file
+	// [ext] - .js
+	if (typeof data.filename === "string") {
+		// check that filename is data uri
+		const match = data.filename.match(/^data:([^;,]+)/);
+		if (match) {
+			const ext = mime.extension(match[1]);
+			const emptyReplacer = replacer("", true);
+			// "XXXX" used for `updateHash`, so we don't need it here
+			const contentHash =
+				data.contentHash && !/X+/.test(data.contentHash)
+					? data.contentHash
+					: false;
+			const baseReplacer = contentHash ? replacer(contentHash) : emptyReplacer;
+
+			replacements.set("file", emptyReplacer);
+			replacements.set("query", emptyReplacer);
+			replacements.set("fragment", emptyReplacer);
+			replacements.set("path", emptyReplacer);
+			replacements.set("base", baseReplacer);
+			replacements.set("name", baseReplacer);
+			replacements.set("ext", replacer(ext ? `.${ext}` : "", true));
+			// Legacy
+			replacements.set(
+				"filebase",
+				deprecated(
+					baseReplacer,
+					"[filebase] is now [base]",
+					"DEP_WEBPACK_TEMPLATE_PATH_PLUGIN_REPLACE_PATH_VARIABLES_FILENAME"
+				)
+			);
+		} else {
+			const { path: file, query, fragment } = parseResource(data.filename);
+
+			const ext = extname(file);
+			const base = basename(file);
+			const name = base.slice(0, base.length - ext.length);
+			const path = file.slice(0, file.length - base.length);
+
+			replacements.set("file", replacer(file));
+			replacements.set("query", replacer(query, true));
+			replacements.set("fragment", replacer(fragment, true));
+			replacements.set("path", replacer(path, true));
+			replacements.set("base", replacer(base));
+			replacements.set("name", replacer(name));
+			replacements.set("ext", replacer(ext, true));
+			// Legacy
+			replacements.set(
+				"filebase",
+				deprecated(
+					replacer(base),
+					"[filebase] is now [base]",
+					"DEP_WEBPACK_TEMPLATE_PATH_PLUGIN_REPLACE_PATH_VARIABLES_FILENAME"
+				)
+			);
+		}
 	}
 
-	if (
-		data.noChunkHash &&
-		(REGEXP_CHUNKHASH_FOR_TEST.test(path) ||
-			REGEXP_CONTENTHASH_FOR_TEST.test(path))
-	) {
-		throw new Error(
-			`Cannot use [chunkhash] or [contenthash] for chunk in '${path}' (use [hash] instead)`
+	// Compilation context
+	//
+	// Placeholders
+	//
+	// [fullhash] - data.hash (3a4b5c6e7f)
+	//
+	// Legacy Placeholders
+	//
+	// [hash] - data.hash (3a4b5c6e7f)
+	if (data.hash) {
+		const hashReplacer = hashLength(
+			replacer(data.hash),
+			data.hashWithLength,
+			assetInfo,
+			"fullhash"
 		);
-	}
 
-	return (
-		path
-			.replace(
-				REGEXP_HASH,
-				withHashLength(getReplacer(data.hash), data.hashWithLength)
+		replacements.set("fullhash", hashReplacer);
+
+		// Legacy
+		replacements.set(
+			"hash",
+			deprecated(
+				hashReplacer,
+				"[hash] is now [fullhash] (also consider using [chunkhash] or [contenthash], see documentation for details)",
+				"DEP_WEBPACK_TEMPLATE_PATH_PLUGIN_REPLACE_PATH_VARIABLES_HASH"
 			)
-			.replace(
-				REGEXP_CHUNKHASH,
-				withHashLength(getReplacer(chunkHash), chunkHashWithLength)
+		);
+	}
+
+	// Chunk Context
+	//
+	// Placeholders
+	//
+	// [id] - chunk.id (0.js)
+	// [name] - chunk.name (app.js)
+	// [chunkhash] - chunk.hash (7823t4t4.js)
+	// [contenthash] - chunk.contentHash[type] (3256u3zg.js)
+	if (data.chunk) {
+		const chunk = data.chunk;
+
+		const contentHashType = data.contentHashType;
+
+		const idReplacer = replacer(chunk.id);
+		const nameReplacer = replacer(chunk.name || chunk.id);
+		const chunkhashReplacer = hashLength(
+			replacer(chunk instanceof Chunk ? chunk.renderedHash : chunk.hash),
+			"hashWithLength" in chunk ? chunk.hashWithLength : undefined,
+			assetInfo,
+			"chunkhash"
+		);
+		const contenthashReplacer = hashLength(
+			replacer(
+				data.contentHash ||
+					(contentHashType &&
+						chunk.contentHash &&
+						chunk.contentHash[contentHashType])
+			),
+			data.contentHashWithLength ||
+				("contentHashWithLength" in chunk && chunk.contentHashWithLength
+					? chunk.contentHashWithLength[/** @type {string} */ (contentHashType)]
+					: undefined),
+			assetInfo,
+			"contenthash"
+		);
+
+		replacements.set("id", idReplacer);
+		replacements.set("name", nameReplacer);
+		replacements.set("chunkhash", chunkhashReplacer);
+		replacements.set("contenthash", contenthashReplacer);
+	}
+
+	// Module Context
+	//
+	// Placeholders
+	//
+	// [id] - module.id (2.png)
+	// [hash] - module.hash (6237543873.png)
+	//
+	// Legacy Placeholders
+	//
+	// [moduleid] - module.id (2.png)
+	// [modulehash] - module.hash (6237543873.png)
+	if (data.module) {
+		const module = data.module;
+
+		const idReplacer = replacer(() =>
+			(data.prepareId || prepareId)(
+				module instanceof Module
+					? /** @type {ModuleId} */
+						(/** @type {ChunkGraph} */ (chunkGraph).getModuleId(module))
+					: module.id
 			)
-			.replace(
-				REGEXP_CONTENTHASH,
-				withHashLength(getReplacer(contentHash), contentHashWithLength)
+		);
+		const moduleHashReplacer = hashLength(
+			replacer(() =>
+				module instanceof Module
+					? /** @type {ChunkGraph} */
+						(chunkGraph).getRenderedModuleHash(module, data.runtime)
+					: module.hash
+			),
+			"hashWithLength" in module ? module.hashWithLength : undefined,
+			assetInfo,
+			"modulehash"
+		);
+		const contentHashReplacer = hashLength(
+			replacer(/** @type {string} */ (data.contentHash)),
+			undefined,
+			assetInfo,
+			"contenthash"
+		);
+
+		replacements.set("id", idReplacer);
+		replacements.set("modulehash", moduleHashReplacer);
+		replacements.set("contenthash", contentHashReplacer);
+		replacements.set(
+			"hash",
+			data.contentHash ? contentHashReplacer : moduleHashReplacer
+		);
+		// Legacy
+		replacements.set(
+			"moduleid",
+			deprecated(
+				idReplacer,
+				"[moduleid] is now [id]",
+				"DEP_WEBPACK_TEMPLATE_PATH_PLUGIN_REPLACE_PATH_VARIABLES_MODULE_ID"
 			)
-			.replace(
-				REGEXP_MODULEHASH,
-				withHashLength(getReplacer(moduleHash), moduleHashWithLength)
+		);
+	}
+
+	// Other things
+	if (data.url) {
+		replacements.set("url", replacer(data.url));
+	}
+	if (typeof data.runtime === "string") {
+		replacements.set(
+			"runtime",
+			replacer(() =>
+				(data.prepareId || prepareId)(/** @type {string} */ (data.runtime))
 			)
-			.replace(REGEXP_ID, getReplacer(chunkId))
-			.replace(REGEXP_MODULEID, getReplacer(moduleId))
-			.replace(REGEXP_NAME, getReplacer(chunkName))
-			.replace(REGEXP_FILE, getReplacer(data.filename))
-			.replace(REGEXP_FILEBASE, getReplacer(data.basename))
-			// query is optional, it's OK if it's in a path but there's nothing to replace it with
-			.replace(REGEXP_QUERY, getReplacer(data.query, true))
-	);
-};
+		);
+	} else {
+		replacements.set("runtime", replacer("_"));
+	}
 
-class TemplatedPathPlugin {
-	apply(compiler) {
-		compiler.hooks.compilation.tap("TemplatedPathPlugin", compilation => {
-			const mainTemplate = compilation.mainTemplate;
+	if (typeof path === "function") {
+		path = path(data, assetInfo);
+	}
 
-			mainTemplate.hooks.assetPath.tap(
-				"TemplatedPathPlugin",
-				replacePathVariables
-			);
+	path = path.replace(REGEXP, (match, content) => {
+		if (content.length + 2 === match.length) {
+			const contentMatch = /^(\w+)(?::(\w+))?$/.exec(content);
+			if (!contentMatch) return match;
+			const [, kind, arg] = contentMatch;
+			const replacer = replacements.get(kind);
+			if (replacer !== undefined) {
+				return replacer(match, arg, /** @type {string} */ (path));
+			}
+		} else if (match.startsWith("[\\") && match.endsWith("\\]")) {
+			return `[${match.slice(2, -2)}]`;
+		}
+		return match;
+	});
 
-			mainTemplate.hooks.globalHash.tap(
-				"TemplatedPathPlugin",
-				(chunk, paths) => {
-					const outputOptions = mainTemplate.outputOptions;
-					const publicPath = outputOptions.publicPath || "";
-					const filename = outputOptions.filename || "";
-					const chunkFilename =
-						outputOptions.chunkFilename || outputOptions.filename;
-					if (
-						REGEXP_HASH_FOR_TEST.test(publicPath) ||
-						REGEXP_CHUNKHASH_FOR_TEST.test(publicPath) ||
-						REGEXP_CONTENTHASH_FOR_TEST.test(publicPath) ||
-						REGEXP_NAME_FOR_TEST.test(publicPath)
-					)
-						return true;
-					if (REGEXP_HASH_FOR_TEST.test(filename)) return true;
-					if (REGEXP_HASH_FOR_TEST.test(chunkFilename)) return true;
-					if (REGEXP_HASH_FOR_TEST.test(paths.join("|"))) return true;
-				}
-			);
+	return path;
+};
 
-			mainTemplate.hooks.hashForChunk.tap(
-				"TemplatedPathPlugin",
-				(hash, chunk) => {
-					const outputOptions = mainTemplate.outputOptions;
-					const chunkFilename =
-						outputOptions.chunkFilename || outputOptions.filename;
-					if (REGEXP_CHUNKHASH_FOR_TEST.test(chunkFilename)) {
-						hash.update(JSON.stringify(chunk.getChunkMaps(true).hash));
-					}
-					if (REGEXP_CONTENTHASH_FOR_TEST.test(chunkFilename)) {
-						hash.update(
-							JSON.stringify(
-								chunk.getChunkMaps(true).contentHash.javascript || {}
-							)
-						);
-					}
-					if (REGEXP_NAME_FOR_TEST.test(chunkFilename)) {
-						hash.update(JSON.stringify(chunk.getChunkMaps(true).name));
-					}
-				}
-			);
+const plugin = "TemplatedPathPlugin";
+
+class TemplatedPathPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(plugin, (compilation) => {
+			compilation.hooks.assetPath.tap(plugin, interpolate);
 		});
 	}
 }
 
 module.exports = TemplatedPathPlugin;
+module.exports.interpolate = interpolate;
diff --git a/lib/UmdMainTemplatePlugin.js b/lib/UmdMainTemplatePlugin.js
deleted file mode 100644
index 795ae278272..00000000000
--- a/lib/UmdMainTemplatePlugin.js
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-const { ConcatSource, OriginalSource } = require("webpack-sources");
-const Template = require("./Template");
-
-/** @typedef {import("./Compilation")} Compilation */
-
-/**
- * @param {string[]} accessor the accessor to convert to path
- * @returns {string} the path
- */
-const accessorToObjectAccess = accessor => {
-	return accessor.map(a => `[${JSON.stringify(a)}]`).join("");
-};
-
-/**
- * @param {string=} base the path prefix
- * @param {string|string[]} accessor the accessor
- * @param {string=} joinWith the element separator
- * @returns {string} the path
- */
-const accessorAccess = (base, accessor, joinWith = ", ") => {
-	const accessors = Array.isArray(accessor) ? accessor : [accessor];
-	return accessors
-		.map((_, idx) => {
-			const a = base
-				? base + accessorToObjectAccess(accessors.slice(0, idx + 1))
-				: accessors[0] + accessorToObjectAccess(accessors.slice(1, idx + 1));
-			if (idx === accessors.length - 1) return a;
-			if (idx === 0 && typeof base === "undefined")
-				return `${a} = typeof ${a} === "object" ? ${a} : {}`;
-			return `${a} = ${a} || {}`;
-		})
-		.join(joinWith);
-};
-
-/** @typedef {string | string[] | Record} UmdMainTemplatePluginName */
-
-/**
- * @typedef {Object} AuxiliaryCommentObject
- * @property {string} root
- * @property {string} commonjs
- * @property {string} commonjs2
- * @property {string} amd
- */
-
-/**
- * @typedef {Object} UmdMainTemplatePluginOption
- * @property {boolean=} optionalAmdExternalAsGlobal
- * @property {boolean} namedDefine
- * @property {string | AuxiliaryCommentObject} auxiliaryComment
- */
-
-class UmdMainTemplatePlugin {
-	/**
-	 * @param {UmdMainTemplatePluginName} name the name of the UMD library
-	 * @param {UmdMainTemplatePluginOption} options the plugin option
-	 */
-	constructor(name, options) {
-		if (typeof name === "object" && !Array.isArray(name)) {
-			this.name = name.root || name.amd || name.commonjs;
-			this.names = name;
-		} else {
-			this.name = name;
-			this.names = {
-				commonjs: name,
-				root: name,
-				amd: name
-			};
-		}
-		this.optionalAmdExternalAsGlobal = options.optionalAmdExternalAsGlobal;
-		this.namedDefine = options.namedDefine;
-		this.auxiliaryComment = options.auxiliaryComment;
-	}
-
-	/**
-	 * @param {Compilation} compilation the compilation instance
-	 * @returns {void}
-	 */
-	apply(compilation) {
-		const { mainTemplate, chunkTemplate, runtimeTemplate } = compilation;
-
-		const onRenderWithEntry = (source, chunk, hash) => {
-			let externals = chunk
-				.getModules()
-				.filter(
-					m =>
-						m.external &&
-						(m.externalType === "umd" || m.externalType === "umd2")
-				);
-			const optionalExternals = [];
-			let requiredExternals = [];
-			if (this.optionalAmdExternalAsGlobal) {
-				for (const m of externals) {
-					if (m.optional) {
-						optionalExternals.push(m);
-					} else {
-						requiredExternals.push(m);
-					}
-				}
-				externals = requiredExternals.concat(optionalExternals);
-			} else {
-				requiredExternals = externals;
-			}
-
-			function replaceKeys(str) {
-				return mainTemplate.getAssetPath(str, {
-					hash,
-					chunk
-				});
-			}
-
-			function externalsDepsArray(modules) {
-				return `[${replaceKeys(
-					modules
-						.map(m =>
-							JSON.stringify(
-								typeof m.request === "object" ? m.request.amd : m.request
-							)
-						)
-						.join(", ")
-				)}]`;
-			}
-
-			function externalsRootArray(modules) {
-				return replaceKeys(
-					modules
-						.map(m => {
-							let request = m.request;
-							if (typeof request === "object") request = request.root;
-							return `root${accessorToObjectAccess([].concat(request))}`;
-						})
-						.join(", ")
-				);
-			}
-
-			function externalsRequireArray(type) {
-				return replaceKeys(
-					externals
-						.map(m => {
-							let expr;
-							let request = m.request;
-							if (typeof request === "object") {
-								request = request[type];
-							}
-							if (typeof request === "undefined") {
-								throw new Error(
-									"Missing external configuration for type:" + type
-								);
-							}
-							if (Array.isArray(request)) {
-								expr = `require(${JSON.stringify(
-									request[0]
-								)})${accessorToObjectAccess(request.slice(1))}`;
-							} else {
-								expr = `require(${JSON.stringify(request)})`;
-							}
-							if (m.optional) {
-								expr = `(function webpackLoadOptionalExternalModule() { try { return ${expr}; } catch(e) {} }())`;
-							}
-							return expr;
-						})
-						.join(", ")
-				);
-			}
-
-			function externalsArguments(modules) {
-				return modules
-					.map(
-						m =>
-							`__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(`${m.id}`)}__`
-					)
-					.join(", ");
-			}
-
-			function libraryName(library) {
-				return JSON.stringify(replaceKeys([].concat(library).pop()));
-			}
-
-			let amdFactory;
-			if (optionalExternals.length > 0) {
-				const wrapperArguments = externalsArguments(requiredExternals);
-				const factoryArguments =
-					requiredExternals.length > 0
-						? externalsArguments(requiredExternals) +
-						  ", " +
-						  externalsRootArray(optionalExternals)
-						: externalsRootArray(optionalExternals);
-				amdFactory =
-					`function webpackLoadOptionalExternalModuleAmd(${wrapperArguments}) {\n` +
-					`			return factory(${factoryArguments});\n` +
-					"		}";
-			} else {
-				amdFactory = "factory";
-			}
-
-			const auxiliaryComment = this.auxiliaryComment;
-
-			const getAuxilaryComment = type => {
-				if (auxiliaryComment) {
-					if (typeof auxiliaryComment === "string")
-						return "\t//" + auxiliaryComment + "\n";
-					if (auxiliaryComment[type])
-						return "\t//" + auxiliaryComment[type] + "\n";
-				}
-				return "";
-			};
-
-			return new ConcatSource(
-				new OriginalSource(
-					"(function webpackUniversalModuleDefinition(root, factory) {\n" +
-						getAuxilaryComment("commonjs2") +
-						"	if(typeof exports === 'object' && typeof module === 'object')\n" +
-						"		module.exports = factory(" +
-						externalsRequireArray("commonjs2") +
-						");\n" +
-						getAuxilaryComment("amd") +
-						"	else if(typeof define === 'function' && define.amd)\n" +
-						(requiredExternals.length > 0
-							? this.names.amd && this.namedDefine === true
-								? "		define(" +
-								  libraryName(this.names.amd) +
-								  ", " +
-								  externalsDepsArray(requiredExternals) +
-								  ", " +
-								  amdFactory +
-								  ");\n"
-								: "		define(" +
-								  externalsDepsArray(requiredExternals) +
-								  ", " +
-								  amdFactory +
-								  ");\n"
-							: this.names.amd && this.namedDefine === true
-								? "		define(" +
-								  libraryName(this.names.amd) +
-								  ", [], " +
-								  amdFactory +
-								  ");\n"
-								: "		define([], " + amdFactory + ");\n") +
-						(this.names.root || this.names.commonjs
-							? getAuxilaryComment("commonjs") +
-							  "	else if(typeof exports === 'object')\n" +
-							  "		exports[" +
-							  libraryName(this.names.commonjs || this.names.root) +
-							  "] = factory(" +
-							  externalsRequireArray("commonjs") +
-							  ");\n" +
-							  getAuxilaryComment("root") +
-							  "	else\n" +
-							  "		" +
-							  replaceKeys(
-									accessorAccess("root", this.names.root || this.names.commonjs)
-							  ) +
-							  " = factory(" +
-							  externalsRootArray(externals) +
-							  ");\n"
-							: "	else {\n" +
-							  (externals.length > 0
-									? "		var a = typeof exports === 'object' ? factory(" +
-									  externalsRequireArray("commonjs") +
-									  ") : factory(" +
-									  externalsRootArray(externals) +
-									  ");\n"
-									: "		var a = factory();\n") +
-							  "		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n" +
-							  "	}\n") +
-						`})(${
-							runtimeTemplate.outputOptions.globalObject
-						}, function(${externalsArguments(externals)}) {\nreturn `,
-					"webpack/universalModuleDefinition"
-				),
-				source,
-				";\n})"
-			);
-		};
-
-		for (const template of [mainTemplate, chunkTemplate]) {
-			template.hooks.renderWithEntry.tap(
-				"UmdMainTemplatePlugin",
-				onRenderWithEntry
-			);
-		}
-
-		mainTemplate.hooks.globalHashPaths.tap("UmdMainTemplatePlugin", paths => {
-			if (this.names.root) paths = paths.concat(this.names.root);
-			if (this.names.amd) paths = paths.concat(this.names.amd);
-			if (this.names.commonjs) paths = paths.concat(this.names.commonjs);
-			return paths;
-		});
-
-		mainTemplate.hooks.hash.tap("UmdMainTemplatePlugin", hash => {
-			hash.update("umd");
-			hash.update(`${this.names.root}`);
-			hash.update(`${this.names.amd}`);
-			hash.update(`${this.names.commonjs}`);
-		});
-	}
-}
-
-module.exports = UmdMainTemplatePlugin;
diff --git a/lib/UnhandledSchemeError.js b/lib/UnhandledSchemeError.js
new file mode 100644
index 00000000000..d3054f4e784
--- /dev/null
+++ b/lib/UnhandledSchemeError.js
@@ -0,0 +1,34 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+class UnhandledSchemeError extends WebpackError {
+	/**
+	 * @param {string} scheme scheme
+	 * @param {string} resource resource
+	 */
+	constructor(scheme, resource) {
+		super(
+			`Reading from "${resource}" is not handled by plugins (Unhandled scheme).` +
+				'\nWebpack supports "data:" and "file:" URIs by default.' +
+				`\nYou may need an additional plugin to handle "${scheme}:" URIs.`
+		);
+		this.file = resource;
+		/** @type {string} */
+		this.name = "UnhandledSchemeError";
+	}
+}
+
+makeSerializable(
+	UnhandledSchemeError,
+	"webpack/lib/UnhandledSchemeError",
+	"UnhandledSchemeError"
+);
+
+module.exports = UnhandledSchemeError;
diff --git a/lib/UnsupportedFeatureWarning.js b/lib/UnsupportedFeatureWarning.js
index 284429ea94d..ffd5c55addd 100644
--- a/lib/UnsupportedFeatureWarning.js
+++ b/lib/UnsupportedFeatureWarning.js
@@ -2,21 +2,34 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const WebpackError = require("./WebpackError");
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
 
 class UnsupportedFeatureWarning extends WebpackError {
-	constructor(module, message, loc) {
+	/**
+	 * @param {string} message description of warning
+	 * @param {DependencyLocation} loc location start and end positions of the module
+	 */
+	constructor(message, loc) {
 		super(message);
 
+		/** @type {string} */
 		this.name = "UnsupportedFeatureWarning";
-		this.module = module;
+		/** @type {DependencyLocation} */
 		this.loc = loc;
+		/** @type {boolean} */
 		this.hideStack = true;
-
-		Error.captureStackTrace(this, this.constructor);
 	}
 }
 
+makeSerializable(
+	UnsupportedFeatureWarning,
+	"webpack/lib/UnsupportedFeatureWarning"
+);
+
 module.exports = UnsupportedFeatureWarning;
diff --git a/lib/UseStrictPlugin.js b/lib/UseStrictPlugin.js
index 175c6028350..ea1d87fbebb 100644
--- a/lib/UseStrictPlugin.js
+++ b/lib/UseStrictPlugin.js
@@ -2,23 +2,41 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
 const ConstDependency = require("./dependencies/ConstDependency");
 
-/** @typedef {import("./Compiler.js")} Compiler */
+/** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Module").BuildInfo} BuildInfo */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+
+const PLUGIN_NAME = "UseStrictPlugin";
 
 class UseStrictPlugin {
 	/**
-	 * @param {Compiler} compiler Webpack Compiler
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
 	 * @returns {void}
 	 */
 	apply(compiler) {
 		compiler.hooks.compilation.tap(
-			"UseStrictPlugin",
+			PLUGIN_NAME,
 			(compilation, { normalModuleFactory }) => {
-				const handler = parser => {
-					parser.hooks.program.tap("UseStrictPlugin", ast => {
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @param {JavascriptParserOptions} parserOptions the javascript parser options
+				 */
+				const handler = (parser, parserOptions) => {
+					parser.hooks.program.tap(PLUGIN_NAME, (ast) => {
 						const firstNode = ast.body[0];
 						if (
 							firstNode &&
@@ -29,23 +47,32 @@ class UseStrictPlugin {
 							// Remove "use strict" expression. It will be added later by the renderer again.
 							// This is necessary in order to not break the strict mode when webpack prepends code.
 							// @see https://github.com/webpack/webpack/issues/1970
-							const dep = new ConstDependency("", firstNode.range);
-							dep.loc = firstNode.loc;
-							parser.state.current.addDependency(dep);
-							parser.state.module.buildInfo.strict = true;
+							const dep = new ConstDependency(
+								"",
+								/** @type {Range} */ (firstNode.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (firstNode.loc);
+							parser.state.module.addPresentationalDependency(dep);
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo).strict = true;
+						}
+						if (parserOptions.overrideStrict) {
+							/** @type {BuildInfo} */
+							(parser.state.module.buildInfo).strict =
+								parserOptions.overrideStrict === "strict";
 						}
 					});
 				};
 
 				normalModuleFactory.hooks.parser
-					.for("javascript/auto")
-					.tap("UseStrictPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/dynamic")
-					.tap("UseStrictPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
 				normalModuleFactory.hooks.parser
-					.for("javascript/esm")
-					.tap("UseStrictPlugin", handler);
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
 			}
 		);
 	}
diff --git a/lib/WarnCaseSensitiveModulesPlugin.js b/lib/WarnCaseSensitiveModulesPlugin.js
index 867a33fe31e..a272cff0503 100644
--- a/lib/WarnCaseSensitiveModulesPlugin.js
+++ b/lib/WarnCaseSensitiveModulesPlugin.js
@@ -2,35 +2,62 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const CaseSensitiveModulesWarning = require("./CaseSensitiveModulesWarning");
 
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./NormalModule")} NormalModule */
+
+const PLUGIN_NAME = "WarnCaseSensitiveModulesPlugin";
+
 class WarnCaseSensitiveModulesPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.compilation.tap(
-			"WarnCaseSensitiveModulesPlugin",
-			compilation => {
-				compilation.hooks.seal.tap("WarnCaseSensitiveModulesPlugin", () => {
-					const moduleWithoutCase = new Map();
-					for (const module of compilation.modules) {
-						const identifier = module.identifier().toLowerCase();
-						const array = moduleWithoutCase.get(identifier);
-						if (array) {
-							array.push(module);
-						} else {
-							moduleWithoutCase.set(identifier, [module]);
-						}
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.hooks.seal.tap(PLUGIN_NAME, () => {
+				/** @type {Map>} */
+				const moduleWithoutCase = new Map();
+				for (const module of compilation.modules) {
+					const identifier = module.identifier();
+
+					// Ignore `data:` URLs, because it's not a real path
+					if (
+						/** @type {NormalModule} */
+						(module).resourceResolveData !== undefined &&
+						/** @type {NormalModule} */
+						(module).resourceResolveData.encodedContent !== undefined
+					) {
+						continue;
+					}
+
+					const lowerIdentifier = identifier.toLowerCase();
+					let map = moduleWithoutCase.get(lowerIdentifier);
+					if (map === undefined) {
+						map = new Map();
+						moduleWithoutCase.set(lowerIdentifier, map);
 					}
-					for (const pair of moduleWithoutCase) {
-						const array = pair[1];
-						if (array.length > 1) {
-							compilation.warnings.push(new CaseSensitiveModulesWarning(array));
-						}
+					map.set(identifier, module);
+				}
+				for (const pair of moduleWithoutCase) {
+					const map = pair[1];
+					if (map.size > 1) {
+						compilation.warnings.push(
+							new CaseSensitiveModulesWarning(
+								map.values(),
+								compilation.moduleGraph
+							)
+						);
 					}
-				});
-			}
-		);
+				}
+			});
+		});
 	}
 }
 
diff --git a/lib/WarnDeprecatedOptionPlugin.js b/lib/WarnDeprecatedOptionPlugin.js
new file mode 100644
index 00000000000..292d0cf07ce
--- /dev/null
+++ b/lib/WarnDeprecatedOptionPlugin.js
@@ -0,0 +1,60 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Florent Cailhol @ooflorent
+*/
+
+"use strict";
+
+const WebpackError = require("./WebpackError");
+
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "WarnDeprecatedOptionPlugin";
+
+class WarnDeprecatedOptionPlugin {
+	/**
+	 * Create an instance of the plugin
+	 * @param {string} option the target option
+	 * @param {string | number} value the deprecated option value
+	 * @param {string} suggestion the suggestion replacement
+	 */
+	constructor(option, value, suggestion) {
+		this.option = option;
+		this.value = value;
+		this.suggestion = suggestion;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.warnings.push(
+				new DeprecatedOptionWarning(this.option, this.value, this.suggestion)
+			);
+		});
+	}
+}
+
+class DeprecatedOptionWarning extends WebpackError {
+	/**
+	 * Create an instance deprecated option warning
+	 * @param {string} option the target option
+	 * @param {string | number} value the deprecated option value
+	 * @param {string} suggestion the suggestion replacement
+	 */
+	constructor(option, value, suggestion) {
+		super();
+
+		/** @type {string} */
+		this.name = "DeprecatedOptionWarning";
+		this.message =
+			"configuration\n" +
+			`The value '${value}' for option '${option}' is deprecated. ` +
+			`Use '${suggestion}' instead.`;
+	}
+}
+
+module.exports = WarnDeprecatedOptionPlugin;
diff --git a/lib/WarnNoModeSetPlugin.js b/lib/WarnNoModeSetPlugin.js
index 4a69a8cca4b..3eaae89bc34 100644
--- a/lib/WarnNoModeSetPlugin.js
+++ b/lib/WarnNoModeSetPlugin.js
@@ -2,13 +2,23 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const NoModeWarning = require("./NoModeWarning");
 
+/** @typedef {import("./Compiler")} Compiler */
+
+const PLUGIN_NAME = "WarnNoModeSetPlugin";
+
 class WarnNoModeSetPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
 	apply(compiler) {
-		compiler.hooks.thisCompilation.tap("WarnNoModeSetPlugin", compilation => {
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
 			compilation.warnings.push(new NoModeWarning());
 		});
 	}
diff --git a/lib/WatchIgnorePlugin.js b/lib/WatchIgnorePlugin.js
index 7a00e998f05..72d48913ead 100644
--- a/lib/WatchIgnorePlugin.js
+++ b/lib/WatchIgnorePlugin.js
@@ -2,77 +2,78 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-"use strict";
 
-const validateOptions = require("schema-utils");
-const schema = require("../schemas/plugins/WatchIgnorePlugin.json");
+"use strict";
 
-class WatchIgnorePlugin {
-	constructor(paths) {
-		validateOptions(schema, paths, "Watch Ignore Plugin");
-		this.paths = paths;
-	}
+const { groupBy } = require("./util/ArrayHelpers");
 
-	apply(compiler) {
-		compiler.hooks.afterEnvironment.tap("WatchIgnorePlugin", () => {
-			compiler.watchFileSystem = new IgnoringWatchFileSystem(
-				compiler.watchFileSystem,
-				this.paths
-			);
-		});
-	}
-}
+/** @typedef {import("watchpack").TimeInfoEntries} TimeInfoEntries */
+/** @typedef {import("../declarations/plugins/WatchIgnorePlugin").WatchIgnorePluginOptions} WatchIgnorePluginOptions */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
+/** @typedef {import("./util/fs").WatchMethod} WatchMethod */
+/** @typedef {import("./util/fs").Watcher} Watcher */
 
-module.exports = WatchIgnorePlugin;
+const IGNORE_TIME_ENTRY = "ignore";
 
 class IgnoringWatchFileSystem {
+	/**
+	 * @param {WatchFileSystem} wfs original file system
+	 * @param {WatchIgnorePluginOptions["paths"]} paths ignored paths
+	 */
 	constructor(wfs, paths) {
 		this.wfs = wfs;
 		this.paths = paths;
 	}
 
+	/** @type {WatchMethod} */
 	watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
-		const ignored = path =>
-			this.paths.some(
-				p => (p instanceof RegExp ? p.test(path) : path.indexOf(p) === 0)
+		files = [...files];
+		dirs = [...dirs];
+		/**
+		 * @param {string} path path to check
+		 * @returns {boolean} true, if path is ignored
+		 */
+		const ignored = (path) =>
+			this.paths.some((p) =>
+				p instanceof RegExp ? p.test(path) : path.indexOf(p) === 0
 			);
 
-		const notIgnored = path => !ignored(path);
-
-		const ignoredFiles = files.filter(ignored);
-		const ignoredDirs = dirs.filter(ignored);
+		const [ignoredFiles, notIgnoredFiles] = groupBy(
+			/** @type {string[]} */
+			(files),
+			ignored
+		);
+		const [ignoredDirs, notIgnoredDirs] = groupBy(
+			/** @type {string[]} */
+			(dirs),
+			ignored
+		);
 
 		const watcher = this.wfs.watch(
-			files.filter(notIgnored),
-			dirs.filter(notIgnored),
+			notIgnoredFiles,
+			notIgnoredDirs,
 			missing,
 			startTime,
 			options,
-			(
-				err,
-				filesModified,
-				dirsModified,
-				missingModified,
-				fileTimestamps,
-				dirTimestamps
-			) => {
+			(err, fileTimestamps, dirTimestamps, changedFiles, removedFiles) => {
 				if (err) return callback(err);
-
 				for (const path of ignoredFiles) {
-					fileTimestamps.set(path, 1);
+					/** @type {TimeInfoEntries} */
+					(fileTimestamps).set(path, IGNORE_TIME_ENTRY);
 				}
 
 				for (const path of ignoredDirs) {
-					dirTimestamps.set(path, 1);
+					/** @type {TimeInfoEntries} */
+					(dirTimestamps).set(path, IGNORE_TIME_ENTRY);
 				}
 
 				callback(
-					err,
-					filesModified,
-					dirsModified,
-					missingModified,
+					null,
 					fileTimestamps,
-					dirTimestamps
+					dirTimestamps,
+					changedFiles,
+					removedFiles
 				);
 			},
 			callbackUndelayed
@@ -81,20 +82,76 @@ class IgnoringWatchFileSystem {
 		return {
 			close: () => watcher.close(),
 			pause: () => watcher.pause(),
-			getContextTimestamps: () => {
-				const dirTimestamps = watcher.getContextTimestamps();
+			getContextTimeInfoEntries: () => {
+				const dirTimestamps = watcher.getContextTimeInfoEntries();
 				for (const path of ignoredDirs) {
-					dirTimestamps.set(path, 1);
+					dirTimestamps.set(path, IGNORE_TIME_ENTRY);
 				}
 				return dirTimestamps;
 			},
-			getFileTimestamps: () => {
-				const fileTimestamps = watcher.getFileTimestamps();
+			getFileTimeInfoEntries: () => {
+				const fileTimestamps = watcher.getFileTimeInfoEntries();
 				for (const path of ignoredFiles) {
-					fileTimestamps.set(path, 1);
+					fileTimestamps.set(path, IGNORE_TIME_ENTRY);
 				}
 				return fileTimestamps;
-			}
+			},
+			getInfo:
+				watcher.getInfo &&
+				(() => {
+					const info =
+						/** @type {NonNullable} */
+						(watcher.getInfo)();
+					const { fileTimeInfoEntries, contextTimeInfoEntries } = info;
+					for (const path of ignoredFiles) {
+						fileTimeInfoEntries.set(path, IGNORE_TIME_ENTRY);
+					}
+					for (const path of ignoredDirs) {
+						contextTimeInfoEntries.set(path, IGNORE_TIME_ENTRY);
+					}
+					return info;
+				})
 		};
 	}
 }
+
+const PLUGIN_NAME = "WatchIgnorePlugin";
+
+class WatchIgnorePlugin {
+	/**
+	 * @param {WatchIgnorePluginOptions} options options
+	 */
+	constructor(options) {
+		/** @type {WatchIgnorePluginOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../schemas/plugins/WatchIgnorePlugin.json"),
+				this.options,
+				{
+					name: "Watch Ignore Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../schemas/plugins/WatchIgnorePlugin.check")(options)
+			);
+		});
+		compiler.hooks.afterEnvironment.tap(PLUGIN_NAME, () => {
+			compiler.watchFileSystem = new IgnoringWatchFileSystem(
+				/** @type {WatchFileSystem} */
+				(compiler.watchFileSystem),
+				this.options.paths
+			);
+		});
+	}
+}
+
+module.exports = WatchIgnorePlugin;
diff --git a/lib/Watching.js b/lib/Watching.js
index 92e682146f2..ff892c2563c 100644
--- a/lib/Watching.js
+++ b/lib/Watching.js
@@ -2,175 +2,508 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
 const Stats = require("./Stats");
 
+/** @typedef {import("../declarations/WebpackOptions").WatchOptions} WatchOptions */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Compiler").ErrorCallback} ErrorCallback */
+/** @typedef {import("./WebpackError")} WebpackError */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./util/fs").TimeInfoEntries} TimeInfoEntries */
+/** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
+/** @typedef {import("./util/fs").Watcher} Watcher */
+
+/**
+ * @template T
+ * @template [R=void]
+ * @typedef {import("./webpack").Callback} Callback
+ */
+
+/** @typedef {Set} CollectedFiles */
+
 class Watching {
+	/**
+	 * @param {Compiler} compiler the compiler
+	 * @param {WatchOptions} watchOptions options
+	 * @param {Callback} handler completion handler
+	 */
 	constructor(compiler, watchOptions, handler) {
+		/** @type {null | number} */
 		this.startTime = null;
 		this.invalid = false;
+		/** @type {Callback} */
 		this.handler = handler;
+		/** @type {ErrorCallback[]} */
 		this.callbacks = [];
+		/** @type {ErrorCallback[] | undefined} */
+		this._closeCallbacks = undefined;
 		this.closed = false;
+		this.suspended = false;
+		this.blocked = false;
+		this._isBlocked = () => false;
+		this._onChange = () => {};
+		this._onInvalid = () => {};
 		if (typeof watchOptions === "number") {
+			/** @type {WatchOptions} */
 			this.watchOptions = {
 				aggregateTimeout: watchOptions
 			};
 		} else if (watchOptions && typeof watchOptions === "object") {
-			this.watchOptions = Object.assign({}, watchOptions);
+			/** @type {WatchOptions} */
+			this.watchOptions = { ...watchOptions };
 		} else {
+			/** @type {WatchOptions} */
 			this.watchOptions = {};
 		}
-		this.watchOptions.aggregateTimeout =
-			this.watchOptions.aggregateTimeout || 200;
+		if (typeof this.watchOptions.aggregateTimeout !== "number") {
+			this.watchOptions.aggregateTimeout = 20;
+		}
 		this.compiler = compiler;
-		this.running = true;
-		this.compiler.readRecords(err => {
-			if (err) return this._done(err);
-
-			this._go();
+		this.running = false;
+		this._initial = true;
+		this._invalidReported = true;
+		this._needRecords = true;
+		/** @type {undefined | null | Watcher} */
+		this.watcher = undefined;
+		/** @type {undefined | null | Watcher} */
+		this.pausedWatcher = undefined;
+		/** @type {CollectedFiles | undefined} */
+		this._collectedChangedFiles = undefined;
+		/** @type {CollectedFiles | undefined} */
+		this._collectedRemovedFiles = undefined;
+		this._done = this._done.bind(this);
+		process.nextTick(() => {
+			if (this._initial) this._invalidate();
 		});
 	}
 
-	_go() {
-		this.startTime = Date.now();
+	/**
+	 * @param {ReadonlySet | undefined | null} changedFiles changed files
+	 * @param {ReadonlySet | undefined | null} removedFiles removed files
+	 */
+	_mergeWithCollected(changedFiles, removedFiles) {
+		if (!changedFiles) return;
+		if (!this._collectedChangedFiles) {
+			this._collectedChangedFiles = new Set(changedFiles);
+			this._collectedRemovedFiles = new Set(removedFiles);
+		} else {
+			for (const file of changedFiles) {
+				this._collectedChangedFiles.add(file);
+				/** @type {CollectedFiles} */
+				(this._collectedRemovedFiles).delete(file);
+			}
+			for (const file of /** @type {ReadonlySet} */ (removedFiles)) {
+				this._collectedChangedFiles.delete(file);
+				/** @type {CollectedFiles} */
+				(this._collectedRemovedFiles).add(file);
+			}
+		}
+	}
+
+	/**
+	 * @param {TimeInfoEntries=} fileTimeInfoEntries info for files
+	 * @param {TimeInfoEntries=} contextTimeInfoEntries info for directories
+	 * @param {ReadonlySet=} changedFiles changed files
+	 * @param {ReadonlySet=} removedFiles removed files
+	 * @returns {void}
+	 */
+	_go(fileTimeInfoEntries, contextTimeInfoEntries, changedFiles, removedFiles) {
+		this._initial = false;
+		if (this.startTime === null) this.startTime = Date.now();
 		this.running = true;
-		this.invalid = false;
-		this.compiler.hooks.watchRun.callAsync(this.compiler, err => {
-			if (err) return this._done(err);
-			const onCompiled = (err, compilation) => {
+		if (this.watcher) {
+			this.pausedWatcher = this.watcher;
+			this.lastWatcherStartTime = Date.now();
+			this.watcher.pause();
+			this.watcher = null;
+		} else if (!this.lastWatcherStartTime) {
+			this.lastWatcherStartTime = Date.now();
+		}
+		this.compiler.fsStartTime = Date.now();
+		if (
+			changedFiles &&
+			removedFiles &&
+			fileTimeInfoEntries &&
+			contextTimeInfoEntries
+		) {
+			this._mergeWithCollected(changedFiles, removedFiles);
+			this.compiler.fileTimestamps = fileTimeInfoEntries;
+			this.compiler.contextTimestamps = contextTimeInfoEntries;
+		} else if (this.pausedWatcher) {
+			if (this.pausedWatcher.getInfo) {
+				const {
+					changes,
+					removals,
+					fileTimeInfoEntries,
+					contextTimeInfoEntries
+				} = this.pausedWatcher.getInfo();
+				this._mergeWithCollected(changes, removals);
+				this.compiler.fileTimestamps = fileTimeInfoEntries;
+				this.compiler.contextTimestamps = contextTimeInfoEntries;
+			} else {
+				this._mergeWithCollected(
+					this.pausedWatcher.getAggregatedChanges &&
+						this.pausedWatcher.getAggregatedChanges(),
+					this.pausedWatcher.getAggregatedRemovals &&
+						this.pausedWatcher.getAggregatedRemovals()
+				);
+				this.compiler.fileTimestamps =
+					this.pausedWatcher.getFileTimeInfoEntries();
+				this.compiler.contextTimestamps =
+					this.pausedWatcher.getContextTimeInfoEntries();
+			}
+		}
+		this.compiler.modifiedFiles = this._collectedChangedFiles;
+		this._collectedChangedFiles = undefined;
+		this.compiler.removedFiles = this._collectedRemovedFiles;
+		this._collectedRemovedFiles = undefined;
+
+		const run = () => {
+			if (this.compiler.idle) {
+				return this.compiler.cache.endIdle((err) => {
+					if (err) return this._done(err);
+					this.compiler.idle = false;
+					run();
+				});
+			}
+			if (this._needRecords) {
+				return this.compiler.readRecords((err) => {
+					if (err) return this._done(err);
+
+					this._needRecords = false;
+					run();
+				});
+			}
+			this.invalid = false;
+			this._invalidReported = false;
+			this.compiler.hooks.watchRun.callAsync(this.compiler, (err) => {
 				if (err) return this._done(err);
-				if (this.invalid) return this._done();
+				/**
+				 * @param {Error | null} err error
+				 * @param {Compilation=} _compilation compilation
+				 * @returns {void}
+				 */
+				const onCompiled = (err, _compilation) => {
+					if (err) return this._done(err, _compilation);
 
-				if (this.compiler.hooks.shouldEmit.call(compilation) === false) {
-					return this._done(null, compilation);
-				}
+					const compilation = /** @type {Compilation} */ (_compilation);
 
-				this.compiler.emitAssets(compilation, err => {
-					if (err) return this._done(err);
-					if (this.invalid) return this._done();
+					if (this.compiler.hooks.shouldEmit.call(compilation) === false) {
+						return this._done(null, compilation);
+					}
+
+					process.nextTick(() => {
+						const logger = compilation.getLogger("webpack.Compiler");
+						logger.time("emitAssets");
+						this.compiler.emitAssets(compilation, (err) => {
+							logger.timeEnd("emitAssets");
+							if (err) return this._done(err, compilation);
+							if (this.invalid) return this._done(null, compilation);
 
-					this.compiler.emitRecords(err => {
-						if (err) return this._done(err);
+							logger.time("emitRecords");
+							this.compiler.emitRecords((err) => {
+								logger.timeEnd("emitRecords");
+								if (err) return this._done(err, compilation);
 
-						if (compilation.hooks.needAdditionalPass.call()) {
-							compilation.needAdditionalPass = true;
+								if (compilation.hooks.needAdditionalPass.call()) {
+									compilation.needAdditionalPass = true;
 
-							const stats = new Stats(compilation);
-							stats.startTime = this.startTime;
-							stats.endTime = Date.now();
-							this.compiler.hooks.done.callAsync(stats, err => {
-								if (err) return this._done(err);
+									compilation.startTime = /** @type {number} */ (
+										this.startTime
+									);
+									compilation.endTime = Date.now();
+									logger.time("done hook");
+									const stats = new Stats(compilation);
+									this.compiler.hooks.done.callAsync(stats, (err) => {
+										logger.timeEnd("done hook");
+										if (err) return this._done(err, compilation);
 
-								this.compiler.hooks.additionalPass.callAsync(err => {
-									if (err) return this._done(err);
-									this.compiler.compile(onCompiled);
-								});
+										this.compiler.hooks.additionalPass.callAsync((err) => {
+											if (err) return this._done(err, compilation);
+											this.compiler.compile(onCompiled);
+										});
+									});
+									return;
+								}
+								return this._done(null, compilation);
 							});
-							return;
-						}
-						return this._done(null, compilation);
+						});
 					});
-				});
-			};
-			this.compiler.compile(onCompiled);
-		});
+				};
+				this.compiler.compile(onCompiled);
+			});
+		};
+
+		run();
 	}
 
+	/**
+	 * @param {Compilation} compilation the compilation
+	 * @returns {Stats} the compilation stats
+	 */
 	_getStats(compilation) {
 		const stats = new Stats(compilation);
-		stats.startTime = this.startTime;
-		stats.endTime = Date.now();
 		return stats;
 	}
 
+	/**
+	 * @param {(Error | null)=} err an optional error
+	 * @param {Compilation=} compilation the compilation
+	 * @returns {void}
+	 */
 	_done(err, compilation) {
 		this.running = false;
-		if (this.invalid) return this._go();
 
-		const stats = compilation ? this._getStats(compilation) : null;
-		if (err) {
+		const logger =
+			/** @type {Logger} */
+			(compilation && compilation.getLogger("webpack.Watching"));
+
+		/** @type {Stats | undefined} */
+		let stats;
+
+		/**
+		 * @param {Error} err error
+		 * @param {ErrorCallback[]=} cbs callbacks
+		 */
+		const handleError = (err, cbs) => {
 			this.compiler.hooks.failed.call(err);
-			this.handler(err, stats);
+			this.compiler.cache.beginIdle();
+			this.compiler.idle = true;
+			this.handler(err, /** @type {Stats} */ (stats));
+			if (!cbs) {
+				cbs = this.callbacks;
+				this.callbacks = [];
+			}
+			for (const cb of cbs) cb(err);
+		};
+
+		if (
+			this.invalid &&
+			!this.suspended &&
+			!this.blocked &&
+			!(this._isBlocked() && (this.blocked = true))
+		) {
+			if (compilation) {
+				logger.time("storeBuildDependencies");
+				this.compiler.cache.storeBuildDependencies(
+					compilation.buildDependencies,
+					(err) => {
+						logger.timeEnd("storeBuildDependencies");
+						if (err) return handleError(err);
+						this._go();
+					}
+				);
+			} else {
+				this._go();
+			}
 			return;
 		}
 
-		this.compiler.hooks.done.callAsync(stats, () => {
+		if (compilation) {
+			compilation.startTime = /** @type {number} */ (this.startTime);
+			compilation.endTime = Date.now();
+			stats = new Stats(compilation);
+		}
+		this.startTime = null;
+		if (err) return handleError(err);
+
+		const cbs = this.callbacks;
+		this.callbacks = [];
+		logger.time("done hook");
+		this.compiler.hooks.done.callAsync(/** @type {Stats} */ (stats), (err) => {
+			logger.timeEnd("done hook");
+			if (err) return handleError(err, cbs);
 			this.handler(null, stats);
-			if (!this.closed) {
-				this.watch(
-					Array.from(compilation.fileDependencies),
-					Array.from(compilation.contextDependencies),
-					Array.from(compilation.missingDependencies)
-				);
-			}
-			for (const cb of this.callbacks) cb();
-			this.callbacks.length = 0;
+			logger.time("storeBuildDependencies");
+			this.compiler.cache.storeBuildDependencies(
+				/** @type {Compilation} */
+				(compilation).buildDependencies,
+				(err) => {
+					logger.timeEnd("storeBuildDependencies");
+					if (err) return handleError(err, cbs);
+					logger.time("beginIdle");
+					this.compiler.cache.beginIdle();
+					this.compiler.idle = true;
+					logger.timeEnd("beginIdle");
+					process.nextTick(() => {
+						if (!this.closed) {
+							this.watch(
+								/** @type {Compilation} */
+								(compilation).fileDependencies,
+								/** @type {Compilation} */
+								(compilation).contextDependencies,
+								/** @type {Compilation} */
+								(compilation).missingDependencies
+							);
+						}
+					});
+					for (const cb of cbs) cb(null);
+					this.compiler.hooks.afterDone.call(/** @type {Stats} */ (stats));
+				}
+			);
 		});
 	}
 
+	/**
+	 * @param {Iterable} files watched files
+	 * @param {Iterable} dirs watched directories
+	 * @param {Iterable} missing watched existence entries
+	 * @returns {void}
+	 */
 	watch(files, dirs, missing) {
 		this.pausedWatcher = null;
-		this.watcher = this.compiler.watchFileSystem.watch(
-			files,
-			dirs,
-			missing,
-			this.startTime,
-			this.watchOptions,
-			(
-				err,
-				filesModified,
-				contextModified,
-				missingModified,
-				fileTimestamps,
-				contextTimestamps
-			) => {
-				this.pausedWatcher = this.watcher;
-				this.watcher = null;
-				if (err) {
-					return this.handler(err);
+		this.watcher =
+			/** @type {WatchFileSystem} */
+			(this.compiler.watchFileSystem).watch(
+				files,
+				dirs,
+				missing,
+				/** @type {number} */ (this.lastWatcherStartTime),
+				this.watchOptions,
+				(
+					err,
+					fileTimeInfoEntries,
+					contextTimeInfoEntries,
+					changedFiles,
+					removedFiles
+				) => {
+					if (err) {
+						this.compiler.modifiedFiles = undefined;
+						this.compiler.removedFiles = undefined;
+						this.compiler.fileTimestamps = undefined;
+						this.compiler.contextTimestamps = undefined;
+						this.compiler.fsStartTime = undefined;
+						return this.handler(err);
+					}
+					this._invalidate(
+						fileTimeInfoEntries,
+						contextTimeInfoEntries,
+						changedFiles,
+						removedFiles
+					);
+					this._onChange();
+				},
+				(fileName, changeTime) => {
+					if (!this._invalidReported) {
+						this._invalidReported = true;
+						this.compiler.hooks.invalid.call(fileName, changeTime);
+					}
+					this._onInvalid();
 				}
-				this.compiler.fileTimestamps = fileTimestamps;
-				this.compiler.contextTimestamps = contextTimestamps;
-				this._invalidate();
-			},
-			(fileName, changeTime) => {
-				this.compiler.hooks.invalid.call(fileName, changeTime);
-			}
-		);
+			);
 	}
 
+	/**
+	 * @param {ErrorCallback=} callback signals when the build has completed again
+	 * @returns {void}
+	 */
 	invalidate(callback) {
 		if (callback) {
 			this.callbacks.push(callback);
 		}
-		if (this.watcher) {
-			this.compiler.fileTimestamps = this.watcher.getFileTimestamps();
-			this.compiler.contextTimestamps = this.watcher.getContextTimestamps();
+		if (!this._invalidReported) {
+			this._invalidReported = true;
+			this.compiler.hooks.invalid.call(null, Date.now());
 		}
-		return this._invalidate();
+		this._onChange();
+		this._invalidate();
 	}
 
-	_invalidate() {
-		if (this.watcher) {
-			this.pausedWatcher = this.watcher;
-			this.watcher.pause();
-			this.watcher = null;
+	/**
+	 * @param {TimeInfoEntries=} fileTimeInfoEntries info for files
+	 * @param {TimeInfoEntries=} contextTimeInfoEntries info for directories
+	 * @param {ReadonlySet=} changedFiles changed files
+	 * @param {ReadonlySet=} removedFiles removed files
+	 * @returns {void}
+	 */
+	_invalidate(
+		fileTimeInfoEntries,
+		contextTimeInfoEntries,
+		changedFiles,
+		removedFiles
+	) {
+		if (this.suspended || (this._isBlocked() && (this.blocked = true))) {
+			this._mergeWithCollected(changedFiles, removedFiles);
+			return;
 		}
+
 		if (this.running) {
+			this._mergeWithCollected(changedFiles, removedFiles);
 			this.invalid = true;
-			return false;
 		} else {
-			this._go();
+			this._go(
+				fileTimeInfoEntries,
+				contextTimeInfoEntries,
+				changedFiles,
+				removedFiles
+			);
 		}
 	}
 
+	suspend() {
+		this.suspended = true;
+	}
+
+	resume() {
+		if (this.suspended) {
+			this.suspended = false;
+			this._invalidate();
+		}
+	}
+
+	/**
+	 * @param {ErrorCallback} callback signals when the watcher is closed
+	 * @returns {void}
+	 */
 	close(callback) {
-		const finalCallback = () => {
-			this.compiler.hooks.watchClose.call();
+		if (this._closeCallbacks) {
+			if (callback) {
+				this._closeCallbacks.push(callback);
+			}
+			return;
+		}
+		/**
+		 * @param {WebpackError | null} err error if any
+		 * @param {Compilation=} compilation compilation if any
+		 */
+		const finalCallback = (err, compilation) => {
+			this.running = false;
 			this.compiler.running = false;
-			if (callback !== undefined) callback();
+			this.compiler.watching = undefined;
+			this.compiler.watchMode = false;
+			this.compiler.modifiedFiles = undefined;
+			this.compiler.removedFiles = undefined;
+			this.compiler.fileTimestamps = undefined;
+			this.compiler.contextTimestamps = undefined;
+			this.compiler.fsStartTime = undefined;
+			/**
+			 * @param {WebpackError | null} err error if any
+			 */
+			const shutdown = (err) => {
+				this.compiler.hooks.watchClose.call();
+				const closeCallbacks =
+					/** @type {ErrorCallback[]} */
+					(this._closeCallbacks);
+				this._closeCallbacks = undefined;
+				for (const cb of closeCallbacks) cb(err);
+			};
+			if (compilation) {
+				const logger = compilation.getLogger("webpack.Watching");
+				logger.time("storeBuildDependencies");
+				this.compiler.cache.storeBuildDependencies(
+					compilation.buildDependencies,
+					(err2) => {
+						logger.timeEnd("storeBuildDependencies");
+						shutdown(err || err2);
+					}
+				);
+			} else {
+				shutdown(err);
+			}
 		};
 
 		this.closed = true;
@@ -182,11 +515,15 @@ class Watching {
 			this.pausedWatcher.close();
 			this.pausedWatcher = null;
 		}
+		this._closeCallbacks = [];
+		if (callback) {
+			this._closeCallbacks.push(callback);
+		}
 		if (this.running) {
 			this.invalid = true;
 			this._done = finalCallback;
 		} else {
-			finalCallback();
+			finalCallback(null);
 		}
 	}
 }
diff --git a/lib/WebpackError.js b/lib/WebpackError.js
index 8451fcb7d74..a4a9cf8bb88 100644
--- a/lib/WebpackError.js
+++ b/lib/WebpackError.js
@@ -2,24 +2,80 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Jarid Margolin @jaridmargolin
 */
+
 "use strict";
 
+const inspect = require("util").inspect.custom;
+const makeSerializable = require("./util/makeSerializable");
+
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
 class WebpackError extends Error {
 	/**
 	 * Creates an instance of WebpackError.
 	 * @param {string=} message error message
+	 * @param {{ cause?: unknown }} options error options
 	 */
-	constructor(message) {
-		super(message);
+	constructor(message, options = {}) {
+		super(message, options);
 
+		/** @type {string=} */
 		this.details = undefined;
+		/** @type {(Module | null)=} */
+		this.module = undefined;
+		/** @type {DependencyLocation=} */
+		this.loc = undefined;
+		/** @type {boolean=} */
+		this.hideStack = undefined;
+		/** @type {Chunk=} */
+		this.chunk = undefined;
+		/** @type {string=} */
+		this.file = undefined;
+	}
 
-		Error.captureStackTrace(this, this.constructor);
+	/**
+	 * @returns {string} inspect message
+	 */
+	[inspect]() {
+		return (
+			this.stack +
+			(this.details ? `\n${this.details}` : "") +
+			(this.cause ? `\n${this.cause}` : "")
+		);
 	}
 
-	inspect() {
-		return this.stack + (this.details ? `\n${this.details}` : "");
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write }) {
+		write(this.name);
+		write(this.message);
+		write(this.stack);
+		write(this.cause);
+		write(this.details);
+		write(this.loc);
+		write(this.hideStack);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize({ read }) {
+		this.name = read();
+		this.message = read();
+		this.stack = read();
+		this.cause = read();
+		this.details = read();
+		this.loc = read();
+		this.hideStack = read();
 	}
 }
 
+makeSerializable(WebpackError, "webpack/lib/WebpackError");
+
+/** @type {typeof WebpackError} */
 module.exports = WebpackError;
diff --git a/lib/WebpackIsIncludedPlugin.js b/lib/WebpackIsIncludedPlugin.js
new file mode 100644
index 00000000000..5953cd6dcc3
--- /dev/null
+++ b/lib/WebpackIsIncludedPlugin.js
@@ -0,0 +1,93 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Ivan Kopeykin @vankop
+*/
+
+"use strict";
+
+const IgnoreErrorModuleFactory = require("./IgnoreErrorModuleFactory");
+const {
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM
+} = require("./ModuleTypeConstants");
+const WebpackIsIncludedDependency = require("./dependencies/WebpackIsIncludedDependency");
+const {
+	toConstantDependency
+} = require("./javascript/JavascriptParserHelpers");
+
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
+/** @typedef {import("./javascript/JavascriptParser").Range} Range */
+
+const PLUGIN_NAME = "WebpackIsIncludedPlugin";
+
+class WebpackIsIncludedPlugin {
+	/**
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				compilation.dependencyFactories.set(
+					WebpackIsIncludedDependency,
+					new IgnoreErrorModuleFactory(normalModuleFactory)
+				);
+				compilation.dependencyTemplates.set(
+					WebpackIsIncludedDependency,
+					new WebpackIsIncludedDependency.Template()
+				);
+
+				/**
+				 * @param {JavascriptParser} parser the parser
+				 * @returns {void}
+				 */
+				const handler = (parser) => {
+					parser.hooks.call
+						.for("__webpack_is_included__")
+						.tap(PLUGIN_NAME, (expr) => {
+							if (
+								expr.type !== "CallExpression" ||
+								expr.arguments.length !== 1 ||
+								expr.arguments[0].type === "SpreadElement"
+							) {
+								return;
+							}
+
+							const request = parser.evaluateExpression(expr.arguments[0]);
+
+							if (!request.isString()) return;
+
+							const dep = new WebpackIsIncludedDependency(
+								/** @type {string} */ (request.string),
+								/** @type {Range} */ (expr.range)
+							);
+							dep.loc = /** @type {DependencyLocation} */ (expr.loc);
+							parser.state.module.addDependency(dep);
+							return true;
+						});
+					parser.hooks.typeof
+						.for("__webpack_is_included__")
+						.tap(
+							PLUGIN_NAME,
+							toConstantDependency(parser, JSON.stringify("function"))
+						);
+				};
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_AUTO)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
+					.tap(PLUGIN_NAME, handler);
+				normalModuleFactory.hooks.parser
+					.for(JAVASCRIPT_MODULE_TYPE_ESM)
+					.tap(PLUGIN_NAME, handler);
+			}
+		);
+	}
+}
+
+module.exports = WebpackIsIncludedPlugin;
diff --git a/lib/WebpackOptionsApply.js b/lib/WebpackOptionsApply.js
index d583787ac13..83f7a08c403 100644
--- a/lib/WebpackOptionsApply.js
+++ b/lib/WebpackOptionsApply.js
@@ -2,373 +2,771 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
+
 "use strict";
 
-const OptionsApply = require("./OptionsApply");
+const APIPlugin = require("./APIPlugin");
 
-const JavascriptModulesPlugin = require("./JavascriptModulesPlugin");
-const JsonModulesPlugin = require("./JsonModulesPlugin");
-const WebAssemblyModulesPlugin = require("./wasm/WebAssemblyModulesPlugin");
+const CompatibilityPlugin = require("./CompatibilityPlugin");
 
-const LoaderTargetPlugin = require("./LoaderTargetPlugin");
-const FunctionModulePlugin = require("./FunctionModulePlugin");
-const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
-const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin");
-const EvalSourceMapDevToolPlugin = require("./EvalSourceMapDevToolPlugin");
+const ConstPlugin = require("./ConstPlugin");
 
 const EntryOptionPlugin = require("./EntryOptionPlugin");
-const RecordIdsPlugin = require("./RecordIdsPlugin");
 
-const APIPlugin = require("./APIPlugin");
-const ConstPlugin = require("./ConstPlugin");
-const RequireJsStuffPlugin = require("./RequireJsStuffPlugin");
+const ExportsInfoApiPlugin = require("./ExportsInfoApiPlugin");
+const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");
+
+const JavascriptMetaInfoPlugin = require("./JavascriptMetaInfoPlugin");
+
 const NodeStuffPlugin = require("./NodeStuffPlugin");
-const CompatibilityPlugin = require("./CompatibilityPlugin");
+const OptionsApply = require("./OptionsApply");
+
+const RecordIdsPlugin = require("./RecordIdsPlugin");
+
+const RuntimePlugin = require("./RuntimePlugin");
 
 const TemplatedPathPlugin = require("./TemplatedPathPlugin");
-const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin");
+
 const UseStrictPlugin = require("./UseStrictPlugin");
 
-const LoaderPlugin = require("./dependencies/LoaderPlugin");
+const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin");
+
+const WebpackIsIncludedPlugin = require("./WebpackIsIncludedPlugin");
+
+const AssetModulesPlugin = require("./asset/AssetModulesPlugin");
+
+const InferAsyncModulesPlugin = require("./async-modules/InferAsyncModulesPlugin");
+
+const ResolverCachePlugin = require("./cache/ResolverCachePlugin");
+
 const CommonJsPlugin = require("./dependencies/CommonJsPlugin");
+
 const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin");
-const SystemPlugin = require("./dependencies/SystemPlugin");
+
+const ImportMetaContextPlugin = require("./dependencies/ImportMetaContextPlugin");
+const ImportMetaPlugin = require("./dependencies/ImportMetaPlugin");
+
 const ImportPlugin = require("./dependencies/ImportPlugin");
-const AMDPlugin = require("./dependencies/AMDPlugin");
+const LoaderPlugin = require("./dependencies/LoaderPlugin");
+
 const RequireContextPlugin = require("./dependencies/RequireContextPlugin");
 const RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin");
 const RequireIncludePlugin = require("./dependencies/RequireIncludePlugin");
 
-const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin");
+const SystemPlugin = require("./dependencies/SystemPlugin");
 
-const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin");
-const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");
-const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");
-const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");
-const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin");
-const OccurrenceOrderPlugin = require("./optimize/OccurrenceOrderPlugin");
-const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin");
-const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");
-const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");
-const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");
-const SplitChunksPlugin = require("./optimize/SplitChunksPlugin");
-const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
-const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
-const NamedModulesPlugin = require("./NamedModulesPlugin");
-const NamedChunksPlugin = require("./NamedChunksPlugin");
-const DefinePlugin = require("./DefinePlugin");
-const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin");
-const WasmFinalizeExportsPlugin = require("./wasm/WasmFinalizeExportsPlugin");
+const URLPlugin = require("./dependencies/URLPlugin");
+
+const WorkerPlugin = require("./dependencies/WorkerPlugin");
+
+const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
+const JavascriptParser = require("./javascript/JavascriptParser");
+
+const JsonModulesPlugin = require("./json/JsonModulesPlugin");
+
+const ChunkPrefetchPreloadPlugin = require("./prefetch/ChunkPrefetchPreloadPlugin");
+
+const DataUriPlugin = require("./schemes/DataUriPlugin");
+const FileUriPlugin = require("./schemes/FileUriPlugin");
+
+const DefaultStatsFactoryPlugin = require("./stats/DefaultStatsFactoryPlugin");
+const DefaultStatsPresetPlugin = require("./stats/DefaultStatsPresetPlugin");
+const DefaultStatsPrinterPlugin = require("./stats/DefaultStatsPrinterPlugin");
+
+const { cleverMerge } = require("./util/cleverMerge");
+
+/** @typedef {import("./webpack").WebpackPluginFunction} WebpackPluginFunction */
+/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("./config/normalization").WebpackOptionsInterception} WebpackOptionsInterception */
+/** @typedef {import("./Compiler")} Compiler */
+/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
+
+const CLASS_NAME = "WebpackOptionsApply";
 
 class WebpackOptionsApply extends OptionsApply {
 	constructor() {
 		super();
 	}
 
-	process(options, compiler) {
-		let ExternalsPlugin;
+	/**
+	 * @param {WebpackOptions} options options object
+	 * @param {Compiler} compiler compiler object
+	 * @param {WebpackOptionsInterception=} interception intercepted options
+	 * @returns {WebpackOptions} options object
+	 */
+	process(options, compiler, interception) {
 		compiler.outputPath = options.output.path;
-		compiler.recordsInputPath = options.recordsInputPath || options.recordsPath;
-		compiler.recordsOutputPath =
-			options.recordsOutputPath || options.recordsPath;
+		compiler.recordsInputPath = options.recordsInputPath || null;
+		compiler.recordsOutputPath = options.recordsOutputPath || null;
 		compiler.name = options.name;
-		compiler.dependencies = options.dependencies;
-		if (typeof options.target === "string") {
-			let JsonpTemplatePlugin;
-			let FetchCompileWasmTemplatePlugin;
-			let ReadFileCompileWasmTemplatePlugin;
-			let NodeSourcePlugin;
-			let NodeTargetPlugin;
-			let NodeTemplatePlugin;
-
-			switch (options.target) {
-				case "web":
-					JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin");
-					FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin");
-					NodeSourcePlugin = require("./node/NodeSourcePlugin");
-					new JsonpTemplatePlugin().apply(compiler);
-					new FetchCompileWasmTemplatePlugin({
-						mangleImports: options.optimization.mangleWasmImports
-					}).apply(compiler);
-					new FunctionModulePlugin().apply(compiler);
-					new NodeSourcePlugin(options.node).apply(compiler);
-					new LoaderTargetPlugin(options.target).apply(compiler);
-					break;
-				case "webworker": {
-					let WebWorkerTemplatePlugin = require("./webworker/WebWorkerTemplatePlugin");
-					FetchCompileWasmTemplatePlugin = require("./web/FetchCompileWasmTemplatePlugin");
-					NodeSourcePlugin = require("./node/NodeSourcePlugin");
-					new WebWorkerTemplatePlugin().apply(compiler);
-					new FetchCompileWasmTemplatePlugin({
-						mangleImports: options.optimization.mangleWasmImports
-					}).apply(compiler);
-					new FunctionModulePlugin().apply(compiler);
-					new NodeSourcePlugin(options.node).apply(compiler);
-					new LoaderTargetPlugin(options.target).apply(compiler);
-					break;
+
+		if (options.externals) {
+			// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+			const ExternalsPlugin = require("./ExternalsPlugin");
+
+			new ExternalsPlugin(options.externalsType, options.externals).apply(
+				compiler
+			);
+		}
+
+		if (options.externalsPresets.node) {
+			const NodeTargetPlugin = require("./node/NodeTargetPlugin");
+
+			// Some older versions of Node.js don't support all built-in modules via import, only via `require`,
+			// but it seems like there shouldn't be a warning here since these versions are rarely used in real applications
+			new NodeTargetPlugin(
+				options.output.module ? "module-import" : "node-commonjs"
+			).apply(compiler);
+
+			// Handle external CSS `@import` and `url()`
+			if (options.experiments.css) {
+				// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+				const ExternalsPlugin = require("./ExternalsPlugin");
+
+				new ExternalsPlugin(
+					"module",
+					({ request, dependencyType, contextInfo }, callback) => {
+						if (
+							/\.css(?:\?|$)/.test(contextInfo.issuer) &&
+							/^(?:\/\/|https?:\/\/|#)/.test(request)
+						) {
+							if (dependencyType === "url") {
+								return callback(null, `asset ${request}`);
+							} else if (
+								(dependencyType === "css-import" ||
+									dependencyType === "css-import-local-module" ||
+									dependencyType === "css-import-global-module") &&
+								options.experiments.css
+							) {
+								return callback(null, `css-import ${request}`);
+							}
+						}
+
+						callback();
+					}
+				).apply(compiler);
+			}
+		}
+		if (options.externalsPresets.webAsync || options.externalsPresets.web) {
+			const type = options.externalsPresets.webAsync ? "import" : "module";
+
+			// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+			const ExternalsPlugin = require("./ExternalsPlugin");
+
+			new ExternalsPlugin(type, ({ request, dependencyType }, callback) => {
+				if (/^(?:\/\/|https?:\/\/|#|std:|jsr:|npm:)/.test(request)) {
+					if (dependencyType === "url") {
+						return callback(null, `asset ${request}`);
+					} else if (
+						(dependencyType === "css-import" ||
+							dependencyType === "css-import-local-module" ||
+							dependencyType === "css-import-global-module") &&
+						options.experiments.css
+					) {
+						return callback(null, `css-import ${request}`);
+					} else if (/^(?:\/\/|https?:\/\/|std:|jsr:|npm:)/.test(request)) {
+						return callback(null, `${type} ${request}`);
+					}
 				}
-				case "node":
-				case "async-node":
-					NodeTemplatePlugin = require("./node/NodeTemplatePlugin");
-					ReadFileCompileWasmTemplatePlugin = require("./node/ReadFileCompileWasmTemplatePlugin");
-					NodeTargetPlugin = require("./node/NodeTargetPlugin");
-					new NodeTemplatePlugin({
-						asyncChunkLoading: options.target === "async-node"
-					}).apply(compiler);
-					new ReadFileCompileWasmTemplatePlugin({
-						mangleImports: options.optimization.mangleWasmImports
-					}).apply(compiler);
-					new FunctionModulePlugin().apply(compiler);
-					new NodeTargetPlugin().apply(compiler);
-					new LoaderTargetPlugin("node").apply(compiler);
-					break;
-				case "node-webkit":
-					JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin");
-					NodeTargetPlugin = require("./node/NodeTargetPlugin");
-					ExternalsPlugin = require("./ExternalsPlugin");
-					new JsonpTemplatePlugin().apply(compiler);
-					new FunctionModulePlugin().apply(compiler);
-					new NodeTargetPlugin().apply(compiler);
-					new ExternalsPlugin("commonjs", "nw.gui").apply(compiler);
-					new LoaderTargetPlugin(options.target).apply(compiler);
+
+				callback();
+			}).apply(compiler);
+		}
+		if (options.externalsPresets.electron) {
+			if (options.externalsPresets.electronMain) {
+				// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+				const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
+
+				new ElectronTargetPlugin("main").apply(compiler);
+			}
+			if (options.externalsPresets.electronPreload) {
+				// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+				const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
+
+				new ElectronTargetPlugin("preload").apply(compiler);
+			}
+			if (options.externalsPresets.electronRenderer) {
+				// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+				const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
+
+				new ElectronTargetPlugin("renderer").apply(compiler);
+			}
+			if (
+				!options.externalsPresets.electronMain &&
+				!options.externalsPresets.electronPreload &&
+				!options.externalsPresets.electronRenderer
+			) {
+				// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+				const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
+
+				new ElectronTargetPlugin().apply(compiler);
+			}
+		}
+		if (options.externalsPresets.nwjs) {
+			// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+			const ExternalsPlugin = require("./ExternalsPlugin");
+
+			new ExternalsPlugin("node-commonjs", "nw.gui").apply(compiler);
+		}
+
+		new ChunkPrefetchPreloadPlugin().apply(compiler);
+
+		if (typeof options.output.chunkFormat === "string") {
+			switch (options.output.chunkFormat) {
+				case "array-push": {
+					const ArrayPushCallbackChunkFormatPlugin = require("./javascript/ArrayPushCallbackChunkFormatPlugin");
+
+					new ArrayPushCallbackChunkFormatPlugin().apply(compiler);
 					break;
-				case "electron-main":
-					NodeTemplatePlugin = require("./node/NodeTemplatePlugin");
-					NodeTargetPlugin = require("./node/NodeTargetPlugin");
-					ExternalsPlugin = require("./ExternalsPlugin");
-					new NodeTemplatePlugin({
-						asyncChunkLoading: true
-					}).apply(compiler);
-					new FunctionModulePlugin().apply(compiler);
-					new NodeTargetPlugin().apply(compiler);
-					new ExternalsPlugin("commonjs", [
-						"app",
-						"auto-updater",
-						"browser-window",
-						"clipboard",
-						"content-tracing",
-						"crash-reporter",
-						"dialog",
-						"electron",
-						"global-shortcut",
-						"ipc",
-						"ipc-main",
-						"menu",
-						"menu-item",
-						"native-image",
-						"original-fs",
-						"power-monitor",
-						"power-save-blocker",
-						"protocol",
-						"screen",
-						"session",
-						"shell",
-						"tray",
-						"web-contents"
-					]).apply(compiler);
-					new LoaderTargetPlugin(options.target).apply(compiler);
+				}
+				case "commonjs": {
+					const CommonJsChunkFormatPlugin = require("./javascript/CommonJsChunkFormatPlugin");
+
+					new CommonJsChunkFormatPlugin().apply(compiler);
 					break;
-				case "electron-renderer":
-					JsonpTemplatePlugin = require("./web/JsonpTemplatePlugin");
-					NodeTargetPlugin = require("./node/NodeTargetPlugin");
-					ExternalsPlugin = require("./ExternalsPlugin");
-					new JsonpTemplatePlugin().apply(compiler);
-					new FunctionModulePlugin().apply(compiler);
-					new NodeTargetPlugin().apply(compiler);
-					new ExternalsPlugin("commonjs", [
-						"clipboard",
-						"crash-reporter",
-						"desktop-capturer",
-						"electron",
-						"ipc",
-						"ipc-renderer",
-						"native-image",
-						"original-fs",
-						"remote",
-						"screen",
-						"shell",
-						"web-frame"
-					]).apply(compiler);
-					new LoaderTargetPlugin(options.target).apply(compiler);
+				}
+				case "module": {
+					const ModuleChunkFormatPlugin = require("./esm/ModuleChunkFormatPlugin");
+
+					new ModuleChunkFormatPlugin().apply(compiler);
 					break;
+				}
 				default:
-					throw new Error("Unsupported target '" + options.target + "'.");
+					throw new Error(
+						`Unsupported chunk format '${options.output.chunkFormat}'.`
+					);
+			}
+		}
+
+		const enabledChunkLoadingTypes =
+			/** @type {NonNullable} */
+			(options.output.enabledChunkLoadingTypes);
+
+		if (enabledChunkLoadingTypes.length > 0) {
+			for (const type of enabledChunkLoadingTypes) {
+				const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");
+
+				new EnableChunkLoadingPlugin(type).apply(compiler);
+			}
+		}
+
+		const enabledWasmLoadingTypes =
+			/** @type {NonNullable} */
+			(options.output.enabledWasmLoadingTypes);
+
+		if (enabledWasmLoadingTypes.length > 0) {
+			for (const type of enabledWasmLoadingTypes) {
+				const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");
+
+				new EnableWasmLoadingPlugin(type).apply(compiler);
 			}
-		} else if (options.target !== false) {
-			options.target(compiler);
-		} else {
-			throw new Error("Unsupported target '" + options.target + "'.");
-		}
-
-		if (options.output.library || options.output.libraryTarget !== "var") {
-			const LibraryTemplatePlugin = require("./LibraryTemplatePlugin");
-			new LibraryTemplatePlugin(
-				options.output.library,
-				options.output.libraryTarget,
-				options.output.umdNamedDefine,
-				options.output.auxiliaryComment || "",
-				options.output.libraryExport
+		}
+
+		const enabledLibraryTypes =
+			/** @type {NonNullable} */
+			(options.output.enabledLibraryTypes);
+
+		if (enabledLibraryTypes.length > 0) {
+			let once = true;
+			for (const type of enabledLibraryTypes) {
+				const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
+
+				new EnableLibraryPlugin(type, {
+					// eslint-disable-next-line no-loop-func
+					additionalApply: () => {
+						if (!once) return;
+						once = false;
+						// We rely on `exportInfo` to generate the `export statement` in certain library bundles.
+						// Therefore, we ignore the disabling of `optimization.providedExport` and continue to apply `FlagDependencyExportsPlugin`.
+						if (
+							["module", "commonjs-static", "modern-module"].includes(type) &&
+							!options.optimization.providedExports
+						) {
+							new FlagDependencyExportsPlugin().apply(compiler);
+						}
+					}
+				}).apply(compiler);
+			}
+		}
+
+		if (options.output.pathinfo) {
+			const ModuleInfoHeaderPlugin = require("./ModuleInfoHeaderPlugin");
+
+			new ModuleInfoHeaderPlugin(options.output.pathinfo !== true).apply(
+				compiler
+			);
+		}
+
+		if (options.output.clean) {
+			const CleanPlugin = require("./CleanPlugin");
+
+			new CleanPlugin(
+				options.output.clean === true ? {} : options.output.clean
 			).apply(compiler);
 		}
-		if (options.externals) {
-			ExternalsPlugin = require("./ExternalsPlugin");
-			new ExternalsPlugin(
-				options.output.libraryTarget,
-				options.externals
+
+		if (options.dotenv) {
+			const DotenvPlugin = require("./DotenvPlugin");
+
+			new DotenvPlugin(
+				typeof options.dotenv === "boolean" ? {} : options.dotenv
 			).apply(compiler);
 		}
 
-		let noSources;
-		let legacy;
-		let modern;
-		let comment;
-		if (
-			options.devtool &&
-			(options.devtool.includes("sourcemap") ||
-				options.devtool.includes("source-map"))
-		) {
-			const hidden = options.devtool.includes("hidden");
-			const inline = options.devtool.includes("inline");
-			const evalWrapped = options.devtool.includes("eval");
-			const cheap = options.devtool.includes("cheap");
-			const moduleMaps = options.devtool.includes("module");
-			noSources = options.devtool.includes("nosources");
-			legacy = options.devtool.includes("@");
-			modern = options.devtool.includes("#");
-			comment =
-				legacy && modern
-					? "\n/*\n//@ source" +
-					  "MappingURL=[url]\n//# source" +
-					  "MappingURL=[url]\n*/"
-					: legacy
-						? "\n/*\n//@ source" + "MappingURL=[url]\n*/"
-						: modern
-							? "\n//# source" + "MappingURL=[url]"
-							: null;
-			const Plugin = evalWrapped
-				? EvalSourceMapDevToolPlugin
-				: SourceMapDevToolPlugin;
-			new Plugin({
-				filename: inline ? null : options.output.sourceMapFilename,
-				moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
-				fallbackModuleFilenameTemplate:
-					options.output.devtoolFallbackModuleFilenameTemplate,
-				append: hidden ? false : comment,
-				module: moduleMaps ? true : cheap ? false : true,
-				columns: cheap ? false : true,
-				lineToLine: options.output.devtoolLineToLine,
-				noSources: noSources,
-				namespace: options.output.devtoolNamespace
-			}).apply(compiler);
-		} else if (options.devtool && options.devtool.includes("eval")) {
-			legacy = options.devtool.includes("@");
-			modern = options.devtool.includes("#");
-			comment =
-				legacy && modern
-					? "\n//@ sourceURL=[url]\n//# sourceURL=[url]"
-					: legacy
-						? "\n//@ sourceURL=[url]"
-						: modern
-							? "\n//# sourceURL=[url]"
-							: null;
-			new EvalDevToolModulePlugin({
-				sourceUrlComment: comment,
-				moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
-				namespace: options.output.devtoolNamespace
-			}).apply(compiler);
+		let devtool =
+			interception === undefined ? options.devtool : interception.devtool;
+		devtool = Array.isArray(devtool)
+			? devtool
+			: typeof devtool === "string"
+				? [{ type: "all", use: devtool }]
+				: [];
+
+		for (const item of devtool) {
+			const { type, use } = item;
+
+			if (use) {
+				if (use.includes("source-map")) {
+					const hidden = use.includes("hidden");
+					const inline = use.includes("inline");
+					const evalWrapped = use.includes("eval");
+					const cheap = use.includes("cheap");
+					const moduleMaps = use.includes("module");
+					const noSources = use.includes("nosources");
+					const debugIds = use.includes("debugids");
+					const Plugin = evalWrapped
+						? require("./EvalSourceMapDevToolPlugin")
+						: require("./SourceMapDevToolPlugin");
+					const assetExt =
+						type === "javascript"
+							? /\.((c|m)?js)($|\?)/i
+							: type === "css"
+								? /\.(css)($|\?)/i
+								: /\.((c|m)?js|css)($|\?)/i;
+
+					new Plugin({
+						test: evalWrapped ? undefined : assetExt,
+						filename: inline ? null : options.output.sourceMapFilename,
+						moduleFilenameTemplate:
+							options.output.devtoolModuleFilenameTemplate,
+						fallbackModuleFilenameTemplate:
+							options.output.devtoolFallbackModuleFilenameTemplate,
+						append: hidden ? false : undefined,
+						module: moduleMaps ? true : !cheap,
+						columns: !cheap,
+						noSources,
+						namespace: options.output.devtoolNamespace,
+						debugIds
+					}).apply(compiler);
+				} else if (use.includes("eval")) {
+					const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
+
+					new EvalDevToolModulePlugin({
+						moduleFilenameTemplate:
+							options.output.devtoolModuleFilenameTemplate,
+						namespace: options.output.devtoolNamespace
+					}).apply(compiler);
+				}
+			}
 		}
 
 		new JavascriptModulesPlugin().apply(compiler);
 		new JsonModulesPlugin().apply(compiler);
-		new WebAssemblyModulesPlugin({
-			mangleImports: options.optimization.mangleWasmImports
+		new AssetModulesPlugin({
+			sideEffectFree: options.experiments.futureDefaults
 		}).apply(compiler);
 
+		if (!options.experiments.outputModule) {
+			if (options.output.module) {
+				throw new Error(
+					"'output.module: true' is only allowed when 'experiments.outputModule' is enabled"
+				);
+			}
+			if (options.output.enabledLibraryTypes.includes("module")) {
+				throw new Error(
+					"library type \"module\" is only allowed when 'experiments.outputModule' is enabled"
+				);
+			}
+			if (options.output.enabledLibraryTypes.includes("modern-module")) {
+				throw new Error(
+					"library type \"modern-module\" is only allowed when 'experiments.outputModule' is enabled"
+				);
+			}
+			if (
+				options.externalsType === "module" ||
+				options.externalsType === "module-import"
+			) {
+				throw new Error(
+					"'externalsType: \"module\"' is only allowed when 'experiments.outputModule' is enabled"
+				);
+			}
+		}
+
+		if (options.experiments.syncWebAssembly) {
+			const WebAssemblyModulesPlugin = require("./wasm-sync/WebAssemblyModulesPlugin");
+
+			new WebAssemblyModulesPlugin({
+				mangleImports: options.optimization.mangleWasmImports
+			}).apply(compiler);
+		}
+
+		if (options.experiments.asyncWebAssembly) {
+			const AsyncWebAssemblyModulesPlugin = require("./wasm-async/AsyncWebAssemblyModulesPlugin");
+
+			new AsyncWebAssemblyModulesPlugin({
+				mangleImports: options.optimization.mangleWasmImports
+			}).apply(compiler);
+		}
+
+		if (options.experiments.css) {
+			const CssModulesPlugin = require("./css/CssModulesPlugin");
+
+			new CssModulesPlugin().apply(compiler);
+		}
+
+		if (options.experiments.lazyCompilation) {
+			const LazyCompilationPlugin = require("./hmr/LazyCompilationPlugin");
+
+			const lazyOptions =
+				typeof options.experiments.lazyCompilation === "object"
+					? options.experiments.lazyCompilation
+					: {};
+			const isUniversalTarget =
+				options.output.module &&
+				compiler.platform.node === null &&
+				compiler.platform.web === null;
+
+			if (isUniversalTarget) {
+				const emitter = require.resolve("../hot/emitter-event-target.js");
+
+				const NormalModuleReplacementPlugin = require("./NormalModuleReplacementPlugin");
+
+				// Override emitter that using `EventEmitter` to `EventTarget`
+				// TODO webpack 6 - migrate to `EventTarget` by default
+				new NormalModuleReplacementPlugin(/emitter(\.js)?$/, (result) => {
+					if (
+						/webpack[/\\]hot|webpack-dev-server[/\\]client|webpack-hot-middleware[/\\]client/.test(
+							result.context
+						)
+					) {
+						result.request = emitter;
+					}
+
+					return result;
+				}).apply(compiler);
+			}
+
+			const backend = require.resolve(
+				isUniversalTarget
+					? "../hot/lazy-compilation-universal.js"
+					: `../hot/lazy-compilation-${
+							options.externalsPresets.node ? "node" : "web"
+						}.js`
+			);
+
+			new LazyCompilationPlugin({
+				backend:
+					typeof lazyOptions.backend === "function"
+						? lazyOptions.backend
+						: require("./hmr/lazyCompilationBackend")({
+								...lazyOptions.backend,
+								client:
+									(lazyOptions.backend && lazyOptions.backend.client) || backend
+							}),
+				entries: !lazyOptions || lazyOptions.entries !== false,
+				imports: !lazyOptions || lazyOptions.imports !== false,
+				test: (lazyOptions && lazyOptions.test) || undefined
+			}).apply(compiler);
+		}
+
+		if (options.experiments.buildHttp) {
+			const HttpUriPlugin = require("./schemes/HttpUriPlugin");
+
+			const httpOptions = options.experiments.buildHttp;
+			new HttpUriPlugin(httpOptions).apply(compiler);
+		}
+
+		if (
+			!(
+				/** @type {typeof JavascriptParser & { __importPhasesExtended?: true }} */
+				(JavascriptParser).__importPhasesExtended
+			) &&
+			(options.experiments.deferImport || options.experiments.sourceImport)
+		) {
+			const importPhases = require("acorn-import-phases");
+
+			JavascriptParser.extend(importPhases({ source: true, defer: true }));
+			/** @type {typeof JavascriptParser & { __importPhasesExtended?: true }} */
+			(JavascriptParser).__importPhasesExtended = true;
+		}
+
 		new EntryOptionPlugin().apply(compiler);
 		compiler.hooks.entryOption.call(options.context, options.entry);
 
+		new RuntimePlugin().apply(compiler);
+
+		new InferAsyncModulesPlugin().apply(compiler);
+
+		new DataUriPlugin().apply(compiler);
+		new FileUriPlugin().apply(compiler);
+
 		new CompatibilityPlugin().apply(compiler);
-		new HarmonyModulesPlugin(options.module).apply(compiler);
-		new AMDPlugin(options.module, options.amd || {}).apply(compiler);
-		new CommonJsPlugin(options.module).apply(compiler);
+		new HarmonyModulesPlugin({
+			deferImport: options.experiments.deferImport
+		}).apply(compiler);
+		if (options.amd !== false) {
+			const AMDPlugin = require("./dependencies/AMDPlugin");
+			const RequireJsStuffPlugin = require("./RequireJsStuffPlugin");
+
+			new AMDPlugin(options.amd || {}).apply(compiler);
+			new RequireJsStuffPlugin().apply(compiler);
+		}
+		new CommonJsPlugin().apply(compiler);
 		new LoaderPlugin().apply(compiler);
-		new NodeStuffPlugin(options.node).apply(compiler);
-		new RequireJsStuffPlugin().apply(compiler);
+		new NodeStuffPlugin({
+			global: options.node ? options.node.global : false,
+			__dirname: options.node ? options.node.__dirname : false,
+			__filename: options.node ? options.node.__filename : false
+		}).apply(compiler);
 		new APIPlugin().apply(compiler);
+		new ExportsInfoApiPlugin().apply(compiler);
+		new WebpackIsIncludedPlugin().apply(compiler);
 		new ConstPlugin().apply(compiler);
 		new UseStrictPlugin().apply(compiler);
 		new RequireIncludePlugin().apply(compiler);
 		new RequireEnsurePlugin().apply(compiler);
-		new RequireContextPlugin(
-			options.resolve.modules,
-			options.resolve.extensions,
-			options.resolve.mainFiles
+		new RequireContextPlugin().apply(compiler);
+		new ImportPlugin().apply(compiler);
+		new ImportMetaContextPlugin().apply(compiler);
+		new SystemPlugin().apply(compiler);
+		new ImportMetaPlugin().apply(compiler);
+		new URLPlugin().apply(compiler);
+		new WorkerPlugin(
+			options.output.workerChunkLoading,
+			options.output.workerWasmLoading,
+			options.output.module,
+			options.output.workerPublicPath
 		).apply(compiler);
-		new ImportPlugin(options.module).apply(compiler);
-		new SystemPlugin(options.module).apply(compiler);
+
+		new DefaultStatsFactoryPlugin().apply(compiler);
+		new DefaultStatsPresetPlugin().apply(compiler);
+		new DefaultStatsPrinterPlugin().apply(compiler);
+
+		new JavascriptMetaInfoPlugin().apply(compiler);
 
 		if (typeof options.mode !== "string") {
+			const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin");
+
 			new WarnNoModeSetPlugin().apply(compiler);
 		}
 
+		const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin");
+
 		new EnsureChunkConditionsPlugin().apply(compiler);
 		if (options.optimization.removeAvailableModules) {
+			const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");
+
 			new RemoveParentModulesPlugin().apply(compiler);
 		}
 		if (options.optimization.removeEmptyChunks) {
+			const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");
+
 			new RemoveEmptyChunksPlugin().apply(compiler);
 		}
 		if (options.optimization.mergeDuplicateChunks) {
+			const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");
+
 			new MergeDuplicateChunksPlugin().apply(compiler);
 		}
 		if (options.optimization.flagIncludedChunks) {
+			const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin");
+
 			new FlagIncludedChunksPlugin().apply(compiler);
 		}
-		if (options.optimization.occurrenceOrder) {
-			new OccurrenceOrderPlugin(true).apply(compiler);
-		}
 		if (options.optimization.sideEffects) {
-			new SideEffectsFlagPlugin().apply(compiler);
+			const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin");
+
+			new SideEffectsFlagPlugin(
+				options.optimization.sideEffects === true
+			).apply(compiler);
 		}
 		if (options.optimization.providedExports) {
 			new FlagDependencyExportsPlugin().apply(compiler);
 		}
 		if (options.optimization.usedExports) {
-			new FlagDependencyUsagePlugin().apply(compiler);
+			const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");
+
+			new FlagDependencyUsagePlugin(
+				options.optimization.usedExports === "global"
+			).apply(compiler);
+		}
+		if (options.optimization.innerGraph) {
+			const InnerGraphPlugin = require("./optimize/InnerGraphPlugin");
+
+			new InnerGraphPlugin().apply(compiler);
+		}
+		if (options.optimization.mangleExports) {
+			const MangleExportsPlugin = require("./optimize/MangleExportsPlugin");
+
+			new MangleExportsPlugin(
+				options.optimization.mangleExports !== "size"
+			).apply(compiler);
 		}
 		if (options.optimization.concatenateModules) {
+			const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");
+
 			new ModuleConcatenationPlugin().apply(compiler);
 		}
 		if (options.optimization.splitChunks) {
+			const SplitChunksPlugin = require("./optimize/SplitChunksPlugin");
+
 			new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler);
 		}
 		if (options.optimization.runtimeChunk) {
+			const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
+
 			new RuntimeChunkPlugin(options.optimization.runtimeChunk).apply(compiler);
 		}
-		if (options.optimization.noEmitOnErrors) {
+		if (!options.optimization.emitOnErrors) {
+			const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
+
 			new NoEmitOnErrorsPlugin().apply(compiler);
 		}
+		if (options.optimization.realContentHash) {
+			const RealContentHashPlugin = require("./optimize/RealContentHashPlugin");
+
+			new RealContentHashPlugin({
+				hashFunction:
+					/** @type {NonNullable} */
+					(options.output.hashFunction),
+				hashDigest:
+					/** @type {NonNullable} */
+					(options.output.hashDigest)
+			}).apply(compiler);
+		}
 		if (options.optimization.checkWasmTypes) {
+			const WasmFinalizeExportsPlugin = require("./wasm-sync/WasmFinalizeExportsPlugin");
+
 			new WasmFinalizeExportsPlugin().apply(compiler);
 		}
-		if (options.optimization.namedModules) {
-			new NamedModulesPlugin().apply(compiler);
+		const moduleIds = options.optimization.moduleIds;
+		if (moduleIds) {
+			switch (moduleIds) {
+				case "natural": {
+					const NaturalModuleIdsPlugin = require("./ids/NaturalModuleIdsPlugin");
+
+					new NaturalModuleIdsPlugin().apply(compiler);
+					break;
+				}
+				case "named": {
+					const NamedModuleIdsPlugin = require("./ids/NamedModuleIdsPlugin");
+
+					new NamedModuleIdsPlugin().apply(compiler);
+					break;
+				}
+				case "hashed": {
+					const WarnDeprecatedOptionPlugin = require("./WarnDeprecatedOptionPlugin");
+					const HashedModuleIdsPlugin = require("./ids/HashedModuleIdsPlugin");
+
+					new WarnDeprecatedOptionPlugin(
+						"optimization.moduleIds",
+						"hashed",
+						"deterministic"
+					).apply(compiler);
+					new HashedModuleIdsPlugin({
+						hashFunction: options.output.hashFunction
+					}).apply(compiler);
+					break;
+				}
+				case "deterministic": {
+					const DeterministicModuleIdsPlugin = require("./ids/DeterministicModuleIdsPlugin");
+
+					new DeterministicModuleIdsPlugin().apply(compiler);
+					break;
+				}
+				case "size": {
+					const OccurrenceModuleIdsPlugin = require("./ids/OccurrenceModuleIdsPlugin");
+
+					new OccurrenceModuleIdsPlugin({
+						prioritiseInitial: true
+					}).apply(compiler);
+					break;
+				}
+				default:
+					throw new Error(
+						`webpack bug: moduleIds: ${moduleIds} is not implemented`
+					);
+			}
 		}
-		if (options.optimization.namedChunks) {
-			new NamedChunksPlugin().apply(compiler);
+		const chunkIds = options.optimization.chunkIds;
+		if (chunkIds) {
+			switch (chunkIds) {
+				case "natural": {
+					const NaturalChunkIdsPlugin = require("./ids/NaturalChunkIdsPlugin");
+
+					new NaturalChunkIdsPlugin().apply(compiler);
+					break;
+				}
+				case "named": {
+					const NamedChunkIdsPlugin = require("./ids/NamedChunkIdsPlugin");
+
+					new NamedChunkIdsPlugin().apply(compiler);
+					break;
+				}
+				case "deterministic": {
+					const DeterministicChunkIdsPlugin = require("./ids/DeterministicChunkIdsPlugin");
+
+					new DeterministicChunkIdsPlugin().apply(compiler);
+					break;
+				}
+				case "size": {
+					// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+					const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
+
+					new OccurrenceChunkIdsPlugin({
+						prioritiseInitial: true
+					}).apply(compiler);
+					break;
+				}
+				case "total-size": {
+					// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+					const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
+
+					new OccurrenceChunkIdsPlugin({
+						prioritiseInitial: false
+					}).apply(compiler);
+					break;
+				}
+				default:
+					throw new Error(
+						`webpack bug: chunkIds: ${chunkIds} is not implemented`
+					);
+			}
 		}
 		if (options.optimization.nodeEnv) {
+			const DefinePlugin = require("./DefinePlugin");
+
+			const defValue = JSON.stringify(options.optimization.nodeEnv);
+
 			new DefinePlugin({
-				"process.env.NODE_ENV": JSON.stringify(options.optimization.nodeEnv)
+				"process.env.NODE_ENV": defValue,
+				"import.meta.env.NODE_ENV": defValue
 			}).apply(compiler);
 		}
 		if (options.optimization.minimize) {
 			for (const minimizer of options.optimization.minimizer) {
-				minimizer.apply(compiler);
+				if (typeof minimizer === "function") {
+					/** @type {WebpackPluginFunction} */
+					(minimizer).call(compiler, compiler);
+				} else if (minimizer !== "..." && minimizer) {
+					minimizer.apply(compiler);
+				}
 			}
 		}
 
 		if (options.performance) {
+			const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin");
+
 			new SizeLimitsPlugin(options.performance).apply(compiler);
 		}
 
@@ -380,11 +778,127 @@ class WebpackOptionsApply extends OptionsApply {
 
 		new WarnCaseSensitiveModulesPlugin().apply(compiler);
 
-		if (options.cache) {
-			const CachePlugin = require("./CachePlugin");
-			new CachePlugin(
-				typeof options.cache === "object" ? options.cache : null
-			).apply(compiler);
+		const AddManagedPathsPlugin = require("./cache/AddManagedPathsPlugin");
+
+		new AddManagedPathsPlugin(
+			/** @type {NonNullable} */
+			(options.snapshot.managedPaths),
+			/** @type {NonNullable} */
+			(options.snapshot.immutablePaths),
+			/** @type {NonNullable} */
+			(options.snapshot.unmanagedPaths)
+		).apply(compiler);
+
+		if (options.cache && typeof options.cache === "object") {
+			const cacheOptions = options.cache;
+			switch (cacheOptions.type) {
+				case "memory": {
+					if (Number.isFinite(cacheOptions.maxGenerations)) {
+						// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+						const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
+
+						new MemoryWithGcCachePlugin({
+							maxGenerations:
+								/** @type {number} */
+								(cacheOptions.maxGenerations)
+						}).apply(compiler);
+					} else {
+						// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+						const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
+
+						new MemoryCachePlugin().apply(compiler);
+					}
+					if (cacheOptions.cacheUnaffected) {
+						if (!options.experiments.cacheUnaffected) {
+							throw new Error(
+								"'cache.cacheUnaffected: true' is only allowed when 'experiments.cacheUnaffected' is enabled"
+							);
+						}
+						compiler.moduleMemCaches = new Map();
+					}
+					break;
+				}
+				case "filesystem": {
+					const AddBuildDependenciesPlugin = require("./cache/AddBuildDependenciesPlugin");
+
+					for (const key in cacheOptions.buildDependencies) {
+						const list = cacheOptions.buildDependencies[key];
+						new AddBuildDependenciesPlugin(list).apply(compiler);
+					}
+					if (!Number.isFinite(cacheOptions.maxMemoryGenerations)) {
+						// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+						const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
+
+						new MemoryCachePlugin().apply(compiler);
+					} else if (cacheOptions.maxMemoryGenerations !== 0) {
+						// @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
+						const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
+
+						new MemoryWithGcCachePlugin({
+							maxGenerations:
+								/** @type {number} */
+								(cacheOptions.maxMemoryGenerations)
+						}).apply(compiler);
+					}
+					if (cacheOptions.memoryCacheUnaffected) {
+						if (!options.experiments.cacheUnaffected) {
+							throw new Error(
+								"'cache.memoryCacheUnaffected: true' is only allowed when 'experiments.cacheUnaffected' is enabled"
+							);
+						}
+						compiler.moduleMemCaches = new Map();
+					}
+					switch (cacheOptions.store) {
+						case "pack": {
+							const IdleFileCachePlugin = require("./cache/IdleFileCachePlugin");
+							const PackFileCacheStrategy = require("./cache/PackFileCacheStrategy");
+
+							new IdleFileCachePlugin(
+								new PackFileCacheStrategy({
+									compiler,
+									fs:
+										/** @type {IntermediateFileSystem} */
+										(compiler.intermediateFileSystem),
+									context: options.context,
+									cacheLocation:
+										/** @type {string} */
+										(cacheOptions.cacheLocation),
+									version: /** @type {string} */ (cacheOptions.version),
+									logger: compiler.getInfrastructureLogger(
+										"webpack.cache.PackFileCacheStrategy"
+									),
+									snapshot: options.snapshot,
+									maxAge: /** @type {number} */ (cacheOptions.maxAge),
+									profile: cacheOptions.profile,
+									allowCollectingMemory: cacheOptions.allowCollectingMemory,
+									compression: cacheOptions.compression,
+									readonly: cacheOptions.readonly
+								}),
+								/** @type {number} */
+								(cacheOptions.idleTimeout),
+								/** @type {number} */
+								(cacheOptions.idleTimeoutForInitialStore),
+								/** @type {number} */
+								(cacheOptions.idleTimeoutAfterLargeChanges)
+							).apply(compiler);
+							break;
+						}
+						default:
+							throw new Error("Unhandled value for cache.store");
+					}
+					break;
+				}
+				default:
+					// @ts-expect-error Property 'type' does not exist on type 'never'. ts(2339)
+					throw new Error(`Unknown cache type ${cacheOptions.type}`);
+			}
+		}
+		new ResolverCachePlugin().apply(compiler);
+
+		if (options.ignoreWarnings && options.ignoreWarnings.length > 0) {
+			const IgnoreWarningsPlugin = require("./IgnoreWarningsPlugin");
+
+			new IgnoreWarningsPlugin(options.ignoreWarnings).apply(compiler);
 		}
 
 		compiler.hooks.afterPlugins.call(compiler);
@@ -393,37 +907,31 @@ class WebpackOptionsApply extends OptionsApply {
 		}
 		compiler.resolverFactory.hooks.resolveOptions
 			.for("normal")
-			.tap("WebpackOptionsApply", resolveOptions => {
-				return Object.assign(
-					{
-						fileSystem: compiler.inputFileSystem
-					},
-					options.resolve,
-					resolveOptions
-				);
+			.tap(CLASS_NAME, (resolveOptions) => {
+				resolveOptions = cleverMerge(options.resolve, resolveOptions);
+				resolveOptions.fileSystem =
+					/** @type {InputFileSystem} */
+					(compiler.inputFileSystem);
+				return resolveOptions;
 			});
 		compiler.resolverFactory.hooks.resolveOptions
 			.for("context")
-			.tap("WebpackOptionsApply", resolveOptions => {
-				return Object.assign(
-					{
-						fileSystem: compiler.inputFileSystem,
-						resolveToContext: true
-					},
-					options.resolve,
-					resolveOptions
-				);
+			.tap(CLASS_NAME, (resolveOptions) => {
+				resolveOptions = cleverMerge(options.resolve, resolveOptions);
+				resolveOptions.fileSystem =
+					/** @type {InputFileSystem} */
+					(compiler.inputFileSystem);
+				resolveOptions.resolveToContext = true;
+				return resolveOptions;
 			});
 		compiler.resolverFactory.hooks.resolveOptions
 			.for("loader")
-			.tap("WebpackOptionsApply", resolveOptions => {
-				return Object.assign(
-					{
-						fileSystem: compiler.inputFileSystem
-					},
-					options.resolveLoader,
-					resolveOptions
-				);
+			.tap(CLASS_NAME, (resolveOptions) => {
+				resolveOptions = cleverMerge(options.resolveLoader, resolveOptions);
+				resolveOptions.fileSystem =
+					/** @type {InputFileSystem} */
+					(compiler.inputFileSystem);
+				return resolveOptions;
 			});
 		compiler.hooks.afterResolvers.call(compiler);
 		return options;
diff --git a/lib/WebpackOptionsDefaulter.js b/lib/WebpackOptionsDefaulter.js
index e15d58d7905..12fbe698d93 100644
--- a/lib/WebpackOptionsDefaulter.js
+++ b/lib/WebpackOptionsDefaulter.js
@@ -2,348 +2,24 @@
 	MIT License http://www.opensource.org/licenses/mit-license.php
 	Author Tobias Koppers @sokra
 */
-"use strict";
-
-const path = require("path");
-
-const OptionsDefaulter = require("./OptionsDefaulter");
-const Template = require("./Template");
-
-const isProductionLikeMode = options => {
-	return options.mode === "production" || !options.mode;
-};
-
-const isWebLikeTarget = options => {
-	return options.target === "web" || options.target === "webworker";
-};
-
-class WebpackOptionsDefaulter extends OptionsDefaulter {
-	constructor() {
-		super();
-
-		this.set("entry", "./src");
-
-		this.set(
-			"devtool",
-			"make",
-			options => (options.mode === "development" ? "eval" : false)
-		);
-		this.set("cache", "make", options => options.mode === "development");
 
-		this.set("context", process.cwd());
-		this.set("target", "web");
-
-		this.set("module", "call", value => Object.assign({}, value));
-		this.set("module.unknownContextRequest", ".");
-		this.set("module.unknownContextRegExp", false);
-		this.set("module.unknownContextRecursive", true);
-		this.set("module.unknownContextCritical", true);
-		this.set("module.exprContextRequest", ".");
-		this.set("module.exprContextRegExp", false);
-		this.set("module.exprContextRecursive", true);
-		this.set("module.exprContextCritical", true);
-		this.set("module.wrappedContextRegExp", /.*/);
-		this.set("module.wrappedContextRecursive", true);
-		this.set("module.wrappedContextCritical", false);
-		this.set("module.strictExportPresence", false);
-		this.set("module.strictThisContextOnImports", false);
-		this.set("module.unsafeCache", "make", options => !!options.cache);
-		this.set("module.rules", []);
-		this.set("module.defaultRules", "make", options => [
-			{
-				type: "javascript/auto",
-				resolve: {}
-			},
-			{
-				test: /\.mjs$/i,
-				type: "javascript/esm",
-				resolve: {
-					mainFields:
-						options.target === "web" ||
-						options.target === "webworker" ||
-						options.target === "electron-renderer"
-							? ["browser", "main"]
-							: ["main"]
-				}
-			},
-			{
-				test: /\.json$/i,
-				type: "json"
-			},
-			{
-				test: /\.wasm$/i,
-				type: "webassembly/experimental"
-			}
-		]);
-
-		this.set("output", "call", (value, options) => {
-			if (typeof value === "string") {
-				return {
-					filename: value
-				};
-			} else if (typeof value !== "object") {
-				return {};
-			} else {
-				return Object.assign({}, value);
-			}
-		});
-
-		this.set("output.filename", "[name].js");
-		this.set("output.chunkFilename", "make", options => {
-			const filename = options.output.filename;
-			if (typeof filename !== "function") {
-				const hasName = filename.includes("[name]");
-				const hasId = filename.includes("[id]");
-				const hasChunkHash = filename.includes("[chunkhash]");
-				// Anything changing depending on chunk is fine
-				if (hasChunkHash || hasName || hasId) return filename;
-				// Elsewise prefix "[id]." in front of the basename to make it changing
-				return filename.replace(/(^|\/)([^/]*(?:\?|$))/, "$1[id].$2");
-			}
-			return "[id].js";
-		});
-		this.set("output.webassemblyModuleFilename", "[modulehash].module.wasm");
-		this.set("output.library", "");
-		this.set("output.hotUpdateFunction", "make", options => {
-			return Template.toIdentifier(
-				"webpackHotUpdate" + Template.toIdentifier(options.output.library)
-			);
-		});
-		this.set("output.jsonpFunction", "make", options => {
-			return Template.toIdentifier(
-				"webpackJsonp" + Template.toIdentifier(options.output.library)
-			);
-		});
-		this.set("output.chunkCallbackName", "make", options => {
-			return Template.toIdentifier(
-				"webpackChunk" + Template.toIdentifier(options.output.library)
-			);
-		});
-		this.set("output.globalObject", "make", options => {
-			switch (options.target) {
-				case "web":
-				case "electron-renderer":
-				case "node-webkit":
-					return "window";
-				case "webworker":
-					return "self";
-				case "node":
-				case "async-node":
-				case "electron-main":
-					return "global";
-				default:
-					return "self";
-			}
-		});
-		this.set("output.devtoolNamespace", "make", options => {
-			if (Array.isArray(options.output.library)) {
-				return options.output.library.join(".");
-			} else if (typeof options.output.library === "object") {
-				return options.output.library.root || "";
-			}
-			return options.output.library || "";
-		});
-		this.set("output.libraryTarget", "var");
-		this.set("output.path", path.join(process.cwd(), "dist"));
-		this.set(
-			"output.pathinfo",
-			"make",
-			options => options.mode === "development"
-		);
-		this.set("output.sourceMapFilename", "[file].map[query]");
-		this.set("output.hotUpdateChunkFilename", "[id].[hash].hot-update.js");
-		this.set("output.hotUpdateMainFilename", "[hash].hot-update.json");
-		this.set("output.crossOriginLoading", false);
-		this.set("output.jsonpScriptType", false);
-		this.set("output.chunkLoadTimeout", 120000);
-		this.set("output.hashFunction", "md4");
-		this.set("output.hashDigest", "hex");
-		this.set("output.hashDigestLength", 20);
-		this.set("output.devtoolLineToLine", false);
-		this.set("output.strictModuleExceptionHandling", false);
-
-		this.set("node", "call", value => {
-			if (typeof value === "boolean") {
-				return value;
-			} else {
-				return Object.assign({}, value);
-			}
-		});
-		this.set("node.console", false);
-		this.set("node.process", true);
-		this.set("node.global", true);
-		this.set("node.Buffer", true);
-		this.set("node.setImmediate", true);
-		this.set("node.__filename", "mock");
-		this.set("node.__dirname", "mock");
-
-		this.set("performance", "call", (value, options) => {
-			if (value === false) return false;
-			if (
-				value === undefined &&
-				(!isProductionLikeMode(options) || !isWebLikeTarget(options))
-			)
-				return false;
-			return Object.assign({}, value);
-		});
-		this.set("performance.maxAssetSize", 250000);
-		this.set("performance.maxEntrypointSize", 250000);
-		this.set(
-			"performance.hints",
-			"make",
-			options => (isProductionLikeMode(options) ? "warning" : false)
-		);
-
-		this.set("optimization", "call", value => Object.assign({}, value));
-		this.set("optimization.removeAvailableModules", true);
-		this.set("optimization.removeEmptyChunks", true);
-		this.set("optimization.mergeDuplicateChunks", true);
-		this.set("optimization.flagIncludedChunks", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.occurrenceOrder", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.sideEffects", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.providedExports", true);
-		this.set("optimization.usedExports", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.concatenateModules", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.splitChunks", {});
-		this.set("optimization.splitChunks.chunks", "async");
-		this.set("optimization.splitChunks.minSize", "make", options => {
-			return isProductionLikeMode(options) ? 30000 : 10000;
-		});
-		this.set("optimization.splitChunks.minChunks", 1);
-		this.set("optimization.splitChunks.maxAsyncRequests", "make", options => {
-			return isProductionLikeMode(options) ? 5 : Infinity;
-		});
-		this.set("optimization.splitChunks.automaticNameDelimiter", "~");
-		this.set("optimization.splitChunks.maxInitialRequests", "make", options => {
-			return isProductionLikeMode(options) ? 3 : Infinity;
-		});
-		this.set("optimization.splitChunks.name", true);
-		this.set("optimization.splitChunks.cacheGroups", {});
-		this.set("optimization.splitChunks.cacheGroups.default", {
-			reuseExistingChunk: true,
-			minChunks: 2,
-			priority: -20
-		});
-		this.set("optimization.splitChunks.cacheGroups.vendors", {
-			test: /[\\/]node_modules[\\/]/,
-			priority: -10
-		});
-		this.set("optimization.runtimeChunk", "call", value => {
-			if (value === "single") {
-				return {
-					name: "runtime"
-				};
-			}
-			if (value === true || value === "multiple") {
-				return {
-					name: entrypoint => `runtime~${entrypoint.name}`
-				};
-			}
-			return value;
-		});
-		this.set("optimization.noEmitOnErrors", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.checkWasmTypes", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.mangleWasmImports", false);
-		this.set(
-			"optimization.namedModules",
-			"make",
-			options => options.mode === "development"
-		);
-		this.set(
-			"optimization.namedChunks",
-			"make",
-			options => options.mode === "development"
-		);
-		this.set(
-			"optimization.portableRecords",
-			"make",
-			options =>
-				!!(
-					options.recordsInputPath ||
-					options.recordsOutputPath ||
-					options.recordsPath
-				)
-		);
-		this.set("optimization.minimize", "make", options =>
-			isProductionLikeMode(options)
-		);
-		this.set("optimization.minimizer", "make", options => [
-			{
-				apply: compiler => {
-					// Lazy load the uglifyjs plugin
-					const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
-					const SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin");
-					new UglifyJsPlugin({
-						cache: true,
-						parallel: true,
-						sourceMap:
-							(options.devtool && /source-?map/.test(options.devtool)) ||
-							(options.plugins &&
-								options.plugins.some(p => p instanceof SourceMapDevToolPlugin))
-					}).apply(compiler);
-				}
-			}
-		]);
-		this.set("optimization.nodeEnv", "make", options => {
-			// TODO: In webpack 5, it should return `false` when mode is `none`
-			return options.mode || "production";
-		});
-
-		this.set("resolve", "call", value => Object.assign({}, value));
-		this.set("resolve.unsafeCache", true);
-		this.set("resolve.modules", ["node_modules"]);
-		this.set("resolve.extensions", [".wasm", ".mjs", ".js", ".json"]);
-		this.set("resolve.mainFiles", ["index"]);
-		this.set("resolve.aliasFields", "make", options => {
-			if (options.target === "web" || options.target === "webworker") {
-				return ["browser"];
-			} else {
-				return [];
-			}
-		});
-		this.set("resolve.mainFields", "make", options => {
-			if (
-				options.target === "web" ||
-				options.target === "webworker" ||
-				options.target === "electron-renderer"
-			) {
-				return ["browser", "module", "main"];
-			} else {
-				return ["module", "main"];
-			}
-		});
-		this.set("resolve.cacheWithContext", "make", options => {
-			return (
-				Array.isArray(options.resolve.plugins) &&
-				options.resolve.plugins.length > 0
-			);
-		});
+"use strict";
 
-		this.set("resolveLoader", "call", value => Object.assign({}, value));
-		this.set("resolveLoader.unsafeCache", true);
-		this.set("resolveLoader.mainFields", ["loader", "main"]);
-		this.set("resolveLoader.extensions", [".js", ".json"]);
-		this.set("resolveLoader.mainFiles", ["index"]);
-		this.set("resolveLoader.cacheWithContext", "make", options => {
-			return (
-				Array.isArray(options.resolveLoader.plugins) &&
-				options.resolveLoader.plugins.length > 0
-			);
-		});
+const { applyWebpackOptionsDefaults } = require("./config/defaults");
+const { getNormalizedWebpackOptions } = require("./config/normalization");
+
+/** @typedef {import("./config/normalization").WebpackOptions} WebpackOptions */
+/** @typedef {import("./config/normalization").WebpackOptionsNormalized} WebpackOptionsNormalized */
+
+class WebpackOptionsDefaulter {
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @returns {WebpackOptionsNormalized} normalized webpack options
+	 */
+	process(options) {
+		const normalizedOptions = getNormalizedWebpackOptions(options);
+		applyWebpackOptionsDefaults(normalizedOptions);
+		return normalizedOptions;
 	}
 }
 
diff --git a/lib/WebpackOptionsValidationError.js b/lib/WebpackOptionsValidationError.js
deleted file mode 100644
index 3fdbd0df6ba..00000000000
--- a/lib/WebpackOptionsValidationError.js
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Gajus Kuizinas @gajus
-*/
-"use strict";
-
-const WebpackError = require("./WebpackError");
-const webpackOptionsSchema = require("../schemas/WebpackOptions.json");
-
-const getSchemaPart = (path, parents, additionalPath) => {
-	parents = parents || 0;
-	path = path.split("/");
-	path = path.slice(0, path.length - parents);
-	if (additionalPath) {
-		additionalPath = additionalPath.split("/");
-		path = path.concat(additionalPath);
-	}
-	let schemaPart = webpackOptionsSchema;
-	for (let i = 1; i < path.length; i++) {
-		const inner = schemaPart[path[i]];
-		if (inner) schemaPart = inner;
-	}
-	return schemaPart;
-};
-
-const getSchemaPartText = (schemaPart, additionalPath) => {
-	if (additionalPath) {
-		for (let i = 0; i < additionalPath.length; i++) {
-			const inner = schemaPart[additionalPath[i]];
-			if (inner) schemaPart = inner;
-		}
-	}
-	while (schemaPart.$ref) {
-		schemaPart = getSchemaPart(schemaPart.$ref);
-	}
-	let schemaText = WebpackOptionsValidationError.formatSchema(schemaPart);
-	if (schemaPart.description) {
-		schemaText += `\n-> ${schemaPart.description}`;
-	}
-	return schemaText;
-};
-
-const getSchemaPartDescription = schemaPart => {
-	while (schemaPart.$ref) {
-		schemaPart = getSchemaPart(schemaPart.$ref);
-	}
-	if (schemaPart.description) {
-		return `\n-> ${schemaPart.description}`;
-	}
-	return "";
-};
-
-const filterChildren = children => {
-	return children.filter(
-		err =>
-			err.keyword !== "anyOf" &&
-			err.keyword !== "allOf" &&
-			err.keyword !== "oneOf"
-	);
-};
-
-const indent = (str, prefix, firstLine) => {
-	if (firstLine) {
-		return prefix + str.replace(/\n(?!$)/g, "\n" + prefix);
-	} else {
-		return str.replace(/\n(?!$)/g, `\n${prefix}`);
-	}
-};
-
-class WebpackOptionsValidationError extends WebpackError {
-	constructor(validationErrors) {
-		super(
-			"Invalid configuration object. " +
-				"Webpack has been initialised using a configuration object that does not match the API schema.\n" +
-				validationErrors
-					.map(
-						err =>
-							" - " +
-							indent(
-								WebpackOptionsValidationError.formatValidationError(err),
-								"   ",
-								false
-							)
-					)
-					.join("\n")
-		);
-
-		this.name = "WebpackOptionsValidationError";
-		this.validationErrors = validationErrors;
-
-		Error.captureStackTrace(this, this.constructor);
-	}
-
-	static formatSchema(schema, prevSchemas) {
-		prevSchemas = prevSchemas || [];
-
-		const formatInnerSchema = (innerSchema, addSelf) => {
-			if (!addSelf) {
-				return WebpackOptionsValidationError.formatSchema(
-					innerSchema,
-					prevSchemas
-				);
-			}
-			if (prevSchemas.includes(innerSchema)) {
-				return "(recursive)";
-			}
-			return WebpackOptionsValidationError.formatSchema(
-				innerSchema,
-				prevSchemas.concat(schema)
-			);
-		};
-
-		if (schema.type === "string") {
-			if (schema.minLength === 1) {
-				return "non-empty string";
-			}
-			if (schema.minLength > 1) {
-				return `string (min length ${schema.minLength})`;
-			}
-			return "string";
-		}
-		if (schema.type === "boolean") {
-			return "boolean";
-		}
-		if (schema.type === "number") {
-			return "number";
-		}
-		if (schema.type === "object") {
-			if (schema.properties) {
-				const required = schema.required || [];
-				return `object { ${Object.keys(schema.properties)
-					.map(property => {
-						if (!required.includes(property)) return property + "?";
-						return property;
-					})
-					.concat(schema.additionalProperties ? ["…"] : [])
-					.join(", ")} }`;
-			}
-			if (schema.additionalProperties) {
-				return `object { : ${formatInnerSchema(
-					schema.additionalProperties
-				)} }`;
-			}
-			return "object";
-		}
-		if (schema.type === "array") {
-			return `[${formatInnerSchema(schema.items)}]`;
-		}
-
-		switch (schema.instanceof) {
-			case "Function":
-				return "function";
-			case "RegExp":
-				return "RegExp";
-		}
-
-		if (schema.$ref) {
-			return formatInnerSchema(getSchemaPart(schema.$ref), true);
-		}
-		if (schema.allOf) {
-			return schema.allOf.map(formatInnerSchema).join(" & ");
-		}
-		if (schema.oneOf) {
-			return schema.oneOf.map(formatInnerSchema).join(" | ");
-		}
-		if (schema.anyOf) {
-			return schema.anyOf.map(formatInnerSchema).join(" | ");
-		}
-		if (schema.enum) {
-			return schema.enum.map(item => JSON.stringify(item)).join(" | ");
-		}
-		return JSON.stringify(schema, null, 2);
-	}
-
-	static formatValidationError(err) {
-		const dataPath = `configuration${err.dataPath}`;
-		if (err.keyword === "additionalProperties") {
-			const baseMessage = `${dataPath} has an unknown property '${
-				err.params.additionalProperty
-			}'. These properties are valid:\n${getSchemaPartText(err.parentSchema)}`;
-			if (!err.dataPath) {
-				switch (err.params.additionalProperty) {
-					case "debug":
-						return (
-							`${baseMessage}\n` +
-							"The 'debug' property was removed in webpack 2.0.0.\n" +
-							"Loaders should be updated to allow passing this option via loader options in module.rules.\n" +
-							"Until loaders are updated one can use the LoaderOptionsPlugin to switch loaders into debug mode:\n" +
-							"plugins: [\n" +
-							"  new webpack.LoaderOptionsPlugin({\n" +
-							"    debug: true\n" +
-							"  })\n" +
-							"]"
-						);
-				}
-				return (
-					`${baseMessage}\n` +
-					"For typos: please correct them.\n" +
-					"For loader options: webpack >= v2.0.0 no longer allows custom properties in configuration.\n" +
-					"  Loaders should be updated to allow passing options via loader options in module.rules.\n" +
-					"  Until loaders are updated one can use the LoaderOptionsPlugin to pass these options to the loader:\n" +
-					"  plugins: [\n" +
-					"    new webpack.LoaderOptionsPlugin({\n" +
-					"      // test: /\\.xxx$/, // may apply this only for some modules\n" +
-					"      options: {\n" +
-					`        ${err.params.additionalProperty}: …\n` +
-					"      }\n" +
-					"    })\n" +
-					"  ]"
-				);
-			}
-			return baseMessage;
-		} else if (err.keyword === "oneOf" || err.keyword === "anyOf") {
-			if (err.children && err.children.length > 0) {
-				if (err.schema.length === 1) {
-					const lastChild = err.children[err.children.length - 1];
-					const remainingChildren = err.children.slice(
-						0,
-						err.children.length - 1
-					);
-					return WebpackOptionsValidationError.formatValidationError(
-						Object.assign({}, lastChild, {
-							children: remainingChildren,
-							parentSchema: Object.assign(
-								{},
-								err.parentSchema,
-								lastChild.parentSchema
-							)
-						})
-					);
-				}
-				return (
-					`${dataPath} should be one of these:\n${getSchemaPartText(
-						err.parentSchema
-					)}\n` +
-					`Details:\n${filterChildren(err.children)
-						.map(
-							err =>
-								" * " +
-								indent(
-									WebpackOptionsValidationError.formatValidationError(err),
-									"   ",
-									false
-								)
-						)
-						.join("\n")}`
-				);
-			}
-			return `${dataPath} should be one of these:\n${getSchemaPartText(
-				err.parentSchema
-			)}`;
-		} else if (err.keyword === "enum") {
-			if (
-				err.parentSchema &&
-				err.parentSchema.enum &&
-				err.parentSchema.enum.length === 1
-			) {
-				return `${dataPath} should be ${getSchemaPartText(err.parentSchema)}`;
-			}
-			return `${dataPath} should be one of these:\n${getSchemaPartText(
-				err.parentSchema
-			)}`;
-		} else if (err.keyword === "allOf") {
-			return `${dataPath} should be:\n${getSchemaPartText(err.parentSchema)}`;
-		} else if (err.keyword === "type") {
-			switch (err.params.type) {
-				case "object":
-					return `${dataPath} should be an object.${getSchemaPartDescription(
-						err.parentSchema
-					)}`;
-				case "string":
-					return `${dataPath} should be a string.${getSchemaPartDescription(
-						err.parentSchema
-					)}`;
-				case "boolean":
-					return `${dataPath} should be a boolean.${getSchemaPartDescription(
-						err.parentSchema
-					)}`;
-				case "number":
-					return `${dataPath} should be a number.${getSchemaPartDescription(
-						err.parentSchema
-					)}`;
-				case "array":
-					return `${dataPath} should be an array:\n${getSchemaPartText(
-						err.parentSchema
-					)}`;
-			}
-			return `${dataPath} should be ${err.params.type}:\n${getSchemaPartText(
-				err.parentSchema
-			)}`;
-		} else if (err.keyword === "instanceof") {
-			return `${dataPath} should be an instance of ${getSchemaPartText(
-				err.parentSchema
-			)}`;
-		} else if (err.keyword === "required") {
-			const missingProperty = err.params.missingProperty.replace(/^\./, "");
-			return `${dataPath} misses the property '${missingProperty}'.\n${getSchemaPartText(
-				err.parentSchema,
-				["properties", missingProperty]
-			)}`;
-		} else if (err.keyword === "minimum") {
-			return `${dataPath} ${err.message}.${getSchemaPartDescription(
-				err.parentSchema
-			)}`;
-		} else if (err.keyword === "uniqueItems") {
-			return `${dataPath} should not contain the item '${
-				err.data[err.params.i]
-			}' twice.${getSchemaPartDescription(err.parentSchema)}`;
-		} else if (
-			err.keyword === "minLength" ||
-			err.keyword === "minItems" ||
-			err.keyword === "minProperties"
-		) {
-			if (err.params.limit === 1) {
-				return `${dataPath} should not be empty.${getSchemaPartDescription(
-					err.parentSchema
-				)}`;
-			} else {
-				return `${dataPath} ${err.message}${getSchemaPartDescription(
-					err.parentSchema
-				)}`;
-			}
-		} else if (err.keyword === "absolutePath") {
-			const baseMessage = `${dataPath}: ${
-				err.message
-			}${getSchemaPartDescription(err.parentSchema)}`;
-			if (dataPath === "configuration.output.filename") {
-				return (
-					`${baseMessage}\n` +
-					"Please use output.path to specify absolute path and output.filename for the file name."
-				);
-			}
-			return baseMessage;
-		} else {
-			// eslint-disable-line no-fallthrough
-			return `${dataPath} ${err.message} (${JSON.stringify(
-				err,
-				null,
-				2
-			)}).\n${getSchemaPartText(err.parentSchema)}`;
-		}
-	}
-}
-
-module.exports = WebpackOptionsValidationError;
diff --git a/lib/asset/AssetBytesGenerator.js b/lib/asset/AssetBytesGenerator.js
new file mode 100644
index 00000000000..c33617fa68c
--- /dev/null
+++ b/lib/asset/AssetBytesGenerator.js
@@ -0,0 +1,172 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Alexander Akait @alexander-akait
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const ConcatenationScope = require("../ConcatenationScope");
+const Generator = require("../Generator");
+const {
+	CSS_TYPE,
+	CSS_URL_TYPE,
+	CSS_URL_TYPES,
+	JAVASCRIPT_AND_CSS_URL_TYPES,
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES,
+	NO_TYPES
+} = require("../ModuleSourceTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../Generator").GenerateContext} GenerateContext */
+/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("../Module").SourceType} SourceType */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../ModuleGraph")} ModuleGraph */
+/** @typedef {import("../NormalModule")} NormalModule */
+
+class AssetSourceGenerator extends Generator {
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 */
+	constructor(moduleGraph) {
+		super();
+
+		this._moduleGraph = moduleGraph;
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generate(
+		module,
+		{ type, concatenationScope, getData, runtimeTemplate, runtimeRequirements }
+	) {
+		const originalSource = module.originalSource();
+		const data = getData ? getData() : undefined;
+
+		switch (type) {
+			case JAVASCRIPT_TYPE: {
+				if (!originalSource) {
+					return new RawSource("");
+				}
+
+				const encodedSource = originalSource.buffer().toString("base64");
+
+				runtimeRequirements.add(RuntimeGlobals.requireScope);
+				runtimeRequirements.add(RuntimeGlobals.toBinary);
+
+				/** @type {string} */
+				let sourceContent;
+				if (concatenationScope) {
+					concatenationScope.registerNamespaceExport(
+						ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+					);
+					sourceContent = `${runtimeTemplate.renderConst()} ${
+						ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+					} = ${RuntimeGlobals.toBinary}(${JSON.stringify(encodedSource)});`;
+				} else {
+					runtimeRequirements.add(RuntimeGlobals.module);
+					sourceContent = `${module.moduleArgument}.exports = ${RuntimeGlobals.toBinary}(${JSON.stringify(
+						encodedSource
+					)});`;
+				}
+				return new RawSource(sourceContent);
+			}
+			case CSS_URL_TYPE: {
+				if (!originalSource) {
+					return null;
+				}
+
+				const encodedSource = originalSource.buffer().toString("base64");
+
+				if (data) {
+					data.set("url", {
+						[type]: `data:application/octet-stream;base64,${encodedSource}`
+					});
+				}
+				return null;
+			}
+			default:
+				return null;
+		}
+	}
+
+	/**
+	 * @param {Error} error the error
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generateError(error, module, generateContext) {
+		switch (generateContext.type) {
+			case JAVASCRIPT_TYPE: {
+				return new RawSource(
+					`throw new Error(${JSON.stringify(error.message)});`
+				);
+			}
+			default:
+				return null;
+		}
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the bailout reason should be determined
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(module, context) {
+		return undefined;
+	}
+
+	/**
+	 * @param {NormalModule} module fresh module
+	 * @returns {SourceTypes} available types (do not mutate)
+	 */
+	getTypes(module) {
+		/** @type {Set} */
+		const sourceTypes = new Set();
+		const connections = this._moduleGraph.getIncomingConnections(module);
+
+		for (const connection of connections) {
+			if (!connection.originModule) {
+				continue;
+			}
+
+			sourceTypes.add(connection.originModule.type.split("/")[0]);
+		}
+
+		if (sourceTypes.size > 0) {
+			if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
+				return JAVASCRIPT_AND_CSS_URL_TYPES;
+			} else if (sourceTypes.has(CSS_TYPE)) {
+				return CSS_URL_TYPES;
+			}
+			return JAVASCRIPT_TYPES;
+		}
+
+		return NO_TYPES;
+	}
+
+	/**
+	 * @param {NormalModule} module the module
+	 * @param {SourceType=} type source type
+	 * @returns {number} estimate size of the module
+	 */
+	getSize(module, type) {
+		const originalSource = module.originalSource();
+
+		if (!originalSource) {
+			return 0;
+		}
+
+		// Example: m.exports="abcd"
+		return originalSource.size() + 12;
+	}
+}
+
+module.exports = AssetSourceGenerator;
diff --git a/lib/asset/AssetBytesParser.js b/lib/asset/AssetBytesParser.js
new file mode 100644
index 00000000000..14a1fc8a0ca
--- /dev/null
+++ b/lib/asset/AssetBytesParser.js
@@ -0,0 +1,37 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Alexander Akait @alexander-akait
+*/
+
+"use strict";
+
+const Parser = require("../Parser");
+
+/** @typedef {import("../Module").BuildInfo} BuildInfo */
+/** @typedef {import("../Module").BuildMeta} BuildMeta */
+/** @typedef {import("../Parser").ParserState} ParserState */
+/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
+
+class AssetBytesParser extends Parser {
+	/**
+	 * @param {string | Buffer | PreparsedAst} source the source to parse
+	 * @param {ParserState} state the parser state
+	 * @returns {ParserState} the parser state
+	 */
+	parse(source, state) {
+		if (typeof source === "object" && !Buffer.isBuffer(source)) {
+			throw new Error("AssetBytesParser doesn't accept preparsed AST");
+		}
+		const { module } = state;
+		/** @type {BuildInfo} */
+		(module.buildInfo).strict = true;
+		/** @type {BuildMeta} */
+		(module.buildMeta).exportsType = "default";
+		/** @type {BuildMeta} */
+		(state.module.buildMeta).defaultObject = false;
+
+		return state;
+	}
+}
+
+module.exports = AssetBytesParser;
diff --git a/lib/asset/AssetGenerator.js b/lib/asset/AssetGenerator.js
new file mode 100644
index 00000000000..636fb3186bb
--- /dev/null
+++ b/lib/asset/AssetGenerator.js
@@ -0,0 +1,816 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sergey Melyukov @smelukov
+*/
+
+"use strict";
+
+const path = require("path");
+const { RawSource } = require("webpack-sources");
+const ConcatenationScope = require("../ConcatenationScope");
+const Generator = require("../Generator");
+const {
+	ASSET_AND_CSS_URL_TYPES,
+	ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES,
+	ASSET_AND_JAVASCRIPT_TYPES,
+	ASSET_TYPES,
+	CSS_TYPE,
+	CSS_URL_TYPE,
+	CSS_URL_TYPES,
+	JAVASCRIPT_AND_CSS_URL_TYPES,
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES,
+	NO_TYPES
+} = require("../ModuleSourceTypeConstants");
+const { ASSET_MODULE_TYPE } = require("../ModuleTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const CssUrlDependency = require("../dependencies/CssUrlDependency");
+const createHash = require("../util/createHash");
+const { makePathsRelative } = require("../util/identifier");
+const memoize = require("../util/memoize");
+const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
+
+const getMimeTypes = memoize(() => require("mime-types"));
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorDataUrlOptions} AssetGeneratorDataUrlOptions */
+/** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorOptions} AssetGeneratorOptions */
+/** @typedef {import("../../declarations/WebpackOptions").AssetModuleFilename} AssetModuleFilename */
+/** @typedef {import("../../declarations/WebpackOptions").AssetModuleOutputPath} AssetModuleOutputPath */
+/** @typedef {import("../../declarations/WebpackOptions").AssetResourceGeneratorOptions} AssetResourceGeneratorOptions */
+/** @typedef {import("../../declarations/WebpackOptions").RawPublicPath} RawPublicPath */
+/** @typedef {import("../ChunkGraph")} ChunkGraph */
+/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("../Generator").GenerateContext} GenerateContext */
+/** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("../Module")} Module */
+/** @typedef {import("../Module").NameForCondition} NameForCondition */
+/** @typedef {import("../Module").BuildInfo} BuildInfo */
+/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("../Module").SourceType} SourceType */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../ModuleGraph")} ModuleGraph */
+/** @typedef {import("../NormalModule")} NormalModule */
+/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
+/** @typedef {import("../util/Hash")} Hash */
+/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
+
+/** @typedef {(source: string | Buffer, context: { filename: string, module: Module }) => string} DataUrlFunction */
+
+/**
+ * @template T
+ * @template U
+ * @param {null | string | T[] | Set | undefined} a a
+ * @param {null | string | U[] | Set | undefined} b b
+ * @returns {T[] & U[]} array
+ */
+const mergeMaybeArrays = (a, b) => {
+	/** @type {Set | Set>} */
+	const set = new Set();
+	if (Array.isArray(a)) for (const item of a) set.add(item);
+	else set.add(a);
+	if (Array.isArray(b)) for (const item of b) set.add(item);
+	else set.add(b);
+	return /** @type {T[] & U[]} */ ([.../** @type {Set} */ (set)]);
+};
+
+/**
+ * @param {AssetInfo} a a
+ * @param {AssetInfo} b b
+ * @returns {AssetInfo} object
+ */
+const mergeAssetInfo = (a, b) => {
+	/** @type {AssetInfo} */
+	const result = { ...a, ...b };
+	for (const key of Object.keys(a)) {
+		if (key in b) {
+			if (a[key] === b[key]) continue;
+			switch (key) {
+				case "fullhash":
+				case "chunkhash":
+				case "modulehash":
+				case "contenthash":
+					result[key] = mergeMaybeArrays(a[key], b[key]);
+					break;
+				case "immutable":
+				case "development":
+				case "hotModuleReplacement":
+				case "javascriptModule":
+					result[key] = a[key] || b[key];
+					break;
+				case "related":
+					result[key] = mergeRelatedInfo(
+						/** @type {NonNullable} */
+						(a[key]),
+						/** @type {NonNullable} */
+						(b[key])
+					);
+					break;
+				default:
+					throw new Error(`Can't handle conflicting asset info for ${key}`);
+			}
+		}
+	}
+	return result;
+};
+
+/**
+ * @param {NonNullable} a a
+ * @param {NonNullable} b b
+ * @returns {NonNullable} object
+ */
+const mergeRelatedInfo = (a, b) => {
+	const result = { ...a, ...b };
+	for (const key of Object.keys(a)) {
+		if (key in b) {
+			if (a[key] === b[key]) continue;
+			result[key] = mergeMaybeArrays(a[key], b[key]);
+		}
+	}
+	return result;
+};
+
+/**
+ * @param {"base64" | false} encoding encoding
+ * @param {Source} source source
+ * @returns {string} encoded data
+ */
+const encodeDataUri = (encoding, source) => {
+	/** @type {string | undefined} */
+	let encodedContent;
+
+	switch (encoding) {
+		case "base64": {
+			encodedContent = source.buffer().toString("base64");
+			break;
+		}
+		case false: {
+			const content = source.source();
+
+			if (typeof content !== "string") {
+				encodedContent = content.toString("utf8");
+			}
+
+			encodedContent = encodeURIComponent(
+				/** @type {string} */
+				(encodedContent)
+			).replace(
+				/[!'()*]/g,
+				(character) =>
+					`%${/** @type {number} */ (character.codePointAt(0)).toString(16)}`
+			);
+			break;
+		}
+		default:
+			throw new Error(`Unsupported encoding '${encoding}'`);
+	}
+
+	return encodedContent;
+};
+
+/**
+ * @param {"base64" | false} encoding encoding
+ * @param {string} content content
+ * @returns {Buffer} decoded content
+ */
+const decodeDataUriContent = (encoding, content) => {
+	const isBase64 = encoding === "base64";
+
+	if (isBase64) {
+		return Buffer.from(content, "base64");
+	}
+
+	// If we can't decode return the original body
+	try {
+		return Buffer.from(decodeURIComponent(content), "ascii");
+	} catch (_) {
+		return Buffer.from(content, "ascii");
+	}
+};
+
+const DEFAULT_ENCODING = "base64";
+
+class AssetGenerator extends Generator {
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {AssetGeneratorOptions["dataUrl"]=} dataUrlOptions the options for the data url
+	 * @param {AssetModuleFilename=} filename override for output.assetModuleFilename
+	 * @param {RawPublicPath=} publicPath override for output.assetModulePublicPath
+	 * @param {AssetModuleOutputPath=} outputPath the output path for the emitted file which is not included in the runtime import
+	 * @param {boolean=} emit generate output asset
+	 */
+	constructor(
+		moduleGraph,
+		dataUrlOptions,
+		filename,
+		publicPath,
+		outputPath,
+		emit
+	) {
+		super();
+		/** @type {AssetGeneratorOptions["dataUrl"] | undefined} */
+		this.dataUrlOptions = dataUrlOptions;
+		/** @type {AssetModuleFilename | undefined} */
+		this.filename = filename;
+		/** @type {RawPublicPath | undefined} */
+		this.publicPath = publicPath;
+		/** @type {AssetModuleOutputPath | undefined} */
+		this.outputPath = outputPath;
+		/** @type {boolean | undefined} */
+		this.emit = emit;
+		/** @type {ModuleGraph} */
+		this._moduleGraph = moduleGraph;
+	}
+
+	/**
+	 * @param {NormalModule} module module
+	 * @param {RuntimeTemplate} runtimeTemplate runtime template
+	 * @returns {string} source file name
+	 */
+	static getSourceFileName(module, runtimeTemplate) {
+		return makePathsRelative(
+			runtimeTemplate.compilation.compiler.context,
+			/** @type {string} */
+			(module.getResource()),
+			runtimeTemplate.compilation.compiler.root
+		).replace(/^\.\//, "");
+	}
+
+	/**
+	 * @param {NormalModule} module module
+	 * @param {RuntimeTemplate} runtimeTemplate runtime template
+	 * @returns {[string, string]} return full hash and non-numeric full hash
+	 */
+	static getFullContentHash(module, runtimeTemplate) {
+		const hash = createHash(runtimeTemplate.outputOptions.hashFunction);
+
+		if (runtimeTemplate.outputOptions.hashSalt) {
+			hash.update(runtimeTemplate.outputOptions.hashSalt);
+		}
+
+		const source = module.originalSource();
+
+		if (source) {
+			hash.update(source.buffer());
+		}
+
+		if (module.error) {
+			hash.update(module.error.toString());
+		}
+
+		const fullContentHash = hash.digest(
+			runtimeTemplate.outputOptions.hashDigest
+		);
+
+		const contentHash = nonNumericOnlyHash(
+			fullContentHash,
+			runtimeTemplate.outputOptions.hashDigestLength
+		);
+
+		return [fullContentHash, contentHash];
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {Pick} generatorOptions generator options
+	 * @param {{ runtime: RuntimeSpec, runtimeTemplate: RuntimeTemplate, chunkGraph: ChunkGraph }} generateContext context for generate
+	 * @param {string} contentHash the content hash
+	 * @returns {{ filename: string, originalFilename: string, assetInfo: AssetInfo }} info
+	 */
+	static getFilenameWithInfo(
+		module,
+		generatorOptions,
+		{ runtime, runtimeTemplate, chunkGraph },
+		contentHash
+	) {
+		const assetModuleFilename =
+			generatorOptions.filename ||
+			runtimeTemplate.outputOptions.assetModuleFilename;
+
+		const sourceFilename = AssetGenerator.getSourceFileName(
+			module,
+			runtimeTemplate
+		);
+		let { path: filename, info: assetInfo } =
+			runtimeTemplate.compilation.getAssetPathWithInfo(assetModuleFilename, {
+				module,
+				runtime,
+				filename: sourceFilename,
+				chunkGraph,
+				contentHash
+			});
+
+		const originalFilename = filename;
+
+		if (generatorOptions.outputPath) {
+			const { path: outputPath, info } =
+				runtimeTemplate.compilation.getAssetPathWithInfo(
+					generatorOptions.outputPath,
+					{
+						module,
+						runtime,
+						filename: sourceFilename,
+						chunkGraph,
+						contentHash
+					}
+				);
+			filename = path.posix.join(outputPath, filename);
+			assetInfo = mergeAssetInfo(assetInfo, info);
+		}
+
+		return { originalFilename, filename, assetInfo };
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {Pick} generatorOptions generator options
+	 * @param {GenerateContext} generateContext context for generate
+	 * @param {string} filename the filename
+	 * @param {AssetInfo} assetInfo the asset info
+	 * @param {string} contentHash the content hash
+	 * @returns {{ assetPath: string, assetInfo: AssetInfo }} asset path and info
+	 */
+	static getAssetPathWithInfo(
+		module,
+		generatorOptions,
+		{ runtime, runtimeTemplate, type, chunkGraph, runtimeRequirements },
+		filename,
+		assetInfo,
+		contentHash
+	) {
+		const sourceFilename = AssetGenerator.getSourceFileName(
+			module,
+			runtimeTemplate
+		);
+
+		/** @type {undefined | string} */
+		let assetPath;
+
+		if (generatorOptions.publicPath !== undefined && type === JAVASCRIPT_TYPE) {
+			const { path, info } = runtimeTemplate.compilation.getAssetPathWithInfo(
+				generatorOptions.publicPath,
+				{
+					module,
+					runtime,
+					filename: sourceFilename,
+					chunkGraph,
+					contentHash
+				}
+			);
+			assetInfo = mergeAssetInfo(assetInfo, info);
+			assetPath = JSON.stringify(path + filename);
+		} else if (
+			generatorOptions.publicPath !== undefined &&
+			type === CSS_URL_TYPE
+		) {
+			const { path, info } = runtimeTemplate.compilation.getAssetPathWithInfo(
+				generatorOptions.publicPath,
+				{
+					module,
+					runtime,
+					filename: sourceFilename,
+					chunkGraph,
+					contentHash
+				}
+			);
+			assetInfo = mergeAssetInfo(assetInfo, info);
+			assetPath = path + filename;
+		} else if (type === JAVASCRIPT_TYPE) {
+			// add __webpack_require__.p
+			runtimeRequirements.add(RuntimeGlobals.publicPath);
+			assetPath = runtimeTemplate.concatenation(
+				{ expr: RuntimeGlobals.publicPath },
+				filename
+			);
+		} else if (type === CSS_URL_TYPE) {
+			const compilation = runtimeTemplate.compilation;
+			const path =
+				compilation.outputOptions.publicPath === "auto"
+					? CssUrlDependency.PUBLIC_PATH_AUTO
+					: compilation.getAssetPath(compilation.outputOptions.publicPath, {
+							hash: compilation.hash
+						});
+
+			assetPath = path + filename;
+		}
+
+		return {
+			assetPath: /** @type {string} */ (assetPath),
+			assetInfo: { sourceFilename, ...assetInfo }
+		};
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the bailout reason should be determined
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(module, context) {
+		return undefined;
+	}
+
+	/**
+	 * @param {NormalModule} module module
+	 * @returns {string} mime type
+	 */
+	getMimeType(module) {
+		if (typeof this.dataUrlOptions === "function") {
+			throw new Error(
+				"This method must not be called when dataUrlOptions is a function"
+			);
+		}
+
+		/** @type {string | boolean | undefined} */
+		let mimeType =
+			/** @type {AssetGeneratorDataUrlOptions} */
+			(this.dataUrlOptions).mimetype;
+		if (mimeType === undefined) {
+			const ext = path.extname(
+				/** @type {NameForCondition} */
+				(module.nameForCondition())
+			);
+			if (
+				module.resourceResolveData &&
+				module.resourceResolveData.mimetype !== undefined
+			) {
+				mimeType =
+					module.resourceResolveData.mimetype +
+					module.resourceResolveData.parameters;
+			} else if (ext) {
+				mimeType = getMimeTypes().lookup(ext);
+
+				if (typeof mimeType !== "string") {
+					throw new Error(
+						"DataUrl can't be generated automatically, " +
+							`because there is no mimetype for "${ext}" in mimetype database. ` +
+							'Either pass a mimetype via "generator.mimetype" or ' +
+							'use type: "asset/resource" to create a resource file instead of a DataUrl'
+					);
+				}
+			}
+		}
+
+		if (typeof mimeType !== "string") {
+			throw new Error(
+				"DataUrl can't be generated automatically. " +
+					'Either pass a mimetype via "generator.mimetype" or ' +
+					'use type: "asset/resource" to create a resource file instead of a DataUrl'
+			);
+		}
+
+		return /** @type {string} */ (mimeType);
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @returns {string} DataURI
+	 */
+	generateDataUri(module) {
+		const source = /** @type {Source} */ (module.originalSource());
+
+		/** @type {string} */
+		let encodedSource;
+
+		if (typeof this.dataUrlOptions === "function") {
+			encodedSource = this.dataUrlOptions.call(null, source.source(), {
+				filename: /** @type {string} */ (module.getResource()),
+				module
+			});
+		} else {
+			let encoding =
+				/** @type {AssetGeneratorDataUrlOptions} */
+				(this.dataUrlOptions).encoding;
+			if (
+				encoding === undefined &&
+				module.resourceResolveData &&
+				module.resourceResolveData.encoding !== undefined
+			) {
+				encoding = module.resourceResolveData.encoding;
+			}
+			if (encoding === undefined) {
+				encoding = DEFAULT_ENCODING;
+			}
+			const mimeType = this.getMimeType(module);
+
+			/** @type {string} */
+			let encodedContent;
+
+			if (
+				module.resourceResolveData &&
+				module.resourceResolveData.encoding === encoding &&
+				decodeDataUriContent(
+					module.resourceResolveData.encoding,
+					/** @type {string} */ (module.resourceResolveData.encodedContent)
+				).equals(source.buffer())
+			) {
+				encodedContent =
+					/** @type {string} */
+					(module.resourceResolveData.encodedContent);
+			} else {
+				encodedContent = encodeDataUri(
+					/** @type {"base64" | false} */ (encoding),
+					source
+				);
+			}
+
+			encodedSource = `data:${mimeType}${
+				encoding ? `;${encoding}` : ""
+			},${encodedContent}`;
+		}
+
+		return encodedSource;
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generate(module, generateContext) {
+		const {
+			type,
+			getData,
+			runtimeTemplate,
+			runtimeRequirements,
+			concatenationScope
+		} = generateContext;
+
+		/** @type {string} */
+		let content;
+
+		const needContent = type === JAVASCRIPT_TYPE || type === CSS_URL_TYPE;
+		const data = getData ? getData() : undefined;
+
+		if (
+			/** @type {BuildInfo} */
+			(module.buildInfo).dataUrl &&
+			needContent
+		) {
+			const encodedSource = this.generateDataUri(module);
+			content =
+				type === JAVASCRIPT_TYPE
+					? JSON.stringify(encodedSource)
+					: encodedSource;
+
+			if (data) {
+				data.set("url", { [type]: content, ...data.get("url") });
+			}
+		} else {
+			const [fullContentHash, contentHash] = AssetGenerator.getFullContentHash(
+				module,
+				runtimeTemplate
+			);
+
+			if (data) {
+				data.set("fullContentHash", fullContentHash);
+				data.set("contentHash", contentHash);
+			}
+
+			/** @type {BuildInfo} */
+			(module.buildInfo).fullContentHash = fullContentHash;
+
+			const { originalFilename, filename, assetInfo } =
+				AssetGenerator.getFilenameWithInfo(
+					module,
+					{ filename: this.filename, outputPath: this.outputPath },
+					generateContext,
+					contentHash
+				);
+
+			if (data) {
+				data.set("filename", filename);
+			}
+
+			let { assetPath, assetInfo: newAssetInfo } =
+				AssetGenerator.getAssetPathWithInfo(
+					module,
+					{ publicPath: this.publicPath },
+					generateContext,
+					originalFilename,
+					assetInfo,
+					contentHash
+				);
+
+			if (data && (type === JAVASCRIPT_TYPE || type === CSS_URL_TYPE)) {
+				data.set("url", { [type]: assetPath, ...data.get("url") });
+			}
+
+			if (data) {
+				const oldAssetInfo = data.get("assetInfo");
+
+				if (oldAssetInfo) {
+					newAssetInfo = mergeAssetInfo(oldAssetInfo, newAssetInfo);
+				}
+			}
+
+			if (data) {
+				data.set("assetInfo", newAssetInfo);
+			}
+
+			// Due to code generation caching module.buildInfo.XXX can't used to store such information
+			// It need to be stored in the code generation results instead, where it's cached too
+			// TODO webpack 6 For back-compat reasons we also store in on module.buildInfo
+			/** @type {BuildInfo} */
+			(module.buildInfo).filename = filename;
+
+			/** @type {BuildInfo} */
+			(module.buildInfo).assetInfo = newAssetInfo;
+
+			content = assetPath;
+		}
+
+		if (type === JAVASCRIPT_TYPE) {
+			if (concatenationScope) {
+				concatenationScope.registerNamespaceExport(
+					ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+				);
+
+				return new RawSource(
+					`${runtimeTemplate.renderConst()} ${
+						ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+					} = ${content};`
+				);
+			}
+
+			runtimeRequirements.add(RuntimeGlobals.module);
+
+			return new RawSource(`${module.moduleArgument}.exports = ${content};`);
+		} else if (type === CSS_URL_TYPE) {
+			return null;
+		}
+
+		return /** @type {Source} */ (module.originalSource());
+	}
+
+	/**
+	 * @param {Error} error the error
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generateError(error, module, generateContext) {
+		switch (generateContext.type) {
+			case "asset": {
+				return new RawSource(error.message);
+			}
+			case JAVASCRIPT_TYPE: {
+				return new RawSource(
+					`throw new Error(${JSON.stringify(error.message)});`
+				);
+			}
+			default:
+				return null;
+		}
+	}
+
+	/**
+	 * @param {NormalModule} module fresh module
+	 * @returns {SourceTypes} available types (do not mutate)
+	 */
+	getTypes(module) {
+		/** @type {Set} */
+		const sourceTypes = new Set();
+		const connections = this._moduleGraph.getIncomingConnections(module);
+
+		for (const connection of connections) {
+			if (!connection.originModule) {
+				continue;
+			}
+
+			sourceTypes.add(connection.originModule.type.split("/")[0]);
+		}
+
+		if ((module.buildInfo && module.buildInfo.dataUrl) || this.emit === false) {
+			if (sourceTypes.size > 0) {
+				if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
+					return JAVASCRIPT_AND_CSS_URL_TYPES;
+				} else if (sourceTypes.has(CSS_TYPE)) {
+					return CSS_URL_TYPES;
+				}
+				return JAVASCRIPT_TYPES;
+			}
+
+			return NO_TYPES;
+		}
+
+		if (sourceTypes.size > 0) {
+			if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
+				return ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES;
+			} else if (sourceTypes.has(CSS_TYPE)) {
+				return ASSET_AND_CSS_URL_TYPES;
+			}
+			return ASSET_AND_JAVASCRIPT_TYPES;
+		}
+
+		return ASSET_TYPES;
+	}
+
+	/**
+	 * @param {NormalModule} module the module
+	 * @param {SourceType=} type source type
+	 * @returns {number} estimate size of the module
+	 */
+	getSize(module, type) {
+		switch (type) {
+			case ASSET_MODULE_TYPE: {
+				const originalSource = module.originalSource();
+
+				if (!originalSource) {
+					return 0;
+				}
+
+				return originalSource.size();
+			}
+			default:
+				if (module.buildInfo && module.buildInfo.dataUrl) {
+					const originalSource = module.originalSource();
+
+					if (!originalSource) {
+						return 0;
+					}
+
+					// roughly for data url
+					// Example: m.exports="data:image/png;base64,ag82/f+2=="
+					// 4/3 = base64 encoding
+					// 34 = ~ data url header + footer + rounding
+					return originalSource.size() * 1.34 + 36;
+				}
+				// it's only estimated so this number is probably fine
+				// Example: m.exports=r.p+"0123456789012345678901.ext"
+				return 42;
+		}
+	}
+
+	/**
+	 * @param {Hash} hash hash that will be modified
+	 * @param {UpdateHashContext} updateHashContext context for updating hash
+	 */
+	updateHash(hash, updateHashContext) {
+		const { module } = updateHashContext;
+
+		if (
+			/** @type {BuildInfo} */
+			(module.buildInfo).dataUrl
+		) {
+			hash.update("data-url");
+			// this.dataUrlOptions as function should be pure and only depend on input source and filename
+			// therefore it doesn't need to be hashed
+			if (typeof this.dataUrlOptions === "function") {
+				const ident = /** @type {{ ident?: string }} */ (this.dataUrlOptions)
+					.ident;
+				if (ident) hash.update(ident);
+			} else {
+				const dataUrlOptions =
+					/** @type {AssetGeneratorDataUrlOptions} */
+					(this.dataUrlOptions);
+				if (
+					dataUrlOptions.encoding &&
+					dataUrlOptions.encoding !== DEFAULT_ENCODING
+				) {
+					hash.update(dataUrlOptions.encoding);
+				}
+				if (dataUrlOptions.mimetype) hash.update(dataUrlOptions.mimetype);
+				// computed mimetype depends only on module filename which is already part of the hash
+			}
+		} else {
+			hash.update("resource");
+
+			const { module, chunkGraph, runtime } = updateHashContext;
+			const runtimeTemplate =
+				/** @type {NonNullable} */
+				(updateHashContext.runtimeTemplate);
+
+			const pathData = {
+				module,
+				runtime,
+				filename: AssetGenerator.getSourceFileName(module, runtimeTemplate),
+				chunkGraph,
+				contentHash: runtimeTemplate.contentHashReplacement
+			};
+
+			if (typeof this.publicPath === "function") {
+				hash.update("path");
+				const assetInfo = {};
+				hash.update(this.publicPath(pathData, assetInfo));
+				hash.update(JSON.stringify(assetInfo));
+			} else if (this.publicPath) {
+				hash.update("path");
+				hash.update(this.publicPath);
+			} else {
+				hash.update("no-path");
+			}
+
+			const assetModuleFilename =
+				this.filename || runtimeTemplate.outputOptions.assetModuleFilename;
+			const { path: filename, info } =
+				runtimeTemplate.compilation.getAssetPathWithInfo(
+					assetModuleFilename,
+					pathData
+				);
+			hash.update(filename);
+			hash.update(JSON.stringify(info));
+		}
+	}
+}
+
+module.exports = AssetGenerator;
diff --git a/lib/asset/AssetModulesPlugin.js b/lib/asset/AssetModulesPlugin.js
new file mode 100644
index 00000000000..33d45dadc86
--- /dev/null
+++ b/lib/asset/AssetModulesPlugin.js
@@ -0,0 +1,379 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Yuta Hiroto @hiroppy
+*/
+
+"use strict";
+
+const {
+	ASSET_MODULE_TYPE,
+	ASSET_MODULE_TYPE_BYTES,
+	ASSET_MODULE_TYPE_INLINE,
+	ASSET_MODULE_TYPE_RESOURCE,
+	ASSET_MODULE_TYPE_SOURCE
+} = require("../ModuleTypeConstants");
+const { compareModulesByFullName } = require("../util/comparators");
+const memoize = require("../util/memoize");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("schema-utils").Schema} Schema */
+/** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorDataUrl} AssetGeneratorDataUrl */
+/** @typedef {import("../../declarations/WebpackOptions").AssetModuleOutputPath} AssetModuleOutputPath */
+/** @typedef {import("../../declarations/WebpackOptions").RawPublicPath} RawPublicPath */
+/** @typedef {import("../../declarations/WebpackOptions").FilenameTemplate} FilenameTemplate */
+/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../Module").BuildInfo} BuildInfo */
+/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("../NormalModule")} NormalModule */
+/** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
+
+/**
+ * @param {string} name name of definitions
+ * @returns {Schema} definition
+ */
+const getSchema = (name) => {
+	const { definitions } = require("../../schemas/WebpackOptions.json");
+
+	return {
+		definitions,
+		oneOf: [{ $ref: `#/definitions/${name}` }]
+	};
+};
+
+const generatorValidationOptions = {
+	name: "Asset Modules Plugin",
+	baseDataPath: "generator"
+};
+
+const getAssetGenerator = memoize(() => require("./AssetGenerator"));
+const getAssetParser = memoize(() => require("./AssetParser"));
+const getAssetSourceParser = memoize(() => require("./AssetSourceParser"));
+const getAssetBytesParser = memoize(() => require("./AssetBytesParser"));
+const getAssetSourceGenerator = memoize(() =>
+	require("./AssetSourceGenerator")
+);
+const getAssetBytesGenerator = memoize(() => require("./AssetBytesGenerator"));
+const getNormalModule = memoize(() => require("../NormalModule"));
+
+const type = ASSET_MODULE_TYPE;
+const PLUGIN_NAME = "AssetModulesPlugin";
+
+/**
+ * @typedef {object} AssetModulesPluginOptions
+ * @property {boolean=} sideEffectFree
+ */
+
+class AssetModulesPlugin {
+	/**
+	 * @param {AssetModulesPluginOptions} options options
+	 */
+	constructor(options) {
+		this.options = options;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				const NormalModule = getNormalModule();
+				for (const type of [
+					ASSET_MODULE_TYPE,
+					ASSET_MODULE_TYPE_BYTES,
+					ASSET_MODULE_TYPE_INLINE,
+					ASSET_MODULE_TYPE_RESOURCE,
+					ASSET_MODULE_TYPE_SOURCE
+				]) {
+					normalModuleFactory.hooks.createModuleClass
+						.for(type)
+						.tap(PLUGIN_NAME, (createData, _resolveData) => {
+							// TODO create the module via new AssetModule with its own properties
+							const module = new NormalModule(
+								/** @type {NormalModuleCreateData} */
+								(createData)
+							);
+							if (this.options.sideEffectFree) {
+								module.factoryMeta = { sideEffectFree: true };
+							}
+
+							return module;
+						});
+				}
+
+				normalModuleFactory.hooks.createParser
+					.for(ASSET_MODULE_TYPE)
+					.tap(PLUGIN_NAME, (parserOptions) => {
+						compiler.validate(
+							() => getSchema("AssetParserOptions"),
+							parserOptions,
+							{
+								name: "Asset Modules Plugin",
+								baseDataPath: "parser"
+							},
+							(options) =>
+								require("../../schemas/plugins/asset/AssetParserOptions.check")(
+									options
+								)
+						);
+
+						let dataUrlCondition = parserOptions.dataUrlCondition;
+						if (!dataUrlCondition || typeof dataUrlCondition === "object") {
+							dataUrlCondition = {
+								maxSize: 8096,
+								...dataUrlCondition
+							};
+						}
+
+						const AssetParser = getAssetParser();
+
+						return new AssetParser(dataUrlCondition);
+					});
+				normalModuleFactory.hooks.createParser
+					.for(ASSET_MODULE_TYPE_INLINE)
+					.tap(PLUGIN_NAME, (_parserOptions) => {
+						const AssetParser = getAssetParser();
+
+						return new AssetParser(true);
+					});
+				normalModuleFactory.hooks.createParser
+					.for(ASSET_MODULE_TYPE_RESOURCE)
+					.tap(PLUGIN_NAME, (_parserOptions) => {
+						const AssetParser = getAssetParser();
+
+						return new AssetParser(false);
+					});
+				normalModuleFactory.hooks.createParser
+					.for(ASSET_MODULE_TYPE_SOURCE)
+					.tap(PLUGIN_NAME, (_parserOptions) => {
+						const AssetSourceParser = getAssetSourceParser();
+
+						return new AssetSourceParser();
+					});
+				normalModuleFactory.hooks.createParser
+					.for(ASSET_MODULE_TYPE_BYTES)
+					.tap(PLUGIN_NAME, (_parserOptions) => {
+						const AssetBytesParser = getAssetBytesParser();
+
+						return new AssetBytesParser();
+					});
+
+				for (const type of [
+					ASSET_MODULE_TYPE,
+					ASSET_MODULE_TYPE_INLINE,
+					ASSET_MODULE_TYPE_RESOURCE
+				]) {
+					normalModuleFactory.hooks.createGenerator
+						.for(type)
+						.tap(PLUGIN_NAME, (generatorOptions) => {
+							switch (type) {
+								case ASSET_MODULE_TYPE: {
+									compiler.validate(
+										() => getSchema("AssetGeneratorOptions"),
+										generatorOptions,
+										generatorValidationOptions,
+										(options) =>
+											require("../../schemas/plugins/asset/AssetGeneratorOptions.check")(
+												options
+											)
+									);
+									break;
+								}
+								case ASSET_MODULE_TYPE_RESOURCE: {
+									compiler.validate(
+										() => getSchema("AssetResourceGeneratorOptions"),
+										generatorOptions,
+										generatorValidationOptions,
+										(options) =>
+											require("../../schemas/plugins/asset/AssetResourceGeneratorOptions.check")(
+												options
+											)
+									);
+									break;
+								}
+								case ASSET_MODULE_TYPE_INLINE: {
+									compiler.validate(
+										() => getSchema("AssetInlineGeneratorOptions"),
+										generatorOptions,
+										generatorValidationOptions,
+										(options) =>
+											require("../../schemas/plugins/asset/AssetInlineGeneratorOptions.check")(
+												options
+											)
+									);
+									break;
+								}
+							}
+
+							/** @type {undefined | AssetGeneratorDataUrl} */
+							let dataUrl;
+							if (type !== ASSET_MODULE_TYPE_RESOURCE) {
+								dataUrl = generatorOptions.dataUrl;
+								if (!dataUrl || typeof dataUrl === "object") {
+									dataUrl = {
+										encoding: undefined,
+										mimetype: undefined,
+										...dataUrl
+									};
+								}
+							}
+
+							/** @type {undefined | FilenameTemplate} */
+							let filename;
+							/** @type {undefined | RawPublicPath} */
+							let publicPath;
+							/** @type {undefined | AssetModuleOutputPath} */
+							let outputPath;
+							if (type !== ASSET_MODULE_TYPE_INLINE) {
+								filename = generatorOptions.filename;
+								publicPath = generatorOptions.publicPath;
+								outputPath = generatorOptions.outputPath;
+							}
+
+							const AssetGenerator = getAssetGenerator();
+
+							return new AssetGenerator(
+								compilation.moduleGraph,
+								dataUrl,
+								filename,
+								publicPath,
+								outputPath,
+								generatorOptions.emit !== false
+							);
+						});
+				}
+				normalModuleFactory.hooks.createGenerator
+					.for(ASSET_MODULE_TYPE_SOURCE)
+					.tap(PLUGIN_NAME, () => {
+						const AssetSourceGenerator = getAssetSourceGenerator();
+
+						return new AssetSourceGenerator(compilation.moduleGraph);
+					});
+
+				normalModuleFactory.hooks.createGenerator
+					.for(ASSET_MODULE_TYPE_BYTES)
+					.tap(PLUGIN_NAME, () => {
+						const AssetBytesGenerator = getAssetBytesGenerator();
+
+						return new AssetBytesGenerator(compilation.moduleGraph);
+					});
+
+				compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
+					const { chunkGraph } = compilation;
+					const { chunk, codeGenerationResults, runtimeTemplate } = options;
+
+					const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
+						chunk,
+						ASSET_MODULE_TYPE,
+						compareModulesByFullName(compilation.compiler)
+					);
+					if (modules) {
+						for (const module of modules) {
+							try {
+								const codeGenResult = codeGenerationResults.get(
+									module,
+									chunk.runtime
+								);
+								const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
+								const data =
+									/** @type {NonNullable} */
+									(codeGenResult.data);
+								const errored = module.getNumberOfErrors() > 0;
+
+								/** @type {string} */
+								let entryFilename;
+								/** @type {AssetInfo} */
+								let entryInfo;
+								/** @type {string} */
+								let entryHash;
+
+								if (errored) {
+									const erroredModule = /** @type {NormalModule} */ (module);
+									const AssetGenerator = getAssetGenerator();
+									const [fullContentHash, contentHash] =
+										AssetGenerator.getFullContentHash(
+											erroredModule,
+											runtimeTemplate
+										);
+									const { filename, assetInfo } =
+										AssetGenerator.getFilenameWithInfo(
+											erroredModule,
+											{
+												filename:
+													erroredModule.generatorOptions &&
+													erroredModule.generatorOptions.filename,
+												outputPath:
+													erroredModule.generatorOptions &&
+													erroredModule.generatorOptions.outputPath
+											},
+											{
+												runtime: chunk.runtime,
+												runtimeTemplate,
+												chunkGraph
+											},
+											contentHash
+										);
+									entryFilename = filename;
+									entryInfo = assetInfo;
+									entryHash = fullContentHash;
+								} else {
+									entryFilename =
+										/** @type {string} */
+										(buildInfo.filename || data.get("filename"));
+									entryInfo =
+										/** @type {AssetInfo} */
+										(buildInfo.assetInfo || data.get("assetInfo"));
+									entryHash =
+										/** @type {string} */
+										(buildInfo.fullContentHash || data.get("fullContentHash"));
+								}
+
+								result.push({
+									render: () =>
+										/** @type {Source} */ (codeGenResult.sources.get(type)),
+									filename: entryFilename,
+									info: entryInfo,
+									auxiliary: true,
+									identifier: `assetModule${chunkGraph.getModuleId(module)}`,
+									hash: entryHash
+								});
+							} catch (err) {
+								/** @type {Error} */ (err).message +=
+									`\nduring rendering of asset ${module.identifier()}`;
+								throw err;
+							}
+						}
+					}
+
+					return result;
+				});
+
+				compilation.hooks.prepareModuleExecution.tap(
+					PLUGIN_NAME,
+					(options, context) => {
+						const { codeGenerationResult } = options;
+						const source = codeGenerationResult.sources.get(ASSET_MODULE_TYPE);
+						if (source === undefined) return;
+						const data =
+							/** @type {NonNullable} */
+							(codeGenerationResult.data);
+						context.assets.set(
+							/** @type {string} */
+							(data.get("filename")),
+							{
+								source,
+								info: data.get("assetInfo")
+							}
+						);
+					}
+				);
+			}
+		);
+	}
+}
+
+module.exports = AssetModulesPlugin;
diff --git a/lib/asset/AssetParser.js b/lib/asset/AssetParser.js
new file mode 100644
index 00000000000..e72529f74f5
--- /dev/null
+++ b/lib/asset/AssetParser.js
@@ -0,0 +1,73 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Yuta Hiroto @hiroppy
+*/
+
+"use strict";
+
+const Parser = require("../Parser");
+
+/** @typedef {import("../../declarations/WebpackOptions").AssetParserDataUrlOptions} AssetParserDataUrlOptions */
+/** @typedef {import("../../declarations/WebpackOptions").AssetParserOptions} AssetParserOptions */
+/** @typedef {import("../Module")} Module */
+/** @typedef {import("../Module").BuildInfo} BuildInfo */
+/** @typedef {import("../Module").BuildMeta} BuildMeta */
+/** @typedef {import("../Parser").ParserState} ParserState */
+/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
+
+/** @typedef {((source: string | Buffer, context: { filename: string, module: Module }) => boolean)} AssetParserDataUrlFunction */
+
+class AssetParser extends Parser {
+	/**
+	 * @param {AssetParserOptions["dataUrlCondition"] | boolean} dataUrlCondition condition for inlining as DataUrl
+	 */
+	constructor(dataUrlCondition) {
+		super();
+		/** @type {AssetParserOptions["dataUrlCondition"] | boolean} */
+		this.dataUrlCondition = dataUrlCondition;
+	}
+
+	/**
+	 * @param {string | Buffer | PreparsedAst} source the source to parse
+	 * @param {ParserState} state the parser state
+	 * @returns {ParserState} the parser state
+	 */
+	parse(source, state) {
+		if (typeof source === "object" && !Buffer.isBuffer(source)) {
+			throw new Error("AssetParser doesn't accept preparsed AST");
+		}
+
+		const buildInfo =
+			/** @type {BuildInfo} */
+			(state.module.buildInfo);
+		buildInfo.strict = true;
+		const buildMeta =
+			/** @type {BuildMeta} */
+			(state.module.buildMeta);
+		buildMeta.exportsType = "default";
+		buildMeta.defaultObject = false;
+
+		if (typeof this.dataUrlCondition === "function") {
+			buildInfo.dataUrl = this.dataUrlCondition(source, {
+				filename: /** @type {string} */ (state.module.getResource()),
+				module: state.module
+			});
+		} else if (typeof this.dataUrlCondition === "boolean") {
+			buildInfo.dataUrl = this.dataUrlCondition;
+		} else if (
+			this.dataUrlCondition &&
+			typeof this.dataUrlCondition === "object"
+		) {
+			buildInfo.dataUrl =
+				Buffer.byteLength(source) <=
+				/** @type {NonNullable} */
+				(this.dataUrlCondition.maxSize);
+		} else {
+			throw new Error("Unexpected dataUrlCondition type");
+		}
+
+		return state;
+	}
+}
+
+module.exports = AssetParser;
diff --git a/lib/asset/AssetSourceGenerator.js b/lib/asset/AssetSourceGenerator.js
new file mode 100644
index 00000000000..081f38e287f
--- /dev/null
+++ b/lib/asset/AssetSourceGenerator.js
@@ -0,0 +1,171 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sergey Melyukov @smelukov
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const ConcatenationScope = require("../ConcatenationScope");
+const Generator = require("../Generator");
+const {
+	CSS_TYPE,
+	CSS_URL_TYPE,
+	CSS_URL_TYPES,
+	JAVASCRIPT_AND_CSS_URL_TYPES,
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES,
+	NO_TYPES
+} = require("../ModuleSourceTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../Generator").GenerateContext} GenerateContext */
+/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("../Module").SourceType} SourceType */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../ModuleGraph")} ModuleGraph */
+/** @typedef {import("../NormalModule")} NormalModule */
+
+class AssetSourceGenerator extends Generator {
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 */
+	constructor(moduleGraph) {
+		super();
+
+		this._moduleGraph = moduleGraph;
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generate(
+		module,
+		{ type, concatenationScope, getData, runtimeTemplate, runtimeRequirements }
+	) {
+		const originalSource = module.originalSource();
+		const data = getData ? getData() : undefined;
+
+		switch (type) {
+			case JAVASCRIPT_TYPE: {
+				if (!originalSource) {
+					return new RawSource("");
+				}
+
+				const content = originalSource.source();
+				const encodedSource =
+					typeof content === "string" ? content : content.toString("utf8");
+
+				/** @type {string} */
+				let sourceContent;
+				if (concatenationScope) {
+					concatenationScope.registerNamespaceExport(
+						ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+					);
+					sourceContent = `${runtimeTemplate.renderConst()} ${
+						ConcatenationScope.NAMESPACE_OBJECT_EXPORT
+					} = ${JSON.stringify(encodedSource)};`;
+				} else {
+					runtimeRequirements.add(RuntimeGlobals.module);
+					sourceContent = `${module.moduleArgument}.exports = ${JSON.stringify(
+						encodedSource
+					)};`;
+				}
+				return new RawSource(sourceContent);
+			}
+			case CSS_URL_TYPE: {
+				if (!originalSource) {
+					return null;
+				}
+
+				const content = originalSource.source();
+				const encodedSource =
+					typeof content === "string" ? content : content.toString("utf8");
+
+				if (data) {
+					data.set("url", { [type]: encodedSource });
+				}
+				return null;
+			}
+			default:
+				return null;
+		}
+	}
+
+	/**
+	 * @param {Error} error the error
+	 * @param {NormalModule} module module for which the code should be generated
+	 * @param {GenerateContext} generateContext context for generate
+	 * @returns {Source | null} generated code
+	 */
+	generateError(error, module, generateContext) {
+		switch (generateContext.type) {
+			case JAVASCRIPT_TYPE: {
+				return new RawSource(
+					`throw new Error(${JSON.stringify(error.message)});`
+				);
+			}
+			default:
+				return null;
+		}
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the bailout reason should be determined
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(module, context) {
+		return undefined;
+	}
+
+	/**
+	 * @param {NormalModule} module fresh module
+	 * @returns {SourceTypes} available types (do not mutate)
+	 */
+	getTypes(module) {
+		/** @type {Set} */
+		const sourceTypes = new Set();
+		const connections = this._moduleGraph.getIncomingConnections(module);
+
+		for (const connection of connections) {
+			if (!connection.originModule) {
+				continue;
+			}
+
+			sourceTypes.add(connection.originModule.type.split("/")[0]);
+		}
+
+		if (sourceTypes.size > 0) {
+			if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
+				return JAVASCRIPT_AND_CSS_URL_TYPES;
+			} else if (sourceTypes.has(CSS_TYPE)) {
+				return CSS_URL_TYPES;
+			}
+			return JAVASCRIPT_TYPES;
+		}
+
+		return NO_TYPES;
+	}
+
+	/**
+	 * @param {NormalModule} module the module
+	 * @param {SourceType=} type source type
+	 * @returns {number} estimate size of the module
+	 */
+	getSize(module, type) {
+		const originalSource = module.originalSource();
+
+		if (!originalSource) {
+			return 0;
+		}
+
+		// Example: m.exports="abcd"
+		return originalSource.size() + 12;
+	}
+}
+
+module.exports = AssetSourceGenerator;
diff --git a/lib/asset/AssetSourceParser.js b/lib/asset/AssetSourceParser.js
new file mode 100644
index 00000000000..c122f0ea4e4
--- /dev/null
+++ b/lib/asset/AssetSourceParser.js
@@ -0,0 +1,37 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Yuta Hiroto @hiroppy
+*/
+
+"use strict";
+
+const Parser = require("../Parser");
+
+/** @typedef {import("../Module").BuildInfo} BuildInfo */
+/** @typedef {import("../Module").BuildMeta} BuildMeta */
+/** @typedef {import("../Parser").ParserState} ParserState */
+/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
+
+class AssetSourceParser extends Parser {
+	/**
+	 * @param {string | Buffer | PreparsedAst} source the source to parse
+	 * @param {ParserState} state the parser state
+	 * @returns {ParserState} the parser state
+	 */
+	parse(source, state) {
+		if (typeof source === "object" && !Buffer.isBuffer(source)) {
+			throw new Error("AssetSourceParser doesn't accept preparsed AST");
+		}
+		const { module } = state;
+		/** @type {BuildInfo} */
+		(module.buildInfo).strict = true;
+		/** @type {BuildMeta} */
+		(module.buildMeta).exportsType = "default";
+		/** @type {BuildMeta} */
+		(state.module.buildMeta).defaultObject = false;
+
+		return state;
+	}
+}
+
+module.exports = AssetSourceParser;
diff --git a/lib/asset/RawDataUrlModule.js b/lib/asset/RawDataUrlModule.js
new file mode 100644
index 00000000000..234dad265b3
--- /dev/null
+++ b/lib/asset/RawDataUrlModule.js
@@ -0,0 +1,179 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const Module = require("../Module");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("../ModuleSourceTypeConstants");
+const { ASSET_MODULE_TYPE_RAW_DATA_URL } = require("../ModuleTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const makeSerializable = require("../util/makeSerializable");
+
+/** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("../Module").BuildCallback} BuildCallback */
+/** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
+/** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("../Module").Sources} Sources */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../RequestShortener")} RequestShortener */
+/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../util/Hash")} Hash */
+/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
+
+class RawDataUrlModule extends Module {
+	/**
+	 * @param {string} url raw url
+	 * @param {string} identifier unique identifier
+	 * @param {string=} readableIdentifier readable identifier
+	 */
+	constructor(url, identifier, readableIdentifier) {
+		super(ASSET_MODULE_TYPE_RAW_DATA_URL, null);
+		/** @type {string} */
+		this.url = url;
+		/** @type {Buffer | undefined} */
+		this.urlBuffer = url ? Buffer.from(url) : undefined;
+		/** @type {string} */
+		this.identifierStr = identifier;
+		/** @type {string} */
+		this.readableIdentifierStr = readableIdentifier || this.identifierStr;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		return this.identifierStr;
+	}
+
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		if (this.url === undefined) {
+			this.url = /** @type {Buffer} */ (this.urlBuffer).toString();
+		}
+		return Math.max(1, this.url.length);
+	}
+
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		return /** @type {string} */ (
+			requestShortener.shorten(this.readableIdentifierStr)
+		);
+	}
+
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, !this.buildMeta);
+	}
+
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
+		this.buildMeta = {};
+		this.buildInfo = {
+			cacheable: true
+		};
+		callback();
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration(context) {
+		if (this.url === undefined) {
+			this.url = /** @type {Buffer} */ (this.urlBuffer).toString();
+		}
+		/** @type {Sources} */
+		const sources = new Map();
+		sources.set(
+			JAVASCRIPT_TYPE,
+			new RawSource(`module.exports = ${JSON.stringify(this.url)};`)
+		);
+		/** @type {CodeGenerationResultData} */
+		const data = new Map();
+		data.set("url", {
+			javascript: this.url
+		});
+		/** @type {RuntimeRequirements} */
+		const runtimeRequirements = new Set();
+		runtimeRequirements.add(RuntimeGlobals.module);
+		return { sources, runtimeRequirements, data };
+	}
+
+	/**
+	 * @param {Hash} hash the hash used to track dependencies
+	 * @param {UpdateHashContext} context context
+	 * @returns {void}
+	 */
+	updateHash(hash, context) {
+		hash.update(/** @type {Buffer} */ (this.urlBuffer));
+		super.updateHash(hash, context);
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+
+		write(this.urlBuffer);
+		write(this.identifierStr);
+		write(this.readableIdentifierStr);
+
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		const { read } = context;
+
+		this.urlBuffer = read();
+		this.identifierStr = read();
+		this.readableIdentifierStr = read();
+
+		super.deserialize(context);
+	}
+}
+
+makeSerializable(RawDataUrlModule, "webpack/lib/asset/RawDataUrlModule");
+
+module.exports = RawDataUrlModule;
diff --git a/lib/async-modules/AsyncModuleHelpers.js b/lib/async-modules/AsyncModuleHelpers.js
new file mode 100644
index 00000000000..69d94f046a3
--- /dev/null
+++ b/lib/async-modules/AsyncModuleHelpers.js
@@ -0,0 +1,52 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Haijie Xie @hai-x
+*/
+
+"use strict";
+
+const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
+
+/** @typedef {import("../ModuleGraph")} ModuleGraph */
+/** @typedef {import("../Module")} Module */
+
+/** @typedef {Set} Modules */
+
+/**
+ * @param {ModuleGraph} moduleGraph module graph
+ * @param {Module} module module
+ * @returns {Modules} set of modules
+ */
+const getOutgoingAsyncModules = (moduleGraph, module) => {
+	/** @type {Modules} */
+	const set = new Set();
+	/** @type {Modules} */
+	const seen = new Set();
+	(function g(module) {
+		if (!moduleGraph.isAsync(module) || seen.has(module)) return;
+		seen.add(module);
+		if (module.buildMeta && module.buildMeta.async) {
+			set.add(module);
+		} else {
+			const outgoingConnectionMap =
+				moduleGraph.getOutgoingConnectionsByModule(module);
+			if (outgoingConnectionMap) {
+				for (const [module, connections] of outgoingConnectionMap) {
+					if (
+						connections.some(
+							(c) =>
+								c.dependency instanceof HarmonyImportDependency &&
+								c.isTargetActive(undefined)
+						) &&
+						module
+					) {
+						g(module);
+					}
+				}
+			}
+		}
+	})(module);
+	return set;
+};
+
+module.exports.getOutgoingAsyncModules = getOutgoingAsyncModules;
diff --git a/lib/async-modules/AwaitDependenciesInitFragment.js b/lib/async-modules/AwaitDependenciesInitFragment.js
new file mode 100644
index 00000000000..68523d09057
--- /dev/null
+++ b/lib/async-modules/AwaitDependenciesInitFragment.js
@@ -0,0 +1,90 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const InitFragment = require("../InitFragment");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const Template = require("../Template");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../Generator").GenerateContext} GenerateContext */
+
+/** @typedef {Map} Dependencies */
+
+/**
+ * @extends {InitFragment}
+ */
+class AwaitDependenciesInitFragment extends InitFragment {
+	/**
+	 * @param {Dependencies} dependencies maps an import var to an async module that needs to be awaited
+	 */
+	constructor(dependencies) {
+		super(
+			undefined,
+			InitFragment.STAGE_ASYNC_DEPENDENCIES,
+			0,
+			"await-dependencies"
+		);
+		/** @type {Dependencies} */
+		this.dependencies = dependencies;
+	}
+
+	/**
+	 * @param {AwaitDependenciesInitFragment} other other AwaitDependenciesInitFragment
+	 * @returns {AwaitDependenciesInitFragment} AwaitDependenciesInitFragment
+	 */
+	merge(other) {
+		const dependencies = new Map(other.dependencies);
+		for (const [key, value] of this.dependencies) {
+			dependencies.set(key, value);
+		}
+		return new AwaitDependenciesInitFragment(dependencies);
+	}
+
+	/**
+	 * @param {GenerateContext} context context
+	 * @returns {string | Source | undefined} the source code that will be included as initialization code
+	 */
+	getContent({ runtimeRequirements, runtimeTemplate }) {
+		runtimeRequirements.add(RuntimeGlobals.module);
+		if (this.dependencies.size === 0) {
+			return "";
+		}
+
+		const importVars = [...this.dependencies.keys()];
+		const asyncModuleValues = [...this.dependencies.values()].join(", ");
+
+		const templateInput = [
+			`var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${asyncModuleValues}]);`
+		];
+
+		if (
+			this.dependencies.size === 1 ||
+			!runtimeTemplate.supportsDestructuring()
+		) {
+			templateInput.push(
+				"var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);"
+			);
+			for (const [index, importVar] of importVars.entries()) {
+				templateInput.push(
+					`${importVar} = __webpack_async_dependencies_result__[${index}];`
+				);
+			}
+		} else {
+			const importVarsStr = importVars.join(", ");
+
+			templateInput.push(
+				`([${importVarsStr}] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);`
+			);
+		}
+
+		templateInput.push("");
+
+		return Template.asString(templateInput);
+	}
+}
+
+module.exports = AwaitDependenciesInitFragment;
diff --git a/lib/async-modules/InferAsyncModulesPlugin.js b/lib/async-modules/InferAsyncModulesPlugin.js
new file mode 100644
index 00000000000..3ced0bcc63d
--- /dev/null
+++ b/lib/async-modules/InferAsyncModulesPlugin.js
@@ -0,0 +1,54 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
+
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../Module")} Module */
+
+const PLUGIN_NAME = "InferAsyncModulesPlugin";
+
+class InferAsyncModulesPlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			const { moduleGraph } = compilation;
+			compilation.hooks.finishModules.tap(PLUGIN_NAME, (modules) => {
+				/** @type {Set} */
+				const queue = new Set();
+				for (const module of modules) {
+					if (module.buildMeta && module.buildMeta.async) {
+						queue.add(module);
+					}
+				}
+				for (const module of queue) {
+					moduleGraph.setAsync(module);
+					for (const [
+						originModule,
+						connections
+					] of moduleGraph.getIncomingConnectionsByOriginModule(module)) {
+						if (
+							connections.some(
+								(c) =>
+									c.dependency instanceof HarmonyImportDependency &&
+									c.isTargetActive(undefined)
+							)
+						) {
+							queue.add(/** @type {Module} */ (originModule));
+						}
+					}
+				}
+			});
+		});
+	}
+}
+
+module.exports = InferAsyncModulesPlugin;
diff --git a/lib/buildChunkGraph.js b/lib/buildChunkGraph.js
new file mode 100644
index 00000000000..819208ed37a
--- /dev/null
+++ b/lib/buildChunkGraph.js
@@ -0,0 +1,1392 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const AsyncDependencyToInitialChunkError = require("./AsyncDependencyToInitialChunkError");
+const { connectChunkGroupParentAndChild } = require("./GraphHelpers");
+const ModuleGraphConnection = require("./ModuleGraphConnection");
+const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
+
+/** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
+/** @typedef {import("./Chunk")} Chunk */
+/** @typedef {import("./ChunkGroup")} ChunkGroup */
+/** @typedef {import("./Compilation")} Compilation */
+/** @typedef {import("./DependenciesBlock")} DependenciesBlock */
+/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
+/** @typedef {import("./Entrypoint")} Entrypoint */
+/** @typedef {import("./Module")} Module */
+/** @typedef {import("./ModuleGraph")} ModuleGraph */
+/** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
+/** @typedef {import("./logging/Logger").Logger} Logger */
+/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
+
+/**
+ * @typedef {object} QueueItem
+ * @property {number} action
+ * @property {DependenciesBlock} block
+ * @property {Module} module
+ * @property {Chunk} chunk
+ * @property {ChunkGroup} chunkGroup
+ * @property {ChunkGroupInfo} chunkGroupInfo
+ */
+
+/**
+ * @typedef {object} ChunkGroupInfo
+ * @property {ChunkGroup} chunkGroup the chunk group
+ * @property {RuntimeSpec} runtime the runtimes
+ * @property {boolean} initialized is this chunk group initialized
+ * @property {bigint | undefined} minAvailableModules current minimal set of modules available at this point
+ * @property {bigint[]} availableModulesToBeMerged enqueued updates to the minimal set of available modules
+ * @property {Set=} skippedItems modules that were skipped because module is already available in parent chunks (need to reconsider when minAvailableModules is shrinking)
+ * @property {Set<[Module, ModuleGraphConnection[]]>=} skippedModuleConnections referenced modules that where skipped because they were not active in this runtime
+ * @property {bigint | undefined} resultingAvailableModules set of modules available including modules from this chunk group
+ * @property {Set | undefined} children set of children chunk groups, that will be revisited when availableModules shrink
+ * @property {Set | undefined} availableSources set of chunk groups that are the source for minAvailableModules
+ * @property {Set | undefined} availableChildren set of chunk groups which depend on the this chunk group as availableSource
+ * @property {number} preOrderIndex next pre order index
+ * @property {number} postOrderIndex next post order index
+ * @property {boolean} chunkLoading has a chunk loading mechanism
+ * @property {boolean} asyncChunks create async chunks
+ * @property {Module | null} depModule the module that is the dependency of the block
+ * @property {boolean} circular Whether to deduplicate to avoid circular references
+ */
+
+/**
+ * @typedef {object} BlockChunkGroupConnection
+ * @property {ChunkGroupInfo} originChunkGroupInfo origin chunk group
+ * @property {ChunkGroup} chunkGroup referenced chunk group
+ */
+
+/** @typedef {(Module | ConnectionState | ModuleGraphConnection)[]} BlockModulesInTuples */
+/** @typedef {(Module | ConnectionState | ModuleGraphConnection[])[]} BlockModulesInFlattenTuples */
+/** @typedef {Map} BlockModulesMap */
+/** @typedef {Map} MaskByChunk */
+/** @typedef {Set} BlocksWithNestedBlocks */
+/** @typedef {Map} BlockConnections */
+/** @typedef {Map} ChunkGroupInfoMap */
+/** @typedef {Set} AllCreatedChunkGroups */
+/** @typedef {Map} InputEntrypointsAndModules */
+
+const ZERO_BIGINT = BigInt(0);
+const ONE_BIGINT = BigInt(1);
+
+/**
+ * @param {bigint} mask The mask to test
+ * @param {number} ordinal The ordinal of the bit to test
+ * @returns {boolean} If the ordinal-th bit is set in the mask
+ */
+const isOrdinalSetInMask = (mask, ordinal) =>
+	BigInt.asUintN(1, mask >> BigInt(ordinal)) !== ZERO_BIGINT;
+
+/**
+ * @param {ModuleGraphConnection[]} connections list of connections
+ * @param {RuntimeSpec} runtime for which runtime
+ * @returns {ConnectionState} connection state
+ */
+const getActiveStateOfConnections = (connections, runtime) => {
+	let merged = connections[0].getActiveState(runtime);
+	if (merged === true) return true;
+	for (let i = 1; i < connections.length; i++) {
+		const c = connections[i];
+		merged = ModuleGraphConnection.addConnectionStates(
+			merged,
+			c.getActiveState(runtime)
+		);
+		if (merged === true) return true;
+	}
+	return merged;
+};
+
+/**
+ * @param {Module} module module
+ * @param {ModuleGraph} moduleGraph module graph
+ * @param {RuntimeSpec} runtime runtime
+ * @param {BlockModulesMap} blockModulesMap block modules map
+ */
+const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
+	/** @type {DependenciesBlock | undefined} */
+	let blockCache;
+	/** @type {BlockModulesInTuples | undefined} */
+	let modules;
+
+	/** @type {BlockModulesInTuples[]} */
+	const arrays = [];
+
+	/** @type {DependenciesBlock[]} */
+	const queue = [module];
+	while (queue.length > 0) {
+		const block = /** @type {DependenciesBlock} */ (queue.pop());
+		/** @type {Module[]} */
+		const arr = [];
+		arrays.push(arr);
+		blockModulesMap.set(block, arr);
+		for (const b of block.blocks) {
+			queue.push(b);
+		}
+	}
+
+	for (const connection of moduleGraph.getOutgoingConnections(module)) {
+		const d = connection.dependency;
+		// We skip connections without dependency
+		if (!d) continue;
+		const m = connection.module;
+		// We skip connections without Module pointer
+		if (!m) continue;
+		// We skip weak connections
+		if (connection.weak) continue;
+
+		const block = moduleGraph.getParentBlock(d);
+		let index = moduleGraph.getParentBlockIndex(d);
+
+		// deprecated fallback
+		if (index < 0) {
+			index = /** @type {DependenciesBlock} */ (block).dependencies.indexOf(d);
+		}
+
+		if (blockCache !== block) {
+			modules =
+				/** @type {BlockModulesInTuples} */
+				(
+					blockModulesMap.get(
+						(blockCache = /** @type {DependenciesBlock} */ (block))
+					)
+				);
+		}
+
+		const i = index * 3;
+		/** @type {BlockModulesInTuples} */
+		(modules)[i] = m;
+		/** @type {BlockModulesInTuples} */
+		(modules)[i + 1] = connection.getActiveState(runtime);
+		/** @type {BlockModulesInTuples} */
+		(modules)[i + 2] = connection;
+	}
+
+	for (const modules of arrays) {
+		if (modules.length === 0) continue;
+		/** @type {undefined | Map} */
+		let indexMap;
+		let length = 0;
+		outer: for (let j = 0; j < modules.length; j += 3) {
+			const m = modules[j];
+			if (m === undefined) continue;
+			const state = /** @type {ConnectionState} */ (modules[j + 1]);
+			const connection = /** @type {ModuleGraphConnection} */ (modules[j + 2]);
+			if (indexMap === undefined) {
+				let i = 0;
+				for (; i < length; i += 3) {
+					if (modules[i] === m) {
+						const merged = /** @type {ConnectionState} */ (modules[i + 1]);
+						/** @type {ModuleGraphConnection[]} */
+						(/** @type {unknown} */ (modules[i + 2])).push(connection);
+						if (merged === true) continue outer;
+						modules[i + 1] = ModuleGraphConnection.addConnectionStates(
+							merged,
+							state
+						);
+						continue outer;
+					}
+				}
+				modules[length] = m;
+				length++;
+				modules[length] = state;
+				length++;
+				/** @type {ModuleGraphConnection[]} */
+				(/** @type {unknown} */ (modules[length])) = [connection];
+				length++;
+				if (length > 30) {
+					// To avoid worse case performance, we will use an index map for
+					// linear cost access, which allows to maintain O(n) complexity
+					// while keeping allocations down to a minimum
+					indexMap = new Map();
+					for (let i = 0; i < length; i += 3) {
+						indexMap.set(modules[i], i + 1);
+					}
+				}
+			} else {
+				const idx = indexMap.get(m);
+				if (idx !== undefined) {
+					const merged = /** @type {ConnectionState} */ (modules[idx]);
+					/** @type {ModuleGraphConnection[]} */
+					(/** @type {unknown} */ (modules[idx + 1])).push(connection);
+					if (merged === true) continue;
+					modules[idx] = ModuleGraphConnection.addConnectionStates(
+						merged,
+						state
+					);
+				} else {
+					modules[length] = m;
+					length++;
+					modules[length] = state;
+					indexMap.set(m, length);
+					length++;
+					/** @type {ModuleGraphConnection[]} */
+					(
+						/** @type {unknown} */
+						(modules[length])
+					) = [connection];
+					length++;
+				}
+			}
+		}
+		modules.length = length;
+	}
+};
+
+/**
+ * @param {Logger} logger a logger
+ * @param {Compilation} compilation the compilation
+ * @param {InputEntrypointsAndModules} inputEntrypointsAndModules chunk groups which are processed with the modules
+ * @param {ChunkGroupInfoMap} chunkGroupInfoMap mapping from chunk group to available modules
+ * @param {BlockConnections} blockConnections connection for blocks
+ * @param {BlocksWithNestedBlocks} blocksWithNestedBlocks flag for blocks that have nested blocks
+ * @param {AllCreatedChunkGroups} allCreatedChunkGroups filled with all chunk groups that are created here
+ * @param {MaskByChunk} maskByChunk module content mask by chunk
+ */
+const visitModules = (
+	logger,
+	compilation,
+	inputEntrypointsAndModules,
+	chunkGroupInfoMap,
+	blockConnections,
+	blocksWithNestedBlocks,
+	allCreatedChunkGroups,
+	maskByChunk
+) => {
+	const { moduleGraph, chunkGraph, moduleMemCaches } = compilation;
+
+	/** @type {Map} */
+	const blockModulesRuntimeMap = new Map();
+
+	/** @type {BlockModulesMap | undefined} */
+	let blockModulesMap;
+
+	/** @type {Map} */
+	const ordinalByModule = new Map();
+
+	/**
+	 * @param {Module} module The module to look up
+	 * @returns {number} The ordinal of the module in masks
+	 */
+	const getModuleOrdinal = (module) => {
+		let ordinal = ordinalByModule.get(module);
+		if (ordinal === undefined) {
+			ordinal = ordinalByModule.size;
+			ordinalByModule.set(module, ordinal);
+		}
+		return ordinal;
+	};
+
+	for (const chunk of compilation.chunks) {
+		let mask = ZERO_BIGINT;
+		for (const m of chunkGraph.getChunkModulesIterable(chunk)) {
+			mask |= ONE_BIGINT << BigInt(getModuleOrdinal(m));
+		}
+		maskByChunk.set(chunk, mask);
+	}
+
+	/**
+	 * @param {DependenciesBlock} block block
+	 * @param {RuntimeSpec} runtime runtime
+	 * @returns {BlockModulesInFlattenTuples | undefined} block modules in flatten tuples
+	 */
+	const getBlockModules = (block, runtime) => {
+		blockModulesMap = blockModulesRuntimeMap.get(runtime);
+		if (blockModulesMap === undefined) {
+			/** @type {BlockModulesMap} */
+			blockModulesMap = new Map();
+			blockModulesRuntimeMap.set(runtime, blockModulesMap);
+		}
+		let blockModules = blockModulesMap.get(block);
+		if (blockModules !== undefined) return blockModules;
+		const module = /** @type {Module} */ (block.getRootBlock());
+		const memCache = moduleMemCaches && moduleMemCaches.get(module);
+		if (memCache !== undefined) {
+			/** @type {BlockModulesMap} */
+			const map = memCache.provide(
+				"bundleChunkGraph.blockModules",
+				runtime,
+				() => {
+					logger.time("visitModules: prepare");
+					const map = new Map();
+					extractBlockModules(module, moduleGraph, runtime, map);
+					logger.timeAggregate("visitModules: prepare");
+					return map;
+				}
+			);
+			for (const [block, blockModules] of map) {
+				blockModulesMap.set(block, blockModules);
+			}
+			return map.get(block);
+		}
+		logger.time("visitModules: prepare");
+		extractBlockModules(module, moduleGraph, runtime, blockModulesMap);
+		blockModules =
+			/** @type {BlockModulesInFlattenTuples} */
+			(blockModulesMap.get(block));
+		logger.timeAggregate("visitModules: prepare");
+		return blockModules;
+	};
+
+	let statProcessedQueueItems = 0;
+	let statProcessedBlocks = 0;
+	let statConnectedChunkGroups = 0;
+	let statProcessedChunkGroupsForMerging = 0;
+	let statMergedAvailableModuleSets = 0;
+	const statForkedAvailableModules = 0;
+	const statForkedAvailableModulesCount = 0;
+	const statForkedAvailableModulesCountPlus = 0;
+	const statForkedMergedModulesCount = 0;
+	const statForkedMergedModulesCountPlus = 0;
+	const statForkedResultModulesCount = 0;
+	let statChunkGroupInfoUpdated = 0;
+	let statChildChunkGroupsReconnected = 0;
+
+	let nextChunkGroupIndex = 0;
+	let nextFreeModulePreOrderIndex = 0;
+	let nextFreeModulePostOrderIndex = 0;
+
+	/** @type {Map} */
+	const blockChunkGroups = new Map();
+
+	/** @type {Map>} */
+	const blocksByChunkGroups = new Map();
+
+	/** @typedef {Map} NamedChunkGroup */
+
+	/** @type {NamedChunkGroup} */
+	const namedChunkGroups = new Map();
+
+	/** @type {NamedChunkGroup} */
+	const namedAsyncEntrypoints = new Map();
+
+	/** @type {Map} */
+	const depModuleAsyncEntrypoints = new Map();
+
+	/** @type {Set} */
+	const outdatedOrderIndexChunkGroups = new Set();
+
+	const ADD_AND_ENTER_ENTRY_MODULE = 0;
+	const ADD_AND_ENTER_MODULE = 1;
+	const ENTER_MODULE = 2;
+	const PROCESS_BLOCK = 3;
+	const PROCESS_ENTRY_BLOCK = 4;
+	const LEAVE_MODULE = 5;
+
+	/** @type {QueueItem[]} */
+	let queue = [];
+
+	/** @typedef {Set<[ChunkGroupInfo, QueueItem | null]>} ConnectList */
+	/** @type {Map} */
+	const queueConnect = new Map();
+	/** @type {Set} */
+	const chunkGroupsForCombining = new Set();
+
+	// Fill queue with entrypoint modules
+	// Create ChunkGroupInfo for entrypoints
+	for (const [chunkGroup, modules] of inputEntrypointsAndModules) {
+		const runtime = getEntryRuntime(
+			compilation,
+			/** @type {string} */ (chunkGroup.name),
+			chunkGroup.options
+		);
+		/** @type {ChunkGroupInfo} */
+		const chunkGroupInfo = {
+			depModule: null,
+			circular: false,
+			initialized: false,
+			chunkGroup,
+			runtime,
+			minAvailableModules: undefined,
+			availableModulesToBeMerged: [],
+			skippedItems: undefined,
+			resultingAvailableModules: undefined,
+			children: undefined,
+			availableSources: undefined,
+			availableChildren: undefined,
+			preOrderIndex: 0,
+			postOrderIndex: 0,
+			chunkLoading:
+				chunkGroup.options.chunkLoading !== undefined
+					? chunkGroup.options.chunkLoading !== false
+					: compilation.outputOptions.chunkLoading !== false,
+			asyncChunks:
+				chunkGroup.options.asyncChunks !== undefined
+					? chunkGroup.options.asyncChunks
+					: compilation.outputOptions.asyncChunks !== false
+		};
+		chunkGroup.index = nextChunkGroupIndex++;
+		if (chunkGroup.getNumberOfParents() > 0) {
+			// minAvailableModules for child entrypoints are unknown yet, set to undefined.
+			// This means no module is added until other sets are merged into
+			// this minAvailableModules (by the parent entrypoints)
+			const skippedItems = new Set(modules);
+			chunkGroupInfo.skippedItems = skippedItems;
+			chunkGroupsForCombining.add(chunkGroupInfo);
+		} else {
+			// The application may start here: We start with an empty list of available modules
+			chunkGroupInfo.minAvailableModules = ZERO_BIGINT;
+			const chunk = chunkGroup.getEntrypointChunk();
+			for (const module of modules) {
+				queue.push({
+					action: ADD_AND_ENTER_MODULE,
+					block: module,
+					module,
+					chunk,
+					chunkGroup,
+					chunkGroupInfo
+				});
+			}
+		}
+		chunkGroupInfoMap.set(chunkGroup, chunkGroupInfo);
+		if (chunkGroup.name) {
+			namedChunkGroups.set(chunkGroup.name, chunkGroupInfo);
+		}
+	}
+	// Fill availableSources with parent-child dependencies between entrypoints
+	for (const chunkGroupInfo of chunkGroupsForCombining) {
+		const { chunkGroup } = chunkGroupInfo;
+		chunkGroupInfo.availableSources = new Set();
+		for (const parent of chunkGroup.parentsIterable) {
+			const parentChunkGroupInfo =
+				/** @type {ChunkGroupInfo} */
+				(chunkGroupInfoMap.get(parent));
+			chunkGroupInfo.availableSources.add(parentChunkGroupInfo);
+			if (parentChunkGroupInfo.availableChildren === undefined) {
+				parentChunkGroupInfo.availableChildren = new Set();
+			}
+			parentChunkGroupInfo.availableChildren.add(chunkGroupInfo);
+		}
+	}
+	// pop() is used to read from the queue
+	// so it need to be reversed to be iterated in
+	// correct order
+	queue.reverse();
+
+	/** @type {Set} */
+	const outdatedChunkGroupInfo = new Set();
+	/** @type {Set<[ChunkGroupInfo, QueueItem | null]>} */
+	const chunkGroupsForMerging = new Set();
+	/** @type {QueueItem[]} */
+	let queueDelayed = [];
+
+	/** @type {[Module, ModuleGraphConnection[]][]} */
+	const skipConnectionBuffer = [];
+	/** @type {Module[]} */
+	const skipBuffer = [];
+	/** @type {QueueItem[]} */
+	const queueBuffer = [];
+
+	/** @type {Module} */
+	let module;
+	/** @type {Chunk} */
+	let chunk;
+	/** @type {ChunkGroup} */
+	let chunkGroup;
+	/** @type {DependenciesBlock} */
+	let block;
+	/** @type {ChunkGroupInfo} */
+	let chunkGroupInfo;
+
+	// For each async Block in graph
+	/**
+	 * @param {AsyncDependenciesBlock} b iterating over each Async DepBlock
+	 * @returns {void}
+	 */
+	const iteratorBlock = (b) => {
+		// 1. We create a chunk group with single chunk in it for this Block
+		// but only once (blockChunkGroups map)
+		/** @type {ChunkGroupInfo | undefined} */
+		let cgi = blockChunkGroups.get(b);
+		/** @type {ChunkGroup | undefined} */
+		let c;
+		/** @type {Entrypoint | undefined} */
+		let entrypoint;
+		/** @type {Module | null} */
+		const depModule = moduleGraph.getModule(b.dependencies[0]);
+		const entryOptions = b.groupOptions && b.groupOptions.entryOptions;
+		if (cgi === undefined) {
+			const chunkName = (b.groupOptions && b.groupOptions.name) || b.chunkName;
+			if (entryOptions) {
+				cgi = namedAsyncEntrypoints.get(/** @type {string} */ (chunkName));
+				if (!cgi && !b.circular && depModule) {
+					cgi = depModuleAsyncEntrypoints.get(depModule);
+				}
+				if (!cgi) {
+					entrypoint = compilation.addAsyncEntrypoint(
+						entryOptions,
+						module,
+						/** @type {DependencyLocation} */ (b.loc),
+						/** @type {string} */ (b.request)
+					);
+					maskByChunk.set(entrypoint.chunks[0], ZERO_BIGINT);
+					entrypoint.index = nextChunkGroupIndex++;
+					cgi = {
+						depModule,
+						circular: b.circular,
+						chunkGroup: entrypoint,
+						initialized: false,
+						runtime:
+							entrypoint.options.runtime ||
+							/** @type {string | undefined} */ (entrypoint.name),
+						minAvailableModules: ZERO_BIGINT,
+						availableModulesToBeMerged: [],
+						skippedItems: undefined,
+						resultingAvailableModules: undefined,
+						children: undefined,
+						availableSources: undefined,
+						availableChildren: undefined,
+						preOrderIndex: 0,
+						postOrderIndex: 0,
+						chunkLoading:
+							entryOptions.chunkLoading !== undefined
+								? entryOptions.chunkLoading !== false
+								: chunkGroupInfo.chunkLoading,
+						asyncChunks:
+							entryOptions.asyncChunks !== undefined
+								? entryOptions.asyncChunks
+								: chunkGroupInfo.asyncChunks
+					};
+					chunkGroupInfoMap.set(
+						entrypoint,
+						/** @type {ChunkGroupInfo} */
+						(cgi)
+					);
+
+					chunkGraph.connectBlockAndChunkGroup(b, entrypoint);
+					if (chunkName) {
+						namedAsyncEntrypoints.set(
+							chunkName,
+							/** @type {ChunkGroupInfo} */
+							(cgi)
+						);
+					}
+					if (!b.circular && depModule) {
+						depModuleAsyncEntrypoints.set(
+							depModule,
+							/** @type {ChunkGroupInfo} */ (cgi)
+						);
+					}
+				} else {
+					entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
+					// TODO merge entryOptions
+					entrypoint.addOrigin(
+						module,
+						/** @type {DependencyLocation} */ (b.loc),
+						/** @type {string} */ (b.request)
+					);
+					chunkGraph.connectBlockAndChunkGroup(b, entrypoint);
+				}
+
+				// 2. We enqueue the DependenciesBlock for traversal
+				queueDelayed.push({
+					action: PROCESS_ENTRY_BLOCK,
+					block: b,
+					module,
+					chunk: entrypoint.chunks[0],
+					chunkGroup: entrypoint,
+					chunkGroupInfo: /** @type {ChunkGroupInfo} */ (cgi)
+				});
+			} else if (!chunkGroupInfo.asyncChunks || !chunkGroupInfo.chunkLoading) {
+				// Just queue the block into the current chunk group
+				queue.push({
+					action: PROCESS_BLOCK,
+					block: b,
+					module,
+					chunk,
+					chunkGroup,
+					chunkGroupInfo
+				});
+			} else {
+				cgi = chunkName ? namedChunkGroups.get(chunkName) : undefined;
+				if (!cgi) {
+					c = compilation.addChunkInGroup(
+						b.groupOptions || b.chunkName,
+						module,
+						/** @type {DependencyLocation} */ (b.loc),
+						/** @type {string} */ (b.request)
+					);
+					maskByChunk.set(c.chunks[0], ZERO_BIGINT);
+					c.index = nextChunkGroupIndex++;
+					cgi = {
+						depModule,
+						circular: b.circular,
+						initialized: false,
+						chunkGroup: c,
+						runtime: chunkGroupInfo.runtime,
+						minAvailableModules: undefined,
+						availableModulesToBeMerged: [],
+						skippedItems: undefined,
+						resultingAvailableModules: undefined,
+						children: undefined,
+						availableSources: undefined,
+						availableChildren: undefined,
+						preOrderIndex: 0,
+						postOrderIndex: 0,
+						chunkLoading: chunkGroupInfo.chunkLoading,
+						asyncChunks: chunkGroupInfo.asyncChunks
+					};
+					allCreatedChunkGroups.add(c);
+					chunkGroupInfoMap.set(c, cgi);
+					if (chunkName) {
+						namedChunkGroups.set(chunkName, cgi);
+					}
+				} else {
+					c = cgi.chunkGroup;
+					if (c.isInitial()) {
+						compilation.errors.push(
+							new AsyncDependencyToInitialChunkError(
+								/** @type {string} */ (chunkName),
+								module,
+								/** @type {DependencyLocation} */ (b.loc)
+							)
+						);
+						c = chunkGroup;
+					} else {
+						c.addOptions(b.groupOptions);
+					}
+					c.addOrigin(
+						module,
+						/** @type {DependencyLocation} */ (b.loc),
+						/** @type {string} */ (b.request)
+					);
+				}
+				blockConnections.set(b, []);
+			}
+			blockChunkGroups.set(b, /** @type {ChunkGroupInfo} */ (cgi));
+		} else if (entryOptions) {
+			entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
+		} else {
+			c = cgi.chunkGroup;
+		}
+
+		if (c !== undefined) {
+			// 2. We store the connection for the block
+			// to connect it later if needed
+			/** @type {BlockChunkGroupConnection[]} */
+			(blockConnections.get(b)).push({
+				originChunkGroupInfo: chunkGroupInfo,
+				chunkGroup: c
+			});
+
+			// 3. We enqueue the chunk group info creation/updating
+			let connectList = queueConnect.get(chunkGroupInfo);
+			if (connectList === undefined) {
+				/** @type {ConnectList} */
+				connectList = new Set();
+				queueConnect.set(chunkGroupInfo, connectList);
+			}
+			connectList.add([
+				/** @type {ChunkGroupInfo} */ (cgi),
+				{
+					action: PROCESS_BLOCK,
+					block: b,
+					module,
+					chunk: c.chunks[0],
+					chunkGroup: c,
+					chunkGroupInfo: /** @type {ChunkGroupInfo} */ (cgi)
+				}
+			]);
+		} else if (
+			entrypoint !== undefined &&
+			(chunkGroupInfo.circular || chunkGroupInfo.depModule !== depModule)
+		) {
+			chunkGroupInfo.chunkGroup.addAsyncEntrypoint(entrypoint);
+		}
+	};
+
+	/**
+	 * @param {DependenciesBlock} block the block
+	 * @returns {void}
+	 */
+	const processBlock = (block) => {
+		statProcessedBlocks++;
+		// get prepared block info
+		const blockModules = getBlockModules(block, chunkGroupInfo.runtime);
+
+		if (blockModules !== undefined) {
+			const minAvailableModules =
+				/** @type {bigint} */
+				(chunkGroupInfo.minAvailableModules);
+			// Buffer items because order need to be reversed to get indices correct
+			// Traverse all referenced modules
+			for (let i = 0, len = blockModules.length; i < len; i += 3) {
+				const refModule = /** @type {Module} */ (blockModules[i]);
+				// For single comparisons this might be cheaper
+				const isModuleInChunk = chunkGraph.isModuleInChunk(refModule, chunk);
+
+				if (isModuleInChunk) {
+					// skip early if already connected
+					continue;
+				}
+
+				const refOrdinal = /** @type {number} */ getModuleOrdinal(refModule);
+				const activeState = /** @type {ConnectionState} */ (
+					blockModules[i + 1]
+				);
+				if (activeState !== true) {
+					const connections = /** @type {ModuleGraphConnection[]} */ (
+						blockModules[i + 2]
+					);
+					skipConnectionBuffer.push([refModule, connections]);
+					// We skip inactive connections
+					if (activeState === false) continue;
+				} else if (isOrdinalSetInMask(minAvailableModules, refOrdinal)) {
+					// already in parent chunks, skip it for now
+					skipBuffer.push(refModule);
+					continue;
+				}
+				// enqueue, then add and enter to be in the correct order
+				// this is relevant with circular dependencies
+				queueBuffer.push({
+					action: activeState === true ? ADD_AND_ENTER_MODULE : PROCESS_BLOCK,
+					block: refModule,
+					module: refModule,
+					chunk,
+					chunkGroup,
+					chunkGroupInfo
+				});
+			}
+			// Add buffered items in reverse order
+			if (skipConnectionBuffer.length > 0) {
+				let { skippedModuleConnections } = chunkGroupInfo;
+				if (skippedModuleConnections === undefined) {
+					chunkGroupInfo.skippedModuleConnections = skippedModuleConnections =
+						new Set();
+				}
+				for (let i = skipConnectionBuffer.length - 1; i >= 0; i--) {
+					skippedModuleConnections.add(skipConnectionBuffer[i]);
+				}
+				skipConnectionBuffer.length = 0;
+			}
+			if (skipBuffer.length > 0) {
+				let { skippedItems } = chunkGroupInfo;
+				if (skippedItems === undefined) {
+					chunkGroupInfo.skippedItems = skippedItems = new Set();
+				}
+				for (let i = skipBuffer.length - 1; i >= 0; i--) {
+					skippedItems.add(skipBuffer[i]);
+				}
+				skipBuffer.length = 0;
+			}
+			if (queueBuffer.length > 0) {
+				for (let i = queueBuffer.length - 1; i >= 0; i--) {
+					queue.push(queueBuffer[i]);
+				}
+				queueBuffer.length = 0;
+			}
+		}
+
+		// Traverse all Blocks
+		for (const b of block.blocks) {
+			iteratorBlock(b);
+		}
+
+		if (block.blocks.length > 0 && module !== block) {
+			blocksWithNestedBlocks.add(block);
+		}
+	};
+
+	/**
+	 * @param {DependenciesBlock} block the block
+	 * @returns {void}
+	 */
+	const processEntryBlock = (block) => {
+		statProcessedBlocks++;
+		// get prepared block info
+		const blockModules = getBlockModules(block, chunkGroupInfo.runtime);
+
+		if (blockModules !== undefined) {
+			// Traverse all referenced modules in reverse order
+			for (let i = blockModules.length - 3; i >= 0; i -= 3) {
+				const refModule = /** @type {Module} */ (blockModules[i]);
+				const activeState = /** @type {ConnectionState} */ (
+					blockModules[i + 1]
+				);
+				// enqueue, then add and enter to be in the correct order
+				// this is relevant with circular dependencies
+				queue.push({
+					action:
+						activeState === true ? ADD_AND_ENTER_ENTRY_MODULE : PROCESS_BLOCK,
+					block: refModule,
+					module: refModule,
+					chunk,
+					chunkGroup,
+					chunkGroupInfo
+				});
+			}
+		}
+
+		// Traverse all Blocks
+		for (const b of block.blocks) {
+			iteratorBlock(b);
+		}
+
+		if (block.blocks.length > 0 && module !== block) {
+			blocksWithNestedBlocks.add(block);
+		}
+	};
+
+	const processQueue = () => {
+		while (queue.length) {
+			statProcessedQueueItems++;
+			const queueItem = /** @type {QueueItem} */ (queue.pop());
+			module = queueItem.module;
+			block = queueItem.block;
+			chunk = queueItem.chunk;
+			chunkGroup = queueItem.chunkGroup;
+			chunkGroupInfo = queueItem.chunkGroupInfo;
+
+			switch (queueItem.action) {
+				case ADD_AND_ENTER_ENTRY_MODULE:
+					chunkGraph.connectChunkAndEntryModule(
+						chunk,
+						module,
+						/** @type {Entrypoint} */ (chunkGroup)
+					);
+				// fallthrough
+				case ADD_AND_ENTER_MODULE: {
+					const isModuleInChunk = chunkGraph.isModuleInChunk(module, chunk);
+
+					if (isModuleInChunk) {
+						// already connected, skip it
+						break;
+					}
+					// We connect Module and Chunk
+					chunkGraph.connectChunkAndModule(chunk, module);
+					const moduleOrdinal = getModuleOrdinal(module);
+					let chunkMask = /** @type {bigint} */ (maskByChunk.get(chunk));
+					chunkMask |= ONE_BIGINT << BigInt(moduleOrdinal);
+					maskByChunk.set(chunk, chunkMask);
+				}
+				// fallthrough
+				case ENTER_MODULE: {
+					const index = chunkGroup.getModulePreOrderIndex(module);
+					if (index === undefined) {
+						chunkGroup.setModulePreOrderIndex(
+							module,
+							chunkGroupInfo.preOrderIndex++
+						);
+					}
+
+					if (
+						moduleGraph.setPreOrderIndexIfUnset(
+							module,
+							nextFreeModulePreOrderIndex
+						)
+					) {
+						nextFreeModulePreOrderIndex++;
+					}
+
+					// reuse queueItem
+					queueItem.action = LEAVE_MODULE;
+					queue.push(queueItem);
+				}
+				// fallthrough
+				case PROCESS_BLOCK: {
+					processBlock(block);
+					break;
+				}
+				case PROCESS_ENTRY_BLOCK: {
+					processEntryBlock(block);
+					break;
+				}
+				case LEAVE_MODULE: {
+					const index = chunkGroup.getModulePostOrderIndex(module);
+					if (index === undefined) {
+						chunkGroup.setModulePostOrderIndex(
+							module,
+							chunkGroupInfo.postOrderIndex++
+						);
+					}
+
+					if (
+						moduleGraph.setPostOrderIndexIfUnset(
+							module,
+							nextFreeModulePostOrderIndex
+						)
+					) {
+						nextFreeModulePostOrderIndex++;
+					}
+					break;
+				}
+			}
+		}
+	};
+
+	/**
+	 * @param {ChunkGroupInfo} chunkGroupInfo The info object for the chunk group
+	 * @returns {bigint} The mask of available modules after the chunk group
+	 */
+	const calculateResultingAvailableModules = (chunkGroupInfo) => {
+		if (chunkGroupInfo.resultingAvailableModules !== undefined) {
+			return chunkGroupInfo.resultingAvailableModules;
+		}
+
+		let resultingAvailableModules = /** @type {bigint} */ (
+			chunkGroupInfo.minAvailableModules
+		);
+
+		// add the modules from the chunk group to the set
+		for (const chunk of chunkGroupInfo.chunkGroup.chunks) {
+			const mask = /** @type {bigint} */ (maskByChunk.get(chunk));
+			resultingAvailableModules |= mask;
+		}
+
+		return (chunkGroupInfo.resultingAvailableModules =
+			resultingAvailableModules);
+	};
+
+	const processConnectQueue = () => {
+		// Figure out new parents for chunk groups
+		// to get new available modules for these children
+		for (const [chunkGroupInfo, targets] of queueConnect) {
+			// 1. Add new targets to the list of children
+			if (chunkGroupInfo.children === undefined) {
+				chunkGroupInfo.children = new Set();
+			}
+			for (const [target] of targets) {
+				chunkGroupInfo.children.add(target);
+			}
+
+			// 2. Calculate resulting available modules
+			const resultingAvailableModules =
+				calculateResultingAvailableModules(chunkGroupInfo);
+
+			const runtime = chunkGroupInfo.runtime;
+
+			// 3. Update chunk group info
+			for (const [target, processBlock] of targets) {
+				target.availableModulesToBeMerged.push(resultingAvailableModules);
+				chunkGroupsForMerging.add([target, processBlock]);
+				const oldRuntime = target.runtime;
+				const newRuntime = mergeRuntime(oldRuntime, runtime);
+				if (oldRuntime !== newRuntime) {
+					target.runtime = newRuntime;
+					outdatedChunkGroupInfo.add(target);
+				}
+			}
+
+			statConnectedChunkGroups += targets.size;
+		}
+		queueConnect.clear();
+	};
+
+	const processChunkGroupsForMerging = () => {
+		statProcessedChunkGroupsForMerging += chunkGroupsForMerging.size;
+
+		// Execute the merge
+		for (const [info, processBlock] of chunkGroupsForMerging) {
+			const availableModulesToBeMerged = info.availableModulesToBeMerged;
+			const cachedMinAvailableModules = info.minAvailableModules;
+			let minAvailableModules = cachedMinAvailableModules;
+
+			statMergedAvailableModuleSets += availableModulesToBeMerged.length;
+
+			for (const availableModules of availableModulesToBeMerged) {
+				if (minAvailableModules === undefined) {
+					minAvailableModules = availableModules;
+				} else {
+					minAvailableModules &= availableModules;
+				}
+			}
+
+			const changed = minAvailableModules !== cachedMinAvailableModules;
+
+			availableModulesToBeMerged.length = 0;
+			if (changed) {
+				info.minAvailableModules = minAvailableModules;
+				info.resultingAvailableModules = undefined;
+				outdatedChunkGroupInfo.add(info);
+			}
+
+			if (processBlock) {
+				let blocks = blocksByChunkGroups.get(info);
+				if (!blocks) {
+					blocksByChunkGroups.set(info, (blocks = new Set()));
+				}
+
+				// Whether to walk block depends on minAvailableModules and input block.
+				// We can treat creating chunk group as a function with 2 input, entry block and minAvailableModules
+				// If input is the same, we can skip re-walk
+				let needWalkBlock = !info.initialized || changed;
+				if (!blocks.has(processBlock.block)) {
+					needWalkBlock = true;
+					blocks.add(processBlock.block);
+				}
+
+				if (needWalkBlock) {
+					info.initialized = true;
+					queueDelayed.push(processBlock);
+				}
+			}
+		}
+		chunkGroupsForMerging.clear();
+	};
+
+	const processChunkGroupsForCombining = () => {
+		for (const info of chunkGroupsForCombining) {
+			for (const source of /** @type {Set} */ (
+				info.availableSources
+			)) {
+				if (source.minAvailableModules === undefined) {
+					chunkGroupsForCombining.delete(info);
+					break;
+				}
+			}
+		}
+
+		for (const info of chunkGroupsForCombining) {
+			let availableModules = ZERO_BIGINT;
+			// combine minAvailableModules from all resultingAvailableModules
+			for (const source of /** @type {Set} */ (
+				info.availableSources
+			)) {
+				const resultingAvailableModules =
+					calculateResultingAvailableModules(source);
+				availableModules |= resultingAvailableModules;
+			}
+			info.minAvailableModules = availableModules;
+			info.resultingAvailableModules = undefined;
+			outdatedChunkGroupInfo.add(info);
+		}
+		chunkGroupsForCombining.clear();
+	};
+
+	const processOutdatedChunkGroupInfo = () => {
+		statChunkGroupInfoUpdated += outdatedChunkGroupInfo.size;
+		// Revisit skipped elements
+		for (const info of outdatedChunkGroupInfo) {
+			// 1. Reconsider skipped items
+			if (info.skippedItems !== undefined) {
+				const minAvailableModules =
+					/** @type {bigint} */
+					(info.minAvailableModules);
+				for (const module of info.skippedItems) {
+					const ordinal = getModuleOrdinal(module);
+					if (!isOrdinalSetInMask(minAvailableModules, ordinal)) {
+						queue.push({
+							action: ADD_AND_ENTER_MODULE,
+							block: module,
+							module,
+							chunk: info.chunkGroup.chunks[0],
+							chunkGroup: info.chunkGroup,
+							chunkGroupInfo: info
+						});
+						info.skippedItems.delete(module);
+					}
+				}
+			}
+
+			// 2. Reconsider skipped connections
+			if (info.skippedModuleConnections !== undefined) {
+				const minAvailableModules =
+					/** @type {bigint} */
+					(info.minAvailableModules);
+				for (const entry of info.skippedModuleConnections) {
+					const [module, connections] = entry;
+					const activeState = getActiveStateOfConnections(
+						connections,
+						info.runtime
+					);
+					if (activeState === false) continue;
+					if (activeState === true) {
+						const ordinal = getModuleOrdinal(module);
+						info.skippedModuleConnections.delete(entry);
+						if (isOrdinalSetInMask(minAvailableModules, ordinal)) {
+							/** @type {NonNullable} */
+							(info.skippedItems).add(module);
+							continue;
+						}
+					}
+					queue.push({
+						action: activeState === true ? ADD_AND_ENTER_MODULE : PROCESS_BLOCK,
+						block: module,
+						module,
+						chunk: info.chunkGroup.chunks[0],
+						chunkGroup: info.chunkGroup,
+						chunkGroupInfo: info
+					});
+				}
+			}
+
+			// 2. Reconsider children chunk groups
+			if (info.children !== undefined) {
+				statChildChunkGroupsReconnected += info.children.size;
+				for (const cgi of info.children) {
+					let connectList = queueConnect.get(info);
+					if (connectList === undefined) {
+						/** @type {ConnectList} */
+						connectList = new Set();
+						queueConnect.set(info, connectList);
+					}
+					connectList.add([cgi, null]);
+				}
+			}
+
+			// 3. Reconsider chunk groups for combining
+			if (info.availableChildren !== undefined) {
+				for (const cgi of info.availableChildren) {
+					chunkGroupsForCombining.add(cgi);
+				}
+			}
+			outdatedOrderIndexChunkGroups.add(info);
+		}
+		outdatedChunkGroupInfo.clear();
+	};
+
+	// Iterative traversal of the Module graph
+	// Recursive would be simpler to write but could result in Stack Overflows
+	while (queue.length || queueConnect.size) {
+		logger.time("visitModules: visiting");
+		processQueue();
+		logger.timeAggregateEnd("visitModules: prepare");
+		logger.timeEnd("visitModules: visiting");
+
+		if (chunkGroupsForCombining.size > 0) {
+			logger.time("visitModules: combine available modules");
+			processChunkGroupsForCombining();
+			logger.timeEnd("visitModules: combine available modules");
+		}
+
+		if (queueConnect.size > 0) {
+			logger.time("visitModules: calculating available modules");
+			processConnectQueue();
+			logger.timeEnd("visitModules: calculating available modules");
+
+			if (chunkGroupsForMerging.size > 0) {
+				logger.time("visitModules: merging available modules");
+				processChunkGroupsForMerging();
+				logger.timeEnd("visitModules: merging available modules");
+			}
+		}
+
+		if (outdatedChunkGroupInfo.size > 0) {
+			logger.time("visitModules: check modules for revisit");
+			processOutdatedChunkGroupInfo();
+			logger.timeEnd("visitModules: check modules for revisit");
+		}
+
+		// Run queueDelayed when all items of the queue are processed
+		// This is important to get the global indexing correct
+		// Async blocks should be processed after all sync blocks are processed
+		if (queue.length === 0) {
+			const tempQueue = queue;
+			queue = queueDelayed.reverse();
+			queueDelayed = tempQueue;
+		}
+	}
+
+	for (const info of outdatedOrderIndexChunkGroups) {
+		const { chunkGroup, runtime } = info;
+
+		const blocks = blocksByChunkGroups.get(info);
+
+		if (!blocks) {
+			continue;
+		}
+
+		for (const block of blocks) {
+			let preOrderIndex = 0;
+			let postOrderIndex = 0;
+			/**
+			 * @param {DependenciesBlock} current current
+			 * @param {BlocksWithNestedBlocks} visited visited dependencies blocks
+			 */
+			const process = (current, visited) => {
+				const blockModules =
+					/** @type {BlockModulesInFlattenTuples} */
+					(getBlockModules(current, runtime));
+				for (let i = 0, len = blockModules.length; i < len; i += 3) {
+					const activeState = /** @type {ConnectionState} */ (
+						blockModules[i + 1]
+					);
+					if (activeState === false) {
+						continue;
+					}
+					const refModule = /** @type {Module} */ (blockModules[i]);
+					if (visited.has(refModule)) {
+						continue;
+					}
+
+					visited.add(refModule);
+
+					if (refModule) {
+						chunkGroup.setModulePreOrderIndex(refModule, preOrderIndex++);
+						process(refModule, visited);
+						chunkGroup.setModulePostOrderIndex(refModule, postOrderIndex++);
+					}
+				}
+			};
+			process(block, new Set());
+		}
+	}
+	outdatedOrderIndexChunkGroups.clear();
+	ordinalByModule.clear();
+
+	logger.log(
+		`${statProcessedQueueItems} queue items processed (${statProcessedBlocks} blocks)`
+	);
+	logger.log(`${statConnectedChunkGroups} chunk groups connected`);
+	logger.log(
+		`${statProcessedChunkGroupsForMerging} chunk groups processed for merging (${statMergedAvailableModuleSets} module sets, ${statForkedAvailableModules} forked, ${statForkedAvailableModulesCount} + ${statForkedAvailableModulesCountPlus} modules forked, ${statForkedMergedModulesCount} + ${statForkedMergedModulesCountPlus} modules merged into fork, ${statForkedResultModulesCount} resulting modules)`
+	);
+	logger.log(
+		`${statChunkGroupInfoUpdated} chunk group info updated (${statChildChunkGroupsReconnected} already connected chunk groups reconnected)`
+	);
+};
+
+/**
+ * @param {Compilation} compilation the compilation
+ * @param {BlocksWithNestedBlocks} blocksWithNestedBlocks flag for blocks that have nested blocks
+ * @param {BlockConnections} blockConnections connection for blocks
+ * @param {MaskByChunk} maskByChunk mapping from chunk to module mask
+ */
+const connectChunkGroups = (
+	compilation,
+	blocksWithNestedBlocks,
+	blockConnections,
+	maskByChunk
+) => {
+	const { chunkGraph } = compilation;
+
+	/**
+	 * Helper function to check if all modules of a chunk are available
+	 * @param {ChunkGroup} chunkGroup the chunkGroup to scan
+	 * @param {bigint} availableModules the comparator set
+	 * @returns {boolean} return true if all modules of a chunk are available
+	 */
+	const areModulesAvailable = (chunkGroup, availableModules) => {
+		for (const chunk of chunkGroup.chunks) {
+			const chunkMask = /** @type {bigint} */ (maskByChunk.get(chunk));
+			if ((chunkMask & availableModules) !== chunkMask) return false;
+		}
+		return true;
+	};
+
+	// For each edge in the basic chunk graph
+	for (const [block, connections] of blockConnections) {
+		// 1. Check if connection is needed
+		// When none of the dependencies need to be connected
+		// we can skip all of them
+		// It's not possible to filter each item so it doesn't create inconsistent
+		// connections and modules can only create one version
+		// TODO maybe decide this per runtime
+		if (
+			// TODO is this needed?
+			!blocksWithNestedBlocks.has(block) &&
+			connections.every(({ chunkGroup, originChunkGroupInfo }) =>
+				areModulesAvailable(
+					chunkGroup,
+					/** @type {bigint} */ (originChunkGroupInfo.resultingAvailableModules)
+				)
+			)
+		) {
+			continue;
+		}
+
+		// 2. Foreach edge
+		for (let i = 0; i < connections.length; i++) {
+			const { chunkGroup, originChunkGroupInfo } = connections[i];
+
+			// 3. Connect block with chunk
+			chunkGraph.connectBlockAndChunkGroup(block, chunkGroup);
+
+			// 4. Connect chunk with parent
+			connectChunkGroupParentAndChild(
+				originChunkGroupInfo.chunkGroup,
+				chunkGroup
+			);
+		}
+	}
+};
+
+/**
+ * Remove all unconnected chunk groups
+ * @param {Compilation} compilation the compilation
+ * @param {Iterable} allCreatedChunkGroups all chunk groups that where created before
+ */
+const cleanupUnconnectedGroups = (compilation, allCreatedChunkGroups) => {
+	const { chunkGraph } = compilation;
+
+	for (const chunkGroup of allCreatedChunkGroups) {
+		if (chunkGroup.getNumberOfParents() === 0) {
+			for (const chunk of chunkGroup.chunks) {
+				compilation.chunks.delete(chunk);
+				chunkGraph.disconnectChunk(chunk);
+			}
+			chunkGraph.disconnectChunkGroup(chunkGroup);
+			chunkGroup.remove();
+		}
+	}
+};
+
+/**
+ * This method creates the Chunk graph from the Module graph
+ * @param {Compilation} compilation the compilation
+ * @param {InputEntrypointsAndModules} inputEntrypointsAndModules chunk groups which are processed with the modules
+ * @returns {void}
+ */
+const buildChunkGraph = (compilation, inputEntrypointsAndModules) => {
+	const logger = compilation.getLogger("webpack.buildChunkGraph");
+
+	// SHARED STATE
+
+	/** @type {BlockConnections} */
+	const blockConnections = new Map();
+
+	/** @type {AllCreatedChunkGroups} */
+	const allCreatedChunkGroups = new Set();
+
+	/** @type {ChunkGroupInfoMap} */
+	const chunkGroupInfoMap = new Map();
+
+	/** @type {BlocksWithNestedBlocks} */
+	const blocksWithNestedBlocks = new Set();
+
+	/** @type {MaskByChunk} */
+	const maskByChunk = new Map();
+
+	// PART ONE
+
+	logger.time("visitModules");
+	visitModules(
+		logger,
+		compilation,
+		inputEntrypointsAndModules,
+		chunkGroupInfoMap,
+		blockConnections,
+		blocksWithNestedBlocks,
+		allCreatedChunkGroups,
+		maskByChunk
+	);
+	logger.timeEnd("visitModules");
+
+	// PART TWO
+
+	logger.time("connectChunkGroups");
+	connectChunkGroups(
+		compilation,
+		blocksWithNestedBlocks,
+		blockConnections,
+		maskByChunk
+	);
+	logger.timeEnd("connectChunkGroups");
+
+	for (const [chunkGroup, chunkGroupInfo] of chunkGroupInfoMap) {
+		for (const chunk of chunkGroup.chunks) {
+			chunk.runtime = mergeRuntime(chunk.runtime, chunkGroupInfo.runtime);
+		}
+	}
+
+	// Cleanup work
+
+	logger.time("cleanup");
+	cleanupUnconnectedGroups(compilation, allCreatedChunkGroups);
+	logger.timeEnd("cleanup");
+};
+
+module.exports = buildChunkGraph;
diff --git a/lib/cache/AddBuildDependenciesPlugin.js b/lib/cache/AddBuildDependenciesPlugin.js
new file mode 100644
index 00000000000..7d271e26a5d
--- /dev/null
+++ b/lib/cache/AddBuildDependenciesPlugin.js
@@ -0,0 +1,32 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("../Compiler")} Compiler */
+
+const PLUGIN_NAME = "AddBuildDependenciesPlugin";
+
+class AddBuildDependenciesPlugin {
+	/**
+	 * @param {Iterable} buildDependencies list of build dependencies
+	 */
+	constructor(buildDependencies) {
+		this.buildDependencies = new Set(buildDependencies);
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
+			compilation.buildDependencies.addAll(this.buildDependencies);
+		});
+	}
+}
+
+module.exports = AddBuildDependenciesPlugin;
diff --git a/lib/cache/AddManagedPathsPlugin.js b/lib/cache/AddManagedPathsPlugin.js
new file mode 100644
index 00000000000..d8e860f5272
--- /dev/null
+++ b/lib/cache/AddManagedPathsPlugin.js
@@ -0,0 +1,40 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("../Compiler")} Compiler */
+
+class AddManagedPathsPlugin {
+	/**
+	 * @param {Iterable} managedPaths list of managed paths
+	 * @param {Iterable} immutablePaths list of immutable paths
+	 * @param {Iterable} unmanagedPaths list of unmanaged paths
+	 */
+	constructor(managedPaths, immutablePaths, unmanagedPaths) {
+		this.managedPaths = new Set(managedPaths);
+		this.immutablePaths = new Set(immutablePaths);
+		this.unmanagedPaths = new Set(unmanagedPaths);
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		for (const managedPath of this.managedPaths) {
+			compiler.managedPaths.add(managedPath);
+		}
+		for (const immutablePath of this.immutablePaths) {
+			compiler.immutablePaths.add(immutablePath);
+		}
+		for (const unmanagedPath of this.unmanagedPaths) {
+			compiler.unmanagedPaths.add(unmanagedPath);
+		}
+	}
+}
+
+module.exports = AddManagedPathsPlugin;
diff --git a/lib/cache/IdleFileCachePlugin.js b/lib/cache/IdleFileCachePlugin.js
new file mode 100644
index 00000000000..78ef83b9964
--- /dev/null
+++ b/lib/cache/IdleFileCachePlugin.js
@@ -0,0 +1,242 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const Cache = require("../Cache");
+const ProgressPlugin = require("../ProgressPlugin");
+
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("./PackFileCacheStrategy")} PackFileCacheStrategy */
+
+const BUILD_DEPENDENCIES_KEY = Symbol("build dependencies key");
+const PLUGIN_NAME = "IdleFileCachePlugin";
+
+class IdleFileCachePlugin {
+	/**
+	 * @param {PackFileCacheStrategy} strategy cache strategy
+	 * @param {number} idleTimeout timeout
+	 * @param {number} idleTimeoutForInitialStore initial timeout
+	 * @param {number} idleTimeoutAfterLargeChanges timeout after changes
+	 */
+	constructor(
+		strategy,
+		idleTimeout,
+		idleTimeoutForInitialStore,
+		idleTimeoutAfterLargeChanges
+	) {
+		this.strategy = strategy;
+		this.idleTimeout = idleTimeout;
+		this.idleTimeoutForInitialStore = idleTimeoutForInitialStore;
+		this.idleTimeoutAfterLargeChanges = idleTimeoutAfterLargeChanges;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		const strategy = this.strategy;
+		const idleTimeout = this.idleTimeout;
+		const idleTimeoutForInitialStore = Math.min(
+			idleTimeout,
+			this.idleTimeoutForInitialStore
+		);
+		const idleTimeoutAfterLargeChanges = this.idleTimeoutAfterLargeChanges;
+		const resolvedPromise = Promise.resolve();
+
+		let timeSpendInBuild = 0;
+		let timeSpendInStore = 0;
+		let avgTimeSpendInStore = 0;
+
+		/** @type {Map Promise>} */
+		const pendingIdleTasks = new Map();
+
+		compiler.cache.hooks.store.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_DISK },
+			(identifier, etag, data) => {
+				pendingIdleTasks.set(identifier, () =>
+					strategy.store(identifier, etag, data)
+				);
+			}
+		);
+
+		compiler.cache.hooks.get.tapPromise(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_DISK },
+			(identifier, etag, gotHandlers) => {
+				const restore = () =>
+					strategy.restore(identifier, etag).then((cacheEntry) => {
+						if (cacheEntry === undefined) {
+							gotHandlers.push((result, callback) => {
+								if (result !== undefined) {
+									pendingIdleTasks.set(identifier, () =>
+										strategy.store(identifier, etag, result)
+									);
+								}
+								callback();
+							});
+						} else {
+							return cacheEntry;
+						}
+					});
+				const pendingTask = pendingIdleTasks.get(identifier);
+				if (pendingTask !== undefined) {
+					pendingIdleTasks.delete(identifier);
+					return pendingTask().then(restore);
+				}
+				return restore();
+			}
+		);
+
+		compiler.cache.hooks.storeBuildDependencies.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_DISK },
+			(dependencies) => {
+				pendingIdleTasks.set(BUILD_DEPENDENCIES_KEY, () =>
+					Promise.resolve().then(() =>
+						strategy.storeBuildDependencies(dependencies)
+					)
+				);
+			}
+		);
+
+		compiler.cache.hooks.shutdown.tapPromise(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_DISK },
+			() => {
+				if (idleTimer) {
+					clearTimeout(idleTimer);
+					idleTimer = undefined;
+				}
+				isIdle = false;
+				const reportProgress = ProgressPlugin.getReporter(compiler);
+				const jobs = [...pendingIdleTasks.values()];
+				if (reportProgress) reportProgress(0, "process pending cache items");
+				const promises = jobs.map((fn) => fn());
+				pendingIdleTasks.clear();
+				promises.push(currentIdlePromise);
+				const promise = Promise.all(promises);
+				currentIdlePromise = promise.then(() => strategy.afterAllStored());
+				if (reportProgress) {
+					currentIdlePromise = currentIdlePromise.then(() => {
+						reportProgress(1, "stored");
+					});
+				}
+				return currentIdlePromise.then(() => {
+					// Reset strategy
+					if (strategy.clear) strategy.clear();
+				});
+			}
+		);
+
+		/** @type {Promise} */
+		let currentIdlePromise = resolvedPromise;
+		let isIdle = false;
+		let isInitialStore = true;
+		const processIdleTasks = () => {
+			if (isIdle) {
+				const startTime = Date.now();
+				if (pendingIdleTasks.size > 0) {
+					const promises = [currentIdlePromise];
+					const maxTime = startTime + 100;
+					let maxCount = 100;
+					for (const [filename, factory] of pendingIdleTasks) {
+						pendingIdleTasks.delete(filename);
+						promises.push(factory());
+						if (maxCount-- <= 0 || Date.now() > maxTime) break;
+					}
+					currentIdlePromise = Promise.all(
+						/** @type {Promise[]} */
+						(promises)
+					);
+					currentIdlePromise.then(() => {
+						timeSpendInStore += Date.now() - startTime;
+						// Allow to exit the process between
+						idleTimer = setTimeout(processIdleTasks, 0);
+						idleTimer.unref();
+					});
+					return;
+				}
+				currentIdlePromise = currentIdlePromise
+					.then(async () => {
+						await strategy.afterAllStored();
+						timeSpendInStore += Date.now() - startTime;
+						avgTimeSpendInStore =
+							Math.max(avgTimeSpendInStore, timeSpendInStore) * 0.9 +
+							timeSpendInStore * 0.1;
+						timeSpendInStore = 0;
+						timeSpendInBuild = 0;
+					})
+					.catch((err) => {
+						const logger = compiler.getInfrastructureLogger(PLUGIN_NAME);
+						logger.warn(`Background tasks during idle failed: ${err.message}`);
+						logger.debug(err.stack);
+					});
+				isInitialStore = false;
+			}
+		};
+		/** @type {ReturnType | undefined} */
+		let idleTimer;
+		compiler.cache.hooks.beginIdle.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_DISK },
+			() => {
+				const isLargeChange = timeSpendInBuild > avgTimeSpendInStore * 2;
+				if (isInitialStore && idleTimeoutForInitialStore < idleTimeout) {
+					compiler
+						.getInfrastructureLogger(PLUGIN_NAME)
+						.log(
+							`Initial cache was generated and cache will be persisted in ${
+								idleTimeoutForInitialStore / 1000
+							}s.`
+						);
+				} else if (
+					isLargeChange &&
+					idleTimeoutAfterLargeChanges < idleTimeout
+				) {
+					compiler
+						.getInfrastructureLogger(PLUGIN_NAME)
+						.log(
+							`Spend ${Math.round(timeSpendInBuild) / 1000}s in build and ${
+								Math.round(avgTimeSpendInStore) / 1000
+							}s in average in cache store. This is considered as large change and cache will be persisted in ${
+								idleTimeoutAfterLargeChanges / 1000
+							}s.`
+						);
+				}
+				idleTimer = setTimeout(
+					() => {
+						idleTimer = undefined;
+						isIdle = true;
+						resolvedPromise.then(processIdleTasks);
+					},
+					Math.min(
+						isInitialStore ? idleTimeoutForInitialStore : Infinity,
+						isLargeChange ? idleTimeoutAfterLargeChanges : Infinity,
+						idleTimeout
+					)
+				);
+				idleTimer.unref();
+			}
+		);
+		compiler.cache.hooks.endIdle.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_DISK },
+			() => {
+				if (idleTimer) {
+					clearTimeout(idleTimer);
+					idleTimer = undefined;
+				}
+				isIdle = false;
+			}
+		);
+		compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {
+			// 10% build overhead is ignored, as it's not cacheable
+			timeSpendInBuild *= 0.9;
+			timeSpendInBuild +=
+				/** @type {number} */ (stats.endTime) -
+				/** @type {number} */ (stats.startTime);
+		});
+	}
+}
+
+module.exports = IdleFileCachePlugin;
diff --git a/lib/cache/MemoryCachePlugin.js b/lib/cache/MemoryCachePlugin.js
new file mode 100644
index 00000000000..476c15388bd
--- /dev/null
+++ b/lib/cache/MemoryCachePlugin.js
@@ -0,0 +1,57 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const Cache = require("../Cache");
+
+/** @typedef {import("../Cache").Data} Data */
+/** @typedef {import("../Cache").Etag} Etag */
+/** @typedef {import("../Compiler")} Compiler */
+
+class MemoryCachePlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		/** @type {Map} */
+		const cache = new Map();
+		compiler.cache.hooks.store.tap(
+			{ name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
+			(identifier, etag, data) => {
+				cache.set(identifier, { etag, data });
+			}
+		);
+		compiler.cache.hooks.get.tap(
+			{ name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
+			(identifier, etag, gotHandlers) => {
+				const cacheEntry = cache.get(identifier);
+				if (cacheEntry === null) {
+					return null;
+				} else if (cacheEntry !== undefined) {
+					return cacheEntry.etag === etag ? cacheEntry.data : null;
+				}
+				gotHandlers.push((result, callback) => {
+					if (result === undefined) {
+						cache.set(identifier, null);
+					} else {
+						cache.set(identifier, { etag, data: result });
+					}
+					return callback();
+				});
+			}
+		);
+		compiler.cache.hooks.shutdown.tap(
+			{ name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
+			() => {
+				cache.clear();
+			}
+		);
+	}
+}
+
+module.exports = MemoryCachePlugin;
diff --git a/lib/cache/MemoryWithGcCachePlugin.js b/lib/cache/MemoryWithGcCachePlugin.js
new file mode 100644
index 00000000000..a0e1739df8d
--- /dev/null
+++ b/lib/cache/MemoryWithGcCachePlugin.js
@@ -0,0 +1,142 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const Cache = require("../Cache");
+
+/** @typedef {import("../Cache").Data} Data */
+/** @typedef {import("../Cache").Etag} Etag */
+/** @typedef {import("../Compiler")} Compiler */
+
+/**
+ * @typedef {object} MemoryWithGcCachePluginOptions
+ * @property {number} maxGenerations max generations
+ */
+
+const PLUGIN_NAME = "MemoryWithGcCachePlugin";
+
+class MemoryWithGcCachePlugin {
+	/**
+	 * @param {MemoryWithGcCachePluginOptions} options options
+	 */
+	constructor({ maxGenerations }) {
+		this._maxGenerations = maxGenerations;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		const maxGenerations = this._maxGenerations;
+		/** @type {Map} */
+		const cache = new Map();
+		/** @type {Map} */
+		const oldCache = new Map();
+		let generation = 0;
+		let cachePosition = 0;
+		const logger = compiler.getInfrastructureLogger(PLUGIN_NAME);
+		compiler.hooks.afterDone.tap(PLUGIN_NAME, () => {
+			generation++;
+			let clearedEntries = 0;
+			/** @type {undefined | string} */
+			let lastClearedIdentifier;
+			// Avoid coverage problems due indirect changes
+			/* istanbul ignore next */
+			for (const [identifier, entry] of oldCache) {
+				if (entry.until > generation) break;
+
+				oldCache.delete(identifier);
+				if (cache.get(identifier) === undefined) {
+					cache.delete(identifier);
+					clearedEntries++;
+					lastClearedIdentifier = identifier;
+				}
+			}
+			if (clearedEntries > 0 || oldCache.size > 0) {
+				logger.log(
+					`${cache.size - oldCache.size} active entries, ${
+						oldCache.size
+					} recently unused cached entries${
+						clearedEntries > 0
+							? `, ${clearedEntries} old unused cache entries removed e. g. ${lastClearedIdentifier}`
+							: ""
+					}`
+				);
+			}
+			let i = (cache.size / maxGenerations) | 0;
+			let j = cachePosition >= cache.size ? 0 : cachePosition;
+			cachePosition = j + i;
+			for (const [identifier, entry] of cache) {
+				if (j !== 0) {
+					j--;
+					continue;
+				}
+				if (entry !== undefined) {
+					// We don't delete the cache entry, but set it to undefined instead
+					// This reserves the location in the data table and avoids rehashing
+					// when constantly adding and removing entries.
+					// It will be deleted when removed from oldCache.
+					cache.set(identifier, undefined);
+					oldCache.delete(identifier);
+					oldCache.set(identifier, {
+						entry,
+						until: generation + maxGenerations
+					});
+					if (i-- === 0) break;
+				}
+			}
+		});
+		compiler.cache.hooks.store.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_MEMORY },
+			(identifier, etag, data) => {
+				cache.set(identifier, { etag, data });
+			}
+		);
+		compiler.cache.hooks.get.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_MEMORY },
+			(identifier, etag, gotHandlers) => {
+				const cacheEntry = cache.get(identifier);
+				if (cacheEntry === null) {
+					return null;
+				} else if (cacheEntry !== undefined) {
+					return cacheEntry.etag === etag ? cacheEntry.data : null;
+				}
+				const oldCacheEntry = oldCache.get(identifier);
+				if (oldCacheEntry !== undefined) {
+					const cacheEntry = oldCacheEntry.entry;
+					if (cacheEntry === null) {
+						oldCache.delete(identifier);
+						cache.set(identifier, cacheEntry);
+						return null;
+					}
+					if (cacheEntry.etag !== etag) return null;
+					oldCache.delete(identifier);
+					cache.set(identifier, cacheEntry);
+					return cacheEntry.data;
+				}
+				gotHandlers.push((result, callback) => {
+					if (result === undefined) {
+						cache.set(identifier, null);
+					} else {
+						cache.set(identifier, { etag, data: result });
+					}
+					return callback();
+				});
+			}
+		);
+		compiler.cache.hooks.shutdown.tap(
+			{ name: PLUGIN_NAME, stage: Cache.STAGE_MEMORY },
+			() => {
+				cache.clear();
+				oldCache.clear();
+			}
+		);
+	}
+}
+
+module.exports = MemoryWithGcCachePlugin;
diff --git a/lib/cache/PackFileCacheStrategy.js b/lib/cache/PackFileCacheStrategy.js
new file mode 100644
index 00000000000..a44c988fcd2
--- /dev/null
+++ b/lib/cache/PackFileCacheStrategy.js
@@ -0,0 +1,1600 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const FileSystemInfo = require("../FileSystemInfo");
+const ProgressPlugin = require("../ProgressPlugin");
+const { formatSize } = require("../SizeFormatHelpers");
+const SerializerMiddleware = require("../serialization/SerializerMiddleware");
+const LazySet = require("../util/LazySet");
+const makeSerializable = require("../util/makeSerializable");
+const memoize = require("../util/memoize");
+const {
+	NOT_SERIALIZABLE,
+	createFileSerializer
+} = require("../util/serialization");
+
+/** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
+/** @typedef {import("../Compilation").FileSystemDependencies} FileSystemDependencies */
+/** @typedef {import("../Cache").Data} Data */
+/** @typedef {import("../Cache").Etag} Etag */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../FileSystemInfo").ResolveBuildDependenciesResult} ResolveBuildDependenciesResult */
+/** @typedef {import("../FileSystemInfo").ResolveResults} ResolveResults */
+/** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
+/** @typedef {import("../logging/Logger").Logger} Logger */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../util/Hash").HashFunction} HashFunction */
+/** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
+
+/** @typedef {Set} Items */
+/** @typedef {Set} BuildDependencies */
+/** @typedef {Map} ItemInfo */
+
+class PackContainer {
+	/**
+	 * @param {Pack} data stored data
+	 * @param {string} version version identifier
+	 * @param {Snapshot} buildSnapshot snapshot of all build dependencies
+	 * @param {BuildDependencies} buildDependencies list of all unresolved build dependencies captured
+	 * @param {ResolveResults} resolveResults result of the resolved build dependencies
+	 * @param {Snapshot} resolveBuildDependenciesSnapshot snapshot of the dependencies of the build dependencies resolving
+	 */
+	constructor(
+		data,
+		version,
+		buildSnapshot,
+		buildDependencies,
+		resolveResults,
+		resolveBuildDependenciesSnapshot
+	) {
+		/** @type {Pack | (() => Pack)} */
+		this.data = data;
+		/** @type {string} */
+		this.version = version;
+		/** @type {Snapshot} */
+		this.buildSnapshot = buildSnapshot;
+		/** @type {BuildDependencies} */
+		this.buildDependencies = buildDependencies;
+		/** @type {ResolveResults} */
+		this.resolveResults = resolveResults;
+		/** @type {Snapshot} */
+		this.resolveBuildDependenciesSnapshot = resolveBuildDependenciesSnapshot;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write, writeLazy }) {
+		write(this.version);
+		write(this.buildSnapshot);
+		write(this.buildDependencies);
+		write(this.resolveResults);
+		write(this.resolveBuildDependenciesSnapshot);
+		/** @type {NonNullable} */
+		(writeLazy)(this.data);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize({ read }) {
+		this.version = read();
+		this.buildSnapshot = read();
+		this.buildDependencies = read();
+		this.resolveResults = read();
+		this.resolveBuildDependenciesSnapshot = read();
+		this.data = read();
+	}
+}
+
+makeSerializable(
+	PackContainer,
+	"webpack/lib/cache/PackFileCacheStrategy",
+	"PackContainer"
+);
+
+const MIN_CONTENT_SIZE = 1024 * 1024; // 1 MB
+const CONTENT_COUNT_TO_MERGE = 10;
+const MIN_ITEMS_IN_FRESH_PACK = 100;
+const MAX_ITEMS_IN_FRESH_PACK = 50000;
+const MAX_TIME_IN_FRESH_PACK = 1 * 60 * 1000; // 1 min
+
+class PackItemInfo {
+	/**
+	 * @param {string} identifier identifier of item
+	 * @param {string | null | undefined} etag etag of item
+	 * @param {Data} value fresh value of item
+	 */
+	constructor(identifier, etag, value) {
+		/** @type {string} */
+		this.identifier = identifier;
+		/** @type {string | null | undefined} */
+		this.etag = etag;
+		/** @type {number} */
+		this.location = -1;
+		/** @type {number} */
+		this.lastAccess = Date.now();
+		/** @type {Data} */
+		this.freshValue = value;
+	}
+}
+
+class Pack {
+	/**
+	 * @param {Logger} logger a logger
+	 * @param {number} maxAge max age of cache items
+	 */
+	constructor(logger, maxAge) {
+		/** @type {ItemInfo} */
+		this.itemInfo = new Map();
+		/** @type {(string | undefined)[]} */
+		this.requests = [];
+		/** @type {undefined | NodeJS.Timeout} */
+		this.requestsTimeout = undefined;
+		/** @type {ItemInfo} */
+		this.freshContent = new Map();
+		/** @type {(undefined | PackContent)[]} */
+		this.content = [];
+		/** @type {boolean} */
+		this.invalid = false;
+		/** @type {Logger} */
+		this.logger = logger;
+		/** @type {number} */
+		this.maxAge = maxAge;
+	}
+
+	/**
+	 * @param {string} identifier identifier
+	 */
+	_addRequest(identifier) {
+		this.requests.push(identifier);
+		if (this.requestsTimeout === undefined) {
+			this.requestsTimeout = setTimeout(() => {
+				this.requests.push(undefined);
+				this.requestsTimeout = undefined;
+			}, MAX_TIME_IN_FRESH_PACK);
+			if (this.requestsTimeout.unref) this.requestsTimeout.unref();
+		}
+	}
+
+	stopCapturingRequests() {
+		if (this.requestsTimeout !== undefined) {
+			clearTimeout(this.requestsTimeout);
+			this.requestsTimeout = undefined;
+		}
+	}
+
+	/**
+	 * @param {string} identifier unique name for the resource
+	 * @param {string | null} etag etag of the resource
+	 * @returns {Data} cached content
+	 */
+	get(identifier, etag) {
+		const info = this.itemInfo.get(identifier);
+		this._addRequest(identifier);
+		if (info === undefined) {
+			return;
+		}
+		if (info.etag !== etag) return null;
+		info.lastAccess = Date.now();
+		const loc = info.location;
+		if (loc === -1) {
+			return info.freshValue;
+		}
+		if (!this.content[loc]) {
+			return;
+		}
+		return /** @type {PackContent} */ (this.content[loc]).get(identifier);
+	}
+
+	/**
+	 * @param {string} identifier unique name for the resource
+	 * @param {string | null} etag etag of the resource
+	 * @param {Data} data cached content
+	 * @returns {void}
+	 */
+	set(identifier, etag, data) {
+		if (!this.invalid) {
+			this.invalid = true;
+			this.logger.log(`Pack got invalid because of write to: ${identifier}`);
+		}
+		const info = this.itemInfo.get(identifier);
+		if (info === undefined) {
+			const newInfo = new PackItemInfo(identifier, etag, data);
+			this.itemInfo.set(identifier, newInfo);
+			this._addRequest(identifier);
+			this.freshContent.set(identifier, newInfo);
+		} else {
+			const loc = info.location;
+			if (loc >= 0) {
+				this._addRequest(identifier);
+				this.freshContent.set(identifier, info);
+				const content = /** @type {PackContent} */ (this.content[loc]);
+				content.delete(identifier);
+				if (content.items.size === 0) {
+					this.content[loc] = undefined;
+					this.logger.debug("Pack %d got empty and is removed", loc);
+				}
+			}
+			info.freshValue = data;
+			info.lastAccess = Date.now();
+			info.etag = etag;
+			info.location = -1;
+		}
+	}
+
+	getContentStats() {
+		let count = 0;
+		let size = 0;
+		for (const content of this.content) {
+			if (content !== undefined) {
+				count++;
+				const s = content.getSize();
+				if (s > 0) {
+					size += s;
+				}
+			}
+		}
+		return { count, size };
+	}
+
+	/**
+	 * @returns {number} new location of data entries
+	 */
+	_findLocation() {
+		/** @type {number} */
+		let i;
+		for (i = 0; i < this.content.length && this.content[i] !== undefined; i++);
+		return i;
+	}
+
+	/**
+	 * @private
+	 * @param {Items} items items
+	 * @param {Items} usedItems used items
+	 * @param {number} newLoc new location
+	 */
+	_gcAndUpdateLocation(items, usedItems, newLoc) {
+		let count = 0;
+		/** @type {undefined | string} */
+		let lastGC;
+		const now = Date.now();
+		for (const identifier of items) {
+			const info = /** @type {PackItemInfo} */ (this.itemInfo.get(identifier));
+			if (now - info.lastAccess > this.maxAge) {
+				this.itemInfo.delete(identifier);
+				items.delete(identifier);
+				usedItems.delete(identifier);
+				count++;
+				lastGC = identifier;
+			} else {
+				info.location = newLoc;
+			}
+		}
+		if (count > 0) {
+			this.logger.log(
+				"Garbage Collected %d old items at pack %d (%d items remaining) e. g. %s",
+				count,
+				newLoc,
+				items.size,
+				lastGC
+			);
+		}
+	}
+
+	_persistFreshContent() {
+		/** @typedef {{ items: Items, map: Content, loc: number }} PackItem */
+		const itemsCount = this.freshContent.size;
+		if (itemsCount > 0) {
+			const packCount = Math.ceil(itemsCount / MAX_ITEMS_IN_FRESH_PACK);
+			const itemsPerPack = Math.ceil(itemsCount / packCount);
+			/** @type {PackItem[]} */
+			const packs = [];
+			let i = 0;
+			let ignoreNextTimeTick = false;
+			const createNextPack = () => {
+				const loc = this._findLocation();
+				this.content[loc] = /** @type {EXPECTED_ANY} */ (null); // reserve
+				/** @type {PackItem} */
+				const pack = {
+					items: new Set(),
+					map: new Map(),
+					loc
+				};
+				packs.push(pack);
+				return pack;
+			};
+			let pack = createNextPack();
+			if (this.requestsTimeout !== undefined) {
+				clearTimeout(this.requestsTimeout);
+			}
+			for (const identifier of this.requests) {
+				if (identifier === undefined) {
+					if (ignoreNextTimeTick) {
+						ignoreNextTimeTick = false;
+					} else if (pack.items.size >= MIN_ITEMS_IN_FRESH_PACK) {
+						i = 0;
+						pack = createNextPack();
+					}
+					continue;
+				}
+				const info = this.freshContent.get(identifier);
+				if (info === undefined) continue;
+				pack.items.add(identifier);
+				pack.map.set(identifier, info.freshValue);
+				info.location = pack.loc;
+				info.freshValue = undefined;
+				this.freshContent.delete(identifier);
+				if (++i > itemsPerPack) {
+					i = 0;
+					pack = createNextPack();
+					ignoreNextTimeTick = true;
+				}
+			}
+			this.requests.length = 0;
+			for (const pack of packs) {
+				this.content[pack.loc] = new PackContent(
+					pack.items,
+					new Set(pack.items),
+					new PackContentItems(pack.map)
+				);
+			}
+			this.logger.log(
+				`${itemsCount} fresh items in cache put into pack ${
+					packs.length > 1
+						? packs
+								.map((pack) => `${pack.loc} (${pack.items.size} items)`)
+								.join(", ")
+						: packs[0].loc
+				}`
+			);
+		}
+	}
+
+	/**
+	 * Merges small content files to a single content file
+	 */
+	_optimizeSmallContent() {
+		// 1. Find all small content files
+		// Treat unused content files separately to avoid
+		// a merge-split cycle
+		/** @type {number[]} */
+		const smallUsedContents = [];
+		/** @type {number} */
+		let smallUsedContentSize = 0;
+		/** @type {number[]} */
+		const smallUnusedContents = [];
+		/** @type {number} */
+		let smallUnusedContentSize = 0;
+		for (let i = 0; i < this.content.length; i++) {
+			const content = this.content[i];
+			if (content === undefined) continue;
+			if (content.outdated) continue;
+			const size = content.getSize();
+			if (size < 0 || size > MIN_CONTENT_SIZE) continue;
+			if (content.used.size > 0) {
+				smallUsedContents.push(i);
+				smallUsedContentSize += size;
+			} else {
+				smallUnusedContents.push(i);
+				smallUnusedContentSize += size;
+			}
+		}
+
+		// 2. Check if minimum number is reached
+		/** @type {number[]} */
+		let mergedIndices;
+		if (
+			smallUsedContents.length >= CONTENT_COUNT_TO_MERGE ||
+			smallUsedContentSize > MIN_CONTENT_SIZE
+		) {
+			mergedIndices = smallUsedContents;
+		} else if (
+			smallUnusedContents.length >= CONTENT_COUNT_TO_MERGE ||
+			smallUnusedContentSize > MIN_CONTENT_SIZE
+		) {
+			mergedIndices = smallUnusedContents;
+		} else {
+			return;
+		}
+
+		/** @type {PackContent[]} */
+		const mergedContent = [];
+
+		// 3. Remove old content entries
+		for (const i of mergedIndices) {
+			mergedContent.push(/** @type {PackContent} */ (this.content[i]));
+			this.content[i] = undefined;
+		}
+
+		// 4. Determine merged items
+		/** @type {Items} */
+		const mergedItems = new Set();
+		/** @type {Items} */
+		const mergedUsedItems = new Set();
+		/** @type {((map: Content) => Promise)[]} */
+		const addToMergedMap = [];
+		for (const content of mergedContent) {
+			for (const identifier of content.items) {
+				mergedItems.add(identifier);
+			}
+			for (const identifier of content.used) {
+				mergedUsedItems.add(identifier);
+			}
+			addToMergedMap.push(async (map) => {
+				// unpack existing content
+				// after that values are accessible in .content
+				await content.unpack(
+					"it should be merged with other small pack contents"
+				);
+				for (const [identifier, value] of /** @type {Content} */ (
+					content.content
+				)) {
+					map.set(identifier, value);
+				}
+			});
+		}
+
+		// 5. GC and update location of merged items
+		const newLoc = this._findLocation();
+		this._gcAndUpdateLocation(mergedItems, mergedUsedItems, newLoc);
+
+		// 6. If not empty, store content somewhere
+		if (mergedItems.size > 0) {
+			this.content[newLoc] = new PackContent(
+				mergedItems,
+				mergedUsedItems,
+				memoize(async () => {
+					/** @type {Content} */
+					const map = new Map();
+					await Promise.all(addToMergedMap.map((fn) => fn(map)));
+					return new PackContentItems(map);
+				})
+			);
+			this.logger.log(
+				"Merged %d small files with %d cache items into pack %d",
+				mergedContent.length,
+				mergedItems.size,
+				newLoc
+			);
+		}
+	}
+
+	/**
+	 * Split large content files with used and unused items
+	 * into two parts to separate used from unused items
+	 */
+	_optimizeUnusedContent() {
+		// 1. Find a large content file with used and unused items
+		for (let i = 0; i < this.content.length; i++) {
+			const content = this.content[i];
+			if (content === undefined) continue;
+			const size = content.getSize();
+			if (size < MIN_CONTENT_SIZE) continue;
+			const used = content.used.size;
+			const total = content.items.size;
+			if (used > 0 && used < total) {
+				// 2. Remove this content
+				this.content[i] = undefined;
+
+				// 3. Determine items for the used content file
+				const usedItems = new Set(content.used);
+				const newLoc = this._findLocation();
+				this._gcAndUpdateLocation(usedItems, usedItems, newLoc);
+
+				// 4. Create content file for used items
+				if (usedItems.size > 0) {
+					this.content[newLoc] = new PackContent(
+						usedItems,
+						new Set(usedItems),
+						async () => {
+							await content.unpack(
+								"it should be splitted into used and unused items"
+							);
+							/** @type {Content} */
+							const map = new Map();
+							for (const identifier of usedItems) {
+								map.set(
+									identifier,
+									/** @type {Content} */
+									(content.content).get(identifier)
+								);
+							}
+							return new PackContentItems(map);
+						}
+					);
+				}
+
+				// 5. Determine items for the unused content file
+				const unusedItems = new Set(content.items);
+				/** @type {Items} */
+				const usedOfUnusedItems = new Set();
+				for (const identifier of usedItems) {
+					unusedItems.delete(identifier);
+				}
+				const newUnusedLoc = this._findLocation();
+				this._gcAndUpdateLocation(unusedItems, usedOfUnusedItems, newUnusedLoc);
+
+				// 6. Create content file for unused items
+				if (unusedItems.size > 0) {
+					this.content[newUnusedLoc] = new PackContent(
+						unusedItems,
+						usedOfUnusedItems,
+						async () => {
+							await content.unpack(
+								"it should be splitted into used and unused items"
+							);
+							/** @type {Content} */
+							const map = new Map();
+							for (const identifier of unusedItems) {
+								map.set(
+									identifier,
+									/** @type {Content} */
+									(content.content).get(identifier)
+								);
+							}
+							return new PackContentItems(map);
+						}
+					);
+				}
+
+				this.logger.log(
+					"Split pack %d into pack %d with %d used items and pack %d with %d unused items",
+					i,
+					newLoc,
+					usedItems.size,
+					newUnusedLoc,
+					unusedItems.size
+				);
+
+				// optimizing only one of them is good enough and
+				// reduces the amount of serialization needed
+				return;
+			}
+		}
+	}
+
+	/**
+	 * Find the content with the oldest item and run GC on that.
+	 * Only runs for one content to avoid large invalidation.
+	 */
+	_gcOldestContent() {
+		/** @type {PackItemInfo | undefined} */
+		let oldest;
+		for (const info of this.itemInfo.values()) {
+			if (oldest === undefined || info.lastAccess < oldest.lastAccess) {
+				oldest = info;
+			}
+		}
+		if (
+			Date.now() - /** @type {PackItemInfo} */ (oldest).lastAccess >
+			this.maxAge
+		) {
+			const loc = /** @type {PackItemInfo} */ (oldest).location;
+			if (loc < 0) return;
+			const content = /** @type {PackContent} */ (this.content[loc]);
+			const items = new Set(content.items);
+			const usedItems = new Set(content.used);
+			this._gcAndUpdateLocation(items, usedItems, loc);
+
+			this.content[loc] =
+				items.size > 0
+					? new PackContent(items, usedItems, async () => {
+							await content.unpack(
+								"it contains old items that should be garbage collected"
+							);
+							/** @type {Content} */
+							const map = new Map();
+							for (const identifier of items) {
+								map.set(
+									identifier,
+									/** @type {Content} */
+									(content.content).get(identifier)
+								);
+							}
+							return new PackContentItems(map);
+						})
+					: undefined;
+		}
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write, writeSeparate }) {
+		this._persistFreshContent();
+		this._optimizeSmallContent();
+		this._optimizeUnusedContent();
+		this._gcOldestContent();
+		for (const identifier of this.itemInfo.keys()) {
+			write(identifier);
+		}
+		write(null); // null as marker of the end of keys
+		for (const info of this.itemInfo.values()) {
+			write(info.etag);
+		}
+		for (const info of this.itemInfo.values()) {
+			write(info.lastAccess);
+		}
+		for (let i = 0; i < this.content.length; i++) {
+			const content = this.content[i];
+			if (content !== undefined) {
+				write(content.items);
+				content.writeLazy((lazy) =>
+					/** @type {NonNullable} */
+					(writeSeparate)(lazy, { name: `${i}` })
+				);
+			} else {
+				write(undefined); // undefined marks an empty content slot
+			}
+		}
+		write(null); // null as marker of the end of items
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext & { logger: Logger }} context context
+	 */
+	deserialize({ read, logger }) {
+		this.logger = logger;
+		{
+			const items = [];
+			let item = read();
+			while (item !== null) {
+				items.push(item);
+				item = read();
+			}
+			this.itemInfo.clear();
+			const infoItems = items.map((identifier) => {
+				const info = new PackItemInfo(identifier, undefined, undefined);
+				this.itemInfo.set(identifier, info);
+				return info;
+			});
+			for (const info of infoItems) {
+				info.etag = read();
+			}
+			for (const info of infoItems) {
+				info.lastAccess = read();
+			}
+		}
+		this.content.length = 0;
+		let items = read();
+		while (items !== null) {
+			if (items === undefined) {
+				this.content.push(items);
+			} else {
+				const idx = this.content.length;
+				const lazy = read();
+				this.content.push(
+					new PackContent(
+						items,
+						new Set(),
+						lazy,
+						logger,
+						`${this.content.length}`
+					)
+				);
+				for (const identifier of items) {
+					/** @type {PackItemInfo} */
+					(this.itemInfo.get(identifier)).location = idx;
+				}
+			}
+			items = read();
+		}
+	}
+}
+
+makeSerializable(Pack, "webpack/lib/cache/PackFileCacheStrategy", "Pack");
+
+/** @typedef {Map} Content */
+
+class PackContentItems {
+	/**
+	 * @param {Content} map items
+	 */
+	constructor(map) {
+		this.map = map;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext & { logger: Logger, profile: boolean | undefined }} context context
+	 */
+	serialize({ write, snapshot, rollback, logger, profile }) {
+		if (profile) {
+			write(false);
+			for (const [key, value] of this.map) {
+				const s = snapshot();
+				try {
+					write(key);
+					const start = process.hrtime();
+					write(value);
+					const durationHr = process.hrtime(start);
+					const duration = durationHr[0] * 1000 + durationHr[1] / 1e6;
+					if (duration > 1) {
+						if (duration > 500) {
+							logger.error(`Serialization of '${key}': ${duration} ms`);
+						} else if (duration > 50) {
+							logger.warn(`Serialization of '${key}': ${duration} ms`);
+						} else if (duration > 10) {
+							logger.info(`Serialization of '${key}': ${duration} ms`);
+						} else if (duration > 5) {
+							logger.log(`Serialization of '${key}': ${duration} ms`);
+						} else {
+							logger.debug(`Serialization of '${key}': ${duration} ms`);
+						}
+					}
+				} catch (err) {
+					rollback(s);
+					if (err === NOT_SERIALIZABLE) continue;
+					const msg = "Skipped not serializable cache item";
+					const notSerializableErr = /** @type {Error} */ (err);
+					if (notSerializableErr.message.includes("ModuleBuildError")) {
+						logger.log(
+							`${msg} (in build error): ${notSerializableErr.message}`
+						);
+						logger.debug(
+							`${msg} '${key}' (in build error): ${notSerializableErr.stack}`
+						);
+					} else {
+						logger.warn(`${msg}: ${notSerializableErr.message}`);
+						logger.debug(`${msg} '${key}': ${notSerializableErr.stack}`);
+					}
+				}
+			}
+			write(null);
+			return;
+		}
+		// Try to serialize all at once
+		const s = snapshot();
+		try {
+			write(true);
+			write(this.map);
+		} catch (_err) {
+			rollback(s);
+
+			// Try to serialize each item on it's own
+			write(false);
+			for (const [key, value] of this.map) {
+				const s = snapshot();
+				try {
+					write(key);
+					write(value);
+				} catch (err) {
+					rollback(s);
+					if (err === NOT_SERIALIZABLE) continue;
+					const notSerializableErr = /** @type {Error} */ (err);
+					logger.warn(
+						`Skipped not serializable cache item '${key}': ${notSerializableErr.message}`
+					);
+					logger.debug(notSerializableErr.stack);
+				}
+			}
+			write(null);
+		}
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext & { logger: Logger, profile: boolean | undefined }} context context
+	 */
+	deserialize({ read, logger, profile }) {
+		if (read()) {
+			this.map = read();
+		} else if (profile) {
+			/** @type {Map} */
+			const map = new Map();
+			let key = read();
+			while (key !== null) {
+				const start = process.hrtime();
+				const value = read();
+				const durationHr = process.hrtime(start);
+				const duration = durationHr[0] * 1000 + durationHr[1] / 1e6;
+				if (duration > 1) {
+					if (duration > 100) {
+						logger.error(`Deserialization of '${key}': ${duration} ms`);
+					} else if (duration > 20) {
+						logger.warn(`Deserialization of '${key}': ${duration} ms`);
+					} else if (duration > 5) {
+						logger.info(`Deserialization of '${key}': ${duration} ms`);
+					} else if (duration > 2) {
+						logger.log(`Deserialization of '${key}': ${duration} ms`);
+					} else {
+						logger.debug(`Deserialization of '${key}': ${duration} ms`);
+					}
+				}
+				map.set(key, value);
+				key = read();
+			}
+			this.map = map;
+		} else {
+			/** @type {Map} */
+			const map = new Map();
+			let key = read();
+			while (key !== null) {
+				map.set(key, read());
+				key = read();
+			}
+			this.map = map;
+		}
+	}
+}
+
+makeSerializable(
+	PackContentItems,
+	"webpack/lib/cache/PackFileCacheStrategy",
+	"PackContentItems"
+);
+
+/** @typedef {(() => Promise | PackContentItems) & Partial<{ options: { size?: number } }>} LazyFunction */
+
+class PackContent {
+	/*
+		This class can be in these states:
+		   |   this.lazy    | this.content | this.outdated | state
+		A1 |   undefined    |     Map      |     false     | fresh content
+		A2 |   undefined    |     Map      |     true      | (will not happen)
+		B1 | lazy () => {}  |  undefined   |     false     | not deserialized
+		B2 | lazy () => {}  |  undefined   |     true      | not deserialized, but some items has been removed
+		C1 | lazy* () => {} |     Map      |     false     | deserialized
+		C2 | lazy* () => {} |     Map      |     true      | deserialized, and some items has been removed
+
+		this.used is a subset of this.items.
+		this.items is a subset of this.content.keys() resp. this.lazy().map.keys()
+		When this.outdated === false, this.items === this.content.keys() resp. this.lazy().map.keys()
+		When this.outdated === true, this.items should be used to recreated this.lazy/this.content.
+		When this.lazy and this.content is set, they contain the same data.
+		this.get must only be called with a valid item from this.items.
+		In state C this.lazy is unMemoized
+	*/
+
+	/**
+	 * @param {Items} items keys
+	 * @param {Items} usedItems used keys
+	 * @param {PackContentItems | (() => Promise)} dataOrFn sync or async content
+	 * @param {Logger=} logger logger for logging
+	 * @param {string=} lazyName name of dataOrFn for logging
+	 */
+	constructor(items, usedItems, dataOrFn, logger, lazyName) {
+		/** @type {Items} */
+		this.items = items;
+		/** @type {LazyFunction | undefined} */
+		this.lazy = typeof dataOrFn === "function" ? dataOrFn : undefined;
+		/** @type {Content | undefined} */
+		this.content = typeof dataOrFn === "function" ? undefined : dataOrFn.map;
+		/** @type {boolean} */
+		this.outdated = false;
+		/** @type {Items} */
+		this.used = usedItems;
+		/** @type {Logger | undefined} */
+		this.logger = logger;
+		/** @type {string | undefined} */
+		this.lazyName = lazyName;
+	}
+
+	/**
+	 * @param {string} identifier identifier
+	 * @returns {string | Promise} result
+	 */
+	get(identifier) {
+		this.used.add(identifier);
+		if (this.content) {
+			return this.content.get(identifier);
+		}
+
+		const logger = /** @type {Logger} */ (this.logger);
+		// We are in state B
+		const { lazyName } = this;
+		/** @type {string | undefined} */
+		let timeMessage;
+		if (lazyName) {
+			// only log once
+			this.lazyName = undefined;
+			timeMessage = `restore cache content ${lazyName} (${formatSize(
+				this.getSize()
+			)})`;
+			logger.log(
+				`starting to restore cache content ${lazyName} (${formatSize(
+					this.getSize()
+				)}) because of request to: ${identifier}`
+			);
+			logger.time(timeMessage);
+		}
+		const value = /** @type {LazyFunction} */ (this.lazy)();
+		if ("then" in value) {
+			return value.then((data) => {
+				const map = data.map;
+				if (timeMessage) {
+					logger.timeEnd(timeMessage);
+				}
+				// Move to state C
+				this.content = map;
+				this.lazy = SerializerMiddleware.unMemoizeLazy(this.lazy);
+				return map.get(identifier);
+			});
+		}
+
+		const map = value.map;
+		if (timeMessage) {
+			logger.timeEnd(timeMessage);
+		}
+		// Move to state C
+		this.content = map;
+		this.lazy = SerializerMiddleware.unMemoizeLazy(this.lazy);
+		return map.get(identifier);
+	}
+
+	/**
+	 * @param {string} reason explanation why unpack is necessary
+	 * @returns {void | Promise} maybe a promise if lazy
+	 */
+	unpack(reason) {
+		if (this.content) return;
+
+		const logger = /** @type {Logger} */ (this.logger);
+		// Move from state B to C
+		if (this.lazy) {
+			const { lazyName } = this;
+			/** @type {string | undefined} */
+			let timeMessage;
+			if (lazyName) {
+				// only log once
+				this.lazyName = undefined;
+				timeMessage = `unpack cache content ${lazyName} (${formatSize(
+					this.getSize()
+				)})`;
+				logger.log(
+					`starting to unpack cache content ${lazyName} (${formatSize(
+						this.getSize()
+					)}) because ${reason}`
+				);
+				logger.time(timeMessage);
+			}
+			const value =
+				/** @type {PackContentItems | Promise} */
+				(this.lazy());
+			if ("then" in value) {
+				return value.then((data) => {
+					if (timeMessage) {
+						logger.timeEnd(timeMessage);
+					}
+					this.content = data.map;
+				});
+			}
+			if (timeMessage) {
+				logger.timeEnd(timeMessage);
+			}
+			this.content = value.map;
+		}
+	}
+
+	/**
+	 * @returns {number} size of the content or -1 if not known
+	 */
+	getSize() {
+		if (!this.lazy) return -1;
+		const options =
+			/** @type {{ options: { size?: number } }} */
+			(this.lazy).options;
+		if (!options) return -1;
+		const size = options.size;
+		if (typeof size !== "number") return -1;
+		return size;
+	}
+
+	/**
+	 * @param {string} identifier identifier
+	 */
+	delete(identifier) {
+		this.items.delete(identifier);
+		this.used.delete(identifier);
+		this.outdated = true;
+	}
+
+	/**
+	 * @param {(lazy: LazyFunction) => (() => PackContentItems | Promise)} write write function
+	 * @returns {void}
+	 */
+	writeLazy(write) {
+		if (!this.outdated && this.lazy) {
+			// State B1 or C1
+			// this.lazy is still the valid deserialized version
+			write(this.lazy);
+			return;
+		}
+		if (!this.outdated && this.content) {
+			// State A1
+			const map = new Map(this.content);
+			// Move to state C1
+			this.lazy = SerializerMiddleware.unMemoizeLazy(
+				write(() => new PackContentItems(map))
+			);
+			return;
+		}
+		if (this.content) {
+			// State A2 or C2
+			/** @type {Content} */
+			const map = new Map();
+			for (const item of this.items) {
+				map.set(item, this.content.get(item));
+			}
+			// Move to state C1
+			this.outdated = false;
+			this.content = map;
+			this.lazy = SerializerMiddleware.unMemoizeLazy(
+				write(() => new PackContentItems(map))
+			);
+			return;
+		}
+		const logger = /** @type {Logger} */ (this.logger);
+		// State B2
+		const { lazyName } = this;
+		/** @type {string | undefined} */
+		let timeMessage;
+		if (lazyName) {
+			// only log once
+			this.lazyName = undefined;
+			timeMessage = `unpack cache content ${lazyName} (${formatSize(
+				this.getSize()
+			)})`;
+			logger.log(
+				`starting to unpack cache content ${lazyName} (${formatSize(
+					this.getSize()
+				)}) because it's outdated and need to be serialized`
+			);
+			logger.time(timeMessage);
+		}
+		const value = /** @type {LazyFunction} */ (this.lazy)();
+		this.outdated = false;
+		if ("then" in value) {
+			// Move to state B1
+			this.lazy = write(() =>
+				value.then((data) => {
+					if (timeMessage) {
+						logger.timeEnd(timeMessage);
+					}
+					const oldMap = data.map;
+					/** @type {Content} */
+					const map = new Map();
+					for (const item of this.items) {
+						map.set(item, oldMap.get(item));
+					}
+					// Move to state C1 (or maybe C2)
+					this.content = map;
+					this.lazy = SerializerMiddleware.unMemoizeLazy(this.lazy);
+
+					return new PackContentItems(map);
+				})
+			);
+		} else {
+			// Move to state C1
+			if (timeMessage) {
+				logger.timeEnd(timeMessage);
+			}
+			const oldMap = value.map;
+			/** @type {Content} */
+			const map = new Map();
+			for (const item of this.items) {
+				map.set(item, oldMap.get(item));
+			}
+			this.content = map;
+			this.lazy = write(() => new PackContentItems(map));
+		}
+	}
+}
+
+/**
+ * @param {Buffer} buf buffer
+ * @returns {Buffer} buffer that can be collected
+ */
+const allowCollectingMemory = (buf) => {
+	const wasted = buf.buffer.byteLength - buf.byteLength;
+	if (wasted > 8192 && (wasted > 1048576 || wasted > buf.byteLength)) {
+		return Buffer.from(buf);
+	}
+	return buf;
+};
+
+class PackFileCacheStrategy {
+	/**
+	 * @param {object} options options
+	 * @param {Compiler} options.compiler the compiler
+	 * @param {IntermediateFileSystem} options.fs the filesystem
+	 * @param {string} options.context the context directory
+	 * @param {string} options.cacheLocation the location of the cache data
+	 * @param {string} options.version version identifier
+	 * @param {Logger} options.logger a logger
+	 * @param {SnapshotOptions} options.snapshot options regarding snapshotting
+	 * @param {number} options.maxAge max age of cache items
+	 * @param {boolean=} options.profile track and log detailed timing information for individual cache items
+	 * @param {boolean=} options.allowCollectingMemory allow to collect unused memory created during deserialization
+	 * @param {false | "gzip" | "brotli"=} options.compression compression used
+	 * @param {boolean=} options.readonly disable storing cache into filesystem
+	 */
+	constructor({
+		compiler,
+		fs,
+		context,
+		cacheLocation,
+		version,
+		logger,
+		snapshot,
+		maxAge,
+		profile,
+		allowCollectingMemory,
+		compression,
+		readonly
+	}) {
+		/** @type {import("../serialization/Serializer")} */
+		this.fileSerializer = createFileSerializer(
+			fs,
+			/** @type {HashFunction} */
+			(compiler.options.output.hashFunction)
+		);
+		/** @type {FileSystemInfo} */
+		this.fileSystemInfo = new FileSystemInfo(fs, {
+			managedPaths: snapshot.managedPaths,
+			immutablePaths: snapshot.immutablePaths,
+			logger: logger.getChildLogger("webpack.FileSystemInfo"),
+			hashFunction: compiler.options.output.hashFunction
+		});
+		/** @type {Compiler} */
+		this.compiler = compiler;
+		/** @type {string} */
+		this.context = context;
+		/** @type {string} */
+		this.cacheLocation = cacheLocation;
+		/** @type {string} */
+		this.version = version;
+		/** @type {Logger} */
+		this.logger = logger;
+		/** @type {number} */
+		this.maxAge = maxAge;
+		/** @type {boolean | undefined} */
+		this.profile = profile;
+		/** @type {boolean | undefined} */
+		this.readonly = readonly;
+		/** @type {boolean | undefined} */
+		this.allowCollectingMemory = allowCollectingMemory;
+		/** @type {false | "gzip" | "brotli" | undefined} */
+		this.compression = compression;
+		/** @type {string} */
+		this._extension =
+			compression === "brotli"
+				? ".pack.br"
+				: compression === "gzip"
+					? ".pack.gz"
+					: ".pack";
+		/** @type {SnapshotOptions} */
+		this.snapshot = snapshot;
+		/** @type {BuildDependencies} */
+		this.buildDependencies = new Set();
+		/** @type {FileSystemDependencies} */
+		this.newBuildDependencies = new LazySet();
+		/** @type {Snapshot | undefined} */
+		this.resolveBuildDependenciesSnapshot = undefined;
+		/** @type {ResolveResults | undefined} */
+		this.resolveResults = undefined;
+		/** @type {Snapshot | undefined} */
+		this.buildSnapshot = undefined;
+		/** @type {Promise | undefined} */
+		this.packPromise = this._openPack();
+		/** @type {Promise} */
+		this.storePromise = Promise.resolve();
+	}
+
+	/**
+	 * @returns {Promise} pack
+	 */
+	_getPack() {
+		if (this.packPromise === undefined) {
+			this.packPromise = this.storePromise.then(() => this._openPack());
+		}
+		return this.packPromise;
+	}
+
+	/**
+	 * @returns {Promise} the pack
+	 */
+	_openPack() {
+		const { logger, profile, cacheLocation, version } = this;
+		/** @type {Snapshot} */
+		let buildSnapshot;
+		/** @type {BuildDependencies} */
+		let buildDependencies;
+		/** @type {BuildDependencies} */
+		let newBuildDependencies;
+		/** @type {Snapshot} */
+		let resolveBuildDependenciesSnapshot;
+		/** @type {ResolveResults | undefined} */
+		let resolveResults;
+		logger.time("restore cache container");
+		return this.fileSerializer
+			.deserialize(null, {
+				filename: `${cacheLocation}/index${this._extension}`,
+				extension: `${this._extension}`,
+				logger,
+				profile,
+				retainedBuffer: this.allowCollectingMemory
+					? allowCollectingMemory
+					: undefined
+			})
+			.catch((err) => {
+				if (err.code !== "ENOENT") {
+					logger.warn(
+						`Restoring pack failed from ${cacheLocation}${this._extension}: ${err}`
+					);
+					logger.debug(err.stack);
+				} else {
+					logger.debug(
+						`No pack exists at ${cacheLocation}${this._extension}: ${err}`
+					);
+				}
+				return undefined;
+			})
+			.then((packContainer) => {
+				logger.timeEnd("restore cache container");
+				if (!packContainer) return;
+				if (!(packContainer instanceof PackContainer)) {
+					logger.warn(
+						`Restored pack from ${cacheLocation}${this._extension}, but contained content is unexpected.`,
+						packContainer
+					);
+					return;
+				}
+				if (packContainer.version !== version) {
+					logger.log(
+						`Restored pack from ${cacheLocation}${this._extension}, but version doesn't match.`
+					);
+					return;
+				}
+				logger.time("check build dependencies");
+				return Promise.all([
+					new Promise((resolve, _reject) => {
+						this.fileSystemInfo.checkSnapshotValid(
+							packContainer.buildSnapshot,
+							(err, valid) => {
+								if (err) {
+									logger.log(
+										`Restored pack from ${cacheLocation}${this._extension}, but checking snapshot of build dependencies errored: ${err}.`
+									);
+									logger.debug(err.stack);
+									return resolve(false);
+								}
+								if (!valid) {
+									logger.log(
+										`Restored pack from ${cacheLocation}${this._extension}, but build dependencies have changed.`
+									);
+									return resolve(false);
+								}
+								buildSnapshot = packContainer.buildSnapshot;
+								return resolve(true);
+							}
+						);
+					}),
+					new Promise((resolve, _reject) => {
+						this.fileSystemInfo.checkSnapshotValid(
+							packContainer.resolveBuildDependenciesSnapshot,
+							(err, valid) => {
+								if (err) {
+									logger.log(
+										`Restored pack from ${cacheLocation}${this._extension}, but checking snapshot of resolving of build dependencies errored: ${err}.`
+									);
+									logger.debug(err.stack);
+									return resolve(false);
+								}
+								if (valid) {
+									resolveBuildDependenciesSnapshot =
+										packContainer.resolveBuildDependenciesSnapshot;
+									buildDependencies = packContainer.buildDependencies;
+									resolveResults = packContainer.resolveResults;
+									return resolve(true);
+								}
+								logger.log(
+									"resolving of build dependencies is invalid, will re-resolve build dependencies"
+								);
+								this.fileSystemInfo.checkResolveResultsValid(
+									packContainer.resolveResults,
+									(err, valid) => {
+										if (err) {
+											logger.log(
+												`Restored pack from ${cacheLocation}${this._extension}, but resolving of build dependencies errored: ${err}.`
+											);
+											logger.debug(err.stack);
+											return resolve(false);
+										}
+										if (valid) {
+											newBuildDependencies = packContainer.buildDependencies;
+											resolveResults = packContainer.resolveResults;
+											return resolve(true);
+										}
+										logger.log(
+											`Restored pack from ${cacheLocation}${this._extension}, but build dependencies resolve to different locations.`
+										);
+										return resolve(false);
+									}
+								);
+							}
+						);
+					})
+				])
+					.catch((err) => {
+						logger.timeEnd("check build dependencies");
+						throw err;
+					})
+					.then(([buildSnapshotValid, resolveValid]) => {
+						logger.timeEnd("check build dependencies");
+						if (buildSnapshotValid && resolveValid) {
+							logger.time("restore cache content metadata");
+							const d =
+								/** @type {() => Pack} */
+								(packContainer.data)();
+							logger.timeEnd("restore cache content metadata");
+							return d;
+						}
+						return undefined;
+					});
+			})
+			.then((pack) => {
+				if (pack) {
+					pack.maxAge = this.maxAge;
+					this.buildSnapshot = buildSnapshot;
+					if (buildDependencies) this.buildDependencies = buildDependencies;
+					if (newBuildDependencies) {
+						this.newBuildDependencies.addAll(newBuildDependencies);
+					}
+					this.resolveResults = resolveResults;
+					this.resolveBuildDependenciesSnapshot =
+						resolveBuildDependenciesSnapshot;
+					return pack;
+				}
+				return new Pack(logger, this.maxAge);
+			})
+			.catch((err) => {
+				this.logger.warn(
+					`Restoring pack from ${cacheLocation}${this._extension} failed: ${err}`
+				);
+				this.logger.debug(err.stack);
+				return new Pack(logger, this.maxAge);
+			});
+	}
+
+	/**
+	 * @param {string} identifier unique name for the resource
+	 * @param {Etag | null} etag etag of the resource
+	 * @param {Data} data cached content
+	 * @returns {Promise} promise
+	 */
+	store(identifier, etag, data) {
+		if (this.readonly) return Promise.resolve();
+
+		return this._getPack().then((pack) => {
+			pack.set(identifier, etag === null ? null : etag.toString(), data);
+		});
+	}
+
+	/**
+	 * @param {string} identifier unique name for the resource
+	 * @param {Etag | null} etag etag of the resource
+	 * @returns {Promise} promise to the cached content
+	 */
+	restore(identifier, etag) {
+		return this._getPack()
+			.then((pack) =>
+				pack.get(identifier, etag === null ? null : etag.toString())
+			)
+			.catch((err) => {
+				if (err && err.code !== "ENOENT") {
+					this.logger.warn(
+						`Restoring failed for ${identifier} from pack: ${err}`
+					);
+					this.logger.debug(err.stack);
+				}
+			});
+	}
+
+	/**
+	 * @param {FileSystemDependencies | Iterable} dependencies dependencies to store
+	 */
+	storeBuildDependencies(dependencies) {
+		if (this.readonly) return;
+		this.newBuildDependencies.addAll(dependencies);
+	}
+
+	afterAllStored() {
+		const packPromise = this.packPromise;
+		if (packPromise === undefined) return Promise.resolve();
+		const reportProgress = ProgressPlugin.getReporter(this.compiler);
+		return (this.storePromise = packPromise
+			.then((pack) => {
+				pack.stopCapturingRequests();
+				if (!pack.invalid) return;
+				this.packPromise = undefined;
+				this.logger.log("Storing pack...");
+				/** @type {undefined | Promise} */
+				let promise;
+				/** @type {Set} */
+				const newBuildDependencies = new Set();
+				for (const dep of this.newBuildDependencies) {
+					if (!this.buildDependencies.has(dep)) {
+						newBuildDependencies.add(dep);
+					}
+				}
+				if (newBuildDependencies.size > 0 || !this.buildSnapshot) {
+					if (reportProgress) reportProgress(0.5, "resolve build dependencies");
+					this.logger.debug(
+						`Capturing build dependencies... (${[...newBuildDependencies].join(", ")})`
+					);
+					promise = new Promise(
+						/**
+						 * @param {(value?: undefined) => void} resolve resolve
+						 * @param {(reason?: Error) => void} reject reject
+						 */
+						(resolve, reject) => {
+							this.logger.time("resolve build dependencies");
+							this.fileSystemInfo.resolveBuildDependencies(
+								this.context,
+								newBuildDependencies,
+								(err, result) => {
+									this.logger.timeEnd("resolve build dependencies");
+									if (err) return reject(err);
+
+									this.logger.time("snapshot build dependencies");
+									const {
+										files,
+										directories,
+										missing,
+										resolveResults,
+										resolveDependencies
+									} = /** @type {ResolveBuildDependenciesResult} */ (result);
+									if (this.resolveResults) {
+										for (const [key, value] of resolveResults) {
+											this.resolveResults.set(key, value);
+										}
+									} else {
+										this.resolveResults = resolveResults;
+									}
+									if (reportProgress) {
+										reportProgress(
+											0.6,
+											"snapshot build dependencies",
+											"resolving"
+										);
+									}
+									this.fileSystemInfo.createSnapshot(
+										undefined,
+										resolveDependencies.files,
+										resolveDependencies.directories,
+										resolveDependencies.missing,
+										this.snapshot.resolveBuildDependencies,
+										(err, snapshot) => {
+											if (err) {
+												this.logger.timeEnd("snapshot build dependencies");
+												return reject(err);
+											}
+											if (!snapshot) {
+												this.logger.timeEnd("snapshot build dependencies");
+												return reject(
+													new Error("Unable to snapshot resolve dependencies")
+												);
+											}
+											if (this.resolveBuildDependenciesSnapshot) {
+												this.resolveBuildDependenciesSnapshot =
+													this.fileSystemInfo.mergeSnapshots(
+														this.resolveBuildDependenciesSnapshot,
+														snapshot
+													);
+											} else {
+												this.resolveBuildDependenciesSnapshot = snapshot;
+											}
+											if (reportProgress) {
+												reportProgress(
+													0.7,
+													"snapshot build dependencies",
+													"modules"
+												);
+											}
+											this.fileSystemInfo.createSnapshot(
+												undefined,
+												files,
+												directories,
+												missing,
+												this.snapshot.buildDependencies,
+												(err, snapshot) => {
+													this.logger.timeEnd("snapshot build dependencies");
+													if (err) return reject(err);
+													if (!snapshot) {
+														return reject(
+															new Error("Unable to snapshot build dependencies")
+														);
+													}
+													this.logger.debug("Captured build dependencies");
+
+													if (this.buildSnapshot) {
+														this.buildSnapshot =
+															this.fileSystemInfo.mergeSnapshots(
+																this.buildSnapshot,
+																snapshot
+															);
+													} else {
+														this.buildSnapshot = snapshot;
+													}
+
+													resolve();
+												}
+											);
+										}
+									);
+								}
+							);
+						}
+					);
+				} else {
+					promise = Promise.resolve();
+				}
+				return promise.then(() => {
+					if (reportProgress) reportProgress(0.8, "serialize pack");
+					this.logger.time("store pack");
+					const updatedBuildDependencies = new Set(this.buildDependencies);
+					for (const dep of newBuildDependencies) {
+						updatedBuildDependencies.add(dep);
+					}
+					const content = new PackContainer(
+						pack,
+						this.version,
+						/** @type {Snapshot} */
+						(this.buildSnapshot),
+						updatedBuildDependencies,
+						/** @type {ResolveResults} */
+						(this.resolveResults),
+						/** @type {Snapshot} */
+						(this.resolveBuildDependenciesSnapshot)
+					);
+					return this.fileSerializer
+						.serialize(content, {
+							filename: `${this.cacheLocation}/index${this._extension}`,
+							extension: `${this._extension}`,
+							logger: this.logger,
+							profile: this.profile
+						})
+						.then(() => {
+							for (const dep of newBuildDependencies) {
+								this.buildDependencies.add(dep);
+							}
+							this.newBuildDependencies.clear();
+							this.logger.timeEnd("store pack");
+							const stats = pack.getContentStats();
+							this.logger.log(
+								"Stored pack (%d items, %d files, %d MiB)",
+								pack.itemInfo.size,
+								stats.count,
+								Math.round(stats.size / 1024 / 1024)
+							);
+						})
+						.catch((err) => {
+							this.logger.timeEnd("store pack");
+							this.logger.warn(`Caching failed for pack: ${err}`);
+							this.logger.debug(err.stack);
+						});
+				});
+			})
+			.catch((err) => {
+				this.logger.warn(`Caching failed for pack: ${err}`);
+				this.logger.debug(err.stack);
+			}));
+	}
+
+	clear() {
+		this.fileSystemInfo.clear();
+		this.buildDependencies.clear();
+		this.newBuildDependencies.clear();
+		this.resolveBuildDependenciesSnapshot = undefined;
+		this.resolveResults = undefined;
+		this.buildSnapshot = undefined;
+		this.packPromise = undefined;
+	}
+}
+
+module.exports = PackFileCacheStrategy;
diff --git a/lib/cache/ResolverCachePlugin.js b/lib/cache/ResolverCachePlugin.js
new file mode 100644
index 00000000000..a09789e01f5
--- /dev/null
+++ b/lib/cache/ResolverCachePlugin.js
@@ -0,0 +1,450 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const LazySet = require("../util/LazySet");
+const makeSerializable = require("../util/makeSerializable");
+
+/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
+/** @typedef {import("enhanced-resolve").ResolveOptions} ResolveOptions */
+/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
+/** @typedef {import("enhanced-resolve").Resolver} Resolver */
+/** @typedef {import("../CacheFacade").ItemCacheFacade} ItemCacheFacade */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../FileSystemInfo")} FileSystemInfo */
+/** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
+/** @typedef {import("../FileSystemInfo").SnapshotOptions} SnapshotOptions */
+/** @typedef {import("../ResolverFactory").ResolveOptionsWithDependencyType} ResolveOptionsWithDependencyType */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
+/**
+ * @template T
+ * @typedef {import("tapable").SyncHook} SyncHook
+ */
+
+/** @typedef {Set} Dependencies  */
+
+class CacheEntry {
+	/**
+	 * @param {ResolveRequest} result result
+	 * @param {Snapshot} snapshot snapshot
+	 */
+	constructor(result, snapshot) {
+		this.result = result;
+		this.snapshot = snapshot;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize({ write }) {
+		write(this.result);
+		write(this.snapshot);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize({ read }) {
+		this.result = read();
+		this.snapshot = read();
+	}
+}
+
+makeSerializable(CacheEntry, "webpack/lib/cache/ResolverCachePlugin");
+
+/**
+ * @template T
+ * @param {Set | LazySet} set set to add items to
+ * @param {Set | LazySet | Iterable} otherSet set to add items from
+ * @returns {void}
+ */
+const addAllToSet = (set, otherSet) => {
+	if (set instanceof LazySet) {
+		set.addAll(otherSet);
+	} else {
+		for (const item of otherSet) {
+			set.add(item);
+		}
+	}
+};
+
+/**
+ * @template {object} T
+ * @param {T} object an object
+ * @param {boolean} excludeContext if true, context is not included in string
+ * @returns {string} stringified version
+ */
+const objectToString = (object, excludeContext) => {
+	let str = "";
+	for (const key in object) {
+		if (excludeContext && key === "context") continue;
+		const value = object[key];
+		str +=
+			typeof value === "object" && value !== null
+				? `|${key}=[${objectToString(value, false)}|]`
+				: `|${key}=|${value}`;
+	}
+	return str;
+};
+
+/** @typedef {NonNullable} Yield */
+
+const PLUGIN_NAME = "ResolverCachePlugin";
+
+class ResolverCachePlugin {
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		const cache = compiler.getCache(PLUGIN_NAME);
+		/** @type {FileSystemInfo} */
+		let fileSystemInfo;
+		/** @type {SnapshotOptions | undefined} */
+		let snapshotOptions;
+		let realResolves = 0;
+		let cachedResolves = 0;
+		let cacheInvalidResolves = 0;
+		let concurrentResolves = 0;
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
+			snapshotOptions = compilation.options.snapshot.resolve;
+			fileSystemInfo = compilation.fileSystemInfo;
+			compilation.hooks.finishModules.tap(PLUGIN_NAME, () => {
+				if (realResolves + cachedResolves > 0) {
+					const logger = compilation.getLogger(`webpack.${PLUGIN_NAME}`);
+					logger.log(
+						`${Math.round(
+							(100 * realResolves) / (realResolves + cachedResolves)
+						)}% really resolved (${realResolves} real resolves with ${cacheInvalidResolves} cached but invalid, ${cachedResolves} cached valid, ${concurrentResolves} concurrent)`
+					);
+					realResolves = 0;
+					cachedResolves = 0;
+					cacheInvalidResolves = 0;
+					concurrentResolves = 0;
+				}
+			});
+		});
+
+		/** @typedef {(err?: Error | null, resolveRequest?: ResolveRequest | null) => void} Callback */
+		/** @typedef {ResolveRequest & { _ResolverCachePluginCacheMiss: true }} ResolveRequestWithCacheMiss */
+
+		/**
+		 * @param {ItemCacheFacade} itemCache cache
+		 * @param {Resolver} resolver the resolver
+		 * @param {ResolveContext} resolveContext context for resolving meta info
+		 * @param {ResolveRequest} request the request info object
+		 * @param {Callback} callback callback function
+		 * @returns {void}
+		 */
+		const doRealResolve = (
+			itemCache,
+			resolver,
+			resolveContext,
+			request,
+			callback
+		) => {
+			realResolves++;
+			const newRequest =
+				/** @type {ResolveRequestWithCacheMiss} */
+				({
+					_ResolverCachePluginCacheMiss: true,
+					...request
+				});
+			/** @type {ResolveContext} */
+			const newResolveContext = {
+				...resolveContext,
+				stack: new Set(),
+				missingDependencies: new LazySet(),
+				fileDependencies: new LazySet(),
+				contextDependencies: new LazySet()
+			};
+			/** @type {ResolveRequest[] | undefined} */
+			let yieldResult;
+			let withYield = false;
+			if (typeof newResolveContext.yield === "function") {
+				yieldResult = [];
+				withYield = true;
+				newResolveContext.yield = (obj) =>
+					/** @type {ResolveRequest[]} */
+					(yieldResult).push(obj);
+			}
+			/**
+			 * @param {"fileDependencies" | "contextDependencies" | "missingDependencies"} key key
+			 */
+			const propagate = (key) => {
+				if (resolveContext[key]) {
+					addAllToSet(
+						/** @type {Dependencies} */ (resolveContext[key]),
+						/** @type {Dependencies} */ (newResolveContext[key])
+					);
+				}
+			};
+			const resolveTime = Date.now();
+			resolver.doResolve(
+				resolver.hooks.resolve,
+				newRequest,
+				"Cache miss",
+				newResolveContext,
+				(err, result) => {
+					propagate("fileDependencies");
+					propagate("contextDependencies");
+					propagate("missingDependencies");
+					if (err) return callback(err);
+					const fileDependencies = newResolveContext.fileDependencies;
+					const contextDependencies = newResolveContext.contextDependencies;
+					const missingDependencies = newResolveContext.missingDependencies;
+					fileSystemInfo.createSnapshot(
+						resolveTime,
+						/** @type {Dependencies} */
+						(fileDependencies),
+						/** @type {Dependencies} */
+						(contextDependencies),
+						/** @type {Dependencies} */
+						(missingDependencies),
+						snapshotOptions,
+						(err, snapshot) => {
+							if (err) return callback(err);
+							const resolveResult = withYield ? yieldResult : result;
+							// since we intercept resolve hook
+							// we still can get result in callback
+							if (withYield && result) {
+								/** @type {ResolveRequest[]} */
+								(yieldResult).push(result);
+							}
+							if (!snapshot) {
+								if (resolveResult) {
+									return callback(
+										null,
+										/** @type {ResolveRequest} */
+										(resolveResult)
+									);
+								}
+								return callback();
+							}
+							itemCache.store(
+								new CacheEntry(
+									/** @type {ResolveRequest} */
+									(resolveResult),
+									snapshot
+								),
+								(storeErr) => {
+									if (storeErr) return callback(storeErr);
+									if (resolveResult) {
+										return callback(
+											null,
+											/** @type {ResolveRequest} */
+											(resolveResult)
+										);
+									}
+									callback();
+								}
+							);
+						}
+					);
+				}
+			);
+		};
+		compiler.resolverFactory.hooks.resolver.intercept({
+			factory(type, _hook) {
+				/** @typedef {(err?: Error, resolveRequest?: ResolveRequest) => void} ActiveRequest */
+				/** @type {Map} */
+				const activeRequests = new Map();
+				/** @type {Map} */
+				const activeRequestsWithYield = new Map();
+				const hook =
+					/** @type {SyncHook<[Resolver, ResolveOptions, ResolveOptionsWithDependencyType]>} */
+					(_hook);
+				hook.tap(PLUGIN_NAME, (resolver, options, userOptions) => {
+					if (
+						/** @type {ResolveOptions & { cache: boolean }} */
+						(options).cache !== true
+					) {
+						return;
+					}
+					const optionsIdent = objectToString(userOptions, false);
+					const cacheWithContext =
+						options.cacheWithContext !== undefined
+							? options.cacheWithContext
+							: false;
+					resolver.hooks.resolve.tapAsync(
+						{
+							name: PLUGIN_NAME,
+							stage: -100
+						},
+						(request, resolveContext, callback) => {
+							if (
+								/** @type {ResolveRequestWithCacheMiss} */
+								(request)._ResolverCachePluginCacheMiss ||
+								!fileSystemInfo
+							) {
+								return callback();
+							}
+							const withYield = typeof resolveContext.yield === "function";
+							const identifier = `${type}${
+								withYield ? "|yield" : "|default"
+							}${optionsIdent}${objectToString(request, !cacheWithContext)}`;
+
+							if (withYield) {
+								const activeRequest = activeRequestsWithYield.get(identifier);
+								if (activeRequest) {
+									activeRequest[0].push(callback);
+									activeRequest[1].push(
+										/** @type {Yield} */
+										(resolveContext.yield)
+									);
+									return;
+								}
+							} else {
+								const activeRequest = activeRequests.get(identifier);
+								if (activeRequest) {
+									activeRequest.push(callback);
+									return;
+								}
+							}
+							const itemCache = cache.getItemCache(identifier, null);
+							/** @type {Callback[] | false | undefined} */
+							let callbacks;
+							/** @type {Yield[] | undefined} */
+							let yields;
+
+							/**
+							 * @type {(err?: Error | null, result?: ResolveRequest | ResolveRequest[] | null) => void}
+							 */
+							const done = withYield
+								? (err, result) => {
+										if (callbacks === undefined) {
+											if (err) {
+												callback(err);
+											} else {
+												if (result) {
+													for (const r of /** @type {ResolveRequest[]} */ (
+														result
+													)) {
+														/** @type {Yield} */
+														(resolveContext.yield)(r);
+													}
+												}
+												callback(null, null);
+											}
+											yields = undefined;
+											callbacks = false;
+										} else {
+											const definedCallbacks =
+												/** @type {Callback[]} */
+												(callbacks);
+
+											if (err) {
+												for (const cb of definedCallbacks) cb(err);
+											} else {
+												for (let i = 0; i < definedCallbacks.length; i++) {
+													const cb = definedCallbacks[i];
+													const yield_ = /** @type {Yield[]} */ (yields)[i];
+													if (result) {
+														for (const r of /** @type {ResolveRequest[]} */ (
+															result
+														)) {
+															yield_(r);
+														}
+													}
+													cb(null, null);
+												}
+											}
+											activeRequestsWithYield.delete(identifier);
+											yields = undefined;
+											callbacks = false;
+										}
+									}
+								: (err, result) => {
+										if (callbacks === undefined) {
+											callback(err, /** @type {ResolveRequest} */ (result));
+											callbacks = false;
+										} else {
+											for (const callback of /** @type {Callback[]} */ (
+												callbacks
+											)) {
+												callback(err, /** @type {ResolveRequest} */ (result));
+											}
+											activeRequests.delete(identifier);
+											callbacks = false;
+										}
+									};
+							/**
+							 * @param {(Error | null)=} err error if any
+							 * @param {(CacheEntry | null)=} cacheEntry cache entry
+							 * @returns {void}
+							 */
+							const processCacheResult = (err, cacheEntry) => {
+								if (err) return done(err);
+
+								if (cacheEntry) {
+									const { snapshot, result } = cacheEntry;
+									fileSystemInfo.checkSnapshotValid(snapshot, (err, valid) => {
+										if (err || !valid) {
+											cacheInvalidResolves++;
+											return doRealResolve(
+												itemCache,
+												resolver,
+												resolveContext,
+												request,
+												done
+											);
+										}
+										cachedResolves++;
+										if (resolveContext.missingDependencies) {
+											addAllToSet(
+												/** @type {Dependencies} */
+												(resolveContext.missingDependencies),
+												snapshot.getMissingIterable()
+											);
+										}
+										if (resolveContext.fileDependencies) {
+											addAllToSet(
+												/** @type {Dependencies} */
+												(resolveContext.fileDependencies),
+												snapshot.getFileIterable()
+											);
+										}
+										if (resolveContext.contextDependencies) {
+											addAllToSet(
+												/** @type {Dependencies} */
+												(resolveContext.contextDependencies),
+												snapshot.getContextIterable()
+											);
+										}
+										done(null, result);
+									});
+								} else {
+									doRealResolve(
+										itemCache,
+										resolver,
+										resolveContext,
+										request,
+										done
+									);
+								}
+							};
+							itemCache.get(processCacheResult);
+							if (withYield && callbacks === undefined) {
+								callbacks = [callback];
+								yields = [/** @type {Yield} */ (resolveContext.yield)];
+								activeRequestsWithYield.set(identifier, [callbacks, yields]);
+							} else if (callbacks === undefined) {
+								callbacks = [callback];
+								activeRequests.set(identifier, callbacks);
+							}
+						}
+					);
+				});
+				return hook;
+			}
+		});
+	}
+}
+
+module.exports = ResolverCachePlugin;
diff --git a/lib/cache/getLazyHashedEtag.js b/lib/cache/getLazyHashedEtag.js
new file mode 100644
index 00000000000..ce7448d4399
--- /dev/null
+++ b/lib/cache/getLazyHashedEtag.js
@@ -0,0 +1,91 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { DEFAULTS } = require("../config/defaults");
+const createHash = require("../util/createHash");
+
+/** @typedef {import("../util/Hash")} Hash */
+/** @typedef {typeof import("../util/Hash")} HashConstructor */
+/** @typedef {import("../util/Hash").HashFunction} HashFunction */
+
+/**
+ * @typedef {object} HashableObject
+ * @property {(hash: Hash) => void} updateHash
+ */
+
+class LazyHashedEtag {
+	/**
+	 * @param {HashableObject} obj object with updateHash method
+	 * @param {HashFunction} hashFunction the hash function to use
+	 */
+	constructor(obj, hashFunction = DEFAULTS.HASH_FUNCTION) {
+		/** @type {HashableObject} */
+		this._obj = obj;
+		/** @type {undefined | string} */
+		this._hash = undefined;
+		/** @type {HashFunction} */
+		this._hashFunction = hashFunction;
+	}
+
+	/**
+	 * @returns {string} hash of object
+	 */
+	toString() {
+		if (this._hash === undefined) {
+			const hash = createHash(this._hashFunction);
+			this._obj.updateHash(hash);
+			this._hash = hash.digest("base64");
+		}
+		return this._hash;
+	}
+}
+
+/** @typedef {WeakMap} InnerCache */
+
+/** @type {Map} */
+const mapStrings = new Map();
+
+/** @type {WeakMap} */
+const mapObjects = new WeakMap();
+
+/**
+ * @param {HashableObject} obj object with updateHash method
+ * @param {HashFunction=} hashFunction the hash function to use
+ * @returns {LazyHashedEtag} etag
+ */
+const getter = (obj, hashFunction = DEFAULTS.HASH_FUNCTION) => {
+	/** @type {undefined | InnerCache} */
+	let innerMap;
+	if (typeof hashFunction === "string") {
+		innerMap = mapStrings.get(hashFunction);
+		if (innerMap === undefined) {
+			const newHash = new LazyHashedEtag(obj, hashFunction);
+			/** @type {InnerCache} */
+			innerMap = new WeakMap();
+			innerMap.set(obj, newHash);
+			mapStrings.set(hashFunction, innerMap);
+			return newHash;
+		}
+	} else {
+		innerMap = mapObjects.get(hashFunction);
+		if (innerMap === undefined) {
+			const newHash = new LazyHashedEtag(obj, hashFunction);
+			/** @type {InnerCache} */
+			innerMap = new WeakMap();
+			innerMap.set(obj, newHash);
+			mapObjects.set(hashFunction, innerMap);
+			return newHash;
+		}
+	}
+	const hash = innerMap.get(obj);
+	if (hash !== undefined) return hash;
+	const newHash = new LazyHashedEtag(obj, hashFunction);
+	innerMap.set(obj, newHash);
+	return newHash;
+};
+
+module.exports = getter;
diff --git a/lib/cache/mergeEtags.js b/lib/cache/mergeEtags.js
new file mode 100644
index 00000000000..c7d4e819e67
--- /dev/null
+++ b/lib/cache/mergeEtags.js
@@ -0,0 +1,71 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/** @typedef {import("../Cache").Etag} Etag */
+
+class MergedEtag {
+	/**
+	 * @param {Etag} a first
+	 * @param {Etag} b second
+	 */
+	constructor(a, b) {
+		this.a = a;
+		this.b = b;
+	}
+
+	toString() {
+		return `${this.a.toString()}|${this.b.toString()}`;
+	}
+}
+
+/** @type {WeakMap>} */
+const dualObjectMap = new WeakMap();
+/** @type {WeakMap>} */
+const objectStringMap = new WeakMap();
+
+/**
+ * @param {Etag} a first
+ * @param {Etag} b second
+ * @returns {string | MergedEtag} result
+ */
+const mergeEtags = (a, b) => {
+	if (typeof a === "string") {
+		if (typeof b === "string") {
+			return `${a}|${b}`;
+		}
+		const temp = b;
+		b = a;
+		a = temp;
+	} else if (typeof b !== "string") {
+		// both a and b are objects
+		let map = dualObjectMap.get(a);
+		if (map === undefined) {
+			dualObjectMap.set(a, (map = new WeakMap()));
+		}
+		const mergedEtag = map.get(b);
+		if (mergedEtag === undefined) {
+			const newMergedEtag = new MergedEtag(a, b);
+			map.set(b, newMergedEtag);
+			return newMergedEtag;
+		}
+		return mergedEtag;
+	}
+	// a is object, b is string
+	let map = objectStringMap.get(a);
+	if (map === undefined) {
+		objectStringMap.set(a, (map = new Map()));
+	}
+	const mergedEtag = map.get(b);
+	if (mergedEtag === undefined) {
+		const newMergedEtag = new MergedEtag(a, b);
+		map.set(b, newMergedEtag);
+		return newMergedEtag;
+	}
+	return mergedEtag;
+};
+
+module.exports = mergeEtags;
diff --git a/lib/cli.js b/lib/cli.js
new file mode 100644
index 00000000000..4193ff72dbe
--- /dev/null
+++ b/lib/cli.js
@@ -0,0 +1,861 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const path = require("path");
+const tty = require("tty");
+const webpackSchema = require("../schemas/WebpackOptions.json");
+
+/** @typedef {import("json-schema").JSONSchema4} JSONSchema4 */
+/** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */
+/** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */
+/** @typedef {JSONSchema4 | JSONSchema6 | JSONSchema7} JSONSchema */
+/** @typedef {JSONSchema & { absolutePath: boolean, instanceof: string, cli: { helper?: boolean, exclude?: boolean, description?: string, negatedDescription?: string, resetDescription?: string } }} Schema */
+
+// TODO add originPath to PathItem for better errors
+/**
+ * @typedef {object} PathItem
+ * @property {Schema} schema the part of the schema
+ * @property {string} path the path in the config
+ */
+
+/** @typedef {"unknown-argument" | "unexpected-non-array-in-path" | "unexpected-non-object-in-path" | "multiple-values-unexpected" | "invalid-value"} ProblemType */
+
+/** @typedef {string | number | boolean | RegExp} Value */
+
+/**
+ * @typedef {object} Problem
+ * @property {ProblemType} type
+ * @property {string} path
+ * @property {string} argument
+ * @property {Value=} value
+ * @property {number=} index
+ * @property {string=} expected
+ */
+
+/**
+ * @typedef {object} LocalProblem
+ * @property {ProblemType} type
+ * @property {string} path
+ * @property {string=} expected
+ */
+
+/** @typedef {{ [key: string]: EnumValue }} EnumValueObject */
+/** @typedef {EnumValue[]} EnumValueArray */
+/** @typedef {string | number | boolean | EnumValueObject | EnumValueArray | null} EnumValue */
+
+/**
+ * @typedef {object} ArgumentConfig
+ * @property {string=} description
+ * @property {string=} negatedDescription
+ * @property {string} path
+ * @property {boolean} multiple
+ * @property {"enum" | "string" | "path" | "number" | "boolean" | "RegExp" | "reset"} type
+ * @property {EnumValue[]=} values
+ */
+
+/** @typedef {"string" | "number" | "boolean"} SimpleType */
+
+/**
+ * @typedef {object} Argument
+ * @property {string | undefined} description
+ * @property {SimpleType} simpleType
+ * @property {boolean} multiple
+ * @property {ArgumentConfig[]} configs
+ */
+
+/** @typedef {Record} Flags */
+
+/** @typedef {Record} ObjectConfiguration */
+
+/**
+ * @param {Schema=} schema a json schema to create arguments for (by default webpack schema is used)
+ * @returns {Flags} object of arguments
+ */
+const getArguments = (schema = webpackSchema) => {
+	/** @type {Flags} */
+	const flags = {};
+
+	/**
+	 * @param {string} input input
+	 * @returns {string} result
+	 */
+	const pathToArgumentName = (input) =>
+		input
+			.replace(/\./g, "-")
+			.replace(/\[\]/g, "")
+			.replace(
+				/(\p{Uppercase_Letter}+|\p{Lowercase_Letter}|\d)(\p{Uppercase_Letter}+)/gu,
+				"$1-$2"
+			)
+			.replace(/-?[^\p{Uppercase_Letter}\p{Lowercase_Letter}\d]+/gu, "-")
+			.toLowerCase();
+
+	/**
+	 * @param {string} path path
+	 * @returns {Schema} schema part
+	 */
+	const getSchemaPart = (path) => {
+		const newPath = path.split("/");
+
+		let schemaPart = schema;
+
+		for (let i = 1; i < newPath.length; i++) {
+			const inner = schemaPart[/** @type {keyof Schema} */ (newPath[i])];
+
+			if (!inner) {
+				break;
+			}
+
+			schemaPart = inner;
+		}
+
+		return schemaPart;
+	};
+
+	/**
+	 * @param {PathItem[]} path path in the schema
+	 * @returns {string | undefined} description
+	 */
+	const getDescription = (path) => {
+		for (const { schema } of path) {
+			if (schema.cli) {
+				if (schema.cli.helper) continue;
+				if (schema.cli.description) return schema.cli.description;
+			}
+			if (schema.description) return schema.description;
+		}
+	};
+
+	/**
+	 * @param {PathItem[]} path path in the schema
+	 * @returns {string | undefined} negative description
+	 */
+	const getNegatedDescription = (path) => {
+		for (const { schema } of path) {
+			if (schema.cli) {
+				if (schema.cli.helper) continue;
+				if (schema.cli.negatedDescription) return schema.cli.negatedDescription;
+			}
+		}
+	};
+
+	/**
+	 * @param {PathItem[]} path path in the schema
+	 * @returns {string | undefined} reset description
+	 */
+	const getResetDescription = (path) => {
+		for (const { schema } of path) {
+			if (schema.cli) {
+				if (schema.cli.helper) continue;
+				if (schema.cli.resetDescription) return schema.cli.resetDescription;
+			}
+		}
+	};
+
+	/**
+	 * @param {Schema} schemaPart schema
+	 * @returns {Pick | undefined} partial argument config
+	 */
+	const schemaToArgumentConfig = (schemaPart) => {
+		if (schemaPart.enum) {
+			return {
+				type: "enum",
+				values: schemaPart.enum
+			};
+		}
+		switch (schemaPart.type) {
+			case "number":
+				return {
+					type: "number"
+				};
+			case "string":
+				return {
+					type: schemaPart.absolutePath ? "path" : "string"
+				};
+			case "boolean":
+				return {
+					type: "boolean"
+				};
+		}
+		if (schemaPart.instanceof === "RegExp") {
+			return {
+				type: "RegExp"
+			};
+		}
+		return undefined;
+	};
+
+	/**
+	 * @param {PathItem[]} path path in the schema
+	 * @returns {void}
+	 */
+	const addResetFlag = (path) => {
+		const schemaPath = path[0].path;
+		const name = pathToArgumentName(`${schemaPath}.reset`);
+		const description =
+			getResetDescription(path) ||
+			`Clear all items provided in '${schemaPath}' configuration. ${getDescription(
+				path
+			)}`;
+		flags[name] = {
+			configs: [
+				{
+					type: "reset",
+					multiple: false,
+					description,
+					path: schemaPath
+				}
+			],
+			description: undefined,
+			simpleType:
+				/** @type {SimpleType} */
+				(/** @type {unknown} */ (undefined)),
+			multiple: /** @type {boolean} */ (/** @type {unknown} */ (undefined))
+		};
+	};
+
+	/**
+	 * @param {PathItem[]} path full path in schema
+	 * @param {boolean} multiple inside of an array
+	 * @returns {number} number of arguments added
+	 */
+	const addFlag = (path, multiple) => {
+		const argConfigBase = schemaToArgumentConfig(path[0].schema);
+		if (!argConfigBase) return 0;
+
+		const negatedDescription = getNegatedDescription(path);
+		const name = pathToArgumentName(path[0].path);
+		/** @type {ArgumentConfig} */
+		const argConfig = {
+			...argConfigBase,
+			multiple,
+			description: getDescription(path),
+			path: path[0].path
+		};
+
+		if (negatedDescription) {
+			argConfig.negatedDescription = negatedDescription;
+		}
+
+		if (!flags[name]) {
+			flags[name] = {
+				configs: [],
+				description: undefined,
+				simpleType:
+					/** @type {SimpleType} */
+					(/** @type {unknown} */ (undefined)),
+				multiple: /** @type {boolean} */ (/** @type {unknown} */ (undefined))
+			};
+		}
+
+		if (
+			flags[name].configs.some(
+				(item) => JSON.stringify(item) === JSON.stringify(argConfig)
+			)
+		) {
+			return 0;
+		}
+
+		if (
+			flags[name].configs.some(
+				(item) => item.type === argConfig.type && item.multiple !== multiple
+			)
+		) {
+			if (multiple) {
+				throw new Error(
+					`Conflicting schema for ${path[0].path} with ${argConfig.type} type (array type must be before single item type)`
+				);
+			}
+			return 0;
+		}
+
+		flags[name].configs.push(argConfig);
+
+		return 1;
+	};
+
+	// TODO support `not` and `if/then/else`
+	// TODO support `const`, but we don't use it on our schema
+	/**
+	 * @param {Schema} schemaPart the current schema
+	 * @param {string} schemaPath the current path in the schema
+	 * @param {PathItem[]} path all previous visited schemaParts
+	 * @param {string | null} inArray if inside of an array, the path to the array
+	 * @returns {number} added arguments
+	 */
+	const traverse = (schemaPart, schemaPath = "", path = [], inArray = null) => {
+		while (schemaPart.$ref) {
+			schemaPart = getSchemaPart(schemaPart.$ref);
+		}
+
+		const repetitions = path.filter(({ schema }) => schema === schemaPart);
+		if (
+			repetitions.length >= 2 ||
+			repetitions.some(({ path }) => path === schemaPath)
+		) {
+			return 0;
+		}
+
+		if (schemaPart.cli && schemaPart.cli.exclude) return 0;
+
+		/** @type {PathItem[]} */
+		const fullPath = [{ schema: schemaPart, path: schemaPath }, ...path];
+
+		let addedArguments = 0;
+
+		addedArguments += addFlag(fullPath, Boolean(inArray));
+
+		if (schemaPart.type === "object") {
+			if (schemaPart.properties) {
+				for (const property of Object.keys(schemaPart.properties)) {
+					addedArguments += traverse(
+						/** @type {Schema} */
+						(schemaPart.properties[property]),
+						schemaPath ? `${schemaPath}.${property}` : property,
+						fullPath,
+						inArray
+					);
+				}
+			}
+
+			return addedArguments;
+		}
+
+		if (schemaPart.type === "array") {
+			if (inArray) {
+				return 0;
+			}
+			if (Array.isArray(schemaPart.items)) {
+				const i = 0;
+				for (const item of schemaPart.items) {
+					addedArguments += traverse(
+						/** @type {Schema} */
+						(item),
+						`${schemaPath}.${i}`,
+						fullPath,
+						schemaPath
+					);
+				}
+
+				return addedArguments;
+			}
+
+			addedArguments += traverse(
+				/** @type {Schema} */
+				(schemaPart.items),
+				`${schemaPath}[]`,
+				fullPath,
+				schemaPath
+			);
+
+			if (addedArguments > 0) {
+				addResetFlag(fullPath);
+				addedArguments++;
+			}
+
+			return addedArguments;
+		}
+
+		const maybeOf = schemaPart.oneOf || schemaPart.anyOf || schemaPart.allOf;
+
+		if (maybeOf) {
+			const items = maybeOf;
+
+			for (let i = 0; i < items.length; i++) {
+				addedArguments += traverse(
+					/** @type {Schema} */
+					(items[i]),
+					schemaPath,
+					fullPath,
+					inArray
+				);
+			}
+
+			return addedArguments;
+		}
+
+		return addedArguments;
+	};
+
+	traverse(schema);
+
+	// Summarize flags
+	for (const name of Object.keys(flags)) {
+		/** @type {Argument} */
+		const argument = flags[name];
+		argument.description = argument.configs.reduce((desc, { description }) => {
+			if (!desc) return description;
+			if (!description) return desc;
+			if (desc.includes(description)) return desc;
+			return `${desc} ${description}`;
+		}, /** @type {string | undefined} */ (undefined));
+		argument.simpleType =
+			/** @type {SimpleType} */
+			(
+				argument.configs.reduce((t, argConfig) => {
+					/** @type {SimpleType} */
+					let type = "string";
+					switch (argConfig.type) {
+						case "number":
+							type = "number";
+							break;
+						case "reset":
+						case "boolean":
+							type = "boolean";
+							break;
+						case "enum": {
+							const values =
+								/** @type {NonNullable} */
+								(argConfig.values);
+
+							if (values.every((v) => typeof v === "boolean")) type = "boolean";
+							if (values.every((v) => typeof v === "number")) type = "number";
+							break;
+						}
+					}
+					if (t === undefined) return type;
+					return t === type ? t : "string";
+				}, /** @type {SimpleType | undefined} */ (undefined))
+			);
+		argument.multiple = argument.configs.some((c) => c.multiple);
+	}
+
+	return flags;
+};
+
+/** @type {WeakMap} */
+const cliAddedItems = new WeakMap();
+
+/** @typedef {string | number} Property */
+
+/**
+ * @param {ObjectConfiguration} config configuration
+ * @param {string} schemaPath path in the config
+ * @param {number | undefined} index index of value when multiple values are provided, otherwise undefined
+ * @returns {{ problem?: LocalProblem, object?: ObjectConfiguration, property?: Property, value?: EXPECTED_OBJECT | EXPECTED_ANY[] }} problem or object with property and value
+ */
+const getObjectAndProperty = (config, schemaPath, index = 0) => {
+	if (!schemaPath) return { value: config };
+	const parts = schemaPath.split(".");
+	const property = /** @type {string} */ (parts.pop());
+	let current = config;
+	let i = 0;
+	for (const part of parts) {
+		const isArray = part.endsWith("[]");
+		const name = isArray ? part.slice(0, -2) : part;
+		let value = current[name];
+		if (isArray) {
+			if (value === undefined) {
+				value = {};
+				current[name] = [...Array.from({ length: index }), value];
+				cliAddedItems.set(current[name], index + 1);
+			} else if (!Array.isArray(value)) {
+				return {
+					problem: {
+						type: "unexpected-non-array-in-path",
+						path: parts.slice(0, i).join(".")
+					}
+				};
+			} else {
+				let addedItems = cliAddedItems.get(value) || 0;
+				while (addedItems <= index) {
+					value.push(undefined);
+					addedItems++;
+				}
+				cliAddedItems.set(value, addedItems);
+				const x = value.length - addedItems + index;
+				if (value[x] === undefined) {
+					value[x] = {};
+				} else if (value[x] === null || typeof value[x] !== "object") {
+					return {
+						problem: {
+							type: "unexpected-non-object-in-path",
+							path: parts.slice(0, i).join(".")
+						}
+					};
+				}
+				value = value[x];
+			}
+		} else if (value === undefined) {
+			value = current[name] = {};
+		} else if (value === null || typeof value !== "object") {
+			return {
+				problem: {
+					type: "unexpected-non-object-in-path",
+					path: parts.slice(0, i).join(".")
+				}
+			};
+		}
+		current = value;
+		i++;
+	}
+	const value = current[property];
+	if (property.endsWith("[]")) {
+		const name = property.slice(0, -2);
+		const value = current[name];
+		if (value === undefined) {
+			current[name] = [...Array.from({ length: index }), undefined];
+			cliAddedItems.set(current[name], index + 1);
+			return { object: current[name], property: index, value: undefined };
+		} else if (!Array.isArray(value)) {
+			current[name] = [value, ...Array.from({ length: index }), undefined];
+			cliAddedItems.set(current[name], index + 1);
+			return { object: current[name], property: index + 1, value: undefined };
+		}
+		let addedItems = cliAddedItems.get(value) || 0;
+		while (addedItems <= index) {
+			value.push(undefined);
+			addedItems++;
+		}
+		cliAddedItems.set(value, addedItems);
+		const x = value.length - addedItems + index;
+		if (value[x] === undefined) {
+			value[x] = {};
+		} else if (value[x] === null || typeof value[x] !== "object") {
+			return {
+				problem: {
+					type: "unexpected-non-object-in-path",
+					path: schemaPath
+				}
+			};
+		}
+		return {
+			object: value,
+			property: x,
+			value: value[x]
+		};
+	}
+	return { object: current, property, value };
+};
+
+/**
+ * @param {ObjectConfiguration} config configuration
+ * @param {string} schemaPath path in the config
+ * @param {ParsedValue} value parsed value
+ * @param {number | undefined} index index of value when multiple values are provided, otherwise undefined
+ * @returns {LocalProblem | null} problem or null for success
+ */
+const setValue = (config, schemaPath, value, index) => {
+	const { problem, object, property } = getObjectAndProperty(
+		config,
+		schemaPath,
+		index
+	);
+	if (problem) return problem;
+	/** @type {ObjectConfiguration} */
+	(object)[/** @type {Property} */ (property)] = value;
+	return null;
+};
+
+/**
+ * @param {ArgumentConfig} argConfig processing instructions
+ * @param {ObjectConfiguration} config configuration
+ * @param {Value} value the value
+ * @param {number | undefined} index the index if multiple values provided
+ * @returns {LocalProblem | null} a problem if any
+ */
+const processArgumentConfig = (argConfig, config, value, index) => {
+	if (index !== undefined && !argConfig.multiple) {
+		return {
+			type: "multiple-values-unexpected",
+			path: argConfig.path
+		};
+	}
+	const parsed = parseValueForArgumentConfig(argConfig, value);
+	if (parsed === undefined) {
+		return {
+			type: "invalid-value",
+			path: argConfig.path,
+			expected: getExpectedValue(argConfig)
+		};
+	}
+	const problem = setValue(config, argConfig.path, parsed, index);
+	if (problem) return problem;
+	return null;
+};
+
+/**
+ * @param {ArgumentConfig} argConfig processing instructions
+ * @returns {string | undefined} expected message
+ */
+const getExpectedValue = (argConfig) => {
+	switch (argConfig.type) {
+		case "boolean":
+			return "true | false";
+		case "RegExp":
+			return "regular expression (example: /ab?c*/)";
+		case "enum":
+			return /** @type {NonNullable} */ (
+				argConfig.values
+			)
+				.map((v) => `${v}`)
+				.join(" | ");
+		case "reset":
+			return "true (will reset the previous value to an empty array)";
+		default:
+			return argConfig.type;
+	}
+};
+
+/** @typedef {null | string | number | boolean | RegExp | EnumValue | []} ParsedValue */
+
+const DECIMAL_NUMBER_REGEXP = /^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i;
+
+/**
+ * @param {ArgumentConfig} argConfig processing instructions
+ * @param {Value} value the value
+ * @returns {ParsedValue | undefined} parsed value
+ */
+const parseValueForArgumentConfig = (argConfig, value) => {
+	switch (argConfig.type) {
+		case "string":
+			if (typeof value === "string") {
+				return value;
+			}
+			break;
+		case "path":
+			if (typeof value === "string") {
+				return path.resolve(value);
+			}
+			break;
+		case "number":
+			if (typeof value === "number") return value;
+			if (typeof value === "string" && DECIMAL_NUMBER_REGEXP.test(value)) {
+				const n = Number(value);
+				if (!Number.isNaN(n)) return n;
+			}
+			break;
+		case "boolean":
+			if (typeof value === "boolean") return value;
+			if (value === "true") return true;
+			if (value === "false") return false;
+			break;
+		case "RegExp":
+			if (value instanceof RegExp) return value;
+			if (typeof value === "string") {
+				// cspell:word yugi
+				const match = /^\/(.*)\/([yugi]*)$/.exec(value);
+				if (match && !/[^\\]\//.test(match[1])) {
+					return new RegExp(match[1], match[2]);
+				}
+			}
+			break;
+		case "enum": {
+			const values =
+				/** @type {EnumValue[]} */
+				(argConfig.values);
+			if (values.includes(/** @type {Exclude} */ (value))) {
+				return value;
+			}
+			for (const item of values) {
+				if (`${item}` === value) return item;
+			}
+			break;
+		}
+		case "reset":
+			if (value === true) return [];
+			break;
+	}
+};
+
+/** @typedef {Record} Values */
+
+/**
+ * @param {Flags} args object of arguments
+ * @param {ObjectConfiguration} config configuration
+ * @param {Values} values object with values
+ * @returns {Problem[] | null} problems or null for success
+ */
+const processArguments = (args, config, values) => {
+	/** @type {Problem[]} */
+	const problems = [];
+	for (const key of Object.keys(values)) {
+		const arg = args[key];
+		if (!arg) {
+			problems.push({
+				type: "unknown-argument",
+				path: "",
+				argument: key
+			});
+			continue;
+		}
+		/**
+		 * @param {Value} value value
+		 * @param {number | undefined} i index
+		 */
+		const processValue = (value, i) => {
+			/** @type {Problem[]} */
+			const currentProblems = [];
+			for (const argConfig of arg.configs) {
+				const problem = processArgumentConfig(argConfig, config, value, i);
+				if (!problem) {
+					return;
+				}
+				currentProblems.push({
+					...problem,
+					argument: key,
+					value,
+					index: i
+				});
+			}
+			problems.push(...currentProblems);
+		};
+		const value = values[key];
+		if (Array.isArray(value)) {
+			for (let i = 0; i < value.length; i++) {
+				processValue(value[i], i);
+			}
+		} else {
+			processValue(value, undefined);
+		}
+	}
+	if (problems.length === 0) return null;
+	return problems;
+};
+
+/**
+ * @returns {boolean} true when colors supported, otherwise false
+ */
+const isColorSupported = () => {
+	const { env = {}, argv = [], platform = "" } = process;
+
+	const isDisabled = "NO_COLOR" in env || argv.includes("--no-color");
+	const isForced = "FORCE_COLOR" in env || argv.includes("--color");
+	const isWindows = platform === "win32";
+	const isDumbTerminal = env.TERM === "dumb";
+
+	const isCompatibleTerminal = tty.isatty(1) && env.TERM && !isDumbTerminal;
+
+	const isCI =
+		"CI" in env &&
+		("GITHUB_ACTIONS" in env || "GITLAB_CI" in env || "CIRCLECI" in env);
+
+	return (
+		!isDisabled &&
+		(isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)
+	);
+};
+
+/**
+ * @param {number} index index
+ * @param {string} string string
+ * @param {string} close close
+ * @param {string=} replace replace
+ * @param {string=} head head
+ * @param {string=} tail tail
+ * @param {number=} next next
+ * @returns {string} result
+ */
+const replaceClose = (
+	index,
+	string,
+	close,
+	replace,
+	head = string.slice(0, Math.max(0, index)) + replace,
+	tail = string.slice(Math.max(0, index + close.length)),
+	next = tail.indexOf(close)
+) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace));
+
+/**
+ * @param {number} index index to replace
+ * @param {string} string string
+ * @param {string} open open string
+ * @param {string} close close string
+ * @param {string=} replace extra replace
+ * @returns {string} result
+ */
+const clearBleed = (index, string, open, close, replace) =>
+	index < 0
+		? open + string + close
+		: open + replaceClose(index, string, close, replace) + close;
+
+/** @typedef {(value: EXPECTED_ANY) => string} PrintFunction */
+
+/**
+ * @param {string} open open string
+ * @param {string} close close string
+ * @param {string=} replace extra replace
+ * @param {number=} at at
+ * @returns {PrintFunction} function to create color
+ */
+const filterEmpty =
+	(open, close, replace = open, at = open.length + 1) =>
+	(string) =>
+		string || !(string === "" || string === undefined)
+			? clearBleed(`${string}`.indexOf(close, at), string, open, close, replace)
+			: "";
+
+/**
+ * @param {number} open open code
+ * @param {number} close close code
+ * @param {string=} replace extra replace
+ * @returns {PrintFunction} result
+ */
+const init = (open, close, replace) =>
+	filterEmpty(`\u001B[${open}m`, `\u001B[${close}m`, replace);
+
+/**
+ * @typedef {{ reset: PrintFunction, bold: PrintFunction, dim: PrintFunction, italic: PrintFunction, underline: PrintFunction, inverse: PrintFunction, hidden: PrintFunction, strikethrough: PrintFunction, black: PrintFunction, red: PrintFunction, green: PrintFunction, yellow: PrintFunction, blue: PrintFunction, magenta: PrintFunction, cyan: PrintFunction, white: PrintFunction, gray: PrintFunction, bgBlack: PrintFunction, bgRed: PrintFunction, bgGreen: PrintFunction, bgYellow: PrintFunction, bgBlue: PrintFunction, bgMagenta: PrintFunction, bgCyan: PrintFunction, bgWhite: PrintFunction, blackBright: PrintFunction, redBright: PrintFunction, greenBright: PrintFunction, yellowBright: PrintFunction, blueBright: PrintFunction, magentaBright: PrintFunction, cyanBright: PrintFunction, whiteBright: PrintFunction, bgBlackBright: PrintFunction, bgRedBright: PrintFunction, bgGreenBright: PrintFunction, bgYellowBright: PrintFunction, bgBlueBright: PrintFunction, bgMagentaBright: PrintFunction, bgCyanBright: PrintFunction, bgWhiteBright: PrintFunction }} Colors
+ */
+
+/**
+ * @typedef {object} ColorsOptions
+ * @property {boolean=} useColor force use colors
+ */
+
+/**
+ * @param {ColorsOptions=} options options
+ * @returns {Colors} colors
+ */
+const createColors = ({ useColor = isColorSupported() } = {}) => ({
+	reset: useColor ? init(0, 0) : String,
+	bold: useColor ? init(1, 22, "\u001B[22m\u001B[1m") : String,
+	dim: useColor ? init(2, 22, "\u001B[22m\u001B[2m") : String,
+	italic: useColor ? init(3, 23) : String,
+	underline: useColor ? init(4, 24) : String,
+	inverse: useColor ? init(7, 27) : String,
+	hidden: useColor ? init(8, 28) : String,
+	strikethrough: useColor ? init(9, 29) : String,
+	black: useColor ? init(30, 39) : String,
+	red: useColor ? init(31, 39) : String,
+	green: useColor ? init(32, 39) : String,
+	yellow: useColor ? init(33, 39) : String,
+	blue: useColor ? init(34, 39) : String,
+	magenta: useColor ? init(35, 39) : String,
+	cyan: useColor ? init(36, 39) : String,
+	white: useColor ? init(37, 39) : String,
+	gray: useColor ? init(90, 39) : String,
+	bgBlack: useColor ? init(40, 49) : String,
+	bgRed: useColor ? init(41, 49) : String,
+	bgGreen: useColor ? init(42, 49) : String,
+	bgYellow: useColor ? init(43, 49) : String,
+	bgBlue: useColor ? init(44, 49) : String,
+	bgMagenta: useColor ? init(45, 49) : String,
+	bgCyan: useColor ? init(46, 49) : String,
+	bgWhite: useColor ? init(47, 49) : String,
+	blackBright: useColor ? init(90, 39) : String,
+	redBright: useColor ? init(91, 39) : String,
+	greenBright: useColor ? init(92, 39) : String,
+	yellowBright: useColor ? init(93, 39) : String,
+	blueBright: useColor ? init(94, 39) : String,
+	magentaBright: useColor ? init(95, 39) : String,
+	cyanBright: useColor ? init(96, 39) : String,
+	whiteBright: useColor ? init(97, 39) : String,
+	bgBlackBright: useColor ? init(100, 49) : String,
+	bgRedBright: useColor ? init(101, 49) : String,
+	bgGreenBright: useColor ? init(102, 49) : String,
+	bgYellowBright: useColor ? init(103, 49) : String,
+	bgBlueBright: useColor ? init(104, 49) : String,
+	bgMagentaBright: useColor ? init(105, 49) : String,
+	bgCyanBright: useColor ? init(106, 49) : String,
+	bgWhiteBright: useColor ? init(107, 49) : String
+});
+
+module.exports.createColors = createColors;
+module.exports.getArguments = getArguments;
+module.exports.isColorSupported = isColorSupported;
+module.exports.processArguments = processArguments;
diff --git a/lib/compareLocations.js b/lib/compareLocations.js
deleted file mode 100644
index 7dce42bdb12..00000000000
--- a/lib/compareLocations.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-	MIT License http://www.opensource.org/licenses/mit-license.php
-	Author Tobias Koppers @sokra
-*/
-"use strict";
-
-/**
- * @typedef {Object} LineAndColumn
- * @property {number=} line
- * @property {number=} column
- */
-
-/**
- * @typedef {Object} NodeLocation
- * @property {LineAndColumn=} start
- * @property {LineAndColumn=} end
- * @property {number=} index
- */
-
-/**
- * Compare two locations
- * @param {string|NodeLocation} a A location node
- * @param {string|NodeLocation} b A location node
- * @returns {-1|0|1} sorting comparator value
- */
-module.exports = (a, b) => {
-	if (typeof a === "string") {
-		if (typeof b === "string") {
-			if (a < b) return -1;
-			if (a > b) return 1;
-			return 0;
-		} else if (typeof b === "object") {
-			return 1;
-		} else {
-			return 0;
-		}
-	} else if (typeof a === "object") {
-		if (typeof b === "string") {
-			return -1;
-		} else if (typeof b === "object") {
-			if (a.start && b.start) {
-				const ap = a.start;
-				const bp = b.start;
-				if (ap.line < bp.line) return -1;
-				if (ap.line > bp.line) return 1;
-				if (ap.column < bp.column) return -1;
-				if (ap.column > bp.column) return 1;
-			}
-			if (a.index < b.index) return -1;
-			if (a.index > b.index) return 1;
-			return 0;
-		} else {
-			return 0;
-		}
-	}
-};
diff --git a/lib/config/browserslistTargetHandler.js b/lib/config/browserslistTargetHandler.js
new file mode 100644
index 00000000000..05ccfba9a1b
--- /dev/null
+++ b/lib/config/browserslistTargetHandler.js
@@ -0,0 +1,388 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sergey Melyukov @smelukov
+*/
+
+"use strict";
+
+const path = require("path");
+const browserslist = require("browserslist");
+
+/** @typedef {import("./target").ApiTargetProperties} ApiTargetProperties */
+/** @typedef {import("./target").EcmaTargetProperties} EcmaTargetProperties */
+/** @typedef {import("./target").PlatformTargetProperties} PlatformTargetProperties */
+
+// [[C:]/path/to/config][:env]
+const inputRx = /^(?:((?:[A-Z]:)?[/\\].*?))?(?::(.+?))?$/i;
+
+/**
+ * @param {string | null | undefined} input input string
+ * @param {string} context the context directory
+ * @returns {string[] | undefined} selected browsers
+ */
+const load = (input, context) => {
+	// browserslist:path-to-config
+	// browserslist:path-to-config:env
+	if (input && path.isAbsolute(input)) {
+		const [, configPath, env] = inputRx.exec(input) || [];
+
+		const config = browserslist.loadConfig({
+			config: configPath,
+			env
+		});
+
+		return browserslist(config, { env });
+	}
+
+	const env = input || undefined;
+
+	const config = browserslist.loadConfig({
+		path: context,
+		env
+	});
+
+	// browserslist
+	// browserslist:env
+	if (config) {
+		try {
+			return browserslist(config, { env, throwOnMissing: true });
+		} catch (_err) {
+			// Nothing, no `env` was found in browserslist, maybe input is `queries`
+		}
+	}
+
+	// browserslist:query
+	if (env) {
+		return browserslist(env);
+	}
+};
+
+/**
+ * @param {string[]} browsers supported browsers list
+ * @returns {EcmaTargetProperties & PlatformTargetProperties & ApiTargetProperties} target properties
+ */
+const resolve = (browsers) => {
+	/**
+	 * Checks all against a version number
+	 * @param {Record} versions first supported version
+	 * @returns {boolean} true if supports
+	 */
+	const rawChecker = (versions) =>
+		browsers.every((v) => {
+			const [name, parsedVersion] = v.split(" ");
+			if (!name) return false;
+			const requiredVersion = versions[name];
+			if (!requiredVersion) return false;
+			const [parsedMajor, parserMinor] =
+				// safari TP supports all features for normal safari
+				parsedVersion === "TP"
+					? [Infinity, Infinity]
+					: parsedVersion.includes("-")
+						? parsedVersion.split("-")[0].split(".")
+						: parsedVersion.split(".");
+			if (typeof requiredVersion === "number") {
+				return Number(parsedMajor) >= requiredVersion;
+			}
+			return requiredVersion[0] === Number(parsedMajor)
+				? Number(parserMinor) >= requiredVersion[1]
+				: Number(parsedMajor) > requiredVersion[0];
+		});
+	const anyNode = browsers.some((b) => b.startsWith("node "));
+	const anyBrowser = browsers.some((b) => /^(?!node)/.test(b));
+	const browserProperty = !anyBrowser ? false : anyNode ? null : true;
+	const nodeProperty = !anyNode ? false : anyBrowser ? null : true;
+
+	return {
+		/* eslint-disable camelcase */
+		const: rawChecker({
+			chrome: 49,
+			and_chr: 49,
+			edge: 12,
+			// Prior to Firefox 13, const is implemented, but re-assignment is not failing.
+			// Prior to Firefox 46, a TypeError was thrown on redeclaration instead of a SyntaxError.
+			firefox: 36,
+			and_ff: 36,
+			// Not supported in for-in and for-of loops
+			// ie: Not supported
+			opera: 36,
+			op_mob: 36,
+			safari: [10, 0],
+			ios_saf: [10, 0],
+			// Before 5.0 supported correctly in strict mode, otherwise supported without block scope
+			samsung: [5, 0],
+			android: 37,
+			and_qq: [10, 4],
+			// Supported correctly in strict mode, otherwise supported without block scope
+			baidu: [13, 18],
+			and_uc: [12, 12],
+			kaios: [2, 5],
+			node: [6, 0]
+		}),
+		methodShorthand: rawChecker({
+			chrome: 47,
+			and_chr: 47,
+			edge: 12,
+			firefox: 34,
+			and_ff: 34,
+			// ie: Not supported,
+			opera: 34,
+			op_mob: 34,
+			safari: 9,
+			ios_saf: 9,
+			samsung: 5,
+			android: 47,
+			// baidu: Not tracked,
+			and_qq: [14, 9],
+			and_uc: [15, 5],
+			kaios: [2, 5],
+			node: [4, 9]
+		}),
+		arrowFunction: rawChecker({
+			chrome: 45,
+			and_chr: 45,
+			edge: 12,
+			// The initial implementation of arrow functions in Firefox made them automatically strict. This has been changed as of Firefox 24. The use of 'use strict'; is now required.
+			// Prior to Firefox 39, a line terminator (\\n) was incorrectly allowed after arrow function arguments. This has been fixed to conform to the ES2015 specification and code like () \\n => {} will now throw a SyntaxError in this and later versions.
+			firefox: 39,
+			and_ff: 39,
+			// ie: Not supported,
+			opera: 32,
+			op_mob: 32,
+			safari: 10,
+			ios_saf: 10,
+			samsung: [5, 0],
+			android: 45,
+			and_qq: [10, 4],
+			baidu: [7, 12],
+			and_uc: [12, 12],
+			kaios: [2, 5],
+			node: [6, 0]
+		}),
+		forOf: rawChecker({
+			chrome: 38,
+			and_chr: 38,
+			edge: 12,
+			// Prior to Firefox 51, using the for...of loop construct with the const keyword threw a SyntaxError ("missing = in const declaration").
+			firefox: 51,
+			and_ff: 51,
+			// ie: Not supported,
+			opera: 25,
+			op_mob: 25,
+			safari: 7,
+			ios_saf: 7,
+			samsung: [3, 0],
+			android: 38,
+			and_qq: [10, 4],
+			// baidu: Unknown support
+			and_uc: [12, 12],
+			kaios: [3, 0],
+			node: [0, 12]
+		}),
+		destructuring: rawChecker({
+			chrome: 49,
+			and_chr: 49,
+			edge: 14,
+			firefox: 41,
+			and_ff: 41,
+			// ie: Not supported,
+			opera: 36,
+			op_mob: 36,
+			safari: 8,
+			ios_saf: 8,
+			samsung: [5, 0],
+			android: 49,
+			and_qq: [10, 4],
+			// baidu: Unknown support
+			and_uc: [12, 12],
+			kaios: [2, 5],
+			node: [6, 0]
+		}),
+		bigIntLiteral: rawChecker({
+			chrome: 67,
+			and_chr: 67,
+			edge: 79,
+			firefox: 68,
+			and_ff: 68,
+			// ie: Not supported,
+			opera: 54,
+			op_mob: 48,
+			safari: 14,
+			ios_saf: 14,
+			samsung: [9, 2],
+			android: 67,
+			and_qq: [13, 1],
+			baidu: [13, 18],
+			and_uc: [15, 5],
+			kaios: [3, 0],
+			node: [10, 4]
+		}),
+		// Support syntax `import` and `export` and no limitations and bugs on Node.js
+		// Not include `export * as namespace`
+		module: rawChecker({
+			chrome: 61,
+			and_chr: 61,
+			edge: 16,
+			firefox: 60,
+			and_ff: 60,
+			// ie: Not supported,
+			opera: 48,
+			op_mob: 45,
+			safari: [10, 1],
+			ios_saf: [10, 3],
+			samsung: [8, 0],
+			android: 61,
+			and_qq: [10, 4],
+			baidu: [13, 18],
+			and_uc: [15, 5],
+			kaios: [3, 0],
+			node: [12, 17]
+		}),
+		dynamicImport: rawChecker({
+			chrome: 63,
+			and_chr: 63,
+			edge: 79,
+			firefox: 67,
+			and_ff: 67,
+			// ie: Not supported
+			opera: 50,
+			op_mob: 46,
+			safari: [11, 1],
+			ios_saf: [11, 3],
+			samsung: [8, 2],
+			android: 63,
+			and_qq: [10, 4],
+			baidu: [13, 18],
+			and_uc: [15, 5],
+			kaios: [3, 0],
+			node: [12, 17]
+		}),
+		dynamicImportInWorker: rawChecker({
+			chrome: 80,
+			and_chr: 80,
+			edge: 80,
+			firefox: 114,
+			and_ff: 114,
+			// ie: Not supported
+			opera: 67,
+			op_mob: 57,
+			safari: [15, 0],
+			ios_saf: [15, 0],
+			samsung: [13, 0],
+			android: 80,
+			and_qq: [10, 4],
+			baidu: [13, 18],
+			and_uc: [15, 5],
+			kaios: [3, 0],
+			node: [12, 17]
+		}),
+		// browserslist does not have info about globalThis
+		// so this is based on mdn-browser-compat-data
+		globalThis: rawChecker({
+			chrome: 71,
+			and_chr: 71,
+			edge: 79,
+			firefox: 65,
+			and_ff: 65,
+			// ie: Not supported,
+			opera: 58,
+			op_mob: 50,
+			safari: [12, 1],
+			ios_saf: [12, 2],
+			samsung: [10, 1],
+			android: 71,
+			and_qq: [13, 1],
+			// baidu: Unknown support
+			and_uc: [15, 5],
+			kaios: [3, 0],
+			node: 12
+		}),
+		optionalChaining: rawChecker({
+			chrome: 80,
+			and_chr: 80,
+			edge: 80,
+			firefox: 74,
+			and_ff: 79,
+			// ie: Not supported,
+			opera: 67,
+			op_mob: 64,
+			safari: [13, 1],
+			ios_saf: [13, 4],
+			samsung: 13,
+			android: 80,
+			and_qq: [13, 1],
+			// baidu: Not supported
+			and_uc: [15, 5],
+			kaios: [3, 0],
+			node: 14
+		}),
+		templateLiteral: rawChecker({
+			chrome: 41,
+			and_chr: 41,
+			edge: 13,
+			firefox: 34,
+			and_ff: 34,
+			// ie: Not supported,
+			opera: 29,
+			op_mob: 64,
+			safari: [9, 1],
+			ios_saf: 9,
+			samsung: 4,
+			android: 41,
+			and_qq: [10, 4],
+			baidu: [7, 12],
+			and_uc: [12, 12],
+			kaios: [2, 5],
+			node: 4
+		}),
+		asyncFunction: rawChecker({
+			chrome: 55,
+			and_chr: 55,
+			edge: 15,
+			firefox: 52,
+			and_ff: 52,
+			// ie: Not supported,
+			opera: 42,
+			op_mob: 42,
+			safari: 11,
+			ios_saf: 11,
+			samsung: [6, 2],
+			android: 55,
+			and_qq: [10, 4],
+			baidu: [13, 18],
+			and_uc: [12, 12],
+			kaios: 3,
+			node: [7, 6]
+		}),
+		/* eslint-enable camelcase */
+		browser: browserProperty,
+		electron: false,
+		node: nodeProperty,
+		nwjs: false,
+		web: browserProperty,
+		webworker: false,
+
+		document: browserProperty,
+		fetchWasm: browserProperty,
+		global: nodeProperty,
+		importScripts: false,
+		importScriptsInWorker: Boolean(browserProperty),
+		nodeBuiltins: nodeProperty,
+		nodePrefixForCoreModules:
+			nodeProperty &&
+			!browsers.some((b) => b.startsWith("node 15")) &&
+			rawChecker({
+				node: [14, 18]
+			}),
+		importMetaDirnameAndFilename:
+			nodeProperty &&
+			rawChecker({
+				node: [22, 16]
+			}),
+		require: nodeProperty
+	};
+};
+
+module.exports = {
+	load,
+	resolve
+};
diff --git a/lib/config/defaults.js b/lib/config/defaults.js
new file mode 100644
index 00000000000..6516066d87d
--- /dev/null
+++ b/lib/config/defaults.js
@@ -0,0 +1,2100 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const fs = require("fs");
+const path = require("path");
+const {
+	CSS_TYPE,
+	JAVASCRIPT_TYPE,
+	UNKNOWN_TYPE
+} = require("../ModuleSourceTypeConstants");
+const {
+	ASSET_MODULE_TYPE,
+	ASSET_MODULE_TYPE_BYTES,
+	ASSET_MODULE_TYPE_INLINE,
+	ASSET_MODULE_TYPE_RESOURCE,
+	ASSET_MODULE_TYPE_SOURCE,
+	CSS_MODULE_TYPE,
+	CSS_MODULE_TYPE_AUTO,
+	CSS_MODULE_TYPE_GLOBAL,
+	CSS_MODULE_TYPE_MODULE,
+	JAVASCRIPT_MODULE_TYPE_AUTO,
+	JAVASCRIPT_MODULE_TYPE_DYNAMIC,
+	JAVASCRIPT_MODULE_TYPE_ESM,
+	JSON_MODULE_TYPE,
+	WEBASSEMBLY_MODULE_TYPE_ASYNC,
+	WEBASSEMBLY_MODULE_TYPE_SYNC
+} = require("../ModuleTypeConstants");
+const Template = require("../Template");
+const { cleverMerge } = require("../util/cleverMerge");
+const {
+	getDefaultTarget,
+	getTargetProperties,
+	getTargetsProperties
+} = require("./target");
+
+/** @typedef {import("../../declarations/WebpackOptions").CacheOptionsNormalized} CacheOptionsNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").Context} Context */
+/** @typedef {import("../../declarations/WebpackOptions").DevTool} Devtool */
+/** @typedef {import("../../declarations/WebpackOptions").CssGeneratorOptions} CssGeneratorOptions */
+/** @typedef {import("../../declarations/WebpackOptions").EntryDescription} EntryDescription */
+/** @typedef {import("../../declarations/WebpackOptions").EntryNormalized} Entry */
+/** @typedef {import("../../declarations/WebpackOptions").Environment} Environment */
+/** @typedef {import("../../declarations/WebpackOptions").Experiments} Experiments */
+/** @typedef {import("../../declarations/WebpackOptions").ExperimentsNormalized} ExperimentsNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").ExternalsPresets} ExternalsPresets */
+/** @typedef {import("../../declarations/WebpackOptions").ExternalsType} ExternalsType */
+/** @typedef {import("../../declarations/WebpackOptions").FileCacheOptions} FileCacheOptions */
+/** @typedef {import("../../declarations/WebpackOptions").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */
+/** @typedef {import("../../declarations/WebpackOptions").InfrastructureLogging} InfrastructureLogging */
+/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
+/** @typedef {import("../../declarations/WebpackOptions").JsonGeneratorOptions} JsonGeneratorOptions */
+/** @typedef {import("../../declarations/WebpackOptions").Library} Library */
+/** @typedef {import("../../declarations/WebpackOptions").LibraryName} LibraryName */
+/** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
+/** @typedef {import("../../declarations/WebpackOptions").Loader} Loader */
+/** @typedef {import("../../declarations/WebpackOptions").Mode} Mode */
+/** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
+/** @typedef {import("../../declarations/WebpackOptions").HashSalt} HashSalt */
+/** @typedef {import("../../declarations/WebpackOptions").HashDigest} HashDigest */
+/** @typedef {import("../../declarations/WebpackOptions").HashDigestLength} HashDigestLength */
+/** @typedef {import("../../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
+/** @typedef {import("../../declarations/WebpackOptions").Node} WebpackNode */
+/** @typedef {import("../../declarations/WebpackOptions").OptimizationNormalized} Optimization */
+/** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksOptions} OptimizationSplitChunksOptions */
+/** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} Output */
+/** @typedef {import("../../declarations/WebpackOptions").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */
+/** @typedef {import("../../declarations/WebpackOptions").Performance} Performance */
+/** @typedef {import("../../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
+/** @typedef {import("../../declarations/WebpackOptions").RuleSetRules} RuleSetRules */
+/** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
+/** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
+/** @typedef {import("../Module")} Module */
+/** @typedef {import("../javascript/EnableChunkLoadingPlugin").ChunkLoadingTypes} ChunkLoadingTypes */
+/** @typedef {import("../wasm/EnableWasmLoadingPlugin").WasmLoadingTypes} WasmLoadingTypes */
+/** @typedef {import("./target").PlatformTargetProperties} PlatformTargetProperties */
+/** @typedef {import("./target").TargetProperties} TargetProperties */
+
+/**
+ * @template T
+ * @typedef {{ [P in keyof T]-?: T[P] extends object ? RecursiveNonNullable> : NonNullable }} RecursiveNonNullable
+ */
+
+/**
+ * @typedef {Output & {
+ * uniqueName: NonNullable,
+ * filename: NonNullable,
+ * cssFilename: NonNullable,
+ * chunkFilename: NonNullable,
+ * cssChunkFilename: NonNullable,
+ * hotUpdateChunkFilename: NonNullable,
+ * hotUpdateGlobal: NonNullable,
+ * assetModuleFilename: NonNullable,
+ * webassemblyModuleFilename: NonNullable,
+ * sourceMapFilename: NonNullable,
+ * hotUpdateMainFilename: NonNullable,
+ * devtoolNamespace: NonNullable,
+ * publicPath: NonNullable,
+ * workerPublicPath: NonNullable,
+ * workerWasmLoading: NonNullable,
+ * workerChunkLoading: NonNullable,
+ * chunkFormat: NonNullable,
+ * module: NonNullable,
+ * asyncChunks: NonNullable,
+ * charset: NonNullable,
+ * iife: NonNullable,
+ * globalObject: NonNullable,
+ * scriptType: NonNullable,
+ * path: NonNullable,
+ * pathinfo: NonNullable,
+ * hashFunction: NonNullable,
+ * hashDigest: NonNullable,
+ * hashDigestLength: NonNullable,
+ * chunkLoadTimeout: NonNullable,
+ * chunkLoading: NonNullable,
+ * chunkLoadingGlobal: NonNullable,
+ * compareBeforeEmit: NonNullable,
+ * strictModuleErrorHandling: NonNullable,
+ * strictModuleExceptionHandling: NonNullable,
+ * importFunctionName: NonNullable,
+ * importMetaName: NonNullable,
+ * environment: RecursiveNonNullable,
+ * crossOriginLoading: NonNullable,
+ * wasmLoading: NonNullable,
+ * }} OutputNormalizedWithDefaults
+ */
+
+/**
+ * @typedef {SnapshotOptions & {
+ * managedPaths: NonNullable,
+ * unmanagedPaths: NonNullable,
+ * immutablePaths: NonNullable,
+ * resolveBuildDependencies: NonNullable,
+ * buildDependencies: NonNullable,
+ * module: NonNullable,
+ * resolve: NonNullable,
+ * }} SnapshotNormalizedWithDefaults
+ */
+
+/**
+ * @typedef {Optimization & {
+ * runtimeChunk: NonNullable,
+ * splitChunks: NonNullable,
+ * mergeDuplicateChunks: NonNullable,
+ * removeAvailableModules: NonNullable,
+ * removeEmptyChunks: NonNullable,
+ * flagIncludedChunks: NonNullable,
+ * moduleIds: NonNullable,
+ * chunkIds: NonNullable,
+ * sideEffects: NonNullable,
+ * providedExports: NonNullable,
+ * usedExports: NonNullable,
+ * mangleExports: NonNullable,
+ * innerGraph: NonNullable,
+ * concatenateModules: NonNullable,
+ * avoidEntryIife: NonNullable,
+ * emitOnErrors: NonNullable,
+ * checkWasmTypes: NonNullable,
+ * mangleWasmImports: NonNullable,
+ * portableRecords: NonNullable,
+ * realContentHash: NonNullable,
+ * minimize: NonNullable,
+ * minimizer: NonNullable>,
+ * nodeEnv: NonNullable,
+ * }} OptimizationNormalizedWithDefaults
+ */
+
+/**
+ * @typedef {ExternalsPresets & {
+ * web: NonNullable,
+ * node: NonNullable,
+ * nwjs: NonNullable,
+ * electron: NonNullable,
+ * electronMain: NonNullable,
+ * electronPreload: NonNullable,
+ * electronRenderer: NonNullable,
+ * }} ExternalsPresetsNormalizedWithDefaults
+ */
+
+/**
+ * @typedef {InfrastructureLogging & {
+ * stream: NonNullable,
+ * level: NonNullable,
+ * debug: NonNullable,
+ * colors: NonNullable,
+ * appendOnly: NonNullable,
+ * }} InfrastructureLoggingNormalizedWithDefaults
+ */
+
+/**
+ * @typedef {WebpackOptionsNormalized & { context: NonNullable } & { infrastructureLogging: InfrastructureLoggingNormalizedWithDefaults }} WebpackOptionsNormalizedWithBaseDefaults
+ */
+
+/**
+ * @typedef {WebpackOptionsNormalizedWithBaseDefaults & { target: NonNullable } & { output: OutputNormalizedWithDefaults } & { optimization: OptimizationNormalizedWithDefaults } & { devtool: NonNullable } & { stats: NonNullable } & { node: NonNullable } & { profile: NonNullable } & { parallelism: NonNullable } & { snapshot: SnapshotNormalizedWithDefaults } & { externalsPresets: ExternalsPresetsNormalizedWithDefaults } & { externalsType: NonNullable } & { watch: NonNullable } & { performance: NonNullable } & { recordsInputPath: NonNullable } & { recordsOutputPath: NonNullable } & { dotenv: NonNullable }} WebpackOptionsNormalizedWithDefaults
+ */
+
+/**
+ * @typedef {object} ResolvedOptions
+ * @property {PlatformTargetProperties | false} platform - platform target properties
+ */
+
+const NODE_MODULES_REGEXP = /[\\/]node_modules[\\/]/i;
+const DEFAULT_CACHE_NAME = "default";
+const DEFAULTS = {
+	// TODO webpack 6 - use xxhash64
+	HASH_FUNCTION: "md4"
+};
+
+/**
+ * Sets a constant default value when undefined
+ * @template T
+ * @template {keyof T} P
+ * @param {T} obj an object
+ * @param {P} prop a property of this object
+ * @param {T[P]} value a default value of the property
+ * @returns {void}
+ */
+const D = (obj, prop, value) => {
+	if (obj[prop] === undefined) {
+		obj[prop] = value;
+	}
+};
+
+/**
+ * Sets a dynamic default value when undefined, by calling the factory function
+ * @template T
+ * @template {keyof T} P
+ * @param {T} obj an object
+ * @param {P} prop a property of this object
+ * @param {() => T[P]} factory a default value factory for the property
+ * @returns {void}
+ */
+const F = (obj, prop, factory) => {
+	if (obj[prop] === undefined) {
+		obj[prop] = factory();
+	}
+};
+
+/**
+ * Sets a dynamic default value when undefined, by calling the factory function.
+ * factory must return an array or undefined
+ * When the current value is already an array an contains "..." it's replaced with
+ * the result of the factory function
+ * @template T
+ * @template {keyof T} P
+ * @param {T} obj an object
+ * @param {P} prop a property of this object
+ * @param {() => T[P]} factory a default value factory for the property
+ * @returns {void}
+ */
+const A = (obj, prop, factory) => {
+	const value = obj[prop];
+	if (value === undefined) {
+		obj[prop] = factory();
+	} else if (Array.isArray(value)) {
+		/** @type {EXPECTED_ANY[] | undefined} */
+		let newArray;
+		for (let i = 0; i < value.length; i++) {
+			const item = value[i];
+			if (item === "...") {
+				if (newArray === undefined) {
+					newArray = value.slice(0, i);
+					obj[prop] = /** @type {T[P]} */ (/** @type {unknown} */ (newArray));
+				}
+				const items =
+					/** @type {EXPECTED_ANY[]} */
+					(/** @type {unknown} */ (factory()));
+				if (items !== undefined) {
+					for (const item of items) {
+						newArray.push(item);
+					}
+				}
+			} else if (newArray !== undefined) {
+				newArray.push(item);
+			}
+		}
+	}
+};
+
+/**
+ * @param {WebpackOptionsNormalized} options options to be modified
+ * @returns {void}
+ */
+const applyWebpackOptionsBaseDefaults = (options) => {
+	F(options, "context", () => process.cwd());
+	applyInfrastructureLoggingDefaults(options.infrastructureLogging);
+};
+
+/**
+ * @param {WebpackOptionsNormalized} options options to be modified
+ * @param {number=} compilerIndex index of compiler
+ * @returns {ResolvedOptions} Resolved options after apply defaults
+ */
+const applyWebpackOptionsDefaults = (options, compilerIndex) => {
+	F(options, "context", () => process.cwd());
+	F(options, "target", () =>
+		getDefaultTarget(/** @type {string} */ (options.context))
+	);
+
+	const { mode, name, target } = options;
+
+	const targetProperties =
+		target === false
+			? /** @type {false} */ (false)
+			: typeof target === "string"
+				? getTargetProperties(target, /** @type {Context} */ (options.context))
+				: getTargetsProperties(
+						/** @type {string[]} */ (target),
+						/** @type {Context} */ (options.context)
+					);
+
+	const development = mode === "development";
+	const production = mode === "production" || !mode;
+
+	if (typeof options.entry !== "function") {
+		for (const key of Object.keys(options.entry)) {
+			F(
+				options.entry[key],
+				"import",
+				() => /** @type {[string]} */ (["./src"])
+			);
+		}
+	}
+
+	F(
+		options,
+		"devtool",
+		() =>
+			/** @type {Devtool} */ (
+				development
+					? [
+							options.experiments.css
+								? {
+										type: "css",
+										use: "source-map"
+									}
+								: undefined,
+							{
+								type: "javascript",
+								use: "eval"
+							}
+						].filter(Boolean)
+					: false
+			)
+	);
+
+	D(options, "watch", false);
+	D(options, "profile", false);
+	D(options, "parallelism", 100);
+	D(options, "recordsInputPath", false);
+	D(options, "recordsOutputPath", false);
+
+	applyExperimentsDefaults(options.experiments, {
+		production,
+		development,
+		targetProperties
+	});
+
+	const futureDefaults =
+		/** @type {NonNullable} */
+		(options.experiments.futureDefaults);
+
+	F(options, "validate", () => !(futureDefaults === true && production));
+
+	F(options, "cache", () =>
+		development ? { type: /** @type {"memory"} */ ("memory") } : false
+	);
+	applyCacheDefaults(options.cache, {
+		name: name || DEFAULT_CACHE_NAME,
+		mode: mode || "production",
+		development,
+		cacheUnaffected: options.experiments.cacheUnaffected,
+		futureDefaults,
+		compilerIndex
+	});
+	const cache = Boolean(options.cache);
+
+	applySnapshotDefaults(options.snapshot, {
+		production,
+		futureDefaults
+	});
+
+	applyOutputDefaults(options.output, {
+		context: /** @type {Context} */ (options.context),
+		targetProperties,
+		isAffectedByBrowserslist:
+			target === undefined ||
+			(typeof target === "string" && target.startsWith("browserslist")) ||
+			(Array.isArray(target) &&
+				target.some((target) => target.startsWith("browserslist"))),
+		outputModule:
+			/** @type {NonNullable} */
+			(options.experiments.outputModule),
+		development,
+		entry: options.entry,
+		futureDefaults,
+		asyncWebAssembly:
+			/** @type {NonNullable} */
+			(options.experiments.asyncWebAssembly)
+	});
+
+	applyModuleDefaults(options.module, {
+		cache,
+		hashSalt: /** @type {NonNullable} */ (
+			options.output.hashSalt
+		),
+		hashFunction: /** @type {NonNullable} */ (
+			options.output.hashFunction
+		),
+		syncWebAssembly:
+			/** @type {NonNullable} */
+			(options.experiments.syncWebAssembly),
+		asyncWebAssembly:
+			/** @type {NonNullable} */
+			(options.experiments.asyncWebAssembly),
+		css:
+			/** @type {NonNullable} */
+			(options.experiments.css),
+		deferImport:
+			/** @type {NonNullable} */
+			(options.experiments.deferImport),
+		sourceImport:
+			/** @type {NonNullable} */
+			(options.experiments.sourceImport),
+		futureDefaults,
+		isNode: targetProperties && targetProperties.node === true,
+		uniqueName: /** @type {string} */ (options.output.uniqueName),
+		targetProperties,
+		mode: options.mode,
+		outputModule:
+			/** @type {NonNullable} */
+			(options.output.module)
+	});
+
+	applyExternalsPresetsDefaults(options.externalsPresets, {
+		targetProperties,
+		buildHttp: Boolean(options.experiments.buildHttp),
+		outputModule:
+			/** @type {NonNullable} */
+			(options.output.module)
+	});
+
+	applyLoaderDefaults(
+		/** @type {NonNullable} */ (
+			options.loader
+		),
+		{ targetProperties, environment: options.output.environment }
+	);
+
+	F(options, "externalsType", () => {
+		const validExternalTypes = require("../../schemas/WebpackOptions.json")
+			.definitions.ExternalsType.enum;
+
+		return options.output.library &&
+			validExternalTypes.includes(options.output.library.type)
+			? /** @type {ExternalsType} */ (options.output.library.type)
+			: options.output.module
+				? "module-import"
+				: "var";
+	});
+
+	applyNodeDefaults(options.node, {
+		futureDefaults:
+			/** @type {NonNullable} */
+			(options.experiments.futureDefaults),
+		outputModule:
+			/** @type {NonNullable} */
+			(options.output.module),
+		targetProperties
+	});
+
+	F(options, "performance", () =>
+		production &&
+		targetProperties &&
+		(targetProperties.browser || targetProperties.browser === null)
+			? {}
+			: false
+	);
+	applyPerformanceDefaults(
+		/** @type {NonNullable} */
+		(options.performance),
+		{
+			production
+		}
+	);
+
+	applyOptimizationDefaults(options.optimization, {
+		development,
+		production,
+		css:
+			/** @type {NonNullable} */
+			(options.experiments.css),
+		records: Boolean(options.recordsInputPath || options.recordsOutputPath)
+	});
+
+	options.resolve = cleverMerge(
+		getResolveDefaults({
+			cache,
+			context: /** @type {Context} */ (options.context),
+			targetProperties,
+			mode: /** @type {Mode} */ (options.mode),
+			css:
+				/** @type {NonNullable} */
+				(options.experiments.css)
+		}),
+		options.resolve
+	);
+
+	options.resolveLoader = cleverMerge(
+		getResolveLoaderDefaults({ cache }),
+		options.resolveLoader
+	);
+
+	return {
+		platform:
+			targetProperties === false
+				? targetProperties
+				: {
+						web: targetProperties.web,
+						browser: targetProperties.browser,
+						webworker: targetProperties.webworker,
+						node: targetProperties.node,
+						nwjs: targetProperties.nwjs,
+						electron: targetProperties.electron
+					}
+	};
+};
+
+/**
+ * @param {ExperimentsNormalized} experiments options
+ * @param {object} options options
+ * @param {boolean} options.production is production
+ * @param {boolean} options.development is development mode
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @returns {void}
+ */
+const applyExperimentsDefaults = (
+	experiments,
+	{ production, development, targetProperties }
+) => {
+	D(experiments, "futureDefaults", false);
+	D(experiments, "backCompat", !experiments.futureDefaults);
+	// TODO do we need sync web assembly in webpack@6?
+	D(experiments, "syncWebAssembly", false);
+	D(experiments, "asyncWebAssembly", experiments.futureDefaults);
+	D(experiments, "outputModule", false);
+	D(experiments, "lazyCompilation", undefined);
+	D(experiments, "buildHttp", undefined);
+	D(experiments, "cacheUnaffected", experiments.futureDefaults);
+	D(experiments, "deferImport", false);
+	D(experiments, "sourceImport", false);
+	F(experiments, "css", () => (experiments.futureDefaults ? true : undefined));
+
+	if (typeof experiments.buildHttp === "object") {
+		D(experiments.buildHttp, "frozen", production);
+		D(experiments.buildHttp, "upgrade", false);
+	}
+};
+
+/**
+ * @param {CacheOptionsNormalized} cache options
+ * @param {object} options options
+ * @param {string} options.name name
+ * @param {Mode} options.mode mode
+ * @param {boolean} options.futureDefaults is future defaults enabled
+ * @param {boolean} options.development is development mode
+ * @param {number=} options.compilerIndex index of compiler
+ * @param {Experiments["cacheUnaffected"]} options.cacheUnaffected the cacheUnaffected experiment is enabled
+ * @returns {void}
+ */
+const applyCacheDefaults = (
+	cache,
+	{ name, mode, development, cacheUnaffected, compilerIndex, futureDefaults }
+) => {
+	if (cache === false) return;
+	switch (cache.type) {
+		case "filesystem":
+			F(cache, "name", () =>
+				compilerIndex !== undefined
+					? `${`${name}-${mode}`}__compiler${compilerIndex + 1}__`
+					: `${name}-${mode}`
+			);
+			D(cache, "version", "");
+			F(cache, "cacheDirectory", () => {
+				const cwd = process.cwd();
+				/** @type {string | undefined} */
+				let dir = cwd;
+				for (;;) {
+					try {
+						if (fs.statSync(path.join(dir, "package.json")).isFile()) break;
+						// eslint-disable-next-line no-empty
+					} catch (_err) {}
+					const parent = path.dirname(dir);
+					if (dir === parent) {
+						dir = undefined;
+						break;
+					}
+					dir = parent;
+				}
+				if (!dir) {
+					return path.resolve(cwd, ".cache/webpack");
+				} else if (process.versions.pnp === "1") {
+					return path.resolve(dir, ".pnp/.cache/webpack");
+				} else if (process.versions.pnp === "3") {
+					return path.resolve(dir, ".yarn/.cache/webpack");
+				}
+				return path.resolve(dir, "node_modules/.cache/webpack");
+			});
+			F(cache, "cacheLocation", () =>
+				path.resolve(
+					/** @type {NonNullable} */
+					(cache.cacheDirectory),
+					/** @type {NonNullable} */ (cache.name)
+				)
+			);
+			D(cache, "hashAlgorithm", futureDefaults ? "xxhash64" : "md4");
+			D(cache, "store", "pack");
+			D(cache, "compression", false);
+			D(cache, "profile", false);
+			D(cache, "idleTimeout", 60000);
+			D(cache, "idleTimeoutForInitialStore", 5000);
+			D(cache, "idleTimeoutAfterLargeChanges", 1000);
+			D(cache, "maxMemoryGenerations", development ? 5 : Infinity);
+			D(cache, "maxAge", 1000 * 60 * 60 * 24 * 60); // 1 month
+			D(cache, "allowCollectingMemory", development);
+			D(cache, "memoryCacheUnaffected", development && cacheUnaffected);
+			D(cache, "readonly", false);
+			D(
+				/** @type {NonNullable} */
+				(cache.buildDependencies),
+				"defaultWebpack",
+				[path.resolve(__dirname, "..") + path.sep]
+			);
+			break;
+		case "memory":
+			D(cache, "maxGenerations", Infinity);
+			D(cache, "cacheUnaffected", development && cacheUnaffected);
+			break;
+	}
+};
+
+/**
+ * @param {SnapshotOptions} snapshot options
+ * @param {object} options options
+ * @param {boolean} options.production is production
+ * @param {boolean} options.futureDefaults is future defaults enabled
+ * @returns {void}
+ */
+const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
+	if (futureDefaults) {
+		F(snapshot, "managedPaths", () =>
+			process.versions.pnp === "3"
+				? [
+						/^(.+?(?:[\\/]\.yarn[\\/]unplugged[\\/][^\\/]+)?[\\/]node_modules[\\/])/
+					]
+				: [/^(.+?[\\/]node_modules[\\/])/]
+		);
+		F(snapshot, "immutablePaths", () =>
+			process.versions.pnp === "3"
+				? [/^(.+?[\\/]cache[\\/][^\\/]+\.zip[\\/]node_modules[\\/])/]
+				: []
+		);
+	} else {
+		A(snapshot, "managedPaths", () => {
+			if (process.versions.pnp === "3") {
+				const match =
+					/^(.+?)[\\/]cache[\\/]watchpack-npm-[^\\/]+\.zip[\\/]node_modules[\\/]/.exec(
+						require.resolve("watchpack")
+					);
+				if (match) {
+					return [path.resolve(match[1], "unplugged")];
+				}
+			} else {
+				const match = /^(.+?[\\/]node_modules[\\/])/.exec(
+					require.resolve("watchpack")
+				);
+				if (match) {
+					return [match[1]];
+				}
+			}
+			return [];
+		});
+		A(snapshot, "immutablePaths", () => {
+			if (process.versions.pnp === "1") {
+				const match =
+					/^(.+?[\\/]v4)[\\/]npm-watchpack-[^\\/]+-[\da-f]{40}[\\/]node_modules[\\/]/.exec(
+						require.resolve("watchpack")
+					);
+				if (match) {
+					return [match[1]];
+				}
+			} else if (process.versions.pnp === "3") {
+				const match =
+					/^(.+?)[\\/]watchpack-npm-[^\\/]+\.zip[\\/]node_modules[\\/]/.exec(
+						require.resolve("watchpack")
+					);
+				if (match) {
+					return [match[1]];
+				}
+			}
+			return [];
+		});
+	}
+	F(snapshot, "unmanagedPaths", () => []);
+	F(snapshot, "resolveBuildDependencies", () => ({
+		timestamp: true,
+		hash: true
+	}));
+	F(snapshot, "buildDependencies", () => ({ timestamp: true, hash: true }));
+	F(snapshot, "module", () =>
+		production ? { timestamp: true, hash: true } : { timestamp: true }
+	);
+	F(snapshot, "contextModule", () => ({ timestamp: true }));
+	F(snapshot, "resolve", () =>
+		production ? { timestamp: true, hash: true } : { timestamp: true }
+	);
+};
+
+/**
+ * @param {JavascriptParserOptions} parserOptions parser options
+ * @param {object} options options
+ * @param {boolean} options.futureDefaults is future defaults enabled
+ * @param {boolean} options.deferImport is defer import enabled
+ * @param {boolean} options.sourceImport is import source enabled
+ * @param {boolean} options.isNode is node target platform
+ * @param {boolean} options.outputModule is output.module enabled
+ * @returns {void}
+ */
+const applyJavascriptParserOptionsDefaults = (
+	parserOptions,
+	{ futureDefaults, deferImport, sourceImport, isNode, outputModule }
+) => {
+	D(parserOptions, "unknownContextRequest", ".");
+	D(parserOptions, "unknownContextRegExp", false);
+	D(parserOptions, "unknownContextRecursive", true);
+	D(parserOptions, "unknownContextCritical", true);
+	D(parserOptions, "exprContextRequest", ".");
+	D(parserOptions, "exprContextRegExp", false);
+	D(parserOptions, "exprContextRecursive", true);
+	D(parserOptions, "exprContextCritical", true);
+	D(parserOptions, "wrappedContextRegExp", /.*/);
+	D(parserOptions, "wrappedContextRecursive", true);
+	D(parserOptions, "wrappedContextCritical", false);
+	D(parserOptions, "strictThisContextOnImports", false);
+	D(parserOptions, "importMeta", outputModule ? "preserve-unknown" : true);
+	D(parserOptions, "dynamicImportMode", "lazy");
+	D(parserOptions, "dynamicImportPrefetch", false);
+	D(parserOptions, "dynamicImportPreload", false);
+	D(parserOptions, "dynamicImportFetchPriority", false);
+	D(parserOptions, "createRequire", isNode);
+	D(parserOptions, "dynamicUrl", true);
+	D(parserOptions, "deferImport", deferImport);
+	D(parserOptions, "sourceImport", sourceImport);
+	if (futureDefaults) D(parserOptions, "exportsPresence", "error");
+};
+
+/**
+ * @param {JsonGeneratorOptions} generatorOptions generator options
+ * @returns {void}
+ */
+const applyJsonGeneratorOptionsDefaults = (generatorOptions) => {
+	D(generatorOptions, "JSONParse", true);
+};
+
+/**
+ * @param {CssGeneratorOptions} generatorOptions generator options
+ * @param {object} options options
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @returns {void}
+ */
+const applyCssGeneratorOptionsDefaults = (
+	generatorOptions,
+	{ targetProperties }
+) => {
+	D(
+		generatorOptions,
+		"exportsOnly",
+		!targetProperties || targetProperties.document === false
+	);
+	D(generatorOptions, "esModule", true);
+};
+
+/**
+ * @param {ModuleOptions} module options
+ * @param {object} options options
+ * @param {boolean} options.cache is caching enabled
+ * @param {boolean} options.syncWebAssembly is syncWebAssembly enabled
+ * @param {boolean} options.asyncWebAssembly is asyncWebAssembly enabled
+ * @param {boolean} options.css is css enabled
+ * @param {boolean} options.futureDefaults is future defaults enabled
+ * @param {string} options.uniqueName the unique name
+ * @param {boolean} options.isNode is node target platform
+ * @param {boolean} options.deferImport is defer import enabled
+ * @param {boolean} options.sourceImport is import source enabled
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @param {Mode | undefined} options.mode mode
+ * @param {HashSalt} options.hashSalt hash salt
+ * @param {HashFunction} options.hashFunction hash function
+ * @param {boolean} options.outputModule is output.module enabled
+ * @returns {void}
+ */
+const applyModuleDefaults = (
+	module,
+	{
+		hashSalt,
+		hashFunction,
+		cache,
+		syncWebAssembly,
+		asyncWebAssembly,
+		css,
+		futureDefaults,
+		isNode,
+		uniqueName,
+		targetProperties,
+		mode,
+		deferImport,
+		sourceImport,
+		outputModule
+	}
+) => {
+	if (cache) {
+		D(
+			module,
+			"unsafeCache",
+			/**
+			 * @param {Module} module module
+			 * @returns {boolean} true, if we want to cache the module
+			 */
+			(module) => {
+				const name = module.nameForCondition();
+				if (!name) {
+					return false;
+				}
+				return NODE_MODULES_REGEXP.test(name);
+			}
+		);
+	} else {
+		D(module, "unsafeCache", false);
+	}
+
+	F(module.parser, ASSET_MODULE_TYPE, () => ({}));
+	F(
+		/** @type {NonNullable} */
+		(module.parser[ASSET_MODULE_TYPE]),
+		"dataUrlCondition",
+		() => ({})
+	);
+	if (
+		typeof (
+			/** @type {NonNullable} */
+			(module.parser[ASSET_MODULE_TYPE]).dataUrlCondition
+		) === "object"
+	) {
+		D(
+			/** @type {NonNullable} */
+			(module.parser[ASSET_MODULE_TYPE]).dataUrlCondition,
+			"maxSize",
+			8096
+		);
+	}
+
+	F(module.parser, "javascript", () => ({}));
+	F(module.parser, JSON_MODULE_TYPE, () => ({}));
+	D(
+		/** @type {NonNullable} */
+		(module.parser[JSON_MODULE_TYPE]),
+		"exportsDepth",
+		mode === "development" ? 1 : Infinity
+	);
+
+	applyJavascriptParserOptionsDefaults(
+		/** @type {NonNullable} */
+		(module.parser.javascript),
+		{
+			futureDefaults,
+			deferImport,
+			sourceImport,
+			isNode,
+			outputModule
+		}
+	);
+
+	F(module.generator, "json", () => ({}));
+	applyJsonGeneratorOptionsDefaults(
+		/** @type {NonNullable} */
+		(module.generator.json)
+	);
+
+	if (css) {
+		F(module.parser, CSS_MODULE_TYPE, () => ({}));
+
+		D(
+			/** @type {NonNullable} */
+			(module.parser[CSS_MODULE_TYPE]),
+			"import",
+			true
+		);
+		D(
+			/** @type {NonNullable} */
+			(module.parser[CSS_MODULE_TYPE]),
+			"url",
+			true
+		);
+		D(
+			/** @type {NonNullable} */
+			(module.parser[CSS_MODULE_TYPE]),
+			"namedExports",
+			true
+		);
+
+		for (const type of [
+			CSS_MODULE_TYPE_AUTO,
+			CSS_MODULE_TYPE_MODULE,
+			CSS_MODULE_TYPE_GLOBAL
+		]) {
+			F(module.parser, type, () => ({}));
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.parser[type]),
+				"animation",
+				true
+			);
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.parser[type]),
+				"container",
+				true
+			);
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.parser[type]),
+				"customIdents",
+				true
+			);
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.parser[type]),
+				"dashedIdents",
+				true
+			);
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.parser[type]),
+				"function",
+				true
+			);
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.parser[type]),
+				"grid",
+				true
+			);
+		}
+
+		F(module.generator, CSS_MODULE_TYPE, () => ({}));
+
+		applyCssGeneratorOptionsDefaults(
+			/** @type {NonNullable} */
+			(module.generator[CSS_MODULE_TYPE]),
+			{ targetProperties }
+		);
+
+		const localIdentName =
+			mode === "development"
+				? uniqueName.length > 0
+					? "[uniqueName]-[id]-[local]"
+					: "[id]-[local]"
+				: "[fullhash]";
+		const localIdentHashSalt = hashSalt;
+		const localIdentHashDigest = "base64url";
+		const localIdentHashDigestLength = 6;
+		const exportsConvention = "as-is";
+
+		for (const type of [
+			CSS_MODULE_TYPE_AUTO,
+			CSS_MODULE_TYPE_MODULE,
+			CSS_MODULE_TYPE_GLOBAL
+		]) {
+			F(module.generator, type, () => ({}));
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.generator[type]),
+				"localIdentName",
+				localIdentName
+			);
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.generator[type]),
+				"localIdentHashSalt",
+				localIdentHashSalt
+			);
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.generator[type]),
+				"localIdentHashFunction",
+				hashFunction
+			);
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.generator[type]),
+				"localIdentHashDigest",
+				localIdentHashDigest
+			);
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.generator[type]),
+				"localIdentHashDigestLength",
+				localIdentHashDigestLength
+			);
+
+			D(
+				/** @type {NonNullable | NonNullable | NonNullable} */
+				(module.generator[type]),
+				"exportsConvention",
+				exportsConvention
+			);
+		}
+	}
+
+	A(module, "defaultRules", () => {
+		const esm = {
+			type: JAVASCRIPT_MODULE_TYPE_ESM,
+			resolve: {
+				byDependency: {
+					esm: {
+						fullySpecified: true
+					}
+				}
+			}
+		};
+		const commonjs = {
+			type: JAVASCRIPT_MODULE_TYPE_DYNAMIC
+		};
+		/** @type {RuleSetRules} */
+		const rules = [
+			{
+				mimetype: "application/node",
+				type: JAVASCRIPT_MODULE_TYPE_AUTO
+			},
+			{
+				test: /\.json$/i,
+				type: JSON_MODULE_TYPE
+			},
+			{
+				mimetype: "application/json",
+				type: JSON_MODULE_TYPE
+			},
+			{
+				test: /\.mjs$/i,
+				...esm
+			},
+			{
+				test: /\.js$/i,
+				descriptionData: {
+					type: "module"
+				},
+				...esm
+			},
+			{
+				test: /\.cjs$/i,
+				...commonjs
+			},
+			{
+				test: /\.js$/i,
+				descriptionData: {
+					type: "commonjs"
+				},
+				...commonjs
+			},
+			{
+				mimetype: {
+					or: ["text/javascript", "application/javascript"]
+				},
+				...esm
+			}
+		];
+		if (asyncWebAssembly) {
+			const wasm = {
+				type: WEBASSEMBLY_MODULE_TYPE_ASYNC,
+				rules: [
+					{
+						descriptionData: {
+							type: "module"
+						},
+						resolve: {
+							fullySpecified: true
+						}
+					}
+				]
+			};
+			rules.push({
+				test: /\.wasm$/i,
+				...wasm
+			});
+			rules.push({
+				mimetype: "application/wasm",
+				...wasm
+			});
+		} else if (syncWebAssembly) {
+			const wasm = {
+				type: WEBASSEMBLY_MODULE_TYPE_SYNC,
+				rules: [
+					{
+						descriptionData: {
+							type: "module"
+						},
+						resolve: {
+							fullySpecified: true
+						}
+					}
+				]
+			};
+			rules.push({
+				test: /\.wasm$/i,
+				...wasm
+			});
+			rules.push({
+				mimetype: "application/wasm",
+				...wasm
+			});
+		}
+		if (css) {
+			const resolve = {
+				fullySpecified: true,
+				preferRelative: true
+			};
+			rules.push({
+				test: /\.css$/i,
+				type: CSS_MODULE_TYPE_AUTO,
+				resolve
+			});
+			rules.push({
+				mimetype: "text/css+module",
+				type: CSS_MODULE_TYPE_MODULE,
+				resolve
+			});
+			rules.push({
+				mimetype: "text/css",
+				type: CSS_MODULE_TYPE,
+				resolve
+			});
+			// For CSS modules, i.e. `.class { composes: className from "./style.css" }`
+			// We inherit for such constructions
+			rules.push({
+				dependency: /css-import-local-module/,
+				type: CSS_MODULE_TYPE_MODULE,
+				resolve
+			});
+			rules.push({
+				dependency: /css-import-global-module/,
+				type: CSS_MODULE_TYPE_GLOBAL,
+				resolve
+			});
+
+			rules.push(
+				{
+					with: { type: "css" },
+					parser: {
+						exportType: "css-style-sheet"
+					},
+					resolve
+				},
+				{
+					assert: { type: "css" },
+					parser: {
+						exportType: "css-style-sheet"
+					},
+					resolve
+				}
+			);
+		}
+		rules.push(
+			{
+				dependency: "url",
+				oneOf: [
+					{
+						scheme: /^data$/,
+						type: ASSET_MODULE_TYPE_INLINE
+					},
+					{
+						type: ASSET_MODULE_TYPE_RESOURCE
+					}
+				]
+			},
+			{
+				with: { type: JSON_MODULE_TYPE },
+				type: JSON_MODULE_TYPE,
+				parser: { namedExports: false }
+			},
+			{
+				assert: { type: JSON_MODULE_TYPE },
+				type: JSON_MODULE_TYPE,
+				parser: { namedExports: false }
+			},
+			{
+				with: { type: "text" },
+				type: ASSET_MODULE_TYPE_SOURCE
+			},
+			{
+				with: { type: "bytes" },
+				type: ASSET_MODULE_TYPE_BYTES
+			}
+		);
+		return rules;
+	});
+};
+
+/**
+ * @param {Output} output options
+ * @param {object} options options
+ * @param {string} options.context context
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @param {boolean} options.isAffectedByBrowserslist is affected by browserslist
+ * @param {boolean} options.outputModule is outputModule experiment enabled
+ * @param {boolean} options.development is development mode
+ * @param {Entry} options.entry entry option
+ * @param {boolean} options.futureDefaults is future defaults enabled
+ * @param {boolean} options.asyncWebAssembly is asyncWebAssembly enabled
+ * @returns {void}
+ */
+const applyOutputDefaults = (
+	output,
+	{
+		context,
+		targetProperties: tp,
+		isAffectedByBrowserslist,
+		outputModule,
+		development,
+		entry,
+		futureDefaults,
+		asyncWebAssembly
+	}
+) => {
+	/**
+	 * @param {Library=} library the library option
+	 * @returns {string} a readable library name
+	 */
+	const getLibraryName = (library) => {
+		const libraryName =
+			typeof library === "object" &&
+			library &&
+			!Array.isArray(library) &&
+			"type" in library
+				? library.name
+				: /** @type {LibraryName} */ (library);
+		if (Array.isArray(libraryName)) {
+			return libraryName.join(".");
+		} else if (typeof libraryName === "object") {
+			return getLibraryName(libraryName.root);
+		} else if (typeof libraryName === "string") {
+			return libraryName;
+		}
+		return "";
+	};
+
+	F(output, "uniqueName", () => {
+		const libraryName = getLibraryName(output.library).replace(
+			/^\[(\\*[\w:]+\\*)\](\.)|(\.)\[(\\*[\w:]+\\*)\](?=\.|$)|\[(\\*[\w:]+\\*)\]/g,
+			(m, a, d1, d2, b, c) => {
+				const content = a || b || c;
+				return content.startsWith("\\") && content.endsWith("\\")
+					? `${d2 || ""}[${content.slice(1, -1)}]${d1 || ""}`
+					: "";
+			}
+		);
+		if (libraryName) return libraryName;
+		const pkgPath = path.resolve(context, "package.json");
+		try {
+			const packageInfo = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
+			return packageInfo.name || "";
+		} catch (err) {
+			if (/** @type {Error & { code: string }} */ (err).code !== "ENOENT") {
+				/** @type {Error & { code: string }} */
+				(err).message +=
+					`\nwhile determining default 'output.uniqueName' from 'name' in ${pkgPath}`;
+				throw err;
+			}
+			return "";
+		}
+	});
+
+	F(output, "module", () => Boolean(outputModule));
+
+	const environment = /** @type {Environment} */ (output.environment);
+	/**
+	 * @param {boolean | undefined} v value
+	 * @returns {boolean} true, when v is truthy or undefined
+	 */
+	const optimistic = (v) => v || v === undefined;
+	/**
+	 * @param {boolean | undefined} v value
+	 * @param {boolean | undefined} c condition
+	 * @returns {boolean | undefined} true, when v is truthy or undefined, or c is truthy
+	 */
+	const conditionallyOptimistic = (v, c) => (v === undefined && c) || v;
+
+	F(
+		environment,
+		"globalThis",
+		() => /** @type {boolean | undefined} */ (tp && tp.globalThis)
+	);
+	F(
+		environment,
+		"bigIntLiteral",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.bigIntLiteral))
+	);
+	F(
+		environment,
+		"const",
+		() => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
+	);
+	F(
+		environment,
+		"methodShorthand",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.methodShorthand))
+	);
+	F(
+		environment,
+		"arrowFunction",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.arrowFunction))
+	);
+	F(
+		environment,
+		"asyncFunction",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.asyncFunction))
+	);
+	F(
+		environment,
+		"forOf",
+		() => tp && optimistic(/** @type {boolean | undefined} */ (tp.forOf))
+	);
+	F(
+		environment,
+		"destructuring",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.destructuring))
+	);
+	F(
+		environment,
+		"optionalChaining",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.optionalChaining))
+	);
+	F(
+		environment,
+		"nodePrefixForCoreModules",
+		() =>
+			tp &&
+			optimistic(
+				/** @type {boolean | undefined} */ (tp.nodePrefixForCoreModules)
+			)
+	);
+	F(
+		environment,
+		"importMetaDirnameAndFilename",
+		() =>
+			// No optimistic, because it is new
+			tp && /** @type {boolean | undefined} */ (tp.importMetaDirnameAndFilename)
+	);
+	F(
+		environment,
+		"templateLiteral",
+		() =>
+			tp && optimistic(/** @type {boolean | undefined} */ (tp.templateLiteral))
+	);
+	F(environment, "dynamicImport", () =>
+		conditionallyOptimistic(
+			/** @type {boolean | undefined} */ (tp && tp.dynamicImport),
+			output.module
+		)
+	);
+	F(environment, "dynamicImportInWorker", () =>
+		conditionallyOptimistic(
+			/** @type {boolean | undefined} */ (tp && tp.dynamicImportInWorker),
+			output.module
+		)
+	);
+	F(environment, "module", () =>
+		conditionallyOptimistic(
+			/** @type {boolean | undefined} */ (tp && tp.module),
+			output.module
+		)
+	);
+	F(
+		environment,
+		"document",
+		() => tp && optimistic(/** @type {boolean | undefined} */ (tp.document))
+	);
+
+	D(output, "filename", output.module ? "[name].mjs" : "[name].js");
+	F(output, "iife", () => !output.module);
+	D(output, "importFunctionName", "import");
+	D(output, "importMetaName", "import.meta");
+	F(output, "chunkFilename", () => {
+		const filename =
+			/** @type {NonNullable} */
+			(output.filename);
+		if (typeof filename !== "function") {
+			const hasName = filename.includes("[name]");
+			const hasId = filename.includes("[id]");
+			const hasChunkHash = filename.includes("[chunkhash]");
+			const hasContentHash = filename.includes("[contenthash]");
+			// Anything changing depending on chunk is fine
+			if (hasChunkHash || hasContentHash || hasName || hasId) return filename;
+			// Otherwise prefix "[id]." in front of the basename to make it changing
+			return filename.replace(/(^|\/)([^/]*(?:\?|$))/, "$1[id].$2");
+		}
+		return output.module ? "[id].mjs" : "[id].js";
+	});
+	F(output, "cssFilename", () => {
+		const filename =
+			/** @type {NonNullable} */
+			(output.filename);
+		if (typeof filename !== "function") {
+			return filename.replace(/\.[mc]?js(\?|$)/, ".css$1");
+		}
+		return "[id].css";
+	});
+	F(output, "cssChunkFilename", () => {
+		const chunkFilename =
+			/** @type {NonNullable} */
+			(output.chunkFilename);
+		if (typeof chunkFilename !== "function") {
+			return chunkFilename.replace(/\.[mc]?js(\?|$)/, ".css$1");
+		}
+		return "[id].css";
+	});
+	D(output, "assetModuleFilename", "[hash][ext][query][fragment]");
+	D(output, "webassemblyModuleFilename", "[hash].module.wasm");
+	D(output, "compareBeforeEmit", true);
+	D(output, "charset", !futureDefaults);
+	const uniqueNameId = Template.toIdentifier(
+		/** @type {NonNullable} */ (output.uniqueName)
+	);
+	F(output, "hotUpdateGlobal", () => `webpackHotUpdate${uniqueNameId}`);
+	F(output, "chunkLoadingGlobal", () => `webpackChunk${uniqueNameId}`);
+	F(output, "globalObject", () => {
+		if (tp) {
+			if (tp.global) return "global";
+			if (tp.globalThis) return "globalThis";
+			// For universal target (i.e. code can be run in browser/node/worker etc.)
+			if (tp.web === null && tp.node === null && tp.module) return "globalThis";
+		}
+		return "self";
+	});
+	F(output, "chunkFormat", () => {
+		if (tp) {
+			const helpMessage = isAffectedByBrowserslist
+				? "Make sure that your 'browserslist' includes only platforms that support these features or select an appropriate 'target' to allow selecting a chunk format by default. Alternatively specify the 'output.chunkFormat' directly."
+				: "Select an appropriate 'target' to allow selecting one by default, or specify the 'output.chunkFormat' directly.";
+			if (output.module) {
+				if (environment.dynamicImport) return "module";
+				if (tp.document) return "array-push";
+				throw new Error(
+					"For the selected environment is no default ESM chunk format available:\n" +
+						"ESM exports can be chosen when 'import()' is available.\n" +
+						`JSONP Array push can be chosen when 'document' is available.\n${helpMessage}`
+				);
+			} else {
+				if (tp.document) return "array-push";
+				if (tp.require) return "commonjs";
+				if (tp.nodeBuiltins) return "commonjs";
+				if (tp.importScripts) return "array-push";
+				throw new Error(
+					"For the selected environment is no default script chunk format available:\n" +
+						`${
+							tp.module
+								? "Module ('module') can be chosen when ES modules are available (please set 'experiments.outputModule' and 'output.module' to `true`)"
+								: ""
+						}\n` +
+						"JSONP Array push ('array-push') can be chosen when 'document' or 'importScripts' is available.\n" +
+						`CommonJs exports ('commonjs') can be chosen when 'require' or node builtins are available.\n${helpMessage}`
+				);
+			}
+		}
+		throw new Error(
+			"Chunk format can't be selected by default when no target is specified"
+		);
+	});
+	D(output, "asyncChunks", true);
+	F(output, "chunkLoading", () => {
+		if (tp) {
+			switch (output.chunkFormat) {
+				case "array-push":
+					if (tp.document) return "jsonp";
+					if (tp.importScripts) return "import-scripts";
+					break;
+				case "commonjs":
+					if (tp.require) return "require";
+					if (tp.nodeBuiltins) return "async-node";
+					break;
+				case "module":
+					if (environment.dynamicImport) return "import";
+					break;
+			}
+			if (
+				(tp.require === null ||
+					tp.nodeBuiltins === null ||
+					tp.document === null ||
+					tp.importScripts === null) &&
+				output.module &&
+				environment.dynamicImport
+			) {
+				return "import";
+			}
+		}
+		return false;
+	});
+	F(output, "workerChunkLoading", () => {
+		if (tp) {
+			switch (output.chunkFormat) {
+				case "array-push":
+					if (tp.importScriptsInWorker) return "import-scripts";
+					break;
+				case "commonjs":
+					if (tp.require) return "require";
+					if (tp.nodeBuiltins) return "async-node";
+					break;
+				case "module":
+					if (environment.dynamicImportInWorker) return "import";
+					break;
+			}
+			if (
+				(tp.require === null ||
+					tp.nodeBuiltins === null ||
+					tp.importScriptsInWorker === null) &&
+				output.module &&
+				environment.dynamicImportInWorker
+			) {
+				return "import";
+			}
+		}
+		return false;
+	});
+	F(output, "wasmLoading", () => {
+		if (tp) {
+			if (tp.fetchWasm) return "fetch";
+			if (tp.nodeBuiltins) return "async-node";
+			if (
+				(tp.nodeBuiltins === null || tp.fetchWasm === null) &&
+				output.module &&
+				environment.dynamicImport
+			) {
+				return "universal";
+			}
+		}
+		return false;
+	});
+	F(output, "workerWasmLoading", () => output.wasmLoading);
+	F(output, "devtoolNamespace", () => output.uniqueName);
+	if (output.library) {
+		F(output.library, "type", () => (output.module ? "module" : "var"));
+	}
+	F(output, "path", () => path.join(process.cwd(), "dist"));
+	F(output, "pathinfo", () => development);
+	D(output, "sourceMapFilename", "[file].map[query]");
+	D(
+		output,
+		"hotUpdateChunkFilename",
+		`[id].[fullhash].hot-update.${output.module ? "mjs" : "js"}`
+	);
+	D(
+		output,
+		"hotUpdateMainFilename",
+		`[runtime].[fullhash].hot-update.${output.module ? "json.mjs" : "json"}`
+	);
+	D(output, "crossOriginLoading", false);
+	F(output, "scriptType", () => (output.module ? "module" : false));
+	D(
+		output,
+		"publicPath",
+		(tp && (tp.document || tp.importScripts)) || output.scriptType === "module"
+			? "auto"
+			: ""
+	);
+	D(output, "workerPublicPath", "");
+	D(output, "chunkLoadTimeout", 120000);
+	F(output, "hashFunction", () => {
+		if (futureDefaults) {
+			DEFAULTS.HASH_FUNCTION = "xxhash64";
+			return "xxhash64";
+		}
+
+		return "md4";
+	});
+	D(output, "hashDigest", "hex");
+	D(output, "hashDigestLength", futureDefaults ? 16 : 20);
+	D(output, "strictModuleErrorHandling", false);
+	D(output, "strictModuleExceptionHandling", false);
+
+	const { trustedTypes } = output;
+	if (trustedTypes) {
+		F(
+			trustedTypes,
+			"policyName",
+			() =>
+				/** @type {NonNullable} */
+				(output.uniqueName).replace(/[^a-z0-9\-#=_/@.%]+/gi, "_") || "webpack"
+		);
+		D(trustedTypes, "onPolicyCreationFailure", "stop");
+	}
+
+	/**
+	 * @param {(entryDescription: EntryDescription) => void} fn iterator
+	 * @returns {void}
+	 */
+	const forEachEntry = (fn) => {
+		for (const name of Object.keys(entry)) {
+			fn(/** @type {{ [k: string]: EntryDescription }} */ (entry)[name]);
+		}
+	};
+	A(output, "enabledLibraryTypes", () => {
+		/** @type {LibraryType[]} */
+		const enabledLibraryTypes = [];
+		if (output.library) {
+			enabledLibraryTypes.push(output.library.type);
+		}
+		forEachEntry((desc) => {
+			if (desc.library) {
+				enabledLibraryTypes.push(desc.library.type);
+			}
+		});
+		return enabledLibraryTypes;
+	});
+
+	A(output, "enabledChunkLoadingTypes", () => {
+		/** @type {ChunkLoadingTypes} */
+		const enabledChunkLoadingTypes = new Set();
+		if (output.chunkLoading) {
+			enabledChunkLoadingTypes.add(output.chunkLoading);
+		}
+		if (output.workerChunkLoading) {
+			enabledChunkLoadingTypes.add(output.workerChunkLoading);
+		}
+		forEachEntry((desc) => {
+			if (desc.chunkLoading) {
+				enabledChunkLoadingTypes.add(desc.chunkLoading);
+			}
+		});
+		return [...enabledChunkLoadingTypes];
+	});
+
+	A(output, "enabledWasmLoadingTypes", () => {
+		/** @type {WasmLoadingTypes} */
+		const enabledWasmLoadingTypes = new Set();
+		if (output.wasmLoading) {
+			enabledWasmLoadingTypes.add(output.wasmLoading);
+		}
+		if (output.workerWasmLoading) {
+			enabledWasmLoadingTypes.add(output.workerWasmLoading);
+		}
+		forEachEntry((desc) => {
+			if (desc.wasmLoading) {
+				enabledWasmLoadingTypes.add(desc.wasmLoading);
+			}
+		});
+		return [...enabledWasmLoadingTypes];
+	});
+};
+
+/**
+ * @param {ExternalsPresets} externalsPresets options
+ * @param {object} options options
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @param {boolean} options.buildHttp buildHttp experiment enabled
+ * @param {boolean} options.outputModule is output type is module
+ * @returns {void}
+ */
+const applyExternalsPresetsDefaults = (
+	externalsPresets,
+	{ targetProperties, buildHttp, outputModule }
+) => {
+	/**
+	 * @param {keyof TargetProperties} key a key
+	 * @returns {boolean} true when target is universal, otherwise false
+	 */
+	const isUniversal = (key) =>
+		Boolean(outputModule && targetProperties && targetProperties[key] === null);
+
+	D(
+		externalsPresets,
+		"web",
+		/** @type {boolean | undefined} */
+		(
+			!buildHttp &&
+				targetProperties &&
+				(targetProperties.web || isUniversal("node"))
+		)
+	);
+	D(
+		externalsPresets,
+		"node",
+		/** @type {boolean | undefined} */
+		(targetProperties && (targetProperties.node || isUniversal("node")))
+	);
+	D(
+		externalsPresets,
+		"nwjs",
+		/** @type {boolean | undefined} */
+		(targetProperties && (targetProperties.nwjs || isUniversal("nwjs")))
+	);
+	D(
+		externalsPresets,
+		"electron",
+		/** @type {boolean | undefined} */
+		((targetProperties && targetProperties.electron) || isUniversal("electron"))
+	);
+	D(
+		externalsPresets,
+		"electronMain",
+		/** @type {boolean | undefined} */
+		(
+			targetProperties &&
+				targetProperties.electron &&
+				(targetProperties.electronMain || isUniversal("electronMain"))
+		)
+	);
+	D(
+		externalsPresets,
+		"electronPreload",
+		/** @type {boolean | undefined} */
+		(
+			targetProperties &&
+				targetProperties.electron &&
+				(targetProperties.electronPreload || isUniversal("electronPreload"))
+		)
+	);
+	D(
+		externalsPresets,
+		"electronRenderer",
+		/** @type {boolean | undefined} */
+		(
+			targetProperties &&
+				targetProperties.electron &&
+				(targetProperties.electronRenderer || isUniversal("electronRenderer"))
+		)
+	);
+};
+
+/**
+ * @param {Loader} loader options
+ * @param {object} options options
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @param {Environment} options.environment environment
+ * @returns {void}
+ */
+const applyLoaderDefaults = (loader, { targetProperties, environment }) => {
+	F(loader, "target", () => {
+		if (targetProperties) {
+			if (targetProperties.electron) {
+				if (targetProperties.electronMain) return "electron-main";
+				if (targetProperties.electronPreload) return "electron-preload";
+				if (targetProperties.electronRenderer) return "electron-renderer";
+				return "electron";
+			}
+			if (targetProperties.nwjs) return "nwjs";
+			if (targetProperties.node) return "node";
+			if (targetProperties.web) return "web";
+		}
+	});
+	D(loader, "environment", environment);
+};
+
+/**
+ * @param {WebpackNode} node options
+ * @param {object} options options
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @param {boolean} options.futureDefaults is future defaults enabled
+ * @param {boolean} options.outputModule is output type is module
+ * @returns {void}
+ */
+const applyNodeDefaults = (
+	node,
+	{ futureDefaults, outputModule, targetProperties }
+) => {
+	if (node === false) return;
+
+	F(node, "global", () => {
+		if (targetProperties && targetProperties.global) return false;
+		// We use `warm` because overriding `global` with `globalThis` (or a polyfill) is sometimes safe (global.URL), sometimes unsafe (global.process), but we need to warn about it
+		return futureDefaults ? "warn" : true;
+	});
+
+	const handlerForNames = () => {
+		// TODO webpack@6 remove `node-module` in favor of `eval-only`
+		if (targetProperties) {
+			if (targetProperties.node) {
+				return "eval-only";
+			}
+
+			// For the "universal" target we only evaluate these values
+			if (
+				outputModule &&
+				targetProperties.node === null &&
+				targetProperties.web === null
+			) {
+				return "eval-only";
+			}
+		}
+
+		// TODO webpack@6 should we use `warn-even-only`?
+		return futureDefaults ? "warn-mock" : "mock";
+	};
+
+	F(node, "__filename", handlerForNames);
+	F(node, "__dirname", handlerForNames);
+};
+
+/**
+ * @param {Performance} performance options
+ * @param {object} options options
+ * @param {boolean} options.production is production
+ * @returns {void}
+ */
+const applyPerformanceDefaults = (performance, { production }) => {
+	if (performance === false) return;
+	D(performance, "maxAssetSize", 250000);
+	D(performance, "maxEntrypointSize", 250000);
+	F(performance, "hints", () => (production ? "warning" : false));
+};
+
+/**
+ * @param {Optimization} optimization options
+ * @param {object} options options
+ * @param {boolean} options.production is production
+ * @param {boolean} options.development is development
+ * @param {boolean} options.css is css enabled
+ * @param {boolean} options.records using records
+ * @returns {void}
+ */
+const applyOptimizationDefaults = (
+	optimization,
+	{ production, development, css, records }
+) => {
+	D(optimization, "removeAvailableModules", false);
+	D(optimization, "removeEmptyChunks", true);
+	D(optimization, "mergeDuplicateChunks", true);
+	D(optimization, "flagIncludedChunks", production);
+	F(optimization, "moduleIds", () => {
+		if (production) return "deterministic";
+		if (development) return "named";
+		return "natural";
+	});
+	F(optimization, "chunkIds", () => {
+		if (production) return "deterministic";
+		if (development) return "named";
+		return "natural";
+	});
+	F(optimization, "sideEffects", () => (production ? true : "flag"));
+	D(optimization, "providedExports", true);
+	D(optimization, "usedExports", production);
+	D(optimization, "innerGraph", production);
+	D(optimization, "mangleExports", production);
+	D(optimization, "concatenateModules", production);
+	D(optimization, "avoidEntryIife", production);
+	D(optimization, "runtimeChunk", false);
+	D(optimization, "emitOnErrors", !production);
+	D(optimization, "checkWasmTypes", production);
+	D(optimization, "mangleWasmImports", false);
+	D(optimization, "portableRecords", records);
+	D(optimization, "realContentHash", production);
+	D(optimization, "minimize", production);
+	A(optimization, "minimizer", () => [
+		{
+			apply: (compiler) => {
+				// Lazy load the Terser plugin
+				const TerserPlugin = require("terser-webpack-plugin");
+
+				new TerserPlugin({
+					terserOptions: {
+						compress: {
+							passes: 2
+						}
+					}
+				}).apply(/** @type {EXPECTED_ANY} */ (compiler));
+			}
+		}
+	]);
+	F(optimization, "nodeEnv", () => {
+		if (production) return "production";
+		if (development) return "development";
+		return false;
+	});
+	const { splitChunks } = optimization;
+	if (splitChunks) {
+		A(splitChunks, "defaultSizeTypes", () =>
+			css
+				? [JAVASCRIPT_TYPE, CSS_TYPE, UNKNOWN_TYPE]
+				: [JAVASCRIPT_TYPE, UNKNOWN_TYPE]
+		);
+		D(splitChunks, "hidePathInfo", production);
+		D(splitChunks, "chunks", "async");
+		D(splitChunks, "usedExports", optimization.usedExports === true);
+		D(splitChunks, "minChunks", 1);
+		F(splitChunks, "minSize", () => (production ? 20000 : 10000));
+		F(splitChunks, "minRemainingSize", () => (development ? 0 : undefined));
+		F(splitChunks, "enforceSizeThreshold", () => (production ? 50000 : 30000));
+		F(splitChunks, "maxAsyncRequests", () => (production ? 30 : Infinity));
+		F(splitChunks, "maxInitialRequests", () => (production ? 30 : Infinity));
+		D(splitChunks, "automaticNameDelimiter", "-");
+		const cacheGroups =
+			/** @type {NonNullable} */
+			(splitChunks.cacheGroups);
+		F(cacheGroups, "default", () => ({
+			idHint: "",
+			reuseExistingChunk: true,
+			minChunks: 2,
+			priority: -20
+		}));
+		F(cacheGroups, "defaultVendors", () => ({
+			idHint: "vendors",
+			reuseExistingChunk: true,
+			test: NODE_MODULES_REGEXP,
+			priority: -10
+		}));
+	}
+};
+
+/**
+ * @param {object} options options
+ * @param {boolean} options.cache is cache enable
+ * @param {string} options.context build context
+ * @param {TargetProperties | false} options.targetProperties target properties
+ * @param {Mode} options.mode mode
+ * @param {boolean} options.css is css enabled
+ * @returns {ResolveOptions} resolve options
+ */
+const getResolveDefaults = ({
+	cache,
+	context,
+	targetProperties,
+	mode,
+	css
+}) => {
+	/** @type {string[]} */
+	const conditions = ["webpack"];
+
+	conditions.push(mode === "development" ? "development" : "production");
+
+	if (targetProperties) {
+		if (targetProperties.webworker) conditions.push("worker");
+		if (targetProperties.node) conditions.push("node");
+		if (targetProperties.web) conditions.push("browser");
+		if (targetProperties.electron) conditions.push("electron");
+		if (targetProperties.nwjs) conditions.push("nwjs");
+	}
+
+	const jsExtensions = [".js", ".json", ".wasm"];
+
+	const tp = targetProperties;
+	const browserField =
+		tp && tp.web && (!tp.node || (tp.electron && tp.electronRenderer));
+
+	/** @type {() => ResolveOptions} */
+	const cjsDeps = () => ({
+		aliasFields: browserField ? ["browser"] : [],
+		mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
+		conditionNames: ["require", "module", "..."],
+		extensions: [...jsExtensions]
+	});
+	/** @type {() => ResolveOptions} */
+	const esmDeps = () => ({
+		aliasFields: browserField ? ["browser"] : [],
+		mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
+		conditionNames: ["import", "module", "..."],
+		extensions: [...jsExtensions]
+	});
+
+	/** @type {() => ResolveOptions} */
+	const workerDeps = () => {
+		const options = esmDeps();
+
+		const conditionNames = options.conditionNames
+			? ["worker", ...options.conditionNames]
+			: options.conditionNames;
+		return {
+			...options,
+			conditionNames,
+			preferRelative: true
+		};
+	};
+
+	/** @type {ResolveOptions} */
+	const resolveOptions = {
+		cache,
+		modules: ["node_modules"],
+		conditionNames: conditions,
+		mainFiles: ["index"],
+		extensions: [],
+		aliasFields: [],
+		exportsFields: ["exports"],
+		roots: [context],
+		mainFields: ["main"],
+		importsFields: ["imports"],
+		byDependency: {
+			wasm: esmDeps(),
+			esm: esmDeps(),
+			loaderImport: esmDeps(),
+			url: {
+				preferRelative: true
+			},
+			worker: workerDeps(),
+			commonjs: cjsDeps(),
+			amd: cjsDeps(),
+			// for backward-compat: loadModule
+			loader: cjsDeps(),
+			// for backward-compat: Custom Dependency
+			unknown: cjsDeps(),
+			// for backward-compat: getResolve without dependencyType
+			undefined: cjsDeps()
+		}
+	};
+
+	if (css) {
+		/** @type {string[]} */
+		const styleConditions = [];
+
+		styleConditions.push("webpack");
+		styleConditions.push(mode === "development" ? "development" : "production");
+		styleConditions.push("style");
+
+		/** @type {ResolveOptions} */
+		const cssResolveOptions = {
+			// We avoid using any main files because we have to be consistent with CSS `@import`
+			// and CSS `@import` does not handle `main` files in directories,
+			// you should always specify the full URL for styles
+			mainFiles: [],
+			mainFields: ["style", "..."],
+			conditionNames: styleConditions,
+			extensions: [".css"],
+			preferRelative: true
+		};
+
+		/** @type {NonNullable} */
+		(resolveOptions.byDependency)["css-import"] = cssResolveOptions;
+		// For CSS modules, i.e. `.class { composes: className from "./style.css" }`
+		// We inherit for such constructions
+		/** @type {NonNullable} */
+		(resolveOptions.byDependency)["css-import-local-module"] =
+			cssResolveOptions;
+		/** @type {NonNullable} */
+		(resolveOptions.byDependency)["css-import-global-module"] =
+			cssResolveOptions;
+	}
+
+	return resolveOptions;
+};
+
+/**
+ * @param {object} options options
+ * @param {boolean} options.cache is cache enable
+ * @returns {ResolveOptions} resolve options
+ */
+const getResolveLoaderDefaults = ({ cache }) => {
+	/** @type {ResolveOptions} */
+	const resolveOptions = {
+		cache,
+		conditionNames: ["loader", "require", "node"],
+		exportsFields: ["exports"],
+		mainFields: ["loader", "main"],
+		extensions: [".js"],
+		mainFiles: ["index"]
+	};
+
+	return resolveOptions;
+};
+
+/**
+ * @param {InfrastructureLogging} infrastructureLogging options
+ * @returns {void}
+ */
+const applyInfrastructureLoggingDefaults = (infrastructureLogging) => {
+	F(infrastructureLogging, "stream", () => process.stderr);
+	const tty =
+		/** @type {NonNullable} */
+		(infrastructureLogging.stream).isTTY && process.env.TERM !== "dumb";
+	D(infrastructureLogging, "level", "info");
+	D(infrastructureLogging, "debug", false);
+	D(infrastructureLogging, "colors", tty);
+	D(infrastructureLogging, "appendOnly", !tty);
+};
+
+module.exports.DEFAULTS = DEFAULTS;
+module.exports.applyWebpackOptionsBaseDefaults =
+	applyWebpackOptionsBaseDefaults;
+module.exports.applyWebpackOptionsDefaults = applyWebpackOptionsDefaults;
diff --git a/lib/config/normalization.js b/lib/config/normalization.js
new file mode 100644
index 00000000000..8567d229aef
--- /dev/null
+++ b/lib/config/normalization.js
@@ -0,0 +1,682 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const util = require("util");
+
+/** @typedef {import("../../declarations/WebpackOptions").CacheOptionsNormalized} CacheOptions */
+/** @typedef {import("../../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescriptionNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").EntryStatic} EntryStatic */
+/** @typedef {import("../../declarations/WebpackOptions").EntryStaticNormalized} EntryStaticNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").Externals} Externals */
+/** @typedef {import("../../declarations/WebpackOptions").LibraryName} LibraryName */
+/** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
+/** @typedef {import("../../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptionsNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").OptimizationNormalized} OptimizationNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").OptimizationRuntimeChunk} OptimizationRuntimeChunk */
+/** @typedef {import("../../declarations/WebpackOptions").OptimizationRuntimeChunkNormalized} OptimizationRuntimeChunkNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").PluginsNormalized} PluginsNormalized */
+/** @typedef {import("../../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
+/** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
+/** @typedef {import("../WebpackError")} WebpackError */
+
+/**
+ * @typedef {object} WebpackOptionsInterception
+ * @property {WebpackOptionsNormalized["devtool"]=} devtool
+ */
+
+const handledDeprecatedNoEmitOnErrors = util.deprecate(
+	/**
+	 * @param {boolean} noEmitOnErrors no emit on errors
+	 * @param {boolean | undefined} emitOnErrors emit on errors
+	 * @returns {boolean} emit on errors
+	 */
+	(noEmitOnErrors, emitOnErrors) => {
+		if (emitOnErrors !== undefined && !noEmitOnErrors === !emitOnErrors) {
+			throw new Error(
+				"Conflicting use of 'optimization.noEmitOnErrors' and 'optimization.emitOnErrors'. Remove deprecated 'optimization.noEmitOnErrors' from config."
+			);
+		}
+		return !noEmitOnErrors;
+	},
+	"optimization.noEmitOnErrors is deprecated in favor of optimization.emitOnErrors",
+	"DEP_WEBPACK_CONFIGURATION_OPTIMIZATION_NO_EMIT_ON_ERRORS"
+);
+
+/**
+ * @template T
+ * @template R
+ * @param {T | undefined} value value or not
+ * @param {(value: T) => R} fn nested handler
+ * @returns {R} result value
+ */
+const nestedConfig = (value, fn) =>
+	value === undefined ? fn(/** @type {T} */ ({})) : fn(value);
+
+/**
+ * @template T
+ * @param {T | undefined} value value or not
+ * @returns {T} result value
+ */
+const cloneObject = (value) => /** @type {T} */ ({ ...value });
+/**
+ * @template T
+ * @template R
+ * @param {T | undefined} value value or not
+ * @param {(value: T) => R} fn nested handler
+ * @returns {R | undefined} result value
+ */
+const optionalNestedConfig = (value, fn) =>
+	value === undefined ? undefined : fn(value);
+
+/**
+ * @template T
+ * @template R
+ * @param {T[] | undefined} value array or not
+ * @param {(value: T[]) => R[]} fn nested handler
+ * @returns {R[] | undefined} cloned value
+ */
+const nestedArray = (value, fn) => (Array.isArray(value) ? fn(value) : fn([]));
+
+/**
+ * @template T
+ * @template R
+ * @param {T[] | undefined} value array or not
+ * @param {(value: T[]) => R[]} fn nested handler
+ * @returns {R[] | undefined} cloned value
+ */
+const optionalNestedArray = (value, fn) =>
+	Array.isArray(value) ? fn(value) : undefined;
+
+/**
+ * @template T
+ * @template R
+ * @param {Record | undefined} value value or not
+ * @param {(value: T) => R} fn nested handler
+ * @param {Record R>=} customKeys custom nested handler for some keys
+ * @returns {Record} result value
+ */
+const keyedNestedConfig = (value, fn, customKeys) => {
+	/* eslint-disable no-sequences */
+	const result =
+		value === undefined
+			? {}
+			: Object.keys(value).reduce(
+					(obj, key) => (
+						(obj[key] = (
+							customKeys && key in customKeys ? customKeys[key] : fn
+						)(value[key])),
+						obj
+					),
+					/** @type {Record} */ ({})
+				);
+	/* eslint-enable no-sequences */
+	if (customKeys) {
+		for (const key of Object.keys(customKeys)) {
+			if (!(key in result)) {
+				result[key] = customKeys[key](/** @type {T} */ ({}));
+			}
+		}
+	}
+	return result;
+};
+
+/**
+ * @param {WebpackOptions} config input config
+ * @returns {WebpackOptionsNormalized} normalized options
+ */
+const getNormalizedWebpackOptions = (config) => ({
+	amd: config.amd,
+	bail: config.bail,
+	cache:
+		/** @type {NonNullable} */
+		(
+			optionalNestedConfig(config.cache, (cache) => {
+				if (cache === false) return false;
+				if (cache === true) {
+					return {
+						type: "memory",
+						maxGenerations: undefined
+					};
+				}
+				switch (cache.type) {
+					case "filesystem":
+						return {
+							type: "filesystem",
+							allowCollectingMemory: cache.allowCollectingMemory,
+							maxMemoryGenerations: cache.maxMemoryGenerations,
+							maxAge: cache.maxAge,
+							profile: cache.profile,
+							buildDependencies: cloneObject(cache.buildDependencies),
+							cacheDirectory: cache.cacheDirectory,
+							cacheLocation: cache.cacheLocation,
+							hashAlgorithm: cache.hashAlgorithm,
+							compression: cache.compression,
+							idleTimeout: cache.idleTimeout,
+							idleTimeoutForInitialStore: cache.idleTimeoutForInitialStore,
+							idleTimeoutAfterLargeChanges: cache.idleTimeoutAfterLargeChanges,
+							name: cache.name,
+							store: cache.store,
+							version: cache.version,
+							readonly: cache.readonly
+						};
+					case undefined:
+					case "memory":
+						return {
+							type: "memory",
+							maxGenerations: cache.maxGenerations
+						};
+					default:
+						// @ts-expect-error Property 'type' does not exist on type 'never'. ts(2339)
+						throw new Error(`Not implemented cache.type ${cache.type}`);
+				}
+			})
+		),
+	context: config.context,
+	dependencies: config.dependencies,
+	devServer: optionalNestedConfig(config.devServer, (devServer) => {
+		if (devServer === false) return false;
+		return { ...devServer };
+	}),
+	devtool: config.devtool,
+	dotenv: config.dotenv,
+	entry:
+		config.entry === undefined
+			? { main: {} }
+			: typeof config.entry === "function"
+				? (
+						(fn) => () =>
+							Promise.resolve().then(fn).then(getNormalizedEntryStatic)
+					)(config.entry)
+				: getNormalizedEntryStatic(config.entry),
+	experiments: nestedConfig(config.experiments, (experiments) => ({
+		...experiments,
+		buildHttp: optionalNestedConfig(experiments.buildHttp, (options) =>
+			Array.isArray(options) ? { allowedUris: options } : options
+		),
+		lazyCompilation: optionalNestedConfig(
+			experiments.lazyCompilation,
+			(options) => (options === true ? {} : options)
+		)
+	})),
+	externals: /** @type {NonNullable} */ (config.externals),
+	externalsPresets: cloneObject(config.externalsPresets),
+	externalsType: config.externalsType,
+	ignoreWarnings: config.ignoreWarnings
+		? config.ignoreWarnings.map((ignore) => {
+				if (typeof ignore === "function") return ignore;
+				const i = ignore instanceof RegExp ? { message: ignore } : ignore;
+				return (warning, { requestShortener }) => {
+					if (!i.message && !i.module && !i.file) return false;
+					if (i.message && !i.message.test(warning.message)) {
+						return false;
+					}
+					if (
+						i.module &&
+						(!(/** @type {WebpackError} */ (warning).module) ||
+							!i.module.test(
+								/** @type {WebpackError} */
+								(warning).module.readableIdentifier(requestShortener)
+							))
+					) {
+						return false;
+					}
+					if (
+						i.file &&
+						(!(/** @type {WebpackError} */ (warning).file) ||
+							!i.file.test(/** @type {WebpackError} */ (warning).file))
+					) {
+						return false;
+					}
+					return true;
+				};
+			})
+		: undefined,
+	infrastructureLogging: cloneObject(config.infrastructureLogging),
+	loader: cloneObject(config.loader),
+	mode: config.mode,
+	module:
+		/** @type {ModuleOptionsNormalized} */
+		(
+			nestedConfig(config.module, (module) => ({
+				noParse: module.noParse,
+				unsafeCache: module.unsafeCache,
+				parser: keyedNestedConfig(module.parser, cloneObject, {
+					javascript: (parserOptions) => ({
+						// TODO webpack 6 remove from `ModuleOptions`, keep only `*ByModuleType`
+						unknownContextRequest: module.unknownContextRequest,
+						unknownContextRegExp: module.unknownContextRegExp,
+						unknownContextRecursive: module.unknownContextRecursive,
+						unknownContextCritical: module.unknownContextCritical,
+						exprContextRequest: module.exprContextRequest,
+						exprContextRegExp: module.exprContextRegExp,
+						exprContextRecursive: module.exprContextRecursive,
+						exprContextCritical: module.exprContextCritical,
+						wrappedContextRegExp: module.wrappedContextRegExp,
+						wrappedContextRecursive: module.wrappedContextRecursive,
+						wrappedContextCritical: module.wrappedContextCritical,
+						strictExportPresence: module.strictExportPresence,
+						strictThisContextOnImports: module.strictThisContextOnImports,
+						...parserOptions
+					})
+				}),
+				generator: cloneObject(module.generator),
+				defaultRules: optionalNestedArray(module.defaultRules, (r) => [...r]),
+				rules: nestedArray(module.rules, (r) => [...r])
+			}))
+		),
+	name: config.name,
+	node: nestedConfig(
+		config.node,
+		(node) =>
+			node && {
+				...node
+			}
+	),
+	optimization: nestedConfig(config.optimization, (optimization) => ({
+		...optimization,
+		runtimeChunk: getNormalizedOptimizationRuntimeChunk(
+			optimization.runtimeChunk
+		),
+		splitChunks: nestedConfig(
+			optimization.splitChunks,
+			(splitChunks) =>
+				splitChunks && {
+					...splitChunks,
+					defaultSizeTypes: splitChunks.defaultSizeTypes
+						? [...splitChunks.defaultSizeTypes]
+						: ["..."],
+					cacheGroups: cloneObject(splitChunks.cacheGroups)
+				}
+		),
+		minimizer:
+			optimization.minimizer !== undefined
+				? /** @type {OptimizationNormalized["minimizer"]} */ (
+						nestedArray(optimization.minimizer, (p) => p.filter(Boolean))
+					)
+				: optimization.minimizer,
+		emitOnErrors:
+			optimization.noEmitOnErrors !== undefined
+				? handledDeprecatedNoEmitOnErrors(
+						optimization.noEmitOnErrors,
+						optimization.emitOnErrors
+					)
+				: optimization.emitOnErrors
+	})),
+	output: nestedConfig(config.output, (output) => {
+		const { library } = output;
+		const libraryAsName = /** @type {LibraryName} */ (library);
+		const libraryBase =
+			typeof library === "object" &&
+			library &&
+			!Array.isArray(library) &&
+			"type" in library
+				? library
+				: libraryAsName || output.libraryTarget
+					? /** @type {LibraryOptions} */ ({
+							name: libraryAsName
+						})
+					: undefined;
+		/** @type {OutputNormalized} */
+		const result = {
+			assetModuleFilename: output.assetModuleFilename,
+			asyncChunks: output.asyncChunks,
+			charset: output.charset,
+			chunkFilename: output.chunkFilename,
+			chunkFormat: output.chunkFormat,
+			chunkLoading: output.chunkLoading,
+			chunkLoadingGlobal: output.chunkLoadingGlobal,
+			chunkLoadTimeout: output.chunkLoadTimeout,
+			cssFilename: output.cssFilename,
+			cssChunkFilename: output.cssChunkFilename,
+			clean: output.clean,
+			compareBeforeEmit: output.compareBeforeEmit,
+			crossOriginLoading: output.crossOriginLoading,
+			devtoolFallbackModuleFilenameTemplate:
+				output.devtoolFallbackModuleFilenameTemplate,
+			devtoolModuleFilenameTemplate: output.devtoolModuleFilenameTemplate,
+			devtoolNamespace: output.devtoolNamespace,
+			environment: cloneObject(output.environment),
+			enabledChunkLoadingTypes: output.enabledChunkLoadingTypes
+				? [...output.enabledChunkLoadingTypes]
+				: ["..."],
+			enabledLibraryTypes: output.enabledLibraryTypes
+				? [...output.enabledLibraryTypes]
+				: ["..."],
+			enabledWasmLoadingTypes: output.enabledWasmLoadingTypes
+				? [...output.enabledWasmLoadingTypes]
+				: ["..."],
+			filename: output.filename,
+			globalObject: output.globalObject,
+			hashDigest: output.hashDigest,
+			hashDigestLength: output.hashDigestLength,
+			hashFunction: output.hashFunction,
+			hashSalt: output.hashSalt,
+			hotUpdateChunkFilename: output.hotUpdateChunkFilename,
+			hotUpdateGlobal: output.hotUpdateGlobal,
+			hotUpdateMainFilename: output.hotUpdateMainFilename,
+			ignoreBrowserWarnings: output.ignoreBrowserWarnings,
+			iife: output.iife,
+			importFunctionName: output.importFunctionName,
+			importMetaName: output.importMetaName,
+			scriptType: output.scriptType,
+			// TODO webpack 6 remove `libraryTarget`/`auxiliaryComment`/`amdContainer`/etc in favor of the `library` option
+			library: libraryBase && {
+				type:
+					output.libraryTarget !== undefined
+						? output.libraryTarget
+						: libraryBase.type,
+				auxiliaryComment:
+					output.auxiliaryComment !== undefined
+						? output.auxiliaryComment
+						: libraryBase.auxiliaryComment,
+				amdContainer:
+					output.amdContainer !== undefined
+						? output.amdContainer
+						: libraryBase.amdContainer,
+				export:
+					output.libraryExport !== undefined
+						? output.libraryExport
+						: libraryBase.export,
+				name: libraryBase.name,
+				umdNamedDefine:
+					output.umdNamedDefine !== undefined
+						? output.umdNamedDefine
+						: libraryBase.umdNamedDefine
+			},
+			module: output.module,
+			path: output.path,
+			pathinfo: output.pathinfo,
+			publicPath: output.publicPath,
+			sourceMapFilename: output.sourceMapFilename,
+			sourcePrefix: output.sourcePrefix,
+			strictModuleErrorHandling: output.strictModuleErrorHandling,
+			strictModuleExceptionHandling: output.strictModuleExceptionHandling,
+			trustedTypes: optionalNestedConfig(
+				output.trustedTypes,
+				(trustedTypes) => {
+					if (trustedTypes === true) return {};
+					if (typeof trustedTypes === "string") {
+						return { policyName: trustedTypes };
+					}
+					return { ...trustedTypes };
+				}
+			),
+			uniqueName: output.uniqueName,
+			wasmLoading: output.wasmLoading,
+			webassemblyModuleFilename: output.webassemblyModuleFilename,
+			workerPublicPath: output.workerPublicPath,
+			workerChunkLoading: output.workerChunkLoading,
+			workerWasmLoading: output.workerWasmLoading
+		};
+		return result;
+	}),
+	parallelism: config.parallelism,
+	validate: config.validate,
+	performance: optionalNestedConfig(config.performance, (performance) => {
+		if (performance === false) return false;
+		return {
+			...performance
+		};
+	}),
+	plugins: /** @type {PluginsNormalized} */ (
+		nestedArray(config.plugins, (p) => p.filter(Boolean))
+	),
+	profile: config.profile,
+	recordsInputPath:
+		config.recordsInputPath !== undefined
+			? config.recordsInputPath
+			: config.recordsPath,
+	recordsOutputPath:
+		config.recordsOutputPath !== undefined
+			? config.recordsOutputPath
+			: config.recordsPath,
+	resolve: nestedConfig(config.resolve, (resolve) => ({
+		...resolve,
+		byDependency: keyedNestedConfig(resolve.byDependency, cloneObject)
+	})),
+	resolveLoader: cloneObject(config.resolveLoader),
+	snapshot: nestedConfig(config.snapshot, (snapshot) => ({
+		resolveBuildDependencies: optionalNestedConfig(
+			snapshot.resolveBuildDependencies,
+			(resolveBuildDependencies) => ({
+				timestamp: resolveBuildDependencies.timestamp,
+				hash: resolveBuildDependencies.hash
+			})
+		),
+		buildDependencies: optionalNestedConfig(
+			snapshot.buildDependencies,
+			(buildDependencies) => ({
+				timestamp: buildDependencies.timestamp,
+				hash: buildDependencies.hash
+			})
+		),
+		resolve: optionalNestedConfig(snapshot.resolve, (resolve) => ({
+			timestamp: resolve.timestamp,
+			hash: resolve.hash
+		})),
+		module: optionalNestedConfig(snapshot.module, (module) => ({
+			timestamp: module.timestamp,
+			hash: module.hash
+		})),
+		contextModule: optionalNestedConfig(
+			snapshot.contextModule,
+			(contextModule) => ({
+				timestamp: contextModule.timestamp,
+				hash: contextModule.hash
+			})
+		),
+		immutablePaths: optionalNestedArray(snapshot.immutablePaths, (p) => [...p]),
+		managedPaths: optionalNestedArray(snapshot.managedPaths, (p) => [...p]),
+		unmanagedPaths: optionalNestedArray(snapshot.unmanagedPaths, (p) => [...p])
+	})),
+	stats: nestedConfig(config.stats, (stats) => {
+		if (stats === false) {
+			return {
+				preset: "none"
+			};
+		}
+		if (stats === true) {
+			return {
+				preset: "normal"
+			};
+		}
+		if (typeof stats === "string") {
+			return {
+				preset: stats
+			};
+		}
+		return {
+			...stats
+		};
+	}),
+	target: config.target,
+	watch: config.watch,
+	watchOptions: cloneObject(config.watchOptions)
+});
+
+/**
+ * @param {EntryStatic} entry static entry options
+ * @returns {EntryStaticNormalized} normalized static entry options
+ */
+const getNormalizedEntryStatic = (entry) => {
+	if (typeof entry === "string") {
+		return {
+			main: {
+				import: [entry]
+			}
+		};
+	}
+	if (Array.isArray(entry)) {
+		return {
+			main: {
+				import: entry
+			}
+		};
+	}
+	/** @type {EntryStaticNormalized} */
+	const result = {};
+	for (const key of Object.keys(entry)) {
+		const value = entry[key];
+		if (typeof value === "string") {
+			result[key] = {
+				import: [value]
+			};
+		} else if (Array.isArray(value)) {
+			result[key] = {
+				import: value
+			};
+		} else {
+			result[key] = {
+				import:
+					/** @type {EntryDescriptionNormalized["import"]} */
+					(
+						value.import &&
+							(Array.isArray(value.import) ? value.import : [value.import])
+					),
+				filename: value.filename,
+				layer: value.layer,
+				runtime: value.runtime,
+				baseUri: value.baseUri,
+				publicPath: value.publicPath,
+				chunkLoading: value.chunkLoading,
+				asyncChunks: value.asyncChunks,
+				wasmLoading: value.wasmLoading,
+				dependOn:
+					/** @type {EntryDescriptionNormalized["dependOn"]} */
+					(
+						value.dependOn &&
+							(Array.isArray(value.dependOn)
+								? value.dependOn
+								: [value.dependOn])
+					),
+				library: value.library
+			};
+		}
+	}
+	return result;
+};
+
+/**
+ * @param {OptimizationRuntimeChunk=} runtimeChunk runtimeChunk option
+ * @returns {OptimizationRuntimeChunkNormalized=} normalized runtimeChunk option
+ */
+const getNormalizedOptimizationRuntimeChunk = (runtimeChunk) => {
+	if (runtimeChunk === undefined) return;
+	if (runtimeChunk === false) return false;
+	if (runtimeChunk === "single") {
+		return {
+			name: () => "runtime"
+		};
+	}
+	if (runtimeChunk === true || runtimeChunk === "multiple") {
+		return {
+			name: (entrypoint) => `runtime~${entrypoint.name}`
+		};
+	}
+	const { name } = runtimeChunk;
+	return {
+		name:
+			typeof name === "function"
+				? /** @type {Exclude["name"]} */
+					(name)
+				: () => /** @type {string} */ (name)
+	};
+};
+
+/**
+ * @param {WebpackOptionsNormalized} options options to be intercepted
+ * @returns {{ options: WebpackOptionsNormalized, interception?: WebpackOptionsInterception }} options and interception
+ */
+const applyWebpackOptionsInterception = (options) => {
+	// Return origin options when backCompat is disabled
+	if (options.experiments.futureDefaults) {
+		return {
+			options
+		};
+	}
+
+	// TODO webpack 6 - remove compatibility logic and move `devtools` fully into `devtool` with multi-type support
+	let _devtool = options.devtool;
+	/** @type {WebpackOptionsNormalized["devtool"]} */
+	let cached;
+
+	const devtoolBackCompat = () => {
+		if (Array.isArray(_devtool)) {
+			if (cached) return cached;
+			// Prefer `all`, then `javascript`, then `css`
+			const match = ["all", "javascript", "css"]
+				.map((type) =>
+					/** @type {Extract} */ (
+						_devtool
+					).find((item) => item.type === type)
+				)
+				.find(Boolean);
+
+			// If `devtool: []` is specified, return `false` here
+			return (cached = match ? match.use : false);
+		}
+		return _devtool;
+	};
+
+	/** @type {ProxyHandler} */
+	const handler = Object.create(null);
+	handler.get = (target, prop, receiver) => {
+		if (prop === "devtool") {
+			return devtoolBackCompat();
+		}
+		return Reflect.get(target, prop, receiver);
+	};
+	handler.set = (target, prop, value, receiver) => {
+		if (prop === "devtool") {
+			_devtool = value;
+			cached = undefined;
+			return true;
+		}
+		return Reflect.set(target, prop, value, receiver);
+	};
+	handler.deleteProperty = (target, prop) => {
+		if (prop === "devtool") {
+			_devtool = undefined;
+			cached = undefined;
+			return true;
+		}
+		return Reflect.deleteProperty(target, prop);
+	};
+	handler.defineProperty = (target, prop, descriptor) => {
+		if (prop === "devtool") {
+			_devtool = descriptor.value;
+			cached = undefined;
+			return true;
+		}
+		return Reflect.defineProperty(target, prop, descriptor);
+	};
+	handler.getOwnPropertyDescriptor = (target, prop) => {
+		if (prop === "devtool") {
+			return {
+				configurable: true,
+				enumerable: true,
+				value: devtoolBackCompat(),
+				writable: true
+			};
+		}
+		return Reflect.getOwnPropertyDescriptor(target, prop);
+	};
+
+	return {
+		options: new Proxy(options, handler),
+		interception: {
+			get devtool() {
+				return _devtool;
+			}
+		}
+	};
+};
+
+module.exports.applyWebpackOptionsInterception =
+	applyWebpackOptionsInterception;
+module.exports.getNormalizedWebpackOptions = getNormalizedWebpackOptions;
diff --git a/lib/config/target.js b/lib/config/target.js
new file mode 100644
index 00000000000..d3047b21931
--- /dev/null
+++ b/lib/config/target.js
@@ -0,0 +1,389 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const memoize = require("../util/memoize");
+
+const getBrowserslistTargetHandler = memoize(() =>
+	require("./browserslistTargetHandler")
+);
+
+/**
+ * @param {string} context the context directory
+ * @returns {string} default target
+ */
+const getDefaultTarget = (context) => {
+	const browsers = getBrowserslistTargetHandler().load(undefined, context);
+	return browsers ? "browserslist" : "web";
+};
+
+/**
+ * @typedef {object} PlatformTargetProperties
+ * @property {boolean | null=} web web platform, importing of http(s) and std: is available
+ * @property {boolean | null=} browser browser platform, running in a normal web browser
+ * @property {boolean | null=} webworker (Web)Worker platform, running in a web/shared/service worker
+ * @property {boolean | null=} node node platform, require of node built-in modules is available
+ * @property {boolean | null=} nwjs nwjs platform, require of legacy nw.gui is available
+ * @property {boolean | null=} electron electron platform, require of some electron built-in modules is available
+ */
+
+/**
+ * @typedef {object} ElectronContextTargetProperties
+ * @property {boolean | null} electronMain in main context
+ * @property {boolean | null} electronPreload in preload context
+ * @property {boolean | null} electronRenderer in renderer context with node integration
+ */
+
+/**
+ * @typedef {object} ApiTargetProperties
+ * @property {boolean | null} require has require function available
+ * @property {boolean | null} nodeBuiltins has node.js built-in modules available
+ * @property {boolean | null} nodePrefixForCoreModules node.js allows to use `node:` prefix for core modules
+ * @property {boolean | null} importMetaDirnameAndFilename node.js allows to use `import.meta.dirname` and `import.meta.filename`
+ * @property {boolean | null} document has document available (allows script tags)
+ * @property {boolean | null} importScripts has importScripts available
+ * @property {boolean | null} importScriptsInWorker has importScripts available when creating a worker
+ * @property {boolean | null} fetchWasm has fetch function available for WebAssembly
+ * @property {boolean | null} global has global variable available
+ */
+
+/**
+ * @typedef {object} EcmaTargetProperties
+ * @property {boolean | null} globalThis has globalThis variable available
+ * @property {boolean | null} bigIntLiteral big int literal syntax is available
+ * @property {boolean | null} const const and let variable declarations are available
+ * @property {boolean | null} methodShorthand object method shorthand is available
+ * @property {boolean | null} arrowFunction arrow functions are available
+ * @property {boolean | null} forOf for of iteration is available
+ * @property {boolean | null} destructuring destructuring is available
+ * @property {boolean | null} dynamicImport async import() is available
+ * @property {boolean | null} dynamicImportInWorker async import() is available when creating a worker
+ * @property {boolean | null} module ESM syntax is available (when in module)
+ * @property {boolean | null} optionalChaining optional chaining is available
+ * @property {boolean | null} templateLiteral template literal is available
+ * @property {boolean | null} asyncFunction async functions and await are available
+ */
+
+/**
+ * @template T
+ * @typedef {{ [P in keyof T]?: never }} Never
+ */
+
+/**
+ * @template A
+ * @template B
+ * @typedef {(A & Never) | (Never & B) | (A & B)} Mix
+ */
+
+/** @typedef {Mix, Mix>} TargetProperties */
+
+/**
+ * @param {string} major major version
+ * @param {string | undefined} minor minor version
+ * @returns {(vMajor: number, vMinor?: number) => boolean | undefined} check if version is greater or equal
+ */
+const versionDependent = (major, minor) => {
+	if (!major) {
+		return () => /** @type {undefined} */ (undefined);
+	}
+	/** @type {number} */
+	const nMajor = Number(major);
+	/** @type {number} */
+	const nMinor = minor ? Number(minor) : 0;
+	return (vMajor, vMinor = 0) =>
+		nMajor > vMajor || (nMajor === vMajor && nMinor >= vMinor);
+};
+
+/** @type {[string, string, RegExp, (...args: string[]) => Partial][]} */
+const TARGETS = [
+	[
+		"browserslist / browserslist:env / browserslist:query / browserslist:path-to-config / browserslist:path-to-config:env",
+		"Resolve features from browserslist. Will resolve browserslist config automatically. Only browser or node queries are supported (electron is not supported). Examples: 'browserslist:modern' to use 'modern' environment from browserslist config",
+		/^browserslist(?::(.+))?$/,
+		(rest, context) => {
+			const browserslistTargetHandler = getBrowserslistTargetHandler();
+			const browsers = browserslistTargetHandler.load(
+				rest ? rest.trim() : null,
+				context
+			);
+			if (!browsers) {
+				throw new Error(`No browserslist config found to handle the 'browserslist' target.
+See https://github.com/browserslist/browserslist#queries for possible ways to provide a config.
+The recommended way is to add a 'browserslist' key to your package.json and list supported browsers (resp. node.js versions).
+You can also more options via the 'target' option: 'browserslist' / 'browserslist:env' / 'browserslist:query' / 'browserslist:path-to-config' / 'browserslist:path-to-config:env'`);
+			}
+
+			return browserslistTargetHandler.resolve(browsers);
+		}
+	],
+	[
+		"web",
+		"Web browser.",
+		/^web$/,
+		() => ({
+			node: false,
+			web: true,
+			webworker: null,
+			browser: true,
+			electron: false,
+			nwjs: false,
+
+			document: true,
+			importScriptsInWorker: true,
+			fetchWasm: true,
+			nodeBuiltins: false,
+			importScripts: false,
+			require: false,
+			global: false
+		})
+	],
+	[
+		"webworker",
+		"Web Worker, SharedWorker or Service Worker.",
+		/^webworker$/,
+		() => ({
+			node: false,
+			web: true,
+			webworker: true,
+			browser: true,
+			electron: false,
+			nwjs: false,
+
+			importScripts: true,
+			importScriptsInWorker: true,
+			fetchWasm: true,
+			nodeBuiltins: false,
+			require: false,
+			document: false,
+			global: false
+		})
+	],
+	[
+		"[async-]node[X[.Y]]",
+		"Node.js in version X.Y. The 'async-' prefix will load chunks asynchronously via 'fs' and 'vm' instead of 'require()'. Examples: node14.5, async-node10.",
+		/^(async-)?node((\d+)(?:\.(\d+))?)?$/,
+		(asyncFlag, _, major, minor) => {
+			const v = versionDependent(major, minor);
+			// see https://node.green/
+			return {
+				node: true,
+				web: false,
+				webworker: false,
+				browser: false,
+				electron: false,
+				nwjs: false,
+
+				require: !asyncFlag,
+				nodeBuiltins: true,
+				// v16.0.0, v14.18.0
+				nodePrefixForCoreModules: Number(major) < 15 ? v(14, 18) : v(16),
+				// Added in: v21.2.0, v20.11.0, but Node.js will output experimental warning, we don't want it
+				// v24.0.0, v22.16.0 - This property is no longer experimental.
+				importMetaDirnameAndFilename: v(22, 16),
+				global: true,
+				document: false,
+				fetchWasm: false,
+				importScripts: false,
+				importScriptsInWorker: false,
+
+				globalThis: v(12),
+				const: v(6),
+				templateLiteral: v(4),
+				optionalChaining: v(14),
+				methodShorthand: v(4),
+				arrowFunction: v(6),
+				asyncFunction: v(7, 6),
+				forOf: v(5),
+				destructuring: v(6),
+				bigIntLiteral: v(10, 4),
+				dynamicImport: v(12, 17),
+				dynamicImportInWorker: v(12, 17),
+				module: v(12, 17)
+			};
+		}
+	],
+	[
+		"electron[X[.Y]]-main/preload/renderer",
+		"Electron in version X.Y. Script is running in main, preload resp. renderer context.",
+		/^electron((\d+)(?:\.(\d+))?)?-(main|preload|renderer)$/,
+		(_, major, minor, context) => {
+			const v = versionDependent(major, minor);
+			// see https://node.green/ + https://github.com/electron/releases
+			return {
+				node: true,
+				web: context !== "main",
+				webworker: false,
+				browser: false,
+				electron: true,
+				nwjs: false,
+
+				electronMain: context === "main",
+				electronPreload: context === "preload",
+				electronRenderer: context === "renderer",
+
+				global: true,
+				nodeBuiltins: true,
+				// 15.0.0	- Node.js	v16.5
+				// 14.0.0 - Mode.js v14.17, but prefixes only since v14.18
+				nodePrefixForCoreModules: v(15),
+				// 37.0.0 - Node.js v22.16
+				importMetaDirnameAndFilename: v(37),
+
+				require: true,
+				document: context === "renderer",
+				fetchWasm: context === "renderer",
+				importScripts: false,
+				importScriptsInWorker: true,
+
+				globalThis: v(5),
+				const: v(1, 1),
+				templateLiteral: v(1, 1),
+				optionalChaining: v(8),
+				methodShorthand: v(1, 1),
+				arrowFunction: v(1, 1),
+				asyncFunction: v(1, 7),
+				forOf: v(0, 36),
+				destructuring: v(1, 1),
+				bigIntLiteral: v(4),
+				dynamicImport: v(11),
+				dynamicImportInWorker: v(11),
+				module: v(11)
+			};
+		}
+	],
+	[
+		"nwjs[X[.Y]] / node-webkit[X[.Y]]",
+		"NW.js in version X.Y.",
+		/^(?:nwjs|node-webkit)((\d+)(?:\.(\d+))?)?$/,
+		(_, major, minor) => {
+			const v = versionDependent(major, minor);
+			// see https://node.green/ + https://github.com/nwjs/nw.js/blob/nw48/CHANGELOG.md
+			return {
+				node: true,
+				web: true,
+				webworker: null,
+				browser: false,
+				electron: false,
+				nwjs: true,
+
+				global: true,
+				nodeBuiltins: true,
+				document: false,
+				importScriptsInWorker: false,
+				fetchWasm: false,
+				importScripts: false,
+				require: false,
+
+				globalThis: v(0, 43),
+				const: v(0, 15),
+				templateLiteral: v(0, 13),
+				optionalChaining: v(0, 44),
+				methodShorthand: v(0, 15),
+				arrowFunction: v(0, 15),
+				asyncFunction: v(0, 21),
+				forOf: v(0, 13),
+				destructuring: v(0, 15),
+				bigIntLiteral: v(0, 32),
+				dynamicImport: v(0, 43),
+				dynamicImportInWorker: v(0, 44),
+				module: v(0, 43)
+			};
+		}
+	],
+	[
+		"esX",
+		"EcmaScript in this version. Examples: es2020, es5.",
+		/^es(\d+)$/,
+		(version) => {
+			let v = Number(version);
+			if (v < 1000) v += 2009;
+			return {
+				const: v >= 2015,
+				templateLiteral: v >= 2015,
+				optionalChaining: v >= 2020,
+				methodShorthand: v >= 2015,
+				arrowFunction: v >= 2015,
+				forOf: v >= 2015,
+				destructuring: v >= 2015,
+				module: v >= 2015,
+				asyncFunction: v >= 2017,
+				globalThis: v >= 2020,
+				bigIntLiteral: v >= 2020,
+				dynamicImport: v >= 2020,
+				dynamicImportInWorker: v >= 2020
+			};
+		}
+	]
+];
+
+/**
+ * @param {string} target the target
+ * @param {string} context the context directory
+ * @returns {TargetProperties} target properties
+ */
+const getTargetProperties = (target, context) => {
+	for (const [, , regExp, handler] of TARGETS) {
+		const match = regExp.exec(target);
+		if (match) {
+			const [, ...args] = match;
+			const result = handler(...args, context);
+			if (result) return /** @type {TargetProperties} */ (result);
+		}
+	}
+	throw new Error(
+		`Unknown target '${target}'. The following targets are supported:\n${TARGETS.map(
+			([name, description]) => `* ${name}: ${description}`
+		).join("\n")}`
+	);
+};
+
+/**
+ * @param {TargetProperties[]} targetProperties array of target properties
+ * @returns {TargetProperties} merged target properties
+ */
+const mergeTargetProperties = (targetProperties) => {
+	/** @type {Set} */
+	const keys = new Set();
+	for (const tp of targetProperties) {
+		for (const key of Object.keys(tp)) {
+			keys.add(/** @type {keyof TargetProperties} */ (key));
+		}
+	}
+	/** @type {TargetProperties} */
+	const result = {};
+	for (const key of keys) {
+		let hasTrue = false;
+		let hasFalse = false;
+		for (const tp of targetProperties) {
+			const value = tp[key];
+			switch (value) {
+				case true:
+					hasTrue = true;
+					break;
+				case false:
+					hasFalse = true;
+					break;
+			}
+		}
+		if (hasTrue || hasFalse) {
+			/** @type {TargetProperties} */
+			(result)[key] = hasFalse && hasTrue ? null : Boolean(hasTrue);
+		}
+	}
+	return result;
+};
+
+/**
+ * @param {string[]} targets the targets
+ * @param {string} context the context directory
+ * @returns {TargetProperties} target properties
+ */
+const getTargetsProperties = (targets, context) =>
+	mergeTargetProperties(targets.map((t) => getTargetProperties(t, context)));
+
+module.exports.getDefaultTarget = getDefaultTarget;
+module.exports.getTargetProperties = getTargetProperties;
+module.exports.getTargetsProperties = getTargetsProperties;
diff --git a/lib/container/ContainerEntryDependency.js b/lib/container/ContainerEntryDependency.js
new file mode 100644
index 00000000000..2fd0e2ddb98
--- /dev/null
+++ b/lib/container/ContainerEntryDependency.js
@@ -0,0 +1,50 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
+*/
+
+"use strict";
+
+const Dependency = require("../Dependency");
+const makeSerializable = require("../util/makeSerializable");
+
+/** @typedef {import("./ContainerEntryModule").ExposesList} ExposesList */
+
+class ContainerEntryDependency extends Dependency {
+	/**
+	 * @param {string} name entry name
+	 * @param {ExposesList} exposes list of exposed modules
+	 * @param {string} shareScope name of the share scope
+	 */
+	constructor(name, exposes, shareScope) {
+		super();
+		/** @type {string} */
+		this.name = name;
+		/** @type {ExposesList} */
+		this.exposes = exposes;
+		/** @type {string} */
+		this.shareScope = shareScope;
+	}
+
+	/**
+	 * @returns {string | null} an identifier to merge equal requests
+	 */
+	getResourceIdentifier() {
+		return `container-entry-${this.name}`;
+	}
+
+	get type() {
+		return "container entry";
+	}
+
+	get category() {
+		return "esm";
+	}
+}
+
+makeSerializable(
+	ContainerEntryDependency,
+	"webpack/lib/container/ContainerEntryDependency"
+);
+
+module.exports = ContainerEntryDependency;
diff --git a/lib/container/ContainerEntryModule.js b/lib/container/ContainerEntryModule.js
new file mode 100644
index 00000000000..2e44ffdc210
--- /dev/null
+++ b/lib/container/ContainerEntryModule.js
@@ -0,0 +1,303 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
+*/
+
+"use strict";
+
+const { OriginalSource, RawSource } = require("webpack-sources");
+const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
+const Module = require("../Module");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("../ModuleSourceTypeConstants");
+const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("../ModuleTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const Template = require("../Template");
+const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
+const makeSerializable = require("../util/makeSerializable");
+const ContainerExposedDependency = require("./ContainerExposedDependency");
+
+/** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("../Module").BuildCallback} BuildCallback */
+/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("../Module").LibIdent} LibIdent */
+/** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("../Module").Sources} Sources */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../RequestShortener")} RequestShortener */
+/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
+
+/**
+ * @typedef {object} ExposeOptions
+ * @property {string[]} import requests to exposed modules (last one is exported)
+ * @property {string} name custom chunk name for the exposed module
+ */
+
+/** @typedef {[string, ExposeOptions][]} ExposesList */
+
+class ContainerEntryModule extends Module {
+	/**
+	 * @param {string} name container entry name
+	 * @param {ExposesList} exposes list of exposed modules
+	 * @param {string} shareScope name of the share scope
+	 */
+	constructor(name, exposes, shareScope) {
+		super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
+		/** @type {string} */
+		this._name = name;
+		/** @type {ExposesList} */
+		this._exposes = exposes;
+		/** @type {string} */
+		this._shareScope = shareScope;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		return `container entry (${this._shareScope}) ${JSON.stringify(
+			this._exposes
+		)}`;
+	}
+
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		return "container entry";
+	}
+
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
+	libIdent(options) {
+		return `${this.layer ? `(${this.layer})/` : ""}webpack/container/entry/${
+			this._name
+		}`;
+	}
+
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		return callback(null, !this.buildMeta);
+	}
+
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
+		this.buildMeta = {};
+		this.buildInfo = {
+			strict: true,
+			topLevelDeclarations: new Set(["moduleMap", "get", "init"])
+		};
+		this.buildMeta.exportsType = "namespace";
+
+		this.clearDependenciesAndBlocks();
+
+		for (const [name, options] of this._exposes) {
+			const block = new AsyncDependenciesBlock(
+				{
+					name: options.name
+				},
+				{ name },
+				options.import[options.import.length - 1]
+			);
+			let idx = 0;
+			for (const request of options.import) {
+				const dep = new ContainerExposedDependency(name, request);
+				dep.loc = {
+					name,
+					index: idx++
+				};
+
+				block.addDependency(dep);
+			}
+			this.addBlock(block);
+		}
+		this.addDependency(new StaticExportsDependency(["get", "init"], false));
+
+		callback();
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration({ moduleGraph, chunkGraph, runtimeTemplate }) {
+		/** @type {Sources} */
+		const sources = new Map();
+		const runtimeRequirements = new Set([
+			RuntimeGlobals.definePropertyGetters,
+			RuntimeGlobals.hasOwnProperty,
+			RuntimeGlobals.exports
+		]);
+		/** @type {string[]} */
+		const getters = [];
+
+		for (const block of this.blocks) {
+			const { dependencies } = block;
+
+			const modules = dependencies.map((dependency) => {
+				const dep = /** @type {ContainerExposedDependency} */ (dependency);
+				return {
+					name: dep.exposedName,
+					module: moduleGraph.getModule(dep),
+					request: dep.userRequest
+				};
+			});
+
+			/** @type {string} */
+			let str;
+
+			if (modules.some((m) => !m.module)) {
+				str = runtimeTemplate.throwMissingModuleErrorBlock({
+					request: modules.map((m) => m.request).join(", ")
+				});
+			} else {
+				str = `return ${runtimeTemplate.blockPromise({
+					block,
+					message: "",
+					chunkGraph,
+					runtimeRequirements
+				})}.then(${runtimeTemplate.returningFunction(
+					runtimeTemplate.returningFunction(
+						`(${modules
+							.map(({ module, request }) =>
+								runtimeTemplate.moduleRaw({
+									module,
+									chunkGraph,
+									request,
+									weak: false,
+									runtimeRequirements
+								})
+							)
+							.join(", ")})`
+					)
+				)});`;
+			}
+
+			getters.push(
+				`${JSON.stringify(modules[0].name)}: ${runtimeTemplate.basicFunction(
+					"",
+					str
+				)}`
+			);
+		}
+
+		const source = Template.asString([
+			"var moduleMap = {",
+			Template.indent(getters.join(",\n")),
+			"};",
+			`var get = ${runtimeTemplate.basicFunction("module, getScope", [
+				`${RuntimeGlobals.currentRemoteGetScope} = getScope;`,
+				// reusing the getScope variable to avoid creating a new var (and module is also used later)
+				"getScope = (",
+				Template.indent([
+					`${RuntimeGlobals.hasOwnProperty}(moduleMap, module)`,
+					Template.indent([
+						"? moduleMap[module]()",
+						`: Promise.resolve().then(${runtimeTemplate.basicFunction(
+							"",
+							"throw new Error('Module \"' + module + '\" does not exist in container.');"
+						)})`
+					])
+				]),
+				");",
+				`${RuntimeGlobals.currentRemoteGetScope} = undefined;`,
+				"return getScope;"
+			])};`,
+			`var init = ${runtimeTemplate.basicFunction("shareScope, initScope", [
+				`if (!${RuntimeGlobals.shareScopeMap}) return;`,
+				`var name = ${JSON.stringify(this._shareScope)}`,
+				`var oldScope = ${RuntimeGlobals.shareScopeMap}[name];`,
+				'if(oldScope && oldScope !== shareScope) throw new Error("Container initialization failed as it has already been initialized with a different share scope");',
+				`${RuntimeGlobals.shareScopeMap}[name] = shareScope;`,
+				`return ${RuntimeGlobals.initializeSharing}(name, initScope);`
+			])};`,
+			"",
+			"// This exports getters to disallow modifications",
+			`${RuntimeGlobals.definePropertyGetters}(exports, {`,
+			Template.indent([
+				`get: ${runtimeTemplate.returningFunction("get")},`,
+				`init: ${runtimeTemplate.returningFunction("init")}`
+			]),
+			"});"
+		]);
+
+		sources.set(
+			JAVASCRIPT_TYPE,
+			this.useSourceMap || this.useSimpleSourceMap
+				? new OriginalSource(source, "webpack/container-entry")
+				: new RawSource(source)
+		);
+
+		return {
+			sources,
+			runtimeRequirements
+		};
+	}
+
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		return 42;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this._name);
+		write(this._exposes);
+		write(this._shareScope);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {ContainerEntryModule} deserialized container entry module
+	 */
+	static deserialize(context) {
+		const { read } = context;
+		const obj = new ContainerEntryModule(read(), read(), read());
+		obj.deserialize(context);
+		return obj;
+	}
+}
+
+makeSerializable(
+	ContainerEntryModule,
+	"webpack/lib/container/ContainerEntryModule"
+);
+
+module.exports = ContainerEntryModule;
diff --git a/lib/container/ContainerEntryModuleFactory.js b/lib/container/ContainerEntryModuleFactory.js
new file mode 100644
index 00000000000..cff347bfd1d
--- /dev/null
+++ b/lib/container/ContainerEntryModuleFactory.js
@@ -0,0 +1,27 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
+*/
+
+"use strict";
+
+const ModuleFactory = require("../ModuleFactory");
+const ContainerEntryModule = require("./ContainerEntryModule");
+
+/** @typedef {import("../ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./ContainerEntryDependency")} ContainerEntryDependency */
+
+module.exports = class ContainerEntryModuleFactory extends ModuleFactory {
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
+	create({ dependencies: [dependency] }, callback) {
+		const dep = /** @type {ContainerEntryDependency} */ (dependency);
+		callback(null, {
+			module: new ContainerEntryModule(dep.name, dep.exposes, dep.shareScope)
+		});
+	}
+};
diff --git a/lib/container/ContainerExposedDependency.js b/lib/container/ContainerExposedDependency.js
new file mode 100644
index 00000000000..e43b63c86a6
--- /dev/null
+++ b/lib/container/ContainerExposedDependency.js
@@ -0,0 +1,62 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
+*/
+
+"use strict";
+
+const ModuleDependency = require("../dependencies/ModuleDependency");
+const makeSerializable = require("../util/makeSerializable");
+
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
+class ContainerExposedDependency extends ModuleDependency {
+	/**
+	 * @param {string} exposedName public name
+	 * @param {string} request request to module
+	 */
+	constructor(exposedName, request) {
+		super(request);
+		/** @type {string} */
+		this.exposedName = exposedName;
+	}
+
+	get type() {
+		return "container exposed";
+	}
+
+	get category() {
+		return "esm";
+	}
+
+	/**
+	 * @returns {string | null} an identifier to merge equal requests
+	 */
+	getResourceIdentifier() {
+		return `exposed dependency ${this.exposedName}=${this.request}`;
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		context.write(this.exposedName);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 */
+	deserialize(context) {
+		this.exposedName = context.read();
+		super.deserialize(context);
+	}
+}
+
+makeSerializable(
+	ContainerExposedDependency,
+	"webpack/lib/container/ContainerExposedDependency"
+);
+
+module.exports = ContainerExposedDependency;
diff --git a/lib/container/ContainerPlugin.js b/lib/container/ContainerPlugin.js
new file mode 100644
index 00000000000..0ee7d6b6f3e
--- /dev/null
+++ b/lib/container/ContainerPlugin.js
@@ -0,0 +1,122 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
+*/
+
+"use strict";
+
+const memoize = require("../util/memoize");
+const ContainerEntryDependency = require("./ContainerEntryDependency");
+const ContainerEntryModuleFactory = require("./ContainerEntryModuleFactory");
+const ContainerExposedDependency = require("./ContainerExposedDependency");
+const { parseOptions } = require("./options");
+
+/** @typedef {import("../../declarations/plugins/container/ContainerPlugin").ContainerPluginOptions} ContainerPluginOptions */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("./ContainerEntryModule").ExposesList} ExposesList */
+
+const getModuleFederationPlugin = memoize(() =>
+	require("./ModuleFederationPlugin")
+);
+
+const PLUGIN_NAME = "ContainerPlugin";
+
+class ContainerPlugin {
+	/**
+	 * @param {ContainerPluginOptions} options options
+	 */
+	constructor(options) {
+		/** @type {ContainerPluginOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() => require("../../schemas/plugins/container/ContainerPlugin.json"),
+				this.options,
+				{
+					name: "Container Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../../schemas/plugins/container/ContainerPlugin.check")(
+						options
+					)
+			);
+		});
+
+		const library = this.options.library || {
+			type: "var",
+			name: this.options.name
+		};
+
+		if (!compiler.options.output.enabledLibraryTypes.includes(library.type)) {
+			compiler.options.output.enabledLibraryTypes.push(library.type);
+		}
+
+		const exposes = /** @type {ExposesList} */ (
+			parseOptions(
+				this.options.exposes,
+				(item) => ({
+					import: Array.isArray(item) ? item : [item],
+					name: undefined
+				}),
+				(item) => ({
+					import: Array.isArray(item.import) ? item.import : [item.import],
+					name: item.name || undefined
+				})
+			)
+		);
+
+		const shareScope = this.options.shareScope || "default";
+
+		compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
+			const hooks =
+				getModuleFederationPlugin().getCompilationHooks(compilation);
+			const dep = new ContainerEntryDependency(
+				this.options.name,
+				exposes,
+				shareScope
+			);
+			dep.loc = { name: this.options.name };
+			compilation.addEntry(
+				compilation.options.context,
+				dep,
+				{
+					name: this.options.name,
+					filename: this.options.filename,
+					runtime: this.options.runtime,
+					library
+				},
+				(error) => {
+					if (error) return callback(error);
+					hooks.addContainerEntryDependency.call(dep);
+					callback();
+				}
+			);
+		});
+
+		compiler.hooks.thisCompilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				compilation.dependencyFactories.set(
+					ContainerEntryDependency,
+					new ContainerEntryModuleFactory()
+				);
+
+				compilation.dependencyFactories.set(
+					ContainerExposedDependency,
+					normalModuleFactory
+				);
+			}
+		);
+	}
+}
+
+module.exports = ContainerPlugin;
diff --git a/lib/container/ContainerReferencePlugin.js b/lib/container/ContainerReferencePlugin.js
new file mode 100644
index 00000000000..45b4da8ec9d
--- /dev/null
+++ b/lib/container/ContainerReferencePlugin.js
@@ -0,0 +1,155 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
+*/
+
+"use strict";
+
+const ExternalModule = require("../ExternalModule");
+const ExternalsPlugin = require("../ExternalsPlugin");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const FallbackDependency = require("./FallbackDependency");
+const FallbackItemDependency = require("./FallbackItemDependency");
+const FallbackModuleFactory = require("./FallbackModuleFactory");
+const RemoteModule = require("./RemoteModule");
+const RemoteRuntimeModule = require("./RemoteRuntimeModule");
+const RemoteToExternalDependency = require("./RemoteToExternalDependency");
+const { parseOptions } = require("./options");
+
+/** @typedef {import("../../declarations/plugins/container/ContainerReferencePlugin").ContainerReferencePluginOptions} ContainerReferencePluginOptions */
+/** @typedef {import("../Compiler")} Compiler */
+
+const slashCode = "/".charCodeAt(0);
+const PLUGIN_NAME = "ContainerReferencePlugin";
+
+class ContainerReferencePlugin {
+	/**
+	 * @param {ContainerReferencePluginOptions} options options
+	 */
+	constructor(options) {
+		/** @typedef {ContainerReferencePluginOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() =>
+					require("../../schemas/plugins/container/ContainerReferencePlugin.json"),
+				this.options,
+				{
+					name: "Container Reference Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../../schemas/plugins/container/ContainerReferencePlugin.check")(
+						options
+					)
+			);
+		});
+
+		const { remoteType } = this.options;
+		const remotes = parseOptions(
+			this.options.remotes,
+			(item) => ({
+				external: Array.isArray(item) ? item : [item],
+				shareScope: this.options.shareScope || "default"
+			}),
+			(item) => ({
+				external: Array.isArray(item.external)
+					? item.external
+					: [item.external],
+				shareScope: item.shareScope || this.options.shareScope || "default"
+			})
+		);
+
+		/** @type {Record} */
+		const remoteExternals = {};
+		for (const [key, config] of remotes) {
+			let i = 0;
+			for (const external of config.external) {
+				if (external.startsWith("internal ")) continue;
+				remoteExternals[
+					`webpack/container/reference/${key}${i ? `/fallback-${i}` : ""}`
+				] = external;
+				i++;
+			}
+		}
+
+		new ExternalsPlugin(remoteType, remoteExternals).apply(compiler);
+
+		compiler.hooks.compilation.tap(
+			PLUGIN_NAME,
+			(compilation, { normalModuleFactory }) => {
+				compilation.dependencyFactories.set(
+					RemoteToExternalDependency,
+					normalModuleFactory
+				);
+
+				compilation.dependencyFactories.set(
+					FallbackItemDependency,
+					normalModuleFactory
+				);
+
+				compilation.dependencyFactories.set(
+					FallbackDependency,
+					new FallbackModuleFactory()
+				);
+
+				normalModuleFactory.hooks.factorize.tap(PLUGIN_NAME, (data) => {
+					if (!data.request.includes("!")) {
+						for (const [key, config] of remotes) {
+							if (
+								data.request.startsWith(`${key}`) &&
+								(data.request.length === key.length ||
+									data.request.charCodeAt(key.length) === slashCode)
+							) {
+								return new RemoteModule(
+									data.request,
+									config.external.map((external, i) =>
+										external.startsWith("internal ")
+											? external.slice(9)
+											: `webpack/container/reference/${key}${
+													i ? `/fallback-${i}` : ""
+												}`
+									),
+									`.${data.request.slice(key.length)}`,
+									config.shareScope
+								);
+							}
+						}
+					}
+				});
+
+				compilation.hooks.runtimeRequirementInTree
+					.for(RuntimeGlobals.ensureChunkHandlers)
+					.tap(PLUGIN_NAME, (chunk, set) => {
+						set.add(RuntimeGlobals.module);
+						set.add(RuntimeGlobals.moduleFactoriesAddOnly);
+						set.add(RuntimeGlobals.hasOwnProperty);
+						set.add(RuntimeGlobals.initializeSharing);
+						set.add(RuntimeGlobals.shareScopeMap);
+						compilation.addRuntimeModule(chunk, new RemoteRuntimeModule());
+					});
+
+				const { chunkCondition } =
+					ExternalModule.getCompilationHooks(compilation);
+
+				// External modules issued by remote modules should be placed in entry chunks
+				// to ensure they are loaded and initialize first
+				chunkCondition.tap(
+					PLUGIN_NAME,
+					(chunk, compilation) =>
+						compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0
+				);
+			}
+		);
+	}
+}
+
+module.exports = ContainerReferencePlugin;
diff --git a/lib/container/FallbackDependency.js b/lib/container/FallbackDependency.js
new file mode 100644
index 00000000000..112d59ee19a
--- /dev/null
+++ b/lib/container/FallbackDependency.js
@@ -0,0 +1,66 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const Dependency = require("../Dependency");
+const makeSerializable = require("../util/makeSerializable");
+
+/** @typedef {import("./RemoteModule").ExternalRequests} ExternalRequests */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+
+class FallbackDependency extends Dependency {
+	/**
+	 * @param {ExternalRequests} requests requests
+	 */
+	constructor(requests) {
+		super();
+		/** @type {ExternalRequests} */
+		this.requests = requests;
+	}
+
+	/**
+	 * @returns {string | null} an identifier to merge equal requests
+	 */
+	getResourceIdentifier() {
+		return `fallback ${this.requests.join(" ")}`;
+	}
+
+	get type() {
+		return "fallback";
+	}
+
+	get category() {
+		return "esm";
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this.requests);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {FallbackDependency} deserialize fallback dependency
+	 */
+	static deserialize(context) {
+		const { read } = context;
+		const obj = new FallbackDependency(read());
+		obj.deserialize(context);
+		return obj;
+	}
+}
+
+makeSerializable(
+	FallbackDependency,
+	"webpack/lib/container/FallbackDependency"
+);
+
+module.exports = FallbackDependency;
diff --git a/lib/container/FallbackItemDependency.js b/lib/container/FallbackItemDependency.js
new file mode 100644
index 00000000000..5d74a30f015
--- /dev/null
+++ b/lib/container/FallbackItemDependency.js
@@ -0,0 +1,34 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const ModuleDependency = require("../dependencies/ModuleDependency");
+const makeSerializable = require("../util/makeSerializable");
+
+class FallbackItemDependency extends ModuleDependency {
+	/**
+	 * @param {string} request request
+	 */
+	constructor(request) {
+		/** @type {string} */
+		super(request);
+	}
+
+	get type() {
+		return "fallback item";
+	}
+
+	get category() {
+		return "esm";
+	}
+}
+
+makeSerializable(
+	FallbackItemDependency,
+	"webpack/lib/container/FallbackItemDependency"
+);
+
+module.exports = FallbackItemDependency;
diff --git a/lib/container/FallbackModule.js b/lib/container/FallbackModule.js
new file mode 100644
index 00000000000..a09b8d5343b
--- /dev/null
+++ b/lib/container/FallbackModule.js
@@ -0,0 +1,193 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const Module = require("../Module");
+const {
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("../ModuleSourceTypeConstants");
+const { WEBPACK_MODULE_TYPE_FALLBACK } = require("../ModuleTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const Template = require("../Template");
+const makeSerializable = require("../util/makeSerializable");
+const FallbackItemDependency = require("./FallbackItemDependency");
+
+/** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("../Chunk")} Chunk */
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("../Module").BuildCallback} BuildCallback */
+/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("../Module").LibIdent} LibIdent */
+/** @typedef {import("../Module").NameForCondition} NameForCondition */
+/** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("../Module").Sources} Sources */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../RequestShortener")} RequestShortener */
+/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("./RemoteModule").ExternalRequests} ExternalRequests */
+
+const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
+
+class FallbackModule extends Module {
+	/**
+	 * @param {ExternalRequests} requests list of requests to choose one
+	 */
+	constructor(requests) {
+		super(WEBPACK_MODULE_TYPE_FALLBACK);
+		/** @type {ExternalRequests} */
+		this.requests = requests;
+		/** @type {string} */
+		this._identifier = `fallback ${this.requests.join(" ")}`;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		return this._identifier;
+	}
+
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		return this._identifier;
+	}
+
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
+	libIdent(options) {
+		return `${this.layer ? `(${this.layer})/` : ""}webpack/container/fallback/${
+			this.requests[0]
+		}/and ${this.requests.length - 1} more`;
+	}
+
+	/**
+	 * @param {Chunk} chunk the chunk which condition should be checked
+	 * @param {Compilation} compilation the compilation
+	 * @returns {boolean} true if the module can be placed in the chunk
+	 */
+	chunkCondition(chunk, { chunkGraph }) {
+		return chunkGraph.getNumberOfEntryModules(chunk) > 0;
+	}
+
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		callback(null, !this.buildInfo);
+	}
+
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
+		this.buildMeta = {};
+		this.buildInfo = {
+			strict: true
+		};
+
+		this.clearDependenciesAndBlocks();
+		for (const request of this.requests) {
+			this.addDependency(new FallbackItemDependency(request));
+		}
+
+		callback();
+	}
+
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		return this.requests.length * 5 + 42;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration({ runtimeTemplate, moduleGraph, chunkGraph }) {
+		const ids = this.dependencies.map((dep) =>
+			chunkGraph.getModuleId(/** @type {Module} */ (moduleGraph.getModule(dep)))
+		);
+		const code = Template.asString([
+			`var ids = ${JSON.stringify(ids)};`,
+			"var error, result, i = 0;",
+			`var loop = ${runtimeTemplate.basicFunction("next", [
+				"while(i < ids.length) {",
+				Template.indent([
+					`try { next = ${RuntimeGlobals.require}(ids[i++]); } catch(e) { return handleError(e); }`,
+					"if(next) return next.then ? next.then(handleResult, handleError) : handleResult(next);"
+				]),
+				"}",
+				"if(error) throw error;"
+			])}`,
+			`var handleResult = ${runtimeTemplate.basicFunction("result", [
+				"if(result) return result;",
+				"return loop();"
+			])};`,
+			`var handleError = ${runtimeTemplate.basicFunction("e", [
+				"error = e;",
+				"return loop();"
+			])};`,
+			"module.exports = loop();"
+		]);
+		/** @type {Sources} */
+		const sources = new Map();
+		sources.set(JAVASCRIPT_TYPE, new RawSource(code));
+		return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS };
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this.requests);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {FallbackModule} deserialized fallback module
+	 */
+	static deserialize(context) {
+		const { read } = context;
+		const obj = new FallbackModule(read());
+		obj.deserialize(context);
+		return obj;
+	}
+}
+
+makeSerializable(FallbackModule, "webpack/lib/container/FallbackModule");
+
+module.exports = FallbackModule;
diff --git a/lib/container/FallbackModuleFactory.js b/lib/container/FallbackModuleFactory.js
new file mode 100644
index 00000000000..9ae5d427f32
--- /dev/null
+++ b/lib/container/FallbackModuleFactory.js
@@ -0,0 +1,27 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra, Zackary Jackson @ScriptedAlchemy, Marais Rossouw @maraisr
+*/
+
+"use strict";
+
+const ModuleFactory = require("../ModuleFactory");
+const FallbackModule = require("./FallbackModule");
+
+/** @typedef {import("../ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
+/** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
+/** @typedef {import("./FallbackDependency")} FallbackDependency */
+
+module.exports = class FallbackModuleFactory extends ModuleFactory {
+	/**
+	 * @param {ModuleFactoryCreateData} data data object
+	 * @param {ModuleFactoryCallback} callback callback
+	 * @returns {void}
+	 */
+	create({ dependencies: [dependency] }, callback) {
+		const dep = /** @type {FallbackDependency} */ (dependency);
+		callback(null, {
+			module: new FallbackModule(dep.requests)
+		});
+	}
+};
diff --git a/lib/container/HoistContainerReferencesPlugin.js b/lib/container/HoistContainerReferencesPlugin.js
new file mode 100644
index 00000000000..4452f860420
--- /dev/null
+++ b/lib/container/HoistContainerReferencesPlugin.js
@@ -0,0 +1,256 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Zackary Jackson @ScriptedAlchemy
+*/
+
+"use strict";
+
+const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
+const ExternalModule = require("../ExternalModule");
+const { STAGE_ADVANCED } = require("../OptimizationStages");
+const memoize = require("../util/memoize");
+const { forEachRuntime } = require("../util/runtime");
+
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../Dependency")} Dependency */
+/** @typedef {import("../Module")} Module */
+
+const getModuleFederationPlugin = memoize(() =>
+	require("./ModuleFederationPlugin")
+);
+
+const PLUGIN_NAME = "HoistContainerReferences";
+
+/**
+ * This class is used to hoist container references in the code.
+ */
+class HoistContainerReferences {
+	/**
+	 * Apply the plugin to the compiler.
+	 * @param {Compiler} compiler The webpack compiler instance.
+	 */
+	apply(compiler) {
+		compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
+			const hooks =
+				getModuleFederationPlugin().getCompilationHooks(compilation);
+			/** @type {Set} */
+			const depsToTrace = new Set();
+			/** @type {Set} */
+			const entryExternalsToHoist = new Set();
+			hooks.addContainerEntryDependency.tap(PLUGIN_NAME, (dep) => {
+				depsToTrace.add(dep);
+			});
+			hooks.addFederationRuntimeDependency.tap(PLUGIN_NAME, (dep) => {
+				depsToTrace.add(dep);
+			});
+
+			compilation.hooks.addEntry.tap(PLUGIN_NAME, (entryDep) => {
+				if (entryDep.type === "entry") {
+					entryExternalsToHoist.add(entryDep);
+				}
+			});
+
+			// Hook into the optimizeChunks phase
+			compilation.hooks.optimizeChunks.tap(
+				{
+					name: PLUGIN_NAME,
+					// advanced stage is where SplitChunksPlugin runs.
+					stage: STAGE_ADVANCED + 1
+				},
+				(_chunks) => {
+					this.hoistModulesInChunks(
+						compilation,
+						depsToTrace,
+						entryExternalsToHoist
+					);
+				}
+			);
+		});
+	}
+
+	/**
+	 * Hoist modules in chunks.
+	 * @param {Compilation} compilation The webpack compilation instance.
+	 * @param {Set} depsToTrace Set of container entry dependencies.
+	 * @param {Set} entryExternalsToHoist Set of container entry dependencies to hoist.
+	 */
+	hoistModulesInChunks(compilation, depsToTrace, entryExternalsToHoist) {
+		const { chunkGraph, moduleGraph } = compilation;
+
+		// loop over entry points
+		for (const dep of entryExternalsToHoist) {
+			const entryModule = moduleGraph.getModule(dep);
+			if (!entryModule) continue;
+			// get all the external module types and hoist them to the runtime chunk, this will get RemoteModule externals
+			const allReferencedModules = getAllReferencedModules(
+				compilation,
+				entryModule,
+				"external",
+				false
+			);
+
+			const containerRuntimes = chunkGraph.getModuleRuntimes(entryModule);
+			/** @type {Set} */
+			const runtimes = new Set();
+
+			for (const runtimeSpec of containerRuntimes) {
+				forEachRuntime(runtimeSpec, (runtimeKey) => {
+					if (runtimeKey) {
+						runtimes.add(runtimeKey);
+					}
+				});
+			}
+
+			for (const runtime of runtimes) {
+				const runtimeChunk = compilation.namedChunks.get(runtime);
+				if (!runtimeChunk) continue;
+
+				for (const module of allReferencedModules) {
+					if (!chunkGraph.isModuleInChunk(module, runtimeChunk)) {
+						chunkGraph.connectChunkAndModule(runtimeChunk, module);
+					}
+				}
+			}
+			this.cleanUpChunks(compilation, allReferencedModules);
+		}
+
+		// handle container entry specifically
+		for (const dep of depsToTrace) {
+			const containerEntryModule = moduleGraph.getModule(dep);
+			if (!containerEntryModule) continue;
+			const allReferencedModules = getAllReferencedModules(
+				compilation,
+				containerEntryModule,
+				"initial",
+				false
+			);
+
+			const allRemoteReferences = getAllReferencedModules(
+				compilation,
+				containerEntryModule,
+				"external",
+				false
+			);
+
+			for (const remote of allRemoteReferences) {
+				allReferencedModules.add(remote);
+			}
+
+			const containerRuntimes =
+				chunkGraph.getModuleRuntimes(containerEntryModule);
+			/** @type {Set} */
+			const runtimes = new Set();
+
+			for (const runtimeSpec of containerRuntimes) {
+				forEachRuntime(runtimeSpec, (runtimeKey) => {
+					if (runtimeKey) {
+						runtimes.add(runtimeKey);
+					}
+				});
+			}
+
+			for (const runtime of runtimes) {
+				const runtimeChunk = compilation.namedChunks.get(runtime);
+				if (!runtimeChunk) continue;
+
+				for (const module of allReferencedModules) {
+					if (!chunkGraph.isModuleInChunk(module, runtimeChunk)) {
+						chunkGraph.connectChunkAndModule(runtimeChunk, module);
+					}
+				}
+			}
+			this.cleanUpChunks(compilation, allReferencedModules);
+		}
+	}
+
+	/**
+	 * Clean up chunks by disconnecting unused modules.
+	 * @param {Compilation} compilation The webpack compilation instance.
+	 * @param {Set} modules Set of modules to clean up.
+	 */
+	cleanUpChunks(compilation, modules) {
+		const { chunkGraph } = compilation;
+		for (const module of modules) {
+			for (const chunk of chunkGraph.getModuleChunks(module)) {
+				if (!chunk.hasRuntime()) {
+					chunkGraph.disconnectChunkAndModule(chunk, module);
+					if (
+						chunkGraph.getNumberOfChunkModules(chunk) === 0 &&
+						chunkGraph.getNumberOfEntryModules(chunk) === 0
+					) {
+						chunkGraph.disconnectChunk(chunk);
+						compilation.chunks.delete(chunk);
+						if (chunk.name) {
+							compilation.namedChunks.delete(chunk.name);
+						}
+					}
+				}
+			}
+		}
+		modules.clear();
+	}
+}
+
+/**
+ * Helper method to collect all referenced modules recursively.
+ * @param {Compilation} compilation The webpack compilation instance.
+ * @param {Module} module The module to start collecting from.
+ * @param {string} type The type of modules to collect ("initial", "external", or "all").
+ * @param {boolean} includeInitial Should include the referenced module passed
+ * @returns {Set} Set of collected modules.
+ */
+function getAllReferencedModules(compilation, module, type, includeInitial) {
+	const collectedModules = new Set(includeInitial ? [module] : []);
+	/** @type {WeakSet} */
+	const visitedModules = new WeakSet([module]);
+	/** @type {Module[]} */
+	const stack = [module];
+
+	while (stack.length > 0) {
+		const currentModule = stack.pop();
+		if (!currentModule) continue;
+
+		const outgoingConnections =
+			compilation.moduleGraph.getOutgoingConnections(currentModule);
+		if (outgoingConnections) {
+			for (const connection of outgoingConnections) {
+				const connectedModule = connection.module;
+
+				// Skip if module has already been visited
+				if (!connectedModule || visitedModules.has(connectedModule)) {
+					continue;
+				}
+
+				// Handle 'initial' type (skipping async blocks)
+				if (type === "initial") {
+					const parentBlock = compilation.moduleGraph.getParentBlock(
+						/** @type {Dependency} */
+						(connection.dependency)
+					);
+					if (parentBlock instanceof AsyncDependenciesBlock) {
+						continue;
+					}
+				}
+
+				// Handle 'external' type (collecting only external modules)
+				if (type === "external") {
+					if (connection.module instanceof ExternalModule) {
+						collectedModules.add(connectedModule);
+					}
+				} else {
+					// Handle 'all' or unspecified types
+					collectedModules.add(connectedModule);
+				}
+
+				// Add connected module to the stack and mark it as visited
+				visitedModules.add(connectedModule);
+				stack.push(connectedModule);
+			}
+		}
+	}
+
+	return collectedModules;
+}
+
+module.exports = HoistContainerReferences;
diff --git a/lib/container/ModuleFederationPlugin.js b/lib/container/ModuleFederationPlugin.js
new file mode 100644
index 00000000000..00b9f73ad32
--- /dev/null
+++ b/lib/container/ModuleFederationPlugin.js
@@ -0,0 +1,135 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
+*/
+
+"use strict";
+
+const { SyncHook } = require("tapable");
+const isValidExternalsType = require("../../schemas/plugins/container/ExternalsType.check");
+const Compilation = require("../Compilation");
+const SharePlugin = require("../sharing/SharePlugin");
+const ContainerPlugin = require("./ContainerPlugin");
+const ContainerReferencePlugin = require("./ContainerReferencePlugin");
+const HoistContainerReferences = require("./HoistContainerReferencesPlugin");
+
+/** @typedef {import("../../declarations/plugins/container/ModuleFederationPlugin").ExternalsType} ExternalsType */
+/** @typedef {import("../../declarations/plugins/container/ModuleFederationPlugin").ModuleFederationPluginOptions} ModuleFederationPluginOptions */
+/** @typedef {import("../Compiler")} Compiler */
+/** @typedef {import("../Dependency")} Dependency */
+
+/**
+ * @typedef {object} CompilationHooks
+ * @property {SyncHook} addContainerEntryDependency
+ * @property {SyncHook} addFederationRuntimeDependency
+ */
+
+/** @type {WeakMap} */
+const compilationHooksMap = new WeakMap();
+const PLUGIN_NAME = "ModuleFederationPlugin";
+
+class ModuleFederationPlugin {
+	/**
+	 * @param {ModuleFederationPluginOptions} options options
+	 */
+	constructor(options) {
+		/** @type {ModuleFederationPluginOptions} */
+		this.options = options;
+	}
+
+	/**
+	 * Get the compilation hooks associated with this plugin.
+	 * @param {Compilation} compilation The compilation instance.
+	 * @returns {CompilationHooks} The hooks for the compilation.
+	 */
+	static getCompilationHooks(compilation) {
+		if (!(compilation instanceof Compilation)) {
+			throw new TypeError(
+				"The 'compilation' argument must be an instance of Compilation"
+			);
+		}
+		let hooks = compilationHooksMap.get(compilation);
+		if (!hooks) {
+			hooks = {
+				addContainerEntryDependency: new SyncHook(["dependency"]),
+				addFederationRuntimeDependency: new SyncHook(["dependency"])
+			};
+			compilationHooksMap.set(compilation, hooks);
+		}
+		return hooks;
+	}
+
+	/**
+	 * Apply the plugin
+	 * @param {Compiler} compiler the compiler instance
+	 * @returns {void}
+	 */
+	apply(compiler) {
+		compiler.hooks.validate.tap(PLUGIN_NAME, () => {
+			compiler.validate(
+				() =>
+					require("../../schemas/plugins/container/ModuleFederationPlugin.json"),
+				this.options,
+				{
+					name: "Module Federation Plugin",
+					baseDataPath: "options"
+				},
+				(options) =>
+					require("../../schemas/plugins/container/ModuleFederationPlugin.check")(
+						options
+					)
+			);
+		});
+		const { options } = this;
+		const library = options.library || { type: "var", name: options.name };
+		const remoteType =
+			options.remoteType ||
+			(options.library && isValidExternalsType(options.library.type)
+				? /** @type {ExternalsType} */ (options.library.type)
+				: "script");
+		if (
+			library &&
+			!compiler.options.output.enabledLibraryTypes.includes(library.type)
+		) {
+			compiler.options.output.enabledLibraryTypes.push(library.type);
+		}
+		compiler.hooks.afterPlugins.tap(PLUGIN_NAME, () => {
+			if (
+				options.exposes &&
+				(Array.isArray(options.exposes)
+					? options.exposes.length > 0
+					: Object.keys(options.exposes).length > 0)
+			) {
+				new ContainerPlugin({
+					name: /** @type {string} */ (options.name),
+					library,
+					filename: options.filename,
+					runtime: options.runtime,
+					shareScope: options.shareScope,
+					exposes: options.exposes
+				}).apply(compiler);
+			}
+			if (
+				options.remotes &&
+				(Array.isArray(options.remotes)
+					? options.remotes.length > 0
+					: Object.keys(options.remotes).length > 0)
+			) {
+				new ContainerReferencePlugin({
+					remoteType,
+					shareScope: options.shareScope,
+					remotes: options.remotes
+				}).apply(compiler);
+			}
+			if (options.shared) {
+				new SharePlugin({
+					shared: options.shared,
+					shareScope: options.shareScope
+				}).apply(compiler);
+			}
+			new HoistContainerReferences().apply(compiler);
+		});
+	}
+}
+
+module.exports = ModuleFederationPlugin;
diff --git a/lib/container/RemoteModule.js b/lib/container/RemoteModule.js
new file mode 100644
index 00000000000..fa77c287fc4
--- /dev/null
+++ b/lib/container/RemoteModule.js
@@ -0,0 +1,225 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
+*/
+
+"use strict";
+
+const { RawSource } = require("webpack-sources");
+const Module = require("../Module");
+const {
+	JAVASCRIPT_TYPES,
+	REMOTE_AND_SHARE_INIT_TYPES
+} = require("../ModuleSourceTypeConstants");
+const { WEBPACK_MODULE_TYPE_REMOTE } = require("../ModuleTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const makeSerializable = require("../util/makeSerializable");
+const FallbackDependency = require("./FallbackDependency");
+const RemoteToExternalDependency = require("./RemoteToExternalDependency");
+
+/** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("../Module").BuildCallback} BuildCallback */
+/** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
+/** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
+/** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
+/** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
+/** @typedef {import("../Module").LibIdent} LibIdent */
+/** @typedef {import("../Module").NameForCondition} NameForCondition */
+/** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
+/** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
+/** @typedef {import("../Module").Sources} Sources */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../ModuleGraph")} ModuleGraph */
+/** @typedef {import("../Module").ExportsType} ExportsType */
+/** @typedef {import("../RequestShortener")} RequestShortener */
+/** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
+/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
+/** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
+/** @typedef {import("../Module").BasicSourceTypes} BasicSourceTypes */
+
+const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
+
+/** @typedef {string[]} ExternalRequests */
+
+class RemoteModule extends Module {
+	/**
+	 * @param {string} request request string
+	 * @param {ExternalRequests} externalRequests list of external requests to containers
+	 * @param {string} internalRequest name of exposed module in container
+	 * @param {string} shareScope the used share scope name
+	 */
+	constructor(request, externalRequests, internalRequest, shareScope) {
+		super(WEBPACK_MODULE_TYPE_REMOTE);
+		/** @type {string} */
+		this.request = request;
+		/** @type {ExternalRequests} */
+		this.externalRequests = externalRequests;
+		/** @type {string} */
+		this.internalRequest = internalRequest;
+		/** @type {string} */
+		this.shareScope = shareScope;
+		/** @type {string} */
+		this._identifier = `remote (${shareScope}) ${this.externalRequests.join(
+			" "
+		)} ${this.internalRequest}`;
+	}
+
+	/**
+	 * @returns {string} a unique identifier of the module
+	 */
+	identifier() {
+		return this._identifier;
+	}
+
+	/**
+	 * @param {RequestShortener} requestShortener the request shortener
+	 * @returns {string} a user readable identifier of the module
+	 */
+	readableIdentifier(requestShortener) {
+		return `remote ${this.request}`;
+	}
+
+	/**
+	 * @param {LibIdentOptions} options options
+	 * @returns {LibIdent | null} an identifier for library inclusion
+	 */
+	libIdent(options) {
+		return `${this.layer ? `(${this.layer})/` : ""}webpack/container/remote/${
+			this.request
+		}`;
+	}
+
+	/**
+	 * @param {NeedBuildContext} context context info
+	 * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
+	 * @returns {void}
+	 */
+	needBuild(context, callback) {
+		callback(null, !this.buildInfo);
+	}
+
+	/**
+	 * @param {WebpackOptions} options webpack options
+	 * @param {Compilation} compilation the compilation
+	 * @param {ResolverWithOptions} resolver the resolver
+	 * @param {InputFileSystem} fs the file system
+	 * @param {BuildCallback} callback callback function
+	 * @returns {void}
+	 */
+	build(options, compilation, resolver, fs, callback) {
+		this.buildMeta = {};
+		this.buildInfo = {
+			strict: true
+		};
+
+		this.clearDependenciesAndBlocks();
+		if (this.externalRequests.length === 1) {
+			this.addDependency(
+				new RemoteToExternalDependency(this.externalRequests[0])
+			);
+		} else {
+			this.addDependency(new FallbackDependency(this.externalRequests));
+		}
+
+		callback();
+	}
+
+	/**
+	 * @param {string=} type the source type for which the size should be estimated
+	 * @returns {number} the estimated size of the module (must be non-zero)
+	 */
+	size(type) {
+		return 6;
+	}
+
+	/**
+	 * @returns {SourceTypes} types available (do not mutate)
+	 */
+	getSourceTypes() {
+		return REMOTE_AND_SHARE_INIT_TYPES;
+	}
+
+	/**
+	 * Basic source types are high-level categories like javascript, css, webassembly, etc.
+	 * We only have built-in knowledge about the javascript basic type here; other basic types may be
+	 * added or changed over time by generators and do not need to be handled or detected here.
+	 *
+	 * Some modules, e.g. RemoteModule, may return non-basic source types like "remote" and "share-init"
+	 * from getSourceTypes(), but their generated output is still JavaScript, i.e. their basic type is JS.
+	 * @returns {BasicSourceTypes} types available (do not mutate)
+	 */
+	getSourceBasicTypes() {
+		return JAVASCRIPT_TYPES;
+	}
+
+	/**
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 * @param {boolean | undefined} strict the importing module is strict
+	 * @returns {ExportsType} export type
+	 * "namespace": Exports is already a namespace object. namespace = exports.
+	 * "dynamic": Check at runtime if __esModule is set. When set: namespace = { ...exports, default: exports }. When not set: namespace = { default: exports }.
+	 * "default-only": Provide a namespace object with only default export. namespace = { default: exports }
+	 * "default-with-named": Provide a namespace object with named and default export. namespace = { ...exports, default: exports }
+	 */
+	getExportsType(moduleGraph, strict) {
+		return "dynamic";
+	}
+
+	/**
+	 * @returns {NameForCondition | null} absolute path which should be used for condition matching (usually the resource path)
+	 */
+	nameForCondition() {
+		return this.request;
+	}
+
+	/**
+	 * @param {CodeGenerationContext} context context for code generation
+	 * @returns {CodeGenerationResult} result
+	 */
+	codeGeneration({ moduleGraph, chunkGraph }) {
+		const module = moduleGraph.getModule(this.dependencies[0]);
+		const id = module && chunkGraph.getModuleId(module);
+		/** @type {Sources} */
+		const sources = new Map();
+		sources.set("remote", new RawSource(""));
+		/** @type {CodeGenerationResultData} */
+		const data = new Map();
+		data.set("share-init", [
+			{
+				shareScope: this.shareScope,
+				initStage: 20,
+				init: id === undefined ? "" : `initExternal(${JSON.stringify(id)});`
+			}
+		]);
+		return { sources, data, runtimeRequirements: RUNTIME_REQUIREMENTS };
+	}
+
+	/**
+	 * @param {ObjectSerializerContext} context context
+	 */
+	serialize(context) {
+		const { write } = context;
+		write(this.request);
+		write(this.externalRequests);
+		write(this.internalRequest);
+		write(this.shareScope);
+		super.serialize(context);
+	}
+
+	/**
+	 * @param {ObjectDeserializerContext} context context
+	 * @returns {RemoteModule} deserialized module
+	 */
+	static deserialize(context) {
+		const { read } = context;
+		const obj = new RemoteModule(read(), read(), read(), read());
+		obj.deserialize(context);
+		return obj;
+	}
+}
+
+makeSerializable(RemoteModule, "webpack/lib/container/RemoteModule");
+
+module.exports = RemoteModule;
diff --git a/lib/container/RemoteRuntimeModule.js b/lib/container/RemoteRuntimeModule.js
new file mode 100644
index 00000000000..c44e8ccf71a
--- /dev/null
+++ b/lib/container/RemoteRuntimeModule.js
@@ -0,0 +1,144 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const RuntimeGlobals = require("../RuntimeGlobals");
+const RuntimeModule = require("../RuntimeModule");
+const Template = require("../Template");
+
+/** @typedef {import("../Chunk")} Chunk */
+/** @typedef {import("../Chunk").ChunkId} ChunkId */
+/** @typedef {import("../ChunkGraph")} ChunkGraph */
+/** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("./RemoteModule")} RemoteModule */
+
+class RemoteRuntimeModule extends RuntimeModule {
+	constructor() {
+		super("remotes loading");
+	}
+
+	/**
+	 * @returns {string | null} runtime code
+	 */
+	generate() {
+		const compilation = /** @type {Compilation} */ (this.compilation);
+		const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
+		const { runtimeTemplate, moduleGraph } = compilation;
+		/** @type {Record} */
+		const chunkToRemotesMapping = {};
+		/** @type {Record} */
+		const idToExternalAndNameMapping = {};
+		for (const chunk of /** @type {Chunk} */ (
+			this.chunk
+		).getAllReferencedChunks()) {
+			const modules = chunkGraph.getChunkModulesIterableBySourceType(
+				chunk,
+				"remote"
+			);
+			if (!modules) continue;
+			/** @type {ModuleId[]} */
+			const remotes = (chunkToRemotesMapping[
+				/** @type {ChunkId} */
+				(chunk.id)
+			] = []);
+			for (const m of modules) {
+				const module = /** @type {RemoteModule} */ (m);
+				const name = module.internalRequest;
+				const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
+				const shareScope = module.shareScope;
+				const dep = module.dependencies[0];
+				const externalModule = moduleGraph.getModule(dep);
+				const externalModuleId =
+					/** @type {ModuleId} */
+					(externalModule && chunkGraph.getModuleId(externalModule));
+				remotes.push(id);
+				idToExternalAndNameMapping[id] = [shareScope, name, externalModuleId];
+			}
+		}
+		return Template.asString([
+			`var chunkMapping = ${JSON.stringify(
+				chunkToRemotesMapping,
+				null,
+				"\t"
+			)};`,
+			`var idToExternalAndNameMapping = ${JSON.stringify(
+				idToExternalAndNameMapping,
+				null,
+				"\t"
+			)};`,
+			`${
+				RuntimeGlobals.ensureChunkHandlers
+			}.remotes = ${runtimeTemplate.basicFunction("chunkId, promises", [
+				`if(${RuntimeGlobals.hasOwnProperty}(chunkMapping, chunkId)) {`,
+				Template.indent([
+					`chunkMapping[chunkId].forEach(${runtimeTemplate.basicFunction("id", [
+						`var getScope = ${RuntimeGlobals.currentRemoteGetScope};`,
+						"if(!getScope) getScope = [];",
+						"var data = idToExternalAndNameMapping[id];",
+						"if(getScope.indexOf(data) >= 0) return;",
+						"getScope.push(data);",
+						"if(data.p) return promises.push(data.p);",
+						`var onError = ${runtimeTemplate.basicFunction("error", [
+							'if(!error) error = new Error("Container missing");',
+							'if(typeof error.message === "string")',
+							Template.indent(
+								"error.message += '\\nwhile loading \"' + data[1] + '\" from ' + data[2];"
+							),
+							`${
+								RuntimeGlobals.moduleFactories
+							}[id] = ${runtimeTemplate.basicFunction("", ["throw error;"])}`,
+							"data.p = 0;"
+						])};`,
+						`var handleFunction = ${runtimeTemplate.basicFunction(
+							"fn, arg1, arg2, d, next, first",
+							[
+								"try {",
+								Template.indent([
+									"var promise = fn(arg1, arg2);",
+									"if(promise && promise.then) {",
+									Template.indent([
+										`var p = promise.then(${runtimeTemplate.returningFunction(
+											"next(result, d)",
+											"result"
+										)}, onError);`,
+										"if(first) promises.push(data.p = p); else return p;"
+									]),
+									"} else {",
+									Template.indent(["return next(promise, d, first);"]),
+									"}"
+								]),
+								"} catch(error) {",
+								Template.indent(["onError(error);"]),
+								"}"
+							]
+						)}`,
+						`var onExternal = ${runtimeTemplate.returningFunction(
+							`external ? handleFunction(${RuntimeGlobals.initializeSharing}, data[0], 0, external, onInitialized, first) : onError()`,
+							"external, _, first"
+						)};`,
+						`var onInitialized = ${runtimeTemplate.returningFunction(
+							"handleFunction(external.get, data[1], getScope, 0, onFactory, first)",
+							"_, external, first"
+						)};`,
+						`var onFactory = ${runtimeTemplate.basicFunction("factory", [
+							"data.p = 1;",
+							`${
+								RuntimeGlobals.moduleFactories
+							}[id] = ${runtimeTemplate.basicFunction("module", [
+								"module.exports = factory();"
+							])}`
+						])};`,
+						`handleFunction(${RuntimeGlobals.require}, data[2], 0, 0, onExternal, 1);`
+					])});`
+				]),
+				"}"
+			])}`
+		]);
+	}
+}
+
+module.exports = RemoteRuntimeModule;
diff --git a/lib/container/RemoteToExternalDependency.js b/lib/container/RemoteToExternalDependency.js
new file mode 100644
index 00000000000..df7fd1f8158
--- /dev/null
+++ b/lib/container/RemoteToExternalDependency.js
@@ -0,0 +1,33 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const ModuleDependency = require("../dependencies/ModuleDependency");
+const makeSerializable = require("../util/makeSerializable");
+
+class RemoteToExternalDependency extends ModuleDependency {
+	/**
+	 * @param {string} request request
+	 */
+	constructor(request) {
+		super(request);
+	}
+
+	get type() {
+		return "remote to external";
+	}
+
+	get category() {
+		return "esm";
+	}
+}
+
+makeSerializable(
+	RemoteToExternalDependency,
+	"webpack/lib/container/RemoteToExternalDependency"
+);
+
+module.exports = RemoteToExternalDependency;
diff --git a/lib/container/options.js b/lib/container/options.js
new file mode 100644
index 00000000000..953aea64c76
--- /dev/null
+++ b/lib/container/options.js
@@ -0,0 +1,105 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+/**
+ * @template T
+ * @typedef {Record} Item
+ */
+
+/**
+ * @template T
+ * @typedef {(string | Item)[] | Item} ContainerOptionsFormat
+ */
+
+/**
+ * @template T
+ * @template N
+ * @param {ContainerOptionsFormat} options options passed by the user
+ * @param {(item: string | string[], itemOrKey: string) => N} normalizeSimple normalize a simple item
+ * @param {(value: T, key: string) => N} normalizeOptions normalize a complex item
+ * @param {(item: string, normalized: N) => void} fn processing function
+ * @returns {void}
+ */
+const process = (options, normalizeSimple, normalizeOptions, fn) => {
+	/**
+	 * @param {(string | Item)[]} items items
+	 */
+	const array = (items) => {
+		for (const item of items) {
+			if (typeof item === "string") {
+				fn(item, normalizeSimple(item, item));
+			} else if (item && typeof item === "object") {
+				object(item);
+			} else {
+				throw new Error("Unexpected options format");
+			}
+		}
+	};
+	/**
+	 * @param {Item} obj an object
+	 */
+	const object = (obj) => {
+		for (const [key, value] of Object.entries(obj)) {
+			if (typeof value === "string" || Array.isArray(value)) {
+				fn(key, normalizeSimple(value, key));
+			} else {
+				fn(key, normalizeOptions(value, key));
+			}
+		}
+	};
+	if (!options) {
+		// Do nothing
+	} else if (Array.isArray(options)) {
+		array(options);
+	} else if (typeof options === "object") {
+		object(options);
+	} else {
+		throw new Error("Unexpected options format");
+	}
+};
+
+/**
+ * @template T
+ * @template R
+ * @param {ContainerOptionsFormat} options options passed by the user
+ * @param {(item: string | string[], itemOrKey: string) => R} normalizeSimple normalize a simple item
+ * @param {(value: T, key: string) => R} normalizeOptions normalize a complex item
+ * @returns {[string, R][]} parsed options
+ */
+const parseOptions = (options, normalizeSimple, normalizeOptions) => {
+	/** @type {[string, R][]} */
+	const items = [];
+	process(options, normalizeSimple, normalizeOptions, (key, value) => {
+		items.push([key, value]);
+	});
+	return items;
+};
+
+/**
+ * @template T
+ * @param {string} scope scope name
+ * @param {ContainerOptionsFormat} options options passed by the user
+ * @returns {Record} options to spread or pass
+ */
+const scope = (scope, options) => {
+	/** @type {Record} */
+	const obj = {};
+	process(
+		options,
+		(item) => /** @type {string | string[] | T} */ (item),
+		(item) => /** @type {string | string[] | T} */ (item),
+		(key, value) => {
+			obj[
+				key.startsWith("./") ? `${scope}${key.slice(1)}` : `${scope}/${key}`
+			] = value;
+		}
+	);
+	return obj;
+};
+
+module.exports.parseOptions = parseOptions;
+module.exports.scope = scope;
diff --git a/lib/css/CssGenerator.js b/lib/css/CssGenerator.js
new file mode 100644
index 00000000000..2c1105bd3f0
--- /dev/null
+++ b/lib/css/CssGenerator.js
@@ -0,0 +1,701 @@
+/*
+	MIT License http://www.opensource.org/licenses/mit-license.php
+	Author Sergey Melyukov @smelukov
+*/
+
+"use strict";
+
+const {
+	ConcatSource,
+	RawSource,
+	ReplaceSource,
+	SourceMapSource
+} = require("webpack-sources");
+const { UsageState } = require("../ExportsInfo");
+const Generator = require("../Generator");
+const InitFragment = require("../InitFragment");
+const {
+	CSS_TYPE,
+	CSS_TYPES,
+	JAVASCRIPT_AND_CSS_TYPES,
+	JAVASCRIPT_TYPE,
+	JAVASCRIPT_TYPES
+} = require("../ModuleSourceTypeConstants");
+const RuntimeGlobals = require("../RuntimeGlobals");
+const Template = require("../Template");
+const CssImportDependency = require("../dependencies/CssImportDependency");
+const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
+
+const memoize = require("../util/memoize");
+
+/** @typedef {import("webpack-sources").Source} Source */
+/** @typedef {import("../../declarations/WebpackOptions").CssModuleGeneratorOptions} CssModuleGeneratorOptions */
+/** @typedef {import("../Compilation").DependencyConstructor} DependencyConstructor */
+/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
+/** @typedef {import("../Dependency")} Dependency */
+/** @typedef {import("../DependencyTemplate").CssData} CssData */
+/** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
+/** @typedef {import("../Generator").GenerateContext} GenerateContext */
+/** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
+/** @typedef {import("../Module").BuildInfo} BuildInfo */
+/** @typedef {import("../Module").BuildMeta} BuildMeta */
+/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
+/** @typedef {import("../Module").SourceType} SourceType */
+/** @typedef {import("../Module").SourceTypes} SourceTypes */
+/** @typedef {import("../ModuleGraph")} ModuleGraph */
+/** @typedef {import("../NormalModule")} NormalModule */
+/** @typedef {import("../util/Hash")} Hash */
+/** @typedef {import("./CssModulesPlugin").ModuleFactoryCacheEntry} ModuleFactoryCacheEntry */
+/** @typedef {import("../CssModule")} CssModule */
+/** @typedef {import("../Compilation")} Compilation */
+/** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
+/** @typedef {import("../../declarations/WebpackOptions").CssParserExportType} CssParserExportType */
+
+const getPropertyName = memoize(() => require("../util/property"));
+const getCssModulesPlugin = memoize(() => require("./CssModulesPlugin"));
+
+class CssGenerator extends Generator {
+	/**
+	 * @param {CssModuleGeneratorOptions} options options
+	 * @param {ModuleGraph} moduleGraph the module graph
+	 */
+	constructor(options, moduleGraph) {
+		super();
+		this.options = options;
+		this._exportsOnly = options.exportsOnly;
+		this._esModule = options.esModule;
+		this._moduleGraph = moduleGraph;
+		/** @type {WeakMap} */
+		this._moduleFactoryCache = new WeakMap();
+	}
+
+	/**
+	 * @param {NormalModule} module module for which the bailout reason should be determined
+	 * @param {ConcatenationBailoutReasonContext} context context
+	 * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
+	 */
+	getConcatenationBailoutReason(module, context) {
+		if (!this._esModule) {
+			return "Module is not an ECMAScript module";
+		}
+
+		return undefined;
+	}
+
+	/**
+	 * Generate JavaScript code that requires and concatenates all CSS imports
+	 * @param {NormalModule} module the module to generate CSS text for
+	 * @param {GenerateContext} generateContext the generate context
+	 * @param {boolean} getDefaultExport whether to get the default export
+	 * @returns {{ expr: string, type: CssParserExportType }[]} JavaScript code that concatenates all imported CSS
+	 */
+	_generateImportCode(module, generateContext, getDefaultExport = true) {
+		const moduleGraph = generateContext.moduleGraph;
+		/** @type {{ expr: string, type: CssParserExportType }[]} */
+		const parts = [];
+
+		// Iterate through module.dependencies to maintain source order
+		for (const dep of module.dependencies) {
+			if (dep instanceof CssImportDependency) {
+				/** @type {CssModule} */
+				const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
+				const importVar = generateContext.runtimeTemplate.moduleExports({
+					module: depModule,
+					chunkGraph: generateContext.chunkGraph,
+					request: /** @type {CssModule} */ (depModule).userRequest,
+					weak: false,
+					runtimeRequirements: generateContext.runtimeRequirements
+				});
+
+				if (getDefaultExport) {
+					generateContext.runtimeRequirements.add(
+						RuntimeGlobals.compatGetDefaultExport
+					);
+					parts.push({
+						expr: `(${RuntimeGlobals.compatGetDefaultExport}(${importVar})() || "")`,
+						type: /** @type {CssParserExportType} */ (
+							/** @type {CssModule} */ (depModule).exportType
+						)
+					});
+				} else {
+					parts.push({
+						expr: importVar,
+						type: /** @type {CssParserExportType} */ (
+							/** @type {CssModule} */ (depModule).exportType
+						)
+					});
+				}
+			}
+		}
+
+		return parts;
+	}
+
+	/**
+	 * Generate CSS source for the current module
+	 * @param {NormalModule} module the module to generate CSS source for
+	 * @param {GenerateContext} generateContext the generate context
+	 * @returns {Source | null} the CSS source
+	 */
+	_generateContentSource(module, generateContext) {
+		const moduleSourceContent = /** @type {Source} */ (
+			this.generate(module, {
+				...generateContext,
+				type: CSS_TYPE
+			})
+		);
+
+		if (!moduleSourceContent) {
+			return null;
+		}
+
+		const compilation = generateContext.runtimeTemplate.compilation;
+		// For non-link exportTypes (style, text, css-style-sheet), url() in the CSS
+		// is resolved relative to the document URL (for 
-		
-
    -
  • -

    styling

    -
      -
    • -

      style!css loader

      -
    • -
    • -

      style!less loader

      -
    • -
    • -

      file loader:

      -
    • -
    -
-
- - - diff --git a/test/browsertest/web_modules/subcontent/index.js b/test/browsertest/web_modules/subcontent/index.js deleted file mode 100644 index c4efbc880dc..00000000000 --- a/test/browsertest/web_modules/subcontent/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = "replaced"; \ No newline at end of file diff --git a/test/browsertest/webpack.config.js b/test/browsertest/webpack.config.js deleted file mode 100644 index ee9f01b36c8..00000000000 --- a/test/browsertest/webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - resolve: { - modules: ["web_modules", "node_modules"], - extensions: [".json", ".web.js", ".js"] - }, - resolveLoader: { - extensions: [ - ".json", - ".webpack-loader.js", - ".web-loader.js", - ".loader.js", - ".js" - ], - mainFields: ["webpackLoader", "loader", "main"] - } -}; diff --git a/test/cases/amd/define-amd/index.js b/test/cases/amd/define-amd/index.js new file mode 100644 index 00000000000..13eac3d953b --- /dev/null +++ b/test/cases/amd/define-amd/index.js @@ -0,0 +1,13 @@ +if (typeof define === "function" && define.amd && require.amd) { + define("my-module", [], function () { + return 'my-module'; + }); +} + + +it("should work with `define.amd`", function(done) { + require(["my-module"], function (myModule) { + expect(myModule).toBe("my-module"); + done(); + }); +}); diff --git a/test/cases/amd/define-needs-module/index.js b/test/cases/amd/define-needs-module/index.js new file mode 100644 index 00000000000..3aeb9539ce9 --- /dev/null +++ b/test/cases/amd/define-needs-module/index.js @@ -0,0 +1,3 @@ +it("should have runtime requirement on module with define", () => { + expect(require("./module")).toBe(42); +}); diff --git a/test/cases/amd/define-needs-module/module.js b/test/cases/amd/define-needs-module/module.js new file mode 100644 index 00000000000..d83845079f6 --- /dev/null +++ b/test/cases/amd/define-needs-module/module.js @@ -0,0 +1,3 @@ +define([], function () { + return 42; +}); diff --git a/test/cases/amd/require-module-keywords/index.js b/test/cases/amd/require-module-keywords/index.js new file mode 100644 index 00000000000..8552820d742 --- /dev/null +++ b/test/cases/amd/require-module-keywords/index.js @@ -0,0 +1,10 @@ +it("should work when require module keywords", (done) => { + require(['require', 'module', 'exports'], function (webpackRequire, webpackModule, webpackExports) { + expect(require("./module")).toBe(42); + expect(webpackRequire).toBeDefined(); + expect(webpackModule).toBeDefined(); + expect(webpackExports).toBeDefined(); + + done(); + }); +}); diff --git a/test/cases/amd/require-module-keywords/module.js b/test/cases/amd/require-module-keywords/module.js new file mode 100644 index 00000000000..d83845079f6 --- /dev/null +++ b/test/cases/amd/require-module-keywords/module.js @@ -0,0 +1,3 @@ +define([], function () { + return 42; +}); diff --git a/test/cases/async-modules/double-import/a.js b/test/cases/async-modules/double-import/a.js new file mode 100644 index 00000000000..1f752aa2b54 --- /dev/null +++ b/test/cases/async-modules/double-import/a.js @@ -0,0 +1,3 @@ +import x from "./shared"; + +export default x + " world"; diff --git a/test/cases/async-modules/double-import/b.js b/test/cases/async-modules/double-import/b.js new file mode 100644 index 00000000000..1f752aa2b54 --- /dev/null +++ b/test/cases/async-modules/double-import/b.js @@ -0,0 +1,3 @@ +import x from "./shared"; + +export default x + " world"; diff --git a/test/cases/async-modules/double-import/index.js b/test/cases/async-modules/double-import/index.js new file mode 100644 index 00000000000..d84fc8076af --- /dev/null +++ b/test/cases/async-modules/double-import/index.js @@ -0,0 +1,4 @@ +it("should allow to import an async module twice", async () => { + const result = await require("./main"); + expect(result.default).toBe("hello world, hello world"); +}); diff --git a/test/cases/async-modules/double-import/main.js b/test/cases/async-modules/double-import/main.js new file mode 100644 index 00000000000..2bd775ed752 --- /dev/null +++ b/test/cases/async-modules/double-import/main.js @@ -0,0 +1,4 @@ +import a from "./a"; +import b from "./b"; + +export default a + ", " + b; diff --git a/test/cases/async-modules/double-import/shared.js b/test/cases/async-modules/double-import/shared.js new file mode 100644 index 00000000000..6d4c734a406 --- /dev/null +++ b/test/cases/async-modules/double-import/shared.js @@ -0,0 +1,3 @@ +await 1; +await 1; +export default "hello"; diff --git a/test/cases/async-modules/issue-16097/index.js b/test/cases/async-modules/issue-16097/index.js new file mode 100644 index 00000000000..d0fc5d626e1 --- /dev/null +++ b/test/cases/async-modules/issue-16097/index.js @@ -0,0 +1,6 @@ +import i, { foo } from "./won't-run-tla"; + +it("should have value imported from won't-run-tla", async () => { + expect(i).toBe(42); + expect(foo).toBe(undefined); +}); diff --git a/test/cases/async-modules/issue-16097/won't-run-tla.js b/test/cases/async-modules/issue-16097/won't-run-tla.js new file mode 100644 index 00000000000..786e32c1cf3 --- /dev/null +++ b/test/cases/async-modules/issue-16097/won't-run-tla.js @@ -0,0 +1,4 @@ +global.someNonExistentVariable && await 'test'; +const foo = global.otherSomeNonExistentVariable && await 43; +export default 42; +export { foo } diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/a.js b/test/cases/async-modules/micro-ticks-parents/case-a/a.js new file mode 100644 index 00000000000..6c88c077d25 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/a.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./async"; + +report("a"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/async.js b/test/cases/async-modules/micro-ticks-parents/case-a/async.js new file mode 100644 index 00000000000..55b880d32d7 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/async.js @@ -0,0 +1,7 @@ +import { report } from "../tick"; + +report("async before"); +await 0; +report("async middle"); +await 0; +report("async after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/async2.js b/test/cases/async-modules/micro-ticks-parents/case-a/async2.js new file mode 100644 index 00000000000..a8c32bf207d --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/async2.js @@ -0,0 +1,8 @@ +import { report } from "../tick"; +import "./d"; + +report("async2 before"); +await 0; +report("async2 middle"); +await 0; +report("async2 after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/b.js b/test/cases/async-modules/micro-ticks-parents/case-a/b.js new file mode 100644 index 00000000000..1050f1e6b0f --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/b.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./async"; + +report("b"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/c.js b/test/cases/async-modules/micro-ticks-parents/case-a/c.js new file mode 100644 index 00000000000..27c7393a5e5 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/c.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./b"; + +report("c"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/d.js b/test/cases/async-modules/micro-ticks-parents/case-a/d.js new file mode 100644 index 00000000000..5504843a03a --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/d.js @@ -0,0 +1,5 @@ +import { report } from "../tick"; +import "./c"; +import "./a"; + +report("d"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/e.js b/test/cases/async-modules/micro-ticks-parents/case-a/e.js new file mode 100644 index 00000000000..99a47c40126 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/e.js @@ -0,0 +1,3 @@ +import { report } from "../tick"; + +report("e"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-a/f.js b/test/cases/async-modules/micro-ticks-parents/case-a/f.js new file mode 100644 index 00000000000..164afe36e72 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-a/f.js @@ -0,0 +1,5 @@ +import { report } from "../tick"; +import "./e"; +import "./async2"; + +report("f"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-b/a.js b/test/cases/async-modules/micro-ticks-parents/case-b/a.js new file mode 100644 index 00000000000..1aab5f01bf9 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-b/a.js @@ -0,0 +1,5 @@ +import { report } from "../tick"; +import "./async"; +import "./b"; + +report("a"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-b/async.js b/test/cases/async-modules/micro-ticks-parents/case-b/async.js new file mode 100644 index 00000000000..55b880d32d7 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-b/async.js @@ -0,0 +1,7 @@ +import { report } from "../tick"; + +report("async before"); +await 0; +report("async middle"); +await 0; +report("async after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-b/b.js b/test/cases/async-modules/micro-ticks-parents/case-b/b.js new file mode 100644 index 00000000000..9293c13214e --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-b/b.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./c"; + +report("b"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-b/c.js b/test/cases/async-modules/micro-ticks-parents/case-b/c.js new file mode 100644 index 00000000000..b5f21ba1d0f --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-b/c.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./async"; + +report("c"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-b/d.js b/test/cases/async-modules/micro-ticks-parents/case-b/d.js new file mode 100644 index 00000000000..b3e9ae43b7a --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-b/d.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./c"; + +report("d"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-b/e.js b/test/cases/async-modules/micro-ticks-parents/case-b/e.js new file mode 100644 index 00000000000..9a4b1c21dae --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-b/e.js @@ -0,0 +1,9 @@ +import { report } from "../tick"; +import "./a"; +import "./d"; + +report("async before"); +await 0; +report("async middle"); +await 0; +report("async after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-c/a.js b/test/cases/async-modules/micro-ticks-parents/case-c/a.js new file mode 100644 index 00000000000..877d993baaa --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-c/a.js @@ -0,0 +1,7 @@ +import { report } from "../tick"; +import "./b"; +import "./a"; + +report("a before"); +await 0; +report("a after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-c/b.js b/test/cases/async-modules/micro-ticks-parents/case-c/b.js new file mode 100644 index 00000000000..0df467a5289 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-c/b.js @@ -0,0 +1,3 @@ +import { report } from "../tick"; + +report("b"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-d/a.js b/test/cases/async-modules/micro-ticks-parents/case-d/a.js new file mode 100644 index 00000000000..4294285ef4f --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-d/a.js @@ -0,0 +1,6 @@ +import { report } from "../tick"; +import "./b"; + +report("a before"); +await 0; +report("a after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-d/b.js b/test/cases/async-modules/micro-ticks-parents/case-d/b.js new file mode 100644 index 00000000000..36e0a25f177 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-d/b.js @@ -0,0 +1,6 @@ +import { report } from "../tick"; +import "./c"; + +report("b before"); +await 0; +report("b after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-d/c.js b/test/cases/async-modules/micro-ticks-parents/case-d/c.js new file mode 100644 index 00000000000..c68d0d55dd3 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-d/c.js @@ -0,0 +1,6 @@ +import { report } from "../tick"; +import "./a"; + +report("c before"); +await 0; +report("c after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-d/index.js b/test/cases/async-modules/micro-ticks-parents/case-d/index.js new file mode 100644 index 00000000000..4b95c3afa80 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-d/index.js @@ -0,0 +1,5 @@ +import { report } from "../tick"; +import "./x"; +import "./y"; + +report("index"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-d/x.js b/test/cases/async-modules/micro-ticks-parents/case-d/x.js new file mode 100644 index 00000000000..225365bd07c --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-d/x.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./a"; + +report("x"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-d/y.js b/test/cases/async-modules/micro-ticks-parents/case-d/y.js new file mode 100644 index 00000000000..bddaecf205f --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-d/y.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./b"; + +report("y"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-e/a.js b/test/cases/async-modules/micro-ticks-parents/case-e/a.js new file mode 100644 index 00000000000..6c88c077d25 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-e/a.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./async"; + +report("a"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-e/async.js b/test/cases/async-modules/micro-ticks-parents/case-e/async.js new file mode 100644 index 00000000000..55b880d32d7 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-e/async.js @@ -0,0 +1,7 @@ +import { report } from "../tick"; + +report("async before"); +await 0; +report("async middle"); +await 0; +report("async after"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-e/b.js b/test/cases/async-modules/micro-ticks-parents/case-e/b.js new file mode 100644 index 00000000000..1050f1e6b0f --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-e/b.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./async"; + +report("b"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-e/index.js b/test/cases/async-modules/micro-ticks-parents/case-e/index.js new file mode 100644 index 00000000000..fe9ae799632 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-e/index.js @@ -0,0 +1,6 @@ +import { report } from "../tick"; +import "./a"; +import "./b"; +import "./x"; + +report("index"); diff --git a/test/cases/async-modules/micro-ticks-parents/case-e/x.js b/test/cases/async-modules/micro-ticks-parents/case-e/x.js new file mode 100644 index 00000000000..225365bd07c --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/case-e/x.js @@ -0,0 +1,4 @@ +import { report } from "../tick"; +import "./a"; + +report("x"); diff --git a/test/cases/async-modules/micro-ticks-parents/index.js b/test/cases/async-modules/micro-ticks-parents/index.js new file mode 100644 index 00000000000..9739fb6981e --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/index.js @@ -0,0 +1,74 @@ +import * as tick from "./tick"; + +it("should execute async modules in to correct order and without additional ticks (case a)", async () => { + tick.start(); + await require("./case-a/f"); + expect(tick.stop()).toEqual([ + "e 0", + "async before 0", + "async middle 1", + "async after 2", + "b 3", + "c 3", + "a 3", + "d 3", + "async2 before 3", + "async2 middle 4", + "async2 after 5", + "f 6" + ]); +}); + +it("should execute async modules in to correct order and without additional ticks (case b)", async () => { + tick.start(); + await require("./case-b/e"); + expect(tick.stop()).toEqual([ + "async before 0", + "async middle 1", + "async after 2", + "c 3", + "b 3", + "a 3", + "d 3", + "async before 3", + "async middle 4", + "async after 5" + ]); +}); + +it("should execute async modules in to correct order and without additional ticks (case c)", async () => { + tick.start(); + await require("./case-c/a"); + expect(tick.stop()).toEqual(["b 0", "a before 0", "a after 1"]); +}); + +it("should execute async modules in to correct order and without additional ticks (case d)", async () => { + tick.start(); + await require("./case-d/index"); + expect(tick.stop()).toEqual([ + "c before 0", + "c after 1", + "b before 2", + "b after 3", + "a before 4", + "a after 5", + "x 6", + "y 6", + "index 6" + ]); +}); + +it("should execute async modules in to correct order and without additional ticks (case e)", async () => { + tick.start(); + await require("./case-e/index"); + expect(tick.stop()).toEqual([ + "async before 0", + "async middle 1", + "async after 2", + "a 3", + // see https://github.com/tc39/proposal-top-level-await/issues/158 + "b 3", + "x 3", + "index 3" + ]); +}); diff --git a/test/cases/async-modules/micro-ticks-parents/test.filter.js b/test/cases/async-modules/micro-ticks-parents/test.filter.js new file mode 100644 index 00000000000..cf14b5a6812 --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = () => + // In node 10 v8 has a bug which inserts an additional micro-tick into async functions + !process.version.startsWith("v10."); diff --git a/test/cases/async-modules/micro-ticks-parents/tick.js b/test/cases/async-modules/micro-ticks-parents/tick.js new file mode 100644 index 00000000000..41dc0a8f04a --- /dev/null +++ b/test/cases/async-modules/micro-ticks-parents/tick.js @@ -0,0 +1,19 @@ +export let currentTick = 0; +export const report = name => { + entries.push(`${name} ${currentTick}`); +}; +export let entries = []; +let running = false; +export const start = async () => { + entries = []; + running = true; + currentTick = 0; + while (running) { + await 0; + currentTick++; + } +}; +export const stop = () => { + running = false; + return entries; +}; diff --git a/test/cases/async-modules/reexport-unknown/async-unknown.js b/test/cases/async-modules/reexport-unknown/async-unknown.js new file mode 100644 index 00000000000..ca2eb248ac7 --- /dev/null +++ b/test/cases/async-modules/reexport-unknown/async-unknown.js @@ -0,0 +1,3 @@ +export * from "./unknown.js"; + +await 1; diff --git a/test/cases/async-modules/reexport-unknown/index.js b/test/cases/async-modules/reexport-unknown/index.js new file mode 100644 index 00000000000..303a8df3157 --- /dev/null +++ b/test/cases/async-modules/reexport-unknown/index.js @@ -0,0 +1,2 @@ +it("should handle re-export from async modules correctly", () => + import("./test.js")); diff --git a/test/cases/async-modules/reexport-unknown/reexport-async-unknown.js b/test/cases/async-modules/reexport-unknown/reexport-async-unknown.js new file mode 100644 index 00000000000..49ae13b84c1 --- /dev/null +++ b/test/cases/async-modules/reexport-unknown/reexport-async-unknown.js @@ -0,0 +1,3 @@ +export * from "./async-unknown.js"; +export { a } from "./async-unknown.js"; +export default "default"; diff --git a/test/cases/async-modules/reexport-unknown/test.js b/test/cases/async-modules/reexport-unknown/test.js new file mode 100644 index 00000000000..3d5ccedf9d9 --- /dev/null +++ b/test/cases/async-modules/reexport-unknown/test.js @@ -0,0 +1,23 @@ +import * as ns from "./reexport-async-unknown.js?ns"; +import { a, b, c } from "./reexport-async-unknown.js?named"; +import value from "./reexport-async-unknown.js?default"; + +function nsObj(m) { + Object.defineProperty(m, Symbol.toStringTag, { value: "Module" }); + return m; +} + +expect(ns).toEqual( + nsObj({ + default: "default", + a: "a", + b: "b", + c: "c" + }) +); + +expect(a).toBe("a"); +expect(b).toBe("b"); +expect(c).toBe("c"); + +expect(value).toBe("default"); diff --git a/test/cases/async-modules/reexport-unknown/unknown.js b/test/cases/async-modules/reexport-unknown/unknown.js new file mode 100644 index 00000000000..293d229b741 --- /dev/null +++ b/test/cases/async-modules/reexport-unknown/unknown.js @@ -0,0 +1,7 @@ +const o = { + a: "a", + b: "b", + c: "c" +}; + +module.exports = Object(o); diff --git a/test/cases/async-modules/runtime-performance/async.js b/test/cases/async-modules/runtime-performance/async.js new file mode 100644 index 00000000000..03ed4ae4663 --- /dev/null +++ b/test/cases/async-modules/runtime-performance/async.js @@ -0,0 +1,2 @@ +await 1; +export default 1; diff --git a/test/cases/async-modules/runtime-performance/index.js b/test/cases/async-modules/runtime-performance/index.js new file mode 100644 index 00000000000..1aca8000cd4 --- /dev/null +++ b/test/cases/async-modules/runtime-performance/index.js @@ -0,0 +1,5 @@ +it("should not take too long to evaluate nested async modules", async () => { + const start = Date.now(); + await import(/* webpackMode: "eager" */ "./loader.js?i=40!./loader.js"); + expect(Date.now() - start).toBeLessThan(100); +}); diff --git a/test/cases/async-modules/runtime-performance/loader.js b/test/cases/async-modules/runtime-performance/loader.js new file mode 100644 index 00000000000..ea46f2bea9b --- /dev/null +++ b/test/cases/async-modules/runtime-performance/loader.js @@ -0,0 +1,14 @@ +/** @type {import("../../../../").LoaderDefinition<{ i: string }>} */ +module.exports = function () { + const options = this.getOptions(); + const i = +options.i; + let src = `import n from "./async.js";\n`; + if (i > 0) { + src += `import a from "./loader.js?i=${i - 1}&a!./loader.js";\n`; + src += `import b from "./loader.js?i=${i - 1}&b!./loader.js";\n`; + src += `export default n + a + b;\n`; + } else { + src += `export default n;\n`; + } + return src; +}; diff --git a/test/cases/async-modules/top-level-await-without-export/index.js b/test/cases/async-modules/top-level-await-without-export/index.js new file mode 100644 index 00000000000..9c2c9837547 --- /dev/null +++ b/test/cases/async-modules/top-level-await-without-export/index.js @@ -0,0 +1,14 @@ +let value = 0; + +it("should not crash when top level await is used without export", () => { + // wait for itself + return require.cache[module.id].exports.then(() => { + expect(value).toBe(42); + }); +}); + +await new Promise(r => setTimeout(r, 100)); + +value = 42; + +export {}; diff --git a/test/cases/async-modules/top-level-await/index.js b/test/cases/async-modules/top-level-await/index.js new file mode 100644 index 00000000000..be6d8d1ebb3 --- /dev/null +++ b/test/cases/async-modules/top-level-await/index.js @@ -0,0 +1,6 @@ +it("should allow to use top-level-await", () => { + return import("./reexport").then(({ default: value, other }) => { + expect(value).toBe(42); + expect(other).toBe(42); + }); +}); diff --git a/test/cases/async-modules/top-level-await/module.js b/test/cases/async-modules/top-level-await/module.js new file mode 100644 index 00000000000..4028937e713 --- /dev/null +++ b/test/cases/async-modules/top-level-await/module.js @@ -0,0 +1,3 @@ +await new Promise(r => setTimeout(r, 100)); + +export default 42; diff --git a/test/cases/async-modules/top-level-await/reexport.js b/test/cases/async-modules/top-level-await/reexport.js new file mode 100644 index 00000000000..55f47925e24 --- /dev/null +++ b/test/cases/async-modules/top-level-await/reexport.js @@ -0,0 +1,4 @@ +export { default } from "./module"; +import value from "./module"; + +export const other = value; diff --git a/test/cases/async-modules/top-level-error/counter.js b/test/cases/async-modules/top-level-error/counter.js new file mode 100644 index 00000000000..45158af96f0 --- /dev/null +++ b/test/cases/async-modules/top-level-error/counter.js @@ -0,0 +1,6 @@ +await 1; +let value = 0; +export const count = () => { + value++; + return value; +}; diff --git a/test/cases/async-modules/top-level-error/index.js b/test/cases/async-modules/top-level-error/index.js new file mode 100644 index 00000000000..087fd08a1e9 --- /dev/null +++ b/test/cases/async-modules/top-level-error/index.js @@ -0,0 +1,49 @@ +it("should allow to import an rejected async module again", async () => { + await expect(require("./main")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 1") + }) + ); + await expect(require("./module")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 1") + }) + ); + await expect(require("./module?2")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 2") + }) + ); + await expect(require("./reexport?2")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 1") + }) + ); + try { + require("./script") + } catch (e) { + expect.stringContaining("expected rejection 1") + } + try { + require("./script-reexport") + } catch (e) { + expect.stringContaining("expected rejection 1") + } + await Promise.all([ + expect(require("./module?3")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 3") + }) + ), + expect(require("./module?4")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 4") + }) + ), + expect(require("./module?5")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("expected rejection 5") + }) + ) + ]); +}); diff --git a/test/cases/async-modules/top-level-error/main.js b/test/cases/async-modules/top-level-error/main.js new file mode 100644 index 00000000000..bfc4f032eea --- /dev/null +++ b/test/cases/async-modules/top-level-error/main.js @@ -0,0 +1,2 @@ +export { default as a } from "./reexport"; +export { default as b } from "./module?2"; diff --git a/test/cases/async-modules/top-level-error/module.js b/test/cases/async-modules/top-level-error/module.js new file mode 100644 index 00000000000..e8096da821a --- /dev/null +++ b/test/cases/async-modules/top-level-error/module.js @@ -0,0 +1,6 @@ +import { count } from "./counter"; + +const c = count(); +throw new Error("expected rejection " + c); + +export default "ok"; diff --git a/test/cases/async-modules/top-level-error/reexport.js b/test/cases/async-modules/top-level-error/reexport.js new file mode 100644 index 00000000000..b29130d0f5f --- /dev/null +++ b/test/cases/async-modules/top-level-error/reexport.js @@ -0,0 +1 @@ +export { default as default } from "./module"; diff --git a/test/cases/async-modules/top-level-error/script-reexport.js b/test/cases/async-modules/top-level-error/script-reexport.js new file mode 100644 index 00000000000..61128b5ab5f --- /dev/null +++ b/test/cases/async-modules/top-level-error/script-reexport.js @@ -0,0 +1 @@ +module.exports = require("./script"); diff --git a/test/cases/async-modules/top-level-error/script.js b/test/cases/async-modules/top-level-error/script.js new file mode 100644 index 00000000000..b363d6d1ed9 --- /dev/null +++ b/test/cases/async-modules/top-level-error/script.js @@ -0,0 +1,4 @@ +const c = 1; +throw new Error("expected rejection " + c); + +module.exports = "ok"; diff --git a/test/cases/chunks/context-weak/index.js b/test/cases/chunks/context-weak/index.js index 65aa0c58c1d..c3d6538122f 100644 --- a/test/cases/chunks/context-weak/index.js +++ b/test/cases/chunks/context-weak/index.js @@ -2,7 +2,18 @@ it("should not bundle context requires with asyncMode === 'weak'", function() { var contextRequire = require.context(".", false, /two/, "weak"); expect(function() { contextRequire("./two") - }).toThrowError(/not available/); + }).toThrow(/not available/); +}); + +it("should not bundle context requires with asyncMode === 'weak' using import.meta.webpackContext", function() { + const contextRequire = import.meta.webpackContext(".", { + recursive: false, + regExp: /two/, + mode: "weak" + }); + expect(function() { + contextRequire("./two") + }).toThrow(/not available/); }); it("should find module with asyncMode === 'weak' when required elsewhere", function() { diff --git a/test/cases/chunks/import-circle/index.js b/test/cases/chunks/import-circle/index.js index feb7bc8b726..ceeaef77f27 100644 --- a/test/cases/chunks/import-circle/index.js +++ b/test/cases/chunks/import-circle/index.js @@ -1,15 +1,11 @@ -import leftHelix from './leftHelix'; -import rightHelix from './rightHelix'; +import leftHelix from "./leftHelix"; +import rightHelix from "./rightHelix"; -it("should import generate ensure function for this", () => -{ - return Promise.all([ - leftHelix.run(), - rightHelix.run() - ]); +it("should import generate ensure function for this", () => { + return Promise.all([leftHelix.run(), rightHelix.run()]); }); export default { - leftHelix, - rightHelix, + leftHelix, + rightHelix }; diff --git a/test/cases/chunks/import-circle/leftHelix.js b/test/cases/chunks/import-circle/leftHelix.js index 455e0daebf8..d918b1d3fca 100644 --- a/test/cases/chunks/import-circle/leftHelix.js +++ b/test/cases/chunks/import-circle/leftHelix.js @@ -1,4 +1,4 @@ -import leftHelixPrime, { run } from './leftHelixPrime'; +import leftHelixPrime, { run } from "./leftHelixPrime"; export default { leftHelixPrime, diff --git a/test/cases/chunks/import-circle/leftHelixPrime.js b/test/cases/chunks/import-circle/leftHelixPrime.js index 9b720f2d1fe..189106a9f59 100644 --- a/test/cases/chunks/import-circle/leftHelixPrime.js +++ b/test/cases/chunks/import-circle/leftHelixPrime.js @@ -1,9 +1,9 @@ -import rightHelixPrime from './rightHelixPrime'; +import rightHelixPrime from "./rightHelixPrime"; export function run() { - return import(/* webpackChunkName: "left" */ './leftHelix'); + return import(/* webpackChunkName: "left" */ "./leftHelix"); } export default { - rightHelixPrime, + rightHelixPrime: () => rightHelixPrime }; diff --git a/test/cases/chunks/import-circle/rightHelix.js b/test/cases/chunks/import-circle/rightHelix.js index 2fe50e79171..598a567fff0 100644 --- a/test/cases/chunks/import-circle/rightHelix.js +++ b/test/cases/chunks/import-circle/rightHelix.js @@ -1,6 +1,6 @@ -import rightHelixPrime, { run } from './rightHelixPrime'; +import rightHelixPrime, { run } from "./rightHelixPrime"; export default { rightHelixPrime, run -} +}; diff --git a/test/cases/chunks/import-circle/rightHelixPrime.js b/test/cases/chunks/import-circle/rightHelixPrime.js index 5657a7127e5..438ff9791a9 100644 --- a/test/cases/chunks/import-circle/rightHelixPrime.js +++ b/test/cases/chunks/import-circle/rightHelixPrime.js @@ -1,9 +1,9 @@ -import leftHelixPrime from './leftHelixPrime'; +import leftHelixPrime from "./leftHelixPrime"; export function run() { - return import(/* webpackChunkName: "right" */ './rightHelix'); + return import(/* webpackChunkName: "right" */ "./rightHelix"); } export default { - leftHelixPrime + leftHelixPrime: () => leftHelixPrime }; diff --git a/test/cases/chunks/import-context-exist-chunk/dir-initial-with-fake-map/initialModule.js b/test/cases/chunks/import-context-exist-chunk/dir-initial-with-fake-map/initialModule.js new file mode 100644 index 00000000000..341b43e9dfa --- /dev/null +++ b/test/cases/chunks/import-context-exist-chunk/dir-initial-with-fake-map/initialModule.js @@ -0,0 +1 @@ +export default "initialModuleDefault"; diff --git a/test/cases/chunks/import-context-exist-chunk/dir-initial-with-fake-map/initialModule2.js b/test/cases/chunks/import-context-exist-chunk/dir-initial-with-fake-map/initialModule2.js new file mode 100644 index 00000000000..4c27d0e9f9a --- /dev/null +++ b/test/cases/chunks/import-context-exist-chunk/dir-initial-with-fake-map/initialModule2.js @@ -0,0 +1 @@ +exports.default = "other"; diff --git a/test/cases/chunks/import-context-exist-chunk/dir-initial/initialModule.js b/test/cases/chunks/import-context-exist-chunk/dir-initial/initialModule.js new file mode 100644 index 00000000000..341b43e9dfa --- /dev/null +++ b/test/cases/chunks/import-context-exist-chunk/dir-initial/initialModule.js @@ -0,0 +1 @@ +export default "initialModuleDefault"; diff --git a/test/cases/chunks/import-context-exist-chunk/index.js b/test/cases/chunks/import-context-exist-chunk/index.js new file mode 100644 index 00000000000..8bdb5c77d2b --- /dev/null +++ b/test/cases/chunks/import-context-exist-chunk/index.js @@ -0,0 +1,17 @@ +it("should resolve when import existed chunk (#8626)", function(done) { + require.context("./dir-initial/"); + const fileName = "initialModule"; + import(`./dir-initial/${fileName}`).then(({default:m}) => { + expect(m).toBe("initialModuleDefault"); + done(); + }).catch(done); +}); + +it("should resolve when import existed chunk with fake maps", function(done) { + require.context("./dir-initial-with-fake-map/"); + const fileName = "initialModule"; + import(`./dir-initial-with-fake-map/${fileName}`).then(({default:m}) => { + expect(m).toBe("initialModuleDefault"); + done(); + }).catch(done); +}); diff --git a/test/cases/chunks/import-context/index.js b/test/cases/chunks/import-context/index.js index 9392c88775f..3f5e41d5ad6 100644 --- a/test/cases/chunks/import-context/index.js +++ b/test/cases/chunks/import-context/index.js @@ -23,10 +23,9 @@ function testCase(load, done) { it("should be able to use expressions in import", function(done) { function load(name, expected, callback) { import("./dir/" + name).then(function(result) { - expect(result).toEqual({ - default: expected, - [Symbol.toStringTag]: "Module" - }); + expect(result).toEqual(nsObj({ + default: expected + })); callback(); }).catch(function(err) { done(err); diff --git a/test/cases/chunks/import/index.js b/test/cases/chunks/import/index.js index e9bbf35d5df..0810e5c7e88 100644 --- a/test/cases/chunks/import/index.js +++ b/test/cases/chunks/import/index.js @@ -1,9 +1,8 @@ it("should be able to use import", function(done) { import("./two").then(function(two) { - expect(two).toEqual({ - default: 2, - [Symbol.toStringTag]: "Module" - }); + expect(two).toEqual(nsObj({ + default: 2 + })); done(); }).catch(function(err) { done(err); diff --git a/test/cases/chunks/inline-options/dir12/a.js b/test/cases/chunks/inline-options/dir12/a.js new file mode 100644 index 00000000000..880c38a1988 --- /dev/null +++ b/test/cases/chunks/inline-options/dir12/a.js @@ -0,0 +1,9 @@ +export const c = "c"; + +export const d = "d"; + +export const longnameforexport = "longnameforexport"; + +export default "default2"; + +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/inline-options/dir13/a.js b/test/cases/chunks/inline-options/dir13/a.js new file mode 100644 index 00000000000..fbeecbd2065 --- /dev/null +++ b/test/cases/chunks/inline-options/dir13/a.js @@ -0,0 +1,7 @@ +export const c = "c"; + +export const d = "d"; + +export default "default2"; + +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/inline-options/dir13/b.js b/test/cases/chunks/inline-options/dir13/b.js new file mode 100644 index 00000000000..b73c5a615da --- /dev/null +++ b/test/cases/chunks/inline-options/dir13/b.js @@ -0,0 +1,7 @@ +export const a = "a"; + +export const b = "b"; + +export default "default"; + +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/inline-options/dir14/a.js b/test/cases/chunks/inline-options/dir14/a.js new file mode 100644 index 00000000000..e94fef18587 --- /dev/null +++ b/test/cases/chunks/inline-options/dir14/a.js @@ -0,0 +1 @@ +export default "a"; diff --git a/test/cases/chunks/inline-options/dir14/b.js b/test/cases/chunks/inline-options/dir14/b.js new file mode 100644 index 00000000000..eff703ff465 --- /dev/null +++ b/test/cases/chunks/inline-options/dir14/b.js @@ -0,0 +1 @@ +export default "b"; diff --git a/test/cases/chunks/inline-options/dir14/c.js b/test/cases/chunks/inline-options/dir14/c.js new file mode 100644 index 00000000000..5d50db5bc15 --- /dev/null +++ b/test/cases/chunks/inline-options/dir14/c.js @@ -0,0 +1 @@ +export default "c"; diff --git a/test/cases/chunks/inline-options/dir15/a.js b/test/cases/chunks/inline-options/dir15/a.js new file mode 100644 index 00000000000..59aa6ffd125 --- /dev/null +++ b/test/cases/chunks/inline-options/dir15/a.js @@ -0,0 +1,2 @@ +exports.a = 1; +exports.b = 2; diff --git a/test/cases/chunks/inline-options/dir15/json/array.json b/test/cases/chunks/inline-options/dir15/json/array.json new file mode 100644 index 00000000000..eac5f7b46e0 --- /dev/null +++ b/test/cases/chunks/inline-options/dir15/json/array.json @@ -0,0 +1 @@ +["a"] \ No newline at end of file diff --git a/test/cases/chunks/inline-options/dir15/json/object.json b/test/cases/chunks/inline-options/dir15/json/object.json new file mode 100644 index 00000000000..cb5b2f69bab --- /dev/null +++ b/test/cases/chunks/inline-options/dir15/json/object.json @@ -0,0 +1 @@ +{"a": 1} diff --git a/test/cases/chunks/inline-options/dir15/json/primitive.json b/test/cases/chunks/inline-options/dir15/json/primitive.json new file mode 100644 index 00000000000..231f150c579 --- /dev/null +++ b/test/cases/chunks/inline-options/dir15/json/primitive.json @@ -0,0 +1 @@ +"a" diff --git a/test/cases/chunks/inline-options/dir16/a.js b/test/cases/chunks/inline-options/dir16/a.js new file mode 100644 index 00000000000..59aa6ffd125 --- /dev/null +++ b/test/cases/chunks/inline-options/dir16/a.js @@ -0,0 +1,2 @@ +exports.a = 1; +exports.b = 2; diff --git a/test/cases/chunks/inline-options/dir16/json/array.json b/test/cases/chunks/inline-options/dir16/json/array.json new file mode 100644 index 00000000000..eac5f7b46e0 --- /dev/null +++ b/test/cases/chunks/inline-options/dir16/json/array.json @@ -0,0 +1 @@ +["a"] \ No newline at end of file diff --git a/test/cases/chunks/inline-options/dir16/json/object.json b/test/cases/chunks/inline-options/dir16/json/object.json new file mode 100644 index 00000000000..cb5b2f69bab --- /dev/null +++ b/test/cases/chunks/inline-options/dir16/json/object.json @@ -0,0 +1 @@ +{"a": 1} diff --git a/test/cases/chunks/inline-options/dir16/json/primitive.json b/test/cases/chunks/inline-options/dir16/json/primitive.json new file mode 100644 index 00000000000..231f150c579 --- /dev/null +++ b/test/cases/chunks/inline-options/dir16/json/primitive.json @@ -0,0 +1 @@ +"a" diff --git a/test/cases/chunks/inline-options/index.js b/test/cases/chunks/inline-options/index.js index 23c60da711a..a76b140c42a 100644 --- a/test/cases/chunks/inline-options/index.js +++ b/test/cases/chunks/inline-options/index.js @@ -1,48 +1,56 @@ -it("should be able to use eager mode", function() { +it("should be able to use eager mode", function () { function load(name) { return import(/* webpackMode: "eager" */ "./dir1/" + name); } return testChunkLoading(load, true, true); }); -it("should be able to use lazy-once mode", function() { +it("should be able to use lazy-once mode", function () { function load(name) { return import(/* webpackMode: "lazy-once" */ "./dir2/" + name); } return testChunkLoading(load, false, true); }); -it("should be able to use lazy-once mode with name", function() { +it("should be able to use lazy-once mode with name", function () { function load(name) { - return import(/* webpackMode: "lazy-once", webpackChunkName: "name-lazy-once" */ "./dir3/" + name); + return import( + /* webpackMode: "lazy-once", webpackChunkName: "name-lazy-once" */ "./dir3/" + + name + ); } return testChunkLoading(load, false, true); }); -it("should be able to use lazy mode", function() { +it("should be able to use lazy mode", function () { function load(name) { return import(/* webpackMode: "lazy" */ "./dir4/" + name); } return testChunkLoading(load, false, false); }); -it("should be able to use lazy mode with name", function() { +it("should be able to use lazy mode with name", function () { function load(name) { - return import(/* webpackMode: "lazy", webpackChunkName: "name-lazy" */ "./dir5/" + name); + return import( + /* webpackMode: "lazy", webpackChunkName: "name-lazy" */ "./dir5/" + name + ); } return testChunkLoading(load, false, false); }); -it("should be able to use lazy mode with name and placeholder", function() { +it("should be able to use lazy mode with name and placeholder", function () { function load(name) { - return import(/* webpackMode: "lazy", webpackChunkName: "name-lazy-[request]" */ "./dir6/" + name); + return import( + /* webpackMode: "lazy", webpackChunkName: "name-lazy-[request]" */ "./dir6/" + + name + ); } return testChunkLoading(load, false, false); }); -it("should be able to combine chunks by name", function() { +it("should be able to combine chunks by name", function () { function load(name) { - switch(name) { + switch (name) { case "a": return import(/* webpackMode: "eager" */ "./dir7/a"); case "b": @@ -52,25 +60,25 @@ it("should be able to combine chunks by name", function() { case "d": return import(/* webpackChunkName: "name-3" */ "./dir7/d"); default: - throw new Error("Unexcepted test data"); + throw new Error("Unexpected test data"); } } return testChunkLoading(load, false, true); }); -it("should be able to use weak mode", function() { +it("should be able to use weak mode", function () { function load(name) { return import(/* webpackMode: "weak" */ "./dir8/" + name); } - require("./dir8/a") // chunks served manually by the user - require("./dir8/b") - require("./dir8/c") + require("./dir8/a"); // chunks served manually by the user + require("./dir8/b"); + require("./dir8/c"); return testChunkLoading(load, true, true); }); -it("should be able to use weak mode (without context)", function() { +it("should be able to use weak mode (without context)", function () { function load(name) { - switch(name) { + switch (name) { case "a": return import(/* webpackMode: "weak" */ "./dir9/a"); case "b": @@ -78,59 +86,181 @@ it("should be able to use weak mode (without context)", function() { case "c": return import(/* webpackMode: "weak" */ "./dir9/c"); default: - throw new Error("Unexcepted test data"); + throw new Error("Unexpected test data"); } } - require("./dir9/a") // chunks served manually by the user - require("./dir9/b") - require("./dir9/c") + require("./dir9/a"); // chunks served manually by the user + require("./dir9/b"); + require("./dir9/c"); return testChunkLoading(load, true, true); }); -it("should not find module when mode is weak and chunk not served elsewhere", function() { +it("should not find module when mode is weak and chunk not served elsewhere", function () { var name = "a"; - return import(/* webpackMode: "weak" */ "./dir10/" + name) - .catch(function(e) { - expect(e).toMatchObject({ message: /not available/, code: /MODULE_NOT_FOUND/ }); + return import(/* webpackMode: "weak" */ "./dir10/" + name).catch(function ( + e + ) { + expect(e).toMatchObject({ + message: /not available/, + code: /MODULE_NOT_FOUND/ }); + }); }); -it("should not find module when mode is weak and chunk not served elsewhere (without context)", function() { - return import(/* webpackMode: "weak" */ "./dir11/a") - .catch(function(e) { - expect(e).toMatchObject({ message: /not available/, code: /MODULE_NOT_FOUND/ }); +it("should not find module when mode is weak and chunk not served elsewhere (without context)", function () { + return import(/* webpackMode: "weak" */ "./dir11/a").catch(function (e) { + expect(e).toMatchObject({ + message: /not available/, + code: /MODULE_NOT_FOUND/ }); + }); }); +if (process.env.NODE_ENV === "production") { + it("should contain only one export from webpackExports from module", function () { + return import(/* webpackExports: "usedExports" */ "./dir12/a?1").then( + module => { + expect(module.usedExports).toEqual(["usedExports"]); + } + ); + }); + + it("should contain only webpackExports from module", function () { + return import( + /* webpackExports: ["usedExports"] */ "./dir12/a?2" + ).then(module => { + expect(module.usedExports).toEqual(["usedExports"]); + }); + }); + + it("should contain only webpackExports from module in eager mode", function () { + return import( + /* + webpackMode: "eager", + webpackExports: ["usedExports"] + */ "./dir12/a?3" + ).then(module => { + expect(module.usedExports).toEqual(["usedExports"]); + }); + }); + + it("should contain webpackExports from module in weak mode", function () { + require.resolve("./dir12/a?4"); + return import( + /* + webpackMode: "weak", + webpackExports: ["usedExports"] + */ "./dir12/a?4" + ).then(module => { + expect(module.usedExports).toEqual(["usedExports"]); + }); + }); + + it("should not mangle webpackExports from module", function () { + return import(/* webpackExports: "longnameforexport" */ "./dir12/a?5").then( + module => { + expect(module).toHaveProperty("longnameforexport"); + } + ); + }); + + it("should not mangle default webpackExports from module", function () { + return import(/* webpackExports: "default" */ "./dir12/a?6").then( + module => { + expect(module).toHaveProperty("default"); + } + ); + }); + + it("should contain only webpackExports from module in context mode", function () { + const x = "b"; + return import(/* webpackExports: "usedExports" */ `./dir13/${x}`).then( + module => { + expect(module.usedExports).toEqual(["usedExports"]); + } + ); + }); + + it("should be able to load with webpackFetchPriority high, low and auto", function () { + return Promise.all([ + import(/* webpackFetchPriority: "high"*/ "./dir14/a"), + import(/* webpackFetchPriority: "low"*/ "./dir14/b"), + import(/* webpackFetchPriority: "auto"*/ "./dir14/c"), + ]) + }) + + it("should not tree-shake default export for exportsType=default module", async function () { + const jsonObject = await import(/* webpackExports: ["default"] */ "./dir15/json/object.json"); + const jsonArray = await import(/* webpackExports: ["default"] */ "./dir15/json/array.json"); + const jsonPrimitive = await import(/* webpackExports: ["default"] */ "./dir15/json/primitive.json"); + expect(jsonObject.default).toEqual({ a: 1 }); + expect(jsonObject.a).toEqual(1); + expect(jsonArray.default).toEqual(["a"]); + expect(jsonArray[0]).toBe("a"); + expect(jsonPrimitive.default).toBe("a"); + const a = await import(/* webpackExports: ["default"] */"./dir15/a"); + expect(a.default).toEqual({ a: 1, b: 2 }); + expect(a.a).toBe(1); + expect(a.b).toBe(2); + }) + + it("should not tree-shake default export for exportsType=default context module", async function () { + const dir = "json"; + const jsonObject = await import(/* webpackExports: ["default"] */ `./dir16/${dir}/object.json`); + const jsonArray = await import(/* webpackExports: ["default"] */ `./dir16/${dir}/array.json`); + const jsonPrimitive = await import(/* webpackExports: ["default"] */ `./dir16/${dir}/primitive.json`); + expect(jsonObject.default).toEqual({ a: 1 }); + expect(jsonObject.a).toEqual(1); + expect(jsonArray.default).toEqual(["a"]); + expect(jsonArray[0]).toBe("a"); + expect(jsonPrimitive.default).toBe("a"); + const file = "a"; + const a = await import(/* webpackExports: ["default"] */`./dir16/${file}`); + expect(a.default).toEqual({ a: 1, b: 2 }); + expect(a.a).toBe(1); + expect(a.b).toBe(2); + }) +} + function testChunkLoading(load, expectedSyncInitial, expectedSyncRequested) { var sync = false; var syncInitial = true; - var p = Promise.all([load("a"), load("b")]).then(function() { + var p = Promise.all([load("a"), load("b")]).then(function () { expect(syncInitial).toBe(expectedSyncInitial); sync = true; var p = Promise.all([ - load("a").then(function(a) { - expect(a).toEqual({ - default: "a", - [Symbol.toStringTag]: "Module" - }); + load("a").then(function (a) { + expect(a).toEqual( + nsObj({ + default: "a" + }) + ); expect(sync).toBe(true); }), - load("c").then(function(c) { - expect(c).toEqual({ - default: "c", - [Symbol.toStringTag]: "Module" - }); + load("c").then(function (c) { + expect(c).toEqual( + nsObj({ + default: "c" + }) + ); expect(sync).toBe(expectedSyncRequested); }) ]); - Promise.resolve().then(function(){}).then(function(){}).then(function(){}).then(function(){ - sync = false; - }); + Promise.resolve() + .then(function () {}) + .then(function () {}) + .then(function () {}) + .then(function () { + sync = false; + }); return p; }); - Promise.resolve().then(function(){}).then(function(){}).then(function(){}).then(function(){ - syncInitial = false; - }); + Promise.resolve() + .then(function () {}) + .then(function () {}) + .then(function () {}) + .then(function () { + syncInitial = false; + }); return p; } diff --git a/test/cases/chunks/inline-options/warnings.js b/test/cases/chunks/inline-options/warnings.js new file mode 100644 index 00000000000..75e3b1ed17d --- /dev/null +++ b/test/cases/chunks/inline-options/warnings.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = (options) => { + if (options.mode === "development") { + return []; + } + return Array.from({ length: 15 }).fill( + /You don't need `webpackExports` if the usage of dynamic import is statically analyse-able/ + ); +}; diff --git a/test/cases/chunks/issue-2443/index.js b/test/cases/chunks/issue-2443/index.js index 76388fef631..a56f564cb3a 100644 --- a/test/cases/chunks/issue-2443/index.js +++ b/test/cases/chunks/issue-2443/index.js @@ -1,16 +1,19 @@ it("should be able to use expressions in import (directory)", function(done) { function load(name, expected, callback) { - import("./dir/" + name + "/file.js").then(function(result) { - expect(result).toEqual({ - default: expected, - [Symbol.toStringTag]: "Module" + import("./dir/" + name + "/file.js") + .then(function(result) { + expect(result).toEqual( + nsObj({ + default: expected + }) + ); + callback(); + }) + .catch(function(err) { + done(err); }); - callback(); - }).catch(function(err) { - done(err); - }); } - require.include("./dir/three/file"); + if (Math.random() < 0) require("./dir/three/file"); load("one", 1, function() { load("two", 2, function() { load("three", 3, function() { diff --git a/test/cases/chunks/mixing-async-apis/index.js b/test/cases/chunks/mixing-async-apis/index.js new file mode 100644 index 00000000000..399bfd92d1a --- /dev/null +++ b/test/cases/chunks/mixing-async-apis/index.js @@ -0,0 +1,22 @@ +it("should handle mixed async blocks correctly (import and require.ensure)", function(done) { + let count = 0; + function next() { + count++; + if (count === 2) done(); + } + + import(/* webpackChunkName: "shared-async-block" */ "./module-a").then(moduleA => { + expect(moduleA.default).toBe("a"); + next(); + }).catch(done); + + require.ensure(["./module-b"], function(require) { + try { + const moduleB = require("./module-b"); + expect(moduleB).toBe("b"); + next(); + } catch (e) { + done(e); + } + }, "shared-async-block"); +}); diff --git a/test/cases/chunks/mixing-async-apis/module-a.js b/test/cases/chunks/mixing-async-apis/module-a.js new file mode 100644 index 00000000000..e94fef18587 --- /dev/null +++ b/test/cases/chunks/mixing-async-apis/module-a.js @@ -0,0 +1 @@ +export default "a"; diff --git a/test/configCases/context-replacement/System.import/modules/module-b.js b/test/cases/chunks/mixing-async-apis/module-b.js similarity index 100% rename from test/configCases/context-replacement/System.import/modules/module-b.js rename to test/cases/chunks/mixing-async-apis/module-b.js diff --git a/test/cases/chunks/named-chunks/index.js b/test/cases/chunks/named-chunks/index.js index 1897b9a0b6b..0f3bad6211d 100644 --- a/test/cases/chunks/named-chunks/index.js +++ b/test/cases/chunks/named-chunks/index.js @@ -94,6 +94,7 @@ it("should be able to use named chunks in import()", function(done) { }); it("should be able to use named chunk in context import()", function(done) { + // cspell:ignore mpty var mpty = "mpty"; var sync = false; import("./e" + mpty + "2" /* webpackChunkName: "context-named-chunk" */).then(function(result) { diff --git a/test/configCases/plugins/define-plugin/a.js b/test/cases/chunks/nested-in-empty/a.js similarity index 100% rename from test/configCases/plugins/define-plugin/a.js rename to test/cases/chunks/nested-in-empty/a.js diff --git a/test/cases/chunks/nested-in-empty/b.js b/test/cases/chunks/nested-in-empty/b.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/cases/chunks/nested-in-empty/b.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/cases/chunks/nested-in-empty/index.js b/test/cases/chunks/nested-in-empty/index.js new file mode 100644 index 00000000000..968e02795ca --- /dev/null +++ b/test/cases/chunks/nested-in-empty/index.js @@ -0,0 +1,13 @@ +it("should include a chunk nested in an empty chunk", (done) => { + require.ensure(["./a"], () => { + require.ensure([], () => { + require.ensure(["./a"], () => { + require.ensure([], () => { + const b = require("./b"); + expect(b).toBe(42); + done(); + }); + }); + }); + }); +}); diff --git a/test/cases/chunks/parsing/index.js b/test/cases/chunks/parsing/index.js index f3a376a5b27..77aee71f6ef 100644 --- a/test/cases/chunks/parsing/index.js +++ b/test/cases/chunks/parsing/index.js @@ -1,13 +1,19 @@ it("should handle bound function expressions", function(done) { - require.ensure([], function(require) { - expect(this).toEqual({ test: true }); - require("./empty?test"); - expect(process.nextTick).toBeTypeOf("function"); // check if injection still works - require.ensure([], function(require) { + require.ensure( + [], + function(require) { expect(this).toEqual({ test: true }); - done(); - }.bind(this)); - }.bind({test: true})); + require("./empty?test"); + expect(process.nextTick).toBeTypeOf("function"); // check if injection still works + require.ensure( + [], + function(require) { + expect(this).toEqual({ test: true }); + done(); + }.bind(this) + ); + }.bind({ test: true }) + ); }); it("should handle require.ensure without function expression", function(done) { @@ -18,16 +24,19 @@ it("should handle require.ensure without function expression", function(done) { }); it("should parse expression in require.ensure, which isn't a function expression", function(done) { - require.ensure([], (function() { - expect(require("./empty?require.ensure:test")).toEqual({}); - return function f() { - done(); - }; - }())); + require.ensure( + [], + (function() { + expect(require("./empty?require.ensure:test")).toEqual({}); + return function f() { + done(); + }; + })() + ); }); -it("should accept a require.include call", function(done) { - require.include("./require.include"); +it("should accept an already included module", function(done) { + if (Math.random() < 0) require("./require.include"); var value = null; require.ensure([], function(require) { value = require("./require.include"); diff --git a/test/cases/chunks/runtime/test.filter.js b/test/cases/chunks/runtime/test.filter.js index 3ed2e8ae961..1a40a4d9363 100644 --- a/test/cases/chunks/runtime/test.filter.js +++ b/test/cases/chunks/runtime/test.filter.js @@ -1,4 +1,5 @@ -module.exports = function(config) { +"use strict"; + +module.exports = (config) => // This test can't run in development mode as it depends on the flagIncludedChunks optimization - return config.mode !== "development"; -}; + config.mode !== "development"; diff --git a/test/cases/chunks/runtime/webpack.config.js b/test/cases/chunks/runtime/webpack.config.js new file mode 100644 index 00000000000..3f5135038e2 --- /dev/null +++ b/test/cases/chunks/runtime/webpack.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + optimization: { + moduleIds: "named" + } +}; diff --git a/test/cases/chunks/statical-dynamic-import-destructuring/index.js b/test/cases/chunks/statical-dynamic-import-destructuring/index.js new file mode 100644 index 00000000000..e8b81d54b3b --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-destructuring/index.js @@ -0,0 +1,51 @@ +it("should load only used exports", async (done) => { + const { default: def, usedExports } = await import("../statical-dynamic-import/dir1/a"); + expect(def).toBe(3); + expect(usedExports).toEqual(["default", "usedExports"]); + done(); +}); + +it("should get warning on using 'webpackExports' with destructuring assignment", async (done) => { + const { default: def } = await import(/* webpackExports: ["a"] */"../statical-dynamic-import/dir1/a?2"); + expect(def).toBe(3); + done(); +}); + +it("should not tree-shake default export for exportsType=default module", async () => { + const { default: object } = await import("../statical-dynamic-import/dir2/json/object.json"); + const { default: array } = await import("../statical-dynamic-import/dir2/json/array.json"); + const { default: primitive } = await import("../statical-dynamic-import/dir2/json/primitive.json"); + expect(object).toEqual({ a: 1 }); + expect(array).toEqual(["a"]); + expect(primitive).toBe("a"); + const { default: a } = await import("../statical-dynamic-import/dir2/a"); + expect(a).toEqual({ a: 1, b: 2 }); +}); + +it("should not tree-shake default export for exportsType=default context module", async () => { + const dir = "json"; + const { default: object } = await import(`../statical-dynamic-import/dir3/${dir}/object.json`); + const { default: array } = await import(`../statical-dynamic-import/dir3/${dir}/array.json`); + const { default: primitive } = await import(`../statical-dynamic-import/dir3/${dir}/primitive.json`); + expect(object).toEqual({ a: 1 }); + expect(array).toEqual(["a"]); + expect(primitive).toBe("a"); + const file = "a"; + const { default: a } = await import(`../statical-dynamic-import/dir3/${file}`); + expect(a).toEqual({ a: 1, b: 2 }); +}); + +it("should static analyze dynamic import variable destructuring assignment", async () => { + const m = await import("../statical-dynamic-import/dir1/a?3"); + const { default: def, usedExports } = m; + expect(def).toBe(3); + expect(usedExports).toEqual(["default", "usedExports"]); +}); + +it("expect support of \"deep\" tree-shaking for destructuring assignment dynamic import", async () => { + const { a: { aaa, usedExports: usedExportsA }, b: { bbb, usedExports: usedExportsB } } = await import("./lib"); + expect(aaa).toBe(1); + expect(bbb).toBe(2); + expect(usedExportsA).toEqual(["aaa", "usedExports"]); + expect(usedExportsB).toEqual(["bbb", "usedExports"]); +}); diff --git a/test/cases/chunks/statical-dynamic-import-destructuring/lib/a.js b/test/cases/chunks/statical-dynamic-import-destructuring/lib/a.js new file mode 100644 index 00000000000..be2371eb888 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-destructuring/lib/a.js @@ -0,0 +1,3 @@ +export const aaa = 1; +export const bbb = 2; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import-destructuring/lib/b.js b/test/cases/chunks/statical-dynamic-import-destructuring/lib/b.js new file mode 100644 index 00000000000..be2371eb888 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-destructuring/lib/b.js @@ -0,0 +1,3 @@ +export const aaa = 1; +export const bbb = 2; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import-destructuring/lib/index.js b/test/cases/chunks/statical-dynamic-import-destructuring/lib/index.js new file mode 100644 index 00000000000..7e91e873191 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-destructuring/lib/index.js @@ -0,0 +1,2 @@ +export * as a from "./a"; +export * as b from "./b"; diff --git a/test/cases/chunks/statical-dynamic-import-destructuring/test.filter.js b/test/cases/chunks/statical-dynamic-import-destructuring/test.filter.js new file mode 100644 index 00000000000..a8a402b15cf --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-destructuring/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function filter(config) { + // This test can't run in development mode + return config.mode !== "development"; +}; diff --git a/test/cases/chunks/statical-dynamic-import-destructuring/warnings.js b/test/cases/chunks/statical-dynamic-import-destructuring/warnings.js new file mode 100644 index 00000000000..fc07af60c16 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-destructuring/warnings.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /You don't need `webpackExports` if the usage of dynamic import is statically analyse-able/ +]; diff --git a/test/cases/chunks/statical-dynamic-import-then-destructuring/dir1/a.js b/test/cases/chunks/statical-dynamic-import-then-destructuring/dir1/a.js new file mode 100644 index 00000000000..ce622ee6530 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then-destructuring/dir1/a.js @@ -0,0 +1,3 @@ +export const a = 1; +export default 3; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import-then-destructuring/index.js b/test/cases/chunks/statical-dynamic-import-then-destructuring/index.js new file mode 100644 index 00000000000..227403983e9 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then-destructuring/index.js @@ -0,0 +1,88 @@ +it("should load only used exports", async () => { + await import("../statical-dynamic-import/dir1/a").then(({ default: defaultValue, usedExports }) => { + expect(defaultValue).toBe(3); + expect(usedExports).toEqual(["default", "usedExports"]); + }) +}); + +it("should get warning on using 'webpackExports' with statically analyze-able dynamic import", async () => { + await import(/* webpackExports: ["default"] */"../statical-dynamic-import/dir1/a?2").then(({ a }) => { + expect(a).toBe(1); + }) +}); + +it("should not tree-shake default export for exportsType=default module", async () => { + await import("../statical-dynamic-import/dir2/json/object.json").then(({ default: defaultValue }) => { + expect(defaultValue).toEqual({ a: 1 }); + }); + await import("../statical-dynamic-import/dir2/json/array.json").then(({ default: defaultValue }) => { + expect(defaultValue).toEqual(["a"]); + }); + await import("../statical-dynamic-import/dir2/json/primitive.json").then(({ default: defaultValue }) => { + expect(defaultValue).toBe("a"); + }); + await import("../statical-dynamic-import/dir2/a").then(({ default: defaultValue }) => { + expect(defaultValue).toEqual({ a: 1, b: 2 }); + }); +}); + +it("should not tree-shake default export for exportsType=default context module", async () => { + const dir = "json"; + await import(`../statical-dynamic-import/dir3/${dir}/object.json`).then(({ default: defaultValue }) => { + expect(defaultValue).toEqual({ a: 1 }); + }); + await import(`../statical-dynamic-import/dir3/${dir}/array.json`).then(({ default: defaultValue }) => { + expect(defaultValue).toEqual(["a"]); + }); + await import(`../statical-dynamic-import/dir3/${dir}/primitive.json`).then(({ default: defaultValue }) => { + expect(defaultValue).toBe("a"); + }); + const file = "a"; + await import(`../statical-dynamic-import/dir3/${file}`).then(({ default: defaultValue }) => { + expect(defaultValue).toEqual({ a: 1, b: 2 }); + }); +}); + +it("should walk with correct order", async () => { + var r; + await import(`./dir1/a${r = require, ".js"}`).then(({ a, usedExports }) => { + expect(r("./required").value).toBe(42); + expect(a).toBe(1); + expect(usedExports).toEqual(["a", "usedExports"]); + }); +}); + +it("should analyze arguments in call member chain", async () => { + await import("../statical-dynamic-import/dir4/lib?2").then(({ b }) => { + b.f((async () => { + await import("../statical-dynamic-import/dir4/a?2").then(({ a, usedExports }) => { + expect(a).toBe(1); + expect(usedExports).toEqual(["a", "usedExports"]); + }); + })()); + }); +}); + +it("should static analyze dynamic import variable destructuring assignment", async () => { + await import("../statical-dynamic-import/dir1/a?3").then(m => { + const { default: def, usedExports } = m; + expect(def).toBe(3); + expect(usedExports).toEqual(["default", "usedExports"]); + }); +}); + +it("expect support of \"deep\" tree-shaking for destructuring assignment dynamic import", async () => { + await import("../statical-dynamic-import-destructuring/lib").then(({ a: { aaa, usedExports: usedExportsA }, b: { bbb, usedExports: usedExportsB } }) => { + expect(aaa).toBe(1); + expect(bbb).toBe(2); + expect(usedExportsA).toEqual(["aaa", "usedExports"]); + expect(usedExportsB).toEqual(["bbb", "usedExports"]); + }); + await import("../statical-dynamic-import-destructuring/lib?2").then(m => { + const { a: { aaa, usedExports: usedExportsA }, b: { bbb, usedExports: usedExportsB } } = m; + expect(aaa).toBe(1); + expect(bbb).toBe(2); + expect(usedExportsA).toEqual(["aaa", "usedExports"]); + expect(usedExportsB).toEqual(["bbb", "usedExports"]); + }); +}); diff --git a/test/cases/chunks/statical-dynamic-import-then-destructuring/required.js b/test/cases/chunks/statical-dynamic-import-then-destructuring/required.js new file mode 100644 index 00000000000..f16abdc55b3 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then-destructuring/required.js @@ -0,0 +1 @@ +exports.value = 42; diff --git a/test/cases/chunks/statical-dynamic-import-then-destructuring/test.filter.js b/test/cases/chunks/statical-dynamic-import-then-destructuring/test.filter.js new file mode 100644 index 00000000000..a8a402b15cf --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then-destructuring/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function filter(config) { + // This test can't run in development mode + return config.mode !== "development"; +}; diff --git a/test/cases/chunks/statical-dynamic-import-then-destructuring/warnings.js b/test/cases/chunks/statical-dynamic-import-then-destructuring/warnings.js new file mode 100644 index 00000000000..fc07af60c16 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then-destructuring/warnings.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /You don't need `webpackExports` if the usage of dynamic import is statically analyse-able/ +]; diff --git a/test/cases/chunks/statical-dynamic-import-then/dir1/a.js b/test/cases/chunks/statical-dynamic-import-then/dir1/a.js new file mode 100644 index 00000000000..ce622ee6530 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then/dir1/a.js @@ -0,0 +1,3 @@ +export const a = 1; +export default 3; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import-then/index.js b/test/cases/chunks/statical-dynamic-import-then/index.js new file mode 100644 index 00000000000..9dfb079893e --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then/index.js @@ -0,0 +1,93 @@ +it("should load only used exports", async () => { + await import("../statical-dynamic-import/dir1/a").then(m => { + expect(m.default).toBe(3); + expect(m.usedExports).toEqual(["default", "usedExports"]); + }) +}); + +it("should get warning on using 'webpackExports' with statically analyze-able dynamic import", async () => { + await import(/* webpackExports: ["default"] */"../statical-dynamic-import/dir1/a?2").then(m => { + expect(m.a).toBe(1); + }) +}); + +it("should not tree-shake default export for exportsType=default module", async () => { + await import("../statical-dynamic-import/dir2/json/object.json").then(m1 => { + expect(m1.default).toEqual({ a: 1 }); + }); + await import("../statical-dynamic-import/dir2/json/array.json").then(m2 => { + expect(m2.default).toEqual(["a"]); + }); + await import("../statical-dynamic-import/dir2/json/primitive.json").then(m3 => { + expect(m3.default).toBe("a"); + }); + await import("../statical-dynamic-import/dir2/a").then(m4 => { + expect(m4.default).toEqual({ a: 1, b: 2 }); + }); +}); + +it("should not tree-shake default export for exportsType=default context module", async () => { + const dir = "json"; + await import(`../statical-dynamic-import/dir3/${dir}/object.json`).then(m1 => { + expect(m1.default).toEqual({ a: 1 }); + }); + await import(`../statical-dynamic-import/dir3/${dir}/array.json`).then(m2 => { + expect(m2.default).toEqual(["a"]); + }); + await import(`../statical-dynamic-import/dir3/${dir}/primitive.json`).then(m3 => { + expect(m3.default).toBe("a"); + }); + const file = "a"; + await import(`../statical-dynamic-import/dir3/${file}`).then(m4 => { + expect(m4.default).toEqual({ a: 1, b: 2 }); + }); +}); + +it("should not tree-shake if reassigin", async () => { + await import("../statical-dynamic-import/dir1/a?3").then(m => { + expect(m.default).toBe(3); + expect(m.usedExports).toBe(true); + m = {}; + }); +}) + +it("should tree-shake if its member call and strictThisContextOnImports is false", async () => { + await import("../statical-dynamic-import/dir4/a").then(m => { + expect(m.f()).toBe(undefined); + expect(m.usedExports).toEqual(["f", "usedExports"]); + }); + await import("../statical-dynamic-import/dir4/lib").then(m2 => { + expect(m2.b.f()).toBe(1); + expect(m2.b.usedExports).toEqual(true); + expect(m2.usedExports).toEqual(["b", "usedExports"]); + }); +}) + +it("should walk with correct order", async () => { + var r; + await import(`./dir1/a${r = require, ".js"}`).then(m => { + expect(r("./required").value).toBe(42); + expect(m.a).toBe(1); + expect(m.usedExports).toEqual(["a", "usedExports"]); + }); +}); + +it("should analyze arguments in call member chain", async () => { + await import("../statical-dynamic-import/dir4/lib?2").then(m => { + m.b.f((async () => { + await import("../statical-dynamic-import/dir4/a?2").then(m2 => { + expect(m2.a).toBe(1); + expect(m2.usedExports).toEqual(["a", "usedExports"]); + }); + })()); + }); +}); + +it("should analyze then arguments", async () => { + await import("../statical-dynamic-import/dir4/lib?3").then(() => { + return import("../statical-dynamic-import/dir4/a?3").then(m2 => { + expect(m2.a).toBe(1); + expect(m2.usedExports).toEqual(["a", "usedExports"]); + }); + }); +}) diff --git a/test/cases/chunks/statical-dynamic-import-then/required.js b/test/cases/chunks/statical-dynamic-import-then/required.js new file mode 100644 index 00000000000..f16abdc55b3 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then/required.js @@ -0,0 +1 @@ +exports.value = 42; diff --git a/test/cases/chunks/statical-dynamic-import-then/test.filter.js b/test/cases/chunks/statical-dynamic-import-then/test.filter.js new file mode 100644 index 00000000000..a8a402b15cf --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function filter(config) { + // This test can't run in development mode + return config.mode !== "development"; +}; diff --git a/test/cases/chunks/statical-dynamic-import-then/warnings.js b/test/cases/chunks/statical-dynamic-import-then/warnings.js new file mode 100644 index 00000000000..fc07af60c16 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import-then/warnings.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /You don't need `webpackExports` if the usage of dynamic import is statically analyse-able/ +]; diff --git a/test/cases/chunks/statical-dynamic-import/dir1/a.js b/test/cases/chunks/statical-dynamic-import/dir1/a.js new file mode 100644 index 00000000000..ce622ee6530 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir1/a.js @@ -0,0 +1,3 @@ +export const a = 1; +export default 3; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import/dir2/a.js b/test/cases/chunks/statical-dynamic-import/dir2/a.js new file mode 100644 index 00000000000..59aa6ffd125 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir2/a.js @@ -0,0 +1,2 @@ +exports.a = 1; +exports.b = 2; diff --git a/test/cases/chunks/statical-dynamic-import/dir2/json/array.json b/test/cases/chunks/statical-dynamic-import/dir2/json/array.json new file mode 100644 index 00000000000..eac5f7b46e0 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir2/json/array.json @@ -0,0 +1 @@ +["a"] \ No newline at end of file diff --git a/test/cases/chunks/statical-dynamic-import/dir2/json/object.json b/test/cases/chunks/statical-dynamic-import/dir2/json/object.json new file mode 100644 index 00000000000..cb5b2f69bab --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir2/json/object.json @@ -0,0 +1 @@ +{"a": 1} diff --git a/test/cases/chunks/statical-dynamic-import/dir2/json/primitive.json b/test/cases/chunks/statical-dynamic-import/dir2/json/primitive.json new file mode 100644 index 00000000000..231f150c579 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir2/json/primitive.json @@ -0,0 +1 @@ +"a" diff --git a/test/cases/chunks/statical-dynamic-import/dir3/a.js b/test/cases/chunks/statical-dynamic-import/dir3/a.js new file mode 100644 index 00000000000..59aa6ffd125 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir3/a.js @@ -0,0 +1,2 @@ +exports.a = 1; +exports.b = 2; diff --git a/test/cases/chunks/statical-dynamic-import/dir3/json/array.json b/test/cases/chunks/statical-dynamic-import/dir3/json/array.json new file mode 100644 index 00000000000..eac5f7b46e0 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir3/json/array.json @@ -0,0 +1 @@ +["a"] \ No newline at end of file diff --git a/test/cases/chunks/statical-dynamic-import/dir3/json/object.json b/test/cases/chunks/statical-dynamic-import/dir3/json/object.json new file mode 100644 index 00000000000..cb5b2f69bab --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir3/json/object.json @@ -0,0 +1 @@ +{"a": 1} diff --git a/test/cases/chunks/statical-dynamic-import/dir3/json/primitive.json b/test/cases/chunks/statical-dynamic-import/dir3/json/primitive.json new file mode 100644 index 00000000000..231f150c579 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir3/json/primitive.json @@ -0,0 +1 @@ +"a" diff --git a/test/cases/chunks/statical-dynamic-import/dir4/a.js b/test/cases/chunks/statical-dynamic-import/dir4/a.js new file mode 100644 index 00000000000..593fac19afd --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir4/a.js @@ -0,0 +1,5 @@ +export const a = 1; +export function f() { + return this.a; +} +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import/dir4/lib/a.js b/test/cases/chunks/statical-dynamic-import/dir4/lib/a.js new file mode 100644 index 00000000000..7761ba96824 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir4/lib/a.js @@ -0,0 +1,2 @@ +export const a = 1; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import/dir4/lib/b.js b/test/cases/chunks/statical-dynamic-import/dir4/lib/b.js new file mode 100644 index 00000000000..a298658c672 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir4/lib/b.js @@ -0,0 +1,5 @@ +export function f() { + return 1; +} +export const b = 2; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import/dir4/lib/index.js b/test/cases/chunks/statical-dynamic-import/dir4/lib/index.js new file mode 100644 index 00000000000..2d57f3a8e34 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/dir4/lib/index.js @@ -0,0 +1,4 @@ +export * as a from "./a"; +export * as b from "./b"; + +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/chunks/statical-dynamic-import/index.js b/test/cases/chunks/statical-dynamic-import/index.js new file mode 100644 index 00000000000..1d873a86699 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/index.js @@ -0,0 +1,72 @@ +it("should load only used exports", async (done) => { + const m = await import("./dir1/a"); + expect(m.default).toBe(3); + expect(m.usedExports).toEqual(["default", "usedExports"]); + done(); +}); + +it("should get warning on using 'webpackExports' with statically analyze-able dynamic import", async (done) => { + const m = await import(/* webpackExports: ["default"] */"./dir1/a?2"); + expect(m.a).toBe(1); + done(); +}); + +it("should not tree-shake default export for exportsType=default module", async () => { + const m1 = await import("./dir2/json/object.json"); + const m2 = await import("./dir2/json/array.json"); + const m3 = await import("./dir2/json/primitive.json"); + expect(m1.default).toEqual({ a: 1 }); + expect(m2.default).toEqual(["a"]); + expect(m3.default).toBe("a"); + const m4 = await import("./dir2/a"); + expect(m4.default).toEqual({ a: 1, b: 2 }); +}); + +it("should not tree-shake default export for exportsType=default context module", async () => { + const dir = "json"; + const m1 = await import(`./dir3/${dir}/object.json`); + const m2 = await import(`./dir3/${dir}/array.json`); + const m3 = await import(`./dir3/${dir}/primitive.json`); + expect(m1.default).toEqual({ a: 1 }); + expect(m2.default).toEqual(["a"]); + expect(m3.default).toBe("a"); + const file = "a"; + const m4 = await import(`./dir3/${file}`); + expect(m4.default).toEqual({ a: 1, b: 2 }); +}); + +it("should not tree-shake if reassigin", async () => { + let m = await import("./dir1/a?3"); + expect(m.default).toBe(3); + expect(m.usedExports).toBe(true); + m = {}; +}) + +it("should tree-shake if its member call and strictThisContextOnImports is false", async () => { + let m = await import("./dir4/a"); + expect(m.f()).toBe(undefined); + expect(m.usedExports).toEqual(["f", "usedExports"]); + let m2 = await import("./dir4/lib"); + expect(m2.b.f()).toBe(1); + expect(m2.b.usedExports).toEqual(true); + expect(m2.usedExports).toEqual(["b", "usedExports"]); +}) + +it("should analyze arguments in call member chain", async () => { + let m = await import("./dir4/lib?2"); + m.b.f((async () => { + let m2 = await import("./dir4/a?2"); + expect(m2.a).toBe(1); + expect(m2.usedExports).toEqual(["a", "usedExports"]); + })()); +}) + +it("should analyze usage of variable that in correct scope", async () => { + var m = { b: 1 }; + expect(m.b).toBe(1); + await (async () => { + var m = await import("./dir4/a?3"); + expect(m.a).toBe(1); + expect(m.usedExports).toEqual(["a", "usedExports"]); + })(); +}) diff --git a/test/cases/chunks/statical-dynamic-import/test.filter.js b/test/cases/chunks/statical-dynamic-import/test.filter.js new file mode 100644 index 00000000000..a8a402b15cf --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function filter(config) { + // This test can't run in development mode + return config.mode !== "development"; +}; diff --git a/test/cases/chunks/statical-dynamic-import/warnings.js b/test/cases/chunks/statical-dynamic-import/warnings.js new file mode 100644 index 00000000000..fc07af60c16 --- /dev/null +++ b/test/cases/chunks/statical-dynamic-import/warnings.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /You don't need `webpackExports` if the usage of dynamic import is statically analyse-able/ +]; diff --git a/test/cases/chunks/weird-reference-to-entry/errors.js b/test/cases/chunks/weird-reference-to-entry/errors.js index 5cdd2850ba3..fe646e641e2 100644 --- a/test/cases/chunks/weird-reference-to-entry/errors.js +++ b/test/cases/chunks/weird-reference-to-entry/errors.js @@ -1,3 +1,7 @@ +"use strict"; + module.exports = [ - [/It's not allowed to load an initial chunk on demand\. The chunk name "main" is already used by an entrypoint\./], + [ + /It's not allowed to load an initial chunk on demand\. The chunk name "main" is already used by an entrypoint\./ + ] ]; diff --git a/test/cases/cjs-interop/non-existing-export/esModule.js b/test/cases/cjs-interop/non-existing-export/esModule.js new file mode 100644 index 00000000000..37190c68978 --- /dev/null +++ b/test/cases/cjs-interop/non-existing-export/esModule.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = "default"; diff --git a/test/cases/cjs-interop/non-existing-export/index.js b/test/cases/cjs-interop/non-existing-export/index.js new file mode 100644 index 00000000000..d210326c346 --- /dev/null +++ b/test/cases/cjs-interop/non-existing-export/index.js @@ -0,0 +1,7 @@ +import { named } from "./module"; +import { named as named2 } from "./esModule"; + +it("should emit errors", () => { + expect(named).toBe(undefined); + expect(named2).toBe(undefined); +}); diff --git a/test/cases/cjs-interop/non-existing-export/module.js b/test/cases/cjs-interop/non-existing-export/module.js new file mode 100644 index 00000000000..0a5b24b98b3 --- /dev/null +++ b/test/cases/cjs-interop/non-existing-export/module.js @@ -0,0 +1 @@ +exports.default = "default"; diff --git a/test/cases/cjs-interop/non-existing-export/warnings.js b/test/cases/cjs-interop/non-existing-export/warnings.js new file mode 100644 index 00000000000..8ec92c8bc2e --- /dev/null +++ b/test/cases/cjs-interop/non-existing-export/warnings.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = [ + [ + /export 'named' \(imported as 'named'\) was not found in '\.\/module' \(possible exports: default\)/ + ], + [ + /export 'named' \(imported as 'named2'\) was not found in '\.\/esModule' \(possible exports: __esModule, default\)/ + ] +]; diff --git a/test/cases/cjs-tree-shaking/bailouts/accessing-call-context.js b/test/cases/cjs-tree-shaking/bailouts/accessing-call-context.js new file mode 100644 index 00000000000..1e925b72219 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/accessing-call-context.js @@ -0,0 +1,5 @@ +module.exports.func = function f() { + "use strict"; + return this; +}; +module.exports.abc = "abc"; diff --git a/test/cases/cjs-tree-shaking/bailouts/accessing-module.js b/test/cases/cjs-tree-shaking/bailouts/accessing-module.js new file mode 100644 index 00000000000..1ae2ff1eb55 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/accessing-module.js @@ -0,0 +1,7 @@ +exports.abc = "abc"; + +function f(m) { + m.exports = { abc: "abc", def: "def" }; +} + +f(module); diff --git a/test/cases/cjs-tree-shaking/bailouts/assign-exports-assign.js b/test/cases/cjs-tree-shaking/bailouts/assign-exports-assign.js new file mode 100644 index 00000000000..5382b0246c4 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/assign-exports-assign.js @@ -0,0 +1,6 @@ +exports.abc = "abc"; + +var newObj = {}; +exports = newObj; + +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/bailouts/assign-exports-define.js b/test/cases/cjs-tree-shaking/bailouts/assign-exports-define.js new file mode 100644 index 00000000000..416b24a5853 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/assign-exports-define.js @@ -0,0 +1,6 @@ +Object.defineProperty(exports, "abc", { value: "abc" }); + +var newObj = {}; +exports = newObj; + +Object.defineProperty(exports, "def", { value: "def" }); diff --git a/test/cases/cjs-tree-shaking/bailouts/define-module-properties.js b/test/cases/cjs-tree-shaking/bailouts/define-module-properties.js new file mode 100644 index 00000000000..3e2c0dfb187 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/define-module-properties.js @@ -0,0 +1,10 @@ +exports.abc = "abc"; + +Object.defineProperties(module, { + exports: { + value: { + abc: "abc", + def: "def" + } + } +}); diff --git a/test/cases/cjs-tree-shaking/bailouts/define-module-property.js b/test/cases/cjs-tree-shaking/bailouts/define-module-property.js new file mode 100644 index 00000000000..2ec92210180 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/define-module-property.js @@ -0,0 +1,8 @@ +exports.abc = "abc"; + +Object.defineProperty(module, "exports", { + value: { + abc: "abc", + def: "def" + } +}); diff --git a/test/cases/cjs-tree-shaking/bailouts/index.js b/test/cases/cjs-tree-shaking/bailouts/index.js new file mode 100644 index 00000000000..665c352dc40 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/index.js @@ -0,0 +1,56 @@ +it("should bailout when reading whole exports object from this", () => { + var test = require("./reading-this").test; + expect(test().abc).toBe("abc"); +}); + +it("should bailout when reading whole exports object from exports", () => { + var test = require("./reading-exports").test; + expect(test().abc).toBe("abc"); +}); + +it("should bailout when reading whole exports object from module.exports", () => { + var test = require("./reading-module-exports").test; + expect(test().abc).toBe("abc"); +}); + +it("should reassigning exports (assign values)", () => { + expect(require("./assign-exports-assign?1").abc).toBe("abc"); + expect(require("./assign-exports-assign?2").def).toBe(undefined); +}); + +it("should reassigning exports (define values)", () => { + expect(require("./assign-exports-define").abc).toBe("abc"); + expect(require("./assign-exports-define").def).toBe(undefined); +}); + +it("should not mangle or remove nested properties", () => { + expect(require("./nested-property").abc).toBe("abc"); +}); + +it("should be able to access the exports via call context", () => { + expect(require("./accessing-call-context?1").func().abc).toBe("abc"); + var cc = require("./accessing-call-context?2"); + expect(cc.func().abc).toBe("abc"); + var func = require("./accessing-call-context?3").func; + expect(func()).toBe(undefined); +}); + +it("should be able to define an exports property on module (property)", () => { + expect(require("./define-module-property?2").abc).toBe("abc"); + expect(require("./define-module-property?1").def).toBe("def"); +}); + +it("should be able to define an exports property on module (properties)", () => { + expect(require("./define-module-properties?2").abc).toBe("abc"); + expect(require("./define-module-properties?1").def).toBe("def"); +}); + +it("should be able to do stuff with the module object", () => { + expect(require("./accessing-module?2").abc).toBe("abc"); + expect(require("./accessing-module?1").def).toBe("def"); +}); + +it("should be able to use AMD to define exports", () => { + expect(require("./using-amd?2").abc).toBe("abc"); + expect(require("./using-amd?1").def).toBe("def"); +}); diff --git a/test/cases/cjs-tree-shaking/bailouts/nested-property.js b/test/cases/cjs-tree-shaking/bailouts/nested-property.js new file mode 100644 index 00000000000..4777d158100 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/nested-property.js @@ -0,0 +1,8 @@ +var abc = {}; + +module.exports = abc; + +module.exports.abc = "abc"; +module.exports.def = "def"; + +expect(abc).toEqual({ abc: "abc", def: "def" }); diff --git a/test/cases/cjs-tree-shaking/bailouts/reading-exports.js b/test/cases/cjs-tree-shaking/bailouts/reading-exports.js new file mode 100644 index 00000000000..7c994d85b83 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/reading-exports.js @@ -0,0 +1,5 @@ +exports.abc = "abc"; + +exports.test = function() { + return exports; +}; diff --git a/test/cases/cjs-tree-shaking/bailouts/reading-module-exports.js b/test/cases/cjs-tree-shaking/bailouts/reading-module-exports.js new file mode 100644 index 00000000000..53c6437c5f0 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/reading-module-exports.js @@ -0,0 +1,5 @@ +exports.abc = "abc"; + +exports.test = function() { + return module.exports; +}; diff --git a/test/cases/cjs-tree-shaking/bailouts/reading-this.js b/test/cases/cjs-tree-shaking/bailouts/reading-this.js new file mode 100644 index 00000000000..dace36f75ab --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/reading-this.js @@ -0,0 +1,5 @@ +exports.abc = "abc"; + +exports.test = () => { + return this; +}; diff --git a/test/cases/cjs-tree-shaking/bailouts/using-amd.js b/test/cases/cjs-tree-shaking/bailouts/using-amd.js new file mode 100644 index 00000000000..28366950f90 --- /dev/null +++ b/test/cases/cjs-tree-shaking/bailouts/using-amd.js @@ -0,0 +1,5 @@ +exports.abc = "not-abc"; +define({ + abc: "abc", + def: "def" +}); diff --git a/test/cases/cjs-tree-shaking/cjs-to-esm/index.js b/test/cases/cjs-tree-shaking/cjs-to-esm/index.js new file mode 100644 index 00000000000..1c5838ace07 --- /dev/null +++ b/test/cases/cjs-tree-shaking/cjs-to-esm/index.js @@ -0,0 +1,10 @@ +it("should allow to require esm", () => { + expect(require("./module?1").abc).toBe("abc"); + expect(typeof require("./module?2").func).toBe("function"); + // check if a function called with a namespace object as context + // still yield the same optimization, compared to only accessing + // the export + expect(Object.keys(require("./module?3").func())).toEqual( + Object.keys(require.cache[require.resolve("./module?2")].exports) + ); +}); diff --git a/test/cases/cjs-tree-shaking/cjs-to-esm/module.js b/test/cases/cjs-tree-shaking/cjs-to-esm/module.js new file mode 100644 index 00000000000..6532d0868ff --- /dev/null +++ b/test/cases/cjs-tree-shaking/cjs-to-esm/module.js @@ -0,0 +1,6 @@ +export const abc = "abc"; +export const def = "def"; +export const func = function() { + "use strict"; + return this; +}; diff --git a/test/cases/cjs-tree-shaking/esModule-getter/index.js b/test/cases/cjs-tree-shaking/esModule-getter/index.js new file mode 100644 index 00000000000..c71cd9fee68 --- /dev/null +++ b/test/cases/cjs-tree-shaking/esModule-getter/index.js @@ -0,0 +1,15 @@ +import def, { named, __esModule } from "./module"; +import * as ns from "./module"; + +it("should allow to import module with getters", () => { + expect(def).toBe("default"); + expect(named).toBe("named"); + expect(__esModule).toBe(true); + expect(ns.default).toBe("default"); + expect(ns.named).toBe("named"); + expect(ns.__esModule).toBe(true); + const indirect = Object(ns); + expect(indirect.default).toBe("default"); + expect(indirect.named).toBe("named"); + expect(indirect.__esModule).toBe(true); +}); diff --git a/test/cases/cjs-tree-shaking/esModule-getter/module.js b/test/cases/cjs-tree-shaking/esModule-getter/module.js new file mode 100644 index 00000000000..5fc4223cb74 --- /dev/null +++ b/test/cases/cjs-tree-shaking/esModule-getter/module.js @@ -0,0 +1,3 @@ +Object.defineProperty(exports, "__esModule", { get: () => true }); +Object.defineProperty(exports, "default", { get: () => "default" }); +Object.defineProperty(exports, "named", { get: () => "named" }); diff --git a/test/cases/cjs-tree-shaking/esm-to-cjs/index.js b/test/cases/cjs-tree-shaking/esm-to-cjs/index.js new file mode 100644 index 00000000000..71e5362a4cb --- /dev/null +++ b/test/cases/cjs-tree-shaking/esm-to-cjs/index.js @@ -0,0 +1,9 @@ +import m1 from "./module?1"; +import m2 from "./module?2"; +import { abc } from "./module?3"; + +it("should allow to import cjs with esm", () => { + expect(m1.abc).toBe("abc"); + expect(m2).toEqual({ abc: "abc", def: "def" }); + expect(abc).toBe("abc"); +}); diff --git a/test/cases/cjs-tree-shaking/esm-to-cjs/module.js b/test/cases/cjs-tree-shaking/esm-to-cjs/module.js new file mode 100644 index 00000000000..0d3ae437956 --- /dev/null +++ b/test/cases/cjs-tree-shaking/esm-to-cjs/module.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/assign-exports-property.js b/test/cases/cjs-tree-shaking/exports/assign-exports-property.js new file mode 100644 index 00000000000..0d3ae437956 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/assign-exports-property.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/assign-module-exports-property.js b/test/cases/cjs-tree-shaking/exports/assign-module-exports-property.js new file mode 100644 index 00000000000..2136b98d773 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/assign-module-exports-property.js @@ -0,0 +1,2 @@ +module.exports.abc = "abc"; +module.exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/assign-this-property.js b/test/cases/cjs-tree-shaking/exports/assign-this-property.js new file mode 100644 index 00000000000..37d1ecb94ad --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/assign-this-property.js @@ -0,0 +1,2 @@ +this.abc = "abc"; +this.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/attach-to-arrow-function.js b/test/cases/cjs-tree-shaking/exports/attach-to-arrow-function.js new file mode 100644 index 00000000000..abc9576d248 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/attach-to-arrow-function.js @@ -0,0 +1,3 @@ +module.exports = () => "abc"; + +module.exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/attach-to-function.js b/test/cases/cjs-tree-shaking/exports/attach-to-function.js new file mode 100644 index 00000000000..9341f94fd6e --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/attach-to-function.js @@ -0,0 +1,5 @@ +module.exports = function() { + return "abc"; +}; + +module.exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/attach-to-object.js b/test/cases/cjs-tree-shaking/exports/attach-to-object.js new file mode 100644 index 00000000000..43abfd882bd --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/attach-to-object.js @@ -0,0 +1,5 @@ +module.exports = { + abc: "abc" +}; + +module.exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/exports/define-exports-property.js b/test/cases/cjs-tree-shaking/exports/define-exports-property.js new file mode 100644 index 00000000000..8fdaf76e9ee --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/define-exports-property.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports, "abc", { enumerable: true, value: "abc" }); +Object.defineProperty(exports, "def", { enumerable: true, value: "def" }); diff --git a/test/cases/cjs-tree-shaking/exports/define-module-exports-property.js b/test/cases/cjs-tree-shaking/exports/define-module-exports-property.js new file mode 100644 index 00000000000..4ac21240abb --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/define-module-exports-property.js @@ -0,0 +1,8 @@ +Object.defineProperty(module.exports, "abc", { + enumerable: true, + value: "abc" +}); +Object.defineProperty(module.exports, "def", { + enumerable: true, + value: "def" +}); diff --git a/test/cases/cjs-tree-shaking/exports/define-this-property.js b/test/cases/cjs-tree-shaking/exports/define-this-property.js new file mode 100644 index 00000000000..2cfbf578d12 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/define-this-property.js @@ -0,0 +1,2 @@ +Object.defineProperty(this, "abc", { enumerable: true, value: "abc" }); +Object.defineProperty(this, "def", { enumerable: true, value: "def" }); diff --git a/test/cases/cjs-tree-shaking/exports/exports-default-bailout-flagged.js b/test/cases/cjs-tree-shaking/exports/exports-default-bailout-flagged.js new file mode 100644 index 00000000000..72fb5c4c07c --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/exports-default-bailout-flagged.js @@ -0,0 +1,9 @@ +class Test { + getString() { + return "hello"; + } +} + +const getExports = () => ({ __esModule: true, default: Test }); + +module.exports = getExports(); diff --git a/test/cases/cjs-tree-shaking/exports/exports-default-bailout.js b/test/cases/cjs-tree-shaking/exports/exports-default-bailout.js new file mode 100644 index 00000000000..d7051556076 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/exports-default-bailout.js @@ -0,0 +1,9 @@ +class Test { + getString() { + return "hello"; + } +} + +const getExports = () => ({ default: Test }); + +module.exports = getExports(); diff --git a/test/cases/cjs-tree-shaking/exports/exports-default-flagged.js b/test/cases/cjs-tree-shaking/exports/exports-default-flagged.js new file mode 100644 index 00000000000..60c8397271e --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/exports-default-flagged.js @@ -0,0 +1,8 @@ +Object.defineProperty(exports, "__esModule", { value: true }); +class Test { + getString() { + return "hello"; + } +} + +exports.default = Test; diff --git a/test/cases/cjs-tree-shaking/exports/exports-default.js b/test/cases/cjs-tree-shaking/exports/exports-default.js new file mode 100644 index 00000000000..33d466ce4dd --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/exports-default.js @@ -0,0 +1,7 @@ +class Test { + getString() { + return "hello"; + } +} + +exports.default = Test; diff --git a/test/cases/cjs-tree-shaking/exports/index.js b/test/cases/cjs-tree-shaking/exports/index.js new file mode 100644 index 00000000000..2c12737f893 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/index.js @@ -0,0 +1,95 @@ +it("should allow to export via exports", () => { + expect(require("./assign-exports-property?1").abc).toBe("abc"); + expect(require("./assign-exports-property?2")).toEqual({ + abc: "abc", + def: "def" + }); +}); + +it("should allow to export via module.exports", () => { + expect(require("./assign-module-exports-property?1").abc).toBe("abc"); + expect(require("./assign-module-exports-property?2")).toEqual({ + abc: "abc", + def: "def" + }); +}); + +it("should allow to export via this", () => { + expect(require("./assign-this-property?1").abc).toBe("abc"); + expect(require("./assign-this-property?2")).toEqual({ + abc: "abc", + def: "def" + }); +}); + +it("should allow to export via define property on exports", () => { + expect(require("./define-exports-property?1").abc).toBe("abc"); + expect(require("./define-exports-property?2")).toEqual({ + abc: "abc", + def: "def" + }); +}); + +it("should allow to export via define property on module.exports", () => { + expect(require("./define-module-exports-property?1").abc).toBe("abc"); + expect(require("./define-module-exports-property?2")).toEqual({ + abc: "abc", + def: "def" + }); +}); + +it("should allow to export via define property on this", () => { + expect(require("./define-this-property?1").abc).toBe("abc"); + expect(require("./define-this-property?2")).toEqual({ + abc: "abc", + def: "def" + }); +}); + +it("should allow to read own exports via exports", () => { + var test = require("./reading-self-from-exports").test; + expect(test()).toBe("abc"); +}); + +it("should allow to read own exports via module.exports", () => { + var test = require("./reading-self-from-module-exports").test; + expect(test()).toBe("abc"); +}); + +it("should allow to read own exports via this", () => { + var test = require("./reading-self-from-this").test; + expect(test()).toBe("abc"); +}); + +it("should allow to attach exports to object", () => { + expect(require("./attach-to-object?1").abc).toBe("abc"); + expect(require("./attach-to-object?2").def).toBe("def"); + expect(require("./attach-to-object?3").abc).toBe("abc"); + expect(require("./attach-to-object?3").def).toBe("def"); +}); + +it("should allow to attach exports to function", () => { + expect(require("./attach-to-function?1")()).toBe("abc"); + expect(require("./attach-to-function?2").def).toBe("def"); + expect(require("./attach-to-function?3")()).toBe("abc"); + expect(require("./attach-to-function?3").def).toBe("def"); +}); + +it("should allow to attach exports to arrow function", () => { + expect(require("./attach-to-arrow-function?1")()).toBe("abc"); + expect(require("./attach-to-arrow-function?2").def).toBe("def"); + expect(require("./attach-to-arrow-function?3")()).toBe("abc"); + expect(require("./attach-to-arrow-function?3").def).toBe("def"); +}); + +it("should properly handle export / require `default`", () => { + expect(require("./require-default").moduleExportsDefault).toBe("hello"); + expect(require("./require-default").hello1).toBe("hello"); + expect(require("./require-default").hello2).toBe("hello"); + expect(require("./require-default").hello3).toBe("hello"); + expect(require("./require-default").hello4).toBe("hello"); + expect(require("./require-default").hello5).toBe("hello"); + expect(require("./require-default").hello6).toBe("hello"); + expect(require("./require-default").hello7).toBe("hello"); + expect(require("./require-default").hello8).toBe("hello"); +}); diff --git a/test/cases/cjs-tree-shaking/exports/module-exports-default.js b/test/cases/cjs-tree-shaking/exports/module-exports-default.js new file mode 100644 index 00000000000..c0c2ed18bfc --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/module-exports-default.js @@ -0,0 +1,7 @@ +class Test { + getString() { + return "hello"; + } +} + +module.exports.default = Test; diff --git a/test/cases/cjs-tree-shaking/exports/reading-self-from-exports.js b/test/cases/cjs-tree-shaking/exports/reading-self-from-exports.js new file mode 100644 index 00000000000..bee3ff3612a --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/reading-self-from-exports.js @@ -0,0 +1,5 @@ +exports.abc = "abc"; + +exports.test = function() { + return exports.abc; +}; diff --git a/test/cases/cjs-tree-shaking/exports/reading-self-from-module-exports.js b/test/cases/cjs-tree-shaking/exports/reading-self-from-module-exports.js new file mode 100644 index 00000000000..9b197bfb815 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/reading-self-from-module-exports.js @@ -0,0 +1,5 @@ +exports.abc = "abc"; + +exports.test = function() { + return module.exports.abc; +}; diff --git a/test/cases/cjs-tree-shaking/exports/reading-self-from-this.js b/test/cases/cjs-tree-shaking/exports/reading-self-from-this.js new file mode 100644 index 00000000000..ee445214804 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/reading-self-from-this.js @@ -0,0 +1,5 @@ +exports.abc = "abc"; + +exports.test = () => { + return this.abc; +}; diff --git a/test/cases/cjs-tree-shaking/exports/require-default.js b/test/cases/cjs-tree-shaking/exports/require-default.js new file mode 100644 index 00000000000..9598dfaa237 --- /dev/null +++ b/test/cases/cjs-tree-shaking/exports/require-default.js @@ -0,0 +1,27 @@ +const ModuleExportsDefaultTest = require("./module-exports-default").default; +const Test1 = require("./exports-default?1").default; +import Test2 from "./exports-default?2"; +const Test3 = require("./exports-default-flagged?3").default; +import Test4 from "./exports-default-flagged?4"; +const Test5 = require("./exports-default-bailout?5").default; +import Test6 from "./exports-default-bailout?6"; +const Test7 = require("./exports-default-bailout-flagged?7").default; +import Test8 from "./exports-default-bailout-flagged?8"; +const moduleExportsDefaultTest = new ModuleExportsDefaultTest(); +const test1 = new Test1(); +const test2 = new Test2.default(); +const test3 = new Test3(); +const test4 = new Test4(); +const test5 = new Test5(); +const test6 = new Test6.default(); +const test7 = new Test7(); +const test8 = new Test8(); +export const moduleExportsDefault = moduleExportsDefaultTest.getString(); +export const hello1 = test1.getString(); +export const hello2 = test2.getString(); +export const hello3 = test3.getString(); +export const hello4 = test4.getString(); +export const hello5 = test5.getString(); +export const hello6 = test6.getString(); +export const hello7 = test7.getString(); +export const hello8 = test8.getString(); diff --git a/test/cases/cjs-tree-shaking/importing/index.js b/test/cases/cjs-tree-shaking/importing/index.js new file mode 100644 index 00000000000..fb044fcada6 --- /dev/null +++ b/test/cases/cjs-tree-shaking/importing/index.js @@ -0,0 +1,15 @@ +it("should be able to import a module via require and property", () => { + expect(require("./module").abc).toBe("abc"); +}); + +it("should be able to import a module via require and destruct", () => { + var { abc } = require("./module"); + expect(abc).toBe("abc"); +}); + +it("should be able to import a module via require and exports object", () => { + var module1 = require("./module?1"); + expect(module1.abc).toBe("abc"); + var module2 = require("./module?2"); + expect(module2).toEqual({ abc: "abc", def: "def" }); +}); diff --git a/test/cases/cjs-tree-shaking/importing/module.js b/test/cases/cjs-tree-shaking/importing/module.js new file mode 100644 index 00000000000..0d3ae437956 --- /dev/null +++ b/test/cases/cjs-tree-shaking/importing/module.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/mjs/cjs-dynamic.js b/test/cases/cjs-tree-shaking/mjs/cjs-dynamic.js new file mode 100644 index 00000000000..e42cb69f918 --- /dev/null +++ b/test/cases/cjs-tree-shaking/mjs/cjs-dynamic.js @@ -0,0 +1,6 @@ +exports.abc = "abc"; +exports.default = "default"; +const flagIt = () => (exports.__esModule = true); + +const query = __resourceQuery; +if (query.includes("yes")) flagIt(); diff --git a/test/cases/cjs-tree-shaking/mjs/cjs-flagged.js b/test/cases/cjs-tree-shaking/mjs/cjs-flagged.js new file mode 100644 index 00000000000..95539960d6a --- /dev/null +++ b/test/cases/cjs-tree-shaking/mjs/cjs-flagged.js @@ -0,0 +1,3 @@ +exports.__esModule = true; +exports.abc = "abc"; +exports.default = "default"; diff --git a/test/cases/cjs-tree-shaking/mjs/cjs.js b/test/cases/cjs-tree-shaking/mjs/cjs.js new file mode 100644 index 00000000000..16650262d56 --- /dev/null +++ b/test/cases/cjs-tree-shaking/mjs/cjs.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.default = "default"; diff --git a/test/cases/cjs-tree-shaking/mjs/index.js b/test/cases/cjs-tree-shaking/mjs/index.js new file mode 100644 index 00000000000..00f62468bcf --- /dev/null +++ b/test/cases/cjs-tree-shaking/mjs/index.js @@ -0,0 +1,19 @@ +import "./index.mjs"; + +import cjs from "./cjs.js?js"; +import cjsFlagged from "./cjs-flagged.js?js"; +import cjsDynamicYes from "./cjs-dynamic.js?js-yes"; +import cjsDynamicNo from "./cjs-dynamic.js?js-no"; + +it("should return correct exports when default is imported", () => { + expect(cjs).toEqual({ + abc: "abc", + default: "default" + }); + expect(cjsFlagged).toEqual("default"); + expect(cjsDynamicYes).toEqual("default"); + expect(cjsDynamicNo).toMatchObject({ + abc: "abc", + default: "default" + }); +}); diff --git a/test/cases/cjs-tree-shaking/mjs/index.mjs b/test/cases/cjs-tree-shaking/mjs/index.mjs new file mode 100644 index 00000000000..2f5930415f3 --- /dev/null +++ b/test/cases/cjs-tree-shaking/mjs/index.mjs @@ -0,0 +1,25 @@ +import cjs from "./cjs.js?mjs"; +import cjsFlagged from "./cjs-flagged.js?mjs"; +import cjsDynamicYes from "./cjs-dynamic.js?mjs-yes"; +import cjsDynamicNo from "./cjs-dynamic.js?mjs-no"; + +it("should return correct exports when default is imported", () => { + expect(cjs).toEqual({ + abc: "abc", + default: "default" + }); + expect(cjsFlagged).toEqual({ + __esModule: true, + abc: "abc", + default: "default" + }); + expect(cjsDynamicYes).toMatchObject({ + __esModule: true, + abc: "abc", + default: "default" + }); + expect(cjsDynamicNo).toMatchObject({ + abc: "abc", + default: "default" + }); +}); diff --git a/test/cases/cjs-tree-shaking/mutate/index.js b/test/cases/cjs-tree-shaking/mutate/index.js new file mode 100644 index 00000000000..cd913b48fc7 --- /dev/null +++ b/test/cases/cjs-tree-shaking/mutate/index.js @@ -0,0 +1,33 @@ +import module1 from "./module?1"; +import module2, { a } from "./module?2"; + +it("should allow mutating imported modules (changing existing exports)", () => { + expect(module1.abc).toBe("abc"); + expect(module1.def).toBe("def"); + module1.abc = "new-abc"; + expect(module1.abc).toBe("new-abc"); + expect(module1.def).toBe("def"); +}); + +it("should allow mutating imported modules (adding new properties)", () => { + expect(module2.abc).toBe("abc"); + expect(module2.def).toBe("def"); + expect(module2.ghi).toBe(undefined); + expect(module2.Oi).toBe(undefined); + expect(module2.a).toBe(undefined); + expect(a).toBe(undefined); + expect(module2[""]).toBe(undefined); + module2.ghi = "ghi"; + module2.Oi = "Oi"; + module2.a = "a"; + module2[""] = {}; + module2[""].abc = "abc"; + expect(module2.abc).toBe("abc"); + expect(module2.def).toBe("def"); + expect(module2.ghi).toBe("ghi"); + expect(module2.Oi).toBe("Oi"); + expect(module2.a).toBe("a"); + expect(a).toBe("a"); + expect(module2[""]).toEqual({ abc: "abc" }); + expect(module2[""].abc).toBe("abc"); +}); diff --git a/test/cases/cjs-tree-shaking/mutate/module.js b/test/cases/cjs-tree-shaking/mutate/module.js new file mode 100644 index 00000000000..0d3ae437956 --- /dev/null +++ b/test/cases/cjs-tree-shaking/mutate/module.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/mutate/warnings.js b/test/cases/cjs-tree-shaking/mutate/warnings.js new file mode 100644 index 00000000000..f949f2cd34a --- /dev/null +++ b/test/cases/cjs-tree-shaking/mutate/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + [/export 'a' \(imported as 'a'\) was not found/], + [/export 'a' \(imported as 'a'\) was not found/] +]; diff --git a/test/cases/cjs-tree-shaking/namespace/index.js b/test/cases/cjs-tree-shaking/namespace/index.js new file mode 100644 index 00000000000..e4407ae46da --- /dev/null +++ b/test/cases/cjs-tree-shaking/namespace/index.js @@ -0,0 +1,25 @@ +it("should allow to create namespace exports via __esModule on exports", async () => { + expect(await import("./namespace-via-exports")).toBe( + require("./namespace-via-exports") + ); +}); +it("should allow to create namespace exports via __esModule on literal", async () => { + expect(await import("./namespace-via-literal")).toBe( + require("./namespace-via-literal") + ); +}); +it("should allow to create namespace exports via __esModule with Object.defineProperty", async () => { + expect(await import("./namespace-via-define-property")).toBe( + require("./namespace-via-define-property") + ); +}); +it("should allow to create namespace exports via __esModule with Object.defineProperty minimized true", async () => { + expect(await import("./namespace-via-define-property-minimized")).toBe( + require("./namespace-via-define-property-minimized") + ); +}); +it("should allow to create namespace exports via __esModule with Object.defineProperties", async () => { + expect(await import("./namespace-via-define-properties")).toBe( + require("./namespace-via-define-properties") + ); +}); diff --git a/test/cases/cjs-tree-shaking/namespace/namespace-via-define-properties.js b/test/cases/cjs-tree-shaking/namespace/namespace-via-define-properties.js new file mode 100644 index 00000000000..fcf031e864f --- /dev/null +++ b/test/cases/cjs-tree-shaking/namespace/namespace-via-define-properties.js @@ -0,0 +1,5 @@ +Object.defineProperties(exports, { + __esModule: { value: true }, + abc: { enumerable: true, value: "abc" }, + default: { enumerable: true, value: "default" } +}); diff --git a/test/cases/cjs-tree-shaking/namespace/namespace-via-define-property-minimized.js b/test/cases/cjs-tree-shaking/namespace/namespace-via-define-property-minimized.js new file mode 100644 index 00000000000..cd10e84bf97 --- /dev/null +++ b/test/cases/cjs-tree-shaking/namespace/namespace-via-define-property-minimized.js @@ -0,0 +1,3 @@ +Object.defineProperty(exports, "__esModule", { value: !0 }); +exports.abc = "abc"; +exports.default = "default"; diff --git a/test/cases/cjs-tree-shaking/namespace/namespace-via-define-property.js b/test/cases/cjs-tree-shaking/namespace/namespace-via-define-property.js new file mode 100644 index 00000000000..50c67588de7 --- /dev/null +++ b/test/cases/cjs-tree-shaking/namespace/namespace-via-define-property.js @@ -0,0 +1,3 @@ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.abc = "abc"; +exports.default = "default"; diff --git a/test/cases/cjs-tree-shaking/namespace/namespace-via-exports.js b/test/cases/cjs-tree-shaking/namespace/namespace-via-exports.js new file mode 100644 index 00000000000..92cc687c7ea --- /dev/null +++ b/test/cases/cjs-tree-shaking/namespace/namespace-via-exports.js @@ -0,0 +1,3 @@ +exports.__esModule = true; +exports.abc = "abc"; +exports.default = "default"; \ No newline at end of file diff --git a/test/cases/cjs-tree-shaking/namespace/namespace-via-literal.js b/test/cases/cjs-tree-shaking/namespace/namespace-via-literal.js new file mode 100644 index 00000000000..21867372a67 --- /dev/null +++ b/test/cases/cjs-tree-shaking/namespace/namespace-via-literal.js @@ -0,0 +1,5 @@ +module.exports = { + __esModule: true, + abc: "abc", + default: "default" +}; diff --git a/test/cases/cjs-tree-shaking/non-root-this/index.js b/test/cases/cjs-tree-shaking/non-root-this/index.js new file mode 100644 index 00000000000..491ea592f97 --- /dev/null +++ b/test/cases/cjs-tree-shaking/non-root-this/index.js @@ -0,0 +1,5 @@ +it("should not rewrite this nested in functions", () => { + const f = require("./module").fff; + expect(f.test1).toBe(true); + expect(f.test2).toBe(true); +}); diff --git a/test/cases/cjs-tree-shaking/non-root-this/module.js b/test/cases/cjs-tree-shaking/non-root-this/module.js new file mode 100644 index 00000000000..878ebcb7470 --- /dev/null +++ b/test/cases/cjs-tree-shaking/non-root-this/module.js @@ -0,0 +1,6 @@ +function F() { + this.test1 = true; + Object.defineProperty(this, "test2", { value: true }); +} + +exports.fff = new F(); diff --git a/test/cases/cjs-tree-shaking/object-define-property-replace/index.js b/test/cases/cjs-tree-shaking/object-define-property-replace/index.js new file mode 100644 index 00000000000..b93250f8526 --- /dev/null +++ b/test/cases/cjs-tree-shaking/object-define-property-replace/index.js @@ -0,0 +1,3 @@ +it("should replace Object.defineProperty correctly with brackets", () => { + expect(require("./module").test).toBe(true); +}); diff --git a/test/cases/cjs-tree-shaking/object-define-property-replace/module.js b/test/cases/cjs-tree-shaking/object-define-property-replace/module.js new file mode 100644 index 00000000000..c91b6b8393e --- /dev/null +++ b/test/cases/cjs-tree-shaking/object-define-property-replace/module.js @@ -0,0 +1 @@ +Object.defineProperty(((this)), "test", (((0, { value : true})))); diff --git a/test/cases/cjs-tree-shaking/objects/direct-object.js b/test/cases/cjs-tree-shaking/objects/direct-object.js new file mode 100644 index 00000000000..f32a5fb07fd --- /dev/null +++ b/test/cases/cjs-tree-shaking/objects/direct-object.js @@ -0,0 +1,4 @@ +module.exports = { + abc: "abc", + def: "def" +}; diff --git a/test/cases/cjs-tree-shaking/objects/index.js b/test/cases/cjs-tree-shaking/objects/index.js new file mode 100644 index 00000000000..cf9fa76da0b --- /dev/null +++ b/test/cases/cjs-tree-shaking/objects/index.js @@ -0,0 +1,9 @@ +it("should be able to export an object literal", () => { + expect(require("./direct-object?1").abc).toBe("abc"); + expect(require("./direct-object?2")).toEqual({ abc: "abc", def: "def" }); +}); + +it("should be able to export an object literal indirect", () => { + expect(require("./indirect-object?1").abc).toBe("abc"); + expect(require("./indirect-object?2")).toEqual({ abc: "abc", def: "def" }); +}); diff --git a/test/cases/cjs-tree-shaking/objects/indirect-object.js b/test/cases/cjs-tree-shaking/objects/indirect-object.js new file mode 100644 index 00000000000..9df708c912f --- /dev/null +++ b/test/cases/cjs-tree-shaking/objects/indirect-object.js @@ -0,0 +1,6 @@ +var value = { + abc: "abc", + def: "def" +}; + +module.exports = value; diff --git a/test/cases/cjs-tree-shaking/parsing/index.js b/test/cases/cjs-tree-shaking/parsing/index.js new file mode 100644 index 00000000000..e9d67111622 --- /dev/null +++ b/test/cases/cjs-tree-shaking/parsing/index.js @@ -0,0 +1,3 @@ +it("should parse nested requires successfully", () => { + expect(require("./nested-require").value).toBe(42); +}); diff --git a/test/cases/cjs-tree-shaking/parsing/module.js b/test/cases/cjs-tree-shaking/parsing/module.js new file mode 100644 index 00000000000..0d52636bf73 --- /dev/null +++ b/test/cases/cjs-tree-shaking/parsing/module.js @@ -0,0 +1,2 @@ +exports.fn = a => a + 1; +exports.value = 41; diff --git a/test/cases/cjs-tree-shaking/parsing/nested-require.js b/test/cases/cjs-tree-shaking/parsing/nested-require.js new file mode 100644 index 00000000000..0193f671bbd --- /dev/null +++ b/test/cases/cjs-tree-shaking/parsing/nested-require.js @@ -0,0 +1 @@ +exports.value = require("./module").fn(require("./module").value); diff --git a/test/cases/cjs-tree-shaking/reexports/add-to-counter.js b/test/cases/cjs-tree-shaking/reexports/add-to-counter.js new file mode 100644 index 00000000000..d4e43695db0 --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/add-to-counter.js @@ -0,0 +1,5 @@ +const counter = require("./counter"); +counter.value++; + +exports.abc = 42; +exports.abcUsed = __webpack_exports_info__.abc.used; diff --git a/test/cases/cjs-tree-shaking/reexports/counter.js b/test/cases/cjs-tree-shaking/reexports/counter.js new file mode 100644 index 00000000000..06819f2d417 --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/counter.js @@ -0,0 +1 @@ +exports.value = 0; diff --git a/test/cases/cjs-tree-shaking/reexports/index.js b/test/cases/cjs-tree-shaking/reexports/index.js new file mode 100644 index 00000000000..44ca88f2e71 --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/index.js @@ -0,0 +1,75 @@ +it("should allow to reexport a exports object (this, exports)", () => { + expect(require("./reexport-whole-exports?1").module1.abc).toBe("abc"); + expect(require("./reexport-whole-exports?2").module2.abc).toBe("abc"); + expect(require("./reexport-whole-exports?3").module3.abc).toBe("abc"); + expect(require("./reexport-whole-exports?4").module4.abc).toBe("abc"); +}); + +it("should allow to reexport a exports object (module.exports, object literal)", () => { + expect(require("./reexport-whole-module-exports?1").module1.abc).toBe("abc"); + expect(require("./reexport-whole-module-exports?2").module2.abc).toBe("abc"); + expect(require("./reexport-whole-module-exports?3").module3.abc).toBe("abc"); + expect(require("./reexport-whole-module-exports?4").module4.abc).toBe("abc"); +}); + +it("should allow to reexport a imported property (this, exports)", () => { + expect(require("./reexport-property-exports?1").property1).toBe("abc"); + expect(require("./reexport-property-exports?2").property2).toBe("abc"); + expect(require("./reexport-property-exports?3").property3).toBe("abc"); + expect(require("./reexport-property-exports?4").property4).toBe("abc"); +}); + +it("should allow to reexport a imported property (module.exports, object literal)", () => { + expect(require("./reexport-property-module-exports?1").property1).toBe("abc"); + expect(require("./reexport-property-module-exports?2").property2).toBe("abc"); + expect(require("./reexport-property-module-exports?3").property3).toBe("abc"); + expect(require("./reexport-property-module-exports?4").property4).toBe("abc"); +}); + +it("should allow to reexport a reexported exports object (this, exports)", () => { + expect(require("./reexport-reexport-exports?1").reexport1.abc).toBe("abc"); + expect(require("./reexport-reexport-exports?2").reexport2.abc).toBe("abc"); + expect(require("./reexport-reexport-exports?3").reexport3.abc).toBe("abc"); + expect(require("./reexport-reexport-exports?4").reexport4.abc).toBe("abc"); +}); + +it("should allow to reexport a reexported exports object (module.exports, object literal)", () => { + expect(require("./reexport-reexport-module-exports?1").reexport1.abc).toBe( + "abc" + ); + expect(require("./reexport-reexport-module-exports?2").reexport2.abc).toBe( + "abc" + ); + expect(require("./reexport-reexport-module-exports?3").reexport3.abc).toBe( + "abc" + ); + expect(require("./reexport-reexport-module-exports?4").reexport4.abc).toBe( + "abc" + ); +}); + +it("should keep executing modules even when unused", () => { + const counter = require("./counter"); + counter.value = 0; + exports.unused1 = require("./add-to-counter?1"); + exports.unused2 = require("./add-to-counter?2").abc; + expect((exports.unused3 = require("./add-to-counter?3").abc)).toBe(42); + expect(counter.value).toBe(3); + if (process.env.NODE_ENV === "production") { + expect(require("./add-to-counter?1").abcUsed).toBe(false); + expect(require("./add-to-counter?2").abcUsed).toBe(false); + } + expect(require("./add-to-counter?3").abcUsed).toBe(true); +}); + +it("should allow to reexport a reexported module that bails out (indirect)", () => { + const abc = require("./reexport?reexport-whole-exports?bailout").module1.abc; + const bailout = Object(require("./module?we1?bailout")); + expect(abc).toBe(bailout.abc); +}); + +it("should allow to reexport a reexported module that bails out (direct)", () => { + const abc = require("./reexport?module?bailout").abc; + const bailout = Object(require("./module?bailout")); + expect(abc).toBe(bailout.abc); +}); diff --git a/test/cases/cjs-tree-shaking/reexports/module.js b/test/cases/cjs-tree-shaking/reexports/module.js new file mode 100644 index 00000000000..0d3ae437956 --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/module.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport-property-exports.js b/test/cases/cjs-tree-shaking/reexports/reexport-property-exports.js new file mode 100644 index 00000000000..d00b940f2ff --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport-property-exports.js @@ -0,0 +1,6 @@ +exports.property1 = require("./module?pe1" + __resourceQuery).abc; +var m2 = require("./module?pe2" + __resourceQuery); +exports.property2 = m2.abc; +this.property3 = require("./module?pe3" + __resourceQuery).abc; +var m4 = require("./module?pe4" + __resourceQuery); +this.property4 = m4.abc; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport-property-module-exports.js b/test/cases/cjs-tree-shaking/reexports/reexport-property-module-exports.js new file mode 100644 index 00000000000..67c70f7e44b --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport-property-module-exports.js @@ -0,0 +1,8 @@ +var m2 = require("./module?pme2" + __resourceQuery); +module.exports = { + property1: require("./module?pme1" + __resourceQuery).abc, + property2: m2.abc +}; +module.exports.property3 = require("./module?pme3" + __resourceQuery).abc; +var m4 = require("./module?pme4" + __resourceQuery); +module.exports.property4 = m4.abc; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport-reexport-exports.js b/test/cases/cjs-tree-shaking/reexports/reexport-reexport-exports.js new file mode 100644 index 00000000000..5caa9905d9d --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport-reexport-exports.js @@ -0,0 +1,8 @@ +exports.reexport1 = require("./reexport-whole-exports?x1" + + __resourceQuery).module1; +var m2 = require("./reexport-whole-exports?x2" + __resourceQuery); +exports.reexport2 = m2.module2; +this.reexport3 = require("./reexport-whole-exports?x3" + + __resourceQuery).module3; +var m4 = require("./reexport-whole-exports?x4" + __resourceQuery); +this.reexport4 = m4.module4; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport-reexport-module-exports.js b/test/cases/cjs-tree-shaking/reexports/reexport-reexport-module-exports.js new file mode 100644 index 00000000000..8d267934d94 --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport-reexport-module-exports.js @@ -0,0 +1,10 @@ +var m2 = require("./reexport-whole-module-exports?x2" + __resourceQuery); +module.exports = { + reexport1: require("./reexport-whole-module-exports?x1" + __resourceQuery) + .module1, + reexport2: m2.module2 +}; +module.exports.reexport3 = require("./reexport-whole-module-exports?x3" + + __resourceQuery).module3; +var m4 = require("./reexport-whole-module-exports?x4" + __resourceQuery); +module.exports.reexport4 = m4.module4; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport-whole-exports.js b/test/cases/cjs-tree-shaking/reexports/reexport-whole-exports.js new file mode 100644 index 00000000000..11ca850bade --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport-whole-exports.js @@ -0,0 +1,6 @@ +exports.module1 = require("./module?we1" + __resourceQuery); +var m2 = require("./module?we2" + __resourceQuery); +exports.module2 = m2; +this.module3 = require("./module?we3" + __resourceQuery); +var m4 = require("./module?we4" + __resourceQuery); +this.module4 = m4; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport-whole-module-exports.js b/test/cases/cjs-tree-shaking/reexports/reexport-whole-module-exports.js new file mode 100644 index 00000000000..cd4a36713bd --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport-whole-module-exports.js @@ -0,0 +1,8 @@ +var module2 = require("./module?wme2" + __resourceQuery); +module.exports = { + module1: require("./module?wme1" + __resourceQuery), + module2 +}; +module.exports.module3 = require("./module?wme3" + __resourceQuery); +var m4 = require("./module?wme4" + __resourceQuery); +module.exports.module4 = m4; diff --git a/test/cases/cjs-tree-shaking/reexports/reexport.js b/test/cases/cjs-tree-shaking/reexports/reexport.js new file mode 100644 index 00000000000..70530548836 --- /dev/null +++ b/test/cases/cjs-tree-shaking/reexports/reexport.js @@ -0,0 +1 @@ +module.exports = require("./" + __resourceQuery.slice(1)); diff --git a/test/cases/cjs-tree-shaking/require-destructuring/dir/a.js b/test/cases/cjs-tree-shaking/require-destructuring/dir/a.js new file mode 100644 index 00000000000..c173ea279eb --- /dev/null +++ b/test/cases/cjs-tree-shaking/require-destructuring/dir/a.js @@ -0,0 +1,3 @@ +export const a = "a/a"; +export const b = "a/b"; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/cjs-tree-shaking/require-destructuring/dir/b.js b/test/cases/cjs-tree-shaking/require-destructuring/dir/b.js new file mode 100644 index 00000000000..5323ac00ce8 --- /dev/null +++ b/test/cases/cjs-tree-shaking/require-destructuring/dir/b.js @@ -0,0 +1,3 @@ +export const a = "b/a"; +export const b = "b/b"; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/cjs-tree-shaking/require-destructuring/index.js b/test/cases/cjs-tree-shaking/require-destructuring/index.js new file mode 100644 index 00000000000..fb4381f2c07 --- /dev/null +++ b/test/cases/cjs-tree-shaking/require-destructuring/index.js @@ -0,0 +1,37 @@ +it("should static analyze require destructuring assignment", () => { + const { a, usedExports } = require("./module"); + expect(a).toBe("a"); + expect(usedExports).toEqual(["a", "usedExports"]); +}); + +it("should support require context destructuring assignment", () => { + const file = "a"; + const { a, usedExports } = require(`./dir/${file}.js`); + expect(a).toBe("a/a"); + expect(usedExports).toEqual(["a", "usedExports"]); +}); + +it("should static analyze aliased require destructuring", () => { + const { a: renamedA, usedExports } = require("./module"); + expect(renamedA).toBe("a"); + expect(usedExports).toEqual(["a", "usedExports"]); +}); + +it("should support require context aliased destructuring assignment", () => { + const file = "a"; + const { a: renamedA, usedExports } = require(`./dir/${file}.js`); + expect(renamedA).toBe("a/a"); + expect(usedExports).toEqual(["a", "usedExports"]); +}); + +it("should static analyze require destructuring with default values", () => { + const { a = "fallback", usedExports } = require("./module"); + expect(a).toBe("a"); + expect(usedExports).toEqual(["a", "usedExports"]); +}); + +it("should bail on rest element in require destructuring", () => { + const { usedExports, ...rest } = require("./module-rest"); + expect(usedExports).toBe(true); + expect(rest).toEqual({ a: "a", b: "b" }); +}); diff --git a/test/cases/cjs-tree-shaking/require-destructuring/module-rest.js b/test/cases/cjs-tree-shaking/require-destructuring/module-rest.js new file mode 100644 index 00000000000..ca8a5420eb7 --- /dev/null +++ b/test/cases/cjs-tree-shaking/require-destructuring/module-rest.js @@ -0,0 +1,3 @@ +exports.a = "a"; +exports.b = "b"; +exports.usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/cjs-tree-shaking/require-destructuring/module.js b/test/cases/cjs-tree-shaking/require-destructuring/module.js new file mode 100644 index 00000000000..ca8a5420eb7 --- /dev/null +++ b/test/cases/cjs-tree-shaking/require-destructuring/module.js @@ -0,0 +1,3 @@ +exports.a = "a"; +exports.b = "b"; +exports.usedExports = __webpack_exports_info__.usedExports; diff --git a/test/cases/cjs-tree-shaking/require-destructuring/test.filter.js b/test/cases/cjs-tree-shaking/require-destructuring/test.filter.js new file mode 100644 index 00000000000..a8a402b15cf --- /dev/null +++ b/test/cases/cjs-tree-shaking/require-destructuring/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = function filter(config) { + // This test can't run in development mode + return config.mode !== "development"; +}; diff --git a/test/cases/cjs-tree-shaking/transpiled/babel-default-interop.js b/test/cases/cjs-tree-shaking/transpiled/babel-default-interop.js new file mode 100644 index 00000000000..8accb6fef41 --- /dev/null +++ b/test/cases/cjs-tree-shaking/transpiled/babel-default-interop.js @@ -0,0 +1,5 @@ +var xxx = _interopRequireDefault(require("./module?2")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} +module.exports = xxx.default.abc; diff --git a/test/cases/cjs-tree-shaking/transpiled/index.js b/test/cases/cjs-tree-shaking/transpiled/index.js new file mode 100644 index 00000000000..d7a8a7e2e3d --- /dev/null +++ b/test/cases/cjs-tree-shaking/transpiled/index.js @@ -0,0 +1,14 @@ +it("should support typescript export *", () => { + expect(require("./typescript-reexport").abc).toBe("abc"); +}); + +it("should support babel default interop", () => { + var xxx2 = _interopRequireDefault(require("./module?2")); + var xxx3 = _interopRequireDefault(require("./module?3")); + expect(xxx2.default.abc).toBe("abc"); + expect(xxx3.default).toEqual({ abc: "abc", def: "def" }); +}); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; +} diff --git a/test/cases/cjs-tree-shaking/transpiled/module.js b/test/cases/cjs-tree-shaking/transpiled/module.js new file mode 100644 index 00000000000..0d3ae437956 --- /dev/null +++ b/test/cases/cjs-tree-shaking/transpiled/module.js @@ -0,0 +1,2 @@ +exports.abc = "abc"; +exports.def = "def"; diff --git a/test/cases/cjs-tree-shaking/transpiled/typescript-reexport.js b/test/cases/cjs-tree-shaking/transpiled/typescript-reexport.js new file mode 100644 index 00000000000..1d623783ab4 --- /dev/null +++ b/test/cases/cjs-tree-shaking/transpiled/typescript-reexport.js @@ -0,0 +1,4 @@ +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +__export(require("./module?1")); diff --git a/test/cases/cjs-tree-shaking/weird-names/index.js b/test/cases/cjs-tree-shaking/weird-names/index.js new file mode 100644 index 00000000000..453a0120cbf --- /dev/null +++ b/test/cases/cjs-tree-shaking/weird-names/index.js @@ -0,0 +1,16 @@ +import m from "./module"; + +it("should allow any name as exports in CommonJs", () => { + expect(m.abc).toBe("abc"); + expect(m[""]).toBe(""); + expect(m["default"]).toBe("default"); + expect(m["0"]).toBe("0"); + expect(m[1]).toBe(1); + expect(m.length).toBe("length"); + expect(m["0_0"]).toBe("0_0"); + expect(m.if).toBe("if"); + expect(m["\0"]).toBe("\0"); + expect(m["\n"]).toBe("\n"); + expect(m["*/"]).toBe("*/"); + expect(m["a.b.c"]).toBe("a.b.c"); +}); diff --git a/test/cases/cjs-tree-shaking/weird-names/module.js b/test/cases/cjs-tree-shaking/weird-names/module.js new file mode 100644 index 00000000000..af166b75536 --- /dev/null +++ b/test/cases/cjs-tree-shaking/weird-names/module.js @@ -0,0 +1,12 @@ +exports.abc = "abc"; +exports[""] = ""; +exports["default"] = "default"; +exports["0"] = "0"; +exports[1] = 1; +exports.length = "length"; +exports["0_0"] = "0_0"; +exports.if = "if"; +exports["\0"] = "\0"; +exports["\n"] = "\n"; +exports["*/"] = "*/"; +exports["a.b.c"] = "a.b.c"; diff --git a/test/cases/code-generation/issue-12232/index.js b/test/cases/code-generation/issue-12232/index.js new file mode 100644 index 00000000000..3035641d409 --- /dev/null +++ b/test/cases/code-generation/issue-12232/index.js @@ -0,0 +1,5 @@ +import * as X from "./module"; + +it("should generate valid code", () => { + expect(X["x\\"]).toBe(42); +}); diff --git a/test/cases/code-generation/issue-12232/module.js b/test/cases/code-generation/issue-12232/module.js new file mode 100644 index 00000000000..8bbfebb5686 --- /dev/null +++ b/test/cases/code-generation/issue-12232/module.js @@ -0,0 +1,3 @@ +module.exports = { + "x\\": 42 +}; diff --git a/test/cases/compile/error-hide-stack/errors.js b/test/cases/compile/error-hide-stack/errors.js index 709dd36e710..58fc17ed518 100644 --- a/test/cases/compile/error-hide-stack/errors.js +++ b/test/cases/compile/error-hide-stack/errors.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = [ - [/Module build failed( \(from [^)]+\))?:\nMessage\nStack/] + [/Module build failed( \(from [^)]+\))?:\nMessage/, { details: /Stack/ }] ]; diff --git a/test/cases/compile/error-hide-stack/index.js b/test/cases/compile/error-hide-stack/index.js index e73a65df4ee..85c538ed0e6 100644 --- a/test/cases/compile/error-hide-stack/index.js +++ b/test/cases/compile/error-hide-stack/index.js @@ -1,5 +1,5 @@ it("should hide stack in details", function() { expect(function f() { require("./loader!"); - }).toThrowError(); + }).toThrow(); }); diff --git a/test/cases/compile/error-hide-stack/infrastructure-log.js b/test/cases/compile/error-hide-stack/infrastructure-log.js new file mode 100644 index 00000000000..a75f53fc0c0 --- /dev/null +++ b/test/cases/compile/error-hide-stack/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules.+loader\.js!$/ +]; diff --git a/test/cases/compile/error-hide-stack/loader.js b/test/cases/compile/error-hide-stack/loader.js index 674e66c655f..b499c32a083 100644 --- a/test/cases/compile/error-hide-stack/loader.js +++ b/test/cases/compile/error-hide-stack/loader.js @@ -1,6 +1,8 @@ -module.exports = function() { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { var err = new Error("Message"); err.stack = "Stack"; + //@ts-expect-error hideStack is not a property on normal errors err.hideStack = true; throw err; }; diff --git a/test/cases/compile/long-module-chain/index.js b/test/cases/compile/long-module-chain/index.js new file mode 100644 index 00000000000..9e5db4611e9 --- /dev/null +++ b/test/cases/compile/long-module-chain/index.js @@ -0,0 +1,3 @@ +it("should compile a long module chain fine", () => { + require.resolveWeak("./module?800"); // this is orphan +}); diff --git a/test/cases/compile/long-module-chain/module.js b/test/cases/compile/long-module-chain/module.js new file mode 100644 index 00000000000..10eccfc47bd --- /dev/null +++ b/test/cases/compile/long-module-chain/module.js @@ -0,0 +1,5 @@ +if(__resourceQuery === "?0") { + module.exports = "module"; +} else { + module.exports = require("./module?" + (+__resourceQuery.slice(1) - 1)); +} diff --git a/test/cases/concord/inner-modules-and-extensions/index.js b/test/cases/concord/inner-modules-and-extensions/index.js deleted file mode 100644 index 4a2f7000fd6..00000000000 --- a/test/cases/concord/inner-modules-and-extensions/index.js +++ /dev/null @@ -1,12 +0,0 @@ -it("should resolve the alias in package.json", function() { - expect(require("app/file").default).toBe("file"); -}); - -it("should resolve the alias and extensions in package.json", function() { - expect(require("app/file2").default).toBe("correct file2"); -}); - -it("should resolve the alias in package.json", function() { - expect(require("thing").default).toBe("the thing"); -}); - diff --git a/test/cases/concord/inner-modules-and-extensions/modules/app/file.js b/test/cases/concord/inner-modules-and-extensions/modules/app/file.js deleted file mode 100644 index 7d6f52bc64b..00000000000 --- a/test/cases/concord/inner-modules-and-extensions/modules/app/file.js +++ /dev/null @@ -1 +0,0 @@ -export default "file"; diff --git a/test/cases/concord/inner-modules-and-extensions/modules/app/file2.js b/test/cases/concord/inner-modules-and-extensions/modules/app/file2.js deleted file mode 100644 index becf23de52d..00000000000 --- a/test/cases/concord/inner-modules-and-extensions/modules/app/file2.js +++ /dev/null @@ -1 +0,0 @@ -export default "wrong file2"; diff --git a/test/cases/concord/inner-modules-and-extensions/modules/app/file2.my-js b/test/cases/concord/inner-modules-and-extensions/modules/app/file2.my-js deleted file mode 100644 index 86502c23168..00000000000 --- a/test/cases/concord/inner-modules-and-extensions/modules/app/file2.my-js +++ /dev/null @@ -1 +0,0 @@ -export default "correct file2"; diff --git a/test/cases/concord/inner-modules-and-extensions/package.json b/test/cases/concord/inner-modules-and-extensions/package.json deleted file mode 100644 index 31705cfca3c..00000000000 --- a/test/cases/concord/inner-modules-and-extensions/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "concord": { - "modules": { - "app/**": "./modules/app/**", - "thing": "./the-thing" - }, - "extensions": [ - ".my-js", - ".js" - ] - } -} \ No newline at end of file diff --git a/test/cases/concord/inner-modules-and-extensions/the-thing.js b/test/cases/concord/inner-modules-and-extensions/the-thing.js deleted file mode 100644 index dd329027bb4..00000000000 --- a/test/cases/concord/inner-modules-and-extensions/the-thing.js +++ /dev/null @@ -1 +0,0 @@ -export default "the thing"; \ No newline at end of file diff --git a/test/cases/context/ignore-hidden-files/index.js b/test/cases/context/ignore-hidden-files/index.js index 83313cd16e2..df90fc86515 100644 --- a/test/cases/context/ignore-hidden-files/index.js +++ b/test/cases/context/ignore-hidden-files/index.js @@ -2,5 +2,5 @@ it("should ignore hidden files", function() { expect(function() { var name = "./file.js"; require("./folder/" + name); - }).toThrowError(); + }).toThrow(); }); \ No newline at end of file diff --git a/test/cases/context/import-meta-webpack-context/dir/four.js b/test/cases/context/import-meta-webpack-context/dir/four.js new file mode 100644 index 00000000000..a9bbdd80578 --- /dev/null +++ b/test/cases/context/import-meta-webpack-context/dir/four.js @@ -0,0 +1 @@ +module.exports = 4; diff --git a/test/cases/context/import-meta-webpack-context/index.js b/test/cases/context/import-meta-webpack-context/index.js new file mode 100644 index 00000000000..2c60e21152e --- /dev/null +++ b/test/cases/context/import-meta-webpack-context/index.js @@ -0,0 +1,27 @@ +it("should allow prefetch/preload", function() { + const contextRequire = import.meta.webpackContext("./dir", { + prefetch: true, + preload: 1 + }); + expect(contextRequire("./four")).toBe(4); +}); + +it("should allow include/exclude", function() { + const contextRequire = import.meta.webpackContext(".", { + recursive: false, + regExp: /two/, + mode: "weak", + exclude: /three/ + }); + expect(function() { + contextRequire("./two-three") + }).toThrow(/Cannot find module/); +}); + +it("should allow chunkName", function() { + const contextRequire = import.meta.webpackContext(".", { + regExp: /two-three/, + chunkName: "chunk012" + }); + expect(contextRequire("./two-three")).toBe(3); +}); diff --git a/test/cases/context/import-meta-webpack-context/two-three.js b/test/cases/context/import-meta-webpack-context/two-three.js new file mode 100644 index 00000000000..690aad34a46 --- /dev/null +++ b/test/cases/context/import-meta-webpack-context/two-three.js @@ -0,0 +1 @@ +module.exports = 3; diff --git a/test/cases/context/import-meta-webpack-context/two.js b/test/cases/context/import-meta-webpack-context/two.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/cases/context/import-meta-webpack-context/two.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/cases/parsing/inject-free-vars/x1.js b/test/cases/context/issue-10969/folder/file1.js similarity index 100% rename from test/cases/parsing/inject-free-vars/x1.js rename to test/cases/context/issue-10969/folder/file1.js diff --git a/test/cases/context/issue-10969/index.js b/test/cases/context/issue-10969/index.js new file mode 100644 index 00000000000..200b8f31018 --- /dev/null +++ b/test/cases/context/issue-10969/index.js @@ -0,0 +1,12 @@ +it("should replace ! with %21 in the module id string of the context module", function () { + const moduleId = require.context( + "./folder", + true, + /^(?!file1\.js$).*$/i, + "lazy" + ).id; + if (typeof moduleId !== "number") + expect(moduleId).toBe( + "./context/issue-10969/folder lazy recursive ^(?%21file1\\.js$).*$i" + ); +}); diff --git a/test/cases/context/issue-18752/folder/file.js b/test/cases/context/issue-18752/folder/file.js new file mode 100644 index 00000000000..cb234ade61b --- /dev/null +++ b/test/cases/context/issue-18752/folder/file.js @@ -0,0 +1,9 @@ +export function generateSummary() { + return 1; +} +export function entityActionQueue() { + return 2; +} +export function bar() { + return 3; +} diff --git a/test/cases/context/issue-18752/index.js b/test/cases/context/issue-18752/index.js new file mode 100644 index 00000000000..0a4603bf4cd --- /dev/null +++ b/test/cases/context/issue-18752/index.js @@ -0,0 +1,18 @@ +it("should work with importing the same file twice and destructuring", async () => { + const type = "file"; + const { generateSummary } = await import( + /* webpackInclude: /[/\\]folder[/\\](?!.*\.test).*\.m?js$/ */ + /* webpackChunkName: "chunk-name" */ + /* webpackMode: "lazy-once" */ + `./folder/${type}.js` + ); + expect(typeof generateSummary).toBe("function"); + + const { entityActionQueue } = await import( + /* webpackInclude: /[/\\]folder[/\\](?!.*\.test).*\.m?js$/ */ + /* webpackChunkName: "chunk-name" */ + /* webpackMode: "lazy-once" */ + `./folder/${type}.js` + ); + expect(typeof entityActionQueue).toBe("function"); +}); diff --git a/test/cases/context/issue-524/index.js b/test/cases/context/issue-524/index.js index 4c0c7721c43..0c86b25d4f6 100644 --- a/test/cases/context/issue-524/index.js +++ b/test/cases/context/issue-524/index.js @@ -3,9 +3,9 @@ it("should support an empty context", function() { expect(typeof c.id === "number" || typeof c.id === "string").toBeTruthy(); expect(function() { c.resolve(""); - }).toThrowError(); + }).toThrow(); expect(function() { c(""); - }).toThrowError(); + }).toThrow(); expect(c.keys()).toEqual([]); }); diff --git a/test/cases/context/issue-5750/warnings.js b/test/cases/context/issue-5750/warnings.js index 62587ab93e0..6ac56f3ca4d 100644 --- a/test/cases/context/issue-5750/warnings.js +++ b/test/cases/context/issue-5750/warnings.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = [ - [/Critical dependency: Contexts can't use RegExps with the 'g' or 'y' flags/], + [/Critical dependency: Contexts can't use RegExps with the 'g' or 'y' flags/] ]; diff --git a/test/cases/entry-exports-field/import-and-require/index.js b/test/cases/entry-exports-field/import-and-require/index.js new file mode 100644 index 00000000000..7ae29e69264 --- /dev/null +++ b/test/cases/entry-exports-field/import-and-require/index.js @@ -0,0 +1,7 @@ +import d1 from "pck"; +const d2 = require("pck"); + +it("require and import for the same request", () => { + expect(d1).toBe(2); + expect(d2).toBe(1); +}); diff --git a/test/cases/entry-exports-field/import-and-require/node_modules/pck/import.js b/test/cases/entry-exports-field/import-and-require/node_modules/pck/import.js new file mode 100644 index 00000000000..842e368a0a2 --- /dev/null +++ b/test/cases/entry-exports-field/import-and-require/node_modules/pck/import.js @@ -0,0 +1 @@ +export default 2; diff --git a/test/cases/entry-exports-field/import-and-require/node_modules/pck/package.json b/test/cases/entry-exports-field/import-and-require/node_modules/pck/package.json new file mode 100644 index 00000000000..f6fca37a211 --- /dev/null +++ b/test/cases/entry-exports-field/import-and-require/node_modules/pck/package.json @@ -0,0 +1,9 @@ +{ + "name": "pck", + "exports": { + ".": { + "require": "./require.js", + "import": "./import.js" + } + } +} diff --git a/test/cases/entry-exports-field/import-and-require/node_modules/pck/require.js b/test/cases/entry-exports-field/import-and-require/node_modules/pck/require.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/cases/entry-exports-field/import-and-require/node_modules/pck/require.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/cases/entry-exports-field/imports/index.js b/test/cases/entry-exports-field/imports/index.js new file mode 100644 index 00000000000..03782a7d809 --- /dev/null +++ b/test/cases/entry-exports-field/imports/index.js @@ -0,0 +1,6 @@ +import d1 from "./pkg.mjs"; +import d2 from "#internal"; + +it("imports field to resolve to the same", () => { + expect(d1).toBe(d2); +}); diff --git a/test/cases/entry-exports-field/imports/package.json b/test/cases/entry-exports-field/imports/package.json new file mode 100644 index 00000000000..2b416f27ebf --- /dev/null +++ b/test/cases/entry-exports-field/imports/package.json @@ -0,0 +1,7 @@ +{ + "name": "pkg", + "exports": "./pkg.mjs", + "imports": { + "#internal": "./pkg.mjs" + } +} \ No newline at end of file diff --git a/test/cases/entry-exports-field/imports/pkg.mjs b/test/cases/entry-exports-field/imports/pkg.mjs new file mode 100644 index 00000000000..3fa44fe7fa6 --- /dev/null +++ b/test/cases/entry-exports-field/imports/pkg.mjs @@ -0,0 +1 @@ +export default 'pkg'; diff --git a/test/cases/entry-exports-field/loader/file.txt b/test/cases/entry-exports-field/loader/file.txt new file mode 100644 index 00000000000..190a18037c6 --- /dev/null +++ b/test/cases/entry-exports-field/loader/file.txt @@ -0,0 +1 @@ +123 diff --git a/test/cases/entry-exports-field/loader/index.js b/test/cases/entry-exports-field/loader/index.js new file mode 100644 index 00000000000..8c7168b56ab --- /dev/null +++ b/test/cases/entry-exports-field/loader/index.js @@ -0,0 +1,5 @@ +import d1 from "toml-parser!./file.txt"; + +it("should resolve loader using exports field", () => { + expect(d1).toBe("123\ntoml"); +}); diff --git a/test/cases/parsing/requirejs/file.js b/test/cases/entry-exports-field/loader/node_modules/toml-parser/index.js similarity index 100% rename from test/cases/parsing/requirejs/file.js rename to test/cases/entry-exports-field/loader/node_modules/toml-parser/index.js diff --git a/test/cases/entry-exports-field/loader/node_modules/toml-parser/loader.js b/test/cases/entry-exports-field/loader/node_modules/toml-parser/loader.js new file mode 100644 index 00000000000..70461ac821c --- /dev/null +++ b/test/cases/entry-exports-field/loader/node_modules/toml-parser/loader.js @@ -0,0 +1 @@ +module.exports = c => `module.exports = ${JSON.stringify(c.trim() + "\ntoml")}`; diff --git a/test/cases/entry-exports-field/loader/node_modules/toml-parser/package.json b/test/cases/entry-exports-field/loader/node_modules/toml-parser/package.json new file mode 100644 index 00000000000..2287d5db81d --- /dev/null +++ b/test/cases/entry-exports-field/loader/node_modules/toml-parser/package.json @@ -0,0 +1,9 @@ +{ + "name": "toml-loader", + "main": "index.js", + "exports": { + ".": { + "loader": "./loader.js" + } + } +} diff --git a/test/cases/entry-exports-field/self/index.js b/test/cases/entry-exports-field/self/index.js new file mode 100644 index 00000000000..0a20bc1c6cd --- /dev/null +++ b/test/cases/entry-exports-field/self/index.js @@ -0,0 +1,9 @@ +import dataImport from "@scope/self/a.js"; +import dataRequire from "./module1.js"; +import importChainEndsWithRequire from "./module3.js"; + +it("should respect type of import", function() { + expect(dataImport).toBe(1); + expect(dataRequire).toBe(2); + expect(importChainEndsWithRequire).toBe(2); +}); diff --git a/test/cases/entry-exports-field/self/lib/b.js b/test/cases/entry-exports-field/self/lib/b.js new file mode 100644 index 00000000000..aef22247d75 --- /dev/null +++ b/test/cases/entry-exports-field/self/lib/b.js @@ -0,0 +1 @@ +export default 1; diff --git a/test/cases/entry-exports-field/self/lib/c.js b/test/cases/entry-exports-field/self/lib/c.js new file mode 100644 index 00000000000..842e368a0a2 --- /dev/null +++ b/test/cases/entry-exports-field/self/lib/c.js @@ -0,0 +1 @@ +export default 2; diff --git a/test/cases/entry-exports-field/self/module1.js b/test/cases/entry-exports-field/self/module1.js new file mode 100644 index 00000000000..05f57a297c9 --- /dev/null +++ b/test/cases/entry-exports-field/self/module1.js @@ -0,0 +1 @@ +module.exports = require("@scope/self/a.js"); diff --git a/test/cases/entry-exports-field/self/module2.js b/test/cases/entry-exports-field/self/module2.js new file mode 100644 index 00000000000..2ad5f386911 --- /dev/null +++ b/test/cases/entry-exports-field/self/module2.js @@ -0,0 +1,2 @@ +import d from "./module1"; +export default d; diff --git a/test/cases/entry-exports-field/self/module3.js b/test/cases/entry-exports-field/self/module3.js new file mode 100644 index 00000000000..5794fa8f334 --- /dev/null +++ b/test/cases/entry-exports-field/self/module3.js @@ -0,0 +1,2 @@ +import d from "./module2.js"; +export default d; diff --git a/test/cases/entry-exports-field/self/package.json b/test/cases/entry-exports-field/self/package.json new file mode 100644 index 00000000000..2e2c280a13f --- /dev/null +++ b/test/cases/entry-exports-field/self/package.json @@ -0,0 +1,10 @@ +{ + "name": "@scope/self", + "version": "1.0.0", + "exports": { + "./a.js": { + "import": "./lib/b.js", + "require": "./lib/c.js" + } + } +} diff --git a/test/cases/entry-inline/no-var-leak-strict/index.js b/test/cases/entry-inline/no-var-leak-strict/index.js new file mode 100644 index 00000000000..bf7fd565e5d --- /dev/null +++ b/test/cases/entry-inline/no-var-leak-strict/index.js @@ -0,0 +1,10 @@ +var localVar = 42; + +it("should not leak localVar to other modules", () => { + expect(localVar).toBe(42); + import(/* webpackMode: "eager" */ "./module").then(module => { + expect(module.default).toBe("undefined"); + }); +}); + +export {}; diff --git a/test/cases/entry-inline/no-var-leak-strict/module.js b/test/cases/entry-inline/no-var-leak-strict/module.js new file mode 100644 index 00000000000..8ed1c267cda --- /dev/null +++ b/test/cases/entry-inline/no-var-leak-strict/module.js @@ -0,0 +1 @@ +export default typeof localVar; diff --git a/test/cases/entry-inline/no-var-leak/index.js b/test/cases/entry-inline/no-var-leak/index.js new file mode 100644 index 00000000000..a383a6bc6ad --- /dev/null +++ b/test/cases/entry-inline/no-var-leak/index.js @@ -0,0 +1,6 @@ +var localVar = 42; + +it("should not leak localVar to other modules", () => { + expect(localVar).toBe(42); + expect(require("./module")).toBe("undefined"); +}); diff --git a/test/cases/entry-inline/no-var-leak/module.js b/test/cases/entry-inline/no-var-leak/module.js new file mode 100644 index 00000000000..e4550cf77a6 --- /dev/null +++ b/test/cases/entry-inline/no-var-leak/module.js @@ -0,0 +1 @@ +module.exports = typeof localVar; diff --git a/test/cases/errors/case-sensitive/test.filter.js b/test/cases/errors/case-sensitive/test.filter.js index 9ae7a5027bc..70256c4b1a0 100644 --- a/test/cases/errors/case-sensitive/test.filter.js +++ b/test/cases/errors/case-sensitive/test.filter.js @@ -1,6 +1,6 @@ -var fs = require("fs"); -var path = require("path"); +"use strict"; -module.exports = function(config) { - return fs.existsSync(path.join(__dirname, "TEST.FILTER.JS")); -}; +const fs = require("fs"); +const path = require("path"); + +module.exports = () => fs.existsSync(path.join(__dirname, "TEST.FILTER.JS")); diff --git a/test/cases/errors/case-sensitive/warnings.js b/test/cases/errors/case-sensitive/warnings.js index 99ac2e5cf9e..f8bdfa9a04a 100644 --- a/test/cases/errors/case-sensitive/warnings.js +++ b/test/cases/errors/case-sensitive/warnings.js @@ -1,4 +1,14 @@ +"use strict"; + module.exports = [ - [/There are multiple modules with names that only differ in casing/, /case-sensitive.A\.js/, /case-sensitive.a\.js/], - [/There are multiple modules with names that only differ in casing/, /case-sensitive.B.file\.js/, /case-sensitive.b.file\.js/] + [ + /There are multiple modules with names that only differ in casing/, + /case-sensitive.A\.js/, + /case-sensitive.a\.js/ + ], + [ + /There are multiple modules with names that only differ in casing/, + /case-sensitive.B.file\.js/, + /case-sensitive.b.file\.js/ + ] ]; diff --git a/test/cases/errors/crash-missing-import/errors.js b/test/cases/errors/crash-missing-import/errors.js index 4eefda428cf..3c4e17e881e 100644 --- a/test/cases/errors/crash-missing-import/errors.js +++ b/test/cases/errors/crash-missing-import/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Module not found/], -]; +"use strict"; + +module.exports = [[/Module not found/]]; diff --git a/test/cases/errors/crash-missing-import/index.js b/test/cases/errors/crash-missing-import/index.js index 55c9b56c6c8..4e5b8906706 100644 --- a/test/cases/errors/crash-missing-import/index.js +++ b/test/cases/errors/crash-missing-import/index.js @@ -1,4 +1,3 @@ -it("should not crash when imported module is missing", function() { -}); +it("should not crash when imported module is missing", function() {}); -require.include("./a"); +if (Math.random() < 0) require("./a"); diff --git a/test/cases/errors/cyclic-reexport-references/a.js b/test/cases/errors/cyclic-reexport-references/a.js new file mode 100644 index 00000000000..fc5ea6b3b5a --- /dev/null +++ b/test/cases/errors/cyclic-reexport-references/a.js @@ -0,0 +1,3 @@ +import { B } from "./cycle"; + +export const A = B; diff --git a/test/cases/errors/cyclic-reexport-references/b.js b/test/cases/errors/cyclic-reexport-references/b.js new file mode 100644 index 00000000000..ab1029e4a85 --- /dev/null +++ b/test/cases/errors/cyclic-reexport-references/b.js @@ -0,0 +1,3 @@ +import { A } from "./cycle"; + +export const B = A; diff --git a/test/cases/errors/cyclic-reexport-references/cycle.js b/test/cases/errors/cyclic-reexport-references/cycle.js new file mode 100644 index 00000000000..bfd87cc235c --- /dev/null +++ b/test/cases/errors/cyclic-reexport-references/cycle.js @@ -0,0 +1,2 @@ +export { A } from "./a"; +export { B } from "./b"; diff --git a/test/cases/errors/cyclic-reexport-references/index.js b/test/cases/errors/cyclic-reexport-references/index.js new file mode 100644 index 00000000000..138590cd546 --- /dev/null +++ b/test/cases/errors/cyclic-reexport-references/index.js @@ -0,0 +1,5 @@ +it("should fail with a ReferenceError", () => { + expect(() => { + require("./cycle"); + }).toThrow(); +}); diff --git a/test/cases/errors/harmony-import-missing/errors.js b/test/cases/errors/harmony-import-missing/errors.js index 6084546bf7b..d788c598c7c 100644 --- a/test/cases/errors/harmony-import-missing/errors.js +++ b/test/cases/errors/harmony-import-missing/errors.js @@ -1,5 +1,3 @@ -module.exports = [ - [ - /Can't resolve '.\/missing'/ - ] -]; +"use strict"; + +module.exports = [[/Can't resolve '.\/missing'/]]; diff --git a/test/cases/errors/harmony-import-missing/index.js b/test/cases/errors/harmony-import-missing/index.js index 14db1676922..278c5637578 100644 --- a/test/cases/errors/harmony-import-missing/index.js +++ b/test/cases/errors/harmony-import-missing/index.js @@ -1,5 +1,5 @@ it("should not crash on importing missing modules", function() { expect(function() { require("./module"); - }).toThrowError(); + }).toThrow(); }); diff --git a/test/cases/errors/harmony-import-missing2/a.js b/test/cases/errors/harmony-import-missing2/a.js new file mode 100644 index 00000000000..173df5cb056 --- /dev/null +++ b/test/cases/errors/harmony-import-missing2/a.js @@ -0,0 +1 @@ +export var test = "test"; diff --git a/test/cases/errors/harmony-import-missing2/errors.js b/test/cases/errors/harmony-import-missing2/errors.js new file mode 100644 index 00000000000..bfc02f03a00 --- /dev/null +++ b/test/cases/errors/harmony-import-missing2/errors.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + [/Can't resolve '.\/missing1'/], + [/Can't resolve '.\/missing2'/] +]; diff --git a/test/cases/errors/harmony-import-missing2/index.js b/test/cases/errors/harmony-import-missing2/index.js new file mode 100644 index 00000000000..8f416c73d92 --- /dev/null +++ b/test/cases/errors/harmony-import-missing2/index.js @@ -0,0 +1,11 @@ +it("should not crash on importing missing modules", function() { + expect(function() { + require("./module1"); + }).toThrow(); +}); + +it("should not crash on importing missing modules", function() { + expect(function() { + require("./module2"); + }).toThrow(); +}); diff --git a/test/cases/errors/harmony-import-missing2/module1.js b/test/cases/errors/harmony-import-missing2/module1.js new file mode 100644 index 00000000000..cc6275d1650 --- /dev/null +++ b/test/cases/errors/harmony-import-missing2/module1.js @@ -0,0 +1,2 @@ +export * from "./missing1"; +export * from "./a?1"; diff --git a/test/cases/errors/harmony-import-missing2/module2.js b/test/cases/errors/harmony-import-missing2/module2.js new file mode 100644 index 00000000000..3b41b648333 --- /dev/null +++ b/test/cases/errors/harmony-import-missing2/module2.js @@ -0,0 +1,2 @@ +export { a } from "./missing2"; +export * from "./a?2"; diff --git a/test/cases/errors/import-module-cycle-multiple/1/a.json b/test/cases/errors/import-module-cycle-multiple/1/a.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/1/a.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/import-module-cycle-multiple/2/a.json b/test/cases/errors/import-module-cycle-multiple/2/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/2/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/import-module-cycle-multiple/2/b.json b/test/cases/errors/import-module-cycle-multiple/2/b.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/2/b.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/import-module-cycle-multiple/3/a.json b/test/cases/errors/import-module-cycle-multiple/3/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/3/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/import-module-cycle-multiple/3/b.json b/test/cases/errors/import-module-cycle-multiple/3/b.json new file mode 100644 index 00000000000..5a2d1989f77 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/3/b.json @@ -0,0 +1 @@ +"./c.json" diff --git a/test/cases/errors/import-module-cycle-multiple/3/c.json b/test/cases/errors/import-module-cycle-multiple/3/c.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/3/c.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/import-module-cycle-multiple/4/a.json b/test/cases/errors/import-module-cycle-multiple/4/a.json new file mode 100644 index 00000000000..08a6371d338 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/4/a.json @@ -0,0 +1 @@ +["./b.json", "./b.json"] diff --git a/test/cases/errors/import-module-cycle-multiple/4/b.json b/test/cases/errors/import-module-cycle-multiple/4/b.json new file mode 100644 index 00000000000..5a2d1989f77 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/4/b.json @@ -0,0 +1 @@ +"./c.json" diff --git a/test/cases/errors/import-module-cycle-multiple/4/c.json b/test/cases/errors/import-module-cycle-multiple/4/c.json new file mode 100644 index 00000000000..fe51488c706 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/4/c.json @@ -0,0 +1 @@ +[] diff --git a/test/cases/errors/import-module-cycle-multiple/index.js b/test/cases/errors/import-module-cycle-multiple/index.js new file mode 100644 index 00000000000..054ea2e1af6 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/index.js @@ -0,0 +1,31 @@ +it("should error importModule when a cycle with 2 modules is requested", () => { + expect(require("./loader!./2/a")).toEqual([ + ["./b.json", [ + ["./a.json", "err: There is a circular build dependency, which makes it impossible to create this module"] + ]] + ]); +}); +it("should error importModule when a cycle with 3 modules is requested", () => { + expect(require("./loader!./3/a")).toEqual([ + ["./b.json", [ + ["./c.json", [ + ["./a.json", "err: There is a circular build dependency, which makes it impossible to create this module"] + ]] + ]] + ]); +}); +it("should error importModule when requesting itself", () => { + expect(require("./loader!./1/a")).toEqual([ + ["./a.json", "err: There is a circular build dependency, which makes it impossible to create this module"] + ]); +}); +it("should not report a cycle when importModule is used twice", () => { + expect(require("./loader!./4/a")).toEqual([ + ["./b.json", [ + ["./c.json", []] + ]], + ["./b.json", [ + ["./c.json", []] + ]] + ]); +}); diff --git a/test/cases/errors/import-module-cycle-multiple/loader.js b/test/cases/errors/import-module-cycle-multiple/loader.js new file mode 100644 index 00000000000..b5391becfb1 --- /dev/null +++ b/test/cases/errors/import-module-cycle-multiple/loader.js @@ -0,0 +1,24 @@ +/** @type {import("../../../../").LoaderDefinitionFunction} */ +exports.default = function (source) { + const content = JSON.parse(source); + // content is one reference or an array of references + const refs = Array.isArray(content) ? content : [content]; + const callback = this.async(); + const importReferencedModules = async () => { + const loadedRefs = [] + for(const ref of refs) { + try { + const source = await this.importModule("../loader!" + ref); + loadedRefs.push([ref, source]); + } catch (_err) { + const err = /** @type {Error} */ (_err); + loadedRefs.push([ref, `err: ${err && err.message}`]); + } + } + return loadedRefs; + } + + importReferencedModules().then((loadResults) => { + callback(null, JSON.stringify(loadResults)); + }); +}; diff --git a/test/cases/errors/import-module-cycle/1/a.json b/test/cases/errors/import-module-cycle/1/a.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/import-module-cycle/1/a.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/import-module-cycle/2/a.json b/test/cases/errors/import-module-cycle/2/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/import-module-cycle/2/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/import-module-cycle/2/b.json b/test/cases/errors/import-module-cycle/2/b.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/import-module-cycle/2/b.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/import-module-cycle/3/a.json b/test/cases/errors/import-module-cycle/3/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/import-module-cycle/3/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/import-module-cycle/3/b.json b/test/cases/errors/import-module-cycle/3/b.json new file mode 100644 index 00000000000..5a2d1989f77 --- /dev/null +++ b/test/cases/errors/import-module-cycle/3/b.json @@ -0,0 +1 @@ +"./c.json" diff --git a/test/cases/errors/import-module-cycle/3/c.json b/test/cases/errors/import-module-cycle/3/c.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/import-module-cycle/3/c.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/import-module-cycle/index.js b/test/cases/errors/import-module-cycle/index.js new file mode 100644 index 00000000000..3d5f92f0087 --- /dev/null +++ b/test/cases/errors/import-module-cycle/index.js @@ -0,0 +1,15 @@ +it("should error importModule when a cycle with 2 modules is requested", () => { + expect(require("./loader!./2/a")).toMatch( + /^source: err: There is a circular build dependency/ + ); +}); +it("should error importModule when a cycle with 3 modules is requested", () => { + expect(require("./loader!./3/a")).toMatch( + /^source: source: err: There is a circular build dependency/ + ); +}); +it("should error importModule when requesting itself", () => { + expect(require("./loader!./1/a")).toMatch( + /^err: There is a circular build dependency/ + ); +}); diff --git a/test/cases/errors/import-module-cycle/loader.js b/test/cases/errors/import-module-cycle/loader.js new file mode 100644 index 00000000000..5c911ed80ef --- /dev/null +++ b/test/cases/errors/import-module-cycle/loader.js @@ -0,0 +1,12 @@ +/** @type {import("../../../../").LoaderDefinition} */ +exports.default = function (source) { + const ref = JSON.parse(source); + const callback = this.async(); + this.importModule("../loader!" + ref, {}, (err, exports) => { + if (err) { + callback(null, JSON.stringify(`err: ${err && err.message}`)); + } else { + callback(null, JSON.stringify(`source: ${exports}`)); + } + }); +}; diff --git a/test/cases/errors/load-module-cycle-multiple/1/a.json b/test/cases/errors/load-module-cycle-multiple/1/a.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/1/a.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/load-module-cycle-multiple/2/a.json b/test/cases/errors/load-module-cycle-multiple/2/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/2/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/load-module-cycle-multiple/2/b.json b/test/cases/errors/load-module-cycle-multiple/2/b.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/2/b.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/load-module-cycle-multiple/3/a.json b/test/cases/errors/load-module-cycle-multiple/3/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/3/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/load-module-cycle-multiple/3/b.json b/test/cases/errors/load-module-cycle-multiple/3/b.json new file mode 100644 index 00000000000..5a2d1989f77 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/3/b.json @@ -0,0 +1 @@ +"./c.json" diff --git a/test/cases/errors/load-module-cycle-multiple/3/c.json b/test/cases/errors/load-module-cycle-multiple/3/c.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/3/c.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/load-module-cycle-multiple/4/a.json b/test/cases/errors/load-module-cycle-multiple/4/a.json new file mode 100644 index 00000000000..08a6371d338 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/4/a.json @@ -0,0 +1 @@ +["./b.json", "./b.json"] diff --git a/test/cases/errors/load-module-cycle-multiple/4/b.json b/test/cases/errors/load-module-cycle-multiple/4/b.json new file mode 100644 index 00000000000..5a2d1989f77 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/4/b.json @@ -0,0 +1 @@ +"./c.json" diff --git a/test/cases/errors/load-module-cycle-multiple/4/c.json b/test/cases/errors/load-module-cycle-multiple/4/c.json new file mode 100644 index 00000000000..fe51488c706 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/4/c.json @@ -0,0 +1 @@ +[] diff --git a/test/cases/errors/load-module-cycle-multiple/index.js b/test/cases/errors/load-module-cycle-multiple/index.js new file mode 100644 index 00000000000..c728f5ab60d --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/index.js @@ -0,0 +1,31 @@ +it("should error loadModule when a cycle with 2 modules is requested", () => { + expect(require("./loader!./2/a")).toEqual([ + ["./b.json", [ + ["./a.json", "err: There is a circular build dependency, which makes it impossible to create this module"] + ]] + ]); +}); +it("should error loadModule when a cycle with 3 modules is requested", () => { + expect(require("./loader!./3/a")).toEqual([ + ["./b.json", [ + ["./c.json", [ + ["./a.json", "err: There is a circular build dependency, which makes it impossible to create this module"] + ]] + ]] + ]); +}); +it("should error loadModule when requesting itself", () => { + expect(require("./loader!./1/a")).toEqual([ + ["./a.json", "err: There is a circular build dependency, which makes it impossible to create this module"] + ]); +}); +it("should not report a cycle when loadModule is used twice (https://github.com/webpack/webpack/issues/14379)", () => { + expect(require("./loader!./4/a")).toEqual([ + ["./b.json", [ + ["./c.json", []] + ]], + ["./b.json", [ + ["./c.json", []] + ]] + ]); +}); diff --git a/test/cases/errors/load-module-cycle-multiple/loader.js b/test/cases/errors/load-module-cycle-multiple/loader.js new file mode 100644 index 00000000000..65389f59ee0 --- /dev/null +++ b/test/cases/errors/load-module-cycle-multiple/loader.js @@ -0,0 +1,31 @@ +const { promisify } = require("util"); + +/** @type {import("../../../../").LoaderDefinitionFunction} */ +exports.default = function (source) { + const content = JSON.parse(source); + // content is one reference or an array of references + const refs = Array.isArray(content) ? content : [content]; + const callback = this.async(); + const loadModulePromise = promisify(this.loadModule.bind(this)); + + async function loadReferencedModules() { + // Modules are loaded sequentially as the false-positive circular reference + // bug from https://github.com/webpack/webpack/issues/14379 doesn't occur if + // they are loaded in parallel. + const loadedRefs = [] + for(const ref of refs) { + try { + const source = await loadModulePromise("../loader!" + ref); + loadedRefs.push([ref, JSON.parse(source)]); + } catch(_err) { + const err = /** @type {Error} */ (_err); + loadedRefs.push([ref, `err: ${err && err.message}`]); + } + } + return loadedRefs; + } + + loadReferencedModules().then((loadResults) => { + callback(null, JSON.stringify(loadResults)); + }); +}; diff --git a/test/cases/errors/load-module-cycle/1/a.json b/test/cases/errors/load-module-cycle/1/a.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/load-module-cycle/1/a.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/load-module-cycle/2/a.json b/test/cases/errors/load-module-cycle/2/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/load-module-cycle/2/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/load-module-cycle/2/b.json b/test/cases/errors/load-module-cycle/2/b.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/load-module-cycle/2/b.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/load-module-cycle/3/a.json b/test/cases/errors/load-module-cycle/3/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/load-module-cycle/3/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/errors/load-module-cycle/3/b.json b/test/cases/errors/load-module-cycle/3/b.json new file mode 100644 index 00000000000..5a2d1989f77 --- /dev/null +++ b/test/cases/errors/load-module-cycle/3/b.json @@ -0,0 +1 @@ +"./c.json" diff --git a/test/cases/errors/load-module-cycle/3/c.json b/test/cases/errors/load-module-cycle/3/c.json new file mode 100644 index 00000000000..9a389c9696a --- /dev/null +++ b/test/cases/errors/load-module-cycle/3/c.json @@ -0,0 +1 @@ +"./a.json" diff --git a/test/cases/errors/load-module-cycle/index.js b/test/cases/errors/load-module-cycle/index.js new file mode 100644 index 00000000000..e7b74a9e7c5 --- /dev/null +++ b/test/cases/errors/load-module-cycle/index.js @@ -0,0 +1,15 @@ +it("should error loadModule when a cycle with 2 modules is requested", () => { + expect(require("./loader!./2/a")).toMatch( + /^source: err: There is a circular build dependency/ + ); +}); +it("should error loadModule when a cycle with 3 modules is requested", () => { + expect(require("./loader!./3/a")).toMatch( + /^source: source: err: There is a circular build dependency/ + ); +}); +it("should error loadModule when requesting itself", () => { + expect(require("./loader!./1/a")).toMatch( + /^err: There is a circular build dependency/ + ); +}); diff --git a/test/cases/errors/load-module-cycle/loader.js b/test/cases/errors/load-module-cycle/loader.js new file mode 100644 index 00000000000..7fb570c8014 --- /dev/null +++ b/test/cases/errors/load-module-cycle/loader.js @@ -0,0 +1,12 @@ +/** @type {import("../../../../").LoaderDefinition} */ +exports.default = function (source) { + const ref = JSON.parse(source); + const callback = this.async(); + this.loadModule("../loader!" + ref, (err, source, sourceMap, module) => { + if (err) { + callback(null, JSON.stringify(`err: ${err && err.message}`)); + } else { + callback(null, JSON.stringify(`source: ${JSON.parse(/** @type {string} */ (source))}`)); + } + }); +}; diff --git a/test/cases/errors/load-module-error/a.json b/test/cases/errors/load-module-error/a.json new file mode 100644 index 00000000000..75e02a30f04 --- /dev/null +++ b/test/cases/errors/load-module-error/a.json @@ -0,0 +1 @@ +"./b.json" diff --git a/test/cases/runtime/issue-2391-chunk/file.js b/test/cases/errors/load-module-error/b.json similarity index 100% rename from test/cases/runtime/issue-2391-chunk/file.js rename to test/cases/errors/load-module-error/b.json diff --git a/test/cases/errors/load-module-error/error-loader.js b/test/cases/errors/load-module-error/error-loader.js new file mode 100644 index 00000000000..5758c7646c7 --- /dev/null +++ b/test/cases/errors/load-module-error/error-loader.js @@ -0,0 +1,5 @@ +/** @type {import("../../../../types").LoaderDefinition} */ +module.exports = function(source) { + const callback = this.async(); + callback(new Error("err: abc")); +} diff --git a/test/cases/errors/load-module-error/errors.js b/test/cases/errors/load-module-error/errors.js new file mode 100644 index 00000000000..fd52cf72f99 --- /dev/null +++ b/test/cases/errors/load-module-error/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/err: abc/], [/The loaded module contains errors/]]; diff --git a/test/cases/errors/load-module-error/index.js b/test/cases/errors/load-module-error/index.js new file mode 100644 index 00000000000..29da61868cc --- /dev/null +++ b/test/cases/errors/load-module-error/index.js @@ -0,0 +1,5 @@ +it("should error loadModule when the referenced module contains errors", () => { + expect(function() { + require("./loader!./a") + }).toThrow(); +}); diff --git a/test/cases/errors/load-module-error/infrastructure-log.js b/test/cases/errors/load-module-error/infrastructure-log.js new file mode 100644 index 00000000000..113d661ee6e --- /dev/null +++ b/test/cases/errors/load-module-error/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules|json.+error-loader\.js!/ +]; diff --git a/test/cases/errors/load-module-error/loader.js b/test/cases/errors/load-module-error/loader.js new file mode 100644 index 00000000000..10fe2387ff9 --- /dev/null +++ b/test/cases/errors/load-module-error/loader.js @@ -0,0 +1,12 @@ +/** @type {import("../../../../").LoaderDefinition} */ +exports.default = function (source) { + const callback = this.async(); + const ref = JSON.parse(source); + this.loadModule("./error-loader!" + ref, (err, source, sourceMap, module) => { + if (err) { + callback(err); + } else { + callback(null, JSON.stringify(`source: ${JSON.parse(/** @type {string} */ (source))}`)); + } + }); +}; diff --git a/test/cases/errors/loader-error-warning/error-loader.js b/test/cases/errors/loader-error-warning/error-loader.js index 175192c08da..981790bb520 100644 --- a/test/cases/errors/loader-error-warning/error-loader.js +++ b/test/cases/errors/loader-error-warning/error-loader.js @@ -1,4 +1,6 @@ -module.exports = function(source) { - this.emitError(this.query.substr(1)); +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + //@ts-expect-error errors must be Errors, string is not recommended and should lead to type error + this.emitError(this.query.slice(1)); return source; -} +}; diff --git a/test/cases/errors/loader-error-warning/errors.js b/test/cases/errors/loader-error-warning/errors.js index c5801200e1c..e663795d022 100644 --- a/test/cases/errors/loader-error-warning/errors.js +++ b/test/cases/errors/loader-error-warning/errors.js @@ -1,12 +1,6 @@ +"use strict"; + module.exports = [ - [ - /abc/, - /Emitted value instead of an instance of Error/, - /error-loader\.js/ - ], - [ - /def/, - /Emitted value instead of an instance of Error/, - /error-loader\.js/ - ] + [/abc/, /Emitted value instead of an instance of Error/, /error-loader\.js/], + [/def/, /Emitted value instead of an instance of Error/, /error-loader\.js/] ]; diff --git a/test/cases/errors/loader-error-warning/warning-loader.js b/test/cases/errors/loader-error-warning/warning-loader.js index 05142648f6c..90c6ad19d72 100644 --- a/test/cases/errors/loader-error-warning/warning-loader.js +++ b/test/cases/errors/loader-error-warning/warning-loader.js @@ -1,4 +1,6 @@ -module.exports = function(source) { - this.emitWarning(this.query.substr(1)); +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + //@ts-expect-error warnings must be Errors, string is not recommended and should lead to type error + this.emitWarning(this.query.slice(1)); return source; -} +}; diff --git a/test/cases/errors/loader-error-warning/warnings.js b/test/cases/errors/loader-error-warning/warnings.js index 82ea0b1dd31..7000d83e574 100644 --- a/test/cases/errors/loader-error-warning/warnings.js +++ b/test/cases/errors/loader-error-warning/warnings.js @@ -1,7 +1,5 @@ +"use strict"; + module.exports = [ - [ - /xyz/, - /Emitted value instead of an instance of Error/, - /warning-loader\.js/ - ] + [/xyz/, /Emitted value instead of an instance of Error/, /warning-loader\.js/] ]; diff --git a/test/cases/errors/mjs-non-fully-specified/dependency.js b/test/cases/errors/mjs-non-fully-specified/dependency.js new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/test/cases/errors/mjs-non-fully-specified/dependency.js @@ -0,0 +1 @@ +export {}; diff --git a/test/cases/errors/mjs-non-fully-specified/errors.js b/test/cases/errors/mjs-non-fully-specified/errors.js new file mode 100644 index 00000000000..a4d29e32fff --- /dev/null +++ b/test/cases/errors/mjs-non-fully-specified/errors.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + [/Can't resolve '.\/dependency'/, /Did you mean 'dependency\.js'\?/] +]; diff --git a/test/cases/errors/mjs-non-fully-specified/index.js b/test/cases/errors/mjs-non-fully-specified/index.js new file mode 100644 index 00000000000..45c233ab60c --- /dev/null +++ b/test/cases/errors/mjs-non-fully-specified/index.js @@ -0,0 +1,5 @@ +it("should not resolve without extension", async () => { + await expect(import("./module.mjs")).rejects.toMatchObject({ + code: "MODULE_NOT_FOUND" + }); +}); diff --git a/test/cases/errors/mjs-non-fully-specified/module.mjs b/test/cases/errors/mjs-non-fully-specified/module.mjs new file mode 100644 index 00000000000..ac7d2a71f53 --- /dev/null +++ b/test/cases/errors/mjs-non-fully-specified/module.mjs @@ -0,0 +1 @@ +import "./dependency"; diff --git a/test/cases/errors/module-request/dependency.js b/test/cases/errors/module-request/dependency.js new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/test/cases/errors/module-request/dependency.js @@ -0,0 +1 @@ +export {}; diff --git a/test/cases/errors/module-request/errors.js b/test/cases/errors/module-request/errors.js new file mode 100644 index 00000000000..fd6ee7fe342 --- /dev/null +++ b/test/cases/errors/module-request/errors.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + [/Can't resolve 'dependency\.js'/, /Did you mean '\.\/dependency\.js'\?/] +]; diff --git a/test/cases/errors/module-request/index.js b/test/cases/errors/module-request/index.js new file mode 100644 index 00000000000..52b1155ca1e --- /dev/null +++ b/test/cases/errors/module-request/index.js @@ -0,0 +1,5 @@ +it("should not resolve module requests relative", async () => { + await expect(import("./module.mjs")).rejects.toMatchObject({ + code: "MODULE_NOT_FOUND" + }); +}); diff --git a/test/cases/errors/module-request/module.mjs b/test/cases/errors/module-request/module.mjs new file mode 100644 index 00000000000..2fbe5336021 --- /dev/null +++ b/test/cases/errors/module-request/module.mjs @@ -0,0 +1 @@ +import "dependency.js"; diff --git a/test/cases/indirect-call/call/dep.js b/test/cases/indirect-call/call/dep.js new file mode 100644 index 00000000000..2d312b5ce01 --- /dev/null +++ b/test/cases/indirect-call/call/dep.js @@ -0,0 +1,3 @@ +export default function dep() { + return this; +}; diff --git a/test/cases/indirect-call/call/index.js b/test/cases/indirect-call/call/index.js new file mode 100644 index 00000000000..a3ef545f255 --- /dev/null +++ b/test/cases/indirect-call/call/index.js @@ -0,0 +1,10 @@ +import a from "./dep.js" + +const global = a(); + +it("should generate indirect call", () => { + expect(a()).toBeUndefined(); + expect((a)()).toBeUndefined(); + expect((a())).toBeUndefined(); + expect(global).toBeUndefined(); +}); diff --git a/test/cases/indirect-call/tagged-template-expression/dep.js b/test/cases/indirect-call/tagged-template-expression/dep.js new file mode 100644 index 00000000000..2d312b5ce01 --- /dev/null +++ b/test/cases/indirect-call/tagged-template-expression/dep.js @@ -0,0 +1,3 @@ +export default function dep() { + return this; +}; diff --git a/test/cases/indirect-call/tagged-template-expression/dep1.js b/test/cases/indirect-call/tagged-template-expression/dep1.js new file mode 100644 index 00000000000..c81820d5cb7 --- /dev/null +++ b/test/cases/indirect-call/tagged-template-expression/dep1.js @@ -0,0 +1,5 @@ +export default function dep() { + return () => { + return this; + }; +}; diff --git a/test/cases/indirect-call/tagged-template-expression/index.js b/test/cases/indirect-call/tagged-template-expression/index.js new file mode 100644 index 00000000000..20e9e1c47ec --- /dev/null +++ b/test/cases/indirect-call/tagged-template-expression/index.js @@ -0,0 +1,12 @@ +import a from "./dep.js" +import b from "./dep1.js" + +const global = a``; + +it("should generate indirect call", () => { + expect(a``).toBeUndefined(); + expect(a`${{a}}`).toBeUndefined(); + expect((a)``).toBeUndefined(); + expect(b()``).toBeUndefined(); + expect(global).toBeUndefined(); +}); diff --git a/test/cases/inner-graph/circular/chunk.js b/test/cases/inner-graph/circular/chunk.js new file mode 100644 index 00000000000..e52ace9af60 --- /dev/null +++ b/test/cases/inner-graph/circular/chunk.js @@ -0,0 +1 @@ +import "./inner"; diff --git a/test/cases/inner-graph/circular/index.js b/test/cases/inner-graph/circular/index.js new file mode 100644 index 00000000000..eadbc521d01 --- /dev/null +++ b/test/cases/inner-graph/circular/index.js @@ -0,0 +1,12 @@ +import { exportAUsed, exportBUsed, exportCUsed } from "./inner"; +import { y } from "./module"; + +it("export should be unused when only unused functions use it", () => { + expect(y("a")).toBe("okBAA"); + expect(exportAUsed).toBe(true); + expect(exportBUsed).toBe(true); + if (process.env.NODE_ENV === "production") { + expect(exportCUsed).toBe(false); + } + return import("./chunk"); +}); diff --git a/test/cases/inner-graph/circular/inner.js b/test/cases/inner-graph/circular/inner.js new file mode 100644 index 00000000000..4565b5dbca0 --- /dev/null +++ b/test/cases/inner-graph/circular/inner.js @@ -0,0 +1,13 @@ +export function A(s) { + return s + "A"; +} +export function B(s) { + return s + "B"; +} +export function C(s) { + return s + "C"; +} + +export const exportAUsed = __webpack_exports_info__.A.used; +export const exportBUsed = __webpack_exports_info__.B.used; +export const exportCUsed = __webpack_exports_info__.C.used; diff --git a/test/cases/inner-graph/circular/module.js b/test/cases/inner-graph/circular/module.js new file mode 100644 index 00000000000..4112322c12a --- /dev/null +++ b/test/cases/inner-graph/circular/module.js @@ -0,0 +1,36 @@ +import { A, B, C } from "./inner"; + +function x(type) { + switch (type) { + case "a": + return withA("b"); + case "b": + return withB("c"); + case "c": + return "ok"; + } +} + +function y(v) { + return withA(v); +} + +function withA(v) { + const value = x(v); + + return A(value); +} + +function withB(v) { + const value = x(v); + + return B(value); +} + +function withC(v) { + const value = x(v); + + return C(value); +} + +export { x, y }; diff --git a/test/cases/inner-graph/circular2/index.js b/test/cases/inner-graph/circular2/index.js new file mode 100644 index 00000000000..abee2105e93 --- /dev/null +++ b/test/cases/inner-graph/circular2/index.js @@ -0,0 +1,14 @@ +import { x, y, z, a, f3 } from "./module"; + +it("should be able to handle circular referenced", () => { + expect(x()).toEqual([y, z]); + const [_a, b, c, d] = a(); + expect(b()).toEqual([a, b, c, d]); + expect(c()).toEqual([a, b, c, d]); + expect(d()).toEqual([a, b, c, d]); + const [f2, f4] = f3(); + const [f1, _f3] = f2(); + expect(_f3).toBe(f3); + expect(f3()).toEqual(f1()); + expect(f2()).toEqual(f4()); +}); diff --git a/test/cases/inner-graph/circular2/module.js b/test/cases/inner-graph/circular2/module.js new file mode 100644 index 00000000000..aabde457b4e --- /dev/null +++ b/test/cases/inner-graph/circular2/module.js @@ -0,0 +1,49 @@ +function x() { + return [y, z]; +} + +function y() { + return [x, z]; +} + +function z() { + return [x, y]; +} + +export { x, y, z }; + +function a() { + return [a, b, c, d]; +} + +function b() { + return [a, b, c, d]; +} + +function c() { + return [a, b, c, d]; +} + +function d() { + return [a, b, c, d]; +} + +export { a }; + +function f1() { + return [f2, f4]; +} + +function f2() { + return [f1, f3]; +} + +function f3() { + return [f2, f4]; +} + +function f4() { + return [f1, f3]; +} + +export { f3 }; diff --git a/test/cases/inner-graph/class-dynamic-props/index.js b/test/cases/inner-graph/class-dynamic-props/index.js new file mode 100644 index 00000000000..a8b69c9ead4 --- /dev/null +++ b/test/cases/inner-graph/class-dynamic-props/index.js @@ -0,0 +1,22 @@ +it("should not throw when using dynamic properties in unused classes", () => { + require("./unused1"); +}); + +it("should not throw when using dynamic properties in used classes", () => { + const exports = require("./used1"); + const x = new exports.Used(); + expect(x.a()).toBe("A"); + expect(x.b).toBe("B"); + expect(x.c).toBe("C"); + expect(exports.Used.d()).toBe("D"); + expect(exports.Used.e).toBe("E"); + expect(exports.Used.f).toBe("F"); + const x2 = new exports.Used2(); + expect(x2.a()).toBe("A"); + expect(x2.b).toBe("B"); + expect(x2.c).toBe("C"); + expect(exports.Used2.d()).toBe("D"); + expect(exports.Used2.e).toBe("E"); + expect(exports.Used2.f).toBe("F"); + expect(x2.x).toBe("X"); +}); diff --git a/test/cases/inner-graph/class-dynamic-props/module.js b/test/cases/inner-graph/class-dynamic-props/module.js new file mode 100644 index 00000000000..f7f9dad52d2 --- /dev/null +++ b/test/cases/inner-graph/class-dynamic-props/module.js @@ -0,0 +1,16 @@ +export const a = () => "a"; +export const A = "A"; +export const b = "b"; +export const B = "B"; +export const c = "c"; +export const C = "C"; +export const d = () => "d"; +export const D = "D"; +export const e = "e"; +export const E = "E"; +export const f = "f"; +export const F = "F"; +export class X { + x = "X"; +} +export const y = "y"; diff --git a/test/cases/inner-graph/class-dynamic-props/test.filter.js b/test/cases/inner-graph/class-dynamic-props/test.filter.js new file mode 100644 index 00000000000..aa94ec7b474 --- /dev/null +++ b/test/cases/inner-graph/class-dynamic-props/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = () => supportsClassFields(); diff --git a/test/cases/inner-graph/class-dynamic-props/unused1.js b/test/cases/inner-graph/class-dynamic-props/unused1.js new file mode 100644 index 00000000000..6abeb0f71c1 --- /dev/null +++ b/test/cases/inner-graph/class-dynamic-props/unused1.js @@ -0,0 +1,37 @@ +import { a, b, c, d, e, f, A, B, C, D, E, F, X } from "./module"; + +class Unused { + [a()]() { + return A; + } + [b] = B; + get [c]() { + return C; + } + static [d()]() { + return D; + } + static [e] = E; + static get [f]() { + return F; + } +} + +class Unused2 extends X { + [a()]() { + return A; + } + [b] = B; + get [c]() { + return C; + } + static [d()]() { + return D; + } + static [e] = E; + static get [f]() { + return F; + } +} + +export {}; diff --git a/test/cases/inner-graph/class-dynamic-props/used1.js b/test/cases/inner-graph/class-dynamic-props/used1.js new file mode 100644 index 00000000000..f9ce10b5bc9 --- /dev/null +++ b/test/cases/inner-graph/class-dynamic-props/used1.js @@ -0,0 +1,37 @@ +import { a, b, c, d, e, f, A, B, C, D, E, F, X } from "./module?1"; + +class Used { + [a()]() { + return A; + } + [b] = B; + get [c]() { + return C; + } + static [d()]() { + return D; + } + static [e] = E; + static get [f]() { + return F; + } +} + +class Used2 extends X { + [a()]() { + return A; + } + [b] = B; + get [c]() { + return C; + } + static [d()]() { + return D; + } + static [e] = E; + static get [f]() { + return F; + } +} + +export { Used, Used2 }; diff --git a/test/cases/inner-graph/export-default-named/a.js b/test/cases/inner-graph/export-default-named/a.js new file mode 100644 index 00000000000..26fc66f8ce3 --- /dev/null +++ b/test/cases/inner-graph/export-default-named/a.js @@ -0,0 +1,5 @@ +import { x } from "./dep?a"; + +export default function abc() { + return x; +} diff --git a/test/cases/inner-graph/export-default-named/b.js b/test/cases/inner-graph/export-default-named/b.js new file mode 100644 index 00000000000..d06132d61e6 --- /dev/null +++ b/test/cases/inner-graph/export-default-named/b.js @@ -0,0 +1,5 @@ +import { x } from "./dep?b"; + +export default function abc() { + return x; +} diff --git a/test/cases/inner-graph/export-default-named/c.js b/test/cases/inner-graph/export-default-named/c.js new file mode 100644 index 00000000000..fd559c7838c --- /dev/null +++ b/test/cases/inner-graph/export-default-named/c.js @@ -0,0 +1,7 @@ +import { x } from "./dep?c"; + +export default function abc() { + return x; +} + +abc(); diff --git a/test/cases/inner-graph/export-default-named/d.js b/test/cases/inner-graph/export-default-named/d.js new file mode 100644 index 00000000000..f0601cf6a8b --- /dev/null +++ b/test/cases/inner-graph/export-default-named/d.js @@ -0,0 +1,7 @@ +import { x } from "./dep?d"; + +export default class def { + method() { + return x; + } +} diff --git a/test/cases/inner-graph/export-default-named/dep.js b/test/cases/inner-graph/export-default-named/dep.js new file mode 100644 index 00000000000..df2c7de6598 --- /dev/null +++ b/test/cases/inner-graph/export-default-named/dep.js @@ -0,0 +1,3 @@ +export const x = "x"; + +export default __webpack_exports_info__.x.used; diff --git a/test/cases/inner-graph/export-default-named/e.js b/test/cases/inner-graph/export-default-named/e.js new file mode 100644 index 00000000000..599ff17fe5b --- /dev/null +++ b/test/cases/inner-graph/export-default-named/e.js @@ -0,0 +1,7 @@ +import { x } from "./dep?e"; + +export default class def { + method() { + return x; + } +} diff --git a/test/cases/inner-graph/export-default-named/f.js b/test/cases/inner-graph/export-default-named/f.js new file mode 100644 index 00000000000..135f9c98ab1 --- /dev/null +++ b/test/cases/inner-graph/export-default-named/f.js @@ -0,0 +1,9 @@ +import { x } from "./dep?f"; + +export default class def { + method() { + return x; + } +} + +new def().method(); diff --git a/test/cases/inner-graph/export-default-named/index.js b/test/cases/inner-graph/export-default-named/index.js new file mode 100644 index 00000000000..8eb272ff672 --- /dev/null +++ b/test/cases/inner-graph/export-default-named/index.js @@ -0,0 +1,46 @@ +import A from "./a"; +import "./b"; +import "./c"; +import D from "./d"; +import "./e"; +import "./f"; + +import a from "./dep?a"; +import b from "./dep?b"; +import c from "./dep?c"; +import d from "./dep?d"; +import e from "./dep?e"; +import f from "./dep?f"; + +it("should generate valid code", () => { + expect(A()).toBe("x"); + expect(new D().method()).toBe("x"); +}); + +it("a should be used", () => { + expect(a).toBe(true); +}); + +if (process.env.NODE_ENV === "production") { + it("b should be unused", () => { + expect(b).toBe(false); + }); +} + +it("c should be used", () => { + expect(c).toBe(true); +}); + +if (process.env.NODE_ENV === "production") { + it("d should be used", () => { + expect(d).toBe(true); + }); + + it("e should be unused", () => { + expect(e).toBe(false); + }); +} + +it("f should be used", () => { + expect(f).toBe(true); +}); diff --git a/test/cases/inner-graph/extend-class/a.js b/test/cases/inner-graph/extend-class/a.js new file mode 100644 index 00000000000..3fd13175a08 --- /dev/null +++ b/test/cases/inner-graph/extend-class/a.js @@ -0,0 +1,14 @@ +import B from "./b.js"; +import { A1 } from "./dep1"; + +export default class A extends B { + constructor() { + super(); + } + test() { + super.test(); + + this.b = new B(); + this.a1 = new A1(); + } +} diff --git a/test/cases/inner-graph/extend-class/b.js b/test/cases/inner-graph/extend-class/b.js new file mode 100644 index 00000000000..478800ea513 --- /dev/null +++ b/test/cases/inner-graph/extend-class/b.js @@ -0,0 +1,10 @@ +import A from "./a.js"; +import { A1 } from "./dep1"; + +export default class B { + constructor() {} + test() { + this.a = new A(); + this.a2 = new A1(); + } +} diff --git a/test/cases/inner-graph/extend-class/c.js b/test/cases/inner-graph/extend-class/c.js new file mode 100644 index 00000000000..9fbff09a7ca --- /dev/null +++ b/test/cases/inner-graph/extend-class/c.js @@ -0,0 +1,21 @@ +import { BaseError, BaseError1, BaseError2, BaseError3 } from "./dep2"; + +export class ExtendedError extends BaseError { + constructor(message) { + super(message); + } +} +export class ExtendedError1 extends BaseError1 { + constructor(message) { + super(message); + } +} +export class ExtendedError2 extends BaseError2 { + myMethod() {} +} +export class ExtendedError3 extends BaseError3 {} +export class ExtendedError4 extends Error { + constructor(message = 'ExtendedError') { + super(message); + } +} diff --git a/test/cases/inner-graph/extend-class/dep1.js b/test/cases/inner-graph/extend-class/dep1.js new file mode 100644 index 00000000000..cdbb374a8b4 --- /dev/null +++ b/test/cases/inner-graph/extend-class/dep1.js @@ -0,0 +1,23 @@ +import { A, B, Z, W } from "./dep2"; + +export const A1 = class A1 extends A { + render() {return new E();} +}; + +class B1 extends B { + render() {return new D();} +} + +export class Z1 extends Z {} + +export class E {} +class D { + foo() { + class B2 extends B {} + + return B2; + } +} + +export const isZ = (new Z1()) instanceof Z; +export { W }; diff --git a/test/cases/inner-graph/extend-class/dep2.js b/test/cases/inner-graph/extend-class/dep2.js new file mode 100644 index 00000000000..75343cd50cf --- /dev/null +++ b/test/cases/inner-graph/extend-class/dep2.js @@ -0,0 +1,40 @@ +export const A = class A {}; +export class B {} +export class C {} +export class Y {} +export class Z {} +export function mixin1(_class) {return _class} +export function mixin2(_class) {return _class} +export function mixin3(_class) {return _class} +export function mixin4(_class) {return _class} +export function mixin5(_class) {return _class} +export function getField() { return "test" } +export class BaseError extends Error {} +export class BaseError1 extends Error {} +export class BaseError2 extends Error {} +export class BaseError3 extends Error {} +export class W {} +export class J {} +export class K {} +var SuperClass = class {}; +export { SuperClass }; + +export const exportsInfoForA = __webpack_exports_info__.A.used; +export const exportsInfoForB = __webpack_exports_info__.B.used; +export const exportsInfoForC = __webpack_exports_info__.C.used; +export const exportsInfoForY = __webpack_exports_info__.Y.used; +export const exportsInfoForZ = __webpack_exports_info__.Z.used; +export const exportsInfoForW = __webpack_exports_info__.W.used; +export const exportsInfoForJ = __webpack_exports_info__.J.used; +export const exportsInfoForK = __webpack_exports_info__.K.used; +export const exportsInfoForMixin1 = __webpack_exports_info__.mixin1.used; +export const exportsInfoForMixin2 = __webpack_exports_info__.mixin2.used; +export const exportsInfoForMixin3 = __webpack_exports_info__.mixin3.used; +export const exportsInfoForMixin4 = __webpack_exports_info__.mixin4.used; +export const exportsInfoForMixin5 = __webpack_exports_info__.mixin5.used; +export const exportsInfoForgetField = __webpack_exports_info__.getField.used; +export const exportsInfoForBaseError = __webpack_exports_info__.BaseError.used; +export const exportsInfoForBaseError1 = __webpack_exports_info__.BaseError1.used; +export const exportsInfoForBaseError2 = __webpack_exports_info__.BaseError2.used; +export const exportsInfoForBaseError3 = __webpack_exports_info__.BaseError3.used; +export const exportsInfoForSuperClass = __webpack_exports_info__.SuperClass.used; diff --git a/test/cases/inner-graph/extend-class/dep3.js b/test/cases/inner-graph/extend-class/dep3.js new file mode 100644 index 00000000000..afeaec1bfbf --- /dev/null +++ b/test/cases/inner-graph/extend-class/dep3.js @@ -0,0 +1,30 @@ +import {mixin1, mixin2, mixin3, getField, A, B, C, Y, mixin4} from "./dep2"; + +export const A1 = class A1 extends A { + render() {return new E();} +}; + +export const B1 = class B1 extends /*#__PURE__*/ mixin1(B) { + render() {return new E();} +}; + +export const C1 = class C1 extends mixin2(Y, /*#__PURE__*/ mixin3(C)) { + render() {return new D();} +}; + +export class Y1 extends /*#__PURE__*/ mixin2(Y) { + constructor() { + super(); + + this.innerClass = class B2 extends mixin1(B) {}; + } + + render() {return new D();} +} + +export class Bar extends /*#__PURE__*/ mixin4(A) { + [/*#__PURE__*/ getField()] = 12; +} + +export class E {} +const D = class D {}; diff --git a/test/cases/inner-graph/extend-class/index.js b/test/cases/inner-graph/extend-class/index.js new file mode 100644 index 00000000000..69f1c125ca2 --- /dev/null +++ b/test/cases/inner-graph/extend-class/index.js @@ -0,0 +1,79 @@ +import { + exportsInfoForA, + exportsInfoForB, + exportsInfoForC, + exportsInfoForY, + exportsInfoForZ, + exportsInfoForW, + exportsInfoForJ, + exportsInfoForK, + exportsInfoForMixin1, + exportsInfoForMixin2, + exportsInfoForMixin3, + exportsInfoForMixin4, + exportsInfoForMixin5, + exportsInfoForBaseError, + exportsInfoForBaseError1, + exportsInfoForBaseError2, + exportsInfoForBaseError3, + exportsInfoForSuperClass +} from "./dep2"; + +it("should load modules correctly", () => { + require("./module1"); + require("./module2"); + require("./module3"); + require("./module4"); + require("./module5"); + require("./module6"); + require("./module7"); + require("./module8"); + require("./module9"); +}); + +if (process.env.NODE_ENV === "production") { + it("W and J should not be used", () => { + expect(exportsInfoForJ).toBe(false); + expect(exportsInfoForW).toBe(false); + }); + + it("Keep extends with constructor", () => { + expect(exportsInfoForBaseError).toBe(true); + expect(exportsInfoForBaseError1).toBe(true); + expect(exportsInfoForBaseError2).toBe(false); + expect(exportsInfoForBaseError3).toBe(false); + }); +} + +it("A should be used", () => { + expect(exportsInfoForA).toBe(true); +}); + +it("B should be used", () => { + expect(exportsInfoForB).toBe(true); +}); + +it("K should be used", () => { + expect(exportsInfoForK).toBe(true); +}); + +it("Z used, inner graph can not determine const usage", () => { + expect(exportsInfoForZ).toBe(true); +}); + +it("SuperClass should be used", () => { + expect(exportsInfoForSuperClass).toBe(true); +}); + +it("Pure super expression should be unused, another used", () => { + if (process.env.NODE_ENV === "production") { + expect(exportsInfoForMixin4).toBe(false); + expect(exportsInfoForMixin5).toBe(false); + } + + expect(exportsInfoForMixin1).toBe(true); + expect(exportsInfoForMixin2).toBe(true); + expect(exportsInfoForMixin3).toBe(true); + expect(exportsInfoForC).toBe(true); + expect(exportsInfoForY).toBe(true); +}); diff --git a/test/cases/inner-graph/extend-class/module1.js b/test/cases/inner-graph/extend-class/module1.js new file mode 100644 index 00000000000..0c535f9b866 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module1.js @@ -0,0 +1,3 @@ +import {A1} from "./dep1"; + +export default new A1(); diff --git a/test/cases/inner-graph/extend-class/module2.js b/test/cases/inner-graph/extend-class/module2.js new file mode 100644 index 00000000000..6a462081a67 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module2.js @@ -0,0 +1,3 @@ +import {A1} from "./dep3"; + +export default new A1(); diff --git a/test/cases/inner-graph/extend-class/module3.js b/test/cases/inner-graph/extend-class/module3.js new file mode 100644 index 00000000000..7a1f7dc8856 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module3.js @@ -0,0 +1,3 @@ +import A from "./a.js"; +let a = new A(); +a.test(); diff --git a/test/cases/inner-graph/extend-class/module4.js b/test/cases/inner-graph/extend-class/module4.js new file mode 100644 index 00000000000..1e78b04f6c1 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module4.js @@ -0,0 +1,3 @@ +import {ExtendedError4} from "./c.js"; + +export default new ExtendedError4() diff --git a/test/cases/inner-graph/extend-class/module5.js b/test/cases/inner-graph/extend-class/module5.js new file mode 100644 index 00000000000..c05aaf0def2 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module5.js @@ -0,0 +1,3 @@ +import { W } from "./dep2"; + +class BaseW extends W {} diff --git a/test/cases/inner-graph/extend-class/module6.js b/test/cases/inner-graph/extend-class/module6.js new file mode 100644 index 00000000000..046e9df215d --- /dev/null +++ b/test/cases/inner-graph/extend-class/module6.js @@ -0,0 +1,4 @@ +import { J } from "./dep2"; + +class BaseJ extends J {} +class BaseBaseJ extends BaseJ {} diff --git a/test/cases/inner-graph/extend-class/module7.js b/test/cases/inner-graph/extend-class/module7.js new file mode 100644 index 00000000000..86c9beccffb --- /dev/null +++ b/test/cases/inner-graph/extend-class/module7.js @@ -0,0 +1,6 @@ +import { K } from "./dep2"; + +class BaseK extends K {} +class BaseBaseK extends BaseK {} + +export default new BaseBaseK(); diff --git a/test/cases/inner-graph/extend-class/module8.js b/test/cases/inner-graph/extend-class/module8.js new file mode 100644 index 00000000000..f2d076b0fe0 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module8.js @@ -0,0 +1,9 @@ +import { mixin5 } from "./dep2"; + +class Bar extends /*#__PURE__*/ mixin5(null) { + static displayName = "Point"; +} + +function test() { + return Bar.displayName; +} diff --git a/test/cases/inner-graph/extend-class/module9.js b/test/cases/inner-graph/extend-class/module9.js new file mode 100644 index 00000000000..efc36d37579 --- /dev/null +++ b/test/cases/inner-graph/extend-class/module9.js @@ -0,0 +1,8 @@ +import { SuperClass } from "./dep2"; + +var UnusedClass = class extends SuperClass { + constructor() { + super(); + } + }, + unusedVariable = new UnusedClass(); diff --git a/test/cases/inner-graph/extend-class/test.filter.js b/test/cases/inner-graph/extend-class/test.filter.js new file mode 100644 index 00000000000..ac4f784e281 --- /dev/null +++ b/test/cases/inner-graph/extend-class/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassStaticBlock = require("../../../helpers/supportsClassStaticBlock"); + +module.exports = () => supportsClassStaticBlock(); diff --git a/test/cases/inner-graph/extend-class2/dep-decl.js b/test/cases/inner-graph/extend-class2/dep-decl.js new file mode 100644 index 00000000000..bcce7df94ae --- /dev/null +++ b/test/cases/inner-graph/extend-class2/dep-decl.js @@ -0,0 +1,166 @@ +import { A, B, getC, getD, getE, getF, Foo, Pure, DateFormatter, ConditionalExpression, LogicalExpression } from "./dep2?decl"; +import { A3, B3, C3, D3, E3, F3, Pure3, ConditionalExpression3, LogicalExpression3 } from "./dep3?decl"; + +export class A1 extends A { + render() { + return new A2(); + } +} + +export class B1 extends B { + render() { + return new B2(); + } +} + +// prettier-ignore +export class C1 extends /*#__PURE__*/ getC() { + render() { + return new C2(); + } +} + +// prettier-ignore +export class D1 extends /*@__PURE__*/ getD() { + render() { + return new D2(); + } +} + +export class E1 extends getE() { + render() { + return new E2(); + } +} + +export class F1 extends getF() { + render() { + return new F2(); + } +} + +function foo(instance) { + return new instance() +} + +class Bar extends Foo { + static prop = 42; + static a = foo(this).prop; + static b = foo(Bar).prop; + static c = foo(super.Bar).prop; + static inStatic1; + static inStatic2; + static inStatic3; + static { + this.inStatic1 = new Bar().prop; + this.inStatic2 = new super.Bar().prop; + this.inStatic3 = (new this).prop; + } +} + +class BarA extends Foo { + static prop = 42; + static a = foo(this).prop; +} + +class BarB extends Foo { + static prop = 42; + static b = foo(Bar).prop; +} + +class BarC extends Foo { + static prop = 42; + static c = foo(super.Bar).prop; +} + +class BarPA extends Foo { + static prop = 42; + static #a = foo(this).prop; +} + +class BarPB extends Foo { + static prop = 42; + static #b = foo(Bar).prop; +} + +class BarPC extends Foo { + static prop = 42; + static #c = foo(super.Bar).prop; +} + +const ExpressionFoo = class Bar extends Foo { + static prop = 42; + static a = foo(this).prop; + static b = foo(Bar).prop; + static c = foo(super.Bar).prop; + static inStatic1; + static inStatic2; + static inStatic3; + static { + this.inStatic1 = new Bar().prop; + this.inStatic2 = new super.Bar().prop; + this.inStatic3 = (new this).prop; + } +} + +export class Baz extends Foo { + static prop = 42; + static a = foo(this).prop; + static b = foo(Bar).prop; + static c = foo(super.Bar).prop; + static inStatic1; + static inStatic2; + static inStatic3; + static { + this.inStatic1 = new Bar().prop; + this.inStatic2 = new super.Bar().prop; + this.inStatic3 = (new this).prop; + } +} + +export default class DefaultBar extends Foo { + static prop = 42; + static a = foo(this).prop; + static b = foo(Bar).prop; + static c = foo(super.Bar).prop; + static inStatic1; + static inStatic2; + static inStatic3; + static { + this.inStatic1 = new Bar().prop; + this.inStatic2 = new super.Bar().prop; + this.inStatic3 = (new this).prop; + } +} + +export class ExtendsPure extends Pure { + render() { + return new Pure3(); + } +} + +export class DateBar extends DateFormatter { + constructor() { + super(); + } + render() {} +} + +export class ConditionalExpression1 extends ConditionalExpression { + render() { + return new ConditionalExpression3(); + } +} + +export class LogicalExpression1 extends LogicalExpression { + render() { + return new LogicalExpression3(); + } +} + +export class A2 extends A3 {} +export class B2 extends B3 {} +export class C2 extends C3 {} +export class D2 extends D3 {} +export class E2 extends E3 {} +export class F2 extends F3 {} diff --git a/test/cases/inner-graph/extend-class2/dep-expr.js b/test/cases/inner-graph/extend-class2/dep-expr.js new file mode 100644 index 00000000000..957b59d98ce --- /dev/null +++ b/test/cases/inner-graph/extend-class2/dep-expr.js @@ -0,0 +1,72 @@ +import {A, B, DateFormatter, getC, getD, getE, getF, Pure, ConditionalExpression, LogicalExpression} from "./dep2?expr"; +import { A3, B3, C3, D3, E3, F3, Pure3} from "./dep3?expr"; + +export const A1 = class extends A { + render() { + return new A2(); + } +}; + +export const B1 = class extends B { + render() { + return new B2(); + } +}; + +// prettier-ignore +export const C1 = class extends /*#__PURE__*/ getC() { + render() { + return new C2(); + } +} + +// prettier-ignore +export const D1 = class extends /*@__PURE__*/ getD() { + render() { + return new D2(); + } +} + +export const E1 = class extends getE() { + render() { + return new E2(); + } +}; + +export const F1 = class extends getF() { + render() { + return new F2(); + } +}; + +export const ExtendsPure = class extends Pure { + render() { + return new Pure3(); + } +}; + +export class DateBar extends DateFormatter { + constructor() { + super(); + } + render() {} +} + +export class ConditionalExpression1 extends ConditionalExpression { + render() { + return new ConditionalExpression3(); + } +} + +export class LogicalExpression1 extends LogicalExpression { + render() { + return new LogicalExpression3(); + } +} + +export const A2 = class extends A3 {}; +export const B2 = class extends B3 {}; +export const C2 = class extends C3 {}; +export const D2 = class extends D3 {}; +export const E2 = class extends E3 {}; +export const F2 = class extends F3 {}; diff --git a/test/cases/inner-graph/extend-class2/dep2.js b/test/cases/inner-graph/extend-class2/dep2.js new file mode 100644 index 00000000000..5581cdd2199 --- /dev/null +++ b/test/cases/inner-graph/extend-class2/dep2.js @@ -0,0 +1,28 @@ +export class A {} +export class B {} +export const getC = () => class C {}; +export const getD = () => class D {}; +export const getE = () => class E {}; +export const getF = () => class F {}; +export class Foo { static Bar = Foo; } +export class Pure {} +export class DateFormatter extends Date { + constructor() { + super(); + this.date = this.getDate(); + } +} +export class ConditionalExpression extends (true ? A : B) {} +export class LogicalExpression extends (A || B) {} + +export const exportsInfoForA = __webpack_exports_info__.A.used; +export const exportsInfoForB = __webpack_exports_info__.B.used; +export const exportsInfoForC = __webpack_exports_info__.getC.used; +export const exportsInfoForD = __webpack_exports_info__.getD.used; +export const exportsInfoForE = __webpack_exports_info__.getE.used; +export const exportsInfoForF = __webpack_exports_info__.getF.used; +export const exportsInfoForFoo = __webpack_exports_info__.Foo.used; +export const exportsInfoForPure = __webpack_exports_info__.Pure.used; +export const exportsInfoForDateFormatter = __webpack_exports_info__.DateFormatter.used; +export const exportsInfoForConditionalExpression = __webpack_exports_info__.ConditionalExpression.used; +export const exportsInfoForLogicalExpression = __webpack_exports_info__.LogicalExpression.used; diff --git a/test/cases/inner-graph/extend-class2/dep3.js b/test/cases/inner-graph/extend-class2/dep3.js new file mode 100644 index 00000000000..74377293433 --- /dev/null +++ b/test/cases/inner-graph/extend-class2/dep3.js @@ -0,0 +1,9 @@ +export class A3 {} +export class B3 {} +export class C3 {} +export class D3 {} +export class E3 {} +export class F3 {} +export class Pure3 {} +export class ConditionalExpression3 extends (true ? A3 : B3) {} +export class LogicalExpression3 extends (A3 || B3) {} diff --git a/test/cases/inner-graph/extend-class2/index.js b/test/cases/inner-graph/extend-class2/index.js new file mode 100644 index 00000000000..87322d5f5b3 --- /dev/null +++ b/test/cases/inner-graph/extend-class2/index.js @@ -0,0 +1,77 @@ +import { + exportsInfoForA as declA, + exportsInfoForB as declB, + exportsInfoForC as declC, + exportsInfoForD as declD, + exportsInfoForE as declE, + exportsInfoForF as declF, + exportsInfoForFoo as declFoo, + exportsInfoForPure as declPure, + exportsInfoForDateFormatter as declDateFormatter, + exportsInfoForConditionalExpression as declConditionalExpression, + exportsInfoForLogicalExpression as declLogicalExpression +} from "./dep2?decl"; +import { + exportsInfoForA as exprA, + exportsInfoForB as exprB, + exportsInfoForC as exprC, + exportsInfoForD as exprD, + exportsInfoForE as exprE, + exportsInfoForF as exprF, + exportsInfoForPure as exprPure, + exportsInfoForDateFormatter as exprDateFormatter, + exportsInfoForConditionalExpression as exprConditionalExpression, + exportsInfoForLogicalExpression as exprLogicalExpression +} from "./dep2?expr"; + +it("should load module correctly", () => { + require("./module-decl"); + require("./module-expr"); +}); + +it("A should be used", () => { + expect(declA).toBe(true); + expect(exprA).toBe(true); +}); + +if (process.env.NODE_ENV === "production") { + it("B should not be used", () => { + expect(declB).toBe(false); + expect(exprB).toBe(false); + }); +} + +it("C should be used", () => { + expect(declC).toBe(true); + expect(exprC).toBe(true); +}); + +if (process.env.NODE_ENV === "production") { + it("D should not be used", () => { + expect(declD).toBe(false); + expect(exprD).toBe(false); + }); +} + +it("E should be used", () => { + expect(declE).toBe(true); + expect(exprE).toBe(true); +}); + +it("F should be used", () => { + if (process.env.NODE_ENV === "production") { + expect(declPure).toBe(false); + expect(exprPure).toBe(false); + expect(declConditionalExpression).toBe(false); + expect(exprConditionalExpression).toBe(false); + expect(declLogicalExpression).toBe(false); + expect(exprLogicalExpression).toBe(false); + } + + // Note: it has side-effects and is not affected by usage of the class + expect(declF).toBe(true); + expect(declFoo).toBe(true); + expect(exprF).toBe(true); + expect(declDateFormatter).toBe(true); + expect(exprDateFormatter).toBe(true); +}); diff --git a/test/cases/inner-graph/extend-class2/module-decl.js b/test/cases/inner-graph/extend-class2/module-decl.js new file mode 100644 index 00000000000..9ca859760f3 --- /dev/null +++ b/test/cases/inner-graph/extend-class2/module-decl.js @@ -0,0 +1,3 @@ +import { A1, C1, E1, DateBar } from "./dep-decl"; + +export default [new A1().render(), new C1().render(), new E1().render(), new DateBar()]; diff --git a/test/cases/inner-graph/extend-class2/module-expr.js b/test/cases/inner-graph/extend-class2/module-expr.js new file mode 100644 index 00000000000..b04d26a339a --- /dev/null +++ b/test/cases/inner-graph/extend-class2/module-expr.js @@ -0,0 +1,3 @@ +import { A1, C1, E1, DateBar } from "./dep-expr"; + +export default [new A1().render(), new C1().render(), new E1().render(), new DateBar()]; diff --git a/test/cases/inner-graph/extend-class2/test.filter.js b/test/cases/inner-graph/extend-class2/test.filter.js new file mode 100644 index 00000000000..ac4f784e281 --- /dev/null +++ b/test/cases/inner-graph/extend-class2/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassStaticBlock = require("../../../helpers/supportsClassStaticBlock"); + +module.exports = () => supportsClassStaticBlock(); diff --git a/test/cases/inner-graph/no-side-effects/index.js b/test/cases/inner-graph/no-side-effects/index.js new file mode 100644 index 00000000000..f4d29083f7e --- /dev/null +++ b/test/cases/inner-graph/no-side-effects/index.js @@ -0,0 +1,3 @@ +it("should be able to load package without side effects where modules are unused", () => { + require("./module"); +}); diff --git a/test/cases/inner-graph/no-side-effects/module.js b/test/cases/inner-graph/no-side-effects/module.js new file mode 100644 index 00000000000..09f115e3dc8 --- /dev/null +++ b/test/cases/inner-graph/no-side-effects/module.js @@ -0,0 +1,3 @@ +import { a } from "./package"; + +export default a; diff --git a/test/cases/inner-graph/no-side-effects/package/index.js b/test/cases/inner-graph/no-side-effects/package/index.js new file mode 100644 index 00000000000..62e7821eda4 --- /dev/null +++ b/test/cases/inner-graph/no-side-effects/package/index.js @@ -0,0 +1,9 @@ +import value from "./unusedModule"; + +export function a() { + return 42; +} + +export function b() { + return value; +} diff --git a/test/cases/inner-graph/no-side-effects/package/package.json b/test/cases/inner-graph/no-side-effects/package/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/inner-graph/no-side-effects/package/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/inner-graph/no-side-effects/package/unusedModule.js b/test/cases/inner-graph/no-side-effects/package/unusedModule.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/inner-graph/no-side-effects/package/unusedModule.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/inner-graph/pure-in-removed/import-module.js b/test/cases/inner-graph/pure-in-removed/import-module.js new file mode 100644 index 00000000000..f85054392d4 --- /dev/null +++ b/test/cases/inner-graph/pure-in-removed/import-module.js @@ -0,0 +1,11 @@ +import "./module?1"; +import { getX, getY } from "./module?2"; +import { getX as getX2 } from "./module?3"; +import { getY as getY2 } from "./module?4"; + +export function test() { + expect(getX()).toBe(42); + expect(getY()).toBe(42); + expect(getX2()).toBe(42); + expect(getY2()).toBe(42); +} diff --git a/test/cases/inner-graph/pure-in-removed/index.js b/test/cases/inner-graph/pure-in-removed/index.js new file mode 100644 index 00000000000..0d2e98dcb37 --- /dev/null +++ b/test/cases/inner-graph/pure-in-removed/index.js @@ -0,0 +1,3 @@ +it("should generate correct code when pure expressions are in dead branches", () => { + require("./import-module").test(); +}); diff --git a/test/cases/inner-graph/pure-in-removed/module.js b/test/cases/inner-graph/pure-in-removed/module.js new file mode 100644 index 00000000000..642249f514f --- /dev/null +++ b/test/cases/inner-graph/pure-in-removed/module.js @@ -0,0 +1,14 @@ +function f() { + return 43; +} + +if (true) { + var x = /*#__PURE__*/ f() - 1; + var y = 42; +} else { + var x = /*#__PURE__*/ f(); + var y = 43; +} + +export const getX = () => x, + getY = () => y; diff --git a/test/cases/inner-graph/reexport-namespace-and-default/index.js b/test/cases/inner-graph/reexport-namespace-and-default/index.js new file mode 100644 index 00000000000..295a7ba33ff --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/index.js @@ -0,0 +1,18 @@ +import { exportDefaultUsed as export1 } from "./package1/script"; +import { exportDefaultUsed as export2 } from "./package1/script2"; +import { exportDefaultUsed as export3 } from "./package2/script"; + +it("should load module correctly", () => { + require("./module"); +}); + +if (process.env.NODE_ENV === "production") { + it("default export should be unused", () => { + expect(export1).toBe(false); + expect(export2).toBe(false); + }); +} + +it("default export should be used", () => { + expect(export3).toBe(true); +}); diff --git a/test/cases/inner-graph/reexport-namespace-and-default/module.js b/test/cases/inner-graph/reexport-namespace-and-default/module.js new file mode 100644 index 00000000000..8d8ef732e7d --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/module.js @@ -0,0 +1,4 @@ +import * as script from "./package1/script" +import script1 from "./package2/script"; + +export const mod = script1; diff --git a/test/cases/inner-graph/reexport-namespace-and-default/package1/script.js b/test/cases/inner-graph/reexport-namespace-and-default/package1/script.js new file mode 100644 index 00000000000..71fe9544e2c --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/package1/script.js @@ -0,0 +1,5 @@ +import mod from "./script1"; +export default mod; +export * from "./script1"; + +export const exportDefaultUsed = __webpack_exports_info__.default.used; diff --git a/test/cases/inner-graph/reexport-namespace-and-default/package1/script1.js b/test/cases/inner-graph/reexport-namespace-and-default/package1/script1.js new file mode 100644 index 00000000000..cc108809ba4 --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/package1/script1.js @@ -0,0 +1,2 @@ +export * from "./script2" +export default 1 diff --git a/test/cases/inner-graph/reexport-namespace-and-default/package1/script2.js b/test/cases/inner-graph/reexport-namespace-and-default/package1/script2.js new file mode 100644 index 00000000000..dd7b295d937 --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/package1/script2.js @@ -0,0 +1,5 @@ +import mod from "./script3"; +export default function () { return mod }; +export * from "./script3"; + +export const exportDefaultUsed = __webpack_exports_info__.default.used; diff --git a/test/cases/inner-graph/reexport-namespace-and-default/package1/script3.js b/test/cases/inner-graph/reexport-namespace-and-default/package1/script3.js new file mode 100644 index 00000000000..b0d35f3a137 --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/package1/script3.js @@ -0,0 +1 @@ +export default 1 diff --git a/test/cases/inner-graph/reexport-namespace-and-default/package2/script.js b/test/cases/inner-graph/reexport-namespace-and-default/package2/script.js new file mode 100644 index 00000000000..71fe9544e2c --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/package2/script.js @@ -0,0 +1,5 @@ +import mod from "./script1"; +export default mod; +export * from "./script1"; + +export const exportDefaultUsed = __webpack_exports_info__.default.used; diff --git a/test/cases/inner-graph/reexport-namespace-and-default/package2/script1.js b/test/cases/inner-graph/reexport-namespace-and-default/package2/script1.js new file mode 100644 index 00000000000..b0d35f3a137 --- /dev/null +++ b/test/cases/inner-graph/reexport-namespace-and-default/package2/script1.js @@ -0,0 +1 @@ +export default 1 diff --git a/test/cases/inner-graph/simple/chunk.js b/test/cases/inner-graph/simple/chunk.js new file mode 100644 index 00000000000..e52ace9af60 --- /dev/null +++ b/test/cases/inner-graph/simple/chunk.js @@ -0,0 +1 @@ +import "./inner"; diff --git a/test/cases/inner-graph/simple/index.js b/test/cases/inner-graph/simple/index.js new file mode 100644 index 00000000000..e993b773d1a --- /dev/null +++ b/test/cases/inner-graph/simple/index.js @@ -0,0 +1,24 @@ +import { + exportUsed, + export2Used, + export3Used, + export4Used, + export5Used, + export6Used +} from "./inner"; +import { f1, pureUsed, fWithDefault } from "./module"; + +it("export should be unused when only unused functions use it", () => { + f1(); + expect(pureUsed).toBe(42); + expect(fWithDefault()).toBe(42); + if (process.env.NODE_ENV === "production") { + expect(exportUsed).toBe(false); + expect(export2Used).toBe(true); + expect(export3Used).toBe(true); + expect(export4Used).toBe(true); + expect(export5Used).toBe(true); + expect(export6Used).toBe(true); + } + return import("./chunk"); +}); diff --git a/test/cases/inner-graph/simple/inner.js b/test/cases/inner-graph/simple/inner.js new file mode 100644 index 00000000000..5885f9cc7b1 --- /dev/null +++ b/test/cases/inner-graph/simple/inner.js @@ -0,0 +1,13 @@ +export const EXPORT = 42; +export const EXPORT2 = 42; +export const EXPORT3 = 42; +export const EXPORT4 = 42; +export const EXPORT5 = () => 42; +export const EXPORT6 = () => 42; + +export const exportUsed = __webpack_exports_info__.EXPORT.used; +export const export2Used = __webpack_exports_info__.EXPORT2.used; +export const export3Used = __webpack_exports_info__.EXPORT3.used; +export const export4Used = __webpack_exports_info__.EXPORT4.used; +export const export5Used = __webpack_exports_info__.EXPORT5.used; +export const export6Used = __webpack_exports_info__.EXPORT6.used; diff --git a/test/cases/inner-graph/simple/module.js b/test/cases/inner-graph/simple/module.js new file mode 100644 index 00000000000..e59ea2672c0 --- /dev/null +++ b/test/cases/inner-graph/simple/module.js @@ -0,0 +1,100 @@ +import { EXPORT, EXPORT2, EXPORT3, EXPORT4, EXPORT5, EXPORT6 } from "./inner"; + +export function f1() { + // no using EXPORT +} + +export function f2() { + return EXPORT; +} + +function f3() { + return EXPORT; +} + +const f4 = function () { + return EXPORT; +}; + +const f5 = () => { + return EXPORT; +}; + +let f6 = () => { + return EXPORT; +}; + +const f7 = () => { + return EXPORT5(); +}; + +const f8 = () => { + return EXPORT6(); +}; + +export function g2() { + return f2(); +} + +export function g3() { + return f3(); +} + +export var g4 = () => f4(); + +export let g5 = () => { + return f5(); +}; + +function ga6() { + return f6() || gb6(); +} + +function gb6() { + return ga6(); +} + +export class g7 { + static f() { + return EXPORT; + } +} + +export const pure1 = EXPORT; +export const pure2 = /*#__PURE__*/ f6(); +const pure3 = /*#__PURE__*/ g5(); +const pure4 = /*#__PURE__*/ f7(f8()); +const pure5 = + ("fefef", 1123, /*#__PURE__*/ f2("fwefe"), /*#__PURE__*/ f2("efwefa")); +const pure6 = /*#__PURE__*/ f2(/*#__PURE__*/ f2(), /*#__PURE__*/ f2()); +const pure7 = /*#__PURE__*/ f2( + class { + f() { + return EXPORT; + } + } +); +const pure8 = /*#__PURE__*/ f2(() => EXPORT); +export const pureUsed = EXPORT3; + +function x1() { + return EXPORT2; +} + +const x2 = function x2() { + return x1(); +}; + +const x3 = () => { + return x2(); +}; + +const x4 = x3(); + +export function fWithDefault(r = EXPORT4) { + return r; +} + +export default (function () { + return EXPORT; +}); diff --git a/test/cases/inner-graph/static-of-class/chunk.js b/test/cases/inner-graph/static-of-class/chunk.js new file mode 100644 index 00000000000..e8c271b93ba --- /dev/null +++ b/test/cases/inner-graph/static-of-class/chunk.js @@ -0,0 +1,2 @@ +import "./other/module-unused"; +import "./other/module-used"; diff --git a/test/cases/inner-graph/static-of-class/import-module.js b/test/cases/inner-graph/static-of-class/import-module.js new file mode 100644 index 00000000000..55bf089192f --- /dev/null +++ b/test/cases/inner-graph/static-of-class/import-module.js @@ -0,0 +1,7 @@ +import "./module-unused"; +import { NativeClass, TranspiledClass } from "./module-used"; + +export function test() { + expect(NativeClass.f()).toBe(42); + expect(TranspiledClass.f()).toBe(42); +} diff --git a/test/cases/inner-graph/static-of-class/index.js b/test/cases/inner-graph/static-of-class/index.js new file mode 100644 index 00000000000..46872190499 --- /dev/null +++ b/test/cases/inner-graph/static-of-class/index.js @@ -0,0 +1,4 @@ +it("should generate correct code when pure expressions are in dead branches", () => { + require("./import-module").test(); + return import("./chunk"); +}); diff --git a/test/cases/inner-graph/static-of-class/module-unused.js b/test/cases/inner-graph/static-of-class/module-unused.js new file mode 100644 index 00000000000..da084901de8 --- /dev/null +++ b/test/cases/inner-graph/static-of-class/module-unused.js @@ -0,0 +1,18 @@ +import { x } from "./other/module-unused"; + +class NativeClass { + static f() { + return 42; + } +} + +var TranspiledClass = /*#__PURE__*/ (function() { + x(); + function C() {} + C.f = function() { + return 42; + }; + return C; +})(); + +export { NativeClass, TranspiledClass }; diff --git a/test/cases/inner-graph/static-of-class/module-used.js b/test/cases/inner-graph/static-of-class/module-used.js new file mode 100644 index 00000000000..ab9b089d8df --- /dev/null +++ b/test/cases/inner-graph/static-of-class/module-used.js @@ -0,0 +1,18 @@ +import { x } from "./other/module-used"; + +class NativeClass { + static f() { + return 42; + } +} + +var TranspiledClass = /*#__PURE__*/ (function() { + x(); + function C() {} + C.f = function() { + return 42; + }; + return C; +})(); + +export { NativeClass, TranspiledClass }; diff --git a/test/cases/inner-graph/static-of-class/other/module-unused.js b/test/cases/inner-graph/static-of-class/other/module-unused.js new file mode 100644 index 00000000000..055ccd29f75 --- /dev/null +++ b/test/cases/inner-graph/static-of-class/other/module-unused.js @@ -0,0 +1 @@ +export function x() {} diff --git a/test/cases/inner-graph/static-of-class/other/module-used.js b/test/cases/inner-graph/static-of-class/other/module-used.js new file mode 100644 index 00000000000..055ccd29f75 --- /dev/null +++ b/test/cases/inner-graph/static-of-class/other/module-used.js @@ -0,0 +1 @@ +export function x() {} diff --git a/test/cases/inner-graph/static-of-class/other/package.json b/test/cases/inner-graph/static-of-class/other/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/inner-graph/static-of-class/other/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/inner-graph/switch/chunk.js b/test/cases/inner-graph/switch/chunk.js new file mode 100644 index 00000000000..dd258939be9 --- /dev/null +++ b/test/cases/inner-graph/switch/chunk.js @@ -0,0 +1 @@ +import "./some-module"; diff --git a/test/cases/inner-graph/switch/import-module.js b/test/cases/inner-graph/switch/import-module.js new file mode 100644 index 00000000000..c5a1cb3f0fd --- /dev/null +++ b/test/cases/inner-graph/switch/import-module.js @@ -0,0 +1,7 @@ +import doSomething from "./module"; + +export function test() { + doSomething({ + type: "inline" + }); +} diff --git a/test/cases/inner-graph/switch/index.js b/test/cases/inner-graph/switch/index.js new file mode 100644 index 00000000000..ddc9e1ff490 --- /dev/null +++ b/test/cases/inner-graph/switch/index.js @@ -0,0 +1,4 @@ +it("should generate correct code when pure expressions are in dead branches", () => { + require("./import-module").test(); + return Promise.all([import("./some-module"), import("./chunk")]); +}); diff --git a/test/cases/inner-graph/switch/module.js b/test/cases/inner-graph/switch/module.js new file mode 100644 index 00000000000..a3ff0e9b729 --- /dev/null +++ b/test/cases/inner-graph/switch/module.js @@ -0,0 +1,41 @@ +import { Block, Inline, Document } from "./some-module"; + +function getType(obj) { + return obj.type; +} + +// Local functions +function doSomethingWithBlock(obj) { + return Block.doSomething(obj); +} + +function doSomethingWithInline(obj) { + return Inline.doSomething(obj); +} + +function doSomethingWithDocument(obj) { + return Document.doSomething(obj); +} + +// Exported functions +function doSomething(obj) { + const type = getType(obj); + + switch (type) { + case "document": + return doSomethingWithDocument(obj); + case "block": + return doSomethingWithBlock(obj); + case "inline": + return doSomethingWithInline(obj); + default: + throw new Error(); + } +} + +function useDocument(obj) { + return doSomethingWithDocument(obj); +} + +export { useDocument }; +export default doSomething; diff --git a/test/cases/inner-graph/switch/some-module.js b/test/cases/inner-graph/switch/some-module.js new file mode 100644 index 00000000000..c2f406a8e09 --- /dev/null +++ b/test/cases/inner-graph/switch/some-module.js @@ -0,0 +1,13 @@ +class Block { + static doSomething() {} +} + +class Inline { + static doSomething() {} +} + +class Document { + static doSomething() {} +} + +export { Block, Inline, Document }; diff --git a/test/cases/inner-graph/try-globals/import-module.js b/test/cases/inner-graph/try-globals/import-module.js new file mode 100644 index 00000000000..a9d53850334 --- /dev/null +++ b/test/cases/inner-graph/try-globals/import-module.js @@ -0,0 +1,4 @@ +import { ok, ok2 } from "./module"; + +expect(ok).toBe(true); +expect(ok2).toBe(true); diff --git a/test/cases/inner-graph/try-globals/index.js b/test/cases/inner-graph/try-globals/index.js new file mode 100644 index 00000000000..9675576045c --- /dev/null +++ b/test/cases/inner-graph/try-globals/index.js @@ -0,0 +1,3 @@ +it("should not threat globals as pure", () => { + require("./import-module"); +}); diff --git a/test/cases/inner-graph/try-globals/module.js b/test/cases/inner-graph/try-globals/module.js new file mode 100644 index 00000000000..fc03ef946f9 --- /dev/null +++ b/test/cases/inner-graph/try-globals/module.js @@ -0,0 +1,20 @@ +try { + var x = NOT_DEFINED; + var y = x; + var ok = false; +} catch (e) { + var yep = true; + var ok = yep; +} + +try { + const b = a; + var c = b; + const a = 42; + var ok2 = false; + eval(""); // TODO terser has a bug and incorrectly remove this code, eval opts out +} catch (e) { + var ok2 = true; +} + +export { x, y, c, ok, ok2 }; diff --git a/test/cases/json/data/poison b/test/cases/json/data/poison new file mode 100644 index 00000000000..84d53767a2e --- /dev/null +++ b/test/cases/json/data/poison @@ -0,0 +1 @@ +throw new Error("imported") diff --git a/test/cases/json/data/unknown b/test/cases/json/data/unknown new file mode 100644 index 00000000000..12bae17cf72 --- /dev/null +++ b/test/cases/json/data/unknown @@ -0,0 +1 @@ +[1, 2, 3, 4] diff --git a/test/cases/json/default-default-with-concatenation/index.js b/test/cases/json/default-default-with-concatenation/index.js new file mode 100644 index 00000000000..80ce44f0319 --- /dev/null +++ b/test/cases/json/default-default-with-concatenation/index.js @@ -0,0 +1 @@ +import "../default-default"; diff --git a/test/cases/json/default-default/index.js b/test/cases/json/default-default/index.js new file mode 100644 index 00000000000..e31e4cd84dc --- /dev/null +++ b/test/cases/json/default-default/index.js @@ -0,0 +1,7 @@ +import { default as f } from "../data/f.json?default-imported"; +import * as fStar from "../data/f.json?ns-imported"; + +it("should be possible to access a default key", () => { + expect(f.default).toBe("default"); + expect(fStar.default.default).toBe("default"); +}); diff --git a/test/cases/json/import-assertions-type-json/errors.js b/test/cases/json/import-assertions-type-json/errors.js new file mode 100644 index 00000000000..8bf7e660d0e --- /dev/null +++ b/test/cases/json/import-assertions-type-json/errors.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + [{ moduleName: /data.poison/, message: /Unexpected token .+ JSON/ }] +]; diff --git a/test/cases/json/import-assertions-type-json/import-poison.js b/test/cases/json/import-assertions-type-json/import-poison.js new file mode 100644 index 00000000000..0c1cc934c7d --- /dev/null +++ b/test/cases/json/import-assertions-type-json/import-poison.js @@ -0,0 +1,3 @@ +import poison from "../data/poison" assert { type: "json" }; + +export default poison; diff --git a/test/cases/json/import-assertions-type-json/index.js b/test/cases/json/import-assertions-type-json/index.js new file mode 100644 index 00000000000..48af30a044f --- /dev/null +++ b/test/cases/json/import-assertions-type-json/index.js @@ -0,0 +1,21 @@ +import c from "../data/c.json" assert { type: "json" }; +import unknownJson from "../data/unknown" assert { type: "json" }; +import unknownJs from "../data/unknown"; + +it("should be possible to import json data with import assertion", function () { + expect(c).toEqual([1, 2, 3, 4]); +}); + +it("should be possible to import json data without extension with import assertion", function () { + expect(unknownJson).toEqual([1, 2, 3, 4]); +}); + +it("should be possible to import js without extension without import assertion in the same file", function () { + expect(unknownJs).toEqual({}); +}); + +it("should not be possible to import js with import assertion", function () { + expect(() => { + require("./import-poison.js"); + }).toThrow(); +}); diff --git a/test/cases/json/import-assertions-type-json/infrastructure-log.js b/test/cases/json/import-assertions-type-json/infrastructure-log.js new file mode 100644 index 00000000000..a1b07c6fd36 --- /dev/null +++ b/test/cases/json/import-assertions-type-json/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules|json.+json\/data\/poison$/ +]; diff --git a/test/cases/json/import-by-name-with-concatenation/warnings.js b/test/cases/json/import-by-name-with-concatenation/warnings.js new file mode 100644 index 00000000000..5abf78d3ffb --- /dev/null +++ b/test/cases/json/import-by-name-with-concatenation/warnings.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = [ + [ + /Should not import the named export '2' \(imported as 'c'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'aa' \(imported as 'aa'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'bb' \(imported as 'bb'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'named' \(imported as 'named'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'named' \(imported as 'gnamed'\) from default-exporting module \(only default export is available soon\)/ + ] +]; diff --git a/test/cases/json/import-by-name/index.js b/test/cases/json/import-by-name/index.js index 20993afb537..9c5ede6f130 100644 --- a/test/cases/json/import-by-name/index.js +++ b/test/cases/json/import-by-name/index.js @@ -10,7 +10,7 @@ it("should be possible to import json data", function() { expect(aa).toBe(1); expect(bb).toBe(2); expect(named).toBe("named"); - (expect({ f })).toEqual({ + expect({ f }).toEqual({ f: { __esModule: true, default: "default", diff --git a/test/cases/json/import-by-name/warnings.js b/test/cases/json/import-by-name/warnings.js new file mode 100644 index 00000000000..5abf78d3ffb --- /dev/null +++ b/test/cases/json/import-by-name/warnings.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = [ + [ + /Should not import the named export '2' \(imported as 'c'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'aa' \(imported as 'aa'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'bb' \(imported as 'bb'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'named' \(imported as 'named'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'named' \(imported as 'gnamed'\) from default-exporting module \(only default export is available soon\)/ + ] +]; diff --git a/test/cases/json/import-lazy/index.js b/test/cases/json/import-lazy/index.js index 2f01d1b61fa..9ead918e385 100644 --- a/test/cases/json/import-lazy/index.js +++ b/test/cases/json/import-lazy/index.js @@ -9,27 +9,24 @@ it("should be possible to import json data async", function() { import("../data/f.json"), import("../data/g.json") ]).then(([a, b, c, d, e, f, g]) => { - expect(a).toEqual({ - default: null, - [Symbol.toStringTag]: "Module" - }); - expect(b).toEqual({ - default: 123, - [Symbol.toStringTag]: "Module" - }); - expect(c).toEqual({ + expect(a).toEqual(nsObj({ + default: null + })); + expect(b).toEqual(nsObj({ + default: 123 + })); + expect(c).toEqual(nsObj({ 0: 1, 1: 2, 2: 3, 3: 4, - default: [1, 2, 3, 4], - [Symbol.toStringTag]: "Module" - }); - expect(d).toEqual({ - default: {}, - [Symbol.toStringTag]: "Module" - }); - expect(e).toEqual({ + length: 4, + default: [1, 2, 3, 4] + })); + expect(d).toEqual(nsObj({ + default: {} + })); + expect(e).toEqual(nsObj({ aa: 1, bb: 2, 1: "x", @@ -37,25 +34,22 @@ it("should be possible to import json data async", function() { aa: 1, bb: 2, "1": "x" - }, - [Symbol.toStringTag]: "Module" - }); - expect(f).toEqual({ + } + })); + expect(f).toEqual(nsObj({ named: "named", default: { named: "named", "default": "default", __esModule: true - }, - [Symbol.toStringTag]: "Module" - }); - expect(g).toEqual({ + } + })); + expect(g).toEqual(nsObj({ named: {}, default: { named: {} - }, - [Symbol.toStringTag]: "Module" - }); + } + })); expect(g.named).toBe(g.default.named); }); }); diff --git a/test/cases/json/import-named-with-type-json/index.js b/test/cases/json/import-named-with-type-json/index.js new file mode 100644 index 00000000000..765e85427e7 --- /dev/null +++ b/test/cases/json/import-named-with-type-json/index.js @@ -0,0 +1,7 @@ +import { aa } from "../data/e.json" with { type: "json" }; +import { named } from '../data/f.json' with { type: "json" }; + +it("should not allow named import with import assertion", function () { + expect(aa).toEqual(undefined); + expect(named).toEqual(undefined); +}); diff --git a/test/cases/json/import-named-with-type-json/warnings.js b/test/cases/json/import-named-with-type-json/warnings.js new file mode 100644 index 00000000000..db6c5c70762 --- /dev/null +++ b/test/cases/json/import-named-with-type-json/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + /Can't import the named export 'aa' \(imported as 'aa'\) from default-exporting module/, + /Can't import the named export 'named' \(imported as 'named'\) from default-exporting module/ +]; diff --git a/test/cases/json/import-with-type-json/errors.js b/test/cases/json/import-with-type-json/errors.js new file mode 100644 index 00000000000..8bf7e660d0e --- /dev/null +++ b/test/cases/json/import-with-type-json/errors.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + [{ moduleName: /data.poison/, message: /Unexpected token .+ JSON/ }] +]; diff --git a/test/cases/json/import-with-type-json/import-poison.js b/test/cases/json/import-with-type-json/import-poison.js new file mode 100644 index 00000000000..41905fa6530 --- /dev/null +++ b/test/cases/json/import-with-type-json/import-poison.js @@ -0,0 +1,3 @@ +import poison from "../data/poison" with { type: "json" }; + +export default poison; diff --git a/test/cases/json/import-with-type-json/index.js b/test/cases/json/import-with-type-json/index.js new file mode 100644 index 00000000000..3ecb2e20d85 --- /dev/null +++ b/test/cases/json/import-with-type-json/index.js @@ -0,0 +1,21 @@ +import c from "../data/c.json" with { type: "json" }; +import unknownJson from "../data/unknown" with { type: "json" }; +import unknownJs from "../data/unknown"; + +it("should be possible to import json data with import assertion", function () { + expect(c).toEqual([1, 2, 3, 4]); +}); + +it("should be possible to import json data without extension with import assertion", function () { + expect(unknownJson).toEqual([1, 2, 3, 4]); +}); + +it("should be possible to import js without extension without import assertion in the same file", function () { + expect(unknownJs).toEqual({}); +}); + +it("should not be possible to import js with import assertion", function () { + expect(() => { + require("./import-poison.js"); + }).toThrow(); +}); diff --git a/test/cases/json/import-with-type-json/infrastructure-log.js b/test/cases/json/import-with-type-json/infrastructure-log.js new file mode 100644 index 00000000000..a1b07c6fd36 --- /dev/null +++ b/test/cases/json/import-with-type-json/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules|json.+json\/data\/poison$/ +]; diff --git a/test/cases/json/prototype-methods/array.json b/test/cases/json/prototype-methods/array.json new file mode 100644 index 00000000000..07868b19a0d --- /dev/null +++ b/test/cases/json/prototype-methods/array.json @@ -0,0 +1 @@ +[1, 1, 2, 3, 5] diff --git a/test/cases/json/prototype-methods/index.js b/test/cases/json/prototype-methods/index.js new file mode 100644 index 00000000000..c1d14567a3d --- /dev/null +++ b/test/cases/json/prototype-methods/index.js @@ -0,0 +1,20 @@ +import data1 from "./array.json?1"; +import data2 from "./array.json?2"; + +it("should allow to call prototype methods", () => { + expect(data1.map(d => d * 2)).toEqual([2, 2, 4, 6, 10]); + expect(data2.map(d => d * 2)).toEqual([2, 2, 4, 6, 10]); + expect(require("./array.json?2").map(d => d * 2)).toEqual([2, 2, 4, 6, 10]); + expect(require("./array.json?3").map(d => d * 2)).toEqual([2, 2, 4, 6, 10]); + try { + Object.prototype.smoosh = function () { + return this.map(d => d + 1); + }; + expect(data1.smoosh()).toEqual([2, 2, 3, 4, 6]); + expect(data2.smoosh()).toEqual([2, 2, 3, 4, 6]); + expect(require("./array.json?2").smoosh()).toEqual([2, 2, 3, 4, 6]); + expect(require("./array.json?3").smoosh()).toEqual([2, 2, 3, 4, 6]); + } finally { + delete Object.prototype.smoosh; + } +}); diff --git a/test/cases/json/reexport/index.js b/test/cases/json/reexport/index.js new file mode 100644 index 00000000000..aebf4e56c65 --- /dev/null +++ b/test/cases/json/reexport/index.js @@ -0,0 +1,22 @@ +import { e, f, fNamed, fStar, fStarPartial, fStarPartial2 } from "./reexport"; + +it("should be possible to reexport json data", function() { + expect(e.aa).toBe(1); + expect(e.bb).toBe(2); + expect(f).toEqual({ + named: "named", + default: "default", + __esModule: true + }); + expect(fNamed).toBe("named"); + const _fStar = fStar; + expect(_fStar).toEqual( + nsObj({ + named: "named", + default: { named: "named", default: "default", __esModule: true } + }) + ); + expect(_fStar.__esModule).toBe(true); + expect(fStarPartial.default.named).toBe("named"); + expect(fStarPartial2.named).toBe("named"); +}); diff --git a/test/cases/json/reexport/reexport.js b/test/cases/json/reexport/reexport.js new file mode 100644 index 00000000000..427b902724b --- /dev/null +++ b/test/cases/json/reexport/reexport.js @@ -0,0 +1,9 @@ +export { default as e } from "../data/e.json"; +export { default as f } from "../data/f.json?default-exported"; +export { named as fNamed } from "../data/f.json?only-named-exported"; +import * as fStar from "../data/f.json?namespace-object-exported"; +export { fStar }; +import * as fStarPartial from "../data/f.json?namespace-object-exported-but-only-default-named-used"; +export { fStarPartial }; +import * as fStarPartial2 from "../data/f.json?namespace-object-exported-but-only-named-used"; +export { fStarPartial2 }; diff --git a/test/cases/json/reexport/warnings.js b/test/cases/json/reexport/warnings.js new file mode 100644 index 00000000000..68c9dce3d2b --- /dev/null +++ b/test/cases/json/reexport/warnings.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + [ + /Should not import the named export 'named' \(reexported as 'fNamed'\) from default-exporting module \(only default export is available soon\)/ + ] +]; diff --git a/test/cases/json/weird-properties/globals.json b/test/cases/json/weird-properties/globals.json new file mode 100644 index 00000000000..ffda94292b3 --- /dev/null +++ b/test/cases/json/weird-properties/globals.json @@ -0,0 +1,1728 @@ +{ + "builtin": { + "Array": false, + "ArrayBuffer": false, + "Atomics": false, + "BigInt": false, + "BigInt64Array": false, + "BigUint64Array": false, + "Boolean": false, + "constructor": false, + "DataView": false, + "Date": false, + "decodeURI": false, + "decodeURIComponent": false, + "encodeURI": false, + "encodeURIComponent": false, + "Error": false, + "escape": false, + "eval": false, + "EvalError": false, + "FinalizationRegistry": false, + "Float32Array": false, + "Float64Array": false, + "Function": false, + "globalThis": false, + "hasOwnProperty": false, + "Infinity": false, + "Int16Array": false, + "Int32Array": false, + "Int8Array": false, + "isFinite": false, + "isNaN": false, + "isPrototypeOf": false, + "JSON": false, + "Map": false, + "Math": false, + "NaN": false, + "Number": false, + "Object": false, + "parseFloat": false, + "parseInt": false, + "Promise": false, + "propertyIsEnumerable": false, + "Proxy": false, + "RangeError": false, + "ReferenceError": false, + "Reflect": false, + "RegExp": false, + "Set": false, + "SharedArrayBuffer": false, + "String": false, + "Symbol": false, + "SyntaxError": false, + "toLocaleString": false, + "toString": false, + "TypeError": false, + "Uint16Array": false, + "Uint32Array": false, + "Uint8Array": false, + "Uint8ClampedArray": false, + "undefined": false, + "unescape": false, + "URIError": false, + "valueOf": false, + "WeakMap": false, + "WeakRef": false, + "WeakSet": false + }, + "es5": { + "Array": false, + "Boolean": false, + "constructor": false, + "Date": false, + "decodeURI": false, + "decodeURIComponent": false, + "encodeURI": false, + "encodeURIComponent": false, + "Error": false, + "escape": false, + "eval": false, + "EvalError": false, + "Function": false, + "hasOwnProperty": false, + "Infinity": false, + "isFinite": false, + "isNaN": false, + "isPrototypeOf": false, + "JSON": false, + "Math": false, + "NaN": false, + "Number": false, + "Object": false, + "parseFloat": false, + "parseInt": false, + "propertyIsEnumerable": false, + "RangeError": false, + "ReferenceError": false, + "RegExp": false, + "String": false, + "SyntaxError": false, + "toLocaleString": false, + "toString": false, + "TypeError": false, + "undefined": false, + "unescape": false, + "URIError": false, + "valueOf": false + }, + "es2015": { + "Array": false, + "ArrayBuffer": false, + "Boolean": false, + "constructor": false, + "DataView": false, + "Date": false, + "decodeURI": false, + "decodeURIComponent": false, + "encodeURI": false, + "encodeURIComponent": false, + "Error": false, + "escape": false, + "eval": false, + "EvalError": false, + "Float32Array": false, + "Float64Array": false, + "Function": false, + "hasOwnProperty": false, + "Infinity": false, + "Int16Array": false, + "Int32Array": false, + "Int8Array": false, + "isFinite": false, + "isNaN": false, + "isPrototypeOf": false, + "JSON": false, + "Map": false, + "Math": false, + "NaN": false, + "Number": false, + "Object": false, + "parseFloat": false, + "parseInt": false, + "Promise": false, + "propertyIsEnumerable": false, + "Proxy": false, + "RangeError": false, + "ReferenceError": false, + "Reflect": false, + "RegExp": false, + "Set": false, + "String": false, + "Symbol": false, + "SyntaxError": false, + "toLocaleString": false, + "toString": false, + "TypeError": false, + "Uint16Array": false, + "Uint32Array": false, + "Uint8Array": false, + "Uint8ClampedArray": false, + "undefined": false, + "unescape": false, + "URIError": false, + "valueOf": false, + "WeakMap": false, + "WeakSet": false + }, + "es2017": { + "Array": false, + "ArrayBuffer": false, + "Atomics": false, + "Boolean": false, + "constructor": false, + "DataView": false, + "Date": false, + "decodeURI": false, + "decodeURIComponent": false, + "encodeURI": false, + "encodeURIComponent": false, + "Error": false, + "escape": false, + "eval": false, + "EvalError": false, + "Float32Array": false, + "Float64Array": false, + "Function": false, + "hasOwnProperty": false, + "Infinity": false, + "Int16Array": false, + "Int32Array": false, + "Int8Array": false, + "isFinite": false, + "isNaN": false, + "isPrototypeOf": false, + "JSON": false, + "Map": false, + "Math": false, + "NaN": false, + "Number": false, + "Object": false, + "parseFloat": false, + "parseInt": false, + "Promise": false, + "propertyIsEnumerable": false, + "Proxy": false, + "RangeError": false, + "ReferenceError": false, + "Reflect": false, + "RegExp": false, + "Set": false, + "SharedArrayBuffer": false, + "String": false, + "Symbol": false, + "SyntaxError": false, + "toLocaleString": false, + "toString": false, + "TypeError": false, + "Uint16Array": false, + "Uint32Array": false, + "Uint8Array": false, + "Uint8ClampedArray": false, + "undefined": false, + "unescape": false, + "URIError": false, + "valueOf": false, + "WeakMap": false, + "WeakSet": false + }, + "es2020": { + "Array": false, + "ArrayBuffer": false, + "Atomics": false, + "BigInt": false, + "BigInt64Array": false, + "BigUint64Array": false, + "Boolean": false, + "constructor": false, + "DataView": false, + "Date": false, + "decodeURI": false, + "decodeURIComponent": false, + "encodeURI": false, + "encodeURIComponent": false, + "Error": false, + "escape": false, + "eval": false, + "EvalError": false, + "Float32Array": false, + "Float64Array": false, + "Function": false, + "globalThis": false, + "hasOwnProperty": false, + "Infinity": false, + "Int16Array": false, + "Int32Array": false, + "Int8Array": false, + "isFinite": false, + "isNaN": false, + "isPrototypeOf": false, + "JSON": false, + "Map": false, + "Math": false, + "NaN": false, + "Number": false, + "Object": false, + "parseFloat": false, + "parseInt": false, + "Promise": false, + "propertyIsEnumerable": false, + "Proxy": false, + "RangeError": false, + "ReferenceError": false, + "Reflect": false, + "RegExp": false, + "Set": false, + "SharedArrayBuffer": false, + "String": false, + "Symbol": false, + "SyntaxError": false, + "toLocaleString": false, + "toString": false, + "TypeError": false, + "Uint16Array": false, + "Uint32Array": false, + "Uint8Array": false, + "Uint8ClampedArray": false, + "undefined": false, + "unescape": false, + "URIError": false, + "valueOf": false, + "WeakMap": false, + "WeakSet": false + }, + "es2021": { + "Array": false, + "ArrayBuffer": false, + "Atomics": false, + "BigInt": false, + "BigInt64Array": false, + "BigUint64Array": false, + "Boolean": false, + "constructor": false, + "DataView": false, + "Date": false, + "decodeURI": false, + "decodeURIComponent": false, + "encodeURI": false, + "encodeURIComponent": false, + "Error": false, + "escape": false, + "eval": false, + "EvalError": false, + "FinalizationRegistry": false, + "Float32Array": false, + "Float64Array": false, + "Function": false, + "globalThis": false, + "hasOwnProperty": false, + "Infinity": false, + "Int16Array": false, + "Int32Array": false, + "Int8Array": false, + "isFinite": false, + "isNaN": false, + "isPrototypeOf": false, + "JSON": false, + "Map": false, + "Math": false, + "NaN": false, + "Number": false, + "Object": false, + "parseFloat": false, + "parseInt": false, + "Promise": false, + "propertyIsEnumerable": false, + "Proxy": false, + "RangeError": false, + "ReferenceError": false, + "Reflect": false, + "RegExp": false, + "Set": false, + "SharedArrayBuffer": false, + "String": false, + "Symbol": false, + "SyntaxError": false, + "toLocaleString": false, + "toString": false, + "TypeError": false, + "Uint16Array": false, + "Uint32Array": false, + "Uint8Array": false, + "Uint8ClampedArray": false, + "undefined": false, + "unescape": false, + "URIError": false, + "valueOf": false, + "WeakMap": false, + "WeakRef": false, + "WeakSet": false + }, + "browser": { + "AbortController": false, + "AbortSignal": false, + "addEventListener": false, + "alert": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffectReadOnly": false, + "AnimationEffectTiming": false, + "AnimationEffectTimingReadOnly": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "applicationCache": false, + "ApplicationCache": false, + "ApplicationCacheErrorEvent": false, + "atob": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioDestinationNode": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioWorkletGlobalScope ": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "BarProp": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "blur": false, + "BroadcastChannel": false, + "btoa": false, + "BudgetService": false, + "ByteLengthQueuingStrategy": false, + "Cache": false, + "caches": false, + "CacheStorage": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "CharacterData": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "ClipboardEvent": false, + "close": false, + "closed": false, + "CloseEvent": false, + "Comment": false, + "CompositionEvent": false, + "confirm": false, + "console": false, + "ConstantSourceNode": false, + "ConvolverNode": false, + "CountQueuingStrategy": false, + "createImageBitmap": false, + "Credential": false, + "CredentialsContainer": false, + "crypto": false, + "Crypto": false, + "CryptoKey": false, + "CSS": false, + "CSSConditionRule": false, + "CSSFontFaceRule": false, + "CSSGroupingRule": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSPageRule": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSSupportsRule": false, + "CustomElementRegistry": false, + "customElements": false, + "CustomEvent": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "defaultstatus": false, + "defaultStatus": false, + "DelayNode": false, + "DeviceMotionEvent": false, + "DeviceOrientationEvent": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "Document": false, + "DocumentFragment": false, + "DocumentType": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "Element": false, + "ErrorEvent": false, + "event": false, + "Event": false, + "EventSource": false, + "EventTarget": false, + "external": false, + "fetch": false, + "File": false, + "FileList": false, + "FileReader": false, + "find": false, + "focus": false, + "FocusEvent": false, + "FontFace": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "frameElement": false, + "frames": false, + "GainNode": false, + "Gamepad": false, + "GamepadButton": false, + "GamepadEvent": false, + "getComputedStyle": false, + "getSelection": false, + "HashChangeEvent": false, + "Headers": false, + "history": false, + "History": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLBRElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLContentElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDListElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHRElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLIElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLObjectElement": false, + "HTMLOListElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLShadowElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IdleDeadline": false, + "IIRFilterNode": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Intl": false, + "isSecureContext": false, + "KeyboardEvent": false, + "KeyframeEffect": false, + "KeyframeEffectReadOnly": false, + "length": false, + "localStorage": false, + "location": true, + "Location": false, + "locationbar": false, + "matchMedia": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaList": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaSettingsRange": false, + "MediaSource": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackEvent": false, + "menubar": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MimeType": false, + "MimeTypeArray": false, + "MouseEvent": false, + "moveBy": false, + "moveTo": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "name": false, + "NamedNodeMap": false, + "NavigationPreloadManager": false, + "navigator": false, + "Navigator": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "Notification": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "offscreenBuffering": false, + "OffscreenCanvas": true, + "OffscreenCanvasRenderingContext2D": false, + "onabort": true, + "onafterprint": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinstallprompt": true, + "onbeforeprint": true, + "onbeforeunload": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontextmenu": true, + "oncuechange": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpageshow": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onsearch": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitionend": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "openDatabase": false, + "opener": false, + "Option": false, + "origin": false, + "OscillatorNode": false, + "outerHeight": false, + "outerWidth": false, + "PageTransitionEvent": false, + "pageXOffset": false, + "pageYOffset": false, + "PannerNode": false, + "parent": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "performance": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceTiming": false, + "PeriodicWave": false, + "Permissions": false, + "PermissionStatus": false, + "personalbar": false, + "PhotoCapabilities": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "postMessage": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "print": false, + "ProcessingInstruction": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "prompt": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "queueMicrotask": false, + "RadioNodeList": false, + "Range": false, + "ReadableStream": false, + "registerProcessor": false, + "RemotePlayback": false, + "removeEventListener": false, + "Request": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "resizeTo": false, + "Response": false, + "RTCCertificate": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCIceCandidate": false, + "RTCIceGatherer": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpContributingSource": false, + "RTCRtpReceiver": false, + "RTCRtpSender": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "screen": false, + "Screen": false, + "screenLeft": false, + "ScreenOrientation": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "ScriptProcessorNode": false, + "scroll": false, + "scrollbars": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "self": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "ShadowRoot": false, + "SharedWorker": false, + "SourceBuffer": false, + "SourceBufferList": false, + "speechSynthesis": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "StaticRange": false, + "status": false, + "statusbar": false, + "StereoPannerNode": false, + "stop": false, + "Storage": false, + "StorageEvent": false, + "StorageManager": false, + "styleMedia": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubtleCrypto": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGDiscardElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLinearGradientElement": false, + "SVGLineElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGMPathElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSVGElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGTSpanElement": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "TaskAttributionTiming": false, + "Text": false, + "TextDecoder": false, + "TextEncoder": false, + "TextEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TimeRanges": false, + "toolbar": false, + "top": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransitionEvent": false, + "TreeWalker": false, + "UIEvent": false, + "URL": false, + "URLSearchParams": false, + "ValidityState": false, + "visualViewport": false, + "VisualViewport": false, + "VTTCue": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WheelEvent": false, + "window": false, + "Window": false, + "Worker": false, + "WritableStream": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XSLTProcessor": false + }, + "worker": { + "addEventListener": false, + "applicationCache": false, + "atob": false, + "Blob": false, + "BroadcastChannel": false, + "btoa": false, + "Cache": false, + "caches": false, + "clearInterval": false, + "clearTimeout": false, + "close": true, + "console": false, + "fetch": false, + "FileReaderSync": false, + "FormData": false, + "Headers": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "ImageData": false, + "importScripts": true, + "indexedDB": false, + "location": false, + "MessageChannel": false, + "MessagePort": false, + "name": false, + "navigator": false, + "Notification": false, + "onclose": true, + "onconnect": true, + "onerror": true, + "onlanguagechange": true, + "onmessage": true, + "onoffline": true, + "ononline": true, + "onrejectionhandled": true, + "onunhandledrejection": true, + "performance": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceResourceTiming": false, + "PerformanceTiming": false, + "postMessage": true, + "Promise": false, + "queueMicrotask": false, + "removeEventListener": false, + "Request": false, + "Response": false, + "self": true, + "ServiceWorkerRegistration": false, + "setInterval": false, + "setTimeout": false, + "TextDecoder": false, + "TextEncoder": false, + "URL": false, + "URLSearchParams": false, + "WebSocket": false, + "Worker": false, + "WorkerGlobalScope": false, + "XMLHttpRequest": false + }, + "node": { + "__dirname": false, + "__filename": false, + "Buffer": false, + "clearImmediate": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "exports": true, + "global": false, + "Intl": false, + "module": false, + "process": false, + "queueMicrotask": false, + "require": false, + "setImmediate": false, + "setInterval": false, + "setTimeout": false, + "TextDecoder": false, + "TextEncoder": false, + "URL": false, + "URLSearchParams": false + }, + "nodeBuiltin": { + "Buffer": false, + "clearImmediate": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "global": false, + "Intl": false, + "process": false, + "queueMicrotask": false, + "setImmediate": false, + "setInterval": false, + "setTimeout": false, + "TextDecoder": false, + "TextEncoder": false, + "URL": false, + "URLSearchParams": false + }, + "commonjs": { + "exports": true, + "global": false, + "module": false, + "require": false + }, + "amd": { + "define": false, + "require": false + }, + "mocha": { + "after": false, + "afterEach": false, + "before": false, + "beforeEach": false, + "context": false, + "describe": false, + "it": false, + "mocha": false, + "run": false, + "setup": false, + "specify": false, + "suite": false, + "suiteSetup": false, + "suiteTeardown": false, + "teardown": false, + "test": false, + "xcontext": false, + "xdescribe": false, + "xit": false, + "xspecify": false + }, + "jasmine": { + "afterAll": false, + "afterEach": false, + "beforeAll": false, + "beforeEach": false, + "describe": false, + "expect": false, + "expectAsync": false, + "fail": false, + "fdescribe": false, + "fit": false, + "it": false, + "jasmine": false, + "pending": false, + "runs": false, + "spyOn": false, + "spyOnAllFunctions": false, + "spyOnProperty": false, + "waits": false, + "waitsFor": false, + "xdescribe": false, + "xit": false + }, + "jest": { + "afterAll": false, + "afterEach": false, + "beforeAll": false, + "beforeEach": false, + "describe": false, + "expect": false, + "fdescribe": false, + "fit": false, + "it": false, + "jest": false, + "pit": false, + "require": false, + "test": false, + "xdescribe": false, + "xit": false, + "xtest": false + }, + "qunit": { + "asyncTest": false, + "deepEqual": false, + "equal": false, + "expect": false, + "module": false, + "notDeepEqual": false, + "notEqual": false, + "notOk": false, + "notPropEqual": false, + "notStrictEqual": false, + "ok": false, + "propEqual": false, + "QUnit": false, + "raises": false, + "start": false, + "stop": false, + "strictEqual": false, + "test": false, + "throws": false + }, + "phantomjs": { + "console": true, + "exports": true, + "phantom": true, + "require": true, + "WebPage": true + }, + "couch": { + "emit": false, + "exports": false, + "getRow": false, + "log": false, + "module": false, + "provides": false, + "require": false, + "respond": false, + "send": false, + "start": false, + "sum": false + }, + "rhino": { + "defineClass": false, + "deserialize": false, + "gc": false, + "help": false, + "importClass": false, + "importPackage": false, + "java": false, + "load": false, + "loadClass": false, + "Packages": false, + "print": false, + "quit": false, + "readFile": false, + "readUrl": false, + "runCommand": false, + "seal": false, + "serialize": false, + "spawn": false, + "sync": false, + "toint32": false, + "version": false + }, + "nashorn": { + "__DIR__": false, + "__FILE__": false, + "__LINE__": false, + "com": false, + "edu": false, + "exit": false, + "java": false, + "Java": false, + "javafx": false, + "JavaImporter": false, + "javax": false, + "JSAdapter": false, + "load": false, + "loadWithNewGlobal": false, + "org": false, + "Packages": false, + "print": false, + "quit": false + }, + "wsh": { + "ActiveXObject": false, + "CollectGarbage": false, + "Debug": false, + "Enumerator": false, + "GetObject": false, + "RuntimeObject": false, + "ScriptEngine": false, + "ScriptEngineBuildVersion": false, + "ScriptEngineMajorVersion": false, + "ScriptEngineMinorVersion": false, + "VBArray": false, + "WScript": false, + "WSH": false + }, + "jquery": { + "$": false, + "jQuery": false + }, + "yui": { + "YAHOO": false, + "YAHOO_config": false, + "YUI": false, + "YUI_config": false + }, + "shelljs": { + "cat": false, + "cd": false, + "chmod": false, + "config": false, + "cp": false, + "dirs": false, + "echo": false, + "env": false, + "error": false, + "exec": false, + "exit": false, + "find": false, + "grep": false, + "ln": false, + "ls": false, + "mkdir": false, + "mv": false, + "popd": false, + "pushd": false, + "pwd": false, + "rm": false, + "sed": false, + "set": false, + "target": false, + "tempdir": false, + "test": false, + "touch": false, + "which": false + }, + "prototypejs": { + "$": false, + "$$": false, + "$A": false, + "$break": false, + "$continue": false, + "$F": false, + "$H": false, + "$R": false, + "$w": false, + "Abstract": false, + "Ajax": false, + "Autocompleter": false, + "Builder": false, + "Class": false, + "Control": false, + "Draggable": false, + "Draggables": false, + "Droppables": false, + "Effect": false, + "Element": false, + "Enumerable": false, + "Event": false, + "Field": false, + "Form": false, + "Hash": false, + "Insertion": false, + "ObjectRange": false, + "PeriodicalExecuter": false, + "Position": false, + "Prototype": false, + "Scriptaculous": false, + "Selector": false, + "Sortable": false, + "SortableObserver": false, + "Sound": false, + "Template": false, + "Toggle": false, + "Try": false + }, + "meteor": { + "$": false, + "Accounts": false, + "AccountsClient": false, + "AccountsCommon": false, + "AccountsServer": false, + "App": false, + "Assets": false, + "Blaze": false, + "check": false, + "Cordova": false, + "DDP": false, + "DDPRateLimiter": false, + "DDPServer": false, + "Deps": false, + "EJSON": false, + "Email": false, + "HTTP": false, + "Log": false, + "Match": false, + "Meteor": false, + "Mongo": false, + "MongoInternals": false, + "Npm": false, + "Package": false, + "Plugin": false, + "process": false, + "Random": false, + "ReactiveDict": false, + "ReactiveVar": false, + "Router": false, + "ServiceConfiguration": false, + "Session": false, + "share": false, + "Spacebars": false, + "Template": false, + "Tinytest": false, + "Tracker": false, + "UI": false, + "Utils": false, + "WebApp": false, + "WebAppInternals": false + }, + "mongo": { + "_isWindows": false, + "_rand": false, + "BulkWriteResult": false, + "cat": false, + "cd": false, + "connect": false, + "db": false, + "getHostName": false, + "getMemInfo": false, + "hostname": false, + "ISODate": false, + "listFiles": false, + "load": false, + "ls": false, + "md5sumFile": false, + "mkdir": false, + "Mongo": false, + "NumberInt": false, + "NumberLong": false, + "ObjectId": false, + "PlanCache": false, + "print": false, + "printjson": false, + "pwd": false, + "quit": false, + "removeFile": false, + "rs": false, + "sh": false, + "UUID": false, + "version": false, + "WriteResult": false + }, + "applescript": { + "$": false, + "Application": false, + "Automation": false, + "console": false, + "delay": false, + "Library": false, + "ObjC": false, + "ObjectSpecifier": false, + "Path": false, + "Progress": false, + "Ref": false + }, + "serviceworker": { + "addEventListener": false, + "applicationCache": false, + "atob": false, + "Blob": false, + "BroadcastChannel": false, + "btoa": false, + "Cache": false, + "caches": false, + "CacheStorage": false, + "clearInterval": false, + "clearTimeout": false, + "Client": false, + "clients": false, + "Clients": false, + "close": true, + "console": false, + "ExtendableEvent": false, + "ExtendableMessageEvent": false, + "fetch": false, + "FetchEvent": false, + "FileReaderSync": false, + "FormData": false, + "Headers": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "ImageData": false, + "importScripts": false, + "indexedDB": false, + "location": false, + "MessageChannel": false, + "MessagePort": false, + "name": false, + "navigator": false, + "Notification": false, + "onclose": true, + "onconnect": true, + "onerror": true, + "onfetch": true, + "oninstall": true, + "onlanguagechange": true, + "onmessage": true, + "onmessageerror": true, + "onnotificationclick": true, + "onnotificationclose": true, + "onoffline": true, + "ononline": true, + "onpush": true, + "onpushsubscriptionchange": true, + "onrejectionhandled": true, + "onsync": true, + "onunhandledrejection": true, + "performance": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceResourceTiming": false, + "PerformanceTiming": false, + "postMessage": true, + "Promise": false, + "queueMicrotask": false, + "registration": false, + "removeEventListener": false, + "Request": false, + "Response": false, + "self": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerGlobalScope": false, + "ServiceWorkerMessageEvent": false, + "ServiceWorkerRegistration": false, + "setInterval": false, + "setTimeout": false, + "skipWaiting": false, + "TextDecoder": false, + "TextEncoder": false, + "URL": false, + "URLSearchParams": false, + "WebSocket": false, + "WindowClient": false, + "Worker": false, + "WorkerGlobalScope": false, + "XMLHttpRequest": false + }, + "atomtest": { + "advanceClock": false, + "atom": false, + "fakeClearInterval": false, + "fakeClearTimeout": false, + "fakeSetInterval": false, + "fakeSetTimeout": false, + "resetTimeouts": false, + "waitsForPromise": false + }, + "embertest": { + "andThen": false, + "click": false, + "currentPath": false, + "currentRouteName": false, + "currentURL": false, + "fillIn": false, + "find": false, + "findAll": false, + "findWithAssert": false, + "keyEvent": false, + "pauseTest": false, + "resumeTest": false, + "triggerEvent": false, + "visit": false, + "wait": false + }, + "protractor": { + "$": false, + "$$": false, + "browser": false, + "by": false, + "By": false, + "DartObject": false, + "element": false, + "protractor": false + }, + "shared-node-browser": { + "clearInterval": false, + "clearTimeout": false, + "console": false, + "setInterval": false, + "setTimeout": false, + "URL": false, + "URLSearchParams": false + }, + "webextensions": { + "browser": false, + "chrome": false, + "opr": false + }, + "greasemonkey": { + "cloneInto": false, + "createObjectIn": false, + "exportFunction": false, + "GM": false, + "GM_addStyle": false, + "GM_addValueChangeListener": false, + "GM_deleteValue": false, + "GM_download": false, + "GM_getResourceText": false, + "GM_getResourceURL": false, + "GM_getTab": false, + "GM_getTabs": false, + "GM_getValue": false, + "GM_info": false, + "GM_listValues": false, + "GM_log": false, + "GM_notification": false, + "GM_openInTab": false, + "GM_registerMenuCommand": false, + "GM_removeValueChangeListener": false, + "GM_saveTab": false, + "GM_setClipboard": false, + "GM_setValue": false, + "GM_unregisterMenuCommand": false, + "GM_xmlhttpRequest": false, + "unsafeWindow": false + }, + "devtools": { + "$": false, + "$_": false, + "$$": false, + "$0": false, + "$1": false, + "$2": false, + "$3": false, + "$4": false, + "$x": false, + "chrome": false, + "clear": false, + "copy": false, + "debug": false, + "dir": false, + "dirxml": false, + "getEventListeners": false, + "inspect": false, + "keys": false, + "monitor": false, + "monitorEvents": false, + "profile": false, + "profileEnd": false, + "queryObjects": false, + "table": false, + "undebug": false, + "unmonitor": false, + "unmonitorEvents": false, + "values": false + } +} diff --git a/test/cases/json/weird-properties/index.js b/test/cases/json/weird-properties/index.js new file mode 100644 index 00000000000..ab65a40dd7e --- /dev/null +++ b/test/cases/json/weird-properties/index.js @@ -0,0 +1,24 @@ +import globals from "./globals.json?all"; +import someGlobals from "./globals.json"; + +it("should be able to read all properties", () => { + const walk = o => { + for (const p of Object.keys(o)) { + const child = o[p]; + if (typeof child === "object") { + walk(child); + } else { + expect(child).toBeTypeOf("boolean"); + } + } + }; + walk(globals); +}); + +it("should allow accessing some properties with tree-shaking", () => { + expect(someGlobals.builtin.constructor).toBe(false); + expect(someGlobals.es5.eval).toBe(false); + expect(someGlobals.es5.undefined).toBe(false); + expect(someGlobals.node.global).toBe(false); + expect(someGlobals.builtin.valueOf).toBe(false); +}); diff --git a/test/cases/large/big-assets/generate-big-asset-loader.js b/test/cases/large/big-assets/generate-big-asset-loader.js new file mode 100644 index 00000000000..b904193be38 --- /dev/null +++ b/test/cases/large/big-assets/generate-big-asset-loader.js @@ -0,0 +1,6 @@ +/** @type {import("../../../../").RawLoaderDefinition<{ size: string }>} */ +module.exports = function () { + const options = this.getOptions(); + return Buffer.alloc(+options.size).fill(0xa5); +}; +module.exports.raw = true; diff --git a/test/cases/large/big-assets/index.js b/test/cases/large/big-assets/index.js new file mode 100644 index 00000000000..106c4f2c339 --- /dev/null +++ b/test/cases/large/big-assets/index.js @@ -0,0 +1,41 @@ +const createHash = require("../../../../lib/util/hash/xxhash64"); +const fs = require("fs"); + +const h = url => { + const hash = createHash(); + hash.update(fs.readFileSync(url)); + return hash.digest("hex"); +}; + +it("should compile fine", () => { + const a = new URL( + "./generate-big-asset-loader.js?size=100000000!", + import.meta.url + ); + const b = new URL( + "./generate-big-asset-loader.js?size=200000000!", + import.meta.url + ); + const c = new URL( + "./generate-big-asset-loader.js?size=300000000!", + import.meta.url + ); + const d = new URL( + "./generate-big-asset-loader.js?size=400000000!", + import.meta.url + ); + const e = new URL( + "./generate-big-asset-loader.js?size=500000000!", + import.meta.url + ); + const f = new URL( + "./generate-big-asset-loader.js?size=600000000!", + import.meta.url + ); + expect(h(a)).toBe("a7540f59366bb641"); + expect(h(b)).toBe("f642344242fa9de4"); + expect(h(c)).toBe("255d2b78f94dd585"); + expect(h(d)).toBe("c75503096358dd24"); + expect(h(e)).toBe("33ba203498301384"); + expect(h(f)).toBe("e71a39b9b1138c07"); +}); diff --git a/test/cases/large/big-assets/test.config.js b/test/cases/large/big-assets/test.config.js new file mode 100644 index 00000000000..a216fc58b73 --- /dev/null +++ b/test/cases/large/big-assets/test.config.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + timeout: 120000 +}; diff --git a/test/cases/large/big-assets/test.filter.js b/test/cases/large/big-assets/test.filter.js new file mode 100644 index 00000000000..f1925767d11 --- /dev/null +++ b/test/cases/large/big-assets/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = () => !process.env.CI; diff --git a/test/cases/large/many-replacements/generate-many-replacements-loader.js b/test/cases/large/many-replacements/generate-many-replacements-loader.js new file mode 100644 index 00000000000..341649ed407 --- /dev/null +++ b/test/cases/large/many-replacements/generate-many-replacements-loader.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").RawLoaderDefinition<{ count: string }>} */ +module.exports = function () { + const options = this.getOptions(); + return `import thing from "./module"; +export default [${Array.from({ length: +options.count }, () => "thing").join( + ", " + )}].reduce((a, b) => a + b);`; +}; diff --git a/test/cases/large/many-replacements/index.js b/test/cases/large/many-replacements/index.js new file mode 100644 index 00000000000..ebe68a120f6 --- /dev/null +++ b/test/cases/large/many-replacements/index.js @@ -0,0 +1,11 @@ +import a from "./generate-many-replacements-loader?count=1000!./module"; +import b from "./generate-many-replacements-loader?count=10000!./module"; +import c from "./generate-many-replacements-loader?count=100000!./module"; +import d from "./generate-many-replacements-loader?count=1000000!./module"; + +it("should compile fine", () => { + expect(a).toBe(1000); + expect(b).toBe(10000); + expect(c).toBe(100000); + expect(d).toBe(1000000); +}); diff --git a/test/cases/large/many-replacements/module.js b/test/cases/large/many-replacements/module.js new file mode 100644 index 00000000000..aef22247d75 --- /dev/null +++ b/test/cases/large/many-replacements/module.js @@ -0,0 +1 @@ +export default 1; diff --git a/test/cases/large/many-replacements/test.config.js b/test/cases/large/many-replacements/test.config.js new file mode 100644 index 00000000000..a216fc58b73 --- /dev/null +++ b/test/cases/large/many-replacements/test.config.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + timeout: 120000 +}; diff --git a/test/cases/large/many-replacements/test.filter.js b/test/cases/large/many-replacements/test.filter.js new file mode 100644 index 00000000000..f1925767d11 --- /dev/null +++ b/test/cases/large/many-replacements/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = () => !process.env.CI; diff --git a/test/cases/loaders/_esm-loader-type/index.js b/test/cases/loaders/_esm-loader-type/index.js new file mode 100644 index 00000000000..5545f1b4ff5 --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/index.js @@ -0,0 +1,9 @@ +it("should pass package.json type to loader", function () { + expect(require("esm/loader.js!")).toBe("module"); +}); + +it("should pass 'module' type to loader for .mjs", function () { + expect(require("cjs/loader.mjs!")).toBe("module"); + expect(require("esm/loader.mjs!")).toBe("module"); + expect(require("./loader.mjs!")).toBe("module"); +}); diff --git a/test/cases/loaders/_esm-loader-type/loader.mjs b/test/cases/loaders/_esm-loader-type/loader.mjs new file mode 100644 index 00000000000..58914cd70e5 --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/loader.mjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/_esm-loader-type/node_modules/cjs/loader.mjs b/test/cases/loaders/_esm-loader-type/node_modules/cjs/loader.mjs new file mode 100644 index 00000000000..35c1f17332d --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/node_modules/cjs/loader.mjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/_esm-loader-type/node_modules/cjs/package.json b/test/cases/loaders/_esm-loader-type/node_modules/cjs/package.json new file mode 100644 index 00000000000..5b56c70baa3 --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/node_modules/cjs/package.json @@ -0,0 +1,4 @@ +{ + "name": "cjs-package", + "type": "commonjs" +} diff --git a/test/cases/loaders/_esm-loader-type/node_modules/esm/loader.js b/test/cases/loaders/_esm-loader-type/node_modules/esm/loader.js new file mode 100644 index 00000000000..58914cd70e5 --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/node_modules/esm/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/_esm-loader-type/node_modules/esm/loader.mjs b/test/cases/loaders/_esm-loader-type/node_modules/esm/loader.mjs new file mode 100644 index 00000000000..35c1f17332d --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/node_modules/esm/loader.mjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +export default function loader() { + return `export default "${this.loaders[this.loaderIndex].type}";`; +} diff --git a/test/cases/loaders/_esm-loader-type/node_modules/esm/package.json b/test/cases/loaders/_esm-loader-type/node_modules/esm/package.json new file mode 100644 index 00000000000..64069d2b941 --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/node_modules/esm/package.json @@ -0,0 +1,4 @@ +{ + "name": "esm-package", + "type": "module" +} diff --git a/test/cases/loaders/_esm-loader-type/test.filter.js b/test/cases/loaders/_esm-loader-type/test.filter.js new file mode 100644 index 00000000000..9092dfaef56 --- /dev/null +++ b/test/cases/loaders/_esm-loader-type/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => + // TODO need fix in v8 https://github.com/nodejs/node/issues/35889 + // TODO otherwise this test case cause segment fault + false; diff --git a/test/cases/loaders/async/loaders/asyncloader.js b/test/cases/loaders/async/loaders/asyncloader.js index d9be05de326..c6c0eb8d422 100644 --- a/test/cases/loaders/async/loaders/asyncloader.js +++ b/test/cases/loaders/async/loaders/asyncloader.js @@ -1,8 +1,10 @@ -module.exports = function(content) { +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = function (content) { var cb = this.async(); - if(!cb) throw new Error("Loader should allow async mode"); - if(cb !== this.callback) throw new Error("result of this.async() should be equal to this.callback"); - process.nextTick(function() { + if (!cb) throw new Error("Loader should allow async mode"); + if (cb !== this.callback) + throw new Error("result of this.async() should be equal to this.callback"); + process.nextTick(function () { cb(null, content); }); -}; \ No newline at end of file +}; diff --git a/test/cases/loaders/async/loaders/syncloader.js b/test/cases/loaders/async/loaders/syncloader.js index 0356c896f23..fe0c014dba4 100644 --- a/test/cases/loaders/async/loaders/syncloader.js +++ b/test/cases/loaders/async/loaders/syncloader.js @@ -1,3 +1,4 @@ -module.exports = function(content) { +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = function (content) { return content; -}; \ No newline at end of file +}; diff --git a/test/cases/loaders/cjs-loader-type/index.js b/test/cases/loaders/cjs-loader-type/index.js new file mode 100644 index 00000000000..9bda36284e3 --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/index.js @@ -0,0 +1,12 @@ +it("should pass package.json type to loader", function () { + expect(require("cjs/loader.js!")).toBe("commonjs"); + expect(require("./loader.js!")).toBe("undefined"); +}); + +it("should pass 'commonjs' type to loader for .cjs", function () { + expect(require("cjs/loader.cjs!")).toBe("commonjs"); + expect(require("./loader.cjs!")).toBe("commonjs"); + // TODO need fix in v8 https://github.com/nodejs/node/issues/35889 + // TODO otherwise this test case cause segment fault + // expect(require("esm/loader.cjs!")).toBe("commonjs"); +}); diff --git a/test/cases/loaders/cjs-loader-type/loader.cjs b/test/cases/loaders/cjs-loader-type/loader.cjs new file mode 100644 index 00000000000..94974dcfad5 --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/loader.cjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/cjs-loader-type/loader.js b/test/cases/loaders/cjs-loader-type/loader.js new file mode 100644 index 00000000000..94974dcfad5 --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/cjs-loader-type/node_modules/cjs/loader.cjs b/test/cases/loaders/cjs-loader-type/node_modules/cjs/loader.cjs new file mode 100644 index 00000000000..b47e68eb16c --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/node_modules/cjs/loader.cjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/cjs-loader-type/node_modules/cjs/loader.js b/test/cases/loaders/cjs-loader-type/node_modules/cjs/loader.js new file mode 100644 index 00000000000..b47e68eb16c --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/node_modules/cjs/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/cjs-loader-type/node_modules/cjs/package.json b/test/cases/loaders/cjs-loader-type/node_modules/cjs/package.json new file mode 100644 index 00000000000..5b56c70baa3 --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/node_modules/cjs/package.json @@ -0,0 +1,4 @@ +{ + "name": "cjs-package", + "type": "commonjs" +} diff --git a/test/cases/loaders/cjs-loader-type/node_modules/esm/loader.cjs b/test/cases/loaders/cjs-loader-type/node_modules/esm/loader.cjs new file mode 100644 index 00000000000..b47e68eb16c --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/node_modules/esm/loader.cjs @@ -0,0 +1,4 @@ +/** @type {import("../../../../../../").LoaderDefinition} */ +module.exports = function loader() { + return `module.exports = "${this.loaders[this.loaderIndex].type}";`; +}; diff --git a/test/cases/loaders/cjs-loader-type/node_modules/esm/package.json b/test/cases/loaders/cjs-loader-type/node_modules/esm/package.json new file mode 100644 index 00000000000..64069d2b941 --- /dev/null +++ b/test/cases/loaders/cjs-loader-type/node_modules/esm/package.json @@ -0,0 +1,4 @@ +{ + "name": "esm-package", + "type": "module" +} diff --git a/test/cases/loaders/coffee-loader/index.js b/test/cases/loaders/coffee-loader/index.js index be3924f1e3f..8d028239592 100644 --- a/test/cases/loaders/coffee-loader/index.js +++ b/test/cases/loaders/coffee-loader/index.js @@ -4,7 +4,7 @@ it("should handle the coffee loader correctly", function() { }); it("should handle literate coffee script correctly", function() { - expect(require("!coffee-loader?literate!./script.coffee.md")).toBe("literate coffee test"); + expect(require("!coffee-loader?literate=1!./script.coffee.md")).toBe("literate coffee test"); }); it("should generate valid code with cheap-source-map", function() { diff --git a/test/cases/loaders/context/index.js b/test/cases/loaders/context/index.js index 9105d7d6f32..3de4d968cf5 100644 --- a/test/cases/loaders/context/index.js +++ b/test/cases/loaders/context/index.js @@ -1,5 +1,8 @@ it("should be able to use a context with a loader", function() { - var abc = "abc", scr = "script.coffee"; + var abc = "abc", + scr = "script.coffee"; expect(require("../_resources/" + scr)).toBe("coffee test"); - expect(require("raw-loader!../_resources/" + abc + ".txt")).toBe("abc"); + expect(require("raw-loader!../_resources/" + abc + ".txt").default).toBe( + "abc" + ); }); diff --git a/test/cases/loaders/context/test.filter.js b/test/cases/loaders/context/test.filter.js new file mode 100644 index 00000000000..cecc0ee322b --- /dev/null +++ b/test/cases/loaders/context/test.filter.js @@ -0,0 +1,8 @@ +"use strict"; + +const majorVersion = Number.parseInt(process.versions.node.split(".")[0], 10); + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = (config) => + majorVersion >= 16 && (!config.module || supportsRequireInModule()); diff --git a/test/cases/loaders/css-loader/index.js b/test/cases/loaders/css-loader/index.js index b6484574fb4..4888cdc8c14 100644 --- a/test/cases/loaders/css-loader/index.js +++ b/test/cases/loaders/css-loader/index.js @@ -1,11 +1,11 @@ -it("should handle the css loader correctly", function() { - expect( - (require("!css-loader!../_css/stylesheet.css") + "").indexOf(".rule-direct") - ).not.toEqual(-1); - expect( - (require("!css-loader!../_css/stylesheet.css") + "").indexOf(".rule-import1") - ).not.toEqual(-1); - expect( - (require("!css-loader!../_css/stylesheet.css") + "").indexOf(".rule-import2") - ).not.toEqual(-1); +it("should handle the css loader correctly", function () { + expect(require("!css-loader!../_css/stylesheet.css").default + "").toContain( + ".rule-direct" + ); + expect(require("!css-loader!../_css/stylesheet.css").default + "").toContain( + ".rule-import1" + ); + expect(require("!css-loader!../_css/stylesheet.css").default + "").toContain( + ".rule-import2" + ); }); diff --git a/test/cases/loaders/emit-file/file.js b/test/cases/loaders/emit-file/file.js new file mode 100644 index 00000000000..f74a2f2b564 --- /dev/null +++ b/test/cases/loaders/emit-file/file.js @@ -0,0 +1 @@ +module.exports = "ok"; diff --git a/test/cases/loaders/emit-file/index.js b/test/cases/loaders/emit-file/index.js new file mode 100644 index 00000000000..4f2905672e5 --- /dev/null +++ b/test/cases/loaders/emit-file/index.js @@ -0,0 +1,6 @@ +import "./loader!./file"; + +it("should have the file emitted", () => { + const result = __non_webpack_require__("./extra-file.js"); + expect(result).toBe("ok"); +}); diff --git a/test/cases/loaders/emit-file/loader.js b/test/cases/loaders/emit-file/loader.js new file mode 100644 index 00000000000..c53b3e18fbc --- /dev/null +++ b/test/cases/loaders/emit-file/loader.js @@ -0,0 +1,5 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (content) { + this.emitFile("extra-file.js", content); + return ""; +}; diff --git a/test/cases/loaders/emit-file/test.filter.js b/test/cases/loaders/emit-file/test.filter.js new file mode 100644 index 00000000000..49d755d43bb --- /dev/null +++ b/test/cases/loaders/emit-file/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => !config.module; diff --git a/test/cases/loaders/import-module/a.json b/test/cases/loaders/import-module/a.json new file mode 100644 index 00000000000..0187f3b09d6 --- /dev/null +++ b/test/cases/loaders/import-module/a.json @@ -0,0 +1 @@ +{"a":1} diff --git a/test/cases/loaders/import-module/index.js b/test/cases/loaders/import-module/index.js new file mode 100644 index 00000000000..56a4d03f137 --- /dev/null +++ b/test/cases/loaders/import-module/index.js @@ -0,0 +1,6 @@ +import content from "./loader!!"; + +it("should compile", () => { + expect(typeof content).toBe("string"); + expect(content.startsWith("webpack://")).toBe(true); +}); diff --git a/test/cases/loaders/import-module/loader.js b/test/cases/loaders/import-module/loader.js new file mode 100644 index 00000000000..960d39ff9fa --- /dev/null +++ b/test/cases/loaders/import-module/loader.js @@ -0,0 +1,25 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const callback = this.async(); + this.importModule( + path.resolve(__dirname, "module.js"), + { baseUri: "webpack://" }, + (error, exports) => { + if (error) { + callback(error); + return; + } + + callback( + null, + `module.exports = ${ + exports.asset ? JSON.stringify(exports.asset) : undefined + }` + ); + } + ); +}; diff --git a/test/cases/loaders/import-module/module.js b/test/cases/loaders/import-module/module.js new file mode 100644 index 00000000000..97520ef4628 --- /dev/null +++ b/test/cases/loaders/import-module/module.js @@ -0,0 +1,3 @@ +const asset = new URL("./a.json", import.meta.url); + +export { asset } diff --git a/test/cases/loaders/import-module/test.filter.js b/test/cases/loaders/import-module/test.filter.js new file mode 100644 index 00000000000..49d755d43bb --- /dev/null +++ b/test/cases/loaders/import-module/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => !config.module; diff --git a/test/cases/loaders/issue-10725/index.js b/test/cases/loaders/issue-10725/index.js new file mode 100644 index 00000000000..d824f7e0bf4 --- /dev/null +++ b/test/cases/loaders/issue-10725/index.js @@ -0,0 +1,7 @@ +import { answer } from './lib'; + +it("should load module correctly", function() { + var result = require("./text.txt.js!=!./loader.js!./text.txt"); + + expect(result.default).toEqual(answer); +}); diff --git a/test/cases/loaders/issue-10725/lib.js b/test/cases/loaders/issue-10725/lib.js new file mode 100644 index 00000000000..64a32fd291e --- /dev/null +++ b/test/cases/loaders/issue-10725/lib.js @@ -0,0 +1 @@ +export const answer = 42; diff --git a/test/cases/loaders/issue-10725/loader.js b/test/cases/loaders/issue-10725/loader.js new file mode 100644 index 00000000000..ff2b347224d --- /dev/null +++ b/test/cases/loaders/issue-10725/loader.js @@ -0,0 +1,22 @@ +const loaderPath = require.resolve("./loader"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + if (this.query === "?load") { + return ` +import { answer } from "./lib"; + +export default answer; +`; + } + + const matchResource = `${this.utils.contextify(this.context, this.resourcePath)}.js`; + const loader = `${this.utils.contextify(this.context, loaderPath)}?load`; + const remaining = this.utils.contextify(this.context, this.remainingRequest); + const request = `${matchResource}!=!${loader}!${remaining}`; + + this.async(); + this.loadModule(request, (err, source) => { + this.callback(err, source); + }); +}; diff --git a/test/cases/loaders/issue-10725/text.txt b/test/cases/loaders/issue-10725/text.txt new file mode 100644 index 00000000000..8e27be7d615 --- /dev/null +++ b/test/cases/loaders/issue-10725/text.txt @@ -0,0 +1 @@ +text diff --git a/test/cases/loaders/issue-2299/loader/index.js b/test/cases/loaders/issue-2299/loader/index.js index cb27f7cf273..0f27efe4377 100644 --- a/test/cases/loaders/issue-2299/loader/index.js +++ b/test/cases/loaders/issue-2299/loader/index.js @@ -6,20 +6,26 @@ module.exports = function(content) { json.imports, function(url, callback) { this.loadModule(url, function(err, source, map, module) { - if(err) { + if (err) { return callback(err); } callback(null, JSON.parse(source)); }); }.bind(this), function(err, results) { - if(err) { + if (err) { return cb(err); } // Combine all the results into one object and return it - cb(null, "module.exports = " + JSON.stringify(results.reduce(function(prev, result) { - return Object.assign({}, prev, result); - }, json))); + cb( + null, + "module.exports = " + + JSON.stringify( + results.reduce(function(prev, result) { + return { ...prev, ...result }; + }, json) + ) + ); } ); }; diff --git a/test/cases/loaders/less-loader/index.js b/test/cases/loaders/less-loader/index.js index fc94245fbd6..4a43bdcb03d 100644 --- a/test/cases/loaders/less-loader/index.js +++ b/test/cases/loaders/less-loader/index.js @@ -1,11 +1,11 @@ it("should handle the less loader (piped with raw loader) correctly", function() { expect( - require("!raw-loader!less-loader!./less/stylesheet.less").indexOf(".less-rule-direct") - ).not.toEqual(-1); + require("!raw-loader!less-loader!./less/stylesheet.less").default + ).toContain(".less-rule-direct"); expect( - require("!raw-loader!less-loader!./less/stylesheet.less").indexOf(".less-rule-import1") - ).not.toEqual(-1); + require("!raw-loader!less-loader!./less/stylesheet.less").default + ).toContain(".less-rule-import1"); expect( - require("!raw-loader!less-loader!./less/stylesheet.less").indexOf(".less-rule-import2") - ).not.toEqual(-1); + require("!raw-loader!less-loader!./less/stylesheet.less").default + ).toContain(".less-rule-import2"); }); diff --git a/test/cases/loaders/module-description-file/reverseloader.js b/test/cases/loaders/module-description-file/reverseloader.js index 2983d5650c6..4cbb644664a 100644 --- a/test/cases/loaders/module-description-file/reverseloader.js +++ b/test/cases/loaders/module-description-file/reverseloader.js @@ -1,3 +1,4 @@ -module.exports = function(content) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (content) { return content.split("").reverse().join(""); -} +}; diff --git a/test/cases/loaders/no-string/errors.js b/test/cases/loaders/no-string/errors.js index c3bb27deb83..c00f47dcf5c 100644 --- a/test/cases/loaders/no-string/errors.js +++ b/test/cases/loaders/no-string/errors.js @@ -1,10 +1,18 @@ +"use strict"; + module.exports = [ [ - /\.\/loaders\/no-string\/file\.js \(\.\/loaders\/no-string\/loader\.js!\.\/loaders\/no-string\/file\.js\)/, + { + moduleName: + /\.\/loaders\/no-string\/loader\.js!\.\/loaders\/no-string\/file\.js/ + }, /Module build failed: Error: Final loader \(\.\/loaders\/no-string\/loader\.js\) didn't return a Buffer or String/ ], [ - /\.\/loaders\/no-string\/file\.js \(\.\/loaders\/no-string\/loader\.js!\.\/loaders\/no-string\/pitch-loader\.js!\.\/loaders\/no-string\/file\.js\)/, + { + moduleName: + /\.\/loaders\/no-string\/loader\.js!\.\/loaders\/no-string\/pitch-loader\.js!\.\/loaders\/no-string\/file\.js/ + }, /Module build failed: Error: Final loader \(\.\/loaders\/no-string\/loader\.js\) didn't return a Buffer or String/ ] ]; diff --git a/test/cases/loaders/no-string/index.js b/test/cases/loaders/no-string/index.js index a7205631c24..68f841bfb1f 100644 --- a/test/cases/loaders/no-string/index.js +++ b/test/cases/loaders/no-string/index.js @@ -1,8 +1,8 @@ it("should emit the correct error for loaders not returning buffer or string", function() { - expect(() => require("./loader.js!./file.js")).toThrowError( + expect(() => require("./loader.js!./file.js")).toThrow( /Module build failed/ ); - expect(() => require("./loader.js!./pitch-loader.js!./file.js")).toThrowError( + expect(() => require("./loader.js!./pitch-loader.js!./file.js")).toThrow( /Module build failed/ ); }); diff --git a/test/cases/loaders/no-string/infrastructure-log.js b/test/cases/loaders/no-string/infrastructure-log.js new file mode 100644 index 00000000000..dd0f18a4ecd --- /dev/null +++ b/test/cases/loaders/no-string/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules.+no-string[/\\]loader\.js!.+no-string[/\\]file\.js$/ +]; diff --git a/test/cases/loaders/pug-loader/index.js b/test/cases/loaders/pug-loader/index.js index 7348ae7df16..96a0303ad28 100644 --- a/test/cases/loaders/pug-loader/index.js +++ b/test/cases/loaders/pug-loader/index.js @@ -1,4 +1,4 @@ it("should handle the pug loader correctly", function() { - expect(require("!pug-loader?self!../_resources/template.pug")({ abc: "abc" })).toBe("

selfabc

included

"); + expect(require("!@webdiscus/pug-loader?self=true!../_resources/template.pug")({ abc: "abc" })).toBe("

selfabc

included

"); expect(require("../_resources/template.pug")({ abc: "abc" })).toBe("

abc

included

"); }); diff --git a/test/cases/loaders/pug-loader/test.filter.js b/test/cases/loaders/pug-loader/test.filter.js new file mode 100644 index 00000000000..cecc0ee322b --- /dev/null +++ b/test/cases/loaders/pug-loader/test.filter.js @@ -0,0 +1,8 @@ +"use strict"; + +const majorVersion = Number.parseInt(process.versions.node.split(".")[0], 10); + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = (config) => + majorVersion >= 16 && (!config.module || supportsRequireInModule()); diff --git a/test/cases/loaders/query/index.js b/test/cases/loaders/query/index.js index 260f9287c29..a6cbc5410d6 100644 --- a/test/cases/loaders/query/index.js +++ b/test/cases/loaders/query/index.js @@ -19,6 +19,7 @@ it("should pass query to loader without resource with resource query", function( it("should pass query to loader without resource", function() { var result = require("./loaders/queryloader?query!"); expect(result).toEqual({ + resourceQuery: "", query: "?query", prev: null }); diff --git a/test/cases/loaders/query/loaders/queryloader.js b/test/cases/loaders/query/loaders/queryloader.js index 8d606f560f8..f9bb23e1f55 100644 --- a/test/cases/loaders/query/loaders/queryloader.js +++ b/test/cases/loaders/query/loaders/queryloader.js @@ -1,7 +1,11 @@ -module.exports = function(content) { - return "module.exports = " + JSON.stringify({ - resourceQuery: this.resourceQuery, - query: this.query, - prev: content - }); -} +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = function (content) { + return ( + "module.exports = " + + JSON.stringify({ + resourceQuery: this.resourceQuery, + query: this.query, + prev: content + }) + ); +}; diff --git a/test/cases/loaders/raw-loader/index.js b/test/cases/loaders/raw-loader/index.js index 5367de4e8d3..8f44095ee90 100644 --- a/test/cases/loaders/raw-loader/index.js +++ b/test/cases/loaders/raw-loader/index.js @@ -1,3 +1,3 @@ it("should handle the raw loader correctly", function() { - expect(require("raw-loader!../_resources/abc.txt")).toBe("abc"); + expect(require("raw-loader!../_resources/abc.txt").default).toBe("abc"); }); diff --git a/test/cases/loaders/resolve/index.js b/test/cases/loaders/resolve/index.js new file mode 100644 index 00000000000..23f20fec53f --- /dev/null +++ b/test/cases/loaders/resolve/index.js @@ -0,0 +1,10 @@ +it("should be possible to create resolver with different options", () => { + const result = require("./loader!"); + expect(result).toEqual({ + one: "index.js", + two: "index.xyz", + three: "index.js", + four: "index.xyz", + five: "index.js" + }); +}); diff --git a/web_modules/node-libs-browser.js b/test/cases/loaders/resolve/index.xyz similarity index 100% rename from web_modules/node-libs-browser.js rename to test/cases/loaders/resolve/index.xyz diff --git a/test/cases/loaders/resolve/loader.js b/test/cases/loaders/resolve/loader.js new file mode 100644 index 00000000000..53fc4aaf2f1 --- /dev/null +++ b/test/cases/loaders/resolve/loader.js @@ -0,0 +1,32 @@ +const path = require("path"); +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const resolve1 = this.getResolve(); + const resolve2 = this.getResolve({ + extensions: [".xyz", ".js"] + }); + const resolve3 = this.getResolve({ + extensions: [".hee", "..."] + }); + const resolve4 = this.getResolve({ + extensions: [".xyz", "..."] + }); + const resolve5 = this.getResolve({ + extensions: ["...", ".xyz"] + }); + return Promise.all([ + resolve1(__dirname, "./index"), + resolve2(__dirname, "./index"), + resolve3(__dirname, "./index"), + resolve4(__dirname, "./index"), + resolve5(__dirname, "./index") + ]).then(([one, two, three, four, five]) => { + return `module.exports = ${JSON.stringify({ + one: path.basename(one), + two: path.basename(two), + three: path.basename(three), + four: path.basename(four), + five: path.basename(five) + })}`; + }); +}; diff --git a/test/cases/loaders/utils/index.js b/test/cases/loaders/utils/index.js new file mode 100644 index 00000000000..53744380e9d --- /dev/null +++ b/test/cases/loaders/utils/index.js @@ -0,0 +1,6 @@ +it("should allow to access utils in loader", () => { + expect(require("./loader!" + __filename)).toEqual({ + request1: "./index.js", + request2: "./index.js" + }); +}); diff --git a/test/cases/loaders/utils/loader.js b/test/cases/loaders/utils/loader.js new file mode 100644 index 00000000000..2d9e6e37073 --- /dev/null +++ b/test/cases/loaders/utils/loader.js @@ -0,0 +1,14 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + return `module.exports = { + request1: ${JSON.stringify( + this.utils.contextify( + this.context, + this.utils.absolutify(this.context, "./index.js") + ) + )}, + request2: ${JSON.stringify( + this.utils.contextify(this.context, this.resourcePath) + )} +}`; +}; diff --git a/test/cases/loaders/val-loader/index.js b/test/cases/loaders/val-loader/index.js deleted file mode 100644 index 29a56b6aa38..00000000000 --- a/test/cases/loaders/val-loader/index.js +++ /dev/null @@ -1,11 +0,0 @@ -it("should handle the val loader (piped with css loader) correctly", function() { - expect( - (require("!css-loader!val-loader!../_css/generateCss") + "").indexOf("generated") - ).not.toEqual(-1); - expect( - (require("!css-loader!val-loader!../_css/generateCss") + "").indexOf(".rule-import2") - ).not.toEqual(-1); - expect( - (require("!raw-loader!val-loader!../_css/generateCss") + "").indexOf("generated") - ).not.toEqual(-1); -}); diff --git a/test/cases/mjs/cjs-import-default/data.json b/test/cases/mjs/cjs-import-default/data.json new file mode 100644 index 00000000000..b3593ddae90 --- /dev/null +++ b/test/cases/mjs/cjs-import-default/data.json @@ -0,0 +1,5 @@ +{ + "__esModule": true, + "data": "ok", + "default": "default" +} diff --git a/test/cases/mjs/cjs-import-default/dynamic.js b/test/cases/mjs/cjs-import-default/dynamic.js new file mode 100644 index 00000000000..1be68250830 --- /dev/null +++ b/test/cases/mjs/cjs-import-default/dynamic.js @@ -0,0 +1,3 @@ +exports.__esModule = Math.random() < -1; +exports.data = "ok"; +exports.default = "default"; diff --git a/test/cases/mjs/cjs-import-default/dynamicFlagged.js b/test/cases/mjs/cjs-import-default/dynamicFlagged.js new file mode 100644 index 00000000000..7afccbd5dde --- /dev/null +++ b/test/cases/mjs/cjs-import-default/dynamicFlagged.js @@ -0,0 +1,3 @@ +exports.__esModule = Math.random() > -1; +exports.data = "ok"; +exports.default = "default"; diff --git a/test/cases/mjs/cjs-import-default/errors.js b/test/cases/mjs/cjs-import-default/errors.js deleted file mode 100644 index 5e0f6e01254..00000000000 --- a/test/cases/mjs/cjs-import-default/errors.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = [ - [ - /Can't import the namespace object from non EcmaScript module \(only default export is available\)/ - ], - [ - /Can't import the namespace object from non EcmaScript module \(only default export is available\)/ - ], - [ - /Can't import the named export 'data' from non EcmaScript module \(only default export is available\)/ - ], - [ - /Can't import the named export 'data' from non EcmaScript module \(only default export is available\)/ - ], - [ - /Can't reexport the namespace object from non EcmaScript module \(only default export is available\)/ - ], - [ - /Can't reexport the named export 'data' from non EcmaScript module \(only default export is available\)/ - ] -]; diff --git a/test/cases/mjs/cjs-import-default/flagged.js b/test/cases/mjs/cjs-import-default/flagged.js new file mode 100644 index 00000000000..500d0fe9d9d --- /dev/null +++ b/test/cases/mjs/cjs-import-default/flagged.js @@ -0,0 +1,3 @@ +exports.__esModule = true; +exports.data = "ok"; +exports.default = "default"; diff --git a/test/cases/mjs/cjs-import-default/index.mjs b/test/cases/mjs/cjs-import-default/index.mjs index 2094d704219..9e664031561 100644 --- a/test/cases/mjs/cjs-import-default/index.mjs +++ b/test/cases/mjs/cjs-import-default/index.mjs @@ -1,12 +1,32 @@ import { data } from "./cjs.js"; import * as star from "./cjs.js"; import def from "./cjs.js"; -import { ns, default as def1, def as def2, data as data2 } from "./reexport.mjs"; +import { + ns, + default as def1, + def as def2, + data as data2 +} from "./reexport.mjs"; import * as reexport from "./reexport.mjs"; -it("should get correct values when importing named exports from a CommonJs module from mjs", function() { - expect(typeof data).toBe("undefined"); - expect({ data }).toEqual({ data: undefined }); +import { data as dynamicData } from "./dynamic.js"; +import * as dynamicStar from "./dynamic.js"; +import dynamicDef from "./dynamic.js"; + +import { data as flaggedData } from "./flagged.js"; +import * as flaggedStar from "./flagged.js"; +import flaggedDef from "./flagged.js"; + +import { data as dynamicFlaggedData } from "./dynamicFlagged.js"; +import * as dynamicFlaggedStar from "./dynamicFlagged.js"; +import dynamicFlaggedDef from "./dynamicFlagged.js"; + +import * as jsonStar from "./data.json"; +import jsonDef from "./data.json"; + +it("should get correct values when importing named exports from a CommonJs module from mjs", function () { + expect(typeof data).toBe("string"); + expect({ data }).toEqual({ data: "ok" }); expect(def).toEqual({ data: "ok", default: "default" @@ -17,59 +37,229 @@ it("should get correct values when importing named exports from a CommonJs modul default: "default" } }); - expect(star).toEqual({ - default: { - data: "ok", - default: "default" - }, - [Symbol.toStringTag]: "Module" - }); + expect(star).toEqual( + nsObj({ + default: { + data: "ok", + default: "default" + }, + data: "ok" + }) + ); expect({ star }).toEqual({ - star: { + star: nsObj({ default: { data: "ok", default: "default" }, - [Symbol.toStringTag]: "Module" - } + data: "ok" + }) }); expect(star.default).toEqual({ data: "ok", default: "default" }); - expect(ns).toEqual({ - default: { + expect(ns).toEqual( + nsObj({ + default: { + data: "ok", + default: "default" + }, + data: "ok" + }) + ); + expect(def1).toEqual({ + data: "ok", + default: "default" + }); + expect(def2).toEqual({ + data: "ok", + default: "default" + }); + expect(typeof data2).toBe("string"); + expect({ data2 }).toEqual({ data2: "ok" }); + expect(reexport).toEqual( + nsObj({ + ns: nsObj({ + default: { + data: "ok", + default: "default" + }, + data: "ok" + }), + default: { + data: "ok", + default: "default" + }, + def: { + data: "ok", + default: "default" + }, + data: "ok" + }) + ); +}); + +it("should get correct values when importing named exports from a flagged module from mjs", function () { + expect(typeof flaggedData).toBe("string"); + expect({ flaggedData }).toEqual({ flaggedData: "ok" }); + expect(flaggedDef).toEqual({ + __esModule: true, + data: "ok", + default: "default" + }); + expect({ flaggedDef }).toEqual({ + flaggedDef: { + __esModule: true, data: "ok", default: "default" - }, - [Symbol.toStringTag]: "Module" + } }); - expect(def1).toEqual({ + expect(flaggedStar).toEqual( + nsObj({ + default: { + __esModule: true, + data: "ok", + default: "default" + }, + data: "ok" + }) + ); + expect({ flaggedStar }).toEqual({ + flaggedStar: nsObj({ + default: { + __esModule: true, + data: "ok", + default: "default" + }, + data: "ok" + }) + }); + expect(flaggedStar.default).toEqual({ + __esModule: true, data: "ok", default: "default" }); - expect(def2).toEqual({ +}); + +it("should get correct values when importing named exports from a dynamic (non-flagged) module from mjs", function () { + expect(typeof dynamicData).toBe("string"); + expect({ dynamicData }).toEqual({ dynamicData: "ok" }); + expect(dynamicDef).toEqual({ + __esModule: false, data: "ok", default: "default" }); - expect((typeof data2)).toBe("undefined"); - expect(reexport).toEqual({ - ns: { + expect({ dynamicDef }).toEqual({ + dynamicDef: { + __esModule: false, + data: "ok", + default: "default" + } + }); + expect(dynamicStar).toEqual( + nsObj({ default: { + __esModule: false, data: "ok", default: "default" }, - [Symbol.toStringTag]: "Module" - }, - default: { + data: "ok" + }) + ); + expect({ dynamicStar }).toEqual({ + dynamicStar: nsObj({ + default: { + __esModule: false, + data: "ok", + default: "default" + }, + data: "ok" + }) + }); + expect(dynamicStar.default).toEqual({ + __esModule: false, + data: "ok", + default: "default" + }); +}); + +it("should get correct values when importing named exports from a dynamic (flagged) module from mjs", function () { + expect(typeof dynamicFlaggedData).toBe("string"); + expect({ dynamicFlaggedData }).toEqual({ dynamicFlaggedData: "ok" }); + expect(dynamicFlaggedDef).toEqual({ + __esModule: true, + data: "ok", + default: "default" + }); + expect({ dynamicFlaggedDef }).toEqual({ + dynamicFlaggedDef: { + __esModule: true, data: "ok", default: "default" - }, - def: { + } + }); + expect(dynamicFlaggedStar).toEqual( + nsObj({ + default: { + __esModule: true, + data: "ok", + default: "default" + }, + data: "ok" + }) + ); + expect({ dynamicFlaggedStar }).toEqual({ + dynamicFlaggedStar: nsObj({ + default: { + __esModule: true, + data: "ok", + default: "default" + }, + data: "ok" + }) + }); + expect(dynamicFlaggedStar.default).toEqual({ + __esModule: true, + data: "ok", + default: "default" + }); +}); + +it("should get correct values when importing named exports from a default-only module from mjs", function () { + expect(jsonDef).toEqual({ + __esModule: true, + data: "ok", + default: "default" + }); + expect({ jsonDef }).toEqual({ + jsonDef: { + __esModule: true, data: "ok", default: "default" - }, - data: undefined, - [Symbol.toStringTag]: "Module" + } + }); + expect(jsonStar).toEqual( + nsObj({ + default: { + __esModule: true, + data: "ok", + default: "default" + } + }) + ); + expect({ jsonStar }).toEqual({ + jsonStar: nsObj({ + default: { + __esModule: true, + data: "ok", + default: "default" + } + }) + }); + expect(jsonStar.default).toEqual({ + __esModule: true, + data: "ok", + default: "default" }); }); diff --git a/test/cases/mjs/cjs-import-default/package.json b/test/cases/mjs/cjs-import-default/package.json new file mode 100644 index 00000000000..283e244a11d --- /dev/null +++ b/test/cases/mjs/cjs-import-default/package.json @@ -0,0 +1,3 @@ +{ + "main": "index.mjs" +} diff --git a/test/cases/mjs/esm-by-default/index.js b/test/cases/mjs/esm-by-default/index.js new file mode 100644 index 00000000000..883c2f8d7f7 --- /dev/null +++ b/test/cases/mjs/esm-by-default/index.js @@ -0,0 +1 @@ +require("./index.mjs").setOk(); diff --git a/test/cases/mjs/esm-by-default/index.mjs b/test/cases/mjs/esm-by-default/index.mjs index 701d602ab77..9bbc8c0a964 100644 --- a/test/cases/mjs/esm-by-default/index.mjs +++ b/test/cases/mjs/esm-by-default/index.mjs @@ -1,8 +1,20 @@ -it("should not have commonjs stuff available", function() { - if(typeof module !== "undefined") { // If module is available +let ok = false; + +it("should not use mjs extension by default", () => { + expect(ok).toBe(true); +}); + +it("should not have commonjs stuff available", function () { + if (typeof module !== "undefined") { + // If module is available expect(module).toHaveProperty("webpackTestSuiteModule"); // it must be the node.js module } - if(typeof require !== "undefined") { // If require is available + if (typeof require !== "undefined") { + // If require is available expect(require).toHaveProperty("webpackTestSuiteRequire"); // it must be the node.js require } }); + +export function setOk() { + ok = true; +} diff --git a/test/cases/mjs/namespace-object-lazy/cjs-dynamic.js b/test/cases/mjs/namespace-object-lazy/cjs-dynamic.js new file mode 100644 index 00000000000..1aaa6e03da1 --- /dev/null +++ b/test/cases/mjs/namespace-object-lazy/cjs-dynamic.js @@ -0,0 +1 @@ +module.exports = Promise.resolve(1); diff --git a/test/cases/mjs/namespace-object-lazy/index.mjs b/test/cases/mjs/namespace-object-lazy/index.mjs index 539e66910d8..63405d836e9 100644 --- a/test/cases/mjs/namespace-object-lazy/index.mjs +++ b/test/cases/mjs/namespace-object-lazy/index.mjs @@ -1,86 +1,151 @@ -it("should receive a namespace object when importing commonjs", function(done) { - import("./cjs.js").then(function(result) { - expect(result).toEqual({ default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }); - done(); - }).catch(done); +it("should receive a namespace object when importing commonjs", function (done) { + import("./cjs.js") + .then(function (result) { + expect(result).toEqual( + nsObj({ + default: { named: "named", default: "default" }, + named: "named" + }) + ); + done(); + }) + .catch(done); }); -it("should receive a namespace object when importing commonjs with __esModule", function(done) { - import("./cjs-esmodule.js").then(function(result) { - expect(result).toEqual({ default: { __esModule: true, named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }); - done(); - }).catch(done); +it("should receive a namespace object when importing commonjs with __esModule", function (done) { + import("./cjs-esmodule.js") + .then(function (result) { + expect(result).toEqual( + nsObj({ + default: { __esModule: true, named: "named", default: "default" }, + named: "named" + }) + ); + done(); + }) + .catch(done); +}); + +it("should resolve the promise returned by the imported dynamic commonjs", function (done) { + const post = "dynamic.js"; + import(/* webpackMode: "eager" */ "./cjs-" + post) // context module + .then(function (result) { + expect(result).toBe(1); + done(); + }) + .catch(done); }); function contextCJS(name) { return Promise.all([ import(`./dir-cjs/${name}.js`), - import(/* webpackMode: "lazy-once" */`./dir-cjs?1/${name}.js`), - import(/* webpackMode: "eager" */`./dir-cjs?2/${name}.js`) - ]).then(function(results) { - return import(/* webpackMode: "weak" */`./dir-cjs/${name}.js`).then(function(r) { - results.push(r); - return results; - }); + import(/* webpackMode: "lazy-once" */ `./dir-cjs?1/${name}.js`), + import(/* webpackMode: "eager" */ `./dir-cjs?2/${name}.js`) + ]).then(function (results) { + return import(/* webpackMode: "weak" */ `./dir-cjs/${name}.js`).then( + function (r) { + results.push(r); + return results; + } + ); }); } function contextHarmony(name) { return Promise.all([ import(`./dir-harmony/${name}.js`), - import(/* webpackMode: "lazy-once" */`./dir-harmony?1/${name}.js`), - import(/* webpackMode: "eager" */`./dir-harmony?2/${name}.js`) - ]).then(function(results) { - return import(/* webpackMode: "weak" */`./dir-harmony/${name}.js`).then(function(r) { - results.push(r); - return results; - }); + import(/* webpackMode: "lazy-once" */ `./dir-harmony?1/${name}.js`), + import(/* webpackMode: "eager" */ `./dir-harmony?2/${name}.js`) + ]).then(function (results) { + return import(/* webpackMode: "weak" */ `./dir-harmony/${name}.js`).then( + function (r) { + results.push(r); + return results; + } + ); }); } function contextMixed(name) { return Promise.all([ import(`./dir-mixed/${name}`), - import(/* webpackMode: "lazy-once" */`./dir-mixed?1/${name}`), - import(/* webpackMode: "eager" */`./dir-mixed?2/${name}`) - ]).then(function(results) { - return import(/* webpackMode: "weak" */`./dir-mixed/${name}`).then(function(r) { - results.push(r); - return results; - }); + import(/* webpackMode: "lazy-once" */ `./dir-mixed?1/${name}`), + import(/* webpackMode: "eager" */ `./dir-mixed?2/${name}`) + ]).then(function (results) { + return import(/* webpackMode: "weak" */ `./dir-mixed/${name}`).then( + function (r) { + results.push(r); + return results; + } + ); }); } function promiseTest(promise, equalsTo) { - return promise.then(function(results) { - for(const result of results) - expect(result).toEqual(equalsTo); + return promise.then(function (results) { + expect(results).toEqual(results.map(() => equalsTo)); }); } -it("should receive a namespace object when importing commonjs via context", function() { +it("should receive a namespace object when importing commonjs via context", function () { return Promise.all([ - promiseTest(contextCJS("one"), { default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), - promiseTest(contextCJS("two"), { default: { __esModule: true, named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), - promiseTest(contextCJS("three"), { default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), - promiseTest(contextCJS("null"), { default: null, [Symbol.toStringTag]: "Module" }) + promiseTest( + contextCJS("one"), + nsObj({ default: { named: "named", default: "default" }, named: "named" }) + ), + promiseTest( + contextCJS("two"), + nsObj({ + default: { __esModule: true, named: "named", default: "default" }, + named: "named" + }) + ), + promiseTest( + contextCJS("three"), + nsObj({ default: { named: "named", default: "default" }, named: "named" }) + ), + promiseTest(contextCJS("null"), nsObj({ default: null })) ]); }); -it("should receive a namespace object when importing harmony via context", function() { +it("should receive a namespace object when importing harmony via context", function () { return Promise.all([ - promiseTest(contextHarmony("one"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }), - promiseTest(contextHarmony("two"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }), - promiseTest(contextHarmony("three"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }) + promiseTest( + contextHarmony("one"), + nsObj({ named: "named", default: "default" }) + ), + promiseTest( + contextHarmony("two"), + nsObj({ named: "named", default: "default" }) + ), + promiseTest( + contextHarmony("three"), + nsObj({ named: "named", default: "default" }) + ) ]); }); -it("should receive a namespace object when importing mixed content via context", function() { +it("should receive a namespace object when importing mixed content via context", function () { return Promise.all([ - promiseTest(contextMixed("one"), { default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), - promiseTest(contextMixed("two"), { default: { __esModule: true, named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), - promiseTest(contextMixed("three"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }), - promiseTest(contextMixed("null"), { default: null, [Symbol.toStringTag]: "Module" }), - promiseTest(contextMixed("json.json"), { named: "named", default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }) + promiseTest( + contextMixed("one.js"), + nsObj({ default: { named: "named", default: "default" }, named: "named" }) + ), + promiseTest( + contextMixed("two.js"), + nsObj({ + default: { __esModule: true, named: "named", default: "default" }, + named: "named" + }) + ), + promiseTest( + contextMixed("three.js"), + nsObj({ named: "named", default: "default" }) + ), + promiseTest(contextMixed("null.js"), nsObj({ default: null })), + promiseTest( + contextMixed("json.json"), + nsObj({ default: { named: "named", default: "default" } }) + ) ]); }); diff --git a/test/cases/mjs/namespace-object-lazy/package.json b/test/cases/mjs/namespace-object-lazy/package.json new file mode 100644 index 00000000000..283e244a11d --- /dev/null +++ b/test/cases/mjs/namespace-object-lazy/package.json @@ -0,0 +1,3 @@ +{ + "main": "index.mjs" +} diff --git a/test/cases/mjs/namespace-object-lazy/test.filter.js b/test/cases/mjs/namespace-object-lazy/test.filter.js deleted file mode 100644 index 2602795eefb..00000000000 --- a/test/cases/mjs/namespace-object-lazy/test.filter.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(config) { - return !config.minimize; -}; diff --git a/test/cases/mjs/no-module-main-field/node_modules/m/a.js b/test/cases/mjs/no-module-main-field/node_modules/m/a.js index edbdf0bdeff..b43605e3975 100644 --- a/test/cases/mjs/no-module-main-field/node_modules/m/a.js +++ b/test/cases/mjs/no-module-main-field/node_modules/m/a.js @@ -1 +1 @@ -export default "nope1"; +export default "yep"; diff --git a/test/cases/mjs/no-module-main-field/node_modules/m/a.mjs b/test/cases/mjs/no-module-main-field/node_modules/m/a.mjs index b43605e3975..edbdf0bdeff 100644 --- a/test/cases/mjs/no-module-main-field/node_modules/m/a.mjs +++ b/test/cases/mjs/no-module-main-field/node_modules/m/a.mjs @@ -1 +1 @@ -export default "yep"; +export default "nope1"; diff --git a/test/cases/mjs/no-module-main-field/package.json b/test/cases/mjs/no-module-main-field/package.json new file mode 100644 index 00000000000..283e244a11d --- /dev/null +++ b/test/cases/mjs/no-module-main-field/package.json @@ -0,0 +1,3 @@ +{ + "main": "index.mjs" +} diff --git a/test/cases/mjs/non-enumerable/analyzable-module.js b/test/cases/mjs/non-enumerable/analyzable-module.js new file mode 100644 index 00000000000..e151e0a4f63 --- /dev/null +++ b/test/cases/mjs/non-enumerable/analyzable-module.js @@ -0,0 +1,2 @@ +exports.prop = true; +Object.defineProperty(exports, "nonEnumerable", { value: true }); diff --git a/test/cases/mjs/non-enumerable/errors.js b/test/cases/mjs/non-enumerable/errors.js new file mode 100644 index 00000000000..cf0578b529a --- /dev/null +++ b/test/cases/mjs/non-enumerable/errors.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = [ + [ + /export '__esModule' \(imported as 'm1'\) was not found in '\.\/analyzable-module\.js'/ + ], + [ + /export '__esModule' \(imported as 'm1'\) was not found in '\.\/analyzable-module\.js'/ + ] +]; diff --git a/test/cases/mjs/non-enumerable/esModule.js b/test/cases/mjs/non-enumerable/esModule.js new file mode 100644 index 00000000000..969949a5e5c --- /dev/null +++ b/test/cases/mjs/non-enumerable/esModule.js @@ -0,0 +1,3 @@ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.prop = true; +Object.defineProperty(exports, "nonEnumerable", { value: true }); diff --git a/test/cases/mjs/non-enumerable/index.js b/test/cases/mjs/non-enumerable/index.js new file mode 100644 index 00000000000..fd35c85c5ab --- /dev/null +++ b/test/cases/mjs/non-enumerable/index.js @@ -0,0 +1,5 @@ +import "./test.js?concatenated"; +import "./test.mjs?concatenated"; + +require("./test.js?non-concatenated"); +require("./test.mjs?non-concatenated"); diff --git a/test/cases/mjs/non-enumerable/test.js b/test/cases/mjs/non-enumerable/test.js new file mode 100644 index 00000000000..d5d2e7f4b15 --- /dev/null +++ b/test/cases/mjs/non-enumerable/test.js @@ -0,0 +1,135 @@ +import * as m1 from "./analyzable-module.js"; +import * as m2 from "./weird-module.js"; +import * as m3 from "./esModule.js"; +import d1 from "./analyzable-module.js"; +import d2 from "./weird-module.js"; +import d3 from "./esModule.js"; + +it("should include non-enumerable properties (non-mjs)", () => { + const ns = m1; + + expect(m1.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m1.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m1.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m1.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); +}); + +it("should include non-enumerable properties (non-mjs, promise)", () => + import("./analyzable-module").then(m1 => { + const ns = m1; + + expect(m1.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m1.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m1.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m1.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); + })); + +it("should not include prototype properties and symbols (non-mjs)", () => { + const ns = m2; // For historical reasons this doesn't yield a namespace object + const sym = m2.sym; + + expect(m2.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m2.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m2.protoProp).toBe(true); + expect(ns.protoProp).toBe(true); + + expect(m2.nonEnumerablePrototype).toBe(true); + expect(ns.nonEnumerablePrototype).toBe(true); + + expect(m2[sym]).toBe(true); + expect(ns[sym]).toBe(true); + + expect(m2.default).toBeTypeOf("object"); + expect(ns.default).toBe(undefined); // This is intentional + + expect(m2.__esModule).toBe(true); + expect(ns.__esModule).toBe(undefined); // This is intentional +}); + +it("should not include prototype properties and symbols (non-mjs, promise)", () => + import("./weird-module").then(m2 => { + const ns = m2; + const sym = m2.sym; + + expect(m2.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m2.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m2.protoProp).toBe(true); + expect(ns.protoProp).toBe(true); + + expect(m2.nonEnumerablePrototype).toBe(true); + expect(ns.nonEnumerablePrototype).toBe(true); + + expect(m2[sym]).toBe(undefined); + expect(ns[sym]).toBe(undefined); + + expect(m2.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m2.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); + })); + +it("should include non-enumerable properties with __esModule (non-mjs)", () => { + const ns = m3; + + expect(m3.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m3.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m3.default).toBe(undefined); + expect(ns.default).toBe(undefined); + + expect(m3.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); +}); + +it("should include non-enumerable properties with __esModule (non-mjs, promise)", () => + import("./analyzable-module").then(m3 => { + const ns = m3; + + expect(m3.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m3.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m3.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m3.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); + })); + +it("should not handle __esModule for the default import (non-mjs)", () => { + expect(d1.__esModule).toBe(undefined); + expect(Object(d1).__esModule).toBe(undefined); + + expect(d2.__esModule).toBe(undefined); + expect(Object(d2).__esModule).toBe(undefined); + + expect(d3).toBe(undefined); +}); diff --git a/test/cases/mjs/non-enumerable/test.mjs b/test/cases/mjs/non-enumerable/test.mjs new file mode 100644 index 00000000000..a4c1bf6915e --- /dev/null +++ b/test/cases/mjs/non-enumerable/test.mjs @@ -0,0 +1,136 @@ +import * as m1 from "./analyzable-module.js"; +import * as m2 from "./weird-module.js"; +import * as m3 from "./esModule.js"; +import d1 from "./analyzable-module.js"; +import d2 from "./weird-module.js"; +import d3 from "./esModule.js"; + +it("should include non-enumerable properties (mjs)", () => { + const ns = m1; + + expect(m1.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m1.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m1.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m1.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); +}); + +it("should include non-enumerable properties (mjs, promise)", () => + import("./analyzable-module.js").then(m1 => { + const ns = m1; + + expect(m1.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m1.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m1.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m1.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); + })); + +it("should not include prototype properties and symbols (mjs)", () => { + const ns = m2; + const sym = m2.sym; + + expect(m2.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m2.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m2.protoProp).toBe(true); + expect(ns.protoProp).toBe(true); + + expect(m2.nonEnumerablePrototype).toBe(true); + expect(ns.nonEnumerablePrototype).toBe(true); + + expect(m2[sym]).toBe(undefined); + expect(ns[sym]).toBe(undefined); + + expect(m2.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m2.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); +}); + +it("should not include prototype properties and symbols (mjs, promise)", () => + import("./weird-module.js").then(m2 => { + const ns = m2; + const sym = m2.sym; + + expect(m2.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m2.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m2.protoProp).toBe(true); + expect(ns.protoProp).toBe(true); + + expect(m2.nonEnumerablePrototype).toBe(true); + expect(ns.nonEnumerablePrototype).toBe(true); + + expect(m2[sym]).toBe(undefined); + expect(ns[sym]).toBe(undefined); + + expect(m2.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m2.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); + })); + +it("should include non-enumerable properties with __esModule (non-mjs)", () => { + const ns = m3; + + expect(m3.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m3.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m3.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m3.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); +}); + +it("should include non-enumerable properties with __esModule (non-mjs, promise)", () => + import("./analyzable-module.js").then(m3 => { + const ns = m3; + + expect(m3.prop).toBe(true); + expect(ns.prop).toBe(true); + + expect(m3.nonEnumerable).toBe(true); + expect(ns.nonEnumerable).toBe(true); + + expect(m3.default).toBeTypeOf("object"); + expect(ns.default).toBeTypeOf("object"); + + expect(m3.__esModule).toBe(true); + expect(ns.__esModule).toBe(true); + })); + +it("should not handle __esModule for the default import (mjs)", () => { + expect(d1.__esModule).toBe(undefined); + expect(Object(d1).__esModule).toBe(undefined); + + expect(d2.__esModule).toBe(undefined); + expect(Object(d2).__esModule).toBe(undefined); + + expect(d3.__esModule).toBe(true); + expect(Object(d3).__esModule).toBe(true); +}); diff --git a/test/cases/mjs/non-enumerable/warnings.js b/test/cases/mjs/non-enumerable/warnings.js new file mode 100644 index 00000000000..89e5ccf47f7 --- /dev/null +++ b/test/cases/mjs/non-enumerable/warnings.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = [ + [ + /export '__esModule' \(imported as 'm1'\) was not found in '\.\/analyzable-module\.js'/ + ], + [/export 'default' \(imported as 'm3'\) was not found in '\.\/esModule\.js'/], + [/export 'default' \(imported as 'd3'\) was not found in '\.\/esModule\.js'/], + [ + /export '__esModule' \(imported as 'm1'\) was not found in '\.\/analyzable-module\.js'/ + ], + [/export 'default' \(imported as 'm3'\) was not found in '\.\/esModule\.js'/], + [/export 'default' \(imported as 'd3'\) was not found in '\.\/esModule\.js'/] +]; diff --git a/test/cases/mjs/non-enumerable/weird-module.js b/test/cases/mjs/non-enumerable/weird-module.js new file mode 100644 index 00000000000..a131814b948 --- /dev/null +++ b/test/cases/mjs/non-enumerable/weird-module.js @@ -0,0 +1,8 @@ +const sym = Symbol("sym"); +exports.sym = sym; +exports.prop = true; +Object.defineProperty(exports, "nonEnumerable", { value: true }); +exports[sym] = true; +const p = { protoProp: true, [sym]: true }; +Object.setPrototypeOf(exports, p); +Object.defineProperty(p, "nonEnumerablePrototype", { value: true }); diff --git a/test/cases/mjs/non-mjs-cjs-import-default/cjs.js b/test/cases/mjs/non-mjs-cjs-import-default/cjs.js new file mode 100644 index 00000000000..2c3ee027387 --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/cjs.js @@ -0,0 +1,4 @@ +module.exports = { + data: "ok", + default: "default" +}; diff --git a/test/cases/mjs/non-mjs-cjs-import-default/data.json b/test/cases/mjs/non-mjs-cjs-import-default/data.json new file mode 100644 index 00000000000..b3593ddae90 --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/data.json @@ -0,0 +1,5 @@ +{ + "__esModule": true, + "data": "ok", + "default": "default" +} diff --git a/test/cases/mjs/non-mjs-cjs-import-default/dynamic.js b/test/cases/mjs/non-mjs-cjs-import-default/dynamic.js new file mode 100644 index 00000000000..1be68250830 --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/dynamic.js @@ -0,0 +1,3 @@ +exports.__esModule = Math.random() < -1; +exports.data = "ok"; +exports.default = "default"; diff --git a/test/cases/mjs/non-mjs-cjs-import-default/dynamicFlagged.js b/test/cases/mjs/non-mjs-cjs-import-default/dynamicFlagged.js new file mode 100644 index 00000000000..7afccbd5dde --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/dynamicFlagged.js @@ -0,0 +1,3 @@ +exports.__esModule = Math.random() > -1; +exports.data = "ok"; +exports.default = "default"; diff --git a/test/cases/mjs/non-mjs-cjs-import-default/flagged.js b/test/cases/mjs/non-mjs-cjs-import-default/flagged.js new file mode 100644 index 00000000000..500d0fe9d9d --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/flagged.js @@ -0,0 +1,3 @@ +exports.__esModule = true; +exports.data = "ok"; +exports.default = "default"; diff --git a/test/cases/mjs/non-mjs-cjs-import-default/index.js b/test/cases/mjs/non-mjs-cjs-import-default/index.js new file mode 100644 index 00000000000..33fc0738101 --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/index.js @@ -0,0 +1,198 @@ +import { data } from "./cjs.js"; +import * as star from "./cjs.js"; +import def from "./cjs.js"; +import { ns, default as def1, def as def2, data as data2 } from "./reexport.js"; +import * as reexport from "./reexport.js"; + +import { data as dynamicData } from "./dynamic.js"; +import * as dynamicStar from "./dynamic.js"; +import dynamicDef from "./dynamic.js"; + +import { data as flaggedData } from "./flagged.js"; +import * as flaggedStar from "./flagged.js"; +import flaggedDef from "./flagged.js"; + +import { data as dynamicFlaggedData } from "./dynamicFlagged.js"; +import * as dynamicFlaggedStar from "./dynamicFlagged.js"; +import dynamicFlaggedDef from "./dynamicFlagged.js"; + +import * as jsonStar from "./data.json"; +import jsonDef from "./data.json"; + +it("should get correct values when importing named exports from a CommonJs module from non-mjs", function () { + expect(typeof data).toBe("string"); + expect({ data }).toEqual({ data: "ok" }); + expect(def).toEqual({ + data: "ok", + default: "default" + }); + expect({ def }).toEqual({ + def: { + data: "ok", + default: "default" + } + }); + expect(star).toEqual({ + data: "ok", + default: "default" + }); + expect({ star }).toEqual({ + star: { + data: "ok", + default: "default" + } + }); + expect(star.default).toEqual({ + data: "ok", + default: "default" + }); + expect(ns).toEqual({ + data: "ok", + default: "default" + }); + expect(def1).toEqual({ + data: "ok", + default: "default" + }); + expect(def2).toEqual({ + data: "ok", + default: "default" + }); + expect(typeof data2).toBe("string"); + expect({ data2 }).toEqual({ data2: "ok" }); + expect(reexport).toEqual( + nsObj({ + ns: { + data: "ok", + default: "default" + }, + default: { + data: "ok", + default: "default" + }, + def: { + data: "ok", + default: "default" + }, + data: "ok" + }) + ); +}); + +it("should get correct values when importing named exports from a flagged module from non-mjs", function () { + expect(typeof flaggedData).toBe("string"); + expect({ flaggedData }).toEqual({ flaggedData: "ok" }); + expect(flaggedDef).toBe("default"); + expect({ flaggedDef }).toEqual({ + flaggedDef: "default" + }); + expect(flaggedStar).toEqual({ + __esModule: true, + default: "default", + data: "ok" + }); + expect({ flaggedStar }).toEqual({ + flaggedStar: { + __esModule: true, + default: "default", + data: "ok" + } + }); + expect(flaggedStar.default).toBe("default"); +}); + +it("should get correct values when importing named exports from a dynamic (non-flagged) module from non-mjs", function () { + expect(typeof dynamicData).toBe("string"); + expect({ dynamicData }).toEqual({ dynamicData: "ok" }); + expect(dynamicDef).toEqual({ + __esModule: false, + data: "ok", + default: "default" + }); + expect({ dynamicDef }).toEqual({ + dynamicDef: { + __esModule: false, + data: "ok", + default: "default" + } + }); + expect(dynamicStar).toEqual({ + __esModule: false, + data: "ok", + default: "default" + }); + expect({ dynamicStar }).toEqual({ + dynamicStar: { + __esModule: false, + data: "ok", + default: "default" + } + }); + expect(dynamicStar.default).toEqual({ + __esModule: false, + data: "ok", + default: "default" + }); +}); + +it("should get correct values when importing named exports from a dynamic (flagged) module from non-mjs", function () { + expect(typeof dynamicFlaggedData).toBe("string"); + expect({ dynamicFlaggedData }).toEqual({ dynamicFlaggedData: "ok" }); + expect(dynamicFlaggedDef).toBe("default"); + expect({ dynamicFlaggedDef }).toEqual({ + dynamicFlaggedDef: "default" + }); + expect(dynamicFlaggedStar).toEqual({ + __esModule: true, + default: "default", + data: "ok" + }); + expect({ dynamicFlaggedStar }).toEqual({ + dynamicFlaggedStar: { + __esModule: true, + default: "default", + data: "ok" + } + }); + expect(dynamicFlaggedStar.default).toBe("default"); +}); + +it("should get correct values when importing named exports from a default-only module from non-mjs", function () { + expect(jsonDef).toEqual({ + __esModule: true, + data: "ok", + default: "default" + }); + expect({ jsonDef }).toEqual({ + jsonDef: { + __esModule: true, + data: "ok", + default: "default" + } + }); + expect(jsonStar).toEqual( + nsObj({ + data: "ok", + default: { + __esModule: true, + data: "ok", + default: "default" + } + }) + ); + expect({ jsonStar }).toEqual({ + jsonStar: nsObj({ + data: "ok", + default: { + __esModule: true, + data: "ok", + default: "default" + } + }) + }); + expect(jsonStar.default).toEqual({ + __esModule: true, + data: "ok", + default: "default" + }); +}); diff --git a/test/cases/mjs/non-mjs-cjs-import-default/reexport.js b/test/cases/mjs/non-mjs-cjs-import-default/reexport.js new file mode 100644 index 00000000000..1b07e112d01 --- /dev/null +++ b/test/cases/mjs/non-mjs-cjs-import-default/reexport.js @@ -0,0 +1,5 @@ +import * as ns from "./cjs.js"; +export { ns }; +export { default } from "./cjs.js"; +export { default as def } from "./cjs.js"; +export { data as data } from "./cjs.js"; diff --git a/test/cases/mjs/non-mjs-namespace-object-lazy/cjs-dynamic.js b/test/cases/mjs/non-mjs-namespace-object-lazy/cjs-dynamic.js new file mode 100644 index 00000000000..1aaa6e03da1 --- /dev/null +++ b/test/cases/mjs/non-mjs-namespace-object-lazy/cjs-dynamic.js @@ -0,0 +1 @@ +module.exports = Promise.resolve(1); diff --git a/test/cases/mjs/non-mjs-namespace-object-lazy/index.js b/test/cases/mjs/non-mjs-namespace-object-lazy/index.js index 936032eb9b6..dc83158405b 100644 --- a/test/cases/mjs/non-mjs-namespace-object-lazy/index.js +++ b/test/cases/mjs/non-mjs-namespace-object-lazy/index.js @@ -1,6 +1,6 @@ it("should receive a namespace object when importing commonjs", function(done) { import("./cjs").then(function(result) { - expect(result).toEqual({ named: "named", default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }); + expect(result).toEqual(nsObj({ named: "named", default: { named: "named", default: "default" } })); done(); }).catch(done); }); @@ -12,6 +12,16 @@ it("should receive a namespace object when importing commonjs with __esModule", }).catch(done); }); +it("should resolve the promise returned by the imported dynamic commonjs", function (done) { + const post = "dynamic.js"; + import(/* webpackMode: "eager" */ "./cjs-" + post) // context module + .then(function (result) { + expect(result).toBe(1); + done(); + }) + .catch(done); +}); + function contextCJS(name) { return Promise.all([ import(`./dir-cjs/${name}`), @@ -60,27 +70,27 @@ function promiseTest(promise, equalsTo) { it("should receive a namespace object when importing commonjs via context", function() { return Promise.all([ - promiseTest(contextCJS("one"), { named: "named", default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), + promiseTest(contextCJS("one"), nsObj({ named: "named", default: { named: "named", default: "default" } })), promiseTest(contextCJS("two"), { __esModule: true, named: "named", default: "default" }), - promiseTest(contextCJS("three"), { named: "named", default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), - promiseTest(contextCJS("null"), { default: null, [Symbol.toStringTag]: "Module" }) + promiseTest(contextCJS("three"), nsObj({ named: "named", default: { named: "named", default: "default" } })), + promiseTest(contextCJS("null"), nsObj({ default: null })) ]); }); it("should receive a namespace object when importing harmony via context", function() { return Promise.all([ - promiseTest(contextHarmony("one"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }), - promiseTest(contextHarmony("two"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }), - promiseTest(contextHarmony("three"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }) + promiseTest(contextHarmony("one"), nsObj({ named: "named", default: "default" })), + promiseTest(contextHarmony("two"), nsObj({ named: "named", default: "default" })), + promiseTest(contextHarmony("three"), nsObj({ named: "named", default: "default" })) ]); }); it("should receive a namespace object when importing mixed content via context", function() { return Promise.all([ - promiseTest(contextMixed("one"), { named: "named", default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }), + promiseTest(contextMixed("one"), nsObj({ named: "named", default: { named: "named", default: "default" } })), promiseTest(contextMixed("two"), { __esModule: true, named: "named", default: "default" }), - promiseTest(contextMixed("three"), { named: "named", default: "default", [Symbol.toStringTag]: "Module" }), - promiseTest(contextMixed("null"), { default: null, [Symbol.toStringTag]: "Module" }), - promiseTest(contextMixed("json.json"), { named: "named", default: { named: "named", default: "default" }, [Symbol.toStringTag]: "Module" }) + promiseTest(contextMixed("three"), nsObj({ named: "named", default: "default" })), + promiseTest(contextMixed("null"), nsObj({ default: null })), + promiseTest(contextMixed("json.json"), nsObj({ named: "named", default: { named: "named", default: "default" } })) ]); }); diff --git a/test/cases/mjs/non-mjs-namespace-object-lazy/test.filter.js b/test/cases/mjs/non-mjs-namespace-object-lazy/test.filter.js deleted file mode 100644 index 2602795eefb..00000000000 --- a/test/cases/mjs/non-mjs-namespace-object-lazy/test.filter.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(config) { - return !config.minimize; -}; diff --git a/test/cases/mjs/type-module/index.js b/test/cases/mjs/type-module/index.js new file mode 100644 index 00000000000..8799340658e --- /dev/null +++ b/test/cases/mjs/type-module/index.js @@ -0,0 +1,9 @@ +it("should not have access to require, module and define", () => { + expect( + typeof require === "undefined" || require.webpackTestSuiteRequire + ).toBe(true); + expect(typeof module === "undefined" || module.webpackTestSuiteModule).toBe( + true + ); + expect(typeof define).toBe("undefined"); +}); diff --git a/test/cases/mjs/type-module/package.json b/test/cases/mjs/type-module/package.json new file mode 100644 index 00000000000..3dbc1ca591c --- /dev/null +++ b/test/cases/mjs/type-module/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/test/cases/mjs/type-null/index.js b/test/cases/mjs/type-null/index.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/cases/mjs/type-null/index.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/cases/mjs/type-null/package.json b/test/cases/mjs/type-null/package.json new file mode 100644 index 00000000000..f4d94c0c979 --- /dev/null +++ b/test/cases/mjs/type-null/package.json @@ -0,0 +1,3 @@ +{ + "type": null +} diff --git a/test/cases/nonce/set-nonce/index.js b/test/cases/nonce/set-nonce/index.js index 9607ec97b86..6854393685b 100644 --- a/test/cases/nonce/set-nonce/index.js +++ b/test/cases/nonce/set-nonce/index.js @@ -7,7 +7,8 @@ it("should load script with nonce 'nonce1234'", function(done) { // if in browser context, test that nonce was added. if (typeof document !== 'undefined') { var script = document.querySelector('script[src="js/chunk-with-nonce.web.js"]'); - expect(script.getAttribute('nonce')).toBe('nonce1234'); + var nonce = script.nonce || script.getAttribute('nonce'); + expect(nonce).toBe('nonce1234'); } __webpack_nonce__ = undefined; done(); diff --git a/test/cases/optimize/concat-star-import/index.js b/test/cases/optimize/concat-star-import/index.js new file mode 100644 index 00000000000..0cbaf6cfabd --- /dev/null +++ b/test/cases/optimize/concat-star-import/index.js @@ -0,0 +1,5 @@ +import { foo } from "./module"; + +it("should handle star import with name collision", () => { + expect(foo()).toBe("1 21 2"); +}); diff --git a/test/cases/optimize/concat-star-import/module.js b/test/cases/optimize/concat-star-import/module.js new file mode 100644 index 00000000000..7fd27db367b --- /dev/null +++ b/test/cases/optimize/concat-star-import/module.js @@ -0,0 +1,7 @@ +import * as c from "cmodule"; + +export function foo() { + // variable name matches the imported package name + const cmodule = c([1, 2]); + return cmodule + cmodule; +} diff --git a/test/cases/optimize/concat-star-import/node_modules/cmodule/index.js b/test/cases/optimize/concat-star-import/node_modules/cmodule/index.js new file mode 100644 index 00000000000..77d1e74ffda --- /dev/null +++ b/test/cases/optimize/concat-star-import/node_modules/cmodule/index.js @@ -0,0 +1,18 @@ +(function () { + 'use strict'; + + function cmodule (args) { + return (args || []).join(' '); + } + + if (typeof module !== 'undefined' && module.exports) { + cmodule.default = cmodule; + module.exports = cmodule; + } else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { + define('cmodule', [], function () { + return cmodule; + }); + } else { + window.cmodule = cmodule; + } +}()); diff --git a/test/cases/optimize/concat-star-import/node_modules/cmodule/package.json b/test/cases/optimize/concat-star-import/node_modules/cmodule/package.json new file mode 100644 index 00000000000..14ab704d8f6 --- /dev/null +++ b/test/cases/optimize/concat-star-import/node_modules/cmodule/package.json @@ -0,0 +1,3 @@ +{ + "main": "index.js" +} diff --git a/test/cases/optimize/many-exports-100/chunk1.js b/test/cases/optimize/many-exports-100/chunk1.js new file mode 100644 index 00000000000..e81e551748f --- /dev/null +++ b/test/cases/optimize/many-exports-100/chunk1.js @@ -0,0 +1,105 @@ +import { + x00, + x01, + x02, + x03, + x04, + x05, + x06, + x07, + x08, + x09, + x10, + x11, + x12, + x13, + x14, + x15, + x16, + x17, + x18, + x19, + x20, + x21, + x22, + x23, + x24, + x25, + x26, + x27, + x28, + x29, + x30, + x31, + x32, + x33, + x34, + x35, + x36, + x37, + x38, + x39, + x40, + x41, + x42, + x43, + x44, + x45, + x46, + x47, + x48, + x49 +} from "./module"; + +export default () => { + expect(x00).toBe("x00"); + expect(x01).toBe("x01"); + expect(x02).toBe("x02"); + expect(x03).toBe("x03"); + expect(x04).toBe("x04"); + expect(x05).toBe("x05"); + expect(x06).toBe("x06"); + expect(x07).toBe("x07"); + expect(x08).toBe("x08"); + expect(x09).toBe("x09"); + expect(x10).toBe("x10"); + expect(x11).toBe("x11"); + expect(x12).toBe("x12"); + expect(x13).toBe("x13"); + expect(x14).toBe("x14"); + expect(x15).toBe("x15"); + expect(x16).toBe("x16"); + expect(x17).toBe("x17"); + expect(x18).toBe("x18"); + expect(x19).toBe("x19"); + expect(x20).toBe("x20"); + expect(x21).toBe("x21"); + expect(x22).toBe("x22"); + expect(x23).toBe("x23"); + expect(x24).toBe("x24"); + expect(x25).toBe("x25"); + expect(x26).toBe("x26"); + expect(x27).toBe("x27"); + expect(x28).toBe("x28"); + expect(x29).toBe("x29"); + expect(x30).toBe("x30"); + expect(x31).toBe("x31"); + expect(x32).toBe("x32"); + expect(x33).toBe("x33"); + expect(x34).toBe("x34"); + expect(x35).toBe("x35"); + expect(x36).toBe("x36"); + expect(x37).toBe("x37"); + expect(x38).toBe("x38"); + expect(x39).toBe("x39"); + expect(x40).toBe("x40"); + expect(x41).toBe("x41"); + expect(x42).toBe("x42"); + expect(x43).toBe("x43"); + expect(x44).toBe("x44"); + expect(x45).toBe("x45"); + expect(x46).toBe("x46"); + expect(x47).toBe("x47"); + expect(x48).toBe("x48"); + expect(x49).toBe("x49"); +}; diff --git a/test/cases/optimize/many-exports-100/chunk2.js b/test/cases/optimize/many-exports-100/chunk2.js new file mode 100644 index 00000000000..f2efeeddad1 --- /dev/null +++ b/test/cases/optimize/many-exports-100/chunk2.js @@ -0,0 +1,105 @@ +import { + y00, + y01, + y02, + y03, + y04, + y05, + y06, + y07, + y08, + y09, + y10, + y11, + y12, + y13, + y14, + y15, + y16, + y17, + y18, + y19, + y20, + y21, + y22, + y23, + y24, + y25, + y26, + y27, + y28, + y29, + y30, + y31, + y32, + y33, + y34, + y35, + y36, + y37, + y38, + y39, + y40, + y41, + y42, + y43, + y44, + y45, + y46, + y47, + y48, + y49 +} from "./module"; + +export default () => { + expect(y00).toBe("y00"); + expect(y01).toBe("y01"); + expect(y02).toBe("y02"); + expect(y03).toBe("y03"); + expect(y04).toBe("y04"); + expect(y05).toBe("y05"); + expect(y06).toBe("y06"); + expect(y07).toBe("y07"); + expect(y08).toBe("y08"); + expect(y09).toBe("y09"); + expect(y10).toBe("y10"); + expect(y11).toBe("y11"); + expect(y12).toBe("y12"); + expect(y13).toBe("y13"); + expect(y14).toBe("y14"); + expect(y15).toBe("y15"); + expect(y16).toBe("y16"); + expect(y17).toBe("y17"); + expect(y18).toBe("y18"); + expect(y19).toBe("y19"); + expect(y20).toBe("y20"); + expect(y21).toBe("y21"); + expect(y22).toBe("y22"); + expect(y23).toBe("y23"); + expect(y24).toBe("y24"); + expect(y25).toBe("y25"); + expect(y26).toBe("y26"); + expect(y27).toBe("y27"); + expect(y28).toBe("y28"); + expect(y29).toBe("y29"); + expect(y30).toBe("y30"); + expect(y31).toBe("y31"); + expect(y32).toBe("y32"); + expect(y33).toBe("y33"); + expect(y34).toBe("y34"); + expect(y35).toBe("y35"); + expect(y36).toBe("y36"); + expect(y37).toBe("y37"); + expect(y38).toBe("y38"); + expect(y39).toBe("y39"); + expect(y40).toBe("y40"); + expect(y41).toBe("y41"); + expect(y42).toBe("y42"); + expect(y43).toBe("y43"); + expect(y44).toBe("y44"); + expect(y45).toBe("y45"); + expect(y46).toBe("y46"); + expect(y47).toBe("y47"); + expect(y48).toBe("y48"); + expect(y49).toBe("y49"); +}; diff --git a/test/cases/optimize/many-exports-100/index.js b/test/cases/optimize/many-exports-100/index.js new file mode 100644 index 00000000000..3e6aeb415b4 --- /dev/null +++ b/test/cases/optimize/many-exports-100/index.js @@ -0,0 +1,10 @@ +it("should mangle all exports correctly x", () => { + return import("./chunk1").then(({ default: test }) => { + test(); + }); +}); +it("should mangle all exports correctly y", () => { + return import("./chunk2").then(({ default: test }) => { + test(); + }); +}); diff --git a/test/cases/optimize/many-exports-100/module.js b/test/cases/optimize/many-exports-100/module.js new file mode 100644 index 00000000000..a38bbd713b2 --- /dev/null +++ b/test/cases/optimize/many-exports-100/module.js @@ -0,0 +1,101 @@ +export const x00 = "x00"; +export const x01 = "x01"; +export const x02 = "x02"; +export const x03 = "x03"; +export const x04 = "x04"; +export const x05 = "x05"; +export const x06 = "x06"; +export const x07 = "x07"; +export const x08 = "x08"; +export const x09 = "x09"; +export const x10 = "x10"; +export const x11 = "x11"; +export const x12 = "x12"; +export const x13 = "x13"; +export const x14 = "x14"; +export const x15 = "x15"; +export const x16 = "x16"; +export const x17 = "x17"; +export const x18 = "x18"; +export const x19 = "x19"; +export const x20 = "x20"; +export const x21 = "x21"; +export const x22 = "x22"; +export const x23 = "x23"; +export const x24 = "x24"; +export const x25 = "x25"; +export const x26 = "x26"; +export const x27 = "x27"; +export const x28 = "x28"; +export const x29 = "x29"; +export const x30 = "x30"; +export const x31 = "x31"; +export const x32 = "x32"; +export const x33 = "x33"; +export const x34 = "x34"; +export const x35 = "x35"; +export const x36 = "x36"; +export const x37 = "x37"; +export const x38 = "x38"; +export const x39 = "x39"; +export const x40 = "x40"; +export const x41 = "x41"; +export const x42 = "x42"; +export const x43 = "x43"; +export const x44 = "x44"; +export const x45 = "x45"; +export const x46 = "x46"; +export const x47 = "x47"; +export const x48 = "x48"; +export const x49 = "x49"; + +export const y00 = "y00"; +export const y01 = "y01"; +export const y02 = "y02"; +export const y03 = "y03"; +export const y04 = "y04"; +export const y05 = "y05"; +export const y06 = "y06"; +export const y07 = "y07"; +export const y08 = "y08"; +export const y09 = "y09"; +export const y10 = "y10"; +export const y11 = "y11"; +export const y12 = "y12"; +export const y13 = "y13"; +export const y14 = "y14"; +export const y15 = "y15"; +export const y16 = "y16"; +export const y17 = "y17"; +export const y18 = "y18"; +export const y19 = "y19"; +export const y20 = "y20"; +export const y21 = "y21"; +export const y22 = "y22"; +export const y23 = "y23"; +export const y24 = "y24"; +export const y25 = "y25"; +export const y26 = "y26"; +export const y27 = "y27"; +export const y28 = "y28"; +export const y29 = "y29"; +export const y30 = "y30"; +export const y31 = "y31"; +export const y32 = "y32"; +export const y33 = "y33"; +export const y34 = "y34"; +export const y35 = "y35"; +export const y36 = "y36"; +export const y37 = "y37"; +export const y38 = "y38"; +export const y39 = "y39"; +export const y40 = "y40"; +export const y41 = "y41"; +export const y42 = "y42"; +export const y43 = "y43"; +export const y44 = "y44"; +export const y45 = "y45"; +export const y46 = "y46"; +export const y47 = "y47"; +export const y48 = "y48"; +export const y49 = "y49"; diff --git a/test/cases/optimize/many-exports-120/chunk1.js b/test/cases/optimize/many-exports-120/chunk1.js new file mode 100644 index 00000000000..84fe5928e35 --- /dev/null +++ b/test/cases/optimize/many-exports-120/chunk1.js @@ -0,0 +1,125 @@ +import { + x00, + x01, + x02, + x03, + x04, + x05, + x06, + x07, + x08, + x09, + x10, + x11, + x12, + x13, + x14, + x15, + x16, + x17, + x18, + x19, + x20, + x21, + x22, + x23, + x24, + x25, + x26, + x27, + x28, + x29, + x30, + x31, + x32, + x33, + x34, + x35, + x36, + x37, + x38, + x39, + x40, + x41, + x42, + x43, + x44, + x45, + x46, + x47, + x48, + x49, + x50, + x51, + x52, + x53, + x54, + x55, + x56, + x57, + x58, + x59 +} from "./module"; + +export default () => { + expect(x00).toBe("x00"); + expect(x01).toBe("x01"); + expect(x02).toBe("x02"); + expect(x03).toBe("x03"); + expect(x04).toBe("x04"); + expect(x05).toBe("x05"); + expect(x06).toBe("x06"); + expect(x07).toBe("x07"); + expect(x08).toBe("x08"); + expect(x09).toBe("x09"); + expect(x10).toBe("x10"); + expect(x11).toBe("x11"); + expect(x12).toBe("x12"); + expect(x13).toBe("x13"); + expect(x14).toBe("x14"); + expect(x15).toBe("x15"); + expect(x16).toBe("x16"); + expect(x17).toBe("x17"); + expect(x18).toBe("x18"); + expect(x19).toBe("x19"); + expect(x20).toBe("x20"); + expect(x21).toBe("x21"); + expect(x22).toBe("x22"); + expect(x23).toBe("x23"); + expect(x24).toBe("x24"); + expect(x25).toBe("x25"); + expect(x26).toBe("x26"); + expect(x27).toBe("x27"); + expect(x28).toBe("x28"); + expect(x29).toBe("x29"); + expect(x30).toBe("x30"); + expect(x31).toBe("x31"); + expect(x32).toBe("x32"); + expect(x33).toBe("x33"); + expect(x34).toBe("x34"); + expect(x35).toBe("x35"); + expect(x36).toBe("x36"); + expect(x37).toBe("x37"); + expect(x38).toBe("x38"); + expect(x39).toBe("x39"); + expect(x40).toBe("x40"); + expect(x41).toBe("x41"); + expect(x42).toBe("x42"); + expect(x43).toBe("x43"); + expect(x44).toBe("x44"); + expect(x45).toBe("x45"); + expect(x46).toBe("x46"); + expect(x47).toBe("x47"); + expect(x48).toBe("x48"); + expect(x49).toBe("x49"); + expect(x50).toBe("x50"); + expect(x51).toBe("x51"); + expect(x52).toBe("x52"); + expect(x53).toBe("x53"); + expect(x54).toBe("x54"); + expect(x55).toBe("x55"); + expect(x56).toBe("x56"); + expect(x57).toBe("x57"); + expect(x58).toBe("x58"); + expect(x59).toBe("x59"); +}; diff --git a/test/cases/optimize/many-exports-120/chunk2.js b/test/cases/optimize/many-exports-120/chunk2.js new file mode 100644 index 00000000000..f8301fd775e --- /dev/null +++ b/test/cases/optimize/many-exports-120/chunk2.js @@ -0,0 +1,125 @@ +import { + y00, + y01, + y02, + y03, + y04, + y05, + y06, + y07, + y08, + y09, + y10, + y11, + y12, + y13, + y14, + y15, + y16, + y17, + y18, + y19, + y20, + y21, + y22, + y23, + y24, + y25, + y26, + y27, + y28, + y29, + y30, + y31, + y32, + y33, + y34, + y35, + y36, + y37, + y38, + y39, + y40, + y41, + y42, + y43, + y44, + y45, + y46, + y47, + y48, + y49, + y50, + y51, + y52, + y53, + y54, + y55, + y56, + y57, + y58, + y59 +} from "./module"; + +export default () => { + expect(y00).toBe("y00"); + expect(y01).toBe("y01"); + expect(y02).toBe("y02"); + expect(y03).toBe("y03"); + expect(y04).toBe("y04"); + expect(y05).toBe("y05"); + expect(y06).toBe("y06"); + expect(y07).toBe("y07"); + expect(y08).toBe("y08"); + expect(y09).toBe("y09"); + expect(y10).toBe("y10"); + expect(y11).toBe("y11"); + expect(y12).toBe("y12"); + expect(y13).toBe("y13"); + expect(y14).toBe("y14"); + expect(y15).toBe("y15"); + expect(y16).toBe("y16"); + expect(y17).toBe("y17"); + expect(y18).toBe("y18"); + expect(y19).toBe("y19"); + expect(y20).toBe("y20"); + expect(y21).toBe("y21"); + expect(y22).toBe("y22"); + expect(y23).toBe("y23"); + expect(y24).toBe("y24"); + expect(y25).toBe("y25"); + expect(y26).toBe("y26"); + expect(y27).toBe("y27"); + expect(y28).toBe("y28"); + expect(y29).toBe("y29"); + expect(y30).toBe("y30"); + expect(y31).toBe("y31"); + expect(y32).toBe("y32"); + expect(y33).toBe("y33"); + expect(y34).toBe("y34"); + expect(y35).toBe("y35"); + expect(y36).toBe("y36"); + expect(y37).toBe("y37"); + expect(y38).toBe("y38"); + expect(y39).toBe("y39"); + expect(y40).toBe("y40"); + expect(y41).toBe("y41"); + expect(y42).toBe("y42"); + expect(y43).toBe("y43"); + expect(y44).toBe("y44"); + expect(y45).toBe("y45"); + expect(y46).toBe("y46"); + expect(y47).toBe("y47"); + expect(y48).toBe("y48"); + expect(y49).toBe("y49"); + expect(y50).toBe("y50"); + expect(y51).toBe("y51"); + expect(y52).toBe("y52"); + expect(y53).toBe("y53"); + expect(y54).toBe("y54"); + expect(y55).toBe("y55"); + expect(y56).toBe("y56"); + expect(y57).toBe("y57"); + expect(y58).toBe("y58"); + expect(y59).toBe("y59"); +}; diff --git a/test/cases/optimize/many-exports-120/index.js b/test/cases/optimize/many-exports-120/index.js new file mode 100644 index 00000000000..3e6aeb415b4 --- /dev/null +++ b/test/cases/optimize/many-exports-120/index.js @@ -0,0 +1,10 @@ +it("should mangle all exports correctly x", () => { + return import("./chunk1").then(({ default: test }) => { + test(); + }); +}); +it("should mangle all exports correctly y", () => { + return import("./chunk2").then(({ default: test }) => { + test(); + }); +}); diff --git a/test/cases/optimize/many-exports-120/module.js b/test/cases/optimize/many-exports-120/module.js new file mode 100644 index 00000000000..0005a20e660 --- /dev/null +++ b/test/cases/optimize/many-exports-120/module.js @@ -0,0 +1,121 @@ +export const x00 = "x00"; +export const x01 = "x01"; +export const x02 = "x02"; +export const x03 = "x03"; +export const x04 = "x04"; +export const x05 = "x05"; +export const x06 = "x06"; +export const x07 = "x07"; +export const x08 = "x08"; +export const x09 = "x09"; +export const x10 = "x10"; +export const x11 = "x11"; +export const x12 = "x12"; +export const x13 = "x13"; +export const x14 = "x14"; +export const x15 = "x15"; +export const x16 = "x16"; +export const x17 = "x17"; +export const x18 = "x18"; +export const x19 = "x19"; +export const x20 = "x20"; +export const x21 = "x21"; +export const x22 = "x22"; +export const x23 = "x23"; +export const x24 = "x24"; +export const x25 = "x25"; +export const x26 = "x26"; +export const x27 = "x27"; +export const x28 = "x28"; +export const x29 = "x29"; +export const x30 = "x30"; +export const x31 = "x31"; +export const x32 = "x32"; +export const x33 = "x33"; +export const x34 = "x34"; +export const x35 = "x35"; +export const x36 = "x36"; +export const x37 = "x37"; +export const x38 = "x38"; +export const x39 = "x39"; +export const x40 = "x40"; +export const x41 = "x41"; +export const x42 = "x42"; +export const x43 = "x43"; +export const x44 = "x44"; +export const x45 = "x45"; +export const x46 = "x46"; +export const x47 = "x47"; +export const x48 = "x48"; +export const x49 = "x49"; +export const x50 = "x50"; +export const x51 = "x51"; +export const x52 = "x52"; +export const x53 = "x53"; +export const x54 = "x54"; +export const x55 = "x55"; +export const x56 = "x56"; +export const x57 = "x57"; +export const x58 = "x58"; +export const x59 = "x59"; + +export const y00 = "y00"; +export const y01 = "y01"; +export const y02 = "y02"; +export const y03 = "y03"; +export const y04 = "y04"; +export const y05 = "y05"; +export const y06 = "y06"; +export const y07 = "y07"; +export const y08 = "y08"; +export const y09 = "y09"; +export const y10 = "y10"; +export const y11 = "y11"; +export const y12 = "y12"; +export const y13 = "y13"; +export const y14 = "y14"; +export const y15 = "y15"; +export const y16 = "y16"; +export const y17 = "y17"; +export const y18 = "y18"; +export const y19 = "y19"; +export const y20 = "y20"; +export const y21 = "y21"; +export const y22 = "y22"; +export const y23 = "y23"; +export const y24 = "y24"; +export const y25 = "y25"; +export const y26 = "y26"; +export const y27 = "y27"; +export const y28 = "y28"; +export const y29 = "y29"; +export const y30 = "y30"; +export const y31 = "y31"; +export const y32 = "y32"; +export const y33 = "y33"; +export const y34 = "y34"; +export const y35 = "y35"; +export const y36 = "y36"; +export const y37 = "y37"; +export const y38 = "y38"; +export const y39 = "y39"; +export const y40 = "y40"; +export const y41 = "y41"; +export const y42 = "y42"; +export const y43 = "y43"; +export const y44 = "y44"; +export const y45 = "y45"; +export const y46 = "y46"; +export const y47 = "y47"; +export const y48 = "y48"; +export const y49 = "y49"; +export const y50 = "y50"; +export const y51 = "y51"; +export const y52 = "y52"; +export const y53 = "y53"; +export const y54 = "y54"; +export const y55 = "y55"; +export const y56 = "y56"; +export const y57 = "y57"; +export const y58 = "y58"; +export const y59 = "y59"; diff --git a/test/cases/optimize/many-exports-40/chunk1.js b/test/cases/optimize/many-exports-40/chunk1.js new file mode 100644 index 00000000000..47e6e97e8ea --- /dev/null +++ b/test/cases/optimize/many-exports-40/chunk1.js @@ -0,0 +1,45 @@ +import { + x00, + x01, + x02, + x03, + x04, + x05, + x06, + x07, + x08, + x09, + x10, + x11, + x12, + x13, + x14, + x15, + x16, + x17, + x18, + x19 +} from "./module"; + +export default () => { + expect(x00).toBe("x00"); + expect(x01).toBe("x01"); + expect(x02).toBe("x02"); + expect(x03).toBe("x03"); + expect(x04).toBe("x04"); + expect(x05).toBe("x05"); + expect(x06).toBe("x06"); + expect(x07).toBe("x07"); + expect(x08).toBe("x08"); + expect(x09).toBe("x09"); + expect(x10).toBe("x10"); + expect(x11).toBe("x11"); + expect(x12).toBe("x12"); + expect(x13).toBe("x13"); + expect(x14).toBe("x14"); + expect(x15).toBe("x15"); + expect(x16).toBe("x16"); + expect(x17).toBe("x17"); + expect(x18).toBe("x18"); + expect(x19).toBe("x19"); +}; diff --git a/test/cases/optimize/many-exports-40/chunk2.js b/test/cases/optimize/many-exports-40/chunk2.js new file mode 100644 index 00000000000..e3d42307947 --- /dev/null +++ b/test/cases/optimize/many-exports-40/chunk2.js @@ -0,0 +1,45 @@ +import { + y00, + y01, + y02, + y03, + y04, + y05, + y06, + y07, + y08, + y09, + y10, + y11, + y12, + y13, + y14, + y15, + y16, + y17, + y18, + y19 +} from "./module"; + +export default () => { + expect(y00).toBe("y00"); + expect(y01).toBe("y01"); + expect(y02).toBe("y02"); + expect(y03).toBe("y03"); + expect(y04).toBe("y04"); + expect(y05).toBe("y05"); + expect(y06).toBe("y06"); + expect(y07).toBe("y07"); + expect(y08).toBe("y08"); + expect(y09).toBe("y09"); + expect(y10).toBe("y10"); + expect(y11).toBe("y11"); + expect(y12).toBe("y12"); + expect(y13).toBe("y13"); + expect(y14).toBe("y14"); + expect(y15).toBe("y15"); + expect(y16).toBe("y16"); + expect(y17).toBe("y17"); + expect(y18).toBe("y18"); + expect(y19).toBe("y19"); +}; diff --git a/test/cases/optimize/many-exports-40/index.js b/test/cases/optimize/many-exports-40/index.js new file mode 100644 index 00000000000..3e6aeb415b4 --- /dev/null +++ b/test/cases/optimize/many-exports-40/index.js @@ -0,0 +1,10 @@ +it("should mangle all exports correctly x", () => { + return import("./chunk1").then(({ default: test }) => { + test(); + }); +}); +it("should mangle all exports correctly y", () => { + return import("./chunk2").then(({ default: test }) => { + test(); + }); +}); diff --git a/test/cases/optimize/many-exports-40/module.js b/test/cases/optimize/many-exports-40/module.js new file mode 100644 index 00000000000..f5b86adb15f --- /dev/null +++ b/test/cases/optimize/many-exports-40/module.js @@ -0,0 +1,41 @@ +export const x00 = "x00"; +export const x01 = "x01"; +export const x02 = "x02"; +export const x03 = "x03"; +export const x04 = "x04"; +export const x05 = "x05"; +export const x06 = "x06"; +export const x07 = "x07"; +export const x08 = "x08"; +export const x09 = "x09"; +export const x10 = "x10"; +export const x11 = "x11"; +export const x12 = "x12"; +export const x13 = "x13"; +export const x14 = "x14"; +export const x15 = "x15"; +export const x16 = "x16"; +export const x17 = "x17"; +export const x18 = "x18"; +export const x19 = "x19"; + +export const y00 = "y00"; +export const y01 = "y01"; +export const y02 = "y02"; +export const y03 = "y03"; +export const y04 = "y04"; +export const y05 = "y05"; +export const y06 = "y06"; +export const y07 = "y07"; +export const y08 = "y08"; +export const y09 = "y09"; +export const y10 = "y10"; +export const y11 = "y11"; +export const y12 = "y12"; +export const y13 = "y13"; +export const y14 = "y14"; +export const y15 = "y15"; +export const y16 = "y16"; +export const y17 = "y17"; +export const y18 = "y18"; +export const y19 = "y19"; diff --git a/test/cases/optimize/side-effects-all-chain-unused/test.filter.js b/test/cases/optimize/side-effects-all-chain-unused/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-all-chain-unused/test.filter.js +++ b/test/cases/optimize/side-effects-all-chain-unused/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/side-effects-all-used/test.filter.js b/test/cases/optimize/side-effects-all-used/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-all-used/test.filter.js +++ b/test/cases/optimize/side-effects-all-used/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/side-effects-immediate-unused/test.filter.js b/test/cases/optimize/side-effects-immediate-unused/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-immediate-unused/test.filter.js +++ b/test/cases/optimize/side-effects-immediate-unused/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/side-effects-reexport-start-unknown/index.js b/test/cases/optimize/side-effects-reexport-start-unknown/index.js index 4c1a54309e3..2bdff81530b 100644 --- a/test/cases/optimize/side-effects-reexport-start-unknown/index.js +++ b/test/cases/optimize/side-effects-reexport-start-unknown/index.js @@ -2,5 +2,5 @@ import * as m from "m"; it("should handle unknown exports fine", function() { var x = m; - expect(x).toEqual({ foo: "foo", [Symbol.toStringTag]: "Module" }); + expect(x).toEqual(nsObj({ foo: "foo" })); }); diff --git a/test/cases/optimize/side-effects-reexport-start-unknown/test.filter.js b/test/cases/optimize/side-effects-reexport-start-unknown/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-reexport-start-unknown/test.filter.js +++ b/test/cases/optimize/side-effects-reexport-start-unknown/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/side-effects-root-unused/test.filter.js b/test/cases/optimize/side-effects-root-unused/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-root-unused/test.filter.js +++ b/test/cases/optimize/side-effects-root-unused/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/side-effects-simple-unused/test.filter.js b/test/cases/optimize/side-effects-simple-unused/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-simple-unused/test.filter.js +++ b/test/cases/optimize/side-effects-simple-unused/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/side-effects-transitive-unused/test.filter.js b/test/cases/optimize/side-effects-transitive-unused/test.filter.js index 9022ab6415f..f6354eef95e 100644 --- a/test/cases/optimize/side-effects-transitive-unused/test.filter.js +++ b/test/cases/optimize/side-effects-transitive-unused/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return config.mode !== "development"; -}; +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/optimize/tree-shaking-star2/index.js b/test/cases/optimize/tree-shaking-star2/index.js index 676392638a8..0d1e070818d 100644 --- a/test/cases/optimize/tree-shaking-star2/index.js +++ b/test/cases/optimize/tree-shaking-star2/index.js @@ -6,9 +6,8 @@ it("should correctly tree shake star exports", function() { expect(aa).toBe("aa"); expect(aa2).toBe("aa"); expect(d).toBe("d"); - expect(root6).toEqual({ + expect(root6).toEqual(nsObj({ aa: "aa", - c: "c", - [Symbol.toStringTag]: "Module" - }); + c: "c" + })); }); diff --git a/test/cases/parsing/api/id.js b/test/cases/parsing/api/id.js new file mode 100644 index 00000000000..853bd9aaad1 --- /dev/null +++ b/test/cases/parsing/api/id.js @@ -0,0 +1 @@ +export default __webpack_module__.id; diff --git a/test/cases/parsing/api/index.js b/test/cases/parsing/api/index.js new file mode 100644 index 00000000000..c8e0d9150fb --- /dev/null +++ b/test/cases/parsing/api/index.js @@ -0,0 +1,18 @@ +import id from "./id"; +import mod from "./module"; +import modType from "./typeof-module"; + +it("should support __webpack_module__.id", () => { + expect(typeof id).toMatch(/^(string|number)$/); + expect(id).not.toBe(__webpack_module__.id); +}); + +it("should support __webpack_module__", () => { + expect(mod.exports).toBeTypeOf("object"); + expect(typeof mod.id).toMatch(/^(string|number)$/); + expect(mod).not.toBe(__webpack_module__); +}); + +it("should support typeof __webpack_module__", () => { + expect(modType).toBe("object"); +}); diff --git a/test/cases/parsing/api/module.js b/test/cases/parsing/api/module.js new file mode 100644 index 00000000000..61171d82a9d --- /dev/null +++ b/test/cases/parsing/api/module.js @@ -0,0 +1 @@ +export default __webpack_module__; diff --git a/test/cases/parsing/api/typeof-module.js b/test/cases/parsing/api/typeof-module.js new file mode 100644 index 00000000000..1adb27f3e79 --- /dev/null +++ b/test/cases/parsing/api/typeof-module.js @@ -0,0 +1 @@ +export default typeof __webpack_module__; diff --git a/test/cases/parsing/asi/a.js b/test/cases/parsing/asi/a.js new file mode 100644 index 00000000000..3966c08a955 --- /dev/null +++ b/test/cases/parsing/asi/a.js @@ -0,0 +1,11 @@ +export function a() {} + +let count = 0; + +export function callme() { + count++; +} + +export function getCount() { + return count; +} diff --git a/test/cases/parsing/asi/b.json b/test/cases/parsing/asi/b.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/cases/parsing/asi/b.json @@ -0,0 +1 @@ +{} diff --git a/test/cases/parsing/asi/index.js b/test/cases/parsing/asi/index.js new file mode 100644 index 00000000000..d1fab7e4954 --- /dev/null +++ b/test/cases/parsing/asi/index.js @@ -0,0 +1,48 @@ +import {a as b, callme, getCount} from "./a"; +import * as c from "./b"; + +function donotcallme() { + expect("asi unsafe call happened").toBe(false); +} + +it("should respect asi flag", () => { + (donotcallme) + import.meta; + (donotcallme) + b(); + (donotcallme) + c; + + var i = 0 + for (;i < 10;i++) callme() + var i = 0 + for (;i < 10;(function() { + i++ + })()) callme() + var i = 0 + for (;i < 2;i++) { + (donotcallme) + b(); + } + var i = 0 + if (i++) callme() + var i = 1 + if (i) + (donotcallme) + else + callme() + var i = 0 + while (i++ < 4) callme() + do (donotcallme) + while (i++ < 4) callme() + var i = 0 + while (i++ < 4) (function () { + var i = 4 + return callme() + })() + + ;(donotcallme) + require("./b.json").prop + + expect(getCount()).toBe(29) +}); diff --git a/test/cases/parsing/asi/warnings.js b/test/cases/parsing/asi/warnings.js new file mode 100644 index 00000000000..d939a31c3bf --- /dev/null +++ b/test/cases/parsing/asi/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = []; diff --git a/test/cases/parsing/block-scopes/index.js b/test/cases/parsing/block-scopes/index.js new file mode 100644 index 00000000000..127ea210e0f --- /dev/null +++ b/test/cases/parsing/block-scopes/index.js @@ -0,0 +1,85 @@ +import ok from "./module"; + +// This should not leak an "ok" declaration into this scope +export default (function ok() {}); + +it("should allow block scopes", () => { + expect(ok).toBe("ok"); + if (true) { + const ok = "no"; + expect(ok).toBe("no"); + } + expect(ok).toBe("ok"); + { + let ok = "no"; + expect(ok).toBe("no"); + } + expect(ok).toBe("ok"); + { + class ok {} + expect(new ok()).toBeInstanceOf(ok); + } + expect(ok).toBe("ok"); + for (let ok = "no", once = true; once; once = !once) { + expect(ok).toBe("no"); + } + expect(ok).toBe("ok"); + for (const ok of ["no"]) { + expect(ok).toBe("no"); + } + expect(ok).toBe("ok"); + for (const ok in { no: 1 }) { + expect(ok).toBe("no"); + } + expect(ok).toBe("ok"); + try { + throw "no"; + } catch (ok) { + expect(ok).toBe("no"); + } + expect(ok).toBe("ok"); + while (ok) { + expect(ok).toBe("ok"); + break; + } + do { + expect(ok).toBe("ok"); + break; + } while(ok); + expect(ok).toBe("ok"); +}); + +it("should allow function scopes in block scopes", () => { + let f; + { + f = () => { + expect(ok).toBe("no"); + }; + const ok = "no"; + } + f(); +}); + +it("should not block scope vars (for)", () => { + expect(ok).toBe(undefined); + for (var ok = "no", once = true; once; once = !once) { + expect(ok).toBe("no"); + } + expect(ok).toBe("no"); +}); + +it("should not block scope vars (for-of)", () => { + expect(ok).toBe(undefined); + for (var ok of ["no"]) { + expect(ok).toBe("no"); + } + expect(ok).toBe("no"); +}); + +it("should not block scope vars (for-in)", () => { + expect(ok).toBe(undefined); + for (var ok in { no: 1 }) { + expect(ok).toBe("no"); + } + expect(ok).toBe("no"); +}); diff --git a/test/cases/parsing/block-scopes/module.js b/test/cases/parsing/block-scopes/module.js new file mode 100644 index 00000000000..5c6b89abfc8 --- /dev/null +++ b/test/cases/parsing/block-scopes/module.js @@ -0,0 +1 @@ +export default "ok"; diff --git a/test/cases/parsing/bom/index.js b/test/cases/parsing/bom/index.js index f7d590e9d54..007b2dc22d8 100644 --- a/test/cases/parsing/bom/index.js +++ b/test/cases/parsing/bom/index.js @@ -1,14 +1,14 @@ -it("should load a utf-8 file with BOM", function() { +it("should load a utf-8 file with BOM", function () { var result = require("./bomfile"); expect(result).toEqual("ok"); }); -it("should load a css file with BOM", function() { - var css = require("!css-loader!./bomfile.css") + ""; - expect(css).toBe("body{color:#abc}"); +it("should load a css file with BOM", function () { + var css = require("!css-loader!./bomfile.css").default + ""; + expect(css.replace(/\n\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1')).toBe("body{color:#abc}"); }); -it("should load a json file with BOM", function() { +it("should load a json file with BOM", function () { var result = require("./bomfile.json"); expect(result.message).toEqual("ok"); }); diff --git a/test/cases/parsing/chunks/test.filter.js b/test/cases/parsing/chunks/test.filter.js index b4b5c42560c..e6814dfde4b 100644 --- a/test/cases/parsing/chunks/test.filter.js +++ b/test/cases/parsing/chunks/test.filter.js @@ -1,5 +1,5 @@ -var supportsES6 = require("../../../helpers/supportsES6"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsES6(); -}; +const supportsES6 = require("../../../helpers/supportsES6"); + +module.exports = () => supportsES6(); diff --git a/test/cases/parsing/class-properties/index.js b/test/cases/parsing/class-properties/index.js new file mode 100644 index 00000000000..e81488eac65 --- /dev/null +++ b/test/cases/parsing/class-properties/index.js @@ -0,0 +1,21 @@ +import { A, B } from "./module"; +import { A as A1, B as B1 } from "./module?1"; + +it("should not rename class properties", function () { + expect(A.staticProp).toBe("value"); + expect(B.staticProp).toBe("value"); + expect(A1.staticProp).toBe("value"); + expect(B1.staticProp).toBe("value"); + expect(A.value).toBe("value"); + expect(B.value).toBe("value"); + expect(A1.value).toBe("value"); + expect(B1.value).toBe("value"); + expect(new A().prop).toBe("value"); + expect(new B().prop).toBe("value"); + expect(new A1().prop).toBe("value"); + expect(new B1().prop).toBe("value"); + expect(new A().value).toBe("value"); + expect(new B().value).toBe("value"); + expect(new A1().value).toBe("value"); + expect(new B1().value).toBe("value"); +}); diff --git a/test/cases/parsing/class-properties/module.js b/test/cases/parsing/class-properties/module.js new file mode 100644 index 00000000000..8736c7ca191 --- /dev/null +++ b/test/cases/parsing/class-properties/module.js @@ -0,0 +1,21 @@ +import { + staticProp as importedStaticProp, + prop as importedProp +} from "./module"; + +export const staticProp = "value"; +export const prop = "value"; + +export class A { + static staticProp = staticProp; + static [staticProp] = staticProp; + prop = prop; + [prop] = prop; +} + +export class B { + static staticProp = importedStaticProp; + static [importedStaticProp] = importedStaticProp; + prop = importedProp; + [importedProp] = importedProp; +} diff --git a/test/cases/parsing/class-properties/test.filter.js b/test/cases/parsing/class-properties/test.filter.js new file mode 100644 index 00000000000..aa94ec7b474 --- /dev/null +++ b/test/cases/parsing/class-properties/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = () => supportsClassFields(); diff --git a/test/cases/parsing/class/test.filter.js b/test/cases/parsing/class/test.filter.js index b4b5c42560c..e6814dfde4b 100644 --- a/test/cases/parsing/class/test.filter.js +++ b/test/cases/parsing/class/test.filter.js @@ -1,5 +1,5 @@ -var supportsES6 = require("../../../helpers/supportsES6"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsES6(); -}; +const supportsES6 = require("../../../helpers/supportsES6"); + +module.exports = () => supportsES6(); diff --git a/test/cases/parsing/complex-require/test.filter.js b/test/cases/parsing/complex-require/test.filter.js index 3e4c5ba3e50..94ce548e857 100644 --- a/test/cases/parsing/complex-require/test.filter.js +++ b/test/cases/parsing/complex-require/test.filter.js @@ -1,5 +1,5 @@ -var supportsTemplateStrings = require("../../../helpers/supportsTemplateStrings"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsTemplateStrings(); -}; +const supportsTemplateStrings = require("../../../helpers/supportsTemplateStrings"); + +module.exports = () => supportsTemplateStrings(); diff --git a/test/cases/parsing/context/errors.js b/test/cases/parsing/context/errors.js new file mode 100644 index 00000000000..779f16992ad --- /dev/null +++ b/test/cases/parsing/context/errors.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = [ + [ + /Module parse failed/, + { moduleName: /dump-file\.txt/ }, + { moduleTrace: /templates\/ sync/ } + ] +]; diff --git a/test/cases/parsing/context/index.js b/test/cases/parsing/context/index.js index 59d7ff9669d..2f37e347cb8 100644 --- a/test/cases/parsing/context/index.js +++ b/test/cases/parsing/context/index.js @@ -5,7 +5,7 @@ it("should be able to load a file with the require.context method", function() { expect(require.context("./loaders/queryloader?dog=bark!./templates?cat=meow")("./tmpl")).toEqual({ resourceQuery: "?cat=meow", query: "?dog=bark", - prev: "module.exports = \"test template\";" + prev: 'module.exports = "test template";' }); expect(require . context ( "." + "/." + "/" + "templ" + "ates" ) ( "./subdir/tmpl.js" )).toBe("subdir test template"); expect(require.context("./templates", true, /./)("xyz")).toBe("xyz"); @@ -20,15 +20,15 @@ it("should automatically create contexts", function() { expect(require("./templates/t" + mp + "l")).toBe("test template"); }); -it("should be able to require.resolve with automatical context", function() { +it("should be able to require.resolve with automatic context", function() { var template = "tmpl"; - expect(require.resolve("./templates/" + template)).toBe(require.resolve("./templates/tmpl")); + expect(require.resolve("./templates/" + template)).toBe( + require.resolve("./templates/tmpl") + ); }); it("should be able to use renaming combined with a context", function() { var renamedRequire = require; - require = function () {}; - require("fail"); var template = "tmpl"; expect(renamedRequire("./templates/" + template)).toBe("test template"); }); @@ -37,15 +37,15 @@ it("should compile an empty context", function() { var x = "xxx"; expect(function() { require("./templates/notExisting" + x); - }).toThrowError(/xxx/); + }).toThrow(/xxx/); }); it("should execute an empty context", function() { var context; expect(function() { context = require.context("./templates/", true, /^\.\/notExisting/); - }).not.toThrowError(); + }).not.toThrow(); expect(function() { context(""); - }).toThrowError(); + }).toThrow(); }); diff --git a/test/cases/parsing/context/infrastructure-log.js b/test/cases/parsing/context/infrastructure-log.js new file mode 100644 index 00000000000..fe6c3fa6e94 --- /dev/null +++ b/test/cases/parsing/context/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules|.+dump-file\.txt/ +]; diff --git a/test/cases/parsing/context/loaders/queryloader.js b/test/cases/parsing/context/loaders/queryloader.js index 02707b2ba37..f9bb23e1f55 100644 --- a/test/cases/parsing/context/loaders/queryloader.js +++ b/test/cases/parsing/context/loaders/queryloader.js @@ -1,7 +1,11 @@ -module.exports = function(content) { - return "module.exports = " + JSON.stringify({ - resourceQuery: this.resourceQuery, - query: this.query, - prev: content - }); +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = function (content) { + return ( + "module.exports = " + + JSON.stringify({ + resourceQuery: this.resourceQuery, + query: this.query, + prev: content + }) + ); }; diff --git a/test/cases/parsing/context/templates/templateLoader.js b/test/cases/parsing/context/templates/templateLoader.js index e2b1e898947..e541d7ec4e4 100644 --- a/test/cases/parsing/context/templates/templateLoader.js +++ b/test/cases/parsing/context/templates/templateLoader.js @@ -1,3 +1,6 @@ +/** + * @param {string} name + */ module.exports = function(name) { return require(name); } \ No newline at end of file diff --git a/test/cases/parsing/context/templates/templateLoaderIndirect.js b/test/cases/parsing/context/templates/templateLoaderIndirect.js index 89035fe1744..c7753680c55 100644 --- a/test/cases/parsing/context/templates/templateLoaderIndirect.js +++ b/test/cases/parsing/context/templates/templateLoaderIndirect.js @@ -1,3 +1,6 @@ +/** + * @param {string} name + */ module.exports = function(name) { var a = load(require, name); var r = require; @@ -6,6 +9,10 @@ module.exports = function(name) { return a; } +/** + * @param {Function} requireFunction + * @param {string} name + */ function load(requireFunction, name) { return requireFunction(name); } \ No newline at end of file diff --git a/test/cases/parsing/context/warnings.js b/test/cases/parsing/context/warnings.js index 09e32b8657c..e1f4aff31fa 100644 --- a/test/cases/parsing/context/warnings.js +++ b/test/cases/parsing/context/warnings.js @@ -1,6 +1,7 @@ +"use strict"; + module.exports = [ - [/Module parse failed/, /dump-file\.txt/, /templates sync \^\\\.\\\/\.\*\$/], - [/Critical dependency/, /templateLoader\.js/], - [/Critical dependency/, /templateLoaderIndirect\.js/], - [/Critical dependency/, /templateLoaderIndirect\.js/], + [/Critical dependency/, { moduleName: /templateLoader\.js/ }], + [/Critical dependency/, { moduleName: /templateLoaderIndirect\.js/ }], + [/Critical dependency/, { moduleName: /templateLoaderIndirect\.js/ }] ]; diff --git a/test/cases/parsing/declared-api/index.js b/test/cases/parsing/declared-api/index.js new file mode 100644 index 00000000000..520779abbb0 --- /dev/null +++ b/test/cases/parsing/declared-api/index.js @@ -0,0 +1,3 @@ +it("should not replace declared variables", () => { + expect(require("./module")).toBe(42 + 42); +}); diff --git a/test/cases/parsing/declared-api/module.js b/test/cases/parsing/declared-api/module.js new file mode 100644 index 00000000000..8cbf2f878fc --- /dev/null +++ b/test/cases/parsing/declared-api/module.js @@ -0,0 +1,11 @@ +define("local", () => { + var __webpack_modules__ = 42; + + return __webpack_modules__; +}); + +define(["local"], l => { + var __webpack_modules__ = 42 + l; + + return __webpack_modules__; +}); diff --git a/test/cases/parsing/es2020/index.js b/test/cases/parsing/es2020/index.js new file mode 100644 index 00000000000..50e196c8d76 --- /dev/null +++ b/test/cases/parsing/es2020/index.js @@ -0,0 +1,38 @@ +import { a } from "./module"; + +class Class { + #field = this instanceof Class ? a : false; + field = this instanceof Class ? a : false; + #method = () => (this instanceof Class ? a : false); + method = () => (this instanceof Class ? a : false); + [`key${!this ? a : false}`] = this instanceof Class ? a : false; + + static CLASS = true; + + static #sfield = this.CLASS ? a : false; + static sfield = this.CLASS ? a : false; + static #smethod = () => (this.CLASS ? a : false); + static smethod = () => (this.CLASS ? a : false); + static [`skey${!this ? a : false}`] = this.CLASS ? a : false; + + test() { + expect(this.#field).toBe(42); + expect(this.field).toBe(42); + expect(this.#method()).toBe(42); + expect(this.method()).toBe(42); + expect(this.key42).toBe(42); + } + + static stest() { + expect(Class.#sfield).toBe(42); + expect(Class.sfield).toBe(42); + expect(Class.#smethod()).toBe(42); + expect(Class.smethod()).toBe(42); + expect(Class.skey42).toBe(42); + } +} + +it("should support class fields", () => { + Class.stest(); + new Class().test(); +}); diff --git a/test/cases/parsing/es2020/module.js b/test/cases/parsing/es2020/module.js new file mode 100644 index 00000000000..71becd3a350 --- /dev/null +++ b/test/cases/parsing/es2020/module.js @@ -0,0 +1 @@ +export const a = 42; diff --git a/test/cases/parsing/es2020/test.filter.js b/test/cases/parsing/es2020/test.filter.js new file mode 100644 index 00000000000..aa94ec7b474 --- /dev/null +++ b/test/cases/parsing/es2020/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = () => supportsClassFields(); diff --git a/test/cases/parsing/es2022/counter.js b/test/cases/parsing/es2022/counter.js new file mode 100644 index 00000000000..0381a299e8d --- /dev/null +++ b/test/cases/parsing/es2022/counter.js @@ -0,0 +1,5 @@ +let value = 0; +let value2 = 5; +const add = () => value++; + +export { value, add, value2 as "test name" } diff --git a/test/cases/parsing/es2022/es2022.js b/test/cases/parsing/es2022/es2022.js new file mode 100644 index 00000000000..321a10e4bd3 --- /dev/null +++ b/test/cases/parsing/es2022/es2022.js @@ -0,0 +1,24 @@ +import { "\0 add" as add, "string name" as variable } from './reexport'; + +export default class Foo { + static { + new Foo(add); + } + + constructor(fn) { + this.#foo = fn; + this.#add(); + } + + #foo = undefined; + + #add() { + if (#foo in this && this.#foo) { + this.#foo(); + } + } + + static getVar() { + return variable; + } +} diff --git a/test/cases/parsing/es2022/in.js b/test/cases/parsing/es2022/in.js new file mode 100644 index 00000000000..4108243480b --- /dev/null +++ b/test/cases/parsing/es2022/in.js @@ -0,0 +1,11 @@ +export default class C { + #x; + constructor(x) { + this.#x = x; + } + static getX(obj) { + if (#x in obj) return obj.#x; + + return "obj must be an instance of C"; + } +} diff --git a/test/cases/parsing/es2022/index.js b/test/cases/parsing/es2022/index.js new file mode 100644 index 00000000000..be903b868ef --- /dev/null +++ b/test/cases/parsing/es2022/index.js @@ -0,0 +1,13 @@ +import { value, add } from "./counter"; +import Foo from "./es2022"; +import C from "./in"; +import { "string name" as alias } from "./name"; + +it("should compile and run", () => { + new Foo(add); + expect(value).toBe(2); + const c = new C(1); + expect(C.getX(c)).toBe(1) + expect(alias).toBe("test") + expect(Foo.getVar()).toBe(5) +}); diff --git a/test/cases/parsing/es2022/name.js b/test/cases/parsing/es2022/name.js new file mode 100644 index 00000000000..7c61a5c6d55 --- /dev/null +++ b/test/cases/parsing/es2022/name.js @@ -0,0 +1,3 @@ +const variable1 = "test"; + +export { variable1 as "string name" }; diff --git a/test/cases/parsing/es2022/reexport.js b/test/cases/parsing/es2022/reexport.js new file mode 100644 index 00000000000..422e14c617a --- /dev/null +++ b/test/cases/parsing/es2022/reexport.js @@ -0,0 +1 @@ +export { add as "\0 add", "test name" as "string name" } from "./counter"; diff --git a/test/cases/parsing/es2022/test.filter.js b/test/cases/parsing/es2022/test.filter.js new file mode 100644 index 00000000000..1f02b2ab28d --- /dev/null +++ b/test/cases/parsing/es2022/test.filter.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = function (config) { + try { + eval("class A { static {} }"); + return true; + } catch { + return false; + } +}; diff --git a/test/cases/parsing/es6.nominimize/index.js b/test/cases/parsing/es6.nominimize/index.js index 70031b4cad6..8fc415c51e0 100644 --- a/test/cases/parsing/es6.nominimize/index.js +++ b/test/cases/parsing/es6.nominimize/index.js @@ -2,7 +2,7 @@ import a from "./a"; -it("should parse classes", function() { +it("should parse classes", function () { class MyClass { constructor() { this.a = require("./a"); @@ -24,30 +24,32 @@ it("should parse classes", function() { expect(x.c()).toBe("c"); }); -it("should parse spread operator"/*, function() { +it("should parse spread operator", function () { expect([0, ...require("./array")]).toEqual([0, 1, 2, 3]); - expect(({z: 0, ...require("./object")})).toEqual({z: 0, a: 1, b: 2, c: 3}); -}*/); + expect({ z: 0, ...require("./object") }).toEqual({ z: 0, a: 1, b: 2, c: 3 }); +}); -it("should parse arrow function", function() { +it("should parse arrow function", function () { expect((() => require("./a"))()).toBe("a"); - expect((() => { - return require("./a"); - })()).toBe("a"); + expect( + (() => { + return require("./a"); + })() + ).toBe("a"); require.ensure([], () => { require("./a"); }); require.ensure([], () => { require("./async"); }); - if(module.hot) { + if (module.hot) { module.hot.accept("./a", () => { var x = 1; }); } }); -it("should parse template literals", function() { +it("should parse template literals", function () { function tag(strings, value) { return value; } @@ -55,9 +57,9 @@ it("should parse template literals", function() { var y = tag`a${require("./b")}c`; expect(x).toBe("abc"); expect(y).toBe("b"); -}) +}); -it("should parse generators and yield", function() { +it("should parse generators and yield", function () { function* gen() { yield require("./a"); yield require("./b"); @@ -66,4 +68,4 @@ it("should parse generators and yield", function() { expect(x.next().value).toBe("a"); expect(x.next().value).toBe("b"); expect(x.next().done).toBe(true); -}) +}); diff --git a/test/cases/parsing/es6.nominimize/test.filter.js b/test/cases/parsing/es6.nominimize/test.filter.js index b4b5c42560c..5de30080464 100644 --- a/test/cases/parsing/es6.nominimize/test.filter.js +++ b/test/cases/parsing/es6.nominimize/test.filter.js @@ -1,5 +1,7 @@ +"use strict"; + var supportsES6 = require("../../../helpers/supportsES6"); -module.exports = function(config) { - return !config.minimize && supportsES6(); +module.exports = function (config) { + return supportsES6(); }; diff --git a/test/cases/parsing/evaluate-nullish/index.js b/test/cases/parsing/evaluate-nullish/index.js new file mode 100644 index 00000000000..128a96c8e52 --- /dev/null +++ b/test/cases/parsing/evaluate-nullish/index.js @@ -0,0 +1,12 @@ +function a() {} + +it("should evaluate nullish coalescing", function () { + expect("" ?? require("fail")).toBe(""); + expect(String.raw`aaaa` ?? require("fail")).toBe("aaaa"); + expect(a`aaaa` ?? "expected").toBe("expected"); + expect(null ?? "expected").toBe("expected"); + expect(("" ?? require("fail")) && true).toBe(""); + let x = 0; + expect(((x = 1), null) ?? true).toBe(true); + expect(x).toBe(1); +}); diff --git a/test/cases/parsing/evaluate-nullish/test.filter.js b/test/cases/parsing/evaluate-nullish/test.filter.js new file mode 100644 index 00000000000..31fd9b925b1 --- /dev/null +++ b/test/cases/parsing/evaluate-nullish/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNullishCoalescing = require("../../../helpers/supportsNullishCoalescing"); + +module.exports = () => supportsNullishCoalescing(); diff --git a/test/cases/parsing/evaluate/index.js b/test/cases/parsing/evaluate/index.js index e2762e5c59e..e29a31fb622 100644 --- a/test/cases/parsing/evaluate/index.js +++ b/test/cases/parsing/evaluate/index.js @@ -1,22 +1,101 @@ -it("should evaluate null", function() { - var y = null ? require("fail") : require("./a"); - if(null) +it("should evaluate null", function () { + const y = null ? require("fail") : require("./a"); + if (null) require("fail"); +}); + +it("should evaluate undefined", function () { + const y = undefined ? require("fail") : require("./a"); + if (undefined) require("fail"); + undefined && require("fail"); +}); + +it("should evaluate logical expression", function () { + const value1 = "hello" || require("fail"); + const value2 = typeof require === "function" || require("fail"); + const value3 = "" && require("fail"); + const value4 = typeof require !== "function" && require("fail"); + const value5 = "hello" && (() => "value5")(); + const value6 = "" || (() => "value6")(); + const value7 = (function () { return'value7'===typeof 'value7'&&'value7'})(); + const value8 = [] != [] || require("fail"); + const value9 = null === 1 && require("fail"); + const value91 = [] === [] && require("fail"); + const value92 = /a/ === /a/ && require("fail"); + const value93 = + `hello${Math.random()}` === `world${Math.random()}` && require("fail"); + const value94 = + `${Math.random()}hello` != `${Math.random()}world` || require("fail"); + let value95 = 1; + const value96 = `${value95++}hello` != `${value95++}world` || require("fail"); + + if (`${value95++}hello` === `${value95++}world`) { require("fail"); + } + + expect(value1).toBe("hello"); + expect(value2).toBe(true); + expect(value3).toBe(""); + expect(value4).toBe(false); + expect(value5).toBe("value5"); + expect(value6).toBe("value6"); + expect(value7).toBe(false); + expect(value8).toBe(true); + expect(value9).toBe(false); + expect(value91).toBe(false); + expect(value92).toBe(false); + expect(value93).toBe(false); + expect(value94).toBe(true); + expect(value95).toBe(5); + expect(value96).toBe(true); }); -if("shouldn't evaluate expression", function() { - var value = ""; - var x = (value + "") ? "fail" : "ok"; +it("shouldn't evaluate expression", function () { + const value = ""; + const x = value + "" ? "fail" : "ok"; expect(x).toBe("ok"); }); -it("should short-circuit evaluating", function() { - var expr; - var a = false && expr ? require("fail") : require("./a"); - var b = true || expr ? require("./a") : require("fail"); +it("should short-circuit evaluating", function () { + let expr; + const a = false && expr ? require("fail") : require("./a"); + const b = true || expr ? require("./a") : require("fail"); }); -it("should evaluate __dirname and __resourceQuery with replace and substr", function() { - var result = require("./resourceQuery/index?" + __dirname); +it("should evaluate __dirname and __resourceQuery with replace and substr", function () { + const result = require("./resourceQuery/index?" + __dirname); expect(result).toEqual("?resourceQuery"); }); + +it("should evaluate __dirname and __resourceFragment with replace and substr", function () { + const result = require("./resourceFragment/index#" + __dirname); + expect(result).toEqual("#resourceFragment"); +}); + +it("should allow resourceFragment in context", function () { + const fn = x => require(`./resourceFragment/${x}#..`); + expect(fn("index")).toEqual("#resourceFragment"); + expect(fn("returnRF")).toBe("#.."); +}); + +it("should try to evaluate new RegExp()", function () { + function expectAOnly (r) { + r.keys().forEach(key => { + expect(r(key)).toBe(1); + }); + } + + expectAOnly( + require.context("./regexp", false, new RegExp("(? { + const RegExp = function() { return /other/; }; + expect(require("./regexp/" + ("a".replace(new RegExp("a"), "wrong")))).toBe(1); +}); diff --git a/test/cases/parsing/evaluate/regexp/a.filtered.js b/test/cases/parsing/evaluate/regexp/a.filtered.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/cases/parsing/evaluate/regexp/a.filtered.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/cases/parsing/evaluate/regexp/a.js b/test/cases/parsing/evaluate/regexp/a.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/cases/parsing/evaluate/regexp/a.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/cases/parsing/evaluate/resourceFragment/index.js b/test/cases/parsing/evaluate/resourceFragment/index.js new file mode 100644 index 00000000000..cf443cdc4e6 --- /dev/null +++ b/test/cases/parsing/evaluate/resourceFragment/index.js @@ -0,0 +1,3 @@ +module.exports = require(( + __resourceFragment.slice(1) + "/resourceFragment/returnRF#XXXFragment" +).replace(/XXX/g, "resource")); diff --git a/test/cases/parsing/evaluate/resourceFragment/returnRF.js b/test/cases/parsing/evaluate/resourceFragment/returnRF.js new file mode 100644 index 00000000000..db1d8aa62e7 --- /dev/null +++ b/test/cases/parsing/evaluate/resourceFragment/returnRF.js @@ -0,0 +1 @@ +module.exports = __resourceFragment; diff --git a/test/cases/parsing/evaluate/resourceQuery/index.js b/test/cases/parsing/evaluate/resourceQuery/index.js index 21596f97369..173f9da8dfd 100644 --- a/test/cases/parsing/evaluate/resourceQuery/index.js +++ b/test/cases/parsing/evaluate/resourceQuery/index.js @@ -1 +1 @@ -module.exports = require((__resourceQuery.substr(1) + "/resourceQuery/returnRQ?XXXQuery").replace(/XXX/g, "resource")); \ No newline at end of file +module.exports = require((__resourceQuery.slice(1) + "/resourceQuery/returnRQ?XXXQuery").replace(/XXX/g, "resource")); diff --git a/test/cases/parsing/extract-amd.nominimize/index.js b/test/cases/parsing/extract-amd.nominimize/index.js index a79383e0026..3bfc3fa2749 100644 --- a/test/cases/parsing/extract-amd.nominimize/index.js +++ b/test/cases/parsing/extract-amd.nominimize/index.js @@ -17,7 +17,7 @@ it("should parse fancy function calls with arrow functions", function() { it("should parse fancy AMD calls with arrow functions", function() { require("./constructor ./a".split(" ")); - require("-> module module exports *constructor *a".replace("module", "require").substr(3).replace(/\*/g, "./").split(" "), (require, module, exports, constructor, a) => { + require("-> module module exports *constructor *a".replace("module", "require").slice(3).replace(/\*/g, "./").split(" "), (require, module, exports, constructor, a) => { expect((typeof require)).toBe("function"); expect((typeof module)).toBe("object"); expect((typeof exports)).toBe("object"); @@ -25,7 +25,7 @@ it("should parse fancy AMD calls with arrow functions", function() { expect((typeof constructor)).toBe("function"); expect(a).toBe("a"); }); - define("-> module module exports *constructor *a".replace("module", "require").substr(3).replace(/\*/g, "./").split(" "), (require, module, exports, constructor, a) => { + define("-> module module exports *constructor *a".replace("module", "require").slice(3).replace(/\*/g, "./").split(" "), (require, module, exports, constructor, a) => { expect((typeof require)).toBe("function"); expect((typeof module)).toBe("object"); expect((typeof exports)).toBe("object"); diff --git a/test/cases/parsing/extract-amd.nominimize/test.filter.js b/test/cases/parsing/extract-amd.nominimize/test.filter.js index b4b5c42560c..5de30080464 100644 --- a/test/cases/parsing/extract-amd.nominimize/test.filter.js +++ b/test/cases/parsing/extract-amd.nominimize/test.filter.js @@ -1,5 +1,7 @@ +"use strict"; + var supportsES6 = require("../../../helpers/supportsES6"); -module.exports = function(config) { - return !config.minimize && supportsES6(); +module.exports = function (config) { + return supportsES6(); }; diff --git a/test/cases/parsing/extract-amd.nominimize/warnings.js b/test/cases/parsing/extract-amd.nominimize/warnings.js index f50952cb6c2..b67ffb5ff18 100644 --- a/test/cases/parsing/extract-amd.nominimize/warnings.js +++ b/test/cases/parsing/extract-amd.nominimize/warnings.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = [ - [/Module not found/, /Can't resolve '\.\/b' /, /b\.js/] + [/Module not found/, /Can't resolve '\.\/b' /, {details: /b\.js/}] ]; diff --git a/test/cases/parsing/extract-amd/index.js b/test/cases/parsing/extract-amd/index.js index 13cc0d3f047..39822b5b9eb 100644 --- a/test/cases/parsing/extract-amd/index.js +++ b/test/cases/parsing/extract-amd/index.js @@ -17,7 +17,7 @@ it("should parse fancy function calls", function() { it("should parse fancy AMD calls", function() { require("./constructor ./a".split(" ")); - require("-> module module exports *constructor *a".replace("module", "require").substr(3).replace(/\*/g, "./").split(" "), function(require, module, exports, constructor, a) { + require("-> module module exports *constructor *a".replace("module", "require").slice(3).replace(/\*/g, "./").split(" "), function(require, module, exports, constructor, a) { expect((typeof require)).toBe("function"); expect((typeof module)).toBe("object"); expect((typeof exports)).toBe("object"); @@ -25,7 +25,7 @@ it("should parse fancy AMD calls", function() { expect((typeof constructor)).toBe("function"); expect(a).toBe("a"); }); - define("-> module module exports *constructor *a".replace("module", "require").substr(3).replace(/\*/g, "./").split(" "), function(require, module, exports, constructor, a) { + define("-> module module exports *constructor *a".replace("module", "require").slice(3).replace(/\*/g, "./").split(" "), function(require, module, exports, constructor, a) { expect((typeof require)).toBe("function"); expect((typeof module)).toBe("object"); expect((typeof exports)).toBe("object"); diff --git a/test/cases/parsing/extract-amd/warnings.js b/test/cases/parsing/extract-amd/warnings.js index f50952cb6c2..f70e442d1b0 100644 --- a/test/cases/parsing/extract-amd/warnings.js +++ b/test/cases/parsing/extract-amd/warnings.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = [ - [/Module not found/, /Can't resolve '\.\/b' /, /b\.js/] + [/Module not found/, /Can't resolve '\.\/b' /, { details: /b\.js/ }] ]; diff --git a/test/cases/parsing/extract-require/errors.js b/test/cases/parsing/extract-require/errors.js index 546b7b0e0d0..ce8b052316b 100644 --- a/test/cases/parsing/extract-require/errors.js +++ b/test/cases/parsing/extract-require/errors.js @@ -1,3 +1,9 @@ +"use strict"; + module.exports = [ - [/Module not found/, /Can't resolve '\.\/missingModule' /, /extract-require\/index.js/] -]; \ No newline at end of file + [ + /Module not found/, + /Can't resolve '\.\/missingModule' /, + { moduleName: /extract-require\/index.js/ } + ] +]; diff --git a/test/cases/parsing/harmony-circular-star-reexport/a.js b/test/cases/parsing/harmony-circular-star-reexport/a.js new file mode 100644 index 00000000000..30b80e3ad6f --- /dev/null +++ b/test/cases/parsing/harmony-circular-star-reexport/a.js @@ -0,0 +1,2 @@ +export * from "./c"; +export const a = "a"; diff --git a/test/cases/parsing/harmony-circular-star-reexport/b.js b/test/cases/parsing/harmony-circular-star-reexport/b.js new file mode 100644 index 00000000000..87071dcdfde --- /dev/null +++ b/test/cases/parsing/harmony-circular-star-reexport/b.js @@ -0,0 +1,2 @@ +export * from "./a"; +export const b = "b"; diff --git a/test/cases/parsing/harmony-circular-star-reexport/c.js b/test/cases/parsing/harmony-circular-star-reexport/c.js new file mode 100644 index 00000000000..516ea7f8834 --- /dev/null +++ b/test/cases/parsing/harmony-circular-star-reexport/c.js @@ -0,0 +1,2 @@ +export * from "./b"; +export const c = "c"; diff --git a/test/cases/parsing/harmony-circular-star-reexport/index.js b/test/cases/parsing/harmony-circular-star-reexport/index.js new file mode 100644 index 00000000000..2f8b0d40433 --- /dev/null +++ b/test/cases/parsing/harmony-circular-star-reexport/index.js @@ -0,0 +1,11 @@ +import * as all from "./c"; + +it("should contain all exports", () => { + expect(all).toEqual( + nsObj({ + a: "a", + b: "b", + c: "c" + }) + ); +}); diff --git a/test/cases/parsing/harmony-commonjs-mix/index.js b/test/cases/parsing/harmony-commonjs-mix/index.js index 7947bbf08a2..745a4323c78 100644 --- a/test/cases/parsing/harmony-commonjs-mix/index.js +++ b/test/cases/parsing/harmony-commonjs-mix/index.js @@ -1,7 +1,6 @@ it("should result in a warning when using module.exports in harmony module", function() { var x = require("./module1"); - expect(x).toEqual({ - default: 1234, - [Symbol.toStringTag]: "Module" - }); + expect(x).toEqual(nsObj({ + default: 1234 + })); }); diff --git a/test/cases/parsing/harmony-commonjs-mix/module1.js b/test/cases/parsing/harmony-commonjs-mix/module1.js index aa3681a495c..28c4b2a59e0 100644 --- a/test/cases/parsing/harmony-commonjs-mix/module1.js +++ b/test/cases/parsing/harmony-commonjs-mix/module1.js @@ -2,18 +2,18 @@ import "./module"; expect(function() { module.exports = 1; -}).toThrowError(); +}).toThrow(); expect((typeof module.exports)).toBe("undefined"); expect((typeof define)).toBe("undefined"); expect(function() { define(function() {}) -}).toThrowError(/define is not defined/); +}).toThrow(/define is not defined/); export default 1234; if(eval("typeof exports !== \"undefined\"")) { - // exports is node.js exports and not webpacks + // exports is node.js exports and not webpack's expect(Object.keys(exports)).toEqual([]); } diff --git a/test/cases/parsing/harmony-deep-exports/cjs.js b/test/cases/parsing/harmony-deep-exports/cjs.js new file mode 100644 index 00000000000..ee8555d6f98 --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/cjs.js @@ -0,0 +1,3 @@ +module.exports = { + a: { b: { c: { d: () => 42 } } } +}; diff --git a/test/cases/parsing/harmony-deep-exports/cjs2.js b/test/cases/parsing/harmony-deep-exports/cjs2.js new file mode 100644 index 00000000000..61d6ba1833b --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/cjs2.js @@ -0,0 +1 @@ +module.exports = require("./cjs3"); diff --git a/test/cases/parsing/harmony-deep-exports/cjs3.js b/test/cases/parsing/harmony-deep-exports/cjs3.js new file mode 100644 index 00000000000..f02c088c18c --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/cjs3.js @@ -0,0 +1,3 @@ +exports.a = 1; +exports.b = 2; +exports.cjs3DefaultProvidedInfo = __webpack_exports_info__.default.provideInfo; diff --git a/test/cases/parsing/harmony-deep-exports/counter.js b/test/cases/parsing/harmony-deep-exports/counter.js new file mode 100644 index 00000000000..d75e977269a --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/counter.js @@ -0,0 +1,23 @@ +export let counter = 0; +export const increment = () => { + counter++; +}; +export function reset() { + counter = 0; +} +export const unusedExport = 42; + +export const exportsInfo = { + increment: __webpack_exports_info__.increment.used, + counter: __webpack_exports_info__.counter.used, + reset: __webpack_exports_info__.reset.used, + unusedExport: __webpack_exports_info__.unusedExport.used, + somethingElse: __webpack_exports_info__.somethingElse.used, + incrementInfo: __webpack_exports_info__.increment.useInfo, + counterInfo: __webpack_exports_info__.counter.useInfo, + resetInfo: __webpack_exports_info__.reset.useInfo, + unusedExportInfo: __webpack_exports_info__.unusedExport.useInfo, + somethingElseInfo: __webpack_exports_info__.somethingElse.useInfo, + incrementProvideInfo: __webpack_exports_info__.increment.provideInfo, + somethingElseProvideInfo: __webpack_exports_info__.somethingElse.provideInfo +}; diff --git a/test/cases/parsing/harmony-deep-exports/esm1.js b/test/cases/parsing/harmony-deep-exports/esm1.js new file mode 100644 index 00000000000..e7edf24999f --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/esm1.js @@ -0,0 +1,2 @@ +export default 2; +export const esmDefaultProvidedInfo = __webpack_exports_info__.default.provideInfo; diff --git a/test/cases/parsing/harmony-deep-exports/index.js b/test/cases/parsing/harmony-deep-exports/index.js new file mode 100644 index 00000000000..627455e7746 --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/index.js @@ -0,0 +1,91 @@ +import * as C from "./reexport-namespace"; +import { counter } from "./reexport-namespace"; +import * as C2 from "./reexport-namespace-again"; +import cj2, { cjs3DefaultProvidedInfo } from "./cjs2"; +import esm1, { esmDefaultProvidedInfo } from "./esm1"; + +it("default providedInfo should be correct for cjs", () => { + expect(cj2.a).toBe(1); + expect(cjs3DefaultProvidedInfo).toBe(false); + expect(__webpack_exports_info__.cj2.default.provideInfo).toBe(false); +}); + +it("default providedInfo and usedInfo should be correct for esm", () => { + expect(esm1).toBe(2); + expect(esmDefaultProvidedInfo).toBe(true); +}); + +it("should allow to reexport namespaces 1", () => { + (0, counter.reset)(); + expect(counter.counter).toBe(0); + (0, counter.increment)(); + expect(counter.counter).toBe(1); +}); + +it("should allow to reexport namespaces 2", () => { + (0, C.counter.reset)(); + expect(C.counter.counter).toBe(0); + (0, C.counter.increment)(); + expect(C.counter.counter).toBe(1); +}); + +it("should allow to reexport namespaces 3", () => { + (0, C2.CC.counter.reset)(); + expect(C2.CC.counter.counter).toBe(0); + (0, C2.CC.counter.increment)(); + expect(C2.CC.counter.counter).toBe(1); +}); + +import CJS from "./cjs"; + +it("should be able to call a deep function in commonjs", () => { + expect(CJS.a.b.c.d()).toBe(42); +}); + +it("should report consistent exports info", () => { + const x1 = counter.exportsInfo; + + if (process.env.NODE_ENV === "production") { + expect(x1.incrementInfo).toBe(true); + expect(x1.counterInfo).toBe(true); + expect(x1.resetInfo).toBe(true); + expect(x1.unusedExport).toBe(false); + expect(x1.unusedExportInfo).toBe(false); + expect(x1.somethingElse).toBe(false); + expect(x1.somethingElseInfo).toBe(false); + expect(C.exportsInfo.nsInfo).toBe(true); + expect(C.exportsInfo.ns2).toBe(false); + expect(C.exportsInfo.ns2Info).toBe(false); + } else if (process.env.NODE_ENV === "development") { + expect(x1.incrementInfo).toBe(undefined); + expect(x1.counterInfo).toBe(undefined); + expect(x1.resetInfo).toBe(undefined); + expect(x1.unusedExport).toBe(true); + expect(x1.unusedExportInfo).toBe(undefined); + expect(x1.somethingElse).toBe(true); + expect(x1.somethingElseInfo).toBe(undefined); + expect(C.exportsInfo.nsInfo).toBe(undefined); + expect(C.exportsInfo.ns2).toBe(true); + expect(C.exportsInfo.ns2Info).toBe(undefined); + } + expect(x1.increment).toBe(true); + expect(x1.counter).toBe(true); + expect(x1.reset).toBe(true); + expect(x1.incrementProvideInfo).toBe(true); + expect(x1.somethingElseProvideInfo).toBe(false); + expect(C.exportsInfo.increment).toBe(x1.increment); + expect(C.exportsInfo.counter).toBe(x1.counter); + expect(C.exportsInfo.reset).toBe(x1.reset); + expect(C.exportsInfo.unusedExport).toBe(x1.unusedExport); + expect(C.exportsInfo.incrementInfo).toBe(x1.incrementInfo); + expect(C.exportsInfo.counterInfo).toBe(x1.counterInfo); + expect(C.exportsInfo.resetInfo).toBe(x1.resetInfo); + expect(C.exportsInfo.unusedExportInfo).toBe(x1.unusedExportInfo); + expect(C.exportsInfo.incrementProvideInfo).toBe(x1.incrementProvideInfo); + expect(C.exportsInfo.somethingElseProvideInfo).toBe( + x1.somethingElseProvideInfo + ); + expect(C.exportsInfo.ns).toBe(true); + expect(C2.exportsInfo).toBe(true); + expect(__webpack_exports_info__).toBe(true); +}); diff --git a/test/cases/parsing/harmony-deep-exports/reexport-namespace-again.js b/test/cases/parsing/harmony-deep-exports/reexport-namespace-again.js new file mode 100644 index 00000000000..203f4203b86 --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/reexport-namespace-again.js @@ -0,0 +1,4 @@ +import * as CC from "./reexport-namespace"; +export { CC }; + +export const exportsInfo = __webpack_exports_info__; diff --git a/test/cases/parsing/harmony-deep-exports/reexport-namespace.js b/test/cases/parsing/harmony-deep-exports/reexport-namespace.js new file mode 100644 index 00000000000..64589d7d257 --- /dev/null +++ b/test/cases/parsing/harmony-deep-exports/reexport-namespace.js @@ -0,0 +1,24 @@ +import * as counter from "./counter"; +export { counter }; +import * as counter2 from "./counter"; +export { counter2 }; + +export const exportsInfo = { + increment: __webpack_exports_info__.counter.increment.used, + counter: __webpack_exports_info__.counter.counter.used, + reset: __webpack_exports_info__.counter.reset.used, + unusedExport: __webpack_exports_info__.counter.unusedExport.used, + somethingElse: __webpack_exports_info__.counter.somethingElse.used, + incrementInfo: __webpack_exports_info__.counter.increment.useInfo, + counterInfo: __webpack_exports_info__.counter.counter.useInfo, + resetInfo: __webpack_exports_info__.counter.reset.useInfo, + unusedExportInfo: __webpack_exports_info__.counter.unusedExport.useInfo, + somethingElseInfo: __webpack_exports_info__.counter.somethingElse.useInfo, + incrementProvideInfo: __webpack_exports_info__.counter.increment.provideInfo, + somethingElseProvideInfo: + __webpack_exports_info__.counter.somethingElse.provideInfo, + ns: __webpack_exports_info__.counter.used, + nsInfo: __webpack_exports_info__.counter.useInfo, + ns2: __webpack_exports_info__.counter2.used, + ns2Info: __webpack_exports_info__.counter2.useInfo +}; diff --git a/test/cases/parsing/harmony-destructuring-assignment/counter.js b/test/cases/parsing/harmony-destructuring-assignment/counter.js new file mode 100644 index 00000000000..a33b7727575 --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/counter.js @@ -0,0 +1,9 @@ +export let counter = 0; +export const d = 1; +export const c = 1; + +export const exportsInfo = { + counter: __webpack_exports_info__.counter.used, + d: __webpack_exports_info__.d.used, + c: __webpack_exports_info__.c.used +}; diff --git a/test/cases/parsing/harmony-destructuring-assignment/counter2.js b/test/cases/parsing/harmony-destructuring-assignment/counter2.js new file mode 100644 index 00000000000..21dbf67c4b0 --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/counter2.js @@ -0,0 +1,7 @@ +export let counter = 0; +export const d = 1; + +export const exportsInfo = { + counter: __webpack_exports_info__.counter.used, + d: __webpack_exports_info__.d.used +}; diff --git a/test/cases/parsing/harmony-destructuring-assignment/counter3.js b/test/cases/parsing/harmony-destructuring-assignment/counter3.js new file mode 100644 index 00000000000..21dbf67c4b0 --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/counter3.js @@ -0,0 +1,7 @@ +export let counter = 0; +export const d = 1; + +export const exportsInfo = { + counter: __webpack_exports_info__.counter.used, + d: __webpack_exports_info__.d.used +}; diff --git a/test/cases/parsing/harmony-destructuring-assignment/counter4.js b/test/cases/parsing/harmony-destructuring-assignment/counter4.js new file mode 100644 index 00000000000..43eff0ee0a3 --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/counter4.js @@ -0,0 +1,15 @@ +export let counter = 0; +export const d = 1; +export const c = 1; +export const e = 1; +export const f = 1; +export const g = 1; + +export const exportsInfo = { + counter: __webpack_exports_info__.counter.used, + d: __webpack_exports_info__.d.used, + c: __webpack_exports_info__.c.used, + e: __webpack_exports_info__.e.used, + f: __webpack_exports_info__.f.used, + g: __webpack_exports_info__.g.used +}; diff --git a/test/cases/parsing/harmony-destructuring-assignment/index.js b/test/cases/parsing/harmony-destructuring-assignment/index.js new file mode 100644 index 00000000000..8cc0ad91cdf --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/index.js @@ -0,0 +1,55 @@ +import * as C from "./reexport-namespace"; +import { counter } from "./reexport-namespace"; +import { exportsInfo } from "./counter"; +import { exportsInfo as exportsInfo2 } from "./counter2"; +import * as counter3 from "./counter3"; +import * as counter4 from "./counter4"; + +it("expect tree-shake unused exports #1", () => { + const { D } = C; + expect(D).toBe(1); + expect(C.exportsInfo.D).toBe(true); + expect(C.exportsInfo.E).toBe(false); +}); + +it("expect tree-shake unused exports #2", () => { + const { d, c } = C.counter; + const { ['d']: d1 } = counter; + expect(d).toBe(1); + expect(c).toBe(1); + expect(d1).toBe(1); + expect(exportsInfo.d).toBe(true); + expect(exportsInfo.c).toBe(true); + expect(exportsInfo.counter).toBe(false); +}); + +it("expect multiple assignment work correctly", () => { + const { e, d: d1 } = counter4; + let c1; + const { f, d: d2 } = { c: c1 } = counter4; + expect(c1).toBe(1); + expect(d1).toBe(1); + expect(d2).toBe(1); + expect(e).toBe(1); + expect(f).toBe(1); + expect(counter4.exportsInfo.c).toBe(true); + expect(counter4.exportsInfo.d).toBe(true); + expect(counter4.exportsInfo.e).toBe(true); + expect(counter4.exportsInfo.f).toBe(true); + expect(counter4.exportsInfo.g).toBe(false); + expect(counter4.exportsInfo.counter).toBe(false); +}); + +it("expect tree-shake bailout when rest element is used", () => { + const { d, ...rest } = counter3; + expect(d).toBe(1); + expect(rest.exportsInfo.d).toBe(true); + expect(rest.exportsInfo.counter).toBe(true); +}); + +it("expect support of \"deep\" tree-shaking", () => { + const { counter2: { d } } = C; + expect(d).toBe(1); + expect(exportsInfo2.d).toBe(true); + expect(exportsInfo2.counter).toBe(false); +}); diff --git a/test/cases/parsing/harmony-destructuring-assignment/reexport-namespace.js b/test/cases/parsing/harmony-destructuring-assignment/reexport-namespace.js new file mode 100644 index 00000000000..4a41ad89f66 --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/reexport-namespace.js @@ -0,0 +1,14 @@ +import * as counter from "./counter"; +export { counter }; +import * as counter2 from "./counter2"; +export { counter2 }; + +export const D = 1; +export const E = 1; + +export const exportsInfo = { + D: __webpack_exports_info__.D.used, + E: __webpack_exports_info__.E.used, + counter: __webpack_exports_info__.counter.used, + counter2: __webpack_exports_info__.counter2.used, +}; diff --git a/test/cases/parsing/harmony-destructuring-assignment/test.filter.js b/test/cases/parsing/harmony-destructuring-assignment/test.filter.js new file mode 100644 index 00000000000..ed0f0aa0f66 --- /dev/null +++ b/test/cases/parsing/harmony-destructuring-assignment/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = (config) => + // This test can't run in development mode + config.mode !== "development"; diff --git a/test/cases/parsing/harmony-duplicate-export/1.js b/test/cases/parsing/harmony-duplicate-export/1.js index d7aaf98bd13..8ccaaf745aa 100644 --- a/test/cases/parsing/harmony-duplicate-export/1.js +++ b/test/cases/parsing/harmony-duplicate-export/1.js @@ -1,2 +1,2 @@ export var x = "1"; -export * from "./a"; +export * from "./a?1"; diff --git a/test/cases/parsing/harmony-duplicate-export/2.js b/test/cases/parsing/harmony-duplicate-export/2.js index 776d2dce79a..bc9d41caa28 100644 --- a/test/cases/parsing/harmony-duplicate-export/2.js +++ b/test/cases/parsing/harmony-duplicate-export/2.js @@ -1,2 +1,2 @@ -export * from "./a"; +export * from "./a?2"; export var x = "1"; diff --git a/test/cases/parsing/harmony-duplicate-export/3.js b/test/cases/parsing/harmony-duplicate-export/3.js index 3ebcd0b9763..65823b0e15f 100644 --- a/test/cases/parsing/harmony-duplicate-export/3.js +++ b/test/cases/parsing/harmony-duplicate-export/3.js @@ -1,2 +1,3 @@ -export * from "./a"; -export * from "./b"; +// This leads to an error +export * from "./a?3"; +export * from "./b?3"; diff --git a/test/cases/parsing/harmony-duplicate-export/4.js b/test/cases/parsing/harmony-duplicate-export/4.js index 3e398131bc9..db6e0a979c2 100644 --- a/test/cases/parsing/harmony-duplicate-export/4.js +++ b/test/cases/parsing/harmony-duplicate-export/4.js @@ -1,2 +1,3 @@ -export * from "./b"; -export * from "./a"; +// This leads to an error +export * from "./b?4"; +export * from "./a?4"; diff --git a/test/cases/parsing/harmony-duplicate-export/5.js b/test/cases/parsing/harmony-duplicate-export/5.js index 0f33339cfec..df097aff566 100644 --- a/test/cases/parsing/harmony-duplicate-export/5.js +++ b/test/cases/parsing/harmony-duplicate-export/5.js @@ -1,2 +1,4 @@ -export * from "./c"; -export * from "./d"; +// Theoretically this should lead to an error +// but in this dynamic case it's impossible to detect it +export * from "./c?5"; +export * from "./d?5"; diff --git a/test/cases/parsing/harmony-duplicate-export/6.js b/test/cases/parsing/harmony-duplicate-export/6.js index e25b35cef4a..c84c770c0b7 100644 --- a/test/cases/parsing/harmony-duplicate-export/6.js +++ b/test/cases/parsing/harmony-duplicate-export/6.js @@ -1,4 +1,5 @@ -export * from "./a"; -export * from "./b"; -export * from "./c"; -export * from "./d"; +// This leads to an error +export * from "./a?6"; +export * from "./b?6"; +export * from "./c?6"; +export * from "./d?6"; diff --git a/test/cases/parsing/harmony-duplicate-export/7.js b/test/cases/parsing/harmony-duplicate-export/7.js index acf73ae423d..a81671f523f 100644 --- a/test/cases/parsing/harmony-duplicate-export/7.js +++ b/test/cases/parsing/harmony-duplicate-export/7.js @@ -1,4 +1,5 @@ -export * from "./d"; -export * from "./b"; -export * from "./c"; -export * from "./a"; +// This leads to an error +export * from "./d?7"; +export * from "./b?7"; +export * from "./c?7"; +export * from "./a?7"; diff --git a/test/cases/parsing/harmony-duplicate-export/c.js b/test/cases/parsing/harmony-duplicate-export/c.js index 56be30618c1..1124f369a67 100644 --- a/test/cases/parsing/harmony-duplicate-export/c.js +++ b/test/cases/parsing/harmony-duplicate-export/c.js @@ -1 +1 @@ -exports.x = "c"; +Object(exports).x = "c"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/1.js b/test/cases/parsing/harmony-duplicate-export/cjs/1.js new file mode 100644 index 00000000000..8ccaaf745aa --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/1.js @@ -0,0 +1,2 @@ +export var x = "1"; +export * from "./a?1"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/2.js b/test/cases/parsing/harmony-duplicate-export/cjs/2.js new file mode 100644 index 00000000000..bc9d41caa28 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/2.js @@ -0,0 +1,2 @@ +export * from "./a?2"; +export var x = "1"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/3.js b/test/cases/parsing/harmony-duplicate-export/cjs/3.js new file mode 100644 index 00000000000..65823b0e15f --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/3.js @@ -0,0 +1,3 @@ +// This leads to an error +export * from "./a?3"; +export * from "./b?3"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/4.js b/test/cases/parsing/harmony-duplicate-export/cjs/4.js new file mode 100644 index 00000000000..db6e0a979c2 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/4.js @@ -0,0 +1,3 @@ +// This leads to an error +export * from "./b?4"; +export * from "./a?4"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/5.js b/test/cases/parsing/harmony-duplicate-export/cjs/5.js new file mode 100644 index 00000000000..df097aff566 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/5.js @@ -0,0 +1,4 @@ +// Theoretically this should lead to an error +// but in this dynamic case it's impossible to detect it +export * from "./c?5"; +export * from "./d?5"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/6.js b/test/cases/parsing/harmony-duplicate-export/cjs/6.js new file mode 100644 index 00000000000..c84c770c0b7 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/6.js @@ -0,0 +1,5 @@ +// This leads to an error +export * from "./a?6"; +export * from "./b?6"; +export * from "./c?6"; +export * from "./d?6"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/7.js b/test/cases/parsing/harmony-duplicate-export/cjs/7.js new file mode 100644 index 00000000000..a81671f523f --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/7.js @@ -0,0 +1,5 @@ +// This leads to an error +export * from "./d?7"; +export * from "./b?7"; +export * from "./c?7"; +export * from "./a?7"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/a.js b/test/cases/parsing/harmony-duplicate-export/cjs/a.js new file mode 100644 index 00000000000..07f3fc98275 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/a.js @@ -0,0 +1 @@ +export var x = "a"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/b.js b/test/cases/parsing/harmony-duplicate-export/cjs/b.js new file mode 100644 index 00000000000..72991cf5b48 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/b.js @@ -0,0 +1 @@ +export var x = "b"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/c.js b/test/cases/parsing/harmony-duplicate-export/cjs/c.js new file mode 100644 index 00000000000..1124f369a67 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/c.js @@ -0,0 +1 @@ +Object(exports).x = "c"; diff --git a/test/cases/parsing/harmony-duplicate-export/cjs/d.js b/test/cases/parsing/harmony-duplicate-export/cjs/d.js new file mode 100644 index 00000000000..2d8cec1df49 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/cjs/d.js @@ -0,0 +1 @@ +Object(exports).x = "d"; diff --git a/test/cases/parsing/harmony-duplicate-export/d.js b/test/cases/parsing/harmony-duplicate-export/d.js index 3b5c4b67729..2d8cec1df49 100644 --- a/test/cases/parsing/harmony-duplicate-export/d.js +++ b/test/cases/parsing/harmony-duplicate-export/d.js @@ -1 +1 @@ -exports.x = "d"; +Object(exports).x = "d"; diff --git a/test/cases/parsing/harmony-duplicate-export/index.js b/test/cases/parsing/harmony-duplicate-export/index.js index b9be967f819..4c524465e6e 100644 --- a/test/cases/parsing/harmony-duplicate-export/index.js +++ b/test/cases/parsing/harmony-duplicate-export/index.js @@ -1,35 +1,35 @@ -import { x as x1 } from "./1?a"; -import { x as x2 } from "./2?a"; -import { x as x3 } from "./3?a"; -import { x as x4 } from "./4?a"; -import { x as x5 } from "./5?a"; -import { x as x6 } from "./6?a"; -import { x as x7 } from "./7?a"; +import { x as x1 } from "./1"; +import { x as x2 } from "./2"; +import { x as x3 } from "./3"; +import { x as x4 } from "./4"; +import { x as x5 } from "./5"; +import { x as x6 } from "./6"; +import { x as x7 } from "./7"; -var y1 = require("./1?b").x; -var y2 = require("./2?b").x; -var y3 = require("./3?b").x; -var y4 = require("./4?b").x; -var y5 = require("./5?b").x; -var y6 = require("./6?b").x; -var y7 = require("./7?b").x; +var y1 = require("./cjs/1").x; +var y2 = require("./cjs/2").x; +var y3 = require("./cjs/3").x; +var y4 = require("./cjs/4").x; +var y5 = require("./cjs/5").x; +var y6 = require("./cjs/6").x; +var y7 = require("./cjs/7").x; -it("should not overwrite when using star export (known exports)", function() { +it("should not overwrite when using star export (known exports)", function () { expect(x1).toBe("1"); expect(x2).toBe("1"); expect(x3).toBe("a"); expect(x4).toBe("b"); expect(x5).toBe("c"); expect(x6).toBe("a"); - expect(x7).toBe("d"); + expect(x7).toBe("b"); // Looks wrong, but is irrelevant as this is an error anyway }); -it("should not overwrite when using star export (unknown exports)", function() { +it("should not overwrite when using star export (unknown exports)", function () { expect(y1).toBe("1"); expect(y2).toBe("1"); expect(y3).toBe("a"); expect(y4).toBe("b"); expect(y5).toBe("c"); expect(y6).toBe("a"); - expect(y7).toBe("d"); + expect(y7).toBe("b"); // Looks wrong, but is irrelevant as this is an error anyway }); diff --git a/test/cases/parsing/harmony-duplicate-export/warnings.js b/test/cases/parsing/harmony-duplicate-export/warnings.js new file mode 100644 index 00000000000..912106db547 --- /dev/null +++ b/test/cases/parsing/harmony-duplicate-export/warnings.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = [ + [/name 'x'/, /\.\/a\?3/, /\.\/b\?3/], + [/name 'x'/, /\.\/a\?4/, /\.\/b\?4/], + [/name 'x'/, /\.\/a\?6/, /\.\/b\?6/], + [/name 'x'/, /\.\/a\?7/, /\.\/b\?7/], + [/name 'x'/, /\.\/a\?3/, /\.\/b\?3/], + [/name 'x'/, /\.\/a\?4/, /\.\/b\?4/], + [/name 'x'/, /\.\/a\?6/, /\.\/b\?6/], + [/name 'x'/, /\.\/a\?7/, /\.\/b\?7/] +]; diff --git a/test/cases/parsing/harmony-export-expression/a.js b/test/cases/parsing/harmony-export-expression/a.js new file mode 100644 index 00000000000..f0b0ef44408 --- /dev/null +++ b/test/cases/parsing/harmony-export-expression/a.js @@ -0,0 +1 @@ +export default import("./b.js"); diff --git a/test/cases/parsing/harmony-export-expression/b.js b/test/cases/parsing/harmony-export-expression/b.js new file mode 100644 index 00000000000..4586b445de0 --- /dev/null +++ b/test/cases/parsing/harmony-export-expression/b.js @@ -0,0 +1,3 @@ +export default function(a, b) { + return a + b; +} diff --git a/test/cases/parsing/harmony-export-expression/c.js b/test/cases/parsing/harmony-export-expression/c.js new file mode 100644 index 00000000000..d643dabf281 --- /dev/null +++ b/test/cases/parsing/harmony-export-expression/c.js @@ -0,0 +1 @@ +export default 1 + 2; diff --git a/test/cases/parsing/harmony-export-expression/d.js b/test/cases/parsing/harmony-export-expression/d.js new file mode 100644 index 00000000000..c2694eee4b8 --- /dev/null +++ b/test/cases/parsing/harmony-export-expression/d.js @@ -0,0 +1,9 @@ +let counter = 0; + +test(); + +export default function test() { + counter += 1; + + return counter; +} diff --git a/test/cases/parsing/harmony-export-expression/e.js b/test/cases/parsing/harmony-export-expression/e.js new file mode 100644 index 00000000000..df266da191d --- /dev/null +++ b/test/cases/parsing/harmony-export-expression/e.js @@ -0,0 +1,3 @@ +var a; + +export default a = 10; diff --git a/test/cases/parsing/harmony-export-expression/index.js b/test/cases/parsing/harmony-export-expression/index.js new file mode 100644 index 00000000000..e9f33a5416f --- /dev/null +++ b/test/cases/parsing/harmony-export-expression/index.js @@ -0,0 +1,11 @@ +import a from "./a.js"; +import c from "./c.js"; +import d from "./d.js"; +import e from "./e.js"; + +it("should work", async function() { + expect((await a).default(2, 3)).toBe(5); + expect(c).toBe(3); + expect(d()).toBe(2); + expect(e).toBe(10); +}); diff --git a/test/cases/parsing/harmony-export-hoist/bar.js b/test/cases/parsing/harmony-export-hoist/bar.js index 32909add3a2..6861bbd03ec 100644 --- a/test/cases/parsing/harmony-export-hoist/bar.js +++ b/test/cases/parsing/harmony-export-hoist/bar.js @@ -1,6 +1,8 @@ import { foo, foo2 } from "./foo"; +import foo3 from "./foo"; export default { foo: foo, - foo2: foo2 + foo2: foo2, + foo3 }; diff --git a/test/cases/parsing/harmony-export-hoist/class-no-name.js b/test/cases/parsing/harmony-export-hoist/class-no-name.js new file mode 100644 index 00000000000..3b09afe9f73 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/class-no-name.js @@ -0,0 +1,9 @@ +import c from "./get-class-no-name"; + +export default class { + f() { + return "ok"; + } +} + +expect(new c().f()).toBe("ok"); diff --git a/test/cases/parsing/harmony-export-hoist/class-with-name.js b/test/cases/parsing/harmony-export-hoist/class-with-name.js new file mode 100644 index 00000000000..71d3a8d753a --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/class-with-name.js @@ -0,0 +1,11 @@ +import c from "./get-class-with-name"; + +export default class def { + f() { + return "ok"; + } +} + +expect(new c().f()).toBe("ok"); +if (process.env.NODE_ENV !== "production") expect(c.name).toBe("def"); +expect(def).toBe(c); diff --git a/test/cases/parsing/harmony-export-hoist/class-with-super-no-name.js b/test/cases/parsing/harmony-export-hoist/class-with-super-no-name.js new file mode 100644 index 00000000000..3a397e5cffa --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/class-with-super-no-name.js @@ -0,0 +1,16 @@ +import c from "./get-class-with-super-no-name"; + +class sup { + g() { + return "ok"; + } +} + +export default class extends sup { + f() { + return "ok"; + } +} + +expect(new c().f()).toBe("ok"); +expect(new c().g()).toBe("ok"); diff --git a/test/cases/parsing/harmony-export-hoist/class-with-super-with-name.js b/test/cases/parsing/harmony-export-hoist/class-with-super-with-name.js new file mode 100644 index 00000000000..7cc66bd6405 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/class-with-super-with-name.js @@ -0,0 +1,18 @@ +import c from "./get-class-with-super-with-name"; + +class sup { + g() { + return "ok"; + } +} + +export default class def extends sup { + f() { + return "ok"; + } +} + +expect(new c().f()).toBe("ok"); +expect(new c().g()).toBe("ok"); +if (process.env.NODE_ENV !== "production") expect(c.name).toBe("def"); +expect(c).toBe(def); diff --git a/test/cases/parsing/harmony-export-hoist/foo.js b/test/cases/parsing/harmony-export-hoist/foo.js index ad0b7c1fe7a..f013a586c83 100644 --- a/test/cases/parsing/harmony-export-hoist/foo.js +++ b/test/cases/parsing/harmony-export-hoist/foo.js @@ -1,4 +1,4 @@ -import {bar} from "./bar"; +import { bar } from "./bar"; export function foo() { return "ok"; @@ -7,6 +7,10 @@ export function foo() { function foo2() { return "ok"; } -export { foo2 } +export { foo2 }; -export { default } from "./bar"; +export default function () { + return "ok"; +} + +export { default as results } from "./bar"; diff --git a/test/cases/parsing/harmony-export-hoist/func-no-args-no-name.js b/test/cases/parsing/harmony-export-hoist/func-no-args-no-name.js new file mode 100644 index 00000000000..9f95e83b4f3 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/func-no-args-no-name.js @@ -0,0 +1,7 @@ +import f from "./get-func-no-args-no-name"; + +expect(f()).toBe("ok"); + +export default function () { + return "ok"; +} diff --git a/test/cases/parsing/harmony-export-hoist/func-no-args-with-name.js b/test/cases/parsing/harmony-export-hoist/func-no-args-with-name.js new file mode 100644 index 00000000000..2382658a4ff --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/func-no-args-with-name.js @@ -0,0 +1,9 @@ +import f from "./get-func-no-args-with-name"; + +expect(f()).toBe("ok"); +expect(def).toBe(f); +if (process.env.NODE_ENV !== "production") expect(f.name).toBe("def"); + +export default function def() { + return "ok"; +} diff --git a/test/cases/parsing/harmony-export-hoist/func-with-args-no-name.js b/test/cases/parsing/harmony-export-hoist/func-with-args-no-name.js new file mode 100644 index 00000000000..5b2480fa595 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/func-with-args-no-name.js @@ -0,0 +1,7 @@ +import f from "./get-func-with-args-no-name"; + +expect(f(123)).toBe("ok123"); + +export default function (x) { + return "ok" + x; +} diff --git a/test/cases/parsing/harmony-export-hoist/func-with-args-with-name.js b/test/cases/parsing/harmony-export-hoist/func-with-args-with-name.js new file mode 100644 index 00000000000..1cb19ad9187 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/func-with-args-with-name.js @@ -0,0 +1,9 @@ +import f from "./get-func-with-args-with-name"; + +expect(f(123)).toBe("ok123"); +if (process.env.NODE_ENV !== "production") expect(f.name).toBe("def"); +expect(def).toBe(f); + +export default function def(x) { + return "ok" + x; +} diff --git a/test/cases/parsing/harmony-export-hoist/get-class-no-name.js b/test/cases/parsing/harmony-export-hoist/get-class-no-name.js new file mode 100644 index 00000000000..a8c0997e9cb --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-class-no-name.js @@ -0,0 +1 @@ +export { default } from "./class-no-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-class-with-name.js b/test/cases/parsing/harmony-export-hoist/get-class-with-name.js new file mode 100644 index 00000000000..85d41cfb573 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-class-with-name.js @@ -0,0 +1 @@ +export { default } from "./class-with-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-class-with-super-no-name.js b/test/cases/parsing/harmony-export-hoist/get-class-with-super-no-name.js new file mode 100644 index 00000000000..593f95fbf32 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-class-with-super-no-name.js @@ -0,0 +1 @@ +export { default } from "./class-with-super-no-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-class-with-super-with-name.js b/test/cases/parsing/harmony-export-hoist/get-class-with-super-with-name.js new file mode 100644 index 00000000000..1e74a77ea15 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-class-with-super-with-name.js @@ -0,0 +1 @@ +export { default } from "./class-with-super-with-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-func-no-args-no-name.js b/test/cases/parsing/harmony-export-hoist/get-func-no-args-no-name.js new file mode 100644 index 00000000000..46e348eb733 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-func-no-args-no-name.js @@ -0,0 +1 @@ +export { default } from "./func-no-args-no-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-func-no-args-with-name.js b/test/cases/parsing/harmony-export-hoist/get-func-no-args-with-name.js new file mode 100644 index 00000000000..3c2980dc3b3 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-func-no-args-with-name.js @@ -0,0 +1 @@ +export { default } from "./func-no-args-with-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-func-with-args-no-name.js b/test/cases/parsing/harmony-export-hoist/get-func-with-args-no-name.js new file mode 100644 index 00000000000..413760fd119 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-func-with-args-no-name.js @@ -0,0 +1 @@ +export { default } from "./func-with-args-no-name"; diff --git a/test/cases/parsing/harmony-export-hoist/get-func-with-args-with-name.js b/test/cases/parsing/harmony-export-hoist/get-func-with-args-with-name.js new file mode 100644 index 00000000000..934b196e432 --- /dev/null +++ b/test/cases/parsing/harmony-export-hoist/get-func-with-args-with-name.js @@ -0,0 +1 @@ +export { default } from "./func-with-args-with-name"; diff --git a/test/cases/parsing/harmony-export-hoist/index.js b/test/cases/parsing/harmony-export-hoist/index.js index fd5748c9df1..24f54a8ef32 100644 --- a/test/cases/parsing/harmony-export-hoist/index.js +++ b/test/cases/parsing/harmony-export-hoist/index.js @@ -1,9 +1,25 @@ "use strict"; -it("should hoist exports", function() { - var result = require("./foo").default; +it("should hoist exports", function () { + var result = require("./foo").results; expect(typeof result.foo).toEqual("function"); expect(typeof result.foo2).toEqual("function"); + expect(typeof result.foo3).toEqual("function"); expect(result.foo()).toBe("ok"); expect(result.foo2()).toBe("ok"); + expect(result.foo3()).toBe("ok"); +}); + +it("should hoist export default functions", () => { + require("./func-no-args-no-name"); + require("./func-no-args-with-name"); + require("./func-with-args-no-name"); + require("./func-with-args-with-name"); +}); + +it("should hoist export default classes", () => { + require("./class-no-name"); + require("./class-with-name"); + require("./class-with-super-no-name"); + require("./class-with-super-with-name"); }); diff --git a/test/cases/parsing/harmony-export-import-specifier-asi/a.js b/test/cases/parsing/harmony-export-import-specifier-asi/a.js new file mode 100644 index 00000000000..9549e18a567 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier-asi/a.js @@ -0,0 +1,3 @@ +export const fn = (num) => { + return num; +}; diff --git a/test/cases/parsing/harmony-export-import-specifier-asi/index.js b/test/cases/parsing/harmony-export-import-specifier-asi/index.js new file mode 100644 index 00000000000..3c0ae95aaa7 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier-asi/index.js @@ -0,0 +1,11 @@ +import { fn } from './a.js'; + +const num = 1 + +export { fn } from './a.js'; + +fn(num); + +it("should work", function() { + expect(fn(num)).toBe(1); +}); diff --git a/test/cases/parsing/harmony-export-import-specifier/b.js b/test/cases/parsing/harmony-export-import-specifier/b.js new file mode 100644 index 00000000000..affbea2d442 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/b.js @@ -0,0 +1,9 @@ +import {c} from "./c.js"; + +const b2 = 3; +const b3 = c; +export {c as b1, c as b4, b2, b3} +export const usedB1 = __webpack_exports_info__.b1.used; +export const usedB2 = __webpack_exports_info__.b2.used; +export const usedB3 = __webpack_exports_info__.b3.used; +export const usedB4 = __webpack_exports_info__.b4.used; diff --git a/test/cases/parsing/harmony-export-import-specifier/c.js b/test/cases/parsing/harmony-export-import-specifier/c.js new file mode 100644 index 00000000000..f093d6b7cc5 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/c.js @@ -0,0 +1 @@ +export * as c from "./d.js"; diff --git a/test/cases/parsing/harmony-export-import-specifier/cjs1.js b/test/cases/parsing/harmony-export-import-specifier/cjs1.js new file mode 100644 index 00000000000..01fa3b71d0e --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/cjs1.js @@ -0,0 +1,2 @@ +exports.a = 2; +exports.b = 3; diff --git a/test/cases/parsing/harmony-export-import-specifier/cjs2.js b/test/cases/parsing/harmony-export-import-specifier/cjs2.js new file mode 100644 index 00000000000..e650ca0fe4f --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/cjs2.js @@ -0,0 +1 @@ +module.exports = require("./cjs1"); diff --git a/test/cases/parsing/harmony-export-import-specifier/d.js b/test/cases/parsing/harmony-export-import-specifier/d.js new file mode 100644 index 00000000000..2ca95af9d16 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/d.js @@ -0,0 +1,4 @@ +export const d1 = 1; +export const d2 = 2; +export const usedD1 = __webpack_exports_info__.d1.used; +export const usedD2 = __webpack_exports_info__.d2.used; diff --git a/test/cases/parsing/harmony-export-import-specifier/e.js b/test/cases/parsing/harmony-export-import-specifier/e.js new file mode 100644 index 00000000000..fc325c5b2bd --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/e.js @@ -0,0 +1,4 @@ +export const e1 = 10; +export const e2 = 20; +export const usedE1 = __webpack_exports_info__.e1.used; +export const usedE2 = __webpack_exports_info__.e2.used; diff --git a/test/cases/parsing/harmony-export-import-specifier/e1.js b/test/cases/parsing/harmony-export-import-specifier/e1.js new file mode 100644 index 00000000000..cc124f19180 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/e1.js @@ -0,0 +1 @@ +export * as e from "./e.js"; diff --git a/test/cases/parsing/harmony-export-import-specifier/f.js b/test/cases/parsing/harmony-export-import-specifier/f.js new file mode 100644 index 00000000000..3ab2df1b405 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/f.js @@ -0,0 +1,2 @@ +export * as f1 from "./e1.js"; +export * as f2 from "./e.js"; diff --git a/test/cases/parsing/harmony-export-import-specifier/g.js b/test/cases/parsing/harmony-export-import-specifier/g.js new file mode 100644 index 00000000000..79a3afd84b3 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/g.js @@ -0,0 +1,3 @@ +import {f1, f2} from "./f.js"; + +export {f1, f2 as g1}; diff --git a/test/cases/parsing/harmony-export-import-specifier/h.js b/test/cases/parsing/harmony-export-import-specifier/h.js new file mode 100644 index 00000000000..f3c2dfce710 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/h.js @@ -0,0 +1 @@ +export * as h from "./g.js"; diff --git a/test/cases/parsing/harmony-export-import-specifier/index.js b/test/cases/parsing/harmony-export-import-specifier/index.js index e0a4d16b1af..b33516186da 100644 --- a/test/cases/parsing/harmony-export-import-specifier/index.js +++ b/test/cases/parsing/harmony-export-import-specifier/index.js @@ -1,8 +1,90 @@ "use strict"; import { x, y } from "./a"; +import { d2, usedD1, usedD2 } from "./d.js"; +import { b1, usedB1, usedB2, usedB3, usedB4 } from "./b.js"; +import { usedE1, usedE2 } from "./e.js"; +import { h } from "./h.js"; +import * as m from "./m"; +import { object as obj } from "./m"; +import cjs from "./cjs2"; +import * as o from "./o"; +import * as p from "./p"; +import * as q from "./q"; +import * as so from "./side-effect-free/o"; +import * as sm from "./side-effect-free/m"; +import json1 from "./some.json"; +import json2 from "./some1.json"; +import weirdCjs from "./weird-cjs"; -it("namespace export as from commonjs should override named export", function() { +it("namespace export as from commonjs should override named export", function () { expect(x).toBe(1); expect(y).toBe(3); }); + +it("named namespace export should work correctly", function () { + expect(d2).toBe(2); + if (process.env.NODE_ENV === "production") { + expect(usedD1).toBe(false); + } + expect(usedD2).toBe(true); + + expect(b1.d2).toBe(2); + expect(usedB1).toBe(true); + if (process.env.NODE_ENV === "production") { + expect(usedB2).toBe(false); + expect(usedB3).toBe(false); + expect(usedB4).toBe(false); + } +}); + +it("complex case should work correctly", () => { + expect(h.f1.e.e1).toBe(10); + expect(h.g1.e1).toBe(10); + expect(usedE1).toBe(true); + if (process.env.NODE_ENV === "production") { + expect(usedE2).toBe(false); + } +}); + +it("should handle 'm in n' case", () => { + const obj = { aaa: "aaa" in m }; + expect(obj.aaa).toBe(true); + expect("not_here" in m.object).toBe(false); + expect("not_here" in obj).toBe(false); + expect("__esModule" in q).toBe(true); + expect(() => "value" in q.__esModule).toThrow(); + expect(() => "not_here" in json1).toThrow(); + expect("not_here" in json2).toBe(false); + expect("a" in json2).toBe(true); + expect("a" in cjs).toBe(true); + expect("not_here" in cjs).toBe(false); + expect("not_here" in weirdCjs).toBe(false); + expect("a" in weirdCjs).toBe(true); + expect(() => "a" in weirdCjs.a).toThrow(); + expect("aaa" in o).toBe(true); + expect("aaa" in p).toBe(false); + expect("ccc" in m).toBe(false); + expect("aaa" in q).toBe(true); + expect("aaa" in so).toBe(true); + expect("ccc" in sm).toBe(false); + expect("ccc" in (false ? {} : m.ddd)).toBe(true); + expect("ccc" in (false ? {} : sm.ddd)).toBe(true); + expect("ddd" in m.ddd).toBe(false); + expect("ddd" in sm.ddd).toBe(false); + if (process.env.NODE_ENV === "production") { + expect(m.ddd.usedA).toBe(false); + expect(m.usedB).toBe(false); + expect(m.usedA).toBe(true); + expect(m.canMangleA).toBe(true); + } +}); + +it("issue-15759", () => { + function foo() { + // PLEASE CONFIRM there is no space after return + // prettier-ignore + return"usedA"in m; + } + expect(foo.call()).toBe(true); +}); diff --git a/test/cases/parsing/harmony-export-import-specifier/m.js b/test/cases/parsing/harmony-export-import-specifier/m.js new file mode 100644 index 00000000000..d47ba358a40 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/m.js @@ -0,0 +1,7 @@ +export const aaa = 1; +export const bbb = 2; +export const object = {}; +export * as ddd from "./n"; +export const usedA = __webpack_exports_info__.aaa.used; +export const canMangleA = __webpack_exports_info__.ccc.canMangle; +export const usedB = __webpack_exports_info__.bbb.used; diff --git a/test/cases/parsing/harmony-export-import-specifier/n.js b/test/cases/parsing/harmony-export-import-specifier/n.js new file mode 100644 index 00000000000..f41485c9dc1 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/n.js @@ -0,0 +1,5 @@ +export const ccc = 3; +export const mmm = () => ({}); +export const aaa = 1; +export const usedA = __webpack_exports_info__.a.used; +export const canMangleC = __webpack_exports_info__.c.canMangle; diff --git a/test/cases/parsing/harmony-export-import-specifier/o.js b/test/cases/parsing/harmony-export-import-specifier/o.js new file mode 100644 index 00000000000..561e90cc163 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/o.js @@ -0,0 +1,2 @@ +const exports_ = { aaa: 1, bbb: 2 }; +module.exports = exports_; diff --git a/test/cases/parsing/harmony-export-import-specifier/p.js b/test/cases/parsing/harmony-export-import-specifier/p.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/parsing/harmony-export-import-specifier/q.js b/test/cases/parsing/harmony-export-import-specifier/q.js new file mode 100644 index 00000000000..aea63e5b1d8 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/q.js @@ -0,0 +1 @@ +export * from "./o"; diff --git a/test/cases/parsing/harmony-export-import-specifier/side-effect-free/m.js b/test/cases/parsing/harmony-export-import-specifier/side-effect-free/m.js new file mode 100644 index 00000000000..2385ca4646c --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/side-effect-free/m.js @@ -0,0 +1 @@ +export * from "../m"; diff --git a/test/cases/parsing/harmony-export-import-specifier/side-effect-free/o.js b/test/cases/parsing/harmony-export-import-specifier/side-effect-free/o.js new file mode 100644 index 00000000000..9b7e1d2e4c5 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/side-effect-free/o.js @@ -0,0 +1 @@ +export * from "../o"; diff --git a/test/cases/parsing/harmony-export-import-specifier/side-effect-free/package.json b/test/cases/parsing/harmony-export-import-specifier/side-effect-free/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/side-effect-free/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/parsing/harmony-export-import-specifier/some.json b/test/cases/parsing/harmony-export-import-specifier/some.json new file mode 100644 index 00000000000..27ba77ddaf6 --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/some.json @@ -0,0 +1 @@ +true diff --git a/test/cases/parsing/harmony-export-import-specifier/some1.json b/test/cases/parsing/harmony-export-import-specifier/some1.json new file mode 100644 index 00000000000..8d6b85c7b3f --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/some1.json @@ -0,0 +1,3 @@ +{ + "a": 1 +} diff --git a/test/cases/parsing/harmony-export-import-specifier/weird-cjs.js b/test/cases/parsing/harmony-export-import-specifier/weird-cjs.js new file mode 100644 index 00000000000..698bfce670d --- /dev/null +++ b/test/cases/parsing/harmony-export-import-specifier/weird-cjs.js @@ -0,0 +1,7 @@ +exports.__esModule = false; + +function dynamic(exports) { + exports.a = 1; +} + +dynamic(exports); diff --git a/test/cases/parsing/harmony-export-precedence/warnings.js b/test/cases/parsing/harmony-export-precedence/warnings.js index 811dd591edd..f7b6b69e37d 100644 --- a/test/cases/parsing/harmony-export-precedence/warnings.js +++ b/test/cases/parsing/harmony-export-precedence/warnings.js @@ -1,3 +1,7 @@ +"use strict"; + module.exports = [ - [/export 'default' \(imported as 'defaultImport'\) was not found in '.\/a'/] + [ + /export 'default' \(imported as 'defaultImport'\) was not found in '.\/a' \(possible exports: a, b, c, d, e, f\)/ + ] ]; diff --git a/test/cases/parsing/harmony-export-specifier-asi/a.js b/test/cases/parsing/harmony-export-specifier-asi/a.js new file mode 100644 index 00000000000..9549e18a567 --- /dev/null +++ b/test/cases/parsing/harmony-export-specifier-asi/a.js @@ -0,0 +1,3 @@ +export const fn = (num) => { + return num; +}; diff --git a/test/cases/parsing/harmony-export-specifier-asi/index.js b/test/cases/parsing/harmony-export-specifier-asi/index.js new file mode 100644 index 00000000000..3bff5046362 --- /dev/null +++ b/test/cases/parsing/harmony-export-specifier-asi/index.js @@ -0,0 +1,11 @@ +import { fn } from './a.js'; + +const num = 1 + +export { num }; + +fn(num); + +it("should work", function() { + expect(fn(num)).toBe(1); +}); diff --git a/test/cases/parsing/harmony-info/warnings.js b/test/cases/parsing/harmony-info/warnings.js index b64a76b270f..c2a06f603b3 100644 --- a/test/cases/parsing/harmony-info/warnings.js +++ b/test/cases/parsing/harmony-info/warnings.js @@ -1,5 +1,13 @@ +"use strict"; + module.exports = [ - [/export 'default' \(imported as 'def'\) was not found in '\.\/module'/], - [/export 'e' was not found in '\.\/module'/], - [/export 'a' \(imported as 'aa'\) was not found in '\.\/module'/] + [ + /export 'default' \(imported as 'def'\) was not found in '\.\/module' \(possible exports: b, c, d\)/ + ], + [ + /export 'a' \(imported as 'aa'\) was not found in '\.\/module' \(possible exports: b, c, d\)/ + ], + [ + /export 'e' \(imported as 'e'\) was not found in '\.\/module' \(possible exports: b, c, d\)/ + ] ]; diff --git a/test/cases/parsing/harmony-module-optimization/index.js b/test/cases/parsing/harmony-module-optimization/index.js new file mode 100644 index 00000000000..a1c02e23caa --- /dev/null +++ b/test/cases/parsing/harmony-module-optimization/index.js @@ -0,0 +1,8 @@ +import { value as v1, check as c1 } from "./module"; +import { value as v2, check as c2 } from "./module-normal"; + +it("should allow to optimize exports in modules using 'module'", () => { + expect(v1).toBe(42); + expect(v2).toBe(42); + expect(c1).toBe(c2); +}); diff --git a/test/cases/parsing/harmony-module-optimization/module-normal.js b/test/cases/parsing/harmony-module-optimization/module-normal.js new file mode 100644 index 00000000000..75be8e93d58 --- /dev/null +++ b/test/cases/parsing/harmony-module-optimization/module-normal.js @@ -0,0 +1,3 @@ +export const value = 42; +export const unusedValue = 42; +export const check = __webpack_exports_info__.unusedValue.used; diff --git a/test/cases/parsing/harmony-module-optimization/module.js b/test/cases/parsing/harmony-module-optimization/module.js new file mode 100644 index 00000000000..03dbf9857e1 --- /dev/null +++ b/test/cases/parsing/harmony-module-optimization/module.js @@ -0,0 +1,5 @@ +export const value = 42; +export const unusedValue = 42; +export const check = __webpack_exports_info__.unusedValue.used; + +if (Math.random() < 0) console.log(module.exports); diff --git a/test/cases/parsing/harmony-reexport/a.js b/test/cases/parsing/harmony-reexport/a.js new file mode 100644 index 00000000000..9b794cf0f1a --- /dev/null +++ b/test/cases/parsing/harmony-reexport/a.js @@ -0,0 +1,11 @@ +import { b } from "./b"; + +export function a() { + return b(); +} +export const obj = {}; +export const aUsed = __webpack_exports_info__.a.used; +export const aProvided = __webpack_exports_info__.a.provideInfo; +export const objUsed = __webpack_exports_info__.obj.used; +export const objAProvided = __webpack_exports_info__.obj.A.provideInfo; +export const aToStringProvided = __webpack_exports_info__.a.toString.provideInfo; diff --git a/test/cases/parsing/harmony-reexport/b.js b/test/cases/parsing/harmony-reexport/b.js new file mode 100644 index 00000000000..7554fde97b5 --- /dev/null +++ b/test/cases/parsing/harmony-reexport/b.js @@ -0,0 +1 @@ +export function b() {} diff --git a/test/cases/parsing/harmony-reexport/empty.js b/test/cases/parsing/harmony-reexport/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/parsing/harmony-reexport/index.js b/test/cases/parsing/harmony-reexport/index.js new file mode 100644 index 00000000000..28837e5f54a --- /dev/null +++ b/test/cases/parsing/harmony-reexport/index.js @@ -0,0 +1,12 @@ +import { a, aUsed, aCanBeMangled, aProvided, aToStringProvided, obj, objUsed, objAProvided } from "./reexport"; + +if (a()) console.log("a", obj); + +it("should not allow mangle if some exports are unknown", () => { + expect(aUsed).toBe(true); + expect(aProvided).toBe(true); + expect(aCanBeMangled).toBe(false); + expect(objUsed).toBe(true); + expect(objAProvided).toBe(undefined); + expect(aToStringProvided).toBe(undefined); +}); diff --git a/test/cases/parsing/harmony-reexport/reexport.js b/test/cases/parsing/harmony-reexport/reexport.js new file mode 100644 index 00000000000..648d898edc8 --- /dev/null +++ b/test/cases/parsing/harmony-reexport/reexport.js @@ -0,0 +1,3 @@ +export * from "./a"; +export * from "./empty"; +export const aCanBeMangled = __webpack_exports_info__.a.canMangle; diff --git a/test/cases/parsing/harmony-star-conflict/index.js b/test/cases/parsing/harmony-star-conflict/index.js new file mode 100644 index 00000000000..b3d2c53fb64 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/index.js @@ -0,0 +1,41 @@ +import { + named1, + named2, + named3, + named4, + named5, + named6 +} from "./named-with-namespace"; + +it("should point out conflicts from named to namespace", () => { + expect(named1).toBe(1); + expect(named2).toBe(2); + expect(named3).toBe(2); + expect(named4).toMatchObject({ + named1: 1, + named2: 2 + }); + expect(named5).toBe(5); + expect(named6).toBe(1); +}); + +import { + named1 as snamed1, + named2 as snamed2, + named3 as snamed3, + named4 as snamed4, + named5 as snamed5, + named6 as snamed6 +} from "./named-with-namespace-no-side"; + +it("should point out conflicts from named to namespace (without side effects)", () => { + expect(snamed1).toBe(1); + expect(snamed2).toBe(2); + expect(snamed3).toBe(2); + expect(snamed4).toMatchObject({ + named1: 1, + named2: 2 + }); + expect(snamed5).toBe(5); + expect(snamed6).toBe(1); +}); diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/a.js b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/a.js new file mode 100644 index 00000000000..9ef3ca2f0b6 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/a.js @@ -0,0 +1,6 @@ +export const named1 = 1; +export const named2 = 2; +export { named2 as named3 } from "./a.js"; +export * as named4 from "./a.js"; +export const named5 = 5; +export { named1 as named6 } from "./a.js"; diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/b.js b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/b.js new file mode 100644 index 00000000000..813c9f37cd1 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/b.js @@ -0,0 +1,6 @@ +export * as named1 from "./a.js"; +export { named1 as named2 } from "./a.js"; +export { named1 as named3 } from "./a.js"; +export * as named4 from "./a.js"; +export { named5 } from "./a.js"; +export { named1 as named6 } from "./a.js"; diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/index.js b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/index.js new file mode 100644 index 00000000000..240b21dc43f --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/index.js @@ -0,0 +1,2 @@ +export * from "./a.js"; +export * from "./b.js"; diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/package.json b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/package.json new file mode 100644 index 00000000000..43c38c1bb03 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace-no-side/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace/a.js b/test/cases/parsing/harmony-star-conflict/named-with-namespace/a.js new file mode 100644 index 00000000000..9ef3ca2f0b6 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace/a.js @@ -0,0 +1,6 @@ +export const named1 = 1; +export const named2 = 2; +export { named2 as named3 } from "./a.js"; +export * as named4 from "./a.js"; +export const named5 = 5; +export { named1 as named6 } from "./a.js"; diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace/b.js b/test/cases/parsing/harmony-star-conflict/named-with-namespace/b.js new file mode 100644 index 00000000000..813c9f37cd1 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace/b.js @@ -0,0 +1,6 @@ +export * as named1 from "./a.js"; +export { named1 as named2 } from "./a.js"; +export { named1 as named3 } from "./a.js"; +export * as named4 from "./a.js"; +export { named5 } from "./a.js"; +export { named1 as named6 } from "./a.js"; diff --git a/test/cases/parsing/harmony-star-conflict/named-with-namespace/index.js b/test/cases/parsing/harmony-star-conflict/named-with-namespace/index.js new file mode 100644 index 00000000000..240b21dc43f --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/named-with-namespace/index.js @@ -0,0 +1,2 @@ +export * from "./a.js"; +export * from "./b.js"; diff --git a/test/cases/parsing/harmony-star-conflict/warnings.js b/test/cases/parsing/harmony-star-conflict/warnings.js new file mode 100644 index 00000000000..d9609338477 --- /dev/null +++ b/test/cases/parsing/harmony-star-conflict/warnings.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = [ + [ + /conflicting star exports/, + /names 'named1', 'named2', 'named3' /, + /\.\/a\.js/, + /\.\/b\.js/ + ], + [ + /conflicting star exports/, + /names 'named1', 'named2', 'named3' /, + /\.\/a\.js/, + /\.\/b\.js/ + ] +]; diff --git a/test/cases/parsing/harmony-tdz/index.js b/test/cases/parsing/harmony-tdz/index.js index 0f2ef06aa98..5459cb4216e 100644 --- a/test/cases/parsing/harmony-tdz/index.js +++ b/test/cases/parsing/harmony-tdz/index.js @@ -1,8 +1,10 @@ import value, { exception } from "./module"; -it("should have a TDZ for exported const values", function() { - expect((typeof exception)).toBe("object"); +it("should have a TDZ for exported const values", () => { + expect(typeof exception).toBe("object"); expect(exception).toBeInstanceOf(Error); - expect(exception.message).toMatch(/ is not defined$/); + expect(exception.message).toMatch( + / is not defined$|^Cannot access '.+?' before initialization$/ + ); expect(value).toBe("value"); }); diff --git a/test/cases/parsing/harmony-tdz/test.filter.js b/test/cases/parsing/harmony-tdz/test.filter.js index 6bc6a7f95c8..c814a32de48 100644 --- a/test/cases/parsing/harmony-tdz/test.filter.js +++ b/test/cases/parsing/harmony-tdz/test.filter.js @@ -1,5 +1,5 @@ -var supportsBlockScoping = require("../../../helpers/supportsBlockScoping"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsBlockScoping(); -}; +const supportsBlockScoping = require("../../../helpers/supportsBlockScoping"); + +module.exports = () => supportsBlockScoping(); diff --git a/test/cases/parsing/harmony-this/abc.js b/test/cases/parsing/harmony-this/abc.js index f9d8733a270..5fb1b87da74 100644 --- a/test/cases/parsing/harmony-this/abc.js +++ b/test/cases/parsing/harmony-this/abc.js @@ -1,14 +1,11 @@ function returnThis() { - if(typeof this === "undefined") return "undefined"; - return this; + if (typeof this === "undefined") return expect("undefined"); + return expect(this); } var a = returnThis; var b = returnThis; -export { - a, - b -} +export { a, b }; export default returnThis; diff --git a/test/cases/parsing/harmony-this/index.js b/test/cases/parsing/harmony-this/index.js index 0f350bd05db..9e28698ced7 100644 --- a/test/cases/parsing/harmony-this/index.js +++ b/test/cases/parsing/harmony-this/index.js @@ -1,28 +1,28 @@ -"use strict"; +"use strict" -import d, {a, b as B} from "./abc"; +import d, {a, b as B} from "./abc" -import * as abc from "./abc"; +import * as abc from "./abc" function x() { throw new Error("should not be executed"); } it("should have this = undefined on imported non-strict functions", function() { + if(true) x + d().toBe("undefined") x - expect(d()).toBe("undefined"); + a().toBe("undefined") x - expect(a()).toBe("undefined"); - x - expect(B()).toBe("undefined"); -}); + B().toBe("undefined") +}) -import C2, { C } from "./new"; +import C2, { C } from "./new" -import * as New from "./new"; +import * as New from "./new" it("should be possible to use new correctly", function() { x - expect(new C()).toEqual({ok: true}); + new C().ok.toEqual(true) x - expect(new C2()).toEqual({ok: true}); + new C2().ok.toEqual(true) x - expect(new New.C()).toEqual({ok: true}); -}); + new New.C().ok.toEqual(true) +}) diff --git a/test/cases/parsing/harmony-this/new.js b/test/cases/parsing/harmony-this/new.js index 8fe7ff7fbee..42027c3e1dd 100644 --- a/test/cases/parsing/harmony-this/new.js +++ b/test/cases/parsing/harmony-this/new.js @@ -1,10 +1,8 @@ function C() { - this.ok = this.pok; + this.ok = expect(this.pok); } C.prototype.pok = true; export default C; -export { - C -}; +export { C }; diff --git a/test/cases/parsing/harmony/index.js b/test/cases/parsing/harmony/index.js index 2989113bc91..e34e9d4b84d 100644 --- a/test/cases/parsing/harmony/index.js +++ b/test/cases/parsing/harmony/index.js @@ -89,10 +89,13 @@ it("should be able to import commonjs", function() { function x() { throw new Error("should not be executed"); } // next line doesn't end with semicolon x + Thing expect(Thing).toBeTypeOf("function"); x + Thing() expect(Thing()).toBe("thing"); x + Other expect(Other).toBe("other"); expect(Thing2).toBeTypeOf("function"); diff --git a/test/cases/parsing/hashbang/file.js b/test/cases/parsing/hashbang/file.js new file mode 100644 index 00000000000..2866673b1ee --- /dev/null +++ b/test/cases/parsing/hashbang/file.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +module.exports = "ok"; diff --git a/test/cases/parsing/hashbang/file.mjs b/test/cases/parsing/hashbang/file.mjs new file mode 100644 index 00000000000..97e357ad75e --- /dev/null +++ b/test/cases/parsing/hashbang/file.mjs @@ -0,0 +1,2 @@ +#!/usr/bin/env node +export default "ok"; diff --git a/test/cases/parsing/hashbang/index.js b/test/cases/parsing/hashbang/index.js new file mode 100644 index 00000000000..f4bb6745333 --- /dev/null +++ b/test/cases/parsing/hashbang/index.js @@ -0,0 +1,9 @@ +it("should load a file with hashbang", function () { + var result = require("./file.js"); + expect(result).toEqual("ok"); +}); + +import result from "./file.mjs"; +it("should load a module with hashbang", function () { + expect(result).toEqual("ok"); +}); diff --git a/test/cases/parsing/iife/a.js b/test/cases/parsing/iife/a.js new file mode 100644 index 00000000000..e4430e40aa4 --- /dev/null +++ b/test/cases/parsing/iife/a.js @@ -0,0 +1,4 @@ +export let a = 1e3; + +export function b() { a = 1e2 } +export function c() { a = 1e1 } diff --git a/test/cases/parsing/iife/index.js b/test/cases/parsing/iife/index.js new file mode 100644 index 00000000000..7c46e1bff76 --- /dev/null +++ b/test/cases/parsing/iife/index.js @@ -0,0 +1,10 @@ +import { a } from './a'; +import { track1, track2 } from './side-effect-call'; + +it("should parse params", () => { + expect(a).toBe(1000); + track1(); + expect(a).toBe(100); + track2(); + expect(a).toBe(10); +}); diff --git a/test/cases/parsing/iife/side-effect-call.js b/test/cases/parsing/iife/side-effect-call.js new file mode 100644 index 00000000000..08bef1211ae --- /dev/null +++ b/test/cases/parsing/iife/side-effect-call.js @@ -0,0 +1,9 @@ +import { b, c } from './a' + +export function track1() { + (function (a = b()) {})() +} + +export function track2() { + ((a = c()) => {})() +} diff --git a/test/cases/parsing/iife/test.filter.js b/test/cases/parsing/iife/test.filter.js new file mode 100644 index 00000000000..28f2f5414c9 --- /dev/null +++ b/test/cases/parsing/iife/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = (config) => + // TODO fails due to minimizer bug: https://github.com/terser/terser/issues/880 + !config.minimize; diff --git a/test/cases/parsing/import-define/index.js b/test/cases/parsing/import-define/index.js new file mode 100644 index 00000000000..10db43f27d5 --- /dev/null +++ b/test/cases/parsing/import-define/index.js @@ -0,0 +1,12 @@ +import define from "./module"; + +const i = x => x; + +it("should allow to import a variable named define (call)", () => { + expect(define()).toBe("ok"); +}); + +it("should allow to import a variable named define (expression)", () => { + const d = i(define); + expect(d()).toBe("ok"); +}); diff --git a/test/cases/parsing/import-define/module.js b/test/cases/parsing/import-define/module.js new file mode 100644 index 00000000000..4d12cdeea55 --- /dev/null +++ b/test/cases/parsing/import-define/module.js @@ -0,0 +1,3 @@ +export const define = () => "ok"; + +export { define as default }; diff --git a/test/cases/parsing/import-meta/index.js b/test/cases/parsing/import-meta/index.js new file mode 100644 index 00000000000..2e70140a726 --- /dev/null +++ b/test/cases/parsing/import-meta/index.js @@ -0,0 +1,59 @@ +const { pathToFileURL } = require("url"); +const url = pathToFileURL( + require("path").resolve("./test/cases/parsing/import-meta/index.js") +).toString(); +const webpackVersion = parseInt( + require("../../../../package.json").version, + 10 +); + +it('typeof import.meta === "object"', () => { + expect(typeof import.meta).toBe("object"); + if (typeof import.meta !== "object") require("fail"); +}); + +it('typeof import.meta.url === "string"', () => { + expect(typeof import.meta.url).toBe("string"); + if (typeof import.meta.url !== "string") require("fail"); +}); + +it('typeof import.meta.webpack === "number"', () => { + expect(typeof import.meta.webpack).toBe("number"); + if (typeof import.meta.webpack !== "number") require("fail"); +}); + +it("should return correct import.meta.url", () => { + expect(import.meta.url).toBe(url); + expect(import.meta["url"]).toBe(url); + expect("my" + import.meta.url).toBe("my" + url); + if (import.meta.url.indexOf("index.js") === -1) require("fail"); +}); + +it("should return correct import.meta.webpack", () => { + expect(import.meta.webpack).toBe(webpackVersion); + if (import.meta.webpack < 5) require("fail"); + if (import.meta.webpack >= 5) { + } else { + require("fail"); + } +}); + +it("should return undefined for unknown property", () => { + expect(import.meta.other).toBe(undefined); + if (typeof import.meta.other !== "undefined") require("fail"); + expect(() => import.meta.other.other.other).toThrow(); +}); + +it("should support destructuring assignment", async () => { + let version, url2, c; + ({ webpack: version } = { url: url2 } = { c } = import.meta); + expect(version).toBeTypeOf("number"); + expect(url2).toBe(url); + expect(c).toBe(undefined); + + let version2, url3, d; + ({ webpack: version2 } = await ({ url: url3 } = ({ d } = await import.meta))); + expect(version2).toBeTypeOf("number"); + expect(url3).toBe(url); + expect(d).toBe(undefined); +}); \ No newline at end of file diff --git a/test/cases/parsing/import-meta/test.filter.js b/test/cases/parsing/import-meta/test.filter.js new file mode 100644 index 00000000000..7b29ebe0054 --- /dev/null +++ b/test/cases/parsing/import-meta/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = (config) => !config.module || supportsRequireInModule(); diff --git a/test/cases/parsing/import-meta/warnings.js b/test/cases/parsing/import-meta/warnings.js new file mode 100644 index 00000000000..d939a31c3bf --- /dev/null +++ b/test/cases/parsing/import-meta/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = []; diff --git a/test/cases/parsing/inject-free-vars/fail.js b/test/cases/parsing/inject-free-vars/fail.js deleted file mode 100644 index 3d566b49076..00000000000 --- a/test/cases/parsing/inject-free-vars/fail.js +++ /dev/null @@ -1 +0,0 @@ -throw new Error("Fail"); \ No newline at end of file diff --git a/test/cases/parsing/inject-free-vars/index.js b/test/cases/parsing/inject-free-vars/index.js deleted file mode 100644 index 043b3e4f38d..00000000000 --- a/test/cases/parsing/inject-free-vars/index.js +++ /dev/null @@ -1,18 +0,0 @@ -it("should inject the module object into a chunk (AMD1)", function(done) { - require([], function() { - expect(module.webpackPolyfill).toBe(1); - done(); - }); -}); - -it("should inject the module object into a chunk (AMD2)", function() { - require([module.webpackPolyfill ? "./x1" : "./fail"]); - expect(module.webpackPolyfill).toBe(1); -}); - -it("should inject the module object into a chunk (ensure)", function(done) { - require.ensure([], function(require) { - expect(module.webpackPolyfill).toBe(1); - done(); - }); -}); diff --git a/test/cases/parsing/issue-11283/A.js b/test/cases/parsing/issue-11283/A.js new file mode 100644 index 00000000000..0ff2171d4c7 --- /dev/null +++ b/test/cases/parsing/issue-11283/A.js @@ -0,0 +1 @@ +export default "B"; diff --git a/test/cases/parsing/issue-11283/index.js b/test/cases/parsing/issue-11283/index.js new file mode 100644 index 00000000000..2aef188b65c --- /dev/null +++ b/test/cases/parsing/issue-11283/index.js @@ -0,0 +1,36 @@ +import A from "./A.js"; + +function magicA() { + // To be sure that future optimization + // will not affect test suite + return String.fromCharCode(65); +} + +it("should parse switch case properly", () => { + switch (1) { + case 2: + case 1: + const A = magicA(); + expect(A).toBe("A"); + break; + } + + switch (1) { + case 2: + case 1: { + const A = magicA(); + expect(A).toBe("A"); + break; + } + } +}); + +it("should share block scope for several cases", () => { + switch (1) { + case 1: + const A = magicA(); + case 2: + expect(A).toBe("A"); + break; + } +}); diff --git a/test/cases/parsing/issue-11353/async_generator_function.js b/test/cases/parsing/issue-11353/async_generator_function.js new file mode 100644 index 00000000000..e89057560e0 --- /dev/null +++ b/test/cases/parsing/issue-11353/async_generator_function.js @@ -0,0 +1,10 @@ +"use strict"; + +export default async function* asyncIdMaker(start = 1, end = 5){ + for (let i = start; i <= end; i++) { + + await new Promise(resolve => setTimeout(resolve, 1000)); + + yield i; + } +} diff --git a/test/cases/parsing/issue-11353/generator_function.js b/test/cases/parsing/issue-11353/generator_function.js new file mode 100644 index 00000000000..d257e83f99f --- /dev/null +++ b/test/cases/parsing/issue-11353/generator_function.js @@ -0,0 +1,7 @@ +"use strict"; + +export default function* idMaker(){ + var index = 0; + while(true) + yield index++; +} diff --git a/test/cases/parsing/issue-11353/index.js b/test/cases/parsing/issue-11353/index.js new file mode 100644 index 00000000000..07c01372a59 --- /dev/null +++ b/test/cases/parsing/issue-11353/index.js @@ -0,0 +1,36 @@ +"use strict"; + +import generator from "./generator_function.js"; +import asyncGenerator from "./async_generator_function"; + +it('should correctly import generator function', () => { + expect(typeof generator).toBe("function"); +}); + +it('should correctly build the correct function string', () => { + expect(generator.toString().indexOf('function*')).toBe(0); // 0 +}); + +it('should correctly provide the generator function interface', () => { + let gen = generator(); + expect(gen.next().value).toBe(0); + expect(gen.next().value).toBe(1); + expect(gen.next().value).toBe(2); +}); + +it('should correctly import async generator function', () => { + expect(typeof asyncGenerator).toBe("function"); +}); + +it('should correctly build the correct async function string', () => { + expect(asyncGenerator.toString().indexOf('async function*')).toBe(0); +}); + +it('should correctly provide the async generator function interface', async () => { + let gen = asyncGenerator(1, 5); + let start = 0; + for await (let value of gen) { + start += 1; + expect(value).toBe(start); + } +}); diff --git a/test/cases/parsing/issue-12769/index.js b/test/cases/parsing/issue-12769/index.js new file mode 100644 index 00000000000..54b864932b5 --- /dev/null +++ b/test/cases/parsing/issue-12769/index.js @@ -0,0 +1,19 @@ +import value from "./module"; +import { func } from "./other"; + +function F({ value2 = value }) { + expect(value2).toBe(42); +} + +it("should not apply shorthand code in default values", () => { + const { value2 = value } = {}; + expect(value2).toBe(42); + (function ({ value3 = value }) { + expect(value3).toBe(42); + })({}); + function F({ value3 = value }) { + expect(value3).toBe(42); + } + F({}); + expect(func({})).toBe(2); +}); diff --git a/test/cases/parsing/issue-12769/module.js b/test/cases/parsing/issue-12769/module.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/parsing/issue-12769/module.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/parsing/issue-12769/other.js b/test/cases/parsing/issue-12769/other.js new file mode 100644 index 00000000000..17cac3da8bb --- /dev/null +++ b/test/cases/parsing/issue-12769/other.js @@ -0,0 +1,7 @@ +var value = 2; + +export function func({ value2 = value }) { + return value2; +} + +console.log.bind(console, value); diff --git a/test/cases/parsing/issue-14610/index.js b/test/cases/parsing/issue-14610/index.js new file mode 100644 index 00000000000..bdbeb6fbdc2 --- /dev/null +++ b/test/cases/parsing/issue-14610/index.js @@ -0,0 +1,4 @@ +it("should keep parentheses when replacing", () => { + // prettier-ignore + expect(new (require("./module")).Thing(42).property).toBe(42) +}); diff --git a/test/cases/parsing/issue-14610/module.js b/test/cases/parsing/issue-14610/module.js new file mode 100644 index 00000000000..d532367112a --- /dev/null +++ b/test/cases/parsing/issue-14610/module.js @@ -0,0 +1,5 @@ +export class Thing { + constructor(p) { + this.property = p; + } +} diff --git a/test/cases/parsing/issue-16763/a.js b/test/cases/parsing/issue-16763/a.js new file mode 100644 index 00000000000..cc798ff50da --- /dev/null +++ b/test/cases/parsing/issue-16763/a.js @@ -0,0 +1 @@ +export const a = 1; diff --git a/test/cases/parsing/issue-16763/class.js b/test/cases/parsing/issue-16763/class.js new file mode 100644 index 00000000000..4f5ed245709 --- /dev/null +++ b/test/cases/parsing/issue-16763/class.js @@ -0,0 +1,82 @@ +import { a as C, a as B } from "./a.js"; + +let staticBlockValue; +let staticPrivateBlockValue; +let valueInStaticBlock; +let staticPrivateMethod; +let staticThis; + +let A = class C { + static name = "test"; + + otherName = C.name; + #privateName = C.name; + propertyB = B; + #propertyB = B; + + static otherName = C.name; + static #staticPrivateName = C.name; + static staticB = B; + static #staticB = B; + static #this = this; + static #thisAndC = C.#this; + + #privateMethod() { + return { privateName: this.#privateName, B } + } + publicMethod() { + const privateMethod = this.#privateMethod(); + + return { B, privateMethod, propertyB: this.propertyB, privatePropertyB: this.#propertyB } + } + test() { + return { className: C.name, propertyValue: this.otherName }; + } + static test() { + return C.name; + } + static getB() { + return B; + } + static #staticPrivateMethod() { + return { + staticB: this.staticB, + privateStaticB: this.#staticB, + B + }; + } + static { + staticBlockValue = C.name; + staticPrivateBlockValue = C.#staticPrivateName; + valueInStaticBlock = B; + staticPrivateMethod = C.#staticPrivateMethod(); + staticThis = C.#thisAndC; + } +}; + + +const b = function C() { + return C.name; +} + +const staticProperty = A.otherName; +const staticMethod = A.test(); +const staticB = A.getB(); +const method = new A().test(); +const publicMethod = new A().publicMethod(); +const reexport = C; +const functionName = b(); + +export { + staticBlockValue, + staticProperty, + staticMethod, + reexport, + method, + functionName, + publicMethod, + valueInStaticBlock, + staticB, + staticPrivateMethod, + staticThis +}; diff --git a/test/cases/parsing/issue-16763/index.js b/test/cases/parsing/issue-16763/index.js new file mode 100644 index 00000000000..1ca4c16d620 --- /dev/null +++ b/test/cases/parsing/issue-16763/index.js @@ -0,0 +1,22 @@ +import * as mod from "./class.js"; + +it('should correctly handle class methods and properties (include static)', () => { + expect(mod.staticBlockValue).toBe("test"); + expect(mod.staticProperty).toBe("test"); + expect(mod.staticMethod).toBe("test"); + expect(mod.reexport).toBe(1); + expect(mod.method.className).toBe("test"); + expect(mod.method.propertyValue).toBe("test"); + expect(typeof mod.functionName).toBe("string"); + expect(mod.publicMethod.B).toBe(1); + expect(mod.publicMethod.propertyB).toBe(1); + expect(mod.publicMethod.privatePropertyB).toBe(1); + expect(mod.publicMethod.privateMethod.privateName).toBe("test"); + expect(mod.publicMethod.privateMethod.B).toBe(1); + expect(mod.valueInStaticBlock).toBe(1); + expect(mod.staticB).toBe(1); + expect(mod.staticPrivateMethod.B).toBe(1); + expect(mod.staticPrivateMethod.staticB).toBe(1); + expect(mod.staticPrivateMethod.privateStaticB).toBe(1); + expect(mod.staticThis.name).toBe("test"); +}); diff --git a/test/cases/parsing/issue-16763/test.filter.js b/test/cases/parsing/issue-16763/test.filter.js new file mode 100644 index 00000000000..ac4f784e281 --- /dev/null +++ b/test/cases/parsing/issue-16763/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassStaticBlock = require("../../../helpers/supportsClassStaticBlock"); + +module.exports = () => supportsClassStaticBlock(); diff --git a/test/cases/parsing/issue-17189/index.js b/test/cases/parsing/issue-17189/index.js new file mode 100644 index 00000000000..15775cc183a --- /dev/null +++ b/test/cases/parsing/issue-17189/index.js @@ -0,0 +1,15 @@ +import module from "./module.js"; + +it("should parse sparse arrays", function() { + var { + a, + ...other1 + } = module; + var { + b, + ...other2 + } = module; + + expect(other1).toEqual({ b: 2, c: 3 }); + expect(other2).toEqual({ a: 1, c: 3 }); +}); diff --git a/test/cases/parsing/issue-17189/module.js b/test/cases/parsing/issue-17189/module.js new file mode 100644 index 00000000000..5831362066a --- /dev/null +++ b/test/cases/parsing/issue-17189/module.js @@ -0,0 +1,6 @@ +var test = { + a: 1, + b: 2, + c: 3 +}; +export default test; diff --git a/test/cases/parsing/issue-2006/errors.js b/test/cases/parsing/issue-2006/errors.js index 7936b2e9d73..5d92e84e2c0 100644 --- a/test/cases/parsing/issue-2006/errors.js +++ b/test/cases/parsing/issue-2006/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Empty dependency/] -]; \ No newline at end of file +"use strict"; + +module.exports = [[/Empty dependency/]]; diff --git a/test/cases/parsing/issue-2050/index.js b/test/cases/parsing/issue-2050/index.js index 4c28c4bac3e..6b05b3d8066 100644 --- a/test/cases/parsing/issue-2050/index.js +++ b/test/cases/parsing/issue-2050/index.js @@ -1,9 +1,8 @@ it("should support multiple reexports", function() { - expect(require("./x")).toEqual({ + expect(require("./x")).toEqual(nsObj({ xa: "a", xb: "b", xc: "c", - xd: "d", - [Symbol.toStringTag]: "Module" - }); + xd: "d" + })); }); diff --git a/test/cases/parsing/issue-2522/index.js b/test/cases/parsing/issue-2522/index.js index a727d989f25..e28c668496e 100644 --- a/test/cases/parsing/issue-2522/index.js +++ b/test/cases/parsing/issue-2522/index.js @@ -13,10 +13,9 @@ it("should import into object shorthand", function() { a: 123, aa: 123, b: 456, - c: { + c: nsObj({ a: 123, - default: 456, - [Symbol.toStringTag]: "Module" - } + default: 456 + }) }); }) diff --git a/test/cases/parsing/issue-2522/test.filter.js b/test/cases/parsing/issue-2522/test.filter.js index b4b5c42560c..e6814dfde4b 100644 --- a/test/cases/parsing/issue-2522/test.filter.js +++ b/test/cases/parsing/issue-2522/test.filter.js @@ -1,5 +1,5 @@ -var supportsES6 = require("../../../helpers/supportsES6"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsES6(); -}; +const supportsES6 = require("../../../helpers/supportsES6"); + +module.exports = () => supportsES6(); diff --git a/test/cases/parsing/issue-2523/test.filter.js b/test/cases/parsing/issue-2523/test.filter.js index b4b5c42560c..e6814dfde4b 100644 --- a/test/cases/parsing/issue-2523/test.filter.js +++ b/test/cases/parsing/issue-2523/test.filter.js @@ -1,5 +1,5 @@ -var supportsES6 = require("../../../helpers/supportsES6"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsES6(); -}; +const supportsES6 = require("../../../helpers/supportsES6"); + +module.exports = () => supportsES6(); diff --git a/test/cases/parsing/issue-2600/errors.js b/test/cases/parsing/issue-2600/errors.js index 8894d7a69d5..84a3e56f402 100644 --- a/test/cases/parsing/issue-2600/errors.js +++ b/test/cases/parsing/issue-2600/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Can't resolve 'missing'/] -]; \ No newline at end of file +"use strict"; + +module.exports = [[/Can't resolve 'missing'/]]; diff --git a/test/cases/parsing/issue-2618/test.filter.js b/test/cases/parsing/issue-2618/test.filter.js index b4b5c42560c..e6814dfde4b 100644 --- a/test/cases/parsing/issue-2618/test.filter.js +++ b/test/cases/parsing/issue-2618/test.filter.js @@ -1,5 +1,5 @@ -var supportsES6 = require("../../../helpers/supportsES6"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsES6(); -}; +const supportsES6 = require("../../../helpers/supportsES6"); + +module.exports = () => supportsES6(); diff --git a/test/cases/parsing/issue-2622/test.filter.js b/test/cases/parsing/issue-2622/test.filter.js index 92bb3f5232a..c149008f996 100644 --- a/test/cases/parsing/issue-2622/test.filter.js +++ b/test/cases/parsing/issue-2622/test.filter.js @@ -1,5 +1,5 @@ -var supportsDefaultArgs = require("../../../helpers/supportsDefaultArgs"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsDefaultArgs(); -}; +const supportsDefaultArgs = require("../../../helpers/supportsDefaultArgs"); + +module.exports = () => supportsDefaultArgs(); diff --git a/test/cases/parsing/issue-2641/errors.js b/test/cases/parsing/issue-2641/errors.js index 01d80f2952d..ec7564051dd 100644 --- a/test/cases/parsing/issue-2641/errors.js +++ b/test/cases/parsing/issue-2641/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Module not found/, /Can't resolve '\.\/missingModule' /] -]; +"use strict"; + +module.exports = [[/Module not found/, /Can't resolve '\.\/missingModule' /]]; diff --git a/test/cases/parsing/issue-2895/test.filter.js b/test/cases/parsing/issue-2895/test.filter.js index 6bc6a7f95c8..c814a32de48 100644 --- a/test/cases/parsing/issue-2895/test.filter.js +++ b/test/cases/parsing/issue-2895/test.filter.js @@ -1,5 +1,5 @@ -var supportsBlockScoping = require("../../../helpers/supportsBlockScoping"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsBlockScoping(); -}; +const supportsBlockScoping = require("../../../helpers/supportsBlockScoping"); + +module.exports = () => supportsBlockScoping(); diff --git a/test/cases/parsing/issue-2942/warnings.js b/test/cases/parsing/issue-2942/warnings.js deleted file mode 100644 index 217c81ed03a..00000000000 --- a/test/cases/parsing/issue-2942/warnings.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = [ - [/System.register is not supported by webpack/], - [/System.get is not supported by webpack/], - [/System.set is not supported by webpack/], -]; diff --git a/test/cases/parsing/issue-3238/test.filter.js b/test/cases/parsing/issue-3238/test.filter.js index 1f395fdc059..2141d5ffd60 100644 --- a/test/cases/parsing/issue-3238/test.filter.js +++ b/test/cases/parsing/issue-3238/test.filter.js @@ -1,5 +1,5 @@ -var supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsIteratorDestructuring(); -}; +const supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); + +module.exports = () => supportsIteratorDestructuring(); diff --git a/test/cases/parsing/issue-3252/test.filter.js b/test/cases/parsing/issue-3252/test.filter.js index e0de5a3709a..d502775c6a0 100644 --- a/test/cases/parsing/issue-3252/test.filter.js +++ b/test/cases/parsing/issue-3252/test.filter.js @@ -1,5 +1,5 @@ -var supportsDefaultAssignment = require("../../../helpers/supportDefaultAssignment"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsDefaultAssignment(); -}; +const supportsDefaultAssignment = require("../../../helpers/supportDefaultAssignment"); + +module.exports = () => supportsDefaultAssignment(); diff --git a/test/cases/parsing/issue-3273/test.filter.js b/test/cases/parsing/issue-3273/test.filter.js index 8f3d0bdcdb2..bf36294789c 100644 --- a/test/cases/parsing/issue-3273/test.filter.js +++ b/test/cases/parsing/issue-3273/test.filter.js @@ -1,6 +1,7 @@ -var supportsDefaultAssignment = require("../../../helpers/supportDefaultAssignment"); -var supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsDefaultAssignment() && supportsObjectDestructuring(); -}; +const supportsDefaultAssignment = require("../../../helpers/supportDefaultAssignment"); +const supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); + +module.exports = () => + supportsDefaultAssignment() && supportsObjectDestructuring(); diff --git a/test/cases/parsing/issue-3964/index.js b/test/cases/parsing/issue-3964/index.js index 9671c573578..f5765f4be7f 100644 --- a/test/cases/parsing/issue-3964/index.js +++ b/test/cases/parsing/issue-3964/index.js @@ -1,4 +1,4 @@ it("should be possible to export default an imported name", function() { var x = require("./module"); - expect(x).toEqual({ default: 1234, [Symbol.toStringTag]: "Module" }); + expect(x).toEqual(nsObj({ default: 1234 })); }); diff --git a/test/cases/parsing/issue-4179/index.js b/test/cases/parsing/issue-4179/index.js index 475b9e1ee1e..ff5224b2338 100644 --- a/test/cases/parsing/issue-4179/index.js +++ b/test/cases/parsing/issue-4179/index.js @@ -2,7 +2,7 @@ import def from "./module?harmony"; import * as mod from "./module?harmony-start" it("should export a sequence expression correctly", function() { - expect(require("./module?cjs")).toEqual({ default: 2, [Symbol.toStringTag]: "Module" }); + expect(require("./module?cjs")).toEqual(nsObj({ default: 2 })); expect(def).toBe(2); expect(mod.default).toBe(2); }); diff --git a/test/cases/parsing/issue-4357/test.filter.js b/test/cases/parsing/issue-4357/test.filter.js index 1593528b3bc..a3efcdbae4a 100644 --- a/test/cases/parsing/issue-4357/test.filter.js +++ b/test/cases/parsing/issue-4357/test.filter.js @@ -1,6 +1,7 @@ -var supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); -var supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsIteratorDestructuring() && supportsObjectDestructuring(); -}; +const supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); +const supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); + +module.exports = () => + supportsIteratorDestructuring() && supportsObjectDestructuring(); diff --git a/test/cases/parsing/issue-4608-1-non-strict/index.js b/test/cases/parsing/issue-4608-1-non-strict/index.js new file mode 100644 index 00000000000..8ccf3291498 --- /dev/null +++ b/test/cases/parsing/issue-4608-1-non-strict/index.js @@ -0,0 +1,31 @@ +it("should find var declaration in control statements", function () { + var f = function (x) { + expect(x).toBe("fail"); + }; + + (function () { + with ({ a: 1 }) { + var require = f; + } + + require("fail"); + })(); +}); + +it("should find var declaration in control statements after usage", function () { + var f = function (x) { + expect(x).toBe("fail"); + }; + + (function () { + var test = function () { + require("fail"); + }; + + with ({ a: 1 }) { + var require = f; + } + + test(); + })(); +}); diff --git a/test/cases/parsing/issue-4608-1-non-strict/test.filter.js b/test/cases/parsing/issue-4608-1-non-strict/test.filter.js new file mode 100644 index 00000000000..49d755d43bb --- /dev/null +++ b/test/cases/parsing/issue-4608-1-non-strict/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => !config.module; diff --git a/test/cases/parsing/issue-4608-1/index.js b/test/cases/parsing/issue-4608-1/index.js index 760ccdba7ce..181f01499a7 100644 --- a/test/cases/parsing/issue-4608-1/index.js +++ b/test/cases/parsing/issue-4608-1/index.js @@ -1,149 +1,142 @@ -it("should find var declaration later in code", function() { - expect((typeof require)).toBe("undefined"); +it("should find var declaration later in code", function () { + expect(typeof require).toBe("undefined"); var require; }); -it("should find var declaration in same statement", function() { - var fn = (function() { - require("fail"); - }), require; +it("should find var declaration in same statement", function () { + var fn = function () { + require("fail"); + }, + require; - require = (function(x) { + require = function (x) { expect(x).toBe("fail"); - }); + }; fn(); }); -it("should find a catch block declaration", function() { +it("should find a catch block declaration", function () { try { - var f = (function(x) { + var f = function (x) { expect(x).toBe("fail"); - }); + }; throw f; - } catch(require) { + } catch (require) { require("fail"); } }); -it("should find var declaration in control statements", function() { - var f = (function(x) { +it("should find var declaration in control statements", function () { + var f = function (x) { expect(x).toBe("fail"); - }); + }; - (function() { + (function () { { var require = f; } require("fail"); - }()); + })(); - (function() { + (function () { var i = 1; - while(i--) { + while (i--) { var require = f; } require("fail"); - }()); + })(); - (function() { + (function () { do { var require = f; - } while(false); - - require("fail"); - }()); - - (function() { - for(var i = 0; i < 1; i++) { - var require = f; - } + } while (false); require("fail"); - }()); + })(); - (function() { - for(var i in {a:1}) { + (function () { + for (var i = 0; i < 1; i++) { var require = f; } require("fail"); - }()); + })(); - (function() { - with({ a: 1 }) { + (function () { + for (var i in { a: 1 }) { var require = f; } require("fail"); - }()); + })(); }); -it("should find var declaration in control statements after usage", function() { - var f = (function(x) { +it("should find var declaration in control statements after usage", function () { + var f = function (x) { expect(x).toBe("fail"); - }); + }; - (function() { - var test = (function() { require("fail"); }); + (function () { + var test = function () { + require("fail"); + }; { var require = f; } test(); - }()); + })(); - (function() { - var test = (function() { require("fail"); }); + (function () { + var test = function () { + require("fail"); + }; var i = 1; - while(i--) { + while (i--) { var require = f; } test(); - }()); + })(); - (function() { - var test = (function() { require("fail"); }); + (function () { + var test = function () { + require("fail"); + }; do { var require = f; - } while(false); - - test(); - }()); - - (function() { - var test = (function() { require("fail"); }); - - for(var i = 0; i < 1; i++) { - var require = f; - } + } while (false); test(); - }()); + })(); - (function() { - var test = (function() { require("fail"); }); + (function () { + var test = function () { + require("fail"); + }; - for(var i in {a:1}) { + for (var i = 0; i < 1; i++) { var require = f; } test(); - }()); + })(); - (function() { - var test = (function() { require("fail"); }); + (function () { + var test = function () { + require("fail"); + }; - with({ a: 1 }) { + for (var i in { a: 1 }) { var require = f; } test(); - }()); + })(); }); diff --git a/test/cases/parsing/issue-4608-2/test.filter.js b/test/cases/parsing/issue-4608-2/test.filter.js index 0a661357de9..e25c68e824d 100644 --- a/test/cases/parsing/issue-4608-2/test.filter.js +++ b/test/cases/parsing/issue-4608-2/test.filter.js @@ -1,5 +1,5 @@ -var supportsForOf = require("../../../helpers/supportsForOf"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsForOf(); -}; +const supportsForOf = require("../../../helpers/supportsForOf"); + +module.exports = () => supportsForOf(); diff --git a/test/cases/parsing/issue-4870/index.js b/test/cases/parsing/issue-4870/index.js index 2e1700560a2..c67767c046c 100644 --- a/test/cases/parsing/issue-4870/index.js +++ b/test/cases/parsing/issue-4870/index.js @@ -1,13 +1,13 @@ import { test } from "./file"; -it("should allow import in array destructing", function() { +it("should allow import in array destructuring", function () { var other; [other = test] = []; expect(other).toBe("test"); }); -it("should allow import in object destructing", function() { +it("should allow import in object destructuring", function () { var other; - ({other = test} = {}); + ({ other = test } = {}); expect(other).toBe("test"); }); diff --git a/test/cases/parsing/issue-4870/test.filter.js b/test/cases/parsing/issue-4870/test.filter.js index f4216934be7..c1f2e57aaa0 100644 --- a/test/cases/parsing/issue-4870/test.filter.js +++ b/test/cases/parsing/issue-4870/test.filter.js @@ -1,6 +1,7 @@ -var supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); -var supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsObjectDestructuring() && supportsIteratorDestructuring(); -}; +const supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); +const supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); + +module.exports = () => + supportsObjectDestructuring() && supportsIteratorDestructuring(); diff --git a/test/cases/parsing/issue-494/index.js b/test/cases/parsing/issue-494/index.js deleted file mode 100644 index f50a3046921..00000000000 --- a/test/cases/parsing/issue-494/index.js +++ /dev/null @@ -1,5 +0,0 @@ -it("should replace a free var in a IIFE", function() { - (function(md) { - expect(md).toBeTypeOf("function"); - }(module.deprecate)); -}); diff --git a/test/cases/parsing/issue-627/dir/test.js b/test/cases/parsing/issue-627/dir/test.js index 71bf065207c..7a56e2548cd 100644 --- a/test/cases/parsing/issue-627/dir/test.js +++ b/test/cases/parsing/issue-627/dir/test.js @@ -1,4 +1,4 @@ expect(function() { var expr1 = "a", expr2 = "b"; require(Math.random() < 0.5 ? expr1 : expr2); -}).toThrowError(); +}).toThrow(); diff --git a/test/cases/parsing/issue-627/warnings.js b/test/cases/parsing/issue-627/warnings.js index ea6102af436..3d97c41e27a 100644 --- a/test/cases/parsing/issue-627/warnings.js +++ b/test/cases/parsing/issue-627/warnings.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Critical dependency/] -]; +"use strict"; + +module.exports = [[/Critical dependency/]]; diff --git a/test/cases/parsing/issue-7519/a.js b/test/cases/parsing/issue-7519/a.js new file mode 100644 index 00000000000..3df259fa7ba --- /dev/null +++ b/test/cases/parsing/issue-7519/a.js @@ -0,0 +1,20 @@ +export let count = 1; + +export function inc() { + count++; +} + +export function incTruthy() { + count++; + return true; +} + +export function mult(n) { + count *= n; +} + +export function setCount(c) { + count = c; +} + +export const multUsed = __webpack_exports_info__.mult.used; diff --git a/test/cases/parsing/issue-7519/index.js b/test/cases/parsing/issue-7519/index.js new file mode 100644 index 00000000000..2c25bebe550 --- /dev/null +++ b/test/cases/parsing/issue-7519/index.js @@ -0,0 +1,38 @@ +import { + count, + mult, + inc, + incTruthy, + setCount, + multUsed, + incUsed +} from "./a"; + +it("logical 'and' should work", () => { + setCount(1); + inc() && "true" && 0 && mult(2); + expect(count).toBe(2); + inc() && false && mult(2); + expect(count).toBe(3); + true && inc() && inc() && false && mult(2); + /* inc itself returns undefined */ + expect(count).toBe(4); + true && incTruthy() && incTruthy() && false && mult(2); + expect(count).toBe(6); +}); + +it("logical 'or' should work", () => { + setCount(1); + false || "" || inc(); + expect(count).toBe(2); + (0 || "" || inc() || inc()) && false && mult(2); + expect(count).toBe(4); +}); + +it("mult should not be used", () => { + if (inc() && true && false) { + mult(2); + } + + expect(multUsed).toBe(false); +}); diff --git a/test/cases/parsing/issue-7519/test.filter.js b/test/cases/parsing/issue-7519/test.filter.js new file mode 100644 index 00000000000..f6354eef95e --- /dev/null +++ b/test/cases/parsing/issue-7519/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => config.mode !== "development"; diff --git a/test/cases/parsing/issue-758/errors.js b/test/cases/parsing/issue-758/errors.js index 01d80f2952d..ec7564051dd 100644 --- a/test/cases/parsing/issue-758/errors.js +++ b/test/cases/parsing/issue-758/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Module not found/, /Can't resolve '\.\/missingModule' /] -]; +"use strict"; + +module.exports = [[/Module not found/, /Can't resolve '\.\/missingModule' /]]; diff --git a/test/cases/parsing/issue-758/index.js b/test/cases/parsing/issue-758/index.js index 01ac1344e2d..0ca356dbb16 100644 --- a/test/cases/parsing/issue-758/index.js +++ b/test/cases/parsing/issue-758/index.js @@ -51,8 +51,8 @@ it("should not call error callback on exception thrown in require callback", fun }); it("should call error callback when there is an error loading the chunk", function(done) { - var temp = __webpack_require__.e; - __webpack_require__.e = function() { return Promise.resolve().then(function() { throw 'fake chunk load error'; }); }; + var temp = __webpack_chunk_load__; + __webpack_chunk_load__ = function() { return Promise.resolve().then(function() { throw 'fake chunk load error'; }); }; require.ensure(['./file'], function(){ try { var file = require('./file'); @@ -61,5 +61,5 @@ it("should call error callback when there is an error loading the chunk", functi expect(error).toBe('fake chunk load error'); done(); }); - __webpack_require__.e = temp; + __webpack_chunk_load__ = temp; }); diff --git a/test/cases/parsing/issue-7728/a.js b/test/cases/parsing/issue-7728/a.js new file mode 100644 index 00000000000..e6a3f0e24c7 --- /dev/null +++ b/test/cases/parsing/issue-7728/a.js @@ -0,0 +1,3 @@ +export default function test() { + return "OK"; +} diff --git a/test/cases/parsing/issue-7728/index.js b/test/cases/parsing/issue-7728/index.js new file mode 100644 index 00000000000..f685c315367 --- /dev/null +++ b/test/cases/parsing/issue-7728/index.js @@ -0,0 +1,4 @@ +it("should detect module.require dependency", function () { + var test1 = module.require('./a').default; + expect(test1()).toBe("OK"); +}); diff --git a/test/cases/parsing/issue-7778/a.js b/test/cases/parsing/issue-7778/a.js new file mode 100644 index 00000000000..aa67bc111bf --- /dev/null +++ b/test/cases/parsing/issue-7778/a.js @@ -0,0 +1,3 @@ +export default function a() { + return 'a' + __resourceQuery +} diff --git a/test/cases/parsing/issue-7778/abc.js b/test/cases/parsing/issue-7778/abc.js new file mode 100644 index 00000000000..0b6145ef755 --- /dev/null +++ b/test/cases/parsing/issue-7778/abc.js @@ -0,0 +1,3 @@ +export default function abc() { + return 'abc' + __resourceQuery +} diff --git a/test/cases/parsing/issue-7778/index.js b/test/cases/parsing/issue-7778/index.js new file mode 100644 index 00000000000..2e4ac5dc4c9 --- /dev/null +++ b/test/cases/parsing/issue-7778/index.js @@ -0,0 +1,57 @@ +it("should detect query strings in dynamic import as a static value 1 ", function() { + return Promise.all([ + import("./a").then(({ default: a }) => { + expect(a()).toBe("a"); + }), + import("./abc").then(({ default: a }) => { + expect(a()).toBe("abc"); + }), + import("./a?queryString").then(({ default: a }) => { + expect(a()).toBe("a?queryString"); + }), + import("./abc?query?String").then(({ default: a }) => { + expect(a()).toBe("abc?query?String"); + }), + ]); +}); + +it("should detect query strings in dynamic import as a static value 2", function() { + var testFileName = "a"; + + return Promise.all([ + import(`./${testFileName}`).then(({ default: a }) => { + expect(a()).toBe("a"); + }), + import(`./${testFileName}bc`).then(({ default: a }) => { + expect(a()).toBe("abc"); + }), + import(`./${testFileName}?queryString`).then(({ default: a }) => { + expect(a()).toBe("a?queryString"); + }), + import(`./${testFileName}bc?query?String`).then(({ default: a }) => { + expect(a()).toBe("abc?query?String"); + }) + ]); +}); + +it("should detect query strings in dynamic import as a static value 3", function() { + var testFileName = "a"; + + return Promise.all([ + import("./" + testFileName).then(({ default: a }) => { + expect(a()).toBe("a"); + }), + import("./" + testFileName + "").then(({ default: a }) => { + expect(a()).toBe("a"); + }), + import("./" + testFileName + "bc").then(({ default: a }) => { + expect(a()).toBe("abc"); + }), + import("./" + testFileName + "?queryString").then(({ default: a }) => { + expect(a()).toBe("a?queryString"); + }), + import("./" + testFileName + "bc?query?String").then(({ default: a }) => { + expect(a()).toBe("abc?query?String"); + }) + ]); +}); diff --git a/test/cases/parsing/issue-8874/index.js b/test/cases/parsing/issue-8874/index.js new file mode 100644 index 00000000000..68869efb1a6 --- /dev/null +++ b/test/cases/parsing/issue-8874/index.js @@ -0,0 +1,20 @@ +import myFunction from './module'; +import myFunctionDefaultParameter from './moduleDefaultParameter'; +import myFunctionExportedFunctionExpression from './moduleExportedFunctionExpression'; +import myFunctionExportedFunctionExpressionDefaultParameter from './moduleExportedFunctionExpressionDefaultParameter'; + +it('should execute IIFE twice', () => { + expect(myFunction()).toBe(2); +}); + +it('should execute IIFE twice when using IIFE function name as default parameter', () => { + expect(myFunctionDefaultParameter()).toBe(2); +}); + +it('should execute Function Expression twice', () => { + expect(myFunctionExportedFunctionExpression()).toBe(2); +}); + +it('should execute Function Expression twice when using IIFE function name as default parameter', () => { + expect(myFunctionExportedFunctionExpressionDefaultParameter()).toBe(2); +}); diff --git a/test/cases/parsing/issue-8874/module.js b/test/cases/parsing/issue-8874/module.js new file mode 100644 index 00000000000..4ed8ee18eca --- /dev/null +++ b/test/cases/parsing/issue-8874/module.js @@ -0,0 +1,15 @@ +import someFunction from './someFunction'; + +export default function myFunction() { + let iifeExecutionCount = 0; + + (function someFunction (recurse) { + iifeExecutionCount++; + + if (recurse) { + someFunction(false); + } + })(true); + + return iifeExecutionCount; +} diff --git a/test/cases/parsing/issue-8874/moduleDefaultParameter.js b/test/cases/parsing/issue-8874/moduleDefaultParameter.js new file mode 100644 index 00000000000..c95b4896873 --- /dev/null +++ b/test/cases/parsing/issue-8874/moduleDefaultParameter.js @@ -0,0 +1,13 @@ +export default function myFunction() { + let iifeExecutionCount = 0; + + (function someFunction (recurse, recurseFunction = someFunction) { + iifeExecutionCount++; + + if (recurse) { + recurseFunction(false); + } + })(true); + + return iifeExecutionCount; +} diff --git a/test/cases/parsing/issue-8874/moduleExportedFunctionExpression.js b/test/cases/parsing/issue-8874/moduleExportedFunctionExpression.js new file mode 100644 index 00000000000..28de2647879 --- /dev/null +++ b/test/cases/parsing/issue-8874/moduleExportedFunctionExpression.js @@ -0,0 +1,9 @@ +import someFunction from './someFunction'; + +export default (function someFunction (recurse = true) { + if (recurse) { + return 1 + someFunction(false); + } + + return 1; +}); diff --git a/test/cases/parsing/issue-8874/moduleExportedFunctionExpressionDefaultParameter.js b/test/cases/parsing/issue-8874/moduleExportedFunctionExpressionDefaultParameter.js new file mode 100644 index 00000000000..5afc3011c0f --- /dev/null +++ b/test/cases/parsing/issue-8874/moduleExportedFunctionExpressionDefaultParameter.js @@ -0,0 +1,10 @@ + +import someFunction from './someFunction'; + +export default (function someFunction (recurse = true, recurseFunction = someFunction) { + if (recurse) { + return 1 + recurseFunction(false); + } + + return 1; +}); diff --git a/test/cases/parsing/issue-8874/someFunction.js b/test/cases/parsing/issue-8874/someFunction.js new file mode 100644 index 00000000000..4e46c481b73 --- /dev/null +++ b/test/cases/parsing/issue-8874/someFunction.js @@ -0,0 +1,3 @@ +export default function someFunction () { + return -1; +} diff --git a/test/cases/parsing/issue-9817/index.js b/test/cases/parsing/issue-9817/index.js new file mode 100644 index 00000000000..41eb7d781fe --- /dev/null +++ b/test/cases/parsing/issue-9817/index.js @@ -0,0 +1,27 @@ +import lower from "./lo"; + +const tests = { + "simple template": () => import(`./langs/${lower("EN")}`), + "double template": () => import(`./langs/${lower("E")}${lower("N")}`), + "template with prefix": () => import(`./langs/${lower("EN")}.js`), + "double template with prefix": () => + import(`./langs/${lower("E")}${lower("N")}.js`), + "simple concat": () => import("./langs/".concat(lower("EN"))), + "double concat": () => import("./langs/".concat(lower("E"), lower("N"))), + "concat with prefix": () => import("./langs/".concat(lower("EN"), ".js")), + "double concat with prefix": () => + import("./langs/".concat(lower("E"), lower("N"), ".js")), + "simple plus": () => import("./langs/" + lower("EN")), + "double plus": () => import("./langs/" + lower("E") + lower("N")), + "plus with prefix": () => import("./langs/" + lower("EN") + ".js"), + "double plus with prefix": () => + import("./langs/" + lower("E") + lower("N") + ".js") +}; + +for (const name of Object.keys(tests)) { + it(`should handle imports in ${name} strings`, () => { + return tests[name]().then(module => { + expect(module.default).toBe("en"); + }); + }); +} diff --git a/test/cases/parsing/issue-9817/langs/en.js b/test/cases/parsing/issue-9817/langs/en.js new file mode 100644 index 00000000000..8665705472b --- /dev/null +++ b/test/cases/parsing/issue-9817/langs/en.js @@ -0,0 +1 @@ +export default "en"; diff --git a/test/cases/parsing/issue-9817/lo.js b/test/cases/parsing/issue-9817/lo.js new file mode 100644 index 00000000000..b3eeba1f0e8 --- /dev/null +++ b/test/cases/parsing/issue-9817/lo.js @@ -0,0 +1 @@ +export default str => str.toLowerCase(); diff --git a/test/cases/parsing/local-modules/index.js b/test/cases/parsing/local-modules/index.js index 8eae3c39664..919536e0430 100644 --- a/test/cases/parsing/local-modules/index.js +++ b/test/cases/parsing/local-modules/index.js @@ -1,10 +1,10 @@ -it("should define and require a local module", function() { +it("should define and require a local module", function () { module.exports = "not set"; - define("my-module", function() { + define("my-module", function () { return 1234; }); expect(module.exports).toBe("not set"); - define(["my-module"], function(myModule) { + define(["my-module"], function (myModule) { expect(myModule).toBe(1234); return 2345; }); @@ -13,29 +13,29 @@ it("should define and require a local module", function() { require(["my-module"]); }); -it("should not create a chunk for a AMD require to a local module", function(done) { - define("my-module2", function() { +it("should not create a chunk for a AMD require to a local module", function (done) { + define("my-module2", function () { return 1235; }); var sync = false; - require(["my-module2"], function(myModule2) { + require(["my-module2"], function (myModule2) { expect(myModule2).toBe(1235); sync = true; }); - setImmediate(function() { + setImmediate(function () { expect(sync).toBe(true); done(); }); }); -it("should define and require a local module with deps", function() { +it("should define and require a local module with deps", function () { module.exports = "not set"; - define("my-module3", ["./dep"], function(dep) { + define("my-module3", ["./dep"], function (dep) { expect(dep).toBe("dep"); return 1234; }); expect(module.exports).toBe("not set"); - define("my-module4", ["my-module3", "./dep"], function(myModule, dep) { + define("my-module4", ["my-module3", "./dep"], function (myModule, dep) { expect(dep).toBe("dep"); expect(myModule).toBe(1234); return 2345; @@ -46,16 +46,33 @@ it("should define and require a local module with deps", function() { }); it("should define and require a local module that is relative", function () { - define("my-dir/my-module3", function() { + define("my-dir/my-module3", function () { return 1234; }); - define("my-dir/my-other-dir/my-module4", function() { + define("my-dir/my-other-dir/my-module4", function () { return 2345; }); - define("my-dir/my-other-dir/my-module5", ["./my-module4", "../my-module3"], function(myModule4, myModule3) { + define("my-dir/my-other-dir/my-module5", [ + "./my-module4", + "../my-module3" + ], function (myModule4, myModule3) { expect(myModule3).toBe(1234); expect(myModule4).toBe(2345); return 3456; }); expect(require("my-dir/my-other-dir/my-module5")).toBe(3456); -}) +}); + +it("issue 12310", () => { + const obj = { ok: true }; + define("local-module1", obj); + const fn2 = () => ({ ok: true }); + define("local-module2", fn2); + const fn3 = m1 => { + return { m1 }; + }; + define("local-module3", ["local-module1"], fn3); + expect(require("local-module1")).toBe(obj); + expect(require("local-module2")).toEqual(obj); + expect(require("local-module3")).toEqual({ m1: obj }); +}); diff --git a/test/cases/parsing/logical-assignment/index.js b/test/cases/parsing/logical-assignment/index.js new file mode 100644 index 00000000000..c3dc2f77449 --- /dev/null +++ b/test/cases/parsing/logical-assignment/index.js @@ -0,0 +1,5 @@ +import f from "./module"; + +it("should support logical assignment", () => { + expect(f()).toBe(true); +}); diff --git a/test/cases/parsing/logical-assignment/module.js b/test/cases/parsing/logical-assignment/module.js new file mode 100644 index 00000000000..b1fec961eb8 --- /dev/null +++ b/test/cases/parsing/logical-assignment/module.js @@ -0,0 +1,7 @@ +export default function () { + var x = null; + x ??= true; + x &&= true; + x ||= false; + return x; +} diff --git a/test/cases/parsing/logical-assignment/test.filter.js b/test/cases/parsing/logical-assignment/test.filter.js new file mode 100644 index 00000000000..1417bb56243 --- /dev/null +++ b/test/cases/parsing/logical-assignment/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsLogicalAssignment = require("../../../helpers/supportsLogicalAssignment"); + +module.exports = () => supportsLogicalAssignment(); diff --git a/test/cases/parsing/meta-property/index.js b/test/cases/parsing/meta-property/index.js new file mode 100644 index 00000000000..e1573e8eeeb --- /dev/null +++ b/test/cases/parsing/meta-property/index.js @@ -0,0 +1,32 @@ +class A { + constructor() { + if (new.target === B) { + this.val = 2; + } else { + this.val = 1; + } + if (typeof new.target !== "function") { + this.val = 0; + } + if (typeof new.target.value !== "function") { + this.val = 0; + } + if (typeof new.target.unknown !== "undefined") { + this.val = 0; + } + if (!new.target.value) { + this.val = 0; + } + } + static value() {} +} + +class B extends A {} + +it("should respect meta property name", () => { + const b = new B(); + const a = new A(); + + expect(b.val).toBe(2); + expect(a.val).toBe(1); +}); diff --git a/test/cases/parsing/missing-export-warning-nested/a.js b/test/cases/parsing/missing-export-warning-nested/a.js new file mode 100644 index 00000000000..3aa4a771388 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/a.js @@ -0,0 +1,3 @@ +export const a = 42; +import * as x from "./b"; +export { x }; diff --git a/test/cases/parsing/missing-export-warning-nested/b.js b/test/cases/parsing/missing-export-warning-nested/b.js new file mode 100644 index 00000000000..9902cddc6a8 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/b.js @@ -0,0 +1,3 @@ +export const b = 42; +import * as y from "./c"; +export { y }; diff --git a/test/cases/parsing/missing-export-warning-nested/c.js b/test/cases/parsing/missing-export-warning-nested/c.js new file mode 100644 index 00000000000..912eec884e3 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/c.js @@ -0,0 +1,4 @@ +export const c = 42; +import * as z from "./d"; +import * as Z from "./e"; +export { z, Z }; diff --git a/test/cases/parsing/missing-export-warning-nested/d.js b/test/cases/parsing/missing-export-warning-nested/d.js new file mode 100644 index 00000000000..ab66c514780 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/d.js @@ -0,0 +1 @@ +exports.d = 42; diff --git a/test/cases/parsing/missing-export-warning-nested/e.js b/test/cases/parsing/missing-export-warning-nested/e.js new file mode 100644 index 00000000000..b2c99f44f01 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/e.js @@ -0,0 +1,3 @@ +module.exports = (() => { + return undefined; +})(); diff --git a/test/cases/parsing/missing-export-warning-nested/index.js b/test/cases/parsing/missing-export-warning-nested/index.js new file mode 100644 index 00000000000..42bf73dd556 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/index.js @@ -0,0 +1,14 @@ +import * as m from "./a"; + +if (Math.random() < 0) { + m.A; + m.x.B; + m.x.y.C; + m.x.y.z.D; + m.x.y.Z.D; + m.x.y.z.v.E; + m.x.y.Z.v.E; + m.p.r.q; +} + +it("should emit the correct warnings", () => {}); diff --git a/test/cases/parsing/missing-export-warning-nested/warnings.js b/test/cases/parsing/missing-export-warning-nested/warnings.js new file mode 100644 index 00000000000..75ae543b291 --- /dev/null +++ b/test/cases/parsing/missing-export-warning-nested/warnings.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = [ + [ + /export 'A' \(imported as 'm'\) was not found in '.\/a' \(possible exports: a, x\)/ + ], + [ + /export 'x'.'B' \(imported as 'm'\) was not found in '.\/a' \(possible exports: b, y\)/ + ], + [ + /export 'x'.'y'.'C' \(imported as 'm'\) was not found in '.\/a' \(possible exports: Z, c, z\)/ + ], + [ + /export 'x'.'y'.'z'.'D' \(imported as 'm'\) was not found in '.\/a' \(possible exports: default, d\)/ + ], + [ + /export 'x'.'y'.'z'.'v' \(imported as 'm'\) was not found in '.\/a' \(possible exports: default, d\)/ + ], + [ + /export 'p' \(imported as 'm'\) was not found in '.\/a' \(possible exports: a, x\)/ + ] +]; diff --git a/test/cases/parsing/nullish-coalescing/a.js b/test/cases/parsing/nullish-coalescing/a.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/cases/parsing/nullish-coalescing/a.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/cases/parsing/nullish-coalescing/b.js b/test/cases/parsing/nullish-coalescing/b.js new file mode 100644 index 00000000000..92fde1f2ba2 --- /dev/null +++ b/test/cases/parsing/nullish-coalescing/b.js @@ -0,0 +1 @@ +throw new Error(); diff --git a/test/cases/parsing/nullish-coalescing/index.js b/test/cases/parsing/nullish-coalescing/index.js new file mode 100644 index 00000000000..a45c81a6a6d --- /dev/null +++ b/test/cases/parsing/nullish-coalescing/index.js @@ -0,0 +1,19 @@ +it("should parse nullish coalescing correctly", () => { + let result; + + if ((null ?? false) === null) { + result = require("./b"); + } else if ((0 ?? false) === 0) { + result = require("./a"); + } + + expect(result).toBe(1); +}); + +it("should evaluate module.hot to nullish", () => { + if (module.hot) { + module.hot ?? require("fail"); + } else { + (module.hot ?? 123) !== 123 && require("fail"); + } +}); diff --git a/test/cases/parsing/nullish-coalescing/test.filter.js b/test/cases/parsing/nullish-coalescing/test.filter.js new file mode 100644 index 00000000000..31fd9b925b1 --- /dev/null +++ b/test/cases/parsing/nullish-coalescing/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNullishCoalescing = require("../../../helpers/supportsNullishCoalescing"); + +module.exports = () => supportsNullishCoalescing(); diff --git a/test/cases/parsing/optional-catch-binding/test.filter.js b/test/cases/parsing/optional-catch-binding/test.filter.js index 172fad5af93..2415a49dfa7 100644 --- a/test/cases/parsing/optional-catch-binding/test.filter.js +++ b/test/cases/parsing/optional-catch-binding/test.filter.js @@ -1,9 +1,5 @@ +"use strict"; + const supportsOptionalCatchBinding = require("../../../helpers/supportsOptionalCatchBinding"); -module.exports = function(config) { - // XXX: Disable this test if UglifyJS is used because it does not support ES 2019 - if (config.mode === "production") { - return false; - } - return supportsOptionalCatchBinding(); -}; +module.exports = () => supportsOptionalCatchBinding(); diff --git a/test/cases/parsing/optional-chaining/a.js b/test/cases/parsing/optional-chaining/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/parsing/optional-chaining/b.js b/test/cases/parsing/optional-chaining/b.js new file mode 100644 index 00000000000..5fe49d553b2 --- /dev/null +++ b/test/cases/parsing/optional-chaining/b.js @@ -0,0 +1,3 @@ +export default {}; +export * as a from "./c"; +export const call = () => ({ c: 1 }); diff --git a/test/cases/parsing/optional-chaining/c.js b/test/cases/parsing/optional-chaining/c.js new file mode 100644 index 00000000000..c37f7387e3e --- /dev/null +++ b/test/cases/parsing/optional-chaining/c.js @@ -0,0 +1,2 @@ +const call = () => 2; +export { call }; diff --git a/test/cases/parsing/optional-chaining/index.js b/test/cases/parsing/optional-chaining/index.js new file mode 100644 index 00000000000..0d48ae94dd1 --- /dev/null +++ b/test/cases/parsing/optional-chaining/index.js @@ -0,0 +1,27 @@ +import b, * as bb from "./b"; + +it("should keep optional chaining", () => { + expect(b?.a?.a).toBe(undefined); + expect(b?.a).toBe(undefined); + expect(typeof bb?.a).toBe("object"); + expect(bb.call?.().c).toBe(1); + expect(bb.call?.().b?.a).toBe(undefined); + expect(bb.a?.call()).toBe(2); + expect(bb.a?.c?.b).toBe(undefined); +}); + +it("should evaluate optional members", () => { + if (!module.hot) { + expect( + module.hot?.accept((() => {throw new Error("fail")})()) + ).toBe(undefined); + } +}); + +it("should evaluate optional chaining as a part of statement", () => { + if (module.hot?.accept) { + module.hot?.accept("./a.js"); + } else { + expect(module.hot).toBe(undefined); + } +}); diff --git a/test/cases/parsing/optional-chaining/test.filter.js b/test/cases/parsing/optional-chaining/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/cases/parsing/optional-chaining/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/cases/parsing/precreated-ast/ast-loader.js b/test/cases/parsing/precreated-ast/ast-loader.js index 920c10d3940..b6181cb47db 100644 --- a/test/cases/parsing/precreated-ast/ast-loader.js +++ b/test/cases/parsing/precreated-ast/ast-loader.js @@ -1,25 +1,34 @@ "use strict"; -const acorn = require("acorn-dynamic-import").default; +const acorn = require("acorn"); +const acornParser = acorn.Parser; -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + /** @type {acorn.Comment[]} */ const comments = []; - const ast = acorn.parse(source, { + + const semicolons = new Set(); + //@ts-ignore + const ast = acornParser.parse(source, { ranges: true, locations: true, - ecmaVersion: 2017, + ecmaVersion: 11, sourceType: "module", - plugins: { - dynamicImport: true - }, - onComment: comments + onComment: comments, + onInsertedSemicolon: (pos) => semicolons.add(pos) }); // change something to test if it's really used + //@ts-ignore ast.body[0].expression.right.arguments[0].value = "./ok"; - ast.body[0].expression.right.arguments[0].raw = "\"./ok\""; + //@ts-ignore + ast.body[0].expression.right.arguments[0].raw = '"./ok"'; + //@ts-ignore ast.comments = comments; + //@ts-ignore + ast.semicolons = semicolons; this.callback(null, source, null, { webpackAST: ast }); diff --git a/test/cases/parsing/requirejs/index.js b/test/cases/parsing/requirejs/index.js deleted file mode 100644 index 93ee59899d7..00000000000 --- a/test/cases/parsing/requirejs/index.js +++ /dev/null @@ -1,20 +0,0 @@ -it("should ignore require.config", function() { - require.config({ - - }); - requirejs.config({ - - }); -}); -it("should have a require.version", function() { - expect(require.version).toBeTypeOf("string"); -}); -it("should have a requirejs.onError function", function() { - function f(){} - expect(requirejs.onError).toBeTypeOf("function"); // has default handler - var org = requirejs.onError; - requirejs.onError = f; - expect(requirejs.onError).toBe(f); - requirejs.onError = org; - require(["./file.js"], function() {}); -}); diff --git a/test/cases/parsing/sequence-expression-asi/a.js b/test/cases/parsing/sequence-expression-asi/a.js new file mode 100644 index 00000000000..9549e18a567 --- /dev/null +++ b/test/cases/parsing/sequence-expression-asi/a.js @@ -0,0 +1,3 @@ +export const fn = (num) => { + return num; +}; diff --git a/test/cases/parsing/sequence-expression-asi/index.js b/test/cases/parsing/sequence-expression-asi/index.js new file mode 100644 index 00000000000..540ac012c81 --- /dev/null +++ b/test/cases/parsing/sequence-expression-asi/index.js @@ -0,0 +1,21 @@ +import { fn } from "./a" + +function d() {} + +var num = 1 +d(), fn(); + +export const b = 2 +d(), fn(); + +export default (function Foo() {}) +d(), fn(); + +export const c = 3 +function foo() { + d(), fn(); +} + +it("should work", function() { + expect(fn(num)).toBe(1); +}); diff --git a/test/cases/parsing/spread/index.js b/test/cases/parsing/spread/index.js index 5a94cdea8bb..17369fd5bba 100644 --- a/test/cases/parsing/spread/index.js +++ b/test/cases/parsing/spread/index.js @@ -8,4 +8,11 @@ it("should support spread operator", function() { expect(o2).toEqual({ X: { A: "A", B: "B" } }); var o3 = { ...M }; expect(o3).toEqual({ default: { A: "A", B: "B" }, A: "A", B: "B" }); + const test = [1, 2, 3]; + expect( + (function(a, b, c) { return test; }(...test)) + ).toEqual([1, 2 ,3]); + expect( + (function(a, b, c) { return test; }.call(...test)) + ).toEqual([1, 2 ,3]); }); diff --git a/test/cases/parsing/spread/test.filter.js b/test/cases/parsing/spread/test.filter.js index 741b76b8c15..2d29d5a2441 100644 --- a/test/cases/parsing/spread/test.filter.js +++ b/test/cases/parsing/spread/test.filter.js @@ -1,5 +1,5 @@ -var supportsSpread = require("../../../helpers/supportsSpread"); +"use strict"; -module.exports = function(config) { - return supportsSpread(); -}; +const supportsSpread = require("../../../helpers/supportsSpread"); + +module.exports = () => supportsSpread(); diff --git a/test/cases/parsing/this-in-arrow-iife/index.js b/test/cases/parsing/this-in-arrow-iife/index.js new file mode 100644 index 00000000000..b7d2e430424 --- /dev/null +++ b/test/cases/parsing/this-in-arrow-iife/index.js @@ -0,0 +1,14 @@ +function x() { + let value; + (() => { + value = this; + })(); + return value; +} + +it("should parse this in an arrow IIFE correctly", () => { + const o = { ok: true }; + expect(x.call(o)).toBe(o); +}); + +export {}; diff --git a/test/cases/parsing/typeof-non-module/index.js b/test/cases/parsing/typeof-non-module/index.js new file mode 100644 index 00000000000..10a88cf80b7 --- /dev/null +++ b/test/cases/parsing/typeof-non-module/index.js @@ -0,0 +1,9 @@ +it("should answer typeof __non_webpack_require__ correctly", function () { + var oldValue; + eval("oldValue = require;"); + expect(typeof __non_webpack_require__).toBe("function"); + eval("require = undefined;"); + expect(typeof __non_webpack_require__).toBe("undefined"); + eval("require = oldValue;"); + expect(typeof __non_webpack_require__).toBe("function"); +}); diff --git a/test/cases/parsing/typeof-non-module/test.filter.js b/test/cases/parsing/typeof-non-module/test.filter.js new file mode 100644 index 00000000000..49d755d43bb --- /dev/null +++ b/test/cases/parsing/typeof-non-module/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => !config.module; diff --git a/test/cases/parsing/typeof/index.js b/test/cases/parsing/typeof/index.js index 93e366595ce..0e3fbbb0b97 100644 --- a/test/cases/parsing/typeof/index.js +++ b/test/cases/parsing/typeof/index.js @@ -1,48 +1,48 @@ -it("should not create a context for typeof require", function() { +it("should not create a context for typeof require", function () { expect(require("./typeof")).toBe("function"); }); -it("should answer typeof require correctly", function() { - expect((typeof require)).toBe("function"); +it("should answer typeof require correctly", function () { + expect(typeof require).toBe("function"); }); -it("should answer typeof define correctly", function() { - expect((typeof define)).toBe("function"); +it("should answer typeof define correctly", function () { + expect(typeof define).toBe("function"); }); -it("should answer typeof require.amd correctly", function() { - expect((typeof require.amd)).toBe("object"); +it("should answer typeof require.amd correctly", function () { + expect(typeof require.amd).toBe("object"); }); -it("should answer typeof define.amd correctly", function() { - expect((typeof define.amd)).toBe("object"); +it("should answer typeof define.amd correctly", function () { + expect(typeof define.amd).toBe("object"); }); -it("should answer typeof module correctly", function() { - expect((typeof module)).toBe("object"); +it("should answer typeof module correctly", function () { + expect(typeof module).toBe("object"); }); -it("should answer typeof exports correctly", function() { - expect((typeof exports)).toBe("object"); +it("should answer typeof exports correctly", function () { + expect(typeof exports).toBe("object"); }); -it("should answer typeof require.include correctly", function() { - expect((typeof require.include)).toBe("function"); +it("should answer typeof require.include correctly", function () { + expect(typeof require.include).toBe("function"); }); -it("should answer typeof require.ensure correctly", function() { - expect((typeof require.ensure)).toBe("function"); +it("should answer typeof require.ensure correctly", function () { + expect(typeof require.ensure).toBe("function"); }); -it("should answer typeof require.resolve correctly", function() { - expect((typeof require.resolve)).toBe("function"); +it("should answer typeof require.resolve correctly", function () { + expect(typeof require.resolve).toBe("function"); }); -it("should not parse filtered stuff", function() { - if(typeof require != "function") require("fail"); - if(typeof require !== "function") require("fail"); - if(!(typeof require == "function")) require("fail"); - if(!(typeof require === "function")) require("fail"); - if(typeof require == "undefined") require = require("fail"); - if(typeof require === "undefined") require = require("fail"); - if(typeof require.resolve !== "function") require("fail"); - if(typeof module == "undefined") module = require("fail"); - if(typeof module === "undefined") module = require("fail"); - if(typeof module != "object") module = require("fail"); - if(typeof exports == "undefined") exports = require("fail"); - if(typeof System !== "object") exports = require("fail"); - if(typeof require.include !== "function") require.include("fail"); - if(typeof require.ensure !== "function") require.ensure(["fail"], function(){}); +it("should not parse filtered stuff", function () { + if (typeof require != "function") require("fail"); + if (typeof require !== "function") require("fail"); + if (!(typeof require == "function")) require("fail"); + if (!(typeof require === "function")) require("fail"); + if (typeof require == "undefined") require = require("fail"); + if (typeof require === "undefined") require = require("fail"); + if (typeof require.resolve !== "function") require("fail"); + if (typeof module == "undefined") module = require("fail"); + if (typeof module === "undefined") module = require("fail"); + if (typeof module != "object") module = require("fail"); + if (typeof exports == "undefined") exports = require("fail"); + if (typeof require.include !== "function") require.include("fail"); + if (typeof require.ensure !== "function") + require.ensure(["fail"], function () {}); }); diff --git a/test/cases/parsing/typeof/warnings.js b/test/cases/parsing/typeof/warnings.js new file mode 100644 index 00000000000..14073052dbc --- /dev/null +++ b/test/cases/parsing/typeof/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + [/require.include\(\) is deprecated and will be removed soon/], + [/require.include\(\) is deprecated and will be removed soon/] +]; diff --git a/test/cases/parsing/unsupported-amd/errors.js b/test/cases/parsing/unsupported-amd/errors.js index ea59340cd18..2ff503f1fec 100644 --- a/test/cases/parsing/unsupported-amd/errors.js +++ b/test/cases/parsing/unsupported-amd/errors.js @@ -1,4 +1,6 @@ +"use strict"; + module.exports = [ - [/Cannot statically analyse/, /in line 12/], - [/Cannot statically analyse/, /in line 4/] -]; \ No newline at end of file + [/Cannot statically analyse/, /in line 4/], + [/Cannot statically analyse/, /in line 12/] +]; diff --git a/test/cases/parsing/unsupported-amd/index.js b/test/cases/parsing/unsupported-amd/index.js index db59455784f..3e016f87b67 100644 --- a/test/cases/parsing/unsupported-amd/index.js +++ b/test/cases/parsing/unsupported-amd/index.js @@ -2,7 +2,7 @@ it("should fail on unsupported use of AMD require 1", function() { expect(function() { var abc = ["./a", "./b"]; require(abc, function(a, b) {}); - }).toThrowError(); + }).toThrow(); }); it("should fail on unsupported use of AMD require 2", function() { @@ -10,5 +10,5 @@ it("should fail on unsupported use of AMD require 2", function() { var abc = ["./a", "./b"]; function f(a, b) {} require(abc, f); - }).toThrowError(); + }).toThrow(); }); diff --git a/test/cases/parsing/using/index.js b/test/cases/parsing/using/index.js new file mode 100644 index 00000000000..25b5c725098 --- /dev/null +++ b/test/cases/parsing/using/index.js @@ -0,0 +1,55 @@ +import { resource, disposed } from "./module.js"; + +let disposeCounter = 0; + +const getResource = () => { + return { + test() { + // Nothing + }, + [Symbol.dispose]: () => { + disposeCounter++; + } + } +} + + +it("should using", async () => { + { + using foo = getResource(); + + foo.test(); + } + + expect(disposeCounter).toBe(1); + + { + await using bar = getResource(); + + bar.test(); + } + + expect(disposeCounter).toBe(2); + + for (await using x of [getResource()]) { + x.test(); + } + + expect(disposeCounter).toBe(3); + + for await (await using x of [getResource()]) { + x.test(); + } + + expect(disposeCounter).toBe(4); + + { + using resource = await getResource(); + } + + expect(disposeCounter).toBe(5); + + // TODO uncomment when will re resolved on V8 side - https://github.com/tc39/proposal-explicit-resource-management/issues/262 + // resource[Symbol.dispose](); + // expect(disposed).toBe(true); +}); diff --git a/test/cases/parsing/using/module.js b/test/cases/parsing/using/module.js new file mode 100644 index 00000000000..0732aca7f40 --- /dev/null +++ b/test/cases/parsing/using/module.js @@ -0,0 +1,9 @@ +let disposed = false; + +using resource = { + [Symbol.dispose]: () => { + disposed = true; + } +}; + +export { resource, disposed }; diff --git a/test/cases/parsing/using/test.filter.js b/test/cases/parsing/using/test.filter.js new file mode 100644 index 00000000000..1e4b52cd229 --- /dev/null +++ b/test/cases/parsing/using/test.filter.js @@ -0,0 +1,12 @@ +"use strict"; + +const supportsUsing = require("../../../helpers/supportsUsing"); + +module.exports = (config) => { + // TODO https://github.com/terser/terser/issues/1625 + if (config.minimize) { + return false; + } + + return supportsUsing(); +}; diff --git a/test/cases/parsing/webpack-is-included/index.js b/test/cases/parsing/webpack-is-included/index.js new file mode 100644 index 00000000000..4ba18efb286 --- /dev/null +++ b/test/cases/parsing/webpack-is-included/index.js @@ -0,0 +1,20 @@ +import "./module1"; +import { + isWebpackIncludedFunction, + used, + unused, + notPresented +} from "./module2"; + +it("__webpack_is_included__ should be a function", () => { + expect(isWebpackIncludedFunction).toBe(true); +}); + +it("__webpack_is_included__ should be true for bundled modules, otherwise false", () => { + expect(used).toBe(true); + expect(unused).toBe(false); +}); + +it("__webpack_is_included__ should return false for missing module", () => { + expect(notPresented).toBe(false); +}); diff --git a/test/cases/parsing/webpack-is-included/module1.js b/test/cases/parsing/webpack-is-included/module1.js new file mode 100644 index 00000000000..0ed3b5ff348 --- /dev/null +++ b/test/cases/parsing/webpack-is-included/module1.js @@ -0,0 +1 @@ +import "./moduleUsed"; diff --git a/test/cases/parsing/webpack-is-included/module2.js b/test/cases/parsing/webpack-is-included/module2.js new file mode 100644 index 00000000000..c9455e7cf33 --- /dev/null +++ b/test/cases/parsing/webpack-is-included/module2.js @@ -0,0 +1,4 @@ +export const isWebpackIncludedFunction = typeof __webpack_is_included__ === "function"; +export const unused = __webpack_is_included__("./moduleUnused"); +export const used = __webpack_is_included__("./module" + "Used"); +export const notPresented = __webpack_is_included__("./anyOtherModule"); diff --git a/test/cases/parsing/webpack-is-included/moduleUnused.js b/test/cases/parsing/webpack-is-included/moduleUnused.js new file mode 100644 index 00000000000..368db0f467a --- /dev/null +++ b/test/cases/parsing/webpack-is-included/moduleUnused.js @@ -0,0 +1,2 @@ +export default 2; +console.log.bind(); diff --git a/test/cases/parsing/webpack-is-included/moduleUsed.js b/test/cases/parsing/webpack-is-included/moduleUsed.js new file mode 100644 index 00000000000..6c85825693b --- /dev/null +++ b/test/cases/parsing/webpack-is-included/moduleUsed.js @@ -0,0 +1,2 @@ +export default 1; +console.log.bind(); diff --git a/test/cases/resolving/browser-field/errors.js b/test/cases/resolving/browser-field/errors.js index 4b56bd34420..758f46b292a 100644 --- a/test/cases/resolving/browser-field/errors.js +++ b/test/cases/resolving/browser-field/errors.js @@ -1,6 +1,8 @@ +"use strict"; + module.exports = [ [/Module not found/, /recursive-file\/a/, /Recursion in resolving/], [/Module not found/, /recursive-file\/b/, /Recursion in resolving/], [/Module not found/, /recursive-file\/c/, /Recursion in resolving/], [/Module not found/, /recursive-file\/d/, /Recursion in resolving/] -]; \ No newline at end of file +]; diff --git a/test/cases/resolving/browser-field/index.js b/test/cases/resolving/browser-field/index.js index fb3dba46390..683a9b9cc15 100644 --- a/test/cases/resolving/browser-field/index.js +++ b/test/cases/resolving/browser-field/index.js @@ -31,11 +31,13 @@ it("should ignore recursive module mappings", function() { it("should use empty modules for ignored modules", function() { expect(require("ignoring-module").module).toEqual({}); expect(require("ignoring-module").file).toEqual({}); - expect(require("ignoring-module").module).not.toBe(require("ignoring-module").file); + expect(require("ignoring-module").module).not.toBe( + require("ignoring-module").file + ); }); // Errors -require.include("recursive-file/a"); -require.include("recursive-file/b"); -require.include("recursive-file/c"); -require.include("recursive-file/d"); +if (Math.random() < 0) require("recursive-file/a"); +if (Math.random() < 0) require("recursive-file/b"); +if (Math.random() < 0) require("recursive-file/c"); +if (Math.random() < 0) require("recursive-file/d"); diff --git a/test/cases/resolving/context/loaders/queryloader.js b/test/cases/resolving/context/loaders/queryloader.js index 8d606f560f8..f9bb23e1f55 100644 --- a/test/cases/resolving/context/loaders/queryloader.js +++ b/test/cases/resolving/context/loaders/queryloader.js @@ -1,7 +1,11 @@ -module.exports = function(content) { - return "module.exports = " + JSON.stringify({ - resourceQuery: this.resourceQuery, - query: this.query, - prev: content - }); -} +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = function (content) { + return ( + "module.exports = " + + JSON.stringify({ + resourceQuery: this.resourceQuery, + query: this.query, + prev: content + }) + ); +}; diff --git a/test/cases/resolving/data-uri/index.js b/test/cases/resolving/data-uri/index.js new file mode 100644 index 00000000000..ba027caf352 --- /dev/null +++ b/test/cases/resolving/data-uri/index.js @@ -0,0 +1,29 @@ +it("should require js module from base64 data-uri", function () { + const mod = require("data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgZnVuY3Rpb24gZm4oKSB7CiAgcmV0dXJuICJIZWxsbyB3b3JsZCI7Cn0="); + expect(mod.number).toBe(42); + expect(mod.fn()).toBe("Hello world"); +}); + +it("should require js module from ascii data-uri", function () { + const mod = require('data:application/node;charset=utf-8,module.exports={number:42,fn:()=>"Hello world"}'); + expect(mod.number).toBe(42); + expect(mod.fn()).toBe("Hello world"); +}); + +it("should import js module from base64 data-uri", function () { + const mod = require("./module-with-imports"); + expect(mod.number).toBe(42); + expect(mod.fn()).toBe("Hello world"); +}); + +it("should require coffee module from base64 data-uri", function () { + const mod = require("coffee-loader!Data:application/node;charset=utf-8;base64,bW9kdWxlLmV4cG9ydHMgPQogIG51bWJlcjogNDIKICBmbjogKCkgLT4gIkhlbGxvIHdvcmxkIg=="); + expect(mod.number).toBe(42); + expect(mod.fn()).toBe("Hello world"); +}); + +it("should require json module from base64 data-uri", function () { + const mod = require("DATA:application/json;charset=utf-8;base64,ewogICJpdCI6ICJ3b3JrcyIsCiAgIm51bWJlciI6IDQyCn0K"); + expect(mod.it).toBe("works"); + expect(mod.number).toBe(42); +}); diff --git a/test/cases/resolving/data-uri/module-with-imports.js b/test/cases/resolving/data-uri/module-with-imports.js new file mode 100644 index 00000000000..4a6a6bf7fda --- /dev/null +++ b/test/cases/resolving/data-uri/module-with-imports.js @@ -0,0 +1,3 @@ +import { number, fn } from "data:text/javascript;charset=utf-8;base64,ZXhwb3J0IGNvbnN0IG51bWJlciA9IDQyOwpleHBvcnQgY29uc3QgZm4gPSAoKSA9PiAiSGVsbG8gd29ybGQiOw=="; + +export { number, fn }; diff --git a/test/cases/resolving/issue-11555/index.js b/test/cases/resolving/issue-11555/index.js new file mode 100644 index 00000000000..b1e5ba784c6 --- /dev/null +++ b/test/cases/resolving/issue-11555/index.js @@ -0,0 +1,29 @@ +it("should be possible to use # in folders", () => { + const eIndexOf = require("es5-ext/array/#/e-index-of"); + expect(eIndexOf).toBeTypeOf("function"); +}); + +it("should be possible to use # in folders (context)", () => { + const x = "e-index-of"; + const eIndexOf = require(`es5-ext/array/#/${x}`); + expect(eIndexOf).toBeTypeOf("function"); +}); + +it("should be possible to use # in folders (context)", () => { + const array = require("es5-ext/array"); + expect(array).toMatchObject({ + "#": expect.objectContaining({ + clear: expect.toBeTypeOf("function") + }) + }); +}); + +it("should be possible escape # in requests", () => { + const eIndexOf = require("es5-ext/array/\0#/e-index-of#fragment"); + expect(eIndexOf).toBeTypeOf("function"); +}); + +it("should be possible dynamically import # in folders", async () => { + const eIndexOf = await import("es5-ext/array/#/first"); + expect(eIndexOf.default).toBeTypeOf("function"); +}); diff --git a/test/cases/resolving/issue-2986/errors.js b/test/cases/resolving/issue-2986/errors.js index a3760f3d06f..9e35b72bb53 100644 --- a/test/cases/resolving/issue-2986/errors.js +++ b/test/cases/resolving/issue-2986/errors.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = [ [/Can't resolve 'any' in/, /BREAKING CHANGE/, /any-loader/], [/Can't resolve 'other' in/] diff --git a/test/cases/resolving/issue-2986/index.js b/test/cases/resolving/issue-2986/index.js index 57999a1b5b5..3b534fe6da6 100644 --- a/test/cases/resolving/issue-2986/index.js +++ b/test/cases/resolving/issue-2986/index.js @@ -1,4 +1,4 @@ -require.include("any!"); -require.include("other!"); +if (Math.random() < 0) require("any!"); +if (Math.random() < 0) require("other!"); -it("should have correct errors", function() {}) +it("should have correct errors", function() {}); diff --git a/test/cases/runtime/error-handling/errors.js b/test/cases/runtime/error-handling/errors.js index 0761c2861a0..459201edd77 100644 --- a/test/cases/runtime/error-handling/errors.js +++ b/test/cases/runtime/error-handling/errors.js @@ -1,3 +1,9 @@ +"use strict"; + module.exports = [ - [/Module not found/, /Can't resolve '\.\/missingModule' /, /error-handling\/index.js/] -]; \ No newline at end of file + [ + /Module not found/, + /Can't resolve '\.\/missingModule' /, + { moduleName: /error-handling\/index.js/ } + ] +]; diff --git a/test/cases/runtime/error-handling/warnings.js b/test/cases/runtime/error-handling/warnings.js index e10b267b5ae..db37ab4bd63 100644 --- a/test/cases/runtime/error-handling/warnings.js +++ b/test/cases/runtime/error-handling/warnings.js @@ -1,3 +1,9 @@ +"use strict"; + module.exports = [ - [/Module not found/, /Can't resolve '\.\/missingModule2' /, /error-handling\/index.js/] -]; \ No newline at end of file + [ + /Module not found/, + /Can't resolve '\.\/missingModule2' /, + { moduleName: /error-handling\/index.js/ } + ] +]; diff --git a/test/cases/runtime/issue-15518/dynamic_a/module_a1.js b/test/cases/runtime/issue-15518/dynamic_a/module_a1.js new file mode 100644 index 00000000000..bb015c33f2f --- /dev/null +++ b/test/cases/runtime/issue-15518/dynamic_a/module_a1.js @@ -0,0 +1 @@ +export const log = 1; diff --git a/test/cases/runtime/issue-15518/dynamic_a/module_a2.js b/test/cases/runtime/issue-15518/dynamic_a/module_a2.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/runtime/issue-15518/index.js b/test/cases/runtime/issue-15518/index.js new file mode 100644 index 00000000000..6eb4b80c0ba --- /dev/null +++ b/test/cases/runtime/issue-15518/index.js @@ -0,0 +1,13 @@ +async function dynamic_import(dir, name) { + if (dir === "a") { + return import( + /* webpackChunkName: "a" */ + /* webpackMode: "lazy-once" */ + `./dynamic_a/${name}.js`); + } + throw new Error(); +} + +it("should compile and run", async () => { + await dynamic_import("a", "module_a1"); +}); diff --git a/test/cases/runtime/issue-2391-chunk/index.js b/test/cases/runtime/issue-2391-chunk/index.js deleted file mode 100644 index 7e38eadbdc5..00000000000 --- a/test/cases/runtime/issue-2391-chunk/index.js +++ /dev/null @@ -1,4 +0,0 @@ -it("should have a require.onError function by default", function() { - expect((typeof require.onError)).toBe("function"); - require(["./file"]); -}); diff --git a/test/cases/runtime/issue-2391/index.js b/test/cases/runtime/issue-2391/index.js deleted file mode 100644 index c01b3c35a54..00000000000 --- a/test/cases/runtime/issue-2391/index.js +++ /dev/null @@ -1,3 +0,0 @@ -it("should not have a require.onError function by default", function() { - expect((typeof require.onError)).toBe("undefined"); // expected to fail in browsertests -}); diff --git a/test/cases/runtime/missing-module-exception-dynamic-import/index.js b/test/cases/runtime/missing-module-exception-dynamic-import/index.js new file mode 100644 index 00000000000..8ed1ed4676d --- /dev/null +++ b/test/cases/runtime/missing-module-exception-dynamic-import/index.js @@ -0,0 +1,9 @@ +it("should have correct error code", async function () { + try { + await import("./fail-1"); + await import("./fail-2").property; + await import("./fail-3").property.sub(); + } catch (e) { + expect(e.code).toBe("MODULE_NOT_FOUND"); + } +}); diff --git a/test/cases/runtime/missing-module-exception-dynamic-import/warnings.js b/test/cases/runtime/missing-module-exception-dynamic-import/warnings.js new file mode 100644 index 00000000000..0aca9120cf0 --- /dev/null +++ b/test/cases/runtime/missing-module-exception-dynamic-import/warnings.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + [/Module not found/, /Can't resolve '\.\/fail-1' /], + [/Module not found/, /Can't resolve '\.\/fail-2' /], + [/Module not found/, /Can't resolve '\.\/fail-3' /] +]; diff --git a/test/cases/runtime/missing-module-exception-require/index.js b/test/cases/runtime/missing-module-exception-require/index.js new file mode 100644 index 00000000000..366bdfd7485 --- /dev/null +++ b/test/cases/runtime/missing-module-exception-require/index.js @@ -0,0 +1,9 @@ +it("should have correct error code", function () { + try { + require("./fail-1"); + require("./fail-2").property; + require("./fail-3").property.sub(); + } catch (e) { + expect(e.code).toBe("MODULE_NOT_FOUND"); + } +}); diff --git a/test/cases/runtime/missing-module-exception-require/warnings.js b/test/cases/runtime/missing-module-exception-require/warnings.js new file mode 100644 index 00000000000..0aca9120cf0 --- /dev/null +++ b/test/cases/runtime/missing-module-exception-require/warnings.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + [/Module not found/, /Can't resolve '\.\/fail-1' /], + [/Module not found/, /Can't resolve '\.\/fail-2' /], + [/Module not found/, /Can't resolve '\.\/fail-3' /] +]; diff --git a/test/cases/runtime/missing-module-exception/index.js b/test/cases/runtime/missing-module-exception/index.js deleted file mode 100644 index 3351fb7a5a4..00000000000 --- a/test/cases/runtime/missing-module-exception/index.js +++ /dev/null @@ -1,7 +0,0 @@ -it("should have correct error code", function() { - try { - require("./fail"); - } catch(e) { - expect(e.code).toBe("MODULE_NOT_FOUND"); - } -}); diff --git a/test/cases/runtime/missing-module-exception/warnings.js b/test/cases/runtime/missing-module-exception/warnings.js deleted file mode 100644 index fd523a239ab..00000000000 --- a/test/cases/runtime/missing-module-exception/warnings.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = [ - [/Module not found/, /Can't resolve '\.\/fail' /] -]; \ No newline at end of file diff --git a/test/cases/runtime/missing-module-syntax-error/errors.js b/test/cases/runtime/missing-module-syntax-error/errors.js new file mode 100644 index 00000000000..73329ef5a9a --- /dev/null +++ b/test/cases/runtime/missing-module-syntax-error/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/Module not found/, /Can't resolve '\.\/someModule' /]]; diff --git a/test/cases/runtime/missing-module-syntax-error/index.js b/test/cases/runtime/missing-module-syntax-error/index.js new file mode 100644 index 00000000000..d4b37ada905 --- /dev/null +++ b/test/cases/runtime/missing-module-syntax-error/index.js @@ -0,0 +1,11 @@ + + +it("should have correct error code", function() { + + try { + require("./module"); + } catch(e) { + expect(e.code).toBe("MODULE_NOT_FOUND"); + } + +}); diff --git a/test/cases/runtime/missing-module-syntax-error/module.js b/test/cases/runtime/missing-module-syntax-error/module.js new file mode 100644 index 00000000000..be691c79099 --- /dev/null +++ b/test/cases/runtime/missing-module-syntax-error/module.js @@ -0,0 +1,3 @@ +import { SomeClass } from "./someModule"; + +new SomeClass(); diff --git a/test/cases/runtime/require-function/index.js b/test/cases/runtime/require-function/index.js index bd6a7caf019..af3f3160050 100644 --- a/test/cases/runtime/require-function/index.js +++ b/test/cases/runtime/require-function/index.js @@ -1,3 +1,7 @@ +__webpack_modules__; +require.cache; +__webpack_public_path__; + it("should have correct properties on the require function", function() { expect(__webpack_require__.c).toBeTypeOf("object"); expect(__webpack_require__.m).toBeTypeOf("object"); diff --git a/test/cases/scope-hoisting/circular-root-export/external-ref.js b/test/cases/scope-hoisting/circular-root-export/external-ref.js new file mode 100644 index 00000000000..1ef8a6f61e6 --- /dev/null +++ b/test/cases/scope-hoisting/circular-root-export/external-ref.js @@ -0,0 +1 @@ +import "./external"; diff --git a/test/cases/scope-hoisting/circular-root-export/external.js b/test/cases/scope-hoisting/circular-root-export/external.js new file mode 100644 index 00000000000..ca5be3c28d9 --- /dev/null +++ b/test/cases/scope-hoisting/circular-root-export/external.js @@ -0,0 +1,13 @@ +import { a, b, c, default as d } from "./root"; + +expect(a()).toBe("a"); +if (process.env.NODE_ENV === "production") { + // These two cases only work correctly when scope hoisted + expect(b()).toBe("b"); + expect(Object(c).b()).toBe("b"); +} +expect(() => d).toThrow(); + +export function test() { + expect(d).toBe(d); +} diff --git a/test/cases/scope-hoisting/circular-root-export/index.js b/test/cases/scope-hoisting/circular-root-export/index.js new file mode 100644 index 00000000000..82c6f8fa9cf --- /dev/null +++ b/test/cases/scope-hoisting/circular-root-export/index.js @@ -0,0 +1,7 @@ +it("should hoist exports in a concatenated module", () => { + return import("./root-ref").then(m => { + m.test(); + }); +}); + +if (Math.random() < 0) import("./external-ref"); diff --git a/test/cases/scope-hoisting/circular-root-export/module.js b/test/cases/scope-hoisting/circular-root-export/module.js new file mode 100644 index 00000000000..6ff994e5f04 --- /dev/null +++ b/test/cases/scope-hoisting/circular-root-export/module.js @@ -0,0 +1,6 @@ +export function b() { + return "b"; +} +export function bb() { + return "bb"; +} diff --git a/test/cases/scope-hoisting/circular-root-export/root-ref.js b/test/cases/scope-hoisting/circular-root-export/root-ref.js new file mode 100644 index 00000000000..63a76f1cbc8 --- /dev/null +++ b/test/cases/scope-hoisting/circular-root-export/root-ref.js @@ -0,0 +1 @@ +export { test } from "./root"; diff --git a/test/cases/scope-hoisting/circular-root-export/root.js b/test/cases/scope-hoisting/circular-root-export/root.js new file mode 100644 index 00000000000..96a61a86c51 --- /dev/null +++ b/test/cases/scope-hoisting/circular-root-export/root.js @@ -0,0 +1,13 @@ +export { test } from "./external"; +import * as c from "./module"; +export { c }; +import * as cc from "./module"; +export { cc }; +export * from "./module"; +export default "d"; +export function a() { + return "a"; +} +export function aa() { + return "aa"; +} diff --git a/test/cases/scope-hoisting/delete-issue-10831/index.js b/test/cases/scope-hoisting/delete-issue-10831/index.js new file mode 100644 index 00000000000..91d7e252ee6 --- /dev/null +++ b/test/cases/scope-hoisting/delete-issue-10831/index.js @@ -0,0 +1,7 @@ +import { object } from "./module"; + +it("should allow to delete a imported property", () => { + expect(object).toEqual({ property: true }); + delete object.property; + expect(object).toEqual({}); +}); diff --git a/test/cases/scope-hoisting/delete-issue-10831/module.js b/test/cases/scope-hoisting/delete-issue-10831/module.js new file mode 100644 index 00000000000..f059c5e4d59 --- /dev/null +++ b/test/cases/scope-hoisting/delete-issue-10831/module.js @@ -0,0 +1 @@ +export const object = { property: true }; diff --git a/test/cases/scope-hoisting/esModule/index.js b/test/cases/scope-hoisting/esModule/index.js new file mode 100644 index 00000000000..769d4eeba44 --- /dev/null +++ b/test/cases/scope-hoisting/esModule/index.js @@ -0,0 +1,6 @@ +it("should have the __esModule flag", () => { + return import("./module").then(mod => { + expect(mod.__esModule).toBe(true); + expect(mod.default).toBe(84); + }) +}) diff --git a/test/cases/scope-hoisting/esModule/module.js b/test/cases/scope-hoisting/esModule/module.js new file mode 100644 index 00000000000..a6fa9eb3dd6 --- /dev/null +++ b/test/cases/scope-hoisting/esModule/module.js @@ -0,0 +1,3 @@ +import other from "./other"; + +export default other * 2; diff --git a/test/cases/scope-hoisting/esModule/other.js b/test/cases/scope-hoisting/esModule/other.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/scope-hoisting/esModule/other.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/scope-hoisting/export-namespace/index.js b/test/cases/scope-hoisting/export-namespace/index.js index f551d349e83..8020f45e589 100644 --- a/test/cases/scope-hoisting/export-namespace/index.js +++ b/test/cases/scope-hoisting/export-namespace/index.js @@ -2,17 +2,15 @@ import { ns as ns1 } from "./module1"; const ns2 = require("./module2").ns; it("should allow to export a namespace object (concated)", function() { - expect(ns1).toEqual({ + expect(ns1).toEqual(nsObj({ a: "a", - b: "b", - [Symbol.toStringTag]: "Module" - }); + b: "b" + })); }); it("should allow to export a namespace object (exposed)", function() { - expect(ns2).toEqual({ + expect(ns2).toEqual(nsObj({ a: "a", - b: "b", - [Symbol.toStringTag]: "Module" - }); + b: "b" + })); }); diff --git a/test/cases/scope-hoisting/external-root/chunk.js b/test/cases/scope-hoisting/external-root/chunk.js new file mode 100644 index 00000000000..564af59e794 --- /dev/null +++ b/test/cases/scope-hoisting/external-root/chunk.js @@ -0,0 +1 @@ +import result from "./root2"; diff --git a/test/cases/scope-hoisting/external-root/index.js b/test/cases/scope-hoisting/external-root/index.js new file mode 100644 index 00000000000..6c81313f6be --- /dev/null +++ b/test/cases/scope-hoisting/external-root/index.js @@ -0,0 +1,13 @@ +import "./module"; +import f, { ns } from "./root2"; +import * as r2 from "./root2"; + +it("should be able to import a secondary root", () => { + expect(f()).toBe("ok"); + expect(f.x()).toBe("ok"); + expect(ns.f()).toBe("ok"); + expect(ns.f.x()).toBe("ok"); + expect(r2.ns.f()).toBe("ok"); + expect(r2.ns.f.x()).toBe("ok"); + return import("./chunk"); +}); diff --git a/test/cases/scope-hoisting/external-root/module.js b/test/cases/scope-hoisting/external-root/module.js new file mode 100644 index 00000000000..cb0ff5c3b54 --- /dev/null +++ b/test/cases/scope-hoisting/external-root/module.js @@ -0,0 +1 @@ +export {}; diff --git a/test/cases/scope-hoisting/external-root/root2-module.js b/test/cases/scope-hoisting/external-root/root2-module.js new file mode 100644 index 00000000000..00bb122ff6c --- /dev/null +++ b/test/cases/scope-hoisting/external-root/root2-module.js @@ -0,0 +1,5 @@ +const f = () => "ok"; +f.x = function() { + return this(); +}; +export { f }; diff --git a/test/cases/scope-hoisting/external-root/root2.js b/test/cases/scope-hoisting/external-root/root2.js new file mode 100644 index 00000000000..93054dbfff4 --- /dev/null +++ b/test/cases/scope-hoisting/external-root/root2.js @@ -0,0 +1,10 @@ +import * as ns from "./root2-module"; + +const f = () => "ok"; +f.x = function() { + return this(); +}; + +export default f; + +export { ns }; diff --git a/test/cases/scope-hoisting/import-order-11617/a.js b/test/cases/scope-hoisting/import-order-11617/a.js new file mode 100644 index 00000000000..72a4ea378cf --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/a.js @@ -0,0 +1,6 @@ +import "./b"; +import "./c"; + +import { track } from "./tracker"; + +track("a"); diff --git a/test/cases/scope-hoisting/import-order-11617/b.js b/test/cases/scope-hoisting/import-order-11617/b.js new file mode 100644 index 00000000000..06015728c19 --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/b.js @@ -0,0 +1,5 @@ +import "./x"; + +import { track } from "./tracker"; + +track("b"); diff --git a/test/cases/scope-hoisting/import-order-11617/c.js b/test/cases/scope-hoisting/import-order-11617/c.js new file mode 100644 index 00000000000..df81336b7aa --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/c.js @@ -0,0 +1,3 @@ +var track = require("./tracker").track; + +track("c"); diff --git a/test/cases/scope-hoisting/import-order-11617/index.js b/test/cases/scope-hoisting/import-order-11617/index.js new file mode 100644 index 00000000000..620e8555fb4 --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/index.js @@ -0,0 +1,8 @@ +import "./x"; +import "./y"; +import "./a"; +import { log } from "./tracker"; + +it("should evaluate import in the correct order", function () { + expect(log).toEqual(["b", "c", "a"]); +}); diff --git a/test/cases/scope-hoisting/import-order-11617/tracker.js b/test/cases/scope-hoisting/import-order-11617/tracker.js new file mode 100644 index 00000000000..15389676588 --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/tracker.js @@ -0,0 +1,5 @@ +export var log = []; + +export function track(name) { + log.push(name); +} diff --git a/test/cases/scope-hoisting/import-order-11617/x.js b/test/cases/scope-hoisting/import-order-11617/x.js new file mode 100644 index 00000000000..122ec5d2d79 --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/x.js @@ -0,0 +1 @@ +console.log.bind(console); diff --git a/test/cases/scope-hoisting/import-order-11617/y.js b/test/cases/scope-hoisting/import-order-11617/y.js new file mode 100644 index 00000000000..122ec5d2d79 --- /dev/null +++ b/test/cases/scope-hoisting/import-order-11617/y.js @@ -0,0 +1 @@ +console.log.bind(console); diff --git a/test/cases/scope-hoisting/inside-class/test.filter.js b/test/cases/scope-hoisting/inside-class/test.filter.js index b4b5c42560c..e6814dfde4b 100644 --- a/test/cases/scope-hoisting/inside-class/test.filter.js +++ b/test/cases/scope-hoisting/inside-class/test.filter.js @@ -1,5 +1,5 @@ -var supportsES6 = require("../../../helpers/supportsES6"); +"use strict"; -module.exports = function(config) { - return !config.minimize && supportsES6(); -}; +const supportsES6 = require("../../../helpers/supportsES6"); + +module.exports = () => supportsES6(); diff --git a/test/cases/scope-hoisting/issue-10308/commonjs.js b/test/cases/scope-hoisting/issue-10308/commonjs.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10308/commonjs.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/cases/scope-hoisting/issue-10308/external.js b/test/cases/scope-hoisting/issue-10308/external.js new file mode 100644 index 00000000000..47cee2d7ba3 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10308/external.js @@ -0,0 +1,3 @@ +export function test(base) { + return base + 2; +} diff --git a/test/cases/scope-hoisting/issue-10308/index.js b/test/cases/scope-hoisting/issue-10308/index.js new file mode 100644 index 00000000000..b390c356809 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10308/index.js @@ -0,0 +1,6 @@ +import { fn } from "./root"; +import(/* webpackMode: "eager" */ "./external"); + +it("should use the correct names", () => { + expect(fn()).toBe(42); +}); diff --git a/test/cases/scope-hoisting/issue-10308/root.js b/test/cases/scope-hoisting/issue-10308/root.js new file mode 100644 index 00000000000..d417c38e405 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10308/root.js @@ -0,0 +1,14 @@ +import CommonJs from "./commonjs"; +import { test } from "./external"; + +function fn() { + CommonJs; + + var external = 40; + + var externalValue = test(external); + + return externalValue; +} + +export { fn }; diff --git a/test/cases/scope-hoisting/issue-10409/a.js b/test/cases/scope-hoisting/issue-10409/a.js new file mode 100644 index 00000000000..087e90023e4 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10409/a.js @@ -0,0 +1,2 @@ +import cts from "./cts"; +export default cts.connectData(function() {}); diff --git a/test/cases/scope-hoisting/issue-10409/b.js b/test/cases/scope-hoisting/issue-10409/b.js new file mode 100644 index 00000000000..6ad5255ada8 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10409/b.js @@ -0,0 +1,2 @@ +import cts from "./cts"; +export function b() {} diff --git a/test/cases/scope-hoisting/issue-10409/c.js b/test/cases/scope-hoisting/issue-10409/c.js new file mode 100644 index 00000000000..99eff168d1a --- /dev/null +++ b/test/cases/scope-hoisting/issue-10409/c.js @@ -0,0 +1,3 @@ +import cts from "./cts"; +import a from "./a"; +export function c() {} diff --git a/test/cases/scope-hoisting/issue-10409/cts.js b/test/cases/scope-hoisting/issue-10409/cts.js new file mode 100644 index 00000000000..df577722c0a --- /dev/null +++ b/test/cases/scope-hoisting/issue-10409/cts.js @@ -0,0 +1,6 @@ +import * as cts from "./cts"; +export { cts as default }; +export function connectData() {} +export function yyy() {} +export { b } from "./b"; +export { c } from "./c"; diff --git a/test/cases/scope-hoisting/issue-10409/index.js b/test/cases/scope-hoisting/issue-10409/index.js new file mode 100644 index 00000000000..aee4b05ceeb --- /dev/null +++ b/test/cases/scope-hoisting/issue-10409/index.js @@ -0,0 +1,5 @@ +it("should import these modules correctly", () => { + return import("./main"); +}); + +if (Math.random() < 0) import("./b"); diff --git a/test/cases/scope-hoisting/issue-10409/main.js b/test/cases/scope-hoisting/issue-10409/main.js new file mode 100644 index 00000000000..c839869b169 --- /dev/null +++ b/test/cases/scope-hoisting/issue-10409/main.js @@ -0,0 +1,2 @@ +import cts from "./cts"; +import a from "./a"; diff --git a/test/cases/scope-hoisting/issue-11840/Mixin.js b/test/cases/scope-hoisting/issue-11840/Mixin.js new file mode 100644 index 00000000000..ac4784b2e6e --- /dev/null +++ b/test/cases/scope-hoisting/issue-11840/Mixin.js @@ -0,0 +1 @@ +export const Mixin = class Mixin {}; diff --git a/test/cases/scope-hoisting/issue-11840/index.js b/test/cases/scope-hoisting/issue-11840/index.js new file mode 100644 index 00000000000..d4df5f14adc --- /dev/null +++ b/test/cases/scope-hoisting/issue-11840/index.js @@ -0,0 +1,7 @@ +import { Mixin } from "./Mixin"; + +const createMixin = fn => class Mixin extends fn(Mixin) {}; + +it("should have no name conflict", () => { + expect(new (createMixin(x => x))()).toBeInstanceOf(Mixin); +}); diff --git a/test/cases/scope-hoisting/issue-5020-minimal/index.js b/test/cases/scope-hoisting/issue-5020-minimal/index.js index c664793105a..cd70d349d65 100644 --- a/test/cases/scope-hoisting/issue-5020-minimal/index.js +++ b/test/cases/scope-hoisting/issue-5020-minimal/index.js @@ -1,14 +1,13 @@ var testData = require("./src/index.js"); it("should export the correct values", function() { - expect(testData).toEqual({ - icon: { - svg: { - default: 1, - [Symbol.toStringTag]: "Module" - }, - [Symbol.toStringTag]: "Module" - }, - [Symbol.toStringTag]: "Module" - }); + expect(testData).toEqual( + nsObj({ + icon: nsObj({ + svg: nsObj({ + default: 1 + }) + }) + }) + ); }); diff --git a/test/cases/scope-hoisting/issue-5020/index.js b/test/cases/scope-hoisting/issue-5020/index.js index df60a977d4e..a841b19370a 100644 --- a/test/cases/scope-hoisting/issue-5020/index.js +++ b/test/cases/scope-hoisting/issue-5020/index.js @@ -1,31 +1,28 @@ var testData = require("./src/index.js"); it("should export the correct values", function() { - expect(testData).toEqual({ - svg5: { - svg: { - clinical1: { - svg1: 1 - }, - clinical2: { - svg2: 2 - }, - [Symbol.toStringTag]: "Module" - }, - [Symbol.toStringTag]: "Module" - }, - svg6: { - svg: { - test: { - svg1: 10 - }, - clinical2: { - svg2: 20 - }, - [Symbol.toStringTag]: "Module" - }, - [Symbol.toStringTag]: "Module" - }, - [Symbol.toStringTag]: "Module" - }); + expect(testData).toEqual( + nsObj({ + svg5: nsObj({ + svg: nsObj({ + clinical1: { + svg1: 1 + }, + clinical2: { + svg2: 2 + } + }) + }), + svg6: nsObj({ + svg: nsObj({ + test: { + svg1: 10 + }, + clinical2: { + svg2: 20 + } + }) + }) + }) + ); }) diff --git a/test/cases/scope-hoisting/issue-5443/index.js b/test/cases/scope-hoisting/issue-5443/index.js index 30c2bdb7de3..f6d76307bc0 100644 --- a/test/cases/scope-hoisting/issue-5443/index.js +++ b/test/cases/scope-hoisting/issue-5443/index.js @@ -1,9 +1,8 @@ import { module } from "./reexport"; it("should have the correct values", function() { - expect(module).toEqual({ + expect(module).toEqual(nsObj({ default: "default", - named: "named", - [Symbol.toStringTag]: "Module" - }); + named: "named" + })); }); diff --git a/test/cases/scope-hoisting/issue-7930/export.js b/test/cases/scope-hoisting/issue-7930/export.js new file mode 100644 index 00000000000..02fdba6f51e --- /dev/null +++ b/test/cases/scope-hoisting/issue-7930/export.js @@ -0,0 +1,5 @@ +export var a = 1; + +var value = 42; + +export { value }; diff --git a/test/cases/scope-hoisting/issue-7930/index.js b/test/cases/scope-hoisting/issue-7930/index.js new file mode 100644 index 00000000000..fae3343e4d2 --- /dev/null +++ b/test/cases/scope-hoisting/issue-7930/index.js @@ -0,0 +1,10 @@ +import { value } from "./module"; + +it("should export the correct value", () => { + expect(value).toBe(42); +}); + +// prevent scope hoisting +if(Math.random() < -1) { + console.log(module.id); +} diff --git a/test/cases/scope-hoisting/issue-7930/module.js b/test/cases/scope-hoisting/issue-7930/module.js new file mode 100644 index 00000000000..ffea9c3cfea --- /dev/null +++ b/test/cases/scope-hoisting/issue-7930/module.js @@ -0,0 +1 @@ +export * from "./export"; diff --git a/test/cases/scope-hoisting/json-reexport-6700/warnings.js b/test/cases/scope-hoisting/json-reexport-6700/warnings.js new file mode 100644 index 00000000000..f905ae87cdb --- /dev/null +++ b/test/cases/scope-hoisting/json-reexport-6700/warnings.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = [ + [ + /Should not import the named export 'a' \(reexported as 'a'\) from default-exporting module \(only default export is available soon\)/ + ], + [ + /Should not import the named export 'b' \(reexported as 'b'\) from default-exporting module \(only default export is available soon\)/ + ] +]; diff --git a/test/cases/scope-hoisting/orphan/index.js b/test/cases/scope-hoisting/orphan/index.js new file mode 100644 index 00000000000..20dfe4b4d9e --- /dev/null +++ b/test/cases/scope-hoisting/orphan/index.js @@ -0,0 +1,6 @@ +import x from "pkg"; + +it("should compile fine", () => { + const result = x; + expect(result.value).toBe(42); +}); diff --git a/test/cases/scope-hoisting/orphan/node_modules/pkg/b.js b/test/cases/scope-hoisting/orphan/node_modules/pkg/b.js new file mode 100644 index 00000000000..b0f52efa144 --- /dev/null +++ b/test/cases/scope-hoisting/orphan/node_modules/pkg/b.js @@ -0,0 +1,3 @@ +import { y } from './module'; +y; +export default 1; diff --git a/test/cases/scope-hoisting/orphan/node_modules/pkg/index.js b/test/cases/scope-hoisting/orphan/node_modules/pkg/index.js new file mode 100644 index 00000000000..e85b05aa602 --- /dev/null +++ b/test/cases/scope-hoisting/orphan/node_modules/pkg/index.js @@ -0,0 +1,4 @@ +import { y as used } from "./module" +import unused from "./b" + +export default used; diff --git a/test/cases/scope-hoisting/orphan/node_modules/pkg/module.js b/test/cases/scope-hoisting/orphan/node_modules/pkg/module.js new file mode 100644 index 00000000000..c741c4ba314 --- /dev/null +++ b/test/cases/scope-hoisting/orphan/node_modules/pkg/module.js @@ -0,0 +1,4 @@ +import x from './x'; +import * as y from './y'; + +export { x, y }; diff --git a/test/cases/scope-hoisting/orphan/node_modules/pkg/package.json b/test/cases/scope-hoisting/orphan/node_modules/pkg/package.json new file mode 100644 index 00000000000..2124100b0ef --- /dev/null +++ b/test/cases/scope-hoisting/orphan/node_modules/pkg/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} \ No newline at end of file diff --git a/test/cases/scope-hoisting/orphan/node_modules/pkg/x.js b/test/cases/scope-hoisting/orphan/node_modules/pkg/x.js new file mode 100644 index 00000000000..55bb2097431 --- /dev/null +++ b/test/cases/scope-hoisting/orphan/node_modules/pkg/x.js @@ -0,0 +1 @@ +export default 1 \ No newline at end of file diff --git a/test/cases/scope-hoisting/orphan/node_modules/pkg/y.js b/test/cases/scope-hoisting/orphan/node_modules/pkg/y.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/cases/scope-hoisting/orphan/node_modules/pkg/y.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/cases/scope-hoisting/reexport-star-exposed-cjs/a.js b/test/cases/scope-hoisting/reexport-star-exposed-cjs/a.js new file mode 100644 index 00000000000..c1ce35449b3 --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-exposed-cjs/a.js @@ -0,0 +1 @@ +exports.named = "named"; diff --git a/test/cases/scope-hoisting/reexport-star-exposed-cjs/b.js b/test/cases/scope-hoisting/reexport-star-exposed-cjs/b.js new file mode 100644 index 00000000000..ee6e29df96d --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-exposed-cjs/b.js @@ -0,0 +1 @@ +export { named } from "./a"; diff --git a/test/cases/scope-hoisting/reexport-star-exposed-cjs/c.js b/test/cases/scope-hoisting/reexport-star-exposed-cjs/c.js new file mode 100644 index 00000000000..14065b7bb3f --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-exposed-cjs/c.js @@ -0,0 +1 @@ +export * from "./b"; diff --git a/test/cases/scope-hoisting/reexport-star-exposed-cjs/index.js b/test/cases/scope-hoisting/reexport-star-exposed-cjs/index.js new file mode 100644 index 00000000000..44e195598fc --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-exposed-cjs/index.js @@ -0,0 +1,5 @@ +var c = require("./c"); + +it("should have the correct values", function() { + expect(c.named).toBe("named"); +}); diff --git a/test/cases/scope-hoisting/reexport-star-external-cjs/a.js b/test/cases/scope-hoisting/reexport-star-external-cjs/a.js new file mode 100644 index 00000000000..c1ce35449b3 --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-external-cjs/a.js @@ -0,0 +1 @@ +exports.named = "named"; diff --git a/test/cases/scope-hoisting/reexport-star-external-cjs/b.js b/test/cases/scope-hoisting/reexport-star-external-cjs/b.js new file mode 100644 index 00000000000..ad28b32d489 --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-external-cjs/b.js @@ -0,0 +1 @@ +export var other = "other"; diff --git a/test/cases/scope-hoisting/reexport-star-external-cjs/c.js b/test/cases/scope-hoisting/reexport-star-external-cjs/c.js new file mode 100644 index 00000000000..3ebcd0b9763 --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-external-cjs/c.js @@ -0,0 +1,2 @@ +export * from "./a"; +export * from "./b"; diff --git a/test/cases/scope-hoisting/reexport-star-external-cjs/index.js b/test/cases/scope-hoisting/reexport-star-external-cjs/index.js new file mode 100644 index 00000000000..44e195598fc --- /dev/null +++ b/test/cases/scope-hoisting/reexport-star-external-cjs/index.js @@ -0,0 +1,5 @@ +var c = require("./c"); + +it("should have the correct values", function() { + expect(c.named).toBe("named"); +}); diff --git a/test/cases/scope-hoisting/renaming-shorthand-5027/test.filter.js b/test/cases/scope-hoisting/renaming-shorthand-5027/test.filter.js index ccd1717d158..798de077511 100644 --- a/test/cases/scope-hoisting/renaming-shorthand-5027/test.filter.js +++ b/test/cases/scope-hoisting/renaming-shorthand-5027/test.filter.js @@ -1,12 +1,12 @@ -var supportsES6 = require("../../../helpers/supportsES6"); -var supportDefaultAssignment = require("../../../helpers/supportDefaultAssignment"); -var supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); -var supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); +"use strict"; -module.exports = function(config) { - return !config.minimize && - supportsES6() && - supportDefaultAssignment() && - supportsObjectDestructuring() && - supportsIteratorDestructuring(); -}; +const supportDefaultAssignment = require("../../../helpers/supportDefaultAssignment"); +const supportsES6 = require("../../../helpers/supportsES6"); +const supportsIteratorDestructuring = require("../../../helpers/supportsIteratorDestructuring"); +const supportsObjectDestructuring = require("../../../helpers/supportsObjectDestructuring"); + +module.exports = () => + supportsES6() && + supportDefaultAssignment() && + supportsObjectDestructuring() && + supportsIteratorDestructuring(); diff --git a/test/cases/scope-hoisting/side-effects-11662/index.js b/test/cases/scope-hoisting/side-effects-11662/index.js new file mode 100644 index 00000000000..3aad51a4c60 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11662/index.js @@ -0,0 +1,5 @@ +import { value } from "package"; + +it("should import reexported export correctly", () => { + expect(value).toBe(42); +}); diff --git a/test/cases/scope-hoisting/side-effects-11662/node_modules/package/d.js b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/d.js new file mode 100644 index 00000000000..3e339a2d985 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/d.js @@ -0,0 +1 @@ +export { value } from './e'; diff --git a/test/cases/scope-hoisting/side-effects-11662/node_modules/package/e.js b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/e.js new file mode 100644 index 00000000000..2eae68c5365 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/e.js @@ -0,0 +1,3 @@ +export { value } from './module'; + +export function func() {} diff --git a/test/cases/scope-hoisting/side-effects-11662/node_modules/package/index.js b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/index.js new file mode 100644 index 00000000000..a45ce9654c0 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/index.js @@ -0,0 +1,5 @@ +// @uifabric/styling/lib/index.js +export * from "./d"; + +import { func } from './e'; +func(); diff --git a/test/cases/scope-hoisting/side-effects-11662/node_modules/package/module.js b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/module.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/module.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/cases/scope-hoisting/side-effects-11662/node_modules/package/package.json b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/package.json new file mode 100644 index 00000000000..0942507974a --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11662/node_modules/package/package.json @@ -0,0 +1,5 @@ +{ + "sideEffects": [ + "index.js" + ] +} diff --git a/test/cases/scope-hoisting/side-effects-11990-star/chunk1.js b/test/cases/scope-hoisting/side-effects-11990-star/chunk1.js new file mode 100644 index 00000000000..9ca734f9ba8 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/chunk1.js @@ -0,0 +1,2 @@ +import { value3 } from "./reexport"; +expect(value3).toBe(42); diff --git a/test/cases/scope-hoisting/side-effects-11990-star/chunk2.js b/test/cases/scope-hoisting/side-effects-11990-star/chunk2.js new file mode 100644 index 00000000000..22041a0b201 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/chunk2.js @@ -0,0 +1,2 @@ +import { value2 } from "./module"; +expect(value2).toBe(42); diff --git a/test/cases/scope-hoisting/side-effects-11990-star/index.js b/test/cases/scope-hoisting/side-effects-11990-star/index.js new file mode 100644 index 00000000000..ef5350b5b0e --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/index.js @@ -0,0 +1,9 @@ +import { value, value3 } from "./reexport"; + +it("should generate working code", () => { + expect(value).toBe(42); + expect(value3).toBe(42); +}); + +it("should run the chunk1", () => import("./chunk1")); +it("should run the chunk2", () => import("./chunk2")); diff --git a/test/cases/scope-hoisting/side-effects-11990-star/module-concat.js b/test/cases/scope-hoisting/side-effects-11990-star/module-concat.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/module-concat.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/scope-hoisting/side-effects-11990-star/module.js b/test/cases/scope-hoisting/side-effects-11990-star/module.js new file mode 100644 index 00000000000..3073df0aff2 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/module.js @@ -0,0 +1,2 @@ +export const value = 42; +export const value2 = 42; diff --git a/test/cases/scope-hoisting/side-effects-11990-star/package.json b/test/cases/scope-hoisting/side-effects-11990-star/package.json new file mode 100644 index 00000000000..91aa84e230e --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/package.json @@ -0,0 +1,5 @@ +{ + "sideEffects": [ + "./reexport.js" + ] +} diff --git a/test/cases/scope-hoisting/side-effects-11990-star/reexport-concat.js b/test/cases/scope-hoisting/side-effects-11990-star/reexport-concat.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/reexport-concat.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/scope-hoisting/side-effects-11990-star/reexport.js b/test/cases/scope-hoisting/side-effects-11990-star/reexport.js new file mode 100644 index 00000000000..a310c34e357 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/reexport.js @@ -0,0 +1,4 @@ +export * from "./reexport2"; +import { value4 } from "./reexport2"; +import v from "./reexport-concat"; +export const value3 = v + value4 - value4; diff --git a/test/cases/scope-hoisting/side-effects-11990-star/reexport2.js b/test/cases/scope-hoisting/side-effects-11990-star/reexport2.js new file mode 100644 index 00000000000..c0b882f7916 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990-star/reexport2.js @@ -0,0 +1,3 @@ +export * from "./module"; +export const value4 = 42; +module.id; diff --git a/test/cases/scope-hoisting/side-effects-11990/chunk1.js b/test/cases/scope-hoisting/side-effects-11990/chunk1.js new file mode 100644 index 00000000000..9ca734f9ba8 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/chunk1.js @@ -0,0 +1,2 @@ +import { value3 } from "./reexport"; +expect(value3).toBe(42); diff --git a/test/cases/scope-hoisting/side-effects-11990/chunk2.js b/test/cases/scope-hoisting/side-effects-11990/chunk2.js new file mode 100644 index 00000000000..22041a0b201 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/chunk2.js @@ -0,0 +1,2 @@ +import { value2 } from "./module"; +expect(value2).toBe(42); diff --git a/test/cases/scope-hoisting/side-effects-11990/index.js b/test/cases/scope-hoisting/side-effects-11990/index.js new file mode 100644 index 00000000000..ef5350b5b0e --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/index.js @@ -0,0 +1,9 @@ +import { value, value3 } from "./reexport"; + +it("should generate working code", () => { + expect(value).toBe(42); + expect(value3).toBe(42); +}); + +it("should run the chunk1", () => import("./chunk1")); +it("should run the chunk2", () => import("./chunk2")); diff --git a/test/cases/scope-hoisting/side-effects-11990/module-concat.js b/test/cases/scope-hoisting/side-effects-11990/module-concat.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/module-concat.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/scope-hoisting/side-effects-11990/module.js b/test/cases/scope-hoisting/side-effects-11990/module.js new file mode 100644 index 00000000000..3073df0aff2 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/module.js @@ -0,0 +1,2 @@ +export const value = 42; +export const value2 = 42; diff --git a/test/cases/scope-hoisting/side-effects-11990/package.json b/test/cases/scope-hoisting/side-effects-11990/package.json new file mode 100644 index 00000000000..91aa84e230e --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/package.json @@ -0,0 +1,5 @@ +{ + "sideEffects": [ + "./reexport.js" + ] +} diff --git a/test/cases/scope-hoisting/side-effects-11990/reexport-concat.js b/test/cases/scope-hoisting/side-effects-11990/reexport-concat.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/reexport-concat.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/scope-hoisting/side-effects-11990/reexport.js b/test/cases/scope-hoisting/side-effects-11990/reexport.js new file mode 100644 index 00000000000..7ea5749578e --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/reexport.js @@ -0,0 +1,4 @@ +export { value } from "./reexport2"; +import { value4 } from "./reexport2"; +import v from "./reexport-concat"; +export const value3 = v + value4 - value4; diff --git a/test/cases/scope-hoisting/side-effects-11990/reexport2.js b/test/cases/scope-hoisting/side-effects-11990/reexport2.js new file mode 100644 index 00000000000..9fdf39eb709 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-11990/reexport2.js @@ -0,0 +1,3 @@ +export { value } from "./module"; +export const value4 = 42; +module.id; diff --git a/test/cases/scope-hoisting/side-effects-9159/index.js b/test/cases/scope-hoisting/side-effects-9159/index.js new file mode 100644 index 00000000000..d079635e771 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-9159/index.js @@ -0,0 +1,5 @@ +it("should reexport from side-effect-free scope-hoisted module", () => { + const m = require("./reexport"); + expect(m.value).toBe(42); + expect(m.ns.default).toBe(42); +}); diff --git a/test/cases/scope-hoisting/side-effects-9159/package/index.js b/test/cases/scope-hoisting/side-effects-9159/package/index.js new file mode 100644 index 00000000000..8f260e45d50 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-9159/package/index.js @@ -0,0 +1,4 @@ +export { default as value } from "./module"; + +import * as ns from "./module"; +export { ns }; diff --git a/test/cases/scope-hoisting/side-effects-9159/package/module.js b/test/cases/scope-hoisting/side-effects-9159/package/module.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-9159/package/module.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/scope-hoisting/side-effects-9159/package/package.json b/test/cases/scope-hoisting/side-effects-9159/package/package.json new file mode 100644 index 00000000000..2124100b0ef --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-9159/package/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} \ No newline at end of file diff --git a/test/cases/scope-hoisting/side-effects-9159/reexport.js b/test/cases/scope-hoisting/side-effects-9159/reexport.js new file mode 100644 index 00000000000..ae7bd1d070b --- /dev/null +++ b/test/cases/scope-hoisting/side-effects-9159/reexport.js @@ -0,0 +1 @@ +export { value, ns } from "./package"; diff --git a/test/cases/scope-hoisting/this-in-import/cjs.js b/test/cases/scope-hoisting/this-in-import/cjs.js new file mode 100644 index 00000000000..6b065c4c769 --- /dev/null +++ b/test/cases/scope-hoisting/this-in-import/cjs.js @@ -0,0 +1,5 @@ +exports.obj2 = { + func() { + return this; + } +}; diff --git a/test/cases/scope-hoisting/this-in-import/index.js b/test/cases/scope-hoisting/this-in-import/index.js new file mode 100644 index 00000000000..14f6fb16398 --- /dev/null +++ b/test/cases/scope-hoisting/this-in-import/index.js @@ -0,0 +1,13 @@ +import { obj } from "./module.js"; +import { obj2 } from "./cjs.js"; + +it("should have correct this in called function", () => { + const r = obj.func(); + expect(r).toBe(obj); + obj.test(); +}); + +it("should have correct this in called function from commonjs", () => { + const r = obj2.func(); + expect(r).toBe(obj2); +}); diff --git a/test/cases/scope-hoisting/this-in-import/module.js b/test/cases/scope-hoisting/this-in-import/module.js new file mode 100644 index 00000000000..0344f832d83 --- /dev/null +++ b/test/cases/scope-hoisting/this-in-import/module.js @@ -0,0 +1,9 @@ +import { obj as obj2 } from "./module"; +export const obj = { + func() { + return this; + }, + test() { + expect(obj2.func()).toBe(obj2); + } +}; diff --git a/test/cases/side-effects/dynamic-reexports/checked-export/dynamic.js b/test/cases/side-effects/dynamic-reexports/checked-export/dynamic.js new file mode 100644 index 00000000000..130e87bcec3 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/checked-export/dynamic.js @@ -0,0 +1,2 @@ +Object(exports).value = 123; +Object(exports).value2 = 42; diff --git a/test/cases/side-effects/dynamic-reexports/checked-export/index.js b/test/cases/side-effects/dynamic-reexports/checked-export/index.js new file mode 100644 index 00000000000..c30705a797b --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/checked-export/index.js @@ -0,0 +1,3 @@ +export { value, value2 } from "./module"; + +throw new Error("Should not be loaded"); diff --git a/test/cases/side-effects/dynamic-reexports/checked-export/module.js b/test/cases/side-effects/dynamic-reexports/checked-export/module.js new file mode 100644 index 00000000000..6191513cb8b --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/checked-export/module.js @@ -0,0 +1,2 @@ +export const value = 42; +export * from "./dynamic"; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-static/a.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/a.js new file mode 100644 index 00000000000..75d3b753f0d --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/a.js @@ -0,0 +1,2 @@ +export * from "./module"; +export const valueUsed = __webpack_exports_info__.value.used; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-static/b.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/b.js new file mode 100644 index 00000000000..b999044ad5c --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/b.js @@ -0,0 +1 @@ +export * from "./module"; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-static/index.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/index.js new file mode 100644 index 00000000000..c5b3fa6e01c --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/index.js @@ -0,0 +1,4 @@ +export * from "./a"; +export * from "./b"; + +throw new Error("Should not be loaded"); diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-static/module.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/module.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-static/module.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/a.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/a.js new file mode 100644 index 00000000000..d8b6513427f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/a.js @@ -0,0 +1,2 @@ +export * from "./empty"; +export const valueUsed = __webpack_exports_info__.value.used; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/b.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/b.js new file mode 100644 index 00000000000..7ea57f94bb9 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/b.js @@ -0,0 +1 @@ +export * from "./empty"; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/empty.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/index.js b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/index.js new file mode 100644 index 00000000000..3ebcd0b9763 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/index.js @@ -0,0 +1,2 @@ +export * from "./a"; +export * from "./b"; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/package.json b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/package.json new file mode 100644 index 00000000000..2c63c085104 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target-with-side/package.json @@ -0,0 +1,2 @@ +{ +} diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target/a.js b/test/cases/side-effects/dynamic-reexports/dedupe-target/a.js new file mode 100644 index 00000000000..d8b6513427f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target/a.js @@ -0,0 +1,2 @@ +export * from "./empty"; +export const valueUsed = __webpack_exports_info__.value.used; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target/b.js b/test/cases/side-effects/dynamic-reexports/dedupe-target/b.js new file mode 100644 index 00000000000..7ea57f94bb9 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target/b.js @@ -0,0 +1 @@ +export * from "./empty"; diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target/empty.js b/test/cases/side-effects/dynamic-reexports/dedupe-target/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/side-effects/dynamic-reexports/dedupe-target/index.js b/test/cases/side-effects/dynamic-reexports/dedupe-target/index.js new file mode 100644 index 00000000000..c5b3fa6e01c --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dedupe-target/index.js @@ -0,0 +1,4 @@ +export * from "./a"; +export * from "./b"; + +throw new Error("Should not be loaded"); diff --git a/test/cases/side-effects/dynamic-reexports/default-export/a.js b/test/cases/side-effects/dynamic-reexports/default-export/a.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/default-export/a.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/cases/side-effects/dynamic-reexports/default-export/b.js b/test/cases/side-effects/dynamic-reexports/default-export/b.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/default-export/b.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/cases/side-effects/dynamic-reexports/default-export/empty.js b/test/cases/side-effects/dynamic-reexports/default-export/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/side-effects/dynamic-reexports/default-export/index.js b/test/cases/side-effects/dynamic-reexports/default-export/index.js new file mode 100644 index 00000000000..233397575af --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/default-export/index.js @@ -0,0 +1,6 @@ +export { default as a } from "./a"; +export { default as b } from "./b"; +export { default as empty } from "./empty"; +export { default as json } from "./json"; + +throw new Error("Should not be loaded"); diff --git a/test/cases/side-effects/dynamic-reexports/default-export/json.json b/test/cases/side-effects/dynamic-reexports/default-export/json.json new file mode 100644 index 00000000000..d81cc0710eb --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/default-export/json.json @@ -0,0 +1 @@ +42 diff --git a/test/cases/side-effects/dynamic-reexports/direct-export/dynamic.js b/test/cases/side-effects/dynamic-reexports/direct-export/dynamic.js new file mode 100644 index 00000000000..130e87bcec3 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/direct-export/dynamic.js @@ -0,0 +1,2 @@ +Object(exports).value = 123; +Object(exports).value2 = 42; diff --git a/test/cases/side-effects/dynamic-reexports/direct-export/index.js b/test/cases/side-effects/dynamic-reexports/direct-export/index.js new file mode 100644 index 00000000000..b999044ad5c --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/direct-export/index.js @@ -0,0 +1 @@ +export * from "./module"; diff --git a/test/cases/side-effects/dynamic-reexports/direct-export/module.js b/test/cases/side-effects/dynamic-reexports/direct-export/module.js new file mode 100644 index 00000000000..6191513cb8b --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/direct-export/module.js @@ -0,0 +1,2 @@ +export const value = 42; +export * from "./dynamic"; diff --git a/test/cases/side-effects/dynamic-reexports/dynamic-reexport-default/dynamic.js b/test/cases/side-effects/dynamic-reexports/dynamic-reexport-default/dynamic.js new file mode 100644 index 00000000000..39c382f2d53 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dynamic-reexport-default/dynamic.js @@ -0,0 +1 @@ +Object(exports).default = "dynamic"; diff --git a/test/cases/side-effects/dynamic-reexports/dynamic-reexport-default/index.js b/test/cases/side-effects/dynamic-reexports/dynamic-reexport-default/index.js new file mode 100644 index 00000000000..3e2a2b05e3a --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/dynamic-reexport-default/index.js @@ -0,0 +1,2 @@ +export * from "./dynamic"; +export default "static"; diff --git a/test/cases/side-effects/dynamic-reexports/index.js b/test/cases/side-effects/dynamic-reexports/index.js new file mode 100644 index 00000000000..b720f85ed41 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/index.js @@ -0,0 +1,78 @@ +import { unused, unprovided } from "./unused"; +import { + value as valueStatic, + valueUsed as valueUsedStatic +} from "./dedupe-target-static"; +import { + value as valueSide, + valueUsed as valueUsedSide +} from "./dedupe-target-with-side"; +import { value, valueUsed } from "./dedupe-target"; +import * as DefaultExport from "./default-export"; +import { + value as valueDirect, + value2 as value2Direct, + default as Default1 +} from "./direct-export"; +import { + value as valueChecked, + value2 as value2Checked +} from "./checked-export"; +import Default2 from "./dynamic-reexport-default"; +import { + value as valueMultipleSources, + value2 as value2MultipleSources +} from "./multiple-sources"; +import { a, b } from "./swapped"; + +it("should dedupe static reexport target", () => { + expect(valueStatic).toBe(42); + expect(valueUsedStatic).toBe(unused); +}); + +it("should dedupe dynamic reexport target", () => { + expect(value).toBe(undefined); + expect(valueUsed).toBe(unused); +}); + +it("should not dedupe dynamic reexport target when it has side-effects", () => { + expect(valueSide).toBe(undefined); + expect(valueUsedSide).toBe(true); +}); + +it("should optimize dynamic default reexport", () => { + expect(DefaultExport.a).toBe(42); + expect(DefaultExport.b).toBe(42); + expect(DefaultExport.empty).toEqual({}); + expect(DefaultExport.json).toBe(42); +}); + +it("should handle default export when reexporting", () => { + const module = Object(require("./reexports-excludes-default")); + expect(module.defaultProvided).toBe(unprovided); +}); + +it("should handle direct export when reexporting", () => { + expect(valueDirect).toBe(42); + expect(value2Direct).toBe(42); +}); + +it("should handle checked dynamic export when reexporting", () => { + expect(valueChecked).toBe(42); + expect(value2Checked).toBe(42); +}); + +it("should handle default export correctly", () => { + expect(Default1).toBe(undefined); + expect(Default2).toBe("static"); +}); + +it("should handle multiple dynamic sources correctly", () => { + expect(valueMultipleSources).toBe(42); + expect(value2MultipleSources).toBe(42); +}); + +it("should handle renamed dynamic reexports", () => { + expect(a).toBe(43); + expect(b).toBe(42); +}); diff --git a/test/cases/side-effects/dynamic-reexports/multiple-sources/a.js b/test/cases/side-effects/dynamic-reexports/multiple-sources/a.js new file mode 100644 index 00000000000..baf3793a747 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/multiple-sources/a.js @@ -0,0 +1 @@ +Object(exports).value = 42; diff --git a/test/cases/side-effects/dynamic-reexports/multiple-sources/b.js b/test/cases/side-effects/dynamic-reexports/multiple-sources/b.js new file mode 100644 index 00000000000..0e0dd77fafe --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/multiple-sources/b.js @@ -0,0 +1 @@ +Object(exports).value2 = 42; diff --git a/test/cases/side-effects/dynamic-reexports/multiple-sources/index.js b/test/cases/side-effects/dynamic-reexports/multiple-sources/index.js new file mode 100644 index 00000000000..3a1d89b456f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/multiple-sources/index.js @@ -0,0 +1,3 @@ +export * from "./module"; + +throw new Error("Should not be loaded"); diff --git a/test/cases/side-effects/dynamic-reexports/multiple-sources/module.js b/test/cases/side-effects/dynamic-reexports/multiple-sources/module.js new file mode 100644 index 00000000000..8773acf6d0a --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/multiple-sources/module.js @@ -0,0 +1,2 @@ +export * from "./module2"; +export * from "./a"; diff --git a/test/cases/side-effects/dynamic-reexports/multiple-sources/module2.js b/test/cases/side-effects/dynamic-reexports/multiple-sources/module2.js new file mode 100644 index 00000000000..14065b7bb3f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/multiple-sources/module2.js @@ -0,0 +1 @@ +export * from "./b"; diff --git a/test/cases/side-effects/dynamic-reexports/package.json b/test/cases/side-effects/dynamic-reexports/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/empty.js b/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/index.js b/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/index.js new file mode 100644 index 00000000000..b999044ad5c --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/index.js @@ -0,0 +1 @@ +export * from "./module"; diff --git a/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/module.js b/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/module.js new file mode 100644 index 00000000000..1a8a3f1df1f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/reexports-excludes-default/module.js @@ -0,0 +1,3 @@ +export * from "./empty"; +export const defaultUsed = __webpack_exports_info__.default.used; +export const defaultProvided = __webpack_exports_info__.default.provideInfo; diff --git a/test/cases/side-effects/dynamic-reexports/swapped/a.js b/test/cases/side-effects/dynamic-reexports/swapped/a.js new file mode 100644 index 00000000000..71becd3a350 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/swapped/a.js @@ -0,0 +1 @@ +export const a = 42; diff --git a/test/cases/side-effects/dynamic-reexports/swapped/b.js b/test/cases/side-effects/dynamic-reexports/swapped/b.js new file mode 100644 index 00000000000..fbf792d371f --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/swapped/b.js @@ -0,0 +1 @@ +Object(exports).b = 43; diff --git a/test/cases/side-effects/dynamic-reexports/swapped/index.js b/test/cases/side-effects/dynamic-reexports/swapped/index.js new file mode 100644 index 00000000000..0706d1f0a74 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/swapped/index.js @@ -0,0 +1 @@ +export * from "./module2"; diff --git a/test/cases/side-effects/dynamic-reexports/swapped/module.js b/test/cases/side-effects/dynamic-reexports/swapped/module.js new file mode 100644 index 00000000000..3ebcd0b9763 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/swapped/module.js @@ -0,0 +1,2 @@ +export * from "./a"; +export * from "./b"; diff --git a/test/cases/side-effects/dynamic-reexports/swapped/module2.js b/test/cases/side-effects/dynamic-reexports/swapped/module2.js new file mode 100644 index 00000000000..2cbe904c784 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/swapped/module2.js @@ -0,0 +1,3 @@ +export { a as b } from "./module"; +export { b as a } from "./module"; +export * from "./module"; diff --git a/test/cases/side-effects/dynamic-reexports/unused.js b/test/cases/side-effects/dynamic-reexports/unused.js new file mode 100644 index 00000000000..eaad7c7da65 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/unused.js @@ -0,0 +1,3 @@ +export const value = 42; +export const unused = __webpack_exports_info__.value.used; +export const unprovided = __webpack_exports_info__.other.provideInfo; diff --git a/test/cases/side-effects/dynamic-reexports/warnings.js b/test/cases/side-effects/dynamic-reexports/warnings.js new file mode 100644 index 00000000000..ee82907fd75 --- /dev/null +++ b/test/cases/side-effects/dynamic-reexports/warnings.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + [ + /export 'default' \(imported as 'Default1'\) was not found in '\.\/direct-export'/ + ] +]; diff --git a/test/cases/side-effects/empty-modules/cjs.js b/test/cases/side-effects/empty-modules/cjs.js new file mode 100644 index 00000000000..fef83a9cfe6 --- /dev/null +++ b/test/cases/side-effects/empty-modules/cjs.js @@ -0,0 +1 @@ +// comment diff --git a/test/cases/side-effects/empty-modules/index.js b/test/cases/side-effects/empty-modules/index.js new file mode 100644 index 00000000000..c2cb7bed0e0 --- /dev/null +++ b/test/cases/side-effects/empty-modules/index.js @@ -0,0 +1,19 @@ +import "./module"; +import "./cjs"; +import "./pure"; +import "./referenced"; +import "./side-referenced"; + +if (process.env.NODE_ENV === "production") { + it("should skip imports to empty modules", () => { + expect(require.resolveWeak("./cjs")).toBe(null); + expect(require.resolveWeak("./module")).toBe(null); + expect(require.resolveWeak("./pure")).toBe(null); + expect(require.resolveWeak("./referenced")).toBe(null); + }); +} + +it("should not skip transitive side effects", () => { + expect(global.value).toBe(true); + delete global.value; +}); diff --git a/test/cases/side-effects/empty-modules/module.js b/test/cases/side-effects/empty-modules/module.js new file mode 100644 index 00000000000..c5a5815bd5d --- /dev/null +++ b/test/cases/side-effects/empty-modules/module.js @@ -0,0 +1,2 @@ +// comment +export {}; diff --git a/test/cases/side-effects/empty-modules/pure.js b/test/cases/side-effects/empty-modules/pure.js new file mode 100644 index 00000000000..4f4a4cdcc4a --- /dev/null +++ b/test/cases/side-effects/empty-modules/pure.js @@ -0,0 +1,31 @@ +// comment +export default /*#__PURE__*/ console.log.bind(null, "test"); +const unused = /*#__PURE__*/ console.log.bind(null, "test"); +const unusedExport = /*#__PURE__*/ console.log.bind(null, "test"); +export { unusedExport, class1, class2, fun1, fun2, fun3 }; +function fun1() { + console.log.bind(null, "test"); + return unused; +} +const fun2 = function () { + console.log.bind(null, "test"); +}; +const fun3 = () => { + console.log.bind(null, "test"); +}; +class class1 { + constructor() { + console.log.bind(null, "test"); + } +} +const class2 = class { + constructor() { + console.log.bind(null, "test"); + } +}; +if ("") { + console.log.bind(null, "test"); +} +for (; false; ) {} +for (var i = 0; false; ) {} +while (false) {} diff --git a/test/cases/side-effects/empty-modules/referenced.js b/test/cases/side-effects/empty-modules/referenced.js new file mode 100644 index 00000000000..78ab1819913 --- /dev/null +++ b/test/cases/side-effects/empty-modules/referenced.js @@ -0,0 +1,8 @@ +import "./module"; +import "./cjs"; +import { unusedExport } from "./pure"; +export { unusedExport } from "./pure"; + +export function unused() { + return unusedExport; +} diff --git a/test/cases/side-effects/empty-modules/side-referenced.js b/test/cases/side-effects/empty-modules/side-referenced.js new file mode 100644 index 00000000000..52e867e9f20 --- /dev/null +++ b/test/cases/side-effects/empty-modules/side-referenced.js @@ -0,0 +1 @@ +import "./side"; diff --git a/test/cases/side-effects/empty-modules/side.js b/test/cases/side-effects/empty-modules/side.js new file mode 100644 index 00000000000..c9bec6433a4 --- /dev/null +++ b/test/cases/side-effects/empty-modules/side.js @@ -0,0 +1 @@ +global.value = true; diff --git a/test/cases/side-effects/issue-11673/index.js b/test/cases/side-effects/issue-11673/index.js new file mode 100644 index 00000000000..5f9b0e60b30 --- /dev/null +++ b/test/cases/side-effects/issue-11673/index.js @@ -0,0 +1,12 @@ +import { Worker } from "worker_threads"; +import { X } from "./module"; +// test + +it("should compile", done => { + expect(X()).toBe("X"); + const worker = new Worker(new URL("worker.js", import.meta.url)); + worker.once("message", value => { + expect(value).toBe(42); + Promise.resolve(worker.terminate()).then(() => done(), done); + }); +}); diff --git a/test/cases/side-effects/issue-11673/module.js b/test/cases/side-effects/issue-11673/module.js new file mode 100644 index 00000000000..8d1ac538f8a --- /dev/null +++ b/test/cases/side-effects/issue-11673/module.js @@ -0,0 +1,9 @@ +import value from "package"; + +export function X() { + return "X"; +} + +export function Y() { + return value; +} diff --git a/test/cases/side-effects/issue-11673/node_modules/package/index.js b/test/cases/side-effects/issue-11673/node_modules/package/index.js new file mode 100644 index 00000000000..09c37da1b5c --- /dev/null +++ b/test/cases/side-effects/issue-11673/node_modules/package/index.js @@ -0,0 +1,2 @@ +exports.default = 42; +module.exports = exports.default; diff --git a/test/cases/side-effects/issue-11673/node_modules/package/package.json b/test/cases/side-effects/issue-11673/node_modules/package/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/issue-11673/node_modules/package/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/side-effects/issue-11673/test.filter.js b/test/cases/side-effects/issue-11673/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/cases/side-effects/issue-11673/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/cases/side-effects/issue-11673/worker.js b/test/cases/side-effects/issue-11673/worker.js new file mode 100644 index 00000000000..21dd3fbc552 --- /dev/null +++ b/test/cases/side-effects/issue-11673/worker.js @@ -0,0 +1,4 @@ +import { Y } from "./module"; +import { parentPort } from "worker_threads"; + +parentPort.postMessage(Y()); diff --git a/test/cases/side-effects/issue-12071/index.js b/test/cases/side-effects/issue-12071/index.js new file mode 100644 index 00000000000..db25f5ee8dc --- /dev/null +++ b/test/cases/side-effects/issue-12071/index.js @@ -0,0 +1,11 @@ +require("./module"); +require("./reexport"); + +import { value } from "./reexport2"; +const { value: value2, own } = require("./reexport2"); + +it("should not crash", () => { + expect(value).toBe(42); + expect(value2).toBe(42); + expect(own).toBe(42); +}); diff --git a/test/cases/side-effects/issue-12071/module.js b/test/cases/side-effects/issue-12071/module.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/cases/side-effects/issue-12071/module.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/cases/side-effects/issue-12071/package.json b/test/cases/side-effects/issue-12071/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/issue-12071/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/side-effects/issue-12071/reexport.js b/test/cases/side-effects/issue-12071/reexport.js new file mode 100644 index 00000000000..b72ba5eb7db --- /dev/null +++ b/test/cases/side-effects/issue-12071/reexport.js @@ -0,0 +1,2 @@ +export { value } from "./module"; +export const own = 42; diff --git a/test/cases/side-effects/issue-12071/reexport2-concat.js b/test/cases/side-effects/issue-12071/reexport2-concat.js new file mode 100644 index 00000000000..4bead6aab51 --- /dev/null +++ b/test/cases/side-effects/issue-12071/reexport2-concat.js @@ -0,0 +1 @@ +export const test = () => {}; diff --git a/test/cases/side-effects/issue-12071/reexport2.js b/test/cases/side-effects/issue-12071/reexport2.js new file mode 100644 index 00000000000..a4c89e9f78f --- /dev/null +++ b/test/cases/side-effects/issue-12071/reexport2.js @@ -0,0 +1,3 @@ +import { test } from "./reexport2-concat"; +export * from "./reexport"; +test(); diff --git a/test/cases/side-effects/issue-12114/a.js b/test/cases/side-effects/issue-12114/a.js new file mode 100644 index 00000000000..fea4c811245 --- /dev/null +++ b/test/cases/side-effects/issue-12114/a.js @@ -0,0 +1,5 @@ +import { f } from "./reexport"; + +console.log.bind(console, f); + +export default f(); diff --git a/test/cases/side-effects/issue-12114/b.js b/test/cases/side-effects/issue-12114/b.js new file mode 100644 index 00000000000..5c0d9b9e857 --- /dev/null +++ b/test/cases/side-effects/issue-12114/b.js @@ -0,0 +1,5 @@ +import { f } from "base"; + +console.log.bind(console, f); + +export default f(); diff --git a/test/cases/side-effects/issue-12114/index.js b/test/cases/side-effects/issue-12114/index.js new file mode 100644 index 00000000000..1ce003fbef3 --- /dev/null +++ b/test/cases/side-effects/issue-12114/index.js @@ -0,0 +1,7 @@ +const a = require("./a"); +const b = require("./b"); + +it("should work", () => { + expect(a.default).toBe(42); + expect(b.default).toBe(42); +}); diff --git a/test/cases/side-effects/issue-12114/node_modules/base/index.js b/test/cases/side-effects/issue-12114/node_modules/base/index.js new file mode 100644 index 00000000000..12c6cb3bcea --- /dev/null +++ b/test/cases/side-effects/issue-12114/node_modules/base/index.js @@ -0,0 +1,5 @@ +import { __extends } from 'tslib'; + +console.log.bind(console, __extends); + +export const f = () => __extends; diff --git a/test/cases/side-effects/issue-12114/node_modules/base/package.json b/test/cases/side-effects/issue-12114/node_modules/base/package.json new file mode 100644 index 00000000000..15f20a07625 --- /dev/null +++ b/test/cases/side-effects/issue-12114/node_modules/base/package.json @@ -0,0 +1,5 @@ +{ + "name": "@test/base", + "sideEffects": false, + "version": "0.0.7" +} diff --git a/test/cases/side-effects/issue-12114/node_modules/tslib.js b/test/cases/side-effects/issue-12114/node_modules/tslib.js new file mode 100644 index 00000000000..dae299d0f81 --- /dev/null +++ b/test/cases/side-effects/issue-12114/node_modules/tslib.js @@ -0,0 +1 @@ +export const __extends = 42; diff --git a/test/cases/side-effects/issue-12114/reexport.js b/test/cases/side-effects/issue-12114/reexport.js new file mode 100644 index 00000000000..8f65558157f --- /dev/null +++ b/test/cases/side-effects/issue-12114/reexport.js @@ -0,0 +1 @@ +export { f } from 'base'; diff --git a/test/cases/side-effects/issue-12570-second-try/chunk.js b/test/cases/side-effects/issue-12570-second-try/chunk.js new file mode 100644 index 00000000000..da80a444c89 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/chunk.js @@ -0,0 +1,3 @@ +import { value } from "./inner-module"; + +console.log.bind(console, value); diff --git a/test/cases/side-effects/issue-12570-second-try/index.js b/test/cases/side-effects/issue-12570-second-try/index.js new file mode 100644 index 00000000000..dde84686a48 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/index.js @@ -0,0 +1,4 @@ +it("should compile", () => { + require("./module"); + require("./inner-module"); +}); diff --git a/test/cases/side-effects/issue-12570-second-try/inner-module.js b/test/cases/side-effects/issue-12570-second-try/inner-module.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/inner-module.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/cases/side-effects/issue-12570-second-try/inner-reexport-chain.js b/test/cases/side-effects/issue-12570-second-try/inner-reexport-chain.js new file mode 100644 index 00000000000..087e8eaf1fb --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/inner-reexport-chain.js @@ -0,0 +1 @@ +export * from "./inner-reexport.js"; diff --git a/test/cases/side-effects/issue-12570-second-try/inner-reexport.js b/test/cases/side-effects/issue-12570-second-try/inner-reexport.js new file mode 100644 index 00000000000..82fe79841f5 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/inner-reexport.js @@ -0,0 +1,2 @@ +export * from "./inner-module.js"; +export var other = 1; diff --git a/test/cases/side-effects/issue-12570-second-try/inner-reexport2.js b/test/cases/side-effects/issue-12570-second-try/inner-reexport2.js new file mode 100644 index 00000000000..c5d69fc6807 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/inner-reexport2.js @@ -0,0 +1,2 @@ +export * from "./inner-module.js"; +export var other2 = 1; diff --git a/test/cases/side-effects/issue-12570-second-try/module.js b/test/cases/side-effects/issue-12570-second-try/module.js new file mode 100644 index 00000000000..8c5150d7011 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/module.js @@ -0,0 +1 @@ +export * from "./reexport"; diff --git a/test/cases/side-effects/issue-12570-second-try/package.json b/test/cases/side-effects/issue-12570-second-try/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/side-effects/issue-12570-second-try/reexport.js b/test/cases/side-effects/issue-12570-second-try/reexport.js new file mode 100644 index 00000000000..51edcb74432 --- /dev/null +++ b/test/cases/side-effects/issue-12570-second-try/reexport.js @@ -0,0 +1,2 @@ +export * from "./inner-reexport-chain"; +export * from "./inner-reexport2"; diff --git a/test/cases/side-effects/issue-12570/chunk.js b/test/cases/side-effects/issue-12570/chunk.js new file mode 100644 index 00000000000..41abcce2b5f --- /dev/null +++ b/test/cases/side-effects/issue-12570/chunk.js @@ -0,0 +1,3 @@ +import { other } from "./inner-reexport"; + +console.log.bind(console, other); diff --git a/test/cases/side-effects/issue-12570/index.js b/test/cases/side-effects/issue-12570/index.js new file mode 100644 index 00000000000..c6ca2142abc --- /dev/null +++ b/test/cases/side-effects/issue-12570/index.js @@ -0,0 +1,4 @@ +it("should compile", () => { + require("./module"); + require("./chunk"); +}); diff --git a/test/cases/side-effects/issue-12570/inner-module.js b/test/cases/side-effects/issue-12570/inner-module.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/cases/side-effects/issue-12570/inner-module.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/cases/side-effects/issue-12570/inner-reexport.js b/test/cases/side-effects/issue-12570/inner-reexport.js new file mode 100644 index 00000000000..82fe79841f5 --- /dev/null +++ b/test/cases/side-effects/issue-12570/inner-reexport.js @@ -0,0 +1,2 @@ +export * from "./inner-module.js"; +export var other = 1; diff --git a/test/cases/side-effects/issue-12570/module.js b/test/cases/side-effects/issue-12570/module.js new file mode 100644 index 00000000000..8c5150d7011 --- /dev/null +++ b/test/cases/side-effects/issue-12570/module.js @@ -0,0 +1 @@ +export * from "./reexport"; diff --git a/test/cases/side-effects/issue-12570/package.json b/test/cases/side-effects/issue-12570/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/issue-12570/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/side-effects/issue-12570/reexport.js b/test/cases/side-effects/issue-12570/reexport.js new file mode 100644 index 00000000000..861a960415a --- /dev/null +++ b/test/cases/side-effects/issue-12570/reexport.js @@ -0,0 +1,2 @@ +export * from "./inner-reexport"; +export * from "./inner-module"; diff --git a/test/cases/side-effects/missing-module-7499/example/constants.js b/test/cases/side-effects/missing-module-7499/example/constants.js new file mode 100644 index 00000000000..9b857576f70 --- /dev/null +++ b/test/cases/side-effects/missing-module-7499/example/constants.js @@ -0,0 +1 @@ +export const hello = 'world' diff --git a/test/cases/side-effects/missing-module-7499/example/index.js b/test/cases/side-effects/missing-module-7499/example/index.js new file mode 100644 index 00000000000..a06738b7396 --- /dev/null +++ b/test/cases/side-effects/missing-module-7499/example/index.js @@ -0,0 +1,2 @@ +import * as constants from './constants' +export { constants } diff --git a/test/cases/side-effects/missing-module-7499/example/package.json b/test/cases/side-effects/missing-module-7499/example/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/missing-module-7499/example/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/side-effects/missing-module-7499/index.js b/test/cases/side-effects/missing-module-7499/index.js new file mode 100644 index 00000000000..fea57ceb0c5 --- /dev/null +++ b/test/cases/side-effects/missing-module-7499/index.js @@ -0,0 +1,9 @@ +import './example' + +it("should run correctly", function() { + return import('./lazy').then(lazy => { + expect(lazy.default()).toEqual(nsObj({ + hello: "world" + })); + }) +}); diff --git a/test/cases/side-effects/missing-module-7499/lazy.js b/test/cases/side-effects/missing-module-7499/lazy.js new file mode 100644 index 00000000000..f916eaa5b10 --- /dev/null +++ b/test/cases/side-effects/missing-module-7499/lazy.js @@ -0,0 +1,5 @@ +import { constants } from './example' + +export default function getConstants() { + return constants; +} diff --git a/test/cases/side-effects/order-issue-7665/index.js b/test/cases/side-effects/order-issue-7665/index.js new file mode 100644 index 00000000000..85e9d3df58a --- /dev/null +++ b/test/cases/side-effects/order-issue-7665/index.js @@ -0,0 +1,7 @@ +import array from "./tracker"; +import { b } from "./module"; + +it("should evaluate modules in the correct order", () => { + expect(b).toEqual("b"); + expect(array).toEqual(["b", "a"]); +}) diff --git a/test/cases/side-effects/order-issue-7665/module/a.js b/test/cases/side-effects/order-issue-7665/module/a.js new file mode 100644 index 00000000000..635f930d2ac --- /dev/null +++ b/test/cases/side-effects/order-issue-7665/module/a.js @@ -0,0 +1,5 @@ +import array from "../tracker"; + +array.push("a"); + +export default "a"; diff --git a/test/cases/side-effects/order-issue-7665/module/b.js b/test/cases/side-effects/order-issue-7665/module/b.js new file mode 100644 index 00000000000..3c47022b329 --- /dev/null +++ b/test/cases/side-effects/order-issue-7665/module/b.js @@ -0,0 +1,5 @@ +import array from "../tracker"; + +array.push("b"); + +export default "b"; diff --git a/test/cases/side-effects/order-issue-7665/module/index.js b/test/cases/side-effects/order-issue-7665/module/index.js new file mode 100644 index 00000000000..6303d91ada7 --- /dev/null +++ b/test/cases/side-effects/order-issue-7665/module/index.js @@ -0,0 +1,4 @@ +import b from './b'; +import './a'; + +export { b }; diff --git a/test/cases/side-effects/order-issue-7665/module/package.json b/test/cases/side-effects/order-issue-7665/module/package.json new file mode 100644 index 00000000000..a4ec69bc4ab --- /dev/null +++ b/test/cases/side-effects/order-issue-7665/module/package.json @@ -0,0 +1,6 @@ +{ + "sideEffects": [ + "./index.js", + "./a.js" + ] +} diff --git a/test/cases/side-effects/order-issue-7665/tracker.js b/test/cases/side-effects/order-issue-7665/tracker.js new file mode 100644 index 00000000000..d6d1738de67 --- /dev/null +++ b/test/cases/side-effects/order-issue-7665/tracker.js @@ -0,0 +1 @@ +export default []; diff --git a/test/cases/side-effects/wrong-module-10146/index.js b/test/cases/side-effects/wrong-module-10146/index.js new file mode 100644 index 00000000000..f58afa48ba0 --- /dev/null +++ b/test/cases/side-effects/wrong-module-10146/index.js @@ -0,0 +1,5 @@ +import { A } from "./module"; + +it("should return the correct module", () => { + expect(A()).toEqual("A/index.js"); +}); diff --git a/test/cases/side-effects/wrong-module-10146/module/A/A.js b/test/cases/side-effects/wrong-module-10146/module/A/A.js new file mode 100644 index 00000000000..a718f1bce88 --- /dev/null +++ b/test/cases/side-effects/wrong-module-10146/module/A/A.js @@ -0,0 +1,3 @@ +export default function hello() { + return 'A/A.js' +} diff --git a/test/cases/side-effects/wrong-module-10146/module/A/index.js b/test/cases/side-effects/wrong-module-10146/module/A/index.js new file mode 100644 index 00000000000..e7f7eb5c8c8 --- /dev/null +++ b/test/cases/side-effects/wrong-module-10146/module/A/index.js @@ -0,0 +1,6 @@ + +export { default as A } from "./A"; + +export default function hello() { + return 'A/index.js' +} diff --git a/test/cases/side-effects/wrong-module-10146/module/index.js b/test/cases/side-effects/wrong-module-10146/module/index.js new file mode 100644 index 00000000000..37098dd430f --- /dev/null +++ b/test/cases/side-effects/wrong-module-10146/module/index.js @@ -0,0 +1 @@ +export { default as A } from "./A"; diff --git a/test/cases/side-effects/wrong-module-10146/module/package.json b/test/cases/side-effects/wrong-module-10146/module/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/side-effects/wrong-module-10146/module/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/wasm/decoding/test.filter.js b/test/cases/wasm/decoding/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/decoding/test.filter.js +++ b/test/cases/wasm/decoding/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/export-imported-global/index.js b/test/cases/wasm/export-imported-global/index.js index 3db7fee9e5d..48b56ba4279 100644 --- a/test/cases/wasm/export-imported-global/index.js +++ b/test/cases/wasm/export-imported-global/index.js @@ -1,8 +1,18 @@ it("should export imported global", function() { return import("./module").then(function({ v, w, x, test }) { - expect(v).toBe(1); - expect(w).toBe(1); - expect(x).toBe(1.25); + if (WebAssembly.Global) { + expect(v.constructor).toBe(WebAssembly.Global); + expect(w.constructor).toBe(WebAssembly.Global); + expect(x.constructor).toBe(WebAssembly.Global); + + expect(+v).toBe(1); + expect(+w).toBe(1); + expect(+x).toBe(1.25); + } else { + expect(v).toBe(1); + expect(w).toBe(1); + expect(x).toBe(1.25); + } expect(test()).toBe(2); }); }); diff --git a/test/cases/wasm/export-imported-global/test.filter.js b/test/cases/wasm/export-imported-global/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/export-imported-global/test.filter.js +++ b/test/cases/wasm/export-imported-global/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/finalize-exports-issue-8261/index.js b/test/cases/wasm/finalize-exports-issue-8261/index.js new file mode 100644 index 00000000000..c74c93c62be --- /dev/null +++ b/test/cases/wasm/finalize-exports-issue-8261/index.js @@ -0,0 +1,3 @@ +it("should not throw when no dependency reference", function() { + return expect(() => import("side-effect-free")).not.toThrow(); +}); diff --git a/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/index.js b/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/index.js new file mode 100644 index 00000000000..bd82c8f8b1c --- /dev/null +++ b/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/index.js @@ -0,0 +1 @@ +export * from "./module.wat"; diff --git a/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/module.wat b/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/module.wat new file mode 100644 index 00000000000..12b024e80f8 --- /dev/null +++ b/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/module.wat @@ -0,0 +1,3 @@ +(module + (func (export "a")) +) diff --git a/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/package.json b/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/package.json new file mode 100644 index 00000000000..a43829151e1 --- /dev/null +++ b/test/cases/wasm/finalize-exports-issue-8261/node_modules/side-effect-free/package.json @@ -0,0 +1,3 @@ +{ + "sideEffects": false +} diff --git a/test/cases/wasm/finalize-exports-issue-8261/test.filter.js b/test/cases/wasm/finalize-exports-issue-8261/test.filter.js new file mode 100644 index 00000000000..331c7995f89 --- /dev/null +++ b/test/cases/wasm/finalize-exports-issue-8261/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/global-refs-imported-global/index.js b/test/cases/wasm/global-refs-imported-global/index.js index 3cb8ff40e28..86aac501c64 100644 --- a/test/cases/wasm/global-refs-imported-global/index.js +++ b/test/cases/wasm/global-refs-imported-global/index.js @@ -1,4 +1,4 @@ -it("should allow global with imported global as initilizer", function() { +it("should allow global with imported global as initializer", function() { return import("./module.wat").then(function({get}) { expect(get()).toEqual(33); }); diff --git a/test/cases/wasm/global-refs-imported-global/test.filter.js b/test/cases/wasm/global-refs-imported-global/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/global-refs-imported-global/test.filter.js +++ b/test/cases/wasm/global-refs-imported-global/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/import-wasm-wasm/test.filter.js b/test/cases/wasm/import-wasm-wasm/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/import-wasm-wasm/test.filter.js +++ b/test/cases/wasm/import-wasm-wasm/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/imported-global-preserve-ordering/index.js b/test/cases/wasm/imported-global-preserve-ordering/index.js index eb6ea96f345..fbac9ddade8 100644 --- a/test/cases/wasm/imported-global-preserve-ordering/index.js +++ b/test/cases/wasm/imported-global-preserve-ordering/index.js @@ -1,6 +1,14 @@ it("should preserve the ordering of globals", function() { return import("./module.wat").then(function(e) { - expect(e.c).toBe(3); - expect(e.d).toBe(4); + if (WebAssembly.Global) { + expect(e.c.constructor).toBe(WebAssembly.Global); + expect(e.d.constructor).toBe(WebAssembly.Global); + + expect(+e.c).toBe(3); + expect(+e.d).toBe(4); + } else { + expect(e.c).toBe(3); + expect(e.d).toBe(4); + } }); }); diff --git a/test/cases/wasm/imported-global-preserve-ordering/test.filter.js b/test/cases/wasm/imported-global-preserve-ordering/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/imported-global-preserve-ordering/test.filter.js +++ b/test/cases/wasm/imported-global-preserve-ordering/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/imported-global-preserve-type/test.filter.js b/test/cases/wasm/imported-global-preserve-type/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/imported-global-preserve-type/test.filter.js +++ b/test/cases/wasm/imported-global-preserve-type/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/imports-circular/test.filter.js b/test/cases/wasm/imports-circular/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/imports-circular/test.filter.js +++ b/test/cases/wasm/imports-circular/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/imports-complex-types/index.js b/test/cases/wasm/imports-complex-types/index.js index c2e0b23fead..3d2b113b93f 100644 --- a/test/cases/wasm/imports-complex-types/index.js +++ b/test/cases/wasm/imports-complex-types/index.js @@ -1,6 +1,6 @@ it("should allow to run a WebAssembly module with non-js-compatible imports", function() { return import("./wasm.wasm").then(function(wasm) { - const result = wasm.testI64(); + const result = wasm.testV128(); expect(result).toEqual(42); }); }); diff --git a/test/cases/wasm/imports-complex-types/other.wasm b/test/cases/wasm/imports-complex-types/other.wasm index 70c5aee0fa3..6949d18dd24 100644 Binary files a/test/cases/wasm/imports-complex-types/other.wasm and b/test/cases/wasm/imports-complex-types/other.wasm differ diff --git a/test/cases/wasm/imports-complex-types/test.filter.js b/test/cases/wasm/imports-complex-types/test.filter.js index 23177349638..ad3939f9bb3 100644 --- a/test/cases/wasm/imports-complex-types/test.filter.js +++ b/test/cases/wasm/imports-complex-types/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supports = require("webassembly-feature"); + +module.exports = () => supports.simd(); diff --git a/test/cases/wasm/imports-complex-types/wasm.wasm b/test/cases/wasm/imports-complex-types/wasm.wasm index 8374df1439f..a94d0954e7b 100644 Binary files a/test/cases/wasm/imports-complex-types/wasm.wasm and b/test/cases/wasm/imports-complex-types/wasm.wasm differ diff --git a/test/cases/wasm/imports-many-direct/test.filter.js b/test/cases/wasm/imports-many-direct/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/imports-many-direct/test.filter.js +++ b/test/cases/wasm/imports-many-direct/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/imports-multiple/test.filter.js b/test/cases/wasm/imports-multiple/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/imports-multiple/test.filter.js +++ b/test/cases/wasm/imports-multiple/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/imports/test.filter.js b/test/cases/wasm/imports/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/imports/test.filter.js +++ b/test/cases/wasm/imports/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/js-incompatible-type/env.js b/test/cases/wasm/js-incompatible-type/env.js deleted file mode 100644 index 39a36559da0..00000000000 --- a/test/cases/wasm/js-incompatible-type/env.js +++ /dev/null @@ -1 +0,0 @@ -export const n = 1; diff --git a/test/cases/wasm/js-incompatible-type/errors.js b/test/cases/wasm/js-incompatible-type/errors.js deleted file mode 100644 index e06824329ce..00000000000 --- a/test/cases/wasm/js-incompatible-type/errors.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = [ - [ - /export-i64-param\.wat/, - /Export "a" with i64 as parameter can only be used for direct wasm to wasm dependencies/, - /export-i64-param\.js/ - ], - [ - /export-i64-result\.wat/, - /Export "a" with i64 as result can only be used for direct wasm to wasm dependencies/, - /export-i64-result\.js/ - ], - [ - /import-i64\.wat/, - /Import "n" from "\.\/env.js" with Non-JS-compatible Global Type \(i64\) can only be used for direct wasm to wasm dependencies/, - /index\.js/ - ] -] diff --git a/test/cases/wasm/js-incompatible-type/export-i64-param.js b/test/cases/wasm/js-incompatible-type/export-i64-param.js deleted file mode 100644 index db1be78bea6..00000000000 --- a/test/cases/wasm/js-incompatible-type/export-i64-param.js +++ /dev/null @@ -1 +0,0 @@ -export { a } from "./export-i64-param.wat"; diff --git a/test/cases/wasm/js-incompatible-type/export-i64-param.wat b/test/cases/wasm/js-incompatible-type/export-i64-param.wat deleted file mode 100644 index f22fc6f5793..00000000000 --- a/test/cases/wasm/js-incompatible-type/export-i64-param.wat +++ /dev/null @@ -1,3 +0,0 @@ -(module - (func (export "a") (param i64) (nop)) -) diff --git a/test/cases/wasm/js-incompatible-type/export-i64-result.js b/test/cases/wasm/js-incompatible-type/export-i64-result.js deleted file mode 100644 index 96a1241ee02..00000000000 --- a/test/cases/wasm/js-incompatible-type/export-i64-result.js +++ /dev/null @@ -1 +0,0 @@ -export { a } from "./export-i64-result.wat"; diff --git a/test/cases/wasm/js-incompatible-type/export-i64-result.wat b/test/cases/wasm/js-incompatible-type/export-i64-result.wat deleted file mode 100644 index 1aada93dbd6..00000000000 --- a/test/cases/wasm/js-incompatible-type/export-i64-result.wat +++ /dev/null @@ -1,5 +0,0 @@ -(module - (func (export "a") (result i64) - (i64.const 1) - ) -) diff --git a/test/cases/wasm/js-incompatible-type/import-i64.wat b/test/cases/wasm/js-incompatible-type/import-i64.wat deleted file mode 100644 index 5be32abf044..00000000000 --- a/test/cases/wasm/js-incompatible-type/import-i64.wat +++ /dev/null @@ -1,3 +0,0 @@ -(module - (import "./env.js" "n" (global i64)) -) diff --git a/test/cases/wasm/js-incompatible-type/index.js b/test/cases/wasm/js-incompatible-type/index.js deleted file mode 100644 index f5258dc4277..00000000000 --- a/test/cases/wasm/js-incompatible-type/index.js +++ /dev/null @@ -1,17 +0,0 @@ -const errorRegex = /wasm function signature contains illegal type|invalid type/; - -it("should disallow exporting a func signature with result i64", function() { - return import("./export-i64-result").then(({a}) => { - expect(() => a()).toThrow(errorRegex); - }); -}); - -it("should disallow exporting a func signature with param i64", function() { - return import("./export-i64-param").then(({a}) => { - expect(() => a()).toThrow(errorRegex); - }); -}); - -it("should disallow importing a value type of i64", function() { - return expect(import("./import-i64.wat")).rejects.toThrow(errorRegex); -}); diff --git a/test/cases/wasm/js-incompatible-type/test.filter.js b/test/cases/wasm/js-incompatible-type/test.filter.js deleted file mode 100644 index bd31021b996..00000000000 --- a/test/cases/wasm/js-incompatible-type/test.filter.js +++ /dev/null @@ -1,5 +0,0 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); - -module.exports = function(config) { - return supportsWebAssembly() && config.mode === "production"; -}; diff --git a/test/cases/wasm/memory/test.filter.js b/test/cases/wasm/memory/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/memory/test.filter.js +++ b/test/cases/wasm/memory/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/order/index.js b/test/cases/wasm/order/index.js index f272a900234..ee625fb86c6 100644 --- a/test/cases/wasm/order/index.js +++ b/test/cases/wasm/order/index.js @@ -1,7 +1,8 @@ it("should be evaluated in the correct order", () => { return import("./a").then(({ default: results }) => { - return Promise.resolve().then(() => { // wait an extra tick to get the tick from the tracker - expect(results).toEqual(["b", "c", "wasm42", "a", "tick"]); + return Promise.resolve().then(() => { + // wait an extra tick to get the tick from the tracker + expect(results).toEqual(["b", "c", "tick", "wasm42", "a"]); }); }); }); diff --git a/test/cases/wasm/order/test.filter.js b/test/cases/wasm/order/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/order/test.filter.js +++ b/test/cases/wasm/order/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/simple/test.filter.js b/test/cases/wasm/simple/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/simple/test.filter.js +++ b/test/cases/wasm/simple/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/table/index.js b/test/cases/wasm/table/index.js index 4d3d85a3b5b..9f77a985056 100644 --- a/test/cases/wasm/table/index.js +++ b/test/cases/wasm/table/index.js @@ -1,16 +1,16 @@ // the message is inconsistency between some nodejs versions -const UNKNOWN_FUNCTION_TABLE = /invalid index into function table|invalid function/; +const UNKNOWN_FUNCTION_TABLE = /table index is out of bounds|invalid index into function table|invalid function/; -it("should support tables", function() { - return import("./wasm-table.wat").then(function(wasm) { +it("should support tables", function () { + return import("./wasm-table.wat").then(function (wasm) { expect(wasm.callByIndex(0)).toEqual(42); expect(wasm.callByIndex(1)).toEqual(13); expect(() => wasm.callByIndex(2)).toThrow(UNKNOWN_FUNCTION_TABLE); }); }); -it("should support exported tables", function() { - return import("./wasm-table-export.wat").then(function(wasm) { +it("should support exported tables", function () { + return import("./wasm-table-export.wat").then(function (wasm) { expect(wasm.table).toBeInstanceOf(WebAssembly.Table); expect(wasm.table.length).toBe(2); const e0 = wasm.table.get(0); @@ -22,8 +22,8 @@ it("should support exported tables", function() { }); }); -it("should support imported tables", function() { - return import("./wasm-table-imported.wat").then(function(wasm) { +it("should support imported tables", function () { + return import("./wasm-table-imported.wat").then(function (wasm) { expect(wasm.callByIndex(0)).toEqual(42); expect(wasm.callByIndex(1)).toEqual(13); expect(() => wasm.callByIndex(2)).toThrow(UNKNOWN_FUNCTION_TABLE); diff --git a/test/cases/wasm/table/test.filter.js b/test/cases/wasm/table/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/table/test.filter.js +++ b/test/cases/wasm/table/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/two-files-loader/test.filter.js b/test/cases/wasm/two-files-loader/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/two-files-loader/test.filter.js +++ b/test/cases/wasm/two-files-loader/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/two-files-loader/wrapper-loader.js b/test/cases/wasm/two-files-loader/wrapper-loader.js index 544fc1a789c..6ffbf502972 100644 --- a/test/cases/wasm/two-files-loader/wrapper-loader.js +++ b/test/cases/wasm/two-files-loader/wrapper-loader.js @@ -1,10 +1,9 @@ -const stringifyRequest = require("loader-utils").stringifyRequest; - -module.exports.pitch = function(remainingRequest) { +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +module.exports.pitch = function (remainingRequest) { return ` - import { getString as _getString, memory } from ${stringifyRequest(this, - `${this.resourcePath}.wat!=!${remainingRequest}` - )}; + import { getString as _getString, memory } from ${ + JSON.stringify(`${this.utils.contextify(this.context, this.resourcePath)}.wat!=!${this.utils.contextify(this.context, remainingRequest)}`) + }; export function getString() { const strBuf = new Uint8Array(memory.buffer, _getString()); diff --git a/test/cases/wasm/two-files-loader/wrapper-loader2.js b/test/cases/wasm/two-files-loader/wrapper-loader2.js index 6cd67a7258f..6ffbf502972 100644 --- a/test/cases/wasm/two-files-loader/wrapper-loader2.js +++ b/test/cases/wasm/two-files-loader/wrapper-loader2.js @@ -1,11 +1,9 @@ -const stringifyRequest = require("loader-utils").stringifyRequest; - -module.exports.pitch = function(remainingRequest) { +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +module.exports.pitch = function (remainingRequest) { return ` - import { getString as _getString, memory } from ${stringifyRequest( - this, - `${this.resourcePath}.wasm!=!wast-loader!${remainingRequest}` - )}; + import { getString as _getString, memory } from ${ + JSON.stringify(`${this.utils.contextify(this.context, this.resourcePath)}.wat!=!${this.utils.contextify(this.context, remainingRequest)}`) + }; export function getString() { const strBuf = new Uint8Array(memory.buffer, _getString()); diff --git a/test/cases/wasm/unused-export/test.filter.js b/test/cases/wasm/unused-export/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/unused-export/test.filter.js +++ b/test/cases/wasm/unused-export/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/v128/index.js b/test/cases/wasm/v128/index.js new file mode 100644 index 00000000000..43370cf95dc --- /dev/null +++ b/test/cases/wasm/v128/index.js @@ -0,0 +1,3 @@ +it("should support wasm compiled with v128", function() { + return import("./v128.wasm"); +}); diff --git a/test/cases/wasm/v128/test.filter.js b/test/cases/wasm/v128/test.filter.js new file mode 100644 index 00000000000..d3b7dee1966 --- /dev/null +++ b/test/cases/wasm/v128/test.filter.js @@ -0,0 +1,9 @@ +"use strict"; + +// const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +// const supportsFeature = require("webassembly-feature"); + +module.exports = () => + // TODO fails with CompileError: WebAssembly.instantiate(): Compiling function #0 failed: memory instruction with no memory @+24 + // return supportsWebAssembly() && supportsFeature.simd(); + false; diff --git a/test/cases/wasm/v128/v128.wasm b/test/cases/wasm/v128/v128.wasm new file mode 100644 index 00000000000..e791af8ef93 Binary files /dev/null and b/test/cases/wasm/v128/v128.wasm differ diff --git a/test/cases/wasm/wasm-explorer-examples-async/test.filter.js b/test/cases/wasm/wasm-explorer-examples-async/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/wasm-explorer-examples-async/test.filter.js +++ b/test/cases/wasm/wasm-explorer-examples-async/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/cases/wasm/wasm-explorer-examples-sync/test.filter.js b/test/cases/wasm/wasm-explorer-examples-sync/test.filter.js index 23177349638..331c7995f89 100644 --- a/test/cases/wasm/wasm-explorer-examples-sync/test.filter.js +++ b/test/cases/wasm/wasm-explorer-examples-sync/test.filter.js @@ -1,5 +1,5 @@ -var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); +"use strict"; -module.exports = function(config) { - return supportsWebAssembly(); -}; +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/checkArrayExpectation.js b/test/checkArrayExpectation.js index 353f3df780b..6b082499e57 100644 --- a/test/checkArrayExpectation.js +++ b/test/checkArrayExpectation.js @@ -1,6 +1,68 @@ "use strict"; -const fs = require("fs"); + const path = require("path"); +const fs = require("graceful-fs"); + +const check = (expected, actual) => { + if (expected instanceof RegExp) { + expected = { message: expected }; + } + if (Array.isArray(expected)) { + return expected.every((e) => check(e, actual)); + } + return Object.keys(expected).every((key) => { + let value = actual[key]; + if (typeof value === "object") { + value = JSON.stringify(value); + } + return expected[key].test(value); + }); +}; + +const explain = (object) => { + if (object instanceof RegExp) { + object = { message: object }; + } + return Object.keys(object) + .map((key) => { + let value = object[key]; + if (typeof value === "object" && !(value instanceof RegExp)) { + value = JSON.stringify(value); + } + let msg = `${key} = ${value}`; + if (key !== "stack" && key !== "details" && msg.length > 100) { + msg = `${msg.slice(0, 97)}...`; + } + return msg; + }) + .join("; "); +}; + +const diffItems = (actual, expected, kind) => { + const tooMuch = [...actual]; + const missing = [...expected]; + for (let i = 0; i < missing.length; i++) { + const current = missing[i]; + for (let j = 0; j < tooMuch.length; j++) { + if (check(current, tooMuch[j])) { + tooMuch.splice(j, 1); + missing.splice(i, 1); + i--; + break; + } + } + } + const diff = []; + if (missing.length > 0) { + diff.push(`The following expected ${kind}s are missing: +${missing.map((item) => `${explain(item)}`).join("\n\n")}`); + } + if (tooMuch.length > 0) { + diff.push(`The following ${kind}s are unexpected: +${tooMuch.map((item) => `${explain(item)}`).join("\n\n")}`); + } + return diff.join("\n\n"); +}; module.exports = function checkArrayExpectation( testDirectory, @@ -8,72 +70,84 @@ module.exports = function checkArrayExpectation( kind, filename, upperCaseKind, + options, done ) { if (!done) { - done = upperCaseKind; + done = options; + options = upperCaseKind; upperCaseKind = filename; filename = `${kind}s`; } - let array = object[`${kind}s`].slice().sort(); - if (kind === "warning") - array = array.filter(item => !/from UglifyJs/.test(item)); + let array = object[`${kind}s`]; + if (Array.isArray(array) && kind === "warning") { + array = array.filter((item) => !/from Terser/.test(item)); + } if (fs.existsSync(path.join(testDirectory, `${filename}.js`))) { const expectedFilename = path.join(testDirectory, `${filename}.js`); - const expected = require(expectedFilename); - if (expected.length < array.length) + + let expected = require(expectedFilename); + + if (typeof expected === "function") { + expected = expected(options); + } + const diff = diffItems(array, expected, kind); + if (expected.length < array.length) { return ( done( new Error( - `More ${kind}s while compiling than expected:\n\n${array.join( - "\n\n" - )}. Check expected warnings: ${filename}` + `More ${kind}s (${array.length} instead of ${expected.length}) while compiling than expected:\n\n${diff}\n\nCheck expected ${kind}s: ${expectedFilename}` ) ), true ); - else if (expected.length > array.length) + } else if (expected.length > array.length) { return ( done( new Error( - `Less ${kind}s while compiling than expected:\n\n${array.join( - "\n\n" - )}. Check expected warnings: ${filename}` + `Less ${kind}s (${array.length} instead of ${expected.length}) while compiling than expected:\n\n${diff}\n\nCheck expected ${kind}s: ${expectedFilename}` ) ), true ); + } for (let i = 0; i < array.length; i++) { if (Array.isArray(expected[i])) { - for (let j = 0; j < expected[i].length; j++) { - if (!expected[i][j].test(array[i])) + for (const expectedItem of expected[i]) { + if (!check(expectedItem, array[i])) { return ( done( new Error( - `${upperCaseKind} ${i}: ${array[i]} doesn't match ${expected[ - i - ][j].toString()}` + `${upperCaseKind} ${i}: ${explain( + array[i] + )} doesn't match ${explain(expectedItem)}` ) ), true ); + } } - } else if (!expected[i].test(array[i])) + } else if (!check(expected[i], array[i])) { return ( done( new Error( - `${upperCaseKind} ${i}: ${array[i]} doesn't match ${expected[ - i - ].toString()}` + `${upperCaseKind} ${i}: ${explain( + array[i] + )} doesn't match ${explain(expected[i])}` ) ), true ); + } } } else if (array.length > 0) { return ( done( - new Error(`${upperCaseKind}s while compiling:\n\n${array.join("\n\n")}`) + new Error( + `${upperCaseKind}s while compiling:\n\n${array + .map(explain) + .join("\n\n")}` + ) ), true ); diff --git a/test/cleverMerge.unittest.js b/test/cleverMerge.unittest.js new file mode 100644 index 00000000000..aed81f57f5e --- /dev/null +++ b/test/cleverMerge.unittest.js @@ -0,0 +1,718 @@ +"use strict"; + +const { + DELETE, + cachedCleverMerge, + cleverMerge, + removeOperations, + resolveByProperty +} = require("../lib/util/cleverMerge"); + +describe("cleverMerge", () => { + const base = { + a1: [1], + a2: [1], + a3: [1], + b1: [1, "...", 2], + b2: [1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a2: [5], + a3: [5, "...", 6], + a4: [5], + a5: [5, "...", 6], + b2: [5], + b3: [5, "...", 6], + b4: [5], + b5: [5, "...", 6] + } + } + }; + const cases = { + "different properties": [{ a: 1 }, { b: 2 }, { a: 1, b: 2 }], + "same property": [{ a: 1 }, { a: 2 }, { a: 2 }], + arrays: [ + { a1: 1, a2: 1, b1: [], b2: [], c1: [1], c2: [1] }, + { + a1: [2], + a2: [2, "...", 3], + b1: [2], + b2: [2, "...", 3], + c1: [2], + c2: [2, "...", 3] + }, + { + a1: [2], + a2: [2, 1, 3], + b1: [2], + b2: [2, 3], + c1: [2], + c2: [2, 1, 3] + } + ], + "by field override": [ + base, + { + a1: [8], + a2: [8], + a3: [8], + a4: [8], + a5: [8], + b1: [8], + b2: [8], + b3: [8], + b4: [8], + b5: [8] + }, + { + a1: [8], + a2: [8], + a3: [8], + a4: [8], + a5: [8], + b1: [8], + b2: [8], + b3: [8], + b4: [8], + b5: [8] + } + ], + "by field extend default": [ + base, + { + a1: [8, "..."], + a2: [8, "..."], + a3: [8, "..."], + a4: [8, "..."], + a5: [8, "..."], + b1: [8, "..."], + b2: [8, "..."], + b3: [8, "..."] + }, + { + a1: [8, 1], + a2: [8, 1], + a3: [1], + a4: [8, "..."], + b1: [8, 1, "...", 2], + b2: [8, 1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a2: [8, 5], + a3: [8, 5, "...", 6], + a4: [8, 5], + a5: [8, 5, "...", 6], + b2: [8, 5], + b3: [8, 5, "...", 6], + b4: [5], + b5: [5, "...", 6] + }, + default: { + a3: [8, "..."], + a5: [8, "..."], + b3: [8, "..."] + } + } + } + ], + "by field override other": [ + base, + { + bySomething: { + y: { + a1: [8], + a2: [8], + a3: [8], + a4: [8], + a5: [8], + b1: [8], + b2: [8], + b3: [8], + b4: [8], + b5: [8] + } + } + }, + { + a1: [1], + a2: [1], + a3: [1], + b1: [1, "...", 2], + b2: [1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a2: [5], + a3: [5, "...", 6], + a4: [5], + a5: [5, "...", 6], + b2: [5], + b3: [5, "...", 6], + b4: [5], + b5: [5, "...", 6] + }, + y: { + a1: [8], + a2: [8], + a3: [8], + a4: [8], + a5: [8], + b1: [8], + b2: [8], + b3: [8], + b4: [8], + b5: [8] + } + } + } + ], + "by field override same": [ + base, + { + bySomething: { + x: { + a1: [8], + a2: [8], + a3: [8], + a4: [8], + a5: [8], + b1: [8], + b2: [8], + b3: [8], + b4: [8], + b5: [8] + } + } + }, + { + a1: [1], + a2: [1], + a3: [1], + b1: [1, "...", 2], + b2: [1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a1: [8], + a2: [8], + a3: [8], + a4: [8], + a5: [8], + b1: [8], + b2: [8], + b3: [8], + b4: [8], + b5: [8] + } + } + } + ], + "by field extend other": [ + base, + { + bySomething: { + y: { + a1: [8, "..."], + a2: [8, "..."], + a3: [8, "..."], + a4: [8, "..."], + a5: [8, "..."], + b1: [8, "..."], + b2: [8, "..."], + b3: [8, "..."] + } + } + }, + { + a1: [1], + a2: [1], + a3: [1], + b1: [1, "...", 2], + b2: [1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a2: [5], + a3: [5, "...", 6], + a4: [5], + a5: [5, "...", 6], + b2: [5], + b3: [5, "...", 6], + b4: [5], + b5: [5, "...", 6] + }, + y: { + a1: [8, "..."], + a2: [8, "..."], + a3: [8, "..."], + a4: [8, "..."], + a5: [8, "..."], + b1: [8, "..."], + b2: [8, "..."], + b3: [8, "..."] + } + } + } + ], + "by field extend same": [ + base, + { + bySomething: { + x: { + a1: [8, "..."], + a2: [8, "..."], + a3: [8, "..."], + a4: [8, "..."], + a5: [8, "..."], + b1: [8, "..."], + b2: [8, "..."], + b3: [8, "..."] + } + } + }, + { + a1: [1], + a2: [1], + a3: [1], + b1: [1, "...", 2], + b2: [1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a1: [8, "..."], + a2: [8, 5], + a3: [8, 5, "...", 6], + a4: [8, 5], + a5: [8, 5, "...", 6], + b1: [8, "..."], + b2: [8, 5], + b3: [8, 5, "...", 6], + b4: [5], + b5: [5, "...", 6] + } + } + } + ], + "by field extend base, same and other": [ + base, + { + a1: [7, "..."], + a2: [7, "..."], + a3: [7, "..."], + a4: [7, "..."], + a5: [7, "..."], + b1: [7, "..."], + b2: [7, "..."], + b3: [7, "..."], + bySomething: { + x: { + a1: [8, "..."], + a2: [8, "..."], + a3: [8, "..."], + a4: [8, "..."], + a5: [8, "..."], + b1: [8, "..."], + b2: [8, "..."], + b3: [8, "..."] + }, + y: { + a1: [9, "..."], + a2: [9, "..."], + a3: [9, "..."], + a4: [9, "..."], + a5: [9, "..."], + b1: [9, "..."], + b2: [9, "..."], + b3: [9, "..."] + } + } + }, + { + a1: [7, 1], + a2: [7, 1], + a3: [1], + a4: [7, "..."], + b1: [7, 1, "...", 2], + b2: [7, 1, "...", 2], + b3: [1, "...", 2], + bySomething: { + x: { + a1: [8, "..."], + a2: [8, 7, 5], + a3: [8, 7, 5, "...", 6], + a4: [8, 7, 5], + a5: [8, 7, 5, "...", 6], + b1: [8, "..."], + b2: [8, 7, 5], + b3: [8, 7, 5, "...", 6], + b4: [5], + b5: [5, "...", 6] + }, + y: { + a1: [9, "..."], + a2: [9, "..."], + a3: [9, 7, "..."], + a4: [9, "..."], + a5: [9, 7, "..."], + b1: [9, "..."], + b2: [9, "..."], + b3: [9, 7, "..."] + }, + default: { + a3: [7, "..."], + a5: [7, "..."], + b3: [7, "..."] + } + } + } + ], + "by field promoting edge cases": [ + { + a: [1, "...", 2], + b: [1, "...", 2], + c: [1, "...", 2], + d: [1, "...", 2], + bySomething: { + x: { + a: [3, "...", 4], + b: [3, "...", 4], + d: [3, "...", 4] + }, + y: { + a: [5], + b: [5] + }, + default: { + a: [6, "...", 7], + c: [6, "...", 7] + } + } + }, + { + a: [8, "...", 9], + b: [8, "...", 9], + c: [8, "...", 9], + d: [8, "...", 9] + }, + { + a: [1, "...", 2], + b: [1, "...", 2], + c: [1, "...", 2], + d: [1, "...", 2], + bySomething: { + x: { + a: [8, 3, "...", 4, 9], + b: [8, 3, "...", 4, 9], + c: [8, "...", 9], + d: [8, 3, "...", 4, 9] + }, + y: { + a: [8, 5, 9], + b: [8, 5, 9], + c: [8, "...", 9], + d: [8, "...", 9] + }, + default: { + a: [8, 6, "...", 7, 9], + b: [8, "...", 9], + c: [8, 6, "...", 7, 9], + d: [8, "...", 9] + } + } + } + ], + "by field clone default": [ + { + a: 1, + bySomething: { + x: { + b: 2 + }, + default: { + c: 3 + } + } + }, + { + bySomething: { + y: { + d: 4 + } + } + }, + { + a: 1, + bySomething: { + x: { + b: 2 + }, + y: { + c: 3, + d: 4 + }, + default: { + c: 3 + } + } + } + ], + deleting: [ + base, + { + a1: DELETE, + a2: DELETE, + a3: DELETE, + a4: DELETE, + a5: DELETE, + b1: DELETE, + b2: DELETE, + b3: DELETE + }, + { + a1: DELETE, + a2: DELETE, + a3: DELETE, + a4: DELETE, + a5: DELETE, + b1: DELETE, + b2: DELETE, + b3: DELETE, + bySomething: { + x: { + b4: [5], + b5: [5, "...", 6] + } + } + } + ], + "merge objects": [ + { + nested: base + }, + { + nested: base + }, + { + nested: { + a1: [1], + a2: [1], + a3: [1], + b1: [1, 1, "...", 2, 2], + b2: [1, 1, "...", 2, 2], + b3: [1, "...", 2], + bySomething: { + x: { + a2: [5], + a3: [5, "...", 6], + a4: [5], + a5: [5, 5, "...", 6, 6], + b2: [5], + b3: [5, 1, 5, "...", 6, 2, 6], + b4: [5], + b5: [5, 5, "...", 6, 6] + }, + default: { + b3: [1, "...", 2] + } + } + } + } + ], + dynamicSecond: [ + { + a: 4, // keep + b: 5, // static override + c: 6 // dynamic override + }, + { + b: 50, + y: 20, + byArguments: (x, y, z) => ({ + c: 60, + x, + y, + z + }) + }, + { + a: 4, + b: 50, + c: 60, + x: 1, + y: 2, + z: 3 + } + ], + dynamicBoth: [ + { + a: 4, // keep + b: 5, // static override + c: 6, // dynamic override + byArguments: (x, y, z) => ({ + x, // keep + y, // static override + z // dynamic override + }) + }, + { + b: 50, + y: 20, + byArguments: (x, y, z) => ({ + c: 60, + z: z * 10 + }) + }, + { + a: 4, + b: 50, + c: 60, + x: 1, + y: 20, + z: 30 + } + ], + dynamicChained: [ + cleverMerge( + { + a: 6, // keep + b: 7, // static override + c: 8, // dynamic override + d: 9, // static override (3rd) + e: 10, // dynamic override (3rd) + byArguments: (x, y, z, v, w) => ({ + x, // keep + y, // static override + z, // dynamic override + v, // static override (3rd) + w // dynamic override (3rd) + }) + }, + { + b: 70, + y: 20, + byArguments: (x, y, z) => ({ + c: 80, + z: z * 10 + }) + } + ), + { + d: 90, + v: 40, + byArguments: (x, y, z, v, w) => ({ + e: 100, + w: w * 10 + }) + }, + { + a: 6, + b: 70, + c: 80, + d: 90, + e: 100, + x: 1, + y: 20, + z: 30, + v: 40, + w: 50 + } + ], + dynamicFalse1: [ + { + a: 1, + byArguments: () => false + }, + { + b: 2 + }, + false + ], + dynamicFalse2: [ + { + a: 1 + }, + { + b: 2, + byArguments: () => false + }, + false + ], + dynamicFalse3: [ + { + a: 1, + byArguments: () => false + }, + { + b: 2, + byArguments: () => false + }, + false + ], + nonObject1: [1, 2, 2], + nonObject2: [1, { a: 1 }, 1], + nonObject3: [{ a: 1 }, 1, 1], + nonObject4: [{ a: 1 }, undefined, { a: 1 }], + nonObject5: [undefined, { a: 1 }, { a: 1 }] + }; + for (const key of Object.keys(cases)) { + const testCase = cases[key]; + + it(`should merge ${key} correctly`, () => { + let merged = cleverMerge(testCase[0], testCase[1]); + let merged1 = cachedCleverMerge(testCase[0], testCase[1]); + let merged2 = cachedCleverMerge(testCase[0], testCase[1]); + expect(merged2).toBe(merged1); + merged = resolveByProperty(merged, "byArguments", 1, 2, 3, 4, 5); + merged1 = resolveByProperty(merged1, "byArguments", 1, 2, 3, 4, 5); + merged2 = resolveByProperty(merged2, "byArguments", 1, 2, 3, 4, 5); + expect(merged).toEqual(testCase[2]); + expect(merged1).toEqual(testCase[2]); + expect(merged2).toEqual(testCase[2]); + }); + } + + it("should allow to remove operations", () => { + expect( + removeOperations({ + a: 1, + b: DELETE, + c: ["..."], + d: [1, "...", 2], + e: [1, 2, 3], + f: { + a: 1, + b: DELETE, + c: ["..."], + d: [1, "...", 2], + e: [1, 2, 3], + f: { + a: 1, + b: DELETE, + c: ["..."], + d: [1, "...", 2], + e: [1, 2, 3] + } + } + }) + ).toEqual({ + a: 1, + c: [], + d: [1, 2], + e: [1, 2, 3], + f: { + a: 1, + c: [], + d: [1, 2], + e: [1, 2, 3], + f: { + a: 1, + c: [], + d: [1, 2], + e: [1, 2, 3] + } + } + }); + }); +}); diff --git a/test/compareLocations.unittest.js b/test/compareLocations.unittest.js index 53d68daf569..c9d09555a64 100644 --- a/test/compareLocations.unittest.js +++ b/test/compareLocations.unittest.js @@ -1,41 +1,23 @@ "use strict"; -const compareLocations = require("../lib/compareLocations"); -const createPosition = overrides => { - return Object.assign( - { - line: 10, - column: 5 - }, - overrides - ); -}; - -const createLocation = (start, end, index) => { - return { - start: createPosition(start), - end: createPosition(end), - index: index || 3 - }; -}; +const { compareLocations } = require("../lib/util/comparators"); -describe("compareLocations", () => { - describe("string location comparison", () => { - it("returns -1 when the first string comes before the second string", () => { - expect(compareLocations("alpha", "beta")).toBe(-1); - }); - - it("returns 1 when the first string comes after the second string", () => { - expect(compareLocations("beta", "alpha")).toBe(1); - }); +const createPosition = (overrides) => ({ + line: 10, + column: 5, + ...overrides +}); - it("returns 0 when the first string is the same as the second string", () => { - expect(compareLocations("charlie", "charlie")).toBe(0); - }); - }); +const createLocation = (start, end, index) => ({ + start: createPosition(start), + end: createPosition(end), + index: index || 3 +}); +describe("compareLocations", () => { describe("object location comparison", () => { - let a, b; + let a; + let b; describe("location line number", () => { beforeEach(() => { @@ -102,35 +84,19 @@ describe("compareLocations", () => { }); }); - describe("string and object location comparison", () => { - it("returns 1 when the first parameter is a string and the second parameter is an object", () => { - expect(compareLocations("alpha", createLocation())).toBe(1); - }); - - it("returns -1 when the first parameter is an object and the second parameter is a string", () => { - expect(compareLocations(createLocation(), "alpha")).toBe(-1); - }); - }); - describe("unknown location type comparison", () => { - it("returns 0 when the first parameter is an object and the second parameter is a number", () => { - expect(compareLocations(createLocation(), 123)).toBe(0); - }); - - it("returns undefined when the first parameter is a number and the second parameter is an object", () => { - expect(compareLocations(123, createLocation())).toBe(undefined); - }); - - it("returns 0 when the first parameter is a string and the second parameter is a number", () => { - expect(compareLocations("alpha", 123)).toBe(0); + it("returns 1 when the first parameter is an object and the second parameter is not", () => { + expect(compareLocations(createLocation(), 123)).toBe(1); + expect(compareLocations(createLocation(), "alpha")).toBe(1); }); - it("returns undefined when the first parameter is a number and the second parameter is a string", () => { - expect(compareLocations(123, "alpha")).toBe(undefined); + it("returns -1 when the first parameter is not an object and the second parameter is", () => { + expect(compareLocations(123, createLocation())).toBe(-1); + expect(compareLocations("alpha", createLocation())).toBe(-1); }); - it("returns undefined when both the first parameter and the second parameter is a number", () => { - expect(compareLocations(123, 456)).toBe(undefined); + it("returns 0 when both the first parameter and the second parameter are not objects", () => { + expect(compareLocations(123, 456)).toBe(0); }); }); }); diff --git a/test/compareSourceOrder.unittest.js b/test/compareSourceOrder.unittest.js new file mode 100644 index 00000000000..966a086f7c2 --- /dev/null +++ b/test/compareSourceOrder.unittest.js @@ -0,0 +1,123 @@ +"use strict"; + +const { sortWithSourceOrder } = require("../lib/util/comparators"); + +describe("sortWithSourceOrder", () => { + let dependencySourceOrderMap; + + beforeEach(() => { + dependencySourceOrderMap = new WeakMap(); + }); + + it("dependency without the sourceOrder attribute must keep their original index in the array", () => { + const deps = [ + // HarmonyImportSpecifierDependency + { name: "b", sourceOrder: 10 }, + // CommonJSRequireDependency + { name: "a" }, + // CommonJSRequireDependency + { name: "d" }, + // HarmonyImportSpecifierDependency + { name: "c", sourceOrder: 5 } + ]; + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["c", "a", "d", "b"]); + }); + + it("should sort dependencies by main order when both in map", () => { + const deps = [ + { name: "b", sourceOrder: 5 }, + { name: "a", sourceOrder: 10 }, + { name: "c", sourceOrder: 3 } + ]; + + // Add to map with main and sub orders + dependencySourceOrderMap.set(deps[0], { main: 5, sub: 0 }); + dependencySourceOrderMap.set(deps[1], { main: 10, sub: 0 }); + dependencySourceOrderMap.set(deps[2], { main: 3, sub: 0 }); + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["c", "b", "a"]); + }); + + it("should sort by sub order when main order is same", () => { + const deps = [ + { name: "b", sourceOrder: 5 }, + { name: "a", sourceOrder: 5 }, + { name: "c", sourceOrder: 5 } + ]; + + // Add to map with same main but different sub orders + dependencySourceOrderMap.set(deps[0], { main: 5, sub: 3 }); + dependencySourceOrderMap.set(deps[1], { main: 5, sub: 1 }); + dependencySourceOrderMap.set(deps[2], { main: 5, sub: 2 }); + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["a", "c", "b"]); + }); + + it("should sort mixed dependencies - some in map, some not", () => { + const deps = [ + { name: "b", sourceOrder: 10 }, + { name: "a", sourceOrder: 5 }, + { name: "c", sourceOrder: 15 } + ]; + + // Only add one to map + dependencySourceOrderMap.set(deps[0], { main: 10, sub: 0 }); + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["a", "b", "c"]); + }); + + it("should sort by sourceOrder when none in map", () => { + const deps = [ + { name: "b", sourceOrder: 10 }, + { name: "a", sourceOrder: 5 }, + { name: "c", sourceOrder: 15 } + ]; + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["a", "b", "c"]); + }); + + it("should sort complex scenario with negative and decimal values", () => { + const deps = [ + { name: "f", sourceOrder: 10 }, + { name: "e", sourceOrder: 5 }, + { name: "d", sourceOrder: 20 }, + { name: "c", sourceOrder: 10 }, + { name: "b", sourceOrder: 5 }, + { name: "a", sourceOrder: 3 } + ]; + + dependencySourceOrderMap.set(deps[0], { main: 10, sub: 0.5 }); + dependencySourceOrderMap.set(deps[1], { main: 5, sub: 0.5 }); + dependencySourceOrderMap.set(deps[2], { main: 20, sub: 0 }); + dependencySourceOrderMap.set(deps[3], { main: 10, sub: 0.25 }); + dependencySourceOrderMap.set(deps[4], { main: 5, sub: 0.25 }); + dependencySourceOrderMap.set(deps[5], { main: 3, sub: 0 }); + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["a", "b", "e", "c", "f", "d"]); + }); + + it("should maintain stable sort for equal values", () => { + const deps = [ + { name: "b", sourceOrder: 5 }, + { name: "a", sourceOrder: 5 }, + { name: "c", sourceOrder: 5 } + ]; + + sortWithSourceOrder(deps, dependencySourceOrderMap); + + expect(deps.map((d) => d.name)).toEqual(["b", "a", "c"]); + }); +}); diff --git a/test/compareStringsNumeric.unittest.js b/test/compareStringsNumeric.unittest.js new file mode 100644 index 00000000000..6ab93d8c664 --- /dev/null +++ b/test/compareStringsNumeric.unittest.js @@ -0,0 +1,97 @@ +"use strict"; + +const { compareStringsNumeric } = require("../lib/util/comparators"); + +/** + * @param {string} a string + * @param {string} b string + * @returns {-1 | 0 | 1} compare result + */ +const referenceComparer = (a, b) => { + const partsA = a.split(/(\d+)/); + const partsB = b.split(/(\d+)/); + const len = Math.min(partsA.length, partsB.length); + for (let i = 0; i < len; i++) { + const pA = partsA[i]; + const pB = partsB[i]; + if (i % 2 === 0) { + if (pA.length > pB.length) { + if (pA.slice(0, pB.length) > pB) return 1; + return -1; + } else if (pB.length > pA.length) { + if (pB.slice(0, pA.length) > pA) return -1; + return 1; + } + if (pA < pB) return -1; + if (pA > pB) return 1; + } else { + const nA = Number(pA); + const nB = Number(pB); + if (nA < nB) return -1; + if (nA > nB) return 1; + } + } + if (partsB.length < partsA.length) return 1; + if (partsB.length > partsA.length) return -1; + return 0; +}; + +describe(compareStringsNumeric.name, () => { + /** @type {[string, string, number][]} */ + const testCases = [ + ["", "a", 1], + ["a", "", -1], + ["", "0", -1], + ["1", "", 1], + ["", "", 0], + ["a", "1", -1], + ["1", "a", 1], + ["_", "1", -1], + ["1", "_", 1], + ["a", "b", -1], + ["b", "a", 1], + ["a", "a", 0], + ["a1", "a2", -1], + ["a2", "a1", 1], + ["a1", "a1", 0], + ["ab1", "ab2", -1], + ["ab2", "ab1", 1], + ["ab1", "a1", -1], + ["a1", "ab1", 1], + ["a1", "a10", -1], + ["a10", "a1", 1], + ["a1", "a01", 0], + ["a1", "a1a", 1], + ["a1a", "a1", -1], + ["a1a", "a01a", 0], + ["a1a", "a1b", -1], + ["a1b", "a1a", 1], + ["a1a", "a1a1", -1], + ["a1a1", "a1a", 1], + ["a1a1", "a1a1", 0], + ["a1a1", "a1a2", -1], + ["a1a2", "a1a1", 1], + ["a1a1", "a1a01", 0], + ["a1a1", "a1a1a", 1], + ["a1a1a", "a1a1", -1], + ["a1a1a", "a1a1a", 0], + ["a1a1a", "a1a1b", -1], + ["a1a1b", "a1a1a", 1], + ["a1a1a", "a1a1a1", -1], + ["a1a1a1", "a1a1a", 1], + ["a1a1a1", "a1a1a1", 0], + ["a1a1a1", "a1a1a2", -1], + ["a1a1a2", "a1a1a1", 1], + ["a1a1a1", "a1a1a01", 0], + ["a1a1a1", "a1a1a1a", 1] + ]; + + for (const testCase of testCases) { + const [a, b, expected] = testCase; + + it(`returns ${expected} when comparing "${a}" to "${b}"`, () => { + expect(referenceComparer(a, b)).toBe(expected); + expect(compareStringsNumeric(a, b)).toBe(expected); + }); + } +}); diff --git a/test/compileBooleanMatcher.unittest.js b/test/compileBooleanMatcher.unittest.js new file mode 100644 index 00000000000..96c8d53140d --- /dev/null +++ b/test/compileBooleanMatcher.unittest.js @@ -0,0 +1,133 @@ +"use strict"; + +/** @typedef {ReturnType} ExceptResult */ + +const { itemsToRegexp } = require("../lib/util/compileBooleanMatcher"); + +describe("itemsToRegexp", () => { + /** + * @param {string} name name + * @param {string | string[]} input input + * @param {(e: ExceptResult) => void} fn fn to test + */ + const expectCompiled = (name, input, fn) => { + it(`should compile ${name}`, () => { + const items = typeof input === "string" ? input.split(",") : input; + const regexp = itemsToRegexp(items); + const r = new RegExp(`^${regexp}$`); + for (const item of items) { + expect(item).toMatch(r); + } + fn(expect(regexp)); + }); + }; + + expect.addSnapshotSerializer({ + test() { + return true; + }, + /** + * @param {unknown} received received + * @returns {string} result + */ + print(received) { + return /** @type {string} */ (received); + } + }); + + expectCompiled("basic", ["abc", "def", "123", "45", "6"], (e) => + e.toMatchInlineSnapshot("(123|45|6|abc|def)") + ); + + expectCompiled("single chars", ["a", "b", "c", "1", "2", "3"], (e) => + e.toMatchInlineSnapshot("[1-3a-c]") + ); + + expectCompiled("single chars with ranges", ["1", "2", "3", "4", "a"], (e) => + e.toMatchInlineSnapshot("[1-4a]") + ); + + expectCompiled( + "single chars consecutive range", + ["a", "b", "c", "d", "e"], + (e) => e.toMatchInlineSnapshot("[a-e]") + ); + + expectCompiled( + "single chars multiple ranges", + ["1", "2", "3", "a", "b", "c", "x", "y", "z"], + (e) => e.toMatchInlineSnapshot("[1-3a-cx-z]") + ); + + expectCompiled( + "single chars with gaps", + ["a", "c", "e", "g"], + // cspell:ignore aceg + (e) => e.toMatchInlineSnapshot("[aceg]") + ); + + expectCompiled( + "single chars mixed ranges and singles", + ["1", "2", "3", "5", "7", "8", "9"], + (e) => e.toMatchInlineSnapshot("[1-357-9]") + ); + + expectCompiled( + "prefixes", + ["ab1", "ab2", "ab3", "ab4", "de5", "de6", "de7", "ef8", "ef9", "gh0"], + (e) => e.toMatchInlineSnapshot("(ab[1-4]|de[5-7]|ef[89]|gh0)") + ); + + expectCompiled("short prefixes", "a,ab", (e) => + e.toMatchInlineSnapshot("a(|b)") + ); + + expectCompiled( + "nested prefixes", + ["a", "ab", "abc", "abcd", "abcde", "abcdef"], + (e) => e.toMatchInlineSnapshot("a(b(c(d(|e|ef)|)|)|)") + ); + + expectCompiled("suffixes", "a1,b1,c1,d1,e1,a2,b2,c2", (e) => + e.toMatchInlineSnapshot("([a-e]1|[a-c]2)") + ); + + expectCompiled( + "common prod", + "674,542,965,12,942,483,445,943,423,995,434,122,995,248,432,165,436,86,435,221", + (e) => + e.toMatchInlineSnapshot( + "(1(2|22|65)|4(3[24-6]|23|45|83)|9(42|43|65|95)|221|248|542|674|86)" + ) + ); + + expectCompiled( + "long strings", + [ + "./path/to/file.js", + "./path/to/file.mjs", + "./path/to/other-file.js", + "./path/to/directory/with/file.js", + "./path/to/directory/with/file.json", + "./path/to/directory/with/file.css", + "./path/to/directory/with/module.css", + "webpack/runtime/module" + ], + (e) => + e.toMatchInlineSnapshot( + "(\\.\\/path\\/to\\/(directory\\/with\\/(file\\.(js(|on)|css)|module\\.css)|file\\.(|m)js|other\\-file\\.js)|webpack\\/runtime\\/module)" + ) + ); + + expectCompiled( + "prefix and suffix overlap", + [ + "webpack_sharing_consume_default_react_react", + "webpack_sharing_consume_default_classnames_classnames-webpack_sharing_consume_default_react_react" + ], + (e) => + e.toMatchInlineSnapshot( + "webpack_sharing_consume_default_(|classnames_classnames\\-webpack_sharing_consume_default_)react_react" + ) + ); +}); diff --git a/test/configCases/additional-pass/simple/webpack.config.js b/test/configCases/additional-pass/simple/webpack.config.js index 398236f46f6..fcb12991fdb 100644 --- a/test/configCases/additional-pass/simple/webpack.config.js +++ b/test/configCases/additional-pass/simple/webpack.config.js @@ -1,13 +1,17 @@ -var testPlugin = function() { - var counter = 1; - this.hooks.compilation.tap("TestPlugin", compilation => { - var nr = counter++; - compilation.hooks.needAdditionalPass.tap("TestPlugin", function() { +"use strict"; + +/** @type {import("../../../../").WebpackPluginFunction} */ +function testPlugin() { + let counter = 1; + this.hooks.compilation.tap("TestPlugin", (compilation) => { + const nr = counter++; + compilation.hooks.needAdditionalPass.tap("TestPlugin", () => { if (nr < 5) return true; }); }); -}; +} +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [testPlugin] }; diff --git a/test/configCases/amd/disabled/index.js b/test/configCases/amd/disabled/index.js new file mode 100644 index 00000000000..d048b1c7aeb --- /dev/null +++ b/test/configCases/amd/disabled/index.js @@ -0,0 +1,8 @@ +it("should compile", function(done) { + done(); +}); + +it("should disable define", function(done) { + expect(typeof define).toBe('undefined') + done() +}) diff --git a/test/configCases/amd/disabled/webpack.config.js b/test/configCases/amd/disabled/webpack.config.js new file mode 100644 index 00000000000..0571bde76f2 --- /dev/null +++ b/test/configCases/amd/disabled/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + amd: false +}; diff --git a/test/configCases/anonymous-default-export-name/concat-anonymous-function/index.js b/test/configCases/anonymous-default-export-name/concat-anonymous-function/index.js new file mode 100644 index 00000000000..af93f49b401 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/concat-anonymous-function/index.js @@ -0,0 +1,9 @@ +import inner from "./inner"; + +it("should handle anonymous default function declaration under module concatenation", () => { + // When ConcatenationScope renames `__WEBPACK_DEFAULT_EXPORT__` to a + // module-scoped symbol, any Reflect.defineProperty InitFragment added + // for the anonymous default fix-up must reference the renamed symbol. + expect(inner()).toBe(42); + expect(inner.name).toBe("default"); +}); diff --git a/test/configCases/anonymous-default-export-name/concat-anonymous-function/inner.js b/test/configCases/anonymous-default-export-name/concat-anonymous-function/inner.js new file mode 100644 index 00000000000..7dc88337ff1 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/concat-anonymous-function/inner.js @@ -0,0 +1,3 @@ +export default function () { + return 42; +} diff --git a/test/configCases/anonymous-default-export-name/concat-anonymous-function/webpack.config.js b/test/configCases/anonymous-default-export-name/concat-anonymous-function/webpack.config.js new file mode 100644 index 00000000000..1d26fe384ae --- /dev/null +++ b/test/configCases/anonymous-default-export-name/concat-anonymous-function/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + devtool: false, + optimization: { + concatenateModules: true, + minimize: false + } +}; diff --git a/test/configCases/anonymous-default-export-name/es5-async-arrow/index.js b/test/configCases/anonymous-default-export-name/es5-async-arrow/index.js new file mode 100644 index 00000000000..ad049d7f803 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-async-arrow/index.js @@ -0,0 +1,9 @@ +import load from "./loader"; + +it("should handle anonymous async arrow default export in ES5 env", async () => { + // `export default async (v) => v * 2` — ArrowFunctionExpression (async), + // matches isAnonymousDefault. Ensure the Reflect fix-up references the + // real assignment target, not an undeclared `__WEBPACK_DEFAULT_EXPORT__`. + const result = await load(21); + expect(result).toBe(42); +}); diff --git a/test/configCases/anonymous-default-export-name/es5-async-arrow/loader.js b/test/configCases/anonymous-default-export-name/es5-async-arrow/loader.js new file mode 100644 index 00000000000..77a300f5f25 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-async-arrow/loader.js @@ -0,0 +1 @@ +export default async (/** @type {number} */ value) => value * 2; diff --git a/test/configCases/anonymous-default-export-name/es5-async-arrow/webpack.config.js b/test/configCases/anonymous-default-export-name/es5-async-arrow/webpack.config.js new file mode 100644 index 00000000000..fb7e011c9be --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-async-arrow/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + output: { + environment: { + module: false, + const: false, + arrowFunction: false, + bigIntLiteral: false, + destructuring: false, + dynamicImport: false, + forOf: false + } + } +}; diff --git a/test/configCases/anonymous-default-export-name/es5-class-extends/Base.js b/test/configCases/anonymous-default-export-name/es5-class-extends/Base.js new file mode 100644 index 00000000000..5c4ac58982a --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class-extends/Base.js @@ -0,0 +1,5 @@ +export class Base { + kind() { + return "base"; + } +} diff --git a/test/configCases/anonymous-default-export-name/es5-class-extends/Derived.js b/test/configCases/anonymous-default-export-name/es5-class-extends/Derived.js new file mode 100644 index 00000000000..7776dd252d4 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class-extends/Derived.js @@ -0,0 +1,7 @@ +import { Base } from "./Base"; + +export default class extends Base { + kind() { + return "derived"; + } +}; diff --git a/test/configCases/anonymous-default-export-name/es5-class-extends/index.js b/test/configCases/anonymous-default-export-name/es5-class-extends/index.js new file mode 100644 index 00000000000..6354742862a --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class-extends/index.js @@ -0,0 +1,7 @@ +import Derived from "./Derived"; + +it("should handle anonymous default class with extends in ES5 env", () => { + const d = new Derived(); + expect(d.kind()).toBe("derived"); + expect(Derived.name).toBe("default"); +}); diff --git a/test/configCases/anonymous-default-export-name/es5-class-extends/webpack.config.js b/test/configCases/anonymous-default-export-name/es5-class-extends/webpack.config.js new file mode 100644 index 00000000000..fb7e011c9be --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class-extends/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + output: { + environment: { + module: false, + const: false, + arrowFunction: false, + bigIntLiteral: false, + destructuring: false, + dynamicImport: false, + forOf: false + } + } +}; diff --git a/test/configCases/anonymous-default-export-name/es5-class/Thing.js b/test/configCases/anonymous-default-export-name/es5-class/Thing.js new file mode 100644 index 00000000000..b1518243782 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class/Thing.js @@ -0,0 +1,5 @@ +export default class { + hello() { + return "world"; + } +}; diff --git a/test/configCases/anonymous-default-export-name/es5-class/index.js b/test/configCases/anonymous-default-export-name/es5-class/index.js new file mode 100644 index 00000000000..35846163de5 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class/index.js @@ -0,0 +1,12 @@ +import Thing from "./Thing"; + +it("should not throw TDZ/ReferenceError for anonymous default export class in ES5 env", () => { + // Per ES spec, `export default class {}` should have .name === "default". + // The anonymous-default fix-up introduced in PR #20773 inserts an + // InitFragment that references `__WEBPACK_DEFAULT_EXPORT__` — ensure it + // runs *after* the class declaration (classes are not hoisted, so it + // would hit a TDZ ReferenceError otherwise). + const instance = new Thing(); + expect(instance.hello()).toBe("world"); + expect(Thing.name).toBe("default"); +}); diff --git a/test/configCases/anonymous-default-export-name/es5-class/webpack.config.js b/test/configCases/anonymous-default-export-name/es5-class/webpack.config.js new file mode 100644 index 00000000000..fb7e011c9be --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-class/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + output: { + environment: { + module: false, + const: false, + arrowFunction: false, + bigIntLiteral: false, + destructuring: false, + dynamicImport: false, + forOf: false + } + } +}; diff --git a/test/configCases/anonymous-default-export-name/es5-env/constant.js b/test/configCases/anonymous-default-export-name/es5-env/constant.js new file mode 100644 index 00000000000..00a6c9cb224 --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-env/constant.js @@ -0,0 +1,3 @@ +// Mirrors d3-interpolate/src/constant.js which triggered the regression +// in https://github.com/webpack/webpack/issues/20793 +export default (x) => () => x; diff --git a/test/configCases/anonymous-default-export-name/es5-env/index.js b/test/configCases/anonymous-default-export-name/es5-env/index.js new file mode 100644 index 00000000000..126734bcbca --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-env/index.js @@ -0,0 +1,12 @@ +import constant from "./constant"; + +it("should not throw ReferenceError when importing an anonymous default export in an ES5 environment", () => { + // Regression test for https://github.com/webpack/webpack/issues/20793 + // With `output.environment.const = false`, the harmony default export + // template assigns directly to `__webpack_exports__["default"]` without + // declaring `__WEBPACK_DEFAULT_EXPORT__`. The anonymous-default `.name` + // fix-up must not reference that undeclared binding. + const fn = constant(42); + expect(typeof fn).toBe("function"); + expect(fn()).toBe(42); +}); diff --git a/test/configCases/anonymous-default-export-name/es5-env/webpack.config.js b/test/configCases/anonymous-default-export-name/es5-env/webpack.config.js new file mode 100644 index 00000000000..fb7e011c9be --- /dev/null +++ b/test/configCases/anonymous-default-export-name/es5-env/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + output: { + environment: { + module: false, + const: false, + arrowFunction: false, + bigIntLiteral: false, + destructuring: false, + dynamicImport: false, + forOf: false + } + } +}; diff --git a/test/configCases/api-plugin/issues-20139/bar.js b/test/configCases/api-plugin/issues-20139/bar.js new file mode 100644 index 00000000000..c648af9bce4 --- /dev/null +++ b/test/configCases/api-plugin/issues-20139/bar.js @@ -0,0 +1,2 @@ +export const bar = "bar"; +__webpack_global__.bar = "bar"; \ No newline at end of file diff --git a/test/configCases/api-plugin/issues-20139/foo.js b/test/configCases/api-plugin/issues-20139/foo.js new file mode 100644 index 00000000000..3f69713db61 --- /dev/null +++ b/test/configCases/api-plugin/issues-20139/foo.js @@ -0,0 +1,58 @@ +__webpack_global__.myCustomProperty = "myCustomProperty"; + +"use strict"; +var __webpack_require__ = { + test(__webpack_global__) { + __webpack_global__.test = 1; + } +}; +(() => { + __webpack_require__.d = (exports1, definition) => { + for (var key in definition) + if ( + __webpack_require__.o(definition, key) && + !__webpack_require__.o(exports1, key) + ) + Object.defineProperty(exports1, key, { + enumerable: true, + get: definition[key], + }); + }; +})(); +(() => { + __webpack_require__.o = (obj, prop) => + Object.prototype.hasOwnProperty.call(obj, prop); +})(); +(() => { + __webpack_require__.r = (exports1) => { + if ("undefined" != typeof Symbol && Symbol.toStringTag) + Object.defineProperty(exports1, Symbol.toStringTag, { + value: "Module", + }); + Object.defineProperty(exports1, "__esModule", { + value: true, + }); + }; +})(); +var __webpack_exports__ = {}; +__webpack_require__.r(__webpack_exports__); +__webpack_require__.d(__webpack_exports__, { + Counter: () => Counter, +}); +const jsx_runtime_namespaceObject = require("react/jsx-runtime"); +const Counter = () => + /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", { + children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("h1", { + className: "title", + children: "React", + }), + }); +exports.Counter = __webpack_exports__.Counter; +for (var __webpack_i__ in __webpack_exports__) + if (-1 === ["Counter"].indexOf(__webpack_i__)) + exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, "__esModule", { + value: true, +}); + +__webpack_global__.anotherProperty = "anotherProperty"; diff --git a/test/configCases/api-plugin/issues-20139/index.js b/test/configCases/api-plugin/issues-20139/index.js new file mode 100644 index 00000000000..ef2b601b280 --- /dev/null +++ b/test/configCases/api-plugin/issues-20139/index.js @@ -0,0 +1,13 @@ +import * as foo from "./foo"; +import { bar } from "./bar"; + +it("should load module with nested __webpack_require__", () => { + expect(foo).toBeDefined(); + expect(bar).toBe("bar"); +}); + +it("should provide __webpack_global__ when module uses __webpack_require__", () => { + expect(__webpack_require__.myCustomProperty).toBe("myCustomProperty"); + expect(__webpack_global__.anotherProperty).toBe("anotherProperty"); + expect(__webpack_global__.bar).toBe("bar"); +}); \ No newline at end of file diff --git a/test/configCases/api-plugin/issues-20139/webpack.config.js b/test/configCases/api-plugin/issues-20139/webpack.config.js new file mode 100644 index 00000000000..bdb8d363ab1 --- /dev/null +++ b/test/configCases/api-plugin/issues-20139/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + {}, + { + optimization: { + concatenateModules: true + } + } +]; diff --git a/test/configCases/api-plugin/issues-20264-top-level/class.js b/test/configCases/api-plugin/issues-20264-top-level/class.js new file mode 100644 index 00000000000..fc1381992c4 --- /dev/null +++ b/test/configCases/api-plugin/issues-20264-top-level/class.js @@ -0,0 +1,6 @@ +class module { +} + +module.id = __webpack_module__.id; + +export default module; \ No newline at end of file diff --git a/test/configCases/api-plugin/issues-20264-top-level/fn.js b/test/configCases/api-plugin/issues-20264-top-level/fn.js new file mode 100644 index 00000000000..dec93779b66 --- /dev/null +++ b/test/configCases/api-plugin/issues-20264-top-level/fn.js @@ -0,0 +1,5 @@ +function module() { + return __webpack_module__.id; +} + +export default module; \ No newline at end of file diff --git a/test/configCases/api-plugin/issues-20264-top-level/index.js b/test/configCases/api-plugin/issues-20264-top-level/index.js new file mode 100644 index 00000000000..d7e989c6f8f --- /dev/null +++ b/test/configCases/api-plugin/issues-20264-top-level/index.js @@ -0,0 +1,17 @@ +import moduleFn from "./fn"; +import moduleClass from "./class"; + +const module = "layout"; +if (module === __webpack_module__) { + throw new Error("module is __webpack_module__, this should not happen"); +} + +it("should get module id from __webpack_module__", () => { + expect(__webpack_module__.id).toBeDefined(); + const module = "layout"; + expect(module).toBe("layout"); + expect(__webpack_module__.id).toBeDefined(); + expect(moduleFn()).toBeDefined(); + expect(moduleClass.id).toBeDefined(); + expect(typeof __webpack_module__).toBe("object"); +}); \ No newline at end of file diff --git a/test/configCases/api-plugin/issues-20264-top-level/webpack.config.js b/test/configCases/api-plugin/issues-20264-top-level/webpack.config.js new file mode 100644 index 00000000000..27313115dcd --- /dev/null +++ b/test/configCases/api-plugin/issues-20264-top-level/webpack.config.js @@ -0,0 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = {}; diff --git a/test/configCases/api-plugin/issues-20264/index.js b/test/configCases/api-plugin/issues-20264/index.js new file mode 100644 index 00000000000..7da659b7a3e --- /dev/null +++ b/test/configCases/api-plugin/issues-20264/index.js @@ -0,0 +1,9 @@ +module.exports = "index"; + +it("should get module id from __webpack_module__", () => { + expect(__webpack_module__.id).toBeDefined(); + const module = "layout"; + expect(module).toBe("layout"); + expect(__webpack_module__.id).toBeDefined(); + expect(typeof __webpack_module__).toBe("object"); +}); \ No newline at end of file diff --git a/test/configCases/api-plugin/issues-20264/webpack.config.js b/test/configCases/api-plugin/issues-20264/webpack.config.js new file mode 100644 index 00000000000..27313115dcd --- /dev/null +++ b/test/configCases/api-plugin/issues-20264/webpack.config.js @@ -0,0 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = {}; diff --git a/test/configCases/asset-modules/_images/file.jpg b/test/configCases/asset-modules/_images/file.jpg new file mode 100644 index 00000000000..fe5c6eefa79 Binary files /dev/null and b/test/configCases/asset-modules/_images/file.jpg differ diff --git a/test/configCases/asset-modules/_images/file.png b/test/configCases/asset-modules/_images/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/asset-modules/_images/file.png differ diff --git a/test/configCases/asset-modules/_images/file.svg b/test/configCases/asset-modules/_images/file.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/asset-modules/_images/file.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/asset-modules/_images/file_copy.png b/test/configCases/asset-modules/_images/file_copy.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/asset-modules/_images/file_copy.png differ diff --git a/test/configCases/asset-modules/_static/file.html b/test/configCases/asset-modules/_static/file.html new file mode 100644 index 00000000000..e149a394349 --- /dev/null +++ b/test/configCases/asset-modules/_static/file.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + diff --git a/test/configCases/asset-modules/assetModuleFilename/index.js b/test/configCases/asset-modules/assetModuleFilename/index.js new file mode 100644 index 00000000000..0b3685ff809 --- /dev/null +++ b/test/configCases/asset-modules/assetModuleFilename/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg"; +import svg2 from "../_images/file.svg?custom2"; + +it("should change filenames", () => { + expect(png).toEqual("images/[ext]/success-png.png"); + expect(svg).toEqual("images/success-svg.svg"); + expect(svg2).toEqual("custom-images/success.svg"); +}); diff --git a/test/configCases/asset-modules/assetModuleFilename/webpack.config.js b/test/configCases/asset-modules/assetModuleFilename/webpack.config.js new file mode 100644 index 00000000000..eee4fee168a --- /dev/null +++ b/test/configCases/asset-modules/assetModuleFilename/webpack.config.js @@ -0,0 +1,34 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: ({ filename: _filename }) => { + const filename = /** @type {string} */ (_filename); + if (/.png$/.test(filename)) { + return "images/[\\ext\\]/success-png[ext]"; + } + if (/.svg$/.test(filename)) { + return "images/success-svg[ext]"; + } + return "images/failure[ext]"; + } + }, + module: { + rules: [ + { + test: /\.(png|svg)$/, + type: "asset/resource", + rules: [ + { + resourceQuery: "?custom2", + generator: { + filename: "custom-images/success[ext]" + } + } + ] + } + ] + } +}; diff --git a/test/configCases/asset-modules/base-uri/index.js b/test/configCases/asset-modules/base-uri/index.js new file mode 100644 index 00000000000..6f942545493 --- /dev/null +++ b/test/configCases/asset-modules/base-uri/index.js @@ -0,0 +1,5 @@ +it("should handle different querystrings for assets correctly", () => { + __webpack_base_uri__ = "https://example.com"; + const file = new URL("../_images/file.png", import.meta.url); + expect(file.href).toMatch(/^https:\/\/example.com\/path\/[0-9a-f]+.png$/); +}); diff --git a/test/configCases/asset-modules/base-uri/webpack.config.js b/test/configCases/asset-modules/base-uri/webpack.config.js new file mode 100644 index 00000000000..d6a36335a4f --- /dev/null +++ b/test/configCases/asset-modules/base-uri/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = { + mode: "development", + target: "web", + output: { + publicPath: "/path/" + } +}; diff --git a/test/configCases/asset-modules/build-http/index.js b/test/configCases/asset-modules/build-http/index.js new file mode 100644 index 00000000000..b3aa5ccbf08 --- /dev/null +++ b/test/configCases/asset-modules/build-http/index.js @@ -0,0 +1,8 @@ +const urlSvg = new URL( + "https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/asset-modules/_images/file.svg", + import.meta.url +); + +it("should work", () => { + expect(/[\da-f]{20}\.svg$/.test(urlSvg)).toBe(true); +}); diff --git a/test/configCases/asset-modules/build-http/lock-files/lock.json b/test/configCases/asset-modules/build-http/lock-files/lock.json new file mode 100644 index 00000000000..0fbbbd268da --- /dev/null +++ b/test/configCases/asset-modules/build-http/lock-files/lock.json @@ -0,0 +1,4 @@ +{ + "https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/asset-modules/_images/file.svg": { "integrity": "sha512-ncmj1otv+/Hu0YMJTrkNR+Tnzm9oQZt4PAKpmch4P73Gle2YoMdjhG5lAFxRurztcA/tRy5d8aI5gOet9D1Kag==", "contentType": "image/svg+xml" }, + "version": 1 +} diff --git a/test/configCases/asset-modules/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_asset-modules__images_file_02a283f04807da1b64a1.svg b/test/configCases/asset-modules/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_asset-modules__images_file_02a283f04807da1b64a1.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/asset-modules/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_asset-modules__images_file_02a283f04807da1b64a1.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/asset-modules/build-http/webpack.config.js b/test/configCases/asset-modules/build-http/webpack.config.js new file mode 100644 index 00000000000..f3fa6ee1e17 --- /dev/null +++ b/test/configCases/asset-modules/build-http/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + experiments: { + buildHttp: { + allowedUris: [() => true], + lockfileLocation: path.resolve(__dirname, "./lock-files/lock.json"), + cacheLocation: path.resolve(__dirname, "./lock-files/test") + } + } +}; diff --git a/test/configCases/asset-modules/bytes/file.svg b/test/configCases/asset-modules/bytes/file.svg new file mode 100644 index 00000000000..900e14eb274 --- /dev/null +++ b/test/configCases/asset-modules/bytes/file.svg @@ -0,0 +1 @@ +icon-square-small \ No newline at end of file diff --git a/test/configCases/asset-modules/bytes/file.text b/test/configCases/asset-modules/bytes/file.text new file mode 100644 index 00000000000..883efb6befc --- /dev/null +++ b/test/configCases/asset-modules/bytes/file.text @@ -0,0 +1 @@ +a Ā 𐀀 文 🦄 Text \ No newline at end of file diff --git a/test/configCases/asset-modules/bytes/index.js b/test/configCases/asset-modules/bytes/index.js new file mode 100644 index 00000000000..94b7c311ad8 --- /dev/null +++ b/test/configCases/asset-modules/bytes/index.js @@ -0,0 +1,19 @@ +import * as style from "./style.css"; +import file from "./file.text" with { type: "bytes" }; + +it("should work", async () => { + const decoder = new TextDecoder('utf-8'); + const text = decoder.decode(file); + + expect(text).toBe("a Ā 𐀀 文 🦄 Text"); + + const dyn = (await import("./file.text?other", { with: { type: "bytes" } })).default; + const dynText = decoder.decode(dyn); + + expect(dynText).toBe("a Ā 𐀀 文 🦄 Text"); + + if (typeof getComputedStyle === "function") { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("--my-url")).toBe(" url(data:application/octet-stream;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPg==)"); + } +}); diff --git a/test/configCases/asset-modules/bytes/style.css b/test/configCases/asset-modules/bytes/style.css new file mode 100644 index 00000000000..b2ddc75f48b --- /dev/null +++ b/test/configCases/asset-modules/bytes/style.css @@ -0,0 +1,3 @@ +body { + --my-url: url("./file.svg"); +} diff --git a/test/configCases/asset-modules/bytes/test.config.js b/test/configCases/asset-modules/bytes/test.config.js new file mode 100644 index 00000000000..f43594221bb --- /dev/null +++ b/test/configCases/asset-modules/bytes/test.config.js @@ -0,0 +1,28 @@ +"use strict"; + +let run = 0; + +module.exports = { + moduleScope(scope, options) { + if (!scope.window) { + return; + } + + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = `bundle${run === 0 ? "0" : "2"}.css`; + scope.window.document.head.appendChild(link); + + run++; + }, + findBundle(i) { + if (i === 2) { + return ["bundle2.mjs"]; + } + + return [ + `file_text_other.bundle${i}.${i === 2 ? "mjs" : "js"}`, + `bundle${i}.${i === 2 ? "mjs" : "js"}` + ]; + } +}; diff --git a/test/configCases/asset-modules/bytes/test.filter.js b/test/configCases/asset-modules/bytes/test.filter.js new file mode 100644 index 00000000000..03c5581fcb2 --- /dev/null +++ b/test/configCases/asset-modules/bytes/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsTextDecoder = require("../../../helpers/supportsTextDecoder"); + +module.exports = () => supportsTextDecoder(); diff --git a/test/configCases/asset-modules/bytes/webpack.config.js b/test/configCases/asset-modules/bytes/webpack.config.js new file mode 100644 index 00000000000..81ccf87cf8b --- /dev/null +++ b/test/configCases/asset-modules/bytes/webpack.config.js @@ -0,0 +1,54 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + name: "web", + mode: "development", + target: "web", + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.svg$/, + type: "asset/bytes" + } + ] + } + }, + { + name: "node", + mode: "development", + target: "node", + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.svg$/, + type: "asset/bytes" + } + ] + } + }, + { + name: "universal", + mode: "development", + target: ["web", "node"], + experiments: { + outputModule: true, + css: true + }, + module: { + rules: [ + { + test: /\.svg$/, + type: "asset/bytes" + } + ] + } + } +]; diff --git a/test/configCases/asset-modules/custom-condition/index.js b/test/configCases/asset-modules/custom-condition/index.js new file mode 100644 index 00000000000..dcb926ded57 --- /dev/null +++ b/test/configCases/asset-modules/custom-condition/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg"; +import jpg from "../_images/file.jpg"; + +it("should generate various asset types by a custom encoder", () => { + expect(png).toMatch(/^data:image\/png;base64,[0-9a-zA-Z+/]+=*$/); + expect(jpg).toMatch(/^[\da-f]{20}\.jpg$/); + expect(svg).toMatch(/^[\da-f]{20}\.svg$/); +}); diff --git a/test/configCases/asset-modules/custom-condition/webpack.config.js b/test/configCases/asset-modules/custom-condition/webpack.config.js new file mode 100644 index 00000000000..82d5f131ec7 --- /dev/null +++ b/test/configCases/asset-modules/custom-condition/webpack.config.js @@ -0,0 +1,54 @@ +"use strict"; + +const path = require("path"); +const NormalModule = require("../../../../").NormalModule; + +/** @typedef {import("../../../../").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.png$/, + type: "asset", + /** @type {ParserOptionsByModuleTypeKnown['asset']} */ + parser: { + dataUrlCondition: (source, { filename, module }) => { + expect(source).toBeInstanceOf(Buffer); + expect(filename).toBe( + path.resolve(__dirname, "../_images/file.png") + ); + expect(module).toBeInstanceOf(NormalModule); + return true; + } + } + }, + { + test: /\.jpg$/, + type: "asset", + /** @type {ParserOptionsByModuleTypeKnown['asset']} */ + parser: { + dataUrlCondition: (source, { filename, module }) => { + expect(source).toBeInstanceOf(Buffer); + expect(filename).toBe( + path.resolve(__dirname, "../_images/file.jpg") + ); + expect(module).toBeInstanceOf(NormalModule); + return false; + } + } + }, + { + test: /\.svg$/, + type: "asset", + parser: { + dataUrlCondition: { + maxSize: 0 + } + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/custom-encoder/index.js b/test/configCases/asset-modules/custom-encoder/index.js new file mode 100644 index 00000000000..834baa4cdda --- /dev/null +++ b/test/configCases/asset-modules/custom-encoder/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg"; +import jpg from "../_images/file.jpg"; + +it("should generate various asset types by a custom encoder", () => { + expect(png).toMatch(/^data:mimetype\/png;base64,[0-9a-zA-Z+/]+=*$/); + expect(jpg).toEqual("data:image/jpg;base64,custom-content"); + expect(svg).toMatch(/^data:image\/svg\+xml,/); +}); diff --git a/test/configCases/asset-modules/custom-encoder/webpack.config.js b/test/configCases/asset-modules/custom-encoder/webpack.config.js new file mode 100644 index 00000000000..d79b9c9d6e3 --- /dev/null +++ b/test/configCases/asset-modules/custom-encoder/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.png$/, + type: "asset/inline", + generator: { + dataUrl: { + mimetype: "mimetype/png" + } + } + }, + { + test: /\.jpg$/, + type: "asset/inline", + generator: { + dataUrl() { + return "data:image/jpg;base64,custom-content"; + } + } + }, + { + test: /\.svg$/, + type: "asset", + generator: { + dataUrl: { + encoding: false + } + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/data-url-broken/errors.js b/test/configCases/asset-modules/data-url-broken/errors.js new file mode 100644 index 00000000000..5eb76736879 --- /dev/null +++ b/test/configCases/asset-modules/data-url-broken/errors.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /You may need an additional plugin to handle "unknown:" URIs./ +]; diff --git a/test/configCases/asset-modules/data-url-broken/index.js b/test/configCases/asset-modules/data-url-broken/index.js new file mode 100644 index 00000000000..c7f907bedc1 --- /dev/null +++ b/test/configCases/asset-modules/data-url-broken/index.js @@ -0,0 +1,14 @@ +it("should not crash", () => { + let errored; + + try { + const url = new URL( + "unknown:test", + import.meta.url + ); + } catch (err) { + errored = err; + } + + expect(/Module build failed/.test(errored.message)).toBe(true); +}); diff --git a/test/configCases/asset-modules/data-url-broken/infrastructure-log.js b/test/configCases/asset-modules/data-url-broken/infrastructure-log.js new file mode 100644 index 00000000000..951fafae256 --- /dev/null +++ b/test/configCases/asset-modules/data-url-broken/infrastructure-log.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = (options) => { + if (options.cache && options.cache.type === "filesystem") { + return [/Pack got invalid because of write to/]; + } + + return []; +}; diff --git a/test/configCases/asset-modules/data-url-broken/webpack.config.js b/test/configCases/asset-modules/data-url-broken/webpack.config.js new file mode 100644 index 00000000000..ffd2bf5659b --- /dev/null +++ b/test/configCases/asset-modules/data-url-broken/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.(png|svg)$/, + type: "asset/inline" + }, + { + mimetype: "image/svg+xml", + type: "asset/inline" + }, + { + test: /\.jpg$/, + type: "asset", + parser: { + dataUrlCondition: { + maxSize: Infinity + } + } + }, + { + mimetype: "text/plain", + type: "asset/inline", + loader: "./loader" + } + ] + } +}; diff --git a/test/configCases/asset-modules/data-url-extract/index.js b/test/configCases/asset-modules/data-url-extract/index.js new file mode 100644 index 00000000000..ae9b19ce4f3 --- /dev/null +++ b/test/configCases/asset-modules/data-url-extract/index.js @@ -0,0 +1,28 @@ +const urlSvg = new URL( + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=", + import.meta.url +); +const urlHtml = new URL( + "data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E", + import.meta.url +); +const urlPng = new URL( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAABNJREFUCB1jZGBg+A/EDEwgAgQADigBA//q6GsAAAAASUVORK5CYII%3D", + import.meta.url +); +const urlGif = new URL( + "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7", + import.meta.url +); +const urlGif2 = new URL( + "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=", + import.meta.url +); + +it("should extract DataURI's", () => { + expect(/[0-9abcdef]+\.svg/.test(urlSvg.href)).toBe(true); + expect(/[0-9abcdef]+\.[0-9abcdef]+\.html/.test(urlHtml.href)).toBe(true); + expect(/[0-9abcdef]+\.png/.test(urlPng.href)).toBe(true); + expect(/[0-9abcdef]+\.gif/.test(urlGif.href)).toBe(true); + expect(/[0-9abcdef]+\.gif/.test(urlGif2.href)).toBe(true); +}); diff --git a/test/configCases/asset-modules/data-url-extract/webpack.config.js b/test/configCases/asset-modules/data-url-extract/webpack.config.js new file mode 100644 index 00000000000..ea18d656371 --- /dev/null +++ b/test/configCases/asset-modules/data-url-extract/webpack.config.js @@ -0,0 +1,35 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + mimetype: "image/gif", + type: "asset/resource", + generator: { + filename: "[name][ext][query]" + } + }, + { + mimetype: "text/html", + type: "asset/resource", + generator: { + filename: "[name].[contenthash][ext]" + } + }, + { + mimetype: "image/png", + type: "asset/resource", + generator: { + filename: "[contenthash][ext][query]" + } + }, + { + mimetype: "image/svg", + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/asset-modules/data-url/index.js b/test/configCases/asset-modules/data-url/index.js new file mode 100644 index 00000000000..c76a993d25f --- /dev/null +++ b/test/configCases/asset-modules/data-url/index.js @@ -0,0 +1,37 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg"; +import jpg from "../_images/file.jpg"; +import dataSvg from "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo="; +const urlSvg = new URL( + "data:image/svg;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=" +); +const urlSvg2 = new URL( + "data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e", + import.meta.url +); +const helloWorld = new URL("data:text/plain,Hello", import.meta.url); +const helloWorldBase64 = new URL( + "data:text/plain;base64,SGVsbG8=", + import.meta.url +); + +const urlSvg3 = new URL( + "data:image/svg+xml;,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 aria-hidden=%27true%27 fill=%27%23535A60%27 width=%2718%27 height=%2718%27 viewBox=%270 0 18 18%27%3E%3Cpath d=%27M3 3a2 2 0 012-2h6l4 4v10a2 2 0 01-2 2H5a2 2 0 01-2-2V3zm7-1.5V6h4.5L10 1.5z%27%3E%3C/path%3E%3C/svg%3E", + import.meta.url +); + +it("should generate various data-url types", () => { + expect(png).toContain("data:image/png;base64,"); + expect(svg).toContain("data:image/svg+xml;base64"); + expect(jpg).toContain("data:image/jpeg;base64,"); + expect(dataSvg).toContain("data:image/svg+xml;base64,"); + expect(urlSvg.href).toContain("data:image/svg;base64,"); + expect(urlSvg2.href).toContain( + "data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e" + ); + expect(urlSvg3.href).toContain("data:image/svg+xml,"); + expect(helloWorld.href).toContain("data:text/plain,Hello%2C%20World%21"); + expect(helloWorldBase64.href).toContain( + "data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==" + ); +}); diff --git a/test/configCases/asset-modules/data-url/loader.js b/test/configCases/asset-modules/data-url/loader.js new file mode 100644 index 00000000000..c5048a9c3df --- /dev/null +++ b/test/configCases/asset-modules/data-url/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition<{ f(): any }>} */ +module.exports = function (source) { + return `${source}, World!`; +}; diff --git a/test/configCases/asset-modules/data-url/webpack.config.js b/test/configCases/asset-modules/data-url/webpack.config.js new file mode 100644 index 00000000000..ffd2bf5659b --- /dev/null +++ b/test/configCases/asset-modules/data-url/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.(png|svg)$/, + type: "asset/inline" + }, + { + mimetype: "image/svg+xml", + type: "asset/inline" + }, + { + test: /\.jpg$/, + type: "asset", + parser: { + dataUrlCondition: { + maxSize: Infinity + } + } + }, + { + mimetype: "text/plain", + type: "asset/inline", + loader: "./loader" + } + ] + } +}; diff --git a/test/configCases/asset-modules/different-query/index.js b/test/configCases/asset-modules/different-query/index.js new file mode 100644 index 00000000000..6c49de9c5cb --- /dev/null +++ b/test/configCases/asset-modules/different-query/index.js @@ -0,0 +1,12 @@ +it("should handle different querystrings for assets correctly", () => { + const a = new URL("../_images/file.png?foo=bar", import.meta.url); + const b = new URL("../_images/file.png?bar=foo", import.meta.url); + const c = new URL("../_images/file.png", import.meta.url); + const d = new URL("../_images/file.png", import.meta.url); + expect(b.pathname).toBe(a.pathname); + expect(c.pathname).toBe(a.pathname); + expect(d.pathname).toBe(a.pathname); + expect(a.search).toBe("?foo=bar"); + expect(b.search).toBe("?bar=foo"); + expect(c.search).toBe(""); +}); diff --git a/test/configCases/asset-modules/different-query/webpack.config.js b/test/configCases/asset-modules/different-query/webpack.config.js new file mode 100644 index 00000000000..3081027bc81 --- /dev/null +++ b/test/configCases/asset-modules/different-query/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = { + mode: "development", + target: "web" +}; diff --git a/test/configCases/asset-modules/emit/index.js b/test/configCases/asset-modules/emit/index.js new file mode 100644 index 00000000000..3bc85a00242 --- /dev/null +++ b/test/configCases/asset-modules/emit/index.js @@ -0,0 +1,12 @@ +import url from "../_images/file.png"; +import url2 from "../_images/file.jpg"; +import fs from "fs"; +import path from "path"; + +it("should output asset with path", () => { + expect(url).toEqual("images/file.png"); + expect(url2).toEqual("images/file.jpg"); + + expect(fs.existsSync(path.join(__STATS__.outputPath, url))).toBe(false); + expect(fs.existsSync(path.join(__STATS__.outputPath, url2))).toBe(true); +}); diff --git a/test/configCases/asset-modules/emit/webpack.config.js b/test/configCases/asset-modules/emit/webpack.config.js new file mode 100644 index 00000000000..efd50f7a324 --- /dev/null +++ b/test/configCases/asset-modules/emit/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "images/file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset/resource", + generator: { + emit: false + } + }, + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/asset-modules/entry-with-runtimeChunk/entry.css b/test/configCases/asset-modules/entry-with-runtimeChunk/entry.css new file mode 100644 index 00000000000..72dc1bf90b9 --- /dev/null +++ b/test/configCases/asset-modules/entry-with-runtimeChunk/entry.css @@ -0,0 +1,3 @@ +.class { + background: #000; +} diff --git a/test/configCases/asset-modules/entry-with-runtimeChunk/entry.js b/test/configCases/asset-modules/entry-with-runtimeChunk/entry.js new file mode 100644 index 00000000000..0acee55e319 --- /dev/null +++ b/test/configCases/asset-modules/entry-with-runtimeChunk/entry.js @@ -0,0 +1,3 @@ +it("should compile and run", () => { + expect(true).toBe(true) +}); diff --git a/test/configCases/asset-modules/entry-with-runtimeChunk/test.config.js b/test/configCases/asset-modules/entry-with-runtimeChunk/test.config.js new file mode 100644 index 00000000000..79c464c2927 --- /dev/null +++ b/test/configCases/asset-modules/entry-with-runtimeChunk/test.config.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = { + findBundle(i, options) { + const ext = options.output.module ? "mjs" : "js"; + + switch (i % 4) { + case 0: + return ["test.js"]; + case 1: + return ["test.js", `${i}/app.${ext}`, `${i}/runtime~app.${ext}`]; + case 2: + return ["test.js"]; + case 3: + return ["test.js", `${i}/entry2.${ext}`, `${i}/runtime~entry2.${ext}`]; + default: + break; + } + } +}; diff --git a/test/configCases/asset-modules/entry-with-runtimeChunk/test.js b/test/configCases/asset-modules/entry-with-runtimeChunk/test.js new file mode 100644 index 00000000000..2fe137f49b0 --- /dev/null +++ b/test/configCases/asset-modules/entry-with-runtimeChunk/test.js @@ -0,0 +1,14 @@ +it("should work", () => { + const stats = __STATS__.children[__STATS_I__]; + + const test = stats.assets.find( + a => a.name === "test.js" + ); + expect(Boolean(test)).toBe(true); + + const assetEntry = stats.assets.find( + a => a.info.sourceFilename === "../_images/file.png" + ); + expect(Boolean(assetEntry)).toBe(true); + +}); diff --git a/test/configCases/asset-modules/entry-with-runtimeChunk/webpack.config.js b/test/configCases/asset-modules/entry-with-runtimeChunk/webpack.config.js new file mode 100644 index 00000000000..2e88fc30b18 --- /dev/null +++ b/test/configCases/asset-modules/entry-with-runtimeChunk/webpack.config.js @@ -0,0 +1,153 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +const common = { + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + } + ] + }, + experiments: { + css: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const data = fs.readFileSync( + path.resolve(__dirname, "./test.js") + ); + + compilation.emitAsset( + "test.js", + new webpack.sources.RawSource(data) + ); + } + ); + }); + } + } + ], + optimization: { + runtimeChunk: { + name: (entrypoint) => `runtime~${entrypoint.name}` + } + } +}; + +/** + * @param {number} i index + * @returns {import("../../../../").Configuration | undefined} configuration + */ +const entry = (i) => { + switch (i % 4) { + case 0: + return { + entry: { + app: { + import: "../_images/file.png" + } + } + }; + case 1: + return { + entry: { + app: ["../_images/file.png", "./entry.js"] + } + }; + case 2: + return { + entry: { + app: ["../_images/file.png", "./entry.css"] + } + }; + case 3: + return { + entry: { + entry1: "../_images/file.png", + entry2: "./entry.js" + } + }; + default: + break; + } +}; + +/** + * @param {number} i index + * @returns {import("../../../../").Configuration} configuration + */ +const esm = (i) => ({ + ...common, + ...entry(i), + output: { + filename: `${i}/[name].mjs`, + chunkFilename: `${i}/[name].mjs`, + cssFilename: `${i}/[name].css`, + cssChunkFilename: `${i}/[name].css`, + assetModuleFilename: `${i}/[name][ext][query]`, + module: true + }, + experiments: { + outputModule: true, + css: true + } +}); + +/** + * @param {number} i index + * @returns {import("../../../../").Configuration} configuration + */ +const node = (i) => ({ + ...common, + ...entry(i), + output: { + filename: `${i}/[name].js`, + chunkFilename: `${i}/[name].js`, + cssFilename: `${i}/[name].css`, + cssChunkFilename: `${i}/[name].css`, + assetModuleFilename: `${i}/[name][ext][query]` + }, + target: "node" +}); + +/** + * @param {number} i index + * @returns {import("../../../../").Configuration} configuration + */ +const web = (i) => ({ + ...common, + ...entry(i), + output: { + filename: `${i}/[name].js`, + chunkFilename: `${i}/[name].js`, + cssFilename: `${i}/[name].css`, + cssChunkFilename: `${i}/[name].css`, + assetModuleFilename: `${i}/[name][ext][query]` + }, + target: "web" +}); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + // web + ...[0, 1, 2, 3].map((i) => web(i)), + // node + ...[4, 5, 6, 7].map((i) => node(i)), + // ESM + ...[8, 9, 10, 11].map((i) => esm(i)) +]; diff --git a/test/configCases/asset-modules/errored/errors.js b/test/configCases/asset-modules/errored/errors.js new file mode 100644 index 00000000000..6552ad5e91f --- /dev/null +++ b/test/configCases/asset-modules/errored/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [/Error from loader/]; diff --git a/test/configCases/asset-modules/errored/index.js b/test/configCases/asset-modules/errored/index.js new file mode 100644 index 00000000000..0875071fac5 --- /dev/null +++ b/test/configCases/asset-modules/errored/index.js @@ -0,0 +1,7 @@ +it("should use a valid output path", () => { + try { + new URL("./style.css", import.meta.url); + } catch (e) { + // Nothing + } +}); diff --git a/test/configCases/asset-modules/errored/infrastructure-log.js b/test/configCases/asset-modules/errored/infrastructure-log.js new file mode 100644 index 00000000000..951fafae256 --- /dev/null +++ b/test/configCases/asset-modules/errored/infrastructure-log.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = (options) => { + if (options.cache && options.cache.type === "filesystem") { + return [/Pack got invalid because of write to/]; + } + + return []; +}; diff --git a/test/configCases/asset-modules/errored/loader.js b/test/configCases/asset-modules/errored/loader.js new file mode 100644 index 00000000000..4c6707e1a90 --- /dev/null +++ b/test/configCases/asset-modules/errored/loader.js @@ -0,0 +1,3 @@ +module.exports = function loader() { + throw new Error("Error from loader"); +}; diff --git a/test/configCases/asset-modules/errored/style.css b/test/configCases/asset-modules/errored/style.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/asset-modules/errored/style.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/asset-modules/errored/test.config.js b/test/configCases/asset-modules/errored/test.config.js new file mode 100644 index 00000000000..dd39bf2b2c9 --- /dev/null +++ b/test/configCases/asset-modules/errored/test.config.js @@ -0,0 +1,14 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = { + afterExecute(options) { + const files = fs.readdirSync(path.resolve(options.output.path, "./css")); + + if (!/style\.[0-9a-f]{8}\.css/.test(files[0])) { + throw new Error(`Invalid path for ${files.join(",")} files.`); + } + } +}; diff --git a/test/configCases/asset-modules/errored/webpack.config.js b/test/configCases/asset-modules/errored/webpack.config.js new file mode 100644 index 00000000000..830fd2ba8bd --- /dev/null +++ b/test/configCases/asset-modules/errored/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + hashDigestLength: 8 + }, + module: { + rules: [ + { + test: /\.css$/i, + type: "asset/resource", + generator: { + filename: () => "css/style.[contenthash].css" + }, + use: [ + { + loader: require.resolve("./loader") + } + ] + } + ] + } +}; diff --git a/test/configCases/asset-modules/file-loader/index.js b/test/configCases/asset-modules/file-loader/index.js new file mode 100644 index 00000000000..7e9d5657ae3 --- /dev/null +++ b/test/configCases/asset-modules/file-loader/index.js @@ -0,0 +1,5 @@ +import url from "../_images/file.png"; + +it("should use file-loader", () => { + expect(url).toEqual("file-loader.png"); +}); diff --git a/test/configCases/asset-modules/file-loader/webpack.config.js b/test/configCases/asset-modules/file-loader/webpack.config.js new file mode 100644 index 00000000000..52326f7208b --- /dev/null +++ b/test/configCases/asset-modules/file-loader/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.png$/, + loader: "file-loader", + options: { + name: "file-loader.[ext]" + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/file-url/.gitignore b/test/configCases/asset-modules/file-url/.gitignore new file mode 100644 index 00000000000..9c595a6fb76 --- /dev/null +++ b/test/configCases/asset-modules/file-url/.gitignore @@ -0,0 +1 @@ +temp diff --git a/test/configCases/asset-modules/file-url/index.js b/test/configCases/asset-modules/file-url/index.js new file mode 100644 index 00000000000..298a345e258 --- /dev/null +++ b/test/configCases/asset-modules/file-url/index.js @@ -0,0 +1,7 @@ +import {val1, val2} from "./temp/index.js"; +import expected from "./src with spaces/module"; + +it("file url request should be supported", () => { + expect(val1).toBe(expected); + expect(val2).toBe(expected); +}); diff --git a/test/configCases/asset-modules/file-url/src with spaces/module.js b/test/configCases/asset-modules/file-url/src with spaces/module.js new file mode 100644 index 00000000000..eb3cab741ed --- /dev/null +++ b/test/configCases/asset-modules/file-url/src with spaces/module.js @@ -0,0 +1 @@ +export default "default" diff --git a/test/configCases/asset-modules/file-url/webpack.config.js b/test/configCases/asset-modules/file-url/webpack.config.js new file mode 100644 index 00000000000..d6880ac5422 --- /dev/null +++ b/test/configCases/asset-modules/file-url/webpack.config.js @@ -0,0 +1,39 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { pathToFileURL } = require("url"); + +const dir = path.resolve(__dirname, "temp"); +const file = path.resolve(dir, "index.js"); + +fs.mkdirSync(dir, { + recursive: true +}); +fs.writeFileSync( + file, + `import v1 from ${JSON.stringify( + pathToFileURL( + path.resolve( + "./test/configCases/asset-modules/file-url/src with spaces/module.js" + ) + ) + )}; +import v2 from ${JSON.stringify( + `file://localhost${pathToFileURL( + path.resolve( + "./test/configCases/asset-modules/file-url/src with spaces/module.js" + ) + ) + .toString() + .slice("file://".length)}` + )}; +export const val1 = v1; +export const val2 = v2;` +); +fs.utimesSync(file, new Date(Date.now() - 10000), new Date(Date.now() - 10000)); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development" +}; diff --git a/test/configCases/asset-modules/generator-asset-publicPath-hash/index.js b/test/configCases/asset-modules/generator-asset-publicPath-hash/index.js new file mode 100644 index 00000000000..2cd9f385a96 --- /dev/null +++ b/test/configCases/asset-modules/generator-asset-publicPath-hash/index.js @@ -0,0 +1,12 @@ +import url from "../_images/file.png"; + +it("should import asset with module.generator.asset.publicPath", () => { + expect(url).toMatch(/^[a-f0-9]{20}\/assets\/[a-f0-9]{10}\.file\.png$/); + const assetInfo = __STATS__.assets.find( + a => a.info.sourceFilename === "../_images/file.png" + ).info; + expect(assetInfo.immutable).toBe(true); + expect(assetInfo.contenthash.length).toBe(2); + expect(assetInfo.contenthash[0].length).toBe(10); + expect(assetInfo.contenthash[1].length).toBe(20); +}); diff --git a/test/configCases/asset-modules/generator-asset-publicPath-hash/webpack.config.js b/test/configCases/asset-modules/generator-asset-publicPath-hash/webpack.config.js new file mode 100644 index 00000000000..0ac45304610 --- /dev/null +++ b/test/configCases/asset-modules/generator-asset-publicPath-hash/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "[contenthash:10].file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + } + ], + generator: { + asset: { + publicPath: "[contenthash]/assets/" + } + } + } +}; diff --git a/test/configCases/asset-modules/generator-asset-publicPath/index.js b/test/configCases/asset-modules/generator-asset-publicPath/index.js new file mode 100644 index 00000000000..dfeeec0a55b --- /dev/null +++ b/test/configCases/asset-modules/generator-asset-publicPath/index.js @@ -0,0 +1,5 @@ +import url from "../_images/file.png"; + +it("should import asset with module.generator.asset.publicPath", () => { + expect(url).toEqual("assets/file.png"); +}); diff --git a/test/configCases/asset-modules/generator-asset-publicPath/webpack.config.js b/test/configCases/asset-modules/generator-asset-publicPath/webpack.config.js new file mode 100644 index 00000000000..3ae491d52ee --- /dev/null +++ b/test/configCases/asset-modules/generator-asset-publicPath/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + } + ], + generator: { + asset: { + publicPath: "assets/" + } + } + } +}; diff --git a/test/configCases/asset-modules/global-and-local-options/file-global.txt b/test/configCases/asset-modules/global-and-local-options/file-global.txt new file mode 100644 index 00000000000..b47d0eb84b0 --- /dev/null +++ b/test/configCases/asset-modules/global-and-local-options/file-global.txt @@ -0,0 +1 @@ +global diff --git a/test/configCases/asset-modules/global-and-local-options/file-local.txt b/test/configCases/asset-modules/global-and-local-options/file-local.txt new file mode 100644 index 00000000000..40830374235 --- /dev/null +++ b/test/configCases/asset-modules/global-and-local-options/file-local.txt @@ -0,0 +1 @@ +local diff --git a/test/configCases/asset-modules/global-and-local-options/index.js b/test/configCases/asset-modules/global-and-local-options/index.js new file mode 100644 index 00000000000..2ad0f950766 --- /dev/null +++ b/test/configCases/asset-modules/global-and-local-options/index.js @@ -0,0 +1,7 @@ +import file1 from "./file-global.txt"; +import file2 from "./file-local.txt"; + +it("should output and DATA URL and filename", () => { + expect(file1).toMatch(/^data:text\/plain;base64,/); + expect(file2).toMatch(/^[\da-f]{20}\.txt$/); +}); diff --git a/test/configCases/asset-modules/global-and-local-options/webpack.config.js b/test/configCases/asset-modules/global-and-local-options/webpack.config.js new file mode 100644 index 00000000000..62252ca8af8 --- /dev/null +++ b/test/configCases/asset-modules/global-and-local-options/webpack.config.js @@ -0,0 +1,31 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + module: { + parser: { + asset: { + dataUrlCondition() { + return true; + } + } + }, + rules: [ + { + test: /file-global\.txt$/, + type: "asset" + }, + { + test: /file-local\.txt$/, + type: "asset", + parser: { + dataUrlCondition() { + return false; + } + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/global-options/index.js b/test/configCases/asset-modules/global-options/index.js new file mode 100644 index 00000000000..f63c1225493 --- /dev/null +++ b/test/configCases/asset-modules/global-options/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg?inline"; +import jpg from "../_images/file.jpg"; + +it("should output various asset types", () => { + expect(png).toMatch(/^[\da-f]{20}\.png$/); + expect(svg).toMatch(/^data:image\/svg\+xml,/); + expect(jpg).toMatch(/^DATA:image\/jpeg;base64,[0-9a-zA-Z+/]+=*$/); +}); diff --git a/test/configCases/asset-modules/global-options/webpack.config.js b/test/configCases/asset-modules/global-options/webpack.config.js new file mode 100644 index 00000000000..71060245496 --- /dev/null +++ b/test/configCases/asset-modules/global-options/webpack.config.js @@ -0,0 +1,47 @@ +"use strict"; + +const mimeTypes = require("mime-types"); +const svgToMiniDataURI = require("mini-svg-data-uri"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + parser: { + asset: { + dataUrlCondition: (source, { filename }) => filename.includes("?inline") + } + }, + generator: { + asset: { + dataUrl: (source, { module }) => { + const mimeType = mimeTypes.lookup( + /** @type {string} */ + (module.nameForCondition()) + ); + if (mimeType === "image/svg+xml") { + if (typeof source !== "string") { + source = source.toString(); + } + + return svgToMiniDataURI(source); + } + + const encodedContent = source.toString("base64"); + + return `DATA:${mimeType};base64,${encodedContent}`; + } + } + }, + rules: [ + { + test: /\.(png|svg)$/, + type: "asset" + }, + { + test: /\.jpg$/, + type: "asset/inline" + } + ] + } +}; diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt new file mode 100644 index 00000000000..5e1c309dae7 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt new file mode 100644 index 00000000000..5e1c309dae7 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js new file mode 100644 index 00000000000..e5dfb6da968 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js @@ -0,0 +1 @@ +export * from "fallback-package"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js new file mode 100644 index 00000000000..e3e81f78e6b --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js @@ -0,0 +1,2 @@ +export * from "./sub-dependency.js"; +export * from "/folder/sub-dependency2.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js new file mode 100644 index 00000000000..72fdbad6cad --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js @@ -0,0 +1 @@ +export const value2 = 42; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js new file mode 100644 index 00000000000..b7159db4840 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js @@ -0,0 +1 @@ +export const value = 42; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js new file mode 100644 index 00000000000..d31cf81a327 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js @@ -0,0 +1 @@ +export default { ok: true }; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js new file mode 100644 index 00000000000..7a369ecb8ec --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js @@ -0,0 +1 @@ +export * from "./folder/dependency.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js new file mode 100644 index 00000000000..1948b244cf1 --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js @@ -0,0 +1 @@ +export default new URL("asset.txt?query", import.meta.url); \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca new file mode 100644 index 00000000000..8c11fc7289b --- /dev/null +++ b/test/configCases/asset-modules/http-url/dev-defaults.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca @@ -0,0 +1,20 @@ +Copyright JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/test/configCases/asset-modules/http-url/errors.js b/test/configCases/asset-modules/http-url/errors.js new file mode 100644 index 00000000000..330d0293876 --- /dev/null +++ b/test/configCases/asset-modules/http-url/errors.js @@ -0,0 +1,23 @@ +"use strict"; + +module.exports = [ + [ + /http:\/\/localhost:9990\/index\.css\?cache used to have no-cache lockfile entry and has content now, but lockfile is frozen/ + ], + [ + /http:\/\/localhost:9990\/index\.css\?no-cache has a lockfile entry and is no-cache now, but lockfile is frozen/ + ], + [ + /http:\/\/localhost:9990\/index\.css has an outdated lockfile entry, but lockfile is frozen/ + ], + [/http:\/\/localhost:9990\/resolve\.js integrity mismatch/], + [ + /http:\/\/localhost:9990\/fallback\.js has no lockfile entry and lockfile is frozen/ + ], + [ + /http:\/\/localhost:9990\/redirect has an outdated lockfile entry, but lockfile is frozen/ + ], + [ + /Module not found: Error: http:\/\/localhost:9990@127\.0\.0\.1:9100\/secret\.js doesn't match the allowedUris policy/ + ] +]; diff --git a/test/configCases/asset-modules/http-url/errors.webpack.lock b/test/configCases/asset-modules/http-url/errors.webpack.lock new file mode 100644 index 00000000000..d6d0eceb743 --- /dev/null +++ b/test/configCases/asset-modules/http-url/errors.webpack.lock @@ -0,0 +1,13 @@ +{ + "http://localhost:9990/asset.txt?ignore": "ignore", + "http://localhost:9990/index.css": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "invalid" }, + "http://localhost:9990/index.css?query#fragment": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/index.css?no-cache": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/index.css?cache": "no-cache", + "http://localhost:9990/redirect": { "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/redirect.js": { "resolved": "http://localhost:9990/redirect", "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/resolve.js": { "integrity": "sha512-SHOULD_BE_INVALID", "contentType": "text/javascript" }, + "https://raw.githubusercontent.com//webpack//webpack//main/LICENSE": { "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE": { "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "version": 1 +} diff --git a/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js new file mode 100644 index 00000000000..e5dfb6da968 --- /dev/null +++ b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js @@ -0,0 +1 @@ +export * from "fallback-package"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js new file mode 100644 index 00000000000..d31cf81a327 --- /dev/null +++ b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js @@ -0,0 +1 @@ +export default { ok: true }; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js new file mode 100644 index 00000000000..7a369ecb8ec --- /dev/null +++ b/test/configCases/asset-modules/http-url/errors.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js @@ -0,0 +1 @@ +export * from "./folder/dependency.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock new file mode 100644 index 00000000000..55f0b6b3503 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock @@ -0,0 +1,18 @@ +{ + "http://localhost:9990/asset.txt": { "integrity": "sha512-LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==", "contentType": "text/css" }, + "http://localhost:9990/asset.txt?query": { "integrity": "sha512-LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==", "contentType": "text/css" }, + "http://localhost:9990/fallback.js": { "integrity": "sha512-BCkBS4Wb0EreudEceuobqZZwTE7SeVUJ2vVHxDQKm8xW6dGJRcUrrSWcjd/61zijOeYAW0P+boOg7u0vxrGwYg==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/dependency.js": { "integrity": "sha512-N0En4W3aNPY82MPu16+50P4PqLLyPLI6l33wR2a3ue8VCRjY8RJl8erRB8ztWSEYNad7yRDPrqlYT+IBtoOA9w==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/sub-dependency.js": { "integrity": "sha512-Jjmwazwmg67EwNPViCBwvSIxhENfS6gwufXoQLrB0B/JDA4v1p+p2S5Y6IGP4SzZqqVTsROlU8meD6ep3q6MTA==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/sub-dependency2.js": { "integrity": "sha512-BDZKEwlnwBabeHEwmMd02NxFEjYy+QwKAKP0S8zMMesX7dUsvh11hM7LUOPPFOS+nIEFZPtnc7kFwmnojVUw5A==", "contentType": "text/javascript" }, + "http://localhost:9990/index.css?cache": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/index.css?no-cache": "no-cache", + "http://localhost:9990/index.css?query#fragment": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/redirect": { "resolved": "http://localhost:9990/redirect.js", "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/redirect.js": { "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/resolve.js": { "integrity": "sha512-6J9zBO2hXSMTO1EtXJOxSRB2nVPHCoNmNHS8an1QeehzJFc3uoBPRWu6hqHPc54gv2/QME9RBR/BXIan68virg==", "contentType": "text/javascript" }, + "http://localhost:9990/url.js": { "integrity": "sha512-Dlw99Gtp/ZRxWvGlqD2EKnvbo1i6j/slwQO4WV8RIRhYZx9ErI+rndpyDMaKykSnq20HCp5H73TJ+dtO+wDyEg==", "contentType": "text/javascript" }, + "https://raw.githubusercontent.com//webpack//webpack//main/LICENSE": { "resolved": "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE", "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE": { "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "version": 1 +} diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt new file mode 100644 index 00000000000..5e1c309dae7 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt new file mode 100644 index 00000000000..5e1c309dae7 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js new file mode 100644 index 00000000000..e5dfb6da968 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js @@ -0,0 +1 @@ +export * from "fallback-package"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js new file mode 100644 index 00000000000..e3e81f78e6b --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js @@ -0,0 +1,2 @@ +export * from "./sub-dependency.js"; +export * from "/folder/sub-dependency2.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js new file mode 100644 index 00000000000..72fdbad6cad --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js @@ -0,0 +1 @@ +export const value2 = 42; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js new file mode 100644 index 00000000000..b7159db4840 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js @@ -0,0 +1 @@ +export const value = 42; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js new file mode 100644 index 00000000000..d31cf81a327 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js @@ -0,0 +1 @@ +export default { ok: true }; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js new file mode 100644 index 00000000000..7a369ecb8ec --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js @@ -0,0 +1 @@ +export * from "./folder/dependency.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js new file mode 100644 index 00000000000..1948b244cf1 --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js @@ -0,0 +1 @@ +export default new URL("asset.txt?query", import.meta.url); \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca new file mode 100644 index 00000000000..8c11fc7289b --- /dev/null +++ b/test/configCases/asset-modules/http-url/frozen-verify.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca @@ -0,0 +1,20 @@ +Copyright JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/test/configCases/asset-modules/http-url/index.errors.js b/test/configCases/asset-modules/http-url/index.errors.js new file mode 100644 index 00000000000..47b442f7f18 --- /dev/null +++ b/test/configCases/asset-modules/http-url/index.errors.js @@ -0,0 +1,32 @@ +it("error when lockfile is outdated/invalid", () => { + expect(() => { + require("http://localhost:9990/index.css?cache"); + }).toThrow(); + expect(() => { + require("http://localhost:9990/index.css?no-cache"); + }).toThrow(); + expect(() => { + require("http://localhost:9990/index.css"); + }).toThrow(); + expect(() => { + require("http://localhost:9990/resolve.js"); + }).toThrow(); + expect(() => { + require("http://localhost:9990/fallback.js"); + }).toThrow(); + expect(() => { + require("http://localhost:9990/redirect"); + }).toThrow(); +}); + +import text from "http://localhost:9990/asset.txt?ignore"; + +it("should allow to ignore lockfile entries", () => { + expect(text.trim()).toBe("Hello World"); +}); + +import cssContent from "http://localhost:9990/index.css?query#fragment"; + +it("should use the entry with query and fragment", () => { + expect(cssContent).toBe("a {}.webpack{}"); +}); diff --git a/test/configCases/asset-modules/http-url/index.js b/test/configCases/asset-modules/http-url/index.js new file mode 100644 index 00000000000..b50c682fc41 --- /dev/null +++ b/test/configCases/asset-modules/http-url/index.js @@ -0,0 +1,31 @@ +import cssContent from "http://localhost:9990/index.css?query#fragment"; +import noCacheCssContent from "http://localhost:9990/index.css?no-cache"; +import cachedCssContent from "http://localhost:9990/index.css?cache"; +import { value, value2 } from "http://localhost:9990/resolve.js"; +import { fallback } from "http://localhost:9990/fallback.js"; +import redirect1 from "http://localhost:9990/redirect"; +import redirect2 from "http://localhost:9990/redirect.js"; +import text from "http://localhost:9990/asset.txt"; +import textUrl from "http://localhost:9990/url.js"; +import license1 from "https://raw.githubusercontent.com//webpack//webpack//main/LICENSE"; +import license2 from "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE"; + +it("http url request should be supported", () => { + expect(cssContent).toBe("a {}.webpack{}"); + expect(noCacheCssContent).toBe("a {}.webpack{}"); + expect(cachedCssContent).toBe("a {}.webpack{}"); + expect(value).toBe(42); + expect(value2).toBe(42); + expect(fallback).toBe(42); + expect(redirect1).toEqual({ ok: true }); + expect(redirect2).toEqual({ ok: true }); + expect(redirect2).not.toBe(redirect1); + expect(text.trim()).toBe("Hello World"); + expect(textUrl instanceof URL).toBeTruthy(); + expect(textUrl.href).toMatch(/^file:\/\/.+\.txt\?query$/); +}); + +it("https url request should be supported", () => { + expect(license1.includes("Copyright JS Foundation and other contributors")).toBeTruthy(); + expect(license2.includes("Copyright JS Foundation and other contributors")).toBeTruthy(); +}); diff --git a/test/configCases/asset-modules/http-url/index.security.js b/test/configCases/asset-modules/http-url/index.security.js new file mode 100644 index 00000000000..15b868356e0 --- /dev/null +++ b/test/configCases/asset-modules/http-url/index.security.js @@ -0,0 +1,6 @@ +"use strict"; + +it("should reject URLs with userinfo that bypass allowedUris", () => { + expect(() => require("http://localhost:9990@127.0.0.1:9100/secret.js")).toThrow(); +}); + diff --git a/test/configCases/asset-modules/http-url/loaders/css-loader.js b/test/configCases/asset-modules/http-url/loaders/css-loader.js new file mode 100644 index 00000000000..e3661f9771a --- /dev/null +++ b/test/configCases/asset-modules/http-url/loaders/css-loader.js @@ -0,0 +1,2 @@ +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = content => `export default ${JSON.stringify(content + ".webpack{}")}`; diff --git a/test/configCases/asset-modules/http-url/loaders/md-loader.js b/test/configCases/asset-modules/http-url/loaders/md-loader.js new file mode 100644 index 00000000000..77795972a3e --- /dev/null +++ b/test/configCases/asset-modules/http-url/loaders/md-loader.js @@ -0,0 +1,2 @@ +/** @type {import("../../../../../").LoaderDefinition} */ +module.exports = content => `export default ${JSON.stringify(content)}`; diff --git a/test/configCases/asset-modules/http-url/no-cache.webpack.lock b/test/configCases/asset-modules/http-url/no-cache.webpack.lock new file mode 100644 index 00000000000..55f0b6b3503 --- /dev/null +++ b/test/configCases/asset-modules/http-url/no-cache.webpack.lock @@ -0,0 +1,18 @@ +{ + "http://localhost:9990/asset.txt": { "integrity": "sha512-LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==", "contentType": "text/css" }, + "http://localhost:9990/asset.txt?query": { "integrity": "sha512-LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==", "contentType": "text/css" }, + "http://localhost:9990/fallback.js": { "integrity": "sha512-BCkBS4Wb0EreudEceuobqZZwTE7SeVUJ2vVHxDQKm8xW6dGJRcUrrSWcjd/61zijOeYAW0P+boOg7u0vxrGwYg==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/dependency.js": { "integrity": "sha512-N0En4W3aNPY82MPu16+50P4PqLLyPLI6l33wR2a3ue8VCRjY8RJl8erRB8ztWSEYNad7yRDPrqlYT+IBtoOA9w==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/sub-dependency.js": { "integrity": "sha512-Jjmwazwmg67EwNPViCBwvSIxhENfS6gwufXoQLrB0B/JDA4v1p+p2S5Y6IGP4SzZqqVTsROlU8meD6ep3q6MTA==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/sub-dependency2.js": { "integrity": "sha512-BDZKEwlnwBabeHEwmMd02NxFEjYy+QwKAKP0S8zMMesX7dUsvh11hM7LUOPPFOS+nIEFZPtnc7kFwmnojVUw5A==", "contentType": "text/javascript" }, + "http://localhost:9990/index.css?cache": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/index.css?no-cache": "no-cache", + "http://localhost:9990/index.css?query#fragment": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/redirect": { "resolved": "http://localhost:9990/redirect.js", "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/redirect.js": { "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/resolve.js": { "integrity": "sha512-6J9zBO2hXSMTO1EtXJOxSRB2nVPHCoNmNHS8an1QeehzJFc3uoBPRWu6hqHPc54gv2/QME9RBR/BXIan68virg==", "contentType": "text/javascript" }, + "http://localhost:9990/url.js": { "integrity": "sha512-Dlw99Gtp/ZRxWvGlqD2EKnvbo1i6j/slwQO4WV8RIRhYZx9ErI+rndpyDMaKykSnq20HCp5H73TJ+dtO+wDyEg==", "contentType": "text/javascript" }, + "https://raw.githubusercontent.com//webpack//webpack//main/LICENSE": { "resolved": "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE", "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE": { "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "version": 1 +} diff --git a/test/configCases/asset-modules/http-url/node_modules/fallback-package.js b/test/configCases/asset-modules/http-url/node_modules/fallback-package.js new file mode 100644 index 00000000000..fb9f84be363 --- /dev/null +++ b/test/configCases/asset-modules/http-url/node_modules/fallback-package.js @@ -0,0 +1 @@ +export const fallback = 42; diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock new file mode 100644 index 00000000000..55f0b6b3503 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock @@ -0,0 +1,18 @@ +{ + "http://localhost:9990/asset.txt": { "integrity": "sha512-LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==", "contentType": "text/css" }, + "http://localhost:9990/asset.txt?query": { "integrity": "sha512-LHT9F+2v2A6ER7DUZ0HuJDt+t03SFJoKsbkkb7MDgvJ+hT2FhXGeDmfL2g2qj1FnEGRhXWRa4nrLFb+xRH9Fmw==", "contentType": "text/css" }, + "http://localhost:9990/fallback.js": { "integrity": "sha512-BCkBS4Wb0EreudEceuobqZZwTE7SeVUJ2vVHxDQKm8xW6dGJRcUrrSWcjd/61zijOeYAW0P+boOg7u0vxrGwYg==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/dependency.js": { "integrity": "sha512-N0En4W3aNPY82MPu16+50P4PqLLyPLI6l33wR2a3ue8VCRjY8RJl8erRB8ztWSEYNad7yRDPrqlYT+IBtoOA9w==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/sub-dependency.js": { "integrity": "sha512-Jjmwazwmg67EwNPViCBwvSIxhENfS6gwufXoQLrB0B/JDA4v1p+p2S5Y6IGP4SzZqqVTsROlU8meD6ep3q6MTA==", "contentType": "text/javascript" }, + "http://localhost:9990/folder/sub-dependency2.js": { "integrity": "sha512-BDZKEwlnwBabeHEwmMd02NxFEjYy+QwKAKP0S8zMMesX7dUsvh11hM7LUOPPFOS+nIEFZPtnc7kFwmnojVUw5A==", "contentType": "text/javascript" }, + "http://localhost:9990/index.css?cache": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/index.css?no-cache": "no-cache", + "http://localhost:9990/index.css?query#fragment": { "integrity": "sha512-sqhF9JAEi5h3ziP48SBnzQnaeei8cf/pfYJBdKL4F7xdu3v5yr71eQ0kCL11/jWRFjLG4TKOudUnS/u6WLMqYw==", "contentType": "text/css" }, + "http://localhost:9990/redirect": { "resolved": "http://localhost:9990/redirect.js", "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/redirect.js": { "integrity": "sha512-BV/MK/QTq+NHRve1XpZyQ8V6cjRP/fwbtJvENRdm5C73qNYZ4i2/fw+soj7J4qxzBXMHDbvOnA6E0ShnX2hc1w==", "contentType": "text/javascript" }, + "http://localhost:9990/resolve.js": { "integrity": "sha512-6J9zBO2hXSMTO1EtXJOxSRB2nVPHCoNmNHS8an1QeehzJFc3uoBPRWu6hqHPc54gv2/QME9RBR/BXIan68virg==", "contentType": "text/javascript" }, + "http://localhost:9990/url.js": { "integrity": "sha512-Dlw99Gtp/ZRxWvGlqD2EKnvbo1i6j/slwQO4WV8RIRhYZx9ErI+rndpyDMaKykSnq20HCp5H73TJ+dtO+wDyEg==", "contentType": "text/javascript" }, + "https://raw.githubusercontent.com//webpack//webpack//main/LICENSE": { "resolved": "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE", "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "https://raw.githubusercontent.com/webpack/webpack/main/LICENSE": { "integrity": "sha512-4rrVLk4kSgb1C9ZPzvp8lC/r+sWoFMcQlRBv075kY0uDgYldTM6IT747LCAEPOIQ5jIrE1sbn7KWW9Suele6jA==", "contentType": "text/plain; charset=utf-8" }, + "version": 1 +} diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt new file mode 100644 index 00000000000..5e1c309dae7 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/asset_72216076a225ea0abbaa.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt new file mode 100644 index 00000000000..5e1c309dae7 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/asset_query_590ffbc5acc20bf1dc88.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js new file mode 100644 index 00000000000..e5dfb6da968 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/fallback_4972219bd28762fbfd18.js @@ -0,0 +1 @@ +export * from "fallback-package"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js new file mode 100644 index 00000000000..e3e81f78e6b --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_dependency_3263dc642c8ad1171873.js @@ -0,0 +1,2 @@ +export * from "./sub-dependency.js"; +export * from "/folder/sub-dependency2.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js new file mode 100644 index 00000000000..72fdbad6cad --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency2_f750536150de4f4db445.js @@ -0,0 +1 @@ +export const value2 = 42; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js new file mode 100644 index 00000000000..b7159db4840 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/folder_sub-dependency_a662b3b186898f776088.js @@ -0,0 +1 @@ +export const value = 42; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/index_cache_502725659b59ae63a82a.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css new file mode 100644 index 00000000000..b978c1b5980 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/index_query_169a64b251bcdc02a084.css @@ -0,0 +1 @@ +a {} \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js new file mode 100644 index 00000000000..d31cf81a327 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/redirect_d3dcf71bcf15dc29654c.js @@ -0,0 +1 @@ +export default { ok: true }; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js new file mode 100644 index 00000000000..7a369ecb8ec --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/resolve_69c3f44e55195d0c14cf.js @@ -0,0 +1 @@ +export * from "./folder/dependency.js"; \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js new file mode 100644 index 00000000000..1948b244cf1 --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/http_localhost_9990/url_cc93d527a81c32b07ab8.js @@ -0,0 +1 @@ +export default new URL("asset.txt?query", import.meta.url); \ No newline at end of file diff --git a/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca new file mode 100644 index 00000000000..8c11fc7289b --- /dev/null +++ b/test/configCases/asset-modules/http-url/prod-defaults.webpack.lock.data/https_raw.githubusercontent.com/webpack_webpack_main_LICENSE_f7b7574d117107faabca @@ -0,0 +1,20 @@ +Copyright JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/test/configCases/asset-modules/http-url/server/asset.txt b/test/configCases/asset-modules/http-url/server/asset.txt new file mode 100644 index 00000000000..557db03de99 --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/asset.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/configCases/asset-modules/http-url/server/fallback.js b/test/configCases/asset-modules/http-url/server/fallback.js new file mode 100644 index 00000000000..4dda52bd88e --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/fallback.js @@ -0,0 +1 @@ +export * from "fallback-package"; diff --git a/test/configCases/asset-modules/http-url/server/folder/dependency.js b/test/configCases/asset-modules/http-url/server/folder/dependency.js new file mode 100644 index 00000000000..aaefe3bf362 --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/folder/dependency.js @@ -0,0 +1,2 @@ +export * from "./sub-dependency.js"; +export * from "/folder/sub-dependency2.js"; diff --git a/test/configCases/asset-modules/http-url/server/folder/sub-dependency.js b/test/configCases/asset-modules/http-url/server/folder/sub-dependency.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/folder/sub-dependency.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/configCases/asset-modules/http-url/server/folder/sub-dependency2.js b/test/configCases/asset-modules/http-url/server/folder/sub-dependency2.js new file mode 100644 index 00000000000..0eb474a6b3f --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/folder/sub-dependency2.js @@ -0,0 +1 @@ +export const value2 = 42; diff --git a/test/configCases/asset-modules/http-url/server/index.css b/test/configCases/asset-modules/http-url/server/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/http-url/server/index.js b/test/configCases/asset-modules/http-url/server/index.js new file mode 100644 index 00000000000..55a99aff2b6 --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/index.js @@ -0,0 +1,96 @@ +const http = require("http"); +const fs = require("fs"); +const path = require("path"); + +/** @typedef {import("../../../../../").Compiler} Compiler */ + +/** + * @returns {import("http").Server} server instance + */ +function createServer() { + const server = http.createServer((req, res) => { + let file; + const pathname = "." + /** @type {string} */ (req.url).replace(/\?.*$/, ""); + if (/** @type {string} */ (req.url).endsWith("?no-cache")) { + res.setHeader("Cache-Control", "no-cache, max-age=60"); + } else { + res.setHeader("Cache-Control", "public, immutable, max-age=600"); + } + try { + file = fs + .readFileSync(path.resolve(__dirname, pathname)) + .toString() + .replace(/\r\n?/g, "\n") + .trim(); + } catch (e) { + if (fs.existsSync(path.resolve(__dirname, pathname + ".js"))) { + res.statusCode = 301; + res.setHeader("Location", pathname.slice(1) + ".js"); + res.end(); + return; + } + res.statusCode = 404; + res.end(); + return; + } + res.setHeader( + "Content-Type", + pathname.endsWith(".js") ? "text/javascript" : "text/css" + ); + res.end(file); + }); + server.unref(); + return server; +} + +class ServerPlugin { + /** + * @param {number} port + */ + constructor(port) { + this.port = port; + this.refs = 0; + this.server = undefined; + } + + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.beforeRun.tapPromise( + "ServerPlugin", + async () => { + this.refs++; + if (!this.server) { + this.server = createServer(); + await new Promise( + /** + * @param {(value: void) => void} resolve resolve + * @param {(reason?: Error) => void} _reject reject + */ + (resolve, _reject) => { + /** @type {import("http").Server} */ + (this.server).listen( + this.port, + () => { + resolve(); + } + ); + }); + } + } + ); + + compiler.hooks.done.tapAsync("ServerPlugin", (stats, callback) => { + const s = this.server; + if (s && --this.refs === 0) { + this.server = undefined; + s.close(callback); + } else { + callback(); + } + }); + } +} + +module.exports = ServerPlugin; diff --git a/test/configCases/asset-modules/http-url/server/redirect.js b/test/configCases/asset-modules/http-url/server/redirect.js new file mode 100644 index 00000000000..47362862dc8 --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/redirect.js @@ -0,0 +1 @@ +export default { ok: true }; diff --git a/test/configCases/asset-modules/http-url/server/resolve.js b/test/configCases/asset-modules/http-url/server/resolve.js new file mode 100644 index 00000000000..b181699cfe6 --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/resolve.js @@ -0,0 +1 @@ +export * from "./folder/dependency.js"; diff --git a/test/configCases/asset-modules/http-url/server/url.js b/test/configCases/asset-modules/http-url/server/url.js new file mode 100644 index 00000000000..c2eaf0c491d --- /dev/null +++ b/test/configCases/asset-modules/http-url/server/url.js @@ -0,0 +1 @@ +export default new URL("asset.txt?query", import.meta.url); diff --git a/test/configCases/asset-modules/http-url/test.config.js b/test/configCases/asset-modules/http-url/test.config.js new file mode 100644 index 00000000000..9677a678039 --- /dev/null +++ b/test/configCases/asset-modules/http-url/test.config.js @@ -0,0 +1,21 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = { + beforeExecute() { + try { + fs.unlinkSync(path.join(__dirname, "dev-defaults.webpack.lock")); + } catch (_err) { + // Empty + } + }, + afterExecute() { + try { + fs.unlinkSync(path.join(__dirname, "dev-defaults.webpack.lock")); + } catch (_err) { + // Empty + } + } +}; diff --git a/test/configCases/asset-modules/http-url/webpack.config.js b/test/configCases/asset-modules/http-url/webpack.config.js new file mode 100644 index 00000000000..643379cbdd6 --- /dev/null +++ b/test/configCases/asset-modules/http-url/webpack.config.js @@ -0,0 +1,119 @@ +"use strict"; + +const { + experiments: { + schemes: { HttpUriPlugin } + } +} = require("../../../../"); +const ServerPlugin = require("./server"); + +const serverPlugin = new ServerPlugin(9990); +/** @type {import("../../../../").Configuration} */ +const base = { + mode: "development", + module: { + rules: [ + { + test: /\.css$/, + loader: "./loaders/css-loader" + }, + { + test: /\.md$/, + loader: "./loaders/md-loader" + }, + { + test: /\.txt$/, + dependency: { not: "url" }, + type: "asset/source" + }, + { + test: /LICENSE$/, + dependency: { not: "url" }, + type: "asset/source" + } + ] + } +}; + +const frozen = true; +const allowedUris = [ + "http://localhost:9990/", + "https://raw.githubusercontent.com/" +]; + +module.exports = [ + { + name: "frozen-verify", + ...base, + plugins: [ + serverPlugin, + new HttpUriPlugin({ + allowedUris, + upgrade: true, + frozen + }) + ] + }, + { + name: "dev-defaults", + ...base, + plugins: [ + serverPlugin, + new HttpUriPlugin({ + allowedUris, + upgrade: false, + frozen: false + }) + ] + }, + { + name: "prod-defaults", + ...base, + plugins: [ + serverPlugin, + new HttpUriPlugin({ + allowedUris, + upgrade: false, + frozen + }) + ] + }, + { + name: "no-cache", + ...base, + plugins: [ + serverPlugin, + new HttpUriPlugin({ + allowedUris, + cacheLocation: false, + frozen + }) + ] + }, + { + name: "errors", + ...base, + entry: "./index.errors.js", + plugins: [ + serverPlugin, + new HttpUriPlugin({ + allowedUris, + upgrade: true, + frozen: true + }) + ] + }, + { + name: "security-userinfo-bypass", + ...base, + entry: "./index.security.js", + plugins: [ + serverPlugin, + new HttpUriPlugin({ + allowedUris, + upgrade: false, + frozen: false + }) + ] + } +]; diff --git a/test/configCases/asset-modules/ignore/index.js b/test/configCases/asset-modules/ignore/index.js new file mode 100644 index 00000000000..a3fe671f079 --- /dev/null +++ b/test/configCases/asset-modules/ignore/index.js @@ -0,0 +1,5 @@ +const url = new URL("image.png", import.meta.url); + +it("should output asset with path", () => { + expect(url + "").toBe("data:,"); +}); diff --git a/test/configCases/asset-modules/ignore/webpack.config.js b/test/configCases/asset-modules/ignore/webpack.config.js new file mode 100644 index 00000000000..49b75fc2e43 --- /dev/null +++ b/test/configCases/asset-modules/ignore/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + resolve: { + alias: { + "image.png": false + } + } +}; diff --git a/test/configCases/asset-modules/input-data-url-encoding/index.js b/test/configCases/asset-modules/input-data-url-encoding/index.js new file mode 100644 index 00000000000..561c29d9516 --- /dev/null +++ b/test/configCases/asset-modules/input-data-url-encoding/index.js @@ -0,0 +1,33 @@ +it("should keep original encoding", () => { + const url = new URL( + "data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e", + import.meta.url + ); + expect(url.href).toBe( + "data:image/svg+xml;p=1;q=2,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke=\"%23343a40\" stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e" + ); +}); + +it("should work with 'image/svg+xml'", () => { + const one = new URL( + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNiAxNic+PHBhdGggZmlsbD0nbm9uZScgc3Ryb2tlPScjMzQzYTQwJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS13aWR0aD0nMicgZD0nTTIgNWw2IDYgNi02Jy8+PC9zdmc+", + import.meta.url + ); + expect(one.href).toBe( + "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2016%2016%27%3E%3Cpath%20fill%3D%27none%27%20stroke%3D%27%23343a40%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%20stroke-width%3D%272%27%20d%3D%27M2%205l6%206%206-6%27%2F%3E%3C%2Fsvg%3E" + ); + const two = new URL( + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzQzYTQwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTIgNWw2IDYgNi02Ii8+PC9zdmc+", + import.meta.url + ); + expect(two.href).toBe( + "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23343a40%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20stroke-width%3D%222%22%20d%3D%22M2%205l6%206%206-6%22%2F%3E%3C%2Fsvg%3E" + ); + const three = new URL( + "data:IMAGE/SVG+XML;param=123;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PHBhdGggZmlsbD0nbm9uZScgc3Ryb2tlPScjMzQzYTQwJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS13aWR0aD0nMicgZD0nTTIgNWw2IDYgNi02Jy8+PC9zdmc+", + import.meta.url + ); + expect(three.href).toBe( + "data:IMAGE/SVG+XML;param=123,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2017%2017%27%3E%3Cpath%20fill%3D%27none%27%20stroke%3D%27%23343a40%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%20stroke-width%3D%272%27%20d%3D%27M2%205l6%206%206-6%27%2F%3E%3C%2Fsvg%3E" + ); +}); diff --git a/test/configCases/asset-modules/input-data-url-encoding/webpack.config.js b/test/configCases/asset-modules/input-data-url-encoding/webpack.config.js new file mode 100644 index 00000000000..bbc41a80549 --- /dev/null +++ b/test/configCases/asset-modules/input-data-url-encoding/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + module: { + rules: [ + { + dependency: "url", + type: "asset", + generator: { + dataUrl: { + encoding: false + } + } + } + ] + }, + target: "web" +}; diff --git a/test/configCases/asset-modules/input-data-url/index.js b/test/configCases/asset-modules/input-data-url/index.js new file mode 100644 index 00000000000..1ad4a669cc4 --- /dev/null +++ b/test/configCases/asset-modules/input-data-url/index.js @@ -0,0 +1,30 @@ +it("should allow empty urls", () => { + const url = new URL("data:,", import.meta.url); + expect(url.href).toBe("data:,"); + expect(url.protocol).toBe("data:"); + expect(url.pathname).toBe(","); +}); + +it("should allow empty urls with mimetype", () => { + const url = new URL("data:test,", import.meta.url); + expect(url.href).toBe("data:test,"); + expect(url.protocol).toBe("data:"); + expect(url.pathname).toBe("test,"); +}); + +it("should allow data urls with mimetype", () => { + const url = new URL( + "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=", + import.meta.url + ); + expect(url.protocol).toBe("data:"); + expect(url.href).toMatch(/^data:image\/svg\+xml;base64,/); +}); + +it("should allow data urls with mimetype mapped to rules", () => { + const url = new URL( + "data:image/svg+xml+external;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=", + import.meta.url + ); + expect(url.href).toMatch(/^https:\/\/test\.cases\/path\/[a-f0-9]+\.svg$/); +}); diff --git a/test/configCases/asset-modules/input-data-url/webpack.config.js b/test/configCases/asset-modules/input-data-url/webpack.config.js new file mode 100644 index 00000000000..5ac891b1276 --- /dev/null +++ b/test/configCases/asset-modules/input-data-url/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + mimetype: "image/svg+xml+external", + type: "asset/resource", + generator: { + filename: "[hash].svg" + } + } + ] + }, + target: "web" +}; diff --git a/test/configCases/asset-modules/keep-source-maps/asset.scss b/test/configCases/asset-modules/keep-source-maps/asset.scss new file mode 100644 index 00000000000..74e5c3fa9a9 --- /dev/null +++ b/test/configCases/asset-modules/keep-source-maps/asset.scss @@ -0,0 +1 @@ +body { background-color: red; } diff --git a/test/configCases/asset-modules/keep-source-maps/data/asset.css b/test/configCases/asset-modules/keep-source-maps/data/asset.css new file mode 100644 index 00000000000..26d7f9d5a51 --- /dev/null +++ b/test/configCases/asset-modules/keep-source-maps/data/asset.css @@ -0,0 +1 @@ +body{background-color:red} diff --git a/test/configCases/asset-modules/keep-source-maps/data/asset.css.map b/test/configCases/asset-modules/keep-source-maps/data/asset.css.map new file mode 100644 index 00000000000..7555b6230b6 --- /dev/null +++ b/test/configCases/asset-modules/keep-source-maps/data/asset.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["asset.scss", "data:;charset=utf-8,@import%20%22base%22;%0A%0Aa%20%7B%0A%20%20color:%20red;%0A%7D%0A", "http://example.com/index.js.map", "https://example.com/index.js.map"],"names":[],"mappings":"AAAA","file":"asset.css"} diff --git a/test/configCases/asset-modules/keep-source-maps/index.js b/test/configCases/asset-modules/keep-source-maps/index.js new file mode 100644 index 00000000000..9d16831156b --- /dev/null +++ b/test/configCases/asset-modules/keep-source-maps/index.js @@ -0,0 +1,17 @@ +it("should write asset file to output directory", function() { + const fs = require("fs"); + const path = require("path"); + const source = fs.readFileSync(path.join(__dirname, "asset.css"), "utf-8"); + expect(source).toMatch("/*# sourceMappingURL=asset.css.map*/"); +}); + +it("should write sourcemap file relative to fileContext", function() { + const fs = require("fs"); + const path = require("path"); + expect(fs.existsSync(path.join(__dirname, "asset.css.map"))).toBe(true); + const source = JSON.parse(fs.readFileSync(path.join(__dirname, "asset.css.map"), "utf-8")); + expect(source.sources[0]).toBe("webpack:///asset.scss"); + expect(source.sources[1]).toBe("data:;charset=utf-8,@import%20%22base%22;%0A%0Aa%20%7B%0A%20%20color:%20red;%0A%7D%0A"); + expect(source.sources[2]).toBe("http://example.com/index.js.map"); + expect(source.sources[3]).toBe('https://example.com/index.js.map'); +}); diff --git a/test/configCases/asset-modules/keep-source-maps/loader.js b/test/configCases/asset-modules/keep-source-maps/loader.js new file mode 100644 index 00000000000..372bf5cf22f --- /dev/null +++ b/test/configCases/asset-modules/keep-source-maps/loader.js @@ -0,0 +1,11 @@ +const fs = require("fs"); +const path = require("path"); + +/** @type {import("../../../../").LoaderDefinition<{ f(): any }>} */ +module.exports = function(_) { + // return the would-be output from SASS without needing the compiler as a dependency + const transformed = fs.readFileSync(path.join(__dirname, "data/asset.css"), { encoding: "utf8" }); + const sourceMap = fs.readFileSync(path.join(__dirname, "data/asset.css.map"), { encoding: "utf8" }); + + this.callback(null, transformed, JSON.parse(sourceMap)); +} diff --git a/test/configCases/asset-modules/keep-source-maps/webpack.config.js b/test/configCases/asset-modules/keep-source-maps/webpack.config.js new file mode 100644 index 00000000000..a162586feec --- /dev/null +++ b/test/configCases/asset-modules/keep-source-maps/webpack.config.js @@ -0,0 +1,36 @@ +"use strict"; + +/** @typedef {import("../../../../").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + devtool: "source-map", + entry: { + bundle0: ["./index.js"], + asset: ["./asset.scss"] + }, + output: { + filename: "[name].js", + assetModuleFilename: "[name][ext]" + }, + module: { + rules: [ + { + test: /\.scss$/i, + type: "asset/resource", + /** @type {GeneratorOptionsByModuleTypeKnown['asset/resource']} */ + generator: { + binary: false, + filename: (pathInfo) => + /** @type {string} */ + (pathInfo.filename).replace(/\.scss/gi, ".css") + }, + use: ["./loader.js"] + } + ] + } +}; diff --git a/test/configCases/asset-modules/only-entry/entry.css b/test/configCases/asset-modules/only-entry/entry.css new file mode 100644 index 00000000000..72dc1bf90b9 --- /dev/null +++ b/test/configCases/asset-modules/only-entry/entry.css @@ -0,0 +1,3 @@ +.class { + background: #000; +} diff --git a/test/configCases/asset-modules/only-entry/entry.js b/test/configCases/asset-modules/only-entry/entry.js new file mode 100644 index 00000000000..ecd447f8ad4 --- /dev/null +++ b/test/configCases/asset-modules/only-entry/entry.js @@ -0,0 +1,5 @@ +function test() { + run(); +} + +test(); diff --git a/test/configCases/asset-modules/only-entry/test.config.js b/test/configCases/asset-modules/only-entry/test.config.js new file mode 100644 index 00000000000..6f661b3d1eb --- /dev/null +++ b/test/configCases/asset-modules/only-entry/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["test.js"]; + } +}; diff --git a/test/configCases/asset-modules/only-entry/test.js b/test/configCases/asset-modules/only-entry/test.js new file mode 100644 index 00000000000..3a3be63d22b --- /dev/null +++ b/test/configCases/asset-modules/only-entry/test.js @@ -0,0 +1,96 @@ +it("should work", () => { + const stats = __STATS__.children[__STATS_I__]; + + const test = stats.assets.find( + a => a.name === "test.js" + ); + expect(Boolean(test)).toBe(true); + + const assetEntry = stats.assets.find( + a => a.info.sourceFilename === "../_images/file.png" + ); + expect(Boolean(assetEntry)).toBe(true); + + switch (__STATS_I__) { + case 0: { + expect(stats.assets.length).toBe(2); + break; + } + case 1: { + expect(stats.assets.length).toBe(3); + + const jsEntry = stats.assets.find( + a => a.name.endsWith("js-entry.js") + ); + expect(Boolean(jsEntry)).toBe(true); + break; + } + case 2: { + expect(stats.assets.length).toBe(3); + + const cssEntryInJs = stats.assets.find( + a => a.name.endsWith("css-entry.js") + ); + expect(Boolean(cssEntryInJs)).toBe(false); + + const cssEntry = stats.assets.find( + a => a.name.endsWith("css-entry.css") + ); + expect(Boolean(cssEntry)).toBe(true); + break; + } + case 3: { + expect(stats.assets.length).toBe(4); + + const jsEntry = stats.assets.find( + a => a.name.endsWith("js-entry.js") + ); + expect(Boolean(jsEntry)).toBe(true); + + const cssEntryInJs = stats.assets.find( + a => a.name.endsWith("css-entry.js") + ); + expect(Boolean(cssEntryInJs)).toBe(false); + + const cssEntry = stats.assets.find( + a => a.name.endsWith("css-entry.css") + ); + expect(Boolean(cssEntry)).toBe(true); + break; + } + case 4: { + expect(stats.assets.length).toBe(3); + + const jsEntry = stats.assets.find( + a => a.name.endsWith("js-entry.js") + ); + expect(Boolean(jsEntry)).toBe(true); + + const cssEntryInJs = stats.assets.find( + a => a.name.endsWith("css-entry.js") + ); + expect(Boolean(cssEntryInJs)).toBe(false); + break; + } + case 5: { + expect(stats.assets.length).toBe(3); + + const jsEntry = stats.assets.find( + a => a.name.endsWith("mixed-entry.js") + ); + expect(Boolean(jsEntry)).toBe(true); + + break; + } + case 6: { + expect(stats.assets.length).toBe(3); + + const jsEntry = stats.assets.find( + a => a.name.endsWith("mixed-entry.js") + ); + expect(Boolean(jsEntry)).toBe(true); + + break; + } + } +}); diff --git a/test/configCases/asset-modules/only-entry/webpack.config.js b/test/configCases/asset-modules/only-entry/webpack.config.js new file mode 100644 index 00000000000..dbf2983cf44 --- /dev/null +++ b/test/configCases/asset-modules/only-entry/webpack.config.js @@ -0,0 +1,124 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +/** @typedef {import("../../../../").Configuration} Configuration */ + +/** @type {(i: number, options: Partial) => Configuration} */ +const common = (i, options) => ({ + target: "web", + output: { + filename: `${i}/[name].js`, + chunkFilename: `${i}/[name].js`, + cssFilename: `${i}/[name].css`, + cssChunkFilename: `${i}/[name].css`, + assetModuleFilename: `${i}/[name][ext][query]` + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + } + ] + }, + experiments: { + css: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const data = fs.readFileSync( + path.resolve(__dirname, "./test.js") + ); + + compilation.emitAsset( + "test.js", + new webpack.sources.RawSource(data) + ); + } + ); + }); + } + } + ], + ...options +}); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + common(0, { + entry: "../_images/file.png" + }), + common(1, { + entry: { + "asset-entry": { + import: "../_images/file.png" + }, + "js-entry": { + import: "./entry.js" + } + } + }), + common(2, { + entry: { + "asset-entry": { + import: "../_images/file.png" + }, + "css-entry": { + import: "./entry.css" + } + } + }), + common(3, { + entry: { + "asset-entry": { + import: "../_images/file.png" + }, + "js-entry": { + import: "./entry.js" + }, + "css-entry": { + import: "./entry.css" + } + } + }), + common(4, { + target: "node", + entry: { + "asset-entry": { + import: "../_images/file.png" + }, + "js-entry": { + import: "./entry.js" + }, + "css-entry": { + import: "./entry.css" + } + } + }), + common(5, { + entry: { + "mixed-entry": { + import: ["./entry.js", "../_images/file.png"] + } + } + }), + common(6, { + entry: { + "mixed-entry": { + import: ["../_images/file.png", "./entry.js"] + } + } + }) +]; diff --git a/test/configCases/asset-modules/only-hash-url/file.png b/test/configCases/asset-modules/only-hash-url/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/asset-modules/only-hash-url/file.png differ diff --git a/test/configCases/asset-modules/only-hash-url/index.js b/test/configCases/asset-modules/only-hash-url/index.js new file mode 100644 index 00000000000..5814f924032 --- /dev/null +++ b/test/configCases/asset-modules/only-hash-url/index.js @@ -0,0 +1,10 @@ +import img from "#internal"; + +it("should allow to use an URL started with '#'", () => { + const url = new URL("#test", import.meta.url); + expect(url.hash).toBe("#test"); +}); + +it("should allow to use an URL started with '#'", () => { + expect(img).toEndWith("path/images/file.png"); +}); diff --git a/test/configCases/asset-modules/only-hash-url/package.json b/test/configCases/asset-modules/only-hash-url/package.json new file mode 100644 index 00000000000..0f6e3543a3e --- /dev/null +++ b/test/configCases/asset-modules/only-hash-url/package.json @@ -0,0 +1,7 @@ +{ + "name": "pkg", + "exports": "./pkg.mjs", + "imports": { + "#internal": "./file.png" + } +} diff --git a/test/configCases/asset-modules/only-hash-url/webpack.config.js b/test/configCases/asset-modules/only-hash-url/webpack.config.js new file mode 100644 index 00000000000..5b29ebfde1a --- /dev/null +++ b/test/configCases/asset-modules/only-hash-url/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "images/file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset/resource" + } + ] + }, + target: "web" +}; diff --git a/test/configCases/asset-modules/opus/errors.js b/test/configCases/asset-modules/opus/errors.js new file mode 100644 index 00000000000..b1adeee4fbc --- /dev/null +++ b/test/configCases/asset-modules/opus/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/DataUrl can't be generated automatically/]]; diff --git a/test/configCases/asset-modules/opus/file.opuuus b/test/configCases/asset-modules/opus/file.opuuus new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/asset-modules/opus/index.js b/test/configCases/asset-modules/opus/index.js new file mode 100644 index 00000000000..ad63f39a0b1 --- /dev/null +++ b/test/configCases/asset-modules/opus/index.js @@ -0,0 +1,3 @@ +it("should throw an error for unknown mimetype", () => { + if (Math.random() < 0) require("./file.opuuus"); +}); diff --git a/test/configCases/asset-modules/opus/webpack.config.js b/test/configCases/asset-modules/opus/webpack.config.js new file mode 100644 index 00000000000..7542f3b89f1 --- /dev/null +++ b/test/configCases/asset-modules/opus/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.opuuus$/, + type: "asset" + } + ] + } +}; diff --git a/test/configCases/asset-modules/overridePath/index.js b/test/configCases/asset-modules/overridePath/index.js new file mode 100644 index 00000000000..faf4195c741 --- /dev/null +++ b/test/configCases/asset-modules/overridePath/index.js @@ -0,0 +1,7 @@ +import url from "../_images/file.png"; +import index from "../_static/file.html"; + +it("should output asset with path", () => { + expect(url).toEqual("images/file.png"); + expect(index).toEqual("static/index.html"); +}); diff --git a/test/configCases/asset-modules/overridePath/webpack.config.js b/test/configCases/asset-modules/overridePath/webpack.config.js new file mode 100644 index 00000000000..35cd50da71a --- /dev/null +++ b/test/configCases/asset-modules/overridePath/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "images/file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + }, + { + test: /\.html$/, + type: "asset/resource", + generator: { + filename: "static/index.html" + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/path/index.js b/test/configCases/asset-modules/path/index.js new file mode 100644 index 00000000000..d3f382dde8d --- /dev/null +++ b/test/configCases/asset-modules/path/index.js @@ -0,0 +1,5 @@ +import url from "../_images/file.png"; + +it("should output asset with path", () => { + expect(url).toEqual("images/file.png"); +}); diff --git a/test/configCases/asset-modules/path/webpack.config.js b/test/configCases/asset-modules/path/webpack.config.js new file mode 100644 index 00000000000..20e3170cb1e --- /dev/null +++ b/test/configCases/asset-modules/path/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "images/file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + } + ] + } +}; diff --git a/test/configCases/asset-modules/publicPath/index.js b/test/configCases/asset-modules/publicPath/index.js new file mode 100644 index 00000000000..ebd29d8a2fb --- /dev/null +++ b/test/configCases/asset-modules/publicPath/index.js @@ -0,0 +1,5 @@ +import url from "../_images/file.png"; + +it("should import asset with correct publicPath", () => { + expect(url).toEqual("assets/file.png"); +}); diff --git a/test/configCases/asset-modules/publicPath/webpack.config.js b/test/configCases/asset-modules/publicPath/webpack.config.js new file mode 100644 index 00000000000..501b53db6c3 --- /dev/null +++ b/test/configCases/asset-modules/publicPath/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + publicPath: "assets/", + assetModuleFilename: "file[ext]", + environment: { + templateLiteral: true + } + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset" + } + ] + } +}; diff --git a/test/configCases/asset-modules/query-and-custom-condition/index.js b/test/configCases/asset-modules/query-and-custom-condition/index.js new file mode 100644 index 00000000000..d830a1f8144 --- /dev/null +++ b/test/configCases/asset-modules/query-and-custom-condition/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png?foo=bar"; +import svg from "../_images/file.svg"; +import jpg from "../_images/file.jpg?foo=bar#hash"; + +it("should output various asset types", () => { + expect(png).toContain("data:image/png;base64,"); + expect(svg).toMatch(/^[\da-f]{20}\.svg$/); + expect(jpg).toContain("data:image/jpeg;base64,"); +}); diff --git a/test/configCases/asset-modules/query-and-custom-condition/webpack.config.js b/test/configCases/asset-modules/query-and-custom-condition/webpack.config.js new file mode 100644 index 00000000000..8a24abf1a0e --- /dev/null +++ b/test/configCases/asset-modules/query-and-custom-condition/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @typedef {import("../../../../").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.(png|svg|jpg)$/, + type: "asset", + /** @type {ParserOptionsByModuleTypeKnown['asset']} */ + parser: { + dataUrlCondition: (source, { filename }) => + filename.includes("?foo=bar") + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/query-and-custom-encoder/index.js b/test/configCases/asset-modules/query-and-custom-encoder/index.js new file mode 100644 index 00000000000..5b1059bbb31 --- /dev/null +++ b/test/configCases/asset-modules/query-and-custom-encoder/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg?foo=bar"; +import jpg from "../_images/file.jpg"; + +it("should output various asset types", () => { + expect(png).toMatch(/^data:image\/png;base64,[0-9a-zA-Z+/]+=*$/); + expect(svg).toMatch(/^data:image\/svg\+xml,/); + expect(jpg).toMatch(/^data:image\/jpeg;base64,[0-9a-zA-Z+/]+=*$/); +}); diff --git a/test/configCases/asset-modules/query-and-custom-encoder/webpack.config.js b/test/configCases/asset-modules/query-and-custom-encoder/webpack.config.js new file mode 100644 index 00000000000..8a62029612d --- /dev/null +++ b/test/configCases/asset-modules/query-and-custom-encoder/webpack.config.js @@ -0,0 +1,39 @@ +"use strict"; + +const mimeTypes = require("mime-types"); +const svgToMiniDataURI = require("mini-svg-data-uri"); + +/** @typedef {import("../../../../").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.(png|svg|jpg)$/, + type: "asset/inline", + /** @type {GeneratorOptionsByModuleTypeKnown["asset/inline"]} */ + generator: { + dataUrl: (source, { filename, module }) => { + if (filename.endsWith("?foo=bar")) { + if (typeof source !== "string") { + source = source.toString(); + } + + return svgToMiniDataURI(source); + } + + const mimeType = mimeTypes.lookup( + /** @type {string} */ + (module.nameForCondition()) + ); + const encodedContent = source.toString("base64"); + + return `data:${mimeType};base64,${encodedContent}`; + } + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/query-and-hash/index.js b/test/configCases/asset-modules/query-and-hash/index.js new file mode 100644 index 00000000000..2b1cfd6b666 --- /dev/null +++ b/test/configCases/asset-modules/query-and-hash/index.js @@ -0,0 +1,15 @@ +import png from "../_images/file.png?foo=bar"; +import svg from "../_images/file.svg?"; +import jpg from "../_images/file.jpg?foo=bar#hash"; +import copy from "../_images/file_copy.png#hash"; +import fs from "fs"; + +it("should output various asset types", () => { + expect(png).toMatch(/^[\da-f]{20}\.png\?foo=bar$/); + expect(svg).toMatch(/^[\da-f]{20}\.svg\?$/); + expect(jpg).toMatch(/^[\da-f]{20}\.jpg\?foo=bar#hash$/); + expect(copy).toMatch(/^[\da-f]{20}\.png#hash$/); + + const content = fs.readdirSync(__STATS__.outputPath); + expect(content.filter((item) => /\.(jpg|png|svg)$/.test(item)).length).toBe(3); +}); diff --git a/test/configCases/asset-modules/query-and-hash/webpack.config.js b/test/configCases/asset-modules/query-and-hash/webpack.config.js new file mode 100644 index 00000000000..ab476db7e0d --- /dev/null +++ b/test/configCases/asset-modules/query-and-hash/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + environment: { + templateLiteral: false + } + }, + module: { + rules: [ + { + test: /\.(png|svg|jpg)$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/asset-modules/real-content-hash/index.js b/test/configCases/asset-modules/real-content-hash/index.js new file mode 100644 index 00000000000..8fe6312b369 --- /dev/null +++ b/test/configCases/asset-modules/real-content-hash/index.js @@ -0,0 +1,6 @@ +import a from "../_images/file.png"; +import b from "../_images/file_copy.png"; + +it("should use a real content hash for assets", () => { + expect(a).toBe(b); +}); diff --git a/test/configCases/asset-modules/real-content-hash/webpack.config.js b/test/configCases/asset-modules/real-content-hash/webpack.config.js new file mode 100644 index 00000000000..12cffe6a2c4 --- /dev/null +++ b/test/configCases/asset-modules/real-content-hash/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + publicPath: "assets/", + assetModuleFilename: "file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/asset-modules/resource-from-data-uri/index.js b/test/configCases/asset-modules/resource-from-data-uri/index.js new file mode 100644 index 00000000000..57cb7ada446 --- /dev/null +++ b/test/configCases/asset-modules/resource-from-data-uri/index.js @@ -0,0 +1,5 @@ +import asset from "data:image/svg+xml;utf8,icon-square-small" + +it("should compile with correct filename", () => { + expect(asset).toMatch(/public\/media\/[0-9a-zA-Z]{20}\.[0-9a-zA-Z]{8}\.svg/); +}); diff --git a/test/configCases/asset-modules/resource-from-data-uri/webpack.config.js b/test/configCases/asset-modules/resource-from-data-uri/webpack.config.js new file mode 100644 index 00000000000..c8018c1fe6a --- /dev/null +++ b/test/configCases/asset-modules/resource-from-data-uri/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + assetModuleFilename: "media/[name].[contenthash:8][ext]", + publicPath: "public/" + }, + module: { + rules: [ + { + mimetype: "image/svg+xml", + type: "asset/resource" + } + ] + }, + target: "web" +}; diff --git a/test/configCases/asset-modules/rule-generator-outputPath/index.js b/test/configCases/asset-modules/rule-generator-outputPath/index.js new file mode 100644 index 00000000000..2995c8b6d23 --- /dev/null +++ b/test/configCases/asset-modules/rule-generator-outputPath/index.js @@ -0,0 +1,10 @@ +import url from "../_images/file.png"; +import fs from "fs"; +import path from "path"; + +it("should emit asset with module.generator.asset.outputPath", () => { + expect(url).toEqual("https://cdn/assets/file.png"); + + const emitPath = path.join(__STATS__.outputPath, "cdn-assets/file.png") + expect(fs.existsSync(emitPath)).toBe(true); +}); diff --git a/test/configCases/asset-modules/rule-generator-outputPath/webpack.config.js b/test/configCases/asset-modules/rule-generator-outputPath/webpack.config.js new file mode 100644 index 00000000000..3ee6d41cf01 --- /dev/null +++ b/test/configCases/asset-modules/rule-generator-outputPath/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset/resource", + generator: { + publicPath: "https://cdn/assets/", + outputPath: "cdn-assets/" + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/rule-generator-publicPath-override/index.js b/test/configCases/asset-modules/rule-generator-publicPath-override/index.js new file mode 100644 index 00000000000..72297579ded --- /dev/null +++ b/test/configCases/asset-modules/rule-generator-publicPath-override/index.js @@ -0,0 +1,5 @@ +import url from "../_images/file.png"; + +it("should import asset with empty string rule.generator.publicPath", () => { + expect(url).toEqual("file.png"); +}); diff --git a/test/configCases/asset-modules/rule-generator-publicPath-override/webpack.config.js b/test/configCases/asset-modules/rule-generator-publicPath-override/webpack.config.js new file mode 100644 index 00000000000..a5ff73672f2 --- /dev/null +++ b/test/configCases/asset-modules/rule-generator-publicPath-override/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "file[ext]", + publicPath: "assets/" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset", + generator: { + publicPath: "" + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/rule-generator-publicPath/index.js b/test/configCases/asset-modules/rule-generator-publicPath/index.js new file mode 100644 index 00000000000..2a95a2fc5b0 --- /dev/null +++ b/test/configCases/asset-modules/rule-generator-publicPath/index.js @@ -0,0 +1,5 @@ +import url from "../_images/file.png"; + +it("should import asset with rule.generator.publicPath", () => { + expect(url).toEqual("assets/file.png"); +}); diff --git a/test/configCases/asset-modules/rule-generator-publicPath/webpack.config.js b/test/configCases/asset-modules/rule-generator-publicPath/webpack.config.js new file mode 100644 index 00000000000..e411d767cc7 --- /dev/null +++ b/test/configCases/asset-modules/rule-generator-publicPath/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "file[ext]" + }, + module: { + rules: [ + { + test: /\.png$/, + type: "asset", + generator: { + publicPath: () => "assets/" + } + } + ] + } +}; diff --git a/test/configCases/asset-modules/source/index.js b/test/configCases/asset-modules/source/index.js new file mode 100644 index 00000000000..f5716825933 --- /dev/null +++ b/test/configCases/asset-modules/source/index.js @@ -0,0 +1,5 @@ +import svg from "../_images/file.svg"; + +it("should receive asset source", () => { + expect(svg).toMatch(/^\s*$/); +}); diff --git a/test/configCases/asset-modules/source/webpack.config.js b/test/configCases/asset-modules/source/webpack.config.js new file mode 100644 index 00000000000..dc0802bbc81 --- /dev/null +++ b/test/configCases/asset-modules/source/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.svg$/, + type: "asset/source" + } + ] + } +}; diff --git a/test/configCases/asset-modules/type-text-js/fixture.js b/test/configCases/asset-modules/type-text-js/fixture.js new file mode 100644 index 00000000000..ba5a979582d --- /dev/null +++ b/test/configCases/asset-modules/type-text-js/fixture.js @@ -0,0 +1,4 @@ +// This file contains invalid JavaScript on purpose. +// When imported with { type: "text" }, it should be treated as a string, not parsed as JS. + +invalid { javascript diff --git a/test/configCases/asset-modules/type-text-js/index.js b/test/configCases/asset-modules/type-text-js/index.js new file mode 100644 index 00000000000..4dda0c57e57 --- /dev/null +++ b/test/configCases/asset-modules/type-text-js/index.js @@ -0,0 +1,6 @@ +import value from "./fixture.js" with { type: "text" }; + +it("should import .js file as text string when using with { type: 'text' }", () => { + expect(typeof value).toBe("string"); + expect(value).toContain("invalid { javascript"); +}); diff --git a/test/configCases/asset-modules/type-text-js/webpack.config.js b/test/configCases/asset-modules/type-text-js/webpack.config.js new file mode 100644 index 00000000000..27313115dcd --- /dev/null +++ b/test/configCases/asset-modules/type-text-js/webpack.config.js @@ -0,0 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = {}; diff --git a/test/configCases/asset-modules/type-text/index.js b/test/configCases/asset-modules/type-text/index.js new file mode 100644 index 00000000000..2de16066ad3 --- /dev/null +++ b/test/configCases/asset-modules/type-text/index.js @@ -0,0 +1,5 @@ +import svg from "../_images/file.svg" with { type: "text" }; + +it("should receive asset source", () => { + expect(svg).toMatch(/^\s*$/); +}); diff --git a/test/configCases/asset-modules/type-text/webpack.config.js b/test/configCases/asset-modules/type-text/webpack.config.js new file mode 100644 index 00000000000..27313115dcd --- /dev/null +++ b/test/configCases/asset-modules/type-text/webpack.config.js @@ -0,0 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = {}; diff --git a/test/configCases/asset-modules/types/index.js b/test/configCases/asset-modules/types/index.js new file mode 100644 index 00000000000..b4d0226b5e0 --- /dev/null +++ b/test/configCases/asset-modules/types/index.js @@ -0,0 +1,9 @@ +import png from "../_images/file.png"; +import svg from "../_images/file.svg"; +import jpg from "../_images/file.jpg"; + +it("should output various asset types", () => { + expect(png).toMatch(/^[\da-f]{20}\.png$/); + expect(svg).toMatch(/^[\da-f]{20}\.svg$/); + expect(jpg).toMatch(/^[\da-f]{20}\.jpg$/); +}); diff --git a/test/configCases/asset-modules/types/webpack.config.js b/test/configCases/asset-modules/types/webpack.config.js new file mode 100644 index 00000000000..4d6bce57c4c --- /dev/null +++ b/test/configCases/asset-modules/types/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /\.(png|svg)$/, + type: "asset/resource" + }, + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/asset-modules/unsafe-cache-13827/index.js b/test/configCases/asset-modules/unsafe-cache-13827/index.js new file mode 100644 index 00000000000..1e8a11e39c7 --- /dev/null +++ b/test/configCases/asset-modules/unsafe-cache-13827/index.js @@ -0,0 +1,5 @@ +import url from "package"; + +it("should create a data url", () => { + expect(url.protocol).toBe("data:"); +}); diff --git a/test/configCases/asset-modules/unsafe-cache-13827/node_modules/package/file.svg b/test/configCases/asset-modules/unsafe-cache-13827/node_modules/package/file.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/asset-modules/unsafe-cache-13827/node_modules/package/file.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/asset-modules/unsafe-cache-13827/node_modules/package/index.js b/test/configCases/asset-modules/unsafe-cache-13827/node_modules/package/index.js new file mode 100644 index 00000000000..b8d757bda87 --- /dev/null +++ b/test/configCases/asset-modules/unsafe-cache-13827/node_modules/package/index.js @@ -0,0 +1 @@ +export default new URL("file.svg", import.meta.url); diff --git a/test/configCases/asset-modules/unsafe-cache-13827/webpack.config.js b/test/configCases/asset-modules/unsafe-cache-13827/webpack.config.js new file mode 100644 index 00000000000..c00ba591413 --- /dev/null +++ b/test/configCases/asset-modules/unsafe-cache-13827/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + dependency: "url", + type: "asset" + } + ] + } +}; diff --git a/test/configCases/asset-modules/url-relative/index.css b/test/configCases/asset-modules/url-relative/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/url-relative/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/url-relative/index.js b/test/configCases/asset-modules/url-relative/index.js new file mode 100644 index 00000000000..aa61627b642 --- /dev/null +++ b/test/configCases/asset-modules/url-relative/index.js @@ -0,0 +1,20 @@ +it("should handle import.meta.url in URL()", () => { + const url = new URL("./index.css?query=yes#fragment", import.meta.url); + + expect(url.href).toBe("public/index.css?query=yes#fragment"); + expect(url.origin).toBe(""); + expect(url.protocol).toBe(""); + expect(url.username).toBe(""); + expect(url.password).toBe(""); + expect(url.host).toBe(""); + expect(url.hostname).toBe(""); + expect(url.port).toBe(""); + expect(url.pathname).toBe("public/index.css"); + expect(url.search).toBe("?query=yes"); + expect(url.searchParams.get("query")).toBe("yes"); + expect(url.hash).toBe("#fragment"); + expect(url + "").toBe("public/index.css?query=yes#fragment"); + expect(url.toString()).toBe("public/index.css?query=yes#fragment"); + expect(JSON.stringify(url)).toBe('"public/index.css?query=yes#fragment"'); + expect(url instanceof URL).toBe(true); +}); diff --git a/test/configCases/asset-modules/url-relative/webpack.config.js b/test/configCases/asset-modules/url-relative/webpack.config.js new file mode 100644 index 00000000000..b4db9ee19b2 --- /dev/null +++ b/test/configCases/asset-modules/url-relative/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + output: { + assetModuleFilename: "[name][ext][query][fragment]", + publicPath: "public/" + }, + module: { + parser: { + javascript: { + url: "relative" + } + } + } +}; diff --git a/test/configCases/asset-modules/url-target-node1/index.css b/test/configCases/asset-modules/url-target-node1/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node1/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/url-target-node1/index.js b/test/configCases/asset-modules/url-target-node1/index.js new file mode 100644 index 00000000000..8f761ae6778 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node1/index.js @@ -0,0 +1,7 @@ +const currentDir = require("url").pathToFileURL(__dirname); + +it("should handle import.meta.url in URL()", () => { + const {href} = new URL("./index.css", import.meta.url); + + expect(href).toBe(currentDir + "/public/index.css"); +}); diff --git a/test/configCases/asset-modules/url-target-node1/webpack.config.js b/test/configCases/asset-modules/url-target-node1/webpack.config.js new file mode 100644 index 00000000000..c95e9fcd9cc --- /dev/null +++ b/test/configCases/asset-modules/url-target-node1/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "node", + devtool: false, + output: { + assetModuleFilename: "[name][ext]", + publicPath: "public/" + }, + module: { + rules: [ + { + test: /\.css$/, + dependency: ["esm", "commonjs"], + loader: "url-loader" + } + ] + } +}; diff --git a/test/configCases/asset-modules/url-target-node2/index.css b/test/configCases/asset-modules/url-target-node2/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node2/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/url-target-node2/index.js b/test/configCases/asset-modules/url-target-node2/index.js new file mode 100644 index 00000000000..bdb9e62f7c0 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node2/index.js @@ -0,0 +1,7 @@ +const currentDir = require("url").pathToFileURL(__dirname); + +it("should handle import.meta.url in URL()", () => { + const {href} = new URL("./index.css", import.meta.url); + + expect(href).toBe(currentDir + "/index.css"); +}); diff --git a/test/configCases/asset-modules/url-target-node2/webpack.config.js b/test/configCases/asset-modules/url-target-node2/webpack.config.js new file mode 100644 index 00000000000..260476951dc --- /dev/null +++ b/test/configCases/asset-modules/url-target-node2/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "node", + devtool: false, + output: { + assetModuleFilename: "[name][ext]" + } +}; diff --git a/test/configCases/asset-modules/url-target-node3/index.css b/test/configCases/asset-modules/url-target-node3/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node3/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/url-target-node3/index.js b/test/configCases/asset-modules/url-target-node3/index.js new file mode 100644 index 00000000000..da26b13c3c2 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node3/index.js @@ -0,0 +1,9 @@ +it("should handle import.meta.url in URL()", () => { + ((MyURL, URL) => { + const { href } = new MyURL("./index.css", import.meta.url); + + expect(href).toBe("https://example.com/index.css"); + })(URL, function () { + throw new Error("should not be called"); + }); +}); diff --git a/test/configCases/asset-modules/url-target-node3/webpack.config.js b/test/configCases/asset-modules/url-target-node3/webpack.config.js new file mode 100644 index 00000000000..9224e7257a2 --- /dev/null +++ b/test/configCases/asset-modules/url-target-node3/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "node", + devtool: false, + output: { + assetModuleFilename: "[name][ext]", + publicPath: "https://example.com/" + } +}; diff --git a/test/configCases/asset-modules/url-target-web1/index.css b/test/configCases/asset-modules/url-target-web1/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/url-target-web1/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/url-target-web1/index.js b/test/configCases/asset-modules/url-target-web1/index.js new file mode 100644 index 00000000000..5284c3ba8a8 --- /dev/null +++ b/test/configCases/asset-modules/url-target-web1/index.js @@ -0,0 +1,5 @@ +it("should handle import.meta.url in URL()", () => { + const {href} = new URL("./index.css", import.meta.url); + + expect(href).toBe("https://test.cases/path/index.css"); +}); diff --git a/test/configCases/asset-modules/url-target-web1/webpack.config.js b/test/configCases/asset-modules/url-target-web1/webpack.config.js new file mode 100644 index 00000000000..5610cb056cb --- /dev/null +++ b/test/configCases/asset-modules/url-target-web1/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "web", + devtool: false, + output: { + assetModuleFilename: "[name][ext]" + }, + module: { + rules: [ + { + test: /\.css$/, + dependency: "url", + loader: "url-loader" + } + ] + } +}; diff --git a/test/configCases/asset-modules/url-target-web2/a.js b/test/configCases/asset-modules/url-target-web2/a.js new file mode 100644 index 00000000000..296d5492b00 --- /dev/null +++ b/test/configCases/asset-modules/url-target-web2/a.js @@ -0,0 +1 @@ +console.log(1); diff --git a/test/configCases/asset-modules/url-target-web2/index.js b/test/configCases/asset-modules/url-target-web2/index.js new file mode 100644 index 00000000000..62462bee06a --- /dev/null +++ b/test/configCases/asset-modules/url-target-web2/index.js @@ -0,0 +1,11 @@ +it("should handle import.meta.url in URL()", () => { + const { href } = new URL("./a.js", import.meta.url); + + expect(href).toBe("https://test.cases/path2/a.js"); +}); + +it("should handle relative paths in URL()", () => { + const { href } = new URL("a.js", import.meta.url); + + expect(href).toBe("https://test.cases/path2/a.js"); +}); diff --git a/test/configCases/asset-modules/url-target-web2/webpack.config.js b/test/configCases/asset-modules/url-target-web2/webpack.config.js new file mode 100644 index 00000000000..2d4bf87faa4 --- /dev/null +++ b/test/configCases/asset-modules/url-target-web2/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "web", + devtool: false, + output: { + assetModuleFilename: "[name][ext]", + publicPath: "/path2/" + } +}; diff --git a/test/configCases/asset-modules/url-target-webworker1/index.js b/test/configCases/asset-modules/url-target-webworker1/index.js new file mode 100644 index 00000000000..20da64467d5 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker1/index.js @@ -0,0 +1,5 @@ +it("should handle import.meta.url in URL()", () => { + const { href } = new URL("./inner/a.js", import.meta.url); + + expect(href).toBe("https://test.cases/custom/inner/a.js"); +}); diff --git a/test/configCases/asset-modules/url-target-webworker1/inner/a.js b/test/configCases/asset-modules/url-target-webworker1/inner/a.js new file mode 100644 index 00000000000..296d5492b00 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker1/inner/a.js @@ -0,0 +1 @@ +console.log(1); diff --git a/test/configCases/asset-modules/url-target-webworker1/test.config.js b/test/configCases/asset-modules/url-target-webworker1/test.config.js new file mode 100644 index 00000000000..f680194a909 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker1/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + scope.self.location = "https://test.cases/custom/deep/path/main.js"; + }, + findBundle() { + return "./deep/path/main.js"; + } +}; diff --git a/test/configCases/asset-modules/url-target-webworker1/webpack.config.js b/test/configCases/asset-modules/url-target-webworker1/webpack.config.js new file mode 100644 index 00000000000..8c685029852 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker1/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "webworker", + devtool: false, + output: { + filename: "deep/path/[name].js", + assetModuleFilename: "[path][name][ext]", + publicPath: "" + } +}; diff --git a/test/configCases/asset-modules/url-target-webworker2/index.css b/test/configCases/asset-modules/url-target-webworker2/index.css new file mode 100644 index 00000000000..077f6dd7c01 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker2/index.css @@ -0,0 +1 @@ +a {} diff --git a/test/configCases/asset-modules/url-target-webworker2/index.js b/test/configCases/asset-modules/url-target-webworker2/index.js new file mode 100644 index 00000000000..ee80741fd51 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker2/index.js @@ -0,0 +1,5 @@ +it("should handle import.meta.url in URL()", () => { + const {href} = new URL("./index.css", import.meta.url); + + expect(href).toBe("https://test.cases/index.css"); +}); diff --git a/test/configCases/asset-modules/url-target-webworker2/webpack.config.js b/test/configCases/asset-modules/url-target-webworker2/webpack.config.js new file mode 100644 index 00000000000..b7fadb6b661 --- /dev/null +++ b/test/configCases/asset-modules/url-target-webworker2/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: "webworker", + devtool: false, + output: { + assetModuleFilename: "[name][ext]", + publicPath: "/" + } +}; diff --git a/test/configCases/asset-modules/webpack-ignore/file.css b/test/configCases/asset-modules/webpack-ignore/file.css new file mode 100644 index 00000000000..991912d894b --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/file.css @@ -0,0 +1 @@ +body { color: red; } diff --git a/test/configCases/asset-modules/webpack-ignore/file.html b/test/configCases/asset-modules/webpack-ignore/file.html new file mode 100644 index 00000000000..179f993315f --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/file.html @@ -0,0 +1 @@ +
test
diff --git a/test/configCases/asset-modules/webpack-ignore/file.js b/test/configCases/asset-modules/webpack-ignore/file.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/file.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/asset-modules/webpack-ignore/file.json b/test/configCases/asset-modules/webpack-ignore/file.json new file mode 100644 index 00000000000..c8c4105eb57 --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/file.json @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/test/configCases/asset-modules/webpack-ignore/file.text b/test/configCases/asset-modules/webpack-ignore/file.text new file mode 100644 index 00000000000..883efb6befc --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/file.text @@ -0,0 +1 @@ +a Ā 𐀀 文 🦄 Text \ No newline at end of file diff --git a/test/configCases/asset-modules/webpack-ignore/index.js b/test/configCases/asset-modules/webpack-ignore/index.js new file mode 100644 index 00000000000..d5195cce792 --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/index.js @@ -0,0 +1,28 @@ +it("should work", async () => { + const decoder = new TextDecoder("utf-8"); + + const textFile = (await import(/* webpackIgnore: true */ "./file.text", { with: { type: "bytes" } })).default; + const textFileContent = decoder.decode(textFile); + + expect(textFileContent.trim()).toBe("a Ā 𐀀 文 🦄 Text"); + + const jsonFile = (await import(/* webpackIgnore: true */ "./file.json", { with: { type: "bytes" } })).default; + const jsonFileContent = decoder.decode(jsonFile); + + expect(JSON.parse(jsonFileContent.trim())).toStrictEqual({ foo: "bar" }); + + const jsFile = (await import(/* webpackIgnore: true */ "./file.js", { with: { type: "bytes" } })).default; + const jsFileContent = decoder.decode(jsFile); + + expect(jsFileContent.trim()).toBe("export default \"test\";"); + + const cssFile = (await import(/* webpackIgnore: true */ "./file.css", { with: { type: "bytes" } })).default; + const cssFileContent = decoder.decode(cssFile); + + expect(cssFileContent.trim()).toBe("body { color: red; }"); + + const htmlFile = (await import(/* webpackIgnore: true */ "./file.html", { with: { type: "bytes" } })).default; + const htmlFileContent = decoder.decode(htmlFile); + + expect(htmlFileContent.trim()).toBe("
test
"); +}); diff --git a/test/configCases/asset-modules/webpack-ignore/test.filter.js b/test/configCases/asset-modules/webpack-ignore/test.filter.js new file mode 100644 index 00000000000..19e211dd788 --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsTypeBytes = require("../../../helpers/supportsTypeBytes"); + +module.exports = () => supportsTypeBytes(); diff --git a/test/configCases/asset-modules/webpack-ignore/webpack.config.js b/test/configCases/asset-modules/webpack-ignore/webpack.config.js new file mode 100644 index 00000000000..a66fe90716e --- /dev/null +++ b/test/configCases/asset-modules/webpack-ignore/webpack.config.js @@ -0,0 +1,61 @@ +"use strict"; + +const path = require("path"); + +/** @typedef {import("../../../../lib/util/fs").InputFileSystem} InputFileSystem */ +/** @typedef {import("../../../../lib/util/fs").ReadFileSync} ReadFileSync */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + experiments: { + outputModule: true + }, + output: { + module: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "TestCopyPlugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + if (!compiler.inputFileSystem) { + throw new Error("Expected `compiler.inputFileSystem`"); + } + + const files = [ + "file.text", + "file.json", + "file.js", + "file.css", + "file.html" + ]; + + for (const file of files) { + const testFile = path.resolve(__dirname, file); + const content = + /** @type {ReadFileSync} */ + ( + /** @type {InputFileSystem} */ (compiler.inputFileSystem) + .readFileSync + )(testFile); + + compilation.emitAsset( + file, + new compiler.webpack.sources.RawSource(content) + ); + } + } + ); + }); + } + } + ] +}; diff --git a/test/configCases/assets/asset-emitted/index.js b/test/configCases/assets/asset-emitted/index.js new file mode 100644 index 00000000000..9e1b6b1cd1b --- /dev/null +++ b/test/configCases/assets/asset-emitted/index.js @@ -0,0 +1 @@ +it("should run", () => import("./module")); diff --git a/test/configCases/assets/asset-emitted/module.js b/test/configCases/assets/asset-emitted/module.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/assets/asset-emitted/webpack.config.js b/test/configCases/assets/asset-emitted/webpack.config.js new file mode 100644 index 00000000000..0d60896cffd --- /dev/null +++ b/test/configCases/assets/asset-emitted/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +const Source = require("webpack-sources").Source; +const Compilation = require("../../../../").Compilation; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + (compiler) => { + /** @type {Record} */ + const files = {}; + compiler.hooks.assetEmitted.tap( + "Test", + (file, { content, source, outputPath, compilation, targetPath }) => { + expect(Buffer.isBuffer(content)).toBe(true); + expect(source).toBeInstanceOf(Source); + expect(typeof outputPath).toBe("string"); + expect(typeof targetPath).toBe("string"); + expect(compilation).toBeInstanceOf(Compilation); + files[file] = true; + } + ); + compiler.hooks.afterEmit.tap("Test", () => { + expect(files).toMatchInlineSnapshot(` + Object { + "93.bundle0.js": true, + "bundle0.js": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/assets/compression-webpack-plugin-issues-390/chunk.js b/test/configCases/assets/compression-webpack-plugin-issues-390/chunk.js new file mode 100644 index 00000000000..96f546e4243 --- /dev/null +++ b/test/configCases/assets/compression-webpack-plugin-issues-390/chunk.js @@ -0,0 +1,3 @@ +export default function add(a, b) { + return a + b; +} \ No newline at end of file diff --git a/test/configCases/assets/compression-webpack-plugin-issues-390/index.js b/test/configCases/assets/compression-webpack-plugin-issues-390/index.js new file mode 100644 index 00000000000..ed185279a82 --- /dev/null +++ b/test/configCases/assets/compression-webpack-plugin-issues-390/index.js @@ -0,0 +1,10 @@ +/**! Main */ + +it("should handle asset deletion correctly during compression", async () => { + const { default: add } = await import("./chunk.js"); + expect(add(1, 2)).toBe(3); +}); + +it("should not fail when accessing compressed assets", async () => { + await expect(import("./chunk.js")).resolves.toBeDefined(); +}); \ No newline at end of file diff --git a/test/configCases/assets/compression-webpack-plugin-issues-390/webpack.config.js b/test/configCases/assets/compression-webpack-plugin-issues-390/webpack.config.js new file mode 100644 index 00000000000..accc6662f75 --- /dev/null +++ b/test/configCases/assets/compression-webpack-plugin-issues-390/webpack.config.js @@ -0,0 +1,76 @@ +"use strict"; + +const { Compilation } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap( + "MockWebpackManifestPlugin", + (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "MockWebpackManifestPlugin", + stage: Infinity + }, + () => { + const manifest = { + "main.js": "/main.js", + "main.js.map": "/main.js.map" + }; + compilation.emitAsset( + "asset-manifest.json", + new (require("../../../../").sources.RawSource)( + JSON.stringify(manifest, null, 2) + ) + ); + } + ); + } + ); + }, + (compiler) => { + compiler.hooks.compilation.tap("MockCompressionPlugin", (compilation) => { + compilation.hooks.processAssets.tapPromise( + { + name: "MockCompressionPlugin", + stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER, + additionalAssets: true + }, + async (assets) => { + for (const name of Object.keys(assets)) { + const { info } = /** @type {import("../../../../").Asset} */ ( + compilation.getAsset(name) + ); + if (info && name === "asset-manifest.json") { + compilation.deleteAsset(name); + } + } + } + ); + }); + }, + (compiler) => { + compiler.hooks.compilation.tap("MockTerserPlugin", (compilation) => { + compilation.hooks.processAssets.tapPromise( + { + name: "MockTerserPlugin", + stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE, + additionalAssets: true + }, + async (assets) => { + for (const name of Object.keys(assets)) { + const { info } = /** @type {import("../../../../").Asset} */ ( + compilation.getAsset(name) + ); + if (info && name === "asset-manifest.json") { + compilation.deleteAsset(name); + } + } + } + ); + }); + } + ] +}; diff --git a/test/configCases/assets/delete-asset/chunk.js b/test/configCases/assets/delete-asset/chunk.js new file mode 100644 index 00000000000..d9b6390e877 --- /dev/null +++ b/test/configCases/assets/delete-asset/chunk.js @@ -0,0 +1,3 @@ +/**! Chunk */ + +console.log("Fail"); diff --git a/test/configCases/assets/delete-asset/chunk2.js b/test/configCases/assets/delete-asset/chunk2.js new file mode 100644 index 00000000000..d9b6390e877 --- /dev/null +++ b/test/configCases/assets/delete-asset/chunk2.js @@ -0,0 +1,3 @@ +/**! Chunk */ + +console.log("Fail"); diff --git a/test/configCases/assets/delete-asset/index.js b/test/configCases/assets/delete-asset/index.js new file mode 100644 index 00000000000..07c8964ef51 --- /dev/null +++ b/test/configCases/assets/delete-asset/index.js @@ -0,0 +1,14 @@ +/**! Main */ + +it("should fail loading a deleted asset", async () => { + await expect(import("./chunk.js")).rejects.toEqual( + expect.objectContaining({ + code: "ENOENT" + }) + ); + await expect(import("./chunk2.js")).rejects.toEqual( + expect.objectContaining({ + code: "ENOENT" + }) + ); +}); diff --git a/test/configCases/assets/delete-asset/infrastructure-log.js b/test/configCases/assets/delete-asset/infrastructure-log.js new file mode 100644 index 00000000000..d6dce058225 --- /dev/null +++ b/test/configCases/assets/delete-asset/infrastructure-log.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + // each time sets different assetsInfo object instance in webpack.config.js:54 + // this prevents hit in inmemory cache + /^Pack got invalid because of write to: TerserWebpackPlugin|bundle0\.js$/ +]; diff --git a/test/configCases/assets/delete-asset/webpack.config.js b/test/configCases/assets/delete-asset/webpack.config.js new file mode 100644 index 00000000000..8e35fcccc1b --- /dev/null +++ b/test/configCases/assets/delete-asset/webpack.config.js @@ -0,0 +1,78 @@ +"use strict"; + +const TerserPlugin = require("terser-webpack-plugin"); +const { BannerPlugin, Compilation } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + extractComments: { + filename: "LICENSES.txt" + } + }) + ], + chunkIds: "named" + }, + devtool: "source-map", + plugins: [ + new BannerPlugin({ + banner: "Test" + }), + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "Test", + stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + compilation.deleteAsset("chunk2_js.bundle0.js"); + } + ); + compilation.hooks.processAssets.tap( + { + name: "Test", + stage: Compilation.PROCESS_ASSETS_STAGE_ANALYSE + }, + () => { + expect(compilation.getAsset("chunk_js.bundle0.js")).toBeDefined(); + expect( + compilation.getAsset("chunk_js.bundle0.js.map") + ).toBeDefined(); + expect(compilation.getAsset("LICENSES.txt")).toBeDefined(); + // TODO: terser-webpack-plugin should set related info + compilation.updateAsset( + "chunk_js.bundle0.js", + compilation.assets["chunk_js.bundle0.js"], + { + related: { license: "LICENSES.txt" } + } + ); + compilation.updateAsset( + "bundle0.js", + compilation.assets["bundle0.js"], + { + related: { license: "LICENSES.txt" } + } + ); + compilation.deleteAsset("chunk_js.bundle0.js"); + expect(compilation.getAsset("chunk_js.bundle0.js")).toBeUndefined(); + expect( + compilation.getAsset("chunk_js.bundle0.js.map") + ).toBeUndefined(); + expect( + compilation.getAsset("chunk2_js.bundle0.js") + ).toBeUndefined(); + expect( + compilation.getAsset("chunk2_js.bundle0.js.map") + ).toBeUndefined(); + expect(compilation.getAsset("LICENSES.txt")).toBeDefined(); + } + ); + }); + } + ] +}; diff --git a/test/configCases/assets/prevent-related-deletion/index.js b/test/configCases/assets/prevent-related-deletion/index.js new file mode 100644 index 00000000000..da3c15d23b6 --- /dev/null +++ b/test/configCases/assets/prevent-related-deletion/index.js @@ -0,0 +1,13 @@ +const fs = require("fs") +const path = require("path") + +try { + import("./module.js"); +} catch (_err) { + // Nothing +} + +it("should prevent related deletion", async () => { + expect(fs.existsSync(path.join(__STATS__.outputPath, "module_js.bundle0.js"))).toBe(false); + expect(fs.existsSync(path.join(__STATS__.outputPath, "module_js.bundle0.js.map"))).toBe(true); +}); diff --git a/test/configCases/assets/prevent-related-deletion/module.js b/test/configCases/assets/prevent-related-deletion/module.js new file mode 100644 index 00000000000..503bca78c72 --- /dev/null +++ b/test/configCases/assets/prevent-related-deletion/module.js @@ -0,0 +1 @@ +export default "module"; diff --git a/test/configCases/assets/prevent-related-deletion/webpack.config.js b/test/configCases/assets/prevent-related-deletion/webpack.config.js new file mode 100644 index 00000000000..b2d41131e5f --- /dev/null +++ b/test/configCases/assets/prevent-related-deletion/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +const { Compilation } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + optimization: { + minimize: true, + chunkIds: "named" + }, + devtool: "source-map", + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "Test", + stage: Compilation.PROCESS_ASSETS_STAGE_ANALYSE + }, + () => { + compilation.updateAsset( + "module_js.bundle0.js", + compilation.assets["module_js.bundle0.js"], + { related: { sourceMap: null } } + ); + compilation.deleteAsset("module_js.bundle0.js"); + } + ); + }); + } + ] +}; diff --git a/test/configCases/async-commons-chunk/all-selected/webpack.config.js b/test/configCases/async-commons-chunk/all-selected/webpack.config.js index fd4fbccbf34..35eb1e4d960 100644 --- a/test/configCases/async-commons-chunk/all-selected/webpack.config.js +++ b/test/configCases/async-commons-chunk/all-selected/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { splitChunks: { diff --git a/test/configCases/async-commons-chunk/duplicate/webpack.config.js b/test/configCases/async-commons-chunk/duplicate/webpack.config.js index fd4fbccbf34..35eb1e4d960 100644 --- a/test/configCases/async-commons-chunk/duplicate/webpack.config.js +++ b/test/configCases/async-commons-chunk/duplicate/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { splitChunks: { diff --git a/test/configCases/async-commons-chunk/existing-name/index.js b/test/configCases/async-commons-chunk/existing-name/index.js index b05f483e755..b953c1a09b4 100644 --- a/test/configCases/async-commons-chunk/existing-name/index.js +++ b/test/configCases/async-commons-chunk/existing-name/index.js @@ -1,11 +1,17 @@ const chunkLoadingSpy = jest.spyOn(__webpack_require__, "e"); -it("should not have duplicate chunks in blocks", function(done) { +it("should not have duplicate chunks in blocks", function (done) { + let i = 0; + const d = () => { + if (i++ >= 3) done(); + }; + // This split point should contain: a require.ensure( [], - function(require) { + function (require) { expect(require("./a")).toBe("a"); + d(); }, "a" ); @@ -14,9 +20,10 @@ it("should not have duplicate chunks in blocks", function(done) { // have it only contain b and make chunk a be an async dependency. require.ensure( [], - function(require) { + function (require) { expect(require("./a")).toBe("a"); expect(require("./b")).toBe("b"); + d(); }, "a+b" ); @@ -25,10 +32,11 @@ it("should not have duplicate chunks in blocks", function(done) { // have it only contain c and make chunks a and a+b be async dependencies. require.ensure( [], - function(require) { + function (require) { expect(require("./a")).toBe("a"); expect(require("./b")).toBe("b"); expect(require("./c")).toBe("c"); + d(); }, "a+b+c" ); @@ -46,5 +54,5 @@ it("should not have duplicate chunks in blocks", function(done) { ["a+b" /* == b */], ["a+b+c" /* == c */] ]); - done(); + d(); }); diff --git a/test/configCases/async-commons-chunk/existing-name/webpack.config.js b/test/configCases/async-commons-chunk/existing-name/webpack.config.js index 99f63ca81bc..bbd9df87641 100644 --- a/test/configCases/async-commons-chunk/existing-name/webpack.config.js +++ b/test/configCases/async-commons-chunk/existing-name/webpack.config.js @@ -1,14 +1,14 @@ -var webpack = require("../../../../"); +"use strict"; +/** @type {import("../../../../").Configuration} */ module.exports = { performance: { hints: false }, optimization: { splitChunks: { - minSize: 1, - name: true - } - }, - plugins: [new webpack.NamedChunksPlugin()] + minSize: 1 + }, + chunkIds: "named" + } }; diff --git a/test/configCases/async-commons-chunk/nested/webpack.config.js b/test/configCases/async-commons-chunk/nested/webpack.config.js index fd4fbccbf34..35eb1e4d960 100644 --- a/test/configCases/async-commons-chunk/nested/webpack.config.js +++ b/test/configCases/async-commons-chunk/nested/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { splitChunks: { diff --git a/test/configCases/async-commons-chunk/node/webpack.config.js b/test/configCases/async-commons-chunk/node/webpack.config.js index 656d3a998b2..5f1a08dd3e4 100644 --- a/test/configCases/async-commons-chunk/node/webpack.config.js +++ b/test/configCases/async-commons-chunk/node/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "none", entry: { @@ -5,7 +8,7 @@ module.exports = { }, target: "node", optimization: { - namedChunks: true, - namedModules: true + chunkIds: "named", + moduleIds: "named" } }; diff --git a/test/configCases/async-commons-chunk/simple/webpack.config.js b/test/configCases/async-commons-chunk/simple/webpack.config.js index fd4fbccbf34..35eb1e4d960 100644 --- a/test/configCases/async-commons-chunk/simple/webpack.config.js +++ b/test/configCases/async-commons-chunk/simple/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { splitChunks: { diff --git a/test/configCases/async-library/0-create-library/a.js b/test/configCases/async-library/0-create-library/a.js new file mode 100644 index 00000000000..b18b50cdba1 --- /dev/null +++ b/test/configCases/async-library/0-create-library/a.js @@ -0,0 +1 @@ +export const a = await Promise.resolve(42); diff --git a/test/configCases/async-library/0-create-library/test.config.js b/test/configCases/async-library/0-create-library/test.config.js new file mode 100644 index 00000000000..67028ae7c8c --- /dev/null +++ b/test/configCases/async-library/0-create-library/test.config.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/async-library/0-create-library/webpack.config.js b/test/configCases/async-library/0-create-library/webpack.config.js new file mode 100644 index 00000000000..82cd5acbf50 --- /dev/null +++ b/test/configCases/async-library/0-create-library/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + entry: "./a.js", + output: { + filename: "lib.js", + library: { + type: "module" + } + }, + target: "node14", + optimization: { + minimize: true + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/async-library/1-use-library/index.js b/test/configCases/async-library/1-use-library/index.js new file mode 100644 index 00000000000..c342b51c1e2 --- /dev/null +++ b/test/configCases/async-library/1-use-library/index.js @@ -0,0 +1,5 @@ +it("should get valid export from library", () => { + return import("library").then(({ a }) => { + expect(a).toBe(42); + }); +}); diff --git a/test/configCases/async-library/1-use-library/webpack.config.js b/test/configCases/async-library/1-use-library/webpack.config.js new file mode 100644 index 00000000000..0ae108d1e51 --- /dev/null +++ b/test/configCases/async-library/1-use-library/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../types").Configuration} */ +module.exports = (env, { testPath }) => ({ + target: "node14", + output: { + chunkLoading: "import" + }, + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/lib.js") + } + }, + experiments: { + outputModule: true + } +}); diff --git a/test/configCases/async-module/environment-not-support-async-warning/index.js b/test/configCases/async-module/environment-not-support-async-warning/index.js new file mode 100644 index 00000000000..ede02f9dc07 --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/index.js @@ -0,0 +1,11 @@ +it("should have warnings for environment not support async/await when using asyncModule", () => { + globalThis.scriptGlobal = "script.js"; + return import("./reexport").then(({ number, getNumber, importRequest, moduleRequest, promiseRequest, scriptRequest }) => { + expect(number).toBe(1); + expect(getNumber()).toBe(42); + expect(importRequest).toBe("import.js"); + expect(moduleRequest).toBe("module.js"); + expect(promiseRequest).toBe("promise.js"); + expect(scriptRequest).toBe("script.js"); + }); +}); diff --git a/test/configCases/async-module/environment-not-support-async-warning/reexport.js b/test/configCases/async-module/environment-not-support-async-warning/reexport.js new file mode 100644 index 00000000000..ea64ca3573b --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/reexport.js @@ -0,0 +1,6 @@ +export { default as number } from "./tla"; +export { getNumber } from "./wasm.wat" +export { default as moduleRequest } from "external-module" +export { default as importRequest } from "external-import" +export { default as promiseRequest } from "external-promise" +export { default as scriptRequest } from "external-script" diff --git a/test/configCases/async-module/environment-not-support-async-warning/test.filter.js b/test/configCases/async-module/environment-not-support-async-warning/test.filter.js new file mode 100644 index 00000000000..313b42e4545 --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +const supportsGlobalThis = require("../../../helpers/supportsGlobalThis"); +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly() && supportsGlobalThis(); diff --git a/test/configCases/async-module/environment-not-support-async-warning/tla.js b/test/configCases/async-module/environment-not-support-async-warning/tla.js new file mode 100644 index 00000000000..7ff47b218ac --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/tla.js @@ -0,0 +1 @@ +export default await Promise.resolve(1) diff --git a/test/configCases/async-module/environment-not-support-async-warning/warnings.js b/test/configCases/async-module/environment-not-support-async-warning/warnings.js new file mode 100644 index 00000000000..60e2c9c126d --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/warnings.js @@ -0,0 +1,36 @@ +"use strict"; + +module.exports = [ + [ + { moduleName: /tla\.js/ }, + /The generated code contains 'async\/await'/, + /"topLevelAwait"/ + ], + [ + { moduleName: /external \["import\.js","request"\]/ }, + /The generated code contains 'async\/await'/, + /"external import"/ + ], + [ + { moduleName: /external \["module\.js","request"\]/ }, + /The generated code contains 'async\/await'/, + /"external module"/ + ], + [ + { moduleName: /external "Promise\.resolve\('promise\.js'\)"/ }, + /The generated code contains 'async\/await'/, + /"external promise"/ + ], + [ + { + moduleName: /external "scriptGlobal@https:\/\/example\.com\/script\.js"/ + }, + /The generated code contains 'async\/await'/, + /"external script"/ + ], + [ + { moduleName: /wasm\.wat/ }, + /The generated code contains 'async\/await'/, + /"asyncWebAssembly"/ + ] +]; diff --git a/test/configCases/async-module/environment-not-support-async-warning/wasm.wat b/test/configCases/async-module/environment-not-support-async-warning/wasm.wat new file mode 100644 index 00000000000..d8081e18c3b --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/wasm.wat @@ -0,0 +1,4 @@ +(module + (func $getNumber (export "getNumber") (result i32) + (i32.const 42))) + diff --git a/test/configCases/async-module/environment-not-support-async-warning/webpack.config.js b/test/configCases/async-module/environment-not-support-async-warning/webpack.config.js new file mode 100644 index 00000000000..8ec547c8652 --- /dev/null +++ b/test/configCases/async-module/environment-not-support-async-warning/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.wat$/, + loader: "wast-loader", + type: "webassembly/async" + } + ] + }, + output: { + environment: { + dynamicImport: true, + asyncFunction: false + }, + importFunctionName: "((name) => Promise.resolve({ request: name }))" + }, + externals: { + "external-module": ["module module.js", "request"], + "external-import": ["import import.js", "request"], + "external-promise": "promise Promise.resolve('promise.js')", + "external-script": "script scriptGlobal@https://example.com/script.js" + }, + experiments: { + asyncWebAssembly: true + } +}; diff --git a/test/configCases/async-module/issue-19803/a.js b/test/configCases/async-module/issue-19803/a.js new file mode 100644 index 00000000000..9cfe94a72a9 --- /dev/null +++ b/test/configCases/async-module/issue-19803/a.js @@ -0,0 +1,2 @@ +await 1; +export const a = "a" \ No newline at end of file diff --git a/test/configCases/async-module/issue-19803/b.js b/test/configCases/async-module/issue-19803/b.js new file mode 100644 index 00000000000..100314f82ec --- /dev/null +++ b/test/configCases/async-module/issue-19803/b.js @@ -0,0 +1,2 @@ +await 1; +export const b = "b" \ No newline at end of file diff --git a/test/configCases/async-module/issue-19803/c.js b/test/configCases/async-module/issue-19803/c.js new file mode 100644 index 00000000000..db512b57507 --- /dev/null +++ b/test/configCases/async-module/issue-19803/c.js @@ -0,0 +1,4 @@ +import {a} from "./a"; +import {b} from "./b"; + +export const c = a + b \ No newline at end of file diff --git a/test/configCases/async-module/issue-19803/d.js b/test/configCases/async-module/issue-19803/d.js new file mode 100644 index 00000000000..860f9255cb6 --- /dev/null +++ b/test/configCases/async-module/issue-19803/d.js @@ -0,0 +1,3 @@ +import {c} from "./c"; + +export const d = c \ No newline at end of file diff --git a/test/configCases/async-module/issue-19803/index.js b/test/configCases/async-module/issue-19803/index.js new file mode 100644 index 00000000000..c921c625432 --- /dev/null +++ b/test/configCases/async-module/issue-19803/index.js @@ -0,0 +1,5 @@ +it("should work", () => { + return import("./d").then(d => { + expect(d.d).toBe("ab"); + }); +}); \ No newline at end of file diff --git a/test/configCases/async-module/issue-19803/webpack.config.js b/test/configCases/async-module/issue-19803/webpack.config.js new file mode 100644 index 00000000000..ae2274e3b22 --- /dev/null +++ b/test/configCases/async-module/issue-19803/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + environment: { + destructuring: false + } + } +}; diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/extra.js b/test/configCases/cache-dependencies/managed-items-unsafe-cache/extra.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/index.js b/test/configCases/cache-dependencies/managed-items-unsafe-cache/index.js new file mode 100644 index 00000000000..3b676a7c54d --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items-unsafe-cache/index.js @@ -0,0 +1,3 @@ +import "./loader!package"; + +it("should compile and run the test in config", () => {}); diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/loader.js b/test/configCases/cache-dependencies/managed-items-unsafe-cache/loader.js new file mode 100644 index 00000000000..3a6935623f6 --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items-unsafe-cache/loader.js @@ -0,0 +1,8 @@ +const path = require("path"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + this.addDependency(path.resolve(__dirname, "node_modules/package/extra.js")); + this.addDependency(path.resolve(__dirname, "extra.js")); + return source; +}; diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/extra.js b/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/extra.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/index.js b/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/index.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/package.json b/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/package.json new file mode 100644 index 00000000000..75b93e3b25a --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items-unsafe-cache/node_modules/package/package.json @@ -0,0 +1,4 @@ +{ + "name": "package", + "version": "1.0.0" +} diff --git a/test/configCases/cache-dependencies/managed-items-unsafe-cache/webpack.config.js b/test/configCases/cache-dependencies/managed-items-unsafe-cache/webpack.config.js new file mode 100644 index 00000000000..042d1e75aa8 --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items-unsafe-cache/webpack.config.js @@ -0,0 +1,31 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + snapshot: { + managedPaths: [path.resolve(__dirname, "node_modules")] + }, + plugins: [ + (compiler) => { + compiler.hooks.done.tap("Test", ({ compilation }) => { + const fileDeps = [...compilation.fileDependencies]; + expect(fileDeps).toContain( + path.resolve(__dirname, "node_modules/package/index.js") + ); + expect(fileDeps).toContain( + path.resolve(__dirname, "node_modules/package/extra.js") + ); + expect(fileDeps).toContain( + path.resolve(__dirname, "node_modules/package/package.json") + ); + expect(fileDeps).toContain(path.resolve(__dirname, "extra.js")); + expect(fileDeps).toContain(path.resolve(__dirname, "index.js")); + }); + } + ], + module: { + unsafeCache: true + } +}; diff --git a/test/configCases/cache-dependencies/managed-items/extra.js b/test/configCases/cache-dependencies/managed-items/extra.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/cache-dependencies/managed-items/index.js b/test/configCases/cache-dependencies/managed-items/index.js new file mode 100644 index 00000000000..3b676a7c54d --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items/index.js @@ -0,0 +1,3 @@ +import "./loader!package"; + +it("should compile and run the test in config", () => {}); diff --git a/test/configCases/cache-dependencies/managed-items/loader.js b/test/configCases/cache-dependencies/managed-items/loader.js new file mode 100644 index 00000000000..3a6935623f6 --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items/loader.js @@ -0,0 +1,8 @@ +const path = require("path"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + this.addDependency(path.resolve(__dirname, "node_modules/package/extra.js")); + this.addDependency(path.resolve(__dirname, "extra.js")); + return source; +}; diff --git a/test/configCases/cache-dependencies/managed-items/node_modules/package/extra.js b/test/configCases/cache-dependencies/managed-items/node_modules/package/extra.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/cache-dependencies/managed-items/node_modules/package/index.js b/test/configCases/cache-dependencies/managed-items/node_modules/package/index.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/cache-dependencies/managed-items/node_modules/package/package.json b/test/configCases/cache-dependencies/managed-items/node_modules/package/package.json new file mode 100644 index 00000000000..75b93e3b25a --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items/node_modules/package/package.json @@ -0,0 +1,4 @@ +{ + "name": "package", + "version": "1.0.0" +} diff --git a/test/configCases/cache-dependencies/managed-items/webpack.config.js b/test/configCases/cache-dependencies/managed-items/webpack.config.js new file mode 100644 index 00000000000..5e5b9f15ff7 --- /dev/null +++ b/test/configCases/cache-dependencies/managed-items/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + snapshot: { + managedPaths: [path.resolve(__dirname, "node_modules")] + }, + plugins: [ + (compiler) => { + compiler.hooks.done.tap("Test", ({ compilation }) => { + const fileDeps = [...compilation.fileDependencies]; + expect(fileDeps).toContain( + path.resolve(__dirname, "node_modules/package/index.js") + ); + expect(fileDeps).toContain( + path.resolve(__dirname, "node_modules/package/extra.js") + ); + expect(fileDeps).toContain( + path.resolve(__dirname, "node_modules/package/package.json") + ); + expect(fileDeps).toContain(path.resolve(__dirname, "extra.js")); + expect(fileDeps).toContain(path.resolve(__dirname, "loader.js")); + expect(fileDeps).toContain(path.resolve(__dirname, "index.js")); + }); + } + ], + module: { + unsafeCache: false + } +}; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-1/index.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-1/index.js new file mode 100644 index 00000000000..7fd9507bb82 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-1/index.js @@ -0,0 +1 @@ +it("should build", () => {}); diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-1/webpack.config.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-1/webpack.config.js new file mode 100644 index 00000000000..6de7ce1389f --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-1/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +// default settings. should just work + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem", + name: "name2" + } + }, + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem", + name: "name1" + } + }, + { + mode: "production", + entry: "./index", + cache: true + }, + { + mode: "production", + entry: "./index", + cache: true + } +]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-2/index.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-2/index.js new file mode 100644 index 00000000000..7fd9507bb82 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-2/index.js @@ -0,0 +1 @@ +it("should build", () => {}); diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-2/webpack.config.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-2/webpack.config.js new file mode 100644 index 00000000000..a829799c8c1 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-2/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +// no cache names + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem" + } + }, + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem" + } + }, + { + name: "3rd compiler", + mode: "production", + entry: "./index", + cache: { + type: "filesystem" + } + } +]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-3/index.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-3/index.js new file mode 100644 index 00000000000..7fd9507bb82 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-3/index.js @@ -0,0 +1 @@ +it("should build", () => {}); diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-3/warnings.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-3/warnings.js new file mode 100644 index 00000000000..493e8e1c91f --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-3/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + /Please set unique "cache\.name" option/, + /Compiler with name "3rd compiler" doesn't use unique cache name/ +]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-3/webpack.config.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-3/webpack.config.js new file mode 100644 index 00000000000..31490f333c5 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-3/webpack.config.js @@ -0,0 +1,71 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").FileCacheOptions} FileCacheOptions */ + +// with explicit cache names + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + mode: "production", + entry: "./index", + cache: { + name: "filesystem", + type: "filesystem" + }, + plugins: [ + { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.environment.tap("FixTestCachePlugin", () => { + /** @type {FileCacheOptions} */ + (compiler.options.cache).cacheLocation = + /** @type {string} */ + ( + /** @type {FileCacheOptions} */ + (compiler.options.cache).cacheLocation + ).replace(/filesystem$/, "filesystem-extra-1"); + }); + } + } + ] + }, + { + mode: "production", + entry: "./index", + cache: { + name: "filesystem", + type: "filesystem" + }, + plugins: [ + { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.environment.tap("FixTestCachePlugin", () => { + /** @type {FileCacheOptions} */ + (compiler.options.cache).cacheLocation = + /** @type {string} */ + ( + /** @type {FileCacheOptions} */ + (compiler.options.cache).cacheLocation + ).replace(/filesystem$/, "filesystem-extra-2"); + }); + } + } + ] + }, + { + name: "3rd compiler", + mode: "production", + entry: "./index", + cache: { + name: "filesystem", + type: "filesystem" + } + } +]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-4/index.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-4/index.js new file mode 100644 index 00000000000..7fd9507bb82 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-4/index.js @@ -0,0 +1 @@ +it("should build", () => {}); diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-4/warnings.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-4/warnings.js new file mode 100644 index 00000000000..a21fb971436 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-4/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [/Please set unique "cache\.name" option/]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-4/webpack.config.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-4/webpack.config.js new file mode 100644 index 00000000000..172e78757b1 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-4/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +// with explicit cache names + +/** @typedef {import("../../../../").Configuration} Configuration */ +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").FileCacheOptions} FileCacheOptions */ + +/** @type {Configuration} */ +module.exports = [ + { + mode: "production", + entry: "./index", + cache: { + name: "default", + type: "filesystem" + }, + plugins: [ + { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.environment.tap("FixTestCachePlugin", () => { + /** @type {FileCacheOptions} */ + (compiler.options.cache).cacheLocation = + /** @type {string} */ + ( + /** @type {FileCacheOptions} */ + (compiler.options.cache).cacheLocation + ).replace(/default$/, "default-extra"); + }); + } + } + ] + }, + { + mode: "production", + entry: "./index", + cache: { + name: "default", + type: "filesystem" + } + } +]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-5/index.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-5/index.js new file mode 100644 index 00000000000..7fd9507bb82 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-5/index.js @@ -0,0 +1 @@ +it("should build", () => {}); diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-5/webpack.config.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-5/webpack.config.js new file mode 100644 index 00000000000..d285e6a9a2a --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-5/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +// no cache names + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem", + name: "default" + } + }, + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem" + } + } +]; diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-6/index.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-6/index.js new file mode 100644 index 00000000000..7fd9507bb82 --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-6/index.js @@ -0,0 +1 @@ +it("should build", () => {}); diff --git a/test/configCases/cache-filesystem/multicompiler-mode-cache-6/webpack.config.js b/test/configCases/cache-filesystem/multicompiler-mode-cache-6/webpack.config.js new file mode 100644 index 00000000000..ee0c98d205c --- /dev/null +++ b/test/configCases/cache-filesystem/multicompiler-mode-cache-6/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +// no cache names + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem" + } + }, + { + mode: "production", + entry: "./index", + cache: { + type: "filesystem", + name: "default" + } + } +]; diff --git a/test/configCases/chunk-graph/issue-15173/commonAsync/index.js b/test/configCases/chunk-graph/issue-15173/commonAsync/index.js new file mode 100644 index 00000000000..35d239bab0b --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/commonAsync/index.js @@ -0,0 +1,5 @@ +import { commonUtil } from "../commonSync"; + +export function getCommonAsync() { + return commonUtil(); +} diff --git a/test/configCases/chunk-graph/issue-15173/commonSync/index.js b/test/configCases/chunk-graph/issue-15173/commonSync/index.js new file mode 100644 index 00000000000..65d10feef9a --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/commonSync/index.js @@ -0,0 +1,5 @@ +var EmptyObj = {}; + +export function commonUtil() { + return EmptyObj; +} diff --git a/test/configCases/chunk-graph/issue-15173/entries/entryA.js b/test/configCases/chunk-graph/issue-15173/entries/entryA.js new file mode 100644 index 00000000000..a09b91e2e6e --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/entries/entryA.js @@ -0,0 +1,19 @@ +import { commonUtil } from "../commonSync"; + +export default { + doSomethingInEntryA() { + return commonUtil("entryA"); + }, + getFeatureA() { + return import(/* webpackChunkName: 'featureA' */ "../featureA"); + }, + getFeatureB() { + return import(/* webpackChunkName: 'featureB' */ "../featureB"); + } +}; + +it("common async should contain self only", () => { + expect( + __STATS__.chunks.find(c => c.names.includes("commonAsync")).modules + ).toHaveLength(1); +}); diff --git a/test/configCases/chunk-graph/issue-15173/entries/entryB.js b/test/configCases/chunk-graph/issue-15173/entries/entryB.js new file mode 100644 index 00000000000..e96fa8920c5 --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/entries/entryB.js @@ -0,0 +1,10 @@ +import { commonUtil } from "../commonSync"; + +export default { + doSomethingInEntryB() { + return commonUtil("entryB"); + }, + getFeatureC() { + return import(/* webpackChunkName: 'featureC' */ "../featureC"); + } +}; diff --git a/test/configCases/chunk-graph/issue-15173/featureA/index.js b/test/configCases/chunk-graph/issue-15173/featureA/index.js new file mode 100644 index 00000000000..1da55f5d93b --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/featureA/index.js @@ -0,0 +1,5 @@ +import(/* webpackChunkName: 'commonAsync' */ "../commonAsync"); + +export function getFeatureA() { + return "featureA"; +} diff --git a/test/configCases/chunk-graph/issue-15173/featureB/index.js b/test/configCases/chunk-graph/issue-15173/featureB/index.js new file mode 100644 index 00000000000..ea15e118f38 --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/featureB/index.js @@ -0,0 +1,5 @@ +import(/* webpackChunkName: 'commonAsync' */ "../commonAsync"); + +export function getFeatureB() { + return "featureB"; +} diff --git a/test/configCases/chunk-graph/issue-15173/featureC/index.js b/test/configCases/chunk-graph/issue-15173/featureC/index.js new file mode 100644 index 00000000000..41067715217 --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/featureC/index.js @@ -0,0 +1,5 @@ +import(/* webpackChunkName: 'commonAsync' */ "../commonAsync"); + +export function getFeatureC() { + return "featuraC"; +} diff --git a/test/configCases/chunk-graph/issue-15173/test.config.js b/test/configCases/chunk-graph/issue-15173/test.config.js new file mode 100644 index 00000000000..86d60992f00 --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entryA.js"]; + } +}; diff --git a/test/configCases/chunk-graph/issue-15173/webpack.config.js b/test/configCases/chunk-graph/issue-15173/webpack.config.js new file mode 100644 index 00000000000..b791dd5a7eb --- /dev/null +++ b/test/configCases/chunk-graph/issue-15173/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + entry: { + entryA: "./entries/entryA.js", + entryB: "./entries/entryB.js" + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/chunk-graph/issue-17989/entry-a.js b/test/configCases/chunk-graph/issue-17989/entry-a.js new file mode 100644 index 00000000000..18c5225b738 --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/entry-a.js @@ -0,0 +1,10 @@ +import loadModule from "./shared" + +it("should not have a.add from entry-a + entry-b", () => { + return loadModule().then(module => { + const { arg } = module; + expect(arg).toBe(42) + expect(typeof __webpack_modules__["./util2.js"]).toBe("function") + expect(require.cache["./util2.js"]).toBe(undefined); // not loaded on __webpack_require__.c["./util2.js"] + }); +}); diff --git a/test/configCases/chunk-graph/issue-17989/entry-b.js b/test/configCases/chunk-graph/issue-17989/entry-b.js new file mode 100644 index 00000000000..f47830e8c37 --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/entry-b.js @@ -0,0 +1,17 @@ +it("should have util2.js in util chunk", () => { + return import("./shared") + .then(({ default: loadModule }) => loadModule()) + .then((module) => { + let arg = module.arg; + expect(arg).toBe(42) + expect(typeof __webpack_modules__["./util2.js"]).toBe("function") + expect(typeof require.cache["./util2.js"]).toBe("object"); // loaded on __webpack_require__.c["./util2.js"] + return arg + }) + .then(arg => { + return import("./util1").then(module => { + let res = module.f(arg); + expect(res).toBe(84); + }) + }) +}); diff --git a/test/configCases/chunk-graph/issue-17989/shared.js b/test/configCases/chunk-graph/issue-17989/shared.js new file mode 100644 index 00000000000..984113dd888 --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/shared.js @@ -0,0 +1 @@ +export default () => import("./util") diff --git a/test/configCases/chunk-graph/issue-17989/test.config.js b/test/configCases/chunk-graph/issue-17989/test.config.js new file mode 100644 index 00000000000..6cf32125760 --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["a.js", "b.js"]; + } +}; diff --git a/test/configCases/chunk-graph/issue-17989/util.js b/test/configCases/chunk-graph/issue-17989/util.js new file mode 100644 index 00000000000..70f7445abfe --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/util.js @@ -0,0 +1 @@ +export { arg } from './util1' diff --git a/test/configCases/chunk-graph/issue-17989/util1.js b/test/configCases/chunk-graph/issue-17989/util1.js new file mode 100644 index 00000000000..092f75a8fc0 --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/util1.js @@ -0,0 +1,2 @@ +export const arg = 42 +export { f } from "./util2" diff --git a/test/configCases/chunk-graph/issue-17989/util2.js b/test/configCases/chunk-graph/issue-17989/util2.js new file mode 100644 index 00000000000..95e23faf57c --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/util2.js @@ -0,0 +1 @@ +export const f = a => a * 2 diff --git a/test/configCases/chunk-graph/issue-17989/webpack.config.js b/test/configCases/chunk-graph/issue-17989/webpack.config.js new file mode 100644 index 00000000000..f5c815ce9cd --- /dev/null +++ b/test/configCases/chunk-graph/issue-17989/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./entry-a", + b: "./entry-b" + }, + optimization: { + sideEffects: true, + providedExports: true, + usedExports: true, + concatenateModules: false, + moduleIds: "named" + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/chunk-graph/issue-9634/async-b.js b/test/configCases/chunk-graph/issue-9634/async-b.js new file mode 100644 index 00000000000..4aac7c43c3e --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/async-b.js @@ -0,0 +1 @@ +export default import(/* webpackChunkName: "shared" */ "./shared"); diff --git a/test/configCases/chunk-graph/issue-9634/async-b2.js b/test/configCases/chunk-graph/issue-9634/async-b2.js new file mode 100644 index 00000000000..c002386be38 --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/async-b2.js @@ -0,0 +1 @@ +export default import(/* webpackChunkName: "async-b" */ "./async-b"); diff --git a/test/configCases/chunk-graph/issue-9634/entry-a.js b/test/configCases/chunk-graph/issue-9634/entry-a.js new file mode 100644 index 00000000000..67559019b2d --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/entry-a.js @@ -0,0 +1,13 @@ +import leaf from "./leaf"; + +it("should include the leaf module", () => { + expect(leaf).toBe("ok"); +}); + +it("should load the leaf module from a", () => { + return import(/* webpackChunkName: "shared" */ "./shared").then(shared => { + return shared.default.then(module => { + expect(module.default).toBe("ok"); + }); + }); +}); diff --git a/test/configCases/chunk-graph/issue-9634/entry-b.js b/test/configCases/chunk-graph/issue-9634/entry-b.js new file mode 100644 index 00000000000..356285360db --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/entry-b.js @@ -0,0 +1,11 @@ +it("should load the leaf module from b", () => { + return import(/* webpackChunkName: "async-b2" */ "./async-b2").then(asy => { + return asy.default.then(asy => { + return asy.default.then(shared => { + return shared.default.then(module => { + expect(module.default).toBe("ok"); + }); + }); + }); + }); +}); diff --git a/test/configCases/chunk-graph/issue-9634/leaf.js b/test/configCases/chunk-graph/issue-9634/leaf.js new file mode 100644 index 00000000000..5c6b89abfc8 --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/leaf.js @@ -0,0 +1 @@ +export default "ok"; diff --git a/test/configCases/chunk-graph/issue-9634/module.js b/test/configCases/chunk-graph/issue-9634/module.js new file mode 100644 index 00000000000..6f1d5125a62 --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/module.js @@ -0,0 +1,3 @@ +import leaf from "./leaf"; + +export default leaf; diff --git a/test/configCases/chunk-graph/issue-9634/shared.js b/test/configCases/chunk-graph/issue-9634/shared.js new file mode 100644 index 00000000000..23ced5ed605 --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/shared.js @@ -0,0 +1 @@ +export default import(/* webpackChunkName: "module" */ "./module"); diff --git a/test/configCases/chunk-graph/issue-9634/test.config.js b/test/configCases/chunk-graph/issue-9634/test.config.js new file mode 100644 index 00000000000..6cf32125760 --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["a.js", "b.js"]; + } +}; diff --git a/test/configCases/chunk-graph/issue-9634/webpack.config.js b/test/configCases/chunk-graph/issue-9634/webpack.config.js new file mode 100644 index 00000000000..838716029c5 --- /dev/null +++ b/test/configCases/chunk-graph/issue-9634/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + b: "./entry-b", + a: "./entry-a" + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/chunk-graph/rewalk-chunk/index.js b/test/configCases/chunk-graph/rewalk-chunk/index.js new file mode 100644 index 00000000000..cc7a8306bd3 --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/index.js @@ -0,0 +1,7 @@ +it('should load module c', async () => { + const m1 = await (await import('./module-b')).default + const m2 = await import(/*webpackChunkName: 'module'*/ './module-a') + + expect(m1.default).toBe('module-c') + expect(m2.default).toBe('module-a') +}) diff --git a/test/configCases/chunk-graph/rewalk-chunk/module-a.js b/test/configCases/chunk-graph/rewalk-chunk/module-a.js new file mode 100644 index 00000000000..4d71683571e --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/module-a.js @@ -0,0 +1 @@ +export default 'module-a' diff --git a/test/configCases/chunk-graph/rewalk-chunk/module-b.js b/test/configCases/chunk-graph/rewalk-chunk/module-b.js new file mode 100644 index 00000000000..8993da56ef9 --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/module-b.js @@ -0,0 +1 @@ +export default import(/*webpackChunkName: 'module'*/ './module-c') diff --git a/test/configCases/chunk-graph/rewalk-chunk/module-c.js b/test/configCases/chunk-graph/rewalk-chunk/module-c.js new file mode 100644 index 00000000000..8b2ef5ece16 --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/module-c.js @@ -0,0 +1 @@ +export default 'module-c' diff --git a/test/configCases/chunk-graph/rewalk-chunk/shared.js b/test/configCases/chunk-graph/rewalk-chunk/shared.js new file mode 100644 index 00000000000..c49b96f60da --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/shared.js @@ -0,0 +1 @@ +export default import(/* webpackChunkName: "module" */ "./module-a"); diff --git a/test/configCases/chunk-graph/rewalk-chunk/test.config.js b/test/configCases/chunk-graph/rewalk-chunk/test.config.js new file mode 100644 index 00000000000..a8755bed92f --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.js"]; + } +}; diff --git a/test/configCases/chunk-graph/rewalk-chunk/webpack.config.js b/test/configCases/chunk-graph/rewalk-chunk/webpack.config.js new file mode 100644 index 00000000000..b3554097a35 --- /dev/null +++ b/test/configCases/chunk-graph/rewalk-chunk/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + main: "./index.js" + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/chunk-index/issue-18008/A.js b/test/configCases/chunk-index/issue-18008/A.js new file mode 100644 index 00000000000..38498ca8aab --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/A.js @@ -0,0 +1,3 @@ +import './m.css' + +export default import(/* webpackChunkName: 'shared' */ './shared') diff --git a/test/configCases/chunk-index/issue-18008/B-2.js b/test/configCases/chunk-index/issue-18008/B-2.js new file mode 100644 index 00000000000..d76708775e3 --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/B-2.js @@ -0,0 +1 @@ +export default import(/* webpackChunkName: 'shared' */ './shared') diff --git a/test/configCases/chunk-index/issue-18008/B.js b/test/configCases/chunk-index/issue-18008/B.js new file mode 100644 index 00000000000..06d9beae119 --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/B.js @@ -0,0 +1 @@ +export default import(/* webpackChunkName: 'B-2' */ './B-2') diff --git a/test/configCases/chunk-index/issue-18008/m.css b/test/configCases/chunk-index/issue-18008/m.css new file mode 100644 index 00000000000..42109d1e8e6 --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/m.css @@ -0,0 +1,3 @@ +.m { + color: red; +} \ No newline at end of file diff --git a/test/configCases/chunk-index/issue-18008/main.js b/test/configCases/chunk-index/issue-18008/main.js new file mode 100644 index 00000000000..db0004aced8 --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/main.js @@ -0,0 +1,4 @@ +it('should compile', async () => { + await (await import(/* webpackChunkName: 'A' */ './A')).default + await (await import(/* webpackChunkName: 'B' */ './B')).default +}) diff --git a/test/configCases/chunk-index/issue-18008/n.css b/test/configCases/chunk-index/issue-18008/n.css new file mode 100644 index 00000000000..d98c8a002b6 --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/n.css @@ -0,0 +1,3 @@ +.n { + color: red; +} \ No newline at end of file diff --git a/test/configCases/chunk-index/issue-18008/shared.js b/test/configCases/chunk-index/issue-18008/shared.js new file mode 100644 index 00000000000..fa12217397f --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/shared.js @@ -0,0 +1,2 @@ +import './m.css' +import './n.css' diff --git a/test/configCases/chunk-index/issue-18008/test.config.js b/test/configCases/chunk-index/issue-18008/test.config.js new file mode 100644 index 00000000000..ac9427f4bc8 --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.js", "A.js", "shared.js", "B.js", "B-2.js"]; + } +}; diff --git a/test/configCases/chunk-index/issue-18008/webpack.config.js b/test/configCases/chunk-index/issue-18008/webpack.config.js new file mode 100644 index 00000000000..3a338ae712d --- /dev/null +++ b/test/configCases/chunk-index/issue-18008/webpack.config.js @@ -0,0 +1,66 @@ +"use strict"; + +/** @typedef {import("../../../../types").Compilation} Compilation */ +/** @typedef {import("../../../../types").Module} Module */ +/** @type {import("../../../../types").Configuration} */ +module.exports = { + entry: { + main: "./main.js" + }, + output: { + filename: "[name].js" + }, + optimization: { + splitChunks: false, + chunkIds: "named" + }, + plugins: [ + function apply() { + /** + * @param {Compilation} compilation compilation + * @returns {void} + */ + const handler = (compilation) => { + compilation.hooks.afterSeal.tap("testcase", () => { + /** @type {Record} */ + const data = {}; + for (const [name, group] of compilation.namedChunkGroups) { + /** @type {Map} */ + const modules = new Map(); + for (const chunk of group.chunks) { + for (const module of compilation.chunkGraph.getChunkModulesIterable( + chunk + )) { + const preOrder = group.getModulePreOrderIndex(module); + if (typeof preOrder === "number") { + modules.set(module, preOrder); + } + } + } + const sortedModules = [...modules].sort((a, b) => a[1] - b[1]); + const text = sortedModules + .map( + ([m, index]) => + `${index}: ${m.readableIdentifier( + compilation.requestShortener + )}` + ) + .join(", "); + data[`${name}Index`] = text; + } + expect(data).toEqual({ + AIndex: "0: ./A.js, 1: css ./m.css", + "B-2Index": "0: ./B-2.js", + BIndex: "0: ./B.js", + mainIndex: "0: ./main.js", + sharedIndex: "1: css ./m.css, 2: css ./n.css" + }); + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ], + experiments: { + css: true + } +}; diff --git a/test/configCases/chunk-index/order-multiple-entries/a.js b/test/configCases/chunk-index/order-multiple-entries/a.js new file mode 100644 index 00000000000..7777e2e08e5 --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/a.js @@ -0,0 +1 @@ +import "./shared"; \ No newline at end of file diff --git a/test/configCases/chunk-index/order-multiple-entries/async.js b/test/configCases/chunk-index/order-multiple-entries/async.js new file mode 100644 index 00000000000..122ec5d2d79 --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/async.js @@ -0,0 +1 @@ +console.log.bind(console); diff --git a/test/configCases/chunk-index/order-multiple-entries/b.js b/test/configCases/chunk-index/order-multiple-entries/b.js new file mode 100644 index 00000000000..7777e2e08e5 --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/b.js @@ -0,0 +1 @@ +import "./shared"; \ No newline at end of file diff --git a/test/configCases/chunk-index/order-multiple-entries/c.js b/test/configCases/chunk-index/order-multiple-entries/c.js new file mode 100644 index 00000000000..122ec5d2d79 --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/c.js @@ -0,0 +1 @@ +console.log.bind(console); diff --git a/test/configCases/chunk-index/order-multiple-entries/entry1.js b/test/configCases/chunk-index/order-multiple-entries/entry1.js new file mode 100644 index 00000000000..ff832a0bcad --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/entry1.js @@ -0,0 +1,4 @@ +import "./a"; +it("should compile", () => import(/* webpackChunkName: "async" */ "./async")); +import "./b"; +import "./c"; diff --git a/test/configCases/chunk-index/order-multiple-entries/entry2.js b/test/configCases/chunk-index/order-multiple-entries/entry2.js new file mode 100644 index 00000000000..92f9311d3d5 --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/entry2.js @@ -0,0 +1,4 @@ +import "./c"; +it("should compile", () => import(/* webpackChunkName: "async" */ "./async")); +import "./b"; +import "./a"; diff --git a/test/configCases/chunk-index/order-multiple-entries/shared.js b/test/configCases/chunk-index/order-multiple-entries/shared.js new file mode 100644 index 00000000000..122ec5d2d79 --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/shared.js @@ -0,0 +1 @@ +console.log.bind(console); diff --git a/test/configCases/chunk-index/order-multiple-entries/test.config.js b/test/configCases/chunk-index/order-multiple-entries/test.config.js new file mode 100644 index 00000000000..c5234ed761a --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry1.js", "entry2.js"]; + } +}; diff --git a/test/configCases/chunk-index/order-multiple-entries/webpack.config.js b/test/configCases/chunk-index/order-multiple-entries/webpack.config.js new file mode 100644 index 00000000000..a2c54eb021e --- /dev/null +++ b/test/configCases/chunk-index/order-multiple-entries/webpack.config.js @@ -0,0 +1,122 @@ +"use strict"; + +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + entry1: "./entry1", + entry2: "./entry2" + }, + output: { + filename: "[name].js" + }, + optimization: { + concatenateModules: false + }, + plugins: [ + function apply() { + /** + * @param {Compilation} compilation compilation + * @returns {void} + */ + const handler = (compilation) => { + const moduleGraph = compilation.moduleGraph; + compilation.hooks.afterSeal.tap("testcase", () => { + /** @type {Record} */ + const data = {}; + for (const [name, group] of compilation.namedChunkGroups) { + /** @type {Map} */ + const modules = new Map(); + /** @type {Map} */ + const modules2 = new Map(); + for (const chunk of group.chunks) { + for (const module of compilation.chunkGraph.getChunkModulesIterable( + chunk + )) { + const preOrder = group.getModulePreOrderIndex(module); + if (typeof preOrder === "number") { + modules.set(module, preOrder); + } + const postOrder = group.getModulePostOrderIndex(module); + if (typeof postOrder === "number") { + modules2.set(module, postOrder); + } + } + } + const sortedModules = [...modules].sort((a, b) => a[1] - b[1]); + const sortedModules2 = [...modules2].sort((a, b) => a[1] - b[1]); + const text = sortedModules + .map( + ([m, index]) => + `${index}: ${m.readableIdentifier( + compilation.requestShortener + )}` + ) + .join(", "); + const text2 = sortedModules2 + .map( + ([m, index]) => + `${index}: ${m.readableIdentifier( + compilation.requestShortener + )}` + ) + .join(", "); + data[`${name}Index`] = text; + data[`${name}Index2`] = text2; + } + expect(data).toEqual({ + entry1Index: + "0: ./entry1.js, 1: ./a.js, 2: ./shared.js, 3: ./b.js, 4: ./c.js", + entry1Index2: + "0: ./shared.js, 1: ./a.js, 2: ./b.js, 3: ./c.js, 4: ./entry1.js", + entry2Index: + "0: ./entry2.js, 1: ./c.js, 2: ./b.js, 3: ./shared.js, 4: ./a.js", + entry2Index2: + "0: ./c.js, 1: ./shared.js, 2: ./b.js, 3: ./a.js, 4: ./entry2.js", + asyncIndex: "0: ./async.js", + asyncIndex2: "0: ./async.js" + }); + const indices = [...compilation.modules] + .map( + (m) => + /** @type {[number, Module]} */ ([ + moduleGraph.getPreOrderIndex(m), + m + ]) + ) + .filter((p) => typeof p[0] === "number") + .sort((a, b) => a[0] - b[0]) + .map( + ([i, m]) => + `${i}: ${m.readableIdentifier(compilation.requestShortener)}` + ) + .join(", "); + const indices2 = [...compilation.modules] + .map( + (m) => + /** @type {[number, Module]} */ ([ + moduleGraph.getPostOrderIndex(m), + m + ]) + ) + .filter((p) => typeof p[0] === "number") + .sort((a, b) => a[0] - b[0]) + .map( + ([i, m]) => + `${i}: ${m.readableIdentifier(compilation.requestShortener)}` + ) + .join(", "); + expect(indices).toBe( + "0: ./entry1.js, 1: ./a.js, 2: ./shared.js, 3: ./b.js, 4: ./c.js, 5: ./entry2.js, 6: ./async.js" + ); + expect(indices2).toBe( + "0: ./shared.js, 1: ./a.js, 2: ./b.js, 3: ./c.js, 4: ./entry1.js, 5: ./entry2.js, 6: ./async.js" + ); + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] +}; diff --git a/test/configCases/chunk-index/recalc-index/a.css b/test/configCases/chunk-index/recalc-index/a.css new file mode 100644 index 00000000000..5451a331f9c --- /dev/null +++ b/test/configCases/chunk-index/recalc-index/a.css @@ -0,0 +1,3 @@ +.a { + color: red; +} diff --git a/test/configCases/chunk-index/recalc-index/b.css b/test/configCases/chunk-index/recalc-index/b.css new file mode 100644 index 00000000000..c209e56a74e --- /dev/null +++ b/test/configCases/chunk-index/recalc-index/b.css @@ -0,0 +1,5 @@ +@import './a.css'; + +.b { + color: blue; +} diff --git a/test/configCases/chunk-index/recalc-index/dynamic.js b/test/configCases/chunk-index/recalc-index/dynamic.js new file mode 100644 index 00000000000..08cf4e01b3a --- /dev/null +++ b/test/configCases/chunk-index/recalc-index/dynamic.js @@ -0,0 +1,2 @@ +import './b.css' +import './a.css' diff --git a/test/configCases/chunk-index/recalc-index/index.js b/test/configCases/chunk-index/recalc-index/index.js new file mode 100644 index 00000000000..aedaa047530 --- /dev/null +++ b/test/configCases/chunk-index/recalc-index/index.js @@ -0,0 +1,3 @@ +it('should compile', async () => { + await import(/* webpackChunkName: 'dynamic' */ './dynamic') +}) diff --git a/test/configCases/chunk-index/recalc-index/webpack.config.js b/test/configCases/chunk-index/recalc-index/webpack.config.js new file mode 100644 index 00000000000..540a4b9a2ea --- /dev/null +++ b/test/configCases/chunk-index/recalc-index/webpack.config.js @@ -0,0 +1,56 @@ +"use strict"; + +/** @typedef {import("../../../../types").Compilation} Compilation */ +/** @typedef {import("../../../../types").Module} Module */ +/** @type {import("../../../../types").Configuration} */ +module.exports = { + entry: { + main: "./index.js" + }, + experiments: { + css: true + }, + plugins: [ + function apply() { + /** + * @param {Compilation} compilation compilation + * @returns {void} + */ + const handler = (compilation) => { + compilation.hooks.afterSeal.tap("testcase", () => { + /** @type {Record} */ + const data = {}; + for (const [name, group] of compilation.namedChunkGroups) { + /** @type {Map} */ + const modules = new Map(); + for (const chunk of group.chunks) { + for (const module of compilation.chunkGraph.getChunkModulesIterable( + chunk + )) { + const postOrder = group.getModulePostOrderIndex(module); + if (typeof postOrder === "number") { + modules.set(module, postOrder); + } + } + } + const sortedModules = [...modules].sort((a, b) => a[1] - b[1]); + const text = sortedModules + .map( + ([m, index]) => + `${index}: ${m.readableIdentifier( + compilation.requestShortener + )}` + ) + .join(", "); + data[`${name}Index`] = text; + } + expect(data).toEqual({ + dynamicIndex: "0: css ./a.css, 1: css ./b.css", + mainIndex: "0: ./index.js" + }); + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] +}; diff --git a/test/configCases/chunks-order/cjs/__snapshots__/ConfigCacheTest.snap b/test/configCases/chunks-order/cjs/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..75415bbba3f --- /dev/null +++ b/test/configCases/chunks-order/cjs/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,50 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases chunks-order cjs exported tests The dependOn chunk must be loaded before the common chunk. 1`] = ` +"\\"use strict\\"; +(() => { +var exports = {}; +exports.id = \\"foo\\"; +exports.ids = [\\"foo\\"]; +exports.modules = { + +/***/ 552 +/*!****************************!*\\\\ + !*** ./foo.js + 2 modules ***! + \\\\****************************/ +(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) { + + +;// external \\"fs\\" +const external_fs_namespaceObject = require(\\"fs\\"); +var external_fs_default = /*#__PURE__*/__webpack_require__.n(external_fs_namespaceObject); +// EXTERNAL MODULE: ./dependency.js +var dependency = __webpack_require__(784); +;// ./foo.js + + + + +it(\\"The dependOn chunk must be loaded before the common chunk.\\", () => { + const source = external_fs_default().readFileSync(__filename, \\"utf-8\\"); + + expect(source).toMatchSnapshot(); +}); + +/***/ } + +}; +; + +// load runtime +var __webpack_require__ = require(\\"./runtime~nested-shared.js\\"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, [\\"shared\\",\\"nested-shared\\",\\"commons-dependency_js\\"], () => (__webpack_exec__(552))); +var __webpack_export_target__ = exports; +for(var __webpack_i__ in __webpack_exports__) __webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; +if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \\"__esModule\\", { value: true }); + +})(); +//# sourceMappingURL=foo.js.map" +`; diff --git a/test/configCases/chunks-order/cjs/__snapshots__/ConfigTest.snap b/test/configCases/chunks-order/cjs/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..b795d4a1ff6 --- /dev/null +++ b/test/configCases/chunks-order/cjs/__snapshots__/ConfigTest.snap @@ -0,0 +1,50 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases chunks-order cjs exported tests The dependOn chunk must be loaded before the common chunk. 1`] = ` +"\\"use strict\\"; +(() => { +var exports = {}; +exports.id = \\"foo\\"; +exports.ids = [\\"foo\\"]; +exports.modules = { + +/***/ 552 +/*!****************************!*\\\\ + !*** ./foo.js + 2 modules ***! + \\\\****************************/ +(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) { + + +;// external \\"fs\\" +const external_fs_namespaceObject = require(\\"fs\\"); +var external_fs_default = /*#__PURE__*/__webpack_require__.n(external_fs_namespaceObject); +// EXTERNAL MODULE: ./dependency.js +var dependency = __webpack_require__(784); +;// ./foo.js + + + + +it(\\"The dependOn chunk must be loaded before the common chunk.\\", () => { + const source = external_fs_default().readFileSync(__filename, \\"utf-8\\"); + + expect(source).toMatchSnapshot(); +}); + +/***/ } + +}; +; + +// load runtime +var __webpack_require__ = require(\\"./runtime~nested-shared.js\\"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, [\\"shared\\",\\"nested-shared\\",\\"commons-dependency_js\\"], () => (__webpack_exec__(552))); +var __webpack_export_target__ = exports; +for(var __webpack_i__ in __webpack_exports__) __webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; +if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \\"__esModule\\", { value: true }); + +})(); +//# sourceMappingURL=foo.js.map" +`; diff --git a/test/configCases/chunks-order/cjs/dependency.js b/test/configCases/chunks-order/cjs/dependency.js new file mode 100644 index 00000000000..ad5c2f8c8e8 --- /dev/null +++ b/test/configCases/chunks-order/cjs/dependency.js @@ -0,0 +1,3 @@ +function doSomething() {} + +doSomething(); diff --git a/test/configCases/chunks-order/cjs/foo.js b/test/configCases/chunks-order/cjs/foo.js new file mode 100644 index 00000000000..f402b023f14 --- /dev/null +++ b/test/configCases/chunks-order/cjs/foo.js @@ -0,0 +1,9 @@ +import fs from "fs"; +import "./style.css"; +import "./dependency.js"; + +it("The dependOn chunk must be loaded before the common chunk.", () => { + const source = fs.readFileSync(__filename, "utf-8"); + + expect(source).toMatchSnapshot(); +}); \ No newline at end of file diff --git a/test/configCases/chunks-order/cjs/nested-shared.js b/test/configCases/chunks-order/cjs/nested-shared.js new file mode 100644 index 00000000000..ad5c2f8c8e8 --- /dev/null +++ b/test/configCases/chunks-order/cjs/nested-shared.js @@ -0,0 +1,3 @@ +function doSomething() {} + +doSomething(); diff --git a/test/configCases/chunks-order/cjs/shared.css b/test/configCases/chunks-order/cjs/shared.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/chunks-order/cjs/shared.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/chunks-order/cjs/shared.js b/test/configCases/chunks-order/cjs/shared.js new file mode 100644 index 00000000000..41e76705890 --- /dev/null +++ b/test/configCases/chunks-order/cjs/shared.js @@ -0,0 +1,5 @@ +import "./shared.css"; + +function doSomething() {} + +doSomething(); diff --git a/test/configCases/chunks-order/cjs/style.css b/test/configCases/chunks-order/cjs/style.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/test/configCases/chunks-order/cjs/style.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/configCases/chunks-order/cjs/test.config.js b/test/configCases/chunks-order/cjs/test.config.js new file mode 100644 index 00000000000..eab6c7867af --- /dev/null +++ b/test/configCases/chunks-order/cjs/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "runtime~nested-shared.js", + "nested-shared.js", + "shared.js", + "commons-dependency_js.js", + "foo.js" + ]; + } +}; diff --git a/test/configCases/chunks-order/cjs/webpack.config.js b/test/configCases/chunks-order/cjs/webpack.config.js new file mode 100644 index 00000000000..cf4f60d4750 --- /dev/null +++ b/test/configCases/chunks-order/cjs/webpack.config.js @@ -0,0 +1,63 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration[]} */ +module.exports = [ + { + target: "node", + entry: { + "nested-shared": { + import: "./nested-shared.js" + }, + shared: { + dependOn: "nested-shared", + import: "./shared.js?foo=bar" + }, + foo: { + dependOn: "shared", + import: "./foo.js" + } + }, + output: { + publicPath: "auto", + filename: "[name].js", + chunkFilename: "[name].[contenthash].js", + cssChunkFilename: "[name].[contenthash].css", + assetModuleFilename: "[name].[contenthash][ext][query]", + library: { + type: "commonjs" + } + }, + devtool: "source-map", + module: { + rules: [ + { + test: /\.txt$/, + type: "asset/resource" + }, + { + test: /\.png$/, + loader: "file-loader", + options: { + name: "file-loader.[ext]" + } + } + ] + }, + experiments: { + css: true + }, + optimization: { + chunkIds: "named", + splitChunks: { + cacheGroups: { + commons: { + enforce: true, + test: /dependency\.js$/, + chunks: "initial" + } + } + }, + runtimeChunk: { name: (entrypoint) => `runtime~${entrypoint.name}` } + } + } +]; diff --git a/test/configCases/chunks-order/module/__snapshots__/ConfigCacheTest.snap b/test/configCases/chunks-order/module/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..f14ba9ec107 --- /dev/null +++ b/test/configCases/chunks-order/module/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,49 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases chunks-order module exported tests The dependOn chunk must be loaded before the common chunk. 1`] = ` +"import {fileURLToPath as __webpack_fileURLToPath__} from \\"node:url\\"; +var __webpack_filename__ = __webpack_fileURLToPath__(import.meta.url); +export const __webpack_esm_id__ = \\"foo\\"; +export const __webpack_esm_ids__ = [\\"foo\\"]; +export const __webpack_esm_modules__ = { + +/***/ 353 +/*!****************!*\\\\ + !*** ./foo.js ***! + \\\\****************/ +(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) { + +/* harmony import */ var _dependency_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dependency.js */ 784); +/* harmony import */ var _dependency_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_dependency_js__WEBPACK_IMPORTED_MODULE_0__); + + + +it(\\"The dependOn chunk must be loaded before the common chunk.\\", async () => { + const fs = await eval(\`import(\\"fs\\")\`) + const source = fs.readFileSync(__webpack_filename__, \\"utf-8\\"); + + expect(source).toMatchSnapshot(); +}); + + +/***/ } + +}; +; + +// load runtime +import { __webpack_require__ } from \\"./runtime~nested-shared.mjs\\"; +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) + +import * as __webpack_chunk_1__ from \\"./shared.mjs\\"; +__webpack_require__.C(__webpack_chunk_1__); +import * as __webpack_chunk_2__ from \\"./nested-shared.mjs\\"; +__webpack_require__.C(__webpack_chunk_2__); +import * as __webpack_chunk_3__ from \\"./commons-dependency_js.mjs\\"; +__webpack_require__.C(__webpack_chunk_3__); +import * as __webpack_chunk_4__ from \\"./foo.mjs\\"; +__webpack_require__.C(__webpack_chunk_4__); +var __webpack_exports__ = __webpack_exec__(353); + +//# sourceMappingURL=foo.mjs.map" +`; diff --git a/test/configCases/chunks-order/module/__snapshots__/ConfigTest.snap b/test/configCases/chunks-order/module/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..105c02600b8 --- /dev/null +++ b/test/configCases/chunks-order/module/__snapshots__/ConfigTest.snap @@ -0,0 +1,49 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases chunks-order module exported tests The dependOn chunk must be loaded before the common chunk. 1`] = ` +"import {fileURLToPath as __webpack_fileURLToPath__} from \\"node:url\\"; +var __webpack_filename__ = __webpack_fileURLToPath__(import.meta.url); +export const __webpack_esm_id__ = \\"foo\\"; +export const __webpack_esm_ids__ = [\\"foo\\"]; +export const __webpack_esm_modules__ = { + +/***/ 353 +/*!****************!*\\\\ + !*** ./foo.js ***! + \\\\****************/ +(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) { + +/* harmony import */ var _dependency_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dependency.js */ 784); +/* harmony import */ var _dependency_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_dependency_js__WEBPACK_IMPORTED_MODULE_0__); + + + +it(\\"The dependOn chunk must be loaded before the common chunk.\\", async () => { + const fs = await eval(\`import(\\"fs\\")\`) + const source = fs.readFileSync(__webpack_filename__, \\"utf-8\\"); + + expect(source).toMatchSnapshot(); +}); + + +/***/ } + +}; +; + +// load runtime +import { __webpack_require__ } from \\"./runtime~nested-shared.mjs\\"; +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) + +import * as __webpack_chunk_1__ from \\"./shared.mjs\\"; +__webpack_require__.C(__webpack_chunk_1__); +import * as __webpack_chunk_2__ from \\"./nested-shared.mjs\\"; +__webpack_require__.C(__webpack_chunk_2__); +import * as __webpack_chunk_3__ from \\"./commons-dependency_js.mjs\\"; +__webpack_require__.C(__webpack_chunk_3__); +import * as __webpack_chunk_4__ from \\"./foo.mjs\\"; +__webpack_require__.C(__webpack_chunk_4__); +var __webpack_exports__ = __webpack_exec__(353); + +//# sourceMappingURL=foo.mjs.map" +`; diff --git a/test/configCases/chunks-order/module/dependency.js b/test/configCases/chunks-order/module/dependency.js new file mode 100644 index 00000000000..ad5c2f8c8e8 --- /dev/null +++ b/test/configCases/chunks-order/module/dependency.js @@ -0,0 +1,3 @@ +function doSomething() {} + +doSomething(); diff --git a/test/configCases/chunks-order/module/foo.js b/test/configCases/chunks-order/module/foo.js new file mode 100644 index 00000000000..11efe32efa0 --- /dev/null +++ b/test/configCases/chunks-order/module/foo.js @@ -0,0 +1,9 @@ +import "./style.css"; +import "./dependency.js"; + +it("The dependOn chunk must be loaded before the common chunk.", async () => { + const fs = await eval(`import("fs")`) + const source = fs.readFileSync(__filename, "utf-8"); + + expect(source).toMatchSnapshot(); +}); diff --git a/test/configCases/chunks-order/module/nested-shared.js b/test/configCases/chunks-order/module/nested-shared.js new file mode 100644 index 00000000000..ad5c2f8c8e8 --- /dev/null +++ b/test/configCases/chunks-order/module/nested-shared.js @@ -0,0 +1,3 @@ +function doSomething() {} + +doSomething(); diff --git a/test/configCases/chunks-order/module/shared.css b/test/configCases/chunks-order/module/shared.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/chunks-order/module/shared.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/chunks-order/module/shared.js b/test/configCases/chunks-order/module/shared.js new file mode 100644 index 00000000000..41e76705890 --- /dev/null +++ b/test/configCases/chunks-order/module/shared.js @@ -0,0 +1,5 @@ +import "./shared.css"; + +function doSomething() {} + +doSomething(); diff --git a/test/configCases/chunks-order/module/style.css b/test/configCases/chunks-order/module/style.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/test/configCases/chunks-order/module/style.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/configCases/chunks-order/module/test.config.js b/test/configCases/chunks-order/module/test.config.js new file mode 100644 index 00000000000..0c83847cfec --- /dev/null +++ b/test/configCases/chunks-order/module/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "runtime~nested-shared.mjs", + "nested-shared.mjs", + "shared.mjs", + "commons-dependency_js.mjs", + "foo.mjs" + ]; + } +}; diff --git a/test/configCases/chunks-order/module/webpack.config.js b/test/configCases/chunks-order/module/webpack.config.js new file mode 100644 index 00000000000..861a1078b42 --- /dev/null +++ b/test/configCases/chunks-order/module/webpack.config.js @@ -0,0 +1,64 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration[]} */ +module.exports = [ + { + target: "node", + entry: { + "nested-shared": { + import: "./nested-shared.js" + }, + shared: { + dependOn: "nested-shared", + import: "./shared.js?foo=bar" + }, + foo: { + dependOn: "shared", + import: "./foo.js" + } + }, + output: { + publicPath: "auto", + filename: "[name].mjs", + chunkFilename: "[name].[contenthash].mjs", + cssChunkFilename: "[name].[contenthash].css", + assetModuleFilename: "[name].[contenthash][ext][query]", + library: { + type: "module" + } + }, + devtool: "source-map", + module: { + rules: [ + { + test: /\.txt$/, + type: "asset/resource" + }, + { + test: /\.png$/, + loader: "file-loader", + options: { + name: "file-loader.[ext]" + } + } + ] + }, + experiments: { + css: true, + outputModule: true + }, + optimization: { + chunkIds: "named", + splitChunks: { + cacheGroups: { + commons: { + enforce: true, + test: /dependency\.js$/, + chunks: "initial" + } + } + }, + runtimeChunk: { name: (entrypoint) => `runtime~${entrypoint.name}` } + } + } +]; diff --git a/test/configCases/clean/dry/index.js b/test/configCases/clean/dry/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/dry/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/dry/webpack.config.js b/test/configCases/clean/dry/webpack.config.js new file mode 100644 index 00000000000..353ae5cff70 --- /dev/null +++ b/test/configCases/clean/dry/webpack.config.js @@ -0,0 +1,50 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { RawSource } = require("webpack-sources"); +const readDir = require("../enabled/readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: { + dry: true + } + }, + plugins: [ + (compiler) => { + compiler.hooks.thisCompilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap("Test", (assets) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + const customDir = path.join(outputPath, "this/dir/should/be/removed"); + fs.mkdirSync(customDir, { recursive: true }); + fs.writeFileSync(path.join(customDir, "file.ext"), ""); + assets["this/dir/should/not/be/removed/file.ext"] = new RawSource(""); + }); + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [ + "this", + "this/dir", + "this/dir/should", + "this/dir/should/not", + "this/dir/should/not/be", + "this/dir/should/not/be/removed", + "this/dir/should/be", + "this/dir/should/be/removed", + ], + "files": Array [ + "this/dir/should/not/be/removed/file.ext", + "this/dir/should/be/removed/file.ext", + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/clean/enabled/index.js b/test/configCases/clean/enabled/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/enabled/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/enabled/readdir.js b/test/configCases/clean/enabled/readdir.js new file mode 100644 index 00000000000..7724b597494 --- /dev/null +++ b/test/configCases/clean/enabled/readdir.js @@ -0,0 +1,48 @@ +const fs = require('fs'); +const path = require('path'); + +/** + * @param {string} path path + * @returns {string} path + */ +function handlePath(path) { + return path.replace(/\\/g, "/"); +} + +/** + * @param {string} from from + * @returns {{ files: string[], directories: string[] }} + */ +module.exports = function readDir(from) { + /** @type {string[]} */ + const collectedFiles = []; + /** @type {string[]} */ + const collectedDirectories = []; + const stack = [from]; + let cursor; + + while ((cursor = stack.pop())) { + const stat = fs.statSync(cursor); + + if (stat.isDirectory()) { + const items = fs.readdirSync(cursor); + + if (from !== cursor) { + const relative = path.relative(from, cursor); + collectedDirectories.push(handlePath(relative)); + } + + for (let i = 0; i < items.length; i++) { + stack.push(path.join(cursor, items[i])); + } + } else { + const relative = path.relative(from, cursor); + collectedFiles.push(handlePath(relative)); + } + } + + return { + files: collectedFiles, + directories: collectedDirectories + }; +} diff --git a/test/configCases/clean/enabled/webpack.config.js b/test/configCases/clean/enabled/webpack.config.js new file mode 100644 index 00000000000..66e6fb82e3c --- /dev/null +++ b/test/configCases/clean/enabled/webpack.config.js @@ -0,0 +1,52 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { RawSource } = require("webpack-sources"); +const readDir = require("./readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: true + }, + plugins: [ + (compiler) => { + let once = true; + compiler.hooks.thisCompilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap("Test", (assets) => { + if (once) { + const outputPath = compilation.getPath(compiler.outputPath, {}); + const customDir = path.join( + outputPath, + "this/dir/should/be/removed" + ); + fs.mkdirSync(customDir, { recursive: true }); + fs.writeFileSync(path.join(customDir, "file.ext"), ""); + once = false; + } + assets["this/dir/should/not/be/removed/file.ext"] = new RawSource(""); + }); + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [ + "this", + "this/dir", + "this/dir/should", + "this/dir/should/not", + "this/dir/should/not/be", + "this/dir/should/not/be/removed", + ], + "files": Array [ + "this/dir/should/not/be/removed/file.ext", + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/clean/ignore-fn/index.js b/test/configCases/clean/ignore-fn/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/ignore-fn/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/ignore-fn/webpack.config.js b/test/configCases/clean/ignore-fn/webpack.config.js new file mode 100644 index 00000000000..778d0ad4001 --- /dev/null +++ b/test/configCases/clean/ignore-fn/webpack.config.js @@ -0,0 +1,71 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { RawSource } = require("webpack-sources"); +const readDir = require("../enabled/readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: { + keep(asset) { + return asset.includes("ignored/dir"); + } + } + }, + plugins: [ + (compiler) => { + let once = true; + compiler.hooks.thisCompilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap("Test", (assets) => { + if (once) { + const outputPath = compilation.getPath(compiler.outputPath, {}); + const customDir = path.join( + outputPath, + "this/dir/should/be/removed" + ); + const ignoredDir = path.join( + outputPath, + "this/is/ignored/dir/that/should/not/be/removed" + ); + fs.mkdirSync(customDir, { recursive: true }); + fs.writeFileSync(path.join(customDir, "file.ext"), ""); + fs.mkdirSync(ignoredDir, { recursive: true }); + fs.writeFileSync(path.join(ignoredDir, "file.ext"), ""); + once = false; + } + assets["this/dir/should/not/be/removed/file.ext"] = new RawSource(""); + }); + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [ + "this", + "this/is", + "this/is/ignored", + "this/is/ignored/dir", + "this/is/ignored/dir/that", + "this/is/ignored/dir/that/should", + "this/is/ignored/dir/that/should/not", + "this/is/ignored/dir/that/should/not/be", + "this/is/ignored/dir/that/should/not/be/removed", + "this/dir", + "this/dir/should", + "this/dir/should/not", + "this/dir/should/not/be", + "this/dir/should/not/be/removed", + ], + "files": Array [ + "this/is/ignored/dir/that/should/not/be/removed/file.ext", + "this/dir/should/not/be/removed/file.ext", + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/clean/ignore-hook/index.js b/test/configCases/clean/ignore-hook/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/ignore-hook/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/ignore-hook/webpack.config.js b/test/configCases/clean/ignore-hook/webpack.config.js new file mode 100644 index 00000000000..458b92cefdd --- /dev/null +++ b/test/configCases/clean/ignore-hook/webpack.config.js @@ -0,0 +1,89 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { RawSource } = require("webpack-sources"); +const webpack = require("../../../../"); +const readDir = require("../enabled/readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: true + }, + plugins: [ + (compiler) => { + let once = true; + compiler.hooks.thisCompilation.tap("Test", (compilation) => { + webpack.CleanPlugin.getCompilationHooks(compilation).keep.tap( + "Test", + (asset) => { + if (/[/\\]ignored[/\\]dir[/\\]/.test(asset)) return true; + if (asset.includes("ignored/too")) return true; + } + ); + compilation.hooks.processAssets.tap("Test", (assets) => { + if (once) { + const outputPath = compilation.getPath(compiler.outputPath, {}); + const customDir = path.join( + outputPath, + "this/dir/should/be/removed" + ); + const ignoredDir = path.join( + outputPath, + "this/is/ignored/dir/that/should/not/be/removed" + ); + const ignoredTooDir = path.join( + outputPath, + "this/is/ignored/too/dir/that/should/not/be/removed" + ); + fs.mkdirSync(customDir, { recursive: true }); + fs.writeFileSync(path.join(customDir, "file.ext"), ""); + fs.mkdirSync(ignoredDir, { recursive: true }); + fs.writeFileSync(path.join(ignoredDir, "file.ext"), ""); + fs.mkdirSync(ignoredTooDir, { recursive: true }); + fs.writeFileSync(path.join(ignoredTooDir, "file.ext"), ""); + once = false; + } + assets["this/dir/should/not/be/removed/file.ext"] = new RawSource(""); + }); + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [ + "this", + "this/is", + "this/is/ignored", + "this/is/ignored/too", + "this/is/ignored/too/dir", + "this/is/ignored/too/dir/that", + "this/is/ignored/too/dir/that/should", + "this/is/ignored/too/dir/that/should/not", + "this/is/ignored/too/dir/that/should/not/be", + "this/is/ignored/too/dir/that/should/not/be/removed", + "this/is/ignored/dir", + "this/is/ignored/dir/that", + "this/is/ignored/dir/that/should", + "this/is/ignored/dir/that/should/not", + "this/is/ignored/dir/that/should/not/be", + "this/is/ignored/dir/that/should/not/be/removed", + "this/dir", + "this/dir/should", + "this/dir/should/not", + "this/dir/should/not/be", + "this/dir/should/not/be/removed", + ], + "files": Array [ + "this/is/ignored/too/dir/that/should/not/be/removed/file.ext", + "this/is/ignored/dir/that/should/not/be/removed/file.ext", + "this/dir/should/not/be/removed/file.ext", + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/clean/ignore-rx/index.js b/test/configCases/clean/ignore-rx/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/ignore-rx/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/ignore-rx/webpack.config.js b/test/configCases/clean/ignore-rx/webpack.config.js new file mode 100644 index 00000000000..5b4291ed344 --- /dev/null +++ b/test/configCases/clean/ignore-rx/webpack.config.js @@ -0,0 +1,69 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { RawSource } = require("webpack-sources"); +const readDir = require("../enabled/readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: { + keep: /[/\\]ignored[/\\]dir[/\\]/ + } + }, + plugins: [ + (compiler) => { + let once = true; + compiler.hooks.thisCompilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap("Test", (assets) => { + if (once) { + const outputPath = compilation.getPath(compiler.outputPath, {}); + const customDir = path.join( + outputPath, + "this/dir/should/be/removed" + ); + const ignoredDir = path.join( + outputPath, + "this/is/ignored/dir/that/should/not/be/removed" + ); + fs.mkdirSync(customDir, { recursive: true }); + fs.writeFileSync(path.join(customDir, "file.ext"), ""); + fs.mkdirSync(ignoredDir, { recursive: true }); + fs.writeFileSync(path.join(ignoredDir, "file.ext"), ""); + once = false; + } + assets["this/dir/should/not/be/removed/file.ext"] = new RawSource(""); + }); + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [ + "this", + "this/is", + "this/is/ignored", + "this/is/ignored/dir", + "this/is/ignored/dir/that", + "this/is/ignored/dir/that/should", + "this/is/ignored/dir/that/should/not", + "this/is/ignored/dir/that/should/not/be", + "this/is/ignored/dir/that/should/not/be/removed", + "this/dir", + "this/dir/should", + "this/dir/should/not", + "this/dir/should/not/be", + "this/dir/should/not/be/removed", + ], + "files": Array [ + "this/is/ignored/dir/that/should/not/be/removed/file.ext", + "this/dir/should/not/be/removed/file.ext", + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/clean/lib-manifest-plugin/index.js b/test/configCases/clean/lib-manifest-plugin/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/lib-manifest-plugin/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/lib-manifest-plugin/readdir.js b/test/configCases/clean/lib-manifest-plugin/readdir.js new file mode 100644 index 00000000000..7724b597494 --- /dev/null +++ b/test/configCases/clean/lib-manifest-plugin/readdir.js @@ -0,0 +1,48 @@ +const fs = require('fs'); +const path = require('path'); + +/** + * @param {string} path path + * @returns {string} path + */ +function handlePath(path) { + return path.replace(/\\/g, "/"); +} + +/** + * @param {string} from from + * @returns {{ files: string[], directories: string[] }} + */ +module.exports = function readDir(from) { + /** @type {string[]} */ + const collectedFiles = []; + /** @type {string[]} */ + const collectedDirectories = []; + const stack = [from]; + let cursor; + + while ((cursor = stack.pop())) { + const stat = fs.statSync(cursor); + + if (stat.isDirectory()) { + const items = fs.readdirSync(cursor); + + if (from !== cursor) { + const relative = path.relative(from, cursor); + collectedDirectories.push(handlePath(relative)); + } + + for (let i = 0; i < items.length; i++) { + stack.push(path.join(cursor, items[i])); + } + } else { + const relative = path.relative(from, cursor); + collectedFiles.push(handlePath(relative)); + } + } + + return { + files: collectedFiles, + directories: collectedDirectories + }; +} diff --git a/test/configCases/clean/lib-manifest-plugin/webpack.config.js b/test/configCases/clean/lib-manifest-plugin/webpack.config.js new file mode 100644 index 00000000000..1e3ae36eab3 --- /dev/null +++ b/test/configCases/clean/lib-manifest-plugin/webpack.config.js @@ -0,0 +1,35 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); +const readDir = require("./readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: true + }, + plugins: [ + (compiler) => { + compiler.hooks.thisCompilation.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + new webpack.DllPlugin({ + name: "[name]_dll", + path: path.resolve(outputPath, "manifest.json") + }).apply(compiler); + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [], + "files": Array [ + "manifest.json", + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/clean/link/index.js b/test/configCases/clean/link/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/clean/link/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/clean/link/test.filter.js b/test/configCases/clean/link/test.filter.js new file mode 100644 index 00000000000..8ba5dc94751 --- /dev/null +++ b/test/configCases/clean/link/test.filter.js @@ -0,0 +1,18 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = () => { + try { + fs.symlinkSync( + path.join(__dirname, "index.js"), + path.join(__dirname, ".testlink"), + "file" + ); + fs.unlinkSync(path.join(__dirname, ".testlink")); + return true; + } catch (_err) { + return false; + } +}; diff --git a/test/configCases/clean/link/webpack.config.js b/test/configCases/clean/link/webpack.config.js new file mode 100644 index 00000000000..db7deb809a7 --- /dev/null +++ b/test/configCases/clean/link/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const readDir = require("../enabled/readdir"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + clean: true + }, + plugins: [ + (compiler) => { + let once = true; + compiler.hooks.environment.tap("Test", () => { + if (once) { + const outputPath = + /** @type {string} */ + (compiler.options.output.path); + const originalPath = path.join(outputPath, "file.ext"); + fs.writeFileSync(originalPath, ""); + const customDir = path.join(outputPath, "this/dir/should/be/removed"); + fs.mkdirSync(customDir, { recursive: true }); + fs.symlinkSync( + originalPath, + path.join(customDir, "file-link.ext"), + "file" + ); + once = false; + } + }); + compiler.hooks.afterEmit.tap("Test", (compilation) => { + const outputPath = compilation.getPath(compiler.outputPath, {}); + expect(readDir(outputPath)).toMatchInlineSnapshot(` + Object { + "directories": Array [], + "files": Array [ + "bundle0.js", + ], + } + `); + }); + } + ] +}; diff --git a/test/configCases/code-generation/harmony-pure-default/index.js b/test/configCases/code-generation/harmony-pure-default/index.js new file mode 100644 index 00000000000..118a3f377a4 --- /dev/null +++ b/test/configCases/code-generation/harmony-pure-default/index.js @@ -0,0 +1,11 @@ +import { value as v1 } from "./module1"; +import { value as v2 } from "./module2"; +import { value as v3 } from "./module3"; +import { value as v4 } from "./module4"; + +it("should not execute exports when annotated with pure comment", () => { + expect(v1).toBe(42); + expect(v2).toBe(42); + expect(v3).toBe(42); + expect(v4).toBe(42); +}); diff --git a/test/configCases/code-generation/harmony-pure-default/module1.js b/test/configCases/code-generation/harmony-pure-default/module1.js new file mode 100644 index 00000000000..ff5746bdac4 --- /dev/null +++ b/test/configCases/code-generation/harmony-pure-default/module1.js @@ -0,0 +1,9 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export default /*#__PURE__*/inc(); + +export { value }; diff --git a/test/configCases/code-generation/harmony-pure-default/module2.js b/test/configCases/code-generation/harmony-pure-default/module2.js new file mode 100644 index 00000000000..cf69c28f83d --- /dev/null +++ b/test/configCases/code-generation/harmony-pure-default/module2.js @@ -0,0 +1,9 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export default (/*#__PURE__*/inc()); + +export { value }; diff --git a/test/configCases/code-generation/harmony-pure-default/module3.js b/test/configCases/code-generation/harmony-pure-default/module3.js new file mode 100644 index 00000000000..e7e874cd6d3 --- /dev/null +++ b/test/configCases/code-generation/harmony-pure-default/module3.js @@ -0,0 +1,9 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export default /*#__PURE__*/(inc()); + +export { value }; diff --git a/test/configCases/code-generation/harmony-pure-default/module4.js b/test/configCases/code-generation/harmony-pure-default/module4.js new file mode 100644 index 00000000000..c312ca1772a --- /dev/null +++ b/test/configCases/code-generation/harmony-pure-default/module4.js @@ -0,0 +1,15 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export +// hello +default +// world +/*#__PURE__*/ +inc() +; + +export { value }; diff --git a/test/configCases/code-generation/harmony-pure-default/webpack.config.js b/test/configCases/code-generation/harmony-pure-default/webpack.config.js new file mode 100644 index 00000000000..0e3ca724282 --- /dev/null +++ b/test/configCases/code-generation/harmony-pure-default/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + optimization: { + minimize: true, + concatenateModules: false + } +}; diff --git a/test/configCases/code-generation/import-export-format-2/cjs-module.js b/test/configCases/code-generation/import-export-format-2/cjs-module.js new file mode 100644 index 00000000000..1286372d8b3 --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/cjs-module.js @@ -0,0 +1,3 @@ +const foo = 42; + +module.exports = { foo }; diff --git a/test/configCases/code-generation/import-export-format-2/export-default-expression.js b/test/configCases/code-generation/import-export-format-2/export-default-expression.js new file mode 100644 index 00000000000..db070255f2c --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/export-default-expression.js @@ -0,0 +1,3 @@ +const ___CSS_LOADER_EXPORT___ = {}; +___CSS_LOADER_EXPORT___.locals = {}; +export default ___CSS_LOADER_EXPORT___; diff --git a/test/configCases/code-generation/import-export-format-2/harmony-module-2.js b/test/configCases/code-generation/import-export-format-2/harmony-module-2.js new file mode 100644 index 00000000000..4cd5fd6fb2e --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/harmony-module-2.js @@ -0,0 +1,10 @@ +export const baz = 11; + +import { mod3 } from "./index"; + +function test(value) { + return value; +} + +test(mod3.apple); + diff --git a/test/configCases/code-generation/import-export-format-2/harmony-module-3.js b/test/configCases/code-generation/import-export-format-2/harmony-module-3.js new file mode 100644 index 00000000000..11dbbe78d28 --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/harmony-module-3.js @@ -0,0 +1 @@ +export var apple = 45; diff --git a/test/configCases/code-generation/import-export-format-2/harmony-module.js b/test/configCases/code-generation/import-export-format-2/harmony-module.js new file mode 100644 index 00000000000..b4f6c9f9a65 --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/harmony-module.js @@ -0,0 +1,5 @@ +export const bar = 42; + +const def = -12; +export default def; + diff --git a/test/configCases/code-generation/import-export-format-2/index.js b/test/configCases/code-generation/import-export-format-2/index.js new file mode 100644 index 00000000000..ed0e03c8b34 --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/index.js @@ -0,0 +1,50 @@ +import { foo as cjsexport_harmonyimport } from "./cjs-module"; +import theDefault, { bar as harmonyexport_harmonyimport } from "./harmony-module"; +import theDefaultExpression from "./export-default-expression"; +const { harmonyexport_cjsimport } = require("./harmony-module").bar; +const harmonyexport_cjsimportdefault = require("./export-default-expression").default; +import { baz as harmonyexport_harmonyimport_2 } from "./harmony-module-2"; + +import * as mod3 from "./harmony-module-3"; +export { mod3 }; +export { theDefaultExpression } + +const { expectSourceToContain, expectSourceToMatch } = require("../../../helpers/expectSource"); +const regexEscape = require("../../../helpers/regexEscape.js"); + +// It's important to use propertyName when generating object members to ensure that the exported property name +// uses the same accessor syntax (quotes vs. dot notatation) as the imported property name on the other end +// (which needs to use propertyAccess). Else, minifiers such as Closure Compiler will not be able to minify correctly. +it("should use the same accessor syntax for import and export", function() { + + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8").toString(); + + // Reference these imports to generate uses in the source. + + cjsexport_harmonyimport; + harmonyexport_harmonyimport; + harmonyexport_cjsimport; + harmonyexport_harmonyimport_2; + theDefault; + theDefaultExpression; + harmonyexport_cjsimportdefault; + + /*********** DO NOT MATCH BELOW THIS LINE ***********/ + + // Checking harmonyexportinitfragment.js formation of standard export fragment + expectSourceToContain(source, "/* harmony export */ bar: () => (/* binding */ bar)"); + + // Checking formation of imports + expectSourceToMatch(source, `${regexEscape("const { harmonyexport_cjsimport } = (__webpack_require__(/*! ./harmony-module */ ")}\\d+${regexEscape(").bar);")}`); + expectSourceToMatch(source, `${regexEscape("const harmonyexport_cjsimportdefault = (__webpack_require__(/*! ./export-default-expression */ ")}\\d+${regexEscape(")[\"default\"]);")}`); + + // Checking concatenatedmodule.js formation of exports + expectSourceToContain(source, "mod3: () => (/* reexport */ harmony_module_3_namespaceObject)"); + + // Checking concatenatedmodule.js formation of namespace objects + expectSourceToContain(source, "apple: () => (apple)"); + + // Do not break default option + expectSourceToContain(source, "[\"default\"] = (___CSS_LOADER_EXPORT___)"); +}); diff --git a/test/configCases/code-generation/import-export-format-2/webpack.config.js b/test/configCases/code-generation/import-export-format-2/webpack.config.js new file mode 100644 index 00000000000..bbcd401f715 --- /dev/null +++ b/test/configCases/code-generation/import-export-format-2/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + environment: { + arrowFunction: true, + bigIntLiteral: false, + const: false, + destructuring: false, + forOf: false, + dynamicImport: true, + module: false + } + }, + node: { + __dirname: false, + __filename: false + }, + optimization: { + concatenateModules: true, + usedExports: true, + providedExports: true, + minimize: false, + mangleExports: false + } +}; diff --git a/test/configCases/code-generation/import-export-format/cjs-module.js b/test/configCases/code-generation/import-export-format/cjs-module.js new file mode 100644 index 00000000000..1286372d8b3 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/cjs-module.js @@ -0,0 +1,3 @@ +const foo = 42; + +module.exports = { foo }; diff --git a/test/configCases/code-generation/import-export-format/harmony-module-2.js b/test/configCases/code-generation/import-export-format/harmony-module-2.js new file mode 100644 index 00000000000..4cd5fd6fb2e --- /dev/null +++ b/test/configCases/code-generation/import-export-format/harmony-module-2.js @@ -0,0 +1,10 @@ +export const baz = 11; + +import { mod3 } from "./index"; + +function test(value) { + return value; +} + +test(mod3.apple); + diff --git a/test/configCases/code-generation/import-export-format/harmony-module-3.js b/test/configCases/code-generation/import-export-format/harmony-module-3.js new file mode 100644 index 00000000000..11dbbe78d28 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/harmony-module-3.js @@ -0,0 +1 @@ +export var apple = 45; diff --git a/test/configCases/code-generation/import-export-format/harmony-module.js b/test/configCases/code-generation/import-export-format/harmony-module.js new file mode 100644 index 00000000000..b4f6c9f9a65 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/harmony-module.js @@ -0,0 +1,5 @@ +export const bar = 42; + +const def = -12; +export default def; + diff --git a/test/configCases/code-generation/import-export-format/index.js b/test/configCases/code-generation/import-export-format/index.js new file mode 100644 index 00000000000..8e4e4fbff43 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/index.js @@ -0,0 +1,44 @@ +import { foo as cjsexport_harmonyimport } from "./cjs-module"; +import theDefault, { bar as harmonyexport_harmonyimport } from "./harmony-module"; +const { harmonyexport_cjsimport } = require("./harmony-module").bar; +import { baz as harmonyexport_harmonyimport_2 } from "./harmony-module-2"; + +import * as mod3 from "./harmony-module-3"; +export { mod3 }; + +const { expectSourceToContain, expectSourceToMatch } = require("../../../helpers/expectSource"); +const regexEscape = require("../../../helpers/regexEscape.js"); + +// It's important to use propertyName when generating object members to ensure that the exported property name +// uses the same accessor syntax (quotes vs. dot notation) as the imported property name on the other end +// (which needs to use propertyAccess). Else, minifiers such as Closure Compiler will not be able to minify correctly. +it("should use the same accessor syntax for import and export", function() { + + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8").toString(); + + // Reference these imports to generate uses in the source. + + cjsexport_harmonyimport; + harmonyexport_harmonyimport; + harmonyexport_cjsimport; + harmonyexport_harmonyimport_2; + theDefault; + + /*********** DO NOT MATCH BELOW THIS LINE ***********/ + + // Note that there are no quotes around the "a" and "b" properties in the following lines. + + // Checking harmonyexportinitfragment.js formation of standard export fragment + expectSourceToContain(source, "/* harmony export */ a: () => (/* binding */ bar)"); + + // Checking formation of imports + expectSourceToContain(source, "harmony_module/* bar */.a;"); + expectSourceToMatch(source, `${regexEscape("const { harmonyexport_cjsimport } = (__webpack_require__(/*! ./harmony-module */ ")}\\d+${regexEscape(")/* .bar */ .a);")}`); + + // Checking concatenatedmodule.js formation of exports + expectSourceToContain(source, "a: () => (/* reexport */ harmony_module_3_namespaceObject)"); + + // Checking concatenatedmodule.js formation of namespace objects + expectSourceToContain(source, "a: () => (apple)"); +}); diff --git a/test/configCases/code-generation/import-export-format/webpack.config.js b/test/configCases/code-generation/import-export-format/webpack.config.js new file mode 100644 index 00000000000..9e7f400a932 --- /dev/null +++ b/test/configCases/code-generation/import-export-format/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + optimization: { + concatenateModules: true, + usedExports: true, + providedExports: true, + minimize: false, + mangleExports: "size" + } +}; diff --git a/test/configCases/code-generation/re-export-namespace-concat/data.json b/test/configCases/code-generation/re-export-namespace-concat/data.json new file mode 100644 index 00000000000..7726aedd0c5 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/data.json @@ -0,0 +1,5 @@ +{ + "nested": { + "object3": {} + } +} diff --git a/test/configCases/code-generation/re-export-namespace-concat/index.js b/test/configCases/code-generation/re-export-namespace-concat/index.js new file mode 100644 index 00000000000..37eb0a558f5 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/index.js @@ -0,0 +1,83 @@ +import { obj1 } from './module1'; +import * as m_1 from './module1'; +import * as m_2 from './module2'; +import * as m_3 from './module3'; +import data from "./data"; + +const { expectSourceToContain } = require("../../../helpers/expectSource"); + +// It's important to preserve the same accessor syntax (quotes vs. dot notatation) after the actual export variable. +// Else, minifiers such as Closure Compiler will not be able to minify correctly in ADVANCED mode. + +it("should use/preserve accessor form for import object and namespaces", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8").toString(); + + // Reference the imports to generate uses in the source. + + const f = false; + if (f) { + const x1 = m_1; + const x2 = obj1; + + const z1 = obj1["plants"]; + const z2 = obj1["funcs"](); + const z3 = m_1["obj1"]["pots"]; + const z4 = m_1["obj1"]["subs"](); + + const a = m_2["m_1"].obj1["flip"].flap; + const b = m_2["m_1"]["obj1"].zip["zap"]; + const c = m_2.m_1.obj1["ding"].dong(); + const d = m_2.m_1["obj1"].sing["song"](); + + const aa = m_3["m_2"].m_1["obj1"]["zoom"]; + + const bb = obj1.up.down?.left.right; + + const ww = require('./module1').obj1["bing"]?.bang; + const xx = require('./module1').obj1["pip"].pop(); + const yy = require('./module3')["m_2"]["m_1"]["obj1"]["tip"].top(); + + data.nested.object3["unknownProperty"].depth = "deep"; + + (obj1)["aaa"].bbb; + (m_1.obj1)["ccc"].ddd; + (obj1["eee"]).fff; + (m_1.obj1["ggg"]).hhh; + (((m_1).obj1)["iii"]).jjj; + } + + /************ DO NOT MATCH BELOW THIS LINE ************/ + + // Imported objects and import namespaces should use dot notation. Any references to the properties of exports + // should be preserved as either quotes or dot notation, depending on the original source. + + expectSourceToContain(source, 'const x1 = module1;'); + expectSourceToContain(source, 'const x2 = module1.obj1;'); + + expectSourceToContain(source, 'const z1 = module1.obj1["plants"];'); + expectSourceToContain(source, 'const z2 = module1.obj1["funcs"]();'); + expectSourceToContain(source, 'const z3 = module1.obj1["pots"];'); + expectSourceToContain(source, 'const z4 = module1.obj1["subs"]();'); + + expectSourceToContain(source, 'const a = module2/* m_1.obj1 */.a.obj1["flip"].flap;'); + expectSourceToContain(source, 'const b = module2/* m_1.obj1 */.a.obj1.zip["zap"];'); + expectSourceToContain(source, 'const c = module2/* m_1.obj1 */.a.obj1["ding"].dong();'); + expectSourceToContain(source, 'const d = module2/* m_1.obj1 */.a.obj1.sing["song"]();'); + + expectSourceToContain(source, 'const aa = module3/* m_2.m_1.obj1 */.a.a.obj1["zoom"];'); + + expectSourceToContain(source, 'const bb = module1.obj1.up.down?.left.right;'); + + expectSourceToContain(source, 'const ww = (__webpack_require__(/*! ./module1 */ 602).obj1)["bing"]?.bang;'); + expectSourceToContain(source, 'const xx = (__webpack_require__(/*! ./module1 */ 602).obj1)["pip"].pop();'); + expectSourceToContain(source, 'const yy = (__webpack_require__(/*! ./module3 */ 144)/* .m_2.m_1.obj1 */ .a.a.obj1)["tip"].top();'); + + expectSourceToContain(source, 'data_namespaceObject.a.a["unknownProperty"].depth = "deep";'); + + expectSourceToContain(source, '(module1.obj1)["aaa"].bbb;'); + expectSourceToContain(source, '(module1.obj1)["ccc"].ddd;'); + expectSourceToContain(source, '(module1.obj1["eee"]).fff;'); + expectSourceToContain(source, '(module1.obj1["ggg"]).hhh;'); + expectSourceToContain(source, '((module1.obj1)["iii"]).jjj;'); +}); diff --git a/test/configCases/code-generation/re-export-namespace-concat/module1.js b/test/configCases/code-generation/re-export-namespace-concat/module1.js new file mode 100644 index 00000000000..e85ec664386 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/module1.js @@ -0,0 +1,3 @@ +export const obj1 = {}; + +export default { obj2: {} }; diff --git a/test/configCases/code-generation/re-export-namespace-concat/module2.js b/test/configCases/code-generation/re-export-namespace-concat/module2.js new file mode 100644 index 00000000000..a91c5e7a055 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/module2.js @@ -0,0 +1,2 @@ +import * as m1 from './module1'; +export { m1 as m_1 }; diff --git a/test/configCases/code-generation/re-export-namespace-concat/module3.js b/test/configCases/code-generation/re-export-namespace-concat/module3.js new file mode 100644 index 00000000000..cf0e8cd08d8 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/module3.js @@ -0,0 +1,2 @@ +import * as m2 from './module2'; +export { m2 as m_2 }; diff --git a/test/configCases/code-generation/re-export-namespace-concat/test.filter.js b/test/configCases/code-generation/re-export-namespace-concat/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/configCases/code-generation/re-export-namespace-concat/webpack.config.js b/test/configCases/code-generation/re-export-namespace-concat/webpack.config.js new file mode 100644 index 00000000000..989e9f705d3 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace-concat/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + mode: "production", + optimization: { + mangleExports: "size" + } +}; diff --git a/test/configCases/code-generation/re-export-namespace/data.json b/test/configCases/code-generation/re-export-namespace/data.json new file mode 100644 index 00000000000..7726aedd0c5 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/data.json @@ -0,0 +1,5 @@ +{ + "nested": { + "object3": {} + } +} diff --git a/test/configCases/code-generation/re-export-namespace/index.js b/test/configCases/code-generation/re-export-namespace/index.js new file mode 100644 index 00000000000..376c4287873 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/index.js @@ -0,0 +1,83 @@ +import { obj1 } from './module1'; +import * as m_1 from './module1'; +import * as m_2 from './module2'; +import * as m_3 from './module3'; +import data from "./data"; + +const { expectSourceToContain } = require("../../../helpers/expectSource"); + +// It's important to preserve the same accessor syntax (quotes vs. dot notatation) after the actual export variable. +// Else, minifiers such as Closure Compiler will not be able to minify correctly in ADVANCED mode. + +it("should use/preserve accessor form for import object and namespaces", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8").toString(); + + // Reference the imports to generate uses in the source. + + const f = false; + if (f) { + const x1 = m_1; + const x2 = obj1; + + const z1 = obj1["plants"]; + const z2 = obj1["funcs"](); + const z3 = m_1["obj1"]["pots"]; + const z4 = m_1["obj1"]["subs"](); + + const a = m_2["m_1"].obj1["flip"].flap; + const b = m_2["m_1"]["obj1"].zip["zap"]; + const c = m_2.m_1.obj1["ding"].dong(); + const d = m_2.m_1["obj1"].sing["song"](); + + const aa = m_3["m_2"].m_1["obj1"]["zoom"]; + + const bb = obj1.up.down?.left.right; + + const ww = require('./module1').obj1["bing"]?.bang; + const xx = require('./module1').obj1["pip"].pop(); + const yy = require('./module3')["m_2"]["m_1"]["obj1"]["tip"].top(); + + data.nested.object3["unknownProperty"].depth = "deep"; + + (obj1)["aaa"].bbb; + (m_1.obj1)["ccc"].ddd; + (obj1["eee"]).fff; + (m_1.obj1["ggg"]).hhh; + (((m_1).obj1)["iii"]).jjj; + } + + /************ DO NOT MATCH BELOW THIS LINE ************/ + + // Imported objects and import namespaces should use dot notation. Any references to the properties of exports + // should be preserved as either quotes or dot notation, depending on the original source. + + expectSourceToContain(source, 'const x1 = _module1__WEBPACK_IMPORTED_MODULE_0__;'); + expectSourceToContain(source, 'const x2 = _module1__WEBPACK_IMPORTED_MODULE_0__.obj1;'); + + expectSourceToContain(source, 'const z1 = _module1__WEBPACK_IMPORTED_MODULE_0__.obj1["plants"];'); + expectSourceToContain(source, 'const z2 = _module1__WEBPACK_IMPORTED_MODULE_0__.obj1["funcs"]();'); + expectSourceToContain(source, 'const z3 = _module1__WEBPACK_IMPORTED_MODULE_0__.obj1["pots"];'); + expectSourceToContain(source, 'const z4 = _module1__WEBPACK_IMPORTED_MODULE_0__.obj1["subs"]();'); + + expectSourceToContain(source, 'const a = _module2__WEBPACK_IMPORTED_MODULE_1__.m_1.obj1["flip"].flap;'); + expectSourceToContain(source, 'const b = _module2__WEBPACK_IMPORTED_MODULE_1__.m_1.obj1.zip["zap"];'); + expectSourceToContain(source, 'const c = _module2__WEBPACK_IMPORTED_MODULE_1__.m_1.obj1["ding"].dong();'); + expectSourceToContain(source, 'const d = _module2__WEBPACK_IMPORTED_MODULE_1__.m_1.obj1.sing["song"]();'); + + expectSourceToContain(source, 'const aa = _module3__WEBPACK_IMPORTED_MODULE_2__.m_2.m_1.obj1["zoom"];'); + + expectSourceToContain(source, 'const bb = _module1__WEBPACK_IMPORTED_MODULE_0__.obj1.up.down?.left.right;'); + + expectSourceToContain(source, 'const ww = (__webpack_require__(/*! ./module1 */ 602).obj1)["bing"]?.bang;'); + expectSourceToContain(source, 'const xx = (__webpack_require__(/*! ./module1 */ 602).obj1)["pip"].pop();'); + expectSourceToContain(source, 'const yy = (__webpack_require__(/*! ./module3 */ 144).m_2.m_1.obj1)["tip"].top();'); + + expectSourceToContain(source, '_data__WEBPACK_IMPORTED_MODULE_3__.nested.object3["unknownProperty"].depth = "deep";'); + + expectSourceToContain(source, '(_module1__WEBPACK_IMPORTED_MODULE_0__.obj1)["aaa"].bbb;'); + expectSourceToContain(source, '(_module1__WEBPACK_IMPORTED_MODULE_0__.obj1)["ccc"].ddd;'); + expectSourceToContain(source, '(_module1__WEBPACK_IMPORTED_MODULE_0__.obj1["eee"]).fff;'); + expectSourceToContain(source, '(_module1__WEBPACK_IMPORTED_MODULE_0__.obj1["ggg"]).hhh;'); + expectSourceToContain(source, '((_module1__WEBPACK_IMPORTED_MODULE_0__.obj1)["iii"]).jjj;'); +}); diff --git a/test/configCases/code-generation/re-export-namespace/module1.js b/test/configCases/code-generation/re-export-namespace/module1.js new file mode 100644 index 00000000000..e85ec664386 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/module1.js @@ -0,0 +1,3 @@ +export const obj1 = {}; + +export default { obj2: {} }; diff --git a/test/configCases/code-generation/re-export-namespace/module2.js b/test/configCases/code-generation/re-export-namespace/module2.js new file mode 100644 index 00000000000..a91c5e7a055 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/module2.js @@ -0,0 +1,2 @@ +import * as m1 from './module1'; +export { m1 as m_1 }; diff --git a/test/configCases/code-generation/re-export-namespace/module3.js b/test/configCases/code-generation/re-export-namespace/module3.js new file mode 100644 index 00000000000..cf0e8cd08d8 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/module3.js @@ -0,0 +1,2 @@ +import * as m2 from './module2'; +export { m2 as m_2 }; diff --git a/test/configCases/code-generation/re-export-namespace/test.filter.js b/test/configCases/code-generation/re-export-namespace/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/configCases/code-generation/re-export-namespace/webpack.config.js b/test/configCases/code-generation/re-export-namespace/webpack.config.js new file mode 100644 index 00000000000..56c2272fe51 --- /dev/null +++ b/test/configCases/code-generation/re-export-namespace/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + optimization: { + concatenateModules: false, + usedExports: true, + providedExports: true, + minimize: false, + mangleExports: false + } +}; diff --git a/test/configCases/code-generation/require-context-id/warnings.js b/test/configCases/code-generation/require-context-id/warnings.js new file mode 100644 index 00000000000..fdcecb3be97 --- /dev/null +++ b/test/configCases/code-generation/require-context-id/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/hashed/, /deprecated/]]; diff --git a/test/configCases/code-generation/require-context-id/webpack.config.js b/test/configCases/code-generation/require-context-id/webpack.config.js index 68fbeb15750..ecd9cf88c1f 100644 --- a/test/configCases/code-generation/require-context-id/webpack.config.js +++ b/test/configCases/code-generation/require-context-id/webpack.config.js @@ -1,4 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { - plugins: [new webpack.HashedModuleIdsPlugin()] + optimization: { + moduleIds: "hashed" + } }; diff --git a/test/configCases/code-generation/use-strict/index.js b/test/configCases/code-generation/use-strict/index.js index cf05674bee8..f5d77f70844 100644 --- a/test/configCases/code-generation/use-strict/index.js +++ b/test/configCases/code-generation/use-strict/index.js @@ -7,20 +7,15 @@ it("should include only one use strict per module", function() { var fs = require("fs"); var source = fs.readFileSync(__filename, "utf-8"); - var regExp = /\"use strict\";?\s*(.*)/g + var regExp = /\"use strict\";?\s*(.*)/g; var match = regExp.exec(source); var matches = []; - while(match) { + while (match) { matches.push(match[1]); match = regExp.exec(source); } - expect(matches).toEqual([ - "__webpack_require__.r(__webpack_exports__);", - "/* unused harmony default export */ var _unused_webpack_default_export = (\"a\");", - "__webpack_require__.r(__webpack_exports__);", - "__webpack_require__.r(__webpack_exports__);", - "__webpack_require__.r(__webpack_exports__);", - "it(\"should include only one use strict per module\", function() {", - ]); + matches.sort(); + + expect(matches).toEqual(["/******/ var __webpack_modules__ = ({"]); }); diff --git a/test/configCases/code-generation/use-strict/webpack.config.js b/test/configCases/code-generation/use-strict/webpack.config.js index 430664cf30e..50b4230e7a4 100644 --- a/test/configCases/code-generation/use-strict/webpack.config.js +++ b/test/configCases/code-generation/use-strict/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { node: { __dirname: false, diff --git a/test/configCases/commons-chunk-plugin/correct-order/test.config.js b/test/configCases/commons-chunk-plugin/correct-order/test.config.js deleted file mode 100644 index 4b70a8281d9..00000000000 --- a/test/configCases/commons-chunk-plugin/correct-order/test.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./vendor.js", - "./main.js" - ] - } -}; diff --git a/test/configCases/commons-chunk-plugin/correct-order/webpack.config.js b/test/configCases/commons-chunk-plugin/correct-order/webpack.config.js deleted file mode 100644 index cc7e99cd653..00000000000 --- a/test/configCases/commons-chunk-plugin/correct-order/webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - entry: { - vendor: ["./a"], - main: "./index" - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 1, - name: "vendor" - } - } -}; diff --git a/test/configCases/commons-chunk-plugin/extract-async-from-entry/test.config.js b/test/configCases/commons-chunk-plugin/extract-async-from-entry/test.config.js deleted file mode 100644 index a1fa7e16f53..00000000000 --- a/test/configCases/commons-chunk-plugin/extract-async-from-entry/test.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./main.js" - ]; - } -}; diff --git a/test/configCases/commons-chunk-plugin/extract-async-from-entry/webpack.config.js b/test/configCases/commons-chunk-plugin/extract-async-from-entry/webpack.config.js deleted file mode 100644 index 39260c23ca3..00000000000 --- a/test/configCases/commons-chunk-plugin/extract-async-from-entry/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - entry: { - main: "./index", - second: "./index" - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 1 - } - } -}; diff --git a/test/configCases/commons-chunk-plugin/hot-multi/first.js b/test/configCases/commons-chunk-plugin/hot-multi/first.js deleted file mode 100644 index 751a8042f9f..00000000000 --- a/test/configCases/commons-chunk-plugin/hot-multi/first.js +++ /dev/null @@ -1,6 +0,0 @@ -require("./common"); - -it("should have the correct main flag for multi first module", function() { - var multiModule = __webpack_require__.c[module.parents[0]]; - expect(multiModule.hot._main).toBe(true); -}); diff --git a/test/configCases/commons-chunk-plugin/hot-multi/second.js b/test/configCases/commons-chunk-plugin/hot-multi/second.js deleted file mode 100644 index fd42f814811..00000000000 --- a/test/configCases/commons-chunk-plugin/hot-multi/second.js +++ /dev/null @@ -1,6 +0,0 @@ -require("./common"); - -it("should have the correct main flag for multi second module", function() { - var multiModule = __webpack_require__.c[module.parents[0]]; - expect(multiModule.hot._main).toBe(true); -}); diff --git a/test/configCases/commons-chunk-plugin/hot-multi/test.config.js b/test/configCases/commons-chunk-plugin/hot-multi/test.config.js deleted file mode 100644 index 221de612c0b..00000000000 --- a/test/configCases/commons-chunk-plugin/hot-multi/test.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./vendor.js", - "./first.js", - "./second.js" - ] - } -}; diff --git a/test/configCases/commons-chunk-plugin/hot-multi/vendor.js b/test/configCases/commons-chunk-plugin/hot-multi/vendor.js deleted file mode 100644 index abba7de3a31..00000000000 --- a/test/configCases/commons-chunk-plugin/hot-multi/vendor.js +++ /dev/null @@ -1,8 +0,0 @@ -require("./common"); - -module.exports = "vendor"; - -it("should have the correct main flag for multi vendor module", function() { - var multiModule = __webpack_require__.c[module.parents[0]]; - expect(multiModule.hot._main).toBe(true); -}); diff --git a/test/configCases/commons-chunk-plugin/hot-multi/webpack.config.js b/test/configCases/commons-chunk-plugin/hot-multi/webpack.config.js deleted file mode 100644 index 55d33b816d0..00000000000 --- a/test/configCases/commons-chunk-plugin/hot-multi/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -var HotModuleReplacementPlugin = require("../../../../lib/HotModuleReplacementPlugin"); -module.exports = { - entry: { - vendor: ["./vendor"], - first: ["./shared", "./first"], - second: ["./shared", "./second"] - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 1, - name: "vendor" - } - }, - plugins: [new HotModuleReplacementPlugin()] -}; diff --git a/test/configCases/commons-chunk-plugin/hot/test.config.js b/test/configCases/commons-chunk-plugin/hot/test.config.js deleted file mode 100644 index 4b70a8281d9..00000000000 --- a/test/configCases/commons-chunk-plugin/hot/test.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./vendor.js", - "./main.js" - ] - } -}; diff --git a/test/configCases/commons-chunk-plugin/hot/webpack.config.js b/test/configCases/commons-chunk-plugin/hot/webpack.config.js deleted file mode 100644 index 868db8df35e..00000000000 --- a/test/configCases/commons-chunk-plugin/hot/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -var HotModuleReplacementPlugin = require("../../../../lib/HotModuleReplacementPlugin"); -module.exports = { - entry: { - vendor: ["./vendor"], - main: "./index" - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 1, - name: "vendor" - } - }, - plugins: [new HotModuleReplacementPlugin()] -}; diff --git a/test/configCases/commons-chunk-plugin/inverted-order/test.config.js b/test/configCases/commons-chunk-plugin/inverted-order/test.config.js deleted file mode 100644 index 9f3aeae9a92..00000000000 --- a/test/configCases/commons-chunk-plugin/inverted-order/test.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./main.js", - "./vendor.js" - ] - } -}; diff --git a/test/configCases/commons-chunk-plugin/inverted-order/webpack.config.js b/test/configCases/commons-chunk-plugin/inverted-order/webpack.config.js deleted file mode 100644 index cc7e99cd653..00000000000 --- a/test/configCases/commons-chunk-plugin/inverted-order/webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - entry: { - vendor: ["./a"], - main: "./index" - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 1, - name: "vendor" - } - } -}; diff --git a/test/configCases/commons-chunk-plugin/library/index.js b/test/configCases/commons-chunk-plugin/library/index.js deleted file mode 100644 index 02d3fa5c364..00000000000 --- a/test/configCases/commons-chunk-plugin/library/index.js +++ /dev/null @@ -1,11 +0,0 @@ -require.include("external1"); -require.ensure([], function() { - require.include("external2"); -}) - -it("should have externals in main file", function() { - var a = require("./a"); - expect(a.vendor).toMatch("require(\"external0\")"); - expect(a.main).toMatch("require(\"external1\")"); - expect(a.main).toMatch("require(\"external2\")"); -}); diff --git a/test/configCases/commons-chunk-plugin/library/test.config.js b/test/configCases/commons-chunk-plugin/library/test.config.js deleted file mode 100644 index c50c7988582..00000000000 --- a/test/configCases/commons-chunk-plugin/library/test.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./vendor.js", - "./main.js" - ] - }, - modules: { - "external0": "module 0", - "external1": "module 1", - "external2": "module 2" - } -}; diff --git a/test/configCases/commons-chunk-plugin/library/webpack.config.js b/test/configCases/commons-chunk-plugin/library/webpack.config.js deleted file mode 100644 index 56df641cf83..00000000000 --- a/test/configCases/commons-chunk-plugin/library/webpack.config.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - entry: { - vendor: ["external0", "./a"], - main: "./index" - }, - target: "web", - output: { - filename: "[name].js", - libraryTarget: "umd" - }, - externals: ["external0", "external1", "external2", "fs", "path"], - optimization: { - splitChunks: { - cacheGroups: { - vendor: { - test: "vendor", - name: "vendor", - enforce: true - } - } - } - }, - node: { - __filename: false, - __dirname: false - } -}; diff --git a/test/configCases/commons-chunk-plugin/move-entry/test.config.js b/test/configCases/commons-chunk-plugin/move-entry/test.config.js deleted file mode 100644 index e62df37d337..00000000000 --- a/test/configCases/commons-chunk-plugin/move-entry/test.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./commons.js", - "./main.js" - ] - } -}; diff --git a/test/configCases/commons-chunk-plugin/move-entry/webpack.config.js b/test/configCases/commons-chunk-plugin/move-entry/webpack.config.js deleted file mode 100644 index 9310be1c3c7..00000000000 --- a/test/configCases/commons-chunk-plugin/move-entry/webpack.config.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - entry: { - main: "./index?0", - second: "./index?1" - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - cacheGroups: { - commons: { - chunks: "initial", - minSize: 0, - name: "commons" - } - } - } - } -}; diff --git a/test/configCases/commons-chunk-plugin/move-to-grandparent/index.js b/test/configCases/commons-chunk-plugin/move-to-grandparent/index.js deleted file mode 100644 index abee1e85c1b..00000000000 --- a/test/configCases/commons-chunk-plugin/move-to-grandparent/index.js +++ /dev/null @@ -1,12 +0,0 @@ -it("should correctly include indirect children in common chunk", function(done) { - Promise.all([ - import('./pageA'), - import('./pageB').then(m => m.default) - ]).then((imports) => { - expect(imports[0].default).toBe("reuse"); - expect(imports[1].default).toBe("reuse"); - done(); - }).catch(e => { - done(e); - }) -}); diff --git a/test/configCases/commons-chunk-plugin/move-to-grandparent/test.config.js b/test/configCases/commons-chunk-plugin/move-to-grandparent/test.config.js deleted file mode 100644 index 4c2a87b6f4c..00000000000 --- a/test/configCases/commons-chunk-plugin/move-to-grandparent/test.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./main.js", - "./misc.js", - ]; - } -}; diff --git a/test/configCases/commons-chunk-plugin/move-to-grandparent/webpack.config.js b/test/configCases/commons-chunk-plugin/move-to-grandparent/webpack.config.js deleted file mode 100644 index 520f039b2b2..00000000000 --- a/test/configCases/commons-chunk-plugin/move-to-grandparent/webpack.config.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - entry: { - main: "./index", - misc: "./second" - }, - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 0 - } - } -}; diff --git a/test/configCases/commons-chunk-plugin/simple/test.config.js b/test/configCases/commons-chunk-plugin/simple/test.config.js deleted file mode 100644 index 4b70a8281d9..00000000000 --- a/test/configCases/commons-chunk-plugin/simple/test.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - findBundle: function(i, options) { - return [ - "./vendor.js", - "./main.js" - ] - } -}; diff --git a/test/configCases/commons-chunk-plugin/simple/webpack.config.js b/test/configCases/commons-chunk-plugin/simple/webpack.config.js deleted file mode 100644 index cc7e99cd653..00000000000 --- a/test/configCases/commons-chunk-plugin/simple/webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - entry: { - vendor: ["./a"], - main: "./index" - }, - target: "web", - output: { - filename: "[name].js" - }, - optimization: { - splitChunks: { - minSize: 1, - name: "vendor" - } - } -}; diff --git a/test/configCases/compiletime/error-not-found/errors.js b/test/configCases/compiletime/error-not-found/errors.js index e36b112fde3..fbebeba18d8 100644 --- a/test/configCases/compiletime/error-not-found/errors.js +++ b/test/configCases/compiletime/error-not-found/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - /not found/ -]; +"use strict"; + +module.exports = [/not found/]; diff --git a/test/configCases/compiletime/error-not-found/webpack.config.js b/test/configCases/compiletime/error-not-found/webpack.config.js index 4b24c0e9f06..15570222658 100644 --- a/test/configCases/compiletime/error-not-found/webpack.config.js +++ b/test/configCases/compiletime/error-not-found/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { strictExportPresence: true diff --git a/test/configCases/compiletime/exports-presence-overrides/eee/index.js b/test/configCases/compiletime/exports-presence-overrides/eee/index.js new file mode 100644 index 00000000000..1b2793ba6e3 --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/eee/index.js @@ -0,0 +1,4 @@ +import { NoNo } from "../stub"; +export { NotHere } from "../stub"; + +export default `${typeof NoNo}`; diff --git a/test/configCases/compiletime/exports-presence-overrides/errors.js b/test/configCases/compiletime/exports-presence-overrides/errors.js new file mode 100644 index 00000000000..7c7e6475327 --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/errors.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = [ + { + moduleName: /eee/, + message: /NoNo.+not found/ + }, + { + moduleName: /fff/, + message: /NotHere.+not found/ + } +]; diff --git a/test/configCases/compiletime/exports-presence-overrides/fff/index.js b/test/configCases/compiletime/exports-presence-overrides/fff/index.js new file mode 100644 index 00000000000..1b2793ba6e3 --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/fff/index.js @@ -0,0 +1,4 @@ +import { NoNo } from "../stub"; +export { NotHere } from "../stub"; + +export default `${typeof NoNo}`; diff --git a/test/configCases/compiletime/exports-presence-overrides/index.js b/test/configCases/compiletime/exports-presence-overrides/index.js new file mode 100644 index 00000000000..9080d3b2978 --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/index.js @@ -0,0 +1,7 @@ +import eee from "./eee/index.js"; +import fff from "./fff/index.js"; + +it("should resolve presence overrides correctly", () => { + expect(eee).toBe("undefined"); + expect(fff).toBe("undefined"); +}); diff --git a/test/configCases/compiletime/exports-presence-overrides/stub.js b/test/configCases/compiletime/exports-presence-overrides/stub.js new file mode 100644 index 00000000000..742a25131be --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/stub.js @@ -0,0 +1,3 @@ +const foo = "bar"; + +export default foo; diff --git a/test/configCases/compiletime/exports-presence-overrides/warnings.js b/test/configCases/compiletime/exports-presence-overrides/warnings.js new file mode 100644 index 00000000000..2020f555a47 --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/warnings.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + { + moduleName: /eee/, + message: /NotHere.+not found/ + } +]; diff --git a/test/configCases/compiletime/exports-presence-overrides/webpack.config.js b/test/configCases/compiletime/exports-presence-overrides/webpack.config.js new file mode 100644 index 00000000000..b769c8b6a23 --- /dev/null +++ b/test/configCases/compiletime/exports-presence-overrides/webpack.config.js @@ -0,0 +1,34 @@ +"use strict"; + +/** + * Tests that importExportsPresence / reexportExportsPresence correctly override + * exportsPresence and strictExportPresence via resolveFromOptions. + * @type {import("../../../../").Configuration} + */ +module.exports = { + mode: "production", + module: { + rules: [ + { + // importExportsPresence="error" overrides exportsPresence="warn" + // reexportExportsPresence="warn" overrides exportsPresence="warn" + test: /eee/, + parser: { + exportsPresence: "warn", + importExportsPresence: "error", + reexportExportsPresence: "warn" + } + }, + { + // importExportsPresence=false silences despite strictExportPresence + // reexportExportsPresence="error" overrides strictExportPresence + test: /fff/, + parser: { + strictExportPresence: true, + importExportsPresence: false, + reexportExportsPresence: "error" + } + } + ] + } +}; diff --git a/test/configCases/compiletime/exports-presence/aaa/index.js b/test/configCases/compiletime/exports-presence/aaa/index.js new file mode 100644 index 00000000000..1b2793ba6e3 --- /dev/null +++ b/test/configCases/compiletime/exports-presence/aaa/index.js @@ -0,0 +1,4 @@ +import { NoNo } from "../stub"; +export { NotHere } from "../stub"; + +export default `${typeof NoNo}`; diff --git a/test/configCases/compiletime/exports-presence/bbb/index.js b/test/configCases/compiletime/exports-presence/bbb/index.js new file mode 100644 index 00000000000..1b2793ba6e3 --- /dev/null +++ b/test/configCases/compiletime/exports-presence/bbb/index.js @@ -0,0 +1,4 @@ +import { NoNo } from "../stub"; +export { NotHere } from "../stub"; + +export default `${typeof NoNo}`; diff --git a/test/configCases/compiletime/exports-presence/ccc/index.js b/test/configCases/compiletime/exports-presence/ccc/index.js new file mode 100644 index 00000000000..1b2793ba6e3 --- /dev/null +++ b/test/configCases/compiletime/exports-presence/ccc/index.js @@ -0,0 +1,4 @@ +import { NoNo } from "../stub"; +export { NotHere } from "../stub"; + +export default `${typeof NoNo}`; diff --git a/test/configCases/compiletime/exports-presence/ddd/index.js b/test/configCases/compiletime/exports-presence/ddd/index.js new file mode 100644 index 00000000000..1b2793ba6e3 --- /dev/null +++ b/test/configCases/compiletime/exports-presence/ddd/index.js @@ -0,0 +1,4 @@ +import { NoNo } from "../stub"; +export { NotHere } from "../stub"; + +export default `${typeof NoNo}`; diff --git a/test/configCases/compiletime/exports-presence/errors.js b/test/configCases/compiletime/exports-presence/errors.js new file mode 100644 index 00000000000..ec92a757779 --- /dev/null +++ b/test/configCases/compiletime/exports-presence/errors.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = [ + { + moduleName: /ccc/, + message: /NotHere.+not found/ + }, + { + moduleName: /ccc/, + message: /NoNo.+not found/ + } +]; diff --git a/test/configCases/compiletime/exports-presence/index.js b/test/configCases/compiletime/exports-presence/index.js new file mode 100644 index 00000000000..aebbdc54a2b --- /dev/null +++ b/test/configCases/compiletime/exports-presence/index.js @@ -0,0 +1,12 @@ +import { NotHere as aaa } from "./aaa/index.js"; +import { NotHere as bbb } from "./bbb/index.js"; +import { NotHere as ccc } from "./ccc/index.js"; +import { NotHere as ddd } from "./ddd/index.js"; +import "./module"; + +it("should do nothing", () => { + expect(aaa).toBe(undefined); + expect(bbb).toBe(undefined); + expect(ccc).toBe(undefined); + expect(ddd).toBe(undefined); +}); diff --git a/test/configCases/compiletime/exports-presence/module.js b/test/configCases/compiletime/exports-presence/module.js new file mode 100644 index 00000000000..2a044c72dad --- /dev/null +++ b/test/configCases/compiletime/exports-presence/module.js @@ -0,0 +1,70 @@ +import * as ns from "./stub"; + +function fn() {} + +describe("should not add additional warnings/errors", () => { + it("if statement", () => { + if ("a" in ns) { + fn(ns.a); + ns.a(); + } + if ("b" in ns && "c" in ns) { + fn(ns.b, ns.c); + ns.b(); + ns.c(); + } + if (0 || "a" in ns) { + fn(ns.a); + + if ("b" in ns && "c" in ns) { + fn(ns.a, ns.b, ns.c); + } + + if (null ?? "d" in ns) { + fn(ns.a, ns.d); + } + } + + // warning: 31:6-10(a) + if (!("a" in ns)) { + //↑_____ negation is not a guard + fn(ns.a); + } + + if (!!("a" in ns)) { + fn(ns.a); + } + }); + + it("ternary operator", () => { + "a" in ns ? fn(ns.a) : 0; + "b" in ns && "c" in ns ? (fn(ns.b, ns.c), ns.b(), ns.c()) : 0; + + 0 || "a" in ns + ? fn(ns.a) + : "b" in ns && "c" in ns + ? "d" in ns + ? fn(ns.b, ns.c, ns.d) + : (null ?? "e" in ns) + ? fn(ns.b, ns.c, ns.e) + : fn(ns.b, ns.c) + : 0; + + !!("a" in ns) ? ns.a() : 0; + }); + + it("unsupport experssions", () => { + // warning: 58:6-10(a) + if (ns.a) { + // ↑_____ `ns.a` is direct usage, not a guard + // warning: 61:15-19(a) + console.log(ns.a); + } + // warning: 64:6-10(a) + if (ns.a !== undefined) { + // ↑_____ `ns.a` is direct usage, not a guard + // warning: 67:15-19(a) + console.log(ns.a); + } + }); +}); diff --git a/test/configCases/compiletime/exports-presence/stub.js b/test/configCases/compiletime/exports-presence/stub.js new file mode 100644 index 00000000000..131d19e366f --- /dev/null +++ b/test/configCases/compiletime/exports-presence/stub.js @@ -0,0 +1,3 @@ +const foo = 'bar' + +export default foo diff --git a/test/configCases/compiletime/exports-presence/warnings.js b/test/configCases/compiletime/exports-presence/warnings.js new file mode 100644 index 00000000000..b5e011b226a --- /dev/null +++ b/test/configCases/compiletime/exports-presence/warnings.js @@ -0,0 +1,41 @@ +"use strict"; + +module.exports = [ + { + moduleName: /bbb/, + message: /NotHere.+not found/ + }, + { + moduleName: /bbb/, + message: /NoNo.+not found/ + }, + { + moduleName: /ddd/, + message: /NoNo.+not found/ + }, + { + moduleName: /module/, + message: /a.+not found/, + loc: /31:6-10/ + }, + { + moduleName: /module/, + message: /a.+not found/, + loc: /58:6-10/ + }, + { + moduleName: /module/, + message: /a.+not found/, + loc: /61:15-19/ + }, + { + moduleName: /module/, + message: /a.+not found/, + loc: /64:6-10/ + }, + { + moduleName: /module/, + message: /a.+not found/, + loc: /67:15-19/ + } +]; diff --git a/test/configCases/compiletime/exports-presence/webpack.config.js b/test/configCases/compiletime/exports-presence/webpack.config.js new file mode 100644 index 00000000000..2c2d7ac86bf --- /dev/null +++ b/test/configCases/compiletime/exports-presence/webpack.config.js @@ -0,0 +1,42 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + module: { + rules: [ + { + test: /aaa/, + parser: { + exportsPresence: false + } + }, + { + test: /bbb/, + parser: { + exportsPresence: "warn" + } + }, + { + test: /ccc/, + parser: { + exportsPresence: "error" + } + }, + { + test: /ddd/, + parser: { + exportsPresence: "error", + importExportsPresence: "warn", + reexportExportsPresence: false + } + }, + { + test: /module/, + parser: { + importExportsPresence: "warn" + } + } + ] + } +}; diff --git a/test/configCases/compiletime/warn-not-found/warnings.js b/test/configCases/compiletime/warn-not-found/warnings.js index e36b112fde3..fbebeba18d8 100644 --- a/test/configCases/compiletime/warn-not-found/warnings.js +++ b/test/configCases/compiletime/warn-not-found/warnings.js @@ -1,3 +1,3 @@ -module.exports = [ - /not found/ -]; +"use strict"; + +module.exports = [/not found/]; diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/config.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/config.js new file mode 100644 index 00000000000..7e07c587ca7 --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/config.js @@ -0,0 +1,7 @@ +export default { + deeply: { + nested: { + thing: 'Correct value', + }, + }, +}; diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/index.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/index.js new file mode 100644 index 00000000000..838175d12be --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/index.js @@ -0,0 +1,16 @@ +import * as modA from "./module-a"; +import config from "./config"; + +const { + deeply: { + nested: { thing = "defaultValue" } + } +} = config; + +it("renames a nested destructured assignment with default value correctly", () => { + expect(modA.deeply).toBe("Ignore me please"); + expect(modA.nested).toBe("Ignore me please"); + expect(modA.thing).toBe("Ignore me please"); + + expect(thing).toBe("Correct value"); +}); diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/module-a.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/module-a.js new file mode 100644 index 00000000000..68a3c8bae1f --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/module-a.js @@ -0,0 +1,3 @@ +export const deeply = "Ignore me please"; +export const nested = "Ignore me please"; +export const thing = "Ignore me please"; diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/webpack.config.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-nested/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/config.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/config.js new file mode 100644 index 00000000000..4598c2dbc74 --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/config.js @@ -0,0 +1,3 @@ +export default { + variableClash: "Correct value" +}; diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/index.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/index.js new file mode 100644 index 00000000000..29def714ea3 --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/index.js @@ -0,0 +1,9 @@ +import modA from "./module-a"; +import config from "./config"; + +const { variableClash = "defaultValue" } = config; + +it("renames a destructured assignment with default value correctly", () => { + expect(modA).toBe("valueFromSomeFile"); + expect(variableClash).toBe("Correct value"); +}); diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/module-a.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/module-a.js new file mode 100644 index 00000000000..b9fd2570297 --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/module-a.js @@ -0,0 +1,3 @@ +const variableClash = "valueFromSomeFile"; + +export default variableClash; diff --git a/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/webpack.config.js b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/concatenate-modules/destructuring-assignment-with-default-value-and-variable-collision-simple/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/concatenate-modules/import-module/a.txt b/test/configCases/concatenate-modules/import-module/a.txt new file mode 100644 index 00000000000..1269488f7fb --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/a.txt @@ -0,0 +1 @@ +data diff --git a/test/configCases/concatenate-modules/import-module/index.js b/test/configCases/concatenate-modules/import-module/index.js new file mode 100644 index 00000000000..76922431787 --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/index.js @@ -0,0 +1,7 @@ +import url from "./loader!!"; +import {url as url2} from "./module1"; + +it("should compile and run", () => { + expect(url).toBe("webpack:///a.txt"); + expect(url2.toString()).toMatch(/^file:/); +}); diff --git a/test/configCases/concatenate-modules/import-module/loader.js b/test/configCases/concatenate-modules/import-module/loader.js new file mode 100644 index 00000000000..504ccb68ba8 --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/loader.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const callback = this.async(); + this.importModule("./module1", { baseUri: "webpack://" }, (err, exports) => { + if (err) return callback(err); + callback(null, `module.exports = ${JSON.stringify(exports.url)}`); + }); +}; diff --git a/test/configCases/concatenate-modules/import-module/module1.js b/test/configCases/concatenate-modules/import-module/module1.js new file mode 100644 index 00000000000..5600ae2d20d --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/module1.js @@ -0,0 +1,3 @@ +const url = new URL("./a.txt", import.meta.url); + +export { url } diff --git a/test/configCases/concatenate-modules/import-module/webpack.config.js b/test/configCases/concatenate-modules/import-module/webpack.config.js new file mode 100644 index 00000000000..1b88ae4d4a7 --- /dev/null +++ b/test/configCases/concatenate-modules/import-module/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + assetModuleFilename: "[name][ext]" + } +}; diff --git a/test/configCases/concatenate-modules/issue-13022/a.js b/test/configCases/concatenate-modules/issue-13022/a.js new file mode 100644 index 00000000000..a87b4d9f98c --- /dev/null +++ b/test/configCases/concatenate-modules/issue-13022/a.js @@ -0,0 +1,4 @@ +const doc = console; +const setTimeout = 1; + +export default 1; diff --git a/test/configCases/concatenate-modules/issue-13022/index.js b/test/configCases/concatenate-modules/issue-13022/index.js new file mode 100644 index 00000000000..5395e7c6ba8 --- /dev/null +++ b/test/configCases/concatenate-modules/issue-13022/index.js @@ -0,0 +1,11 @@ +import "./a"; + +setTimeout(() => {}, 0); + +const doc = console; + +export default 1; + +it("should compile and run", () => { + expect(doc).toBe(console); +}); diff --git a/test/configCases/concatenate-modules/issue-13022/webpack.config.js b/test/configCases/concatenate-modules/issue-13022/webpack.config.js new file mode 100644 index 00000000000..c0653e925f9 --- /dev/null +++ b/test/configCases/concatenate-modules/issue-13022/webpack.config.js @@ -0,0 +1,31 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: { + index: path.resolve(__dirname, "./index.js") + }, + output: { + library: "[name]", + libraryExport: "default" + }, + optimization: { + concatenateModules: true + } + }, + { + entry: { + index: path.resolve(__dirname, "./index.js") + }, + output: { + library: "[name]_doc", + libraryExport: "default" + }, + optimization: { + concatenateModules: true + } + } +]; diff --git a/test/configCases/concatenate-modules/load-chunk-function/a.js b/test/configCases/concatenate-modules/load-chunk-function/a.js new file mode 100644 index 00000000000..c55f5601080 --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/a.js @@ -0,0 +1,2 @@ +import "./c"; +export default import("./b"); diff --git a/test/configCases/concatenate-modules/load-chunk-function/b.js b/test/configCases/concatenate-modules/load-chunk-function/b.js new file mode 100644 index 00000000000..a68ac2819dc --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/b.js @@ -0,0 +1 @@ +export default 'b'; diff --git a/test/configCases/concatenate-modules/load-chunk-function/c.js b/test/configCases/concatenate-modules/load-chunk-function/c.js new file mode 100644 index 00000000000..37a4d86fac7 --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/c.js @@ -0,0 +1 @@ +export default 'c'; diff --git a/test/configCases/concatenate-modules/load-chunk-function/entry1.js b/test/configCases/concatenate-modules/load-chunk-function/entry1.js new file mode 100644 index 00000000000..6929783272f --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/entry1.js @@ -0,0 +1,7 @@ +import a from "./a"; +import b from "./b"; + +it("should load fine", () => { + expect(b).toBe("b"); + return a.then(a => expect(a).toEqual(nsObj({ default: "b" }))); +}); diff --git a/test/configCases/concatenate-modules/load-chunk-function/entry2.js b/test/configCases/concatenate-modules/load-chunk-function/entry2.js new file mode 100644 index 00000000000..f23aa054519 --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/entry2.js @@ -0,0 +1,5 @@ +import a from "./a"; + +it("should load fine", () => { + return a.then(a => expect(a).toEqual(nsObj({ default: "b" }))); +}); diff --git a/test/configCases/concatenate-modules/load-chunk-function/test.config.js b/test/configCases/concatenate-modules/load-chunk-function/test.config.js new file mode 100644 index 00000000000..c5234ed761a --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry1.js", "entry2.js"]; + } +}; diff --git a/test/configCases/concatenate-modules/load-chunk-function/webpack.config.js b/test/configCases/concatenate-modules/load-chunk-function/webpack.config.js new file mode 100644 index 00000000000..f340b275eea --- /dev/null +++ b/test/configCases/concatenate-modules/load-chunk-function/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + entry1: "./entry1", + entry2: "./entry2" + }, + output: { + filename: "[name].js" + }, + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/concatenate-modules/rename-10168/A.js b/test/configCases/concatenate-modules/rename-10168/A.js new file mode 100644 index 00000000000..1e14df5446a --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/A.js @@ -0,0 +1 @@ +export class A {} diff --git a/test/configCases/concatenate-modules/rename-10168/B.js b/test/configCases/concatenate-modules/rename-10168/B.js new file mode 100644 index 00000000000..1aa41a54a30 --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/B.js @@ -0,0 +1 @@ +export class B {} diff --git a/test/configCases/concatenate-modules/rename-10168/C.js b/test/configCases/concatenate-modules/rename-10168/C.js new file mode 100644 index 00000000000..cab477669da --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/C.js @@ -0,0 +1,10 @@ +import { B as BB } from "./B"; + +const X = 0; +var Y = 0; + +export class C extends (function() { + var A = 0; + var B = 0; + return BB; +})() {} diff --git a/test/configCases/concatenate-modules/rename-10168/D.js b/test/configCases/concatenate-modules/rename-10168/D.js new file mode 100644 index 00000000000..01b958f66df --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/D.js @@ -0,0 +1 @@ +export class D {} diff --git a/test/configCases/concatenate-modules/rename-10168/E.js b/test/configCases/concatenate-modules/rename-10168/E.js new file mode 100644 index 00000000000..42c6b323aa7 --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/E.js @@ -0,0 +1,6 @@ +import { D as DD } from "./D"; + +export class E extends (function() { + var D = 0; + return DD; +})() {} diff --git a/test/configCases/concatenate-modules/rename-10168/all.js b/test/configCases/concatenate-modules/rename-10168/all.js new file mode 100644 index 00000000000..a5a83665bb8 --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/all.js @@ -0,0 +1,6 @@ +import { A } from "./A"; +export { A }; +export { B } from "./B"; +export { C as CC } from "./C"; +export { D } from "./D"; +export { E } from "./E"; diff --git a/test/configCases/concatenate-modules/rename-10168/index.js b/test/configCases/concatenate-modules/rename-10168/index.js new file mode 100644 index 00000000000..815de5b0cd0 --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/index.js @@ -0,0 +1,12 @@ +import { A, B, CC, D, E } from "./all"; + +require("./all"); +require("./D"); + +it("should not rename classes unnecessary", () => { + expect(A.name).toBe("A"); + expect(B.name).toBe("B_B"); + expect(CC.name).toBe("C"); + expect(D.name).toBe("D"); + expect(E.name).toBe("E"); +}); diff --git a/test/configCases/concatenate-modules/rename-10168/webpack.config.js b/test/configCases/concatenate-modules/rename-10168/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/concatenate-modules/rename-10168/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/concatenate-modules/side-effects/index.js b/test/configCases/concatenate-modules/side-effects/index.js new file mode 100644 index 00000000000..354609dca02 --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/index.js @@ -0,0 +1,11 @@ +import { b, a, c } from "dep"; + +c.cc(); +b.bbb(); +a.aa(); + +import { order } from "dep/order.js"; + +it("should import side-effect-free modules in deterministic order (usage order)", () => { + expect(order).toEqual(["c", "b", "a"]); +}); diff --git a/test/configCases/concatenate-modules/side-effects/node_modules/dep/a.js b/test/configCases/concatenate-modules/side-effects/node_modules/dep/a.js new file mode 100644 index 00000000000..e913fb686ff --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/node_modules/dep/a.js @@ -0,0 +1,4 @@ +import { track } from "./order.js"; +track("a"); +export function aa() {} +export function aaa() {} diff --git a/test/configCases/concatenate-modules/side-effects/node_modules/dep/b.js b/test/configCases/concatenate-modules/side-effects/node_modules/dep/b.js new file mode 100644 index 00000000000..f6ffeb634bc --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/node_modules/dep/b.js @@ -0,0 +1,4 @@ +import { track } from "./order.js"; +track("b"); +export function bb() {} +export function bbb() {} diff --git a/test/configCases/concatenate-modules/side-effects/node_modules/dep/c.js b/test/configCases/concatenate-modules/side-effects/node_modules/dep/c.js new file mode 100644 index 00000000000..4478c310b26 --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/node_modules/dep/c.js @@ -0,0 +1,4 @@ +import { track } from "./order.js"; +track("c"); +export function cc() {} +export function ccc() {} diff --git a/test/configCases/concatenate-modules/side-effects/node_modules/dep/index.js b/test/configCases/concatenate-modules/side-effects/node_modules/dep/index.js new file mode 100644 index 00000000000..6195488abca --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/node_modules/dep/index.js @@ -0,0 +1,8 @@ +import * as a from "./a.js"; +import * as b from "./b.js"; +import * as c from "./c.js"; +export { + a, + b, + c +} diff --git a/test/configCases/concatenate-modules/side-effects/node_modules/dep/order.js b/test/configCases/concatenate-modules/side-effects/node_modules/dep/order.js new file mode 100644 index 00000000000..306f83ab171 --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/node_modules/dep/order.js @@ -0,0 +1,4 @@ +export let order = []; +export function track(name) { + order.push(name); +} diff --git a/test/configCases/concatenate-modules/side-effects/node_modules/dep/package.json b/test/configCases/concatenate-modules/side-effects/node_modules/dep/package.json new file mode 100644 index 00000000000..644d902d8e0 --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/node_modules/dep/package.json @@ -0,0 +1,6 @@ +{ + "name": "dep", + "version": "1.0.0", + "type": "module", + "sideEffects": false +} diff --git a/test/configCases/concatenate-modules/side-effects/webpack.config.js b/test/configCases/concatenate-modules/side-effects/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/concatenate-modules/side-effects/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/concatenate-modules/split-chunk-entry-module/a.js b/test/configCases/concatenate-modules/split-chunk-entry-module/a.js new file mode 100644 index 00000000000..46124d989cb --- /dev/null +++ b/test/configCases/concatenate-modules/split-chunk-entry-module/a.js @@ -0,0 +1 @@ +import './b'; diff --git a/test/configCases/concatenate-modules/split-chunk-entry-module/b.js b/test/configCases/concatenate-modules/split-chunk-entry-module/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/concatenate-modules/split-chunk-entry-module/index.js b/test/configCases/concatenate-modules/split-chunk-entry-module/index.js new file mode 100644 index 00000000000..1956e006d1d --- /dev/null +++ b/test/configCases/concatenate-modules/split-chunk-entry-module/index.js @@ -0,0 +1,3 @@ +import './a'; + +it("should compile and evaluate fine", () => {}); diff --git a/test/configCases/concatenate-modules/split-chunk-entry-module/test.config.js b/test/configCases/concatenate-modules/split-chunk-entry-module/test.config.js new file mode 100644 index 00000000000..edc922cf4f9 --- /dev/null +++ b/test/configCases/concatenate-modules/split-chunk-entry-module/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["runtime.js", "common-index_js.js", "main.js"]; + } +}; diff --git a/test/configCases/concatenate-modules/split-chunk-entry-module/webpack.config.js b/test/configCases/concatenate-modules/split-chunk-entry-module/webpack.config.js new file mode 100644 index 00000000000..bae7ecf962d --- /dev/null +++ b/test/configCases/concatenate-modules/split-chunk-entry-module/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + main: "./index" + }, + target: "web", + output: { + filename: "[name].js" + }, + optimization: { + concatenateModules: true, + chunkIds: "named", + runtimeChunk: "single", + splitChunks: { + minSize: 0, + cacheGroups: { + common: { + chunks: "initial", + minChunks: 1 + } + } + } + } +}; diff --git a/test/configCases/container/0-container-full/App.js b/test/configCases/container/0-container-full/App.js new file mode 100644 index 00000000000..bedb022ffbe --- /dev/null +++ b/test/configCases/container/0-container-full/App.js @@ -0,0 +1,6 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; + +export default () => { + return `App rendered with [${React()}] and [${ComponentA()}]`; +}; diff --git a/test/configCases/container/0-container-full/ComponentA.js b/test/configCases/container/0-container-full/ComponentA.js new file mode 100644 index 00000000000..9a98b9948bf --- /dev/null +++ b/test/configCases/container/0-container-full/ComponentA.js @@ -0,0 +1,5 @@ +import React from "react"; + +export default () => { + return `ComponentA rendered with [${React()}]`; +}; diff --git a/test/configCases/container/0-container-full/index.js b/test/configCases/container/0-container-full/index.js new file mode 100644 index 00000000000..a9d2a8ca12d --- /dev/null +++ b/test/configCases/container/0-container-full/index.js @@ -0,0 +1,15 @@ +it("should load the component from container", () => { + return import("./App").then(({ default: App }) => { + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 0.1.2] and [ComponentA rendered with [This is react 0.1.2]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 1.2.3] and [ComponentA rendered with [This is react 1.2.3]]" + ); + }); + }); +}); diff --git a/test/configCases/container/0-container-full/node_modules/react.js b/test/configCases/container/0-container-full/node_modules/react.js new file mode 100644 index 00000000000..bcf433f2afb --- /dev/null +++ b/test/configCases/container/0-container-full/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "0.1.2"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/0-container-full/test.config.js b/test/configCases/container/0-container-full/test.config.js new file mode 100644 index 00000000000..bd1daf1ba17 --- /dev/null +++ b/test/configCases/container/0-container-full/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return i === 0 ? "./main.js" : "./module/main.mjs"; + } +}; diff --git a/test/configCases/container/0-container-full/upgrade-react.js b/test/configCases/container/0-container-full/upgrade-react.js new file mode 100644 index 00000000000..d26755be2c7 --- /dev/null +++ b/test/configCases/container/0-container-full/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("1.2.3"); +} diff --git a/test/configCases/container/0-container-full/webpack.config.js b/test/configCases/container/0-container-full/webpack.config.js new file mode 100644 index 00000000000..84a5013a15a --- /dev/null +++ b/test/configCases/container/0-container-full/webpack.config.js @@ -0,0 +1,63 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {ConstructorParameters[0]} */ +const common = { + name: "container", + exposes: { + "./ComponentA": { + import: "./ComponentA" + } + }, + shared: { + react: { + version: false, + requiredVersion: false + } + } +}; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + filename: "[name].js", + uniqueName: "0-container-full" + }, + plugins: [ + new ModuleFederationPlugin({ + library: { type: "commonjs-module" }, + filename: "container.js", + remotes: { + containerA: { + external: "./container.js" + } + }, + ...common + }) + ] + }, + { + experiments: { + outputModule: true + }, + output: { + filename: "module/[name].mjs", + uniqueName: "0-container-full-mjs" + }, + plugins: [ + new ModuleFederationPlugin({ + library: { type: "module" }, + filename: "module/container.mjs", + remotes: { + containerA: { + external: "./container.mjs" + } + }, + ...common + }) + ], + target: "node14" + } +]; diff --git a/test/configCases/container/0-eager-shared/App.js b/test/configCases/container/0-eager-shared/App.js new file mode 100644 index 00000000000..aa4e4480be0 --- /dev/null +++ b/test/configCases/container/0-eager-shared/App.js @@ -0,0 +1,7 @@ +import { emitter } from "./emitter.js"; + +function App() { + return emitter; +} + +export default App; diff --git a/test/configCases/container/0-eager-shared/emitter.js b/test/configCases/container/0-eager-shared/emitter.js new file mode 100644 index 00000000000..199bf88f9ab --- /dev/null +++ b/test/configCases/container/0-eager-shared/emitter.js @@ -0,0 +1,9 @@ +import { TinyEmitter } from 'tiny-emitter' + +const emitter = new TinyEmitter() + +emitter.on('hello', () => console.log('hello[service]')) + +export { + emitter, +} diff --git a/test/configCases/container/0-eager-shared/index.js b/test/configCases/container/0-eager-shared/index.js new file mode 100644 index 00000000000..d512f614112 --- /dev/null +++ b/test/configCases/container/0-eager-shared/index.js @@ -0,0 +1,6 @@ +it("should allow to import exposed modules sync", () => { + return import("./App").then(({ default: App }) => { + expect(App().e.hello).toBeDefined(); + }); +}); + diff --git a/test/configCases/container/0-eager-shared/node_modules/tiny-emitter/index.js b/test/configCases/container/0-eager-shared/node_modules/tiny-emitter/index.js new file mode 100644 index 00000000000..7ca4a606e18 --- /dev/null +++ b/test/configCases/container/0-eager-shared/node_modules/tiny-emitter/index.js @@ -0,0 +1,67 @@ +function E () { + // Keep this empty so it's easier to inherit from + // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) +} + +E.prototype = { + on: function (name, callback, ctx) { + var e = this.e || (this.e = {}); + + (e[name] || (e[name] = [])).push({ + fn: callback, + ctx: ctx + }); + + return this; + }, + + once: function (name, callback, ctx) { + var self = this; + function listener () { + self.off(name, listener); + callback.apply(ctx, arguments); + }; + + listener._ = callback + return this.on(name, listener, ctx); + }, + + emit: function (name) { + var data = [].slice.call(arguments, 1); + var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); + var i = 0; + var len = evtArr.length; + + for (i; i < len; i++) { + evtArr[i].fn.apply(evtArr[i].ctx, data); + } + + return this; + }, + + off: function (name, callback) { + var e = this.e || (this.e = {}); + var evts = e[name]; + var liveEvents = []; + + if (evts && callback) { + for (var i = 0, len = evts.length; i < len; i++) { + if (evts[i].fn !== callback && evts[i].fn._ !== callback) + liveEvents.push(evts[i]); + } + } + + // Remove event from queue to prevent memory leak + // Suggested by https://github.com/lazd + // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 + + (liveEvents.length) + ? e[name] = liveEvents + : delete e[name]; + + return this; + } +}; + +module.exports = E; +module.exports.TinyEmitter = E; diff --git a/test/configCases/container/0-eager-shared/node_modules/tiny-emitter/package.json b/test/configCases/container/0-eager-shared/node_modules/tiny-emitter/package.json new file mode 100644 index 00000000000..4bf445b8e9f --- /dev/null +++ b/test/configCases/container/0-eager-shared/node_modules/tiny-emitter/package.json @@ -0,0 +1,7 @@ +{ + "name": "tiny-emitter", + "version": "2.1.0", + "description": "A tiny (less than 1k) event emitter library", + "main": "index.js", + "license": "MIT" +} diff --git a/test/configCases/container/0-eager-shared/package.json b/test/configCases/container/0-eager-shared/package.json new file mode 100644 index 00000000000..7fc07107aa7 --- /dev/null +++ b/test/configCases/container/0-eager-shared/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": { + "tiny-emitter": "^2.1.0" + } +} diff --git a/test/configCases/container/0-eager-shared/webpack.config.js b/test/configCases/container/0-eager-shared/webpack.config.js new file mode 100644 index 00000000000..a6e9e60e32a --- /dev/null +++ b/test/configCases/container/0-eager-shared/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; +const { dependencies } = require("./package.json"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + filename: "container.js", + library: { type: "commonjs-module" }, + exposes: { + "./emitter": { + name: "emitter", + import: "./emitter.js" + } + }, + shared: { + ...dependencies + } + }) + ] +}; diff --git a/test/configCases/container/0-transitive-overriding/a.js b/test/configCases/container/0-transitive-overriding/a.js new file mode 100644 index 00000000000..14065b7bb3f --- /dev/null +++ b/test/configCases/container/0-transitive-overriding/a.js @@ -0,0 +1 @@ +export * from "./b"; diff --git a/test/configCases/container/0-transitive-overriding/b.js b/test/configCases/container/0-transitive-overriding/b.js new file mode 100644 index 00000000000..2ee5f158c98 --- /dev/null +++ b/test/configCases/container/0-transitive-overriding/b.js @@ -0,0 +1 @@ +export * from "./shared"; diff --git a/test/configCases/container/0-transitive-overriding/index.js b/test/configCases/container/0-transitive-overriding/index.js new file mode 100644 index 00000000000..e993ad34d06 --- /dev/null +++ b/test/configCases/container/0-transitive-overriding/index.js @@ -0,0 +1,23 @@ +it("should work normally (a)", () => { + return import("./a").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (b)", () => { + return import("./b").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (container-with-shared/a)", () => { + return import("container-with-shared/a").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (container-with-shared/b)", () => { + return import("container-with-shared/b").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); diff --git a/test/configCases/container/0-transitive-overriding/modules.js b/test/configCases/container/0-transitive-overriding/modules.js new file mode 100644 index 00000000000..8e19db7b0c6 --- /dev/null +++ b/test/configCases/container/0-transitive-overriding/modules.js @@ -0,0 +1 @@ +export default Object.keys(__webpack_modules__).sort(); diff --git a/test/configCases/container/0-transitive-overriding/shared.js b/test/configCases/container/0-transitive-overriding/shared.js new file mode 100644 index 00000000000..1fba08a2ae1 --- /dev/null +++ b/test/configCases/container/0-transitive-overriding/shared.js @@ -0,0 +1 @@ +export const value = "shared"; diff --git a/test/configCases/container/0-transitive-overriding/webpack.config.js b/test/configCases/container/0-transitive-overriding/webpack.config.js new file mode 100644 index 00000000000..724076dd97d --- /dev/null +++ b/test/configCases/container/0-transitive-overriding/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container-with-shared", + library: { type: "commonjs-module" }, + filename: "container-with-shared.js", + exposes: ["./a", "./b", "./modules"], + remotes: { + "container-with-shared": "./container-with-shared.js" + }, + shared: { + "./shared": { + shareKey: "shared", + version: "1" + } + } + }) + ] +}; diff --git a/test/configCases/container/1-container-full/App.js b/test/configCases/container/1-container-full/App.js new file mode 100644 index 00000000000..43f44221946 --- /dev/null +++ b/test/configCases/container/1-container-full/App.js @@ -0,0 +1,10 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; +import ComponentB from "containerB/ComponentB"; +import LocalComponentB from "./ComponentB"; + +export default () => { + return `App rendered with [${React()}] and [${ComponentA()}] and [${ComponentB()}]`; +}; + +expect(ComponentB).not.toBe(LocalComponentB); diff --git a/test/configCases/container/1-container-full/ComponentB.js b/test/configCases/container/1-container-full/ComponentB.js new file mode 100644 index 00000000000..1943469c746 --- /dev/null +++ b/test/configCases/container/1-container-full/ComponentB.js @@ -0,0 +1,5 @@ +import React from "react"; + +export default () => { + return `ComponentB rendered with [${React()}]`; +}; diff --git a/test/configCases/container/1-container-full/ComponentC.js b/test/configCases/container/1-container-full/ComponentC.js new file mode 100644 index 00000000000..3ff3832c718 --- /dev/null +++ b/test/configCases/container/1-container-full/ComponentC.js @@ -0,0 +1,7 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; +import ComponentB from "containerB/ComponentB"; + +export default () => { + return `ComponentC rendered with [${React()}] and [${ComponentA()}] and [${ComponentB()}]`; +}; diff --git a/test/configCases/container/1-container-full/index.js b/test/configCases/container/1-container-full/index.js new file mode 100644 index 00000000000..e39cf3c9316 --- /dev/null +++ b/test/configCases/container/1-container-full/index.js @@ -0,0 +1,15 @@ +it("should load the component from container", () => { + return import("./App").then(({ default: App }) => { + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 2.1.0] and [ComponentA rendered with [This is react 2.1.0]] and [ComponentB rendered with [This is react 2.1.0]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 3.2.1] and [ComponentA rendered with [This is react 3.2.1]] and [ComponentB rendered with [This is react 3.2.1]]" + ); + }); + }); +}); diff --git a/test/configCases/container/1-container-full/node_modules/package.json b/test/configCases/container/1-container-full/node_modules/package.json new file mode 100644 index 00000000000..87032da008a --- /dev/null +++ b/test/configCases/container/1-container-full/node_modules/package.json @@ -0,0 +1,3 @@ +{ + "version": "2.1.0" +} diff --git a/test/configCases/container/1-container-full/node_modules/react.js b/test/configCases/container/1-container-full/node_modules/react.js new file mode 100644 index 00000000000..97d35a4bc9c --- /dev/null +++ b/test/configCases/container/1-container-full/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "2.1.0"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/1-container-full/package.json b/test/configCases/container/1-container-full/package.json new file mode 100644 index 00000000000..be6238fec84 --- /dev/null +++ b/test/configCases/container/1-container-full/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": { + "react": "*" + } +} diff --git a/test/configCases/container/1-container-full/test.config.js b/test/configCases/container/1-container-full/test.config.js new file mode 100644 index 00000000000..bd1daf1ba17 --- /dev/null +++ b/test/configCases/container/1-container-full/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return i === 0 ? "./main.js" : "./module/main.mjs"; + } +}; diff --git a/test/configCases/container/1-container-full/upgrade-react.js b/test/configCases/container/1-container-full/upgrade-react.js new file mode 100644 index 00000000000..2cadfc0b71a --- /dev/null +++ b/test/configCases/container/1-container-full/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("3.2.1"); +} diff --git a/test/configCases/container/1-container-full/webpack.config.js b/test/configCases/container/1-container-full/webpack.config.js new file mode 100644 index 00000000000..130d25ac128 --- /dev/null +++ b/test/configCases/container/1-container-full/webpack.config.js @@ -0,0 +1,68 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +const common = { + entry: { + main: "./index.js" + }, + optimization: { + runtimeChunk: "single" + } +}; + +/** @type {ConstructorParameters[0]} */ +const commonMF = { + runtime: false, + exposes: { + "./ComponentB": "./ComponentB", + "./ComponentC": "./ComponentC" + }, + shared: ["react"] +}; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + ...common, + output: { + filename: "[name].js", + uniqueName: "1-container-full" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + library: { type: "commonjs-module" }, + filename: "container.js", + remotes: { + containerA: "../0-container-full/container.js", + containerB: "./container.js" + }, + ...commonMF + }) + ] + }, + { + ...common, + experiments: { + outputModule: true + }, + output: { + filename: "module/[name].mjs", + uniqueName: "1-container-full-mjs" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + library: { type: "module" }, + filename: "module/container.mjs", + remotes: { + containerA: "../../0-container-full/module/container.mjs", + containerB: "./container.mjs" + }, + ...commonMF + }) + ], + target: "node14" + } +]; diff --git a/test/configCases/container/1-transitive-overriding/a.js b/test/configCases/container/1-transitive-overriding/a.js new file mode 100644 index 00000000000..a8d5b547bb7 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/a.js @@ -0,0 +1 @@ +export * from "container-with-shared/b"; diff --git a/test/configCases/container/1-transitive-overriding/b.js b/test/configCases/container/1-transitive-overriding/b.js new file mode 100644 index 00000000000..2ee5f158c98 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/b.js @@ -0,0 +1 @@ +export * from "./shared"; diff --git a/test/configCases/container/1-transitive-overriding/index.js b/test/configCases/container/1-transitive-overriding/index.js new file mode 100644 index 00000000000..b5fd77622f5 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/index.js @@ -0,0 +1,35 @@ +it("should work normally (a)", () => { + return import("./a").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (b)", () => { + return import("./b").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (container-with-shared/a)", () => { + return import("container-with-shared/a").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (container-with-shared/b)", () => { + return import("container-with-shared/b").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (container-no-shared/a)", () => { + return import("container-no-shared/a").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should work normally (container-no-shared/b)", () => { + return import("container-no-shared/b").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); diff --git a/test/configCases/container/1-transitive-overriding/modules-from-remote.js b/test/configCases/container/1-transitive-overriding/modules-from-remote.js new file mode 100644 index 00000000000..673fcd836b4 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/modules-from-remote.js @@ -0,0 +1 @@ +export { default } from "container-with-shared/modules"; diff --git a/test/configCases/container/1-transitive-overriding/modules.js b/test/configCases/container/1-transitive-overriding/modules.js new file mode 100644 index 00000000000..8e19db7b0c6 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/modules.js @@ -0,0 +1 @@ +export default Object.keys(__webpack_modules__).sort(); diff --git a/test/configCases/container/1-transitive-overriding/shared.js b/test/configCases/container/1-transitive-overriding/shared.js new file mode 100644 index 00000000000..1fba08a2ae1 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/shared.js @@ -0,0 +1 @@ +export const value = "shared"; diff --git a/test/configCases/container/1-transitive-overriding/webpack.config.js b/test/configCases/container/1-transitive-overriding/webpack.config.js new file mode 100644 index 00000000000..c4909db5bc2 --- /dev/null +++ b/test/configCases/container/1-transitive-overriding/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container-no-shared", + library: { type: "commonjs-module" }, + filename: "container-no-shared.js", + exposes: ["./a", "./b", "./modules", "./modules-from-remote"], + remotes: { + "container-with-shared": + "../0-transitive-overriding/container-with-shared.js", + "container-no-shared": "./container-no-shared.js" + } + }) + ] +}; diff --git a/test/configCases/container/2-container-full/App.js b/test/configCases/container/2-container-full/App.js new file mode 100644 index 00000000000..24380bb85a7 --- /dev/null +++ b/test/configCases/container/2-container-full/App.js @@ -0,0 +1,8 @@ +import OldReact from "old-react"; +import OldReactSingleton from "old-react-singleton"; +import React from "react"; +import ComponentC from "containerB/ComponentC"; + +export default () => { + return `App rendered with [${React()}] and [${OldReact()}] and [${OldReactSingleton()}] and [${ComponentC()}]`; +}; diff --git a/test/configCases/container/2-container-full/Self.js b/test/configCases/container/2-container-full/Self.js new file mode 100644 index 00000000000..7a0d1cfcae9 --- /dev/null +++ b/test/configCases/container/2-container-full/Self.js @@ -0,0 +1,3 @@ +export default { + in: __filename +}; diff --git a/test/configCases/container/2-container-full/index.js b/test/configCases/container/2-container-full/index.js new file mode 100644 index 00000000000..a07bb250faa --- /dev/null +++ b/test/configCases/container/2-container-full/index.js @@ -0,0 +1,51 @@ +let warnings = []; +let oldWarn; + +beforeEach(done => { + oldWarn = console.warn; + console.warn = m => warnings.push(m); + done(); +}); + +afterEach(done => { + expectWarning(); + console.warn = oldWarn; + done(); +}); + +const expectWarning = regexp => { + if (!regexp) { + expect(warnings).toEqual([]); + } else { + expect(warnings).toHaveLength(1); + expect(warnings[0]).toMatch(regexp); + } + warnings.length = 0; +}; + +it("should load the component from container", () => { + return import("./App").then(({ default: App }) => { + expectWarning( + /Unsatisfied version 8 from 2-container-full of shared singleton module react \(required \^2\)/ + ); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 8] and [This is react 2.1.0] and [This is react 8] and [ComponentC rendered with [This is react 8] and [ComponentA rendered with [This is react 8]] and [ComponentB rendered with [This is react 8]]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 9] and [This is react 2.1.0] and [This is react 9] and [ComponentC rendered with [This is react 9] and [ComponentA rendered with [This is react 9]] and [ComponentB rendered with [This is react 9]]]" + ); + }); + }); +}); + +import Self from "./Self"; + +it("should load itself from its own container", () => { + return import("self/Self").then(({ default: RemoteSelf }) => { + expect(RemoteSelf).toBe(Self); + }); +}); diff --git a/test/configCases/container/2-container-full/node_modules/package.json b/test/configCases/container/2-container-full/node_modules/package.json new file mode 100644 index 00000000000..88d4e7f3e51 --- /dev/null +++ b/test/configCases/container/2-container-full/node_modules/package.json @@ -0,0 +1,3 @@ +{ + "version": "8" +} diff --git a/test/configCases/container/2-container-full/node_modules/react.js b/test/configCases/container/2-container-full/node_modules/react.js new file mode 100644 index 00000000000..ab65e86c7fe --- /dev/null +++ b/test/configCases/container/2-container-full/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "8"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/2-container-full/package.json b/test/configCases/container/2-container-full/package.json new file mode 100644 index 00000000000..e04e63e83ad --- /dev/null +++ b/test/configCases/container/2-container-full/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "react": "*" + } +} diff --git a/test/configCases/container/2-container-full/upgrade-react.js b/test/configCases/container/2-container-full/upgrade-react.js new file mode 100644 index 00000000000..083ef3a4541 --- /dev/null +++ b/test/configCases/container/2-container-full/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("9"); +} diff --git a/test/configCases/container/2-container-full/webpack.config.js b/test/configCases/container/2-container-full/webpack.config.js new file mode 100644 index 00000000000..bbe627a943c --- /dev/null +++ b/test/configCases/container/2-container-full/webpack.config.js @@ -0,0 +1,40 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + uniqueName: "2-container-full" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "main", + library: { type: "commonjs-module" }, + remotes: { + containerB: "../1-container-full/container.js", + self: [ + "var undefined", + "var (() => { throw new Error(); })()", + "var { then: (a, b) => b(new Error()) }", + "./bundle0.js" + ] + }, + exposes: ["./Self"], + shared: { + react: "react", + "old-react": { + import: false, + shareKey: "react", + requiredVersion: "^2" + }, + "old-react-singleton": { + import: false, + shareKey: "react", + requiredVersion: "^2", + singleton: true + } + } + }) + ] +}; diff --git a/test/configCases/container/2-transitive-overriding/index.js b/test/configCases/container/2-transitive-overriding/index.js new file mode 100644 index 00000000000..f7771726839 --- /dev/null +++ b/test/configCases/container/2-transitive-overriding/index.js @@ -0,0 +1,44 @@ +it("should allow transitive overrides (container-no-shared/a)", () => { + return import("container-no-shared/a").then(({ value }) => { + expect(value).toBe("new shared"); + }); +}); + +it("should not override non-overridables (container-no-shared/b)", () => { + return import("container-no-shared/b").then(({ value }) => { + expect(value).toBe("shared"); + }); +}); + +it("should have good module ids", async () => { + const { default: m0 } = await import( + "container-no-shared/modules-from-remote" + ); + const { default: m1 } = await import("container-no-shared/modules"); + const m2 = Object.keys(__webpack_modules__).sort(); + expect(m0).toEqual([ + "./b.js", + "./modules.js", + "webpack/container/entry/container-with-shared", + "webpack/sharing/consume/default/shared/./shared" + ]); + expect(m1).toEqual([ + "./a.js", + "./b.js", + "./modules-from-remote.js", + "./modules.js", + "webpack/container/entry/container-no-shared", + "webpack/container/reference/container-with-shared", + "webpack/container/remote/container-with-shared/b", + "webpack/container/remote/container-with-shared/modules" + ]); + expect(m2).toEqual([ + "./index.js", + "./shared.js", + "webpack/container/reference/container-no-shared", + "webpack/container/remote/container-no-shared/a", + "webpack/container/remote/container-no-shared/b", + "webpack/container/remote/container-no-shared/modules", + "webpack/container/remote/container-no-shared/modules-from-remote" + ]); +}); diff --git a/test/configCases/container/2-transitive-overriding/shared.js b/test/configCases/container/2-transitive-overriding/shared.js new file mode 100644 index 00000000000..85dc52f0089 --- /dev/null +++ b/test/configCases/container/2-transitive-overriding/shared.js @@ -0,0 +1 @@ +export const value = "new shared"; diff --git a/test/configCases/container/2-transitive-overriding/webpack.config.js b/test/configCases/container/2-transitive-overriding/webpack.config.js new file mode 100644 index 00000000000..b0c9812e447 --- /dev/null +++ b/test/configCases/container/2-transitive-overriding/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + remoteType: "commonjs-module", + remotes: { + "container-no-shared": + "../1-transitive-overriding/container-no-shared.js" + }, + shared: { + "./shared": { + shareKey: "shared", + version: "2" + } + } + }) + ] +}; diff --git a/test/configCases/container/3-container-full/App.js b/test/configCases/container/3-container-full/App.js new file mode 100644 index 00000000000..3544d07aa95 --- /dev/null +++ b/test/configCases/container/3-container-full/App.js @@ -0,0 +1,6 @@ +import React from "react"; +import ComponentC from "containerB/ComponentC"; + +export default () => { + return `App rendered with [${React()}] and [${ComponentC()}]`; +}; diff --git a/test/configCases/container/3-container-full/index.js b/test/configCases/container/3-container-full/index.js new file mode 100644 index 00000000000..b1968f6631b --- /dev/null +++ b/test/configCases/container/3-container-full/index.js @@ -0,0 +1,15 @@ +it("should load the component from container", () => { + return import("./App").then(({ default: App }) => { + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 2.1.0] and [ComponentC rendered with [This is react 2.1.0] and [ComponentA rendered with [This is react 2.1.0]] and [ComponentB rendered with [This is react 2.1.0]]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 9] and [ComponentC rendered with [This is react 9] and [ComponentA rendered with [This is react 9]] and [ComponentB rendered with [This is react 9]]]" + ); + }); + }); +}); diff --git a/test/configCases/container/3-container-full/node_modules/react.js b/test/configCases/container/3-container-full/node_modules/react.js new file mode 100644 index 00000000000..ab65e86c7fe --- /dev/null +++ b/test/configCases/container/3-container-full/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "8"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/3-container-full/package.json b/test/configCases/container/3-container-full/package.json new file mode 100644 index 00000000000..e04e63e83ad --- /dev/null +++ b/test/configCases/container/3-container-full/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "react": "*" + } +} diff --git a/test/configCases/container/3-container-full/upgrade-react.js b/test/configCases/container/3-container-full/upgrade-react.js new file mode 100644 index 00000000000..083ef3a4541 --- /dev/null +++ b/test/configCases/container/3-container-full/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("9"); +} diff --git a/test/configCases/container/3-container-full/warnings.js b/test/configCases/container/3-container-full/warnings.js new file mode 100644 index 00000000000..43d2a210b74 --- /dev/null +++ b/test/configCases/container/3-container-full/warnings.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + [/No version specified and unable to automatically determine one/] +]; diff --git a/test/configCases/container/3-container-full/webpack.config.js b/test/configCases/container/3-container-full/webpack.config.js new file mode 100644 index 00000000000..9c694a12d8e --- /dev/null +++ b/test/configCases/container/3-container-full/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ModuleFederationPlugin({ + remoteType: "commonjs-module", + remotes: { + containerB: "../1-container-full/container.js" + }, + shared: ["react"] + }) + ] +}; diff --git a/test/configCases/container/circular/a.js b/test/configCases/container/circular/a.js new file mode 100644 index 00000000000..6c8e707b838 --- /dev/null +++ b/test/configCases/container/circular/a.js @@ -0,0 +1,2 @@ +export default "a"; +export { default as b, a as ba } from "container2/b"; diff --git a/test/configCases/container/circular/b.js b/test/configCases/container/circular/b.js new file mode 100644 index 00000000000..a75475b401e --- /dev/null +++ b/test/configCases/container/circular/b.js @@ -0,0 +1,2 @@ +export default "b"; +export { default as a, b as ab } from "container/a"; diff --git a/test/configCases/container/circular/index.js b/test/configCases/container/circular/index.js new file mode 100644 index 00000000000..50056156585 --- /dev/null +++ b/test/configCases/container/circular/index.js @@ -0,0 +1,13 @@ +it("should allow circular dependencies between containers (a)", async () => { + const { default: value, b, ba } = await import("container/a"); + expect(value).toBe("a"); + expect(b).toBe("b"); + expect(ba).toBe("a"); +}); + +it("should allow circular dependencies between containers (b)", async () => { + const { default: value, a, ab } = await import("container2/b"); + expect(value).toBe("b"); + expect(a).toBe("a"); + expect(ab).toBe("b"); +}); diff --git a/test/configCases/container/circular/test.config.js b/test/configCases/container/circular/test.config.js new file mode 100644 index 00000000000..d9a38d25b63 --- /dev/null +++ b/test/configCases/container/circular/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./main.js"; + } +}; diff --git a/test/configCases/container/circular/webpack.config.js b/test/configCases/container/circular/webpack.config.js new file mode 100644 index 00000000000..1e0e2528a58 --- /dev/null +++ b/test/configCases/container/circular/webpack.config.js @@ -0,0 +1,36 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** + * @returns {import("../../../../").Configuration} configuration + */ +function createConfig() { + return { + output: { + filename: "[name].js" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + library: { type: "commonjs-module" }, + exposes: ["./a"], + remotes: { + container2: + "promise Promise.resolve().then(() => require('./container2.js'))" + } + }), + new ModuleFederationPlugin({ + name: "container2", + library: { type: "commonjs-module" }, + exposes: ["./b"], + remotes: { + container: + "promise Promise.resolve().then(() => require('./container.js'))" + } + }) + ] + }; +} + +module.exports = createConfig(); diff --git a/test/configCases/container/container-entry-overridables/index.js b/test/configCases/container/container-entry-overridables/index.js new file mode 100644 index 00000000000..d7d663cf3b0 --- /dev/null +++ b/test/configCases/container/container-entry-overridables/index.js @@ -0,0 +1,27 @@ +it("should expose modules from the container", async () => { + const container = __non_webpack_require__("./container-file.js"); + expect(container).toBeTypeOf("object"); + expect(container.init).toBeTypeOf("function"); + container.init({ + value: { + "0": { + get: () => + new Promise(resolve => { + setTimeout(() => { + resolve(() => ({ + __esModule: true, + default: "overridden-value" + })); + }, 100); + }) + } + } + }); + const testFactory = await container.get("./test"); + expect(testFactory).toBeTypeOf("function"); + expect(testFactory()).toEqual( + nsObj({ + default: "test overridden-value" + }) + ); +}); diff --git a/test/configCases/container/container-entry-overridables/test.js b/test/configCases/container/container-entry-overridables/test.js new file mode 100644 index 00000000000..20449c1d099 --- /dev/null +++ b/test/configCases/container/container-entry-overridables/test.js @@ -0,0 +1,3 @@ +import value from "./value"; + +export default `test ${value}`; diff --git a/test/configCases/container/container-entry-overridables/value.js b/test/configCases/container/container-entry-overridables/value.js new file mode 100644 index 00000000000..a0698aa0dbc --- /dev/null +++ b/test/configCases/container/container-entry-overridables/value.js @@ -0,0 +1 @@ +export default "value"; diff --git a/test/configCases/container/container-entry-overridables/webpack.config.js b/test/configCases/container/container-entry-overridables/webpack.config.js new file mode 100644 index 00000000000..709ff85a227 --- /dev/null +++ b/test/configCases/container/container-entry-overridables/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +const { ContainerPlugin } = require("../../../../").container; +const { ConsumeSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ContainerPlugin({ + name: "container", + filename: "container-file.js", + library: { + type: "commonjs-module" + }, + exposes: { + "./test": "./test" + } + }), + new ConsumeSharedPlugin({ + consumes: { + "./value": { + shareKey: "value" + } + } + }) + ] +}; diff --git a/test/configCases/container/container-entry/index.js b/test/configCases/container/container-entry/index.js new file mode 100644 index 00000000000..037fbf070f2 --- /dev/null +++ b/test/configCases/container/container-entry/index.js @@ -0,0 +1,19 @@ +it("should expose modules from the container", async () => { + const container = __non_webpack_require__("./container-file.js"); + expect(container).toBeTypeOf("object"); + expect(container.get).toBeTypeOf("function"); + const testFactory = await container.get("./test"); + expect(testFactory).toBeTypeOf("function"); + expect(testFactory()).toBe("test"); + const mainFactory = await container.get("."); + expect(mainFactory).toBeTypeOf("function"); + expect(mainFactory()).toBe("main"); + const test2Factory = await container.get("./test2"); + expect(test2Factory).toBeTypeOf("function"); + expect(test2Factory()).toEqual( + nsObj({ + default: "test2", + other: "other" + }) + ); +}); diff --git a/test/configCases/container/container-entry/init-module.js b/test/configCases/container/container-entry/init-module.js new file mode 100644 index 00000000000..9c40a8e449f --- /dev/null +++ b/test/configCases/container/container-entry/init-module.js @@ -0,0 +1,2 @@ +import { set } from "./state"; +set("ok"); diff --git a/test/configCases/container/container-entry/main.js b/test/configCases/container/container-entry/main.js new file mode 100644 index 00000000000..0470f820157 --- /dev/null +++ b/test/configCases/container/container-entry/main.js @@ -0,0 +1 @@ +module.exports = "main"; diff --git a/test/configCases/container/container-entry/state.js b/test/configCases/container/container-entry/state.js new file mode 100644 index 00000000000..4f5e85fe7d9 --- /dev/null +++ b/test/configCases/container/container-entry/state.js @@ -0,0 +1,4 @@ +export let value = ""; +export function set(v) { + value = v; +} diff --git a/test/configCases/container/container-entry/test.js b/test/configCases/container/container-entry/test.js new file mode 100644 index 00000000000..1caa3322d9a --- /dev/null +++ b/test/configCases/container/container-entry/test.js @@ -0,0 +1 @@ +module.exports = "test"; diff --git a/test/configCases/container/container-entry/test2.js b/test/configCases/container/container-entry/test2.js new file mode 100644 index 00000000000..121fc0290ed --- /dev/null +++ b/test/configCases/container/container-entry/test2.js @@ -0,0 +1,6 @@ +import { value } from "./state"; + +export default "test2"; +export const other = "other"; + +expect(value).toBe("ok"); diff --git a/test/configCases/container/container-entry/webpack.config.js b/test/configCases/container/container-entry/webpack.config.js new file mode 100644 index 00000000000..5ab7e37c838 --- /dev/null +++ b/test/configCases/container/container-entry/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const { ContainerPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + pathinfo: true + }, + plugins: [ + new ContainerPlugin({ + name: "container", + filename: "container-file.js", + library: { + type: "commonjs-module" + }, + exposes: { + "./test": "./test", + "./test2": ["./init-module", "./test2"], + ".": "./main" + } + }) + ] +}; diff --git a/test/configCases/container/container-reference-override/index.js b/test/configCases/container/container-reference-override/index.js new file mode 100644 index 00000000000..c8119498de9 --- /dev/null +++ b/test/configCases/container/container-reference-override/index.js @@ -0,0 +1,3 @@ +it("should import the correct modules", () => { + return import("./module").then(({ test }) => test()); +}); diff --git a/test/configCases/container/container-reference-override/module.js b/test/configCases/container/container-reference-override/module.js new file mode 100644 index 00000000000..4cc821b7759 --- /dev/null +++ b/test/configCases/container/container-reference-override/module.js @@ -0,0 +1,7 @@ +import abc from "abc/hello-world"; +import other from "abc/other"; + +export function test() { + expect(abc).toBe("ok ./hello-world"); + expect(other).toBe("ok ./other"); +} diff --git a/test/configCases/container/container-reference-override/new-test.js b/test/configCases/container/container-reference-override/new-test.js new file mode 100644 index 00000000000..50b9a86597c --- /dev/null +++ b/test/configCases/container/container-reference-override/new-test.js @@ -0,0 +1 @@ +module.exports = x => `ok ${x}`; diff --git a/test/configCases/container/container-reference-override/test.config.js b/test/configCases/container/container-reference-override/test.config.js new file mode 100644 index 00000000000..5006ea774c0 --- /dev/null +++ b/test/configCases/container/container-reference-override/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + let ss; + scope.ABC = { + async get(module) { + const testFactory = await ss.test[Object.keys(ss.test)[0]].get(); + const test = testFactory(); + return () => test(module); + }, + async init(shareScope) { + ss = shareScope; + } + }; + } +}; diff --git a/test/configCases/container/container-reference-override/webpack.config.js b/test/configCases/container/container-reference-override/webpack.config.js new file mode 100644 index 00000000000..2b9285e98d0 --- /dev/null +++ b/test/configCases/container/container-reference-override/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const { ContainerReferencePlugin } = require("../../../../").container; +const { ProvideSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ContainerReferencePlugin({ + remoteType: "var", + remotes: { + abc: "ABC" + } + }), + new ProvideSharedPlugin({ + provides: { + "./new-test": { + shareKey: "test", + version: false + } + } + }) + ] +}; diff --git a/test/configCases/container/container-reference/index.js b/test/configCases/container/container-reference/index.js new file mode 100644 index 00000000000..c8119498de9 --- /dev/null +++ b/test/configCases/container/container-reference/index.js @@ -0,0 +1,3 @@ +it("should import the correct modules", () => { + return import("./module").then(({ test }) => test()); +}); diff --git a/test/configCases/container/container-reference/module.js b/test/configCases/container/container-reference/module.js new file mode 100644 index 00000000000..75c5d9e4e1b --- /dev/null +++ b/test/configCases/container/container-reference/module.js @@ -0,0 +1,13 @@ +import abc from "abc/hello-world"; +import main from "abc"; +import def, { module } from "def/hello-world"; +import def2, { module as module2 } from "def/hello/other/world"; + +export function test() { + expect(abc).toBe("abc ./hello-world"); + expect(main).toBe("abc ."); + expect(def).toBe("def"); + expect(def2).toBe("def"); + expect(module).toBe("./hello-world"); + expect(module2).toBe("./hello/other/world"); +} diff --git a/test/configCases/container/container-reference/test.config.js b/test/configCases/container/container-reference/test.config.js new file mode 100644 index 00000000000..86191d988c8 --- /dev/null +++ b/test/configCases/container/container-reference/test.config.js @@ -0,0 +1,28 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + scope.ABC = { + get(module) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(() => `abc ${module}`); + }, 100); + }); + } + }; + scope.DEF = { + get(module) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(() => ({ + __esModule: true, + module, + default: "def" + })); + }, 100); + }); + } + }; + } +}; diff --git a/test/configCases/container/container-reference/webpack.config.js b/test/configCases/container/container-reference/webpack.config.js new file mode 100644 index 00000000000..3aa1cad31e9 --- /dev/null +++ b/test/configCases/container/container-reference/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +const { ContainerReferencePlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ContainerReferencePlugin({ + remoteType: "var", + remotes: { + abc: "ABC", + def: "DEF" + } + }) + ] +}; diff --git a/test/configCases/container/eager-shared/index.js b/test/configCases/container/eager-shared/index.js new file mode 100644 index 00000000000..6ca58a71970 --- /dev/null +++ b/test/configCases/container/eager-shared/index.js @@ -0,0 +1,13 @@ +import TinyEmitter from 'tiny-emitter' + +it("should load the component from container", () => { + const emitter = new TinyEmitter() + + emitter.on('hello', () => {}) + + expect(emitter.e.hello).toBeDefined(); + + return import('service/emitter').then(({ emitter }) => { + expect(emitter.e.hello).toBeDefined(); + }) +}); diff --git a/test/configCases/container/eager-shared/node_modules/tiny-emitter/index.js b/test/configCases/container/eager-shared/node_modules/tiny-emitter/index.js new file mode 100644 index 00000000000..b85d8921718 --- /dev/null +++ b/test/configCases/container/eager-shared/node_modules/tiny-emitter/index.js @@ -0,0 +1,66 @@ +function E () { + // Keep this empty so it's easier to inherit from + // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) +} + +E.prototype = { + on: function (name, callback, ctx) { + var e = this.e || (this.e = {}); + + (e[name] || (e[name] = [])).push({ + fn: callback, + ctx: ctx + }); + + return this; + }, + + once: function (name, callback, ctx) { + var self = this; + function listener () { + self.off(name, listener); + callback.apply(ctx, arguments); + }; + + listener._ = callback + return this.on(name, listener, ctx); + }, + + emit: function (name) { + var data = [].slice.call(arguments, 1); + var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); + var i = 0; + var len = evtArr.length; + + for (i; i < len; i++) { + evtArr[i].fn.apply(evtArr[i].ctx, data); + } + + return this; + }, + + off: function (name, callback) { + var e = this.e || (this.e = {}); + var evts = e[name]; + var liveEvents = []; + + if (evts && callback) { + for (var i = 0, len = evts.length; i < len; i++) { + if (evts[i].fn !== callback && evts[i].fn._ !== callback) + liveEvents.push(evts[i]); + } + } + + // Remove event from queue to prevent memory leak + // Suggested by https://github.com/lazd + // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 + + (liveEvents.length) + ? e[name] = liveEvents + : delete e[name]; + + return this; + } +}; + +module.exports = E; diff --git a/test/configCases/container/eager-shared/node_modules/tiny-emitter/package.json b/test/configCases/container/eager-shared/node_modules/tiny-emitter/package.json new file mode 100644 index 00000000000..00786ca095d --- /dev/null +++ b/test/configCases/container/eager-shared/node_modules/tiny-emitter/package.json @@ -0,0 +1,7 @@ +{ + "name": "tiny-emitter", + "version": "2.0.0", + "description": "A tiny (less than 1k) event emitter library", + "main": "index.js", + "license": "MIT" +} diff --git a/test/configCases/container/eager-shared/package.json b/test/configCases/container/eager-shared/package.json new file mode 100644 index 00000000000..4460fc7aaab --- /dev/null +++ b/test/configCases/container/eager-shared/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": { + "tiny-emitter": "=2.0.0" + } +} diff --git a/test/configCases/container/eager-shared/webpack.config.js b/test/configCases/container/eager-shared/webpack.config.js new file mode 100644 index 00000000000..ba1b50fd3ec --- /dev/null +++ b/test/configCases/container/eager-shared/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; +const { dependencies } = require("./package.json"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + remoteType: "commonjs-module", + remotes: { + service: "../0-eager-shared/container.js" + }, + shared: { + "tiny-emitter": { + eager: true, + singleton: true, + requiredVersion: dependencies["tiny-emitter"] + } + } + }) + ] +}; diff --git a/test/configCases/container/error-handling/evaluation-error-cjs.js b/test/configCases/container/error-handling/evaluation-error-cjs.js new file mode 100644 index 00000000000..86f098abe19 --- /dev/null +++ b/test/configCases/container/error-handling/evaluation-error-cjs.js @@ -0,0 +1,6 @@ +export let error; +try { + require("remote/module"); +} catch (err) { + error = err; +} diff --git a/test/configCases/container/error-handling/evaluation-error-tl-await.js b/test/configCases/container/error-handling/evaluation-error-tl-await.js new file mode 100644 index 00000000000..f0a3f1bec8a --- /dev/null +++ b/test/configCases/container/error-handling/evaluation-error-tl-await.js @@ -0,0 +1,6 @@ +export let error; +try { + await import("remote/module"); +} catch (err) { + error = err; +} diff --git a/test/configCases/container/error-handling/evaluation-error.js b/test/configCases/container/error-handling/evaluation-error.js new file mode 100644 index 00000000000..e117d4331ee --- /dev/null +++ b/test/configCases/container/error-handling/evaluation-error.js @@ -0,0 +1 @@ +import "remote/module"; diff --git a/test/configCases/container/error-handling/index.js b/test/configCases/container/error-handling/index.js new file mode 100644 index 00000000000..f5c7a1a4620 --- /dev/null +++ b/test/configCases/container/error-handling/index.js @@ -0,0 +1,109 @@ +"use strict"; + +let warnings = []; +let oldWarn; + +beforeEach(done => { + oldWarn = console.warn; + console.warn = m => warnings.push(m); + done(); +}); + +afterEach(done => { + expectWarning(); + console.warn = oldWarn; + done(); +}); + +const expectWarning = regexp => { + if (!regexp) { + expect(warnings).toEqual([]); + } else { + expect(warnings).toHaveLength(1); + expect(warnings[0]).toMatch(regexp); + } + warnings.length = 0; +}; + +it("should allow to handle remote loading error with import()", async () => { + await expect(import("./loading-error")).rejects.toEqual( + expect.objectContaining({ + code: "ENOENT" + }) + ); +}); + +it("should allow to handle remote loading error with require", async () => { + const { error } = await import("./loading-error-cjs"); + expect(error).toEqual( + expect.objectContaining({ + code: "ENOENT" + }) + ); +}); + +it("should allow to handle remote loading error with top-level-await import()", async () => { + const { error } = await import("./loading-error-tl-await"); + expect(error).toEqual( + expect.objectContaining({ + code: "ENOENT" + }) + ); +}); + +it("should allow to handle invalid remote module error with import()", async () => { + await expect(import("./invalid-module")).rejects.toEqual( + expect.objectContaining({ + message: + 'Module "./invalid" does not exist in container.\nwhile loading "./invalid" from webpack/container/reference/remote' + }) + ); + // at this point sharing initialization runs and triggers a warning that 'invalid' remote can't be loaded + expectWarning(/ENOENT/); +}); + +it("should allow to handle invalid remote module error with require", async () => { + const { error } = await import("./invalid-module-cjs"); + expect(error).toEqual( + expect.objectContaining({ + message: + 'Module "./invalid" does not exist in container.\nwhile loading "./invalid" from webpack/container/reference/remote' + }) + ); +}); + +it("should allow to handle invalid remote module error with top-level-await import()", async () => { + const { error } = await import("./invalid-module-tl-await"); + expect(error).toEqual( + expect.objectContaining({ + message: + 'Module "./invalid" does not exist in container.\nwhile loading "./invalid" from webpack/container/reference/remote' + }) + ); +}); + +it("should allow to handle remote module evaluation error with import()", async () => { + await expect(import("./evaluation-error")).rejects.toEqual( + expect.objectContaining({ + message: "evaluation error" + }) + ); +}); + +it("should allow to handle remote module evaluation error with require", async () => { + const { error } = await import("./evaluation-error-cjs"); + expect(error).toEqual( + expect.objectContaining({ + message: "evaluation error" + }) + ); +}); + +it("should allow to handle remote module evaluation error with top-level-await import()", async () => { + const { error } = await import("./evaluation-error-tl-await"); + expect(error).toEqual( + expect.objectContaining({ + message: "evaluation error" + }) + ); +}); diff --git a/test/configCases/container/error-handling/invalid-module-cjs.js b/test/configCases/container/error-handling/invalid-module-cjs.js new file mode 100644 index 00000000000..ee4a188b6d7 --- /dev/null +++ b/test/configCases/container/error-handling/invalid-module-cjs.js @@ -0,0 +1,6 @@ +export let error; +try { + require("remote/invalid"); +} catch (err) { + error = err; +} diff --git a/test/configCases/container/error-handling/invalid-module-tl-await.js b/test/configCases/container/error-handling/invalid-module-tl-await.js new file mode 100644 index 00000000000..14d60b4e2d2 --- /dev/null +++ b/test/configCases/container/error-handling/invalid-module-tl-await.js @@ -0,0 +1,6 @@ +export let error; +try { + await import("remote/invalid"); +} catch (err) { + error = err; +} diff --git a/test/configCases/container/error-handling/invalid-module.js b/test/configCases/container/error-handling/invalid-module.js new file mode 100644 index 00000000000..4ee4aa9ce5e --- /dev/null +++ b/test/configCases/container/error-handling/invalid-module.js @@ -0,0 +1 @@ +import "remote/invalid"; diff --git a/test/configCases/container/error-handling/loading-error-cjs.js b/test/configCases/container/error-handling/loading-error-cjs.js new file mode 100644 index 00000000000..8d68ea982b1 --- /dev/null +++ b/test/configCases/container/error-handling/loading-error-cjs.js @@ -0,0 +1,6 @@ +export let error; +try { + require("invalid/module"); +} catch (err) { + error = err; +} diff --git a/test/configCases/container/error-handling/loading-error-tl-await.js b/test/configCases/container/error-handling/loading-error-tl-await.js new file mode 100644 index 00000000000..dadc1be41fa --- /dev/null +++ b/test/configCases/container/error-handling/loading-error-tl-await.js @@ -0,0 +1,6 @@ +export let error; +try { + await import("invalid/module"); +} catch (err) { + error = err; +} diff --git a/test/configCases/container/error-handling/loading-error.js b/test/configCases/container/error-handling/loading-error.js new file mode 100644 index 00000000000..f1a1426aa8f --- /dev/null +++ b/test/configCases/container/error-handling/loading-error.js @@ -0,0 +1 @@ +import "invalid/module"; diff --git a/test/configCases/container/error-handling/module.js b/test/configCases/container/error-handling/module.js new file mode 100644 index 00000000000..1e5c246bc8d --- /dev/null +++ b/test/configCases/container/error-handling/module.js @@ -0,0 +1 @@ +throw new Error("evaluation error"); diff --git a/test/configCases/container/error-handling/webpack.config.js b/test/configCases/container/error-handling/webpack.config.js new file mode 100644 index 00000000000..579f736d00f --- /dev/null +++ b/test/configCases/container/error-handling/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + output: { + strictModuleExceptionHandling: true + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + library: { type: "commonjs-module" }, + filename: "container.js", + exposes: ["./module"], + remotes: { + remote: "./container.js", + invalid: "./invalid.js" + } + }) + ] +}; diff --git a/test/configCases/container/exposed-overridables/App.js b/test/configCases/container/exposed-overridables/App.js new file mode 100644 index 00000000000..f755ba593f3 --- /dev/null +++ b/test/configCases/container/exposed-overridables/App.js @@ -0,0 +1,8 @@ +import LocalButton from "./Button"; +import React from "react"; + +function App() { + return LocalButton() + React; +} + +export default App; diff --git a/test/configCases/container/exposed-overridables/Button.js b/test/configCases/container/exposed-overridables/Button.js new file mode 100644 index 00000000000..be278197f6e --- /dev/null +++ b/test/configCases/container/exposed-overridables/Button.js @@ -0,0 +1,5 @@ +import React from "react"; + +const Button = () => "Button" + React; + +export default Button; diff --git a/test/configCases/container/exposed-overridables/index.js b/test/configCases/container/exposed-overridables/index.js new file mode 100644 index 00000000000..8d758dcbbde --- /dev/null +++ b/test/configCases/container/exposed-overridables/index.js @@ -0,0 +1,4 @@ +it("should allow to import exposed modules sync", () => { + const { default: App } = require("./App"); + expect(App()).toBe("ButtonReactReact"); +}); diff --git a/test/configCases/container/exposed-overridables/node_modules/package.json b/test/configCases/container/exposed-overridables/node_modules/package.json new file mode 100644 index 00000000000..a1069cc8a84 --- /dev/null +++ b/test/configCases/container/exposed-overridables/node_modules/package.json @@ -0,0 +1,4 @@ +{ + "name": "react", + "version": "1.0.0" +} diff --git a/test/configCases/container/exposed-overridables/node_modules/react.js b/test/configCases/container/exposed-overridables/node_modules/react.js new file mode 100644 index 00000000000..ff64eb39526 --- /dev/null +++ b/test/configCases/container/exposed-overridables/node_modules/react.js @@ -0,0 +1 @@ +export default "React"; diff --git a/test/configCases/container/exposed-overridables/package.json b/test/configCases/container/exposed-overridables/package.json new file mode 100644 index 00000000000..7a8cb9b6720 --- /dev/null +++ b/test/configCases/container/exposed-overridables/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "react": "1.0.0" + } +} diff --git a/test/configCases/container/exposed-overridables/webpack.config.js b/test/configCases/container/exposed-overridables/webpack.config.js new file mode 100644 index 00000000000..bfc87cb2ba6 --- /dev/null +++ b/test/configCases/container/exposed-overridables/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ModuleFederationPlugin({ + name: "container", + filename: "container.js", + exposes: { + "./Button": "./Button" + }, + shared: { + react: { + eager: true + } + } + }) + ] +}; diff --git a/test/configCases/container/module-federation-with-shareScope/App.js b/test/configCases/container/module-federation-with-shareScope/App.js new file mode 100644 index 00000000000..43f44221946 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/App.js @@ -0,0 +1,10 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; +import ComponentB from "containerB/ComponentB"; +import LocalComponentB from "./ComponentB"; + +export default () => { + return `App rendered with [${React()}] and [${ComponentA()}] and [${ComponentB()}]`; +}; + +expect(ComponentB).not.toBe(LocalComponentB); diff --git a/test/configCases/container/module-federation-with-shareScope/ComponentB.js b/test/configCases/container/module-federation-with-shareScope/ComponentB.js new file mode 100644 index 00000000000..1943469c746 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/ComponentB.js @@ -0,0 +1,5 @@ +import React from "react"; + +export default () => { + return `ComponentB rendered with [${React()}]`; +}; diff --git a/test/configCases/container/module-federation-with-shareScope/ComponentC.js b/test/configCases/container/module-federation-with-shareScope/ComponentC.js new file mode 100644 index 00000000000..3ff3832c718 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/ComponentC.js @@ -0,0 +1,7 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; +import ComponentB from "containerB/ComponentB"; + +export default () => { + return `ComponentC rendered with [${React()}] and [${ComponentA()}] and [${ComponentB()}]`; +}; diff --git a/test/configCases/container/module-federation-with-shareScope/index.js b/test/configCases/container/module-federation-with-shareScope/index.js new file mode 100644 index 00000000000..cedabf6db95 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/index.js @@ -0,0 +1,20 @@ +it("should load the component from container", async () => { + await __webpack_init_sharing__("test-scope"); + + // 2 scopes for "0-container-full-mjs" & "mf-with-shareScope-mjs" + expect(Object.keys(__webpack_share_scopes__["test-scope"].react).length).toBe(2); + + return import("./App").then(({ default: App }) => { + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 2.1.0] and [ComponentA rendered with [This is react 2.1.0]] and [ComponentB rendered with [This is react 2.1.0]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 3.2.1] and [ComponentA rendered with [This is react 3.2.1]] and [ComponentB rendered with [This is react 3.2.1]]" + ); + }); + }); +}); diff --git a/test/configCases/container/module-federation-with-shareScope/node_modules/package.json b/test/configCases/container/module-federation-with-shareScope/node_modules/package.json new file mode 100644 index 00000000000..87032da008a --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/node_modules/package.json @@ -0,0 +1,3 @@ +{ + "version": "2.1.0" +} diff --git a/test/configCases/container/module-federation-with-shareScope/node_modules/react.js b/test/configCases/container/module-federation-with-shareScope/node_modules/react.js new file mode 100644 index 00000000000..97d35a4bc9c --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "2.1.0"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/module-federation-with-shareScope/package.json b/test/configCases/container/module-federation-with-shareScope/package.json new file mode 100644 index 00000000000..be6238fec84 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": { + "react": "*" + } +} diff --git a/test/configCases/container/module-federation-with-shareScope/test.config.js b/test/configCases/container/module-federation-with-shareScope/test.config.js new file mode 100644 index 00000000000..bd1daf1ba17 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return i === 0 ? "./main.js" : "./module/main.mjs"; + } +}; diff --git a/test/configCases/container/module-federation-with-shareScope/upgrade-react.js b/test/configCases/container/module-federation-with-shareScope/upgrade-react.js new file mode 100644 index 00000000000..2cadfc0b71a --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("3.2.1"); +} diff --git a/test/configCases/container/module-federation-with-shareScope/webpack.config.js b/test/configCases/container/module-federation-with-shareScope/webpack.config.js new file mode 100644 index 00000000000..319f25f98f2 --- /dev/null +++ b/test/configCases/container/module-federation-with-shareScope/webpack.config.js @@ -0,0 +1,69 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +const common = { + entry: { + main: "./index.js" + }, + optimization: { + runtimeChunk: "single" + } +}; + +/** @type {ConstructorParameters[0]} */ +const commonMF = { + runtime: false, + exposes: { + "./ComponentB": "./ComponentB", + "./ComponentC": "./ComponentC" + }, + shared: ["react"], + shareScope: "test-scope" +}; + +/** @type {import("../../../../types").Configuration[]} */ +module.exports = [ + { + ...common, + output: { + filename: "[name].js", + uniqueName: "mf-with-shareScope" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + library: { type: "commonjs-module" }, + filename: "container.js", + remotes: { + containerA: "../0-container-full/container.js", + containerB: "./container.js" + }, + ...commonMF + }) + ] + }, + { + ...common, + experiments: { + outputModule: true + }, + output: { + filename: "module/[name].mjs", + uniqueName: "mf-with-shareScope-mjs" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + library: { type: "module" }, + filename: "module/container.mjs", + remotes: { + containerA: "../../0-container-full/module/container.mjs", + containerB: "./container.mjs" + }, + ...commonMF + }) + ], + target: "node14" + } +]; diff --git a/test/configCases/container/module-federation/dep.js b/test/configCases/container/module-federation/dep.js new file mode 100644 index 00000000000..78809c64c1d --- /dev/null +++ b/test/configCases/container/module-federation/dep.js @@ -0,0 +1 @@ +module.exports = "dep"; diff --git a/test/configCases/container/module-federation/index.js b/test/configCases/container/module-federation/index.js new file mode 100644 index 00000000000..c8119498de9 --- /dev/null +++ b/test/configCases/container/module-federation/index.js @@ -0,0 +1,3 @@ +it("should import the correct modules", () => { + return import("./module").then(({ test }) => test()); +}); diff --git a/test/configCases/container/module-federation/module.js b/test/configCases/container/module-federation/module.js new file mode 100644 index 00000000000..fbea1280632 --- /dev/null +++ b/test/configCases/container/module-federation/module.js @@ -0,0 +1,19 @@ +import abc from "abc/system-hello-world"; +import def, { module } from "def/system-hello-world"; +import def2, { module as module2 } from "def/system-hello/other/world"; +import other from "other/other"; +import otherSelf from "other/self"; +import self from "self/self"; +import selfOther from "self/other"; + +export function test() { + expect(abc).toBe("abc ./system-hello-world"); + expect(def).toBe("def"); + expect(def2).toBe("def"); + expect(module).toBe("./system-hello-world"); + expect(module2).toBe("./system-hello/other/world"); + expect(other).toBe("other and dep"); + expect(otherSelf).toBe("self and dep"); + expect(self).toBe("self and dep"); + expect(selfOther).toBe("other and dep"); +} diff --git a/test/configCases/container/module-federation/other.js b/test/configCases/container/module-federation/other.js new file mode 100644 index 00000000000..ec471310605 --- /dev/null +++ b/test/configCases/container/module-federation/other.js @@ -0,0 +1,3 @@ +import andBack from "other/dep"; + +export default `other and ${andBack}`; diff --git a/test/configCases/container/module-federation/self.js b/test/configCases/container/module-federation/self.js new file mode 100644 index 00000000000..d00db94c429 --- /dev/null +++ b/test/configCases/container/module-federation/self.js @@ -0,0 +1,3 @@ +import andBack from "self/dep"; + +export default `self and ${andBack}`; diff --git a/test/configCases/container/module-federation/test.config.js b/test/configCases/container/module-federation/test.config.js new file mode 100644 index 00000000000..0801dbda35d --- /dev/null +++ b/test/configCases/container/module-federation/test.config.js @@ -0,0 +1,38 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + System.setRequire(scope.require); + scope.System = System; + System.set("ABC", { + get(module) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(() => `abc ${module}`); + }, 100); + }); + } + }); + System.set("DEF", { + get(module) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(() => ({ + __esModule: true, + module, + default: "def" + })); + }, 100); + }); + } + }); + }, + afterExecute: () => { + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/container/module-federation/webpack.config.js b/test/configCases/container/module-federation/webpack.config.js new file mode 100644 index 00000000000..66abc2e02db --- /dev/null +++ b/test/configCases/container/module-federation/webpack.config.js @@ -0,0 +1,42 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** + * @returns {import("../../../../").Configuration} configuration + */ +function createConfig() { + return { + output: { + libraryTarget: "system" + }, + plugins: [ + new ModuleFederationPlugin({ + name: "container", + filename: "container.js", + library: { type: "system" }, + exposes: ["./other", "./self", "./dep"], + remotes: { + abc: "ABC", + def: "DEF", + self: "./container.js", + other: "./container2.js" + } + }), + new ModuleFederationPlugin({ + name: "container2", + filename: "container2.js", + library: { type: "system" }, + exposes: ["./other", "./self", "./dep"], + remotes: { + abc: "ABC", + def: "DEF", + self: "./container2.js", + other: "./container.js" + } + }) + ] + }; +} + +module.exports = createConfig(); diff --git a/test/configCases/container/no-shared/index.js b/test/configCases/container/no-shared/index.js new file mode 100644 index 00000000000..f33d17dfb92 --- /dev/null +++ b/test/configCases/container/no-shared/index.js @@ -0,0 +1,7 @@ +it("should allow to work without shared modules", async () => { + await __webpack_init_sharing__("default"); + const container = __non_webpack_require__("./container.js"); + container.init(__webpack_share_scopes__.default); + const moduleFactory = await container.get("./module"); + expect(moduleFactory().ok).toBe(true); +}); diff --git a/test/configCases/container/no-shared/module.js b/test/configCases/container/no-shared/module.js new file mode 100644 index 00000000000..3d6576eacaf --- /dev/null +++ b/test/configCases/container/no-shared/module.js @@ -0,0 +1 @@ +export const ok = true; diff --git a/test/configCases/container/no-shared/webpack.config.js b/test/configCases/container/no-shared/webpack.config.js new file mode 100644 index 00000000000..176908407eb --- /dev/null +++ b/test/configCases/container/no-shared/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ModuleFederationPlugin({ + name: "container", + filename: "container.js", + library: { type: "commonjs-module" }, + exposes: ["./module"] + }) + ] +}; diff --git a/test/configCases/container/reference-hoisting/App.js b/test/configCases/container/reference-hoisting/App.js new file mode 100644 index 00000000000..bedb022ffbe --- /dev/null +++ b/test/configCases/container/reference-hoisting/App.js @@ -0,0 +1,6 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; + +export default () => { + return `App rendered with [${React()}] and [${ComponentA()}]`; +}; diff --git a/test/configCases/container/reference-hoisting/ComponentA.js b/test/configCases/container/reference-hoisting/ComponentA.js new file mode 100644 index 00000000000..9a98b9948bf --- /dev/null +++ b/test/configCases/container/reference-hoisting/ComponentA.js @@ -0,0 +1,5 @@ +import React from "react"; + +export default () => { + return `ComponentA rendered with [${React()}]`; +}; diff --git a/test/configCases/container/reference-hoisting/index-2.js b/test/configCases/container/reference-hoisting/index-2.js new file mode 100644 index 00000000000..75db3a1d561 --- /dev/null +++ b/test/configCases/container/reference-hoisting/index-2.js @@ -0,0 +1 @@ +import('containerB/ComponentA') diff --git a/test/configCases/container/reference-hoisting/index.js b/test/configCases/container/reference-hoisting/index.js new file mode 100644 index 00000000000..ddc4c6b90a1 --- /dev/null +++ b/test/configCases/container/reference-hoisting/index.js @@ -0,0 +1,21 @@ +it("should have the hoisted container references", () => { + const wpm = __webpack_modules__; + expect(wpm).toHaveProperty("webpack/container/reference/containerA"); + expect(wpm).toHaveProperty("webpack/container/reference/containerB"); +}); + +it("should load the component from container", () => { + return import("./App").then(({ default: App }) => { + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 0.1.2] and [ComponentA rendered with [This is react 0.1.2]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 1.2.3] and [ComponentA rendered with [This is react 1.2.3]]" + ); + }); + }); +}); diff --git a/test/configCases/container/reference-hoisting/node_modules/react.js b/test/configCases/container/reference-hoisting/node_modules/react.js new file mode 100644 index 00000000000..bcf433f2afb --- /dev/null +++ b/test/configCases/container/reference-hoisting/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "0.1.2"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/reference-hoisting/test.config.js b/test/configCases/container/reference-hoisting/test.config.js new file mode 100644 index 00000000000..bd1daf1ba17 --- /dev/null +++ b/test/configCases/container/reference-hoisting/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return i === 0 ? "./main.js" : "./module/main.mjs"; + } +}; diff --git a/test/configCases/container/reference-hoisting/upgrade-react.js b/test/configCases/container/reference-hoisting/upgrade-react.js new file mode 100644 index 00000000000..d26755be2c7 --- /dev/null +++ b/test/configCases/container/reference-hoisting/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("1.2.3"); +} diff --git a/test/configCases/container/reference-hoisting/webpack.config.js b/test/configCases/container/reference-hoisting/webpack.config.js new file mode 100644 index 00000000000..85191bf44dd --- /dev/null +++ b/test/configCases/container/reference-hoisting/webpack.config.js @@ -0,0 +1,87 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {ConstructorParameters[0]} */ +const common = { + name: "container", + exposes: { + "./ComponentA": { + import: "./ComponentA" + } + }, + shared: { + react: { + version: false, + requiredVersion: false + } + } +}; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: { + main: "./index.js", + other: "./index-2.js" + }, + output: { + filename: "[name].js", + uniqueName: "ref-hoist" + }, + optimization: { + runtimeChunk: "single", + moduleIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + runtime: false, + library: { type: "commonjs-module" }, + filename: "container.js", + remotes: { + containerA: { + external: "./container.js" + }, + containerB: { + external: "../0-container-full/container.js" + } + }, + ...common + }) + ] + }, + { + entry: { + main: "./index.js", + other: "./index-2.js" + }, + experiments: { + outputModule: true + }, + optimization: { + runtimeChunk: "single", + moduleIds: "named" + }, + output: { + filename: "module/[name].mjs", + uniqueName: "ref-hoist-mjs" + }, + plugins: [ + new ModuleFederationPlugin({ + runtime: false, + library: { type: "module" }, + filename: "module/container.mjs", + remotes: { + containerA: { + external: "./container.mjs" + }, + containerB: { + external: "../../0-container-full/module/container.mjs" + } + }, + ...common + }) + ], + target: "node14" + } +]; diff --git a/test/configCases/container/track-initial-chunks/App.js b/test/configCases/container/track-initial-chunks/App.js new file mode 100644 index 00000000000..bedb022ffbe --- /dev/null +++ b/test/configCases/container/track-initial-chunks/App.js @@ -0,0 +1,6 @@ +import React from "react"; +import ComponentA from "containerA/ComponentA"; + +export default () => { + return `App rendered with [${React()}] and [${ComponentA()}]`; +}; diff --git a/test/configCases/container/track-initial-chunks/ComponentA.js b/test/configCases/container/track-initial-chunks/ComponentA.js new file mode 100644 index 00000000000..9a98b9948bf --- /dev/null +++ b/test/configCases/container/track-initial-chunks/ComponentA.js @@ -0,0 +1,5 @@ +import React from "react"; + +export default () => { + return `ComponentA rendered with [${React()}]`; +}; diff --git a/test/configCases/container/track-initial-chunks/index-2.js b/test/configCases/container/track-initial-chunks/index-2.js new file mode 100644 index 00000000000..64c990571cf --- /dev/null +++ b/test/configCases/container/track-initial-chunks/index-2.js @@ -0,0 +1,2 @@ +import React from "react" +console.log(React) diff --git a/test/configCases/container/track-initial-chunks/index.js b/test/configCases/container/track-initial-chunks/index.js new file mode 100644 index 00000000000..a3768e5e8a6 --- /dev/null +++ b/test/configCases/container/track-initial-chunks/index.js @@ -0,0 +1,33 @@ +it("should have the hoisted container references", async () => { + const before = __webpack_modules__; + + // Initialize tracker array + const tracker = []; + + // Call the consumes function to populate tracker with hoisted container references + __webpack_require__.f.consumes("other", tracker); + + // Ensure all references in tracker are resolved + await Promise.all(tracker); + + const after = __webpack_modules__; + + // Verify that tracker contains hoisted container references + expect(tracker).not.toHaveLength(0); +}); + +it("should load the component from container", () => { + return import("./App").then(({ default: App }) => { + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 0.1.2] and [ComponentA rendered with [This is react 0.1.2]]" + ); + return import("./upgrade-react").then(({ default: upgrade }) => { + upgrade(); + const rendered = App(); + expect(rendered).toBe( + "App rendered with [This is react 1.2.3] and [ComponentA rendered with [This is react 1.2.3]]" + ); + }); + }); +}); diff --git a/test/configCases/container/track-initial-chunks/node_modules/react.js b/test/configCases/container/track-initial-chunks/node_modules/react.js new file mode 100644 index 00000000000..bcf433f2afb --- /dev/null +++ b/test/configCases/container/track-initial-chunks/node_modules/react.js @@ -0,0 +1,3 @@ +let version = "0.1.2"; +export default () => `This is react ${version}`; +export function setVersion(v) { version = v; } diff --git a/test/configCases/container/track-initial-chunks/test.config.js b/test/configCases/container/track-initial-chunks/test.config.js new file mode 100644 index 00000000000..bd1daf1ba17 --- /dev/null +++ b/test/configCases/container/track-initial-chunks/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return i === 0 ? "./main.js" : "./module/main.mjs"; + } +}; diff --git a/test/configCases/container/track-initial-chunks/upgrade-react.js b/test/configCases/container/track-initial-chunks/upgrade-react.js new file mode 100644 index 00000000000..d26755be2c7 --- /dev/null +++ b/test/configCases/container/track-initial-chunks/upgrade-react.js @@ -0,0 +1,5 @@ +import { setVersion } from "react"; + +export default function upgrade() { + setVersion("1.2.3"); +} diff --git a/test/configCases/container/track-initial-chunks/webpack.config.js b/test/configCases/container/track-initial-chunks/webpack.config.js new file mode 100644 index 00000000000..6dcf61a53a3 --- /dev/null +++ b/test/configCases/container/track-initial-chunks/webpack.config.js @@ -0,0 +1,89 @@ +"use strict"; + +const { ModuleFederationPlugin } = require("../../../../").container; + +/** @type {ConstructorParameters[0]} */ +const common = { + name: "container", + exposes: { + "./ComponentA": { + import: "./ComponentA" + } + }, + shared: { + react: { + version: false, + requiredVersion: false + } + } +}; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: { + main: "./index.js", + other: "./index-2.js" + }, + output: { + filename: "[name].js", + uniqueName: "ref-hoist" + }, + optimization: { + runtimeChunk: "single", + moduleIds: "named", + chunkIds: "named" + }, + plugins: [ + new ModuleFederationPlugin({ + runtime: false, + library: { type: "commonjs-module" }, + filename: "container.js", + remotes: { + containerA: { + external: "./container.js" + }, + containerB: { + external: "../0-container-full/container.js" + } + }, + ...common + }) + ] + }, + { + entry: { + main: "./index.js", + other: "./index-2.js" + }, + experiments: { + outputModule: true + }, + optimization: { + runtimeChunk: "single", + moduleIds: "named", + chunkIds: "named" + }, + output: { + filename: "module/[name].mjs", + uniqueName: "ref-hoist-mjs" + }, + plugins: [ + new ModuleFederationPlugin({ + runtime: false, + library: { type: "module" }, + filename: "module/container.mjs", + remotes: { + containerA: { + external: "./container.mjs" + }, + containerB: { + external: "../../0-container-full/module/container.mjs" + } + }, + ...common + }) + ], + target: "node14" + } +]; diff --git a/test/configCases/contenthash/assets/1.jpg b/test/configCases/contenthash/assets/1.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/contenthash/assets/index.js b/test/configCases/contenthash/assets/index.js new file mode 100644 index 00000000000..0123092aa0d --- /dev/null +++ b/test/configCases/contenthash/assets/index.js @@ -0,0 +1,5 @@ +import img from "./1.jpg"; + +it("should compile", () => { + expect(typeof img).toBe("string"); +}); diff --git a/test/configCases/contenthash/assets/test.config.js b/test/configCases/contenthash/assets/test.config.js new file mode 100644 index 00000000000..890776fa8db --- /dev/null +++ b/test/configCases/contenthash/assets/test.config.js @@ -0,0 +1,33 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +const allAssets = new Set(); +const allBundles = new Set(); + +module.exports = { + findBundle(i, options) { + const bundle = findOutputFiles(options, new RegExp(`^bundle${i}`))[0]; + allBundles.add(/\.([^.]+)\./.exec(bundle)[1]); + + let asset; + + switch (i) { + case 0: + asset = findOutputFiles(options, /^1\.[^.]*\.jpg$/, "img")[0]; + break; + case 1: + case 5: + asset = findOutputFiles(options, /^1\.[^.]*\.jpg$/, "asset")[0]; + break; + } + + if (asset) allAssets.add(asset); + + return `./${bundle}`; + }, + afterExecute: () => { + expect(allBundles.size).toBe(6); + expect(allAssets.size).toBe(1); + } +}; diff --git a/test/configCases/contenthash/assets/webpack.config.js b/test/configCases/contenthash/assets/webpack.config.js new file mode 100644 index 00000000000..4bb1f731c24 --- /dev/null +++ b/test/configCases/contenthash/assets/webpack.config.js @@ -0,0 +1,120 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + filename: "bundle0.[contenthash].js", + assetModuleFilename: "img/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + }, + { + output: { + filename: "bundle1.[contenthash].js", + assetModuleFilename: "asset/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + }, + { + output: { + filename: "bundle2.[contenthash].js", + assetModuleFilename: "asset/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource", + generator: { + publicPath: "/public/" + } + } + ] + } + }, + { + output: { + filename: "bundle3.[contenthash].js", + assetModuleFilename: "asset/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/inline" + } + ] + } + }, + { + output: { + filename: "bundle4.[contenthash].js", + assetModuleFilename: "asset/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/inline", + generator: { + dataUrl: { + encoding: false + } + } + } + ] + } + }, + { + output: { + filename: "bundle5.[contenthash].js", + assetModuleFilename: "asset/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/source", + generator: { + dataUrl: { + mimetype: "text/plain" + } + } + } + ] + } + }, + { + output: { + filename: "bundle6.[contenthash].js", + assetModuleFilename: "asset/[name].[contenthash][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource", + generator: { + // should result in same hash as bundle2 + publicPath: () => "/public/" + } + } + ] + } + } +]; diff --git a/test/configCases/contenthash/css-generator-options/index.js b/test/configCases/contenthash/css-generator-options/index.js new file mode 100644 index 00000000000..ed3f045974b --- /dev/null +++ b/test/configCases/contenthash/css-generator-options/index.js @@ -0,0 +1,5 @@ +it("should compile", async () => { + await import("./style.module.css"); + // The real test is in test.config.js afterExecute + expect(true).toBe(true); +}); diff --git a/test/configCases/contenthash/css-generator-options/style.module.css b/test/configCases/contenthash/css-generator-options/style.module.css new file mode 100644 index 00000000000..e26591a3906 --- /dev/null +++ b/test/configCases/contenthash/css-generator-options/style.module.css @@ -0,0 +1,7 @@ +.class-a { + color: red; +} + +.class-b { + color: blue; +} diff --git a/test/configCases/contenthash/css-generator-options/test.config.js b/test/configCases/contenthash/css-generator-options/test.config.js new file mode 100644 index 00000000000..7f09af03c97 --- /dev/null +++ b/test/configCases/contenthash/css-generator-options/test.config.js @@ -0,0 +1,22 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +const allCss = new Set(); +const allBundles = new Set(); + +module.exports = { + findBundle(i, options) { + const bundle = findOutputFiles(options, new RegExp(`^bundle${i}`))[0]; + const async = findOutputFiles(options, /\.js/, `css${i}`); + allBundles.add(/\.([^.]+)\./.exec(bundle)[1]); + const css = findOutputFiles(options, /^.*\.[^.]*\.css$/, `css${i}`)[0]; + allCss.add(css); + + return [`./css${i}/${async}`, `./${bundle}`]; + }, + afterExecute: () => { + expect(allBundles.size).toBe(7); + expect(allCss.size).toBe(7); + } +}; diff --git a/test/configCases/contenthash/css-generator-options/webpack.config.js b/test/configCases/contenthash/css-generator-options/webpack.config.js new file mode 100644 index 00000000000..8b27cfb9631 --- /dev/null +++ b/test/configCases/contenthash/css-generator-options/webpack.config.js @@ -0,0 +1,149 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +const common = { + target: "web", + optimization: { + realContentHash: false + }, + experiments: { + css: true + } +}; + +/** @typedef {import("../../../../").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + ...common, + output: { + filename: "bundle0.[contenthash].js", + chunkFilename: "css0/[name].[contenthash].js", + cssChunkFilename: "css0/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module" + } + ] + } + }, + { + ...common, + output: { + filename: "bundle1.[contenthash].js", + chunkFilename: "css1/[name].[contenthash].js", + cssChunkFilename: "css1/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + generator: { + exportsConvention: "camel-case" + } + } + ] + } + }, + { + ...common, + output: { + filename: "bundle2.[contenthash].js", + chunkFilename: "css2/[name].[contenthash].js", + cssChunkFilename: "css2/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + generator: { + exportsConvention: "camel-case-only" + } + } + ] + } + }, + { + ...common, + output: { + filename: "bundle3.[contenthash].js", + chunkFilename: "css3/[name].[contenthash].js", + cssChunkFilename: "css3/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + /** @type {GeneratorOptionsByModuleTypeKnown["css/module"]} */ + generator: { + exportsConvention: (name) => name.toUpperCase() + } + } + ] + } + }, + { + ...common, + output: { + filename: "bundle4.[contenthash].js", + chunkFilename: "css4/[name].[contenthash].js", + cssChunkFilename: "css4/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + generator: { + localIdentName: "[hash]-[local]" + } + } + ] + } + }, + { + ...common, + output: { + filename: "bundle5.[contenthash].js", + chunkFilename: "css5/[name].[contenthash].js", + cssChunkFilename: "css5/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + generator: { + localIdentName: "[path][name][ext]__[local]" + } + } + ] + } + }, + { + ...common, + output: { + filename: "bundle6.[contenthash].js", + chunkFilename: "css6/[name].[contenthash].js", + cssChunkFilename: "css6/[name].[contenthash].css" + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + generator: { + esModule: false + } + } + ] + } + } +]; diff --git a/test/configCases/contenthash/include-chunk-id/chunk.js b/test/configCases/contenthash/include-chunk-id/chunk.js new file mode 100644 index 00000000000..5ac3a600d4e --- /dev/null +++ b/test/configCases/contenthash/include-chunk-id/chunk.js @@ -0,0 +1 @@ +module.exports = "chunk"; diff --git a/test/configCases/contenthash/include-chunk-id/index.js b/test/configCases/contenthash/include-chunk-id/index.js new file mode 100644 index 00000000000..5d6e2d0a77d --- /dev/null +++ b/test/configCases/contenthash/include-chunk-id/index.js @@ -0,0 +1,5 @@ +it("should compile and run the test", function () {}); + +if(Math.random() < -1) { + import(/* webpackChunkName: "chunk" */ "./chunk"); +} diff --git a/test/configCases/contenthash/include-chunk-id/test.config.js b/test/configCases/contenthash/include-chunk-id/test.config.js new file mode 100644 index 00000000000..e013cd48f4d --- /dev/null +++ b/test/configCases/contenthash/include-chunk-id/test.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +const allFilenameHashes = new Set(); +const allChunkHashes = new Set(); + +module.exports = { + findBundle(i, options) { + const filename = findOutputFiles(options, new RegExp(`^bundle${i}`))[0]; + const filenameHash = /\.([a-f0-9]+)\.js$/.exec(filename)[1]; + allFilenameHashes.add(filenameHash); + + const chunk = findOutputFiles(options, new RegExp(`^chunk${i}`))[0]; + const chunkHash = /\.([a-f0-9]+)\.js$/.exec(chunk)[1]; + allChunkHashes.add(chunkHash); + + return `./${filename}`; + }, + afterExecute: () => { + expect(allFilenameHashes.size).toBe(2); + expect(allChunkHashes.size).toBe(2); + } +}; diff --git a/test/configCases/contenthash/include-chunk-id/webpack.config.js b/test/configCases/contenthash/include-chunk-id/webpack.config.js new file mode 100644 index 00000000000..b280e8df5e9 --- /dev/null +++ b/test/configCases/contenthash/include-chunk-id/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + mode: "production", + name: "normal-ids", + output: { + filename: "bundle0.[contenthash:6].js", + chunkFilename: "chunk0.[contenthash:6].js" + }, + optimization: { + chunkIds: "size", + moduleIds: "named" + } + }, + { + mode: "production", + name: "normal-ids", + output: { + filename: "bundle1.[contenthash:6].js", + chunkFilename: "chunk1.[contenthash:6].js" + }, + optimization: { + chunkIds: "named", + moduleIds: "named" + } + } +]; diff --git a/test/configCases/contenthash/module-ids-size/1.jpg b/test/configCases/contenthash/module-ids-size/1.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/contenthash/module-ids-size/async.js b/test/configCases/contenthash/module-ids-size/async.js new file mode 100644 index 00000000000..ec6ae927a27 --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/async.js @@ -0,0 +1,10 @@ +export default function test() { + const a = 1; + const b = 2; + const c = 3; + const d = 4; + const f = 5; + const e = 6; + + return a + b + c + d + f + e; +} diff --git a/test/configCases/contenthash/module-ids-size/file-1.js b/test/configCases/contenthash/module-ids-size/file-1.js new file mode 100644 index 00000000000..a3825a0f846 --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/file-1.js @@ -0,0 +1,19 @@ +async function test() { + const a = 1; + const b = 2; + const c = 3; + const d = 4; + const f = 5; + const e = 6; + + await import("./async.js"); + + return a + b + c + d + f + e; +} + +test(); + +export { test } +export default test; + +test(); diff --git a/test/configCases/contenthash/module-ids-size/file-2.js b/test/configCases/contenthash/module-ids-size/file-2.js new file mode 100644 index 00000000000..5217d109731 --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/file-2.js @@ -0,0 +1,5 @@ +import { test } from "./file-1.js"; + +export default function foobar() { + return "test" + test(); +} diff --git a/test/configCases/contenthash/module-ids-size/file-3.js b/test/configCases/contenthash/module-ids-size/file-3.js new file mode 100644 index 00000000000..5e033ab9f4a --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/file-3.js @@ -0,0 +1,7 @@ +function test() { + return "test"; +} + +test(); + +module.exports = "test"; diff --git a/test/configCases/contenthash/module-ids-size/file.js b/test/configCases/contenthash/module-ids-size/file.js new file mode 100644 index 00000000000..2f8412c218e --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/file.js @@ -0,0 +1,25 @@ +import file from "./file-1.js"; +import file2 from "./file-2.js"; + +async function test() { + const a = 1; + const b = 2; + const c = 3; + const d = 4; + const f = 5; + const e = 6; + + await import(/* webpackMode: "eager" */"./async.js"); + await import(/* webpackMode: "eager" */"./file-3.js"); + + return a + b + c + d + f + e; +} + +test(); + +export { test, file, file2 } +export default function foo() { + return "test"; +} + +test(); diff --git a/test/configCases/contenthash/module-ids-size/index.js b/test/configCases/contenthash/module-ids-size/index.js new file mode 100644 index 00000000000..c43e8c29af8 --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/index.js @@ -0,0 +1,7 @@ +import img from "./1.jpg"; +import file from "./file.js"; + +it("should compile", () => { + expect(typeof img).toBe("string"); + expect(typeof file).toBe("function"); +}); diff --git a/test/configCases/contenthash/module-ids-size/test.config.js b/test/configCases/contenthash/module-ids-size/test.config.js new file mode 100644 index 00000000000..19bdf046f81 --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/test.config.js @@ -0,0 +1,30 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +const allAssets = new Set(); +const allBundles = new Set(); + +module.exports = { + findBundle(i, options) { + const bundle = findOutputFiles(options, new RegExp(`^bundle${i}`))[0]; + + allBundles.add(/\.([^.]+)\./.exec(bundle)[1]); + + let asset; + + switch (i) { + case 0: + asset = findOutputFiles(options, /^1\.[^.]*\.jpg$/, "img")[0]; + break; + } + + if (asset) allAssets.add(asset); + + return `./${bundle}`; + }, + afterExecute: () => { + // Bundles have the same contenthash + expect(allBundles.size).toBe(1); + } +}; diff --git a/test/configCases/contenthash/module-ids-size/webpack.config.js b/test/configCases/contenthash/module-ids-size/webpack.config.js new file mode 100644 index 00000000000..cc9e6a3edf3 --- /dev/null +++ b/test/configCases/contenthash/module-ids-size/webpack.config.js @@ -0,0 +1,39 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + output: { + filename: "bundle0.[contenthash].a.js", + assetModuleFilename: "img/[name].a.[contenthash][ext]" + }, + optimization: { + moduleIds: "size" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + }, + { + output: { + filename: "bundle1.[contenthash].b.js", + assetModuleFilename: "img/[name].a.[contenthash][ext]" + }, + optimization: { + moduleIds: "size" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + } +]; diff --git a/test/configCases/contenthash/salt/img.jpg b/test/configCases/contenthash/salt/img.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/contenthash/salt/index.js b/test/configCases/contenthash/salt/index.js new file mode 100644 index 00000000000..2d2b98703ee --- /dev/null +++ b/test/configCases/contenthash/salt/index.js @@ -0,0 +1,5 @@ +import img from "./img.jpg"; + +it("should compile", () => { + expect(typeof img).toBe("string"); +}); diff --git a/test/configCases/contenthash/salt/test.config.js b/test/configCases/contenthash/salt/test.config.js new file mode 100644 index 00000000000..1095e974ac0 --- /dev/null +++ b/test/configCases/contenthash/salt/test.config.js @@ -0,0 +1,26 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +const allAssets = new Set(); +const allBundles = new Set(); + +module.exports = { + findBundle(i, options) { + const bundle = findOutputFiles(options, new RegExp(`^bundle${i}`))[0]; + allBundles.add(/\.([^.]+)\./.exec(bundle)[1]); + + const assets = findOutputFiles(options, /^img/); + for (const asset of assets) { + allAssets.add(asset); + } + + return `./${bundle}`; + }, + afterExecute: () => { + // Since there are exactly 2 unique values of output.hashSalt, + // there should be exactly 2 unique output hashes for each file. + expect(allBundles.size).toBe(2); + expect(allAssets.size).toBe(2); + } +}; diff --git a/test/configCases/contenthash/salt/webpack.config.js b/test/configCases/contenthash/salt/webpack.config.js new file mode 100644 index 00000000000..8e09ee36d02 --- /dev/null +++ b/test/configCases/contenthash/salt/webpack.config.js @@ -0,0 +1,50 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + filename: "bundle0.[contenthash].js", + assetModuleFilename: "[name].[contenthash][ext]", + hashSalt: "1" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + }, + { + output: { + filename: "bundle1.[contenthash].js", + assetModuleFilename: "[name].[contenthash][ext]", + hashSalt: "1" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + }, + { + output: { + filename: "bundle2.[contenthash].js", + assetModuleFilename: "[name].[contenthash][ext]", + hashSalt: "2" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } + } +]; diff --git a/test/configCases/context-exclusion/simple/index.js b/test/configCases/context-exclusion/simple/index.js deleted file mode 100644 index 47eb9afe063..00000000000 --- a/test/configCases/context-exclusion/simple/index.js +++ /dev/null @@ -1,17 +0,0 @@ -function requireInContext(someVariable) { - return require(`./some-dir/${someVariable}`); -} - -it("should not exclude paths not matching the exclusion pattern", function() { - expect(requireInContext("file")).toBe("thats good"); - expect(requireInContext("check-here/file")).toBe("thats good"); - expect(requireInContext("check-here/check-here/file")).toBe("thats good"); -}); - -it("should exclude paths/files matching the exclusion pattern", function() { - expect(() => requireInContext("dont")).toThrowError(/Cannot find module '.\/dont'/); - - expect(() => requireInContext("dont-check-here/file")).toThrowError(/Cannot find module '.\/dont-check-here\/file'/); - - expect(() => requireInContext("check-here/dont-check-here/file")).toThrowError(/Cannot find module '.\/check-here\/dont-check-here\/file'/); -}); diff --git a/test/configCases/context-exclusion/simple/webpack.config.js b/test/configCases/context-exclusion/simple/webpack.config.js deleted file mode 100644 index 914088d01fb..00000000000 --- a/test/configCases/context-exclusion/simple/webpack.config.js +++ /dev/null @@ -1,5 +0,0 @@ -var webpack = require("../../../../"); - -module.exports = { - plugins: [new webpack.ContextExclusionPlugin(/dont/)] -}; diff --git a/test/configCases/context-modules/context-options/dir/module-a.js b/test/configCases/context-modules/context-options/dir/module-a.js new file mode 100644 index 00000000000..e94fef18587 --- /dev/null +++ b/test/configCases/context-modules/context-options/dir/module-a.js @@ -0,0 +1 @@ +export default "a"; diff --git a/test/configCases/context-modules/context-options/dir/module-b.js b/test/configCases/context-modules/context-options/dir/module-b.js new file mode 100644 index 00000000000..eff703ff465 --- /dev/null +++ b/test/configCases/context-modules/context-options/dir/module-b.js @@ -0,0 +1 @@ +export default "b"; diff --git a/test/configCases/context-modules/context-options/dir/module-c.js b/test/configCases/context-modules/context-options/dir/module-c.js new file mode 100644 index 00000000000..5d50db5bc15 --- /dev/null +++ b/test/configCases/context-modules/context-options/dir/module-c.js @@ -0,0 +1 @@ +export default "c"; diff --git a/test/configCases/context-modules/context-options/index.js b/test/configCases/context-modules/context-options/index.js new file mode 100644 index 00000000000..699ea3632ed --- /dev/null +++ b/test/configCases/context-modules/context-options/index.js @@ -0,0 +1,39 @@ +async function loadModule(name) { + return import("./dir/" + name); +} + +async function loadModuleWithExclude(name) { + return import(/* webpackExclude: /module-b\.js$/ */ "./dir/" + name); +} + +async function loadModuleWithInclude(name) { + return import(/* webpackInclude: /module-b\.js$/ */ "./dir/" + name); +} + +async function loadModuleWithMode(name) { + return import(/* webpackMode: "eager" */ "./dir/" + name); +} + +it("should work when no options", async () => { + expect((await loadModule("module-a.js")).default).toBe("a"); + expect((await loadModule("module-b.js")).default).toBe("b"); + expect((await loadModule("module-c.js")).default).toBe("c"); +}); + +it("should work with exclude", async () => { + expect((await loadModuleWithExclude("module-a.js")).default).toBe("a"); + await expect(loadModuleWithExclude("module-b.js")).rejects.toThrow("Cannot find module './module-b.js'"); + expect((await loadModuleWithExclude("module-c.js")).default).toBe("c"); +}); + +it("should work with include", async () => { + await expect(loadModuleWithInclude("module-a.js")).rejects.toThrow("Cannot find module './module-a.js'"); + expect((await loadModuleWithInclude("module-b.js")).default).toBe("b"); + await expect(loadModuleWithInclude("module-c.js")).rejects.toThrow("Cannot find module './module-c.js'"); +}); + +it("should work with mode", async () => { + expect((await loadModuleWithMode("module-a.js")).default).toBe("a"); + expect((await loadModuleWithMode("module-b.js")).default).toBe("b"); + expect((await loadModuleWithMode("module-c.js")).default).toBe("c"); +}); diff --git a/test/configCases/context-modules/context-options/webpack.config.js b/test/configCases/context-modules/context-options/webpack.config.js new file mode 100644 index 00000000000..27313115dcd --- /dev/null +++ b/test/configCases/context-modules/context-options/webpack.config.js @@ -0,0 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = {}; diff --git a/test/configCases/context-modules/exclusion/index.js b/test/configCases/context-modules/exclusion/index.js new file mode 100644 index 00000000000..d94fe895a60 --- /dev/null +++ b/test/configCases/context-modules/exclusion/index.js @@ -0,0 +1,17 @@ +function requireInContext(someVariable) { + return require(`./some-dir/${someVariable}`); +} + +it("should not exclude paths not matching the exclusion pattern", function() { + expect(requireInContext("file")).toBe("thats good"); + expect(requireInContext("check-here/file")).toBe("thats good"); + expect(requireInContext("check-here/check-here/file")).toBe("thats good"); +}); + +it("should exclude paths/files matching the exclusion pattern", function() { + expect(() => requireInContext("dont")).toThrow(/Cannot find module '.\/dont'/); + + expect(() => requireInContext("dont-check-here/file")).toThrow(/Cannot find module '.\/dont-check-here\/file'/); + + expect(() => requireInContext("check-here/dont-check-here/file")).toThrow(/Cannot find module '.\/check-here\/dont-check-here\/file'/); +}); diff --git a/test/configCases/context-exclusion/simple/some-dir/check-here/check-here/file.js b/test/configCases/context-modules/exclusion/some-dir/check-here/check-here/file.js similarity index 100% rename from test/configCases/context-exclusion/simple/some-dir/check-here/check-here/file.js rename to test/configCases/context-modules/exclusion/some-dir/check-here/check-here/file.js diff --git a/test/configCases/context-exclusion/simple/some-dir/check-here/dont-check-here/file.js b/test/configCases/context-modules/exclusion/some-dir/check-here/dont-check-here/file.js similarity index 100% rename from test/configCases/context-exclusion/simple/some-dir/check-here/dont-check-here/file.js rename to test/configCases/context-modules/exclusion/some-dir/check-here/dont-check-here/file.js diff --git a/test/configCases/context-exclusion/simple/some-dir/check-here/file.js b/test/configCases/context-modules/exclusion/some-dir/check-here/file.js similarity index 100% rename from test/configCases/context-exclusion/simple/some-dir/check-here/file.js rename to test/configCases/context-modules/exclusion/some-dir/check-here/file.js diff --git a/test/configCases/context-exclusion/simple/some-dir/dont-check-here/file.js b/test/configCases/context-modules/exclusion/some-dir/dont-check-here/file.js similarity index 100% rename from test/configCases/context-exclusion/simple/some-dir/dont-check-here/file.js rename to test/configCases/context-modules/exclusion/some-dir/dont-check-here/file.js diff --git a/test/configCases/context-exclusion/simple/some-dir/dont.js b/test/configCases/context-modules/exclusion/some-dir/dont.js similarity index 100% rename from test/configCases/context-exclusion/simple/some-dir/dont.js rename to test/configCases/context-modules/exclusion/some-dir/dont.js diff --git a/test/configCases/context-exclusion/simple/some-dir/file.js b/test/configCases/context-modules/exclusion/some-dir/file.js similarity index 100% rename from test/configCases/context-exclusion/simple/some-dir/file.js rename to test/configCases/context-modules/exclusion/some-dir/file.js diff --git a/test/configCases/context-modules/exclusion/webpack.config.js b/test/configCases/context-modules/exclusion/webpack.config.js new file mode 100644 index 00000000000..f9198e5e8c3 --- /dev/null +++ b/test/configCases/context-modules/exclusion/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new webpack.ContextExclusionPlugin(/dont/)] +}; diff --git a/test/configCases/context-modules/import-attributes/files/file.ext b/test/configCases/context-modules/import-attributes/files/file.ext new file mode 100644 index 00000000000..460b5331d24 --- /dev/null +++ b/test/configCases/context-modules/import-attributes/files/file.ext @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/test/configCases/context-modules/import-attributes/index.js b/test/configCases/context-modules/import-attributes/index.js new file mode 100644 index 00000000000..28078e49e95 --- /dev/null +++ b/test/configCases/context-modules/import-attributes/index.js @@ -0,0 +1,12 @@ +it("show override request", async () => { + const decoder = new TextDecoder('utf-8'); + const mod = "file.ext"; + const loadedMod = (await import(`./files/${mod}`, { with: { type: "bytes" } })).default; + const text = decoder.decode(loadedMod); + + expect(JSON.parse(text)).toEqual({ foo: "bar" }); + + const otherLoadedMod = (await import(`./files/${mod}`, { with: { type: "json" } })).default; + + expect(otherLoadedMod.foo).toBe("bar"); +}); diff --git a/test/configCases/context-modules/import-attributes/test.filter.js b/test/configCases/context-modules/import-attributes/test.filter.js new file mode 100644 index 00000000000..03c5581fcb2 --- /dev/null +++ b/test/configCases/context-modules/import-attributes/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsTextDecoder = require("../../../helpers/supportsTextDecoder"); + +module.exports = () => supportsTextDecoder(); diff --git a/test/configCases/context-modules/import-attributes/webpack.config.js b/test/configCases/context-modules/import-attributes/webpack.config.js new file mode 100644 index 00000000000..27313115dcd --- /dev/null +++ b/test/configCases/context-modules/import-attributes/webpack.config.js @@ -0,0 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = {}; diff --git a/test/configCases/context-modules/multiple-alias-2/index.js b/test/configCases/context-modules/multiple-alias-2/index.js new file mode 100644 index 00000000000..dd75643dfc4 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias-2/index.js @@ -0,0 +1,6 @@ +const load = id => import(`app/${id}?query#hash`); + + +it("show override request", async () => { + expect((await load("a")).default).toBe("override/a"); +}); diff --git a/test/configCases/context-modules/multiple-alias-2/src/foo/a.js b/test/configCases/context-modules/multiple-alias-2/src/foo/a.js new file mode 100644 index 00000000000..b589a567a4f --- /dev/null +++ b/test/configCases/context-modules/multiple-alias-2/src/foo/a.js @@ -0,0 +1 @@ +export default "foo/a"; diff --git a/test/configCases/context-modules/multiple-alias-2/src/main/a.js b/test/configCases/context-modules/multiple-alias-2/src/main/a.js new file mode 100644 index 00000000000..c88d9dc1d82 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias-2/src/main/a.js @@ -0,0 +1 @@ +export default "main/a"; diff --git a/test/configCases/context-modules/multiple-alias-2/src/override/a.js b/test/configCases/context-modules/multiple-alias-2/src/override/a.js new file mode 100644 index 00000000000..7b71725f142 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias-2/src/override/a.js @@ -0,0 +1 @@ +export default "override/a"; diff --git a/test/configCases/context-modules/multiple-alias-2/webpack.config.js b/test/configCases/context-modules/multiple-alias-2/webpack.config.js new file mode 100644 index 00000000000..fdeebc672f9 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias-2/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + alias: { + app: [path.join(__dirname, "src/main"), path.join(__dirname, "src/foo")] + } + }, + plugins: [new webpack.ContextReplacementPlugin(/main/, "../override")] +}; diff --git a/test/configCases/context-modules/multiple-alias/index.js b/test/configCases/context-modules/multiple-alias/index.js new file mode 100644 index 00000000000..dd75643dfc4 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias/index.js @@ -0,0 +1,6 @@ +const load = id => import(`app/${id}?query#hash`); + + +it("show override request", async () => { + expect((await load("a")).default).toBe("override/a"); +}); diff --git a/test/configCases/context-modules/multiple-alias/src/foo/a.js b/test/configCases/context-modules/multiple-alias/src/foo/a.js new file mode 100644 index 00000000000..b589a567a4f --- /dev/null +++ b/test/configCases/context-modules/multiple-alias/src/foo/a.js @@ -0,0 +1 @@ +export default "foo/a"; diff --git a/test/configCases/context-modules/multiple-alias/src/main/a.js b/test/configCases/context-modules/multiple-alias/src/main/a.js new file mode 100644 index 00000000000..c88d9dc1d82 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias/src/main/a.js @@ -0,0 +1 @@ +export default "main/a"; diff --git a/test/configCases/context-modules/multiple-alias/src/override/a.js b/test/configCases/context-modules/multiple-alias/src/override/a.js new file mode 100644 index 00000000000..7b71725f142 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias/src/override/a.js @@ -0,0 +1 @@ +export default "override/a"; diff --git a/test/configCases/context-modules/multiple-alias/webpack.config.js b/test/configCases/context-modules/multiple-alias/webpack.config.js new file mode 100644 index 00000000000..9f7eaa6b544 --- /dev/null +++ b/test/configCases/context-modules/multiple-alias/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + alias: { + app: [path.join(__dirname, "src/main"), path.join(__dirname, "src/foo")] + } + }, + plugins: [ + new webpack.ContextReplacementPlugin(/main/, (context) => { + Object.assign(context, { + resource: ["../override"] // resolved relatively + }); + }) + ] +}; diff --git a/test/configCases/context-modules/replacement-System.import/index.js b/test/configCases/context-modules/replacement-System.import/index.js new file mode 100644 index 00000000000..c96946800d2 --- /dev/null +++ b/test/configCases/context-modules/replacement-System.import/index.js @@ -0,0 +1,6 @@ +it("should replace a async context with a manual map", function() { + var a = "a"; + return import(a).then(function(a) { + expect(a).toEqual(nsObj({ default: "b" })); + }); +}); diff --git a/test/configCases/context-replacement/c/modules/module-b.js b/test/configCases/context-modules/replacement-System.import/modules/module-b.js similarity index 100% rename from test/configCases/context-replacement/c/modules/module-b.js rename to test/configCases/context-modules/replacement-System.import/modules/module-b.js diff --git a/test/configCases/context-modules/replacement-System.import/webpack.config.js b/test/configCases/context-modules/replacement-System.import/webpack.config.js new file mode 100644 index 00000000000..6237be1a8ac --- /dev/null +++ b/test/configCases/context-modules/replacement-System.import/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +var path = require("path"); +var webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new webpack.ContextReplacementPlugin( + /replacement/, + path.resolve(__dirname, "modules"), + { + a: "./module-b" + } + ) + ] +}; diff --git a/test/configCases/context-replacement/a/index.js b/test/configCases/context-modules/replacement-a/index.js similarity index 100% rename from test/configCases/context-replacement/a/index.js rename to test/configCases/context-modules/replacement-a/index.js diff --git a/test/configCases/context-replacement/a/new-context/node_modules/error.js b/test/configCases/context-modules/replacement-a/new-context/node_modules/error.js similarity index 100% rename from test/configCases/context-replacement/a/new-context/node_modules/error.js rename to test/configCases/context-modules/replacement-a/new-context/node_modules/error.js diff --git a/test/configCases/context-replacement/a/new-context/node_modules/replaced.js b/test/configCases/context-modules/replacement-a/new-context/node_modules/replaced.js similarity index 100% rename from test/configCases/context-replacement/a/new-context/node_modules/replaced.js rename to test/configCases/context-modules/replacement-a/new-context/node_modules/replaced.js diff --git a/test/configCases/context-modules/replacement-a/webpack.config.js b/test/configCases/context-modules/replacement-a/webpack.config.js new file mode 100644 index 00000000000..013250710e5 --- /dev/null +++ b/test/configCases/context-modules/replacement-a/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new webpack.ContextReplacementPlugin( + /replacement.a$/, + "new-context", + true, + /^replaced$/ + ) + ] +}; diff --git a/test/configCases/context-replacement/b/error.js b/test/configCases/context-modules/replacement-b/error.js similarity index 100% rename from test/configCases/context-replacement/b/error.js rename to test/configCases/context-modules/replacement-b/error.js diff --git a/test/configCases/context-replacement/b/index.js b/test/configCases/context-modules/replacement-b/index.js similarity index 100% rename from test/configCases/context-replacement/b/index.js rename to test/configCases/context-modules/replacement-b/index.js diff --git a/test/configCases/context-replacement/b/only-this.js b/test/configCases/context-modules/replacement-b/only-this.js similarity index 100% rename from test/configCases/context-replacement/b/only-this.js rename to test/configCases/context-modules/replacement-b/only-this.js diff --git a/test/configCases/context-modules/replacement-b/webpack.config.js b/test/configCases/context-modules/replacement-b/webpack.config.js new file mode 100644 index 00000000000..3877a73ba13 --- /dev/null +++ b/test/configCases/context-modules/replacement-b/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new webpack.ContextReplacementPlugin(/replacement.b$/, /^\.\/only/)] +}; diff --git a/test/configCases/context-modules/replacement-c/index.js b/test/configCases/context-modules/replacement-c/index.js new file mode 100644 index 00000000000..0fec479f2b8 --- /dev/null +++ b/test/configCases/context-modules/replacement-c/index.js @@ -0,0 +1,13 @@ +it("should replace a context with a manual map", function() { + function rqInContext(x) { + return require(x); + } + expect(rqInContext("a")).toBe("a"); + expect(rqInContext("b")).toBe("b"); + expect(rqInContext("./c")).toBe("b"); + expect(rqInContext("d")).toBe("d"); + expect(rqInContext("./d")).toBe("d"); + (expect(function() { + rqInContext("module-b") + }).toThrow()); +}); diff --git a/test/configCases/commons-chunk-plugin/correct-order/a.js b/test/configCases/context-modules/replacement-c/modules/a.js similarity index 100% rename from test/configCases/commons-chunk-plugin/correct-order/a.js rename to test/configCases/context-modules/replacement-c/modules/a.js diff --git a/test/configCases/context-modules/replacement-c/modules/module-b.js b/test/configCases/context-modules/replacement-c/modules/module-b.js new file mode 100644 index 00000000000..dfbbeb621fa --- /dev/null +++ b/test/configCases/context-modules/replacement-c/modules/module-b.js @@ -0,0 +1 @@ +module.exports = "b"; diff --git a/test/configCases/context-replacement/c/node_modules/d.js b/test/configCases/context-modules/replacement-c/node_modules/d.js similarity index 100% rename from test/configCases/context-replacement/c/node_modules/d.js rename to test/configCases/context-modules/replacement-c/node_modules/d.js diff --git a/test/configCases/context-modules/replacement-c/webpack.config.js b/test/configCases/context-modules/replacement-c/webpack.config.js new file mode 100644 index 00000000000..4a7c9fc4ee0 --- /dev/null +++ b/test/configCases/context-modules/replacement-c/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new webpack.ContextReplacementPlugin( + /replacement.c$/, + path.resolve(__dirname, "modules"), + { + a: "./a", + b: "./module-b", + "./c": "./module-b", + d: "d", + "./d": "d" + } + ) + ] +}; diff --git a/test/configCases/context-replacement/d/index.js b/test/configCases/context-modules/replacement-d/index.js similarity index 100% rename from test/configCases/context-replacement/d/index.js rename to test/configCases/context-modules/replacement-d/index.js diff --git a/test/configCases/commons-chunk-plugin/inverted-order/a.js b/test/configCases/context-modules/replacement-d/modules/a.js similarity index 100% rename from test/configCases/commons-chunk-plugin/inverted-order/a.js rename to test/configCases/context-modules/replacement-d/modules/a.js diff --git a/test/configCases/context-modules/replacement-d/queryloader.js b/test/configCases/context-modules/replacement-d/queryloader.js new file mode 100644 index 00000000000..821519145eb --- /dev/null +++ b/test/configCases/context-modules/replacement-d/queryloader.js @@ -0,0 +1,11 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (content) { + return ( + "module.exports = " + + JSON.stringify({ + resourceQuery: this.resourceQuery, + query: this.query, + prev: content.replace(/\r\n?/g, "\n") + }) + ); +}; diff --git a/test/configCases/context-modules/replacement-d/webpack.config.js b/test/configCases/context-modules/replacement-d/webpack.config.js new file mode 100644 index 00000000000..f4523d7ef82 --- /dev/null +++ b/test/configCases/context-modules/replacement-d/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /a\.js$/, + use: ["./queryloader?lions=roar"] + } + ] + }, + plugins: [ + new webpack.ContextReplacementPlugin( + /replacement.d$/, + path.resolve(__dirname, "modules?cats=meow"), + { + a: "./a" + } + ) + ] +}; diff --git a/test/configCases/context-modules/replacement-e/index.js b/test/configCases/context-modules/replacement-e/index.js new file mode 100644 index 00000000000..1fddfe65a20 --- /dev/null +++ b/test/configCases/context-modules/replacement-e/index.js @@ -0,0 +1,14 @@ +it("should replace a context with a new resource and reqExp", function (done) { + function rqInContext(x, callback) { + require([x], function (x) { + callback(x); + }); + } + rqInContext("replaced", function (r) { + expect(r).toBe("ok"); + rqInContext("./modules/replaced", function (r) { + expect(r).toBe("ok"); + done(); + }); + }); +}); diff --git a/test/configCases/context-modules/replacement-e/new-context/modules/error.js b/test/configCases/context-modules/replacement-e/new-context/modules/error.js new file mode 100644 index 00000000000..a7450cb49bc --- /dev/null +++ b/test/configCases/context-modules/replacement-e/new-context/modules/error.js @@ -0,0 +1,7 @@ +This +should +result +in +an +error +}]) \ No newline at end of file diff --git a/test/configCases/context-modules/replacement-e/new-context/modules/replaced.js b/test/configCases/context-modules/replacement-e/new-context/modules/replaced.js new file mode 100644 index 00000000000..654e0c92c5f --- /dev/null +++ b/test/configCases/context-modules/replacement-e/new-context/modules/replaced.js @@ -0,0 +1 @@ +module.exports = "ok"; \ No newline at end of file diff --git a/test/configCases/context-modules/replacement-e/webpack.config.js b/test/configCases/context-modules/replacement-e/webpack.config.js new file mode 100644 index 00000000000..8e048e9b496 --- /dev/null +++ b/test/configCases/context-modules/replacement-e/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + modules: ["...", path.resolve(__dirname, "new-context/modules")] + }, + plugins: [ + new webpack.ContextReplacementPlugin( + /replacement.e$/, + "new-context", + true, + /^replaced$|^\.\/modules\/rep/ + ) + ] +}; diff --git a/test/configCases/commons-chunk-plugin/move-entry/a.js b/test/configCases/context-modules/replacement-f/folder/a.js similarity index 100% rename from test/configCases/commons-chunk-plugin/move-entry/a.js rename to test/configCases/context-modules/replacement-f/folder/a.js diff --git a/test/configCases/context-modules/replacement-f/folder/nested/error.js b/test/configCases/context-modules/replacement-f/folder/nested/error.js new file mode 100644 index 00000000000..a7450cb49bc --- /dev/null +++ b/test/configCases/context-modules/replacement-f/folder/nested/error.js @@ -0,0 +1,7 @@ +This +should +result +in +an +error +}]) \ No newline at end of file diff --git a/test/configCases/context-modules/replacement-f/index.js b/test/configCases/context-modules/replacement-f/index.js new file mode 100644 index 00000000000..6051fcfb05f --- /dev/null +++ b/test/configCases/context-modules/replacement-f/index.js @@ -0,0 +1,6 @@ +it("should replace a context with a new regExp", function() { + function rqInContext(x) { + return require('./folder/' + x); + } + expect(rqInContext("a")).toBe("a"); +}); diff --git a/test/configCases/context-modules/replacement-f/webpack.config.js b/test/configCases/context-modules/replacement-f/webpack.config.js new file mode 100644 index 00000000000..e1bf78c0829 --- /dev/null +++ b/test/configCases/context-modules/replacement-f/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new webpack.ContextReplacementPlugin(/folder$/, false, /(a|b)/)] +}; diff --git a/test/configCases/context-replacement/System.import/index.js b/test/configCases/context-replacement/System.import/index.js deleted file mode 100644 index c2afdd5a49e..00000000000 --- a/test/configCases/context-replacement/System.import/index.js +++ /dev/null @@ -1,6 +0,0 @@ -it("should replace a async context with a manual map", function() { - var a = "a"; - return import(a).then(function(a) { - expect(a).toEqual({ default: "b", [Symbol.toStringTag]: "Module" }); - }); -}); diff --git a/test/configCases/context-replacement/System.import/webpack.config.js b/test/configCases/context-replacement/System.import/webpack.config.js deleted file mode 100644 index dd3a95923e6..00000000000 --- a/test/configCases/context-replacement/System.import/webpack.config.js +++ /dev/null @@ -1,14 +0,0 @@ -var path = require("path"); -var webpack = require("../../../../"); - -module.exports = { - plugins: [ - new webpack.ContextReplacementPlugin( - /context-replacement/, - path.resolve(__dirname, "modules"), - { - a: "./module-b" - } - ) - ] -}; diff --git a/test/configCases/context-replacement/a/webpack.config.js b/test/configCases/context-replacement/a/webpack.config.js deleted file mode 100644 index effb49f41d0..00000000000 --- a/test/configCases/context-replacement/a/webpack.config.js +++ /dev/null @@ -1,12 +0,0 @@ -var webpack = require("../../../../"); - -module.exports = { - plugins: [ - new webpack.ContextReplacementPlugin( - /context-replacement.a$/, - "new-context", - true, - /^replaced$/ - ) - ] -}; diff --git a/test/configCases/context-replacement/b/webpack.config.js b/test/configCases/context-replacement/b/webpack.config.js deleted file mode 100644 index 90555063f65..00000000000 --- a/test/configCases/context-replacement/b/webpack.config.js +++ /dev/null @@ -1,7 +0,0 @@ -var webpack = require("../../../../"); - -module.exports = { - plugins: [ - new webpack.ContextReplacementPlugin(/context-replacement.b$/, /^\.\/only/) - ] -}; diff --git a/test/configCases/context-replacement/c/index.js b/test/configCases/context-replacement/c/index.js deleted file mode 100644 index 5ee5fb8bb91..00000000000 --- a/test/configCases/context-replacement/c/index.js +++ /dev/null @@ -1,13 +0,0 @@ -it("should replace a context with a manual map", function() { - function rqInContext(x) { - return require(x); - } - expect(rqInContext("a")).toBe("a"); - expect(rqInContext("b")).toBe("b"); - expect(rqInContext("./c")).toBe("b"); - expect(rqInContext("d")).toBe("d"); - expect(rqInContext("./d")).toBe("d"); - (expect(function() { - rqInContext("module-b") - }).toThrowError()); -}); diff --git a/test/configCases/context-replacement/c/webpack.config.js b/test/configCases/context-replacement/c/webpack.config.js deleted file mode 100644 index 6a7c2c31413..00000000000 --- a/test/configCases/context-replacement/c/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -var path = require("path"); -var webpack = require("../../../../"); - -module.exports = { - plugins: [ - new webpack.ContextReplacementPlugin( - /context-replacement.c$/, - path.resolve(__dirname, "modules"), - { - a: "./a", - b: "./module-b", - "./c": "./module-b", - d: "d", - "./d": "d" - } - ) - ] -}; diff --git a/test/configCases/context-replacement/d/queryloader.js b/test/configCases/context-replacement/d/queryloader.js deleted file mode 100644 index 88a2fd607bc..00000000000 --- a/test/configCases/context-replacement/d/queryloader.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = function(content) { - return "module.exports = " + JSON.stringify({ - resourceQuery: this.resourceQuery, - query: this.query, - prev: content.replace(/\r\n?/g, "\n") - }); -}; diff --git a/test/configCases/context-replacement/d/webpack.config.js b/test/configCases/context-replacement/d/webpack.config.js deleted file mode 100644 index 21b667c528f..00000000000 --- a/test/configCases/context-replacement/d/webpack.config.js +++ /dev/null @@ -1,22 +0,0 @@ -var path = require("path"); -var webpack = require("../../../../"); - -module.exports = { - module: { - rules: [ - { - test: /a\.js$/, - use: ["./queryloader?lions=roar"] - } - ] - }, - plugins: [ - new webpack.ContextReplacementPlugin( - /context-replacement.d$/, - path.resolve(__dirname, "modules?cats=meow"), - { - a: "./a" - } - ) - ] -}; diff --git a/test/configCases/crossorigin/set-crossorigin/empty.js b/test/configCases/crossorigin/set-crossorigin/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/crossorigin/set-crossorigin/index.js b/test/configCases/crossorigin/set-crossorigin/index.js new file mode 100644 index 00000000000..a5e6677d872 --- /dev/null +++ b/test/configCases/crossorigin/set-crossorigin/index.js @@ -0,0 +1,81 @@ +it("should load script without crossorigin attribute (default)", function() { + const promise = import("./empty?a" /* webpackChunkName: "crossorigin-default" */); + + var script = document.head._children.pop(); + __non_webpack_require__("./crossorigin-default.web.js"); + expect(script.src).toBe("https://test.cases/path/crossorigin-default.web.js"); + expect(script.crossOrigin).toBe(undefined); + + return promise; +}); + +it("should load script without crossorigin attribute (relative)", function() { + var originalValue = __webpack_public_path__; + __webpack_public_path__ = "../"; + const promise = import("./empty?b" /* webpackChunkName: "crossorigin-relative" */); + __webpack_public_path__ = originalValue; + + var script = document.head._children.pop(); + __non_webpack_require__("./crossorigin-relative.web.js"); + expect(script.src).toBe("https://test.cases/crossorigin-relative.web.js"); + expect(script.crossOrigin).toBe(undefined); + + return promise; +}); + +it("should load script without crossorigin attribute (server relative)", function() { + var originalValue = __webpack_public_path__; + __webpack_public_path__ = "/server/"; + const promise = import("./empty?c" /* webpackChunkName: "crossorigin-server-relative" */); + __webpack_public_path__ = originalValue; + + var script = document.head._children.pop(); + __non_webpack_require__("./crossorigin-server-relative.web.js"); + expect(script.src).toBe("https://test.cases/server/crossorigin-server-relative.web.js"); + expect(script.crossOrigin).toBe(undefined); + + return promise; +}); + +it("should load script without crossorigin attribute (same origin)", function() { + var originalValue = __webpack_public_path__; + __webpack_public_path__ = "https://test.cases/"; + const promise = import("./empty?d" /* webpackChunkName: "crossorigin-same-origin" */); + __webpack_public_path__ = originalValue; + + var script = document.head._children.pop(); + __non_webpack_require__("./crossorigin-same-origin.web.js"); + expect(script.src).toBe("https://test.cases/crossorigin-same-origin.web.js"); + expect(script.crossOrigin).toBe(undefined); + + return promise; +}); + +it("should load script with crossorigin attribute anonymous (different origin)", function() { + var originalValue = __webpack_public_path__; + __webpack_public_path__ = "https://example.com/"; + const promise = import("./empty?e" /* webpackChunkName: "crossorigin-different-origin" */); + __webpack_public_path__ = originalValue; + + + var script = document.head._children.pop(); + __non_webpack_require__("./crossorigin-different-origin.web.js"); + expect(script.src).toBe("https://example.com/crossorigin-different-origin.web.js"); + expect(script.crossOrigin).toBe("anonymous"); + + return promise; +}); + +it("should load style with crossorigin attribute anonymous (different origin)", function() { + var originalValue = __webpack_public_path__; + __webpack_public_path__ = "https://example.com/"; + const promise = import("./style.css?e" /* webpackChunkName: "crossorigin-different-origin" */); + __webpack_public_path__ = originalValue; + + var link = document.head._children[0]; + + expect(link.href).toBe("https://example.com/crossorigin-different-origin.web.css"); + expect(link.crossOrigin).toBe("anonymous"); + + return promise; +}); diff --git a/test/configCases/crossorigin/set-crossorigin/style.css b/test/configCases/crossorigin/set-crossorigin/style.css new file mode 100644 index 00000000000..60f1eab9713 --- /dev/null +++ b/test/configCases/crossorigin/set-crossorigin/style.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/crossorigin/set-crossorigin/webpack.config.js b/test/configCases/crossorigin/set-crossorigin/webpack.config.js new file mode 100644 index 00000000000..82db627da9b --- /dev/null +++ b/test/configCases/crossorigin/set-crossorigin/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + output: { + chunkFilename: "[name].web.js", + crossOriginLoading: "anonymous" + }, + performance: { + hints: false + }, + optimization: { + minimize: false + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/async-chunk-node/index.js b/test/configCases/css/async-chunk-node/index.js new file mode 100644 index 00000000000..5f422e6a82f --- /dev/null +++ b/test/configCases/css/async-chunk-node/index.js @@ -0,0 +1,25 @@ +it("should allow to dynamic import a css module", done => { + import("../pseudo-export/style.module.css").then(x => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); + +it("should allow to dynamic import a pure css", done => { + import("./style.css").then(x => { + expect(Object.keys(x).length).toBe(0) + done(); + }, done); +}); diff --git a/test/configCases/css/async-chunk-node/style.css b/test/configCases/css/async-chunk-node/style.css new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/css/async-chunk-node/style.css @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/css/async-chunk-node/webpack.config.js b/test/configCases/css/async-chunk-node/webpack.config.js new file mode 100644 index 00000000000..8cfa4eda679 --- /dev/null +++ b/test/configCases/css/async-chunk-node/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/basic-dynamic-only/index.js b/test/configCases/css/basic-dynamic-only/index.js new file mode 100644 index 00000000000..0e786f4ccd9 --- /dev/null +++ b/test/configCases/css/basic-dynamic-only/index.js @@ -0,0 +1,9 @@ +it("should compile and load style on demand", (done) => { + import("./style.css").then(x => { + expect(x).toEqual({}); + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("margin")).toBe(" 10px"); + done(); + }, done); +}); diff --git a/test/configCases/css/basic-dynamic-only/style-imported.css b/test/configCases/css/basic-dynamic-only/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/basic-dynamic-only/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/basic-dynamic-only/style.css b/test/configCases/css/basic-dynamic-only/style.css new file mode 100644 index 00000000000..19aa0d1f6d4 --- /dev/null +++ b/test/configCases/css/basic-dynamic-only/style.css @@ -0,0 +1,5 @@ +@import url(https://test.cases/path/../../../../configCases/css/import/external.css); +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/basic-dynamic-only/test.config.js b/test/configCases/css/basic-dynamic-only/test.config.js new file mode 100644 index 00000000000..df2ced03ebd --- /dev/null +++ b/test/configCases/css/basic-dynamic-only/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["style_css.bundle0.js", "bundle0.js"]; + } +}; diff --git a/test/configCases/css/basic-dynamic-only/webpack.config.js b/test/configCases/css/basic-dynamic-only/webpack.config.js new file mode 100644 index 00000000000..0525a266f2b --- /dev/null +++ b/test/configCases/css/basic-dynamic-only/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + externalsPresets: { web: false, webAsync: true }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/basic-esm-target-node/index.js b/test/configCases/css/basic-esm-target-node/index.js new file mode 100644 index 00000000000..4f3f829ec97 --- /dev/null +++ b/test/configCases/css/basic-esm-target-node/index.js @@ -0,0 +1,9 @@ +import * as style from "./style.css"; + +it("should compile and load style on demand", done => { + expect(style).toEqual({}); + import("./style2.css").then(x => { + expect(x).toEqual({}); + done(); + }, done); +}); diff --git a/test/configCases/css/basic-esm-target-node/style-imported.css b/test/configCases/css/basic-esm-target-node/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/basic-esm-target-node/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/basic-esm-target-node/style.css b/test/configCases/css/basic-esm-target-node/style.css new file mode 100644 index 00000000000..ba0cfaf6561 --- /dev/null +++ b/test/configCases/css/basic-esm-target-node/style.css @@ -0,0 +1,4 @@ +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/basic-esm-target-node/style2-imported.css b/test/configCases/css/basic-esm-target-node/style2-imported.css new file mode 100644 index 00000000000..ff9387e5d3e --- /dev/null +++ b/test/configCases/css/basic-esm-target-node/style2-imported.css @@ -0,0 +1,3 @@ +body { + padding: 20px 10px; +} diff --git a/test/configCases/css/basic-esm-target-node/style2.css b/test/configCases/css/basic-esm-target-node/style2.css new file mode 100644 index 00000000000..d80cbcd05df --- /dev/null +++ b/test/configCases/css/basic-esm-target-node/style2.css @@ -0,0 +1,4 @@ +@import "./style2-imported.css"; +body { + color: green; +} diff --git a/test/configCases/css/basic-esm-target-node/webpack.config.js b/test/configCases/css/basic-esm-target-node/webpack.config.js new file mode 100644 index 00000000000..e24569bec1f --- /dev/null +++ b/test/configCases/css/basic-esm-target-node/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + experiments: { + outputModule: true, + css: true + }, + output: { + module: true, + chunkFormat: "module" + } +}; diff --git a/test/configCases/css/basic-esm-target-web/index.js b/test/configCases/css/basic-esm-target-web/index.js new file mode 100644 index 00000000000..eb4c93a7f52 --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/index.js @@ -0,0 +1,14 @@ +import * as style from "./style.css"; + +it("should compile and load style on demand", done => { + expect(style).toEqual({}); + import("./style2.css").then(x => { + expect(x).toEqual({}); + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("margin")).toBe(" 10px"); + expect(style.getPropertyValue("color")).toBe(" green"); + expect(style.getPropertyValue("padding")).toBe(" 20px 10px"); + done(); + }, done); +}); diff --git a/test/configCases/css/basic-esm-target-web/style-imported.css b/test/configCases/css/basic-esm-target-web/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/basic-esm-target-web/style.css b/test/configCases/css/basic-esm-target-web/style.css new file mode 100644 index 00000000000..ba0cfaf6561 --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/style.css @@ -0,0 +1,4 @@ +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/basic-esm-target-web/style2-imported.css b/test/configCases/css/basic-esm-target-web/style2-imported.css new file mode 100644 index 00000000000..ff9387e5d3e --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/style2-imported.css @@ -0,0 +1,3 @@ +body { + padding: 20px 10px; +} diff --git a/test/configCases/css/basic-esm-target-web/style2.css b/test/configCases/css/basic-esm-target-web/style2.css new file mode 100644 index 00000000000..d80cbcd05df --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/style2.css @@ -0,0 +1,4 @@ +@import "./style2-imported.css"; +body { + color: green; +} diff --git a/test/configCases/css/basic-esm-target-web/test.config.js b/test/configCases/css/basic-esm-target-web/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/basic-esm-target-web/webpack.config.js b/test/configCases/css/basic-esm-target-web/webpack.config.js new file mode 100644 index 00000000000..44bb54f4999 --- /dev/null +++ b/test/configCases/css/basic-esm-target-web/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + outputModule: true, + css: true + }, + output: { + module: true, + chunkFormat: "module" + } +}; diff --git a/test/configCases/css/basic-initial-only/index.js b/test/configCases/css/basic-initial-only/index.js new file mode 100644 index 00000000000..ea3660d24ed --- /dev/null +++ b/test/configCases/css/basic-initial-only/index.js @@ -0,0 +1,8 @@ +import * as style from "./style.css"; + +it("should compile and load initial style", () => { + expect(style).toEqual({}); + const computedStyle = getComputedStyle(document.body); + expect(computedStyle.getPropertyValue("background")).toBe(" red"); + expect(computedStyle.getPropertyValue("margin")).toBe(" 10px"); +}); diff --git a/test/configCases/css/basic-initial-only/style-imported.css b/test/configCases/css/basic-initial-only/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/basic-initial-only/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/basic-initial-only/style.css b/test/configCases/css/basic-initial-only/style.css new file mode 100644 index 00000000000..19aa0d1f6d4 --- /dev/null +++ b/test/configCases/css/basic-initial-only/style.css @@ -0,0 +1,5 @@ +@import url(https://test.cases/path/../../../../configCases/css/import/external.css); +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/basic-initial-only/test.config.js b/test/configCases/css/basic-initial-only/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/basic-initial-only/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/basic-initial-only/webpack.config.js b/test/configCases/css/basic-initial-only/webpack.config.js new file mode 100644 index 00000000000..0525a266f2b --- /dev/null +++ b/test/configCases/css/basic-initial-only/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + externalsPresets: { web: false, webAsync: true }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/basic-web-async/index.js b/test/configCases/css/basic-web-async/index.js new file mode 100644 index 00000000000..eb4c93a7f52 --- /dev/null +++ b/test/configCases/css/basic-web-async/index.js @@ -0,0 +1,14 @@ +import * as style from "./style.css"; + +it("should compile and load style on demand", done => { + expect(style).toEqual({}); + import("./style2.css").then(x => { + expect(x).toEqual({}); + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("margin")).toBe(" 10px"); + expect(style.getPropertyValue("color")).toBe(" green"); + expect(style.getPropertyValue("padding")).toBe(" 20px 10px"); + done(); + }, done); +}); diff --git a/test/configCases/css/basic-web-async/style-imported.css b/test/configCases/css/basic-web-async/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/basic-web-async/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/basic-web-async/style.css b/test/configCases/css/basic-web-async/style.css new file mode 100644 index 00000000000..ba0cfaf6561 --- /dev/null +++ b/test/configCases/css/basic-web-async/style.css @@ -0,0 +1,4 @@ +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/basic-web-async/style2-imported.css b/test/configCases/css/basic-web-async/style2-imported.css new file mode 100644 index 00000000000..ff9387e5d3e --- /dev/null +++ b/test/configCases/css/basic-web-async/style2-imported.css @@ -0,0 +1,3 @@ +body { + padding: 20px 10px; +} diff --git a/test/configCases/css/basic-web-async/style2.css b/test/configCases/css/basic-web-async/style2.css new file mode 100644 index 00000000000..d80cbcd05df --- /dev/null +++ b/test/configCases/css/basic-web-async/style2.css @@ -0,0 +1,4 @@ +@import "./style2-imported.css"; +body { + color: green; +} diff --git a/test/configCases/css/basic-web-async/test.config.js b/test/configCases/css/basic-web-async/test.config.js new file mode 100644 index 00000000000..14346f87a41 --- /dev/null +++ b/test/configCases/css/basic-web-async/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["style2_css.bundle0.js", "bundle0.js"]; + }, + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/basic-web-async/webpack.config.js b/test/configCases/css/basic-web-async/webpack.config.js new file mode 100644 index 00000000000..0525a266f2b --- /dev/null +++ b/test/configCases/css/basic-web-async/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + externalsPresets: { web: false, webAsync: true }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/basic/index.js b/test/configCases/css/basic/index.js new file mode 100644 index 00000000000..eb4c93a7f52 --- /dev/null +++ b/test/configCases/css/basic/index.js @@ -0,0 +1,14 @@ +import * as style from "./style.css"; + +it("should compile and load style on demand", done => { + expect(style).toEqual({}); + import("./style2.css").then(x => { + expect(x).toEqual({}); + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("margin")).toBe(" 10px"); + expect(style.getPropertyValue("color")).toBe(" green"); + expect(style.getPropertyValue("padding")).toBe(" 20px 10px"); + done(); + }, done); +}); diff --git a/test/configCases/css/basic/style-imported.css b/test/configCases/css/basic/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/basic/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/basic/style.css b/test/configCases/css/basic/style.css new file mode 100644 index 00000000000..ba0cfaf6561 --- /dev/null +++ b/test/configCases/css/basic/style.css @@ -0,0 +1,4 @@ +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/basic/style2-imported.css b/test/configCases/css/basic/style2-imported.css new file mode 100644 index 00000000000..ff9387e5d3e --- /dev/null +++ b/test/configCases/css/basic/style2-imported.css @@ -0,0 +1,3 @@ +body { + padding: 20px 10px; +} diff --git a/test/configCases/css/basic/style2.css b/test/configCases/css/basic/style2.css new file mode 100644 index 00000000000..d80cbcd05df --- /dev/null +++ b/test/configCases/css/basic/style2.css @@ -0,0 +1,4 @@ +@import "./style2-imported.css"; +body { + color: green; +} diff --git a/test/configCases/css/basic/test.config.js b/test/configCases/css/basic/test.config.js new file mode 100644 index 00000000000..14346f87a41 --- /dev/null +++ b/test/configCases/css/basic/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["style2_css.bundle0.js", "bundle0.js"]; + }, + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/basic/webpack.config.js b/test/configCases/css/basic/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/basic/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/build-http/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/build-http/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..340bcdc87e6 --- /dev/null +++ b/test/configCases/css/build-http/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,23 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css build-http exported tests should work with URLs in CSS 1`] = ` +Array [ + "/*!*******************************************************************************************************************!*\\\\ + !*** css https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/css/import/print.css ***! + \\\\*******************************************************************************************************************/ +body { + background: black; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +div { + background: url(09a1a1112c577c279435.png) +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/build-http/__snapshots__/ConfigTest.snap b/test/configCases/css/build-http/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..1eeeebe30eb --- /dev/null +++ b/test/configCases/css/build-http/__snapshots__/ConfigTest.snap @@ -0,0 +1,23 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css build-http exported tests should work with URLs in CSS 1`] = ` +Array [ + "/*!*******************************************************************************************************************!*\\\\ + !*** css https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/css/import/print.css ***! + \\\\*******************************************************************************************************************/ +body { + background: black; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +div { + background: url(09a1a1112c577c279435.png) +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/build-http/index.js b/test/configCases/css/build-http/index.js new file mode 100644 index 00000000000..d4120b0b952 --- /dev/null +++ b/test/configCases/css/build-http/index.js @@ -0,0 +1,14 @@ +import "./style.css"; + +it(`should work with URLs in CSS`, done => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); + done(); +}); diff --git a/test/configCases/css/build-http/lock-files/lock.json b/test/configCases/css/build-http/lock-files/lock.json new file mode 100644 index 00000000000..a129accb716 --- /dev/null +++ b/test/configCases/css/build-http/lock-files/lock.json @@ -0,0 +1,6 @@ +{ + "https://github.com/webpack/webpack/blob/main/test/configCases/css/url/img1x.png?raw=true": "no-cache", + "https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/css/import/print.css": { "integrity": "sha512-/myPbDE4wFl8iP0bC1CXR+X+TOscaPV9+NbYoBGSQC+isfd0aenGk15EijukV04CW61CXR+c22ZgG0dp7ldntw==", "contentType": "text/plain; charset=utf-8" }, + "https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/css/url/img.png": { "integrity": "sha512-bHqIPBYwzPsVLYcTDqJzwgvIaxLjmezufiCVXAMI0Naelf3eWVdydMA40hXbSuB0dZCGjCepuGaI7Ze8kLM+Ew==", "contentType": "image/png" }, + "version": 1 +} diff --git a/test/configCases/css/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_css_import_print_fe2e4bc761f16d07c5d8.css b/test/configCases/css/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_css_import_print_fe2e4bc761f16d07c5d8.css new file mode 100644 index 00000000000..5fa2bfe59ff --- /dev/null +++ b/test/configCases/css/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_css_import_print_fe2e4bc761f16d07c5d8.css @@ -0,0 +1,3 @@ +body { + background: black; +} diff --git a/test/configCases/css/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_css_url_img_03f8141d33ee58db56db.png b/test/configCases/css/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_css_url_img_03f8141d33ee58db56db.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/build-http/lock-files/test/https_raw.githubusercontent.com/webpack_webpack_refs_heads_main_test_configCases_css_url_img_03f8141d33ee58db56db.png differ diff --git a/test/configCases/css/build-http/style.css b/test/configCases/css/build-http/style.css new file mode 100644 index 00000000000..237c2257f0e --- /dev/null +++ b/test/configCases/css/build-http/style.css @@ -0,0 +1,5 @@ +@import "https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/css/import/print.css"; + +div { + background: url(https://raw.githubusercontent.com/webpack/webpack/refs/heads/main/test/configCases/css/url/img.png) +} diff --git a/test/configCases/css/build-http/test.config.js b/test/configCases/css/build-http/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/build-http/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/build-http/webpack.config.js b/test/configCases/css/build-http/webpack.config.js new file mode 100644 index 00000000000..c10719bae0b --- /dev/null +++ b/test/configCases/css/build-http/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + buildHttp: { + allowedUris: [() => true], + lockfileLocation: path.resolve(__dirname, "./lock-files/lock.json"), + cacheLocation: path.resolve(__dirname, "./lock-files/test") + }, + css: true + } +}; diff --git a/test/configCases/css/cjs-module-syntax/index.js b/test/configCases/css/cjs-module-syntax/index.js new file mode 100644 index 00000000000..30785b59884 --- /dev/null +++ b/test/configCases/css/cjs-module-syntax/index.js @@ -0,0 +1,11 @@ +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +it("should able to require the css module as commonjs", () => { + const style = require("./style.module.css"); + const interoperatedStyle = _interopRequireDefault(require("./style.module.css")); + + expect(style).toEqual({ foo: 'style_module_css-foo' }); + expect(style).not.toEqual(nsObj({ foo: 'style_module_css-foo' })); + expect(style.__esModule).toEqual(undefined); + expect(interoperatedStyle.default.foo).toEqual("style_module_css-foo"); +}); diff --git a/test/configCases/css/cjs-module-syntax/style.module.css b/test/configCases/css/cjs-module-syntax/style.module.css new file mode 100644 index 00000000000..cedf0a6d1f1 --- /dev/null +++ b/test/configCases/css/cjs-module-syntax/style.module.css @@ -0,0 +1,3 @@ +.foo { + color: red; +} diff --git a/test/configCases/css/cjs-module-syntax/test.config.js b/test/configCases/css/cjs-module-syntax/test.config.js new file mode 100644 index 00000000000..0ec2334b583 --- /dev/null +++ b/test/configCases/css/cjs-module-syntax/test.config.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + if (scope.document) { + const link = scope.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.document.head.appendChild(link); + } + } +}; diff --git a/test/configCases/css/cjs-module-syntax/webpack.config.js b/test/configCases/css/cjs-module-syntax/webpack.config.js new file mode 100644 index 00000000000..006060da2d1 --- /dev/null +++ b/test/configCases/css/cjs-module-syntax/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + target: "web", + mode: "development", + module: { + generator: { + "css/auto": { + esModule: false + } + } + }, + experiments: { + css: true + } + }, + { + target: "node", + mode: "development", + module: { + generator: { + "css/auto": { + esModule: false + } + } + }, + experiments: { + css: true + } + } +]; diff --git a/test/configCases/css/conflicting-order/a.css b/test/configCases/css/conflicting-order/a.css new file mode 100644 index 00000000000..facff2572fd --- /dev/null +++ b/test/configCases/css/conflicting-order/a.css @@ -0,0 +1,3 @@ +body { + color: a; +} diff --git a/test/configCases/css/conflicting-order/b.css b/test/configCases/css/conflicting-order/b.css new file mode 100644 index 00000000000..d056e75b364 --- /dev/null +++ b/test/configCases/css/conflicting-order/b.css @@ -0,0 +1,3 @@ +body { + color: b; +} diff --git a/test/configCases/css/conflicting-order/c.css b/test/configCases/css/conflicting-order/c.css new file mode 100644 index 00000000000..f3ed682c771 --- /dev/null +++ b/test/configCases/css/conflicting-order/c.css @@ -0,0 +1,3 @@ +body { + color: c; +} diff --git a/test/configCases/css/conflicting-order/d.css b/test/configCases/css/conflicting-order/d.css new file mode 100644 index 00000000000..3f32d017594 --- /dev/null +++ b/test/configCases/css/conflicting-order/d.css @@ -0,0 +1,3 @@ +body { + color: d; +} diff --git a/test/configCases/css/conflicting-order/e.css b/test/configCases/css/conflicting-order/e.css new file mode 100644 index 00000000000..1860e384e83 --- /dev/null +++ b/test/configCases/css/conflicting-order/e.css @@ -0,0 +1,3 @@ +body { + color: e; +} diff --git a/test/configCases/css/conflicting-order/index.js b/test/configCases/css/conflicting-order/index.js new file mode 100644 index 00000000000..1bb72365811 --- /dev/null +++ b/test/configCases/css/conflicting-order/index.js @@ -0,0 +1,23 @@ +import fs from "fs"; +import path from "path"; + +it("should lead to conflicting order warning", done => { + __non_webpack_require__("./lazy4_js.bundle0.js"); + Promise.all([ + import("./lazy1.css"), + import("./lazy2.css"), + import("./lazy3.css"), + import("./lazy4.js") + ]).then(() => { + try { + const matches = fs + .readFileSync(path.join(__dirname, "css.bundle0.css"), "utf-8") + .match(/color: ([a-z0-9])/g) + .map(match => match[7]); + expect(matches).toEqual("bcdea123".split("")); + done(); + } catch (e) { + done(e); + } + }, done); +}); diff --git a/test/configCases/css/conflicting-order/lazy1.css b/test/configCases/css/conflicting-order/lazy1.css new file mode 100644 index 00000000000..0cf98e07196 --- /dev/null +++ b/test/configCases/css/conflicting-order/lazy1.css @@ -0,0 +1,7 @@ +@import "b.css"; +@import "c.css"; +@import "a.css"; + +body { + color: 1; +} diff --git a/test/configCases/css/conflicting-order/lazy2.css b/test/configCases/css/conflicting-order/lazy2.css new file mode 100644 index 00000000000..9926298dfaf --- /dev/null +++ b/test/configCases/css/conflicting-order/lazy2.css @@ -0,0 +1,7 @@ +@import "c.css"; +@import "b.css"; +@import "a.css"; + +body { + color: 2; +} diff --git a/test/configCases/css/conflicting-order/lazy3.css b/test/configCases/css/conflicting-order/lazy3.css new file mode 100644 index 00000000000..945f24b7a0b --- /dev/null +++ b/test/configCases/css/conflicting-order/lazy3.css @@ -0,0 +1,6 @@ +@import "d.css"; +@import "a.css"; + +body { + color: 3; +} diff --git a/test/configCases/css/conflicting-order/lazy4.js b/test/configCases/css/conflicting-order/lazy4.js new file mode 100644 index 00000000000..1e7987525f3 --- /dev/null +++ b/test/configCases/css/conflicting-order/lazy4.js @@ -0,0 +1,2 @@ +import "./e.css"; +import "./a.css"; diff --git a/test/configCases/css/conflicting-order/test.config.js b/test/configCases/css/conflicting-order/test.config.js new file mode 100644 index 00000000000..cddd59d788a --- /dev/null +++ b/test/configCases/css/conflicting-order/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["css.bundle0.js", "lazy4_js.bundle0.js", "bundle0.js"]; + } +}; diff --git a/test/configCases/css/conflicting-order/warnings.js b/test/configCases/css/conflicting-order/warnings.js new file mode 100644 index 00000000000..b0383efe01c --- /dev/null +++ b/test/configCases/css/conflicting-order/warnings.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + [ + /Conflicting order between css \.\/b\.css and css \.\/c\.css\nCSS modules are imported in:\n {2}- css \.\/lazy1\.css\n {2}- css \.\/lazy2\.css/ + ] +]; diff --git a/test/configCases/css/conflicting-order/webpack.config.js b/test/configCases/css/conflicting-order/webpack.config.js new file mode 100644 index 00000000000..d761c43534a --- /dev/null +++ b/test/configCases/css/conflicting-order/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + }, + optimization: { + splitChunks: { + cacheGroups: { + css: { + type: "css/auto", + enforce: true, + name: "css" + } + } + } + }, + externalsPresets: { + node: true + }, + node: { + __dirname: false + } +}; diff --git a/test/configCases/css/contenthash/async.css b/test/configCases/css/contenthash/async.css new file mode 100644 index 00000000000..e05a8819abb --- /dev/null +++ b/test/configCases/css/contenthash/async.css @@ -0,0 +1,4 @@ +body { + background: yellow; + color: green; +} diff --git a/test/configCases/css/contenthash/async.js b/test/configCases/css/contenthash/async.js new file mode 100644 index 00000000000..6308565c261 --- /dev/null +++ b/test/configCases/css/contenthash/async.js @@ -0,0 +1 @@ +export const name = 'async'; diff --git a/test/configCases/css/contenthash/index.js b/test/configCases/css/contenthash/index.js new file mode 100644 index 00000000000..f2504f3a75a --- /dev/null +++ b/test/configCases/css/contenthash/index.js @@ -0,0 +1,28 @@ +import * as style from "./style.css"; + +it("should work with js", done => { + import('./async.js').then(x => { + expect(x.name).toBe("async") + done(); + }, done); +}); + +it("should work with css", done => { + expect(style).toEqual({}); + + const computedStyle = getComputedStyle(document.body); + + expect(computedStyle.getPropertyValue("background")).toBe(" green"); + expect(computedStyle.getPropertyValue("color")).toBe(" yellow"); + + import("./async.css").then(x => { + expect(x).toEqual({}); + + const style = getComputedStyle(document.body); + + expect(style.getPropertyValue("background")).toBe(" yellow"); + expect(style.getPropertyValue("color")).toBe(" green"); + + done(); + }, done); +}); diff --git a/test/configCases/css/contenthash/style.css b/test/configCases/css/contenthash/style.css new file mode 100644 index 00000000000..9cbc00618c7 --- /dev/null +++ b/test/configCases/css/contenthash/style.css @@ -0,0 +1,4 @@ +body { + background: green; + color: yellow; +} diff --git a/test/configCases/css/contenthash/test.config.js b/test/configCases/css/contenthash/test.config.js new file mode 100644 index 00000000000..74d11b962a8 --- /dev/null +++ b/test/configCases/css/contenthash/test.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +module.exports = { + findBundle(i, options) { + const async1 = findOutputFiles(options, /^async.async_js.+.js/)[0]; + const async2 = findOutputFiles(options, /^async.async_css.+.js/)[0]; + const bundle = findOutputFiles(options, /^bundle.+.js/)[0]; + return [async1, async2, bundle]; + }, + moduleScope(scope, options) { + const bundle = findOutputFiles(options, /bundle.+.css/)[0]; + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = bundle; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/contenthash/webpack.config.js b/test/configCases/css/contenthash/webpack.config.js new file mode 100644 index 00000000000..faf9a298ba2 --- /dev/null +++ b/test/configCases/css/contenthash/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + output: { + filename: "bundle.[name].[contenthash].js", + cssFilename: "bundle.[name].[contenthash].css", + chunkFilename: "async.[name].[contenthash].js", + cssChunkFilename: "async.[name].[contenthash].css" + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/css-auto/colors.js b/test/configCases/css/css-auto/colors.js new file mode 100644 index 00000000000..91f7b0d0db4 --- /dev/null +++ b/test/configCases/css/css-auto/colors.js @@ -0,0 +1,2 @@ +export const red = '#f00'; +export const green = '#0f0'; \ No newline at end of file diff --git a/test/configCases/css/css-auto/global.less b/test/configCases/css/css-auto/global.less new file mode 100644 index 00000000000..f815695493b --- /dev/null +++ b/test/configCases/css/css-auto/global.less @@ -0,0 +1,3 @@ +body { + color: green; +} diff --git a/test/configCases/css/css-auto/index.js b/test/configCases/css/css-auto/index.js new file mode 100644 index 00000000000..1ec3ba74f43 --- /dev/null +++ b/test/configCases/css/css-auto/index.js @@ -0,0 +1,17 @@ +import "./global.less"; +import * as style1 from "./style1.module.less"; +import * as style2 from "./style2.modules.less"; +import * as style3 from "./style3.module.less!=!./loader.js!./style3.module.js"; +import * as style4 from "./style4.module.less!=!./loader.js!./style4.js"; +import * as style5 from "./style5.module.css!=!./loader.js!./style4.js"; + +it("should correctly compile css/auto", () => { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("color")).toBe(" green"); + expect(style.getPropertyValue("background")).toBe(" #f00"); + expect(style1.class).toBe("style1_module_less-class"); + expect(style2.class).toBe("style2_modules_less-class"); + expect(style3.class).toBe("style3_module_less_loader_js_style3_module_js-class"); + expect(style4.class).toBe("style4_module_less_loader_js_style4_js-class"); + expect(style5.class).toBe("style5_module_css_loader_js_style4_js-class"); +}); diff --git a/test/configCases/css/css-auto/loader.js b/test/configCases/css/css-auto/loader.js new file mode 100644 index 00000000000..5165d32de03 --- /dev/null +++ b/test/configCases/css/css-auto/loader.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +exports.pitch = async function (remaining) { + const result = await this.importModule( + this.resourcePath + '.webpack[javascript/auto]' + '!=!' + remaining, { + publicPath: '' + }); + return result.default || result; +}; diff --git a/test/configCases/css/css-auto/style1.module.less b/test/configCases/css/css-auto/style1.module.less new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/css/css-auto/style1.module.less @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/css/css-auto/style2.modules.less b/test/configCases/css/css-auto/style2.modules.less new file mode 100644 index 00000000000..323ffaed199 --- /dev/null +++ b/test/configCases/css/css-auto/style2.modules.less @@ -0,0 +1,3 @@ +.class { + color: blue; +} diff --git a/test/configCases/css/css-auto/style3.module.js b/test/configCases/css/css-auto/style3.module.js new file mode 100644 index 00000000000..c56e98fb281 --- /dev/null +++ b/test/configCases/css/css-auto/style3.module.js @@ -0,0 +1,6 @@ +import { green, red } from './colors.js'; + +export default ` +.class { color: ${green}; } +body { background: ${red}; } +`; diff --git a/test/configCases/css/css-auto/style4.js b/test/configCases/css/css-auto/style4.js new file mode 100644 index 00000000000..c56e98fb281 --- /dev/null +++ b/test/configCases/css/css-auto/style4.js @@ -0,0 +1,6 @@ +import { green, red } from './colors.js'; + +export default ` +.class { color: ${green}; } +body { background: ${red}; } +`; diff --git a/test/configCases/css/css-auto/style6.modules.css b/test/configCases/css/css-auto/style6.modules.css new file mode 100644 index 00000000000..323ffaed199 --- /dev/null +++ b/test/configCases/css/css-auto/style6.modules.css @@ -0,0 +1,3 @@ +.class { + color: blue; +} diff --git a/test/configCases/css/css-auto/test.config.js b/test/configCases/css/css-auto/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/css-auto/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/css-auto/webpack.config.js b/test/configCases/css/css-auto/webpack.config.js new file mode 100644 index 00000000000..ffdefdb5702 --- /dev/null +++ b/test/configCases/css/css-auto/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.less$/, + use: "less-loader", + type: "css/auto" + } + ] + } +}; diff --git a/test/configCases/css/css-loader/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-loader/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..5d7d7c240c9 --- /dev/null +++ b/test/configCases/css/css-loader/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,2463 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-loader exported tests should work 1`] = ` +Object { + "@bounce": "basic_module_css-@bounce", + "a": "basic_module_css-a", + "abc": "basic_module_css-abc", + "b": "basic_module_css-b", + "bar-1": "basic_module_css-bar-1", + "bounce": "basic_module_css-bounce", + "bounce2": "basic_module_css-bounce2", + "bounce3": "basic_module_css-bounce3", + "bounce4": "basic_module_css-bounce4", + "c": "basic_module_css-c", + "c1": "basic_module_css-c1", + "c2": "basic_module_css-c2 basic_module_css-c1", + "c3": "basic_module_css-c3", + "c4": "basic_module_css-c4", + "c5": "basic_module_css-c5", + "c6": "basic_module_css-c6", + "c7": "basic_module_css-c7", + "c8": "basic_module_css-c8", + "class-1": "basic_module_css-class-1", + "class-10": "basic_module_css-class-10", + "className": "basic_module_css-className", + "container": "basic_module_css-container", + "d": "basic_module_css-d", + "def": "basic_module_css-def basic_module_css-abc", + "fade-in": "basic_module_css-fade-in", + "ghi": "basic_module_css-ghi", + "id": "basic_module_css-id", + "jkl": "basic_module_css-jkl", + "q": "basic_module_css-q", + "slide-right": "basic_module_css-slide-right", + "someId": "basic_module_css-someId", + "subClass": "basic_module_css-subClass", + "x": "basic_module_css-x", + "y": "basic_module_css-y", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 2`] = ` +Object { + "default": "classes_module_css_0c83-default", + "module": "classes_module_css_0c83-module", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 3`] = ` +Object { + "class": "composes-multiple_module_css-class composes-multiple_module_css-other-class composes-multiple_module_css-class-1 composes-multiple_module_css-class-2 alias_css-imported-alias alias-1_css-imported-alias-2 alias-1_css-imported-alias-3 global-class global-class-1 global-class-2", + "class-1": "composes-multiple_module_css-class-1", + "class-2": "composes-multiple_module_css-class-2", + "class-other": "composes-multiple_module_css-class-other composes-multiple_module_css-other-class composes-multiple_module_css-class-1", + "other-class": "composes-multiple_module_css-other-class", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 4`] = ` +Object { + "otherClassName": "composes-global_module_css-otherClassName global-class other-global-class", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 5`] = ` +Object { + "class-a": "scope-at-rule_module_css-class-a", + "class-b": "scope-at-rule_module_css-class-b", + "dark-scheme": "scope-at-rule_module_css-dark-scheme", + "light-scheme": "scope-at-rule_module_css-light-scheme", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 6`] = ` +Object { + "a": "nesting_module_css-a", + "b": "nesting_module_css-b nesting_module_css-a", + "bar": "nesting_module_css-bar nesting_module_css-foo", + "baz": "nesting_module_css-baz", + "foo": "nesting_module_css-foo", + "n": "nesting_module_css-n nesting_module_css-a", + "notice": "nesting_module_css-notice", + "notice-heading": "nesting_module_css-notice-heading", + "success": "nesting_module_css-success", + "success-heading": "nesting_module_css-success-heading", + "warning": "nesting_module_css-warning", + "warning-heading": "nesting_module_css-warning-heading", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 7`] = ` +Object { + "one": "prefer-relative_module_css-one package_one_css-imported-relative", + "two": "prefer-relative_module_css-two node_modules_package_two_css-imported-relative", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 8`] = ` +Object { + "a": "animation-name_module_css-a", + "animationName": "animation-name_module_css-animationName", + "b": "animation-name_module_css-b", + "c": "animation-name_module_css-c", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 9`] = ` +Object { + "myClass": "at-sign-in-package-name_module_css-myClass", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 10`] = ` +Object { + "color-grey": "gray", + "copyright": "resolving-from-node_modules_module_css-copyright node_modules_@localpackage_style_css-type-heading node_modules_@otherlocalpackage_style_css-type-heading2", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 11`] = ` +Object { + "#": "local-Ident-name_module_css-#", + "##": "local-Ident-name_module_css-##", + "#.#.#": "local-Ident-name_module_css-#.#.#", + "#fake-id": "local-Ident-name_module_css-#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name_module_css-++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "local-Ident-name_module_css--a-b-c-", + "-a0-34a___f": "local-Ident-name_module_css--a0-34a___f", + ".": "local-Ident-name_module_css-.", + "123": "local-Ident-name_module_css-123", + "1a2b3c": "local-Ident-name_module_css-1a2b3c", + ":)": "local-Ident-name_module_css-:)", + ":\`(": "local-Ident-name_module_css-:\`(", + ":hover": "local-Ident-name_module_css-:hover", + ":hover:focus:active": "local-Ident-name_module_css-:hover:focus:active", + "<><<<>><>": "local-Ident-name_module_css-<><<<>><>", + "

": "local-Ident-name_module_css-

", + "?": "local-Ident-name_module_css-?", + "@": "local-Ident-name_module_css-@", + "B&W?": "local-Ident-name_module_css-B&W?", + "[attr=value]": "local-Ident-name_module_css-[attr=value]", + "_": "local-Ident-name_module_css-_", + "_test": "local-Ident-name_module_css-_test", + "className": "local-Ident-name_module_css-className", + "f!o!o": "local-Ident-name_module_css-f!o!o", + "f'o'o": "local-Ident-name_module_css-f'o'o", + "f*o*o": "local-Ident-name_module_css-f*o*o", + "f+o+o": "local-Ident-name_module_css-f+o+o", + "f/o/o": "local-Ident-name_module_css-f/o/o", + "f\\\\o\\\\o": "local-Ident-name_module_css-f\\\\o\\\\o", + "foo.bar": "local-Ident-name_module_css-foo.bar", + "foo/bar": "local-Ident-name_module_css-foo/bar", + "foo/bar/baz": "local-Ident-name_module_css-foo/bar/baz", + "foo\\\\bar": "local-Ident-name_module_css-foo\\\\bar", + "foo\\\\bar\\\\baz": "local-Ident-name_module_css-foo\\\\bar\\\\baz", + "f~o~o": "local-Ident-name_module_css-f~o~o", + "m_x_@": "local-Ident-name_module_css-m_x_@", + "someId": "local-Ident-name_module_css-someId", + "subClass": "local-Ident-name_module_css-subClass", + "test": "local-Ident-name_module_css-test", + "{}": "local-Ident-name_module_css-{}", + "©": "local-Ident-name_module_css-©", + "“‘’”": "local-Ident-name_module_css-“‘’”", + "⌘⌥": "local-Ident-name_module_css-⌘⌥", + "☺☃": "local-Ident-name_module_css-☺☃", + "♥": "local-Ident-name_module_css-♥", + "𝄞♪♩♫♬": "local-Ident-name_module_css-𝄞♪♩♫♬", + "💩": "local-Ident-name_module_css-💩", + "😍": "local-Ident-name_module_css-😍", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 12`] = ` +Object { + "#": "local-Ident-name.module--#--0fms6", + "##": "local-Ident-name.module--##--4MjQ_", + "#.#.#": "local-Ident-name.module--#.#.#--4Z5kr", + "#fake-id": "local-Ident-name.module--#fake-id--stuV6", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name.module--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--GNmAU", + "-a-b-c-": "local-Ident-name.module---a-b-c---BVuZu", + "-a0-34a___f": "local-Ident-name.module---a0-34a___f--rWQCS", + ".": "local-Ident-name.module--.--Bix0N", + "123": "local-Ident-name.module--123--PvTN4", + "1a2b3c": "local-Ident-name.module--1a2b3c--xSd9R", + ":)": "local-Ident-name.module--:)--kXjo5", + ":\`(": "local-Ident-name.module--:\`(--YZqyU", + ":hover": "local-Ident-name.module--:hover--QXnD_", + ":hover:focus:active": "local-Ident-name.module--:hover:focus:active--0eQHC", + "<><<<>><>": "local-Ident-name.module--<><<<>><>--q0Tti", + "

": "local-Ident-name.module--

--RCYv0", + "?": "local-Ident-name.module--?--tcA6P", + "@": "local-Ident-name.module--@--IjjsD", + "B&W?": "local-Ident-name.module--B&W?--9Uv5j", + "[attr=value]": "local-Ident-name.module--[attr=value]--bHMhi", + "_": "local-Ident-name.module--_--wWsEV", + "_test": "local-Ident-name.module--_test--c_lQ7", + "className": "local-Ident-name.module--className--QdX5M", + "f!o!o": "local-Ident-name.module--f!o!o--U5evv", + "f'o'o": "local-Ident-name.module--f'o'o--5azUC", + "f*o*o": "local-Ident-name.module--f*o*o--1OZxX", + "f+o+o": "local-Ident-name.module--f+o+o--r42Md", + "f/o/o": "local-Ident-name.module--f/o/o--gpPiW", + "f\\\\o\\\\o": "local-Ident-name.module--f\\\\o\\\\o--gu2u7", + "foo.bar": "local-Ident-name.module--foo.bar--EDSRu", + "foo/bar": "local-Ident-name.module--foo/bar--ARBA4", + "foo/bar/baz": "local-Ident-name.module--foo/bar/baz--p2TDV", + "foo\\\\bar": "local-Ident-name.module--foo\\\\bar--vSOik", + "foo\\\\bar\\\\baz": "local-Ident-name.module--foo\\\\bar\\\\baz--FlFA-", + "f~o~o": "local-Ident-name.module--f~o~o--6JU27", + "m_x_@": "local-Ident-name.module--m_x_@--wXBtR", + "someId": "local-Ident-name.module--someId--fs0tG", + "subClass": "local-Ident-name.module--subClass--EEiow", + "test": "local-Ident-name.module--test--n138O", + "{}": "local-Ident-name.module--{}--yOiSk", + "©": "local-Ident-name.module--©--ABrkO", + "“‘’”": "local-Ident-name.module--“‘’”--Viviw", + "⌘⌥": "local-Ident-name.module--⌘⌥--tU2QX", + "☺☃": "local-Ident-name.module--☺☃--_YUxr", + "♥": "local-Ident-name.module--♥--zQEWH", + "𝄞♪♩♫♬": "local-Ident-name.module--𝄞♪♩♫♬--16ySy", + "💩": "local-Ident-name.module--💩--fhsK2", + "😍": "local-Ident-name.module--😍--rYTiW", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 13`] = ` +Object { + "#": "_-1#", + "##": "_-1##", + "#.#.#": "_-1#.#.#", + "#fake-id": "_-1#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_-1++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "_-1-a-b-c-", + "-a0-34a___f": "_-1-a0-34a___f", + ".": "_-1.", + "123": "_-1123", + "1a2b3c": "_-11a2b3c", + ":)": "_-1:)", + ":\`(": "_-1:\`(", + ":hover": "_-1:hover", + ":hover:focus:active": "_-1:hover:focus:active", + "<><<<>><>": "_-1<><<<>><>", + "

": "_-1

", + "?": "_-1?", + "@": "_-1@", + "B&W?": "_-1B&W?", + "[attr=value]": "_-1[attr=value]", + "_": "_-1_", + "_test": "_-1_test", + "className": "_-1className", + "f!o!o": "_-1f!o!o", + "f'o'o": "_-1f'o'o", + "f*o*o": "_-1f*o*o", + "f+o+o": "_-1f+o+o", + "f/o/o": "_-1f/o/o", + "f\\\\o\\\\o": "_-1f\\\\o\\\\o", + "foo.bar": "_-1foo.bar", + "foo/bar": "_-1foo/bar", + "foo/bar/baz": "_-1foo/bar/baz", + "foo\\\\bar": "_-1foo\\\\bar", + "foo\\\\bar\\\\baz": "_-1foo\\\\bar\\\\baz", + "f~o~o": "_-1f~o~o", + "m_x_@": "_-1m_x_@", + "someId": "_-1someId", + "subClass": "_-1subClass", + "test": "_-1test", + "{}": "_-1{}", + "©": "_-1©", + "“‘’”": "_-1“‘’”", + "⌘⌥": "_-1⌘⌥", + "☺☃": "_-1☺☃", + "♥": "_-1♥", + "𝄞♪♩♫♬": "_-1𝄞♪♩♫♬", + "💩": "_-1💩", + "😍": "_-1😍", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 14`] = ` +Object { + "#": "_--#", + "##": "_--##", + "#.#.#": "_--#.#.#", + "#fake-id": "_--#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "_---a-b-c-", + "-a0-34a___f": "_---a0-34a___f", + ".": "_--.", + "123": "_--123", + "1a2b3c": "_--1a2b3c", + ":)": "_--:)", + ":\`(": "_--:\`(", + ":hover": "_--:hover", + ":hover:focus:active": "_--:hover:focus:active", + "<><<<>><>": "_--<><<<>><>", + "

": "_--

", + "?": "_--?", + "@": "_--@", + "B&W?": "_--B&W?", + "[attr=value]": "_--[attr=value]", + "_": "_--_", + "_test": "_--_test", + "className": "_--className", + "f!o!o": "_--f!o!o", + "f'o'o": "_--f'o'o", + "f*o*o": "_--f*o*o", + "f+o+o": "_--f+o+o", + "f/o/o": "_--f/o/o", + "f\\\\o\\\\o": "_--f\\\\o\\\\o", + "foo.bar": "_--foo.bar", + "foo/bar": "_--foo/bar", + "foo/bar/baz": "_--foo/bar/baz", + "foo\\\\bar": "_--foo\\\\bar", + "foo\\\\bar\\\\baz": "_--foo\\\\bar\\\\baz", + "f~o~o": "_--f~o~o", + "m_x_@": "_--m_x_@", + "someId": "_--someId", + "subClass": "_--subClass", + "test": "_--test", + "{}": "_--{}", + "©": "_--©", + "“‘’”": "_--“‘’”", + "⌘⌥": "_--⌘⌥", + "☺☃": "_--☺☃", + "♥": "_--♥", + "𝄞♪♩♫♬": "_--𝄞♪♩♫♬", + "💩": "_--💩", + "😍": "_--😍", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 15`] = ` +Object { + "#": "__#", + "##": "__##", + "#.#.#": "__#.#.#", + "#fake-id": "__#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "__++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "__-a-b-c-", + "-a0-34a___f": "__-a0-34a___f", + ".": "__.", + "123": "__123", + "1a2b3c": "__1a2b3c", + ":)": "__:)", + ":\`(": "__:\`(", + ":hover": "__:hover", + ":hover:focus:active": "__:hover:focus:active", + "<><<<>><>": "__<><<<>><>", + "

": "__

", + "?": "__?", + "@": "__@", + "B&W?": "__B&W?", + "[attr=value]": "__[attr=value]", + "_": "___", + "_test": "___test", + "className": "__className", + "f!o!o": "__f!o!o", + "f'o'o": "__f'o'o", + "f*o*o": "__f*o*o", + "f+o+o": "__f+o+o", + "f/o/o": "__f/o/o", + "f\\\\o\\\\o": "__f\\\\o\\\\o", + "foo.bar": "__foo.bar", + "foo/bar": "__foo/bar", + "foo/bar/baz": "__foo/bar/baz", + "foo\\\\bar": "__foo\\\\bar", + "foo\\\\bar\\\\baz": "__foo\\\\bar\\\\baz", + "f~o~o": "__f~o~o", + "m_x_@": "__m_x_@", + "someId": "__someId", + "subClass": "__subClass", + "test": "__test", + "{}": "__{}", + "©": "__©", + "“‘’”": "__“‘’”", + "⌘⌥": "__⌘⌥", + "☺☃": "__☺☃", + "♥": "__♥", + "𝄞♪♩♫♬": "__𝄞♪♩♫♬", + "💩": "__💩", + "😍": "__😍", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 16`] = ` +Object { + "#": "#--tlFV0b", + "##": "##--7vA-7E", + "#.#.#": "#.#.#--1Hd875", + "#fake-id": "#fake-id--ez7Dik", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--OsAmD3", + "-a-b-c-": "-a-b-c---jfQ3Qn", + "-a0-34a___f": "-a0-34a___f--OWXZy-", + ".": ".--ZtQPX0", + "123": "_123--j0sSmE", + "1a2b3c": "_1a2b3c--AMCMZb", + ":)": ":)--u1ngqY", + ":\`(": ":\`(--hgmvDX", + ":hover": ":hover--8XNA4p", + ":hover:focus:active": ":hover:focus:active--EpwJWE", + "<><<<>><>": "<><<<>><>--8jXRVC", + "

": "

--MHaC0-", + "?": "?--9Y6SkK", + "@": "@--Sc9iGx", + "B&W?": "B&W?--D7HZ-H", + "[attr=value]": "[attr=value]--ZTV_uO", + "_": "_--NFJ6vs", + "_test": "_test--Kfd_4M", + "className": "className--b9RUK8", + "f!o!o": "f!o!o--QQGZu2", + "f'o'o": "f'o'o--00bSFC", + "f*o*o": "f*o*o--kom_Jq", + "f+o+o": "f+o+o--J4WAkM", + "f/o/o": "f/o/o--3vNZZM", + "f\\\\o\\\\o": "f\\\\o\\\\o--wNzTj3", + "foo.bar": "foo.bar--pYS5El", + "foo/bar": "foo/bar--9GWp9d", + "foo/bar/baz": "foo/bar/baz--MRJglc", + "foo\\\\bar": "foo\\\\bar--CCzsTj", + "foo\\\\bar\\\\baz": "foo\\\\bar\\\\baz--nRgTR7", + "f~o~o": "f~o~o--26zzb-", + "m_x_@": "m_x_@--kG1v1e", + "someId": "someId--TlAET9", + "subClass": "subClass--sglK-1", + "test": "test--mowWgR", + "{}": "{}--Tr49RL", + "©": "©--sWiP9l", + "“‘’”": "“‘’”--M3gyy-", + "⌘⌥": "⌘⌥--oDuNAW", + "☺☃": "☺☃--pbZo-2", + "♥": "♥--e6nEYm", + "𝄞♪♩♫♬": "𝄞♪♩♫♬--vrTCd6", + "💩": "💩--1Txu-k", + "😍": "😍--rPyRbM", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 17`] = ` +Object { + "#": "😀- -#", + "##": "😀- -##", + "#.#.#": "😀- -#.#.#", + "#fake-id": "😀- -#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "😀- -++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "😀- --a-b-c-", + "-a0-34a___f": "😀- --a0-34a___f", + ".": "😀- -.", + "123": "😀- -123", + "1a2b3c": "😀- -1a2b3c", + ":)": "😀- -:)", + ":\`(": "😀- -:\`(", + ":hover": "😀- -:hover", + ":hover:focus:active": "😀- -:hover:focus:active", + "<><<<>><>": "😀- -<><<<>><>", + "

": "😀- -

", + "?": "😀- -?", + "@": "😀- -@", + "B&W?": "😀- -B&W?", + "[attr=value]": "😀- -[attr=value]", + "_": "😀- -_", + "_test": "😀- -_test", + "className": "😀- -className", + "f!o!o": "😀- -f!o!o", + "f'o'o": "😀- -f'o'o", + "f*o*o": "😀- -f*o*o", + "f+o+o": "😀- -f+o+o", + "f/o/o": "😀- -f/o/o", + "f\\\\o\\\\o": "😀- -f\\\\o\\\\o", + "foo.bar": "😀- -foo.bar", + "foo/bar": "😀- -foo/bar", + "foo/bar/baz": "😀- -foo/bar/baz", + "foo\\\\bar": "😀- -foo\\\\bar", + "foo\\\\bar\\\\baz": "😀- -foo\\\\bar\\\\baz", + "f~o~o": "😀- -f~o~o", + "m_x_@": "😀- -m_x_@", + "someId": "😀- -someId", + "subClass": "😀- -subClass", + "test": "😀- -test", + "{}": "😀- -{}", + "©": "😀- -©", + "“‘’”": "😀- -“‘’”", + "⌘⌥": "😀- -⌘⌥", + "☺☃": "😀- -☺☃", + "♥": "😀- -♥", + "𝄞♪♩♫♬": "😀- -𝄞♪♩♫♬", + "💩": "😀- -💩", + "😍": "😀- -😍", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 18`] = ` +Object { + "#": "local-Ident-name.module--#--CUiuWNpacN", + "##": "local-Ident-name.module--##--CU4LyzXr4m", + "#.#.#": "local-Ident-name.module--#.#.#---k23lpEMg-", + "#fake-id": "local-Ident-name.module--#fake-id--aoLUns9FUw", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name.module--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--SjgB1SBFzx", + "-a-b-c-": "local-Ident-name.module---a-b-c---spF-wFF3ki", + "-a0-34a___f": "local-Ident-name.module---a0-34a___f--8SmkpM38MT", + ".": "local-Ident-name.module--.--TYgwrPPlce", + "123": "local-Ident-name.module--123--dRCMetfS4k", + "1a2b3c": "local-Ident-name.module--1a2b3c--27Ol2f1A5B", + ":)": "local-Ident-name.module--:)--8IGwE2kP5T", + ":\`(": "local-Ident-name.module--:\`(--XFoJZOBwb2", + ":hover": "local-Ident-name.module--:hover--gj5dKEVBLV", + ":hover:focus:active": "local-Ident-name.module--:hover:focus:active--MF6oOllQUU", + "<><<<>><>": "local-Ident-name.module--<><<<>><>--efv0wrKauZ", + "

": "local-Ident-name.module--

--VleHaJt0jW", + "?": "local-Ident-name.module--?--iQGuBSRyn5", + "@": "local-Ident-name.module--@--rXUc81UfOs", + "B&W?": "local-Ident-name.module--B&W?--2nDwDstWPk", + "[attr=value]": "local-Ident-name.module--[attr=value]--pVXs1yvO-c", + "_": "local-Ident-name.module--_--O587A_Y16h", + "_test": "local-Ident-name.module--_test--jkChnYaYBV", + "className": "local-Ident-name.module--className--HP09CfTnX1", + "f!o!o": "local-Ident-name.module--f!o!o--piVwcUXcCA", + "f'o'o": "local-Ident-name.module--f'o'o--_4GqKKgPVD", + "f*o*o": "local-Ident-name.module--f*o*o--i7809YiNmT", + "f+o+o": "local-Ident-name.module--f+o+o--22BN9FvSaj", + "f/o/o": "local-Ident-name.module--f/o/o--IfM4TmY7KJ", + "f\\\\o\\\\o": "local-Ident-name.module--f\\\\o\\\\o--smRz6NSna2", + "foo.bar": "local-Ident-name.module--foo.bar--ekmt08iOcx", + "foo/bar": "local-Ident-name.module--foo/bar--pmM_pDdiuz", + "foo/bar/baz": "local-Ident-name.module--foo/bar/baz--OHGMWfcvMx", + "foo\\\\bar": "local-Ident-name.module--foo\\\\bar--37QAOKIbi2", + "foo\\\\bar\\\\baz": "local-Ident-name.module--foo\\\\bar\\\\baz--zz8kivuxZ6", + "f~o~o": "local-Ident-name.module--f~o~o--zcYow3hnn9", + "m_x_@": "local-Ident-name.module--m_x_@--hTokNmWv2C", + "someId": "local-Ident-name.module--someId--MLaknB8z97", + "subClass": "local-Ident-name.module--subClass--4o6O5CPJI6", + "test": "local-Ident-name.module--test--6y2MZL2dRW", + "{}": "local-Ident-name.module--{}--KmrFboxFIk", + "©": "local-Ident-name.module--©--8qkLiWtfe0", + "“‘’”": "local-Ident-name.module--“‘’”--o0Ra2DG0ZC", + "⌘⌥": "local-Ident-name.module--⌘⌥--S6bOlCWVBp", + "☺☃": "local-Ident-name.module--☺☃--DnbMOfd6eV", + "♥": "local-Ident-name.module--♥--44uxusx5VU", + "𝄞♪♩♫♬": "local-Ident-name.module--𝄞♪♩♫♬--BSgrxZWBoa", + "💩": "local-Ident-name.module--💩--IYSuXUnVFH", + "😍": "local-Ident-name.module--😍--ZFvdqtu3qG", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 19`] = ` +Object { + "#": "local-Ident-name.module--#--H4xWOk", + "##": "local-Ident-name.module--##--qmWu4j", + "#.#.#": "local-Ident-name.module--#.#.#--jTAz29", + "#fake-id": "local-Ident-name.module--#fake-id--Tf_LXF", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name.module--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--G9OqS6", + "-a-b-c-": "local-Ident-name.module---a-b-c---baJWIK", + "-a0-34a___f": "local-Ident-name.module---a0-34a___f--j4G6AV", + ".": "local-Ident-name.module--.--v7SGE3", + "123": "local-Ident-name.module--123--FPfb_a", + "1a2b3c": "local-Ident-name.module--1a2b3c--Prq2-n", + ":)": "local-Ident-name.module--:)--stxQmr", + ":\`(": "local-Ident-name.module--:\`(--PKfNRg", + ":hover": "local-Ident-name.module--:hover--7J6Ovy", + ":hover:focus:active": "local-Ident-name.module--:hover:focus:active--N6KkcF", + "<><<<>><>": "local-Ident-name.module--<><<<>><>--bH0ZRJ", + "

": "local-Ident-name.module--

--Lzbt_f", + "?": "local-Ident-name.module--?--cFxilG", + "@": "local-Ident-name.module--@--RJiOrO", + "B&W?": "local-Ident-name.module--B&W?--Cx7Xfj", + "[attr=value]": "local-Ident-name.module--[attr=value]--_X7r6s", + "_": "local-Ident-name.module--_--jZA8cH", + "_test": "local-Ident-name.module--_test--IFXC8J", + "className": "local-Ident-name.module--className--Gf2qKu", + "f!o!o": "local-Ident-name.module--f!o!o--IQSVKY", + "f'o'o": "local-Ident-name.module--f'o'o--Jke6Ar", + "f*o*o": "local-Ident-name.module--f*o*o--US0RYV", + "f+o+o": "local-Ident-name.module--f+o+o--JZ_ZYM", + "f/o/o": "local-Ident-name.module--f/o/o--TnGHtD", + "f\\\\o\\\\o": "local-Ident-name.module--f\\\\o\\\\o--zZG-0O", + "foo.bar": "local-Ident-name.module--foo.bar--_-hir3", + "foo/bar": "local-Ident-name.module--foo/bar--LMZK6C", + "foo/bar/baz": "local-Ident-name.module--foo/bar/baz--44CiTQ", + "foo\\\\bar": "local-Ident-name.module--foo\\\\bar--qVBL0b", + "foo\\\\bar\\\\baz": "local-Ident-name.module--foo\\\\bar\\\\baz--aiT34M", + "f~o~o": "local-Ident-name.module--f~o~o--wi3S5B", + "m_x_@": "local-Ident-name.module--m_x_@--j3M2wy", + "someId": "local-Ident-name.module--someId--hSsSyu", + "subClass": "local-Ident-name.module--subClass--rJLSP7", + "test": "local-Ident-name.module--test--_SesvC", + "{}": "local-Ident-name.module--{}--rC8he6", + "©": "local-Ident-name.module--©--if7zkU", + "“‘’”": "local-Ident-name.module--“‘’”--zEDyfZ", + "⌘⌥": "local-Ident-name.module--⌘⌥--VM04KP", + "☺☃": "local-Ident-name.module--☺☃--DzDnMo", + "♥": "local-Ident-name.module--♥--Wquu8v", + "𝄞♪♩♫♬": "local-Ident-name.module--𝄞♪♩♫♬--qoKZGt", + "💩": "local-Ident-name.module--💩--Wmv5n7", + "😍": "local-Ident-name.module--😍--vXWvMf", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 20`] = ` +Object { + "#": "prefix-./local-Ident-name.module.css?local-ident-name-9---#---qicdNs-postfix", + "##": "prefix-./local-Ident-name.module.css?local-ident-name-9---##---7LLFg7-postfix", + "#.#.#": "prefix-./local-Ident-name.module.css?local-ident-name-9---#.#.#---tkYIvY-postfix", + "#fake-id": "prefix-./local-Ident-name.module.css?local-ident-name-9---#fake-id---0ySTTy-postfix", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "prefix-./local-Ident-name.module.css?local-ident-name-9---++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.---I2RCq8-postfix", + "-a-b-c-": "prefix-./local-Ident-name.module.css?local-ident-name-9----a-b-c----hDXrIM-postfix", + "-a0-34a___f": "prefix-./local-Ident-name.module.css?local-ident-name-9----a0-34a___f---VQNZfx-postfix", + ".": "prefix-./local-Ident-name.module.css?local-ident-name-9---.---XxpCFm-postfix", + "123": "prefix-./local-Ident-name.module.css?local-ident-name-9---123---29k572-postfix", + "1a2b3c": "prefix-./local-Ident-name.module.css?local-ident-name-9---1a2b3c---8RwOZv-postfix", + ":)": "prefix-./local-Ident-name.module.css?local-ident-name-9---:)---tpNOM_-postfix", + ":\`(": "prefix-./local-Ident-name.module.css?local-ident-name-9---:\`(---w0y-3T-postfix", + ":hover": "prefix-./local-Ident-name.module.css?local-ident-name-9---:hover---p-SVOd-postfix", + ":hover:focus:active": "prefix-./local-Ident-name.module.css?local-ident-name-9---:hover:focus:active---7ppzcn-postfix", + "<><<<>><>": "prefix-./local-Ident-name.module.css?local-ident-name-9---<><<<>><>---DV-Ytr-postfix", + "

": "prefix-./local-Ident-name.module.css?local-ident-name-9---

---T4r2DZ-postfix", + "?": "prefix-./local-Ident-name.module.css?local-ident-name-9---?---8rRplk-postfix", + "@": "prefix-./local-Ident-name.module.css?local-ident-name-9---@---LKRCz--postfix", + "B&W?": "prefix-./local-Ident-name.module.css?local-ident-name-9---B&W?---pAfmJZ-postfix", + "[attr=value]": "prefix-./local-Ident-name.module.css?local-ident-name-9---[attr=value]---uMrr4n-postfix", + "_": "prefix-./local-Ident-name.module.css?local-ident-name-9---_---UdFsE6-postfix", + "_test": "prefix-./local-Ident-name.module.css?local-ident-name-9---_test---RdGpUF-postfix", + "className": "prefix-./local-Ident-name.module.css?local-ident-name-9---className---Rbuqv6-postfix", + "f!o!o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f!o!o---XqT8S3-postfix", + "f'o'o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f'o'o---BxXL6g-postfix", + "f*o*o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f*o*o---fF4DcX-postfix", + "f+o+o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f+o+o---F93mpm-postfix", + "f/o/o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f/o/o---kXNiKY-postfix", + "f\\\\o\\\\o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f\\\\o\\\\o---fLLGuT-postfix", + "foo.bar": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo.bar---d2rdEE-postfix", + "foo/bar": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo/bar---uZ8i8d-postfix", + "foo/bar/baz": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo/bar/baz---zWw2aH-postfix", + "foo\\\\bar": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo\\\\bar---pozdkJ-postfix", + "foo\\\\bar\\\\baz": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo\\\\bar\\\\baz---C9LnZz-postfix", + "f~o~o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f~o~o---SPRjm3-postfix", + "m_x_@": "prefix-./local-Ident-name.module.css?local-ident-name-9---m_x_@---0FTqJc-postfix", + "someId": "prefix-./local-Ident-name.module.css?local-ident-name-9---someId---rz34Z--postfix", + "subClass": "prefix-./local-Ident-name.module.css?local-ident-name-9---subClass---KZbh3P-postfix", + "test": "prefix-./local-Ident-name.module.css?local-ident-name-9---test---PboabM-postfix", + "{}": "prefix-./local-Ident-name.module.css?local-ident-name-9---{}---cEk0mR-postfix", + "©": "prefix-./local-Ident-name.module.css?local-ident-name-9---©---l15bLc-postfix", + "“‘’”": "prefix-./local-Ident-name.module.css?local-ident-name-9---“‘’”---Jk8q45-postfix", + "⌘⌥": "prefix-./local-Ident-name.module.css?local-ident-name-9---⌘⌥---WgMb99-postfix", + "☺☃": "prefix-./local-Ident-name.module.css?local-ident-name-9---☺☃---PSP-1Q-postfix", + "♥": "prefix-./local-Ident-name.module.css?local-ident-name-9---♥---J7fhlX-postfix", + "𝄞♪♩♫♬": "prefix-./local-Ident-name.module.css?local-ident-name-9---𝄞♪♩♫♬---a1kviT-postfix", + "💩": "prefix-./local-Ident-name.module.css?local-ident-name-9---💩---Y7HlBo-postfix", + "😍": "prefix-./local-Ident-name.module.css?local-ident-name-9---😍---JD7n4W-postfix", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 21`] = ` +Object { + "simple": "order_module_css-simple order-1_css-order-1 order-2_css-order-2 order-1_css-order-1-1 order-2_css-order-2-2", + "simple-other": "order_module_css-simple-other order-1_css-order-1", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 22`] = ` +Object { + "backButton": "dedup_module_css-backButton secondary-button_css-secondaryButton button_css-button", + "nextButton": "dedup_module_css-nextButton primary-button_css-primaryButton button_css-button", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 23`] = ` +Object { + "bar": "composes-from-less_module_css-bar foo_less-foo", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 24`] = ` +Object { + "bar": "#fff", + "className": "tilde_module_css-className", + "foo": "#000", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 25`] = ` +Object { + "_test": "_right_value", + "_test1": "1", + "_test2": "'string'", + "_test3": "1px 2px 3px", + "_test4": "1px 2px 3px, 1px 2px 3px", + "_test_other": "_right_value", + "_the_same_name": "_the_same_name", + "className": "icss_module_css-className", + "constructor": "constructor", + "reexport": "classes_module_css_884d-module", + "toString": "toString", +} +`; + +exports[`ConfigCacheTestCases css css-loader exported tests should work 26`] = ` +Array [ + "/*!******************************!*\\\\ + !*** css ./basic.module.css ***! + \\\\******************************/ +.basic_module_css-class-1, .basic_module_css-class-10 .basic_module_css-bar-1 { + color: green; +} + + +@keyframes basic_module_css-slide-right { + 0% { + transform: translateX(-100%); + opacity: 0; + } + 100% { + transform: translateX(0); + opacity: 1; + } +} + +a { + animation: basic_module_css-slide-right 300ms forwards ease-out, basic_module_css-fade-in 300ms forwards ease-out; +} + +.basic_module_css-c1/*.c2*/.basic_module_css-c3 { background: red; } + +.basic_module_css-c1 { a: 1; } +.basic_module_css-c2 { b: 1; } + +.basic_module_css-a { + color: green; +} + +@keyframes basic_module_css-bounce { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 5% { + transform: translateY(-100%); + opacity: 0; + } +} + +@-webkit-keyframes basic_module_css-bounce2 { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 5% { + transform: translateY(-100%); + opacity: 0; + } +} + +.basic_module_css-bounce { + animation-name: basic_module_css-bounce; + animation: basic_module_css-bounce2 1s ease; +} + +.basic_module_css-bounce2 { + color: green; + animation: basic_module_css-bounce 1s ease; + animation-name: basic_module_css-bounce2; +} + +.basic_module_css-bounce3 { + animation: basic_module_css-bounce 1s ease, basic_module_css-bounce2 +} + +.basic_module_css-bounce4 { + animation: basic_module_css-bounce 1s ease, basic_module_css-bounce2; +} + +.basic_module_css-b { + color: green; +} + +@-webkit-keyframes basic_module_css-\\\\@bounce { + 0%, 100% { + transform: translateY(-25%); + -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +@keyframes basic_module_css-\\\\@bounce { + 0%, 100% { + transform: translateY(-25%); + -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +.basic_module_css-container { + -webkit-animation: basic_module_css-\\\\@bounce 1s infinite; + animation: basic_module_css-\\\\@bounce 1s infinite; +} + +.basic_module_css-abc .basic_module_css-def { + color: red; +} + +.basic_module_css-ghi .basic_module_css-jkl { + color: blue; +} + +.basic_module_css-className { background: red; } +#basic_module_css-someId { background: green; } +.basic_module_css-className .basic_module_css-subClass { color: green; } +#basic_module_css-someId .basic_module_css-subClass { color: blue; } + +.basic_module_css-abc { + color: red; +} +.basic_module_css-def { + background: green; +} + +.basic_module_css-c1[data-attr=\\".c2)]'\\"]:not(.basic_module_css-c3):not(.basic_module_css-c4) { + background: red; +} + +.basic_module_css-c1 .basic_module_css-c2 .basic_module_css-c3 .c4 .basic_module_css-c5, .basic_module_css-c6 .basic_module_css-c7 { background: red; } +.basic_module_css-c8 { background: red; } + +.basic_module_css-a .basic_module_css-b, .basic_module_css-c .basic_module_css-d, #basic_module_css-id { + color: green; + font-size: 1.5pt; +} +a[href=\\"#b.c\\"].basic_module_css-x.basic_module_css-y { + color: green; + font-size: 1.5pt; +} +@keyframes basic_module_css-q { + 2.5% {color: green;} +} + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ +/* Tests from css-loader */ + +/* should work with the \`default\` class and with named export */ +.classes_module_css_0c83-default { + background: red +} + + +/* should work with the \`module\` class and with named export */ +.classes_module_css_0c83-module { + background: red +} + +/*!***********************!*\\\\ + !*** css ./alias.css ***! + \\\\***********************/ +.alias_css-imported-alias { + display: table; +} + +/*!*************************!*\\\\ + !*** css ./alias-1.css ***! + \\\\*************************/ +.alias-1_css-imported-alias-2 { + background: red; +} + +.alias-1_css-imported-alias-3 { + background: red; +} + +/*!******************************************!*\\\\ + !*** css ./composes-multiple.module.css ***! + \\\\******************************************/ +.composes-multiple_module_css-other-class { + color: red; +} + +.composes-multiple_module_css-class-1 { + color: blue; +} + +.composes-multiple_module_css-class-2 { + color: blue; +} + +.global-class { + padding: 10px; +} + +.global-class-1 { + padding: 10px; +} + +.global-class-2 { + padding: 10px; +} + +.composes-multiple_module_css-class { + color: gainsboro; +} + +.composes-multiple_module_css-class-other { + } + + +/*!****************************************!*\\\\ + !*** css ./composes-global.module.css ***! + \\\\****************************************/ +.global-class { + color: red; +} + +.other-global-class { + color: red; +} + +.composes-global_module_css-otherClassName { + color: blue; +} + +/*!**************************************!*\\\\ + !*** css ./scope-at-rule.module.css ***! + \\\\**************************************/ +@scope (.scope-at-rule_module_css-light-scheme) { + :scope { + background-color: plum; + } + + .scope-at-rule_module_css-class-a { + color: darkmagenta; + } +} + +@scope (.scope-at-rule_module_css-dark-scheme) { + :scope { + background-color: darkmagenta; + color: antiquewhite; + } + + .scope-at-rule_module_css-class-b { + color: plum; + } +} + +@scope { + :scope { + color: red; + } +} + +/*!********************************!*\\\\ + !*** css ./nesting.module.css ***! + \\\\********************************/ +.nesting_module_css-notice { + width: 90%; + justify-content: center; + border-radius: 1rem; + border: black solid 2px; + background-color: #ffc107; + color: black; + padding: 1rem; + + .nesting_module_css-notice-heading:before { + /* equivalent to \`.notice .notice-heading:before\` */ + content: \\"ℹ︎ \\"; + } + + &.nesting_module_css-warning { + /* equivalent to \`.notice.warning\` */ + background-color: #d81b60; + border-color: #d81b60; + color: white; + .nesting_module_css-warning-heading:before { + /* equivalent to \`.notice.warning .warning-heading:before\` */ + content: \\"! \\"; + } + } + + &.nesting_module_css-success { + /* equivalent to \`.notice.success\` */ + background-color: #004d40; + border-color: #004d40; + color: white; + + .nesting_module_css-success-heading:before { + /* equivalent to \`.notice.success .success-heading:before\` */ + content: \\"✓ \\"; + } + } +} + +.nesting_module_css-foo { + color: red; +} + +.nesting_module_css-bar { + &.nesting_module_css-baz { + color: blue; + } +} + +.nesting_module_css-foo { + display: grid; + + @media (orientation: landscape) { + & { + grid-auto-flow: column; + } + } +} + +@media (orientation: landscape) { + .nesting_module_css-a { + color: red; + } +} + +@media (orientation: landscape) { + @media (orientation: landscape) { + .nesting_module_css-b { + color: red; + } + } +} + +.nesting_module_css-n { + @media (orientation: landscape) { + color: red; + } +} + +/*!*****************************!*\\\\ + !*** css ./package/one.css ***! + \\\\*****************************/ +.package_one_css-imported-relative { + display: block; +} + +/*!******************************************!*\\\\ + !*** css ./node_modules/package/two.css ***! + \\\\******************************************/ +.node_modules_package_two_css-imported-relative { + display: inline; +} + +/*!****************************************!*\\\\ + !*** css ./prefer-relative.module.css ***! + \\\\****************************************/ +.prefer-relative_module_css-one { + color: yellow; + } + +.prefer-relative_module_css-two { + color: yellow; + } + +/*!***************************************!*\\\\ + !*** css ./animation-name.module.css ***! + \\\\***************************************/ +.animation-name_module_css-a { + animation: 3s animation-name_module_css-animationName; +} + +.animation-name_module_css-b { + animation: animation-name_module_css-animationName 3s; +} + +.animation-name_module_css-c { + animation-name: animation-name_module_css-animationName; +} + +@keyframes animation-name_module_css-animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +/*!********************************************************!*\\\\ + !*** css ./node_modules/@foo/package/style.module.css ***! + \\\\********************************************************/ +.node_modules_\\\\@foo_package_style_module_css-class { + color: red; +} + +/*!*******************************************************!*\\\\ + !*** css ./node_modules/foo/package/style.module.css ***! + \\\\*******************************************************/ +.node_modules_foo_package_style_module_css-class { + color: red; +} + +/*!************************************************!*\\\\ + !*** css ./at-sign-in-package-name.module.css ***! + \\\\************************************************/ + +.at-sign-in-package-name_module_css-myClass { + color: red; +} + +/*!**************************************************!*\\\\ + !*** css ./node_modules/@localpackage/color.css ***! + \\\\**************************************************/ + + +/*!*******************************************************!*\\\\ + !*** css ./node_modules/@otherlocalpackage/style.css ***! + \\\\*******************************************************/ +.node_modules_\\\\@otherlocalpackage_style_css-type-heading2 { + display: flex; +} + +/*!**************************************************!*\\\\ + !*** css ./node_modules/@localpackage/style.css ***! + \\\\**************************************************/ +.node_modules_\\\\@localpackage_style_css-type-heading { + color: red; + margin: 0; + padding: 0; +} + +/*!****************************************************!*\\\\ + !*** css ./resolving-from-node_modules.module.css ***! + \\\\****************************************************/ + + +.resolving-from-node_modules_module_css-copyright { + color: gray; + margin: 0; + padding: 0; +} + +/*!*****************************************!*\\\\ + !*** css ./local-Ident-name.module.css ***! + \\\\*****************************************/ +.local-Ident-name_module_css-test { + background: red; +} + +.local-Ident-name_module_css-_test { + background: blue; +} + +.local-Ident-name_module_css-className { + background: red; +} + +#local-Ident-name_module_css-someId { + background: green; +} + +.local-Ident-name_module_css-className .local-Ident-name_module_css-subClass { + color: green; +} + +#local-Ident-name_module_css-someId .local-Ident-name_module_css-subClass { + color: blue; +} + +.local-Ident-name_module_css--a0-34a___f { + color: red; +} + +.local-Ident-name_module_css-m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name_module_css-B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name_module_css-\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name_module_css-1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name_module_css-\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name_module_css--a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name_module_css-© { + color: black; +} + +.local-Ident-name_module_css-♥ { background: lime; } +.local-Ident-name_module_css-© { background: lime; } +.local-Ident-name_module_css-😍 { background: lime; } +.local-Ident-name_module_css-“‘’” { background: lime; } +.local-Ident-name_module_css-☺☃ { background: lime; } +.local-Ident-name_module_css-⌘⌥ { background: lime; } +.local-Ident-name_module_css-𝄞♪♩♫♬ { background: lime; } +.local-Ident-name_module_css-💩 { background: lime; } +.local-Ident-name_module_css-\\\\? { background: lime; } +.local-Ident-name_module_css-\\\\@ { background: lime; } +.local-Ident-name_module_css-\\\\. { background: lime; } +.local-Ident-name_module_css-\\\\:\\\\) { background: lime; } +.local-Ident-name_module_css-\\\\:\\\\\`\\\\( { background: lime; } +.local-Ident-name_module_css-123 { background: lime; } +.local-Ident-name_module_css-1a2b3c { background: lime; } +.local-Ident-name_module_css-\\\\ { background: lime; } +.local-Ident-name_module_css-\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.local-Ident-name_module_css-\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.local-Ident-name_module_css-\\\\# { background: lime; } +.local-Ident-name_module_css-\\\\#\\\\# { background: lime; } +.local-Ident-name_module_css-\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.local-Ident-name_module_css-_ { background: lime; } +.local-Ident-name_module_css-\\\\{\\\\} { background: lime; } +.local-Ident-name_module_css-\\\\#fake-id { background: lime; } +.local-Ident-name_module_css-foo\\\\.bar { background: lime; } +.local-Ident-name_module_css-\\\\:hover { background: lime; } +.local-Ident-name_module_css-\\\\:hover\\\\:focus\\\\:active { background: lime; } +.local-Ident-name_module_css-\\\\[attr\\\\=value\\\\] { background: lime; } +.local-Ident-name_module_css-f\\\\/o\\\\/o { background: lime; } +.local-Ident-name_module_css-f\\\\\\\\o\\\\\\\\o { background: lime; } +.local-Ident-name_module_css-f\\\\*o\\\\*o { background: lime; } +.local-Ident-name_module_css-f\\\\!o\\\\!o { background: lime; } +.local-Ident-name_module_css-f\\\\'o\\\\'o { background: lime; } +.local-Ident-name_module_css-f\\\\~o\\\\~o { background: lime; } +.local-Ident-name_module_css-f\\\\+o\\\\+o { background: lime; } + +.local-Ident-name_module_css-foo\\\\/bar { + background: hotpink; +} + +.local-Ident-name_module_css-foo\\\\\\\\bar { + background: hotpink; +} + +.local-Ident-name_module_css-foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.local-Ident-name_module_css-foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-1 ***! + \\\\************************************************************/ +.local-Ident-name\\\\.module--test--n138O { + background: red; +} + +.local-Ident-name\\\\.module--_test--c_lQ7 { + background: blue; +} + +.local-Ident-name\\\\.module--className--QdX5M { + background: red; +} + +#local-Ident-name\\\\.module--someId--fs0tG { + background: green; +} + +.local-Ident-name\\\\.module--className--QdX5M .local-Ident-name\\\\.module--subClass--EEiow { + color: green; +} + +#local-Ident-name\\\\.module--someId--fs0tG .local-Ident-name\\\\.module--subClass--EEiow { + color: blue; +} + +.local-Ident-name\\\\.module---a0-34a___f--rWQCS { + color: red; +} + +.local-Ident-name\\\\.module--m_x_\\\\@--wXBtR { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name\\\\.module--B\\\\&W\\\\?--9Uv5j { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--YZqyU { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name\\\\.module--1a2b3c--xSd9R { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name\\\\.module--\\\\#fake-id--stuV6 { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name\\\\.module---a-b-c---BVuZu { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name\\\\.module--©--ABrkO { + color: black; +} + +.local-Ident-name\\\\.module--♥--zQEWH { background: lime; } +.local-Ident-name\\\\.module--©--ABrkO { background: lime; } +.local-Ident-name\\\\.module--😍--rYTiW { background: lime; } +.local-Ident-name\\\\.module--“‘’”--Viviw { background: lime; } +.local-Ident-name\\\\.module--☺☃--_YUxr { background: lime; } +.local-Ident-name\\\\.module--⌘⌥--tU2QX { background: lime; } +.local-Ident-name\\\\.module--𝄞♪♩♫♬--16ySy { background: lime; } +.local-Ident-name\\\\.module--💩--fhsK2 { background: lime; } +.local-Ident-name\\\\.module--\\\\?--tcA6P { background: lime; } +.local-Ident-name\\\\.module--\\\\@--IjjsD { background: lime; } +.local-Ident-name\\\\.module--\\\\.--Bix0N { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\)--kXjo5 { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--YZqyU { background: lime; } +.local-Ident-name\\\\.module--123--PvTN4 { background: lime; } +.local-Ident-name\\\\.module--1a2b3c--xSd9R { background: lime; } +.local-Ident-name\\\\.module--\\\\--RCYv0 { background: lime; } +.local-Ident-name\\\\.module--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--q0Tti { background: lime; } +.local-Ident-name\\\\.module--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--GNmAU { background: lime; } +.local-Ident-name\\\\.module--\\\\#--0fms6 { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\#--4MjQ_ { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\.\\\\#\\\\.\\\\#--4Z5kr { background: lime; } +.local-Ident-name\\\\.module--_--wWsEV { background: lime; } +.local-Ident-name\\\\.module--\\\\{\\\\}--yOiSk { background: lime; } +.local-Ident-name\\\\.module--\\\\#fake-id--stuV6 { background: lime; } +.local-Ident-name\\\\.module--foo\\\\.bar--EDSRu { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover--QXnD_ { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover\\\\:focus\\\\:active--0eQHC { background: lime; } +.local-Ident-name\\\\.module--\\\\[attr\\\\=value\\\\]--bHMhi { background: lime; } +.local-Ident-name\\\\.module--f\\\\/o\\\\/o--gpPiW { background: lime; } +.local-Ident-name\\\\.module--f\\\\\\\\o\\\\\\\\o--gu2u7 { background: lime; } +.local-Ident-name\\\\.module--f\\\\*o\\\\*o--1OZxX { background: lime; } +.local-Ident-name\\\\.module--f\\\\!o\\\\!o--U5evv { background: lime; } +.local-Ident-name\\\\.module--f\\\\'o\\\\'o--5azUC { background: lime; } +.local-Ident-name\\\\.module--f\\\\~o\\\\~o--6JU27 { background: lime; } +.local-Ident-name\\\\.module--f\\\\+o\\\\+o--r42Md { background: lime; } + +.local-Ident-name\\\\.module--foo\\\\/bar--ARBA4 { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar--vSOik { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\/bar\\\\/baz--p2TDV { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar\\\\\\\\baz--FlFA- { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-2 ***! + \\\\************************************************************/ +._-1test { + background: red; +} + +._-1_test { + background: blue; +} + +._-1className { + background: red; +} + +#_-1someId { + background: green; +} + +._-1className ._-1subClass { + color: green; +} + +#_-1someId ._-1subClass { + color: blue; +} + +._-1-a0-34a___f { + color: red; +} + +._-1m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +._-1B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +._-1\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +._-11a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#_-1\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#_-1-a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#_-1© { + color: black; +} + +._-1♥ { background: lime; } +._-1© { background: lime; } +._-1😍 { background: lime; } +._-1“‘’” { background: lime; } +._-1☺☃ { background: lime; } +._-1⌘⌥ { background: lime; } +._-1𝄞♪♩♫♬ { background: lime; } +._-1💩 { background: lime; } +._-1\\\\? { background: lime; } +._-1\\\\@ { background: lime; } +._-1\\\\. { background: lime; } +._-1\\\\:\\\\) { background: lime; } +._-1\\\\:\\\\\`\\\\( { background: lime; } +._-1123 { background: lime; } +._-11a2b3c { background: lime; } +._-1\\\\ { background: lime; } +._-1\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +._-1\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +._-1\\\\# { background: lime; } +._-1\\\\#\\\\# { background: lime; } +._-1\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +._-1_ { background: lime; } +._-1\\\\{\\\\} { background: lime; } +._-1\\\\#fake-id { background: lime; } +._-1foo\\\\.bar { background: lime; } +._-1\\\\:hover { background: lime; } +._-1\\\\:hover\\\\:focus\\\\:active { background: lime; } +._-1\\\\[attr\\\\=value\\\\] { background: lime; } +._-1f\\\\/o\\\\/o { background: lime; } +._-1f\\\\\\\\o\\\\\\\\o { background: lime; } +._-1f\\\\*o\\\\*o { background: lime; } +._-1f\\\\!o\\\\!o { background: lime; } +._-1f\\\\'o\\\\'o { background: lime; } +._-1f\\\\~o\\\\~o { background: lime; } +._-1f\\\\+o\\\\+o { background: lime; } + +._-1foo\\\\/bar { + background: hotpink; +} + +._-1foo\\\\\\\\bar { + background: hotpink; +} + +._-1foo\\\\/bar\\\\/baz { + background: hotpink; +} + +._-1foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-3 ***! + \\\\************************************************************/ +._--test { + background: red; +} + +._--_test { + background: blue; +} + +._--className { + background: red; +} + +#_--someId { + background: green; +} + +._--className ._--subClass { + color: green; +} + +#_--someId ._--subClass { + color: blue; +} + +._---a0-34a___f { + color: red; +} + +._--m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +._--B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +._--\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +._--1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#_--\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#_---a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#_--© { + color: black; +} + +._--♥ { background: lime; } +._--© { background: lime; } +._--😍 { background: lime; } +._--“‘’” { background: lime; } +._--☺☃ { background: lime; } +._--⌘⌥ { background: lime; } +._--𝄞♪♩♫♬ { background: lime; } +._--💩 { background: lime; } +._--\\\\? { background: lime; } +._--\\\\@ { background: lime; } +._--\\\\. { background: lime; } +._--\\\\:\\\\) { background: lime; } +._--\\\\:\\\\\`\\\\( { background: lime; } +._--123 { background: lime; } +._--1a2b3c { background: lime; } +._--\\\\ { background: lime; } +._--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +._--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +._--\\\\# { background: lime; } +._--\\\\#\\\\# { background: lime; } +._--\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +._--_ { background: lime; } +._--\\\\{\\\\} { background: lime; } +._--\\\\#fake-id { background: lime; } +._--foo\\\\.bar { background: lime; } +._--\\\\:hover { background: lime; } +._--\\\\:hover\\\\:focus\\\\:active { background: lime; } +._--\\\\[attr\\\\=value\\\\] { background: lime; } +._--f\\\\/o\\\\/o { background: lime; } +._--f\\\\\\\\o\\\\\\\\o { background: lime; } +._--f\\\\*o\\\\*o { background: lime; } +._--f\\\\!o\\\\!o { background: lime; } +._--f\\\\'o\\\\'o { background: lime; } +._--f\\\\~o\\\\~o { background: lime; } +._--f\\\\+o\\\\+o { background: lime; } + +._--foo\\\\/bar { + background: hotpink; +} + +._--foo\\\\\\\\bar { + background: hotpink; +} + +._--foo\\\\/bar\\\\/baz { + background: hotpink; +} + +._--foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-4 ***! + \\\\************************************************************/ +.__test { + background: red; +} + +.___test { + background: blue; +} + +.__className { + background: red; +} + +#__someId { + background: green; +} + +.__className .__subClass { + color: green; +} + +#__someId .__subClass { + color: blue; +} + +.__-a0-34a___f { + color: red; +} + +.__m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.__B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.__\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.__1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#__\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#__-a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#__© { + color: black; +} + +.__♥ { background: lime; } +.__© { background: lime; } +.__😍 { background: lime; } +.__“‘’” { background: lime; } +.__☺☃ { background: lime; } +.__⌘⌥ { background: lime; } +.__𝄞♪♩♫♬ { background: lime; } +.__💩 { background: lime; } +.__\\\\? { background: lime; } +.__\\\\@ { background: lime; } +.__\\\\. { background: lime; } +.__\\\\:\\\\) { background: lime; } +.__\\\\:\\\\\`\\\\( { background: lime; } +.__123 { background: lime; } +.__1a2b3c { background: lime; } +.__\\\\ { background: lime; } +.__\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.__\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.__\\\\# { background: lime; } +.__\\\\#\\\\# { background: lime; } +.__\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.___ { background: lime; } +.__\\\\{\\\\} { background: lime; } +.__\\\\#fake-id { background: lime; } +.__foo\\\\.bar { background: lime; } +.__\\\\:hover { background: lime; } +.__\\\\:hover\\\\:focus\\\\:active { background: lime; } +.__\\\\[attr\\\\=value\\\\] { background: lime; } +.__f\\\\/o\\\\/o { background: lime; } +.__f\\\\\\\\o\\\\\\\\o { background: lime; } +.__f\\\\*o\\\\*o { background: lime; } +.__f\\\\!o\\\\!o { background: lime; } +.__f\\\\'o\\\\'o { background: lime; } +.__f\\\\~o\\\\~o { background: lime; } +.__f\\\\+o\\\\+o { background: lime; } + +.__foo\\\\/bar { + background: hotpink; +} + +.__foo\\\\\\\\bar { + background: hotpink; +} + +.__foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.__foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-5 ***! + \\\\************************************************************/ +.test--mowWgR { + background: red; +} + +._test--Kfd_4M { + background: blue; +} + +.className--b9RUK8 { + background: red; +} + +#someId--TlAET9 { + background: green; +} + +.className--b9RUK8 .subClass--sglK-1 { + color: green; +} + +#someId--TlAET9 .subClass--sglK-1 { + color: blue; +} + +.-a0-34a___f--OWXZy- { + color: red; +} + +.m_x_\\\\@--kG1v1e { + margin-left: auto !important; + margin-right: auto !important; +} + +.B\\\\&W\\\\?--D7HZ-H { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.\\\\:\\\\\`\\\\(--hgmvDX { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +._1a2b3c--AMCMZb { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#\\\\#fake-id--ez7Dik { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#-a-b-c---jfQ3Qn { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#©--sWiP9l { + color: black; +} + +.♥--e6nEYm { background: lime; } +.©--sWiP9l { background: lime; } +.😍--rPyRbM { background: lime; } +.“‘’”--M3gyy- { background: lime; } +.☺☃--pbZo-2 { background: lime; } +.⌘⌥--oDuNAW { background: lime; } +.𝄞♪♩♫♬--vrTCd6 { background: lime; } +.💩--1Txu-k { background: lime; } +.\\\\?--9Y6SkK { background: lime; } +.\\\\@--Sc9iGx { background: lime; } +.\\\\.--ZtQPX0 { background: lime; } +.\\\\:\\\\)--u1ngqY { background: lime; } +.\\\\:\\\\\`\\\\(--hgmvDX { background: lime; } +._123--j0sSmE { background: lime; } +._1a2b3c--AMCMZb { background: lime; } +.\\\\--MHaC0- { background: lime; } +.\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--8jXRVC { background: lime; } +.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--OsAmD3 { background: lime; } +.\\\\#--tlFV0b { background: lime; } +.\\\\#\\\\#--7vA-7E { background: lime; } +.\\\\#\\\\.\\\\#\\\\.\\\\#--1Hd875 { background: lime; } +._--NFJ6vs { background: lime; } +.\\\\{\\\\}--Tr49RL { background: lime; } +.\\\\#fake-id--ez7Dik { background: lime; } +.foo\\\\.bar--pYS5El { background: lime; } +.\\\\:hover--8XNA4p { background: lime; } +.\\\\:hover\\\\:focus\\\\:active--EpwJWE { background: lime; } +.\\\\[attr\\\\=value\\\\]--ZTV_uO { background: lime; } +.f\\\\/o\\\\/o--3vNZZM { background: lime; } +.f\\\\\\\\o\\\\\\\\o--wNzTj3 { background: lime; } +.f\\\\*o\\\\*o--kom_Jq { background: lime; } +.f\\\\!o\\\\!o--QQGZu2 { background: lime; } +.f\\\\'o\\\\'o--00bSFC { background: lime; } +.f\\\\~o\\\\~o--26zzb- { background: lime; } +.f\\\\+o\\\\+o--J4WAkM { background: lime; } + +.foo\\\\/bar--9GWp9d { + background: hotpink; +} + +.foo\\\\\\\\bar--CCzsTj { + background: hotpink; +} + +.foo\\\\/bar\\\\/baz--MRJglc { + background: hotpink; +} + +.foo\\\\\\\\bar\\\\\\\\baz--nRgTR7 { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-6 ***! + \\\\************************************************************/ +.😀-\\\\ -test { + background: red; +} + +.😀-\\\\ -_test { + background: blue; +} + +.😀-\\\\ -className { + background: red; +} + +#😀-\\\\ -someId { + background: green; +} + +.😀-\\\\ -className .😀-\\\\ -subClass { + color: green; +} + +#😀-\\\\ -someId .😀-\\\\ -subClass { + color: blue; +} + +.😀-\\\\ --a0-34a___f { + color: red; +} + +.😀-\\\\ -m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.😀-\\\\ -B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.😀-\\\\ -\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.😀-\\\\ -1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#😀-\\\\ -\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#😀-\\\\ --a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#😀-\\\\ -© { + color: black; +} + +.😀-\\\\ -♥ { background: lime; } +.😀-\\\\ -© { background: lime; } +.😀-\\\\ -😍 { background: lime; } +.😀-\\\\ -“‘’” { background: lime; } +.😀-\\\\ -☺☃ { background: lime; } +.😀-\\\\ -⌘⌥ { background: lime; } +.😀-\\\\ -𝄞♪♩♫♬ { background: lime; } +.😀-\\\\ -💩 { background: lime; } +.😀-\\\\ -\\\\? { background: lime; } +.😀-\\\\ -\\\\@ { background: lime; } +.😀-\\\\ -\\\\. { background: lime; } +.😀-\\\\ -\\\\:\\\\) { background: lime; } +.😀-\\\\ -\\\\:\\\\\`\\\\( { background: lime; } +.😀-\\\\ -123 { background: lime; } +.😀-\\\\ -1a2b3c { background: lime; } +.😀-\\\\ -\\\\ { background: lime; } +.😀-\\\\ -\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.😀-\\\\ -\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.😀-\\\\ -\\\\# { background: lime; } +.😀-\\\\ -\\\\#\\\\# { background: lime; } +.😀-\\\\ -\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.😀-\\\\ -_ { background: lime; } +.😀-\\\\ -\\\\{\\\\} { background: lime; } +.😀-\\\\ -\\\\#fake-id { background: lime; } +.😀-\\\\ -foo\\\\.bar { background: lime; } +.😀-\\\\ -\\\\:hover { background: lime; } +.😀-\\\\ -\\\\:hover\\\\:focus\\\\:active { background: lime; } +.😀-\\\\ -\\\\[attr\\\\=value\\\\] { background: lime; } +.😀-\\\\ -f\\\\/o\\\\/o { background: lime; } +.😀-\\\\ -f\\\\\\\\o\\\\\\\\o { background: lime; } +.😀-\\\\ -f\\\\*o\\\\*o { background: lime; } +.😀-\\\\ -f\\\\!o\\\\!o { background: lime; } +.😀-\\\\ -f\\\\'o\\\\'o { background: lime; } +.😀-\\\\ -f\\\\~o\\\\~o { background: lime; } +.😀-\\\\ -f\\\\+o\\\\+o { background: lime; } + +.😀-\\\\ -foo\\\\/bar { + background: hotpink; +} + +.😀-\\\\ -foo\\\\\\\\bar { + background: hotpink; +} + +.😀-\\\\ -foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.😀-\\\\ -foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-7 ***! + \\\\************************************************************/ +.local-Ident-name\\\\.module--test--6y2MZL2dRW { + background: red; +} + +.local-Ident-name\\\\.module--_test--jkChnYaYBV { + background: blue; +} + +.local-Ident-name\\\\.module--className--HP09CfTnX1 { + background: red; +} + +#local-Ident-name\\\\.module--someId--MLaknB8z97 { + background: green; +} + +.local-Ident-name\\\\.module--className--HP09CfTnX1 .local-Ident-name\\\\.module--subClass--4o6O5CPJI6 { + color: green; +} + +#local-Ident-name\\\\.module--someId--MLaknB8z97 .local-Ident-name\\\\.module--subClass--4o6O5CPJI6 { + color: blue; +} + +.local-Ident-name\\\\.module---a0-34a___f--8SmkpM38MT { + color: red; +} + +.local-Ident-name\\\\.module--m_x_\\\\@--hTokNmWv2C { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name\\\\.module--B\\\\&W\\\\?--2nDwDstWPk { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--XFoJZOBwb2 { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name\\\\.module--1a2b3c--27Ol2f1A5B { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name\\\\.module--\\\\#fake-id--aoLUns9FUw { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name\\\\.module---a-b-c---spF-wFF3ki { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name\\\\.module--©--8qkLiWtfe0 { + color: black; +} + +.local-Ident-name\\\\.module--♥--44uxusx5VU { background: lime; } +.local-Ident-name\\\\.module--©--8qkLiWtfe0 { background: lime; } +.local-Ident-name\\\\.module--😍--ZFvdqtu3qG { background: lime; } +.local-Ident-name\\\\.module--“‘’”--o0Ra2DG0ZC { background: lime; } +.local-Ident-name\\\\.module--☺☃--DnbMOfd6eV { background: lime; } +.local-Ident-name\\\\.module--⌘⌥--S6bOlCWVBp { background: lime; } +.local-Ident-name\\\\.module--𝄞♪♩♫♬--BSgrxZWBoa { background: lime; } +.local-Ident-name\\\\.module--💩--IYSuXUnVFH { background: lime; } +.local-Ident-name\\\\.module--\\\\?--iQGuBSRyn5 { background: lime; } +.local-Ident-name\\\\.module--\\\\@--rXUc81UfOs { background: lime; } +.local-Ident-name\\\\.module--\\\\.--TYgwrPPlce { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\)--8IGwE2kP5T { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--XFoJZOBwb2 { background: lime; } +.local-Ident-name\\\\.module--123--dRCMetfS4k { background: lime; } +.local-Ident-name\\\\.module--1a2b3c--27Ol2f1A5B { background: lime; } +.local-Ident-name\\\\.module--\\\\--VleHaJt0jW { background: lime; } +.local-Ident-name\\\\.module--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--efv0wrKauZ { background: lime; } +.local-Ident-name\\\\.module--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--SjgB1SBFzx { background: lime; } +.local-Ident-name\\\\.module--\\\\#--CUiuWNpacN { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\#--CU4LyzXr4m { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\.\\\\#\\\\.\\\\#---k23lpEMg- { background: lime; } +.local-Ident-name\\\\.module--_--O587A_Y16h { background: lime; } +.local-Ident-name\\\\.module--\\\\{\\\\}--KmrFboxFIk { background: lime; } +.local-Ident-name\\\\.module--\\\\#fake-id--aoLUns9FUw { background: lime; } +.local-Ident-name\\\\.module--foo\\\\.bar--ekmt08iOcx { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover--gj5dKEVBLV { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover\\\\:focus\\\\:active--MF6oOllQUU { background: lime; } +.local-Ident-name\\\\.module--\\\\[attr\\\\=value\\\\]--pVXs1yvO-c { background: lime; } +.local-Ident-name\\\\.module--f\\\\/o\\\\/o--IfM4TmY7KJ { background: lime; } +.local-Ident-name\\\\.module--f\\\\\\\\o\\\\\\\\o--smRz6NSna2 { background: lime; } +.local-Ident-name\\\\.module--f\\\\*o\\\\*o--i7809YiNmT { background: lime; } +.local-Ident-name\\\\.module--f\\\\!o\\\\!o--piVwcUXcCA { background: lime; } +.local-Ident-name\\\\.module--f\\\\'o\\\\'o--_4GqKKgPVD { background: lime; } +.local-Ident-name\\\\.module--f\\\\~o\\\\~o--zcYow3hnn9 { background: lime; } +.local-Ident-name\\\\.module--f\\\\+o\\\\+o--22BN9FvSaj { background: lime; } + +.local-Ident-name\\\\.module--foo\\\\/bar--pmM_pDdiuz { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar--37QAOKIbi2 { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\/bar\\\\/baz--OHGMWfcvMx { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar\\\\\\\\baz--zz8kivuxZ6 { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-8 ***! + \\\\************************************************************/ +.local-Ident-name\\\\.module--test--_SesvC { + background: red; +} + +.local-Ident-name\\\\.module--_test--IFXC8J { + background: blue; +} + +.local-Ident-name\\\\.module--className--Gf2qKu { + background: red; +} + +#local-Ident-name\\\\.module--someId--hSsSyu { + background: green; +} + +.local-Ident-name\\\\.module--className--Gf2qKu .local-Ident-name\\\\.module--subClass--rJLSP7 { + color: green; +} + +#local-Ident-name\\\\.module--someId--hSsSyu .local-Ident-name\\\\.module--subClass--rJLSP7 { + color: blue; +} + +.local-Ident-name\\\\.module---a0-34a___f--j4G6AV { + color: red; +} + +.local-Ident-name\\\\.module--m_x_\\\\@--j3M2wy { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name\\\\.module--B\\\\&W\\\\?--Cx7Xfj { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--PKfNRg { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name\\\\.module--1a2b3c--Prq2-n { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name\\\\.module--\\\\#fake-id--Tf_LXF { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name\\\\.module---a-b-c---baJWIK { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name\\\\.module--©--if7zkU { + color: black; +} + +.local-Ident-name\\\\.module--♥--Wquu8v { background: lime; } +.local-Ident-name\\\\.module--©--if7zkU { background: lime; } +.local-Ident-name\\\\.module--😍--vXWvMf { background: lime; } +.local-Ident-name\\\\.module--“‘’”--zEDyfZ { background: lime; } +.local-Ident-name\\\\.module--☺☃--DzDnMo { background: lime; } +.local-Ident-name\\\\.module--⌘⌥--VM04KP { background: lime; } +.local-Ident-name\\\\.module--𝄞♪♩♫♬--qoKZGt { background: lime; } +.local-Ident-name\\\\.module--💩--Wmv5n7 { background: lime; } +.local-Ident-name\\\\.module--\\\\?--cFxilG { background: lime; } +.local-Ident-name\\\\.module--\\\\@--RJiOrO { background: lime; } +.local-Ident-name\\\\.module--\\\\.--v7SGE3 { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\)--stxQmr { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--PKfNRg { background: lime; } +.local-Ident-name\\\\.module--123--FPfb_a { background: lime; } +.local-Ident-name\\\\.module--1a2b3c--Prq2-n { background: lime; } +.local-Ident-name\\\\.module--\\\\--Lzbt_f { background: lime; } +.local-Ident-name\\\\.module--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--bH0ZRJ { background: lime; } +.local-Ident-name\\\\.module--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--G9OqS6 { background: lime; } +.local-Ident-name\\\\.module--\\\\#--H4xWOk { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\#--qmWu4j { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\.\\\\#\\\\.\\\\#--jTAz29 { background: lime; } +.local-Ident-name\\\\.module--_--jZA8cH { background: lime; } +.local-Ident-name\\\\.module--\\\\{\\\\}--rC8he6 { background: lime; } +.local-Ident-name\\\\.module--\\\\#fake-id--Tf_LXF { background: lime; } +.local-Ident-name\\\\.module--foo\\\\.bar--_-hir3 { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover--7J6Ovy { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover\\\\:focus\\\\:active--N6KkcF { background: lime; } +.local-Ident-name\\\\.module--\\\\[attr\\\\=value\\\\]--_X7r6s { background: lime; } +.local-Ident-name\\\\.module--f\\\\/o\\\\/o--TnGHtD { background: lime; } +.local-Ident-name\\\\.module--f\\\\\\\\o\\\\\\\\o--zZG-0O { background: lime; } +.local-Ident-name\\\\.module--f\\\\*o\\\\*o--US0RYV { background: lime; } +.local-Ident-name\\\\.module--f\\\\!o\\\\!o--IQSVKY { background: lime; } +.local-Ident-name\\\\.module--f\\\\'o\\\\'o--Jke6Ar { background: lime; } +.local-Ident-name\\\\.module--f\\\\~o\\\\~o--wi3S5B { background: lime; } +.local-Ident-name\\\\.module--f\\\\+o\\\\+o--JZ_ZYM { background: lime; } + +.local-Ident-name\\\\.module--foo\\\\/bar--LMZK6C { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar--qVBL0b { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\/bar\\\\/baz--44CiTQ { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar\\\\\\\\baz--aiT34M { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-9 ***! + \\\\************************************************************/ +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---test---PboabM-postfix { + background: red; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---_test---RdGpUF-postfix { + background: blue; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---className---Rbuqv6-postfix { + background: red; +} + +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---someId---rz34Z--postfix { + background: green; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---className---Rbuqv6-postfix .prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---subClass---KZbh3P-postfix { + color: green; +} + +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---someId---rz34Z--postfix .prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---subClass---KZbh3P-postfix { + color: blue; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9----a0-34a___f---VQNZfx-postfix { + color: red; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---m_x_\\\\@---0FTqJc-postfix { + margin-left: auto !important; + margin-right: auto !important; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---B\\\\&W\\\\?---pAfmJZ-postfix { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:\\\\\`\\\\(---w0y-3T-postfix { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---1a2b3c---8RwOZv-postfix { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#fake-id---0ySTTy-postfix { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9----a-b-c----hDXrIM-postfix { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---©---l15bLc-postfix { + color: black; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---♥---J7fhlX-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---©---l15bLc-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---😍---JD7n4W-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---“‘’”---Jk8q45-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---☺☃---PSP-1Q-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---⌘⌥---WgMb99-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---𝄞♪♩♫♬---a1kviT-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---💩---Y7HlBo-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\?---8rRplk-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\@---LKRCz--postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\.---XxpCFm-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:\\\\)---tpNOM_-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:\\\\\`\\\\(---w0y-3T-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---123---29k572-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---1a2b3c---8RwOZv-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\---T4r2DZ-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>---DV-Ytr-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.---I2RCq8-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#---qicdNs-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#\\\\#---7LLFg7-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#\\\\.\\\\#\\\\.\\\\#---tkYIvY-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---_---UdFsE6-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\{\\\\}---cEk0mR-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#fake-id---0ySTTy-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\.bar---d2rdEE-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:hover---p-SVOd-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:hover\\\\:focus\\\\:active---7ppzcn-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\[attr\\\\=value\\\\]---uMrr4n-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\/o\\\\/o---kXNiKY-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\\\\\o\\\\\\\\o---fLLGuT-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\*o\\\\*o---fF4DcX-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\!o\\\\!o---XqT8S3-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\'o\\\\'o---BxXL6g-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\~o\\\\~o---SPRjm3-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\+o\\\\+o---F93mpm-postfix { background: lime; } + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\/bar---uZ8i8d-postfix { + background: hotpink; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\\\\\bar---pozdkJ-postfix { + background: hotpink; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\/bar\\\\/baz---zWw2aH-postfix { + background: hotpink; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\\\\\bar\\\\\\\\baz---C9LnZz-postfix { + background: hotpink; +} + +/*!*************************!*\\\\ + !*** css ./order-1.css ***! + \\\\*************************/ +.order-1_css-order-1 { + color: red; +} + +.order-1_css-order-1-1 { + color: aliceblue; +} + +/*!*************************!*\\\\ + !*** css ./order-2.css ***! + \\\\*************************/ +.order-2_css-order-2 { + color: blue; +} + +.order-2_css-order-2-2 { + color: azure; +} + +/*!******************************!*\\\\ + !*** css ./order.module.css ***! + \\\\******************************/ +.order_module_css-simple { + display: block; + } + +.order_module_css-simple-other { + display: inline; + } + + +/*!************************!*\\\\ + !*** css ./button.css ***! + \\\\************************/ +.button_css-button { + border: none; + padding: 7px 15px; + cursor: pointer; +} + +/*!********************************!*\\\\ + !*** css ./primary-button.css ***! + \\\\********************************/ +.primary-button_css-primaryButton { + background-color: blue; + color: white; +} + +/*!**********************************!*\\\\ + !*** css ./secondary-button.css ***! + \\\\**********************************/ +.secondary-button_css-secondaryButton +{ + background-color: #555; + color: white; +} + +/*!******************************!*\\\\ + !*** css ./dedup.module.css ***! + \\\\******************************/ +.dedup_module_css-nextButton { + } + +.dedup_module_css-backButton { + } + + +/*!**********************!*\\\\ + !*** css ./foo.less ***! + \\\\**********************/ +.foo_less-foo { + color: red; +} + +/*!*******************************************!*\\\\ + !*** css ./composes-from-less.module.css ***! + \\\\*******************************************/ +.composes-from-less_module_css-bar { + } + +/*!*****************************************!*\\\\ + !*** css ./node_modules/test/index.css ***! + \\\\*****************************************/ + + + +.node_modules_test_index_css-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./tilde.module.css ***! + \\\\******************************/ + + + +.tilde_module_css-className { + color: #000; + background: #fff; +} + + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ +/* Tests from css-loader */ + +/* should work with the \`default\` class and with named export */ +.classes_module_css_884d-default { + background: red +} + + +/* should work with the \`module\` class and with named export */ +.classes_module_css_884d-module { + background: red +} + +/*!*****************************!*\\\\ + !*** css ./icss.module.css ***! + \\\\*****************************/ + + + + + + + + +.icss_module_css-className { + color: classes_module_css_884d-module; +} + + + +", +] +`; diff --git a/test/configCases/css/css-loader/__snapshots__/ConfigTest.snap b/test/configCases/css/css-loader/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..e7d2a458e76 --- /dev/null +++ b/test/configCases/css/css-loader/__snapshots__/ConfigTest.snap @@ -0,0 +1,2463 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-loader exported tests should work 1`] = ` +Object { + "@bounce": "basic_module_css-@bounce", + "a": "basic_module_css-a", + "abc": "basic_module_css-abc", + "b": "basic_module_css-b", + "bar-1": "basic_module_css-bar-1", + "bounce": "basic_module_css-bounce", + "bounce2": "basic_module_css-bounce2", + "bounce3": "basic_module_css-bounce3", + "bounce4": "basic_module_css-bounce4", + "c": "basic_module_css-c", + "c1": "basic_module_css-c1", + "c2": "basic_module_css-c2 basic_module_css-c1", + "c3": "basic_module_css-c3", + "c4": "basic_module_css-c4", + "c5": "basic_module_css-c5", + "c6": "basic_module_css-c6", + "c7": "basic_module_css-c7", + "c8": "basic_module_css-c8", + "class-1": "basic_module_css-class-1", + "class-10": "basic_module_css-class-10", + "className": "basic_module_css-className", + "container": "basic_module_css-container", + "d": "basic_module_css-d", + "def": "basic_module_css-def basic_module_css-abc", + "fade-in": "basic_module_css-fade-in", + "ghi": "basic_module_css-ghi", + "id": "basic_module_css-id", + "jkl": "basic_module_css-jkl", + "q": "basic_module_css-q", + "slide-right": "basic_module_css-slide-right", + "someId": "basic_module_css-someId", + "subClass": "basic_module_css-subClass", + "x": "basic_module_css-x", + "y": "basic_module_css-y", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 2`] = ` +Object { + "default": "classes_module_css_0c83-default", + "module": "classes_module_css_0c83-module", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 3`] = ` +Object { + "class": "composes-multiple_module_css-class composes-multiple_module_css-other-class composes-multiple_module_css-class-1 composes-multiple_module_css-class-2 alias_css-imported-alias alias-1_css-imported-alias-2 alias-1_css-imported-alias-3 global-class global-class-1 global-class-2", + "class-1": "composes-multiple_module_css-class-1", + "class-2": "composes-multiple_module_css-class-2", + "class-other": "composes-multiple_module_css-class-other composes-multiple_module_css-other-class composes-multiple_module_css-class-1", + "other-class": "composes-multiple_module_css-other-class", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 4`] = ` +Object { + "otherClassName": "composes-global_module_css-otherClassName global-class other-global-class", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 5`] = ` +Object { + "class-a": "scope-at-rule_module_css-class-a", + "class-b": "scope-at-rule_module_css-class-b", + "dark-scheme": "scope-at-rule_module_css-dark-scheme", + "light-scheme": "scope-at-rule_module_css-light-scheme", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 6`] = ` +Object { + "a": "nesting_module_css-a", + "b": "nesting_module_css-b nesting_module_css-a", + "bar": "nesting_module_css-bar nesting_module_css-foo", + "baz": "nesting_module_css-baz", + "foo": "nesting_module_css-foo", + "n": "nesting_module_css-n nesting_module_css-a", + "notice": "nesting_module_css-notice", + "notice-heading": "nesting_module_css-notice-heading", + "success": "nesting_module_css-success", + "success-heading": "nesting_module_css-success-heading", + "warning": "nesting_module_css-warning", + "warning-heading": "nesting_module_css-warning-heading", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 7`] = ` +Object { + "one": "prefer-relative_module_css-one package_one_css-imported-relative", + "two": "prefer-relative_module_css-two node_modules_package_two_css-imported-relative", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 8`] = ` +Object { + "a": "animation-name_module_css-a", + "animationName": "animation-name_module_css-animationName", + "b": "animation-name_module_css-b", + "c": "animation-name_module_css-c", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 9`] = ` +Object { + "myClass": "at-sign-in-package-name_module_css-myClass", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 10`] = ` +Object { + "color-grey": "gray", + "copyright": "resolving-from-node_modules_module_css-copyright node_modules_@localpackage_style_css-type-heading node_modules_@otherlocalpackage_style_css-type-heading2", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 11`] = ` +Object { + "#": "local-Ident-name_module_css-#", + "##": "local-Ident-name_module_css-##", + "#.#.#": "local-Ident-name_module_css-#.#.#", + "#fake-id": "local-Ident-name_module_css-#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name_module_css-++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "local-Ident-name_module_css--a-b-c-", + "-a0-34a___f": "local-Ident-name_module_css--a0-34a___f", + ".": "local-Ident-name_module_css-.", + "123": "local-Ident-name_module_css-123", + "1a2b3c": "local-Ident-name_module_css-1a2b3c", + ":)": "local-Ident-name_module_css-:)", + ":\`(": "local-Ident-name_module_css-:\`(", + ":hover": "local-Ident-name_module_css-:hover", + ":hover:focus:active": "local-Ident-name_module_css-:hover:focus:active", + "<><<<>><>": "local-Ident-name_module_css-<><<<>><>", + "

": "local-Ident-name_module_css-

", + "?": "local-Ident-name_module_css-?", + "@": "local-Ident-name_module_css-@", + "B&W?": "local-Ident-name_module_css-B&W?", + "[attr=value]": "local-Ident-name_module_css-[attr=value]", + "_": "local-Ident-name_module_css-_", + "_test": "local-Ident-name_module_css-_test", + "className": "local-Ident-name_module_css-className", + "f!o!o": "local-Ident-name_module_css-f!o!o", + "f'o'o": "local-Ident-name_module_css-f'o'o", + "f*o*o": "local-Ident-name_module_css-f*o*o", + "f+o+o": "local-Ident-name_module_css-f+o+o", + "f/o/o": "local-Ident-name_module_css-f/o/o", + "f\\\\o\\\\o": "local-Ident-name_module_css-f\\\\o\\\\o", + "foo.bar": "local-Ident-name_module_css-foo.bar", + "foo/bar": "local-Ident-name_module_css-foo/bar", + "foo/bar/baz": "local-Ident-name_module_css-foo/bar/baz", + "foo\\\\bar": "local-Ident-name_module_css-foo\\\\bar", + "foo\\\\bar\\\\baz": "local-Ident-name_module_css-foo\\\\bar\\\\baz", + "f~o~o": "local-Ident-name_module_css-f~o~o", + "m_x_@": "local-Ident-name_module_css-m_x_@", + "someId": "local-Ident-name_module_css-someId", + "subClass": "local-Ident-name_module_css-subClass", + "test": "local-Ident-name_module_css-test", + "{}": "local-Ident-name_module_css-{}", + "©": "local-Ident-name_module_css-©", + "“‘’”": "local-Ident-name_module_css-“‘’”", + "⌘⌥": "local-Ident-name_module_css-⌘⌥", + "☺☃": "local-Ident-name_module_css-☺☃", + "♥": "local-Ident-name_module_css-♥", + "𝄞♪♩♫♬": "local-Ident-name_module_css-𝄞♪♩♫♬", + "💩": "local-Ident-name_module_css-💩", + "😍": "local-Ident-name_module_css-😍", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 12`] = ` +Object { + "#": "local-Ident-name.module--#--0fms6", + "##": "local-Ident-name.module--##--4MjQ_", + "#.#.#": "local-Ident-name.module--#.#.#--4Z5kr", + "#fake-id": "local-Ident-name.module--#fake-id--stuV6", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name.module--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--GNmAU", + "-a-b-c-": "local-Ident-name.module---a-b-c---BVuZu", + "-a0-34a___f": "local-Ident-name.module---a0-34a___f--rWQCS", + ".": "local-Ident-name.module--.--Bix0N", + "123": "local-Ident-name.module--123--PvTN4", + "1a2b3c": "local-Ident-name.module--1a2b3c--xSd9R", + ":)": "local-Ident-name.module--:)--kXjo5", + ":\`(": "local-Ident-name.module--:\`(--YZqyU", + ":hover": "local-Ident-name.module--:hover--QXnD_", + ":hover:focus:active": "local-Ident-name.module--:hover:focus:active--0eQHC", + "<><<<>><>": "local-Ident-name.module--<><<<>><>--q0Tti", + "

": "local-Ident-name.module--

--RCYv0", + "?": "local-Ident-name.module--?--tcA6P", + "@": "local-Ident-name.module--@--IjjsD", + "B&W?": "local-Ident-name.module--B&W?--9Uv5j", + "[attr=value]": "local-Ident-name.module--[attr=value]--bHMhi", + "_": "local-Ident-name.module--_--wWsEV", + "_test": "local-Ident-name.module--_test--c_lQ7", + "className": "local-Ident-name.module--className--QdX5M", + "f!o!o": "local-Ident-name.module--f!o!o--U5evv", + "f'o'o": "local-Ident-name.module--f'o'o--5azUC", + "f*o*o": "local-Ident-name.module--f*o*o--1OZxX", + "f+o+o": "local-Ident-name.module--f+o+o--r42Md", + "f/o/o": "local-Ident-name.module--f/o/o--gpPiW", + "f\\\\o\\\\o": "local-Ident-name.module--f\\\\o\\\\o--gu2u7", + "foo.bar": "local-Ident-name.module--foo.bar--EDSRu", + "foo/bar": "local-Ident-name.module--foo/bar--ARBA4", + "foo/bar/baz": "local-Ident-name.module--foo/bar/baz--p2TDV", + "foo\\\\bar": "local-Ident-name.module--foo\\\\bar--vSOik", + "foo\\\\bar\\\\baz": "local-Ident-name.module--foo\\\\bar\\\\baz--FlFA-", + "f~o~o": "local-Ident-name.module--f~o~o--6JU27", + "m_x_@": "local-Ident-name.module--m_x_@--wXBtR", + "someId": "local-Ident-name.module--someId--fs0tG", + "subClass": "local-Ident-name.module--subClass--EEiow", + "test": "local-Ident-name.module--test--n138O", + "{}": "local-Ident-name.module--{}--yOiSk", + "©": "local-Ident-name.module--©--ABrkO", + "“‘’”": "local-Ident-name.module--“‘’”--Viviw", + "⌘⌥": "local-Ident-name.module--⌘⌥--tU2QX", + "☺☃": "local-Ident-name.module--☺☃--_YUxr", + "♥": "local-Ident-name.module--♥--zQEWH", + "𝄞♪♩♫♬": "local-Ident-name.module--𝄞♪♩♫♬--16ySy", + "💩": "local-Ident-name.module--💩--fhsK2", + "😍": "local-Ident-name.module--😍--rYTiW", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 13`] = ` +Object { + "#": "_-1#", + "##": "_-1##", + "#.#.#": "_-1#.#.#", + "#fake-id": "_-1#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_-1++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "_-1-a-b-c-", + "-a0-34a___f": "_-1-a0-34a___f", + ".": "_-1.", + "123": "_-1123", + "1a2b3c": "_-11a2b3c", + ":)": "_-1:)", + ":\`(": "_-1:\`(", + ":hover": "_-1:hover", + ":hover:focus:active": "_-1:hover:focus:active", + "<><<<>><>": "_-1<><<<>><>", + "

": "_-1

", + "?": "_-1?", + "@": "_-1@", + "B&W?": "_-1B&W?", + "[attr=value]": "_-1[attr=value]", + "_": "_-1_", + "_test": "_-1_test", + "className": "_-1className", + "f!o!o": "_-1f!o!o", + "f'o'o": "_-1f'o'o", + "f*o*o": "_-1f*o*o", + "f+o+o": "_-1f+o+o", + "f/o/o": "_-1f/o/o", + "f\\\\o\\\\o": "_-1f\\\\o\\\\o", + "foo.bar": "_-1foo.bar", + "foo/bar": "_-1foo/bar", + "foo/bar/baz": "_-1foo/bar/baz", + "foo\\\\bar": "_-1foo\\\\bar", + "foo\\\\bar\\\\baz": "_-1foo\\\\bar\\\\baz", + "f~o~o": "_-1f~o~o", + "m_x_@": "_-1m_x_@", + "someId": "_-1someId", + "subClass": "_-1subClass", + "test": "_-1test", + "{}": "_-1{}", + "©": "_-1©", + "“‘’”": "_-1“‘’”", + "⌘⌥": "_-1⌘⌥", + "☺☃": "_-1☺☃", + "♥": "_-1♥", + "𝄞♪♩♫♬": "_-1𝄞♪♩♫♬", + "💩": "_-1💩", + "😍": "_-1😍", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 14`] = ` +Object { + "#": "_--#", + "##": "_--##", + "#.#.#": "_--#.#.#", + "#fake-id": "_--#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "_---a-b-c-", + "-a0-34a___f": "_---a0-34a___f", + ".": "_--.", + "123": "_--123", + "1a2b3c": "_--1a2b3c", + ":)": "_--:)", + ":\`(": "_--:\`(", + ":hover": "_--:hover", + ":hover:focus:active": "_--:hover:focus:active", + "<><<<>><>": "_--<><<<>><>", + "

": "_--

", + "?": "_--?", + "@": "_--@", + "B&W?": "_--B&W?", + "[attr=value]": "_--[attr=value]", + "_": "_--_", + "_test": "_--_test", + "className": "_--className", + "f!o!o": "_--f!o!o", + "f'o'o": "_--f'o'o", + "f*o*o": "_--f*o*o", + "f+o+o": "_--f+o+o", + "f/o/o": "_--f/o/o", + "f\\\\o\\\\o": "_--f\\\\o\\\\o", + "foo.bar": "_--foo.bar", + "foo/bar": "_--foo/bar", + "foo/bar/baz": "_--foo/bar/baz", + "foo\\\\bar": "_--foo\\\\bar", + "foo\\\\bar\\\\baz": "_--foo\\\\bar\\\\baz", + "f~o~o": "_--f~o~o", + "m_x_@": "_--m_x_@", + "someId": "_--someId", + "subClass": "_--subClass", + "test": "_--test", + "{}": "_--{}", + "©": "_--©", + "“‘’”": "_--“‘’”", + "⌘⌥": "_--⌘⌥", + "☺☃": "_--☺☃", + "♥": "_--♥", + "𝄞♪♩♫♬": "_--𝄞♪♩♫♬", + "💩": "_--💩", + "😍": "_--😍", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 15`] = ` +Object { + "#": "__#", + "##": "__##", + "#.#.#": "__#.#.#", + "#fake-id": "__#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "__++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "__-a-b-c-", + "-a0-34a___f": "__-a0-34a___f", + ".": "__.", + "123": "__123", + "1a2b3c": "__1a2b3c", + ":)": "__:)", + ":\`(": "__:\`(", + ":hover": "__:hover", + ":hover:focus:active": "__:hover:focus:active", + "<><<<>><>": "__<><<<>><>", + "

": "__

", + "?": "__?", + "@": "__@", + "B&W?": "__B&W?", + "[attr=value]": "__[attr=value]", + "_": "___", + "_test": "___test", + "className": "__className", + "f!o!o": "__f!o!o", + "f'o'o": "__f'o'o", + "f*o*o": "__f*o*o", + "f+o+o": "__f+o+o", + "f/o/o": "__f/o/o", + "f\\\\o\\\\o": "__f\\\\o\\\\o", + "foo.bar": "__foo.bar", + "foo/bar": "__foo/bar", + "foo/bar/baz": "__foo/bar/baz", + "foo\\\\bar": "__foo\\\\bar", + "foo\\\\bar\\\\baz": "__foo\\\\bar\\\\baz", + "f~o~o": "__f~o~o", + "m_x_@": "__m_x_@", + "someId": "__someId", + "subClass": "__subClass", + "test": "__test", + "{}": "__{}", + "©": "__©", + "“‘’”": "__“‘’”", + "⌘⌥": "__⌘⌥", + "☺☃": "__☺☃", + "♥": "__♥", + "𝄞♪♩♫♬": "__𝄞♪♩♫♬", + "💩": "__💩", + "😍": "__😍", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 16`] = ` +Object { + "#": "#--tlFV0b", + "##": "##--7vA-7E", + "#.#.#": "#.#.#--1Hd875", + "#fake-id": "#fake-id--ez7Dik", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--OsAmD3", + "-a-b-c-": "-a-b-c---jfQ3Qn", + "-a0-34a___f": "-a0-34a___f--OWXZy-", + ".": ".--ZtQPX0", + "123": "_123--j0sSmE", + "1a2b3c": "_1a2b3c--AMCMZb", + ":)": ":)--u1ngqY", + ":\`(": ":\`(--hgmvDX", + ":hover": ":hover--8XNA4p", + ":hover:focus:active": ":hover:focus:active--EpwJWE", + "<><<<>><>": "<><<<>><>--8jXRVC", + "

": "

--MHaC0-", + "?": "?--9Y6SkK", + "@": "@--Sc9iGx", + "B&W?": "B&W?--D7HZ-H", + "[attr=value]": "[attr=value]--ZTV_uO", + "_": "_--NFJ6vs", + "_test": "_test--Kfd_4M", + "className": "className--b9RUK8", + "f!o!o": "f!o!o--QQGZu2", + "f'o'o": "f'o'o--00bSFC", + "f*o*o": "f*o*o--kom_Jq", + "f+o+o": "f+o+o--J4WAkM", + "f/o/o": "f/o/o--3vNZZM", + "f\\\\o\\\\o": "f\\\\o\\\\o--wNzTj3", + "foo.bar": "foo.bar--pYS5El", + "foo/bar": "foo/bar--9GWp9d", + "foo/bar/baz": "foo/bar/baz--MRJglc", + "foo\\\\bar": "foo\\\\bar--CCzsTj", + "foo\\\\bar\\\\baz": "foo\\\\bar\\\\baz--nRgTR7", + "f~o~o": "f~o~o--26zzb-", + "m_x_@": "m_x_@--kG1v1e", + "someId": "someId--TlAET9", + "subClass": "subClass--sglK-1", + "test": "test--mowWgR", + "{}": "{}--Tr49RL", + "©": "©--sWiP9l", + "“‘’”": "“‘’”--M3gyy-", + "⌘⌥": "⌘⌥--oDuNAW", + "☺☃": "☺☃--pbZo-2", + "♥": "♥--e6nEYm", + "𝄞♪♩♫♬": "𝄞♪♩♫♬--vrTCd6", + "💩": "💩--1Txu-k", + "😍": "😍--rPyRbM", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 17`] = ` +Object { + "#": "😀- -#", + "##": "😀- -##", + "#.#.#": "😀- -#.#.#", + "#fake-id": "😀- -#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "😀- -++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "😀- --a-b-c-", + "-a0-34a___f": "😀- --a0-34a___f", + ".": "😀- -.", + "123": "😀- -123", + "1a2b3c": "😀- -1a2b3c", + ":)": "😀- -:)", + ":\`(": "😀- -:\`(", + ":hover": "😀- -:hover", + ":hover:focus:active": "😀- -:hover:focus:active", + "<><<<>><>": "😀- -<><<<>><>", + "

": "😀- -

", + "?": "😀- -?", + "@": "😀- -@", + "B&W?": "😀- -B&W?", + "[attr=value]": "😀- -[attr=value]", + "_": "😀- -_", + "_test": "😀- -_test", + "className": "😀- -className", + "f!o!o": "😀- -f!o!o", + "f'o'o": "😀- -f'o'o", + "f*o*o": "😀- -f*o*o", + "f+o+o": "😀- -f+o+o", + "f/o/o": "😀- -f/o/o", + "f\\\\o\\\\o": "😀- -f\\\\o\\\\o", + "foo.bar": "😀- -foo.bar", + "foo/bar": "😀- -foo/bar", + "foo/bar/baz": "😀- -foo/bar/baz", + "foo\\\\bar": "😀- -foo\\\\bar", + "foo\\\\bar\\\\baz": "😀- -foo\\\\bar\\\\baz", + "f~o~o": "😀- -f~o~o", + "m_x_@": "😀- -m_x_@", + "someId": "😀- -someId", + "subClass": "😀- -subClass", + "test": "😀- -test", + "{}": "😀- -{}", + "©": "😀- -©", + "“‘’”": "😀- -“‘’”", + "⌘⌥": "😀- -⌘⌥", + "☺☃": "😀- -☺☃", + "♥": "😀- -♥", + "𝄞♪♩♫♬": "😀- -𝄞♪♩♫♬", + "💩": "😀- -💩", + "😍": "😀- -😍", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 18`] = ` +Object { + "#": "local-Ident-name.module--#--CUiuWNpacN", + "##": "local-Ident-name.module--##--CU4LyzXr4m", + "#.#.#": "local-Ident-name.module--#.#.#---k23lpEMg-", + "#fake-id": "local-Ident-name.module--#fake-id--aoLUns9FUw", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name.module--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--SjgB1SBFzx", + "-a-b-c-": "local-Ident-name.module---a-b-c---spF-wFF3ki", + "-a0-34a___f": "local-Ident-name.module---a0-34a___f--8SmkpM38MT", + ".": "local-Ident-name.module--.--TYgwrPPlce", + "123": "local-Ident-name.module--123--dRCMetfS4k", + "1a2b3c": "local-Ident-name.module--1a2b3c--27Ol2f1A5B", + ":)": "local-Ident-name.module--:)--8IGwE2kP5T", + ":\`(": "local-Ident-name.module--:\`(--XFoJZOBwb2", + ":hover": "local-Ident-name.module--:hover--gj5dKEVBLV", + ":hover:focus:active": "local-Ident-name.module--:hover:focus:active--MF6oOllQUU", + "<><<<>><>": "local-Ident-name.module--<><<<>><>--efv0wrKauZ", + "

": "local-Ident-name.module--

--VleHaJt0jW", + "?": "local-Ident-name.module--?--iQGuBSRyn5", + "@": "local-Ident-name.module--@--rXUc81UfOs", + "B&W?": "local-Ident-name.module--B&W?--2nDwDstWPk", + "[attr=value]": "local-Ident-name.module--[attr=value]--pVXs1yvO-c", + "_": "local-Ident-name.module--_--O587A_Y16h", + "_test": "local-Ident-name.module--_test--jkChnYaYBV", + "className": "local-Ident-name.module--className--HP09CfTnX1", + "f!o!o": "local-Ident-name.module--f!o!o--piVwcUXcCA", + "f'o'o": "local-Ident-name.module--f'o'o--_4GqKKgPVD", + "f*o*o": "local-Ident-name.module--f*o*o--i7809YiNmT", + "f+o+o": "local-Ident-name.module--f+o+o--22BN9FvSaj", + "f/o/o": "local-Ident-name.module--f/o/o--IfM4TmY7KJ", + "f\\\\o\\\\o": "local-Ident-name.module--f\\\\o\\\\o--smRz6NSna2", + "foo.bar": "local-Ident-name.module--foo.bar--ekmt08iOcx", + "foo/bar": "local-Ident-name.module--foo/bar--pmM_pDdiuz", + "foo/bar/baz": "local-Ident-name.module--foo/bar/baz--OHGMWfcvMx", + "foo\\\\bar": "local-Ident-name.module--foo\\\\bar--37QAOKIbi2", + "foo\\\\bar\\\\baz": "local-Ident-name.module--foo\\\\bar\\\\baz--zz8kivuxZ6", + "f~o~o": "local-Ident-name.module--f~o~o--zcYow3hnn9", + "m_x_@": "local-Ident-name.module--m_x_@--hTokNmWv2C", + "someId": "local-Ident-name.module--someId--MLaknB8z97", + "subClass": "local-Ident-name.module--subClass--4o6O5CPJI6", + "test": "local-Ident-name.module--test--6y2MZL2dRW", + "{}": "local-Ident-name.module--{}--KmrFboxFIk", + "©": "local-Ident-name.module--©--8qkLiWtfe0", + "“‘’”": "local-Ident-name.module--“‘’”--o0Ra2DG0ZC", + "⌘⌥": "local-Ident-name.module--⌘⌥--S6bOlCWVBp", + "☺☃": "local-Ident-name.module--☺☃--DnbMOfd6eV", + "♥": "local-Ident-name.module--♥--44uxusx5VU", + "𝄞♪♩♫♬": "local-Ident-name.module--𝄞♪♩♫♬--BSgrxZWBoa", + "💩": "local-Ident-name.module--💩--IYSuXUnVFH", + "😍": "local-Ident-name.module--😍--ZFvdqtu3qG", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 19`] = ` +Object { + "#": "local-Ident-name.module--#--H4xWOk", + "##": "local-Ident-name.module--##--qmWu4j", + "#.#.#": "local-Ident-name.module--#.#.#--jTAz29", + "#fake-id": "local-Ident-name.module--#fake-id--Tf_LXF", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "local-Ident-name.module--++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.--G9OqS6", + "-a-b-c-": "local-Ident-name.module---a-b-c---baJWIK", + "-a0-34a___f": "local-Ident-name.module---a0-34a___f--j4G6AV", + ".": "local-Ident-name.module--.--v7SGE3", + "123": "local-Ident-name.module--123--FPfb_a", + "1a2b3c": "local-Ident-name.module--1a2b3c--Prq2-n", + ":)": "local-Ident-name.module--:)--stxQmr", + ":\`(": "local-Ident-name.module--:\`(--PKfNRg", + ":hover": "local-Ident-name.module--:hover--7J6Ovy", + ":hover:focus:active": "local-Ident-name.module--:hover:focus:active--N6KkcF", + "<><<<>><>": "local-Ident-name.module--<><<<>><>--bH0ZRJ", + "

": "local-Ident-name.module--

--Lzbt_f", + "?": "local-Ident-name.module--?--cFxilG", + "@": "local-Ident-name.module--@--RJiOrO", + "B&W?": "local-Ident-name.module--B&W?--Cx7Xfj", + "[attr=value]": "local-Ident-name.module--[attr=value]--_X7r6s", + "_": "local-Ident-name.module--_--jZA8cH", + "_test": "local-Ident-name.module--_test--IFXC8J", + "className": "local-Ident-name.module--className--Gf2qKu", + "f!o!o": "local-Ident-name.module--f!o!o--IQSVKY", + "f'o'o": "local-Ident-name.module--f'o'o--Jke6Ar", + "f*o*o": "local-Ident-name.module--f*o*o--US0RYV", + "f+o+o": "local-Ident-name.module--f+o+o--JZ_ZYM", + "f/o/o": "local-Ident-name.module--f/o/o--TnGHtD", + "f\\\\o\\\\o": "local-Ident-name.module--f\\\\o\\\\o--zZG-0O", + "foo.bar": "local-Ident-name.module--foo.bar--_-hir3", + "foo/bar": "local-Ident-name.module--foo/bar--LMZK6C", + "foo/bar/baz": "local-Ident-name.module--foo/bar/baz--44CiTQ", + "foo\\\\bar": "local-Ident-name.module--foo\\\\bar--qVBL0b", + "foo\\\\bar\\\\baz": "local-Ident-name.module--foo\\\\bar\\\\baz--aiT34M", + "f~o~o": "local-Ident-name.module--f~o~o--wi3S5B", + "m_x_@": "local-Ident-name.module--m_x_@--j3M2wy", + "someId": "local-Ident-name.module--someId--hSsSyu", + "subClass": "local-Ident-name.module--subClass--rJLSP7", + "test": "local-Ident-name.module--test--_SesvC", + "{}": "local-Ident-name.module--{}--rC8he6", + "©": "local-Ident-name.module--©--if7zkU", + "“‘’”": "local-Ident-name.module--“‘’”--zEDyfZ", + "⌘⌥": "local-Ident-name.module--⌘⌥--VM04KP", + "☺☃": "local-Ident-name.module--☺☃--DzDnMo", + "♥": "local-Ident-name.module--♥--Wquu8v", + "𝄞♪♩♫♬": "local-Ident-name.module--𝄞♪♩♫♬--qoKZGt", + "💩": "local-Ident-name.module--💩--Wmv5n7", + "😍": "local-Ident-name.module--😍--vXWvMf", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 20`] = ` +Object { + "#": "prefix-./local-Ident-name.module.css?local-ident-name-9---#---qicdNs-postfix", + "##": "prefix-./local-Ident-name.module.css?local-ident-name-9---##---7LLFg7-postfix", + "#.#.#": "prefix-./local-Ident-name.module.css?local-ident-name-9---#.#.#---tkYIvY-postfix", + "#fake-id": "prefix-./local-Ident-name.module.css?local-ident-name-9---#fake-id---0ySTTy-postfix", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "prefix-./local-Ident-name.module.css?local-ident-name-9---++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.---I2RCq8-postfix", + "-a-b-c-": "prefix-./local-Ident-name.module.css?local-ident-name-9----a-b-c----hDXrIM-postfix", + "-a0-34a___f": "prefix-./local-Ident-name.module.css?local-ident-name-9----a0-34a___f---VQNZfx-postfix", + ".": "prefix-./local-Ident-name.module.css?local-ident-name-9---.---XxpCFm-postfix", + "123": "prefix-./local-Ident-name.module.css?local-ident-name-9---123---29k572-postfix", + "1a2b3c": "prefix-./local-Ident-name.module.css?local-ident-name-9---1a2b3c---8RwOZv-postfix", + ":)": "prefix-./local-Ident-name.module.css?local-ident-name-9---:)---tpNOM_-postfix", + ":\`(": "prefix-./local-Ident-name.module.css?local-ident-name-9---:\`(---w0y-3T-postfix", + ":hover": "prefix-./local-Ident-name.module.css?local-ident-name-9---:hover---p-SVOd-postfix", + ":hover:focus:active": "prefix-./local-Ident-name.module.css?local-ident-name-9---:hover:focus:active---7ppzcn-postfix", + "<><<<>><>": "prefix-./local-Ident-name.module.css?local-ident-name-9---<><<<>><>---DV-Ytr-postfix", + "

": "prefix-./local-Ident-name.module.css?local-ident-name-9---

---T4r2DZ-postfix", + "?": "prefix-./local-Ident-name.module.css?local-ident-name-9---?---8rRplk-postfix", + "@": "prefix-./local-Ident-name.module.css?local-ident-name-9---@---LKRCz--postfix", + "B&W?": "prefix-./local-Ident-name.module.css?local-ident-name-9---B&W?---pAfmJZ-postfix", + "[attr=value]": "prefix-./local-Ident-name.module.css?local-ident-name-9---[attr=value]---uMrr4n-postfix", + "_": "prefix-./local-Ident-name.module.css?local-ident-name-9---_---UdFsE6-postfix", + "_test": "prefix-./local-Ident-name.module.css?local-ident-name-9---_test---RdGpUF-postfix", + "className": "prefix-./local-Ident-name.module.css?local-ident-name-9---className---Rbuqv6-postfix", + "f!o!o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f!o!o---XqT8S3-postfix", + "f'o'o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f'o'o---BxXL6g-postfix", + "f*o*o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f*o*o---fF4DcX-postfix", + "f+o+o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f+o+o---F93mpm-postfix", + "f/o/o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f/o/o---kXNiKY-postfix", + "f\\\\o\\\\o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f\\\\o\\\\o---fLLGuT-postfix", + "foo.bar": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo.bar---d2rdEE-postfix", + "foo/bar": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo/bar---uZ8i8d-postfix", + "foo/bar/baz": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo/bar/baz---zWw2aH-postfix", + "foo\\\\bar": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo\\\\bar---pozdkJ-postfix", + "foo\\\\bar\\\\baz": "prefix-./local-Ident-name.module.css?local-ident-name-9---foo\\\\bar\\\\baz---C9LnZz-postfix", + "f~o~o": "prefix-./local-Ident-name.module.css?local-ident-name-9---f~o~o---SPRjm3-postfix", + "m_x_@": "prefix-./local-Ident-name.module.css?local-ident-name-9---m_x_@---0FTqJc-postfix", + "someId": "prefix-./local-Ident-name.module.css?local-ident-name-9---someId---rz34Z--postfix", + "subClass": "prefix-./local-Ident-name.module.css?local-ident-name-9---subClass---KZbh3P-postfix", + "test": "prefix-./local-Ident-name.module.css?local-ident-name-9---test---PboabM-postfix", + "{}": "prefix-./local-Ident-name.module.css?local-ident-name-9---{}---cEk0mR-postfix", + "©": "prefix-./local-Ident-name.module.css?local-ident-name-9---©---l15bLc-postfix", + "“‘’”": "prefix-./local-Ident-name.module.css?local-ident-name-9---“‘’”---Jk8q45-postfix", + "⌘⌥": "prefix-./local-Ident-name.module.css?local-ident-name-9---⌘⌥---WgMb99-postfix", + "☺☃": "prefix-./local-Ident-name.module.css?local-ident-name-9---☺☃---PSP-1Q-postfix", + "♥": "prefix-./local-Ident-name.module.css?local-ident-name-9---♥---J7fhlX-postfix", + "𝄞♪♩♫♬": "prefix-./local-Ident-name.module.css?local-ident-name-9---𝄞♪♩♫♬---a1kviT-postfix", + "💩": "prefix-./local-Ident-name.module.css?local-ident-name-9---💩---Y7HlBo-postfix", + "😍": "prefix-./local-Ident-name.module.css?local-ident-name-9---😍---JD7n4W-postfix", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 21`] = ` +Object { + "simple": "order_module_css-simple order-1_css-order-1 order-2_css-order-2 order-1_css-order-1-1 order-2_css-order-2-2", + "simple-other": "order_module_css-simple-other order-1_css-order-1", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 22`] = ` +Object { + "backButton": "dedup_module_css-backButton secondary-button_css-secondaryButton button_css-button", + "nextButton": "dedup_module_css-nextButton primary-button_css-primaryButton button_css-button", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 23`] = ` +Object { + "bar": "composes-from-less_module_css-bar foo_less-foo", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 24`] = ` +Object { + "bar": "#fff", + "className": "tilde_module_css-className", + "foo": "#000", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 25`] = ` +Object { + "_test": "_right_value", + "_test1": "1", + "_test2": "'string'", + "_test3": "1px 2px 3px", + "_test4": "1px 2px 3px, 1px 2px 3px", + "_test_other": "_right_value", + "_the_same_name": "_the_same_name", + "className": "icss_module_css-className", + "constructor": "constructor", + "reexport": "classes_module_css_884d-module", + "toString": "toString", +} +`; + +exports[`ConfigTestCases css css-loader exported tests should work 26`] = ` +Array [ + "/*!******************************!*\\\\ + !*** css ./basic.module.css ***! + \\\\******************************/ +.basic_module_css-class-1, .basic_module_css-class-10 .basic_module_css-bar-1 { + color: green; +} + + +@keyframes basic_module_css-slide-right { + 0% { + transform: translateX(-100%); + opacity: 0; + } + 100% { + transform: translateX(0); + opacity: 1; + } +} + +a { + animation: basic_module_css-slide-right 300ms forwards ease-out, basic_module_css-fade-in 300ms forwards ease-out; +} + +.basic_module_css-c1/*.c2*/.basic_module_css-c3 { background: red; } + +.basic_module_css-c1 { a: 1; } +.basic_module_css-c2 { b: 1; } + +.basic_module_css-a { + color: green; +} + +@keyframes basic_module_css-bounce { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 5% { + transform: translateY(-100%); + opacity: 0; + } +} + +@-webkit-keyframes basic_module_css-bounce2 { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 5% { + transform: translateY(-100%); + opacity: 0; + } +} + +.basic_module_css-bounce { + animation-name: basic_module_css-bounce; + animation: basic_module_css-bounce2 1s ease; +} + +.basic_module_css-bounce2 { + color: green; + animation: basic_module_css-bounce 1s ease; + animation-name: basic_module_css-bounce2; +} + +.basic_module_css-bounce3 { + animation: basic_module_css-bounce 1s ease, basic_module_css-bounce2 +} + +.basic_module_css-bounce4 { + animation: basic_module_css-bounce 1s ease, basic_module_css-bounce2; +} + +.basic_module_css-b { + color: green; +} + +@-webkit-keyframes basic_module_css-\\\\@bounce { + 0%, 100% { + transform: translateY(-25%); + -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +@keyframes basic_module_css-\\\\@bounce { + 0%, 100% { + transform: translateY(-25%); + -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +.basic_module_css-container { + -webkit-animation: basic_module_css-\\\\@bounce 1s infinite; + animation: basic_module_css-\\\\@bounce 1s infinite; +} + +.basic_module_css-abc .basic_module_css-def { + color: red; +} + +.basic_module_css-ghi .basic_module_css-jkl { + color: blue; +} + +.basic_module_css-className { background: red; } +#basic_module_css-someId { background: green; } +.basic_module_css-className .basic_module_css-subClass { color: green; } +#basic_module_css-someId .basic_module_css-subClass { color: blue; } + +.basic_module_css-abc { + color: red; +} +.basic_module_css-def { + background: green; +} + +.basic_module_css-c1[data-attr=\\".c2)]'\\"]:not(.basic_module_css-c3):not(.basic_module_css-c4) { + background: red; +} + +.basic_module_css-c1 .basic_module_css-c2 .basic_module_css-c3 .c4 .basic_module_css-c5, .basic_module_css-c6 .basic_module_css-c7 { background: red; } +.basic_module_css-c8 { background: red; } + +.basic_module_css-a .basic_module_css-b, .basic_module_css-c .basic_module_css-d, #basic_module_css-id { + color: green; + font-size: 1.5pt; +} +a[href=\\"#b.c\\"].basic_module_css-x.basic_module_css-y { + color: green; + font-size: 1.5pt; +} +@keyframes basic_module_css-q { + 2.5% {color: green;} +} + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ +/* Tests from css-loader */ + +/* should work with the \`default\` class and with named export */ +.classes_module_css_0c83-default { + background: red +} + + +/* should work with the \`module\` class and with named export */ +.classes_module_css_0c83-module { + background: red +} + +/*!***********************!*\\\\ + !*** css ./alias.css ***! + \\\\***********************/ +.alias_css-imported-alias { + display: table; +} + +/*!*************************!*\\\\ + !*** css ./alias-1.css ***! + \\\\*************************/ +.alias-1_css-imported-alias-2 { + background: red; +} + +.alias-1_css-imported-alias-3 { + background: red; +} + +/*!******************************************!*\\\\ + !*** css ./composes-multiple.module.css ***! + \\\\******************************************/ +.composes-multiple_module_css-other-class { + color: red; +} + +.composes-multiple_module_css-class-1 { + color: blue; +} + +.composes-multiple_module_css-class-2 { + color: blue; +} + +.global-class { + padding: 10px; +} + +.global-class-1 { + padding: 10px; +} + +.global-class-2 { + padding: 10px; +} + +.composes-multiple_module_css-class { + color: gainsboro; +} + +.composes-multiple_module_css-class-other { + } + + +/*!****************************************!*\\\\ + !*** css ./composes-global.module.css ***! + \\\\****************************************/ +.global-class { + color: red; +} + +.other-global-class { + color: red; +} + +.composes-global_module_css-otherClassName { + color: blue; +} + +/*!**************************************!*\\\\ + !*** css ./scope-at-rule.module.css ***! + \\\\**************************************/ +@scope (.scope-at-rule_module_css-light-scheme) { + :scope { + background-color: plum; + } + + .scope-at-rule_module_css-class-a { + color: darkmagenta; + } +} + +@scope (.scope-at-rule_module_css-dark-scheme) { + :scope { + background-color: darkmagenta; + color: antiquewhite; + } + + .scope-at-rule_module_css-class-b { + color: plum; + } +} + +@scope { + :scope { + color: red; + } +} + +/*!********************************!*\\\\ + !*** css ./nesting.module.css ***! + \\\\********************************/ +.nesting_module_css-notice { + width: 90%; + justify-content: center; + border-radius: 1rem; + border: black solid 2px; + background-color: #ffc107; + color: black; + padding: 1rem; + + .nesting_module_css-notice-heading:before { + /* equivalent to \`.notice .notice-heading:before\` */ + content: \\"ℹ︎ \\"; + } + + &.nesting_module_css-warning { + /* equivalent to \`.notice.warning\` */ + background-color: #d81b60; + border-color: #d81b60; + color: white; + .nesting_module_css-warning-heading:before { + /* equivalent to \`.notice.warning .warning-heading:before\` */ + content: \\"! \\"; + } + } + + &.nesting_module_css-success { + /* equivalent to \`.notice.success\` */ + background-color: #004d40; + border-color: #004d40; + color: white; + + .nesting_module_css-success-heading:before { + /* equivalent to \`.notice.success .success-heading:before\` */ + content: \\"✓ \\"; + } + } +} + +.nesting_module_css-foo { + color: red; +} + +.nesting_module_css-bar { + &.nesting_module_css-baz { + color: blue; + } +} + +.nesting_module_css-foo { + display: grid; + + @media (orientation: landscape) { + & { + grid-auto-flow: column; + } + } +} + +@media (orientation: landscape) { + .nesting_module_css-a { + color: red; + } +} + +@media (orientation: landscape) { + @media (orientation: landscape) { + .nesting_module_css-b { + color: red; + } + } +} + +.nesting_module_css-n { + @media (orientation: landscape) { + color: red; + } +} + +/*!*****************************!*\\\\ + !*** css ./package/one.css ***! + \\\\*****************************/ +.package_one_css-imported-relative { + display: block; +} + +/*!******************************************!*\\\\ + !*** css ./node_modules/package/two.css ***! + \\\\******************************************/ +.node_modules_package_two_css-imported-relative { + display: inline; +} + +/*!****************************************!*\\\\ + !*** css ./prefer-relative.module.css ***! + \\\\****************************************/ +.prefer-relative_module_css-one { + color: yellow; + } + +.prefer-relative_module_css-two { + color: yellow; + } + +/*!***************************************!*\\\\ + !*** css ./animation-name.module.css ***! + \\\\***************************************/ +.animation-name_module_css-a { + animation: 3s animation-name_module_css-animationName; +} + +.animation-name_module_css-b { + animation: animation-name_module_css-animationName 3s; +} + +.animation-name_module_css-c { + animation-name: animation-name_module_css-animationName; +} + +@keyframes animation-name_module_css-animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +/*!********************************************************!*\\\\ + !*** css ./node_modules/@foo/package/style.module.css ***! + \\\\********************************************************/ +.node_modules_\\\\@foo_package_style_module_css-class { + color: red; +} + +/*!*******************************************************!*\\\\ + !*** css ./node_modules/foo/package/style.module.css ***! + \\\\*******************************************************/ +.node_modules_foo_package_style_module_css-class { + color: red; +} + +/*!************************************************!*\\\\ + !*** css ./at-sign-in-package-name.module.css ***! + \\\\************************************************/ + +.at-sign-in-package-name_module_css-myClass { + color: red; +} + +/*!**************************************************!*\\\\ + !*** css ./node_modules/@localpackage/color.css ***! + \\\\**************************************************/ + + +/*!*******************************************************!*\\\\ + !*** css ./node_modules/@otherlocalpackage/style.css ***! + \\\\*******************************************************/ +.node_modules_\\\\@otherlocalpackage_style_css-type-heading2 { + display: flex; +} + +/*!**************************************************!*\\\\ + !*** css ./node_modules/@localpackage/style.css ***! + \\\\**************************************************/ +.node_modules_\\\\@localpackage_style_css-type-heading { + color: red; + margin: 0; + padding: 0; +} + +/*!****************************************************!*\\\\ + !*** css ./resolving-from-node_modules.module.css ***! + \\\\****************************************************/ + + +.resolving-from-node_modules_module_css-copyright { + color: gray; + margin: 0; + padding: 0; +} + +/*!*****************************************!*\\\\ + !*** css ./local-Ident-name.module.css ***! + \\\\*****************************************/ +.local-Ident-name_module_css-test { + background: red; +} + +.local-Ident-name_module_css-_test { + background: blue; +} + +.local-Ident-name_module_css-className { + background: red; +} + +#local-Ident-name_module_css-someId { + background: green; +} + +.local-Ident-name_module_css-className .local-Ident-name_module_css-subClass { + color: green; +} + +#local-Ident-name_module_css-someId .local-Ident-name_module_css-subClass { + color: blue; +} + +.local-Ident-name_module_css--a0-34a___f { + color: red; +} + +.local-Ident-name_module_css-m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name_module_css-B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name_module_css-\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name_module_css-1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name_module_css-\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name_module_css--a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name_module_css-© { + color: black; +} + +.local-Ident-name_module_css-♥ { background: lime; } +.local-Ident-name_module_css-© { background: lime; } +.local-Ident-name_module_css-😍 { background: lime; } +.local-Ident-name_module_css-“‘’” { background: lime; } +.local-Ident-name_module_css-☺☃ { background: lime; } +.local-Ident-name_module_css-⌘⌥ { background: lime; } +.local-Ident-name_module_css-𝄞♪♩♫♬ { background: lime; } +.local-Ident-name_module_css-💩 { background: lime; } +.local-Ident-name_module_css-\\\\? { background: lime; } +.local-Ident-name_module_css-\\\\@ { background: lime; } +.local-Ident-name_module_css-\\\\. { background: lime; } +.local-Ident-name_module_css-\\\\:\\\\) { background: lime; } +.local-Ident-name_module_css-\\\\:\\\\\`\\\\( { background: lime; } +.local-Ident-name_module_css-123 { background: lime; } +.local-Ident-name_module_css-1a2b3c { background: lime; } +.local-Ident-name_module_css-\\\\ { background: lime; } +.local-Ident-name_module_css-\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.local-Ident-name_module_css-\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.local-Ident-name_module_css-\\\\# { background: lime; } +.local-Ident-name_module_css-\\\\#\\\\# { background: lime; } +.local-Ident-name_module_css-\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.local-Ident-name_module_css-_ { background: lime; } +.local-Ident-name_module_css-\\\\{\\\\} { background: lime; } +.local-Ident-name_module_css-\\\\#fake-id { background: lime; } +.local-Ident-name_module_css-foo\\\\.bar { background: lime; } +.local-Ident-name_module_css-\\\\:hover { background: lime; } +.local-Ident-name_module_css-\\\\:hover\\\\:focus\\\\:active { background: lime; } +.local-Ident-name_module_css-\\\\[attr\\\\=value\\\\] { background: lime; } +.local-Ident-name_module_css-f\\\\/o\\\\/o { background: lime; } +.local-Ident-name_module_css-f\\\\\\\\o\\\\\\\\o { background: lime; } +.local-Ident-name_module_css-f\\\\*o\\\\*o { background: lime; } +.local-Ident-name_module_css-f\\\\!o\\\\!o { background: lime; } +.local-Ident-name_module_css-f\\\\'o\\\\'o { background: lime; } +.local-Ident-name_module_css-f\\\\~o\\\\~o { background: lime; } +.local-Ident-name_module_css-f\\\\+o\\\\+o { background: lime; } + +.local-Ident-name_module_css-foo\\\\/bar { + background: hotpink; +} + +.local-Ident-name_module_css-foo\\\\\\\\bar { + background: hotpink; +} + +.local-Ident-name_module_css-foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.local-Ident-name_module_css-foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-1 ***! + \\\\************************************************************/ +.local-Ident-name\\\\.module--test--n138O { + background: red; +} + +.local-Ident-name\\\\.module--_test--c_lQ7 { + background: blue; +} + +.local-Ident-name\\\\.module--className--QdX5M { + background: red; +} + +#local-Ident-name\\\\.module--someId--fs0tG { + background: green; +} + +.local-Ident-name\\\\.module--className--QdX5M .local-Ident-name\\\\.module--subClass--EEiow { + color: green; +} + +#local-Ident-name\\\\.module--someId--fs0tG .local-Ident-name\\\\.module--subClass--EEiow { + color: blue; +} + +.local-Ident-name\\\\.module---a0-34a___f--rWQCS { + color: red; +} + +.local-Ident-name\\\\.module--m_x_\\\\@--wXBtR { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name\\\\.module--B\\\\&W\\\\?--9Uv5j { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--YZqyU { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name\\\\.module--1a2b3c--xSd9R { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name\\\\.module--\\\\#fake-id--stuV6 { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name\\\\.module---a-b-c---BVuZu { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name\\\\.module--©--ABrkO { + color: black; +} + +.local-Ident-name\\\\.module--♥--zQEWH { background: lime; } +.local-Ident-name\\\\.module--©--ABrkO { background: lime; } +.local-Ident-name\\\\.module--😍--rYTiW { background: lime; } +.local-Ident-name\\\\.module--“‘’”--Viviw { background: lime; } +.local-Ident-name\\\\.module--☺☃--_YUxr { background: lime; } +.local-Ident-name\\\\.module--⌘⌥--tU2QX { background: lime; } +.local-Ident-name\\\\.module--𝄞♪♩♫♬--16ySy { background: lime; } +.local-Ident-name\\\\.module--💩--fhsK2 { background: lime; } +.local-Ident-name\\\\.module--\\\\?--tcA6P { background: lime; } +.local-Ident-name\\\\.module--\\\\@--IjjsD { background: lime; } +.local-Ident-name\\\\.module--\\\\.--Bix0N { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\)--kXjo5 { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--YZqyU { background: lime; } +.local-Ident-name\\\\.module--123--PvTN4 { background: lime; } +.local-Ident-name\\\\.module--1a2b3c--xSd9R { background: lime; } +.local-Ident-name\\\\.module--\\\\--RCYv0 { background: lime; } +.local-Ident-name\\\\.module--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--q0Tti { background: lime; } +.local-Ident-name\\\\.module--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--GNmAU { background: lime; } +.local-Ident-name\\\\.module--\\\\#--0fms6 { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\#--4MjQ_ { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\.\\\\#\\\\.\\\\#--4Z5kr { background: lime; } +.local-Ident-name\\\\.module--_--wWsEV { background: lime; } +.local-Ident-name\\\\.module--\\\\{\\\\}--yOiSk { background: lime; } +.local-Ident-name\\\\.module--\\\\#fake-id--stuV6 { background: lime; } +.local-Ident-name\\\\.module--foo\\\\.bar--EDSRu { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover--QXnD_ { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover\\\\:focus\\\\:active--0eQHC { background: lime; } +.local-Ident-name\\\\.module--\\\\[attr\\\\=value\\\\]--bHMhi { background: lime; } +.local-Ident-name\\\\.module--f\\\\/o\\\\/o--gpPiW { background: lime; } +.local-Ident-name\\\\.module--f\\\\\\\\o\\\\\\\\o--gu2u7 { background: lime; } +.local-Ident-name\\\\.module--f\\\\*o\\\\*o--1OZxX { background: lime; } +.local-Ident-name\\\\.module--f\\\\!o\\\\!o--U5evv { background: lime; } +.local-Ident-name\\\\.module--f\\\\'o\\\\'o--5azUC { background: lime; } +.local-Ident-name\\\\.module--f\\\\~o\\\\~o--6JU27 { background: lime; } +.local-Ident-name\\\\.module--f\\\\+o\\\\+o--r42Md { background: lime; } + +.local-Ident-name\\\\.module--foo\\\\/bar--ARBA4 { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar--vSOik { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\/bar\\\\/baz--p2TDV { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar\\\\\\\\baz--FlFA- { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-2 ***! + \\\\************************************************************/ +._-1test { + background: red; +} + +._-1_test { + background: blue; +} + +._-1className { + background: red; +} + +#_-1someId { + background: green; +} + +._-1className ._-1subClass { + color: green; +} + +#_-1someId ._-1subClass { + color: blue; +} + +._-1-a0-34a___f { + color: red; +} + +._-1m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +._-1B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +._-1\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +._-11a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#_-1\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#_-1-a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#_-1© { + color: black; +} + +._-1♥ { background: lime; } +._-1© { background: lime; } +._-1😍 { background: lime; } +._-1“‘’” { background: lime; } +._-1☺☃ { background: lime; } +._-1⌘⌥ { background: lime; } +._-1𝄞♪♩♫♬ { background: lime; } +._-1💩 { background: lime; } +._-1\\\\? { background: lime; } +._-1\\\\@ { background: lime; } +._-1\\\\. { background: lime; } +._-1\\\\:\\\\) { background: lime; } +._-1\\\\:\\\\\`\\\\( { background: lime; } +._-1123 { background: lime; } +._-11a2b3c { background: lime; } +._-1\\\\ { background: lime; } +._-1\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +._-1\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +._-1\\\\# { background: lime; } +._-1\\\\#\\\\# { background: lime; } +._-1\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +._-1_ { background: lime; } +._-1\\\\{\\\\} { background: lime; } +._-1\\\\#fake-id { background: lime; } +._-1foo\\\\.bar { background: lime; } +._-1\\\\:hover { background: lime; } +._-1\\\\:hover\\\\:focus\\\\:active { background: lime; } +._-1\\\\[attr\\\\=value\\\\] { background: lime; } +._-1f\\\\/o\\\\/o { background: lime; } +._-1f\\\\\\\\o\\\\\\\\o { background: lime; } +._-1f\\\\*o\\\\*o { background: lime; } +._-1f\\\\!o\\\\!o { background: lime; } +._-1f\\\\'o\\\\'o { background: lime; } +._-1f\\\\~o\\\\~o { background: lime; } +._-1f\\\\+o\\\\+o { background: lime; } + +._-1foo\\\\/bar { + background: hotpink; +} + +._-1foo\\\\\\\\bar { + background: hotpink; +} + +._-1foo\\\\/bar\\\\/baz { + background: hotpink; +} + +._-1foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-3 ***! + \\\\************************************************************/ +._--test { + background: red; +} + +._--_test { + background: blue; +} + +._--className { + background: red; +} + +#_--someId { + background: green; +} + +._--className ._--subClass { + color: green; +} + +#_--someId ._--subClass { + color: blue; +} + +._---a0-34a___f { + color: red; +} + +._--m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +._--B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +._--\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +._--1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#_--\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#_---a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#_--© { + color: black; +} + +._--♥ { background: lime; } +._--© { background: lime; } +._--😍 { background: lime; } +._--“‘’” { background: lime; } +._--☺☃ { background: lime; } +._--⌘⌥ { background: lime; } +._--𝄞♪♩♫♬ { background: lime; } +._--💩 { background: lime; } +._--\\\\? { background: lime; } +._--\\\\@ { background: lime; } +._--\\\\. { background: lime; } +._--\\\\:\\\\) { background: lime; } +._--\\\\:\\\\\`\\\\( { background: lime; } +._--123 { background: lime; } +._--1a2b3c { background: lime; } +._--\\\\ { background: lime; } +._--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +._--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +._--\\\\# { background: lime; } +._--\\\\#\\\\# { background: lime; } +._--\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +._--_ { background: lime; } +._--\\\\{\\\\} { background: lime; } +._--\\\\#fake-id { background: lime; } +._--foo\\\\.bar { background: lime; } +._--\\\\:hover { background: lime; } +._--\\\\:hover\\\\:focus\\\\:active { background: lime; } +._--\\\\[attr\\\\=value\\\\] { background: lime; } +._--f\\\\/o\\\\/o { background: lime; } +._--f\\\\\\\\o\\\\\\\\o { background: lime; } +._--f\\\\*o\\\\*o { background: lime; } +._--f\\\\!o\\\\!o { background: lime; } +._--f\\\\'o\\\\'o { background: lime; } +._--f\\\\~o\\\\~o { background: lime; } +._--f\\\\+o\\\\+o { background: lime; } + +._--foo\\\\/bar { + background: hotpink; +} + +._--foo\\\\\\\\bar { + background: hotpink; +} + +._--foo\\\\/bar\\\\/baz { + background: hotpink; +} + +._--foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-4 ***! + \\\\************************************************************/ +.__test { + background: red; +} + +.___test { + background: blue; +} + +.__className { + background: red; +} + +#__someId { + background: green; +} + +.__className .__subClass { + color: green; +} + +#__someId .__subClass { + color: blue; +} + +.__-a0-34a___f { + color: red; +} + +.__m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.__B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.__\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.__1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#__\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#__-a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#__© { + color: black; +} + +.__♥ { background: lime; } +.__© { background: lime; } +.__😍 { background: lime; } +.__“‘’” { background: lime; } +.__☺☃ { background: lime; } +.__⌘⌥ { background: lime; } +.__𝄞♪♩♫♬ { background: lime; } +.__💩 { background: lime; } +.__\\\\? { background: lime; } +.__\\\\@ { background: lime; } +.__\\\\. { background: lime; } +.__\\\\:\\\\) { background: lime; } +.__\\\\:\\\\\`\\\\( { background: lime; } +.__123 { background: lime; } +.__1a2b3c { background: lime; } +.__\\\\ { background: lime; } +.__\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.__\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.__\\\\# { background: lime; } +.__\\\\#\\\\# { background: lime; } +.__\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.___ { background: lime; } +.__\\\\{\\\\} { background: lime; } +.__\\\\#fake-id { background: lime; } +.__foo\\\\.bar { background: lime; } +.__\\\\:hover { background: lime; } +.__\\\\:hover\\\\:focus\\\\:active { background: lime; } +.__\\\\[attr\\\\=value\\\\] { background: lime; } +.__f\\\\/o\\\\/o { background: lime; } +.__f\\\\\\\\o\\\\\\\\o { background: lime; } +.__f\\\\*o\\\\*o { background: lime; } +.__f\\\\!o\\\\!o { background: lime; } +.__f\\\\'o\\\\'o { background: lime; } +.__f\\\\~o\\\\~o { background: lime; } +.__f\\\\+o\\\\+o { background: lime; } + +.__foo\\\\/bar { + background: hotpink; +} + +.__foo\\\\\\\\bar { + background: hotpink; +} + +.__foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.__foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-5 ***! + \\\\************************************************************/ +.test--mowWgR { + background: red; +} + +._test--Kfd_4M { + background: blue; +} + +.className--b9RUK8 { + background: red; +} + +#someId--TlAET9 { + background: green; +} + +.className--b9RUK8 .subClass--sglK-1 { + color: green; +} + +#someId--TlAET9 .subClass--sglK-1 { + color: blue; +} + +.-a0-34a___f--OWXZy- { + color: red; +} + +.m_x_\\\\@--kG1v1e { + margin-left: auto !important; + margin-right: auto !important; +} + +.B\\\\&W\\\\?--D7HZ-H { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.\\\\:\\\\\`\\\\(--hgmvDX { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +._1a2b3c--AMCMZb { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#\\\\#fake-id--ez7Dik { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#-a-b-c---jfQ3Qn { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#©--sWiP9l { + color: black; +} + +.♥--e6nEYm { background: lime; } +.©--sWiP9l { background: lime; } +.😍--rPyRbM { background: lime; } +.“‘’”--M3gyy- { background: lime; } +.☺☃--pbZo-2 { background: lime; } +.⌘⌥--oDuNAW { background: lime; } +.𝄞♪♩♫♬--vrTCd6 { background: lime; } +.💩--1Txu-k { background: lime; } +.\\\\?--9Y6SkK { background: lime; } +.\\\\@--Sc9iGx { background: lime; } +.\\\\.--ZtQPX0 { background: lime; } +.\\\\:\\\\)--u1ngqY { background: lime; } +.\\\\:\\\\\`\\\\(--hgmvDX { background: lime; } +._123--j0sSmE { background: lime; } +._1a2b3c--AMCMZb { background: lime; } +.\\\\--MHaC0- { background: lime; } +.\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--8jXRVC { background: lime; } +.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--OsAmD3 { background: lime; } +.\\\\#--tlFV0b { background: lime; } +.\\\\#\\\\#--7vA-7E { background: lime; } +.\\\\#\\\\.\\\\#\\\\.\\\\#--1Hd875 { background: lime; } +._--NFJ6vs { background: lime; } +.\\\\{\\\\}--Tr49RL { background: lime; } +.\\\\#fake-id--ez7Dik { background: lime; } +.foo\\\\.bar--pYS5El { background: lime; } +.\\\\:hover--8XNA4p { background: lime; } +.\\\\:hover\\\\:focus\\\\:active--EpwJWE { background: lime; } +.\\\\[attr\\\\=value\\\\]--ZTV_uO { background: lime; } +.f\\\\/o\\\\/o--3vNZZM { background: lime; } +.f\\\\\\\\o\\\\\\\\o--wNzTj3 { background: lime; } +.f\\\\*o\\\\*o--kom_Jq { background: lime; } +.f\\\\!o\\\\!o--QQGZu2 { background: lime; } +.f\\\\'o\\\\'o--00bSFC { background: lime; } +.f\\\\~o\\\\~o--26zzb- { background: lime; } +.f\\\\+o\\\\+o--J4WAkM { background: lime; } + +.foo\\\\/bar--9GWp9d { + background: hotpink; +} + +.foo\\\\\\\\bar--CCzsTj { + background: hotpink; +} + +.foo\\\\/bar\\\\/baz--MRJglc { + background: hotpink; +} + +.foo\\\\\\\\bar\\\\\\\\baz--nRgTR7 { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-6 ***! + \\\\************************************************************/ +.😀-\\\\ -test { + background: red; +} + +.😀-\\\\ -_test { + background: blue; +} + +.😀-\\\\ -className { + background: red; +} + +#😀-\\\\ -someId { + background: green; +} + +.😀-\\\\ -className .😀-\\\\ -subClass { + color: green; +} + +#😀-\\\\ -someId .😀-\\\\ -subClass { + color: blue; +} + +.😀-\\\\ --a0-34a___f { + color: red; +} + +.😀-\\\\ -m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.😀-\\\\ -B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.😀-\\\\ -\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.😀-\\\\ -1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#😀-\\\\ -\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#😀-\\\\ --a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#😀-\\\\ -© { + color: black; +} + +.😀-\\\\ -♥ { background: lime; } +.😀-\\\\ -© { background: lime; } +.😀-\\\\ -😍 { background: lime; } +.😀-\\\\ -“‘’” { background: lime; } +.😀-\\\\ -☺☃ { background: lime; } +.😀-\\\\ -⌘⌥ { background: lime; } +.😀-\\\\ -𝄞♪♩♫♬ { background: lime; } +.😀-\\\\ -💩 { background: lime; } +.😀-\\\\ -\\\\? { background: lime; } +.😀-\\\\ -\\\\@ { background: lime; } +.😀-\\\\ -\\\\. { background: lime; } +.😀-\\\\ -\\\\:\\\\) { background: lime; } +.😀-\\\\ -\\\\:\\\\\`\\\\( { background: lime; } +.😀-\\\\ -123 { background: lime; } +.😀-\\\\ -1a2b3c { background: lime; } +.😀-\\\\ -\\\\ { background: lime; } +.😀-\\\\ -\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.😀-\\\\ -\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.😀-\\\\ -\\\\# { background: lime; } +.😀-\\\\ -\\\\#\\\\# { background: lime; } +.😀-\\\\ -\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.😀-\\\\ -_ { background: lime; } +.😀-\\\\ -\\\\{\\\\} { background: lime; } +.😀-\\\\ -\\\\#fake-id { background: lime; } +.😀-\\\\ -foo\\\\.bar { background: lime; } +.😀-\\\\ -\\\\:hover { background: lime; } +.😀-\\\\ -\\\\:hover\\\\:focus\\\\:active { background: lime; } +.😀-\\\\ -\\\\[attr\\\\=value\\\\] { background: lime; } +.😀-\\\\ -f\\\\/o\\\\/o { background: lime; } +.😀-\\\\ -f\\\\\\\\o\\\\\\\\o { background: lime; } +.😀-\\\\ -f\\\\*o\\\\*o { background: lime; } +.😀-\\\\ -f\\\\!o\\\\!o { background: lime; } +.😀-\\\\ -f\\\\'o\\\\'o { background: lime; } +.😀-\\\\ -f\\\\~o\\\\~o { background: lime; } +.😀-\\\\ -f\\\\+o\\\\+o { background: lime; } + +.😀-\\\\ -foo\\\\/bar { + background: hotpink; +} + +.😀-\\\\ -foo\\\\\\\\bar { + background: hotpink; +} + +.😀-\\\\ -foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.😀-\\\\ -foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-7 ***! + \\\\************************************************************/ +.local-Ident-name\\\\.module--test--6y2MZL2dRW { + background: red; +} + +.local-Ident-name\\\\.module--_test--jkChnYaYBV { + background: blue; +} + +.local-Ident-name\\\\.module--className--HP09CfTnX1 { + background: red; +} + +#local-Ident-name\\\\.module--someId--MLaknB8z97 { + background: green; +} + +.local-Ident-name\\\\.module--className--HP09CfTnX1 .local-Ident-name\\\\.module--subClass--4o6O5CPJI6 { + color: green; +} + +#local-Ident-name\\\\.module--someId--MLaknB8z97 .local-Ident-name\\\\.module--subClass--4o6O5CPJI6 { + color: blue; +} + +.local-Ident-name\\\\.module---a0-34a___f--8SmkpM38MT { + color: red; +} + +.local-Ident-name\\\\.module--m_x_\\\\@--hTokNmWv2C { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name\\\\.module--B\\\\&W\\\\?--2nDwDstWPk { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--XFoJZOBwb2 { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name\\\\.module--1a2b3c--27Ol2f1A5B { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name\\\\.module--\\\\#fake-id--aoLUns9FUw { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name\\\\.module---a-b-c---spF-wFF3ki { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name\\\\.module--©--8qkLiWtfe0 { + color: black; +} + +.local-Ident-name\\\\.module--♥--44uxusx5VU { background: lime; } +.local-Ident-name\\\\.module--©--8qkLiWtfe0 { background: lime; } +.local-Ident-name\\\\.module--😍--ZFvdqtu3qG { background: lime; } +.local-Ident-name\\\\.module--“‘’”--o0Ra2DG0ZC { background: lime; } +.local-Ident-name\\\\.module--☺☃--DnbMOfd6eV { background: lime; } +.local-Ident-name\\\\.module--⌘⌥--S6bOlCWVBp { background: lime; } +.local-Ident-name\\\\.module--𝄞♪♩♫♬--BSgrxZWBoa { background: lime; } +.local-Ident-name\\\\.module--💩--IYSuXUnVFH { background: lime; } +.local-Ident-name\\\\.module--\\\\?--iQGuBSRyn5 { background: lime; } +.local-Ident-name\\\\.module--\\\\@--rXUc81UfOs { background: lime; } +.local-Ident-name\\\\.module--\\\\.--TYgwrPPlce { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\)--8IGwE2kP5T { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--XFoJZOBwb2 { background: lime; } +.local-Ident-name\\\\.module--123--dRCMetfS4k { background: lime; } +.local-Ident-name\\\\.module--1a2b3c--27Ol2f1A5B { background: lime; } +.local-Ident-name\\\\.module--\\\\--VleHaJt0jW { background: lime; } +.local-Ident-name\\\\.module--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--efv0wrKauZ { background: lime; } +.local-Ident-name\\\\.module--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--SjgB1SBFzx { background: lime; } +.local-Ident-name\\\\.module--\\\\#--CUiuWNpacN { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\#--CU4LyzXr4m { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\.\\\\#\\\\.\\\\#---k23lpEMg- { background: lime; } +.local-Ident-name\\\\.module--_--O587A_Y16h { background: lime; } +.local-Ident-name\\\\.module--\\\\{\\\\}--KmrFboxFIk { background: lime; } +.local-Ident-name\\\\.module--\\\\#fake-id--aoLUns9FUw { background: lime; } +.local-Ident-name\\\\.module--foo\\\\.bar--ekmt08iOcx { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover--gj5dKEVBLV { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover\\\\:focus\\\\:active--MF6oOllQUU { background: lime; } +.local-Ident-name\\\\.module--\\\\[attr\\\\=value\\\\]--pVXs1yvO-c { background: lime; } +.local-Ident-name\\\\.module--f\\\\/o\\\\/o--IfM4TmY7KJ { background: lime; } +.local-Ident-name\\\\.module--f\\\\\\\\o\\\\\\\\o--smRz6NSna2 { background: lime; } +.local-Ident-name\\\\.module--f\\\\*o\\\\*o--i7809YiNmT { background: lime; } +.local-Ident-name\\\\.module--f\\\\!o\\\\!o--piVwcUXcCA { background: lime; } +.local-Ident-name\\\\.module--f\\\\'o\\\\'o--_4GqKKgPVD { background: lime; } +.local-Ident-name\\\\.module--f\\\\~o\\\\~o--zcYow3hnn9 { background: lime; } +.local-Ident-name\\\\.module--f\\\\+o\\\\+o--22BN9FvSaj { background: lime; } + +.local-Ident-name\\\\.module--foo\\\\/bar--pmM_pDdiuz { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar--37QAOKIbi2 { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\/bar\\\\/baz--OHGMWfcvMx { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar\\\\\\\\baz--zz8kivuxZ6 { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-8 ***! + \\\\************************************************************/ +.local-Ident-name\\\\.module--test--_SesvC { + background: red; +} + +.local-Ident-name\\\\.module--_test--IFXC8J { + background: blue; +} + +.local-Ident-name\\\\.module--className--Gf2qKu { + background: red; +} + +#local-Ident-name\\\\.module--someId--hSsSyu { + background: green; +} + +.local-Ident-name\\\\.module--className--Gf2qKu .local-Ident-name\\\\.module--subClass--rJLSP7 { + color: green; +} + +#local-Ident-name\\\\.module--someId--hSsSyu .local-Ident-name\\\\.module--subClass--rJLSP7 { + color: blue; +} + +.local-Ident-name\\\\.module---a0-34a___f--j4G6AV { + color: red; +} + +.local-Ident-name\\\\.module--m_x_\\\\@--j3M2wy { + margin-left: auto !important; + margin-right: auto !important; +} + +.local-Ident-name\\\\.module--B\\\\&W\\\\?--Cx7Xfj { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--PKfNRg { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.local-Ident-name\\\\.module--1a2b3c--Prq2-n { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#local-Ident-name\\\\.module--\\\\#fake-id--Tf_LXF { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#local-Ident-name\\\\.module---a-b-c---baJWIK { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#local-Ident-name\\\\.module--©--if7zkU { + color: black; +} + +.local-Ident-name\\\\.module--♥--Wquu8v { background: lime; } +.local-Ident-name\\\\.module--©--if7zkU { background: lime; } +.local-Ident-name\\\\.module--😍--vXWvMf { background: lime; } +.local-Ident-name\\\\.module--“‘’”--zEDyfZ { background: lime; } +.local-Ident-name\\\\.module--☺☃--DzDnMo { background: lime; } +.local-Ident-name\\\\.module--⌘⌥--VM04KP { background: lime; } +.local-Ident-name\\\\.module--𝄞♪♩♫♬--qoKZGt { background: lime; } +.local-Ident-name\\\\.module--💩--Wmv5n7 { background: lime; } +.local-Ident-name\\\\.module--\\\\?--cFxilG { background: lime; } +.local-Ident-name\\\\.module--\\\\@--RJiOrO { background: lime; } +.local-Ident-name\\\\.module--\\\\.--v7SGE3 { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\)--stxQmr { background: lime; } +.local-Ident-name\\\\.module--\\\\:\\\\\`\\\\(--PKfNRg { background: lime; } +.local-Ident-name\\\\.module--123--FPfb_a { background: lime; } +.local-Ident-name\\\\.module--1a2b3c--Prq2-n { background: lime; } +.local-Ident-name\\\\.module--\\\\--Lzbt_f { background: lime; } +.local-Ident-name\\\\.module--\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>--bH0ZRJ { background: lime; } +.local-Ident-name\\\\.module--\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.--G9OqS6 { background: lime; } +.local-Ident-name\\\\.module--\\\\#--H4xWOk { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\#--qmWu4j { background: lime; } +.local-Ident-name\\\\.module--\\\\#\\\\.\\\\#\\\\.\\\\#--jTAz29 { background: lime; } +.local-Ident-name\\\\.module--_--jZA8cH { background: lime; } +.local-Ident-name\\\\.module--\\\\{\\\\}--rC8he6 { background: lime; } +.local-Ident-name\\\\.module--\\\\#fake-id--Tf_LXF { background: lime; } +.local-Ident-name\\\\.module--foo\\\\.bar--_-hir3 { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover--7J6Ovy { background: lime; } +.local-Ident-name\\\\.module--\\\\:hover\\\\:focus\\\\:active--N6KkcF { background: lime; } +.local-Ident-name\\\\.module--\\\\[attr\\\\=value\\\\]--_X7r6s { background: lime; } +.local-Ident-name\\\\.module--f\\\\/o\\\\/o--TnGHtD { background: lime; } +.local-Ident-name\\\\.module--f\\\\\\\\o\\\\\\\\o--zZG-0O { background: lime; } +.local-Ident-name\\\\.module--f\\\\*o\\\\*o--US0RYV { background: lime; } +.local-Ident-name\\\\.module--f\\\\!o\\\\!o--IQSVKY { background: lime; } +.local-Ident-name\\\\.module--f\\\\'o\\\\'o--Jke6Ar { background: lime; } +.local-Ident-name\\\\.module--f\\\\~o\\\\~o--wi3S5B { background: lime; } +.local-Ident-name\\\\.module--f\\\\+o\\\\+o--JZ_ZYM { background: lime; } + +.local-Ident-name\\\\.module--foo\\\\/bar--LMZK6C { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar--qVBL0b { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\/bar\\\\/baz--44CiTQ { + background: hotpink; +} + +.local-Ident-name\\\\.module--foo\\\\\\\\bar\\\\\\\\baz--aiT34M { + background: hotpink; +} + +/*!************************************************************!*\\\\ + !*** css ./local-Ident-name.module.css?local-ident-name-9 ***! + \\\\************************************************************/ +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---test---PboabM-postfix { + background: red; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---_test---RdGpUF-postfix { + background: blue; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---className---Rbuqv6-postfix { + background: red; +} + +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---someId---rz34Z--postfix { + background: green; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---className---Rbuqv6-postfix .prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---subClass---KZbh3P-postfix { + color: green; +} + +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---someId---rz34Z--postfix .prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---subClass---KZbh3P-postfix { + color: blue; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9----a0-34a___f---VQNZfx-postfix { + color: red; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---m_x_\\\\@---0FTqJc-postfix { + margin-left: auto !important; + margin-right: auto !important; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---B\\\\&W\\\\?---pAfmJZ-postfix { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:\\\\\`\\\\(---w0y-3T-postfix { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---1a2b3c---8RwOZv-postfix { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#fake-id---0ySTTy-postfix { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9----a-b-c----hDXrIM-postfix { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---©---l15bLc-postfix { + color: black; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---♥---J7fhlX-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---©---l15bLc-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---😍---JD7n4W-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---“‘’”---Jk8q45-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---☺☃---PSP-1Q-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---⌘⌥---WgMb99-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---𝄞♪♩♫♬---a1kviT-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---💩---Y7HlBo-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\?---8rRplk-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\@---LKRCz--postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\.---XxpCFm-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:\\\\)---tpNOM_-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:\\\\\`\\\\(---w0y-3T-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---123---29k572-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---1a2b3c---8RwOZv-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\---T4r2DZ-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\>---DV-Ytr-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\.---I2RCq8-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#---qicdNs-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#\\\\#---7LLFg7-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#\\\\.\\\\#\\\\.\\\\#---tkYIvY-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---_---UdFsE6-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\{\\\\}---cEk0mR-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\#fake-id---0ySTTy-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\.bar---d2rdEE-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:hover---p-SVOd-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\:hover\\\\:focus\\\\:active---7ppzcn-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---\\\\[attr\\\\=value\\\\]---uMrr4n-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\/o\\\\/o---kXNiKY-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\\\\\o\\\\\\\\o---fLLGuT-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\*o\\\\*o---fF4DcX-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\!o\\\\!o---XqT8S3-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\'o\\\\'o---BxXL6g-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\~o\\\\~o---SPRjm3-postfix { background: lime; } +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---f\\\\+o\\\\+o---F93mpm-postfix { background: lime; } + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\/bar---uZ8i8d-postfix { + background: hotpink; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\\\\\bar---pozdkJ-postfix { + background: hotpink; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\/bar\\\\/baz---zWw2aH-postfix { + background: hotpink; +} + +.prefix-\\\\.\\\\/local-Ident-name\\\\.module\\\\.css\\\\?local-ident-name-9---foo\\\\\\\\bar\\\\\\\\baz---C9LnZz-postfix { + background: hotpink; +} + +/*!*************************!*\\\\ + !*** css ./order-1.css ***! + \\\\*************************/ +.order-1_css-order-1 { + color: red; +} + +.order-1_css-order-1-1 { + color: aliceblue; +} + +/*!*************************!*\\\\ + !*** css ./order-2.css ***! + \\\\*************************/ +.order-2_css-order-2 { + color: blue; +} + +.order-2_css-order-2-2 { + color: azure; +} + +/*!******************************!*\\\\ + !*** css ./order.module.css ***! + \\\\******************************/ +.order_module_css-simple { + display: block; + } + +.order_module_css-simple-other { + display: inline; + } + + +/*!************************!*\\\\ + !*** css ./button.css ***! + \\\\************************/ +.button_css-button { + border: none; + padding: 7px 15px; + cursor: pointer; +} + +/*!********************************!*\\\\ + !*** css ./primary-button.css ***! + \\\\********************************/ +.primary-button_css-primaryButton { + background-color: blue; + color: white; +} + +/*!**********************************!*\\\\ + !*** css ./secondary-button.css ***! + \\\\**********************************/ +.secondary-button_css-secondaryButton +{ + background-color: #555; + color: white; +} + +/*!******************************!*\\\\ + !*** css ./dedup.module.css ***! + \\\\******************************/ +.dedup_module_css-nextButton { + } + +.dedup_module_css-backButton { + } + + +/*!**********************!*\\\\ + !*** css ./foo.less ***! + \\\\**********************/ +.foo_less-foo { + color: red; +} + +/*!*******************************************!*\\\\ + !*** css ./composes-from-less.module.css ***! + \\\\*******************************************/ +.composes-from-less_module_css-bar { + } + +/*!*****************************************!*\\\\ + !*** css ./node_modules/test/index.css ***! + \\\\*****************************************/ + + + +.node_modules_test_index_css-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./tilde.module.css ***! + \\\\******************************/ + + + +.tilde_module_css-className { + color: #000; + background: #fff; +} + + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ +/* Tests from css-loader */ + +/* should work with the \`default\` class and with named export */ +.classes_module_css_884d-default { + background: red +} + + +/* should work with the \`module\` class and with named export */ +.classes_module_css_884d-module { + background: red +} + +/*!*****************************!*\\\\ + !*** css ./icss.module.css ***! + \\\\*****************************/ + + + + + + + + +.icss_module_css-className { + color: classes_module_css_884d-module; +} + + + +", +] +`; diff --git a/test/configCases/css/css-loader/alias-1.css b/test/configCases/css/css-loader/alias-1.css new file mode 100644 index 00000000000..80cba29a3ec --- /dev/null +++ b/test/configCases/css/css-loader/alias-1.css @@ -0,0 +1,7 @@ +.imported-alias-2 { + background: red; +} + +.imported-alias-3 { + background: red; +} diff --git a/test/configCases/css/css-loader/alias.css b/test/configCases/css/css-loader/alias.css new file mode 100644 index 00000000000..a09f6378d3b --- /dev/null +++ b/test/configCases/css/css-loader/alias.css @@ -0,0 +1,3 @@ +.imported-alias { + display: table; +} diff --git a/test/configCases/css/css-loader/animation-name.module.css b/test/configCases/css/css-loader/animation-name.module.css new file mode 100644 index 00000000000..24a7f13b8b3 --- /dev/null +++ b/test/configCases/css/css-loader/animation-name.module.css @@ -0,0 +1,20 @@ +.a { + animation: 3s animationName; +} + +.b { + animation: animationName 3s; +} + +.c { + animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} diff --git a/test/configCases/css/css-loader/at-sign-in-package-name.module.css b/test/configCases/css/css-loader/at-sign-in-package-name.module.css new file mode 100644 index 00000000000..5a0dc4fe185 --- /dev/null +++ b/test/configCases/css/css-loader/at-sign-in-package-name.module.css @@ -0,0 +1,6 @@ +@import "@foo/package/style.module.css"; +@import "foo/package/style.module.css"; + +.myClass { + color: red; +} diff --git a/test/configCases/css/css-loader/basic.module.css b/test/configCases/css/css-loader/basic.module.css new file mode 100644 index 00000000000..ee3347e619b --- /dev/null +++ b/test/configCases/css/css-loader/basic.module.css @@ -0,0 +1,146 @@ +.class-1, .class-10 .bar-1 { + color: green; +} + + +@keyframes slide-right { + 0% { + transform: translateX(-100%); + opacity: 0; + } + 100% { + transform: translateX(0); + opacity: 1; + } +} + +a { + animation: slide-right 300ms forwards ease-out, fade-in 300ms forwards ease-out; +} + +:local(.c1/*.c2*/.c3) { background: red; } + +:local(.c1) { a: 1; } +:local(.c2) { composes: c1; b: 1; } + +.a { + color: green; +} + +@keyframes bounce { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 5% { + transform: translateY(-100%); + opacity: 0; + } +} + +@-webkit-keyframes bounce2 { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 5% { + transform: translateY(-100%); + opacity: 0; + } +} + +.bounce { + animation-name: bounce; + animation: bounce2 1s ease; +} + +.bounce2 { + color: green; + animation: bounce 1s ease; + animation-name: bounce2; +} + +.bounce3 { + animation: bounce 1s ease, bounce2 +} + +.bounce4 { + animation: bounce 1s ease, bounce2; +} + +.b { + color: green; +} + +@-webkit-keyframes \@bounce { + 0%, 100% { + transform: translateY(-25%); + -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +@keyframes \@bounce { + 0%, 100% { + transform: translateY(-25%); + -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); + animation-timing-function: cubic-bezier(0.8,0,1,1); + } + + 50% { + transform: none; + -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); + animation-timing-function: cubic-bezier(0,0,0.2,1); + } +} + +.container { + -webkit-animation: \@bounce 1s infinite; + animation: \@bounce 1s infinite; +} + +.abc :local(.def) { + color: red; +} + +:local .ghi .jkl { + color: blue; +} + +:local(.className) { background: red; } +:local(#someId) { background: green; } +:local(.className .subClass) { color: green; } +:local(#someId .subClass) { color: blue; } + +:local(.abc) { + color: red; +} +:local(.def) { + composes: abc; + background: green; +} + +:local(.c1[data-attr=".c2)]'"]:not(.c3):not(.c4)) { + background: red; +} + +.c1 :local .c2 .c3 :global .c4 :local .c5, .c6 :local .c7 { background: red; } +.c8 { background: red; } + +.a .b, .c .d, #id { + color: green; + font-size: 1.5pt; +} +a[href="#b.c"].x.y { + color: green; + font-size: 1.5pt; +} +@keyframes q { + 2.5% {color: green;} +} diff --git a/test/configCases/css/css-loader/button.css b/test/configCases/css/css-loader/button.css new file mode 100644 index 00000000000..1e361e0e91e --- /dev/null +++ b/test/configCases/css/css-loader/button.css @@ -0,0 +1,5 @@ +.button { + border: none; + padding: 7px 15px; + cursor: pointer; +} diff --git a/test/configCases/css/css-loader/classes.module.css b/test/configCases/css/css-loader/classes.module.css new file mode 100644 index 00000000000..9431aec73cf --- /dev/null +++ b/test/configCases/css/css-loader/classes.module.css @@ -0,0 +1,12 @@ +/* Tests from css-loader */ + +/* should work with the `default` class and with named export */ +.default { + background: red +} + + +/* should work with the `module` class and with named export */ +.module { + background: red +} diff --git a/test/configCases/css/css-loader/composes-from-less.module.css b/test/configCases/css/css-loader/composes-from-less.module.css new file mode 100644 index 00000000000..24835bccc16 --- /dev/null +++ b/test/configCases/css/css-loader/composes-from-less.module.css @@ -0,0 +1,3 @@ +.bar { + composes: foo from "./foo.less"; +} diff --git a/test/configCases/css/css-loader/composes-global.module.css b/test/configCases/css/css-loader/composes-global.module.css new file mode 100644 index 00000000000..1700cf0140d --- /dev/null +++ b/test/configCases/css/css-loader/composes-global.module.css @@ -0,0 +1,13 @@ +:global(.global-class) { + color: red; +} + +:global(.other-global-class) { + color: red; +} + +.otherClassName { + composes: global-class from global; + composes: other-global-class from global; + color: blue; +} diff --git a/test/configCases/css/css-loader/composes-multiple.module.css b/test/configCases/css/css-loader/composes-multiple.module.css new file mode 100644 index 00000000000..5c9e65f5a9f --- /dev/null +++ b/test/configCases/css/css-loader/composes-multiple.module.css @@ -0,0 +1,39 @@ +.other-class { + color: red; +} + +.class-1 { + color: blue; +} + +.class-2 { + color: blue; +} + +:global(.global-class) { + padding: 10px; +} + +:global(.global-class-1) { + padding: 10px; +} + +:global(.global-class-2) { + padding: 10px; +} + +.class { + composes: + other-class, + class-1 class-2, + imported-alias from './alias.css', + imported-alias-2 imported-alias-3 from './alias-1.css', + global-class from global, + global-class-1 global-class-2 from global; + color: gainsboro; +} + +.class-other { + composes: other-class class-1; +} + diff --git a/test/configCases/css/css-loader/dedup.module.css b/test/configCases/css/css-loader/dedup.module.css new file mode 100644 index 00000000000..0cbddfa7ac1 --- /dev/null +++ b/test/configCases/css/css-loader/dedup.module.css @@ -0,0 +1,8 @@ +.nextButton { + composes:primaryButton from './primary-button.css'; +} + +.backButton { + composes:secondaryButton from './secondary-button.css'; +} + diff --git a/test/configCases/css/css-loader/foo.less b/test/configCases/css/css-loader/foo.less new file mode 100644 index 00000000000..a15c877ac01 --- /dev/null +++ b/test/configCases/css/css-loader/foo.less @@ -0,0 +1,3 @@ +.foo { + color: red; +} diff --git a/test/configCases/css/css-loader/icss.module.css b/test/configCases/css/css-loader/icss.module.css new file mode 100644 index 00000000000..49671eadfd4 --- /dev/null +++ b/test/configCases/css/css-loader/icss.module.css @@ -0,0 +1,44 @@ +:export { + _test: _test; + _test: _right_value; +} + +:export { + _test_other: _test; +} + +:export { + _test_other: _right_value; +} + +:export {} + +:import("./classes.module.css") {} + +:export { + _the_same_name: _the_same_name +} + +:export { + constructor: constructor; + toString: toString; +} + +:import("./classes.module.css") { + IMPORTED_NAME: module; +} + +.className { + color: IMPORTED_NAME; +} + +:export { + reexport: IMPORTED_NAME +} + +:export { + _test1: 1; + _test2: 'string'; + _test3: 1px 2px 3px; + _test4: 1px 2px 3px, 1px 2px 3px; +} diff --git a/test/configCases/css/css-loader/index.js b/test/configCases/css/css-loader/index.js new file mode 100644 index 00000000000..10e334f6b14 --- /dev/null +++ b/test/configCases/css/css-loader/index.js @@ -0,0 +1,62 @@ +import * as basic from "./basic.module.css"; +import * as styles from "./classes.module.css"; +import * as styles1 from "./composes-multiple.module.css"; +import * as styles3 from "./composes-global.module.css"; +import * as styles4 from "./scope-at-rule.module.css"; +import * as styles5 from "./nesting.module.css"; +import * as styles6 from "./prefer-relative.module.css"; +import * as styles7 from "./animation-name.module.css"; +import * as styles8 from "./at-sign-in-package-name.module.css"; +import * as styles9 from "./resolving-from-node_modules.module.css"; +import * as styles10 from "./local-Ident-name.module.css"; +import * as styles11 from "./local-Ident-name.module.css?local-ident-name-1"; +import * as styles12 from "./local-Ident-name.module.css?local-ident-name-2"; +import * as styles13 from "./local-Ident-name.module.css?local-ident-name-3"; +import * as styles14 from "./local-Ident-name.module.css?local-ident-name-4"; +import * as styles15 from "./local-Ident-name.module.css?local-ident-name-5"; +import * as styles16 from "./local-Ident-name.module.css?local-ident-name-6"; +import * as styles17 from "./local-Ident-name.module.css?local-ident-name-7"; +import * as styles18 from "./local-Ident-name.module.css?local-ident-name-8"; +import * as styles19 from "./local-Ident-name.module.css?local-ident-name-9"; +import * as styles20 from "./order.module.css"; +import * as styles21 from "./dedup.module.css"; +import * as styles22 from "./composes-from-less.module.css"; +import * as styles23 from "./tilde.module.css"; +import * as styles24 from "./icss.module.css"; + +it("should work", () => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(basic).toMatchSnapshot(); + expect(styles).toMatchSnapshot(); + expect(styles1).toMatchSnapshot(); + expect(styles3).toMatchSnapshot(); + expect(styles4).toMatchSnapshot(); + expect(styles5).toMatchSnapshot(); + expect(styles6).toMatchSnapshot(); + expect(styles7).toMatchSnapshot(); + expect(styles8).toMatchSnapshot(); + expect(styles9).toMatchSnapshot(); + expect(styles10).toMatchSnapshot(); + expect(styles11).toMatchSnapshot(); + expect(styles12).toMatchSnapshot(); + expect(styles13).toMatchSnapshot(); + expect(styles14).toMatchSnapshot(); + expect(styles15).toMatchSnapshot(); + expect(styles16).toMatchSnapshot(); + expect(styles17).toMatchSnapshot(); + expect(styles18).toMatchSnapshot(); + expect(styles19).toMatchSnapshot(); + expect(styles20).toMatchSnapshot(); + expect(styles21).toMatchSnapshot(); + expect(styles22).toMatchSnapshot(); + expect(styles23).toMatchSnapshot(); + expect(styles24).toMatchSnapshot(); + expect(css).toMatchSnapshot(); +}); diff --git a/test/configCases/css/css-loader/local-Ident-name.module.css b/test/configCases/css/css-loader/local-Ident-name.module.css new file mode 100644 index 00000000000..aea057654a2 --- /dev/null +++ b/test/configCases/css/css-loader/local-Ident-name.module.css @@ -0,0 +1,114 @@ +.test { + background: red; +} + +._test { + background: blue; +} + +.className { + background: red; +} + +#someId { + background: green; +} + +.className .subClass { + color: green; +} + +#someId .subClass { + color: blue; +} + +.-a0-34a___f { + color: red; +} + +.m_x_\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.B\&W\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=":`(" */ +.\3A \`\( { + color: aqua; +} + +/* matches elements with class="1a2b3c" */ +.\31 a2b3c { + color: aliceblue; +} + +/* matches the element with id="#fake-id" */ +#\#fake-id { + color: antiquewhite; +} + +/* matches the element with id="-a-b-c-" */ +#-a-b-c- { + color: azure; +} + +/* matches the element with id="©" */ +#© { + color: black; +} + +.♥ { background: lime; } +.© { background: lime; } +.😍 { background: lime; } +.“‘’” { background: lime; } +.☺☃ { background: lime; } +.⌘⌥ { background: lime; } +.𝄞♪♩♫♬ { background: lime; } +.💩 { background: lime; } +.\? { background: lime; } +.\@ { background: lime; } +.\. { background: lime; } +.\3A \) { background: lime; } +.\3A \`\( { background: lime; } +.\31 23 { background: lime; } +.\31 a2b3c { background: lime; } +.\ { background: lime; } +.\<\>\<\<\<\>\>\<\> { background: lime; } +.\+\+\+\+\+\+\+\+\+\+\[\>\+\+\+\+\+\+\+\>\+\+\+\+\+\+\+\+\+\+\>\+\+\+\>\+\<\<\<\<\-\]\>\+\+\.\>\+\.\+\+\+\+\+\+\+\.\.\+\+\+\.\>\+\+\.\<\<\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\.\>\.\+\+\+\.\-\-\-\-\-\-\.\-\-\-\-\-\-\-\-\.\>\+\.\>\. { background: lime; } +.\# { background: lime; } +.\#\# { background: lime; } +.\#\.\#\.\# { background: lime; } +.\_ { background: lime; } +.\{\} { background: lime; } +.\#fake\-id { background: lime; } +.foo\.bar { background: lime; } +.\3A hover { background: lime; } +.\3A hover\3A focus\3A active { background: lime; } +.\[attr\=value\] { background: lime; } +.f\/o\/o { background: lime; } +.f\\o\\o { background: lime; } +.f\*o\*o { background: lime; } +.f\!o\!o { background: lime; } +.f\'o\'o { background: lime; } +.f\~o\~o { background: lime; } +.f\+o\+o { background: lime; } + +.foo\/bar { + background: hotpink; +} + +.foo\\bar { + background: hotpink; +} + +.foo\/bar\/baz { + background: hotpink; +} + +.foo\\bar\\baz { + background: hotpink; +} diff --git a/test/configCases/css/css-loader/nesting.module.css b/test/configCases/css/css-loader/nesting.module.css new file mode 100644 index 00000000000..39e19697486 --- /dev/null +++ b/test/configCases/css/css-loader/nesting.module.css @@ -0,0 +1,82 @@ +.notice { + width: 90%; + justify-content: center; + border-radius: 1rem; + border: black solid 2px; + background-color: #ffc107; + color: black; + padding: 1rem; + + .notice-heading:before { + /* equivalent to `.notice .notice-heading:before` */ + content: "ℹ︎ "; + } + + &.warning { + /* equivalent to `.notice.warning` */ + background-color: #d81b60; + border-color: #d81b60; + color: white; + .warning-heading:before { + /* equivalent to `.notice.warning .warning-heading:before` */ + content: "! "; + } + } + + &.success { + /* equivalent to `.notice.success` */ + background-color: #004d40; + border-color: #004d40; + color: white; + + .success-heading:before { + /* equivalent to `.notice.success .success-heading:before` */ + content: "✓ "; + } + } +} + +.foo { + color: red; +} + +.bar { + composes: foo; + + &.baz { + color: blue; + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + & { + grid-auto-flow: column; + } + } +} + +@media (orientation: landscape) { + .a { + color: red; + } +} + +@media (orientation: landscape) { + @media (orientation: landscape) { + .b { + color: red; + composes: a; + } + } +} + +.n { + composes: a; + + @media (orientation: landscape) { + color: red; + } +} diff --git a/test/configCases/css/css-loader/node_modules/@foo/package/style.module.css b/test/configCases/css/css-loader/node_modules/@foo/package/style.module.css new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/@foo/package/style.module.css @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/css/css-loader/node_modules/@localpackage/color.css b/test/configCases/css/css-loader/node_modules/@localpackage/color.css new file mode 100644 index 00000000000..7ae91afb3fd --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/@localpackage/color.css @@ -0,0 +1 @@ +@value color-grey: gray; diff --git a/test/configCases/css/css-loader/node_modules/@localpackage/style.css b/test/configCases/css/css-loader/node_modules/@localpackage/style.css new file mode 100644 index 00000000000..942712b3812 --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/@localpackage/style.css @@ -0,0 +1,6 @@ +.type-heading { + color: red; + composes: type-heading2 from "../@otherlocalpackage/style.css"; + margin: 0; + padding: 0; +} diff --git a/test/configCases/css/css-loader/node_modules/@otherlocalpackage/style.css b/test/configCases/css/css-loader/node_modules/@otherlocalpackage/style.css new file mode 100644 index 00000000000..1567804b4e5 --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/@otherlocalpackage/style.css @@ -0,0 +1,3 @@ +.type-heading2 { + display: flex; +} diff --git a/test/configCases/css/css-loader/node_modules/foo/package/style.module.css b/test/configCases/css/css-loader/node_modules/foo/package/style.module.css new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/foo/package/style.module.css @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/css/css-loader/node_modules/package/two.css b/test/configCases/css/css-loader/node_modules/package/two.css new file mode 100644 index 00000000000..cde82d3326b --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/package/two.css @@ -0,0 +1,3 @@ +.imported-relative { + display: inline; +} diff --git a/test/configCases/css/css-loader/node_modules/test/index.css b/test/configCases/css/css-loader/node_modules/test/index.css new file mode 100644 index 00000000000..9912fb01f61 --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/test/index.css @@ -0,0 +1,6 @@ +@value foo: #000; +@value bar: #fff; + +.class { + color: red; +} diff --git a/test/configCases/css/css-loader/node_modules/test/package.json b/test/configCases/css/css-loader/node_modules/test/package.json new file mode 100644 index 00000000000..351eccdbfb1 --- /dev/null +++ b/test/configCases/css/css-loader/node_modules/test/package.json @@ -0,0 +1,6 @@ +{ + "name": "test", + "version": "1.0.0", + "description": "description", + "main": "./index.css" +} diff --git a/test/configCases/css/css-loader/order-1.css b/test/configCases/css/css-loader/order-1.css new file mode 100644 index 00000000000..a215a5be948 --- /dev/null +++ b/test/configCases/css/css-loader/order-1.css @@ -0,0 +1,7 @@ +.order-1 { + color: red; +} + +.order-1-1 { + color: aliceblue; +} diff --git a/test/configCases/css/css-loader/order-2.css b/test/configCases/css/css-loader/order-2.css new file mode 100644 index 00000000000..0c18d6bfb79 --- /dev/null +++ b/test/configCases/css/css-loader/order-2.css @@ -0,0 +1,7 @@ +.order-2 { + color: blue; +} + +.order-2-2 { + color: azure; +} diff --git a/test/configCases/css/css-loader/order.module.css b/test/configCases/css/css-loader/order.module.css new file mode 100644 index 00000000000..d4b7e2bd4ac --- /dev/null +++ b/test/configCases/css/css-loader/order.module.css @@ -0,0 +1,13 @@ +.simple { + display: block; + composes: order-1 from './order-1.css'; + composes: order-2 from './order-2.css'; + composes: order-1-1 from './order-1.css'; + composes: order-2-2 from './order-2.css'; +} + +.simple-other { + display: inline; + composes: order-1 from './order-1.css'; +} + diff --git a/test/configCases/css/css-loader/package/one.css b/test/configCases/css/css-loader/package/one.css new file mode 100644 index 00000000000..4459531856a --- /dev/null +++ b/test/configCases/css/css-loader/package/one.css @@ -0,0 +1,3 @@ +.imported-relative { + display: block; +} diff --git a/test/configCases/css/css-loader/prefer-relative.module.css b/test/configCases/css/css-loader/prefer-relative.module.css new file mode 100644 index 00000000000..831f5f0004e --- /dev/null +++ b/test/configCases/css/css-loader/prefer-relative.module.css @@ -0,0 +1,9 @@ +.one { + color: yellow; + composes: imported-relative from 'package/one.css'; +} + +.two { + color: yellow; + composes: imported-relative from 'package/two.css'; +} diff --git a/test/configCases/css/css-loader/primary-button.css b/test/configCases/css/css-loader/primary-button.css new file mode 100644 index 00000000000..d781f583fc7 --- /dev/null +++ b/test/configCases/css/css-loader/primary-button.css @@ -0,0 +1,5 @@ +.primaryButton { + composes: button from './button.css'; + background-color: blue; + color: white; +} diff --git a/test/configCases/css/css-loader/remove-source-map-url-loader.js b/test/configCases/css/css-loader/remove-source-map-url-loader.js new file mode 100644 index 00000000000..088e5941693 --- /dev/null +++ b/test/configCases/css/css-loader/remove-source-map-url-loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader(content) { + return content.replace(/\/[*/][#]?\s*sourceMappingURL=.+(\*\/)?/g, ""); +}; diff --git a/test/configCases/css/css-loader/resolving-from-node_modules.module.css b/test/configCases/css/css-loader/resolving-from-node_modules.module.css new file mode 100644 index 00000000000..4df75268288 --- /dev/null +++ b/test/configCases/css/css-loader/resolving-from-node_modules.module.css @@ -0,0 +1,8 @@ +@value color-grey from "./node_modules/@localpackage/color.css"; + +.copyright { + color: color-grey; + composes: type-heading from "./node_modules/@localpackage/style.css"; + margin: 0; + padding: 0; +} diff --git a/test/configCases/css/css-loader/scope-at-rule.module.css b/test/configCases/css/css-loader/scope-at-rule.module.css new file mode 100644 index 00000000000..faacb1778a9 --- /dev/null +++ b/test/configCases/css/css-loader/scope-at-rule.module.css @@ -0,0 +1,26 @@ +@scope (.light-scheme) { + :scope { + background-color: plum; + } + + .class-a { + color: darkmagenta; + } +} + +@scope (.dark-scheme) { + :scope { + background-color: darkmagenta; + color: antiquewhite; + } + + .class-b { + color: plum; + } +} + +@scope { + :scope { + color: red; + } +} diff --git a/test/configCases/css/css-loader/secondary-button.css b/test/configCases/css/css-loader/secondary-button.css new file mode 100644 index 00000000000..d30b2f8469d --- /dev/null +++ b/test/configCases/css/css-loader/secondary-button.css @@ -0,0 +1,6 @@ +.secondaryButton +{ + composes: button from './button.css'; + background-color: #555; + color: white; +} diff --git a/test/configCases/css/css-loader/test.config.js b/test/configCases/css/css-loader/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/css-loader/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/css-loader/tilde.module.css b/test/configCases/css/css-loader/tilde.module.css new file mode 100644 index 00000000000..0d15cdba8f4 --- /dev/null +++ b/test/configCases/css/css-loader/tilde.module.css @@ -0,0 +1,8 @@ +@value foo from '~test'; +@value bar from 'test'; + +.className { + color: foo; + background: bar; +} + diff --git a/test/configCases/css/css-loader/webpack.config.js b/test/configCases/css/css-loader/webpack.config.js new file mode 100644 index 00000000000..4b964dd2675 --- /dev/null +++ b/test/configCases/css/css-loader/webpack.config.js @@ -0,0 +1,104 @@ +"use strict"; + +const path = require("path"); + +/** @typedef {import("../../../../").PathData} PathData */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + devtool: false, + module: { + rules: [ + { + test: /\.less$/, + use: ["./remove-source-map-url-loader", "less-loader"] + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-1$/, + generator: { + // TODO do we need to support `[hash]` as `[fullhash]` here + localIdentName: "[name]--[local]--[fullhash]", + localIdentHashDigest: "base64url", + localIdentHashDigestLength: 5 + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-2$/, + generator: { + localIdentName: "-1[local]" + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-3$/, + generator: { + localIdentName: "--[local]" + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-4$/, + generator: { + localIdentName: "__[local]" + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-5$/, + generator: { + localIdentName: "[local]--[fullhash]" + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-6$/, + generator: { + localIdentName: "😀- -[local]" + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-7$/, + generator: { + localIdentName: "[name]--[local]--[fullhash]", + localIdentHashFunction: "sha256", + localIdentHashDigestLength: 10 + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-8$/, + generator: { + localIdentName: "[name]--[local]--[fullhash]", + localIdentHashFunction: "xxhash64", + localIdentHashDigestLength: 6 + } + }, + { + test: /.css$/, + resourceQuery: /\?local-ident-name-9$/, + generator: { + /** + * @param {PathData} pathData path data + * @returns {string} local ident name + */ + localIdentName: (pathData) => + `prefix-${pathData.filename}---${pathData.local}---${pathData.hash}-postfix` + } + } + ] + }, + resolve: { + alias: { + // Migration example + "~test": path.resolve(__dirname, "node_modules/test") + } + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/css-modules-hash-collision/f1/style.module.css b/test/configCases/css/css-modules-hash-collision/f1/style.module.css new file mode 100644 index 00000000000..e9d02d3ad0a --- /dev/null +++ b/test/configCases/css/css-modules-hash-collision/f1/style.module.css @@ -0,0 +1,3 @@ +.xxx { + background: green; +} diff --git a/test/configCases/css/css-modules-hash-collision/f2/style.module.css b/test/configCases/css/css-modules-hash-collision/f2/style.module.css new file mode 100644 index 00000000000..d17936c4357 --- /dev/null +++ b/test/configCases/css/css-modules-hash-collision/f2/style.module.css @@ -0,0 +1,3 @@ +.xxx { + background: red; +} diff --git a/test/configCases/css/css-modules-hash-collision/index.js b/test/configCases/css/css-modules-hash-collision/index.js new file mode 100644 index 00000000000..a7c63a1922e --- /dev/null +++ b/test/configCases/css/css-modules-hash-collision/index.js @@ -0,0 +1,8 @@ +import * as f1 from "./f1/style.module.css"; +import * as f2 from "./f2/style.module.css"; + +it("should generate unique hashed class names for same-named classes in different directories", () => { + expect(f1.xxx).toBeDefined(); + expect(f2.xxx).toBeDefined(); + expect(f1.xxx).not.toBe(f2.xxx); +}); diff --git a/test/configCases/css/css-modules-hash-collision/webpack.config.js b/test/configCases/css/css-modules-hash-collision/webpack.config.js new file mode 100644 index 00000000000..0c876dae3b7 --- /dev/null +++ b/test/configCases/css/css-modules-hash-collision/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.module\.css$/i, + type: "css/module" + } + ] + } +}; diff --git a/test/configCases/css/css-modules/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-modules/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..b514b7818f1 --- /dev/null +++ b/test/configCases/css/css-modules/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,13952 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: dev 1`] = ` +Object { + "UsedClassName": "my-app-identifiers_module_css-UsedClassName", + "VARS": "--my-app-style_module_css-LOCAL-COLOR my-app-style_module_css-VARS undefined my-app-style_module_css-globalVarsUpperCase", + "__webpack_modules__": 6, + "animation": "my-app-style_module_css-animation", + "animationName": "my-app-style_module_css-animationName", + "class": "my-app-style_module_css-class", + "classInContainer": "my-app-style_module_css-class-in-container", + "classLocalScope": "my-app-style_module_css-class-local-scope", + "classNameAfterBrokenKeyframes": "my-app-style_module_css-class-name-after-broken-keyframes", + "cssModuleWithCustomFileExtension": "my-app-style_module_my-css-myCssClass", + "currentWmultiParams": "my-app-style_module_css-local12", + "deepClassInContainer": "my-app-style_module_css-deep-class-in-container", + "displayFlexInSupportsInMediaUpperCase": "my-app-style_module_css-displayFlexInSupportsInMediaUpperCase", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "my-app-style_module_css-exportName my-app-classes_modules_css-className beforeName my-app-style_module_css-className my-app-style_module_css-classNameLocal importName secondImport my-app-classes_modules_css-otherClassName my-app-classes_modules_css-otherClassNameToo my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther className className classNameOther className classNameOther my-app-classes_modules_css-className my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName", + "exportNameOtherFromKeyword": "my-app-style_module_css-exportNameOtherFromKeyword my-app-style_module_css-from", + "exportNameOtherFromKeywordWithFrom1": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 from", + "exportNameOtherFromKeywordWithFrom2": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 my-app-classes_modules_css-from", + "exportNameOtherNoSpaces": "my-app-style_module_css-exportNameOtherNoSpaces my-app-classes_modules_css-className beforeName my-app-style_module_css-className", + "exportNameWeirdCharacters": "my-app-style_module_css-exportNameWeirdCharacters my-app-classes_modules_css-a my-app-classes_modules_css--b my-app-classes_modules_css-b- my-app-classes_modules_css---c my-app-classes_modules_css-c-- my-app-classes_modules_css-_d my-app-classes_modules_css-d%", + "futureWmultiParams": "my-app-style_module_css-local14", + "global": undefined, + "hasWmultiParams": "my-app-style_module_css-local11", + "ident": "my-app-style_module_css-ident", + "inLocalGlobalScope": "my-app-style_module_css-in-local-global-scope", + "inSupportScope": "my-app-style_module_css-inSupportScope", + "isWmultiParams": "my-app-style_module_css-local8", + "keyframes": "my-app-style_module_css-localkeyframes", + "keyframesUPPERCASE": "my-app-style_module_css-localkeyframesUPPERCASE", + "local": "my-app-style_module_css-local1 my-app-style_module_css-local2 my-app-style_module_css-local3 my-app-style_module_css-local4", + "local2": "my-app-style_module_css-local5 my-app-style_module_css-local6", + "localkeyframes2UPPPERCASE": "my-app-style_module_css-localkeyframes2UPPPERCASE", + "matchesWmultiParams": "my-app-style_module_css-local9", + "media": "my-app-style_module_css-wideScreenClass", + "mediaInSupports": "my-app-style_module_css-displayFlexInMediaInSupports", + "mediaWithOperator": "my-app-style_module_css-narrowScreenClass", + "mozAnimationName": "my-app-style_module_css-mozAnimationName", + "mozAnyWmultiParams": "my-app-style_module_css-local15", + "myColor": "--my-app-style_module_css-my-color", + "nested": "my-app-style_module_css-nested1 undefined my-app-style_module_css-nested3", + "notAValidCssModuleExtension": true, + "notWmultiParams": "my-app-style_module_css-local7", + "paddingLg": "my-app-style_module_css-padding-lg", + "paddingSm": "my-app-style_module_css-padding-sm", + "pastWmultiParams": "my-app-style_module_css-local13", + "supports": "my-app-style_module_css-displayGridInSupports", + "supportsInMedia": "my-app-style_module_css-displayFlexInSupportsInMedia", + "supportsWithOperator": "my-app-style_module_css-floatRightInNegativeSupports", + "textColor": "--my-app-style_module_css-text-color", + "vars": "--my-app-style_module_css-local-color my-app-style_module_css-vars undefined my-app-style_module_css-globalVars", + "webkitAnyWmultiParams": "my-app-style_module_css-local16", + "whereWmultiParams": "my-app-style_module_css-local10", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: dev 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.my-app-at-rule-value_module_css-value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { + &.my-app-at-rule-value_module_css-bar { color: red; } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { color: red; } + } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.my-app-at-rule-value_module_css-foo { height: 40px; height: 36px; } + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + +#my-app-at-rule-value_module_css-red { + color: red; +} + + + +.my-app-at-rule-value_module_css-red > .my-app-at-rule-value_module_css-red { + color: red; +} + + + +.red { + color: .red; +} + + + +.my-app-at-rule-value_module_css-export { + color: blue; +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } +.my-app-at-rule-value_module_css-bar { color: yellow } + + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + + +.my-app-at-rule-value_module_css-class-a { color: red; } + + + + +.my-app-at-rule-value_module_css-class-a { margin: calc(base * 2); } + + + + +.my-app-at-rule-value_module_css-class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.my-app-at-rule-value_module_css-foo { color: var(--color); } + + + + + + + +.my-app-at-rule-value_module_css-foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } +.my-app-at-rule-value_module_css-bar { color: red } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: color(red lightness(50%)); } + + + +:root { --my-app-at-rule-value_module_css-color: red; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: /* comment */; } + + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + + +.my-app-at-rule-value_module_css-class { + color: red; + color: red; + color: blue; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test *//* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +:root { --my-app-at-rule-value_module_css-color: /* + multiline + comment +*/; } + + + + +/*!*********************************************!*\\\\ + !*** css ./var-function-export.modules.css ***! + \\\\*********************************************/ +:root { + --my-app-var-function-export_modules_css-my-var-u1: red; + --my-app-var-function-export_modules_css-my-var-u2: blue; + --my-app-var-function-export_modules_css-not-override-class: black; + --my-app-var-function-export_modules_css-1: red; + --my-app-var-function-export_modules_css---a: red; + --my-app-var-function-export_modules_css-main-bg-color: red; +} + +.my-app-var-function-export_modules_css-my-var-u1 { + color: red; +} + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --my-app-var-function_module_css-main-bg-color: brown; + --my-app-var-function_module_css-my-var: red; + --my-app-var-function_module_css-my-background: blue; + --my-app-var-function_module_css-my-global: yellow; + --: \\"reserved\\"; + --my-app-var-function_module_css-a: green; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-main-bg-color); +} + +@property --my-app-var-function_module_css-logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-logo-color); +} + +div { + background-color: var(--my-app-var-function_module_css-box-color); +} + +.my-app-var-function_module_css-two { + --my-app-var-function_module_css-box-color: cornflowerblue; +} + +.my-app-var-function_module_css-three { + --my-app-var-function_module_css-box-color: aquamarine; +} + + +.my-app-var-function_module_css-one { + /* Red if --my-var is not defined */ + color: var(--my-app-var-function_module_css-my-var, red); +} + +.my-app-var-function_module_css-two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-app-var-function_module_css-my-var, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-reserved { + color: var(--); +} + +.my-app-var-function_module_css-green { + color: var(--my-app-var-function_module_css-a); +} + +.my-app-var-function_module_css-global { + color: var(--my-global); +} + +.my-app-var-function_module_css-global-and-default { + color: var(--my-global, pink); +} + +.my-app-var-function_module_css-global-and-default-1 { + color: var(--my-global, var(--my-global-background)); +} + +.my-app-var-function_module_css-global-and-default-2 { + color: var(--my-global, var(--my-global-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-3 { + color: var(--my-global, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-5 { + color: var( --my-global,var(--my-app-var-function_module_css-my-background,pink)); +} + +.my-app-var-function_module_css-global-and-default-6 { + background: var( --my-app-var-function_module_css-main-bg-color , var( --my-app-var-function_module_css-my-background , pink ) ) , var(--my-global); +} + +.my-app-var-function_module_css-global-and-default-7 { + background: var(--my-app-var-function_module_css-main-bg-color,var(--my-app-var-function_module_css-my-background,pink)),var(--my-global); +} + +.my-app-var-function_module_css-from { + color: var(--my-app-var-function-export_modules_css-my-var-u1); +} + +.my-app-var-function_module_css-from-1 { + color: var(--my-app-var-function_module_css-main-bg-color, var(--my-app-var-function-export_modules_css-my-var-u1)); +} + +.my-app-var-function_module_css-from-2 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function_module_css-main-bg-color)); +} + +.my-app-var-function_module_css-from-3 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function-export_modules_css-my-var-u2)); +} + +.my-app-var-function_module_css-from-4 { + color: var(--my-app-var-function-export_modules_css-1); +} + +.my-app-var-function_module_css-from-5 { + color: var(--my-app-var-function-export_modules_css---a); +} + +.my-app-var-function_module_css-from-6 { + color: var(--my-app-var-function-export_modules_css-main-bg-color); +} + +.my-app-var-function_module_css-mixed { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-global, var(--my-app-var-function_module_css-main-bg-color, red))); +} + +.my-app-var-function_module_css-broken { + color: var(--my-global from); +} + +.my-app-var-function_module_css-broken-1 { + color: var(--my-global from 1); +} + +:root { + --my-app-var-function_module_css-not-override-class: red; +} + +.my-app-var-function_module_css-not-override-class { + color: var(--my-app-var-function-export_modules_css-not-override-class) +} + +.my-app-var-function_module_css-theme-dark { + --my-app-var-function_module_css-text-color: #fff; + --my-app-var-function_module_css-bg-color: #333; + + .my-app-var-function_module_css-button { + --my-app-var-function_module_css-button-color: var(--my-app-var-function_module_css-text-color); + --my-app-var-function_module_css-button-bg: var(--my-app-var-function_module_css-bg-color); + color: var(--my-app-var-function_module_css-button-color); + background-color: var(--my-app-var-function_module_css-button-bg); + } +} + +.my-app-var-function_module_css-parent { + --my-app-var-function_module_css-parent-padding: 20px; + padding: var(--my-app-var-function_module_css-parent-padding); + + .my-app-var-function_module_css-child { + --my-app-var-function_module_css-child-margin: 10px; + margin-top: var(--my-app-var-function_module_css-child-margin); + padding-left: var(--my-app-var-function_module_css-parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --my-app-var-function_module_css-base-padding: 1.5rem; + --my-app-var-function_module_css-font-scale: 1.2; + } +} + +.my-app-var-function_module_css-container { + padding: var(--my-app-var-function_module_css-base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.my-app-var-function_module_css-item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--my-app-var-function_module_css-font-scale)); + margin-bottom: calc(var(--my-app-var-function_module_css-base-padding) / 2); +} + +.my-app-var-function_module_css-item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--my-app-var-function_module_css-base-padding) * 2)); +} + +.my-app-var-function_module_css-banner { + /* Locally scoped variables (pseudo-private) */ + --my-app-var-function_module_css-banner-bg: #e0f7fa; /* Default info color */ + --my-app-var-function_module_css-banner-text: #00796b; + --my-app-var-function_module_css-banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--my-app-var-function_module_css-banner-bg); + color: var(--my-app-var-function_module_css-banner-text); + border-left: 5px solid var(--my-app-var-function_module_css-banner-text); +} + +:root { + --my-app-var-function_module_css-accordion-bg: #fff; + --my-app-var-function_module_css-accordion-border: #ddd; + --my-app-var-function_module_css-accordion-text: #333; + --my-app-var-function_module_css-accordion-accent: royalblue; +} + +.my-app-var-function_module_css-accordion-container { + border: 1px solid var(--my-app-var-function_module_css-accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .my-app-var-function_module_css-accordion-item { + background: var(--my-app-var-function_module_css-accordion-bg); + color: var(--my-app-var-function_module_css-accordion-text); + border-bottom: 1px solid var(--my-app-var-function_module_css-accordion-border); + + &:last-child { + border-bottom: none; + } + + & .my-app-var-function_module_css-accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--my-app-var-function_module_css-accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.my-app-var-function_module_css-is-active { + --my-app-var-function_module_css-accordion-bg: var(--my-app-var-function_module_css-accordion-accent); /* Nested override */ + --my-app-var-function_module_css-accordion-text: #fff; /* Nested override */ + + & .my-app-var-function_module_css-accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.my-app-var-function_module_css-is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --my-app-var-function_module_css-accordion-bg: #333; + --my-app-var-function_module_css-accordion-border: #555; + --my-app-var-function_module_css-accordion-text: #eee; + --my-app-var-function_module_css-accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.my-app-var-function_module_css-media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --my-app-var-function_module_css-avatar-size: 48px; + --my-app-var-function_module_css-text-size: 1rem; + + & .my-app-var-function_module_css-avatar { + width: var(--my-app-var-function_module_css-avatar-size); + height: var(--my-app-var-function_module_css-avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .my-app-var-function_module_css-content { + font-size: var(--my-app-var-function_module_css-text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --my-app-var-function_module_css-avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --my-app-var-function_module_css-text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --my-app-var-function_module_css-primary-color: #007bff; + --my-app-var-function_module_css-text-color: var(--my-app-var-function_module_css-primary-color); /* --text-color now uses the value of --primary-color */ + --my-app-var-function_module_css-highlight-background: linear-gradient(to right, var(--my-app-var-function_module_css-primary-color), #6c757d); +} + +.my-app-var-function_module_css-element { + color: var(--my-app-var-function_module_css-text-color); + background: var(--my-app-var-function_module_css-highlight-background); +} + +/*!*********************************!*\\\\ + !*** css ./classes.modules.css ***! + \\\\*********************************/ +.my-app-classes_modules_css-className { + color: red +} + +.my-app-classes_modules_css-otherClassName { + color: green; +} + +.my-app-classes_modules_css-otherClassNameToo { + color: blue; +} + +.my-app-classes_modules_css-from { + color: yellow; +} + +.my-app-classes_modules_css-a { + color: red; +} + +.my-app-classes_modules_css--b { + color: red; +} + +.my-app-classes_modules_css-b- { + color: red; +} + +.my-app-classes_modules_css---c { + color: red; +} + +.my-app-classes_modules_css-c-- { + color: red; +} + +.my-app-classes_modules_css-_d { + color: red; +} + +.my-app-classes_modules_css-d\\\\% { + color: tan; +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --my-app-shared_css-from-shared: --my-app-shared_css-custom-shared; +} + +@color-profile --my-app-shared_css-custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-shared_css-local-my-shared-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.my-app-style_module_css-class { + color: red; +} + +.my-app-style_module_css-local1, +.my-app-style_module_css-local2 .global, +.my-app-style_module_css-local3 { + color: green; +} + +.global .my-app-style_module_css-local4 { + color: yellow; +} + +.my-app-style_module_css-local5.global.my-app-style_module_css-local6 { + color: blue; +} + +.my-app-style_module_css-local7 div:not(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local8 :is(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local10 :where(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local11 div:has(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local12 div:current(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local13 div:past(p, span) { + display: none; +} + +.my-app-style_module_css-local14 div:future(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.my-app-style_module_css-local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + color: pink; +} + +#my-app-style_module_css-ident { + color: purple; +} + +@keyframes my-app-style_module_css-localkeyframes { + 0% { + left: var(--my-app-style_module_css-pos1x); + top: var(--my-app-style_module_css-pos1y); + color: var(--my-app-style_module_css-theme-color1); + } + 100% { + left: var(--my-app-style_module_css-pos2x); + top: var(--my-app-style_module_css-pos2y); + color: var(--my-app-style_module_css-theme-color2); + } +} + +@keyframes my-app-style_module_css-localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.my-app-style_module_css-animation { + animation-name: my-app-style_module_css-localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused my-app-style_module_css-localkeyframes, my-app-style_module_css-localkeyframes2; + --my-app-style_module_css-pos1x: 0px; + --my-app-style_module_css-pos1y: 0px; + --my-app-style_module_css-pos2x: 10px; + --my-app-style_module_css-pos2y: 20px; +} + +.my-app-style_module_css-vars { + color: var(--my-app-style_module_css-local-color); + --my-app-style_module_css-local-color: red; +} + +.my-app-style_module_css-globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .my-app-style_module_css-wideScreenClass { + color: var(--my-app-style_module_css-local-color); + --my-app-style_module_css-local-color: green; + } +} + +@media screen and (max-width: 600px) { + .my-app-style_module_css-narrowScreenClass { + color: var(--my-app-style_module_css-local-color); + --my-app-style_module_css-local-color: purple; + } +} + +@supports (display: grid) { + .my-app-style_module_css-displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .my-app-style_module_css-floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .my-app-style_module_css-displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.my-app-style_module_css-animationUpperCase { + ANIMATION-NAME: my-app-style_module_css-localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused my-app-style_module_css-localkeyframesUPPERCASE, my-app-style_module_css-localkeyframes2UPPPERCASE; + --my-app-style_module_css-pos1x: 0px; + --my-app-style_module_css-pos1y: 0px; + --my-app-style_module_css-pos2x: 10px; + --my-app-style_module_css-pos2y: 20px; +} + +@KEYFRAMES my-app-style_module_css-localkeyframesUPPERCASE { + 0% { + left: VAR(--my-app-style_module_css-pos1x); + top: VAR(--my-app-style_module_css-pos1y); + color: VAR(--my-app-style_module_css-theme-color1); + } + 100% { + left: VAR(--my-app-style_module_css-pos2x); + top: VAR(--my-app-style_module_css-pos2y); + color: VAR(--my-app-style_module_css-theme-color2); + } +} + +@KEYframes my-app-style_module_css-localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .my-app-style_module_css-localUpperCase { + color: yellow; +} + +.my-app-style_module_css-VARS { + color: VAR(--my-app-style_module_css-LOCAL-COLOR); + --my-app-style_module_css-LOCAL-COLOR: red; +} + +.my-app-style_module_css-globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .my-app-style_module_css-inSupportScope { + color: red; + } +} + +.my-app-style_module_css-a { + animation: 3s my-app-style_module_css-animationName; + -webkit-animation: 3s my-app-style_module_css-animationName; +} + +.my-app-style_module_css-b { + animation: my-app-style_module_css-animationName 3s; + -webkit-animation: my-app-style_module_css-animationName 3s; +} + +.my-app-style_module_css-c { + animation-name: my-app-style_module_css-animationName; + -webkit-animation-name: my-app-style_module_css-animationName; +} + +.my-app-style_module_css-d { + --my-app-style_module_css-animation-name: animationName; +} + +@keyframes my-app-style_module_css-animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes my-app-style_module_css-animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes my-app-style_module_css-mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style my-app-style_module_css-thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-app-style_module_css-my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-app-style_module_css-my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-app-style_module_css-my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.my-app-style_module_css-class { + color: var(--my-app-style_module_css-my-color); +} + +@layer utilities { + .my-app-style_module_css-padding-sm { + padding: 0.5rem; + } + + .my-app-style_module_css-padding-lg { + padding: 0.8rem; + } +} + +.my-app-style_module_css-class { + color: red; + + .my-app-style_module_css-nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .my-app-style_module_css-nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .my-app-style_module_css-nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } + + @container my-app-style_module_css-foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } +} + +.my-app-style_module_css-not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .my-app-style_module_css-test; + unknown2: .test; + unknown3: .my-app-style_module_css-test; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +.my-app-style_module_css-nested-var { + .my-app-style_module_css-again { + color: var(--my-app-style_module_css-local-color); + } +} + +.my-app-style_module_css-nested-with-local-pseudo { + color: red; + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .foo, .my-app-style_module_css-bar { + color: red; + } +} + +#my-app-style_module_css-id-foo { + color: red; + + #my-app-style_module_css-id-bar { + color: red; + } +} + +.my-app-style_module_css-nested-parens { + .my-app-style_module_css-local9 div:has(.my-app-style_module_css-vertical-tiny, .my-app-style_module_css-vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .my-app-style_module_css-local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .my-app-style_module_css-class { + color: red; + } +} + +.class .my-app-style_module_css-in-local-global-scope, +.class .my-app-style_module_css-in-local-global-scope, +.my-app-style_module_css-class-local-scope .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .my-app-style_module_css-class-in-container { + font-size: 1.5em; + } +} + +@container my-app-style_module_css-summary (min-width: 400px) { + @container (width > 400px) { + .my-app-style_module_css-deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.my-app-style_module_css-placeholder-gray-700:-ms-input-placeholder { + --my-app-style_module_css-placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--my-app-style_module_css-placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::-ms-input-placeholder { + --my-app-style_module_css-placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--my-app-style_module_css-placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::placeholder { + --my-app-style_module_css-placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--my-app-style_module_css-placeholder-opacity)); +} + +:root { + --my-app-style_module_css-test: dark; +} + +@media screen and (prefers-color-scheme: var(--my-app-style_module_css-test)) { + .my-app-style_module_css-baz { + color: white; + } +} + +@keyframes my-app-style_module_css-slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.my-app-style_module_css-class { + animation: + my-app-style_module_css-foo var(--my-app-style_module_css-animation-name) 3s, + var(--my-app-style_module_css-animation-name) 3s, + 3s linear 1s infinite running my-app-style_module_css-slidein, + 3s linear env(foo, var(--my-app-style_module_css-baz)) infinite running my-app-style_module_css-slidein; +} + +:root { + --my-app-style_module_css-baz: 10px; +} + +.my-app-style_module_css-class { + bar: env(foo, var(--my-app-style_module_css-baz)); +} + +.global-foo, .my-app-style_module_css-bar { + .my-app-style_module_css-local-in-global { + color: blue; + } + + @media screen { + .my-global-class-again, + .my-app-style_module_css-my-global-class-again { + color: red; + } + } +} + +.my-app-style_module_css-first-nested { + .my-app-style_module_css-first-nested-nested { + color: red; + } +} + +.my-app-style_module_css-first-nested-at-rule { + @media screen { + .my-app-style_module_css-first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --my-app-style_module_css-foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .my-app-style_module_css-class, .my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + animation: my-app-style_module_css-slidein 3s; + } + + .my-app-style_module_css-local2 .global, + .my-app-style_module_css-local3 { + color: red; + } +} + +@unknown var(--my-app-style_module_css-foo) { + color: red; +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class {} + } + } +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + } + } + } +} + +.my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + } + } + } +} + +.my-app-style_module_css-broken { + . global(.my-app-style_module_css-class) { + color: red; + } + + : global(.my-app-style_module_css-class) { + color: red; + } + + : global .my-app-style_module_css-class { + color: red; + } + + : local(.my-app-style_module_css-class) { + color: red; + } + + : local .my-app-style_module_css-class { + color: red; + } + + # hash { + color: red; + } +} + +.my-app-style_module_css-comments { + .class { + color: red; + } + + .class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } +} + +.my-app-style_module_css-foo { + color: red; + + .my-app-style_module_css-bar + & { color: blue; } +} + +.my-app-style_module_css-error, #my-app-style_module_css-err-404 { + &:hover > .my-app-style_module_css-baz { color: red; } +} + +.my-app-style_module_css-foo { + & :is(.my-app-style_module_css-bar, &.my-app-style_module_css-baz) { color: red; } +} + +.my-app-style_module_css-qqq { + color: green; + & .my-app-style_module_css-a { color: blue; } + color: red; +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + & .my-app-style_module_css-content { + color: red; + } + } +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + .my-app-style_module_css-content { + color: red; + } + } + + .my-app-style_module_css-a { + color: red; + } +} + +@scope (.my-app-style_module_css-card) { + :scope { border-block-end: 1px solid white; } +} + +.my-app-style_module_css-card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.my-app-style_module_css-foo { + display: grid; + + @media (orientation: landscape) { + .my-app-style_module_css-bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .my-app-style_module_css-baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .my-app-style_module_css-baz-2 { + display: grid; + } + } + } + } +} + +@counter-style my-app-style_module_css-thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: my-app-style_module_css-thumbs; +} + +@counter-style my-app-style_module_css-extend-thumbs { + fallback: my-app-style_module_css-thumbs; + system: extends my-app-style_module_css-thumbs; + speak-as: my-app-style_module_css-thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(img/shape.png); + list-style: none; + list-style: none disc url(img/shape.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: my-app-style_module_css-extend-thumbs; + list-style: my-app-style_module_css-extend-thumbs; +} + +@container (width > 400px) and style(--my-app-style_module_css-responsive: true) { + .my-app-style_module_css-class { + font-size: 1.5em; + } +} + +@container my-app-style_module_css-tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container my-app-style_module_css-sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container my-app-style_module_css-card (width > 400px), style(--my-app-style_module_css-responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.my-app-style_module_css-post { + container-name: my-app-style_module_css-tall; + container-type: inline-size; + + container: none; + container: inherit; + container: my-app-style_module_css-sticky-heading / inline-size; + container: my-app-style_module_css-sticky-heading / size; + container: my-app-style_module_css-sticky-heading / scroll-state; + --my-app-style_module_css-my-var: my-app-style_module_css-sticky-heading; + + container: var(--my-app-style_module_css-my-var); + --my-app-style_module_css-cards: small; + container-type: inline-size; +} + + +@container my-app-style_module_css-summary style(--my-app-style_module_css-cards: small) { + .my-app-style_module_css-card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --my-app-style_module_css-identifier { + font-family: Bixa; +} + +.my-app-style_module_css-my-class { + font-palette: --my-app-style_module_css-identifier; +} + +@keyframes my-app-style_module_css-foo { /* ... */ } +@keyframes my-app-style_module_css-foo { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .my-app-style_module_css-class { + opacity: 0; + transform: scaleX(0); + } +} + +.my-app-style_module_css-class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.my-app-style_module_css-feature) { + .my-app-style_module_css-class { opacity: 0; } + + :scope .my-app-style_module_css-class-1 { opacity: 0; } + + & .my-app-style_module_css-class { opacity: 0; } +} + +@position-try --my-app-style_module_css-custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --my-app-style_module_css-custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --my-app-style_module_css-custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --my-app-style_module_css-custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.my-app-style_module_css-infobox { + position: fixed; + position-anchor: --my-app-style_module_css-myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --my-app-style_module_css-custom-left, --my-app-style_module_css-custom-bottom, + --my-app-style_module_css-custom-right, --my-app-style_module_css-custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --my-app-style_module_css-swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-header { + background-color: color(--my-app-style_module_css-swop5c 0% 70% 20% 0%); +} + +.my-app-style_module_css-test { + test: (1, 2) [3, 4], { 1: 2}; + .my-app-style_module_css-a { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; + .my-app-style_module_css-test { + width: 200px; + } +} + +#my-app-style_module_css-test { + c: 1; + + #my-app-style_module_css-test { + c: 2; + } +} + +@property --my-app-style_module_css-item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.my-app-style_module_css-container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --my-app-style_module_css-item-size: 20%; + --my-app-style_module_css-item-color: orange; +} + +.my-app-style_module_css-item { + width: var(--my-app-style_module_css-item-size); + height: var(--my-app-style_module_css-item-size); + background-color: var(--my-app-style_module_css-item-color); +} + +.my-app-style_module_css-two { + --my-app-style_module_css-item-size: initial; + --my-app-style_module_css-item-color: inherit; +} + +.my-app-style_module_css-three { + /* invalid values */ + --my-app-style_module_css-item-size: 1000px; + --my-app-style_module_css-item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.my-app-style_module_css-bar { + display: inline-block; + --my-app-style_module_css-progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimation 2.5s ease infinite; +} + +@keyframes my-app-style_module_css-progressAnimation { + to { + --my-app-style_module_css-progress: 100%; + } +} + +@keyframes my-app-style_module_css-initial { /* ... */ } +@keyframes/**test**/my-app-style_module_css-initial { /* ... */ } +@keyframes/**test**/my-app-style_module_css-initial/**test**/{ /* ... */ } +@keyframes/**test**//**test**/my-app-style_module_css-initial/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ my-app-style_module_css-initial /**test**/ /**test**/ { /* ... */ } +@keyframes my-app-style_module_css-None { /* ... */ } +@property/**test**/--my-app-style_module_css-item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--my-app-style_module_css-item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--my-app-style_module_css-item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --my-app-style_module_css-item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --my-app-style_module_css-item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --my-app-style_module_css-item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused my-app-style_module_css-initial, my-app-style_module_css-localkeyframes2; + animation-name: my-app-style_module_css-initial; + animation-duration: 2s; +} + +.my-app-style_module_css-item-1 { + width: var( --my-app-style_module_css-item-size ); + height: var(/**comment**/--my-app-style_module_css-item-size); + background-color: var( /**comment**/--my-app-style_module_css-item-color); + background-color-1: var(/**comment**/ --my-app-style_module_css-item-color); + background-color-2: var( /**comment**/ --my-app-style_module_css-item-color); + background-color-3: var( /**comment**/ --my-app-style_module_css-item-color /**comment**/ ); + background-color-3: var( /**comment**/--my-app-style_module_css-item-color/**comment**/ ); + background-color-3: var(/**comment**/--my-app-style_module_css-item-color/**comment**/); +} + +@keyframes/**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes/**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**//**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/ /**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/ /**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**//**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes/**test**//**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes/**test**//**test**/my-app-style_module_css-foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ my-app-style_module_css-foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/my-app-style_module_css-class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.my-app-style_module_css-var { + --my-app-style_module_css-main-color: black; + --my-app-style_module_css-FOO: 10px; + --my-app-style_module_css-foo: 10px; + --my-app-style_module_css-bar: calc(var(--my-app-style_module_css-foo) + 10px); + --my-app-style_module_css-accent-background: linear-gradient(to top, var(--my-app-style_module_css-main-color), white); + --my-app-style_module_css-external-link: \\"test\\"; + --my-app-style_module_css-custom-prop: yellow; + --my-app-style_module_css-default-value: red; + --my-app-style_module_css-main-bg-color: red; + --my-app-style_module_css-backup-bg-color: black; + -foo: calc(var(--my-app-style_module_css-bar) + 10px); + var: var(--my-app-style_module_css-main-color); + var1: var(--my-app-style_module_css-foo); + var2: var(--my-app-style_module_css-FOO); + content: \\" (\\" var(--my-app-style_module_css-external-link) \\")\\"; + var3: var(--my-app-style_module_css-main-color, blue); + var4: var(--my-app-style_module_css-custom-prop,); + var5: var(--my-app-style_module_css-custom-prop, initial); + var6: var(--my-app-style_module_css-custom-prop, var(--my-app-style_module_css-default-value)); + var7: var(--my-app-style_module_css-custom-prop, var(--my-app-style_module_css-default-value, red)); + var8: var(--my-app-style_module_css-unknown); + background-color: var(--my-app-style_module_css-main-bg-color, var(--my-app-style_module_css-backup-bg-color, white)); +} + +.my-app-style_module_css-var-order { + background-color: var(--my-app-style_module_css-test); + --my-app-style_module_css-test: red; +} + +.my-app-style_module_css-className { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocal { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocalOther { + border-radius: 12px; +} + +.my-app-style_module_css-exportName { + border: red; +} + +.my-app-style_module_css-exportNameOtherNoSpaces { + } + +.my-app-style_module_css-from { + color: red; +} + +.my-app-style_module_css-exportNameOtherFromKeyword { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 { + } + +.my-app-style_module_css-exportNameWeirdCharacters { + } + +@function --my-app-style_module_css-transparent(--my-app-style_module_css-color , --my-app-style_module_css-alpha type( | )) returns { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +section { + --my-app-style_module_css-base-color: #faa6ff; + background-color: --my-app-style_module_css-transparent(var(--my-app-style_module_css-base-color), 0.8); +} + +@function --my-app-style_module_css-max-plus-x(--my-app-style_module_css-list #, --my-app-style_module_css-x ) { + result: calc(max(var(--my-app-style_module_css-list)) + var(--my-app-style_module_css-x)); +} + +div { + width: --my-app-style_module_css-max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --my-app-style_module_css-anim-1s(--my-app-style_module_css-animation, --my-app-style_module_css-count) { + --my-app-style_module_css-duration: 1s; + --my-app-style_module_css-easing: linear; + result: var(--my-app-style_module_css-animation) var(--my-app-style_module_css-duration) var(--my-app-style_module_css-count) var(--my-app-style_module_css-easing); +} + +div { + animation: --anim-1s(my-app-style_module_css-bounce, 2); +} + +@function --my-app-style_module_css-outer(--my-app-style_module_css-outer-arg) { + --my-app-style_module_css-outer-local: 2; + result: --my-app-style_module_css-inner(); +} + +@function --my-app-style_module_css-inner() returns { + result: calc(var(--my-app-style_module_css-outer-arg) + var(--my-app-style_module_css-outer-local)); +} + +div { + z-index: --my-app-style_module_css-outer(1); /* 3 */ +} + +@function --my-app-style_module_css-narrow-wide(--my-app-style_module_css-narrow, --my-app-style_module_css-wide) { + result: var(--my-app-style_module_css-wide); + @media (width < 700px) { + result: var(--my-app-style_module_css-narrow); + } +} + +@function --my-app-style_module_css-narrow-wide-if-else(--my-app-style_module_css-narrow, --my-app-style_module_css-wide) { + result: if(media(width < 700px): var(--my-app-style_module_css-narrow) ; else: var(--my-app-style_module_css-wide)); +} + +@function --my-app-style_module_css-transparent(--my-app-style_module_css-color, --my-app-style_module_css-alpha) { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +@function --my-app-style_module_css-transparent-local(--my-app-style_module_css-color, --my-app-style_module_css-alpha) { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +@function --transparent-global(--my-app-style_module_css-color, --my-app-style_module_css-alpha) { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +section { + --my-app-style_module_css-base-color: #faa6ff; + background-color: --my-app-style_module_css-transparent(var(--my-app-style_module_css-base-color), 0.8); + background-color: --my-app-style_module_css-transparent-local(var(--my-app-style_module_css-base-color), 0.8); + background-color: --transparent-global(var(--my-app-style_module_css-base-color), 0.8); +} + +:root { + --my-app-style_module_css-mode: sharp; +} + +.my-app-style_module_css-apply-sharp { + border-radius: if(style(--my-app-style_module_css-mode: sharp): 0px; else: revert-rule); +} + +@color-profile --my-app-style_module_css-swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-class { + background-color: color(--my-app-style_module_css-swop5c 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--my-app-shared_css-from-shared 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --my-app-style_module_css-text-color: #eee; +} + +.my-app-style_module_css-simple { + color: var(--my-app-style_module_css-text-color); +} + +/* Just nesting */ +.my-app-style_module_css-theme-dark { + --my-app-style_module_css-text-color: #fff; + --my-app-style_module_css-bg-color: #333; + + .my-app-style_module_css-button { + --my-app-style_module_css-button-color: var(--my-app-style_module_css-text-color); + --my-app-style_module_css-button-bg: var(--my-app-style_module_css-bg-color); + color: var(--my-app-style_module_css-button-color); + background-color: var(--my-app-style_module_css-button-bg); + } +} + +/* A container context based on inline size */ +.my-app-style_module_css-post { + --my-app-style_module_css-themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--my-app-style_module_css-themeColor: blue) { + .my-app-style_module_css-card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes my-app-style_module_css-broken; + +.my-app-style_module_css-class-name-after-broken-keyframes { + color: red; +} + +.my-app-style_module_css-no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + /** test **/.my-app-style_module_css-class { + color: red; + } + + /** test **/#my-app-style_module_css-hash { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.my-app-style_module_css-class{.my-app-style_module_css-class{}} +.my-app-style_module_css-class{color:#fff5f5} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1;} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1;.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;.my-app-style_module_css-class{color:#f1f1f1}color:#f1f1f1;} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.my-app-style_module_css-class{--my-app-style_module_css-bar:{1, 'string', .my-app-style_module_css-class, #my-app-style_module_css-f1f1f1, #my-app-style_module_css-id}} +.my-app-style_module_css-class{--my-app-style_module_css-baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.my-app-style_module_css-class{--my-app-style_module_css-baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.my-app-style_module_css-just-class { + color: red; +} + +.my-app-style_module_css-my-simple-local { + color: red; +} + +.my-global-local { + color: red; +} + +.my-app-style_module_css-multiple-first.my-app-style_module_css-multiple-second { + color: red; +} + +.my-app-style_module_css-multiple-first-with-space .my-app-style_module_css-multiple-second-with-space { + color: red; +} + +div:not(.my-app-style_module_css-special) { + color: blue; +} + +p:not(#my-app-style_module_css-main-paragraph) { + font-weight: bold; +} + +.my-app-style_module_css-container { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-global-befor-local .my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-local-class-name .my-app-style_module_css-global-after-local { + color: red; +} + +.my-app-style_module_css-foo { + &.my-app-style_module_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .my-app-style_module_css-bar { + c_value: some-value; + } + + &.my-app-style_module_css-baz { + c_value: some-value; + } + } +} + +/* Composes */ + +.my-app-style_module_css-class { + color: black; +} + +.my-app-style_module_css-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.my-app-style_module_css-class-with-composes { + } + +/* At-rules */ + +@keyframes my-app-style_module_css-basic-keyframes {} +@keyframes my-app-style_module_css-local-keyframes {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes my-app-style_module_css-local-keyframes-old-syntax {} +@keyframes local-keyframes-old-syntax {} + +.my-app-style_module_css-foo { + animation-name: my-app-style_module_css-basic-keyframes, global-keyframes, my-app-style_module_css-local-keyframes; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes my-app-style_module_css-progressAnimationLocal { + to { + --my-app-style_module_css-progress: 100%; + } +} + +.my-app-style_module_css-bar { + display: inline-block; + --my-app-style_module_css-progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimationLocal 2.5s ease infinite; +} + +@scope (.my-app-style_module_css-article-header) to (.class) { + .my-app-style_module_css-article-footer { + border: 5px solid black; + } + .my-app-style_module_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --my-app-style_module_css-foo-bar: red; + --my-app-style_module_css-local-foo-bar: red; + --my-app-style_module_css-global-foo-bar: red; + --my-app-style_module_css-local-and-global-in-var: + red, + --my-app-style_module_css-local-foo-bar, + --global-foo-bar, + /** Deprecated syntax */ + --my-app-style_module_css-local-foo-bar, + --global-foo-bar; +} + +.my-app-style_module_css-class { + background-color: + var(--my-app-style_module_css-foo-bar), + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + var(--global-foo-bar), + var(--my-app-shared_css-from-shared); +} + +/** Custom local value */ + +@unknown-rule my-app-style_module_css-unknown-at-rule {} + +.my-app-style_module_css-class { + custom-name: my-app-style_module_css-unknown-at-rule; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: my-app-style_module_css-animation-name-test animation-name-test +} + +/* GRID */ + +.my-app-style_module_css-grid1 { + grid: none; +} + +.my-app-style_module_css-gird2 { + grid: \\"my-app-style_module_css-a-a\\" 100px \\"my-app-style_module_css-b-b\\" 1fr; +} + +.my-app-style_module_css-grid3 { + grid: [my-app-style_module_css-line-name1-line-name1] \\"my-app-style_module_css-a-a\\" 100px [my-app-style_module_css-line-name2-line-name2]; +} + +.my-app-style_module_css-grid4 { + grid: \\"my-app-style_module_css-a-a\\" 200px \\"my-app-style_module_css-b-b\\" min-content; +} + +.my-app-style_module_css-grid5 { + grid: \\"my-app-style_module_css-a-a\\" minmax(100px, max-content) \\"my-app-style_module_css-b-b\\" 20%; +} + +.my-app-style_module_css-grid6 { + grid: 100px / 200px; +} + +.my-app-style_module_css-grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.my-app-style_module_css-grid8 { + grid: 200px / auto-flow; +} + +.my-app-style_module_css-grid9 { + grid: 30% / auto-flow dense; +} + +.my-app-style_module_css-grid10 { + grid: repeat(3, [my-app-style_module_css-line1-line1 my-app-style_module_css-line2-line2 my-app-style_module_css-line3-line3] 200px) / auto-flow 300px; +} + +.my-app-style_module_css-grid11 { + grid: [my-app-style_module_css-line1-line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.my-app-style_module_css-grid12 { + grid: auto-flow / 200px; +} + +.my-app-style_module_css-grid13 { + grid: auto-flow dense / 30%; +} + +.my-app-style_module_css-grid14 { + grid: auto-flow 300px / repeat(3, [my-app-style_module_css-line1-line1 my-app-style_module_css-line2-line2 my-app-style_module_css-line3-line3] 200px); +} + +.my-app-style_module_css-grid15 { + grid: auto-flow dense 40% / [my-app-style_module_css-line1-line1] minmax(20em, max-content); +} + +.my-app-style_module_css-grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.my-app-style_module_css-grid17 { + grid-template-areas: 'my-app-style_module_css-nav-nav my-app-style_module_css-main-main'; +} + +.my-app-style_module_css-grid-area { + grid-area: auto / auto / auto / auto; +} + +.my-app-style_module_css-grid-area1 { + grid-area: my-app-style_module_css-some-grid-area-some-grid-area; +} + +.my-app-style_module_css-grid-area2 { + grid-area: my-app-style_module_css-some-grid-area-some-grid-area / my-app-style_module_css-another-grid-area-another-grid-area; +} + +.my-app-style_module_css-grid-area3 { + grid-area: 4 my-app-style_module_css-some-grid-area-some-grid-area / 2 my-app-style_module_css-another-grid-area-another-grid-area; +} + +.my-app-style_module_css-grid-area4 { + grid-area: span 3 / span my-app-style_module_css-some-grid-area-some-grid-area; +} + +/* Keyword value */ +.my-app-style_module_css-grid-row-start { + grid-row-start: auto; +} + +/* values */ +.my-app-style_module_css-grid-row-start1 { + grid-row-start: my-app-style_module_css-some-grid-area-some-grid-area; +} + +/* + values */ +.my-app-style_module_css-grid-row-start2 { + grid-row-start: 2; +} +.my-app-style_module_css-grid-row-start3 { + grid-row-start: my-app-style_module_css-some-grid-area-some-grid-area 4; +} + +/* span + + values */ +.my-app-style_module_css-grid-row-start4 { + grid-row-start: span 3; +} +.my-app-style_module_css-grid-row-start5 { + grid-row-start: span my-app-style_module_css-some-grid-area-some-grid-area; +} +.my-app-style_module_css-grid-row-start6 { + grid-row-start: 5 my-app-style_module_css-some-grid-area-some-grid-area span; +} + +/* Global values */ +.my-app-style_module_css-grid-row-start7 { + grid-row-start: inherit; +} +.my-app-style_module_css-grid-row-start8 { + grid-row-start: initial; +} +.my-app-style_module_css-grid-row-start9 { + grid-row-start: revert; +} +.my-app-style_module_css-grid-row-start10 { + grid-row-start: revert-layer; +} +.my-app-style_module_css-grid-row-start11 { + grid-row-start: unset; +} + +.my-app-style_module_css-grid-template-areas { + grid-template-areas: + \\"my-app-style_module_css-a-a my-app-style_module_css-b-b .\\" + \\"my-app-style_module_css-a-a my-app-style_module_css-c-c my-app-style_module_css-d-d\\"; +} + +.my-app-style_module_css-grid-template-rows { + grid-template-rows: [my-app-style_module_css-line-name1-line-name1] 100px [my-app-style_module_css-line-name2-line-name2 my-app-style_module_css-line-name3-line-name3]; +} + +.my-app-style_module_css-grid-template-rows1 { + grid-template-rows: + [my-app-style_module_css-line-name1-line-name1 my-app-style_module_css-line-name2-line-name2] 100px + repeat(auto-fit, [my-app-style_module_css-line-name1-line-name1] 300px) [my-app-style_module_css-line-name3-line-name3]; +} + +.my-app-style_module_css-grid-template-rows2 { + grid-template-rows: + [my-app-style_module_css-line-name1-line-name1] 100px [my-app-style_module_css-line-name2-line-name2] + repeat(auto-fit, [my-app-style_module_css-line-name3-line-name3 my-app-style_module_css-line-name4-line-name4] 300px) + 100px; +} + +.my-app-style_module_css-grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.my-app-style_module_css-grid-template { + grid-template: + [my-app-style_module_css-header-top-header-top] \\"my-app-style_module_css-a-a my-app-style_module_css-a-a my-app-style_module_css-a-a\\" [my-app-style_module_css-header-bottom-header-bottom] + [my-app-style_module_css-main-top-main-top] \\"my-app-style_module_css-b-b my-app-style_module_css-b-b my-app-style_module_css-b-b\\" 1fr [my-app-style_module_css-main-bottom-main-bottom] + / auto 1fr auto; +} + +.my-app-style_module_css-grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [my-app-style_module_css-col-start-col-start] minmax(150px, 1fr) [my-app-style_module_css-col-end-col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [my-app-style_module_css-header-start-header-start] 100px [my-app-style_module_css-header-end-header-end my-app-style_module_css-content-start-content-start] auto [my-app-style_module_css-content-end-content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.my-app-style_module_css-class { + grid-template-columns: repeat(auto-fit, [my-app-style_module_css-col-start-col-start] minmax(150px, 1fr) [my-app-style_module_css-col-end-col-end]); +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: [my-app-style_module_css-main-start-main-start] 1fr [my-app-style_module_css-content-start-content-start] 1fr [my-app-style_module_css-content-end-content-end] 1fr [my-app-style_module_css-main-end-main-end]; + grid-template-rows: [my-app-style_module_css-main-start-main-start] 100px [my-app-style_module_css-content-start-content-start] 100px [my-app-style_module_css-content-end-content-end] 100px [my-app-style_module_css-main-end-main-end]; +} + +.my-app-style_module_css-box1 { + grid-column-start: my-app-style_module_css-main-start-main-start; + grid-row-start: my-app-style_module_css-main-start-main-start; + grid-row-end: my-app-style_module_css-main-end-main-end; +} + +.my-app-style_module_css-box2 { + grid-column-start: my-app-style_module_css-content-end-content-end; + grid-row-start: my-app-style_module_css-main-start-main-start; + grid-row-end: my-app-style_module_css-content-end-content-end; +} + +.my-app-style_module_css-box3 { + grid-column-start: my-app-style_module_css-content-start-content-start; + grid-row-start: my-app-style_module_css-main-start-main-start; +} + +.my-app-style_module_css-box4 { + grid-column-start: my-app-style_module_css-content-start-content-start; + grid-column-end: my-app-style_module_css-main-end-main-end; + grid-row-start: my-app-style_module_css-content-end-content-end; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd\\" + \\"my-app-style_module_css-sd-sd my-app-style_module_css-sd-sd my-app-style_module_css-sd-sd my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main\\" + \\"my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft\\"; +} + +.my-app-style_module_css-header { + grid-area: my-app-style_module_css-hd-hd; +} + +.my-app-style_module_css-footer { + grid-area: my-app-style_module_css-ft-ft; +} + +.my-app-style_module_css-content { + grid-area: my-app-style_module_css-main-main; +} + +.my-app-style_module_css-sidebar { + grid-area: my-app-style_module_css-sd-sd; +} + +.my-app-style_module_css-wrapper > div.my-app-style_module_css-overlay { + z-index: 10; + grid-column: my-app-style_module_css-main-start-main-start / my-app-style_module_css-main-end-main-end; + grid-row: my-app-style_module_css-hd-start-hd-start / my-app-style_module_css-ft-end-ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(12, [my-app-style_module_css-col-start-col-start] 1fr); +} + +.my-app-style_module_css-item1to5 { + grid-column: my-app-style_module_css-col-start-col-start / my-app-style_module_css-col-start-col-start 5; +} + +.my-app-style_module_css-item7to9 { + grid-column: my-app-style_module_css-col-start-col-start 7 / span 3; +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [my-app-style_module_css-col1-start-col1-start] 1fr [my-app-style_module_css-col2-start-col2-start] 3fr); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end]); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: [my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end]; +} + +.my-app-style_module_css-importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +/*!*********************************!*\\\\ + !*** css ./style.module.my-css ***! + \\\\*********************************/ +.my-app-style_module_my-css-myCssClass { + color: red; +} + +/*!**************************************!*\\\\ + !*** css ./style.module.css.invalid ***! + \\\\**************************************/ +.class { + color: teal; +} + +/*!************************************!*\\\\ + !*** css ./identifiers.module.css ***! + \\\\************************************/ +.my-app-identifiers_module_css-UnusedClassName{ + color: red; + padding: var(--my-app-identifiers_module_css-variable-unused-class); + --my-app-identifiers_module_css-variable-unused-class: 10px; +} + +.my-app-identifiers_module_css-UsedClassName { + color: green; + padding: var(--my-app-identifiers_module_css-variable-used-class); + --my-app-identifiers_module_css-variable-used-class: 10px; +} + + +/*# sourceMappingURL=use-style_js.bundle0.css.map*/" +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: dev 3`] = ` +Object { + "UsedClassName": "my-app-identifiers_module_css-UsedClassName", + "VARS": "--my-app-style_module_css-LOCAL-COLOR my-app-style_module_css-VARS undefined my-app-style_module_css-globalVarsUpperCase", + "__webpack_modules__": 6, + "animation": "my-app-style_module_css-animation", + "animationName": "my-app-style_module_css-animationName", + "class": "my-app-style_module_css-class", + "classInContainer": "my-app-style_module_css-class-in-container", + "classLocalScope": "my-app-style_module_css-class-local-scope", + "classNameAfterBrokenKeyframes": "my-app-style_module_css-class-name-after-broken-keyframes", + "cssModuleWithCustomFileExtension": "my-app-style_module_my-css-myCssClass", + "currentWmultiParams": "my-app-style_module_css-local12", + "deepClassInContainer": "my-app-style_module_css-deep-class-in-container", + "displayFlexInSupportsInMediaUpperCase": "my-app-style_module_css-displayFlexInSupportsInMediaUpperCase", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "my-app-style_module_css-exportName my-app-classes_modules_css-className beforeName my-app-style_module_css-className my-app-style_module_css-classNameLocal importName secondImport my-app-classes_modules_css-otherClassName my-app-classes_modules_css-otherClassNameToo my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther className className classNameOther className classNameOther my-app-classes_modules_css-className my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName", + "exportNameOtherFromKeyword": "my-app-style_module_css-exportNameOtherFromKeyword my-app-style_module_css-from", + "exportNameOtherFromKeywordWithFrom1": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 from", + "exportNameOtherFromKeywordWithFrom2": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 my-app-classes_modules_css-from", + "exportNameOtherNoSpaces": "my-app-style_module_css-exportNameOtherNoSpaces my-app-classes_modules_css-className beforeName my-app-style_module_css-className", + "exportNameWeirdCharacters": "my-app-style_module_css-exportNameWeirdCharacters my-app-classes_modules_css-a my-app-classes_modules_css--b my-app-classes_modules_css-b- my-app-classes_modules_css---c my-app-classes_modules_css-c-- my-app-classes_modules_css-_d my-app-classes_modules_css-d%", + "futureWmultiParams": "my-app-style_module_css-local14", + "global": undefined, + "hasWmultiParams": "my-app-style_module_css-local11", + "ident": "my-app-style_module_css-ident", + "inLocalGlobalScope": "my-app-style_module_css-in-local-global-scope", + "inSupportScope": "my-app-style_module_css-inSupportScope", + "isWmultiParams": "my-app-style_module_css-local8", + "keyframes": "my-app-style_module_css-localkeyframes", + "keyframesUPPERCASE": "my-app-style_module_css-localkeyframesUPPERCASE", + "local": "my-app-style_module_css-local1 my-app-style_module_css-local2 my-app-style_module_css-local3 my-app-style_module_css-local4", + "local2": "my-app-style_module_css-local5 my-app-style_module_css-local6", + "localkeyframes2UPPPERCASE": "my-app-style_module_css-localkeyframes2UPPPERCASE", + "matchesWmultiParams": "my-app-style_module_css-local9", + "media": "my-app-style_module_css-wideScreenClass", + "mediaInSupports": "my-app-style_module_css-displayFlexInMediaInSupports", + "mediaWithOperator": "my-app-style_module_css-narrowScreenClass", + "mozAnimationName": "my-app-style_module_css-mozAnimationName", + "mozAnyWmultiParams": "my-app-style_module_css-local15", + "myColor": "--my-app-style_module_css-my-color", + "nested": "my-app-style_module_css-nested1 undefined my-app-style_module_css-nested3", + "notAValidCssModuleExtension": true, + "notWmultiParams": "my-app-style_module_css-local7", + "paddingLg": "my-app-style_module_css-padding-lg", + "paddingSm": "my-app-style_module_css-padding-sm", + "pastWmultiParams": "my-app-style_module_css-local13", + "supports": "my-app-style_module_css-displayGridInSupports", + "supportsInMedia": "my-app-style_module_css-displayFlexInSupportsInMedia", + "supportsWithOperator": "my-app-style_module_css-floatRightInNegativeSupports", + "textColor": "--my-app-style_module_css-text-color", + "vars": "--my-app-style_module_css-local-color my-app-style_module_css-vars undefined my-app-style_module_css-globalVars", + "webkitAnyWmultiParams": "my-app-style_module_css-local16", + "whereWmultiParams": "my-app-style_module_css-local10", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: global dev 1`] = ` +Object { + "active": "my-app-style_module_css-active", + "animation-name-test": "my-app-style_module_css-animation-name-test", + "article-header": "my-app-style_module_css-article-header", + "bar": "my-app-style_module_css-bar", + "baz": "my-app-style_module_css-baz", + "bounce": "my-app-style_module_css-bounce", + "class": "my-app-style_module_css-class", + "class-1": "my-app-style_module_css-class-1", + "class-local-scope": "my-app-style_module_css-class-local-scope", + "class-with-composes": "my-app-style_module_css-class-with-composes my-app-style_module_css-local-class global-class global-class-other my-app-shared_css-local-my-shared-class", + "container": "my-app-style_module_css-container", + "foo": "my-app-style_module_css-foo", + "hash": "my-app-style_module_css-hash", + "header": "my-app-style_module_css-header", + "in-local-global-scope": "my-app-style_module_css-in-local-global-scope", + "local": "my-app-style_module_css-local", + "local-class": "my-app-style_module_css-local-class", + "local-class-name": "my-app-style_module_css-local-class-name", + "local-foo-bar": "--my-app-style_module_css-local-foo-bar", + "local-in-global": "my-app-style_module_css-local-in-global", + "local-keyframes": "my-app-style_module_css-local-keyframes", + "local-keyframes-old-syntax": "my-app-style_module_css-local-keyframes-old-syntax", + "local-nested": "my-app-style_module_css-local-nested", + "local4": "my-app-style_module_css-local4", + "localUpperCase": "my-app-style_module_css-localUpperCase", + "main-paragraph": "my-app-style_module_css-main-paragraph", + "multiple-first": "my-app-style_module_css-multiple-first", + "multiple-first-with-space": "my-app-style_module_css-multiple-first-with-space", + "multiple-second": "my-app-style_module_css-multiple-second", + "multiple-second-with-space": "my-app-style_module_css-multiple-second-with-space", + "my-global-class-again": "my-app-style_module_css-my-global-class-again", + "my-simple-local": "my-app-style_module_css-my-simple-local", + "nested1": "my-app-style_module_css-nested1", + "progress": "--my-app-style_module_css-progress", + "progressAnimationLocal": "my-app-style_module_css-progressAnimationLocal", + "selected": "my-app-style_module_css-selected", + "special": "my-app-style_module_css-special", + "sticky-heading": "my-app-style_module_css-sticky-heading", + "swop5c-local": "--my-app-style_module_css-swop5c-local", + "test": "my-app-style_module_css-test", + "transparent-local": "--my-app-style_module_css-transparent-local", + "unknown-at-rule": "my-app-style_module_css-unknown-at-rule", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: global dev 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.foo { color: red; } + + + +.foo { + &.bar { color: red; } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { color: red; } + } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.foo { height: 40px; height: 36px; } + + + +.red { + color: red; +} + + + +#colorValue-v1 { + color: red; +} + + + +.red > .red { + color: red; +} + + + +.red { + color: .red; +} + + + +.export { + color: blue; +} + + + +.foo { color: red; } + + + +.foo { color: red; } +.bar { color: yellow } + + + + +.foo { color: blue; } + + + + +.class-a { color: red; } + + + + +.class-a { margin: calc(base * 2); } + + + + +.class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.foo { color: var(--color); } + + + + + + + +.foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.foo { color: blue; } +.bar { color: red } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: color(red lightness(50%)); } + + + +:root { --color: red; } + + + +:root { --color: ; } + + + +:root { --color: ; } + + + +:root { --color: /* comment */; } + + + + +.red { + color: red; +} + + + + +.class { + color: red; + color: red; + color: blue; +} + + + +.color { + color: /* test */red/* test */; +} + + + +.color { + color: /* test *//* test */red/* test */; +} + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: blue; } + + + +.foo { color: blue; } + + + +.foo { color: red; } + + + +.color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.foo { color: blue; } + + + +:root { --color: /* + multiline + comment +*/; } + + + + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: \\"reserved\\"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from \\"./var-function-export.modules.css\\")); +} + +.from-2 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-var-u2 from \\"./var-function-export.modules.css\\")); +} + +.from-4 { + color: var(--1 from \\"./var-function-export.modules.css\\"); +} + +.from-5 { + color: var(----a from \\"./var-function-export.modules.css\\"); +} + +.from-6 { + color: var(--main-bg-color from \\"./var-function-export.modules.css\\"); +} + +.mixed { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from \\"./var-function-export.modules.css\\") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --from-shared: --custom-shared; +} + +@color-profile --custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-shared_css-local-my-shared-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.class { + color: red; +} + +.local1, +.local2 .global, +.local3 { + color: green; +} + +.global .my-app-style_module_css-local4 { + color: yellow; +} + +.local5.global.local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-nested1.nested2.nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .my-app-style_module_css-localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .my-app-style_module_css-test; + unknown2: .test; + unknown3: .my-app-style_module_css-test; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .my-app-style_module_css-local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +.class .my-app-style_module_css-in-local-global-scope, +.class .my-app-style_module_css-in-local-global-scope, +.my-app-style_module_css-class-local-scope .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +.global-foo, .my-app-style_module_css-bar { + .my-app-style_module_css-local-in-global { + color: blue; + } + + @media screen { + .my-global-class-again, + .my-app-style_module_css-my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .class, .my-app-style_module_css-nested1.nested2.nested3 { + animation: slidein 3s; + } + + .local2 .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + .class { + color: red; + } + + .class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: my-app-style_module_css-sticky-heading; + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from \\"./classes.modules.css\\" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from \\"classes.modules.css\\" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from \\"./classes.modules.css\\" ; + composes: className otherClassName from \\"./classes.modules.css\\" ; + composes: className from \\"./classes.modules.css\\" , otherClassName from \\"./classes.modules.css\\" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from\\"./classes.modules.css\\",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from \\"./classes.modules.css\\"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\\\\% from \\"./classes.modules.css\\"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(my-app-style_module_css-bounce, 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --my-app-style_module_css-transparent-local(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --transparent-global(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: --my-app-style_module_css-transparent-local(var(--base-color), 0.8); + background-color: --transparent-global(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + /** test **/.my-app-style_module_css-class { + color: red; + } + + /** test **/#my-app-style_module_css-hash { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.just-class { + color: red; +} + +.my-app-style_module_css-my-simple-local { + color: red; +} + +.my-global-local { + color: red; +} + +.my-app-style_module_css-multiple-first.my-app-style_module_css-multiple-second { + color: red; +} + +.my-app-style_module_css-multiple-first-with-space .my-app-style_module_css-multiple-second-with-space { + color: red; +} + +div:not(.my-app-style_module_css-special) { + color: blue; +} + +p:not(#my-app-style_module_css-main-paragraph) { + font-weight: bold; +} + +.my-app-style_module_css-container { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-local-class-name { + color: red; +} + +.global-befor-local .my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-local-class-name .global-after-local { + color: red; +} + +.my-app-style_module_css-foo { + &.my-app-style_module_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .my-app-style_module_css-bar { + c_value: some-value; + } + + &.my-app-style_module_css-baz { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +.my-app-style_module_css-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.my-app-style_module_css-class-with-composes { + } + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes my-app-style_module_css-local-keyframes {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes my-app-style_module_css-local-keyframes-old-syntax {} +@keyframes local-keyframes-old-syntax {} + +.foo { + animation-name: basic-keyframes, global-keyframes, my-app-style_module_css-local-keyframes; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes my-app-style_module_css-progressAnimationLocal { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimationLocal 2.5s ease infinite; +} + +@scope (.my-app-style_module_css-article-header) to (.class) { + .article-footer { + border: 5px solid black; + } + .my-app-style_module_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + --my-app-style_module_css-local-foo-bar, + --global-foo-bar, + /** Deprecated syntax */ + --my-app-style_module_css-local-foo-bar, + --global-foo-bar; +} + +.class { + background-color: + var(--foo-bar), + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule my-app-style_module_css-unknown-at-rule {} + +.class { + custom-name: my-app-style_module_css-unknown-at-rule; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: my-app-style_module_css-animation-name-test animation-name-test +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + + +/*# sourceMappingURL=use-style-global_js.bundle4.css.map*/" +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: global prod 1`] = ` +Object { + "active": "zwwxVU", + "animation-name-test": "jOrreA", + "article-header": "uiPdKt", + "bar": "ueKKku", + "baz": "v4rNLS", + "bounce": "XEyeRq", + "class": "Vx2ADA", + "class-1": "wCljLW", + "class-local-scope": "XlQsKD", + "class-with-composes": "pdN5nk lSYuKq global-class global-class-other wEhvQL", + "container": "lAqA-R", + "foo": "LXyTj4", + "hash": "jcIvvc", + "header": "Zq4Bgu", + "in-local-global-scope": "MoUXzC", + "local": "KBEflt", + "local-class": "lSYuKq", + "local-class-name": "-bicf2", + "local-foo-bar": "--yBn7O5", + "local-in-global": "NSL9R7", + "local-keyframes": "Svchdz", + "local-keyframes-old-syntax": "h18zzQ", + "local-nested": "VxblVB", + "local4": "HEwyXh", + "localUpperCase": "AgZzby", + "main-paragraph": "dBVRDQ", + "multiple-first": "YK629R", + "multiple-first-with-space": "bBUtJ3", + "multiple-second": "d69pL2", + "multiple-second-with-space": "_10-3eM", + "my-global-class-again": "W4wdXr", + "my-simple-local": "xcsnD2", + "nested1": "kbu2T9", + "progress": "--z8dXmV", + "progressAnimationLocal": "_1zMqGM", + "selected": "n5D5Q0", + "special": "_5KiKr2", + "sticky-heading": "_5unArO", + "swop5c-local": "--uypV5i", + "test": "OyMPmk", + "transparent-local": "--NxHrla", + "unknown-at-rule": "DqBFzD", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: global prod 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.foo { color: red; } + + + +.foo { + &.bar { color: red; } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { color: red; } + } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.foo { height: 40px; height: 36px; } + + + +.red { + color: red; +} + + + +#colorValue-v1 { + color: red; +} + + + +.red > .red { + color: red; +} + + + +.red { + color: .red; +} + + + +.export { + color: blue; +} + + + +.foo { color: red; } + + + +.foo { color: red; } +.bar { color: yellow } + + + + +.foo { color: blue; } + + + + +.class-a { color: red; } + + + + +.class-a { margin: calc(base * 2); } + + + + +.class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.foo { color: var(--color); } + + + + + + + +.foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.foo { color: blue; } +.bar { color: red } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: color(red lightness(50%)); } + + + +:root { --color: red; } + + + +:root { --color: ; } + + + +:root { --color: ; } + + + +:root { --color: /* comment */; } + + + + +.red { + color: red; +} + + + + +.class { + color: red; + color: red; + color: blue; +} + + + +.color { + color: /* test */red/* test */; +} + + + +.color { + color: /* test *//* test */red/* test */; +} + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: blue; } + + + +.foo { color: blue; } + + + +.foo { color: red; } + + + +.color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.foo { color: blue; } + + + +:root { --color: /* + multiline + comment +*/; } + + + + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: \\"reserved\\"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from \\"./var-function-export.modules.css\\")); +} + +.from-2 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-var-u2 from \\"./var-function-export.modules.css\\")); +} + +.from-4 { + color: var(--1 from \\"./var-function-export.modules.css\\"); +} + +.from-5 { + color: var(----a from \\"./var-function-export.modules.css\\"); +} + +.from-6 { + color: var(--main-bg-color from \\"./var-function-export.modules.css\\"); +} + +.mixed { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from \\"./var-function-export.modules.css\\") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --from-shared: --custom-shared; +} + +@color-profile --custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.wEhvQL { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.class { + color: red; +} + +.local1, +.local2 .global, +.local3 { + color: green; +} + +.global .HEwyXh { + color: yellow; +} + +.local5.global.local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.kbu2T9.nested2.nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .AgZzby { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .OyMPmk; + unknown2: .test; + unknown3: .OyMPmk; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .KBEflt .global { + color: red; +} + +@unknown .KBEflt .global { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .NSL9R7 { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +.class .MoUXzC, +.class .MoUXzC, +.XlQsKD .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +.global-foo, .ueKKku { + .NSL9R7 { + color: blue; + } + + @media screen { + .my-global-class-again, + .W4wdXr { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .class, .kbu2T9.nested2.nested3 { + animation: slidein 3s; + } + + .local2 .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + .class { + color: red; + } + + .class { + color: red; + } + + .Vx2ADA { + color: red; + } + + .Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: _5unArO; + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from \\"./classes.modules.css\\" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from \\"classes.modules.css\\" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from \\"./classes.modules.css\\" ; + composes: className otherClassName from \\"./classes.modules.css\\" ; + composes: className from \\"./classes.modules.css\\" , otherClassName from \\"./classes.modules.css\\" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from\\"./classes.modules.css\\",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from \\"./classes.modules.css\\"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\\\\% from \\"./classes.modules.css\\"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(XEyeRq, 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --NxHrla(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --transparent-global(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: --NxHrla(var(--base-color), 0.8); + background-color: --transparent-global(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .Vx2ADA { + color: red; + } + + /** test **/.Vx2ADA { + color: red; + } + + /** test **/#jcIvvc { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.just-class { + color: red; +} + +.xcsnD2 { + color: red; +} + +.my-global-local { + color: red; +} + +.YK629R.d69pL2 { + color: red; +} + +.bBUtJ3 ._10-3eM { + color: red; +} + +div:not(._5KiKr2) { + color: blue; +} + +p:not(#dBVRDQ) { + font-weight: bold; +} + +.lAqA-R { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .Zq4Bgu { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .zwwxVU { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.n5D5Q0 { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.-bicf2 { + color: red; +} + +.global-befor-local .-bicf2 { + color: red; +} + +.-bicf2 .global-after-local { + color: red; +} + +.LXyTj4 { + &.Vx2ADA { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .ueKKku { + c_value: some-value; + } + + &.v4rNLS { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +.lSYuKq { + color: white; +} + +.global-class-other { + color: red; +} + +.pdN5nk { + } + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes Svchdz {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes h18zzQ {} +@keyframes local-keyframes-old-syntax {} + +.foo { + animation-name: basic-keyframes, global-keyframes, Svchdz; +} + +@property --z8dXmV { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes _1zMqGM { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--z8dXmV), + black var(--z8dXmV) + ); + animation: _1zMqGM 2.5s ease infinite; +} + +@scope (.uiPdKt) to (.class) { + .article-footer { + border: 5px solid black; + } + .wCljLW { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + --yBn7O5, + --global-foo-bar, + /** Deprecated syntax */ + --yBn7O5, + --global-foo-bar; +} + +.class { + background-color: + var(--foo-bar), + var(--yBn7O5), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--yBn7O5), + var(--global-foo-bar), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule DqBFzD {} + +.class { + custom-name: DqBFzD; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: jOrreA animation-name-test +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +" +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: prod 1`] = ` +Object { + "UsedClassName": "_7t7sag", + "VARS": "--vZ1yis ZREh1J undefined BOGpjq", + "__webpack_modules__": 3, + "animation": "I7H8FK", + "animationName": "bvLAsC", + "class": "Vx2ADA", + "classInContainer": "_73-7in", + "classLocalScope": "XlQsKD", + "classNameAfterBrokenKeyframes": "l-59kN", + "cssModuleWithCustomFileExtension": "Kp-Qk2", + "currentWmultiParams": "RwyLnw", + "deepClassInContainer": "cVCisO", + "displayFlexInSupportsInMediaUpperCase": "xtny9t", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "_276lNI qoIJa_ beforeName A8YDR8 _0xrNKu importName secondImport u-Iyhp eHk-1R _0xrNKu _0xrNKu RYh5jd _0xrNKu RYh5jd className className classNameOther className classNameOther qoIJa_ qoIJa_ u-Iyhp qoIJa_ u-Iyhp", + "exportNameOtherFromKeyword": "SVt4hC xjD3LP", + "exportNameOtherFromKeywordWithFrom1": "y7Ml6Q from", + "exportNameOtherFromKeywordWithFrom2": "Ns9ysL FVDuEC", + "exportNameOtherNoSpaces": "atrg9z qoIJa_ beforeName A8YDR8", + "exportNameWeirdCharacters": "i-n39D Ohvj7e XEiQF- dsEYX4 _2sUimK Jsveeg q8W_qY Vfq5Q9", + "futureWmultiParams": "dUydqb", + "global": undefined, + "hasWmultiParams": "ZU5UXg", + "ident": "_9V9u7I", + "inLocalGlobalScope": "MoUXzC", + "inSupportScope": "cFKjtQ", + "isWmultiParams": "n_QmMs", + "keyframes": "_5UlNeX", + "keyframesUPPERCASE": "i6YAqp", + "local": "ejgZjv oNuIA5 Zi-p0y HEwyXh", + "local2": "P7cOan qIVXrl", + "localkeyframes2UPPPERCASE": "qQhAdK", + "matchesWmultiParams": "lQoz4m", + "media": "n5pxIL", + "mediaInSupports": "xwpz-g", + "mediaWithOperator": "geZgE8", + "mozAnimationName": "PrCJhD", + "mozAnyWmultiParams": "r8_i3a", + "myColor": "--_14zVD_", + "nested": "kbu2T9 undefined znU9p0", + "notAValidCssModuleExtension": true, + "notWmultiParams": "_2oRg10", + "paddingLg": "_4VO-a4", + "paddingSm": "_9lyW8s", + "pastWmultiParams": "yO1Vkb", + "supports": "WqxrhC", + "supportsInMedia": "vLQT6D", + "supportsWithOperator": "x_zgIp", + "textColor": "--pQy7h-", + "vars": "--QrLdlL g-7LxA undefined OnsqKz", + "webkitAnyWmultiParams": "QlaHVq", + "whereWmultiParams": "YmjIRz", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: prod 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.PfAPbP { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.BCixt8 { color: red; } + + + +.BCixt8 { + &.DVs3Z5 { color: red; } +} + + + +.BCixt8 { + @media (min-width: 1024px) { + &.DVs3Z5 { color: red; } + } +} + + + +.BCixt8 { + @media (min-width: 1024px) { + &.DVs3Z5 { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.BCixt8 { height: 40px; height: 36px; } + + + +.elijK0 { + color: red; +} + + + +#elijK0 { + color: red; +} + + + +.elijK0 > .elijK0 { + color: red; +} + + + +.red { + color: .red; +} + + + +.QW6jUq { + color: blue; +} + + + +.BCixt8 { color: red; } + + + +.BCixt8 { color: red; } +.DVs3Z5 { color: yellow } + + + + +.BCixt8 { color: blue; } + + + + +.bP5vQs { color: red; } + + + + +.bP5vQs { margin: calc(base * 2); } + + + + +.bP5vQs { content: \\"test-a\\" \\"test-b\\"; } + + + +.BCixt8 { color: var(--color); } + + + + + + + +.BCixt8 { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.BCixt8 { color: blue; } +.DVs3Z5 { color: red } + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { color: color(red lightness(50%)); } + + + +:root { --nSXNVB: red; } + + + +:root { --nSXNVB: ; } + + + +:root { --nSXNVB: ; } + + + +:root { --nSXNVB: /* comment */; } + + + + +.elijK0 { + color: red; +} + + + + +.r4AQwd { + color: red; + color: red; + color: blue; +} + + + +.nSXNVB { + color: /* test */red/* test */; +} + + + +.nSXNVB { + color: /* test *//* test */red/* test */; +} + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { color: blue; } + + + +.BCixt8 { color: blue; } + + + +.BCixt8 { color: red; } + + + +.nSXNVB { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.BCixt8 { color: blue; } + + + +:root { --nSXNVB: /* + multiline + comment +*/; } + + + + +/*!*********************************************!*\\\\ + !*** css ./var-function-export.modules.css ***! + \\\\*********************************************/ +:root { + --_3Ux-sI: red; + --yZhdOv: blue; + --tPUA0N: black; + --_5g4K-I: red; + --xgN30d: red; + --dYeZZq: red; +} + +._3Ux-sI { + color: red; +} + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --ir5X1L: brown; + --_95dv-7: red; + --Hin0Tw: blue; + --fSHHi8: yellow; + --: \\"reserved\\"; + --_7jGqfY: green; +} + +.G2wF_f { + color: var(--ir5X1L); +} + +@property --_3ZgcT1 { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.G2wF_f { + color: var(--_3ZgcT1); +} + +div { + background-color: var(--OGFY0R); +} + +.VV6sCc { + --OGFY0R: cornflowerblue; +} + +.NkXqny { + --OGFY0R: aquamarine; +} + + +._0O8snK { + /* Red if --my-var is not defined */ + color: var(--_95dv-7, red); +} + +.VV6sCc { + /* pink if --my-var and --my-background are not defined */ + color: var(--_95dv-7, var(--Hin0Tw, pink)); +} + +._RR2Xo { + color: var(--); +} + +.FfCQtG { + color: var(--_7jGqfY); +} + +._p_8K4 { + color: var(--my-global); +} + +.sbN5bF { + color: var(--my-global, pink); +} + +._0dNSYL { + color: var(--my-global, var(--my-global-background)); +} + +.MRYc-E { + color: var(--my-global, var(--my-global-background, pink)); +} + +._3CcAHX { + color: var(--my-global, var(--Hin0Tw, pink)); +} + +._98fBm- { + color: var( --my-global,var(--Hin0Tw,pink)); +} + +.Ll9hBj { + background: var( --ir5X1L , var( --Hin0Tw , pink ) ) , var(--my-global); +} + +.TrYqtI { + background: var(--ir5X1L,var(--Hin0Tw,pink)),var(--my-global); +} + +.n7N3Yd { + color: var(--_3Ux-sI); +} + +.Cavu2H { + color: var(--ir5X1L, var(--_3Ux-sI)); +} + +._6emYNM { + color: var(--_3Ux-sI, var(--ir5X1L)); +} + +.XNaXe3 { + color: var(--_3Ux-sI, var(--yZhdOv)); +} + +.mGmB4l { + color: var(--_5g4K-I); +} + +.znpqdH { + color: var(--xgN30d); +} + +.uSxmmJ { + color: var(--dYeZZq); +} + +.AfNRVE { + color: var(--_3Ux-sI, var(--my-global, var(--ir5X1L, red))); +} + +.Y8L6uE { + color: var(--my-global from); +} + +.YIpVZ6 { + color: var(--my-global from 1); +} + +:root { + --_96YRqM: red; +} + +._96YRqM { + color: var(--tPUA0N) +} + +.fYc0TB { + --s_RSVB: #fff; + --_3Y1tZt: #333; + + ._3bkgtY { + --RznKHJ: var(--s_RSVB); + --_5xRK2z: var(--_3Y1tZt); + color: var(--RznKHJ); + background-color: var(--_5xRK2z); + } +} + +.z98eNg { + --bWghMM: 20px; + padding: var(--bWghMM); + + .DZkWGn { + --Po6YnP: 10px; + margin-top: var(--Po6YnP); + padding-left: var(--bWghMM); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --Tkx8II: 1.5rem; + --_6tKwcP: 1.2; + } +} + +.WXHecD { + padding: var(--Tkx8II); /* This will be 1rem or 1.5rem based on screen size */ +} + +.KBwkKG { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--_6tKwcP)); + margin-bottom: calc(var(--Tkx8II) / 2); +} + +.NFM5fM { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--Tkx8II) * 2)); +} + +.lRw1w0 { + /* Locally scoped variables (pseudo-private) */ + --KYEFyd: #e0f7fa; /* Default info color */ + --hy01jq: #00796b; + --IMYWQZ: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--KYEFyd); + color: var(--hy01jq); + border-left: 5px solid var(--hy01jq); +} + +:root { + --sU715o: #fff; + --ucCiqb: #ddd; + --VCrKKa: #333; + --_5qs3s7: royalblue; +} + +._9EHv3u { + border: 1px solid var(--ucCiqb); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & ._4eXs94 { + background: var(--sU715o); + color: var(--VCrKKa); + border-bottom: 1px solid var(--ucCiqb); + + &:last-child { + border-bottom: none; + } + + & .GTk_m7 { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--sU715o) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.reg3Bz { + --sU715o: var(--_5qs3s7); /* Nested override */ + --VCrKKa: #fff; /* Nested override */ + + & .GTk_m7 { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.z9tVpZ { + /* These variables are scoped only to elements within this specific container */ + --sU715o: #333; + --ucCiqb: #555; + --VCrKKa: #eee; + --_5qs3s7: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.md0xJj { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --QDMG1D: 48px; + --Yg5yRR: 1rem; + + & ._0mjaHZ { + width: var(--QDMG1D); + height: var(--QDMG1D); + border-radius: 50%; + background: lightgray; + } + + & .nXoMcQ { + font-size: var(--Yg5yRR); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --QDMG1D: 10cqw; /* Dynamic size based on container width (10% of container) */ + --Yg5yRR: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --_8Q6SqL: #007bff; + --s_RSVB: var(--_8Q6SqL); /* --text-color now uses the value of --primary-color */ + --_4yWuy5: linear-gradient(to right, var(--_8Q6SqL), #6c757d); +} + +.__B_Ni { + color: var(--s_RSVB); + background: var(--_4yWuy5); +} + +/*!*********************************!*\\\\ + !*** css ./classes.modules.css ***! + \\\\*********************************/ +.qoIJa_ { + color: red +} + +.u-Iyhp { + color: green; +} + +.eHk-1R { + color: blue; +} + +.FVDuEC { + color: yellow; +} + +.Ohvj7e { + color: red; +} + +.XEiQF- { + color: red; +} + +.dsEYX4 { + color: red; +} + +._2sUimK { + color: red; +} + +.Jsveeg { + color: red; +} + +.q8W_qY { + color: red; +} + +.Vfq5Q9 { + color: tan; +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --_2qSR8B: --_6RMPbG; +} + +@color-profile --_6RMPbG { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.wEhvQL { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.Vx2ADA { + color: red; +} + +.ejgZjv, +.oNuIA5 .global, +.Zi-p0y { + color: green; +} + +.global .HEwyXh { + color: yellow; +} + +.P7cOan.global.qIVXrl { + color: blue; +} + +._2oRg10 div:not(.eBN_LH, .UMWLJb, ._7dxdKQ) { + pointer-events: initial !important; +} + +.n_QmMs :is(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.lQoz4m :matches(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.YmjIRz :where(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.ZU5UXg div:has(.eBN_LH, .UMWLJb, ._7dxdKQ) { + pointer-events: initial !important; +} + +.RwyLnw div:current(p, span) { + background-color: yellow; +} + +.yO1Vkb div:past(p, span) { + display: none; +} + +.dUydqb div:future(p, span) { + background-color: yellow; +} + +.r8_i3a div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.QlaHVq li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.lQoz4m :matches(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.kbu2T9.nested2.znU9p0 { + color: pink; +} + +#_9V9u7I { + color: purple; +} + +@keyframes _5UlNeX { + 0% { + left: var(--rl5mza); + top: var(--GZM3UO); + color: var(--pQ1bbl); + } + 100% { + left: var(--n4CyrU); + top: var(--coGU7L); + color: var(--oeqXKa); + } +} + +@keyframes Tks0ew { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.I7H8FK { + animation-name: _5UlNeX; + animation: 3s ease-in 1s 2 reverse both paused _5UlNeX, Tks0ew; + --rl5mza: 0px; + --GZM3UO: 0px; + --n4CyrU: 10px; + --coGU7L: 20px; +} + +.g-7LxA { + color: var(--QrLdlL); + --QrLdlL: red; +} + +.OnsqKz { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .n5pxIL { + color: var(--QrLdlL); + --QrLdlL: green; + } +} + +@media screen and (max-width: 600px) { + .geZgE8 { + color: var(--QrLdlL); + --QrLdlL: purple; + } +} + +@supports (display: grid) { + .WqxrhC { + display: grid; + } +} + +@supports not (display: grid) { + .x_zgIp { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .xwpz-g { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .vLQT6D { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .xtny9t { + display: flex; + } + } +} + +.EMl_Zd { + ANIMATION-NAME: i6YAqp; + ANIMATION: 3s ease-in 1s 2 reverse both paused i6YAqp, qQhAdK; + --rl5mza: 0px; + --GZM3UO: 0px; + --n4CyrU: 10px; + --coGU7L: 20px; +} + +@KEYFRAMES i6YAqp { + 0% { + left: VAR(--rl5mza); + top: VAR(--GZM3UO); + color: VAR(--pQ1bbl); + } + 100% { + left: VAR(--n4CyrU); + top: VAR(--coGU7L); + color: VAR(--oeqXKa); + } +} + +@KEYframes qQhAdK { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .AgZzby { + color: yellow; +} + +.ZREh1J { + color: VAR(--vZ1yis); + --vZ1yis: red; +} + +.BOGpjq { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .cFKjtQ { + color: red; + } +} + +.rWk7j_ { + animation: 3s bvLAsC; + -webkit-animation: 3s bvLAsC; +} + +.Sa2viG { + animation: bvLAsC 3s; + -webkit-animation: bvLAsC 3s; +} + +.lkeYnD { + animation-name: bvLAsC; + -webkit-animation-name: bvLAsC; +} + +.ot4wJ0 { + --q2l5qf: animationName; +} + +@keyframes bvLAsC { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes bvLAsC { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes PrCJhD { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style _0L28GV { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --_14zVD_ { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --U0twDG { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --IvCWGE { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.Vx2ADA { + color: var(--_14zVD_); +} + +@layer utilities { + ._9lyW8s { + padding: 0.5rem; + } + + ._4VO-a4 { + padding: 0.8rem; + } +} + +.Vx2ADA { + color: red; + + .COckJ5 { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .QwrGJR { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .rKLROg { + display: flex; + } + } + + @layer foo { + background: red; + + .Sin_15 { + background: red; + } + } + + @container LXyTj4 { + background: red; + + .Sin_15 { + background: red; + } + } +} + +.om4V6V { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .OyMPmk; + unknown2: .test; + unknown3: .OyMPmk; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .KBEflt .global { + color: red; +} + +@unknown .KBEflt .global { + color: red; +} + +.k-FqZw { + .hVrW41 { + color: var(--QrLdlL); + } +} + +.x1V4EV { + color: red; + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .foo, .ueKKku { + color: red; + } +} + +#HS0ws2 { + color: red; + + #KdpZk7 { + color: red; + } +} + +.oNOznk { + .lQoz4m div:has(.v62rx-, .FGoXEZ) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .NSL9R7 { + color: blue; + } +} + +@unknown .class { + color: red; + + .Vx2ADA { + color: red; + } +} + +.class .MoUXzC, +.class .MoUXzC, +.XlQsKD .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + ._73-7in { + font-size: 1.5em; + } +} + +@container qYFiUT (min-width: 400px) { + @container (width > 400px) { + .cVCisO { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.e7Ysmu:-ms-input-placeholder { + --cAPpAb: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--cAPpAb)); +} +.e7Ysmu::-ms-input-placeholder { + --cAPpAb: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--cAPpAb)); +} +.e7Ysmu::placeholder { + --cAPpAb: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--cAPpAb)); +} + +:root { + --OyMPmk: dark; +} + +@media screen and (prefers-color-scheme: var(--OyMPmk)) { + .v4rNLS { + color: white; + } +} + +@keyframes AMud0z { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.Vx2ADA { + animation: + LXyTj4 var(--q2l5qf) 3s, + var(--q2l5qf) 3s, + 3s linear 1s infinite running AMud0z, + 3s linear env(foo, var(--v4rNLS)) infinite running AMud0z; +} + +:root { + --v4rNLS: 10px; +} + +.Vx2ADA { + bar: env(foo, var(--v4rNLS)); +} + +.global-foo, .ueKKku { + .NSL9R7 { + color: blue; + } + + @media screen { + .my-global-class-again, + .W4wdXr { + color: red; + } + } +} + +.qR8xqZ { + .qNYg6K { + color: red; + } +} + +.uPdoJV { + @media screen { + .BBVz54 { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --LXyTj4: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .Vx2ADA, .kbu2T9.nested2.znU9p0 { + animation: AMud0z 3s; + } + + .oNuIA5 .global, + .Zi-p0y { + color: red; + } +} + +@unknown var(--LXyTj4) { + color: red; +} + +.Vx2ADA { + .Vx2ADA { + .Vx2ADA { + .Vx2ADA {} + } + } +} + +.Vx2ADA { + .Vx2ADA { + .Vx2ADA { + .Vx2ADA { + animation: AMud0z 3s; + } + } + } +} + +.Vx2ADA { + animation: AMud0z 3s; + .Vx2ADA { + animation: AMud0z 3s; + .Vx2ADA { + animation: AMud0z 3s; + .Vx2ADA { + animation: AMud0z 3s; + } + } + } +} + +.PmzqEY { + . global(.Vx2ADA) { + color: red; + } + + : global(.Vx2ADA) { + color: red; + } + + : global .Vx2ADA { + color: red; + } + + : local(.Vx2ADA) { + color: red; + } + + : local .Vx2ADA { + color: red; + } + + # hash { + color: red; + } +} + +.DCHDbS { + .class { + color: red; + } + + .class { + color: red; + } + + .Vx2ADA { + color: red; + } + + .Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } +} + +.LXyTj4 { + color: red; + + .ueKKku + & { color: blue; } +} + +.QZPLpm, #ItnhTD { + &:hover > .v4rNLS { color: red; } +} + +.LXyTj4 { + & :is(.ueKKku, &.v4rNLS) { color: red; } +} + +.vm-iHv { + color: green; + & .rWk7j_ { color: blue; } + color: red; +} + +.xV0P-R { + color: blue; + + @scope (& > ._2n4Jtg) to (& > .XGwd1x) { + & .evvjkJ { + color: red; + } + } +} + +.xV0P-R { + color: blue; + + @scope (& > ._2n4Jtg) to (& > .XGwd1x) { + .evvjkJ { + color: red; + } + } + + .rWk7j_ { + color: red; + } +} + +@scope (.r3yzH0) { + :scope { border-block-end: 1px solid white; } +} + +.r3yzH0 { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.LXyTj4 { + display: grid; + + @media (orientation: landscape) { + .ueKKku { + grid-auto-flow: column; + + @media (min-width > 1024px) { + ._746DcL { + display: grid; + } + + max-inline-size: 1024px; + + .MFBiYY { + display: grid; + } + } + } + } +} + +@counter-style _0L28GV { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: _0L28GV; +} + +@counter-style YZsmDI { + fallback: _0L28GV; + system: extends _0L28GV; + speak-as: _0L28GV; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(img/shape.png); + list-style: none; + list-style: none disc url(img/shape.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: YZsmDI; + list-style: YZsmDI; +} + +@container (width > 400px) and style(--jGz9MW: true) { + .Vx2ADA { + font-size: 1.5em; + } +} + +@container _16PWt_ (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container _5unArO scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container r3yzH0 (width > 400px), style(--jGz9MW: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.rPnlZa { + container-name: _16PWt_; + container-type: inline-size; + + container: none; + container: inherit; + container: _5unArO / inline-size; + container: _5unArO / size; + container: _5unArO / scroll-state; + --ylD2It: _5unArO; + + container: var(--ylD2It); + --_5bOQpQ: small; + container-type: inline-size; +} + + +@container qYFiUT style(--_5bOQpQ: small) { + .r3yzH0 { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --HKIucg { + font-family: Bixa; +} + +.Fr8iIT { + font-palette: --HKIucg; +} + +@keyframes LXyTj4 { /* ... */ } +@keyframes LXyTj4 { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .Vx2ADA { + opacity: 0; + transform: scaleX(0); + } +} + +.Vx2ADA { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (._21vUr) { + .Vx2ADA { opacity: 0; } + + :scope .wCljLW { opacity: 0; } + + & .Vx2ADA { opacity: 0; } +} + +@position-try --_5N2X2u { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --_2qktad { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --_9YwAF4 { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --QRQnOT { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.Qtv_4z { + position: fixed; + position-anchor: --_6U2qi-; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --_5N2X2u, --_2qktad, + --_9YwAF4, --QRQnOT; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --XQsKZa { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.Zq4Bgu { + background-color: color(--XQsKZa 0% 70% 20% 0%); +} + +.OyMPmk { + test: (1, 2) [3, 4], { 1: 2}; + .rWk7j_ { + width: 200px; + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } +} + +.OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + } +} + +.OyMPmk { + width: 200px; + + .OyMPmk { + .OyMPmk { + width: 200px; + } + } +} + +.OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + } + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + } + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } + width: 200px; +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } + .OyMPmk { + width: 200px; + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } + width: 200px; + .OyMPmk { + width: 200px; + } +} + +#OyMPmk { + c: 1; + + #OyMPmk { + c: 2; + } +} + +@property --TR3h24 { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.lAqA-R { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --TR3h24: 20%; + --E7I-GK: orange; +} + +.RKcB4N { + width: var(--TR3h24); + height: var(--TR3h24); + background-color: var(--E7I-GK); +} + +.iX76ke { + --TR3h24: initial; + --E7I-GK: inherit; +} + +._4Um4fO { + /* invalid values */ + --TR3h24: 1000px; + --E7I-GK: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --z8dXmV { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.ueKKku { + display: inline-block; + --z8dXmV: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--z8dXmV), + black var(--z8dXmV) + ); + animation: btQQRC 2.5s ease infinite; +} + +@keyframes btQQRC { + to { + --z8dXmV: 100%; + } +} + +@keyframes pTHntp { /* ... */ } +@keyframes/**test**/pTHntp { /* ... */ } +@keyframes/**test**/pTHntp/**test**/{ /* ... */ } +@keyframes/**test**//**test**/pTHntp/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ pTHntp /**test**/ /**test**/ { /* ... */ } +@keyframes CaYExG { /* ... */ } +@property/**test**/--TR3h24 { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--TR3h24/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--TR3h24/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --TR3h24 /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --TR3h24 /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --TR3h24 /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused pTHntp, Tks0ew; + animation-name: pTHntp; + animation-duration: 2s; +} + +.h9fN34 { + width: var( --TR3h24 ); + height: var(/**comment**/--TR3h24); + background-color: var( /**comment**/--E7I-GK); + background-color-1: var(/**comment**/ --E7I-GK); + background-color-2: var( /**comment**/ --E7I-GK); + background-color-3: var( /**comment**/ --E7I-GK /**comment**/ ); + background-color-3: var( /**comment**/--E7I-GK/**comment**/ ); + background-color-3: var(/**comment**/--E7I-GK/**comment**/); +} + +@keyframes/**test**/LXyTj4 { /* ... */ } +@keyframes /**test**/LXyTj4 { /* ... */ } +@keyframes/**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**//**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**/ /**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**/ /**test**/LXyTj4 { /* ... */ } +@keyframes /**test**//**test**/LXyTj4 { /* ... */ } +@keyframes/**test**//**test**/LXyTj4 { /* ... */ } +@keyframes/**test**//**test**/LXyTj4/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ LXyTj4 /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/Vx2ADA { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.vUySPm { + --Tn4rb2: black; + --xHd8kt: 10px; + --LXyTj4: 10px; + --ueKKku: calc(var(--LXyTj4) + 10px); + --_8NggIH: linear-gradient(to top, var(--Tn4rb2), white); + --BAAHwR: \\"test\\"; + --DU0JmL: yellow; + --dgphMa: red; + --KSHBQc: red; + --NfhiW3: black; + -foo: calc(var(--ueKKku) + 10px); + var: var(--Tn4rb2); + var1: var(--LXyTj4); + var2: var(--xHd8kt); + content: \\" (\\" var(--BAAHwR) \\")\\"; + var3: var(--Tn4rb2, blue); + var4: var(--DU0JmL,); + var5: var(--DU0JmL, initial); + var6: var(--DU0JmL, var(--dgphMa)); + var7: var(--DU0JmL, var(--dgphMa, red)); + var8: var(--ASDYPu); + background-color: var(--KSHBQc, var(--NfhiW3, white)); +} + +.OUbvwN { + background-color: var(--OyMPmk); + --OyMPmk: red; +} + +.A8YDR8 { + border-radius: 12px; +} + +._0xrNKu { + border-radius: 12px; +} + +.RYh5jd { + border-radius: 12px; +} + +._276lNI { + border: red; +} + +.atrg9z { + } + +.xjD3LP { + color: red; +} + +.SVt4hC { + } + +.y7Ml6Q { + } + +.Ns9ysL { + } + +.i-n39D { + } + +@function --HPKrEe(--PmceRj , --mban9m type( | )) returns { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +section { + --qImv4k: #faa6ff; + background-color: --HPKrEe(var(--qImv4k), 0.8); +} + +@function --Zbzld7(--L8UoHi #, ---vGTrA ) { + result: calc(max(var(--L8UoHi)) + var(---vGTrA)); +} + +div { + width: --Zbzld7({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --vY2Qe3(--I7H8FK, --SKv8kz) { + ---dC2HS: 1s; + --owuGkY: linear; + result: var(--I7H8FK) var(---dC2HS) var(--SKv8kz) var(--owuGkY); +} + +div { + animation: --anim-1s(XEyeRq, 2); +} + +@function --_12bUXN(--q5OeI3) { + --Tzqh_b: 2; + result: --Sr06Ag(); +} + +@function --Sr06Ag() returns { + result: calc(var(--q5OeI3) + var(--Tzqh_b)); +} + +div { + z-index: --_12bUXN(1); /* 3 */ +} + +@function --_7vN-uQ(--_8NIeZV, --wwBASX) { + result: var(--wwBASX); + @media (width < 700px) { + result: var(--_8NIeZV); + } +} + +@function --OPnU-W(--_8NIeZV, --wwBASX) { + result: if(media(width < 700px): var(--_8NIeZV) ; else: var(--wwBASX)); +} + +@function --HPKrEe(--PmceRj, --mban9m) { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +@function --NxHrla(--PmceRj, --mban9m) { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +@function --transparent-global(--PmceRj, --mban9m) { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +section { + --qImv4k: #faa6ff; + background-color: --HPKrEe(var(--qImv4k), 0.8); + background-color: --NxHrla(var(--qImv4k), 0.8); + background-color: --transparent-global(var(--qImv4k), 0.8); +} + +:root { + --oTVsLr: sharp; +} + +.Y4Gwu3 { + border-radius: if(style(--oTVsLr: sharp): 0px; else: revert-rule); +} + +@color-profile --XQsKZa { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.Vx2ADA { + background-color: color(--XQsKZa 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--_2qSR8B 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --pQy7h-: #eee; +} + +.RRkM-G { + color: var(--pQy7h-); +} + +/* Just nesting */ +.yIfcPh { + --pQy7h-: #fff; + --_5Uuad3: #333; + + .mYBaWo { + --i565Yw: var(--pQy7h-); + --hZWz_N: var(--_5Uuad3); + color: var(--i565Yw); + background-color: var(--hZWz_N); + } +} + +/* A container context based on inline size */ +.rPnlZa { + --vw3Mfv: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--vw3Mfv: blue) { + .r3yzH0 { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes PmzqEY; + +.l-59kN { + color: red; +} + +.QOKmBD { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .Vx2ADA { + color: red; + } + + /** test **/.Vx2ADA { + color: red; + } + + /** test **/#jcIvvc { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.Vx2ADA{.Vx2ADA{}} +.Vx2ADA{color:#fff5f5} +.Vx2ADA{.Vx2ADA{color:#f1f1f1}} +.Vx2ADA{--LXyTj4:#fff5f5} +.Vx2ADA{--LXyTj4:#fff5f5;color:#f1f1f1} +.Vx2ADA{--LXyTj4:#fff5f5;color:#f1f1f1;} +.Vx2ADA{--LXyTj4:#fff5f5;color:#f1f1f1;.Vx2ADA{color:#f1f1f1}} +.Vx2ADA{--LXyTj4:#fff5f5;.Vx2ADA{color:#f1f1f1}color:#f1f1f1;} +.Vx2ADA{.Vx2ADA{color:#f1f1f1}--LXyTj4:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.Vx2ADA{--ueKKku:{1, 'string', .Vx2ADA, #_5YNl5V, #NRwndY}} +.Vx2ADA{--v4rNLS:[1, \\"string\\", .class, #f1f1f1, #id]} +.Vx2ADA{--v4rNLS:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.y1y3Ez { + color: red; +} + +.xcsnD2 { + color: red; +} + +.my-global-local { + color: red; +} + +.YK629R.d69pL2 { + color: red; +} + +.bBUtJ3 ._10-3eM { + color: red; +} + +div:not(._5KiKr2) { + color: blue; +} + +p:not(#dBVRDQ) { + font-weight: bold; +} + +.lAqA-R { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .Zq4Bgu { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .zwwxVU { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.N3R3DF { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .RKcB4N.n5D5Q0 { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.lQXL_B { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .Zq4Bgu { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .zwwxVU { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.N3R3DF { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .RKcB4N.n5D5Q0 { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.-bicf2 { + color: red; +} + +.EGLCHZ .-bicf2 { + color: red; +} + +.-bicf2 .QxeYlf { + color: red; +} + +.LXyTj4 { + &.Vx2ADA { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .ueKKku { + c_value: some-value; + } + + &.v4rNLS { + c_value: some-value; + } + } +} + +/* Composes */ + +.Vx2ADA { + color: black; +} + +.lSYuKq { + color: white; +} + +.global-class-other { + color: red; +} + +.pdN5nk { + } + +/* At-rules */ + +@keyframes _7rJY4U {} +@keyframes Svchdz {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes h18zzQ {} +@keyframes local-keyframes-old-syntax {} + +.LXyTj4 { + animation-name: _7rJY4U, global-keyframes, Svchdz; +} + +@property --z8dXmV { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes _1zMqGM { + to { + --z8dXmV: 100%; + } +} + +.ueKKku { + display: inline-block; + --z8dXmV: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--z8dXmV), + black var(--z8dXmV) + ); + animation: _1zMqGM 2.5s ease infinite; +} + +@scope (.uiPdKt) to (.class) { + .NBhEtf { + border: 5px solid black; + } + .wCljLW { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --lRiOdz: red; + --yBn7O5: red; + --ho4NPI: red; + --hBmufP: + red, + --yBn7O5, + --global-foo-bar, + /** Deprecated syntax */ + --yBn7O5, + --global-foo-bar; +} + +.Vx2ADA { + background-color: + var(--lRiOdz), + var(--yBn7O5), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--yBn7O5), + var(--global-foo-bar), + var(--global-foo-bar), + var(--_2qSR8B); +} + +/** Custom local value */ + +@unknown-rule DqBFzD {} + +.Vx2ADA { + custom-name: DqBFzD; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: jOrreA animation-name-test +} + +/* GRID */ + +.KKPJ1t { + grid: none; +} + +.qDQDaP { + grid: \\"rWk7j_-a\\" 100px \\"Sa2viG-b\\" 1fr; +} + +.ufSA87 { + grid: [zUFz4T-line-name1] \\"rWk7j_-a\\" 100px [IJTjHw-line-name2]; +} + +.U_FjnN { + grid: \\"rWk7j_-a\\" 200px \\"Sa2viG-b\\" min-content; +} + +.yVK-Mn { + grid: \\"rWk7j_-a\\" minmax(100px, max-content) \\"Sa2viG-b\\" 20%; +} + +.E4-SeR { + grid: 100px / 200px; +} + +.M23t0k { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.M49YDn { + grid: 200px / auto-flow; +} + +._6owU8c { + grid: 30% / auto-flow dense; +} + +._6gnc-c { + grid: repeat(3, [NgDCMF-line1 xSFYcu-line2 A9yYcH-line3] 200px) / auto-flow 300px; +} + +.rQpriK { + grid: [NgDCMF-line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.LNd3Cl { + grid: auto-flow / 200px; +} + +.Weaj1p { + grid: auto-flow dense / 30%; +} + +.ysl4TV { + grid: auto-flow 300px / repeat(3, [NgDCMF-line1 xSFYcu-line2 A9yYcH-line3] 200px); +} + +.kwQbcr { + grid: auto-flow dense 40% / [NgDCMF-line1] minmax(20em, max-content); +} + +._7CduV2 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.Ej09V1 { + grid-template-areas: 'xkVZ4Z-nav X982uk-main'; +} + +.L5v3x6 { + grid-area: auto / auto / auto / auto; +} + +.JUNxQq { + grid-area: -UptLF-some-grid-area; +} + +._7ywNs4 { + grid-area: -UptLF-some-grid-area / iGBFyB-another-grid-area; +} + +._9TaU0Q { + grid-area: 4 -UptLF-some-grid-area / 2 iGBFyB-another-grid-area; +} + +.R_RYW0 { + grid-area: span 3 / span -UptLF-some-grid-area; +} + +/* Keyword value */ +.IPnoLw { + grid-row-start: auto; +} + +/* values */ +._2P0ffn { + grid-row-start: -UptLF-some-grid-area; +} + +/* + values */ +.tI6rTa { + grid-row-start: 2; +} +.dijhL1 { + grid-row-start: -UptLF-some-grid-area 4; +} + +/* span + + values */ +.ORVUsN { + grid-row-start: span 3; +} +.jz9aWd { + grid-row-start: span -UptLF-some-grid-area; +} +.tOC1uA { + grid-row-start: 5 -UptLF-some-grid-area span; +} + +/* Global values */ +.s7WOvJ { + grid-row-start: inherit; +} +.YHN0MI { + grid-row-start: initial; +} +.N8URft { + grid-row-start: revert; +} +.-pbWvi { + grid-row-start: revert-layer; +} +.pJgV0N { + grid-row-start: unset; +} + +.kvSpTR { + grid-template-areas: + \\"rWk7j_-a Sa2viG-b .\\" + \\"rWk7j_-a lkeYnD-c ot4wJ0-d\\"; +} + +.Ulocye { + grid-template-rows: [zUFz4T-line-name1] 100px [IJTjHw-line-name2 yPPlU6-line-name3]; +} + +.wyuk1y { + grid-template-rows: + [zUFz4T-line-name1 IJTjHw-line-name2] 100px + repeat(auto-fit, [zUFz4T-line-name1] 300px) [yPPlU6-line-name3]; +} + +._3XmJPy { + grid-template-rows: + [zUFz4T-line-name1] 100px [IJTjHw-line-name2] + repeat(auto-fit, [yPPlU6-line-name3 _5sjD27-line-name4] 300px) + 100px; +} + +.YC2t9- { + grid-template-rows: max-content 1fr max-content; +} + +.c9md82 { + grid-template: + [F71VCF-header-top] \\"rWk7j_-a rWk7j_-a rWk7j_-a\\" [mr66Z_-header-bottom] + [tsTNVP-main-top] \\"Sa2viG-b Sa2viG-b Sa2viG-b\\" 1fr [_2PB9a0-main-bottom] + / auto 1fr auto; +} + +.-cy8Zv { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [_1Yrglr-col-start] minmax(150px, 1fr) [UIbRwt-col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [Zfi6tA-header-start] 100px [TFOL0g-header-end RA1tbr-content-start] auto [q_keew-content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.Vx2ADA { + grid-template-columns: repeat(auto-fit, [_1Yrglr-col-start] minmax(150px, 1fr) [UIbRwt-col-end]); +} + +.EDnegT { + display: grid; + grid-template-columns: [rRCri6-main-start] 1fr [RA1tbr-content-start] 1fr [q_keew-content-end] 1fr [xGMSmb-main-end]; + grid-template-rows: [rRCri6-main-start] 100px [RA1tbr-content-start] 100px [q_keew-content-end] 100px [xGMSmb-main-end]; +} + +.E_Xs87 { + grid-column-start: rRCri6-main-start; + grid-row-start: rRCri6-main-start; + grid-row-end: xGMSmb-main-end; +} + +.lG966Z { + grid-column-start: q_keew-content-end; + grid-row-start: rRCri6-main-start; + grid-row-end: q_keew-content-end; +} + +.AyxbM3 { + grid-column-start: RA1tbr-content-start; + grid-row-start: rRCri6-main-start; +} + +.sEMgMA { + grid-column-start: RA1tbr-content-start; + grid-column-end: xGMSmb-main-end; + grid-row-start: q_keew-content-end; +} + +.EDnegT { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd\\" + \\"i9q6VM-sd i9q6VM-sd i9q6VM-sd X982uk-main X982uk-main X982uk-main X982uk-main X982uk-main X982uk-main\\" + \\"nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft\\"; +} + +.Zq4Bgu { + grid-area: mtsh_D-hd; +} + +.p920hy { + grid-area: nMcK39-ft; +} + +.evvjkJ { + grid-area: X982uk-main; +} + +.SuLRt4 { + grid-area: i9q6VM-sd; +} + +.EDnegT > div.xdTdxz { + z-index: 10; + grid-column: rRCri6-main-start / xGMSmb-main-end; + grid-row: wJdD_6-hd-start / -CSZqj-ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.EDnegT { + display: grid; + grid-template-columns: repeat(12, [_1Yrglr-col-start] 1fr); +} + +.dBiT79 { + grid-column: _1Yrglr-col-start / _1Yrglr-col-start 5; +} + +._7kAI1c { + grid-column: _1Yrglr-col-start 7 / span 3; +} + +.EDnegT { + grid-template-columns: repeat(4, [TzgowJ-col1-start] 1fr [dQggyi-col2-start] 3fr); +} + +.EDnegT { + grid-template-columns: repeat(4, [_1Yrglr-col-start] 1fr [UIbRwt-col-end]); +} + +.EDnegT { + grid-template-columns: [_1Yrglr-col-start] 1fr [UIbRwt-col-end _1Yrglr-col-start] 1fr [UIbRwt-col-end _1Yrglr-col-start] 1fr [UIbRwt-col-end _1Yrglr-col-start] 1fr [UIbRwt-col-end]; +} + +.fR4zhQ { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +/*!*********************************!*\\\\ + !*** css ./style.module.my-css ***! + \\\\*********************************/ +.Kp-Qk2 { + color: red; +} + +/*!**************************************!*\\\\ + !*** css ./style.module.css.invalid ***! + \\\\**************************************/ +.class { + color: teal; +} + +/*!************************************!*\\\\ + !*** css ./identifiers.module.css ***! + \\\\************************************/ +.jSScCg{ + color: red; + padding: var(--uwANgn); + --uwANgn: 10px; +} + +._7t7sag { + color: green; + padding: var(--k-sang); + --k-sang: 10px; +} + +" +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to create css modules: prod 3`] = ` +Object { + "UsedClassName": "FPwoX1", + "VARS": "---YmVq7 gAOQgg undefined g45L8B", + "__webpack_modules__": 3, + "animation": "_1CLYv0", + "animationName": "AndP3O", + "class": "Q0FGvN", + "classInContainer": "fV5oht", + "classLocalScope": "tXd0_C", + "classNameAfterBrokenKeyframes": "m7eubc", + "cssModuleWithCustomFileExtension": "Yhfh7J", + "currentWmultiParams": "SbgUjN", + "deepClassInContainer": "_9w8IDB", + "displayFlexInSupportsInMediaUpperCase": "v0UVbD", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "tavnFA FABkCo beforeName aPwTqM IPj7ZV importName secondImport _1H2HaF _vcSqh IPj7ZV IPj7ZV _2h_741 IPj7ZV _2h_741 className className classNameOther className classNameOther FABkCo FABkCo _1H2HaF FABkCo _1H2HaF", + "exportNameOtherFromKeyword": "G5CCpw agIvjM", + "exportNameOtherFromKeywordWithFrom1": "u6EQvk from", + "exportNameOtherFromKeywordWithFrom2": "_3wkyOF B1Oyw9", + "exportNameOtherNoSpaces": "J86C29 FABkCo beforeName aPwTqM", + "exportNameWeirdCharacters": "RQL3eC _4NUXjn _0KbLT1 gCHFDQ _33N44G Inzw3x iEo8-C sB8Vj6", + "futureWmultiParams": "u7quBe", + "global": undefined, + "hasWmultiParams": "ZCcpAQ", + "ident": "Se-BYV", + "inLocalGlobalScope": "rUoMuU", + "inSupportScope": "Mbqv56", + "isWmultiParams": "sMpokZ", + "keyframes": "U2-wTz", + "keyframesUPPERCASE": "DA3GL-", + "local": "F5UOXd _68b_hi _9cBUYF rmOZUh", + "local2": "qu3BKV fcet9Z", + "localkeyframes2UPPPERCASE": "exDCO2", + "matchesWmultiParams": "l08kci", + "media": "qq1BeF", + "mediaInSupports": "tZahFq", + "mediaWithOperator": "QjwEig", + "mozAnimationName": "fzmwkF", + "mozAnyWmultiParams": "Lf4YXg", + "myColor": "--wbWhI7", + "nested": "yLct4a undefined Zqmojt", + "notAValidCssModuleExtension": true, + "notWmultiParams": "GGGsI8", + "paddingLg": "y4ZVxz", + "paddingSm": "hxaw53", + "pastWmultiParams": "NSrgYz", + "supports": "uZUIyp", + "supportsInMedia": "kTatWr", + "supportsWithOperator": "LUjpes", + "textColor": "--gjJV_c", + "vars": "--NNsA2u ybnHOd undefined UU67Qr", + "webkitAnyWmultiParams": "rlaEZT", + "whereWmultiParams": "peTfCX", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to disable options: options classes 1`] = ` +Object { + "VARS": "my-app-style_module_css-VARS", + "a": "my-app-style_module_css-a", + "active": "my-app-style_module_css-active", + "again": "my-app-style_module_css-again", + "animation": "my-app-style_module_css-animation", + "animation-name-test": "my-app-style_module_css-animation-name-test", + "animationUpperCase": "my-app-style_module_css-animationUpperCase", + "apply-sharp": "my-app-style_module_css-apply-sharp", + "article-footer": "my-app-style_module_css-article-footer", + "article-header": "my-app-style_module_css-article-header", + "b": "my-app-style_module_css-b", + "bar": "my-app-style_module_css-bar", + "baz": "my-app-style_module_css-baz", + "baz-1": "my-app-style_module_css-baz-1", + "baz-2": "my-app-style_module_css-baz-2", + "bounce": "my-app-style_module_css-bounce", + "box1": "my-app-style_module_css-box1", + "box2": "my-app-style_module_css-box2", + "box3": "my-app-style_module_css-box3", + "box4": "my-app-style_module_css-box4", + "broken": "my-app-style_module_css-broken", + "button": "my-app-style_module_css-button", + "c": "my-app-style_module_css-c", + "card": "my-app-style_module_css-card", + "child1": "my-app-style_module_css-child1", + "class": "my-app-style_module_css-class", + "class-1": "my-app-style_module_css-class-1", + "class-in-container": "my-app-style_module_css-class-in-container", + "class-local-scope": "my-app-style_module_css-class-local-scope", + "class-with-composes": "my-app-style_module_css-class-with-composes my-app-style_module_css-local-class global-class global-class-other my-app-shared_css-local-my-shared-class", + "className": "my-app-style_module_css-className", + "classNameLocal": "my-app-style_module_css-classNameLocal", + "classNameLocalOther": "my-app-style_module_css-classNameLocalOther", + "comments": "my-app-style_module_css-comments", + "container": "my-app-style_module_css-container", + "container-only-classes": "my-app-style_module_css-container-only-classes", + "content": "my-app-style_module_css-content", + "d": "my-app-style_module_css-d", + "deep-class-in-container": "my-app-style_module_css-deep-class-in-container", + "description": "my-app-style_module_css-description", + "disabled": "my-app-style_module_css-disabled", + "displayFlexInMediaInSupports": "my-app-style_module_css-displayFlexInMediaInSupports", + "displayFlexInSupportsInMedia": "my-app-style_module_css-displayFlexInSupportsInMedia", + "displayFlexInSupportsInMediaUpperCase": "my-app-style_module_css-displayFlexInSupportsInMediaUpperCase", + "displayGridInSupports": "my-app-style_module_css-displayGridInSupports", + "err-404": "my-app-style_module_css-err-404", + "error": "my-app-style_module_css-error", + "exportName": "my-app-style_module_css-exportName my-app-classes_modules_css-className beforeName my-app-style_module_css-className my-app-style_module_css-classNameLocal importName secondImport my-app-classes_modules_css-otherClassName my-app-classes_modules_css-otherClassNameToo my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther className className classNameOther className classNameOther my-app-classes_modules_css-className my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName", + "exportNameOtherFromKeyword": "my-app-style_module_css-exportNameOtherFromKeyword my-app-style_module_css-from", + "exportNameOtherFromKeywordWithFrom1": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 from", + "exportNameOtherFromKeywordWithFrom2": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 my-app-classes_modules_css-from", + "exportNameOtherNoSpaces": "my-app-style_module_css-exportNameOtherNoSpaces my-app-classes_modules_css-className beforeName my-app-style_module_css-className", + "exportNameWeirdCharacters": "my-app-style_module_css-exportNameWeirdCharacters my-app-classes_modules_css-a my-app-classes_modules_css--b my-app-classes_modules_css-b- my-app-classes_modules_css---c my-app-classes_modules_css-c-- my-app-classes_modules_css-_d my-app-classes_modules_css-d%", + "f1f1f1": "my-app-style_module_css-f1f1f1", + "feature": "my-app-style_module_css-feature", + "first-nested": "my-app-style_module_css-first-nested", + "first-nested-at-rule": "my-app-style_module_css-first-nested-at-rule", + "first-nested-nested": "my-app-style_module_css-first-nested-nested", + "first-nested-nested-at-rule-deep": "my-app-style_module_css-first-nested-nested-at-rule-deep", + "floatRightInNegativeSupports": "my-app-style_module_css-floatRightInNegativeSupports", + "foo": "my-app-style_module_css-foo", + "footer": "my-app-style_module_css-footer", + "from": "my-app-style_module_css-from", + "gird2": "my-app-style_module_css-gird2", + "global-after-local": "my-app-style_module_css-global-after-local", + "global-befor-local": "my-app-style_module_css-global-befor-local", + "globalVars": "my-app-style_module_css-globalVars", + "globalVarsUpperCase": "my-app-style_module_css-globalVarsUpperCase", + "grid-area": "my-app-style_module_css-grid-area", + "grid-area1": "my-app-style_module_css-grid-area1", + "grid-area2": "my-app-style_module_css-grid-area2", + "grid-area3": "my-app-style_module_css-grid-area3", + "grid-area4": "my-app-style_module_css-grid-area4", + "grid-container": "my-app-style_module_css-grid-container", + "grid-row-start": "my-app-style_module_css-grid-row-start", + "grid-row-start1": "my-app-style_module_css-grid-row-start1", + "grid-row-start10": "my-app-style_module_css-grid-row-start10", + "grid-row-start11": "my-app-style_module_css-grid-row-start11", + "grid-row-start2": "my-app-style_module_css-grid-row-start2", + "grid-row-start3": "my-app-style_module_css-grid-row-start3", + "grid-row-start4": "my-app-style_module_css-grid-row-start4", + "grid-row-start5": "my-app-style_module_css-grid-row-start5", + "grid-row-start6": "my-app-style_module_css-grid-row-start6", + "grid-row-start7": "my-app-style_module_css-grid-row-start7", + "grid-row-start8": "my-app-style_module_css-grid-row-start8", + "grid-row-start9": "my-app-style_module_css-grid-row-start9", + "grid-template": "my-app-style_module_css-grid-template", + "grid-template-areas": "my-app-style_module_css-grid-template-areas", + "grid-template-rows": "my-app-style_module_css-grid-template-rows", + "grid-template-rows1": "my-app-style_module_css-grid-template-rows1", + "grid-template-rows2": "my-app-style_module_css-grid-template-rows2", + "grid-template-rows3": "my-app-style_module_css-grid-template-rows3", + "grid1": "my-app-style_module_css-grid1", + "grid10": "my-app-style_module_css-grid10", + "grid11": "my-app-style_module_css-grid11", + "grid12": "my-app-style_module_css-grid12", + "grid13": "my-app-style_module_css-grid13", + "grid14": "my-app-style_module_css-grid14", + "grid15": "my-app-style_module_css-grid15", + "grid16": "my-app-style_module_css-grid16", + "grid17": "my-app-style_module_css-grid17", + "grid3": "my-app-style_module_css-grid3", + "grid4": "my-app-style_module_css-grid4", + "grid5": "my-app-style_module_css-grid5", + "grid6": "my-app-style_module_css-grid6", + "grid7": "my-app-style_module_css-grid7", + "grid8": "my-app-style_module_css-grid8", + "grid9": "my-app-style_module_css-grid9", + "hash": "my-app-style_module_css-hash", + "header": "my-app-style_module_css-header", + "highlighted": "my-app-style_module_css-highlighted", + "horizontal-small": "my-app-style_module_css-horizontal-small", + "horizontal-tiny": "my-app-style_module_css-horizontal-tiny", + "id": "my-app-style_module_css-id", + "id-bar": "my-app-style_module_css-id-bar", + "id-foo": "my-app-style_module_css-id-foo", + "ident": "my-app-style_module_css-ident", + "importantAnimation": "my-app-style_module_css-importantAnimation", + "in-local-global-scope": "my-app-style_module_css-in-local-global-scope", + "inSupportScope": "my-app-style_module_css-inSupportScope", + "infobox": "my-app-style_module_css-infobox", + "item": "my-app-style_module_css-item", + "item-1": "my-app-style_module_css-item-1", + "item1to5": "my-app-style_module_css-item1to5", + "item7to9": "my-app-style_module_css-item7to9", + "just-class": "my-app-style_module_css-just-class", + "limit": "my-app-style_module_css-limit", + "local": "my-app-style_module_css-local", + "local-class": "my-app-style_module_css-local-class", + "local-class-name": "my-app-style_module_css-local-class-name", + "local-foo-bar": "--my-app-style_module_css-local-foo-bar", + "local-in-global": "my-app-style_module_css-local-in-global", + "local-keyframes": "my-app-style_module_css-local-keyframes", + "local-keyframes-old-syntax": "my-app-style_module_css-local-keyframes-old-syntax", + "local-nested": "my-app-style_module_css-local-nested", + "local1": "my-app-style_module_css-local1", + "local10": "my-app-style_module_css-local10", + "local11": "my-app-style_module_css-local11", + "local12": "my-app-style_module_css-local12", + "local13": "my-app-style_module_css-local13", + "local14": "my-app-style_module_css-local14", + "local15": "my-app-style_module_css-local15", + "local16": "my-app-style_module_css-local16", + "local2": "my-app-style_module_css-local2", + "local3": "my-app-style_module_css-local3", + "local4": "my-app-style_module_css-local4", + "local5": "my-app-style_module_css-local5", + "local6": "my-app-style_module_css-local6", + "local7": "my-app-style_module_css-local7", + "local8": "my-app-style_module_css-local8", + "local9": "my-app-style_module_css-local9", + "localUpperCase": "my-app-style_module_css-localUpperCase", + "mButtonDisabled": "my-app-style_module_css-mButtonDisabled", + "main-paragraph": "my-app-style_module_css-main-paragraph", + "multiple-first": "my-app-style_module_css-multiple-first", + "multiple-first-with-space": "my-app-style_module_css-multiple-first-with-space", + "multiple-second": "my-app-style_module_css-multiple-second", + "multiple-second-with-space": "my-app-style_module_css-multiple-second-with-space", + "my-class": "my-app-style_module_css-my-class", + "my-global-class-again": "my-app-style_module_css-my-global-class-again", + "my-simple-local": "my-app-style_module_css-my-simple-local", + "narrowScreenClass": "my-app-style_module_css-narrowScreenClass", + "nested-layer": "my-app-style_module_css-nested-layer", + "nested-media": "my-app-style_module_css-nested-media", + "nested-parens": "my-app-style_module_css-nested-parens", + "nested-pure": "my-app-style_module_css-nested-pure", + "nested-supports": "my-app-style_module_css-nested-supports", + "nested-var": "my-app-style_module_css-nested-var", + "nested-with-local-pseudo": "my-app-style_module_css-nested-with-local-pseudo", + "nested1": "my-app-style_module_css-nested1", + "nested3": "my-app-style_module_css-nested3", + "no-space": "my-app-style_module_css-no-space", + "not-selector-inside": "my-app-style_module_css-not-selector-inside", + "otherDiv": "my-app-style_module_css-otherDiv", + "overlay": "my-app-style_module_css-overlay", + "padding-lg": "my-app-style_module_css-padding-lg", + "padding-sm": "my-app-style_module_css-padding-sm", + "parent": "my-app-style_module_css-parent", + "parent1": "my-app-style_module_css-parent1", + "placeholder-gray-700": "my-app-style_module_css-placeholder-gray-700", + "post": "my-app-style_module_css-post", + "progress": "--my-app-style_module_css-progress", + "progressAnimationLocal": "my-app-style_module_css-progressAnimationLocal", + "qqq": "my-app-style_module_css-qqq", + "scope": "my-app-style_module_css-scope", + "selected": "my-app-style_module_css-selected", + "sidebar": "my-app-style_module_css-sidebar", + "simple": "my-app-style_module_css-simple", + "special": "my-app-style_module_css-special", + "sticky-heading": "my-app-style_module_css-sticky-heading", + "swop5c-local": "--my-app-style_module_css-swop5c-local", + "test": "my-app-style_module_css-test", + "theme-dark": "my-app-style_module_css-theme-dark", + "three": "my-app-style_module_css-three", + "tipOnly": "my-app-style_module_css-tipOnly", + "transparent-local": "--my-app-style_module_css-transparent-local", + "two": "my-app-style_module_css-two", + "unknown-at-rule": "my-app-style_module_css-unknown-at-rule", + "var": "my-app-style_module_css-var", + "var-order": "my-app-style_module_css-var-order", + "vars": "my-app-style_module_css-vars", + "vertical-small": "my-app-style_module_css-vertical-small", + "vertical-tiny": "my-app-style_module_css-vertical-tiny", + "wideScreenClass": "my-app-style_module_css-wideScreenClass", + "wrapper": "my-app-style_module_css-wrapper", +} +`; + +exports[`ConfigCacheTestCases css css-modules exported tests should allow to disable options: options css 1`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.my-app-at-rule-value_module_css-value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { + &.my-app-at-rule-value_module_css-bar { color: red; } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { color: red; } + } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.my-app-at-rule-value_module_css-foo { height: 40px; height: 36px; } + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + +#my-app-at-rule-value_module_css-red { + color: red; +} + + + +.my-app-at-rule-value_module_css-red > .my-app-at-rule-value_module_css-red { + color: red; +} + + + +.red { + color: .red; +} + + + +.my-app-at-rule-value_module_css-export { + color: blue; +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } +.my-app-at-rule-value_module_css-bar { color: yellow } + + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + + +.my-app-at-rule-value_module_css-class-a { color: red; } + + + + +.my-app-at-rule-value_module_css-class-a { margin: calc(base * 2); } + + + + +.my-app-at-rule-value_module_css-class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.my-app-at-rule-value_module_css-foo { color: var(--color); } + + + + + + + +.my-app-at-rule-value_module_css-foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } +.my-app-at-rule-value_module_css-bar { color: red } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: color(red lightness(50%)); } + + + +:root { --my-app-at-rule-value_module_css-color: red; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: /* comment */; } + + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + + +.my-app-at-rule-value_module_css-class { + color: red; + color: red; + color: blue; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test *//* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +:root { --my-app-at-rule-value_module_css-color: /* + multiline + comment +*/; } + + + + +/*!*********************************************!*\\\\ + !*** css ./var-function-export.modules.css ***! + \\\\*********************************************/ +:root { + --my-app-var-function-export_modules_css-my-var-u1: red; + --my-app-var-function-export_modules_css-my-var-u2: blue; + --my-app-var-function-export_modules_css-not-override-class: black; + --my-app-var-function-export_modules_css-1: red; + --my-app-var-function-export_modules_css---a: red; + --my-app-var-function-export_modules_css-main-bg-color: red; +} + +.my-app-var-function-export_modules_css-my-var-u1 { + color: red; +} + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --my-app-var-function_module_css-main-bg-color: brown; + --my-app-var-function_module_css-my-var: red; + --my-app-var-function_module_css-my-background: blue; + --my-app-var-function_module_css-my-global: yellow; + --: \\"reserved\\"; + --my-app-var-function_module_css-a: green; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-main-bg-color); +} + +@property --my-app-var-function_module_css-logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-logo-color); +} + +div { + background-color: var(--my-app-var-function_module_css-box-color); +} + +.my-app-var-function_module_css-two { + --my-app-var-function_module_css-box-color: cornflowerblue; +} + +.my-app-var-function_module_css-three { + --my-app-var-function_module_css-box-color: aquamarine; +} + + +.my-app-var-function_module_css-one { + /* Red if --my-var is not defined */ + color: var(--my-app-var-function_module_css-my-var, red); +} + +.my-app-var-function_module_css-two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-app-var-function_module_css-my-var, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-reserved { + color: var(--); +} + +.my-app-var-function_module_css-green { + color: var(--my-app-var-function_module_css-a); +} + +.my-app-var-function_module_css-global { + color: var(--my-global); +} + +.my-app-var-function_module_css-global-and-default { + color: var(--my-global, pink); +} + +.my-app-var-function_module_css-global-and-default-1 { + color: var(--my-global, var(--my-global-background)); +} + +.my-app-var-function_module_css-global-and-default-2 { + color: var(--my-global, var(--my-global-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-3 { + color: var(--my-global, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-5 { + color: var( --my-global,var(--my-app-var-function_module_css-my-background,pink)); +} + +.my-app-var-function_module_css-global-and-default-6 { + background: var( --my-app-var-function_module_css-main-bg-color , var( --my-app-var-function_module_css-my-background , pink ) ) , var(--my-global); +} + +.my-app-var-function_module_css-global-and-default-7 { + background: var(--my-app-var-function_module_css-main-bg-color,var(--my-app-var-function_module_css-my-background,pink)),var(--my-global); +} + +.my-app-var-function_module_css-from { + color: var(--my-app-var-function-export_modules_css-my-var-u1); +} + +.my-app-var-function_module_css-from-1 { + color: var(--my-app-var-function_module_css-main-bg-color, var(--my-app-var-function-export_modules_css-my-var-u1)); +} + +.my-app-var-function_module_css-from-2 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function_module_css-main-bg-color)); +} + +.my-app-var-function_module_css-from-3 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function-export_modules_css-my-var-u2)); +} + +.my-app-var-function_module_css-from-4 { + color: var(--my-app-var-function-export_modules_css-1); +} + +.my-app-var-function_module_css-from-5 { + color: var(--my-app-var-function-export_modules_css---a); +} + +.my-app-var-function_module_css-from-6 { + color: var(--my-app-var-function-export_modules_css-main-bg-color); +} + +.my-app-var-function_module_css-mixed { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-global, var(--my-app-var-function_module_css-main-bg-color, red))); +} + +.my-app-var-function_module_css-broken { + color: var(--my-global from); +} + +.my-app-var-function_module_css-broken-1 { + color: var(--my-global from 1); +} + +:root { + --my-app-var-function_module_css-not-override-class: red; +} + +.my-app-var-function_module_css-not-override-class { + color: var(--my-app-var-function-export_modules_css-not-override-class) +} + +.my-app-var-function_module_css-theme-dark { + --my-app-var-function_module_css-text-color: #fff; + --my-app-var-function_module_css-bg-color: #333; + + .my-app-var-function_module_css-button { + --my-app-var-function_module_css-button-color: var(--my-app-var-function_module_css-text-color); + --my-app-var-function_module_css-button-bg: var(--my-app-var-function_module_css-bg-color); + color: var(--my-app-var-function_module_css-button-color); + background-color: var(--my-app-var-function_module_css-button-bg); + } +} + +.my-app-var-function_module_css-parent { + --my-app-var-function_module_css-parent-padding: 20px; + padding: var(--my-app-var-function_module_css-parent-padding); + + .my-app-var-function_module_css-child { + --my-app-var-function_module_css-child-margin: 10px; + margin-top: var(--my-app-var-function_module_css-child-margin); + padding-left: var(--my-app-var-function_module_css-parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --my-app-var-function_module_css-base-padding: 1.5rem; + --my-app-var-function_module_css-font-scale: 1.2; + } +} + +.my-app-var-function_module_css-container { + padding: var(--my-app-var-function_module_css-base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.my-app-var-function_module_css-item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--my-app-var-function_module_css-font-scale)); + margin-bottom: calc(var(--my-app-var-function_module_css-base-padding) / 2); +} + +.my-app-var-function_module_css-item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--my-app-var-function_module_css-base-padding) * 2)); +} + +.my-app-var-function_module_css-banner { + /* Locally scoped variables (pseudo-private) */ + --my-app-var-function_module_css-banner-bg: #e0f7fa; /* Default info color */ + --my-app-var-function_module_css-banner-text: #00796b; + --my-app-var-function_module_css-banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--my-app-var-function_module_css-banner-bg); + color: var(--my-app-var-function_module_css-banner-text); + border-left: 5px solid var(--my-app-var-function_module_css-banner-text); +} + +:root { + --my-app-var-function_module_css-accordion-bg: #fff; + --my-app-var-function_module_css-accordion-border: #ddd; + --my-app-var-function_module_css-accordion-text: #333; + --my-app-var-function_module_css-accordion-accent: royalblue; +} + +.my-app-var-function_module_css-accordion-container { + border: 1px solid var(--my-app-var-function_module_css-accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .my-app-var-function_module_css-accordion-item { + background: var(--my-app-var-function_module_css-accordion-bg); + color: var(--my-app-var-function_module_css-accordion-text); + border-bottom: 1px solid var(--my-app-var-function_module_css-accordion-border); + + &:last-child { + border-bottom: none; + } + + & .my-app-var-function_module_css-accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--my-app-var-function_module_css-accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.my-app-var-function_module_css-is-active { + --my-app-var-function_module_css-accordion-bg: var(--my-app-var-function_module_css-accordion-accent); /* Nested override */ + --my-app-var-function_module_css-accordion-text: #fff; /* Nested override */ + + & .my-app-var-function_module_css-accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.my-app-var-function_module_css-is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --my-app-var-function_module_css-accordion-bg: #333; + --my-app-var-function_module_css-accordion-border: #555; + --my-app-var-function_module_css-accordion-text: #eee; + --my-app-var-function_module_css-accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.my-app-var-function_module_css-media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --my-app-var-function_module_css-avatar-size: 48px; + --my-app-var-function_module_css-text-size: 1rem; + + & .my-app-var-function_module_css-avatar { + width: var(--my-app-var-function_module_css-avatar-size); + height: var(--my-app-var-function_module_css-avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .my-app-var-function_module_css-content { + font-size: var(--my-app-var-function_module_css-text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --my-app-var-function_module_css-avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --my-app-var-function_module_css-text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --my-app-var-function_module_css-primary-color: #007bff; + --my-app-var-function_module_css-text-color: var(--my-app-var-function_module_css-primary-color); /* --text-color now uses the value of --primary-color */ + --my-app-var-function_module_css-highlight-background: linear-gradient(to right, var(--my-app-var-function_module_css-primary-color), #6c757d); +} + +.my-app-var-function_module_css-element { + color: var(--my-app-var-function_module_css-text-color); + background: var(--my-app-var-function_module_css-highlight-background); +} + +/*!*********************************!*\\\\ + !*** css ./classes.modules.css ***! + \\\\*********************************/ +.my-app-classes_modules_css-className { + color: red +} + +.my-app-classes_modules_css-otherClassName { + color: green; +} + +.my-app-classes_modules_css-otherClassNameToo { + color: blue; +} + +.my-app-classes_modules_css-from { + color: yellow; +} + +.my-app-classes_modules_css-a { + color: red; +} + +.my-app-classes_modules_css--b { + color: red; +} + +.my-app-classes_modules_css-b- { + color: red; +} + +.my-app-classes_modules_css---c { + color: red; +} + +.my-app-classes_modules_css-c-- { + color: red; +} + +.my-app-classes_modules_css-_d { + color: red; +} + +.my-app-classes_modules_css-d\\\\% { + color: tan; +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --my-app-shared_css-from-shared: --my-app-shared_css-custom-shared; +} + +@color-profile --my-app-shared_css-custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-shared_css-local-my-shared-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.my-app-style_module_css-class { + color: red; +} + +.my-app-style_module_css-local1, +.my-app-style_module_css-local2 .global, +.my-app-style_module_css-local3 { + color: green; +} + +.global .my-app-style_module_css-local4 { + color: yellow; +} + +.my-app-style_module_css-local5.global.my-app-style_module_css-local6 { + color: blue; +} + +.my-app-style_module_css-local7 div:not(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local8 :is(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local10 :where(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local11 div:has(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local12 div:current(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local13 div:past(p, span) { + display: none; +} + +.my-app-style_module_css-local14 div:future(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.my-app-style_module_css-local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + color: pink; +} + +#my-app-style_module_css-ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.my-app-style_module_css-animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.my-app-style_module_css-vars { + color: var(--local-color); + --local-color: red; +} + +.my-app-style_module_css-globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .my-app-style_module_css-wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .my-app-style_module_css-narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .my-app-style_module_css-displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .my-app-style_module_css-floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .my-app-style_module_css-displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.my-app-style_module_css-animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .my-app-style_module_css-localUpperCase { + color: yellow; +} + +.my-app-style_module_css-VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.my-app-style_module_css-globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .my-app-style_module_css-inSupportScope { + color: red; + } +} + +.my-app-style_module_css-a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.my-app-style_module_css-b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.my-app-style_module_css-c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.my-app-style_module_css-d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.my-app-style_module_css-class { + color: var(--my-color); +} + +@layer utilities { + .my-app-style_module_css-padding-sm { + padding: 0.5rem; + } + + .my-app-style_module_css-padding-lg { + padding: 0.8rem; + } +} + +.my-app-style_module_css-class { + color: red; + + .my-app-style_module_css-nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .my-app-style_module_css-nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .my-app-style_module_css-nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } +} + +.my-app-style_module_css-not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .my-app-style_module_css-test; + unknown2: .test; + unknown3: .my-app-style_module_css-test; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +.my-app-style_module_css-nested-var { + .my-app-style_module_css-again { + color: var(--local-color); + } +} + +.my-app-style_module_css-nested-with-local-pseudo { + color: red; + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .foo, .my-app-style_module_css-bar { + color: red; + } +} + +#my-app-style_module_css-id-foo { + color: red; + + #my-app-style_module_css-id-bar { + color: red; + } +} + +.my-app-style_module_css-nested-parens { + .my-app-style_module_css-local9 div:has(.my-app-style_module_css-vertical-tiny, .my-app-style_module_css-vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .my-app-style_module_css-local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .my-app-style_module_css-class { + color: red; + } +} + +.class .my-app-style_module_css-in-local-global-scope, +.class .my-app-style_module_css-in-local-global-scope, +.my-app-style_module_css-class-local-scope .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .my-app-style_module_css-class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .my-app-style_module_css-deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.my-app-style_module_css-placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .my-app-style_module_css-baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.my-app-style_module_css-class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.my-app-style_module_css-class { + bar: env(foo, var(--baz)); +} + +.global-foo, .my-app-style_module_css-bar { + .my-app-style_module_css-local-in-global { + color: blue; + } + + @media screen { + .my-global-class-again, + .my-app-style_module_css-my-global-class-again { + color: red; + } + } +} + +.my-app-style_module_css-first-nested { + .my-app-style_module_css-first-nested-nested { + color: red; + } +} + +.my-app-style_module_css-first-nested-at-rule { + @media screen { + .my-app-style_module_css-first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .my-app-style_module_css-class, .my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + animation: slidein 3s; + } + + .my-app-style_module_css-local2 .global, + .my-app-style_module_css-local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class {} + } + } +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + animation: slidein 3s; + } + } + } +} + +.my-app-style_module_css-class { + animation: slidein 3s; + .my-app-style_module_css-class { + animation: slidein 3s; + .my-app-style_module_css-class { + animation: slidein 3s; + .my-app-style_module_css-class { + animation: slidein 3s; + } + } + } +} + +.my-app-style_module_css-broken { + . global(.my-app-style_module_css-class) { + color: red; + } + + : global(.my-app-style_module_css-class) { + color: red; + } + + : global .my-app-style_module_css-class { + color: red; + } + + : local(.my-app-style_module_css-class) { + color: red; + } + + : local .my-app-style_module_css-class { + color: red; + } + + # hash { + color: red; + } +} + +.my-app-style_module_css-comments { + .class { + color: red; + } + + .class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } +} + +.my-app-style_module_css-foo { + color: red; + + .my-app-style_module_css-bar + & { color: blue; } +} + +.my-app-style_module_css-error, #my-app-style_module_css-err-404 { + &:hover > .my-app-style_module_css-baz { color: red; } +} + +.my-app-style_module_css-foo { + & :is(.my-app-style_module_css-bar, &.my-app-style_module_css-baz) { color: red; } +} + +.my-app-style_module_css-qqq { + color: green; + & .my-app-style_module_css-a { color: blue; } + color: red; +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + & .my-app-style_module_css-content { + color: red; + } + } +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + .my-app-style_module_css-content { + color: red; + } + } + + .my-app-style_module_css-a { + color: red; + } +} + +@scope (.my-app-style_module_css-card) { + :scope { border-block-end: 1px solid white; } +} + +.my-app-style_module_css-card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.my-app-style_module_css-foo { + display: grid; + + @media (orientation: landscape) { + .my-app-style_module_css-bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .my-app-style_module_css-baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .my-app-style_module_css-baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .my-app-style_module_css-class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.my-app-style_module_css-post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: my-app-style_module_css-sticky-heading; + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .my-app-style_module_css-card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-app-style_module_css-my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .my-app-style_module_css-class { + opacity: 0; + transform: scaleX(0); + } +} + +.my-app-style_module_css-class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.my-app-style_module_css-feature) { + .my-app-style_module_css-class { opacity: 0; } + + :scope .my-app-style_module_css-class-1 { opacity: 0; } + + & .my-app-style_module_css-class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.my-app-style_module_css-infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.my-app-style_module_css-test { + test: (1, 2) [3, 4], { 1: 2}; + .my-app-style_module_css-a { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; + .my-app-style_module_css-test { + width: 200px; + } +} + +#my-app-style_module_css-test { + c: 1; + + #my-app-style_module_css-test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.my-app-style_module_css-container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.my-app-style_module_css-item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.my-app-style_module_css-two { + --item-size: initial; + --item-color: inherit; +} + +.my-app-style_module_css-three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.my-app-style_module_css-bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.my-app-style_module_css-item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/my-app-style_module_css-class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.my-app-style_module_css-var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.my-app-style_module_css-var-order { + background-color: var(--test); + --test: red; +} + +.my-app-style_module_css-className { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocal { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocalOther { + border-radius: 12px; +} + +.my-app-style_module_css-exportName { + border: red; +} + +.my-app-style_module_css-exportNameOtherNoSpaces { + } + +.my-app-style_module_css-from { + color: red; +} + +.my-app-style_module_css-exportNameOtherFromKeyword { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 { + } + +.my-app-style_module_css-exportNameWeirdCharacters { + } + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(my-app-style_module_css-bounce, 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --my-app-style_module_css-transparent-local(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --transparent-global(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: --my-app-style_module_css-transparent-local(var(--base-color), 0.8); + background-color: --transparent-global(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.my-app-style_module_css-apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.my-app-style_module_css-simple { + color: var(--text-color); +} + +/* Just nesting */ +.my-app-style_module_css-theme-dark { + --text-color: #fff; + --bg-color: #333; + + .my-app-style_module_css-button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.my-app-style_module_css-post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .my-app-style_module_css-card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.my-app-style_module_css-no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + /** test **/.my-app-style_module_css-class { + color: red; + } + + /** test **/#my-app-style_module_css-hash { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.my-app-style_module_css-class{.my-app-style_module_css-class{}} +.my-app-style_module_css-class{color:#fff5f5} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--foo:#fff5f5} +.my-app-style_module_css-class{--foo:#fff5f5;color:#f1f1f1} +.my-app-style_module_css-class{--foo:#fff5f5;color:#f1f1f1;} +.my-app-style_module_css-class{--foo:#fff5f5;color:#f1f1f1;.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--foo:#fff5f5;.my-app-style_module_css-class{color:#f1f1f1}color:#f1f1f1;} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.my-app-style_module_css-class{--bar:{1, 'string', .my-app-style_module_css-class, #my-app-style_module_css-f1f1f1, #my-app-style_module_css-id}} +.my-app-style_module_css-class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.my-app-style_module_css-class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.my-app-style_module_css-just-class { + color: red; +} + +.my-app-style_module_css-my-simple-local { + color: red; +} + +.my-global-local { + color: red; +} + +.my-app-style_module_css-multiple-first.my-app-style_module_css-multiple-second { + color: red; +} + +.my-app-style_module_css-multiple-first-with-space .my-app-style_module_css-multiple-second-with-space { + color: red; +} + +div:not(.my-app-style_module_css-special) { + color: blue; +} + +p:not(#my-app-style_module_css-main-paragraph) { + font-weight: bold; +} + +.my-app-style_module_css-container { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-global-befor-local .my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-local-class-name .my-app-style_module_css-global-after-local { + color: red; +} + +.my-app-style_module_css-foo { + &.my-app-style_module_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .my-app-style_module_css-bar { + c_value: some-value; + } + + &.my-app-style_module_css-baz { + c_value: some-value; + } + } +} + +/* Composes */ + +.my-app-style_module_css-class { + color: black; +} + +.my-app-style_module_css-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.my-app-style_module_css-class-with-composes { + } + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes my-app-style_module_css-local-keyframes {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes my-app-style_module_css-local-keyframes-old-syntax {} +@keyframes local-keyframes-old-syntax {} + +.my-app-style_module_css-foo { + animation-name: basic-keyframes, global-keyframes, my-app-style_module_css-local-keyframes; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes my-app-style_module_css-progressAnimationLocal { + to { + --progress: 100%; + } +} + +.my-app-style_module_css-bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimationLocal 2.5s ease infinite; +} + +@scope (.my-app-style_module_css-article-header) to (.class) { + .my-app-style_module_css-article-footer { + border: 5px solid black; + } + .my-app-style_module_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + --my-app-style_module_css-local-foo-bar, + --global-foo-bar, + /** Deprecated syntax */ + --my-app-style_module_css-local-foo-bar, + --global-foo-bar; +} + +.my-app-style_module_css-class { + background-color: + var(--foo-bar), + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule my-app-style_module_css-unknown-at-rule {} + +.my-app-style_module_css-class { + custom-name: my-app-style_module_css-unknown-at-rule; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: my-app-style_module_css-animation-name-test animation-name-test +} + +/* GRID */ + +.my-app-style_module_css-grid1 { + grid: none; +} + +.my-app-style_module_css-gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.my-app-style_module_css-grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.my-app-style_module_css-grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.my-app-style_module_css-grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.my-app-style_module_css-grid6 { + grid: 100px / 200px; +} + +.my-app-style_module_css-grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.my-app-style_module_css-grid8 { + grid: 200px / auto-flow; +} + +.my-app-style_module_css-grid9 { + grid: 30% / auto-flow dense; +} + +.my-app-style_module_css-grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.my-app-style_module_css-grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.my-app-style_module_css-grid12 { + grid: auto-flow / 200px; +} + +.my-app-style_module_css-grid13 { + grid: auto-flow dense / 30%; +} + +.my-app-style_module_css-grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.my-app-style_module_css-grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.my-app-style_module_css-grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.my-app-style_module_css-grid17 { + grid-template-areas: 'nav main'; +} + +.my-app-style_module_css-grid-area { + grid-area: auto / auto / auto / auto; +} + +.my-app-style_module_css-grid-area1 { + grid-area: some-grid-area; +} + +.my-app-style_module_css-grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.my-app-style_module_css-grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.my-app-style_module_css-grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.my-app-style_module_css-grid-row-start { + grid-row-start: auto; +} + +/* values */ +.my-app-style_module_css-grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.my-app-style_module_css-grid-row-start2 { + grid-row-start: 2; +} +.my-app-style_module_css-grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.my-app-style_module_css-grid-row-start4 { + grid-row-start: span 3; +} +.my-app-style_module_css-grid-row-start5 { + grid-row-start: span some-grid-area; +} +.my-app-style_module_css-grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.my-app-style_module_css-grid-row-start7 { + grid-row-start: inherit; +} +.my-app-style_module_css-grid-row-start8 { + grid-row-start: initial; +} +.my-app-style_module_css-grid-row-start9 { + grid-row-start: revert; +} +.my-app-style_module_css-grid-row-start10 { + grid-row-start: revert-layer; +} +.my-app-style_module_css-grid-row-start11 { + grid-row-start: unset; +} + +.my-app-style_module_css-grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.my-app-style_module_css-grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.my-app-style_module_css-grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.my-app-style_module_css-grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.my-app-style_module_css-grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.my-app-style_module_css-grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.my-app-style_module_css-grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.my-app-style_module_css-class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.my-app-style_module_css-box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.my-app-style_module_css-box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.my-app-style_module_css-box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.my-app-style_module_css-box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.my-app-style_module_css-header { + grid-area: hd; +} + +.my-app-style_module_css-footer { + grid-area: ft; +} + +.my-app-style_module_css-content { + grid-area: main; +} + +.my-app-style_module_css-sidebar { + grid-area: sd; +} + +.my-app-style_module_css-wrapper > div.my-app-style_module_css-overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.my-app-style_module_css-item1to5 { + grid-column: col-start / col-start 5; +} + +.my-app-style_module_css-item7to9 { + grid-column: col-start 7 / span 3; +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.my-app-style_module_css-importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + + +/*# sourceMappingURL=bundle6.css.map*/" +`; diff --git a/test/configCases/css/css-modules/__snapshots__/ConfigTest.snap b/test/configCases/css/css-modules/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..36e0e2cf095 --- /dev/null +++ b/test/configCases/css/css-modules/__snapshots__/ConfigTest.snap @@ -0,0 +1,13952 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: dev 1`] = ` +Object { + "UsedClassName": "my-app-identifiers_module_css-UsedClassName", + "VARS": "--my-app-style_module_css-LOCAL-COLOR my-app-style_module_css-VARS undefined my-app-style_module_css-globalVarsUpperCase", + "__webpack_modules__": 6, + "animation": "my-app-style_module_css-animation", + "animationName": "my-app-style_module_css-animationName", + "class": "my-app-style_module_css-class", + "classInContainer": "my-app-style_module_css-class-in-container", + "classLocalScope": "my-app-style_module_css-class-local-scope", + "classNameAfterBrokenKeyframes": "my-app-style_module_css-class-name-after-broken-keyframes", + "cssModuleWithCustomFileExtension": "my-app-style_module_my-css-myCssClass", + "currentWmultiParams": "my-app-style_module_css-local12", + "deepClassInContainer": "my-app-style_module_css-deep-class-in-container", + "displayFlexInSupportsInMediaUpperCase": "my-app-style_module_css-displayFlexInSupportsInMediaUpperCase", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "my-app-style_module_css-exportName my-app-classes_modules_css-className beforeName my-app-style_module_css-className my-app-style_module_css-classNameLocal importName secondImport my-app-classes_modules_css-otherClassName my-app-classes_modules_css-otherClassNameToo my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther className className classNameOther className classNameOther my-app-classes_modules_css-className my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName", + "exportNameOtherFromKeyword": "my-app-style_module_css-exportNameOtherFromKeyword my-app-style_module_css-from", + "exportNameOtherFromKeywordWithFrom1": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 from", + "exportNameOtherFromKeywordWithFrom2": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 my-app-classes_modules_css-from", + "exportNameOtherNoSpaces": "my-app-style_module_css-exportNameOtherNoSpaces my-app-classes_modules_css-className beforeName my-app-style_module_css-className", + "exportNameWeirdCharacters": "my-app-style_module_css-exportNameWeirdCharacters my-app-classes_modules_css-a my-app-classes_modules_css--b my-app-classes_modules_css-b- my-app-classes_modules_css---c my-app-classes_modules_css-c-- my-app-classes_modules_css-_d my-app-classes_modules_css-d%", + "futureWmultiParams": "my-app-style_module_css-local14", + "global": undefined, + "hasWmultiParams": "my-app-style_module_css-local11", + "ident": "my-app-style_module_css-ident", + "inLocalGlobalScope": "my-app-style_module_css-in-local-global-scope", + "inSupportScope": "my-app-style_module_css-inSupportScope", + "isWmultiParams": "my-app-style_module_css-local8", + "keyframes": "my-app-style_module_css-localkeyframes", + "keyframesUPPERCASE": "my-app-style_module_css-localkeyframesUPPERCASE", + "local": "my-app-style_module_css-local1 my-app-style_module_css-local2 my-app-style_module_css-local3 my-app-style_module_css-local4", + "local2": "my-app-style_module_css-local5 my-app-style_module_css-local6", + "localkeyframes2UPPPERCASE": "my-app-style_module_css-localkeyframes2UPPPERCASE", + "matchesWmultiParams": "my-app-style_module_css-local9", + "media": "my-app-style_module_css-wideScreenClass", + "mediaInSupports": "my-app-style_module_css-displayFlexInMediaInSupports", + "mediaWithOperator": "my-app-style_module_css-narrowScreenClass", + "mozAnimationName": "my-app-style_module_css-mozAnimationName", + "mozAnyWmultiParams": "my-app-style_module_css-local15", + "myColor": "--my-app-style_module_css-my-color", + "nested": "my-app-style_module_css-nested1 undefined my-app-style_module_css-nested3", + "notAValidCssModuleExtension": true, + "notWmultiParams": "my-app-style_module_css-local7", + "paddingLg": "my-app-style_module_css-padding-lg", + "paddingSm": "my-app-style_module_css-padding-sm", + "pastWmultiParams": "my-app-style_module_css-local13", + "supports": "my-app-style_module_css-displayGridInSupports", + "supportsInMedia": "my-app-style_module_css-displayFlexInSupportsInMedia", + "supportsWithOperator": "my-app-style_module_css-floatRightInNegativeSupports", + "textColor": "--my-app-style_module_css-text-color", + "vars": "--my-app-style_module_css-local-color my-app-style_module_css-vars undefined my-app-style_module_css-globalVars", + "webkitAnyWmultiParams": "my-app-style_module_css-local16", + "whereWmultiParams": "my-app-style_module_css-local10", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: dev 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.my-app-at-rule-value_module_css-value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { + &.my-app-at-rule-value_module_css-bar { color: red; } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { color: red; } + } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.my-app-at-rule-value_module_css-foo { height: 40px; height: 36px; } + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + +#my-app-at-rule-value_module_css-red { + color: red; +} + + + +.my-app-at-rule-value_module_css-red > .my-app-at-rule-value_module_css-red { + color: red; +} + + + +.red { + color: .red; +} + + + +.my-app-at-rule-value_module_css-export { + color: blue; +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } +.my-app-at-rule-value_module_css-bar { color: yellow } + + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + + +.my-app-at-rule-value_module_css-class-a { color: red; } + + + + +.my-app-at-rule-value_module_css-class-a { margin: calc(base * 2); } + + + + +.my-app-at-rule-value_module_css-class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.my-app-at-rule-value_module_css-foo { color: var(--color); } + + + + + + + +.my-app-at-rule-value_module_css-foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } +.my-app-at-rule-value_module_css-bar { color: red } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: color(red lightness(50%)); } + + + +:root { --my-app-at-rule-value_module_css-color: red; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: /* comment */; } + + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + + +.my-app-at-rule-value_module_css-class { + color: red; + color: red; + color: blue; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test *//* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +:root { --my-app-at-rule-value_module_css-color: /* + multiline + comment +*/; } + + + + +/*!*********************************************!*\\\\ + !*** css ./var-function-export.modules.css ***! + \\\\*********************************************/ +:root { + --my-app-var-function-export_modules_css-my-var-u1: red; + --my-app-var-function-export_modules_css-my-var-u2: blue; + --my-app-var-function-export_modules_css-not-override-class: black; + --my-app-var-function-export_modules_css-1: red; + --my-app-var-function-export_modules_css---a: red; + --my-app-var-function-export_modules_css-main-bg-color: red; +} + +.my-app-var-function-export_modules_css-my-var-u1 { + color: red; +} + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --my-app-var-function_module_css-main-bg-color: brown; + --my-app-var-function_module_css-my-var: red; + --my-app-var-function_module_css-my-background: blue; + --my-app-var-function_module_css-my-global: yellow; + --: \\"reserved\\"; + --my-app-var-function_module_css-a: green; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-main-bg-color); +} + +@property --my-app-var-function_module_css-logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-logo-color); +} + +div { + background-color: var(--my-app-var-function_module_css-box-color); +} + +.my-app-var-function_module_css-two { + --my-app-var-function_module_css-box-color: cornflowerblue; +} + +.my-app-var-function_module_css-three { + --my-app-var-function_module_css-box-color: aquamarine; +} + + +.my-app-var-function_module_css-one { + /* Red if --my-var is not defined */ + color: var(--my-app-var-function_module_css-my-var, red); +} + +.my-app-var-function_module_css-two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-app-var-function_module_css-my-var, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-reserved { + color: var(--); +} + +.my-app-var-function_module_css-green { + color: var(--my-app-var-function_module_css-a); +} + +.my-app-var-function_module_css-global { + color: var(--my-global); +} + +.my-app-var-function_module_css-global-and-default { + color: var(--my-global, pink); +} + +.my-app-var-function_module_css-global-and-default-1 { + color: var(--my-global, var(--my-global-background)); +} + +.my-app-var-function_module_css-global-and-default-2 { + color: var(--my-global, var(--my-global-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-3 { + color: var(--my-global, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-5 { + color: var( --my-global,var(--my-app-var-function_module_css-my-background,pink)); +} + +.my-app-var-function_module_css-global-and-default-6 { + background: var( --my-app-var-function_module_css-main-bg-color , var( --my-app-var-function_module_css-my-background , pink ) ) , var(--my-global); +} + +.my-app-var-function_module_css-global-and-default-7 { + background: var(--my-app-var-function_module_css-main-bg-color,var(--my-app-var-function_module_css-my-background,pink)),var(--my-global); +} + +.my-app-var-function_module_css-from { + color: var(--my-app-var-function-export_modules_css-my-var-u1); +} + +.my-app-var-function_module_css-from-1 { + color: var(--my-app-var-function_module_css-main-bg-color, var(--my-app-var-function-export_modules_css-my-var-u1)); +} + +.my-app-var-function_module_css-from-2 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function_module_css-main-bg-color)); +} + +.my-app-var-function_module_css-from-3 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function-export_modules_css-my-var-u2)); +} + +.my-app-var-function_module_css-from-4 { + color: var(--my-app-var-function-export_modules_css-1); +} + +.my-app-var-function_module_css-from-5 { + color: var(--my-app-var-function-export_modules_css---a); +} + +.my-app-var-function_module_css-from-6 { + color: var(--my-app-var-function-export_modules_css-main-bg-color); +} + +.my-app-var-function_module_css-mixed { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-global, var(--my-app-var-function_module_css-main-bg-color, red))); +} + +.my-app-var-function_module_css-broken { + color: var(--my-global from); +} + +.my-app-var-function_module_css-broken-1 { + color: var(--my-global from 1); +} + +:root { + --my-app-var-function_module_css-not-override-class: red; +} + +.my-app-var-function_module_css-not-override-class { + color: var(--my-app-var-function-export_modules_css-not-override-class) +} + +.my-app-var-function_module_css-theme-dark { + --my-app-var-function_module_css-text-color: #fff; + --my-app-var-function_module_css-bg-color: #333; + + .my-app-var-function_module_css-button { + --my-app-var-function_module_css-button-color: var(--my-app-var-function_module_css-text-color); + --my-app-var-function_module_css-button-bg: var(--my-app-var-function_module_css-bg-color); + color: var(--my-app-var-function_module_css-button-color); + background-color: var(--my-app-var-function_module_css-button-bg); + } +} + +.my-app-var-function_module_css-parent { + --my-app-var-function_module_css-parent-padding: 20px; + padding: var(--my-app-var-function_module_css-parent-padding); + + .my-app-var-function_module_css-child { + --my-app-var-function_module_css-child-margin: 10px; + margin-top: var(--my-app-var-function_module_css-child-margin); + padding-left: var(--my-app-var-function_module_css-parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --my-app-var-function_module_css-base-padding: 1.5rem; + --my-app-var-function_module_css-font-scale: 1.2; + } +} + +.my-app-var-function_module_css-container { + padding: var(--my-app-var-function_module_css-base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.my-app-var-function_module_css-item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--my-app-var-function_module_css-font-scale)); + margin-bottom: calc(var(--my-app-var-function_module_css-base-padding) / 2); +} + +.my-app-var-function_module_css-item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--my-app-var-function_module_css-base-padding) * 2)); +} + +.my-app-var-function_module_css-banner { + /* Locally scoped variables (pseudo-private) */ + --my-app-var-function_module_css-banner-bg: #e0f7fa; /* Default info color */ + --my-app-var-function_module_css-banner-text: #00796b; + --my-app-var-function_module_css-banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--my-app-var-function_module_css-banner-bg); + color: var(--my-app-var-function_module_css-banner-text); + border-left: 5px solid var(--my-app-var-function_module_css-banner-text); +} + +:root { + --my-app-var-function_module_css-accordion-bg: #fff; + --my-app-var-function_module_css-accordion-border: #ddd; + --my-app-var-function_module_css-accordion-text: #333; + --my-app-var-function_module_css-accordion-accent: royalblue; +} + +.my-app-var-function_module_css-accordion-container { + border: 1px solid var(--my-app-var-function_module_css-accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .my-app-var-function_module_css-accordion-item { + background: var(--my-app-var-function_module_css-accordion-bg); + color: var(--my-app-var-function_module_css-accordion-text); + border-bottom: 1px solid var(--my-app-var-function_module_css-accordion-border); + + &:last-child { + border-bottom: none; + } + + & .my-app-var-function_module_css-accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--my-app-var-function_module_css-accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.my-app-var-function_module_css-is-active { + --my-app-var-function_module_css-accordion-bg: var(--my-app-var-function_module_css-accordion-accent); /* Nested override */ + --my-app-var-function_module_css-accordion-text: #fff; /* Nested override */ + + & .my-app-var-function_module_css-accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.my-app-var-function_module_css-is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --my-app-var-function_module_css-accordion-bg: #333; + --my-app-var-function_module_css-accordion-border: #555; + --my-app-var-function_module_css-accordion-text: #eee; + --my-app-var-function_module_css-accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.my-app-var-function_module_css-media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --my-app-var-function_module_css-avatar-size: 48px; + --my-app-var-function_module_css-text-size: 1rem; + + & .my-app-var-function_module_css-avatar { + width: var(--my-app-var-function_module_css-avatar-size); + height: var(--my-app-var-function_module_css-avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .my-app-var-function_module_css-content { + font-size: var(--my-app-var-function_module_css-text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --my-app-var-function_module_css-avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --my-app-var-function_module_css-text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --my-app-var-function_module_css-primary-color: #007bff; + --my-app-var-function_module_css-text-color: var(--my-app-var-function_module_css-primary-color); /* --text-color now uses the value of --primary-color */ + --my-app-var-function_module_css-highlight-background: linear-gradient(to right, var(--my-app-var-function_module_css-primary-color), #6c757d); +} + +.my-app-var-function_module_css-element { + color: var(--my-app-var-function_module_css-text-color); + background: var(--my-app-var-function_module_css-highlight-background); +} + +/*!*********************************!*\\\\ + !*** css ./classes.modules.css ***! + \\\\*********************************/ +.my-app-classes_modules_css-className { + color: red +} + +.my-app-classes_modules_css-otherClassName { + color: green; +} + +.my-app-classes_modules_css-otherClassNameToo { + color: blue; +} + +.my-app-classes_modules_css-from { + color: yellow; +} + +.my-app-classes_modules_css-a { + color: red; +} + +.my-app-classes_modules_css--b { + color: red; +} + +.my-app-classes_modules_css-b- { + color: red; +} + +.my-app-classes_modules_css---c { + color: red; +} + +.my-app-classes_modules_css-c-- { + color: red; +} + +.my-app-classes_modules_css-_d { + color: red; +} + +.my-app-classes_modules_css-d\\\\% { + color: tan; +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --my-app-shared_css-from-shared: --my-app-shared_css-custom-shared; +} + +@color-profile --my-app-shared_css-custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-shared_css-local-my-shared-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.my-app-style_module_css-class { + color: red; +} + +.my-app-style_module_css-local1, +.my-app-style_module_css-local2 .global, +.my-app-style_module_css-local3 { + color: green; +} + +.global .my-app-style_module_css-local4 { + color: yellow; +} + +.my-app-style_module_css-local5.global.my-app-style_module_css-local6 { + color: blue; +} + +.my-app-style_module_css-local7 div:not(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local8 :is(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local10 :where(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local11 div:has(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local12 div:current(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local13 div:past(p, span) { + display: none; +} + +.my-app-style_module_css-local14 div:future(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.my-app-style_module_css-local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + color: pink; +} + +#my-app-style_module_css-ident { + color: purple; +} + +@keyframes my-app-style_module_css-localkeyframes { + 0% { + left: var(--my-app-style_module_css-pos1x); + top: var(--my-app-style_module_css-pos1y); + color: var(--my-app-style_module_css-theme-color1); + } + 100% { + left: var(--my-app-style_module_css-pos2x); + top: var(--my-app-style_module_css-pos2y); + color: var(--my-app-style_module_css-theme-color2); + } +} + +@keyframes my-app-style_module_css-localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.my-app-style_module_css-animation { + animation-name: my-app-style_module_css-localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused my-app-style_module_css-localkeyframes, my-app-style_module_css-localkeyframes2; + --my-app-style_module_css-pos1x: 0px; + --my-app-style_module_css-pos1y: 0px; + --my-app-style_module_css-pos2x: 10px; + --my-app-style_module_css-pos2y: 20px; +} + +.my-app-style_module_css-vars { + color: var(--my-app-style_module_css-local-color); + --my-app-style_module_css-local-color: red; +} + +.my-app-style_module_css-globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .my-app-style_module_css-wideScreenClass { + color: var(--my-app-style_module_css-local-color); + --my-app-style_module_css-local-color: green; + } +} + +@media screen and (max-width: 600px) { + .my-app-style_module_css-narrowScreenClass { + color: var(--my-app-style_module_css-local-color); + --my-app-style_module_css-local-color: purple; + } +} + +@supports (display: grid) { + .my-app-style_module_css-displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .my-app-style_module_css-floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .my-app-style_module_css-displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.my-app-style_module_css-animationUpperCase { + ANIMATION-NAME: my-app-style_module_css-localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused my-app-style_module_css-localkeyframesUPPERCASE, my-app-style_module_css-localkeyframes2UPPPERCASE; + --my-app-style_module_css-pos1x: 0px; + --my-app-style_module_css-pos1y: 0px; + --my-app-style_module_css-pos2x: 10px; + --my-app-style_module_css-pos2y: 20px; +} + +@KEYFRAMES my-app-style_module_css-localkeyframesUPPERCASE { + 0% { + left: VAR(--my-app-style_module_css-pos1x); + top: VAR(--my-app-style_module_css-pos1y); + color: VAR(--my-app-style_module_css-theme-color1); + } + 100% { + left: VAR(--my-app-style_module_css-pos2x); + top: VAR(--my-app-style_module_css-pos2y); + color: VAR(--my-app-style_module_css-theme-color2); + } +} + +@KEYframes my-app-style_module_css-localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .my-app-style_module_css-localUpperCase { + color: yellow; +} + +.my-app-style_module_css-VARS { + color: VAR(--my-app-style_module_css-LOCAL-COLOR); + --my-app-style_module_css-LOCAL-COLOR: red; +} + +.my-app-style_module_css-globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .my-app-style_module_css-inSupportScope { + color: red; + } +} + +.my-app-style_module_css-a { + animation: 3s my-app-style_module_css-animationName; + -webkit-animation: 3s my-app-style_module_css-animationName; +} + +.my-app-style_module_css-b { + animation: my-app-style_module_css-animationName 3s; + -webkit-animation: my-app-style_module_css-animationName 3s; +} + +.my-app-style_module_css-c { + animation-name: my-app-style_module_css-animationName; + -webkit-animation-name: my-app-style_module_css-animationName; +} + +.my-app-style_module_css-d { + --my-app-style_module_css-animation-name: animationName; +} + +@keyframes my-app-style_module_css-animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes my-app-style_module_css-animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes my-app-style_module_css-mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style my-app-style_module_css-thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-app-style_module_css-my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-app-style_module_css-my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-app-style_module_css-my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.my-app-style_module_css-class { + color: var(--my-app-style_module_css-my-color); +} + +@layer utilities { + .my-app-style_module_css-padding-sm { + padding: 0.5rem; + } + + .my-app-style_module_css-padding-lg { + padding: 0.8rem; + } +} + +.my-app-style_module_css-class { + color: red; + + .my-app-style_module_css-nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .my-app-style_module_css-nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .my-app-style_module_css-nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } + + @container my-app-style_module_css-foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } +} + +.my-app-style_module_css-not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .my-app-style_module_css-test; + unknown2: .test; + unknown3: .my-app-style_module_css-test; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +.my-app-style_module_css-nested-var { + .my-app-style_module_css-again { + color: var(--my-app-style_module_css-local-color); + } +} + +.my-app-style_module_css-nested-with-local-pseudo { + color: red; + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .foo, .my-app-style_module_css-bar { + color: red; + } +} + +#my-app-style_module_css-id-foo { + color: red; + + #my-app-style_module_css-id-bar { + color: red; + } +} + +.my-app-style_module_css-nested-parens { + .my-app-style_module_css-local9 div:has(.my-app-style_module_css-vertical-tiny, .my-app-style_module_css-vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .my-app-style_module_css-local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .my-app-style_module_css-class { + color: red; + } +} + +.class .my-app-style_module_css-in-local-global-scope, +.class .my-app-style_module_css-in-local-global-scope, +.my-app-style_module_css-class-local-scope .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .my-app-style_module_css-class-in-container { + font-size: 1.5em; + } +} + +@container my-app-style_module_css-summary (min-width: 400px) { + @container (width > 400px) { + .my-app-style_module_css-deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.my-app-style_module_css-placeholder-gray-700:-ms-input-placeholder { + --my-app-style_module_css-placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--my-app-style_module_css-placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::-ms-input-placeholder { + --my-app-style_module_css-placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--my-app-style_module_css-placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::placeholder { + --my-app-style_module_css-placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--my-app-style_module_css-placeholder-opacity)); +} + +:root { + --my-app-style_module_css-test: dark; +} + +@media screen and (prefers-color-scheme: var(--my-app-style_module_css-test)) { + .my-app-style_module_css-baz { + color: white; + } +} + +@keyframes my-app-style_module_css-slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.my-app-style_module_css-class { + animation: + my-app-style_module_css-foo var(--my-app-style_module_css-animation-name) 3s, + var(--my-app-style_module_css-animation-name) 3s, + 3s linear 1s infinite running my-app-style_module_css-slidein, + 3s linear env(foo, var(--my-app-style_module_css-baz)) infinite running my-app-style_module_css-slidein; +} + +:root { + --my-app-style_module_css-baz: 10px; +} + +.my-app-style_module_css-class { + bar: env(foo, var(--my-app-style_module_css-baz)); +} + +.global-foo, .my-app-style_module_css-bar { + .my-app-style_module_css-local-in-global { + color: blue; + } + + @media screen { + .my-global-class-again, + .my-app-style_module_css-my-global-class-again { + color: red; + } + } +} + +.my-app-style_module_css-first-nested { + .my-app-style_module_css-first-nested-nested { + color: red; + } +} + +.my-app-style_module_css-first-nested-at-rule { + @media screen { + .my-app-style_module_css-first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --my-app-style_module_css-foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .my-app-style_module_css-class, .my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + animation: my-app-style_module_css-slidein 3s; + } + + .my-app-style_module_css-local2 .global, + .my-app-style_module_css-local3 { + color: red; + } +} + +@unknown var(--my-app-style_module_css-foo) { + color: red; +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class {} + } + } +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + } + } + } +} + +.my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + .my-app-style_module_css-class { + animation: my-app-style_module_css-slidein 3s; + } + } + } +} + +.my-app-style_module_css-broken { + . global(.my-app-style_module_css-class) { + color: red; + } + + : global(.my-app-style_module_css-class) { + color: red; + } + + : global .my-app-style_module_css-class { + color: red; + } + + : local(.my-app-style_module_css-class) { + color: red; + } + + : local .my-app-style_module_css-class { + color: red; + } + + # hash { + color: red; + } +} + +.my-app-style_module_css-comments { + .class { + color: red; + } + + .class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } +} + +.my-app-style_module_css-foo { + color: red; + + .my-app-style_module_css-bar + & { color: blue; } +} + +.my-app-style_module_css-error, #my-app-style_module_css-err-404 { + &:hover > .my-app-style_module_css-baz { color: red; } +} + +.my-app-style_module_css-foo { + & :is(.my-app-style_module_css-bar, &.my-app-style_module_css-baz) { color: red; } +} + +.my-app-style_module_css-qqq { + color: green; + & .my-app-style_module_css-a { color: blue; } + color: red; +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + & .my-app-style_module_css-content { + color: red; + } + } +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + .my-app-style_module_css-content { + color: red; + } + } + + .my-app-style_module_css-a { + color: red; + } +} + +@scope (.my-app-style_module_css-card) { + :scope { border-block-end: 1px solid white; } +} + +.my-app-style_module_css-card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.my-app-style_module_css-foo { + display: grid; + + @media (orientation: landscape) { + .my-app-style_module_css-bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .my-app-style_module_css-baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .my-app-style_module_css-baz-2 { + display: grid; + } + } + } + } +} + +@counter-style my-app-style_module_css-thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: my-app-style_module_css-thumbs; +} + +@counter-style my-app-style_module_css-extend-thumbs { + fallback: my-app-style_module_css-thumbs; + system: extends my-app-style_module_css-thumbs; + speak-as: my-app-style_module_css-thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(img/shape.png); + list-style: none; + list-style: none disc url(img/shape.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: my-app-style_module_css-extend-thumbs; + list-style: my-app-style_module_css-extend-thumbs; +} + +@container (width > 400px) and style(--my-app-style_module_css-responsive: true) { + .my-app-style_module_css-class { + font-size: 1.5em; + } +} + +@container my-app-style_module_css-tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container my-app-style_module_css-sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container my-app-style_module_css-card (width > 400px), style(--my-app-style_module_css-responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.my-app-style_module_css-post { + container-name: my-app-style_module_css-tall; + container-type: inline-size; + + container: none; + container: inherit; + container: my-app-style_module_css-sticky-heading / inline-size; + container: my-app-style_module_css-sticky-heading / size; + container: my-app-style_module_css-sticky-heading / scroll-state; + --my-app-style_module_css-my-var: my-app-style_module_css-sticky-heading; + + container: var(--my-app-style_module_css-my-var); + --my-app-style_module_css-cards: small; + container-type: inline-size; +} + + +@container my-app-style_module_css-summary style(--my-app-style_module_css-cards: small) { + .my-app-style_module_css-card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --my-app-style_module_css-identifier { + font-family: Bixa; +} + +.my-app-style_module_css-my-class { + font-palette: --my-app-style_module_css-identifier; +} + +@keyframes my-app-style_module_css-foo { /* ... */ } +@keyframes my-app-style_module_css-foo { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .my-app-style_module_css-class { + opacity: 0; + transform: scaleX(0); + } +} + +.my-app-style_module_css-class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.my-app-style_module_css-feature) { + .my-app-style_module_css-class { opacity: 0; } + + :scope .my-app-style_module_css-class-1 { opacity: 0; } + + & .my-app-style_module_css-class { opacity: 0; } +} + +@position-try --my-app-style_module_css-custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --my-app-style_module_css-custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --my-app-style_module_css-custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --my-app-style_module_css-custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.my-app-style_module_css-infobox { + position: fixed; + position-anchor: --my-app-style_module_css-myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --my-app-style_module_css-custom-left, --my-app-style_module_css-custom-bottom, + --my-app-style_module_css-custom-right, --my-app-style_module_css-custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --my-app-style_module_css-swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-header { + background-color: color(--my-app-style_module_css-swop5c 0% 70% 20% 0%); +} + +.my-app-style_module_css-test { + test: (1, 2) [3, 4], { 1: 2}; + .my-app-style_module_css-a { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; + .my-app-style_module_css-test { + width: 200px; + } +} + +#my-app-style_module_css-test { + c: 1; + + #my-app-style_module_css-test { + c: 2; + } +} + +@property --my-app-style_module_css-item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.my-app-style_module_css-container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --my-app-style_module_css-item-size: 20%; + --my-app-style_module_css-item-color: orange; +} + +.my-app-style_module_css-item { + width: var(--my-app-style_module_css-item-size); + height: var(--my-app-style_module_css-item-size); + background-color: var(--my-app-style_module_css-item-color); +} + +.my-app-style_module_css-two { + --my-app-style_module_css-item-size: initial; + --my-app-style_module_css-item-color: inherit; +} + +.my-app-style_module_css-three { + /* invalid values */ + --my-app-style_module_css-item-size: 1000px; + --my-app-style_module_css-item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.my-app-style_module_css-bar { + display: inline-block; + --my-app-style_module_css-progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimation 2.5s ease infinite; +} + +@keyframes my-app-style_module_css-progressAnimation { + to { + --my-app-style_module_css-progress: 100%; + } +} + +@keyframes my-app-style_module_css-initial { /* ... */ } +@keyframes/**test**/my-app-style_module_css-initial { /* ... */ } +@keyframes/**test**/my-app-style_module_css-initial/**test**/{ /* ... */ } +@keyframes/**test**//**test**/my-app-style_module_css-initial/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ my-app-style_module_css-initial /**test**/ /**test**/ { /* ... */ } +@keyframes my-app-style_module_css-None { /* ... */ } +@property/**test**/--my-app-style_module_css-item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--my-app-style_module_css-item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--my-app-style_module_css-item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --my-app-style_module_css-item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --my-app-style_module_css-item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --my-app-style_module_css-item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused my-app-style_module_css-initial, my-app-style_module_css-localkeyframes2; + animation-name: my-app-style_module_css-initial; + animation-duration: 2s; +} + +.my-app-style_module_css-item-1 { + width: var( --my-app-style_module_css-item-size ); + height: var(/**comment**/--my-app-style_module_css-item-size); + background-color: var( /**comment**/--my-app-style_module_css-item-color); + background-color-1: var(/**comment**/ --my-app-style_module_css-item-color); + background-color-2: var( /**comment**/ --my-app-style_module_css-item-color); + background-color-3: var( /**comment**/ --my-app-style_module_css-item-color /**comment**/ ); + background-color-3: var( /**comment**/--my-app-style_module_css-item-color/**comment**/ ); + background-color-3: var(/**comment**/--my-app-style_module_css-item-color/**comment**/); +} + +@keyframes/**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes/**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**//**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/ /**test**/ my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**/ /**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes /**test**//**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes/**test**//**test**/my-app-style_module_css-foo { /* ... */ } +@keyframes/**test**//**test**/my-app-style_module_css-foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ my-app-style_module_css-foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/my-app-style_module_css-class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.my-app-style_module_css-var { + --my-app-style_module_css-main-color: black; + --my-app-style_module_css-FOO: 10px; + --my-app-style_module_css-foo: 10px; + --my-app-style_module_css-bar: calc(var(--my-app-style_module_css-foo) + 10px); + --my-app-style_module_css-accent-background: linear-gradient(to top, var(--my-app-style_module_css-main-color), white); + --my-app-style_module_css-external-link: \\"test\\"; + --my-app-style_module_css-custom-prop: yellow; + --my-app-style_module_css-default-value: red; + --my-app-style_module_css-main-bg-color: red; + --my-app-style_module_css-backup-bg-color: black; + -foo: calc(var(--my-app-style_module_css-bar) + 10px); + var: var(--my-app-style_module_css-main-color); + var1: var(--my-app-style_module_css-foo); + var2: var(--my-app-style_module_css-FOO); + content: \\" (\\" var(--my-app-style_module_css-external-link) \\")\\"; + var3: var(--my-app-style_module_css-main-color, blue); + var4: var(--my-app-style_module_css-custom-prop,); + var5: var(--my-app-style_module_css-custom-prop, initial); + var6: var(--my-app-style_module_css-custom-prop, var(--my-app-style_module_css-default-value)); + var7: var(--my-app-style_module_css-custom-prop, var(--my-app-style_module_css-default-value, red)); + var8: var(--my-app-style_module_css-unknown); + background-color: var(--my-app-style_module_css-main-bg-color, var(--my-app-style_module_css-backup-bg-color, white)); +} + +.my-app-style_module_css-var-order { + background-color: var(--my-app-style_module_css-test); + --my-app-style_module_css-test: red; +} + +.my-app-style_module_css-className { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocal { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocalOther { + border-radius: 12px; +} + +.my-app-style_module_css-exportName { + border: red; +} + +.my-app-style_module_css-exportNameOtherNoSpaces { + } + +.my-app-style_module_css-from { + color: red; +} + +.my-app-style_module_css-exportNameOtherFromKeyword { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 { + } + +.my-app-style_module_css-exportNameWeirdCharacters { + } + +@function --my-app-style_module_css-transparent(--my-app-style_module_css-color , --my-app-style_module_css-alpha type( | )) returns { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +section { + --my-app-style_module_css-base-color: #faa6ff; + background-color: --my-app-style_module_css-transparent(var(--my-app-style_module_css-base-color), 0.8); +} + +@function --my-app-style_module_css-max-plus-x(--my-app-style_module_css-list #, --my-app-style_module_css-x ) { + result: calc(max(var(--my-app-style_module_css-list)) + var(--my-app-style_module_css-x)); +} + +div { + width: --my-app-style_module_css-max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --my-app-style_module_css-anim-1s(--my-app-style_module_css-animation, --my-app-style_module_css-count) { + --my-app-style_module_css-duration: 1s; + --my-app-style_module_css-easing: linear; + result: var(--my-app-style_module_css-animation) var(--my-app-style_module_css-duration) var(--my-app-style_module_css-count) var(--my-app-style_module_css-easing); +} + +div { + animation: --anim-1s(my-app-style_module_css-bounce, 2); +} + +@function --my-app-style_module_css-outer(--my-app-style_module_css-outer-arg) { + --my-app-style_module_css-outer-local: 2; + result: --my-app-style_module_css-inner(); +} + +@function --my-app-style_module_css-inner() returns { + result: calc(var(--my-app-style_module_css-outer-arg) + var(--my-app-style_module_css-outer-local)); +} + +div { + z-index: --my-app-style_module_css-outer(1); /* 3 */ +} + +@function --my-app-style_module_css-narrow-wide(--my-app-style_module_css-narrow, --my-app-style_module_css-wide) { + result: var(--my-app-style_module_css-wide); + @media (width < 700px) { + result: var(--my-app-style_module_css-narrow); + } +} + +@function --my-app-style_module_css-narrow-wide-if-else(--my-app-style_module_css-narrow, --my-app-style_module_css-wide) { + result: if(media(width < 700px): var(--my-app-style_module_css-narrow) ; else: var(--my-app-style_module_css-wide)); +} + +@function --my-app-style_module_css-transparent(--my-app-style_module_css-color, --my-app-style_module_css-alpha) { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +@function --my-app-style_module_css-transparent-local(--my-app-style_module_css-color, --my-app-style_module_css-alpha) { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +@function --transparent-global(--my-app-style_module_css-color, --my-app-style_module_css-alpha) { + result: oklch(from var(--my-app-style_module_css-color) l c h / var(--my-app-style_module_css-alpha)); +} + +section { + --my-app-style_module_css-base-color: #faa6ff; + background-color: --my-app-style_module_css-transparent(var(--my-app-style_module_css-base-color), 0.8); + background-color: --my-app-style_module_css-transparent-local(var(--my-app-style_module_css-base-color), 0.8); + background-color: --transparent-global(var(--my-app-style_module_css-base-color), 0.8); +} + +:root { + --my-app-style_module_css-mode: sharp; +} + +.my-app-style_module_css-apply-sharp { + border-radius: if(style(--my-app-style_module_css-mode: sharp): 0px; else: revert-rule); +} + +@color-profile --my-app-style_module_css-swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-class { + background-color: color(--my-app-style_module_css-swop5c 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--my-app-shared_css-from-shared 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --my-app-style_module_css-text-color: #eee; +} + +.my-app-style_module_css-simple { + color: var(--my-app-style_module_css-text-color); +} + +/* Just nesting */ +.my-app-style_module_css-theme-dark { + --my-app-style_module_css-text-color: #fff; + --my-app-style_module_css-bg-color: #333; + + .my-app-style_module_css-button { + --my-app-style_module_css-button-color: var(--my-app-style_module_css-text-color); + --my-app-style_module_css-button-bg: var(--my-app-style_module_css-bg-color); + color: var(--my-app-style_module_css-button-color); + background-color: var(--my-app-style_module_css-button-bg); + } +} + +/* A container context based on inline size */ +.my-app-style_module_css-post { + --my-app-style_module_css-themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--my-app-style_module_css-themeColor: blue) { + .my-app-style_module_css-card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes my-app-style_module_css-broken; + +.my-app-style_module_css-class-name-after-broken-keyframes { + color: red; +} + +.my-app-style_module_css-no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + /** test **/.my-app-style_module_css-class { + color: red; + } + + /** test **/#my-app-style_module_css-hash { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.my-app-style_module_css-class{.my-app-style_module_css-class{}} +.my-app-style_module_css-class{color:#fff5f5} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1;} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1;.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--my-app-style_module_css-foo:#fff5f5;.my-app-style_module_css-class{color:#f1f1f1}color:#f1f1f1;} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}--my-app-style_module_css-foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.my-app-style_module_css-class{--my-app-style_module_css-bar:{1, 'string', .my-app-style_module_css-class, #my-app-style_module_css-f1f1f1, #my-app-style_module_css-id}} +.my-app-style_module_css-class{--my-app-style_module_css-baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.my-app-style_module_css-class{--my-app-style_module_css-baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.my-app-style_module_css-just-class { + color: red; +} + +.my-app-style_module_css-my-simple-local { + color: red; +} + +.my-global-local { + color: red; +} + +.my-app-style_module_css-multiple-first.my-app-style_module_css-multiple-second { + color: red; +} + +.my-app-style_module_css-multiple-first-with-space .my-app-style_module_css-multiple-second-with-space { + color: red; +} + +div:not(.my-app-style_module_css-special) { + color: blue; +} + +p:not(#my-app-style_module_css-main-paragraph) { + font-weight: bold; +} + +.my-app-style_module_css-container { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-global-befor-local .my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-local-class-name .my-app-style_module_css-global-after-local { + color: red; +} + +.my-app-style_module_css-foo { + &.my-app-style_module_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .my-app-style_module_css-bar { + c_value: some-value; + } + + &.my-app-style_module_css-baz { + c_value: some-value; + } + } +} + +/* Composes */ + +.my-app-style_module_css-class { + color: black; +} + +.my-app-style_module_css-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.my-app-style_module_css-class-with-composes { + } + +/* At-rules */ + +@keyframes my-app-style_module_css-basic-keyframes {} +@keyframes my-app-style_module_css-local-keyframes {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes my-app-style_module_css-local-keyframes-old-syntax {} +@keyframes local-keyframes-old-syntax {} + +.my-app-style_module_css-foo { + animation-name: my-app-style_module_css-basic-keyframes, global-keyframes, my-app-style_module_css-local-keyframes; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes my-app-style_module_css-progressAnimationLocal { + to { + --my-app-style_module_css-progress: 100%; + } +} + +.my-app-style_module_css-bar { + display: inline-block; + --my-app-style_module_css-progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimationLocal 2.5s ease infinite; +} + +@scope (.my-app-style_module_css-article-header) to (.class) { + .my-app-style_module_css-article-footer { + border: 5px solid black; + } + .my-app-style_module_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --my-app-style_module_css-foo-bar: red; + --my-app-style_module_css-local-foo-bar: red; + --my-app-style_module_css-global-foo-bar: red; + --my-app-style_module_css-local-and-global-in-var: + red, + --my-app-style_module_css-local-foo-bar, + --global-foo-bar, + /** Deprecated syntax */ + --my-app-style_module_css-local-foo-bar, + --global-foo-bar; +} + +.my-app-style_module_css-class { + background-color: + var(--my-app-style_module_css-foo-bar), + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + var(--global-foo-bar), + var(--my-app-shared_css-from-shared); +} + +/** Custom local value */ + +@unknown-rule my-app-style_module_css-unknown-at-rule {} + +.my-app-style_module_css-class { + custom-name: my-app-style_module_css-unknown-at-rule; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: my-app-style_module_css-animation-name-test animation-name-test +} + +/* GRID */ + +.my-app-style_module_css-grid1 { + grid: none; +} + +.my-app-style_module_css-gird2 { + grid: \\"my-app-style_module_css-a-a\\" 100px \\"my-app-style_module_css-b-b\\" 1fr; +} + +.my-app-style_module_css-grid3 { + grid: [my-app-style_module_css-line-name1-line-name1] \\"my-app-style_module_css-a-a\\" 100px [my-app-style_module_css-line-name2-line-name2]; +} + +.my-app-style_module_css-grid4 { + grid: \\"my-app-style_module_css-a-a\\" 200px \\"my-app-style_module_css-b-b\\" min-content; +} + +.my-app-style_module_css-grid5 { + grid: \\"my-app-style_module_css-a-a\\" minmax(100px, max-content) \\"my-app-style_module_css-b-b\\" 20%; +} + +.my-app-style_module_css-grid6 { + grid: 100px / 200px; +} + +.my-app-style_module_css-grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.my-app-style_module_css-grid8 { + grid: 200px / auto-flow; +} + +.my-app-style_module_css-grid9 { + grid: 30% / auto-flow dense; +} + +.my-app-style_module_css-grid10 { + grid: repeat(3, [my-app-style_module_css-line1-line1 my-app-style_module_css-line2-line2 my-app-style_module_css-line3-line3] 200px) / auto-flow 300px; +} + +.my-app-style_module_css-grid11 { + grid: [my-app-style_module_css-line1-line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.my-app-style_module_css-grid12 { + grid: auto-flow / 200px; +} + +.my-app-style_module_css-grid13 { + grid: auto-flow dense / 30%; +} + +.my-app-style_module_css-grid14 { + grid: auto-flow 300px / repeat(3, [my-app-style_module_css-line1-line1 my-app-style_module_css-line2-line2 my-app-style_module_css-line3-line3] 200px); +} + +.my-app-style_module_css-grid15 { + grid: auto-flow dense 40% / [my-app-style_module_css-line1-line1] minmax(20em, max-content); +} + +.my-app-style_module_css-grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.my-app-style_module_css-grid17 { + grid-template-areas: 'my-app-style_module_css-nav-nav my-app-style_module_css-main-main'; +} + +.my-app-style_module_css-grid-area { + grid-area: auto / auto / auto / auto; +} + +.my-app-style_module_css-grid-area1 { + grid-area: my-app-style_module_css-some-grid-area-some-grid-area; +} + +.my-app-style_module_css-grid-area2 { + grid-area: my-app-style_module_css-some-grid-area-some-grid-area / my-app-style_module_css-another-grid-area-another-grid-area; +} + +.my-app-style_module_css-grid-area3 { + grid-area: 4 my-app-style_module_css-some-grid-area-some-grid-area / 2 my-app-style_module_css-another-grid-area-another-grid-area; +} + +.my-app-style_module_css-grid-area4 { + grid-area: span 3 / span my-app-style_module_css-some-grid-area-some-grid-area; +} + +/* Keyword value */ +.my-app-style_module_css-grid-row-start { + grid-row-start: auto; +} + +/* values */ +.my-app-style_module_css-grid-row-start1 { + grid-row-start: my-app-style_module_css-some-grid-area-some-grid-area; +} + +/* + values */ +.my-app-style_module_css-grid-row-start2 { + grid-row-start: 2; +} +.my-app-style_module_css-grid-row-start3 { + grid-row-start: my-app-style_module_css-some-grid-area-some-grid-area 4; +} + +/* span + + values */ +.my-app-style_module_css-grid-row-start4 { + grid-row-start: span 3; +} +.my-app-style_module_css-grid-row-start5 { + grid-row-start: span my-app-style_module_css-some-grid-area-some-grid-area; +} +.my-app-style_module_css-grid-row-start6 { + grid-row-start: 5 my-app-style_module_css-some-grid-area-some-grid-area span; +} + +/* Global values */ +.my-app-style_module_css-grid-row-start7 { + grid-row-start: inherit; +} +.my-app-style_module_css-grid-row-start8 { + grid-row-start: initial; +} +.my-app-style_module_css-grid-row-start9 { + grid-row-start: revert; +} +.my-app-style_module_css-grid-row-start10 { + grid-row-start: revert-layer; +} +.my-app-style_module_css-grid-row-start11 { + grid-row-start: unset; +} + +.my-app-style_module_css-grid-template-areas { + grid-template-areas: + \\"my-app-style_module_css-a-a my-app-style_module_css-b-b .\\" + \\"my-app-style_module_css-a-a my-app-style_module_css-c-c my-app-style_module_css-d-d\\"; +} + +.my-app-style_module_css-grid-template-rows { + grid-template-rows: [my-app-style_module_css-line-name1-line-name1] 100px [my-app-style_module_css-line-name2-line-name2 my-app-style_module_css-line-name3-line-name3]; +} + +.my-app-style_module_css-grid-template-rows1 { + grid-template-rows: + [my-app-style_module_css-line-name1-line-name1 my-app-style_module_css-line-name2-line-name2] 100px + repeat(auto-fit, [my-app-style_module_css-line-name1-line-name1] 300px) [my-app-style_module_css-line-name3-line-name3]; +} + +.my-app-style_module_css-grid-template-rows2 { + grid-template-rows: + [my-app-style_module_css-line-name1-line-name1] 100px [my-app-style_module_css-line-name2-line-name2] + repeat(auto-fit, [my-app-style_module_css-line-name3-line-name3 my-app-style_module_css-line-name4-line-name4] 300px) + 100px; +} + +.my-app-style_module_css-grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.my-app-style_module_css-grid-template { + grid-template: + [my-app-style_module_css-header-top-header-top] \\"my-app-style_module_css-a-a my-app-style_module_css-a-a my-app-style_module_css-a-a\\" [my-app-style_module_css-header-bottom-header-bottom] + [my-app-style_module_css-main-top-main-top] \\"my-app-style_module_css-b-b my-app-style_module_css-b-b my-app-style_module_css-b-b\\" 1fr [my-app-style_module_css-main-bottom-main-bottom] + / auto 1fr auto; +} + +.my-app-style_module_css-grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [my-app-style_module_css-col-start-col-start] minmax(150px, 1fr) [my-app-style_module_css-col-end-col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [my-app-style_module_css-header-start-header-start] 100px [my-app-style_module_css-header-end-header-end my-app-style_module_css-content-start-content-start] auto [my-app-style_module_css-content-end-content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.my-app-style_module_css-class { + grid-template-columns: repeat(auto-fit, [my-app-style_module_css-col-start-col-start] minmax(150px, 1fr) [my-app-style_module_css-col-end-col-end]); +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: [my-app-style_module_css-main-start-main-start] 1fr [my-app-style_module_css-content-start-content-start] 1fr [my-app-style_module_css-content-end-content-end] 1fr [my-app-style_module_css-main-end-main-end]; + grid-template-rows: [my-app-style_module_css-main-start-main-start] 100px [my-app-style_module_css-content-start-content-start] 100px [my-app-style_module_css-content-end-content-end] 100px [my-app-style_module_css-main-end-main-end]; +} + +.my-app-style_module_css-box1 { + grid-column-start: my-app-style_module_css-main-start-main-start; + grid-row-start: my-app-style_module_css-main-start-main-start; + grid-row-end: my-app-style_module_css-main-end-main-end; +} + +.my-app-style_module_css-box2 { + grid-column-start: my-app-style_module_css-content-end-content-end; + grid-row-start: my-app-style_module_css-main-start-main-start; + grid-row-end: my-app-style_module_css-content-end-content-end; +} + +.my-app-style_module_css-box3 { + grid-column-start: my-app-style_module_css-content-start-content-start; + grid-row-start: my-app-style_module_css-main-start-main-start; +} + +.my-app-style_module_css-box4 { + grid-column-start: my-app-style_module_css-content-start-content-start; + grid-column-end: my-app-style_module_css-main-end-main-end; + grid-row-start: my-app-style_module_css-content-end-content-end; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd my-app-style_module_css-hd-hd\\" + \\"my-app-style_module_css-sd-sd my-app-style_module_css-sd-sd my-app-style_module_css-sd-sd my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main my-app-style_module_css-main-main\\" + \\"my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft my-app-style_module_css-ft-ft\\"; +} + +.my-app-style_module_css-header { + grid-area: my-app-style_module_css-hd-hd; +} + +.my-app-style_module_css-footer { + grid-area: my-app-style_module_css-ft-ft; +} + +.my-app-style_module_css-content { + grid-area: my-app-style_module_css-main-main; +} + +.my-app-style_module_css-sidebar { + grid-area: my-app-style_module_css-sd-sd; +} + +.my-app-style_module_css-wrapper > div.my-app-style_module_css-overlay { + z-index: 10; + grid-column: my-app-style_module_css-main-start-main-start / my-app-style_module_css-main-end-main-end; + grid-row: my-app-style_module_css-hd-start-hd-start / my-app-style_module_css-ft-end-ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(12, [my-app-style_module_css-col-start-col-start] 1fr); +} + +.my-app-style_module_css-item1to5 { + grid-column: my-app-style_module_css-col-start-col-start / my-app-style_module_css-col-start-col-start 5; +} + +.my-app-style_module_css-item7to9 { + grid-column: my-app-style_module_css-col-start-col-start 7 / span 3; +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [my-app-style_module_css-col1-start-col1-start] 1fr [my-app-style_module_css-col2-start-col2-start] 3fr); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end]); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: [my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end my-app-style_module_css-col-start-col-start] 1fr [my-app-style_module_css-col-end-col-end]; +} + +.my-app-style_module_css-importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +/*!*********************************!*\\\\ + !*** css ./style.module.my-css ***! + \\\\*********************************/ +.my-app-style_module_my-css-myCssClass { + color: red; +} + +/*!**************************************!*\\\\ + !*** css ./style.module.css.invalid ***! + \\\\**************************************/ +.class { + color: teal; +} + +/*!************************************!*\\\\ + !*** css ./identifiers.module.css ***! + \\\\************************************/ +.my-app-identifiers_module_css-UnusedClassName{ + color: red; + padding: var(--my-app-identifiers_module_css-variable-unused-class); + --my-app-identifiers_module_css-variable-unused-class: 10px; +} + +.my-app-identifiers_module_css-UsedClassName { + color: green; + padding: var(--my-app-identifiers_module_css-variable-used-class); + --my-app-identifiers_module_css-variable-used-class: 10px; +} + + +/*# sourceMappingURL=use-style_js.bundle0.css.map*/" +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: dev 3`] = ` +Object { + "UsedClassName": "my-app-identifiers_module_css-UsedClassName", + "VARS": "--my-app-style_module_css-LOCAL-COLOR my-app-style_module_css-VARS undefined my-app-style_module_css-globalVarsUpperCase", + "__webpack_modules__": 6, + "animation": "my-app-style_module_css-animation", + "animationName": "my-app-style_module_css-animationName", + "class": "my-app-style_module_css-class", + "classInContainer": "my-app-style_module_css-class-in-container", + "classLocalScope": "my-app-style_module_css-class-local-scope", + "classNameAfterBrokenKeyframes": "my-app-style_module_css-class-name-after-broken-keyframes", + "cssModuleWithCustomFileExtension": "my-app-style_module_my-css-myCssClass", + "currentWmultiParams": "my-app-style_module_css-local12", + "deepClassInContainer": "my-app-style_module_css-deep-class-in-container", + "displayFlexInSupportsInMediaUpperCase": "my-app-style_module_css-displayFlexInSupportsInMediaUpperCase", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "my-app-style_module_css-exportName my-app-classes_modules_css-className beforeName my-app-style_module_css-className my-app-style_module_css-classNameLocal importName secondImport my-app-classes_modules_css-otherClassName my-app-classes_modules_css-otherClassNameToo my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther className className classNameOther className classNameOther my-app-classes_modules_css-className my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName", + "exportNameOtherFromKeyword": "my-app-style_module_css-exportNameOtherFromKeyword my-app-style_module_css-from", + "exportNameOtherFromKeywordWithFrom1": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 from", + "exportNameOtherFromKeywordWithFrom2": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 my-app-classes_modules_css-from", + "exportNameOtherNoSpaces": "my-app-style_module_css-exportNameOtherNoSpaces my-app-classes_modules_css-className beforeName my-app-style_module_css-className", + "exportNameWeirdCharacters": "my-app-style_module_css-exportNameWeirdCharacters my-app-classes_modules_css-a my-app-classes_modules_css--b my-app-classes_modules_css-b- my-app-classes_modules_css---c my-app-classes_modules_css-c-- my-app-classes_modules_css-_d my-app-classes_modules_css-d%", + "futureWmultiParams": "my-app-style_module_css-local14", + "global": undefined, + "hasWmultiParams": "my-app-style_module_css-local11", + "ident": "my-app-style_module_css-ident", + "inLocalGlobalScope": "my-app-style_module_css-in-local-global-scope", + "inSupportScope": "my-app-style_module_css-inSupportScope", + "isWmultiParams": "my-app-style_module_css-local8", + "keyframes": "my-app-style_module_css-localkeyframes", + "keyframesUPPERCASE": "my-app-style_module_css-localkeyframesUPPERCASE", + "local": "my-app-style_module_css-local1 my-app-style_module_css-local2 my-app-style_module_css-local3 my-app-style_module_css-local4", + "local2": "my-app-style_module_css-local5 my-app-style_module_css-local6", + "localkeyframes2UPPPERCASE": "my-app-style_module_css-localkeyframes2UPPPERCASE", + "matchesWmultiParams": "my-app-style_module_css-local9", + "media": "my-app-style_module_css-wideScreenClass", + "mediaInSupports": "my-app-style_module_css-displayFlexInMediaInSupports", + "mediaWithOperator": "my-app-style_module_css-narrowScreenClass", + "mozAnimationName": "my-app-style_module_css-mozAnimationName", + "mozAnyWmultiParams": "my-app-style_module_css-local15", + "myColor": "--my-app-style_module_css-my-color", + "nested": "my-app-style_module_css-nested1 undefined my-app-style_module_css-nested3", + "notAValidCssModuleExtension": true, + "notWmultiParams": "my-app-style_module_css-local7", + "paddingLg": "my-app-style_module_css-padding-lg", + "paddingSm": "my-app-style_module_css-padding-sm", + "pastWmultiParams": "my-app-style_module_css-local13", + "supports": "my-app-style_module_css-displayGridInSupports", + "supportsInMedia": "my-app-style_module_css-displayFlexInSupportsInMedia", + "supportsWithOperator": "my-app-style_module_css-floatRightInNegativeSupports", + "textColor": "--my-app-style_module_css-text-color", + "vars": "--my-app-style_module_css-local-color my-app-style_module_css-vars undefined my-app-style_module_css-globalVars", + "webkitAnyWmultiParams": "my-app-style_module_css-local16", + "whereWmultiParams": "my-app-style_module_css-local10", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: global dev 1`] = ` +Object { + "active": "my-app-style_module_css-active", + "animation-name-test": "my-app-style_module_css-animation-name-test", + "article-header": "my-app-style_module_css-article-header", + "bar": "my-app-style_module_css-bar", + "baz": "my-app-style_module_css-baz", + "bounce": "my-app-style_module_css-bounce", + "class": "my-app-style_module_css-class", + "class-1": "my-app-style_module_css-class-1", + "class-local-scope": "my-app-style_module_css-class-local-scope", + "class-with-composes": "my-app-style_module_css-class-with-composes my-app-style_module_css-local-class global-class global-class-other my-app-shared_css-local-my-shared-class", + "container": "my-app-style_module_css-container", + "foo": "my-app-style_module_css-foo", + "hash": "my-app-style_module_css-hash", + "header": "my-app-style_module_css-header", + "in-local-global-scope": "my-app-style_module_css-in-local-global-scope", + "local": "my-app-style_module_css-local", + "local-class": "my-app-style_module_css-local-class", + "local-class-name": "my-app-style_module_css-local-class-name", + "local-foo-bar": "--my-app-style_module_css-local-foo-bar", + "local-in-global": "my-app-style_module_css-local-in-global", + "local-keyframes": "my-app-style_module_css-local-keyframes", + "local-keyframes-old-syntax": "my-app-style_module_css-local-keyframes-old-syntax", + "local-nested": "my-app-style_module_css-local-nested", + "local4": "my-app-style_module_css-local4", + "localUpperCase": "my-app-style_module_css-localUpperCase", + "main-paragraph": "my-app-style_module_css-main-paragraph", + "multiple-first": "my-app-style_module_css-multiple-first", + "multiple-first-with-space": "my-app-style_module_css-multiple-first-with-space", + "multiple-second": "my-app-style_module_css-multiple-second", + "multiple-second-with-space": "my-app-style_module_css-multiple-second-with-space", + "my-global-class-again": "my-app-style_module_css-my-global-class-again", + "my-simple-local": "my-app-style_module_css-my-simple-local", + "nested1": "my-app-style_module_css-nested1", + "progress": "--my-app-style_module_css-progress", + "progressAnimationLocal": "my-app-style_module_css-progressAnimationLocal", + "selected": "my-app-style_module_css-selected", + "special": "my-app-style_module_css-special", + "sticky-heading": "my-app-style_module_css-sticky-heading", + "swop5c-local": "--my-app-style_module_css-swop5c-local", + "test": "my-app-style_module_css-test", + "transparent-local": "--my-app-style_module_css-transparent-local", + "unknown-at-rule": "my-app-style_module_css-unknown-at-rule", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: global dev 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.foo { color: red; } + + + +.foo { + &.bar { color: red; } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { color: red; } + } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.foo { height: 40px; height: 36px; } + + + +.red { + color: red; +} + + + +#colorValue-v1 { + color: red; +} + + + +.red > .red { + color: red; +} + + + +.red { + color: .red; +} + + + +.export { + color: blue; +} + + + +.foo { color: red; } + + + +.foo { color: red; } +.bar { color: yellow } + + + + +.foo { color: blue; } + + + + +.class-a { color: red; } + + + + +.class-a { margin: calc(base * 2); } + + + + +.class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.foo { color: var(--color); } + + + + + + + +.foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.foo { color: blue; } +.bar { color: red } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: color(red lightness(50%)); } + + + +:root { --color: red; } + + + +:root { --color: ; } + + + +:root { --color: ; } + + + +:root { --color: /* comment */; } + + + + +.red { + color: red; +} + + + + +.class { + color: red; + color: red; + color: blue; +} + + + +.color { + color: /* test */red/* test */; +} + + + +.color { + color: /* test *//* test */red/* test */; +} + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: blue; } + + + +.foo { color: blue; } + + + +.foo { color: red; } + + + +.color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.foo { color: blue; } + + + +:root { --color: /* + multiline + comment +*/; } + + + + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: \\"reserved\\"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from \\"./var-function-export.modules.css\\")); +} + +.from-2 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-var-u2 from \\"./var-function-export.modules.css\\")); +} + +.from-4 { + color: var(--1 from \\"./var-function-export.modules.css\\"); +} + +.from-5 { + color: var(----a from \\"./var-function-export.modules.css\\"); +} + +.from-6 { + color: var(--main-bg-color from \\"./var-function-export.modules.css\\"); +} + +.mixed { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from \\"./var-function-export.modules.css\\") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --from-shared: --custom-shared; +} + +@color-profile --custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-shared_css-local-my-shared-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.class { + color: red; +} + +.local1, +.local2 .global, +.local3 { + color: green; +} + +.global .my-app-style_module_css-local4 { + color: yellow; +} + +.local5.global.local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-nested1.nested2.nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .my-app-style_module_css-localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .my-app-style_module_css-test; + unknown2: .test; + unknown3: .my-app-style_module_css-test; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .my-app-style_module_css-local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +.class .my-app-style_module_css-in-local-global-scope, +.class .my-app-style_module_css-in-local-global-scope, +.my-app-style_module_css-class-local-scope .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +.global-foo, .my-app-style_module_css-bar { + .my-app-style_module_css-local-in-global { + color: blue; + } + + @media screen { + .my-global-class-again, + .my-app-style_module_css-my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .class, .my-app-style_module_css-nested1.nested2.nested3 { + animation: slidein 3s; + } + + .local2 .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + .class { + color: red; + } + + .class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: my-app-style_module_css-sticky-heading; + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from \\"./classes.modules.css\\" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from \\"classes.modules.css\\" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from \\"./classes.modules.css\\" ; + composes: className otherClassName from \\"./classes.modules.css\\" ; + composes: className from \\"./classes.modules.css\\" , otherClassName from \\"./classes.modules.css\\" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from\\"./classes.modules.css\\",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from \\"./classes.modules.css\\"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\\\\% from \\"./classes.modules.css\\"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(my-app-style_module_css-bounce, 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --my-app-style_module_css-transparent-local(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --transparent-global(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: --my-app-style_module_css-transparent-local(var(--base-color), 0.8); + background-color: --transparent-global(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + /** test **/.my-app-style_module_css-class { + color: red; + } + + /** test **/#my-app-style_module_css-hash { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.just-class { + color: red; +} + +.my-app-style_module_css-my-simple-local { + color: red; +} + +.my-global-local { + color: red; +} + +.my-app-style_module_css-multiple-first.my-app-style_module_css-multiple-second { + color: red; +} + +.my-app-style_module_css-multiple-first-with-space .my-app-style_module_css-multiple-second-with-space { + color: red; +} + +div:not(.my-app-style_module_css-special) { + color: blue; +} + +p:not(#my-app-style_module_css-main-paragraph) { + font-weight: bold; +} + +.my-app-style_module_css-container { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-local-class-name { + color: red; +} + +.global-befor-local .my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-local-class-name .global-after-local { + color: red; +} + +.my-app-style_module_css-foo { + &.my-app-style_module_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .my-app-style_module_css-bar { + c_value: some-value; + } + + &.my-app-style_module_css-baz { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +.my-app-style_module_css-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.my-app-style_module_css-class-with-composes { + } + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes my-app-style_module_css-local-keyframes {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes my-app-style_module_css-local-keyframes-old-syntax {} +@keyframes local-keyframes-old-syntax {} + +.foo { + animation-name: basic-keyframes, global-keyframes, my-app-style_module_css-local-keyframes; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes my-app-style_module_css-progressAnimationLocal { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimationLocal 2.5s ease infinite; +} + +@scope (.my-app-style_module_css-article-header) to (.class) { + .article-footer { + border: 5px solid black; + } + .my-app-style_module_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + --my-app-style_module_css-local-foo-bar, + --global-foo-bar, + /** Deprecated syntax */ + --my-app-style_module_css-local-foo-bar, + --global-foo-bar; +} + +.class { + background-color: + var(--foo-bar), + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule my-app-style_module_css-unknown-at-rule {} + +.class { + custom-name: my-app-style_module_css-unknown-at-rule; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: my-app-style_module_css-animation-name-test animation-name-test +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + + +/*# sourceMappingURL=use-style-global_js.bundle4.css.map*/" +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: global prod 1`] = ` +Object { + "active": "zwwxVU", + "animation-name-test": "jOrreA", + "article-header": "uiPdKt", + "bar": "ueKKku", + "baz": "v4rNLS", + "bounce": "XEyeRq", + "class": "Vx2ADA", + "class-1": "wCljLW", + "class-local-scope": "XlQsKD", + "class-with-composes": "pdN5nk lSYuKq global-class global-class-other wEhvQL", + "container": "lAqA-R", + "foo": "LXyTj4", + "hash": "jcIvvc", + "header": "Zq4Bgu", + "in-local-global-scope": "MoUXzC", + "local": "KBEflt", + "local-class": "lSYuKq", + "local-class-name": "-bicf2", + "local-foo-bar": "--yBn7O5", + "local-in-global": "NSL9R7", + "local-keyframes": "Svchdz", + "local-keyframes-old-syntax": "h18zzQ", + "local-nested": "VxblVB", + "local4": "HEwyXh", + "localUpperCase": "AgZzby", + "main-paragraph": "dBVRDQ", + "multiple-first": "YK629R", + "multiple-first-with-space": "bBUtJ3", + "multiple-second": "d69pL2", + "multiple-second-with-space": "_10-3eM", + "my-global-class-again": "W4wdXr", + "my-simple-local": "xcsnD2", + "nested1": "kbu2T9", + "progress": "--z8dXmV", + "progressAnimationLocal": "_1zMqGM", + "selected": "n5D5Q0", + "special": "_5KiKr2", + "sticky-heading": "_5unArO", + "swop5c-local": "--uypV5i", + "test": "OyMPmk", + "transparent-local": "--NxHrla", + "unknown-at-rule": "DqBFzD", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: global prod 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.foo { color: red; } + + + +.foo { + &.bar { color: red; } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { color: red; } + } +} + + + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.foo { height: 40px; height: 36px; } + + + +.red { + color: red; +} + + + +#colorValue-v1 { + color: red; +} + + + +.red > .red { + color: red; +} + + + +.red { + color: .red; +} + + + +.export { + color: blue; +} + + + +.foo { color: red; } + + + +.foo { color: red; } +.bar { color: yellow } + + + + +.foo { color: blue; } + + + + +.class-a { color: red; } + + + + +.class-a { margin: calc(base * 2); } + + + + +.class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.foo { color: var(--color); } + + + + + + + +.foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.foo { color: blue; } +.bar { color: red } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: color(red lightness(50%)); } + + + +:root { --color: red; } + + + +:root { --color: ; } + + + +:root { --color: ; } + + + +:root { --color: /* comment */; } + + + + +.red { + color: red; +} + + + + +.class { + color: red; + color: red; + color: blue; +} + + + +.color { + color: /* test */red/* test */; +} + + + +.color { + color: /* test *//* test */red/* test */; +} + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.foo { color: blue; } + + + +.foo { color: blue; } + + + +.foo { color: red; } + + + +.color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.foo { color: blue; } + + + +:root { --color: /* + multiline + comment +*/; } + + + + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: \\"reserved\\"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from \\"./var-function-export.modules.css\\")); +} + +.from-2 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-var-u2 from \\"./var-function-export.modules.css\\")); +} + +.from-4 { + color: var(--1 from \\"./var-function-export.modules.css\\"); +} + +.from-5 { + color: var(----a from \\"./var-function-export.modules.css\\"); +} + +.from-6 { + color: var(--main-bg-color from \\"./var-function-export.modules.css\\"); +} + +.mixed { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from \\"./var-function-export.modules.css\\") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --from-shared: --custom-shared; +} + +@color-profile --custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.wEhvQL { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.class { + color: red; +} + +.local1, +.local2 .global, +.local3 { + color: green; +} + +.global .HEwyXh { + color: yellow; +} + +.local5.global.local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.kbu2T9.nested2.nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .AgZzby { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .OyMPmk; + unknown2: .test; + unknown3: .OyMPmk; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .KBEflt .global { + color: red; +} + +@unknown .KBEflt .global { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .NSL9R7 { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +.class .MoUXzC, +.class .MoUXzC, +.XlQsKD .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +.global-foo, .ueKKku { + .NSL9R7 { + color: blue; + } + + @media screen { + .my-global-class-again, + .W4wdXr { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .class, .kbu2T9.nested2.nested3 { + animation: slidein 3s; + } + + .local2 .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + .class { + color: red; + } + + .class { + color: red; + } + + .Vx2ADA { + color: red; + } + + .Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: _5unArO; + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from \\"./classes.modules.css\\" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from \\"classes.modules.css\\" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from \\"./classes.modules.css\\" ; + composes: className otherClassName from \\"./classes.modules.css\\" ; + composes: className from \\"./classes.modules.css\\" , otherClassName from \\"./classes.modules.css\\" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from\\"./classes.modules.css\\",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from \\"./classes.modules.css\\"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\\\\% from \\"./classes.modules.css\\"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(XEyeRq, 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --NxHrla(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --transparent-global(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: --NxHrla(var(--base-color), 0.8); + background-color: --transparent-global(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .Vx2ADA { + color: red; + } + + /** test **/.Vx2ADA { + color: red; + } + + /** test **/#jcIvvc { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.just-class { + color: red; +} + +.xcsnD2 { + color: red; +} + +.my-global-local { + color: red; +} + +.YK629R.d69pL2 { + color: red; +} + +.bBUtJ3 ._10-3eM { + color: red; +} + +div:not(._5KiKr2) { + color: blue; +} + +p:not(#dBVRDQ) { + font-weight: bold; +} + +.lAqA-R { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .Zq4Bgu { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .zwwxVU { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.n5D5Q0 { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.-bicf2 { + color: red; +} + +.global-befor-local .-bicf2 { + color: red; +} + +.-bicf2 .global-after-local { + color: red; +} + +.LXyTj4 { + &.Vx2ADA { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .ueKKku { + c_value: some-value; + } + + &.v4rNLS { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +.lSYuKq { + color: white; +} + +.global-class-other { + color: red; +} + +.pdN5nk { + } + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes Svchdz {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes h18zzQ {} +@keyframes local-keyframes-old-syntax {} + +.foo { + animation-name: basic-keyframes, global-keyframes, Svchdz; +} + +@property --z8dXmV { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes _1zMqGM { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--z8dXmV), + black var(--z8dXmV) + ); + animation: _1zMqGM 2.5s ease infinite; +} + +@scope (.uiPdKt) to (.class) { + .article-footer { + border: 5px solid black; + } + .wCljLW { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + --yBn7O5, + --global-foo-bar, + /** Deprecated syntax */ + --yBn7O5, + --global-foo-bar; +} + +.class { + background-color: + var(--foo-bar), + var(--yBn7O5), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--yBn7O5), + var(--global-foo-bar), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule DqBFzD {} + +.class { + custom-name: DqBFzD; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: jOrreA animation-name-test +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +" +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: prod 1`] = ` +Object { + "UsedClassName": "_7t7sag", + "VARS": "--vZ1yis ZREh1J undefined BOGpjq", + "__webpack_modules__": 3, + "animation": "I7H8FK", + "animationName": "bvLAsC", + "class": "Vx2ADA", + "classInContainer": "_73-7in", + "classLocalScope": "XlQsKD", + "classNameAfterBrokenKeyframes": "l-59kN", + "cssModuleWithCustomFileExtension": "Kp-Qk2", + "currentWmultiParams": "RwyLnw", + "deepClassInContainer": "cVCisO", + "displayFlexInSupportsInMediaUpperCase": "xtny9t", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "_276lNI qoIJa_ beforeName A8YDR8 _0xrNKu importName secondImport u-Iyhp eHk-1R _0xrNKu _0xrNKu RYh5jd _0xrNKu RYh5jd className className classNameOther className classNameOther qoIJa_ qoIJa_ u-Iyhp qoIJa_ u-Iyhp", + "exportNameOtherFromKeyword": "SVt4hC xjD3LP", + "exportNameOtherFromKeywordWithFrom1": "y7Ml6Q from", + "exportNameOtherFromKeywordWithFrom2": "Ns9ysL FVDuEC", + "exportNameOtherNoSpaces": "atrg9z qoIJa_ beforeName A8YDR8", + "exportNameWeirdCharacters": "i-n39D Ohvj7e XEiQF- dsEYX4 _2sUimK Jsveeg q8W_qY Vfq5Q9", + "futureWmultiParams": "dUydqb", + "global": undefined, + "hasWmultiParams": "ZU5UXg", + "ident": "_9V9u7I", + "inLocalGlobalScope": "MoUXzC", + "inSupportScope": "cFKjtQ", + "isWmultiParams": "n_QmMs", + "keyframes": "_5UlNeX", + "keyframesUPPERCASE": "i6YAqp", + "local": "ejgZjv oNuIA5 Zi-p0y HEwyXh", + "local2": "P7cOan qIVXrl", + "localkeyframes2UPPPERCASE": "qQhAdK", + "matchesWmultiParams": "lQoz4m", + "media": "n5pxIL", + "mediaInSupports": "xwpz-g", + "mediaWithOperator": "geZgE8", + "mozAnimationName": "PrCJhD", + "mozAnyWmultiParams": "r8_i3a", + "myColor": "--_14zVD_", + "nested": "kbu2T9 undefined znU9p0", + "notAValidCssModuleExtension": true, + "notWmultiParams": "_2oRg10", + "paddingLg": "_4VO-a4", + "paddingSm": "_9lyW8s", + "pastWmultiParams": "yO1Vkb", + "supports": "WqxrhC", + "supportsInMedia": "vLQT6D", + "supportsWithOperator": "x_zgIp", + "textColor": "--pQy7h-", + "vars": "--QrLdlL g-7LxA undefined OnsqKz", + "webkitAnyWmultiParams": "QlaHVq", + "whereWmultiParams": "YmjIRz", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: prod 2`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.PfAPbP { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.BCixt8 { color: red; } + + + +.BCixt8 { + &.DVs3Z5 { color: red; } +} + + + +.BCixt8 { + @media (min-width: 1024px) { + &.DVs3Z5 { color: red; } + } +} + + + +.BCixt8 { + @media (min-width: 1024px) { + &.DVs3Z5 { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.BCixt8 { height: 40px; height: 36px; } + + + +.elijK0 { + color: red; +} + + + +#elijK0 { + color: red; +} + + + +.elijK0 > .elijK0 { + color: red; +} + + + +.red { + color: .red; +} + + + +.QW6jUq { + color: blue; +} + + + +.BCixt8 { color: red; } + + + +.BCixt8 { color: red; } +.DVs3Z5 { color: yellow } + + + + +.BCixt8 { color: blue; } + + + + +.bP5vQs { color: red; } + + + + +.bP5vQs { margin: calc(base * 2); } + + + + +.bP5vQs { content: \\"test-a\\" \\"test-b\\"; } + + + +.BCixt8 { color: var(--color); } + + + + + + + +.BCixt8 { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.BCixt8 { color: blue; } +.DVs3Z5 { color: red } + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { color: color(red lightness(50%)); } + + + +:root { --nSXNVB: red; } + + + +:root { --nSXNVB: ; } + + + +:root { --nSXNVB: ; } + + + +:root { --nSXNVB: /* comment */; } + + + + +.elijK0 { + color: red; +} + + + + +.r4AQwd { + color: red; + color: red; + color: blue; +} + + + +.nSXNVB { + color: /* test */red/* test */; +} + + + +.nSXNVB { + color: /* test *//* test */red/* test */; +} + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.BCixt8 { color: blue; } + + + +.BCixt8 { color: blue; } + + + +.BCixt8 { color: red; } + + + +.nSXNVB { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.BCixt8 { color: blue; } + + + +:root { --nSXNVB: /* + multiline + comment +*/; } + + + + +/*!*********************************************!*\\\\ + !*** css ./var-function-export.modules.css ***! + \\\\*********************************************/ +:root { + --_3Ux-sI: red; + --yZhdOv: blue; + --tPUA0N: black; + --_5g4K-I: red; + --xgN30d: red; + --dYeZZq: red; +} + +._3Ux-sI { + color: red; +} + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --ir5X1L: brown; + --_95dv-7: red; + --Hin0Tw: blue; + --fSHHi8: yellow; + --: \\"reserved\\"; + --_7jGqfY: green; +} + +.G2wF_f { + color: var(--ir5X1L); +} + +@property --_3ZgcT1 { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.G2wF_f { + color: var(--_3ZgcT1); +} + +div { + background-color: var(--OGFY0R); +} + +.VV6sCc { + --OGFY0R: cornflowerblue; +} + +.NkXqny { + --OGFY0R: aquamarine; +} + + +._0O8snK { + /* Red if --my-var is not defined */ + color: var(--_95dv-7, red); +} + +.VV6sCc { + /* pink if --my-var and --my-background are not defined */ + color: var(--_95dv-7, var(--Hin0Tw, pink)); +} + +._RR2Xo { + color: var(--); +} + +.FfCQtG { + color: var(--_7jGqfY); +} + +._p_8K4 { + color: var(--my-global); +} + +.sbN5bF { + color: var(--my-global, pink); +} + +._0dNSYL { + color: var(--my-global, var(--my-global-background)); +} + +.MRYc-E { + color: var(--my-global, var(--my-global-background, pink)); +} + +._3CcAHX { + color: var(--my-global, var(--Hin0Tw, pink)); +} + +._98fBm- { + color: var( --my-global,var(--Hin0Tw,pink)); +} + +.Ll9hBj { + background: var( --ir5X1L , var( --Hin0Tw , pink ) ) , var(--my-global); +} + +.TrYqtI { + background: var(--ir5X1L,var(--Hin0Tw,pink)),var(--my-global); +} + +.n7N3Yd { + color: var(--_3Ux-sI); +} + +.Cavu2H { + color: var(--ir5X1L, var(--_3Ux-sI)); +} + +._6emYNM { + color: var(--_3Ux-sI, var(--ir5X1L)); +} + +.XNaXe3 { + color: var(--_3Ux-sI, var(--yZhdOv)); +} + +.mGmB4l { + color: var(--_5g4K-I); +} + +.znpqdH { + color: var(--xgN30d); +} + +.uSxmmJ { + color: var(--dYeZZq); +} + +.AfNRVE { + color: var(--_3Ux-sI, var(--my-global, var(--ir5X1L, red))); +} + +.Y8L6uE { + color: var(--my-global from); +} + +.YIpVZ6 { + color: var(--my-global from 1); +} + +:root { + --_96YRqM: red; +} + +._96YRqM { + color: var(--tPUA0N) +} + +.fYc0TB { + --s_RSVB: #fff; + --_3Y1tZt: #333; + + ._3bkgtY { + --RznKHJ: var(--s_RSVB); + --_5xRK2z: var(--_3Y1tZt); + color: var(--RznKHJ); + background-color: var(--_5xRK2z); + } +} + +.z98eNg { + --bWghMM: 20px; + padding: var(--bWghMM); + + .DZkWGn { + --Po6YnP: 10px; + margin-top: var(--Po6YnP); + padding-left: var(--bWghMM); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --Tkx8II: 1.5rem; + --_6tKwcP: 1.2; + } +} + +.WXHecD { + padding: var(--Tkx8II); /* This will be 1rem or 1.5rem based on screen size */ +} + +.KBwkKG { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--_6tKwcP)); + margin-bottom: calc(var(--Tkx8II) / 2); +} + +.NFM5fM { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--Tkx8II) * 2)); +} + +.lRw1w0 { + /* Locally scoped variables (pseudo-private) */ + --KYEFyd: #e0f7fa; /* Default info color */ + --hy01jq: #00796b; + --IMYWQZ: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--KYEFyd); + color: var(--hy01jq); + border-left: 5px solid var(--hy01jq); +} + +:root { + --sU715o: #fff; + --ucCiqb: #ddd; + --VCrKKa: #333; + --_5qs3s7: royalblue; +} + +._9EHv3u { + border: 1px solid var(--ucCiqb); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & ._4eXs94 { + background: var(--sU715o); + color: var(--VCrKKa); + border-bottom: 1px solid var(--ucCiqb); + + &:last-child { + border-bottom: none; + } + + & .GTk_m7 { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--sU715o) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.reg3Bz { + --sU715o: var(--_5qs3s7); /* Nested override */ + --VCrKKa: #fff; /* Nested override */ + + & .GTk_m7 { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.z9tVpZ { + /* These variables are scoped only to elements within this specific container */ + --sU715o: #333; + --ucCiqb: #555; + --VCrKKa: #eee; + --_5qs3s7: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.md0xJj { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --QDMG1D: 48px; + --Yg5yRR: 1rem; + + & ._0mjaHZ { + width: var(--QDMG1D); + height: var(--QDMG1D); + border-radius: 50%; + background: lightgray; + } + + & .nXoMcQ { + font-size: var(--Yg5yRR); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --QDMG1D: 10cqw; /* Dynamic size based on container width (10% of container) */ + --Yg5yRR: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --_8Q6SqL: #007bff; + --s_RSVB: var(--_8Q6SqL); /* --text-color now uses the value of --primary-color */ + --_4yWuy5: linear-gradient(to right, var(--_8Q6SqL), #6c757d); +} + +.__B_Ni { + color: var(--s_RSVB); + background: var(--_4yWuy5); +} + +/*!*********************************!*\\\\ + !*** css ./classes.modules.css ***! + \\\\*********************************/ +.qoIJa_ { + color: red +} + +.u-Iyhp { + color: green; +} + +.eHk-1R { + color: blue; +} + +.FVDuEC { + color: yellow; +} + +.Ohvj7e { + color: red; +} + +.XEiQF- { + color: red; +} + +.dsEYX4 { + color: red; +} + +._2sUimK { + color: red; +} + +.Jsveeg { + color: red; +} + +.q8W_qY { + color: red; +} + +.Vfq5Q9 { + color: tan; +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --_2qSR8B: --_6RMPbG; +} + +@color-profile --_6RMPbG { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.wEhvQL { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.Vx2ADA { + color: red; +} + +.ejgZjv, +.oNuIA5 .global, +.Zi-p0y { + color: green; +} + +.global .HEwyXh { + color: yellow; +} + +.P7cOan.global.qIVXrl { + color: blue; +} + +._2oRg10 div:not(.eBN_LH, .UMWLJb, ._7dxdKQ) { + pointer-events: initial !important; +} + +.n_QmMs :is(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.lQoz4m :matches(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.YmjIRz :where(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.ZU5UXg div:has(.eBN_LH, .UMWLJb, ._7dxdKQ) { + pointer-events: initial !important; +} + +.RwyLnw div:current(p, span) { + background-color: yellow; +} + +.yO1Vkb div:past(p, span) { + display: none; +} + +.dUydqb div:future(p, span) { + background-color: yellow; +} + +.r8_i3a div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.QlaHVq li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.lQoz4m :matches(div.QUNuET.AOBmmd.v62rx-, + div.QUNuET.AOBmmd.FGoXEZ, + div._72jHy0._4vejX-, + div._72jHy0._7KRQ_ div.GryLwC) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.kbu2T9.nested2.znU9p0 { + color: pink; +} + +#_9V9u7I { + color: purple; +} + +@keyframes _5UlNeX { + 0% { + left: var(--rl5mza); + top: var(--GZM3UO); + color: var(--pQ1bbl); + } + 100% { + left: var(--n4CyrU); + top: var(--coGU7L); + color: var(--oeqXKa); + } +} + +@keyframes Tks0ew { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.I7H8FK { + animation-name: _5UlNeX; + animation: 3s ease-in 1s 2 reverse both paused _5UlNeX, Tks0ew; + --rl5mza: 0px; + --GZM3UO: 0px; + --n4CyrU: 10px; + --coGU7L: 20px; +} + +.g-7LxA { + color: var(--QrLdlL); + --QrLdlL: red; +} + +.OnsqKz { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .n5pxIL { + color: var(--QrLdlL); + --QrLdlL: green; + } +} + +@media screen and (max-width: 600px) { + .geZgE8 { + color: var(--QrLdlL); + --QrLdlL: purple; + } +} + +@supports (display: grid) { + .WqxrhC { + display: grid; + } +} + +@supports not (display: grid) { + .x_zgIp { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .xwpz-g { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .vLQT6D { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .xtny9t { + display: flex; + } + } +} + +.EMl_Zd { + ANIMATION-NAME: i6YAqp; + ANIMATION: 3s ease-in 1s 2 reverse both paused i6YAqp, qQhAdK; + --rl5mza: 0px; + --GZM3UO: 0px; + --n4CyrU: 10px; + --coGU7L: 20px; +} + +@KEYFRAMES i6YAqp { + 0% { + left: VAR(--rl5mza); + top: VAR(--GZM3UO); + color: VAR(--pQ1bbl); + } + 100% { + left: VAR(--n4CyrU); + top: VAR(--coGU7L); + color: VAR(--oeqXKa); + } +} + +@KEYframes qQhAdK { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .AgZzby { + color: yellow; +} + +.ZREh1J { + color: VAR(--vZ1yis); + --vZ1yis: red; +} + +.BOGpjq { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .cFKjtQ { + color: red; + } +} + +.rWk7j_ { + animation: 3s bvLAsC; + -webkit-animation: 3s bvLAsC; +} + +.Sa2viG { + animation: bvLAsC 3s; + -webkit-animation: bvLAsC 3s; +} + +.lkeYnD { + animation-name: bvLAsC; + -webkit-animation-name: bvLAsC; +} + +.ot4wJ0 { + --q2l5qf: animationName; +} + +@keyframes bvLAsC { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes bvLAsC { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes PrCJhD { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style _0L28GV { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --_14zVD_ { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --U0twDG { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --IvCWGE { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.Vx2ADA { + color: var(--_14zVD_); +} + +@layer utilities { + ._9lyW8s { + padding: 0.5rem; + } + + ._4VO-a4 { + padding: 0.8rem; + } +} + +.Vx2ADA { + color: red; + + .COckJ5 { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .QwrGJR { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .rKLROg { + display: flex; + } + } + + @layer foo { + background: red; + + .Sin_15 { + background: red; + } + } + + @container LXyTj4 { + background: red; + + .Sin_15 { + background: red; + } + } +} + +.om4V6V { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .OyMPmk; + unknown2: .test; + unknown3: .OyMPmk; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .KBEflt .global { + color: red; +} + +@unknown .KBEflt .global { + color: red; +} + +.k-FqZw { + .hVrW41 { + color: var(--QrLdlL); + } +} + +.x1V4EV { + color: red; + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB { + color: red; + } + + .global-nested { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .VxblVB, .global-nested-next { + color: red; + } + + .foo, .ueKKku { + color: red; + } +} + +#HS0ws2 { + color: red; + + #KdpZk7 { + color: red; + } +} + +.oNOznk { + .lQoz4m div:has(.v62rx-, .FGoXEZ) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .NSL9R7 { + color: blue; + } +} + +@unknown .class { + color: red; + + .Vx2ADA { + color: red; + } +} + +.class .MoUXzC, +.class .MoUXzC, +.XlQsKD .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + ._73-7in { + font-size: 1.5em; + } +} + +@container qYFiUT (min-width: 400px) { + @container (width > 400px) { + .cVCisO { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.e7Ysmu:-ms-input-placeholder { + --cAPpAb: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--cAPpAb)); +} +.e7Ysmu::-ms-input-placeholder { + --cAPpAb: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--cAPpAb)); +} +.e7Ysmu::placeholder { + --cAPpAb: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--cAPpAb)); +} + +:root { + --OyMPmk: dark; +} + +@media screen and (prefers-color-scheme: var(--OyMPmk)) { + .v4rNLS { + color: white; + } +} + +@keyframes AMud0z { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.Vx2ADA { + animation: + LXyTj4 var(--q2l5qf) 3s, + var(--q2l5qf) 3s, + 3s linear 1s infinite running AMud0z, + 3s linear env(foo, var(--v4rNLS)) infinite running AMud0z; +} + +:root { + --v4rNLS: 10px; +} + +.Vx2ADA { + bar: env(foo, var(--v4rNLS)); +} + +.global-foo, .ueKKku { + .NSL9R7 { + color: blue; + } + + @media screen { + .my-global-class-again, + .W4wdXr { + color: red; + } + } +} + +.qR8xqZ { + .qNYg6K { + color: red; + } +} + +.uPdoJV { + @media screen { + .BBVz54 { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --LXyTj4: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .Vx2ADA, .kbu2T9.nested2.znU9p0 { + animation: AMud0z 3s; + } + + .oNuIA5 .global, + .Zi-p0y { + color: red; + } +} + +@unknown var(--LXyTj4) { + color: red; +} + +.Vx2ADA { + .Vx2ADA { + .Vx2ADA { + .Vx2ADA {} + } + } +} + +.Vx2ADA { + .Vx2ADA { + .Vx2ADA { + .Vx2ADA { + animation: AMud0z 3s; + } + } + } +} + +.Vx2ADA { + animation: AMud0z 3s; + .Vx2ADA { + animation: AMud0z 3s; + .Vx2ADA { + animation: AMud0z 3s; + .Vx2ADA { + animation: AMud0z 3s; + } + } + } +} + +.PmzqEY { + . global(.Vx2ADA) { + color: red; + } + + : global(.Vx2ADA) { + color: red; + } + + : global .Vx2ADA { + color: red; + } + + : local(.Vx2ADA) { + color: red; + } + + : local .Vx2ADA { + color: red; + } + + # hash { + color: red; + } +} + +.DCHDbS { + .class { + color: red; + } + + .class { + color: red; + } + + .Vx2ADA { + color: red; + } + + .Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } + + ./** test **/Vx2ADA { + color: red; + } +} + +.LXyTj4 { + color: red; + + .ueKKku + & { color: blue; } +} + +.QZPLpm, #ItnhTD { + &:hover > .v4rNLS { color: red; } +} + +.LXyTj4 { + & :is(.ueKKku, &.v4rNLS) { color: red; } +} + +.vm-iHv { + color: green; + & .rWk7j_ { color: blue; } + color: red; +} + +.xV0P-R { + color: blue; + + @scope (& > ._2n4Jtg) to (& > .XGwd1x) { + & .evvjkJ { + color: red; + } + } +} + +.xV0P-R { + color: blue; + + @scope (& > ._2n4Jtg) to (& > .XGwd1x) { + .evvjkJ { + color: red; + } + } + + .rWk7j_ { + color: red; + } +} + +@scope (.r3yzH0) { + :scope { border-block-end: 1px solid white; } +} + +.r3yzH0 { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.LXyTj4 { + display: grid; + + @media (orientation: landscape) { + .ueKKku { + grid-auto-flow: column; + + @media (min-width > 1024px) { + ._746DcL { + display: grid; + } + + max-inline-size: 1024px; + + .MFBiYY { + display: grid; + } + } + } + } +} + +@counter-style _0L28GV { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: _0L28GV; +} + +@counter-style YZsmDI { + fallback: _0L28GV; + system: extends _0L28GV; + speak-as: _0L28GV; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(img/shape.png); + list-style: none; + list-style: none disc url(img/shape.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: YZsmDI; + list-style: YZsmDI; +} + +@container (width > 400px) and style(--jGz9MW: true) { + .Vx2ADA { + font-size: 1.5em; + } +} + +@container _16PWt_ (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container _5unArO scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container r3yzH0 (width > 400px), style(--jGz9MW: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.rPnlZa { + container-name: _16PWt_; + container-type: inline-size; + + container: none; + container: inherit; + container: _5unArO / inline-size; + container: _5unArO / size; + container: _5unArO / scroll-state; + --ylD2It: _5unArO; + + container: var(--ylD2It); + --_5bOQpQ: small; + container-type: inline-size; +} + + +@container qYFiUT style(--_5bOQpQ: small) { + .r3yzH0 { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --HKIucg { + font-family: Bixa; +} + +.Fr8iIT { + font-palette: --HKIucg; +} + +@keyframes LXyTj4 { /* ... */ } +@keyframes LXyTj4 { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .Vx2ADA { + opacity: 0; + transform: scaleX(0); + } +} + +.Vx2ADA { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (._21vUr) { + .Vx2ADA { opacity: 0; } + + :scope .wCljLW { opacity: 0; } + + & .Vx2ADA { opacity: 0; } +} + +@position-try --_5N2X2u { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --_2qktad { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --_9YwAF4 { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --QRQnOT { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.Qtv_4z { + position: fixed; + position-anchor: --_6U2qi-; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --_5N2X2u, --_2qktad, + --_9YwAF4, --QRQnOT; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --XQsKZa { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.Zq4Bgu { + background-color: color(--XQsKZa 0% 70% 20% 0%); +} + +.OyMPmk { + test: (1, 2) [3, 4], { 1: 2}; + .rWk7j_ { + width: 200px; + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } +} + +.OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + } +} + +.OyMPmk { + width: 200px; + + .OyMPmk { + .OyMPmk { + width: 200px; + } + } +} + +.OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + } + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + + .OyMPmk { + width: 200px; + } + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } + width: 200px; +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } + .OyMPmk { + width: 200px; + } +} + +.OyMPmk { + .OyMPmk { + width: 200px; + } + width: 200px; + .OyMPmk { + width: 200px; + } +} + +#OyMPmk { + c: 1; + + #OyMPmk { + c: 2; + } +} + +@property --TR3h24 { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.lAqA-R { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --TR3h24: 20%; + --E7I-GK: orange; +} + +.RKcB4N { + width: var(--TR3h24); + height: var(--TR3h24); + background-color: var(--E7I-GK); +} + +.iX76ke { + --TR3h24: initial; + --E7I-GK: inherit; +} + +._4Um4fO { + /* invalid values */ + --TR3h24: 1000px; + --E7I-GK: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --z8dXmV { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.ueKKku { + display: inline-block; + --z8dXmV: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--z8dXmV), + black var(--z8dXmV) + ); + animation: btQQRC 2.5s ease infinite; +} + +@keyframes btQQRC { + to { + --z8dXmV: 100%; + } +} + +@keyframes pTHntp { /* ... */ } +@keyframes/**test**/pTHntp { /* ... */ } +@keyframes/**test**/pTHntp/**test**/{ /* ... */ } +@keyframes/**test**//**test**/pTHntp/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ pTHntp /**test**/ /**test**/ { /* ... */ } +@keyframes CaYExG { /* ... */ } +@property/**test**/--TR3h24 { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--TR3h24/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--TR3h24/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --TR3h24 /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --TR3h24 /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --TR3h24 /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused pTHntp, Tks0ew; + animation-name: pTHntp; + animation-duration: 2s; +} + +.h9fN34 { + width: var( --TR3h24 ); + height: var(/**comment**/--TR3h24); + background-color: var( /**comment**/--E7I-GK); + background-color-1: var(/**comment**/ --E7I-GK); + background-color-2: var( /**comment**/ --E7I-GK); + background-color-3: var( /**comment**/ --E7I-GK /**comment**/ ); + background-color-3: var( /**comment**/--E7I-GK/**comment**/ ); + background-color-3: var(/**comment**/--E7I-GK/**comment**/); +} + +@keyframes/**test**/LXyTj4 { /* ... */ } +@keyframes /**test**/LXyTj4 { /* ... */ } +@keyframes/**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**//**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**/ /**test**/ LXyTj4 { /* ... */ } +@keyframes /**test**/ /**test**/LXyTj4 { /* ... */ } +@keyframes /**test**//**test**/LXyTj4 { /* ... */ } +@keyframes/**test**//**test**/LXyTj4 { /* ... */ } +@keyframes/**test**//**test**/LXyTj4/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ LXyTj4 /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/Vx2ADA { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.vUySPm { + --Tn4rb2: black; + --xHd8kt: 10px; + --LXyTj4: 10px; + --ueKKku: calc(var(--LXyTj4) + 10px); + --_8NggIH: linear-gradient(to top, var(--Tn4rb2), white); + --BAAHwR: \\"test\\"; + --DU0JmL: yellow; + --dgphMa: red; + --KSHBQc: red; + --NfhiW3: black; + -foo: calc(var(--ueKKku) + 10px); + var: var(--Tn4rb2); + var1: var(--LXyTj4); + var2: var(--xHd8kt); + content: \\" (\\" var(--BAAHwR) \\")\\"; + var3: var(--Tn4rb2, blue); + var4: var(--DU0JmL,); + var5: var(--DU0JmL, initial); + var6: var(--DU0JmL, var(--dgphMa)); + var7: var(--DU0JmL, var(--dgphMa, red)); + var8: var(--ASDYPu); + background-color: var(--KSHBQc, var(--NfhiW3, white)); +} + +.OUbvwN { + background-color: var(--OyMPmk); + --OyMPmk: red; +} + +.A8YDR8 { + border-radius: 12px; +} + +._0xrNKu { + border-radius: 12px; +} + +.RYh5jd { + border-radius: 12px; +} + +._276lNI { + border: red; +} + +.atrg9z { + } + +.xjD3LP { + color: red; +} + +.SVt4hC { + } + +.y7Ml6Q { + } + +.Ns9ysL { + } + +.i-n39D { + } + +@function --HPKrEe(--PmceRj , --mban9m type( | )) returns { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +section { + --qImv4k: #faa6ff; + background-color: --HPKrEe(var(--qImv4k), 0.8); +} + +@function --Zbzld7(--L8UoHi #, ---vGTrA ) { + result: calc(max(var(--L8UoHi)) + var(---vGTrA)); +} + +div { + width: --Zbzld7({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --vY2Qe3(--I7H8FK, --SKv8kz) { + ---dC2HS: 1s; + --owuGkY: linear; + result: var(--I7H8FK) var(---dC2HS) var(--SKv8kz) var(--owuGkY); +} + +div { + animation: --anim-1s(XEyeRq, 2); +} + +@function --_12bUXN(--q5OeI3) { + --Tzqh_b: 2; + result: --Sr06Ag(); +} + +@function --Sr06Ag() returns { + result: calc(var(--q5OeI3) + var(--Tzqh_b)); +} + +div { + z-index: --_12bUXN(1); /* 3 */ +} + +@function --_7vN-uQ(--_8NIeZV, --wwBASX) { + result: var(--wwBASX); + @media (width < 700px) { + result: var(--_8NIeZV); + } +} + +@function --OPnU-W(--_8NIeZV, --wwBASX) { + result: if(media(width < 700px): var(--_8NIeZV) ; else: var(--wwBASX)); +} + +@function --HPKrEe(--PmceRj, --mban9m) { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +@function --NxHrla(--PmceRj, --mban9m) { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +@function --transparent-global(--PmceRj, --mban9m) { + result: oklch(from var(--PmceRj) l c h / var(--mban9m)); +} + +section { + --qImv4k: #faa6ff; + background-color: --HPKrEe(var(--qImv4k), 0.8); + background-color: --NxHrla(var(--qImv4k), 0.8); + background-color: --transparent-global(var(--qImv4k), 0.8); +} + +:root { + --oTVsLr: sharp; +} + +.Y4Gwu3 { + border-radius: if(style(--oTVsLr: sharp): 0px; else: revert-rule); +} + +@color-profile --XQsKZa { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --uypV5i { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.Vx2ADA { + background-color: color(--XQsKZa 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--uypV5i 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--_2qSR8B 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--uypV5i, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --pQy7h-: #eee; +} + +.RRkM-G { + color: var(--pQy7h-); +} + +/* Just nesting */ +.yIfcPh { + --pQy7h-: #fff; + --_5Uuad3: #333; + + .mYBaWo { + --i565Yw: var(--pQy7h-); + --hZWz_N: var(--_5Uuad3); + color: var(--i565Yw); + background-color: var(--hZWz_N); + } +} + +/* A container context based on inline size */ +.rPnlZa { + --vw3Mfv: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--vw3Mfv: blue) { + .r3yzH0 { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes PmzqEY; + +.l-59kN { + color: red; +} + +.QOKmBD { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .Vx2ADA { + color: red; + } + + /** test **/.Vx2ADA { + color: red; + } + + /** test **/#jcIvvc { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.Vx2ADA{.Vx2ADA{}} +.Vx2ADA{color:#fff5f5} +.Vx2ADA{.Vx2ADA{color:#f1f1f1}} +.Vx2ADA{--LXyTj4:#fff5f5} +.Vx2ADA{--LXyTj4:#fff5f5;color:#f1f1f1} +.Vx2ADA{--LXyTj4:#fff5f5;color:#f1f1f1;} +.Vx2ADA{--LXyTj4:#fff5f5;color:#f1f1f1;.Vx2ADA{color:#f1f1f1}} +.Vx2ADA{--LXyTj4:#fff5f5;.Vx2ADA{color:#f1f1f1}color:#f1f1f1;} +.Vx2ADA{.Vx2ADA{color:#f1f1f1}--LXyTj4:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.Vx2ADA{--ueKKku:{1, 'string', .Vx2ADA, #_5YNl5V, #NRwndY}} +.Vx2ADA{--v4rNLS:[1, \\"string\\", .class, #f1f1f1, #id]} +.Vx2ADA{--v4rNLS:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.y1y3Ez { + color: red; +} + +.xcsnD2 { + color: red; +} + +.my-global-local { + color: red; +} + +.YK629R.d69pL2 { + color: red; +} + +.bBUtJ3 ._10-3eM { + color: red; +} + +div:not(._5KiKr2) { + color: blue; +} + +p:not(#dBVRDQ) { + font-weight: bold; +} + +.lAqA-R { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .Zq4Bgu { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .zwwxVU { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.N3R3DF { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .RKcB4N.n5D5Q0 { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.lQXL_B { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .Zq4Bgu { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .zwwxVU { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.N3R3DF { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .RKcB4N.n5D5Q0 { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.-bicf2 { + color: red; +} + +.EGLCHZ .-bicf2 { + color: red; +} + +.-bicf2 .QxeYlf { + color: red; +} + +.LXyTj4 { + &.Vx2ADA { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .ueKKku { + c_value: some-value; + } + + &.v4rNLS { + c_value: some-value; + } + } +} + +/* Composes */ + +.Vx2ADA { + color: black; +} + +.lSYuKq { + color: white; +} + +.global-class-other { + color: red; +} + +.pdN5nk { + } + +/* At-rules */ + +@keyframes _7rJY4U {} +@keyframes Svchdz {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes h18zzQ {} +@keyframes local-keyframes-old-syntax {} + +.LXyTj4 { + animation-name: _7rJY4U, global-keyframes, Svchdz; +} + +@property --z8dXmV { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes _1zMqGM { + to { + --z8dXmV: 100%; + } +} + +.ueKKku { + display: inline-block; + --z8dXmV: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--z8dXmV), + black var(--z8dXmV) + ); + animation: _1zMqGM 2.5s ease infinite; +} + +@scope (.uiPdKt) to (.class) { + .NBhEtf { + border: 5px solid black; + } + .wCljLW { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --lRiOdz: red; + --yBn7O5: red; + --ho4NPI: red; + --hBmufP: + red, + --yBn7O5, + --global-foo-bar, + /** Deprecated syntax */ + --yBn7O5, + --global-foo-bar; +} + +.Vx2ADA { + background-color: + var(--lRiOdz), + var(--yBn7O5), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--yBn7O5), + var(--global-foo-bar), + var(--global-foo-bar), + var(--_2qSR8B); +} + +/** Custom local value */ + +@unknown-rule DqBFzD {} + +.Vx2ADA { + custom-name: DqBFzD; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: jOrreA animation-name-test +} + +/* GRID */ + +.KKPJ1t { + grid: none; +} + +.qDQDaP { + grid: \\"rWk7j_-a\\" 100px \\"Sa2viG-b\\" 1fr; +} + +.ufSA87 { + grid: [zUFz4T-line-name1] \\"rWk7j_-a\\" 100px [IJTjHw-line-name2]; +} + +.U_FjnN { + grid: \\"rWk7j_-a\\" 200px \\"Sa2viG-b\\" min-content; +} + +.yVK-Mn { + grid: \\"rWk7j_-a\\" minmax(100px, max-content) \\"Sa2viG-b\\" 20%; +} + +.E4-SeR { + grid: 100px / 200px; +} + +.M23t0k { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.M49YDn { + grid: 200px / auto-flow; +} + +._6owU8c { + grid: 30% / auto-flow dense; +} + +._6gnc-c { + grid: repeat(3, [NgDCMF-line1 xSFYcu-line2 A9yYcH-line3] 200px) / auto-flow 300px; +} + +.rQpriK { + grid: [NgDCMF-line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.LNd3Cl { + grid: auto-flow / 200px; +} + +.Weaj1p { + grid: auto-flow dense / 30%; +} + +.ysl4TV { + grid: auto-flow 300px / repeat(3, [NgDCMF-line1 xSFYcu-line2 A9yYcH-line3] 200px); +} + +.kwQbcr { + grid: auto-flow dense 40% / [NgDCMF-line1] minmax(20em, max-content); +} + +._7CduV2 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.Ej09V1 { + grid-template-areas: 'xkVZ4Z-nav X982uk-main'; +} + +.L5v3x6 { + grid-area: auto / auto / auto / auto; +} + +.JUNxQq { + grid-area: -UptLF-some-grid-area; +} + +._7ywNs4 { + grid-area: -UptLF-some-grid-area / iGBFyB-another-grid-area; +} + +._9TaU0Q { + grid-area: 4 -UptLF-some-grid-area / 2 iGBFyB-another-grid-area; +} + +.R_RYW0 { + grid-area: span 3 / span -UptLF-some-grid-area; +} + +/* Keyword value */ +.IPnoLw { + grid-row-start: auto; +} + +/* values */ +._2P0ffn { + grid-row-start: -UptLF-some-grid-area; +} + +/* + values */ +.tI6rTa { + grid-row-start: 2; +} +.dijhL1 { + grid-row-start: -UptLF-some-grid-area 4; +} + +/* span + + values */ +.ORVUsN { + grid-row-start: span 3; +} +.jz9aWd { + grid-row-start: span -UptLF-some-grid-area; +} +.tOC1uA { + grid-row-start: 5 -UptLF-some-grid-area span; +} + +/* Global values */ +.s7WOvJ { + grid-row-start: inherit; +} +.YHN0MI { + grid-row-start: initial; +} +.N8URft { + grid-row-start: revert; +} +.-pbWvi { + grid-row-start: revert-layer; +} +.pJgV0N { + grid-row-start: unset; +} + +.kvSpTR { + grid-template-areas: + \\"rWk7j_-a Sa2viG-b .\\" + \\"rWk7j_-a lkeYnD-c ot4wJ0-d\\"; +} + +.Ulocye { + grid-template-rows: [zUFz4T-line-name1] 100px [IJTjHw-line-name2 yPPlU6-line-name3]; +} + +.wyuk1y { + grid-template-rows: + [zUFz4T-line-name1 IJTjHw-line-name2] 100px + repeat(auto-fit, [zUFz4T-line-name1] 300px) [yPPlU6-line-name3]; +} + +._3XmJPy { + grid-template-rows: + [zUFz4T-line-name1] 100px [IJTjHw-line-name2] + repeat(auto-fit, [yPPlU6-line-name3 _5sjD27-line-name4] 300px) + 100px; +} + +.YC2t9- { + grid-template-rows: max-content 1fr max-content; +} + +.c9md82 { + grid-template: + [F71VCF-header-top] \\"rWk7j_-a rWk7j_-a rWk7j_-a\\" [mr66Z_-header-bottom] + [tsTNVP-main-top] \\"Sa2viG-b Sa2viG-b Sa2viG-b\\" 1fr [_2PB9a0-main-bottom] + / auto 1fr auto; +} + +.-cy8Zv { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [_1Yrglr-col-start] minmax(150px, 1fr) [UIbRwt-col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [Zfi6tA-header-start] 100px [TFOL0g-header-end RA1tbr-content-start] auto [q_keew-content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.Vx2ADA { + grid-template-columns: repeat(auto-fit, [_1Yrglr-col-start] minmax(150px, 1fr) [UIbRwt-col-end]); +} + +.EDnegT { + display: grid; + grid-template-columns: [rRCri6-main-start] 1fr [RA1tbr-content-start] 1fr [q_keew-content-end] 1fr [xGMSmb-main-end]; + grid-template-rows: [rRCri6-main-start] 100px [RA1tbr-content-start] 100px [q_keew-content-end] 100px [xGMSmb-main-end]; +} + +.E_Xs87 { + grid-column-start: rRCri6-main-start; + grid-row-start: rRCri6-main-start; + grid-row-end: xGMSmb-main-end; +} + +.lG966Z { + grid-column-start: q_keew-content-end; + grid-row-start: rRCri6-main-start; + grid-row-end: q_keew-content-end; +} + +.AyxbM3 { + grid-column-start: RA1tbr-content-start; + grid-row-start: rRCri6-main-start; +} + +.sEMgMA { + grid-column-start: RA1tbr-content-start; + grid-column-end: xGMSmb-main-end; + grid-row-start: q_keew-content-end; +} + +.EDnegT { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd mtsh_D-hd\\" + \\"i9q6VM-sd i9q6VM-sd i9q6VM-sd X982uk-main X982uk-main X982uk-main X982uk-main X982uk-main X982uk-main\\" + \\"nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft nMcK39-ft\\"; +} + +.Zq4Bgu { + grid-area: mtsh_D-hd; +} + +.p920hy { + grid-area: nMcK39-ft; +} + +.evvjkJ { + grid-area: X982uk-main; +} + +.SuLRt4 { + grid-area: i9q6VM-sd; +} + +.EDnegT > div.xdTdxz { + z-index: 10; + grid-column: rRCri6-main-start / xGMSmb-main-end; + grid-row: wJdD_6-hd-start / -CSZqj-ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.EDnegT { + display: grid; + grid-template-columns: repeat(12, [_1Yrglr-col-start] 1fr); +} + +.dBiT79 { + grid-column: _1Yrglr-col-start / _1Yrglr-col-start 5; +} + +._7kAI1c { + grid-column: _1Yrglr-col-start 7 / span 3; +} + +.EDnegT { + grid-template-columns: repeat(4, [TzgowJ-col1-start] 1fr [dQggyi-col2-start] 3fr); +} + +.EDnegT { + grid-template-columns: repeat(4, [_1Yrglr-col-start] 1fr [UIbRwt-col-end]); +} + +.EDnegT { + grid-template-columns: [_1Yrglr-col-start] 1fr [UIbRwt-col-end _1Yrglr-col-start] 1fr [UIbRwt-col-end _1Yrglr-col-start] 1fr [UIbRwt-col-end _1Yrglr-col-start] 1fr [UIbRwt-col-end]; +} + +.fR4zhQ { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +/*!*********************************!*\\\\ + !*** css ./style.module.my-css ***! + \\\\*********************************/ +.Kp-Qk2 { + color: red; +} + +/*!**************************************!*\\\\ + !*** css ./style.module.css.invalid ***! + \\\\**************************************/ +.class { + color: teal; +} + +/*!************************************!*\\\\ + !*** css ./identifiers.module.css ***! + \\\\************************************/ +.jSScCg{ + color: red; + padding: var(--uwANgn); + --uwANgn: 10px; +} + +._7t7sag { + color: green; + padding: var(--k-sang); + --k-sang: 10px; +} + +" +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to create css modules: prod 3`] = ` +Object { + "UsedClassName": "FPwoX1", + "VARS": "---YmVq7 gAOQgg undefined g45L8B", + "__webpack_modules__": 3, + "animation": "_1CLYv0", + "animationName": "AndP3O", + "class": "Q0FGvN", + "classInContainer": "fV5oht", + "classLocalScope": "tXd0_C", + "classNameAfterBrokenKeyframes": "m7eubc", + "cssModuleWithCustomFileExtension": "Yhfh7J", + "currentWmultiParams": "SbgUjN", + "deepClassInContainer": "_9w8IDB", + "displayFlexInSupportsInMediaUpperCase": "v0UVbD", + "exportLocalVarsShouldCleanup": "false false", + "exportName": "tavnFA FABkCo beforeName aPwTqM IPj7ZV importName secondImport _1H2HaF _vcSqh IPj7ZV IPj7ZV _2h_741 IPj7ZV _2h_741 className className classNameOther className classNameOther FABkCo FABkCo _1H2HaF FABkCo _1H2HaF", + "exportNameOtherFromKeyword": "G5CCpw agIvjM", + "exportNameOtherFromKeywordWithFrom1": "u6EQvk from", + "exportNameOtherFromKeywordWithFrom2": "_3wkyOF B1Oyw9", + "exportNameOtherNoSpaces": "J86C29 FABkCo beforeName aPwTqM", + "exportNameWeirdCharacters": "RQL3eC _4NUXjn _0KbLT1 gCHFDQ _33N44G Inzw3x iEo8-C sB8Vj6", + "futureWmultiParams": "u7quBe", + "global": undefined, + "hasWmultiParams": "ZCcpAQ", + "ident": "Se-BYV", + "inLocalGlobalScope": "rUoMuU", + "inSupportScope": "Mbqv56", + "isWmultiParams": "sMpokZ", + "keyframes": "U2-wTz", + "keyframesUPPERCASE": "DA3GL-", + "local": "F5UOXd _68b_hi _9cBUYF rmOZUh", + "local2": "qu3BKV fcet9Z", + "localkeyframes2UPPPERCASE": "exDCO2", + "matchesWmultiParams": "l08kci", + "media": "qq1BeF", + "mediaInSupports": "tZahFq", + "mediaWithOperator": "QjwEig", + "mozAnimationName": "fzmwkF", + "mozAnyWmultiParams": "Lf4YXg", + "myColor": "--wbWhI7", + "nested": "yLct4a undefined Zqmojt", + "notAValidCssModuleExtension": true, + "notWmultiParams": "GGGsI8", + "paddingLg": "y4ZVxz", + "paddingSm": "hxaw53", + "pastWmultiParams": "NSrgYz", + "supports": "uZUIyp", + "supportsInMedia": "kTatWr", + "supportsWithOperator": "LUjpes", + "textColor": "--gjJV_c", + "vars": "--NNsA2u ybnHOd undefined UU67Qr", + "webkitAnyWmultiParams": "rlaEZT", + "whereWmultiParams": "peTfCX", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to disable options: options classes 1`] = ` +Object { + "VARS": "my-app-style_module_css-VARS", + "a": "my-app-style_module_css-a", + "active": "my-app-style_module_css-active", + "again": "my-app-style_module_css-again", + "animation": "my-app-style_module_css-animation", + "animation-name-test": "my-app-style_module_css-animation-name-test", + "animationUpperCase": "my-app-style_module_css-animationUpperCase", + "apply-sharp": "my-app-style_module_css-apply-sharp", + "article-footer": "my-app-style_module_css-article-footer", + "article-header": "my-app-style_module_css-article-header", + "b": "my-app-style_module_css-b", + "bar": "my-app-style_module_css-bar", + "baz": "my-app-style_module_css-baz", + "baz-1": "my-app-style_module_css-baz-1", + "baz-2": "my-app-style_module_css-baz-2", + "bounce": "my-app-style_module_css-bounce", + "box1": "my-app-style_module_css-box1", + "box2": "my-app-style_module_css-box2", + "box3": "my-app-style_module_css-box3", + "box4": "my-app-style_module_css-box4", + "broken": "my-app-style_module_css-broken", + "button": "my-app-style_module_css-button", + "c": "my-app-style_module_css-c", + "card": "my-app-style_module_css-card", + "child1": "my-app-style_module_css-child1", + "class": "my-app-style_module_css-class", + "class-1": "my-app-style_module_css-class-1", + "class-in-container": "my-app-style_module_css-class-in-container", + "class-local-scope": "my-app-style_module_css-class-local-scope", + "class-with-composes": "my-app-style_module_css-class-with-composes my-app-style_module_css-local-class global-class global-class-other my-app-shared_css-local-my-shared-class", + "className": "my-app-style_module_css-className", + "classNameLocal": "my-app-style_module_css-classNameLocal", + "classNameLocalOther": "my-app-style_module_css-classNameLocalOther", + "comments": "my-app-style_module_css-comments", + "container": "my-app-style_module_css-container", + "container-only-classes": "my-app-style_module_css-container-only-classes", + "content": "my-app-style_module_css-content", + "d": "my-app-style_module_css-d", + "deep-class-in-container": "my-app-style_module_css-deep-class-in-container", + "description": "my-app-style_module_css-description", + "disabled": "my-app-style_module_css-disabled", + "displayFlexInMediaInSupports": "my-app-style_module_css-displayFlexInMediaInSupports", + "displayFlexInSupportsInMedia": "my-app-style_module_css-displayFlexInSupportsInMedia", + "displayFlexInSupportsInMediaUpperCase": "my-app-style_module_css-displayFlexInSupportsInMediaUpperCase", + "displayGridInSupports": "my-app-style_module_css-displayGridInSupports", + "err-404": "my-app-style_module_css-err-404", + "error": "my-app-style_module_css-error", + "exportName": "my-app-style_module_css-exportName my-app-classes_modules_css-className beforeName my-app-style_module_css-className my-app-style_module_css-classNameLocal importName secondImport my-app-classes_modules_css-otherClassName my-app-classes_modules_css-otherClassNameToo my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther my-app-style_module_css-classNameLocal my-app-style_module_css-classNameLocalOther className className classNameOther className classNameOther my-app-classes_modules_css-className my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName my-app-classes_modules_css-className my-app-classes_modules_css-otherClassName", + "exportNameOtherFromKeyword": "my-app-style_module_css-exportNameOtherFromKeyword my-app-style_module_css-from", + "exportNameOtherFromKeywordWithFrom1": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 from", + "exportNameOtherFromKeywordWithFrom2": "my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 my-app-classes_modules_css-from", + "exportNameOtherNoSpaces": "my-app-style_module_css-exportNameOtherNoSpaces my-app-classes_modules_css-className beforeName my-app-style_module_css-className", + "exportNameWeirdCharacters": "my-app-style_module_css-exportNameWeirdCharacters my-app-classes_modules_css-a my-app-classes_modules_css--b my-app-classes_modules_css-b- my-app-classes_modules_css---c my-app-classes_modules_css-c-- my-app-classes_modules_css-_d my-app-classes_modules_css-d%", + "f1f1f1": "my-app-style_module_css-f1f1f1", + "feature": "my-app-style_module_css-feature", + "first-nested": "my-app-style_module_css-first-nested", + "first-nested-at-rule": "my-app-style_module_css-first-nested-at-rule", + "first-nested-nested": "my-app-style_module_css-first-nested-nested", + "first-nested-nested-at-rule-deep": "my-app-style_module_css-first-nested-nested-at-rule-deep", + "floatRightInNegativeSupports": "my-app-style_module_css-floatRightInNegativeSupports", + "foo": "my-app-style_module_css-foo", + "footer": "my-app-style_module_css-footer", + "from": "my-app-style_module_css-from", + "gird2": "my-app-style_module_css-gird2", + "global-after-local": "my-app-style_module_css-global-after-local", + "global-befor-local": "my-app-style_module_css-global-befor-local", + "globalVars": "my-app-style_module_css-globalVars", + "globalVarsUpperCase": "my-app-style_module_css-globalVarsUpperCase", + "grid-area": "my-app-style_module_css-grid-area", + "grid-area1": "my-app-style_module_css-grid-area1", + "grid-area2": "my-app-style_module_css-grid-area2", + "grid-area3": "my-app-style_module_css-grid-area3", + "grid-area4": "my-app-style_module_css-grid-area4", + "grid-container": "my-app-style_module_css-grid-container", + "grid-row-start": "my-app-style_module_css-grid-row-start", + "grid-row-start1": "my-app-style_module_css-grid-row-start1", + "grid-row-start10": "my-app-style_module_css-grid-row-start10", + "grid-row-start11": "my-app-style_module_css-grid-row-start11", + "grid-row-start2": "my-app-style_module_css-grid-row-start2", + "grid-row-start3": "my-app-style_module_css-grid-row-start3", + "grid-row-start4": "my-app-style_module_css-grid-row-start4", + "grid-row-start5": "my-app-style_module_css-grid-row-start5", + "grid-row-start6": "my-app-style_module_css-grid-row-start6", + "grid-row-start7": "my-app-style_module_css-grid-row-start7", + "grid-row-start8": "my-app-style_module_css-grid-row-start8", + "grid-row-start9": "my-app-style_module_css-grid-row-start9", + "grid-template": "my-app-style_module_css-grid-template", + "grid-template-areas": "my-app-style_module_css-grid-template-areas", + "grid-template-rows": "my-app-style_module_css-grid-template-rows", + "grid-template-rows1": "my-app-style_module_css-grid-template-rows1", + "grid-template-rows2": "my-app-style_module_css-grid-template-rows2", + "grid-template-rows3": "my-app-style_module_css-grid-template-rows3", + "grid1": "my-app-style_module_css-grid1", + "grid10": "my-app-style_module_css-grid10", + "grid11": "my-app-style_module_css-grid11", + "grid12": "my-app-style_module_css-grid12", + "grid13": "my-app-style_module_css-grid13", + "grid14": "my-app-style_module_css-grid14", + "grid15": "my-app-style_module_css-grid15", + "grid16": "my-app-style_module_css-grid16", + "grid17": "my-app-style_module_css-grid17", + "grid3": "my-app-style_module_css-grid3", + "grid4": "my-app-style_module_css-grid4", + "grid5": "my-app-style_module_css-grid5", + "grid6": "my-app-style_module_css-grid6", + "grid7": "my-app-style_module_css-grid7", + "grid8": "my-app-style_module_css-grid8", + "grid9": "my-app-style_module_css-grid9", + "hash": "my-app-style_module_css-hash", + "header": "my-app-style_module_css-header", + "highlighted": "my-app-style_module_css-highlighted", + "horizontal-small": "my-app-style_module_css-horizontal-small", + "horizontal-tiny": "my-app-style_module_css-horizontal-tiny", + "id": "my-app-style_module_css-id", + "id-bar": "my-app-style_module_css-id-bar", + "id-foo": "my-app-style_module_css-id-foo", + "ident": "my-app-style_module_css-ident", + "importantAnimation": "my-app-style_module_css-importantAnimation", + "in-local-global-scope": "my-app-style_module_css-in-local-global-scope", + "inSupportScope": "my-app-style_module_css-inSupportScope", + "infobox": "my-app-style_module_css-infobox", + "item": "my-app-style_module_css-item", + "item-1": "my-app-style_module_css-item-1", + "item1to5": "my-app-style_module_css-item1to5", + "item7to9": "my-app-style_module_css-item7to9", + "just-class": "my-app-style_module_css-just-class", + "limit": "my-app-style_module_css-limit", + "local": "my-app-style_module_css-local", + "local-class": "my-app-style_module_css-local-class", + "local-class-name": "my-app-style_module_css-local-class-name", + "local-foo-bar": "--my-app-style_module_css-local-foo-bar", + "local-in-global": "my-app-style_module_css-local-in-global", + "local-keyframes": "my-app-style_module_css-local-keyframes", + "local-keyframes-old-syntax": "my-app-style_module_css-local-keyframes-old-syntax", + "local-nested": "my-app-style_module_css-local-nested", + "local1": "my-app-style_module_css-local1", + "local10": "my-app-style_module_css-local10", + "local11": "my-app-style_module_css-local11", + "local12": "my-app-style_module_css-local12", + "local13": "my-app-style_module_css-local13", + "local14": "my-app-style_module_css-local14", + "local15": "my-app-style_module_css-local15", + "local16": "my-app-style_module_css-local16", + "local2": "my-app-style_module_css-local2", + "local3": "my-app-style_module_css-local3", + "local4": "my-app-style_module_css-local4", + "local5": "my-app-style_module_css-local5", + "local6": "my-app-style_module_css-local6", + "local7": "my-app-style_module_css-local7", + "local8": "my-app-style_module_css-local8", + "local9": "my-app-style_module_css-local9", + "localUpperCase": "my-app-style_module_css-localUpperCase", + "mButtonDisabled": "my-app-style_module_css-mButtonDisabled", + "main-paragraph": "my-app-style_module_css-main-paragraph", + "multiple-first": "my-app-style_module_css-multiple-first", + "multiple-first-with-space": "my-app-style_module_css-multiple-first-with-space", + "multiple-second": "my-app-style_module_css-multiple-second", + "multiple-second-with-space": "my-app-style_module_css-multiple-second-with-space", + "my-class": "my-app-style_module_css-my-class", + "my-global-class-again": "my-app-style_module_css-my-global-class-again", + "my-simple-local": "my-app-style_module_css-my-simple-local", + "narrowScreenClass": "my-app-style_module_css-narrowScreenClass", + "nested-layer": "my-app-style_module_css-nested-layer", + "nested-media": "my-app-style_module_css-nested-media", + "nested-parens": "my-app-style_module_css-nested-parens", + "nested-pure": "my-app-style_module_css-nested-pure", + "nested-supports": "my-app-style_module_css-nested-supports", + "nested-var": "my-app-style_module_css-nested-var", + "nested-with-local-pseudo": "my-app-style_module_css-nested-with-local-pseudo", + "nested1": "my-app-style_module_css-nested1", + "nested3": "my-app-style_module_css-nested3", + "no-space": "my-app-style_module_css-no-space", + "not-selector-inside": "my-app-style_module_css-not-selector-inside", + "otherDiv": "my-app-style_module_css-otherDiv", + "overlay": "my-app-style_module_css-overlay", + "padding-lg": "my-app-style_module_css-padding-lg", + "padding-sm": "my-app-style_module_css-padding-sm", + "parent": "my-app-style_module_css-parent", + "parent1": "my-app-style_module_css-parent1", + "placeholder-gray-700": "my-app-style_module_css-placeholder-gray-700", + "post": "my-app-style_module_css-post", + "progress": "--my-app-style_module_css-progress", + "progressAnimationLocal": "my-app-style_module_css-progressAnimationLocal", + "qqq": "my-app-style_module_css-qqq", + "scope": "my-app-style_module_css-scope", + "selected": "my-app-style_module_css-selected", + "sidebar": "my-app-style_module_css-sidebar", + "simple": "my-app-style_module_css-simple", + "special": "my-app-style_module_css-special", + "sticky-heading": "my-app-style_module_css-sticky-heading", + "swop5c-local": "--my-app-style_module_css-swop5c-local", + "test": "my-app-style_module_css-test", + "theme-dark": "my-app-style_module_css-theme-dark", + "three": "my-app-style_module_css-three", + "tipOnly": "my-app-style_module_css-tipOnly", + "transparent-local": "--my-app-style_module_css-transparent-local", + "two": "my-app-style_module_css-two", + "unknown-at-rule": "my-app-style_module_css-unknown-at-rule", + "var": "my-app-style_module_css-var", + "var-order": "my-app-style_module_css-var-order", + "vars": "my-app-style_module_css-vars", + "vertical-small": "my-app-style_module_css-vertical-small", + "vertical-tiny": "my-app-style_module_css-vertical-tiny", + "wideScreenClass": "my-app-style_module_css-wideScreenClass", + "wrapper": "my-app-style_module_css-wrapper", +} +`; + +exports[`ConfigTestCases css css-modules exported tests should allow to disable options: options css 1`] = ` +"/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + + + + + + + + + + +/*!**************************************!*\\\\ + !*** css ./at-rule-value.module.css ***! + \\\\**************************************/ + + +.my-app-at-rule-value_module_css-value-in-class { + color: blue; +} + + + + + + +@media (max-width: 599px) { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { + &.my-app-at-rule-value_module_css-bar { color: red; } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { color: red; } + } +} + + + +.my-app-at-rule-value_module_css-foo { + @media (min-width: 1024px) { + &.my-app-at-rule-value_module_css-bar { + @media (min-width: 1024px) { + color: red; + } + } + } +} + + + + +.my-app-at-rule-value_module_css-foo { height: 40px; height: 36px; } + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + +#my-app-at-rule-value_module_css-red { + color: red; +} + + + +.my-app-at-rule-value_module_css-red > .my-app-at-rule-value_module_css-red { + color: red; +} + + + +.red { + color: .red; +} + + + +.my-app-at-rule-value_module_css-export { + color: blue; +} + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } +.my-app-at-rule-value_module_css-bar { color: yellow } + + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + + +.my-app-at-rule-value_module_css-class-a { color: red; } + + + + +.my-app-at-rule-value_module_css-class-a { margin: calc(base * 2); } + + + + +.my-app-at-rule-value_module_css-class-a { content: \\"test-a\\" \\"test-b\\"; } + + + +.my-app-at-rule-value_module_css-foo { color: var(--color); } + + + + + + + +.my-app-at-rule-value_module_css-foo { + color: red; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } +.my-app-at-rule-value_module_css-bar { color: red } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: color(red lightness(50%)); } + + + +:root { --my-app-at-rule-value_module_css-color: red; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: ; } + + + +:root { --my-app-at-rule-value_module_css-color: /* comment */; } + + + + +.my-app-at-rule-value_module_css-red { + color: red; +} + + + + +.my-app-at-rule-value_module_css-class { + color: red; + color: red; + color: blue; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-color { + color: /* test *//* test */red/* test */; +} + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { box-shadow: /* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +.my-app-at-rule-value_module_css-foo { color: red; } + + + +.my-app-at-rule-value_module_css-color { + color: /* + multiline + comment +*/red/* + multiline + comment +*/; +} + + + +.my-app-at-rule-value_module_css-foo { color: blue; } + + + +:root { --my-app-at-rule-value_module_css-color: /* + multiline + comment +*/; } + + + + +/*!*********************************************!*\\\\ + !*** css ./var-function-export.modules.css ***! + \\\\*********************************************/ +:root { + --my-app-var-function-export_modules_css-my-var-u1: red; + --my-app-var-function-export_modules_css-my-var-u2: blue; + --my-app-var-function-export_modules_css-not-override-class: black; + --my-app-var-function-export_modules_css-1: red; + --my-app-var-function-export_modules_css---a: red; + --my-app-var-function-export_modules_css-main-bg-color: red; +} + +.my-app-var-function-export_modules_css-my-var-u1 { + color: red; +} + +/*!*************************************!*\\\\ + !*** css ./var-function.module.css ***! + \\\\*************************************/ +:root { + --my-app-var-function_module_css-main-bg-color: brown; + --my-app-var-function_module_css-my-var: red; + --my-app-var-function_module_css-my-background: blue; + --my-app-var-function_module_css-my-global: yellow; + --: \\"reserved\\"; + --my-app-var-function_module_css-a: green; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-main-bg-color); +} + +@property --my-app-var-function_module_css-logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.my-app-var-function_module_css-class { + color: var(--my-app-var-function_module_css-logo-color); +} + +div { + background-color: var(--my-app-var-function_module_css-box-color); +} + +.my-app-var-function_module_css-two { + --my-app-var-function_module_css-box-color: cornflowerblue; +} + +.my-app-var-function_module_css-three { + --my-app-var-function_module_css-box-color: aquamarine; +} + + +.my-app-var-function_module_css-one { + /* Red if --my-var is not defined */ + color: var(--my-app-var-function_module_css-my-var, red); +} + +.my-app-var-function_module_css-two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-app-var-function_module_css-my-var, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-reserved { + color: var(--); +} + +.my-app-var-function_module_css-green { + color: var(--my-app-var-function_module_css-a); +} + +.my-app-var-function_module_css-global { + color: var(--my-global); +} + +.my-app-var-function_module_css-global-and-default { + color: var(--my-global, pink); +} + +.my-app-var-function_module_css-global-and-default-1 { + color: var(--my-global, var(--my-global-background)); +} + +.my-app-var-function_module_css-global-and-default-2 { + color: var(--my-global, var(--my-global-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-3 { + color: var(--my-global, var(--my-app-var-function_module_css-my-background, pink)); +} + +.my-app-var-function_module_css-global-and-default-5 { + color: var( --my-global,var(--my-app-var-function_module_css-my-background,pink)); +} + +.my-app-var-function_module_css-global-and-default-6 { + background: var( --my-app-var-function_module_css-main-bg-color , var( --my-app-var-function_module_css-my-background , pink ) ) , var(--my-global); +} + +.my-app-var-function_module_css-global-and-default-7 { + background: var(--my-app-var-function_module_css-main-bg-color,var(--my-app-var-function_module_css-my-background,pink)),var(--my-global); +} + +.my-app-var-function_module_css-from { + color: var(--my-app-var-function-export_modules_css-my-var-u1); +} + +.my-app-var-function_module_css-from-1 { + color: var(--my-app-var-function_module_css-main-bg-color, var(--my-app-var-function-export_modules_css-my-var-u1)); +} + +.my-app-var-function_module_css-from-2 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function_module_css-main-bg-color)); +} + +.my-app-var-function_module_css-from-3 { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-app-var-function-export_modules_css-my-var-u2)); +} + +.my-app-var-function_module_css-from-4 { + color: var(--my-app-var-function-export_modules_css-1); +} + +.my-app-var-function_module_css-from-5 { + color: var(--my-app-var-function-export_modules_css---a); +} + +.my-app-var-function_module_css-from-6 { + color: var(--my-app-var-function-export_modules_css-main-bg-color); +} + +.my-app-var-function_module_css-mixed { + color: var(--my-app-var-function-export_modules_css-my-var-u1, var(--my-global, var(--my-app-var-function_module_css-main-bg-color, red))); +} + +.my-app-var-function_module_css-broken { + color: var(--my-global from); +} + +.my-app-var-function_module_css-broken-1 { + color: var(--my-global from 1); +} + +:root { + --my-app-var-function_module_css-not-override-class: red; +} + +.my-app-var-function_module_css-not-override-class { + color: var(--my-app-var-function-export_modules_css-not-override-class) +} + +.my-app-var-function_module_css-theme-dark { + --my-app-var-function_module_css-text-color: #fff; + --my-app-var-function_module_css-bg-color: #333; + + .my-app-var-function_module_css-button { + --my-app-var-function_module_css-button-color: var(--my-app-var-function_module_css-text-color); + --my-app-var-function_module_css-button-bg: var(--my-app-var-function_module_css-bg-color); + color: var(--my-app-var-function_module_css-button-color); + background-color: var(--my-app-var-function_module_css-button-bg); + } +} + +.my-app-var-function_module_css-parent { + --my-app-var-function_module_css-parent-padding: 20px; + padding: var(--my-app-var-function_module_css-parent-padding); + + .my-app-var-function_module_css-child { + --my-app-var-function_module_css-child-margin: 10px; + margin-top: var(--my-app-var-function_module_css-child-margin); + padding-left: var(--my-app-var-function_module_css-parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --my-app-var-function_module_css-base-padding: 1.5rem; + --my-app-var-function_module_css-font-scale: 1.2; + } +} + +.my-app-var-function_module_css-container { + padding: var(--my-app-var-function_module_css-base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.my-app-var-function_module_css-item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--my-app-var-function_module_css-font-scale)); + margin-bottom: calc(var(--my-app-var-function_module_css-base-padding) / 2); +} + +.my-app-var-function_module_css-item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--my-app-var-function_module_css-base-padding) * 2)); +} + +.my-app-var-function_module_css-banner { + /* Locally scoped variables (pseudo-private) */ + --my-app-var-function_module_css-banner-bg: #e0f7fa; /* Default info color */ + --my-app-var-function_module_css-banner-text: #00796b; + --my-app-var-function_module_css-banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--my-app-var-function_module_css-banner-bg); + color: var(--my-app-var-function_module_css-banner-text); + border-left: 5px solid var(--my-app-var-function_module_css-banner-text); +} + +:root { + --my-app-var-function_module_css-accordion-bg: #fff; + --my-app-var-function_module_css-accordion-border: #ddd; + --my-app-var-function_module_css-accordion-text: #333; + --my-app-var-function_module_css-accordion-accent: royalblue; +} + +.my-app-var-function_module_css-accordion-container { + border: 1px solid var(--my-app-var-function_module_css-accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .my-app-var-function_module_css-accordion-item { + background: var(--my-app-var-function_module_css-accordion-bg); + color: var(--my-app-var-function_module_css-accordion-text); + border-bottom: 1px solid var(--my-app-var-function_module_css-accordion-border); + + &:last-child { + border-bottom: none; + } + + & .my-app-var-function_module_css-accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--my-app-var-function_module_css-accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.my-app-var-function_module_css-is-active { + --my-app-var-function_module_css-accordion-bg: var(--my-app-var-function_module_css-accordion-accent); /* Nested override */ + --my-app-var-function_module_css-accordion-text: #fff; /* Nested override */ + + & .my-app-var-function_module_css-accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.my-app-var-function_module_css-is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --my-app-var-function_module_css-accordion-bg: #333; + --my-app-var-function_module_css-accordion-border: #555; + --my-app-var-function_module_css-accordion-text: #eee; + --my-app-var-function_module_css-accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.my-app-var-function_module_css-media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --my-app-var-function_module_css-avatar-size: 48px; + --my-app-var-function_module_css-text-size: 1rem; + + & .my-app-var-function_module_css-avatar { + width: var(--my-app-var-function_module_css-avatar-size); + height: var(--my-app-var-function_module_css-avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .my-app-var-function_module_css-content { + font-size: var(--my-app-var-function_module_css-text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --my-app-var-function_module_css-avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --my-app-var-function_module_css-text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --my-app-var-function_module_css-primary-color: #007bff; + --my-app-var-function_module_css-text-color: var(--my-app-var-function_module_css-primary-color); /* --text-color now uses the value of --primary-color */ + --my-app-var-function_module_css-highlight-background: linear-gradient(to right, var(--my-app-var-function_module_css-primary-color), #6c757d); +} + +.my-app-var-function_module_css-element { + color: var(--my-app-var-function_module_css-text-color); + background: var(--my-app-var-function_module_css-highlight-background); +} + +/*!*********************************!*\\\\ + !*** css ./classes.modules.css ***! + \\\\*********************************/ +.my-app-classes_modules_css-className { + color: red +} + +.my-app-classes_modules_css-otherClassName { + color: green; +} + +.my-app-classes_modules_css-otherClassNameToo { + color: blue; +} + +.my-app-classes_modules_css-from { + color: yellow; +} + +.my-app-classes_modules_css-a { + color: red; +} + +.my-app-classes_modules_css--b { + color: red; +} + +.my-app-classes_modules_css-b- { + color: red; +} + +.my-app-classes_modules_css---c { + color: red; +} + +.my-app-classes_modules_css-c-- { + color: red; +} + +.my-app-classes_modules_css-_d { + color: red; +} + +.my-app-classes_modules_css-d\\\\% { + color: tan; +} + +/*!************************!*\\\\ + !*** css ./shared.css ***! + \\\\************************/ +:root { + --my-app-shared_css-from-shared: --my-app-shared_css-custom-shared; +} + +@color-profile --my-app-shared_css-custom-shared { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-shared_css-local-my-shared-class { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ + +.my-app-style_module_css-class { + color: red; +} + +.my-app-style_module_css-local1, +.my-app-style_module_css-local2 .global, +.my-app-style_module_css-local3 { + color: green; +} + +.global .my-app-style_module_css-local4 { + color: yellow; +} + +.my-app-style_module_css-local5.global.my-app-style_module_css-local6 { + color: blue; +} + +.my-app-style_module_css-local7 div:not(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local8 :is(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local10 :where(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-local11 div:has(.my-app-style_module_css-disabled, .my-app-style_module_css-mButtonDisabled, .my-app-style_module_css-tipOnly) { + pointer-events: initial !important; +} + +.my-app-style_module_css-local12 div:current(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local13 div:past(p, span) { + display: none; +} + +.my-app-style_module_css-local14 div:future(p, span) { + background-color: yellow; +} + +.my-app-style_module_css-local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.my-app-style_module_css-local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.my-app-style_module_css-local9 :matches(div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-tiny, + div.my-app-style_module_css-parent1.my-app-style_module_css-child1.my-app-style_module_css-vertical-small, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-tiny, + div.my-app-style_module_css-otherDiv.my-app-style_module_css-horizontal-small div.my-app-style_module_css-description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + color: pink; +} + +#my-app-style_module_css-ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.my-app-style_module_css-animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.my-app-style_module_css-vars { + color: var(--local-color); + --local-color: red; +} + +.my-app-style_module_css-globalVars { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .my-app-style_module_css-wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .my-app-style_module_css-narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .my-app-style_module_css-displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .my-app-style_module_css-floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .my-app-style_module_css-displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .my-app-style_module_css-displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.my-app-style_module_css-animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.globalUpperCase .my-app-style_module_css-localUpperCase { + color: yellow; +} + +.my-app-style_module_css-VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.my-app-style_module_css-globalVarsUpperCase { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .my-app-style_module_css-inSupportScope { + color: red; + } +} + +.my-app-style_module_css-a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.my-app-style_module_css-b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.my-app-style_module_css-c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.my-app-style_module_css-d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.my-app-style_module_css-class { + color: var(--my-color); +} + +@layer utilities { + .my-app-style_module_css-padding-sm { + padding: 0.5rem; + } + + .my-app-style_module_css-padding-lg { + padding: 0.8rem; + } +} + +.my-app-style_module_css-class { + color: red; + + .my-app-style_module_css-nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .my-app-style_module_css-nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .my-app-style_module_css-nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .my-app-style_module_css-nested-layer { + background: red; + } + } +} + +.my-app-style_module_css-not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: .my-app-style_module_css-test; + unknown2: .test; + unknown3: .my-app-style_module_css-test; + unknown4: .test; + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +@unknown .my-app-style_module_css-local .global { + color: red; +} + +.my-app-style_module_css-nested-var { + .my-app-style_module_css-again { + color: var(--local-color); + } +} + +.my-app-style_module_css-nested-with-local-pseudo { + color: red; + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested { + color: red; + } + + .global-nested { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .my-app-style_module_css-local-nested, .global-nested-next { + color: red; + } + + .foo, .my-app-style_module_css-bar { + color: red; + } +} + +#my-app-style_module_css-id-foo { + color: red; + + #my-app-style_module_css-id-bar { + color: red; + } +} + +.my-app-style_module_css-nested-parens { + .my-app-style_module_css-local9 div:has(.my-app-style_module_css-vertical-tiny, .my-app-style_module_css-vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +.global-foo { + .nested-global { + color: red; + } + + .my-app-style_module_css-local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .my-app-style_module_css-class { + color: red; + } +} + +.class .my-app-style_module_css-in-local-global-scope, +.class .my-app-style_module_css-in-local-global-scope, +.my-app-style_module_css-class-local-scope .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .my-app-style_module_css-class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .my-app-style_module_css-deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.my-app-style_module_css-placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.my-app-style_module_css-placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .my-app-style_module_css-baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.my-app-style_module_css-class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.my-app-style_module_css-class { + bar: env(foo, var(--baz)); +} + +.global-foo, .my-app-style_module_css-bar { + .my-app-style_module_css-local-in-global { + color: blue; + } + + @media screen { + .my-global-class-again, + .my-app-style_module_css-my-global-class-again { + color: red; + } + } +} + +.my-app-style_module_css-first-nested { + .my-app-style_module_css-first-nested-nested { + color: red; + } +} + +.my-app-style_module_css-first-nested-at-rule { + @media screen { + .my-app-style_module_css-first-nested-nested-at-rule-deep { + color: red; + } + } +} + +.again-global { + color:red; +} + +.again-again-global { + .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +.again-again-global { + color: var(--foo); + + .again-again-global { + color: var(--foo); + } +} + +.again-again-global { + animation: slidein 3s; + + .again-again-global, .my-app-style_module_css-class, .my-app-style_module_css-nested1.nested2.my-app-style_module_css-nested3 { + animation: slidein 3s; + } + + .my-app-style_module_css-local2 .global, + .my-app-style_module_css-local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class {} + } + } +} + +.my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + .my-app-style_module_css-class { + animation: slidein 3s; + } + } + } +} + +.my-app-style_module_css-class { + animation: slidein 3s; + .my-app-style_module_css-class { + animation: slidein 3s; + .my-app-style_module_css-class { + animation: slidein 3s; + .my-app-style_module_css-class { + animation: slidein 3s; + } + } + } +} + +.my-app-style_module_css-broken { + . global(.my-app-style_module_css-class) { + color: red; + } + + : global(.my-app-style_module_css-class) { + color: red; + } + + : global .my-app-style_module_css-class { + color: red; + } + + : local(.my-app-style_module_css-class) { + color: red; + } + + : local .my-app-style_module_css-class { + color: red; + } + + # hash { + color: red; + } +} + +.my-app-style_module_css-comments { + .class { + color: red; + } + + .class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } + + ./** test **/my-app-style_module_css-class { + color: red; + } +} + +.my-app-style_module_css-foo { + color: red; + + .my-app-style_module_css-bar + & { color: blue; } +} + +.my-app-style_module_css-error, #my-app-style_module_css-err-404 { + &:hover > .my-app-style_module_css-baz { color: red; } +} + +.my-app-style_module_css-foo { + & :is(.my-app-style_module_css-bar, &.my-app-style_module_css-baz) { color: red; } +} + +.my-app-style_module_css-qqq { + color: green; + & .my-app-style_module_css-a { color: blue; } + color: red; +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + & .my-app-style_module_css-content { + color: red; + } + } +} + +.my-app-style_module_css-parent { + color: blue; + + @scope (& > .my-app-style_module_css-scope) to (& > .my-app-style_module_css-limit) { + .my-app-style_module_css-content { + color: red; + } + } + + .my-app-style_module_css-a { + color: red; + } +} + +@scope (.my-app-style_module_css-card) { + :scope { border-block-end: 1px solid white; } +} + +.my-app-style_module_css-card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.my-app-style_module_css-foo { + display: grid; + + @media (orientation: landscape) { + .my-app-style_module_css-bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .my-app-style_module_css-baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .my-app-style_module_css-baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .my-app-style_module_css-class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.my-app-style_module_css-post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: my-app-style_module_css-sticky-heading; + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .my-app-style_module_css-card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-app-style_module_css-my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .my-app-style_module_css-class { + opacity: 0; + transform: scaleX(0); + } +} + +.my-app-style_module_css-class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.my-app-style_module_css-feature) { + .my-app-style_module_css-class { opacity: 0; } + + :scope .my-app-style_module_css-class-1 { opacity: 0; } + + & .my-app-style_module_css-class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.my-app-style_module_css-infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.my-app-style_module_css-test { + test: (1, 2) [3, 4], { 1: 2}; + .my-app-style_module_css-a { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + + .my-app-style_module_css-test { + width: 200px; + } + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + .my-app-style_module_css-test { + width: 200px; + } +} + +.my-app-style_module_css-test { + .my-app-style_module_css-test { + width: 200px; + } + width: 200px; + .my-app-style_module_css-test { + width: 200px; + } +} + +#my-app-style_module_css-test { + c: 1; + + #my-app-style_module_css-test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.my-app-style_module_css-container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.my-app-style_module_css-item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.my-app-style_module_css-two { + --item-size: initial; + --item-color: inherit; +} + +.my-app-style_module_css-three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.my-app-style_module_css-bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.my-app-style_module_css-item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/my-app-style_module_css-class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.my-app-style_module_css-var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.my-app-style_module_css-var-order { + background-color: var(--test); + --test: red; +} + +.my-app-style_module_css-className { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocal { + border-radius: 12px; +} + +.my-app-style_module_css-classNameLocalOther { + border-radius: 12px; +} + +.my-app-style_module_css-exportName { + border: red; +} + +.my-app-style_module_css-exportNameOtherNoSpaces { + } + +.my-app-style_module_css-from { + color: red; +} + +.my-app-style_module_css-exportNameOtherFromKeyword { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom1 { + } + +.my-app-style_module_css-exportNameOtherFromKeywordWithFrom2 { + } + +.my-app-style_module_css-exportNameWeirdCharacters { + } + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(my-app-style_module_css-bounce, 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --my-app-style_module_css-transparent-local(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function --transparent-global(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: --my-app-style_module_css-transparent-local(var(--base-color), 0.8); + background-color: --transparent-global(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.my-app-style_module_css-apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --my-app-style_module_css-swop5c-local { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.my-app-style_module_css-class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(--my-app-style_module_css-swop5c-local, \\"./shared.css\\" 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.my-app-style_module_css-simple { + color: var(--text-color); +} + +/* Just nesting */ +.my-app-style_module_css-theme-dark { + --text-color: #fff; + --bg-color: #333; + + .my-app-style_module_css-button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.my-app-style_module_css-post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .my-app-style_module_css-card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.my-app-style_module_css-no-space { + .class-no-space { + color: red; + } + + /** test **/.class { + color: red; + } + + .my-app-style_module_css-class { + color: red; + } + + /** test **/.my-app-style_module_css-class { + color: red; + } + + /** test **/#my-app-style_module_css-hash { + color: red; + } + + /** test **/{ + color: red; + } +} + +/* nesting */ + +.my-app-style_module_css-class{.my-app-style_module_css-class{}} +.my-app-style_module_css-class{color:#fff5f5} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--foo:#fff5f5} +.my-app-style_module_css-class{--foo:#fff5f5;color:#f1f1f1} +.my-app-style_module_css-class{--foo:#fff5f5;color:#f1f1f1;} +.my-app-style_module_css-class{--foo:#fff5f5;color:#f1f1f1;.my-app-style_module_css-class{color:#f1f1f1}} +.my-app-style_module_css-class{--foo:#fff5f5;.my-app-style_module_css-class{color:#f1f1f1}color:#f1f1f1;} +.my-app-style_module_css-class{.my-app-style_module_css-class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.my-app-style_module_css-class{--bar:{1, 'string', .my-app-style_module_css-class, #my-app-style_module_css-f1f1f1, #my-app-style_module_css-id}} +.my-app-style_module_css-class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.my-app-style_module_css-class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.my-app-style_module_css-just-class { + color: red; +} + +.my-app-style_module_css-my-simple-local { + color: red; +} + +.my-global-local { + color: red; +} + +.my-app-style_module_css-multiple-first.my-app-style_module_css-multiple-second { + color: red; +} + +.my-app-style_module_css-multiple-first-with-space .my-app-style_module_css-multiple-second-with-space { + color: red; +} + +div:not(.my-app-style_module_css-special) { + color: blue; +} + +p:not(#my-app-style_module_css-main-paragraph) { + font-weight: bold; +} + +.my-app-style_module_css-container { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .my-app-style_module_css-header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .my-app-style_module_css-active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.my-app-style_module_css-highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .my-app-style_module_css-item.my-app-style_module_css-selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-global-befor-local .my-app-style_module_css-local-class-name { + color: red; +} + +.my-app-style_module_css-local-class-name .my-app-style_module_css-global-after-local { + color: red; +} + +.my-app-style_module_css-foo { + &.my-app-style_module_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .my-app-style_module_css-bar { + c_value: some-value; + } + + &.my-app-style_module_css-baz { + c_value: some-value; + } + } +} + +/* Composes */ + +.my-app-style_module_css-class { + color: black; +} + +.my-app-style_module_css-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.my-app-style_module_css-class-with-composes { + } + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes my-app-style_module_css-local-keyframes {} +@keyframes global-keyframes {} +/** Deprecated syntax */ +@keyframes my-app-style_module_css-local-keyframes-old-syntax {} +@keyframes local-keyframes-old-syntax {} + +.my-app-style_module_css-foo { + animation-name: basic-keyframes, global-keyframes, my-app-style_module_css-local-keyframes; +} + +@property --my-app-style_module_css-progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes my-app-style_module_css-progressAnimationLocal { + to { + --progress: 100%; + } +} + +.my-app-style_module_css-bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--my-app-style_module_css-progress), + black var(--my-app-style_module_css-progress) + ); + animation: my-app-style_module_css-progressAnimationLocal 2.5s ease infinite; +} + +@scope (.my-app-style_module_css-article-header) to (.class) { + .my-app-style_module_css-article-footer { + border: 5px solid black; + } + .my-app-style_module_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + --my-app-style_module_css-local-foo-bar, + --global-foo-bar, + /** Deprecated syntax */ + --my-app-style_module_css-local-foo-bar, + --global-foo-bar; +} + +.my-app-style_module_css-class { + background-color: + var(--foo-bar), + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + /** Deprecated syntax */ + var(--my-app-style_module_css-local-foo-bar), + var(--global-foo-bar), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule my-app-style_module_css-unknown-at-rule {} + +.my-app-style_module_css-class { + custom-name: my-app-style_module_css-unknown-at-rule; +} + +.class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: my-app-style_module_css-animation-name-test animation-name-test +} + +/* GRID */ + +.my-app-style_module_css-grid1 { + grid: none; +} + +.my-app-style_module_css-gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.my-app-style_module_css-grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.my-app-style_module_css-grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.my-app-style_module_css-grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.my-app-style_module_css-grid6 { + grid: 100px / 200px; +} + +.my-app-style_module_css-grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.my-app-style_module_css-grid8 { + grid: 200px / auto-flow; +} + +.my-app-style_module_css-grid9 { + grid: 30% / auto-flow dense; +} + +.my-app-style_module_css-grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.my-app-style_module_css-grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.my-app-style_module_css-grid12 { + grid: auto-flow / 200px; +} + +.my-app-style_module_css-grid13 { + grid: auto-flow dense / 30%; +} + +.my-app-style_module_css-grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.my-app-style_module_css-grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.my-app-style_module_css-grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.my-app-style_module_css-grid17 { + grid-template-areas: 'nav main'; +} + +.my-app-style_module_css-grid-area { + grid-area: auto / auto / auto / auto; +} + +.my-app-style_module_css-grid-area1 { + grid-area: some-grid-area; +} + +.my-app-style_module_css-grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.my-app-style_module_css-grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.my-app-style_module_css-grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.my-app-style_module_css-grid-row-start { + grid-row-start: auto; +} + +/* values */ +.my-app-style_module_css-grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.my-app-style_module_css-grid-row-start2 { + grid-row-start: 2; +} +.my-app-style_module_css-grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.my-app-style_module_css-grid-row-start4 { + grid-row-start: span 3; +} +.my-app-style_module_css-grid-row-start5 { + grid-row-start: span some-grid-area; +} +.my-app-style_module_css-grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.my-app-style_module_css-grid-row-start7 { + grid-row-start: inherit; +} +.my-app-style_module_css-grid-row-start8 { + grid-row-start: initial; +} +.my-app-style_module_css-grid-row-start9 { + grid-row-start: revert; +} +.my-app-style_module_css-grid-row-start10 { + grid-row-start: revert-layer; +} +.my-app-style_module_css-grid-row-start11 { + grid-row-start: unset; +} + +.my-app-style_module_css-grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.my-app-style_module_css-grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.my-app-style_module_css-grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.my-app-style_module_css-grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.my-app-style_module_css-grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.my-app-style_module_css-grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.my-app-style_module_css-grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.my-app-style_module_css-class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.my-app-style_module_css-box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.my-app-style_module_css-box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.my-app-style_module_css-box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.my-app-style_module_css-box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.my-app-style_module_css-header { + grid-area: hd; +} + +.my-app-style_module_css-footer { + grid-area: ft; +} + +.my-app-style_module_css-content { + grid-area: main; +} + +.my-app-style_module_css-sidebar { + grid-area: sd; +} + +.my-app-style_module_css-wrapper > div.my-app-style_module_css-overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.my-app-style_module_css-wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.my-app-style_module_css-item1to5 { + grid-column: col-start / col-start 5; +} + +.my-app-style_module_css-item7to9 { + grid-column: col-start 7 / span 3; +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.my-app-style_module_css-wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.my-app-style_module_css-importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + + +/*# sourceMappingURL=bundle6.css.map*/" +`; diff --git a/test/configCases/css/css-modules/at-rule-value.module.css b/test/configCases/css/css-modules/at-rule-value.module.css new file mode 100644 index 00000000000..9f5bdb812dc --- /dev/null +++ b/test/configCases/css/css-modules/at-rule-value.module.css @@ -0,0 +1,262 @@ +@value my-red blue; + +.value-in-class { + color: my-red; +} + +@value v-comment-broken:; +@value v-comment-broken-v1:/* comment */; + +@value small: (max-width: 599px); + +@media small { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + +@value blue-v1: red; + +.foo { color: blue-v1; } + +@value blue-v3: red; + +.foo { + &.bar { color: blue-v3; } +} + +@value blue-v3: red; + +.foo { + @media (min-width: 1024px) { + &.bar { color: blue-v3; } + } +} + +@value blue-v4: red; + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: blue-v4; + } + } + } +} + +@value test-t: 40px; +@value test_q: 36px; + +.foo { height: test-t; height: test_q; } + +@value colorValue: red; + +.colorValue { + color: colorValue; +} + +@value colorValue-v1: red; + +#colorValue-v1 { + color: colorValue-v1; +} + +@value colorValue-v2: red; + +.colorValue-v2 > .colorValue-v2 { + color: colorValue-v2; +} + +@value colorValue-v3: .red; + +colorValue-v3 { + color: colorValue-v3; +} + +@value red-v2 from "./colors.module.css"; + +.export { + color: red-v2; +} + +@value blue-v1 as green from "./colors.module.css"; + +.foo { color: green; } + +@value blue-i, green-v2 from "./colors.module.css"; + +.foo { color: blue-i; } +.bar { color: green-v2 } + +@value colors: "./colors.module.css"; +@value red-v4 from colors; + +.foo { color: red-v4; } + +@value aaa: red; +@value bbb: aaa; + +.class-a { color: bbb; } + +@value base: 10px; +@value large: calc(base * 2); + +.class-a { margin: large; } + +@value a from "./colors.module.css"; +@value b from "./colors.module.css"; + +.class-a { content: a b; } + +@value --red from "./colors.module.css"; + +.foo { color: --red; } + +@value named: red; +@value _3char #0f0; +@value _6char #00ff00; +@value rgba rgba(34, 12, 64, 0.3); +@value hsla hsla(220, 13.0%, 18.0%, 1); + +.foo { + color: named; + background-color: _3char; + border-top-color: _6char; + border-bottom-color: rgba; + outline-color: hsla; +} + +@value (blue-i, red-i) from "./colors.module.css"; + +.foo { color: red-i; } +.bar { color: blue-i } + +@value coolShadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow; } + +@value func: color(red lightness(50%)); + +.foo { color: func; } + +@value v-color: red; + +:root { --color: v-color; } + +@value v-empty: ; + +:root { --color:v-empty; } + +@value v-empty-v2: ; + +:root { --color:v-empty-v2; } + +@value v-empty-v3: /* comment */; + +:root { --color:v-empty-v3; } + +@value override: blue; +@value override: red; + +.override { + color: override; +} + +@value (blue-v1 as my-name) from "./colors.module.css"; +@value (blue-v1 as my-name-again, red-v1) from "./colors.module.css"; + +.class { + color: my-name; + color: my-name-again; + color: red-v1; +} + +@value/* test */blue-v5/* test */:/* test */red/* test */; + +.color { + color: blue-v5; +} + +@value/* test */blue-v6/* test *//* test */red/* test */; + +.color { + color: blue-v6; +} + +@value coolShadow-v2 : 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v2; } + +@value /* test */ coolShadow-v3 /* test */ : 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v3; } + +@value /* test */ coolShadow-v4 /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v4; } + +@value/* test */coolShadow-v5/* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v5; } + +@value/* test */coolShadow-v6/* test */:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v6; } + +@value/* test */coolShadow-v7/* test */:/* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v7; } + +@value /* test */ test-v1 /* test */ from /* test */ "./colors.module.css" /* test */; + +.foo { color: test-v1; } + +@value/* test */test-v2/* test */from/* test */"./colors.module.css"/* test */; + +.foo { color: test-v2; } + +@value/* test */(/* test */blue-v1/* test */as/* test */my-name-q/* test */)/* test */from/* test */"./colors.module.css"/* test */; + +.foo { color: my-name-q; } + +@value/* + multiline + comment +*/multiline-v1/* + multiline + comment +*/:/* + multiline + comment +*/red/* + multiline + comment +*/; + +.color { + color: multiline-v1; +} + +@value /* + multiline comment +*/ red-v3 /* + multiline comment +*/ from /* + multiline comment +*/ "./colors.module.css" /* + multiline comment +*/; + +.foo { color: red-v3; } + +@value multiline-empty: /* + multiline + comment +*/; + +:root { --color:multiline-empty; } + +@value; +@value test; diff --git a/test/configCases/css/css-modules/classes.modules.css b/test/configCases/css/css-modules/classes.modules.css new file mode 100644 index 00000000000..614bbe71277 --- /dev/null +++ b/test/configCases/css/css-modules/classes.modules.css @@ -0,0 +1,43 @@ +.className { + color: red +} + +.otherClassName { + color: green; +} + +.otherClassNameToo { + color: blue; +} + +.from { + color: yellow; +} + +.a { + color: red; +} + +.-b { + color: red; +} + +.b- { + color: red; +} + +.--c { + color: red; +} + +.c-- { + color: red; +} + +._d { + color: red; +} + +.d\% { + color: tan; +} diff --git a/test/configCases/css/css-modules/colors.module.css b/test/configCases/css/css-modules/colors.module.css new file mode 100644 index 00000000000..8fd97169387 --- /dev/null +++ b/test/configCases/css/css-modules/colors.module.css @@ -0,0 +1,13 @@ +@value red-v1 blue; +@value red-i: blue; +@value blue-v1 red; +@value blue-i: red; +@value a: "test-a"; +@value b: "test-b"; +@value --red: var(--color); +@value test-v1: blue; +@value test-v2: blue; +@value red-v2: blue; +@value green-v2: yellow; +@value red-v3: blue; +@value red-v4: blue; diff --git a/test/configCases/css/css-modules/identifiers.module.css b/test/configCases/css/css-modules/identifiers.module.css new file mode 100644 index 00000000000..100bb05e5e5 --- /dev/null +++ b/test/configCases/css/css-modules/identifiers.module.css @@ -0,0 +1,11 @@ +.UnusedClassName{ + color: red; + padding: var(--variable-unused-class); + --variable-unused-class: 10px; +} + +.UsedClassName { + color: green; + padding: var(--variable-used-class); + --variable-used-class: 10px; +} diff --git a/test/configCases/css/css-modules/img/shape.png b/test/configCases/css/css-modules/img/shape.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/css-modules/img/shape.png differ diff --git a/test/configCases/css/css-modules/index-global.js b/test/configCases/css/css-modules/index-global.js new file mode 100644 index 00000000000..d0952351c12 --- /dev/null +++ b/test/configCases/css/css-modules/index-global.js @@ -0,0 +1,26 @@ +const prod = process.env.NODE_ENV === "production"; + +it("should allow to create css modules", done => { + import("./use-style-global.js").then(({ default: x }) => { + try { + expect(x).toMatchSnapshot(prod ? "global prod" : "global dev"); + + const fs = __non_webpack_require__("fs"); + const path = __non_webpack_require__("path"); + if (__STATS_I__ === 4 || __STATS_I__ === 5) { + const cssOutputFilename = prod + ? `638.bundle${__STATS_I__}.css` + : `use-style-global_js.bundle${__STATS_I__}.css`; + + const cssContent = fs.readFileSync( + path.join(__dirname, cssOutputFilename), + "utf-8" + ); + expect(cssContent).toMatchSnapshot(prod ? "global prod" : "global dev"); + } + } catch (e) { + return done(e); + } + done(); + }, done); +}); diff --git a/test/configCases/css/css-modules/index-options.js b/test/configCases/css/css-modules/index-options.js new file mode 100644 index 00000000000..66f6a9602da --- /dev/null +++ b/test/configCases/css/css-modules/index-options.js @@ -0,0 +1,15 @@ +import * as styles from "./style.module.css"; + +it("should allow to disable options", () => { + expect(styles).toMatchSnapshot("options classes"); + + const fs = __non_webpack_require__("fs"); + const path = __non_webpack_require__("path"); + const cssOutputFilename = `bundle6.css`; + + const cssContent = fs.readFileSync( + path.join(__dirname, cssOutputFilename), + "utf-8" + ); + expect(cssContent).toMatchSnapshot("options css"); +}); diff --git a/test/configCases/css/css-modules/index.js b/test/configCases/css/css-modules/index.js new file mode 100644 index 00000000000..17d99488b5b --- /dev/null +++ b/test/configCases/css/css-modules/index.js @@ -0,0 +1,26 @@ +const prod = process.env.NODE_ENV === "production"; + +it("should allow to create css modules", done => { + import("./use-style.js").then(({ default: x }) => { + try { + expect(x).toMatchSnapshot(prod ? "prod" : "dev"); + + const fs = __non_webpack_require__("fs"); + const path = __non_webpack_require__("path"); + if (__STATS_I__ === 0 || __STATS_I__ === 1) { + const cssOutputFilename = prod + ? `915.bundle${__STATS_I__}.css` + : `use-style_js.bundle${__STATS_I__}.css`; + + const cssContent = fs.readFileSync( + path.join(__dirname, cssOutputFilename), + "utf-8" + ); + expect(cssContent).toMatchSnapshot(prod ? "prod" : "dev"); + } + } catch (e) { + return done(e); + } + done(); + }, done); +}); diff --git a/test/configCases/css/css-modules/shared.css b/test/configCases/css/css-modules/shared.css new file mode 100644 index 00000000000..4d87a0b21cd --- /dev/null +++ b/test/configCases/css/css-modules/shared.css @@ -0,0 +1,11 @@ +:root { + --from-shared: --custom-shared; +} + +@color-profile --custom-shared { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +:local(.local-my-shared-class) { + color: red; +} diff --git a/test/configCases/css/css-modules/style.module.css b/test/configCases/css/css-modules/style.module.css new file mode 100644 index 00000000000..cb6eb3c5c71 --- /dev/null +++ b/test/configCases/css/css-modules/style.module.css @@ -0,0 +1,2063 @@ +@import "at-rule-value.module.css"; +@import "var-function.module.css"; + +.class { + color: red; +} + +.local1, +.local2 :global .global, +.local3 { + color: green; +} + +:global .global :local .local4 { + color: yellow; +} + +.local5:global(.global).local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +:global(:global(:local(.nested1)).nested2).nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars :global { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +:GLOBAL .globalUpperCase :LOCAL .localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase :GLOBAL { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: "\1F44D"; + suffix: " "; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for "nice-style" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: ""; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: ""; + inherits: false; +} + +@property --my-color-2 { + syntax: ""; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: :local(.test); + unknown2: :global(.test); + unknown3: local(.test); + unknown4: global(.test); + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown local(.local) global(.global) { + color: red; +} + +@unknown :local(.local) :global(.global) { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + :local .local-nested { + color: red; + } + + :global .global-nested { + color: red; + } + + :local(.local-nested) { + color: red; + } + + :global(.global-nested) { + color: red; + } + + :local .local-nested, :global .global-nested-next { + color: red; + } + + :local(.local-nested), :global(.global-nested-next) { + color: red; + } + + :global .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +:global .global-foo { + .nested-global { + color: red; + } + + :local .local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +:global .class :local .in-local-global-scope, +:global .class :local .in-local-global-scope, +:local .class-local-scope :global .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +:global .global-foo, :local .bar { + :local .local-in-global { + color: blue; + } + + @media screen { + :global .my-global-class-again, + :local .my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +:global .again-global { + color:red; +} + +:global .again-again-global { + :global .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +:global .again-again-global { + color: var(--foo); + + :global .again-again-global { + color: var(--foo); + } +} + +:global .again-again-global { + animation: slidein 3s; + + :global .again-again-global, .class, :global(:global(:local(.nested1)).nested2).nested3 { + animation: slidein 3s; + } + + .local2 :global .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + :/** test */global(.class) { + color: red; + } + + :/** test */global .class { + color: red; + } + + :/** test */local(.class) { + color: red; + } + + :/** test */local .class { + color: red; + } + + ./** test **/class { + color: red; + } + + :local(./** test **/class) { + color: red; + } + + :local ./** test **/class { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: "\1F44D"; + suffix: " "; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(img/shape.png); + list-style: none; + list-style: none disc url(img/shape.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url("./img/shape.png"); + list-style: georgian inside url("./img/shape.png"); + list-style: georgian outside url("./img/shape.png"); + /* type */ + list-style: square; + + /* image */ + list-style: url("./img/shape.png"); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url("img/shape.png") inside; + + /* three values */ + list-style: lower-roman url("img/shape.png") outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: "★"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: local(sticky-heading); + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for "nice-style" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes "foo" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: ""; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property { + syntax: ""; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: ""; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes "initial" { /* ... */ } +@keyframes/**test**/"initial" { /* ... */ } +@keyframes/**test**/"initial"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/"initial"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ "initial" /**test**/ /**test**/ { /* ... */ } +@keyframes "None" { /* ... */ } +@property/**test**/--item-size { + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: ""; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: ""; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused "initial", localkeyframes2; + animation-name: "initial"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: "test"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: " (" var(--external-link) ")"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from "./classes.modules.css" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from "classes.modules.css" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from "./classes.modules.css" ; + composes: className otherClassName from "./classes.modules.css" ; + composes: className from "./classes.modules.css" , otherClassName from "./classes.modules.css" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from"./classes.modules.css",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from "./classes.modules.css"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\% from "./classes.modules.css"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(local(bounce), 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function :local(--transparent-local)(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function :global(--transparent-global)(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: local(--transparent-local)(var(--base-color), 0.8); + background-color: global(--transparent-global)(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +@color-profile local(--swop5c-local) { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +@color-profile :local(--swop5c-local) { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +@color-profile global(--swop5c) { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +@color-profile :global(--swop5c) { + src: url("https://example.org/SWOP2006_Coated5v2.icc"); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(local(--swop5c-local) 0% 70% 20% 0%); + background-color: color(:local(--swop5c-local) 0% 70% 20% 0%); + background-color: color(global(--swop5c) 0% 70% 20% 0%); + background-color: color(:global(--swop5c) 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from "./shared.css" 0% 70% 20% 0%); + background-color: color(local(--swop5c-local, "./shared.css") 0% 70% 20% 0%); + background-color: color(:local(--swop5c-local, "./shared.css") 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + :global.class-no-space { + color: red; + } + + :global/** test **/.class { + color: red; + } + + :local.class { + color: red; + } + + :local/** test **/.class { + color: red; + } + + :local/** test **/#hash { + color: red; + } + + :local/** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, "string", .class, #f1f1f1, #id]} +.class{--baz:(1, "string", .class, #f1f1f1, #id)} + +/* Cases for `css/global` */ + +.just-class { + color: red; +} + +:local(.my-simple-local) { + color: red; +} + +:global(.my-global-local) { + color: red; +} + +:local(.multiple-first.multiple-second) { + color: red; +} + +:local(.multiple-first-with-space .multiple-second-with-space) { + color: red; +} + +div:not(:local(.special)) { + color: blue; +} + +p:not(:local(#main-paragraph)) { + font-weight: bold; +} + +:local(.container) { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & :local(.header) { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & :local(.active) { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item:local(.selected) { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +:local(.local-class-name) { + color: red; +} + +.global-befor-local :local(.local-class-name) { + color: red; +} + +:local(.local-class-name) .global-after-local { + color: red; +} + +:local(.foo) { + &:local(.class) { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + :local(.bar) { + c_value: some-value; + } + + &:local(.baz) { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +:local(.local-class) { + color: white; +} + +:global(.global-class-other) { + color: red; +} + +:local(.class-with-composes) { + composes: + local-class, + global-class from global, + global-class-other from global, + local-my-shared-class from "./shared.css"; +} + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes local(local-keyframes) {} +@keyframes global(global-keyframes) {} +/** Deprecated syntax */ +@keyframes :local(local-keyframes-old-syntax) {} +@keyframes :global(local-keyframes-old-syntax) {} + +.foo { + animation-name: basic-keyframes, global(global-keyframes), local(local-keyframes); +} + +@property local(--progress) { + syntax: ""; + inherits: false; + initial-value: 25%; +} + +@keyframes local(progressAnimationLocal) { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(local(--progress)), + black var(local(--progress)) + ); + animation: local(progressAnimationLocal) 2.5s ease infinite; +} + +@scope (:local(.article-header)) to (:global(.class)) { + .article-footer { + border: 5px solid black; + } + :local(.class-1) { + color: red; + } + :global(.class-2) { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + local(--local-foo-bar), + global(--global-foo-bar), + /** Deprecated syntax */ + :local(--local-foo-bar), + :global(--global-foo-bar); +} + +.class { + background-color: + var(--foo-bar), + var(local(--local-foo-bar)), + var(global(--global-foo-bar)), + /** Deprecated syntax */ + var(:local(--local-foo-bar)), + var(:global(--global-foo-bar)), + var(--global-foo-bar from global), + var(--from-shared from "./shared.css"); +} + +/** Custom local value */ + +@unknown-rule local(unknown-at-rule) {} + +.class { + custom-name: local(unknown-at-rule); +} + +:global .class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: local(animation-name-test) global(animation-name-test) +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: "a" 100px "b" 1fr; +} + +.grid3 { + grid: [line-name1] "a" 100px [line-name2]; +} + +.grid4 { + grid: "a" 200px "b" min-content; +} + +.grid5 { + grid: "a" minmax(100px, max-content) "b" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + "a b ." + "a c d"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] "a a a" [header-bottom] + [main-top] "b b b" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + "hd hd hd hd hd hd hd hd hd" + "sd sd sd main main main main main main" + "ft ft ft ft ft ft ft ft ft"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} diff --git a/test/configCases/css/css-modules/style.module.css.invalid b/test/configCases/css/css-modules/style.module.css.invalid new file mode 100644 index 00000000000..953e362ee15 --- /dev/null +++ b/test/configCases/css/css-modules/style.module.css.invalid @@ -0,0 +1,3 @@ +.class { + color: teal; +} diff --git a/test/configCases/css/css-modules/style.module.my-css b/test/configCases/css/css-modules/style.module.my-css new file mode 100644 index 00000000000..4f4f0b7f873 --- /dev/null +++ b/test/configCases/css/css-modules/style.module.my-css @@ -0,0 +1,3 @@ +.myCssClass { + color: red; +} diff --git a/test/configCases/css/css-modules/test.config.js b/test/configCases/css/css-modules/test.config.js new file mode 100644 index 00000000000..b5c2d48ed08 --- /dev/null +++ b/test/configCases/css/css-modules/test.config.js @@ -0,0 +1,25 @@ +"use strict"; + +module.exports = { + findBundle(i) { + if (i === 6) { + return [`bundle${i}.js`]; + } + + if (i === 4 || i === 5) { + return [ + i === 4 ? `./use-style-global_js.bundle${i}.js` : `638.bundle${i}.js`, + `./bundle${i}.js` + ]; + } + + return [ + i === 1 + ? `./915.bundle${i}.js` + : i === 3 + ? `./762.bundle${i}.js` + : `./use-style_js.bundle${i}.js`, + `./bundle${i}.js` + ]; + } +}; diff --git a/test/configCases/css/css-modules/use-style-global.js b/test/configCases/css/css-modules/use-style-global.js new file mode 100644 index 00000000000..bc4f7c42eb4 --- /dev/null +++ b/test/configCases/css/css-modules/use-style-global.js @@ -0,0 +1,3 @@ +import * as style from "./style.module.css"; + +export default style; diff --git a/test/configCases/css/css-modules/use-style.js b/test/configCases/css/css-modules/use-style.js new file mode 100644 index 00000000000..2c6f87020d3 --- /dev/null +++ b/test/configCases/css/css-modules/use-style.js @@ -0,0 +1,64 @@ +import * as style from "./style.module.css"; +import { local1, local2, local3, local4, ident } from "./style.module.css"; +import { myCssClass } from "./style.module.my-css"; +import * as notACssModule from "./style.module.css.invalid"; +import { UsedClassName } from "./identifiers.module.css"; + +// To prevent analysis export +const isNotACSSModule = typeof notACssModule["c" + "lass"] === "undefined"; +const hasOwnProperty = (obj, p) => Object.hasOwnProperty.call(obj, p); + +export default { + global: style.global, + class: style.class, + local: `${local1} ${local2} ${local3} ${local4}`, + local2: `${style.local5} ${style.local6}`, + nested: `${style.nested1} ${style.nested2} ${style.nested3}`, + notWmultiParams: `${style.local7}`, + isWmultiParams: `${style.local8}`, + matchesWmultiParams: `${style.local9}`, + whereWmultiParams: `${style.local10}`, + hasWmultiParams: `${style.local11}`, + currentWmultiParams: `${style.local12}`, + pastWmultiParams: `${style.local13}`, + futureWmultiParams: `${style.local14}`, + mozAnyWmultiParams: `${style.local15}`, + webkitAnyWmultiParams: `${style.local16}`, + ident, + keyframes: style.localkeyframes, + keyframesUPPERCASE: style.localkeyframesUPPERCASE, + localkeyframes2UPPPERCASE: style.localkeyframes2UPPPERCASE, + animation: style.animation, + vars: `${style["local-color"]} ${style.vars} ${style["global-color"]} ${style.globalVars}`, + media: style.wideScreenClass, + mediaWithOperator: style.narrowScreenClass, + supports: style.displayGridInSupports, + supportsWithOperator: style.floatRightInNegativeSupports, + mediaInSupports: style.displayFlexInMediaInSupports, + supportsInMedia: style.displayFlexInSupportsInMedia, + displayFlexInSupportsInMediaUpperCase: style.displayFlexInSupportsInMediaUpperCase, + VARS: `${style["LOCAL-COLOR"]} ${style.VARS} ${style["GLOBAL-COLOR"]} ${style.globalVarsUpperCase}`, + inSupportScope: style.inSupportScope, + animationName: style.animationName, + mozAnimationName: style.mozAnimationName, + myColor: style['my-color'], + paddingSm: style['padding-sm'], + paddingLg: style['padding-lg'], + inLocalGlobalScope: style['in-local-global-scope'], + classLocalScope: style['class-local-scope'], + classInContainer: style['class-in-container'], + deepClassInContainer: style['deep-class-in-container'], + cssModuleWithCustomFileExtension: myCssClass, + notAValidCssModuleExtension: isNotACSSModule, + UsedClassName, + exportLocalVarsShouldCleanup: `${hasOwnProperty(notACssModule, 'local-color')} ${hasOwnProperty(notACssModule, "LOCAL-COLOR")}`, + exportName: style.exportName, + exportNameOtherNoSpaces: style.exportNameOtherNoSpaces, + exportNameOtherFromKeyword: style.exportNameOtherFromKeyword, + exportNameOtherFromKeywordWithFrom1: style.exportNameOtherFromKeywordWithFrom1, + exportNameOtherFromKeywordWithFrom2: style.exportNameOtherFromKeywordWithFrom2, + exportNameWeirdCharacters: style.exportNameWeirdCharacters, + textColor: style['text-color'], + classNameAfterBrokenKeyframes: style['class-name-after-broken-keyframes'], + __webpack_modules__: Object.keys(__webpack_modules__).length +}; diff --git a/test/configCases/css/css-modules/var-function-export.modules.css b/test/configCases/css/css-modules/var-function-export.modules.css new file mode 100644 index 00000000000..d71e43091bb --- /dev/null +++ b/test/configCases/css/css-modules/var-function-export.modules.css @@ -0,0 +1,12 @@ +:root { + --my-var-u1: red; + --my-var-u2: blue; + --not-override-class: black; + --1: red; + ----a: red; + --main-bg-color: red; +} + +.my-var-u1 { + color: red; +} diff --git a/test/configCases/css/css-modules/var-function.module.css b/test/configCases/css/css-modules/var-function.module.css new file mode 100644 index 00000000000..264ef1769ba --- /dev/null +++ b/test/configCases/css/css-modules/var-function.module.css @@ -0,0 +1,295 @@ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: "reserved"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: ""; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: ""; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from "./var-function-export.modules.css"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from "./var-function-export.modules.css")); +} + +.from-2 { + color: var(--my-var-u1 from "./var-function-export.modules.css", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from "./var-function-export.modules.css", var(--my-var-u2 from "./var-function-export.modules.css")); +} + +.from-4 { + color: var(--1 from "./var-function-export.modules.css"); +} + +.from-5 { + color: var(----a from "./var-function-export.modules.css"); +} + +.from-6 { + color: var(--main-bg-color from "./var-function-export.modules.css"); +} + +.mixed { + color: var(--my-var-u1 from "./var-function-export.modules.css", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from "./var-function-export.modules.css") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: "ℹ️"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} diff --git a/test/configCases/css/css-modules/warnings.js b/test/configCases/css/css-modules/warnings.js new file mode 100644 index 00000000000..5bdaf6e6f36 --- /dev/null +++ b/test/configCases/css/css-modules/warnings.js @@ -0,0 +1,96 @@ +"use strict"; + +module.exports = [ + [/export 'global' \(imported as 'style'\) was not found/], + [/export 'nested2' \(imported as 'style'\) was not found/], + [/export 'global-color' \(imported as 'style'\) was not found/], + [/export 'GLOBAL-COLOR' \(imported as 'style'\) was not found/], + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/], + + [/export 'global' \(imported as 'style'\) was not found/], + [/export 'nested2' \(imported as 'style'\) was not found/], + [/export 'global-color' \(imported as 'style'\) was not found/], + [/export 'GLOBAL-COLOR' \(imported as 'style'\) was not found/], + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/], + + [/export 'global' \(imported as 'style'\) was not found/], + [/export 'nested2' \(imported as 'style'\) was not found/], + [/export 'global-color' \(imported as 'style'\) was not found/], + [/export 'GLOBAL-COLOR' \(imported as 'style'\) was not found/], + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/], + + [/export 'global' \(imported as 'style'\) was not found/], + [/export 'nested2' \(imported as 'style'\) was not found/], + [/export 'global-color' \(imported as 'style'\) was not found/], + [/export 'GLOBAL-COLOR' \(imported as 'style'\) was not found/], + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/], + + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/], + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/], + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + + [/Missing whitespace after ':global' in ':global\.class-no-space \{/], + [ + /Missing whitespace after ':global' in ':global\/\*\* test \*\*\/\.class \{/ + ], + [/Missing whitespace after ':local' in ':local\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\.class \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/#hash \{'/], + [/Missing whitespace after ':local' in ':local\/\*\* test \*\*\/\{/], + [/Broken '@value' at-rule: @value;'/], + [/Broken '@value' at-rule: @value test;'/] +]; diff --git a/test/configCases/css/css-modules/webpack.config.js b/test/configCases/css/css-modules/webpack.config.js new file mode 100644 index 00000000000..f34b7172504 --- /dev/null +++ b/test/configCases/css/css-modules/webpack.config.js @@ -0,0 +1,191 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +const base = { + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.my-css$/i, + type: "css/auto" + }, + { + test: /\.invalid$/i, + type: "css/auto" + } + ] + } +}; + +// target: ["web", "node"] +// output module + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + ...base, + name: "web-development", + target: "web", + mode: "development", + output: { + uniqueName: "my-app" + }, + node: { + __dirname: false, + __filename: false + } + }, + { + ...base, + name: "web-production", + target: "web", + mode: "production", + output: { + uniqueName: "my-app" + }, + node: { + __dirname: false, + __filename: false + }, + plugins: [ + new webpack.ids.DeterministicModuleIdsPlugin({ + maxLength: 3, + failOnConflict: true, + fixedLength: true, + test: (m) => m.type.startsWith("css") + }), + new webpack.experiments.ids.SyncModuleIdsPlugin({ + test: (m) => m.type.startsWith("css"), + path: path.resolve(testPath, "module-ids.json"), + mode: "create" + }) + ] + }, + { + ...base, + dependencies: ["web-development"], + name: "node-development", + target: "node", + mode: "development", + output: { + uniqueName: "my-app" + } + }, + { + ...base, + dependencies: ["web-production"], + name: "node-production", + target: "node", + mode: "production", + plugins: [ + new webpack.ids.DeterministicModuleIdsPlugin({ + maxLength: 3, + failOnConflict: true, + fixedLength: true, + test: (m) => m.type.startsWith("css") + }), + new webpack.experiments.ids.SyncModuleIdsPlugin({ + test: (m) => m.type.startsWith("css"), + path: path.resolve(testPath, "module-ids.json"), + mode: "read" + }) + ] + }, + // CSS modules `css/global` + { + entry: "./index-global.js", + name: "web-development-global", + target: "web", + mode: "development", + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.css$/i, + type: "css/global" + }, + { + test: /\.my-css$/i, + type: "css/global" + }, + { + test: /\.invalid$/i, + type: "css/global" + } + ] + }, + output: { + uniqueName: "my-app" + }, + node: { + __dirname: false, + __filename: false + } + }, + { + entry: "./index-global.js", + name: "web-production-global", + target: "web", + mode: "production", + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.css$/i, + type: "css/global" + }, + { + test: /\.my-css$/i, + type: "css/global" + }, + { + test: /\.invalid$/i, + type: "css/global" + } + ] + }, + output: { + uniqueName: "my-app" + }, + node: { + __dirname: false, + __filename: false + } + }, + // CSS modules options + { + ...base, + entry: "./index-options.js", + name: "web-development", + target: "web", + mode: "development", + output: { + uniqueName: "my-app" + }, + module: { + parser: { + "css/auto": { + animation: false, + customIdents: false, + dashedIdents: false, + container: false, + function: false, + grid: false + } + } + }, + node: { + __dirname: false, + __filename: false + } + } +]; diff --git a/test/configCases/css/css-order-concatenate-modules/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-order-concatenate-modules/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..3c12f3c73fc --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-order-concatenate-modules exported tests keep consistent css order 1`] = `".a { color: red;}.b{ color: green;}.c{ color: black;}"`; diff --git a/test/configCases/css/css-order-concatenate-modules/__snapshots__/ConfigTest.snap b/test/configCases/css/css-order-concatenate-modules/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..7b9b0c67065 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/__snapshots__/ConfigTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-order-concatenate-modules exported tests keep consistent css order 1`] = `".a { color: red;}.b{ color: green;}.c{ color: black;}"`; diff --git a/test/configCases/css/css-order-concatenate-modules/index.js b/test/configCases/css/css-order-concatenate-modules/index.js new file mode 100644 index 00000000000..faf7574346a --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/index.js @@ -0,0 +1,15 @@ +import { c, b, a } from "dep"; + +c() +b() +a() + +it("keep consistent css order", function() { + const fs = __non_webpack_require__("fs"); + let source = fs.readFileSync(__dirname + "/main.css", "utf-8"); + expect(removeComments(source)).toMatchSnapshot() +}); + +function removeComments(source) { + return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\n/g, ""); +} diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/a.css b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/a.css new file mode 100644 index 00000000000..04af14f0c01 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/a.css @@ -0,0 +1,3 @@ +.a { + color: red; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/a.js b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/a.js new file mode 100644 index 00000000000..de7acb49ee7 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/a.js @@ -0,0 +1,2 @@ +import "./a.css" +export function a() {} \ No newline at end of file diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/b.css b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/b.css new file mode 100644 index 00000000000..43c4cc6d378 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/b.css @@ -0,0 +1,3 @@ +.b{ + color: green; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/b.js b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/b.js new file mode 100644 index 00000000000..82aff859974 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/b.js @@ -0,0 +1,2 @@ +import "./b.css" +export function b() {} \ No newline at end of file diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/c.css b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/c.css new file mode 100644 index 00000000000..8c7886af387 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/c.css @@ -0,0 +1,3 @@ +.c{ + color: black; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/c.js b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/c.js new file mode 100644 index 00000000000..0813f955fdd --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/c.js @@ -0,0 +1,2 @@ +import "./c.css" +export function c() {} \ No newline at end of file diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/index.js b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/index.js new file mode 100644 index 00000000000..6fc01ace2a8 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/index.js @@ -0,0 +1,3 @@ +export * from "./a.js" +export * from "./b.js" +export * from "./c.js" diff --git a/test/configCases/css/css-order-concatenate-modules/node_modules/dep/package.json b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/package.json new file mode 100644 index 00000000000..644d902d8e0 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/node_modules/dep/package.json @@ -0,0 +1,6 @@ +{ + "name": "dep", + "version": "1.0.0", + "type": "module", + "sideEffects": false +} diff --git a/test/configCases/css/css-order-concatenate-modules/package.json b/test/configCases/css/css-order-concatenate-modules/package.json new file mode 100644 index 00000000000..f9f7ed01bb1 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/package.json @@ -0,0 +1,8 @@ +{ + "name": "css-order", + "version": "1.0.0", + "sideEffects": false, + "devDependencies": { + "mini-css-extract-plugin": "^2.9.0" + } +} diff --git a/test/configCases/css/css-order-concatenate-modules/webpack.config.js b/test/configCases/css/css-order-concatenate-modules/webpack.config.js new file mode 100644 index 00000000000..5decd0f98e5 --- /dev/null +++ b/test/configCases/css/css-order-concatenate-modules/webpack.config.js @@ -0,0 +1,46 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + optimization: { + concatenateModules: true + }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader + }, + { + loader: "css-loader", + options: { + esModule: true, + modules: { + namedExport: false, + localIdentName: "[name]" + } + } + } + ], + sideEffects: true + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css" + }) + ], + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/css/css-order-reexport/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-order-reexport/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..11cd25b5d9c --- /dev/null +++ b/test/configCases/css/css-order-reexport/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-order-reexport exported tests keep consistent css order 1`] = `".dependency2::before { content: \\"dependency2\\";}.dependency::before { content: \\"dependency\\";}"`; diff --git a/test/configCases/css/css-order-reexport/__snapshots__/ConfigTest.snap b/test/configCases/css/css-order-reexport/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..685e1bc5890 --- /dev/null +++ b/test/configCases/css/css-order-reexport/__snapshots__/ConfigTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-order-reexport exported tests keep consistent css order 1`] = `".dependency2::before { content: \\"dependency2\\";}.dependency::before { content: \\"dependency\\";}"`; diff --git a/test/configCases/css/css-order-reexport/component.js b/test/configCases/css/css-order-reexport/component.js new file mode 100644 index 00000000000..f1d90203361 --- /dev/null +++ b/test/configCases/css/css-order-reexport/component.js @@ -0,0 +1,5 @@ +export { dependency, dependency2 } from "./dependency"; + +export function component(...args) { + return args; +} diff --git a/test/configCases/css/css-order-reexport/dependency/dependency.css b/test/configCases/css/css-order-reexport/dependency/dependency.css new file mode 100644 index 00000000000..776c3714d84 --- /dev/null +++ b/test/configCases/css/css-order-reexport/dependency/dependency.css @@ -0,0 +1,3 @@ +.dependency::before { + content: "dependency"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/dependency/dependency.js b/test/configCases/css/css-order-reexport/dependency/dependency.js new file mode 100644 index 00000000000..66dbef95df9 --- /dev/null +++ b/test/configCases/css/css-order-reexport/dependency/dependency.js @@ -0,0 +1,5 @@ +import styles from "./dependency.css"; + +export function dependency() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/dependency/dependency2.css b/test/configCases/css/css-order-reexport/dependency/dependency2.css new file mode 100644 index 00000000000..f882c894fdd --- /dev/null +++ b/test/configCases/css/css-order-reexport/dependency/dependency2.css @@ -0,0 +1,3 @@ +.dependency2::before { + content: "dependency2"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/dependency/dependency2.js b/test/configCases/css/css-order-reexport/dependency/dependency2.js new file mode 100644 index 00000000000..f59b231020f --- /dev/null +++ b/test/configCases/css/css-order-reexport/dependency/dependency2.js @@ -0,0 +1,5 @@ +import styles from "./dependency2.css"; + +export function dependency2() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/dependency/index.js b/test/configCases/css/css-order-reexport/dependency/index.js new file mode 100644 index 00000000000..035ddd4d727 --- /dev/null +++ b/test/configCases/css/css-order-reexport/dependency/index.js @@ -0,0 +1,2 @@ +export * from "./dependency2"; +export * from "./dependency"; diff --git a/test/configCases/css/css-order-reexport/dependency/package.json b/test/configCases/css/css-order-reexport/dependency/package.json new file mode 100644 index 00000000000..ea2fc66bebe --- /dev/null +++ b/test/configCases/css/css-order-reexport/dependency/package.json @@ -0,0 +1,7 @@ +{ + "name": "dependency", + "version": "1.0.0", + "private": true, + "sideEffects": false, + "main": "index.js" +} \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/index.js b/test/configCases/css/css-order-reexport/index.js new file mode 100644 index 00000000000..6901b689ea5 --- /dev/null +++ b/test/configCases/css/css-order-reexport/index.js @@ -0,0 +1,14 @@ +import { component, dependency, dependency2 } from "./component"; +component(dependency, dependency2); + +// https://github.com/webpack/webpack/issues/18961 +// https://github.com/jantimon/reproduction-webpack-css-order +it("keep consistent css order", function() { + const fs = __non_webpack_require__("fs"); + let source = fs.readFileSync(__dirname + "/main.css", "utf-8"); + expect(removeComments(source)).toMatchSnapshot() +}); + +function removeComments(source) { + return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\n/g, ""); +} \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/package.json b/test/configCases/css/css-order-reexport/package.json new file mode 100644 index 00000000000..0afb3f14972 --- /dev/null +++ b/test/configCases/css/css-order-reexport/package.json @@ -0,0 +1,8 @@ +{ + "name": "css-order2", + "version": "1.0.0", + "sideEffects": false, + "devDependencies": { + "mini-css-extract-plugin": "^2.9.0" + } + } \ No newline at end of file diff --git a/test/configCases/css/css-order-reexport/webpack.config.js b/test/configCases/css/css-order-reexport/webpack.config.js new file mode 100644 index 00000000000..2d328bea81c --- /dev/null +++ b/test/configCases/css/css-order-reexport/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + optimization: { + concatenateModules: false + }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader + }, + { + loader: "css-loader", + options: { + esModule: true, + modules: { + namedExport: false, + localIdentName: "[name]" + } + } + } + ] + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css" + }) + ], + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/css/css-order/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-order/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..1f289a23c1a --- /dev/null +++ b/test/configCases/css/css-order/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-order exported tests keep consistent css order 1`] = `".button-module { padding: 8px 16px; background-color: #007bff; color: white; border: none; border-radius: 4px;}.teaser-module { padding: 20px; border: 1px solid #ddd; border-radius: 8px; margin: 16px;}.teaser-module { background-color: orange;}"`; diff --git a/test/configCases/css/css-order/__snapshots__/ConfigTest.snap b/test/configCases/css/css-order/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..13f0ea561f8 --- /dev/null +++ b/test/configCases/css/css-order/__snapshots__/ConfigTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-order exported tests keep consistent css order 1`] = `".button-module { padding: 8px 16px; background-color: #007bff; color: white; border: none; border-radius: 4px;}.teaser-module { padding: 20px; border: 1px solid #ddd; border-radius: 8px; margin: 16px;}.teaser-module { background-color: orange;}"`; diff --git a/test/configCases/css/css-order/index.js b/test/configCases/css/css-order/index.js new file mode 100644 index 00000000000..15b3c646d11 --- /dev/null +++ b/test/configCases/css/css-order/index.js @@ -0,0 +1,15 @@ +import { Teaser } from "./liba"; + +document.body.innerHTML = Teaser(); + +// https://github.com/webpack/webpack/issues/18961 +// https://github.com/jantimon/reproduction-webpack-css-order +it("keep consistent css order", function() { + const fs = __non_webpack_require__("fs"); + let source = fs.readFileSync(__dirname + "/main.css", "utf-8"); + expect(removeComments(source)).toMatchSnapshot() +}); + +function removeComments(source) { + return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\n/g, ""); +} \ No newline at end of file diff --git a/test/configCases/css/css-order/liba/common.js b/test/configCases/css/css-order/liba/common.js new file mode 100644 index 00000000000..a172be10bc0 --- /dev/null +++ b/test/configCases/css/css-order/liba/common.js @@ -0,0 +1,13 @@ +import { CarouselButton } from '../libb'; +import styles from './teaser.module.css'; + +export const Teaser = () => { + return ` +

+

Teaser Component

+ ${CarouselButton({ + className: styles.teaserCarouselButton, + })} +
+ `; +}; diff --git a/test/configCases/css/css-order/liba/index.js b/test/configCases/css/css-order/liba/index.js new file mode 100644 index 00000000000..d0b93236650 --- /dev/null +++ b/test/configCases/css/css-order/liba/index.js @@ -0,0 +1 @@ +export * from './common'; diff --git a/test/configCases/css/css-order/liba/teaser.module.css b/test/configCases/css/css-order/liba/teaser.module.css new file mode 100644 index 00000000000..71ec42b7a69 --- /dev/null +++ b/test/configCases/css/css-order/liba/teaser.module.css @@ -0,0 +1,10 @@ +.teaser { + padding: 20px; + border: 1px solid #ddd; + border-radius: 8px; + margin: 16px; +} + +.teaserCarouselButton { + background-color: orange; +} \ No newline at end of file diff --git a/test/configCases/css/css-order/libb/button.module.css b/test/configCases/css/css-order/libb/button.module.css new file mode 100644 index 00000000000..0aa9bb3f3f3 --- /dev/null +++ b/test/configCases/css/css-order/libb/button.module.css @@ -0,0 +1,7 @@ +.button { + padding: 8px 16px; + background-color: #007bff; + color: white; + border: none; + border-radius: 4px; +} diff --git a/test/configCases/css/css-order/libb/common.js b/test/configCases/css/css-order/libb/common.js new file mode 100644 index 00000000000..170b4cebde5 --- /dev/null +++ b/test/configCases/css/css-order/libb/common.js @@ -0,0 +1,9 @@ +import styles from './button.module.css'; + +export const CarouselButton = ({ + className = '', +}) => { + return ``; +}; diff --git a/test/configCases/css/css-order/libb/index.js b/test/configCases/css/css-order/libb/index.js new file mode 100644 index 00000000000..d0b93236650 --- /dev/null +++ b/test/configCases/css/css-order/libb/index.js @@ -0,0 +1 @@ +export * from './common'; diff --git a/test/configCases/css/css-order/package.json b/test/configCases/css/css-order/package.json new file mode 100644 index 00000000000..f9f7ed01bb1 --- /dev/null +++ b/test/configCases/css/css-order/package.json @@ -0,0 +1,8 @@ +{ + "name": "css-order", + "version": "1.0.0", + "sideEffects": false, + "devDependencies": { + "mini-css-extract-plugin": "^2.9.0" + } +} diff --git a/test/configCases/css/css-order/webpack.config.js b/test/configCases/css/css-order/webpack.config.js new file mode 100644 index 00000000000..396be2a51c5 --- /dev/null +++ b/test/configCases/css/css-order/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + optimization: { + concatenateModules: false + }, + module: { + rules: [ + { + test: /\.module\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader + }, + { + loader: "css-loader", + options: { + esModule: true, + modules: { + namedExport: false, + localIdentName: "[name]" + } + } + } + ] + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css" + }) + ], + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/css/css-order2/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-order2/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..c634a05c76a --- /dev/null +++ b/test/configCases/css/css-order2/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-order2 exported tests keep consistent css order 1`] = `".dependency2::before { content: \\"dependency2\\";}.dependency::before { content: \\"dependency\\";}"`; diff --git a/test/configCases/css/css-order2/__snapshots__/ConfigTest.snap b/test/configCases/css/css-order2/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..496c1ba06ca --- /dev/null +++ b/test/configCases/css/css-order2/__snapshots__/ConfigTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-order2 exported tests keep consistent css order 1`] = `".dependency2::before { content: \\"dependency2\\";}.dependency::before { content: \\"dependency\\";}"`; diff --git a/test/configCases/css/css-order2/component.js b/test/configCases/css/css-order2/component.js new file mode 100644 index 00000000000..6367b4d08c1 --- /dev/null +++ b/test/configCases/css/css-order2/component.js @@ -0,0 +1,6 @@ +import { dependency, dependency2 } from "./dependency"; + +export function component() { + dependency(); + dependency2(); +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/dependency/dependency.css b/test/configCases/css/css-order2/dependency/dependency.css new file mode 100644 index 00000000000..776c3714d84 --- /dev/null +++ b/test/configCases/css/css-order2/dependency/dependency.css @@ -0,0 +1,3 @@ +.dependency::before { + content: "dependency"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/dependency/dependency.js b/test/configCases/css/css-order2/dependency/dependency.js new file mode 100644 index 00000000000..66dbef95df9 --- /dev/null +++ b/test/configCases/css/css-order2/dependency/dependency.js @@ -0,0 +1,5 @@ +import styles from "./dependency.css"; + +export function dependency() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/dependency/dependency2.css b/test/configCases/css/css-order2/dependency/dependency2.css new file mode 100644 index 00000000000..f882c894fdd --- /dev/null +++ b/test/configCases/css/css-order2/dependency/dependency2.css @@ -0,0 +1,3 @@ +.dependency2::before { + content: "dependency2"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/dependency/dependency2.js b/test/configCases/css/css-order2/dependency/dependency2.js new file mode 100644 index 00000000000..f59b231020f --- /dev/null +++ b/test/configCases/css/css-order2/dependency/dependency2.js @@ -0,0 +1,5 @@ +import styles from "./dependency2.css"; + +export function dependency2() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/dependency/index.js b/test/configCases/css/css-order2/dependency/index.js new file mode 100644 index 00000000000..035ddd4d727 --- /dev/null +++ b/test/configCases/css/css-order2/dependency/index.js @@ -0,0 +1,2 @@ +export * from "./dependency2"; +export * from "./dependency"; diff --git a/test/configCases/css/css-order2/dependency/package.json b/test/configCases/css/css-order2/dependency/package.json new file mode 100644 index 00000000000..ea2fc66bebe --- /dev/null +++ b/test/configCases/css/css-order2/dependency/package.json @@ -0,0 +1,7 @@ +{ + "name": "dependency", + "version": "1.0.0", + "private": true, + "sideEffects": false, + "main": "index.js" +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/index.js b/test/configCases/css/css-order2/index.js new file mode 100644 index 00000000000..6fd0e91c385 --- /dev/null +++ b/test/configCases/css/css-order2/index.js @@ -0,0 +1,14 @@ +const { component } = require("./component"); +component() + +// https://github.com/webpack/webpack/issues/18961 +// https://github.com/jantimon/reproduction-webpack-css-order +it("keep consistent css order", function() { + const fs = __non_webpack_require__("fs"); + let source = fs.readFileSync(__dirname + "/main.css", "utf-8"); + expect(removeComments(source)).toMatchSnapshot() +}); + +function removeComments(source) { + return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\n/g, ""); +} \ No newline at end of file diff --git a/test/configCases/css/css-order2/package.json b/test/configCases/css/css-order2/package.json new file mode 100644 index 00000000000..0afb3f14972 --- /dev/null +++ b/test/configCases/css/css-order2/package.json @@ -0,0 +1,8 @@ +{ + "name": "css-order2", + "version": "1.0.0", + "sideEffects": false, + "devDependencies": { + "mini-css-extract-plugin": "^2.9.0" + } + } \ No newline at end of file diff --git a/test/configCases/css/css-order2/webpack.config.js b/test/configCases/css/css-order2/webpack.config.js new file mode 100644 index 00000000000..c128b4f57d2 --- /dev/null +++ b/test/configCases/css/css-order2/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + optimization: { + concatenateModules: false + }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader + }, + { + loader: "css-loader", + options: { + esModule: true, + modules: { + namedExport: false, + localIdentName: "[name]" + } + } + } + ] + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css" + }) + ], + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/css/css-order3/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/css-order3/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..789a383fc96 --- /dev/null +++ b/test/configCases/css/css-order3/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css css-order3 exported tests keep consistent css order 1`] = `".dependency3::before { content: \\"dependency3\\";}.dependency2::before { content: \\"dependency2\\";}.dependency::before { content: \\"dependency\\";}"`; diff --git a/test/configCases/css/css-order3/__snapshots__/ConfigTest.snap b/test/configCases/css/css-order3/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..79351feff07 --- /dev/null +++ b/test/configCases/css/css-order3/__snapshots__/ConfigTest.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css css-order3 exported tests keep consistent css order 1`] = `".dependency3::before { content: \\"dependency3\\";}.dependency2::before { content: \\"dependency2\\";}.dependency::before { content: \\"dependency\\";}"`; diff --git a/test/configCases/css/css-order3/component.js b/test/configCases/css/css-order3/component.js new file mode 100644 index 00000000000..05fbc35874b --- /dev/null +++ b/test/configCases/css/css-order3/component.js @@ -0,0 +1,8 @@ +const { dependency3 } = require("./dependency/dependency3"); +import { dependency, dependency2 } from "./dependency"; + +export function component() { + dependency(); + dependency2(); + dependency3(); +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/dependency.css b/test/configCases/css/css-order3/dependency/dependency.css new file mode 100644 index 00000000000..776c3714d84 --- /dev/null +++ b/test/configCases/css/css-order3/dependency/dependency.css @@ -0,0 +1,3 @@ +.dependency::before { + content: "dependency"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/dependency.js b/test/configCases/css/css-order3/dependency/dependency.js new file mode 100644 index 00000000000..66dbef95df9 --- /dev/null +++ b/test/configCases/css/css-order3/dependency/dependency.js @@ -0,0 +1,5 @@ +import styles from "./dependency.css"; + +export function dependency() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/dependency2.css b/test/configCases/css/css-order3/dependency/dependency2.css new file mode 100644 index 00000000000..f882c894fdd --- /dev/null +++ b/test/configCases/css/css-order3/dependency/dependency2.css @@ -0,0 +1,3 @@ +.dependency2::before { + content: "dependency2"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/dependency2.js b/test/configCases/css/css-order3/dependency/dependency2.js new file mode 100644 index 00000000000..f59b231020f --- /dev/null +++ b/test/configCases/css/css-order3/dependency/dependency2.js @@ -0,0 +1,5 @@ +import styles from "./dependency2.css"; + +export function dependency2() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/dependency3.css b/test/configCases/css/css-order3/dependency/dependency3.css new file mode 100644 index 00000000000..943e21d23af --- /dev/null +++ b/test/configCases/css/css-order3/dependency/dependency3.css @@ -0,0 +1,3 @@ +.dependency3::before { + content: "dependency3"; +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/dependency3.js b/test/configCases/css/css-order3/dependency/dependency3.js new file mode 100644 index 00000000000..5a7124ffa4e --- /dev/null +++ b/test/configCases/css/css-order3/dependency/dependency3.js @@ -0,0 +1,5 @@ +import styles from "./dependency3.css"; + +export function dependency3() { + return styles !== undefined; +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/dependency/index.js b/test/configCases/css/css-order3/dependency/index.js new file mode 100644 index 00000000000..035ddd4d727 --- /dev/null +++ b/test/configCases/css/css-order3/dependency/index.js @@ -0,0 +1,2 @@ +export * from "./dependency2"; +export * from "./dependency"; diff --git a/test/configCases/css/css-order3/dependency/package.json b/test/configCases/css/css-order3/dependency/package.json new file mode 100644 index 00000000000..ea2fc66bebe --- /dev/null +++ b/test/configCases/css/css-order3/dependency/package.json @@ -0,0 +1,7 @@ +{ + "name": "dependency", + "version": "1.0.0", + "private": true, + "sideEffects": false, + "main": "index.js" +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/index.js b/test/configCases/css/css-order3/index.js new file mode 100644 index 00000000000..6fd0e91c385 --- /dev/null +++ b/test/configCases/css/css-order3/index.js @@ -0,0 +1,14 @@ +const { component } = require("./component"); +component() + +// https://github.com/webpack/webpack/issues/18961 +// https://github.com/jantimon/reproduction-webpack-css-order +it("keep consistent css order", function() { + const fs = __non_webpack_require__("fs"); + let source = fs.readFileSync(__dirname + "/main.css", "utf-8"); + expect(removeComments(source)).toMatchSnapshot() +}); + +function removeComments(source) { + return source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\n/g, ""); +} \ No newline at end of file diff --git a/test/configCases/css/css-order3/package.json b/test/configCases/css/css-order3/package.json new file mode 100644 index 00000000000..0afb3f14972 --- /dev/null +++ b/test/configCases/css/css-order3/package.json @@ -0,0 +1,8 @@ +{ + "name": "css-order2", + "version": "1.0.0", + "sideEffects": false, + "devDependencies": { + "mini-css-extract-plugin": "^2.9.0" + } + } \ No newline at end of file diff --git a/test/configCases/css/css-order3/webpack.config.js b/test/configCases/css/css-order3/webpack.config.js new file mode 100644 index 00000000000..c128b4f57d2 --- /dev/null +++ b/test/configCases/css/css-order3/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + target: "web", + entry: "./index.js", + mode: "development", + optimization: { + concatenateModules: false + }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader + }, + { + loader: "css-loader", + options: { + esModule: true, + modules: { + namedExport: false, + localIdentName: "[name]" + } + } + } + ] + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css" + }) + ], + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/css/css-types/index.js b/test/configCases/css/css-types/index.js new file mode 100644 index 00000000000..1ae0139b3fd --- /dev/null +++ b/test/configCases/css/css-types/index.js @@ -0,0 +1,46 @@ +import './style.css'; +import * as style1 from './style1.local.css' +import * as style2 from './style2.global.css' +import './style3.auto.css'; +import * as style3 from './style4.modules.css' + +it("should not parse css modules in type: css", () => { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("color")).toBe(" red"); + const links = document.getElementsByTagName("link"); + const css = links[1].sheet.css; + + expect(css).toMatch(/\:local\(\.foo\)/); + expect(css).toMatch(/\:global\(\.bar\)/); +}); + +it("should compile type: css/module", () => { + const element = document.createElement(".class2"); + const style = getComputedStyle(element); + expect(style.getPropertyValue("background")).toBe(" green"); + expect(style1.class1).toBe('style1_local_css-class1'); +}); + +it("should compile type: css/global", (done) => { + const element = document.createElement(".class3"); + const style = getComputedStyle(element); + expect(style.getPropertyValue("color")).toBe(" red"); + expect(style2.class4).toBe('style2_global_css-class4'); + done() +}); + +it("should not parse css modules in type: css/auto", () => { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + const links = document.getElementsByTagName("link"); + const css = links[1].sheet.css; + expect(css).toMatch(/\:local\(\.baz\)/); + expect(css).toMatch(/\:global\(\.qux\)/); +}); + +it("should parse css modules in type: css/auto", () => { + const element = document.createElement(".class3"); + const style = getComputedStyle(element); + expect(style.getPropertyValue("color")).toBe(" red"); + expect(style3.class3).toBe('style4_modules_css-class3'); +}); diff --git a/test/configCases/css/css-types/style.css b/test/configCases/css/css-types/style.css new file mode 100644 index 00000000000..6aa7ac92519 --- /dev/null +++ b/test/configCases/css/css-types/style.css @@ -0,0 +1,11 @@ +body { + color: red; +} + +:local(.foo) { + color: red; +} + +:global(.bar) { + color: green; +} \ No newline at end of file diff --git a/test/configCases/css/css-types/style1.local.css b/test/configCases/css/css-types/style1.local.css new file mode 100644 index 00000000000..6f5c6417134 --- /dev/null +++ b/test/configCases/css/css-types/style1.local.css @@ -0,0 +1,6 @@ +.class1 { + color: red; +} +:global(.class2) { + background: green; +} \ No newline at end of file diff --git a/test/configCases/css/css-types/style2.global.css b/test/configCases/css/css-types/style2.global.css new file mode 100644 index 00000000000..6f2aceffff5 --- /dev/null +++ b/test/configCases/css/css-types/style2.global.css @@ -0,0 +1,6 @@ +.class3 { + color: red; +} +:local(.class4) { + background: green; +} \ No newline at end of file diff --git a/test/configCases/css/css-types/style3.auto.css b/test/configCases/css/css-types/style3.auto.css new file mode 100644 index 00000000000..44b4ea515d8 --- /dev/null +++ b/test/configCases/css/css-types/style3.auto.css @@ -0,0 +1,11 @@ +body { + background: red; +} + +:local(.baz) { + color: red; +} + +:global(.qux) { + color: green; +} diff --git a/test/configCases/css/css-types/style4.modules.css b/test/configCases/css/css-types/style4.modules.css new file mode 100644 index 00000000000..b245d11b660 --- /dev/null +++ b/test/configCases/css/css-types/style4.modules.css @@ -0,0 +1,6 @@ +.class3 { + color: red; +} +:global(.class4) { + background: green; +} diff --git a/test/configCases/css/css-types/test.config.js b/test/configCases/css/css-types/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/css-types/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/css-types/webpack.config.js b/test/configCases/css/css-types/webpack.config.js new file mode 100644 index 00000000000..4157141bf55 --- /dev/null +++ b/test/configCases/css/css-types/webpack.config.js @@ -0,0 +1,34 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + module: { + rules: [ + { + test: /\.css$/i, + type: "css" + }, + { + test: /\.local\.css$/i, + type: "css/module" + }, + { + test: /\.global\.css$/i, + type: "css/global" + }, + { + test: /\.auto\.css$/i, + type: "css/auto" + }, + { + test: /\.modules\.css$/i, + type: "css/auto" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/default-exports-parser-options/index.js b/test/configCases/css/default-exports-parser-options/index.js new file mode 100644 index 00000000000..94633a09f4e --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/index.js @@ -0,0 +1,22 @@ +import * as style1 from "./style.module.css?namespace"; +import style2 from "./style.module.css?default"; +import { foo } from "./style.module.css?named"; + +it("should able to import with default and named exports", () => { + expect(style1.default).toEqual(nsObj({ foo: 'style_module_css_namespace-foo' })); + // Named export, warn + expect(style1.foo).toEqual("style_module_css_namespace-foo"); + expect(style1.default.foo).toEqual("style_module_css_namespace-foo"); + expect(style2).toEqual(nsObj({ foo: 'style_module_css_default-foo' })); + // Named export, warn + expect(foo).toEqual("style_module_css_named-foo"); +}); + +it("should able to import with different default and namex dynamic export", (done) => { + import("./style.module.css?namespace").then((style1) => { + expect(style1.default).toEqual(nsObj({ foo: 'style_module_css_namespace-foo' })); + expect(style1.foo).toEqual('style_module_css_namespace-foo'); + + done(); + }, done) +}); diff --git a/test/configCases/css/default-exports-parser-options/style.module.css b/test/configCases/css/default-exports-parser-options/style.module.css new file mode 100644 index 00000000000..cedf0a6d1f1 --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/style.module.css @@ -0,0 +1,3 @@ +.foo { + color: red; +} diff --git a/test/configCases/css/default-exports-parser-options/warnings.js b/test/configCases/css/default-exports-parser-options/warnings.js new file mode 100644 index 00000000000..bf1c9455540 --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + /Should not import the named export 'foo'/, + /Should not import the named export 'foo'/ +]; diff --git a/test/configCases/css/default-exports-parser-options/webpack.config.js b/test/configCases/css/default-exports-parser-options/webpack.config.js new file mode 100644 index 00000000000..8d39c5a9ff8 --- /dev/null +++ b/test/configCases/css/default-exports-parser-options/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + devtool: false, + module: { + rules: [ + { + test: /\.css/, + parser: { + namedExports: false + }, + type: "css/module" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/escape-unescape/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/escape-unescape/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..1bc8af43724 --- /dev/null +++ b/test/configCases/css/escape-unescape/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,405 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css escape-unescape exported tests should work with URLs in CSS: classes 1`] = ` +Object { + "#": "style_modules_css-#", + "##": "style_modules_css-##", + "#.#.#": "style_modules_css-#.#.#", + "#fake-id": "style_modules_css-#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "style_modules_css-++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "style_modules_css--a-b-c-", + "-a0-34a___f": "style_modules_css--a0-34a___f", + ".": "style_modules_css-.", + "123": "style_modules_css-123", + "1a2b3c": "style_modules_css-1a2b3c", + ":)": "style_modules_css-:)", + ":\`(": "style_modules_css-:\`(", + ":hover": "style_modules_css-:hover", + ":hover:focus:active": "style_modules_css-:hover:focus:active", + "<><<<>><>": "style_modules_css-<><<<>><>", + "

": "style_modules_css-

", + "?": "style_modules_css-?", + "@": "style_modules_css-@", + "B&W?": "style_modules_css-B&W?", + "[attr=value]": "style_modules_css-[attr=value]", + "_": "style_modules_css-_", + "_test": "style_modules_css-_test", + "class": "style_modules_css-class", + "className": "style_modules_css-className", + "f!o!o": "style_modules_css-f!o!o", + "f'o'o": "style_modules_css-f'o'o", + "f*o*o": "style_modules_css-f*o*o", + "f+o+o": "style_modules_css-f+o+o", + "f/o/o": "style_modules_css-f/o/o", + "f@oo": "style_modules_css-f@oo", + "f\\\\o\\\\o": "style_modules_css-f\\\\o\\\\o", + "foo.bar": "style_modules_css-foo.bar", + "foo/bar": "style_modules_css-foo/bar", + "foo/bar/baz": "style_modules_css-foo/bar/baz", + "foo\\\\bar": "style_modules_css-foo\\\\bar", + "foo\\\\bar\\\\baz": "style_modules_css-foo\\\\bar\\\\baz", + "f~o~o": "style_modules_css-f~o~o", + "m_x_@": "style_modules_css-m_x_@", + "main-bg-color": "--style_modules_css-main-bg-color", + "main-bg-color-@2": "--style_modules_css-main-bg-color-@2", + "someId": "style_modules_css-someId", + "subClass": "style_modules_css-subClass", + "test": "style_modules_css-test", + "{}": "style_modules_css-{}", + "©": "style_modules_css-©", + "“‘’”": "style_modules_css-“‘’”", + "⌘⌥": "style_modules_css-⌘⌥", + "☺☃": "style_modules_css-☺☃", + "♥": "style_modules_css-♥", + "𝄞♪♩♫♬": "style_modules_css-𝄞♪♩♫♬", + "💩": "style_modules_css-💩", + "😍": "style_modules_css-😍", +} +`; + +exports[`ConfigCacheTestCases css escape-unescape exported tests should work with URLs in CSS: classes 2`] = ` +Object { + "#": "style_modules_css-#", + "##": "style_modules_css-##", + "#.#.#": "style_modules_css-#.#.#", + "#fake-id": "style_modules_css-#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "style_modules_css-++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "style_modules_css--a-b-c-", + "-a0-34a___f": "style_modules_css--a0-34a___f", + ".": "style_modules_css-.", + "123": "style_modules_css-123", + "1a2b3c": "style_modules_css-1a2b3c", + ":)": "style_modules_css-:)", + ":\`(": "style_modules_css-:\`(", + ":hover": "style_modules_css-:hover", + ":hover:focus:active": "style_modules_css-:hover:focus:active", + "<><<<>><>": "style_modules_css-<><<<>><>", + "

": "style_modules_css-

", + "?": "style_modules_css-?", + "@": "style_modules_css-@", + "B&W?": "style_modules_css-B&W?", + "[attr=value]": "style_modules_css-[attr=value]", + "_": "style_modules_css-_", + "_test": "style_modules_css-_test", + "class": "style_modules_css-class", + "className": "style_modules_css-className", + "f!o!o": "style_modules_css-f!o!o", + "f'o'o": "style_modules_css-f'o'o", + "f*o*o": "style_modules_css-f*o*o", + "f+o+o": "style_modules_css-f+o+o", + "f/o/o": "style_modules_css-f/o/o", + "f@oo": "style_modules_css-f@oo", + "f\\\\o\\\\o": "style_modules_css-f\\\\o\\\\o", + "foo.bar": "style_modules_css-foo.bar", + "foo/bar": "style_modules_css-foo/bar", + "foo/bar/baz": "style_modules_css-foo/bar/baz", + "foo\\\\bar": "style_modules_css-foo\\\\bar", + "foo\\\\bar\\\\baz": "style_modules_css-foo\\\\bar\\\\baz", + "f~o~o": "style_modules_css-f~o~o", + "m_x_@": "style_modules_css-m_x_@", + "main-bg-color": "--style_modules_css-main-bg-color", + "main-bg-color-@2": "--style_modules_css-main-bg-color-@2", + "someId": "style_modules_css-someId", + "subClass": "style_modules_css-subClass", + "test": "style_modules_css-test", + "{}": "style_modules_css-{}", + "©": "style_modules_css-©", + "“‘’”": "style_modules_css-“‘’”", + "⌘⌥": "style_modules_css-⌘⌥", + "☺☃": "style_modules_css-☺☃", + "♥": "style_modules_css-♥", + "𝄞♪♩♫♬": "style_modules_css-𝄞♪♩♫♬", + "💩": "style_modules_css-💩", + "😍": "style_modules_css-😍", +} +`; + +exports[`ConfigCacheTestCases css escape-unescape exported tests should work with URLs in CSS: css 1`] = ` +Array [ + "/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ +.style_modules_css-class { + color: red; +} + +.style_modules_css-class { + background: blue; +} + +.style_modules_css-test { + background: red; +} + +.style_modules_css-_test { + background: blue; +} + +.style_modules_css-className { + background: red; +} + +#style_modules_css-someId { + background: green; +} + +.style_modules_css-className .style_modules_css-subClass { + color: green; +} + +#style_modules_css-someId .style_modules_css-subClass { + color: blue; +} + +.style_modules_css--a0-34a___f { + color: red; +} + +.style_modules_css-m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.style_modules_css-B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.style_modules_css-\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.style_modules_css-1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#style_modules_css-\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#style_modules_css--a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#style_modules_css-© { + color: black; +} + +.style_modules_css-♥ { background: lime; } +.style_modules_css-© { background: lime; } +.style_modules_css-😍 { background: lime; } +.style_modules_css-“‘’” { background: lime; } +.style_modules_css-☺☃ { background: lime; } +.style_modules_css-⌘⌥ { background: lime; } +.style_modules_css-𝄞♪♩♫♬ { background: lime; } +.style_modules_css-💩 { background: lime; } +.style_modules_css-\\\\? { background: lime; } +.style_modules_css-\\\\@ { background: lime; } +.style_modules_css-\\\\. { background: lime; } +.style_modules_css-\\\\:\\\\) { background: lime; } +.style_modules_css-\\\\:\\\\\`\\\\( { background: lime; } +.style_modules_css-123 { background: lime; } +.style_modules_css-1a2b3c { background: lime; } +.style_modules_css-\\\\ { background: lime; } +.style_modules_css-\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.style_modules_css-\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.style_modules_css-\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.style_modules_css-_ { background: lime; } +.style_modules_css-\\\\{\\\\} { background: lime; } +.style_modules_css-\\\\#fake-id { background: lime; } +.style_modules_css-foo\\\\.bar { background: lime; } +.style_modules_css-\\\\:hover { background: lime; } +.style_modules_css-\\\\:hover\\\\:focus\\\\:active { background: lime; } +.style_modules_css-\\\\[attr\\\\=value\\\\] { background: lime; } +.style_modules_css-f\\\\/o\\\\/o { background: lime; } +.style_modules_css-f\\\\\\\\o\\\\\\\\o { background: lime; } +.style_modules_css-f\\\\*o\\\\*o { background: lime; } +.style_modules_css-f\\\\!o\\\\!o { background: lime; } +.style_modules_css-f\\\\'o\\\\'o { background: lime; } +.style_modules_css-f\\\\~o\\\\~o { background: lime; } +.style_modules_css-f\\\\+o\\\\+o { background: lime; } + +.style_modules_css-foo\\\\/bar { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar { + background: hotpink; +} + +.style_modules_css-foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +:root { + --style_modules_css-main-bg-color: red; + --style_modules_css-main-bg-color-\\\\@2: blue; +} + +details { + background-color: var(--style_modules_css-main-bg-color); + background-color: var(--style_modules_css-main-bg-color-\\\\@2); +} + +@keyframes style_modules_css-f\\\\@oo { from { color: red; } to { color: blue; } } + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; + +exports[`ConfigCacheTestCases css escape-unescape exported tests should work with URLs in CSS: css 2`] = ` +Array [ + "/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ +.style_modules_css-class { + color: red; +} + +.style_modules_css-class { + background: blue; +} + +.style_modules_css-test { + background: red; +} + +.style_modules_css-_test { + background: blue; +} + +.style_modules_css-className { + background: red; +} + +#style_modules_css-someId { + background: green; +} + +.style_modules_css-className .style_modules_css-subClass { + color: green; +} + +#style_modules_css-someId .style_modules_css-subClass { + color: blue; +} + +.style_modules_css--a0-34a___f { + color: red; +} + +.style_modules_css-m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.style_modules_css-B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.style_modules_css-\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.style_modules_css-1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#style_modules_css-\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#style_modules_css--a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#style_modules_css-© { + color: black; +} + +.style_modules_css-♥ { background: lime; } +.style_modules_css-© { background: lime; } +.style_modules_css-😍 { background: lime; } +.style_modules_css-“‘’” { background: lime; } +.style_modules_css-☺☃ { background: lime; } +.style_modules_css-⌘⌥ { background: lime; } +.style_modules_css-𝄞♪♩♫♬ { background: lime; } +.style_modules_css-💩 { background: lime; } +.style_modules_css-\\\\? { background: lime; } +.style_modules_css-\\\\@ { background: lime; } +.style_modules_css-\\\\. { background: lime; } +.style_modules_css-\\\\:\\\\) { background: lime; } +.style_modules_css-\\\\:\\\\\`\\\\( { background: lime; } +.style_modules_css-123 { background: lime; } +.style_modules_css-1a2b3c { background: lime; } +.style_modules_css-\\\\ { background: lime; } +.style_modules_css-\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.style_modules_css-\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.style_modules_css-\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.style_modules_css-_ { background: lime; } +.style_modules_css-\\\\{\\\\} { background: lime; } +.style_modules_css-\\\\#fake-id { background: lime; } +.style_modules_css-foo\\\\.bar { background: lime; } +.style_modules_css-\\\\:hover { background: lime; } +.style_modules_css-\\\\:hover\\\\:focus\\\\:active { background: lime; } +.style_modules_css-\\\\[attr\\\\=value\\\\] { background: lime; } +.style_modules_css-f\\\\/o\\\\/o { background: lime; } +.style_modules_css-f\\\\\\\\o\\\\\\\\o { background: lime; } +.style_modules_css-f\\\\*o\\\\*o { background: lime; } +.style_modules_css-f\\\\!o\\\\!o { background: lime; } +.style_modules_css-f\\\\'o\\\\'o { background: lime; } +.style_modules_css-f\\\\~o\\\\~o { background: lime; } +.style_modules_css-f\\\\+o\\\\+o { background: lime; } + +.style_modules_css-foo\\\\/bar { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar { + background: hotpink; +} + +.style_modules_css-foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +:root { + --style_modules_css-main-bg-color: red; + --style_modules_css-main-bg-color-\\\\@2: blue; +} + +details { + background-color: var(--style_modules_css-main-bg-color); + background-color: var(--style_modules_css-main-bg-color-\\\\@2); +} + +@keyframes style_modules_css-f\\\\@oo { from { color: red; } to { color: blue; } } + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/escape-unescape/__snapshots__/ConfigTest.snap b/test/configCases/css/escape-unescape/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..6944359f33e --- /dev/null +++ b/test/configCases/css/escape-unescape/__snapshots__/ConfigTest.snap @@ -0,0 +1,405 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css escape-unescape exported tests should work with URLs in CSS: classes 1`] = ` +Object { + "#": "style_modules_css-#", + "##": "style_modules_css-##", + "#.#.#": "style_modules_css-#.#.#", + "#fake-id": "style_modules_css-#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "style_modules_css-++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "style_modules_css--a-b-c-", + "-a0-34a___f": "style_modules_css--a0-34a___f", + ".": "style_modules_css-.", + "123": "style_modules_css-123", + "1a2b3c": "style_modules_css-1a2b3c", + ":)": "style_modules_css-:)", + ":\`(": "style_modules_css-:\`(", + ":hover": "style_modules_css-:hover", + ":hover:focus:active": "style_modules_css-:hover:focus:active", + "<><<<>><>": "style_modules_css-<><<<>><>", + "

": "style_modules_css-

", + "?": "style_modules_css-?", + "@": "style_modules_css-@", + "B&W?": "style_modules_css-B&W?", + "[attr=value]": "style_modules_css-[attr=value]", + "_": "style_modules_css-_", + "_test": "style_modules_css-_test", + "class": "style_modules_css-class", + "className": "style_modules_css-className", + "f!o!o": "style_modules_css-f!o!o", + "f'o'o": "style_modules_css-f'o'o", + "f*o*o": "style_modules_css-f*o*o", + "f+o+o": "style_modules_css-f+o+o", + "f/o/o": "style_modules_css-f/o/o", + "f@oo": "style_modules_css-f@oo", + "f\\\\o\\\\o": "style_modules_css-f\\\\o\\\\o", + "foo.bar": "style_modules_css-foo.bar", + "foo/bar": "style_modules_css-foo/bar", + "foo/bar/baz": "style_modules_css-foo/bar/baz", + "foo\\\\bar": "style_modules_css-foo\\\\bar", + "foo\\\\bar\\\\baz": "style_modules_css-foo\\\\bar\\\\baz", + "f~o~o": "style_modules_css-f~o~o", + "m_x_@": "style_modules_css-m_x_@", + "main-bg-color": "--style_modules_css-main-bg-color", + "main-bg-color-@2": "--style_modules_css-main-bg-color-@2", + "someId": "style_modules_css-someId", + "subClass": "style_modules_css-subClass", + "test": "style_modules_css-test", + "{}": "style_modules_css-{}", + "©": "style_modules_css-©", + "“‘’”": "style_modules_css-“‘’”", + "⌘⌥": "style_modules_css-⌘⌥", + "☺☃": "style_modules_css-☺☃", + "♥": "style_modules_css-♥", + "𝄞♪♩♫♬": "style_modules_css-𝄞♪♩♫♬", + "💩": "style_modules_css-💩", + "😍": "style_modules_css-😍", +} +`; + +exports[`ConfigTestCases css escape-unescape exported tests should work with URLs in CSS: classes 2`] = ` +Object { + "#": "style_modules_css-#", + "##": "style_modules_css-##", + "#.#.#": "style_modules_css-#.#.#", + "#fake-id": "style_modules_css-#fake-id", + "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "style_modules_css-++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.", + "-a-b-c-": "style_modules_css--a-b-c-", + "-a0-34a___f": "style_modules_css--a0-34a___f", + ".": "style_modules_css-.", + "123": "style_modules_css-123", + "1a2b3c": "style_modules_css-1a2b3c", + ":)": "style_modules_css-:)", + ":\`(": "style_modules_css-:\`(", + ":hover": "style_modules_css-:hover", + ":hover:focus:active": "style_modules_css-:hover:focus:active", + "<><<<>><>": "style_modules_css-<><<<>><>", + "

": "style_modules_css-

", + "?": "style_modules_css-?", + "@": "style_modules_css-@", + "B&W?": "style_modules_css-B&W?", + "[attr=value]": "style_modules_css-[attr=value]", + "_": "style_modules_css-_", + "_test": "style_modules_css-_test", + "class": "style_modules_css-class", + "className": "style_modules_css-className", + "f!o!o": "style_modules_css-f!o!o", + "f'o'o": "style_modules_css-f'o'o", + "f*o*o": "style_modules_css-f*o*o", + "f+o+o": "style_modules_css-f+o+o", + "f/o/o": "style_modules_css-f/o/o", + "f@oo": "style_modules_css-f@oo", + "f\\\\o\\\\o": "style_modules_css-f\\\\o\\\\o", + "foo.bar": "style_modules_css-foo.bar", + "foo/bar": "style_modules_css-foo/bar", + "foo/bar/baz": "style_modules_css-foo/bar/baz", + "foo\\\\bar": "style_modules_css-foo\\\\bar", + "foo\\\\bar\\\\baz": "style_modules_css-foo\\\\bar\\\\baz", + "f~o~o": "style_modules_css-f~o~o", + "m_x_@": "style_modules_css-m_x_@", + "main-bg-color": "--style_modules_css-main-bg-color", + "main-bg-color-@2": "--style_modules_css-main-bg-color-@2", + "someId": "style_modules_css-someId", + "subClass": "style_modules_css-subClass", + "test": "style_modules_css-test", + "{}": "style_modules_css-{}", + "©": "style_modules_css-©", + "“‘’”": "style_modules_css-“‘’”", + "⌘⌥": "style_modules_css-⌘⌥", + "☺☃": "style_modules_css-☺☃", + "♥": "style_modules_css-♥", + "𝄞♪♩♫♬": "style_modules_css-𝄞♪♩♫♬", + "💩": "style_modules_css-💩", + "😍": "style_modules_css-😍", +} +`; + +exports[`ConfigTestCases css escape-unescape exported tests should work with URLs in CSS: css 1`] = ` +Array [ + "/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ +.style_modules_css-class { + color: red; +} + +.style_modules_css-class { + background: blue; +} + +.style_modules_css-test { + background: red; +} + +.style_modules_css-_test { + background: blue; +} + +.style_modules_css-className { + background: red; +} + +#style_modules_css-someId { + background: green; +} + +.style_modules_css-className .style_modules_css-subClass { + color: green; +} + +#style_modules_css-someId .style_modules_css-subClass { + color: blue; +} + +.style_modules_css--a0-34a___f { + color: red; +} + +.style_modules_css-m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.style_modules_css-B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.style_modules_css-\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.style_modules_css-1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#style_modules_css-\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#style_modules_css--a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#style_modules_css-© { + color: black; +} + +.style_modules_css-♥ { background: lime; } +.style_modules_css-© { background: lime; } +.style_modules_css-😍 { background: lime; } +.style_modules_css-“‘’” { background: lime; } +.style_modules_css-☺☃ { background: lime; } +.style_modules_css-⌘⌥ { background: lime; } +.style_modules_css-𝄞♪♩♫♬ { background: lime; } +.style_modules_css-💩 { background: lime; } +.style_modules_css-\\\\? { background: lime; } +.style_modules_css-\\\\@ { background: lime; } +.style_modules_css-\\\\. { background: lime; } +.style_modules_css-\\\\:\\\\) { background: lime; } +.style_modules_css-\\\\:\\\\\`\\\\( { background: lime; } +.style_modules_css-123 { background: lime; } +.style_modules_css-1a2b3c { background: lime; } +.style_modules_css-\\\\ { background: lime; } +.style_modules_css-\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.style_modules_css-\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.style_modules_css-\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.style_modules_css-_ { background: lime; } +.style_modules_css-\\\\{\\\\} { background: lime; } +.style_modules_css-\\\\#fake-id { background: lime; } +.style_modules_css-foo\\\\.bar { background: lime; } +.style_modules_css-\\\\:hover { background: lime; } +.style_modules_css-\\\\:hover\\\\:focus\\\\:active { background: lime; } +.style_modules_css-\\\\[attr\\\\=value\\\\] { background: lime; } +.style_modules_css-f\\\\/o\\\\/o { background: lime; } +.style_modules_css-f\\\\\\\\o\\\\\\\\o { background: lime; } +.style_modules_css-f\\\\*o\\\\*o { background: lime; } +.style_modules_css-f\\\\!o\\\\!o { background: lime; } +.style_modules_css-f\\\\'o\\\\'o { background: lime; } +.style_modules_css-f\\\\~o\\\\~o { background: lime; } +.style_modules_css-f\\\\+o\\\\+o { background: lime; } + +.style_modules_css-foo\\\\/bar { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar { + background: hotpink; +} + +.style_modules_css-foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +:root { + --style_modules_css-main-bg-color: red; + --style_modules_css-main-bg-color-\\\\@2: blue; +} + +details { + background-color: var(--style_modules_css-main-bg-color); + background-color: var(--style_modules_css-main-bg-color-\\\\@2); +} + +@keyframes style_modules_css-f\\\\@oo { from { color: red; } to { color: blue; } } + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; + +exports[`ConfigTestCases css escape-unescape exported tests should work with URLs in CSS: css 2`] = ` +Array [ + "/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ +.style_modules_css-class { + color: red; +} + +.style_modules_css-class { + background: blue; +} + +.style_modules_css-test { + background: red; +} + +.style_modules_css-_test { + background: blue; +} + +.style_modules_css-className { + background: red; +} + +#style_modules_css-someId { + background: green; +} + +.style_modules_css-className .style_modules_css-subClass { + color: green; +} + +#style_modules_css-someId .style_modules_css-subClass { + color: blue; +} + +.style_modules_css--a0-34a___f { + color: red; +} + +.style_modules_css-m_x_\\\\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.style_modules_css-B\\\\&W\\\\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=\\":\`(\\" */ +.style_modules_css-\\\\:\\\\\`\\\\( { + color: aqua; +} + +/* matches elements with class=\\"1a2b3c\\" */ +.style_modules_css-1a2b3c { + color: aliceblue; +} + +/* matches the element with id=\\"#fake-id\\" */ +#style_modules_css-\\\\#fake-id { + color: antiquewhite; +} + +/* matches the element with id=\\"-a-b-c-\\" */ +#style_modules_css--a-b-c- { + color: azure; +} + +/* matches the element with id=\\"©\\" */ +#style_modules_css-© { + color: black; +} + +.style_modules_css-♥ { background: lime; } +.style_modules_css-© { background: lime; } +.style_modules_css-😍 { background: lime; } +.style_modules_css-“‘’” { background: lime; } +.style_modules_css-☺☃ { background: lime; } +.style_modules_css-⌘⌥ { background: lime; } +.style_modules_css-𝄞♪♩♫♬ { background: lime; } +.style_modules_css-💩 { background: lime; } +.style_modules_css-\\\\? { background: lime; } +.style_modules_css-\\\\@ { background: lime; } +.style_modules_css-\\\\. { background: lime; } +.style_modules_css-\\\\:\\\\) { background: lime; } +.style_modules_css-\\\\:\\\\\`\\\\( { background: lime; } +.style_modules_css-123 { background: lime; } +.style_modules_css-1a2b3c { background: lime; } +.style_modules_css-\\\\ { background: lime; } +.style_modules_css-\\\\<\\\\>\\\\<\\\\<\\\\<\\\\>\\\\>\\\\<\\\\> { background: lime; } +.style_modules_css-\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\[\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\>\\\\+\\\\+\\\\+\\\\>\\\\+\\\\<\\\\<\\\\<\\\\<-\\\\]\\\\>\\\\+\\\\+\\\\.\\\\>\\\\+\\\\.\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\.\\\\+\\\\+\\\\+\\\\.\\\\>\\\\+\\\\+\\\\.\\\\<\\\\<\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\+\\\\.\\\\>\\\\.\\\\+\\\\+\\\\+\\\\.------\\\\.--------\\\\.\\\\>\\\\+\\\\.\\\\>\\\\. { background: lime; } +.style_modules_css-\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\# { background: lime; } +.style_modules_css-\\\\#\\\\.\\\\#\\\\.\\\\# { background: lime; } +.style_modules_css-_ { background: lime; } +.style_modules_css-\\\\{\\\\} { background: lime; } +.style_modules_css-\\\\#fake-id { background: lime; } +.style_modules_css-foo\\\\.bar { background: lime; } +.style_modules_css-\\\\:hover { background: lime; } +.style_modules_css-\\\\:hover\\\\:focus\\\\:active { background: lime; } +.style_modules_css-\\\\[attr\\\\=value\\\\] { background: lime; } +.style_modules_css-f\\\\/o\\\\/o { background: lime; } +.style_modules_css-f\\\\\\\\o\\\\\\\\o { background: lime; } +.style_modules_css-f\\\\*o\\\\*o { background: lime; } +.style_modules_css-f\\\\!o\\\\!o { background: lime; } +.style_modules_css-f\\\\'o\\\\'o { background: lime; } +.style_modules_css-f\\\\~o\\\\~o { background: lime; } +.style_modules_css-f\\\\+o\\\\+o { background: lime; } + +.style_modules_css-foo\\\\/bar { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar { + background: hotpink; +} + +.style_modules_css-foo\\\\/bar\\\\/baz { + background: hotpink; +} + +.style_modules_css-foo\\\\\\\\bar\\\\\\\\baz { + background: hotpink; +} + +:root { + --style_modules_css-main-bg-color: red; + --style_modules_css-main-bg-color-\\\\@2: blue; +} + +details { + background-color: var(--style_modules_css-main-bg-color); + background-color: var(--style_modules_css-main-bg-color-\\\\@2); +} + +@keyframes style_modules_css-f\\\\@oo { from { color: red; } to { color: blue; } } + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/escape-unescape/index.js b/test/configCases/css/escape-unescape/index.js new file mode 100644 index 00000000000..e415950fa1a --- /dev/null +++ b/test/configCases/css/escape-unescape/index.js @@ -0,0 +1,15 @@ +import * as styles from "./style.modules.css"; + +it(`should work with URLs in CSS`, done => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot('css'); + expect(styles).toMatchSnapshot('classes'); + done(); +}); diff --git a/test/configCases/css/escape-unescape/style.modules.css b/test/configCases/css/escape-unescape/style.modules.css new file mode 100644 index 00000000000..1417ffcb0eb --- /dev/null +++ b/test/configCases/css/escape-unescape/style.modules.css @@ -0,0 +1,134 @@ +.class { + color: red; +} + +.cla\ss { + background: blue; +} + +.test { + background: red; +} + +._test { + background: blue; +} + +.className { + background: red; +} + +#someId { + background: green; +} + +.className .subClass { + color: green; +} + +#someId .subClass { + color: blue; +} + +.-a0-34a___f { + color: red; +} + +.m_x_\@ { + margin-left: auto !important; + margin-right: auto !important; +} + +.B\&W\? { + margin-left: auto !important; + margin-right: auto !important; +} + +/* matches elements with class=":`(" */ +.\3A \`\( { + color: aqua; +} + +/* matches elements with class="1a2b3c" */ +.\31 a2b3c { + color: aliceblue; +} + +/* matches the element with id="#fake-id" */ +#\#fake-id { + color: antiquewhite; +} + +/* matches the element with id="-a-b-c-" */ +#-a-b-c- { + color: azure; +} + +/* matches the element with id="©" */ +#© { + color: black; +} + +.♥ { background: lime; } +.© { background: lime; } +.😍 { background: lime; } +.“‘’” { background: lime; } +.☺☃ { background: lime; } +.⌘⌥ { background: lime; } +.𝄞♪♩♫♬ { background: lime; } +.💩 { background: lime; } +.\? { background: lime; } +.\@ { background: lime; } +.\. { background: lime; } +.\3A \) { background: lime; } +.\3A \`\( { background: lime; } +.\31 23 { background: lime; } +.\31 a2b3c { background: lime; } +.\ { background: lime; } +.\<\>\<\<\<\>\>\<\> { background: lime; } +.\+\+\+\+\+\+\+\+\+\+\[\>\+\+\+\+\+\+\+\>\+\+\+\+\+\+\+\+\+\+\>\+\+\+\>\+\<\<\<\<\-\]\>\+\+\.\>\+\.\+\+\+\+\+\+\+\.\.\+\+\+\.\>\+\+\.\<\<\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\.\>\.\+\+\+\.\-\-\-\-\-\-\.\-\-\-\-\-\-\-\-\.\>\+\.\>\. { background: lime; } +.\# { background: lime; } +.\#\# { background: lime; } +.\#\.\#\.\# { background: lime; } +.\_ { background: lime; } +.\{\} { background: lime; } +.\#fake\-id { background: lime; } +.foo\.bar { background: lime; } +.\3A hover { background: lime; } +.\3A hover\3A focus\3A active { background: lime; } +.\[attr\=value\] { background: lime; } +.f\/o\/o { background: lime; } +.f\\o\\o { background: lime; } +.f\*o\*o { background: lime; } +.f\!o\!o { background: lime; } +.f\'o\'o { background: lime; } +.f\~o\~o { background: lime; } +.f\+o\+o { background: lime; } + +.foo\/bar { + background: hotpink; +} + +.foo\\bar { + background: hotpink; +} + +.foo\/bar\/baz { + background: hotpink; +} + +.foo\\bar\\baz { + background: hotpink; +} + +:root { + --main-bg-color: red; + --main-bg-color-\@2: blue; +} + +details { + background-color: var(--main-bg-color); + background-color: var(--main-bg-color-\@2); +} + +@keyframes f\@oo { from { color: red; } to { color: blue; } } diff --git a/test/configCases/css/escape-unescape/test.config.js b/test/configCases/css/escape-unescape/test.config.js new file mode 100644 index 00000000000..b601ba4207a --- /dev/null +++ b/test/configCases/css/escape-unescape/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["bundle0.js"]; + }, + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/escape-unescape/webpack.config.js b/test/configCases/css/escape-unescape/webpack.config.js new file mode 100644 index 00000000000..199853eba87 --- /dev/null +++ b/test/configCases/css/escape-unescape/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "web", + mode: "development", + experiments: { + css: true + } + }, + { + target: "web", + mode: "production", + experiments: { + css: true + } + } +]; diff --git a/test/configCases/css/export-type-source-map/index.js b/test/configCases/css/export-type-source-map/index.js new file mode 100644 index 00000000000..153c83cb242 --- /dev/null +++ b/test/configCases/css/export-type-source-map/index.js @@ -0,0 +1,18 @@ +import textCss from "./style.css"; + +it("should include CSS source in the JS source map for text exportType", () => { + // With the Source chain approach, CSS source map info flows into the JS source map. + // The CSS content should be present in the exported text. + expect(textCss).toContain(".text-class"); + expect(textCss).toContain("color: red"); + // The JS source map (bundle0.js.map) should contain the CSS source. + // We verify this by reading the source map file. + const fs = require("fs"); + const path = require("path"); + const mapFile = path.resolve(__dirname, "bundle0.js.map"); + expect(fs.existsSync(mapFile)).toBe(true); + const map = JSON.parse(fs.readFileSync(mapFile, "utf-8")); + const cssSourceIndex = map.sources.findIndex(s => s.includes("style.css")); + expect(cssSourceIndex).toBeGreaterThanOrEqual(0); + expect(map.sourcesContent[cssSourceIndex]).toContain(".text-class"); +}); diff --git a/test/configCases/css/export-type-source-map/style.css b/test/configCases/css/export-type-source-map/style.css new file mode 100644 index 00000000000..824dfe2e498 --- /dev/null +++ b/test/configCases/css/export-type-source-map/style.css @@ -0,0 +1,4 @@ +.text-class { + color: red; + font-size: 16px; +} diff --git a/test/configCases/css/export-type-source-map/webpack.config.js b/test/configCases/css/export-type-source-map/webpack.config.js new file mode 100644 index 00000000000..e4aa66dd891 --- /dev/null +++ b/test/configCases/css/export-type-source-map/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: "source-map", + target: "node", + mode: "development", + module: { + rules: [ + { + test: /style\.css$/, + type: "css/auto", + parser: { exportType: "text" } + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/export-type-style/index.js b/test/configCases/css/export-type-style/index.js new file mode 100644 index 00000000000..6fbe201691e --- /dev/null +++ b/test/configCases/css/export-type-style/index.js @@ -0,0 +1,26 @@ +import { "style-class" as styleClass } from "./style.css"; +import { "module-class" as moduleClass } from "./style.module.css"; + +it("should export CSS module classes from style.module.css", () => { + expect(styleClass).toBe("style_css-style-class"); + expect(moduleClass).toBe("style_module_css-module-class"); +}); + +it("should inject styles into DOM when exportType is style", () => { + if (!process.env.BROWSER) { + expect(true).toBe(true); + return; + } + const styles = window.document.getElementsByTagName("style"); + expect(styles.length).toBeGreaterThan(0); + const styleElement = styles[1]; + expect(styleElement.nodeName).toBe("STYLE"); + expect(styleElement.textContent).toContain(".style_css-style-class"); + expect(styleElement.textContent).toContain("color: red"); + expect(styleElement.textContent).toContain("background-color: blue"); + expect(styleElement.textContent).toContain("padding: 10px"); + + const styleImported = styles[0]; + expect(styleImported.textContent).toContain("margin: 10px"); +}); + diff --git a/test/configCases/css/export-type-style/style-imported.css b/test/configCases/css/export-type-style/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/export-type-style/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/export-type-style/style.css b/test/configCases/css/export-type-style/style.css new file mode 100644 index 00000000000..252bd425769 --- /dev/null +++ b/test/configCases/css/export-type-style/style.css @@ -0,0 +1,7 @@ +@import url(./style-imported.css); +.style-class { + color: red; + background-color: blue; + padding: 10px; +} + diff --git a/test/configCases/css/export-type-style/style.module.css b/test/configCases/css/export-type-style/style.module.css new file mode 100644 index 00000000000..53d87420cbc --- /dev/null +++ b/test/configCases/css/export-type-style/style.module.css @@ -0,0 +1,6 @@ +@import url(./style-imported.css); + +.module-class { + color: green; + font-size: 14px; +} diff --git a/test/configCases/css/export-type-style/webpack.config.js b/test/configCases/css/export-type-style/webpack.config.js new file mode 100644 index 00000000000..16362893b33 --- /dev/null +++ b/test/configCases/css/export-type-style/webpack.config.js @@ -0,0 +1,49 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +/** + * Create a webpack configuration for a given target. + * @param {"node" | "web"} target target environment + * @param {boolean} concatenateModules whether to concatenate modules + * @returns {import("../../../../").Configuration} webpack configuration + */ +function createConfig(target, concatenateModules) { + return { + name: `${target}-${concatenateModules ? "concat" : "no-concat"}`, + devtool: false, + target, + mode: "development", + optimization: { + chunkIds: "named", + concatenateModules + }, + module: { + rules: [ + { + test: /\.css$/, + type: "css/module", + parser: { + exportType: "style" + } + } + ] + }, + experiments: { + css: true + }, + plugins: [ + new webpack.DefinePlugin({ + "process.env.BROWSER": JSON.stringify(target === "web") + }) + ] + }; +} + +module.exports = [ + createConfig("node", false), + createConfig("node", true), + createConfig("web", false), + createConfig("web", true) +]; diff --git a/test/configCases/css/export-type-text-url/img.png b/test/configCases/css/export-type-text-url/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/export-type-text-url/img.png differ diff --git a/test/configCases/css/export-type-text-url/index.js b/test/configCases/css/export-type-text-url/index.js new file mode 100644 index 00000000000..bd06a4dfa16 --- /dev/null +++ b/test/configCases/css/export-type-text-url/index.js @@ -0,0 +1,25 @@ +import textCss from "./style.css"; +import sheet from "./style-for-sheet.css"; +import "./style-for-inject.css"; + +it("should resolve url() relative to output root for text exportType", () => { + // url() in non-link CSS is resolved relative to the document, not any output file. + // undoPath should be "" regardless of cssFilename/jsFilename configuration. + expect(textCss).toContain("url(images/img.png)"); + expect(textCss).not.toContain("url(../images/img.png)"); +}); + +it("should resolve url() relative to output root for css-style-sheet exportType", () => { + expect(sheet).toBeInstanceOf(CSSStyleSheet); + const cssText = Array.from(sheet.cssRules).map(r => r.cssText).join("\n"); + expect(cssText).toContain("images/img.png"); + expect(cssText).not.toContain("../images/img.png"); +}); + +it("should resolve url() relative to output root for style exportType", () => { + if (typeof document === "undefined") return; + const styles = document.getElementsByTagName("style"); + const allStyleText = Array.from(styles).map(s => s.textContent).join("\n"); + expect(allStyleText).toContain("images/img.png"); + expect(allStyleText).not.toContain("../images/img.png"); +}); diff --git a/test/configCases/css/export-type-text-url/style-for-inject.css b/test/configCases/css/export-type-text-url/style-for-inject.css new file mode 100644 index 00000000000..961c8b89457 --- /dev/null +++ b/test/configCases/css/export-type-text-url/style-for-inject.css @@ -0,0 +1,4 @@ +.inject-with-url { + background-image: url("./img.png"); + color: green; +} diff --git a/test/configCases/css/export-type-text-url/style-for-sheet.css b/test/configCases/css/export-type-text-url/style-for-sheet.css new file mode 100644 index 00000000000..11c10c790bc --- /dev/null +++ b/test/configCases/css/export-type-text-url/style-for-sheet.css @@ -0,0 +1,4 @@ +.sheet-with-url { + background-image: url("./img.png"); + color: blue; +} diff --git a/test/configCases/css/export-type-text-url/style.css b/test/configCases/css/export-type-text-url/style.css new file mode 100644 index 00000000000..ffb289ac878 --- /dev/null +++ b/test/configCases/css/export-type-text-url/style.css @@ -0,0 +1,4 @@ +.with-url { + background-image: url("./img.png"); + color: red; +} diff --git a/test/configCases/css/export-type-text-url/test.config.js b/test/configCases/css/export-type-text-url/test.config.js new file mode 100644 index 00000000000..f4d261dc4fa --- /dev/null +++ b/test/configCases/css/export-type-text-url/test.config.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + findBundle(i, options) { + if (i === 0) return "./bundle0.js"; + return "./js/bundle1.js"; + } +}; diff --git a/test/configCases/css/export-type-text-url/webpack.config.js b/test/configCases/css/export-type-text-url/webpack.config.js new file mode 100644 index 00000000000..9d83d01cb5c --- /dev/null +++ b/test/configCases/css/export-type-text-url/webpack.config.js @@ -0,0 +1,75 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + name: "js-at-root", + devtool: false, + target: "web", + mode: "development", + output: { + // JS at root, CSS in "css/" subdirectory + // undoPath from cssChunkFilename = "../", but non-link should use "" + filename: "bundle0.js", + cssFilename: "css/[name].css", + cssChunkFilename: "css/[name].css", + publicPath: "auto", + assetModuleFilename: "images/[name][ext]" + }, + module: { + rules: [ + { + test: /style\.css$/, + type: "css/auto", + parser: { exportType: "text" } + }, + { + test: /style-for-sheet\.css$/, + type: "css/auto", + parser: { exportType: "css-style-sheet" } + }, + { + test: /style-for-inject\.css$/, + type: "css/auto", + parser: { exportType: "style" } + } + ] + }, + experiments: { css: true } + }, + { + name: "js-in-subdir", + devtool: false, + target: "web", + mode: "development", + output: { + // JS in "js/" subdirectory — undoPath from JS path would be "../" + // but non-link url() resolves relative to document, so still "" + filename: "js/bundle1.js", + cssFilename: "css/[name].css", + cssChunkFilename: "css/[name].css", + publicPath: "auto", + assetModuleFilename: "images/[name][ext]" + }, + module: { + rules: [ + { + test: /style\.css$/, + type: "css/auto", + parser: { exportType: "text" } + }, + { + test: /style-for-sheet\.css$/, + type: "css/auto", + parser: { exportType: "css-style-sheet" } + }, + { + test: /style-for-inject\.css$/, + type: "css/auto", + parser: { exportType: "style" } + } + ] + }, + experiments: { css: true } + } +]; diff --git a/test/configCases/css/export-type/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/export-type/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..3465a69c365 --- /dev/null +++ b/test/configCases/css/export-type/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,381 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css export-type exported tests should export CSS text as default when exportType is text (css/module) 1`] = ` +"/*!************************************************!*\\\\ + !*** css ./module-text.css (exportType: text) ***! + \\\\************************************************/ +.module-text_css-class { + color: red; + background: white; +} + +.module-text_css-another-class { + font-size: 16px; +} + + +" +`; + +exports[`ConfigCacheTestCases css export-type exported tests should export CSS text as default when exportType is text (css/module) 2`] = ` +"/*!************************************************!*\\\\ + !*** css ./module-text.css (exportType: text) ***! + \\\\************************************************/ +.module-text_css-class { + color: red; + background: white; +} + +.module-text_css-another-class { + font-size: 16px; +} + + +" +`; + +exports[`ConfigCacheTestCases css export-type exported tests should export CSS text when exportType is text and esModule is false (css/module) 1`] = ` +Object { + "another": "module-text-no-esm_css-another", + "default": Object { + "another": "module-text-no-esm_css-another", + "default": "/*!*******************************************************!*\\\\ + !*** css ./module-text-no-esm.css (exportType: text) ***! + \\\\*******************************************************/ +.module-text-no-esm_css-no-esm-text { + color: orange; + background: lightgray; +} + +.module-text-no-esm_css-another { + text-align: center; +} + + +", + "no-esm-text": "module-text-no-esm_css-no-esm-text", + }, + "no-esm-text": "module-text-no-esm_css-no-esm-text", +} +`; + +exports[`ConfigCacheTestCases css export-type exported tests should export CSS text when exportType is text and esModule is false (css/module) 2`] = ` +Object { + "another": "module-text-no-esm_css-another", + "default": Object { + "another": "module-text-no-esm_css-another", + "default": "/*!*******************************************************!*\\\\ + !*** css ./module-text-no-esm.css (exportType: text) ***! + \\\\*******************************************************/ +.module-text-no-esm_css-no-esm-text { + color: orange; + background: lightgray; +} + +.module-text-no-esm_css-another { + text-align: center; +} + + +", + "no-esm-text": "module-text-no-esm_css-no-esm-text", + }, + "no-esm-text": "module-text-no-esm_css-no-esm-text", +} +`; + +exports[`ConfigCacheTestCases css export-type exported tests should handle @import with layer, supports, and media queries 1`] = ` +"/*!****************************************!*\\\\ + !*** css ./foo.css (exportType: text) ***! + \\\\****************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .foo_css_32b6-foo { + color: rebeccapurple; + }} + } +} + +/*!*****************************************************!*\\\\ + !*** css ./auto-text-no-esm.css (exportType: text) ***! + \\\\*****************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .auto-no-esm-text { + color: brown; + font-style: italic; + } + + .another-auto { + display: block; + } + + } + } +} + +/*!**********************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: utilities) (exportType: text) ***! + \\\\**********************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer utilities { + .imported-layer_css_9f81-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } +} + +/*!****************************************************************************!*\\\\ + !*** css ./imported-base.css (supports: display: grid) (exportType: text) ***! + \\\\****************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @supports (display: grid) { + .imported-base_css_0700-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************!*\\\\ + !*** css ./imported-base.css (media: screen and (min-width: 768px)) (exportType: text) ***! + \\\\*****************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @media screen and (min-width: 768px) { + .imported-base_css_90bc-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: components) (supports: display: flex) (media: screen and (max-width: 1024px)) (exportType: text) ***! + \\\\*****************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer components { + @supports (display: flex) { + @media screen and (max-width: 1024px) { + .imported-layer_css_b04f-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } + } + } +} + +/*!*********************************************************************************************************************************************!*\\\\ + !*** css ./module-with-imports.css (layer: framework) (supports: display: flex) (media: screen and (min-width: 1024px)) (exportType: text) ***! + \\\\*********************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + + + .module-with-imports_css_5263-main-class { + color: purple; + display: flex; + background-image: url(09a1a1112c577c279435.png); + } + + @layer base { + .module-with-imports_css_5263-base-class { + font-family: sans-serif; + } + } + + @supports (display: grid) { + .module-with-imports_css_5263-grid-class { + display: grid; + } + } + + @media (min-width: 600px) { + .module-with-imports_css_5263-responsive-class { + width: 100%; + } + } + + } + } +} + +/*!***************************************************************!*\\\\ + !*** css ./parent-module-with-imports.css (exportType: text) ***! + \\\\***************************************************************/ + + +" +`; + +exports[`ConfigCacheTestCases css export-type exported tests should handle @import with layer, supports, and media queries 2`] = ` +"/*!****************************************!*\\\\ + !*** css ./foo.css (exportType: text) ***! + \\\\****************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .foo_css_32b6-foo { + color: rebeccapurple; + }} + } +} + +/*!*****************************************************!*\\\\ + !*** css ./auto-text-no-esm.css (exportType: text) ***! + \\\\*****************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .auto-no-esm-text { + color: brown; + font-style: italic; + } + + .another-auto { + display: block; + } + + } + } +} + +/*!**********************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: utilities) (exportType: text) ***! + \\\\**********************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer utilities { + .imported-layer_css_9f81-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } +} + +/*!****************************************************************************!*\\\\ + !*** css ./imported-base.css (supports: display: grid) (exportType: text) ***! + \\\\****************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @supports (display: grid) { + .imported-base_css_0700-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************!*\\\\ + !*** css ./imported-base.css (media: screen and (min-width: 768px)) (exportType: text) ***! + \\\\*****************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @media screen and (min-width: 768px) { + .imported-base_css_90bc-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: components) (supports: display: flex) (media: screen and (max-width: 1024px)) (exportType: text) ***! + \\\\*****************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer components { + @supports (display: flex) { + @media screen and (max-width: 1024px) { + .imported-layer_css_b04f-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } + } + } +} + +/*!*********************************************************************************************************************************************!*\\\\ + !*** css ./module-with-imports.css (layer: framework) (supports: display: flex) (media: screen and (min-width: 1024px)) (exportType: text) ***! + \\\\*********************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + + + .module-with-imports_css_5263-main-class { + color: purple; + display: flex; + background-image: url(09a1a1112c577c279435.png); + } + + @layer base { + .module-with-imports_css_5263-base-class { + font-family: sans-serif; + } + } + + @supports (display: grid) { + .module-with-imports_css_5263-grid-class { + display: grid; + } + } + + @media (min-width: 600px) { + .module-with-imports_css_5263-responsive-class { + width: 100%; + } + } + + } + } +} + +/*!***************************************************************!*\\\\ + !*** css ./parent-module-with-imports.css (exportType: text) ***! + \\\\***************************************************************/ + + +" +`; diff --git a/test/configCases/css/export-type/__snapshots__/ConfigTest.snap b/test/configCases/css/export-type/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..d8ea52db93f --- /dev/null +++ b/test/configCases/css/export-type/__snapshots__/ConfigTest.snap @@ -0,0 +1,381 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css export-type exported tests should export CSS text as default when exportType is text (css/module) 1`] = ` +"/*!************************************************!*\\\\ + !*** css ./module-text.css (exportType: text) ***! + \\\\************************************************/ +.module-text_css-class { + color: red; + background: white; +} + +.module-text_css-another-class { + font-size: 16px; +} + + +" +`; + +exports[`ConfigTestCases css export-type exported tests should export CSS text as default when exportType is text (css/module) 2`] = ` +"/*!************************************************!*\\\\ + !*** css ./module-text.css (exportType: text) ***! + \\\\************************************************/ +.module-text_css-class { + color: red; + background: white; +} + +.module-text_css-another-class { + font-size: 16px; +} + + +" +`; + +exports[`ConfigTestCases css export-type exported tests should export CSS text when exportType is text and esModule is false (css/module) 1`] = ` +Object { + "another": "module-text-no-esm_css-another", + "default": Object { + "another": "module-text-no-esm_css-another", + "default": "/*!*******************************************************!*\\\\ + !*** css ./module-text-no-esm.css (exportType: text) ***! + \\\\*******************************************************/ +.module-text-no-esm_css-no-esm-text { + color: orange; + background: lightgray; +} + +.module-text-no-esm_css-another { + text-align: center; +} + + +", + "no-esm-text": "module-text-no-esm_css-no-esm-text", + }, + "no-esm-text": "module-text-no-esm_css-no-esm-text", +} +`; + +exports[`ConfigTestCases css export-type exported tests should export CSS text when exportType is text and esModule is false (css/module) 2`] = ` +Object { + "another": "module-text-no-esm_css-another", + "default": Object { + "another": "module-text-no-esm_css-another", + "default": "/*!*******************************************************!*\\\\ + !*** css ./module-text-no-esm.css (exportType: text) ***! + \\\\*******************************************************/ +.module-text-no-esm_css-no-esm-text { + color: orange; + background: lightgray; +} + +.module-text-no-esm_css-another { + text-align: center; +} + + +", + "no-esm-text": "module-text-no-esm_css-no-esm-text", + }, + "no-esm-text": "module-text-no-esm_css-no-esm-text", +} +`; + +exports[`ConfigTestCases css export-type exported tests should handle @import with layer, supports, and media queries 1`] = ` +"/*!****************************************!*\\\\ + !*** css ./foo.css (exportType: text) ***! + \\\\****************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .foo_css_32b6-foo { + color: rebeccapurple; + }} + } +} + +/*!*****************************************************!*\\\\ + !*** css ./auto-text-no-esm.css (exportType: text) ***! + \\\\*****************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .auto-no-esm-text { + color: brown; + font-style: italic; + } + + .another-auto { + display: block; + } + + } + } +} + +/*!**********************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: utilities) (exportType: text) ***! + \\\\**********************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer utilities { + .imported-layer_css_9f81-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } +} + +/*!****************************************************************************!*\\\\ + !*** css ./imported-base.css (supports: display: grid) (exportType: text) ***! + \\\\****************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @supports (display: grid) { + .imported-base_css_0700-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************!*\\\\ + !*** css ./imported-base.css (media: screen and (min-width: 768px)) (exportType: text) ***! + \\\\*****************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @media screen and (min-width: 768px) { + .imported-base_css_90bc-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: components) (supports: display: flex) (media: screen and (max-width: 1024px)) (exportType: text) ***! + \\\\*****************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer components { + @supports (display: flex) { + @media screen and (max-width: 1024px) { + .imported-layer_css_b04f-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } + } + } +} + +/*!*********************************************************************************************************************************************!*\\\\ + !*** css ./module-with-imports.css (layer: framework) (supports: display: flex) (media: screen and (min-width: 1024px)) (exportType: text) ***! + \\\\*********************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + + + .module-with-imports_css_5263-main-class { + color: purple; + display: flex; + background-image: url(09a1a1112c577c279435.png); + } + + @layer base { + .module-with-imports_css_5263-base-class { + font-family: sans-serif; + } + } + + @supports (display: grid) { + .module-with-imports_css_5263-grid-class { + display: grid; + } + } + + @media (min-width: 600px) { + .module-with-imports_css_5263-responsive-class { + width: 100%; + } + } + + } + } +} + +/*!***************************************************************!*\\\\ + !*** css ./parent-module-with-imports.css (exportType: text) ***! + \\\\***************************************************************/ + + +" +`; + +exports[`ConfigTestCases css export-type exported tests should handle @import with layer, supports, and media queries 2`] = ` +"/*!****************************************!*\\\\ + !*** css ./foo.css (exportType: text) ***! + \\\\****************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .foo_css_32b6-foo { + color: rebeccapurple; + }} + } +} + +/*!*****************************************************!*\\\\ + !*** css ./auto-text-no-esm.css (exportType: text) ***! + \\\\*****************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + .auto-no-esm-text { + color: brown; + font-style: italic; + } + + .another-auto { + display: block; + } + + } + } +} + +/*!**********************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: utilities) (exportType: text) ***! + \\\\**********************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer utilities { + .imported-layer_css_9f81-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } +} + +/*!****************************************************************************!*\\\\ + !*** css ./imported-base.css (supports: display: grid) (exportType: text) ***! + \\\\****************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @supports (display: grid) { + .imported-base_css_0700-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************!*\\\\ + !*** css ./imported-base.css (media: screen and (min-width: 768px)) (exportType: text) ***! + \\\\*****************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @media screen and (min-width: 768px) { + .imported-base_css_90bc-imported-base { + color: blue; + font-size: 14px; + } + + } + } + } +} + +/*!*****************************************************************************************************************************************!*\\\\ + !*** css ./imported-layer.css (layer: components) (supports: display: flex) (media: screen and (max-width: 1024px)) (exportType: text) ***! + \\\\*****************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + @layer components { + @supports (display: flex) { + @media screen and (max-width: 1024px) { + .imported-layer_css_b04f-imported-layer { + padding: 10px; + margin: 5px; + } + + } + } + } + } + } +} + +/*!*********************************************************************************************************************************************!*\\\\ + !*** css ./module-with-imports.css (layer: framework) (supports: display: flex) (media: screen and (min-width: 1024px)) (exportType: text) ***! + \\\\*********************************************************************************************************************************************/ +@layer framework { + @supports (display: flex) { + @media screen and (min-width: 1024px) { + + + .module-with-imports_css_5263-main-class { + color: purple; + display: flex; + background-image: url(09a1a1112c577c279435.png); + } + + @layer base { + .module-with-imports_css_5263-base-class { + font-family: sans-serif; + } + } + + @supports (display: grid) { + .module-with-imports_css_5263-grid-class { + display: grid; + } + } + + @media (min-width: 600px) { + .module-with-imports_css_5263-responsive-class { + width: 100%; + } + } + + } + } +} + +/*!***************************************************************!*\\\\ + !*** css ./parent-module-with-imports.css (exportType: text) ***! + \\\\***************************************************************/ + + +" +`; diff --git a/test/configCases/css/export-type/auto-text-no-esm.css b/test/configCases/css/export-type/auto-text-no-esm.css new file mode 100644 index 00000000000..5a7c2668c7e --- /dev/null +++ b/test/configCases/css/export-type/auto-text-no-esm.css @@ -0,0 +1,9 @@ +.auto-no-esm-text { + color: brown; + font-style: italic; +} + +.another-auto { + display: block; +} + diff --git a/test/configCases/css/export-type/auto-text.css b/test/configCases/css/export-type/auto-text.css new file mode 100644 index 00000000000..1b0ad8c6ca1 --- /dev/null +++ b/test/configCases/css/export-type/auto-text.css @@ -0,0 +1,9 @@ +.auto-text-class { + color: green; + padding: 10px; +} + +.another { + margin: 5px; +} + diff --git a/test/configCases/css/export-type/foo.css b/test/configCases/css/export-type/foo.css new file mode 100644 index 00000000000..90628169060 --- /dev/null +++ b/test/configCases/css/export-type/foo.css @@ -0,0 +1,3 @@ +.foo { + color: rebeccapurple; +} \ No newline at end of file diff --git a/test/configCases/css/export-type/icss-export.modules.css b/test/configCases/css/export-type/icss-export.modules.css new file mode 100644 index 00000000000..49ffc948c2d --- /dev/null +++ b/test/configCases/css/export-type/icss-export.modules.css @@ -0,0 +1,14 @@ +.primary { + color: #007bff; +} + +.secondary { + color: #6c757d; +} + +:export { + primaryColor: #007bff; + secondaryColor: #6c757d; + spacing: 16px; +} + diff --git a/test/configCases/css/export-type/icss-stylesheet.modules.css b/test/configCases/css/export-type/icss-stylesheet.modules.css new file mode 100644 index 00000000000..b1c9eb1e22c --- /dev/null +++ b/test/configCases/css/export-type/icss-stylesheet.modules.css @@ -0,0 +1,15 @@ +:import("./icss-export.modules.css") { + imported-primary: primaryColor; + imported-secondary: secondaryColor; +} + +.sheet-button { + background-color: imported-primary; + color: white; +} + +.sheet-badge { + background-color: imported-secondary; + border-radius: 4px; +} + diff --git a/test/configCases/css/export-type/icss-text.modules.css b/test/configCases/css/export-type/icss-text.modules.css new file mode 100644 index 00000000000..55fde5daedd --- /dev/null +++ b/test/configCases/css/export-type/icss-text.modules.css @@ -0,0 +1,16 @@ +:import("./icss-export.modules.css") { + i-primary: primaryColor; + i-secondary: secondaryColor; + i-spacing: spacing; +} + +.button { + background-color: i-primary; + border-color: i-secondary; + padding: i-spacing; +} + +.link { + color: i-primary; +} + diff --git a/test/configCases/css/export-type/img.png b/test/configCases/css/export-type/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/export-type/img.png differ diff --git a/test/configCases/css/export-type/imported-base.css b/test/configCases/css/export-type/imported-base.css new file mode 100644 index 00000000000..e5fb886e1e6 --- /dev/null +++ b/test/configCases/css/export-type/imported-base.css @@ -0,0 +1,5 @@ +.imported-base { + color: blue; + font-size: 14px; +} + diff --git a/test/configCases/css/export-type/imported-layer.css b/test/configCases/css/export-type/imported-layer.css new file mode 100644 index 00000000000..841c3fe67a4 --- /dev/null +++ b/test/configCases/css/export-type/imported-layer.css @@ -0,0 +1,5 @@ +.imported-layer { + padding: 10px; + margin: 5px; +} + diff --git a/test/configCases/css/export-type/index.js b/test/configCases/css/export-type/index.js new file mode 100644 index 00000000000..b801816e186 --- /dev/null +++ b/test/configCases/css/export-type/index.js @@ -0,0 +1,99 @@ +import moduleText, { class as moduleTextClass } from "./module-text.css"; +import autoText from "./auto-text.css"; +import * as moduleTextNoEsm from "./module-text-no-esm.css"; +import autoTextNoEsm from "./auto-text-no-esm.css"; +import moduleWithImports from "./module-with-imports.css"; +import parentModuleWithImports from "./parent-module-with-imports.css"; +import stylesheet from "./stylesheet.css"; +import moduleStylesheet, { secondary as moduleStylesheetSecondary } from "./module-stylesheet.css"; +import icssText, { button as icssTextButton } from "./icss-text.modules.css"; +import icssStylesheet, { "sheet-button" as icssStylesheetButton } from "./icss-stylesheet.modules.css"; +import fooStylesheet from "./foo.css" with { type: "css" }; + +it("should export CSS text as default when exportType is text (css/module)", () => { + expect(typeof moduleText).toBe("string"); + expect(moduleText).toMatchSnapshot(); + + expect(moduleTextClass).toBeTruthy(); +}); + + +it("should export CSS text as default when exportType is text (css/auto)", () => { + expect(typeof autoText).toBe("string"); + expect(autoText).toContain(".auto-text-class"); + expect(autoText).toContain("color: green"); +}); + + +it("should export CSS text when exportType is text and esModule is false (css/module)", () => { + // Named export, warn + expect(moduleTextNoEsm["no-esm-text"]).toBeTruthy(); + expect(moduleTextNoEsm.default["no-esm-text"]).toBeTruthy(); + expect(moduleTextNoEsm).toMatchSnapshot(); +}); + + +it("should export CSS text when exportType is text and esModule is false (css/auto)", () => { + expect(typeof autoTextNoEsm).toBe("string"); + expect(autoTextNoEsm).toContain(".auto-no-esm-text"); + expect(autoTextNoEsm).toContain("color: brown"); +}); + +it("should handle @import with layer, supports, and media queries", () => { + expect(typeof moduleWithImports).toBe("string"); + expect(typeof parentModuleWithImports).toBe("string"); + expect(parentModuleWithImports).toMatchSnapshot(); +}); + +it("should handle ICSS :import with exportType text", () => { + expect(typeof icssText).toBe("string"); + expect(typeof icssTextButton).toBe("string"); + expect(icssText).toContain("background-color: #007bff"); + expect(icssText).toContain("border-color: #6c757d"); + expect(icssText).toContain("padding: 16px"); +}); + +it("should handle ICSS :import with exportType css-style-sheet", () => { + expect(typeof icssStylesheetButton).toBe("string"); + expect(icssStylesheet).toBeInstanceOf(CSSStyleSheet); + expect(icssStylesheet.cssRules.length).toBeGreaterThan(0); + + const rules = Array.from(icssStylesheet.cssRules); + const buttonRule = rules.find(rule => rule.selectorText && rule.selectorText.includes("sheet-button")); + expect(buttonRule).toBeDefined(); + expect(buttonRule.style["background-color"]).toBe("#007bff"); + expect(buttonRule.style.color).toBe("white"); + + const badgeRule = rules.find(rule => rule.selectorText && rule.selectorText.includes("sheet-badge")); + expect(badgeRule).toBeDefined(); + expect(badgeRule.style["background-color"]).toBe("#6c757d"); + expect(badgeRule.style["border-radius"]).toBe("4px"); +}); + +it("should export CSSStyleSheet when exportType is css-style-sheet (css/auto)", () => { + expect(stylesheet).toBeInstanceOf(CSSStyleSheet); + expect(stylesheet.cssRules.length).toBeGreaterThan(0); + + const rules = Array.from(stylesheet.cssRules); + const stylesheetRule = rules.find(rule => rule.selectorText === ".stylesheet-class"); + expect(stylesheetRule).toBeDefined(); + expect(stylesheetRule.style.color).toBe("purple"); + expect(stylesheetRule.style["font-weight"]).toBe("bold"); +}); + +it("should export CSSStyleSheet when exportType is css-style-sheet (css/module)", () => { + expect(typeof moduleStylesheetSecondary).toBe("string"); + expect(moduleStylesheet).toBeInstanceOf(CSSStyleSheet); + expect(moduleStylesheet.cssRules.length).toBeGreaterThan(0); + + const rules = Array.from(moduleStylesheet.cssRules); + const moduleRule = rules.find(rule => rule.selectorText && rule.selectorText.includes("module-stylesheet")); + expect(moduleRule).toBeDefined(); + expect(moduleRule.style.color).toBe("orange"); + expect(moduleRule.style.padding).toBe("20px"); +}); + + +it("should export CSSStyleSheet when imported with { type: 'css' } even with existing exportType text instance", () => { + expect(fooStylesheet).toBeInstanceOf(CSSStyleSheet); +}); \ No newline at end of file diff --git a/test/configCases/css/export-type/module-stylesheet.css b/test/configCases/css/export-type/module-stylesheet.css new file mode 100644 index 00000000000..fffc20dcca0 --- /dev/null +++ b/test/configCases/css/export-type/module-stylesheet.css @@ -0,0 +1,9 @@ +.module-stylesheet { + color: orange; + padding: 20px; +} + +.secondary { + background: lightblue; +} + diff --git a/test/configCases/css/export-type/module-text-no-esm.css b/test/configCases/css/export-type/module-text-no-esm.css new file mode 100644 index 00000000000..b476e7ac5aa --- /dev/null +++ b/test/configCases/css/export-type/module-text-no-esm.css @@ -0,0 +1,9 @@ +.no-esm-text { + color: orange; + background: lightgray; +} + +.another { + text-align: center; +} + diff --git a/test/configCases/css/export-type/module-text.css b/test/configCases/css/export-type/module-text.css new file mode 100644 index 00000000000..9f864839132 --- /dev/null +++ b/test/configCases/css/export-type/module-text.css @@ -0,0 +1,9 @@ +.class { + color: red; + background: white; +} + +.another-class { + font-size: 16px; +} + diff --git a/test/configCases/css/export-type/module-with-imports.css b/test/configCases/css/export-type/module-with-imports.css new file mode 100644 index 00000000000..9ba15c465f3 --- /dev/null +++ b/test/configCases/css/export-type/module-with-imports.css @@ -0,0 +1,32 @@ +@import url("./foo.css"); +@import url("./auto-text-no-esm.css"); + +@import url("./imported-layer.css") layer(utilities); +@import url("./imported-base.css") supports(display: grid); +@import url("./imported-base.css") screen and (min-width: 768px); +@import url("./imported-layer.css") layer(components) supports(display: flex) screen and (max-width: 1024px); + +.main-class { + color: purple; + display: flex; + background-image: url("./img.png"); +} + +@layer base { + .base-class { + font-family: sans-serif; + } +} + +@supports (display: grid) { + .grid-class { + display: grid; + } +} + +@media (min-width: 600px) { + .responsive-class { + width: 100%; + } +} + diff --git a/test/configCases/css/export-type/parent-module-with-imports.css b/test/configCases/css/export-type/parent-module-with-imports.css new file mode 100644 index 00000000000..ea32524e90f --- /dev/null +++ b/test/configCases/css/export-type/parent-module-with-imports.css @@ -0,0 +1,2 @@ +@import url("./module-with-imports.css") layer(framework) supports(display: flex) screen and (min-width: 1024px); + diff --git a/test/configCases/css/export-type/stylesheet.css b/test/configCases/css/export-type/stylesheet.css new file mode 100644 index 00000000000..89cb0aa7fbb --- /dev/null +++ b/test/configCases/css/export-type/stylesheet.css @@ -0,0 +1,9 @@ +.stylesheet-class { + color: purple; + font-weight: bold; +} + +.another-class { + margin: 10px; +} + diff --git a/test/configCases/css/export-type/warnings.js b/test/configCases/css/export-type/warnings.js new file mode 100644 index 00000000000..908996ce1ad --- /dev/null +++ b/test/configCases/css/export-type/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + /Should not import the named export 'no-esm-text'/, + /Should not import the named export 'no-esm-text'/ +]; diff --git a/test/configCases/css/export-type/webpack.config.js b/test/configCases/css/export-type/webpack.config.js new file mode 100644 index 00000000000..ae5b7678c36 --- /dev/null +++ b/test/configCases/css/export-type/webpack.config.js @@ -0,0 +1,107 @@ +"use strict"; + +/** @typedef {import("../../../../").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration} */ + +/** + * @param {object} options Configuration options + * @param {boolean=} options.concatenateModules Whether to concatenate modules + * @returns {import("../../../../").Configuration} Webpack configuration + */ +const getConfig = ({ concatenateModules } = { concatenateModules: false }) => ({ + devtool: false, + target: "web", + mode: "development", + optimization: { + chunkIds: "named", + concatenateModules + }, + module: { + rules: [ + { + test: /module-text\.css$/, + type: "css/module" + }, + { + test: /auto-text\.css$/, + type: "css/auto" + }, + { + test: /module-text-no-esm\.css$/, + type: "css/module", + generator: { + esModule: false + }, + parser: { + namedExports: false + } + }, + { + test: /auto-text-no-esm\.css$/, + type: "css/auto", + generator: { + esModule: false + }, + parser: { + namedExports: false + } + }, + { + test: /module-with-imports\.css$/, + type: "css/module" + }, + { + test: /imported-(base|layer)\.css$/, + type: "css/module" + }, + { + test: /parent-module-with-imports\.css$/, + type: "css/module" + }, + { + test: /stylesheet\.css$/, + type: "css/auto", + parser: { + exportType: "css-style-sheet" + } + }, + { + test: /module-stylesheet\.css$/, + type: "css/module", + parser: { + exportType: "css-style-sheet" + } + }, + { + test: /icss-export\.modules\.css$/, + type: "css/module" + }, + { + test: /icss-text\.modules\.css$/, + type: "css/module", + parser: { + exportType: "text" + } + }, + { + test: /icss-stylesheet\.modules\.css$/, + type: "css/module", + parser: { + exportType: "css-style-sheet" + } + } + ], + parser: { + css: { + import: true, + exportType: "text" + } + } + }, + experiments: { + css: true + } +}); + +module.exports = [getConfig(), getConfig({ concatenateModules: true })]; diff --git a/test/configCases/css/exports-convention/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/exports-convention/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..f864e25c90a --- /dev/null +++ b/test/configCases/css/exports-convention/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,393 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_as-is-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_as-is-btn-info_is-disabled", + "class": "style_module_css_as-is-class", + "default": "style_module_css_as-is-default", + "foo": "bar", + "foo_bar": "style_module_css_as-is-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css_as-is-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 2`] = ` +Object { + "btn--info_is-disabled_1": "h0uRfl", + "btn-info_is-disabled": "VKLzea", + "class": "_9X1uz4", + "default": "IIfZUH", + "foo": "bar", + "foo_bar": "DW60ly", + "my-btn-info_is-disabled": "value", + "simple": "nQadhD", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 3`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_as-is-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_as-is-btn-info_is-disabled", + "class": "style_module_css_as-is-class", + "default": "style_module_css_as-is-default", + "foo": "bar", + "foo_bar": "style_module_css_as-is-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css_as-is-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 4`] = ` +Object { + "btn--info_is-disabled_1": "h0uRfl", + "btn-info_is-disabled": "VKLzea", + "class": "_9X1uz4", + "default": "IIfZUH", + "foo": "bar", + "foo_bar": "DW60ly", + "my-btn-info_is-disabled": "value", + "simple": "nQadhD", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_camel-case-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-btn--info_is-disabled_1", + "class": "style_module_css_camel-case-class", + "default": "style_module_css_camel-case-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-foo_bar", + "foo_bar": "style_module_css_camel-case-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 2`] = ` +Object { + "btn--info_is-disabled_1": "_9rzO2d", + "btn-info_is-disabled": "qbZx0Y", + "btnInfoIsDisabled": "qbZx0Y", + "btnInfoIsDisabled1": "_9rzO2d", + "class": "uLj_ZJ", + "default": "HBbwDb", + "foo": "bar", + "fooBar": "Kz9Lkr", + "foo_bar": "Kz9Lkr", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "bhkrbv", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 3`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_camel-case-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-btn--info_is-disabled_1", + "class": "style_module_css_camel-case-class", + "default": "style_module_css_camel-case-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-foo_bar", + "foo_bar": "style_module_css_camel-case-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 4`] = ` +Object { + "btn--info_is-disabled_1": "_9rzO2d", + "btn-info_is-disabled": "qbZx0Y", + "btnInfoIsDisabled": "qbZx0Y", + "btnInfoIsDisabled1": "_9rzO2d", + "class": "uLj_ZJ", + "default": "HBbwDb", + "foo": "bar", + "fooBar": "Kz9Lkr", + "foo_bar": "Kz9Lkr", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "bhkrbv", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 1`] = ` +Object { + "btnInfoIsDisabled": "style_module_css_camel-case-only-btnInfoIsDisabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-only-btnInfoIsDisabled1", + "class": "style_module_css_camel-case-only-class", + "default": "style_module_css_camel-case-only-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-only-fooBar", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-only-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 2`] = ` +Object { + "btnInfoIsDisabled": "tWVDJB", + "btnInfoIsDisabled1": "XcwArA", + "class": "NKUbIN", + "default": "uj_jzV", + "foo": "bar", + "fooBar": "_1q-K0I", + "myBtnInfoIsDisabled": "value", + "simple": "BbWfGD", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 3`] = ` +Object { + "btnInfoIsDisabled": "style_module_css_camel-case-only-btnInfoIsDisabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-only-btnInfoIsDisabled1", + "class": "style_module_css_camel-case-only-class", + "default": "style_module_css_camel-case-only-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-only-fooBar", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-only-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 4`] = ` +Object { + "btnInfoIsDisabled": "tWVDJB", + "btnInfoIsDisabled1": "XcwArA", + "class": "NKUbIN", + "default": "uj_jzV", + "foo": "bar", + "fooBar": "_1q-K0I", + "myBtnInfoIsDisabled": "value", + "simple": "BbWfGD", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "class": "style_module_css_dashes-class", + "default": "style_module_css_dashes-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 2`] = ` +Object { + "btn--info_is-disabled_1": "aM7U7f", + "btn-info_is-disabled": "c5a9L4", + "btnInfo_isDisabled": "c5a9L4", + "btnInfo_isDisabled_1": "aM7U7f", + "class": "aIIX50", + "default": "bCs1Ll", + "foo": "bar", + "foo_bar": "HLzPse", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "G-zpOE", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 3`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "class": "style_module_css_dashes-class", + "default": "style_module_css_dashes-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 4`] = ` +Object { + "btn--info_is-disabled_1": "aM7U7f", + "btn-info_is-disabled": "c5a9L4", + "btnInfo_isDisabled": "c5a9L4", + "btnInfo_isDisabled_1": "aM7U7f", + "class": "aIIX50", + "default": "bCs1Ll", + "foo": "bar", + "foo_bar": "HLzPse", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "G-zpOE", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 1`] = ` +Object { + "btnInfo_isDisabled": "style_module_css_dashes-only-btnInfo_isDisabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-only-btnInfo_isDisabled_1", + "class": "style_module_css_dashes-only-class", + "default": "style_module_css_dashes-only-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-only-foo_bar", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-only-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 2`] = ` +Object { + "btnInfo_isDisabled": "fG7JbK", + "btnInfo_isDisabled_1": "tPWB1n", + "class": "tKttCk", + "default": "ovH3w9", + "foo": "bar", + "foo_bar": "NfxY76", + "myBtnInfo_isDisabled": "value", + "simple": "edJxRs", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 3`] = ` +Object { + "btnInfo_isDisabled": "style_module_css_dashes-only-btnInfo_isDisabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-only-btnInfo_isDisabled_1", + "class": "style_module_css_dashes-only-class", + "default": "style_module_css_dashes-only-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-only-foo_bar", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-only-simple", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 4`] = ` +Object { + "btnInfo_isDisabled": "fG7JbK", + "btnInfo_isDisabled_1": "tPWB1n", + "class": "tKttCk", + "default": "ovH3w9", + "foo": "bar", + "foo_bar": "NfxY76", + "myBtnInfo_isDisabled": "value", + "simple": "edJxRs", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper 1`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-CLASS", + "DEFAULT": "style_module_css_upper-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-SIMPLE", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper 2`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "x7XUsO", + "BTN-INFO_IS-DISABLED": "mtkl8q", + "CLASS": "ZOe2qu", + "DEFAULT": "w1lug9", + "FOO": "bar", + "FOO_BAR": "_5cbScz", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "lZQwR-", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper 3`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-CLASS", + "DEFAULT": "style_module_css_upper-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-SIMPLE", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper 4`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "x7XUsO", + "BTN-INFO_IS-DISABLED": "mtkl8q", + "CLASS": "ZOe2qu", + "DEFAULT": "w1lug9", + "FOO": "bar", + "FOO_BAR": "_5cbScz", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "lZQwR-", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 1`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-no-named-exports-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-no-named-exports-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-no-named-exports-CLASS", + "DEFAULT": "style_module_css_upper-no-named-exports-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-no-named-exports-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-no-named-exports-SIMPLE", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 2`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "qyQTB8", + "BTN-INFO_IS-DISABLED": "emVwWp", + "CLASS": "lBiVDX", + "DEFAULT": "_781BMr", + "FOO": "bar", + "FOO_BAR": "jzFqhs", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "j11jPT", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 3`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-no-named-exports-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-no-named-exports-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-no-named-exports-CLASS", + "DEFAULT": "style_module_css_upper-no-named-exports-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-no-named-exports-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-no-named-exports-SIMPLE", +} +`; + +exports[`ConfigCacheTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 4`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "qyQTB8", + "BTN-INFO_IS-DISABLED": "emVwWp", + "CLASS": "lBiVDX", + "DEFAULT": "_781BMr", + "FOO": "bar", + "FOO_BAR": "jzFqhs", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "j11jPT", +} +`; diff --git a/test/configCases/css/exports-convention/__snapshots__/ConfigTest.snap b/test/configCases/css/exports-convention/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..1b324d788e9 --- /dev/null +++ b/test/configCases/css/exports-convention/__snapshots__/ConfigTest.snap @@ -0,0 +1,393 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_as-is-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_as-is-btn-info_is-disabled", + "class": "style_module_css_as-is-class", + "default": "style_module_css_as-is-default", + "foo": "bar", + "foo_bar": "style_module_css_as-is-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css_as-is-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 2`] = ` +Object { + "btn--info_is-disabled_1": "h0uRfl", + "btn-info_is-disabled": "VKLzea", + "class": "_9X1uz4", + "default": "IIfZUH", + "foo": "bar", + "foo_bar": "DW60ly", + "my-btn-info_is-disabled": "value", + "simple": "nQadhD", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 3`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_as-is-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_as-is-btn-info_is-disabled", + "class": "style_module_css_as-is-class", + "default": "style_module_css_as-is-default", + "foo": "bar", + "foo_bar": "style_module_css_as-is-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css_as-is-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: as-is 4`] = ` +Object { + "btn--info_is-disabled_1": "h0uRfl", + "btn-info_is-disabled": "VKLzea", + "class": "_9X1uz4", + "default": "IIfZUH", + "foo": "bar", + "foo_bar": "DW60ly", + "my-btn-info_is-disabled": "value", + "simple": "nQadhD", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_camel-case-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-btn--info_is-disabled_1", + "class": "style_module_css_camel-case-class", + "default": "style_module_css_camel-case-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-foo_bar", + "foo_bar": "style_module_css_camel-case-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 2`] = ` +Object { + "btn--info_is-disabled_1": "_9rzO2d", + "btn-info_is-disabled": "qbZx0Y", + "btnInfoIsDisabled": "qbZx0Y", + "btnInfoIsDisabled1": "_9rzO2d", + "class": "uLj_ZJ", + "default": "HBbwDb", + "foo": "bar", + "fooBar": "Kz9Lkr", + "foo_bar": "Kz9Lkr", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "bhkrbv", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 3`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_camel-case-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled": "style_module_css_camel-case-btn-info_is-disabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-btn--info_is-disabled_1", + "class": "style_module_css_camel-case-class", + "default": "style_module_css_camel-case-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-foo_bar", + "foo_bar": "style_module_css_camel-case-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case 4`] = ` +Object { + "btn--info_is-disabled_1": "_9rzO2d", + "btn-info_is-disabled": "qbZx0Y", + "btnInfoIsDisabled": "qbZx0Y", + "btnInfoIsDisabled1": "_9rzO2d", + "class": "uLj_ZJ", + "default": "HBbwDb", + "foo": "bar", + "fooBar": "Kz9Lkr", + "foo_bar": "Kz9Lkr", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "bhkrbv", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 1`] = ` +Object { + "btnInfoIsDisabled": "style_module_css_camel-case-only-btnInfoIsDisabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-only-btnInfoIsDisabled1", + "class": "style_module_css_camel-case-only-class", + "default": "style_module_css_camel-case-only-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-only-fooBar", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-only-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 2`] = ` +Object { + "btnInfoIsDisabled": "tWVDJB", + "btnInfoIsDisabled1": "XcwArA", + "class": "NKUbIN", + "default": "uj_jzV", + "foo": "bar", + "fooBar": "_1q-K0I", + "myBtnInfoIsDisabled": "value", + "simple": "BbWfGD", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 3`] = ` +Object { + "btnInfoIsDisabled": "style_module_css_camel-case-only-btnInfoIsDisabled", + "btnInfoIsDisabled1": "style_module_css_camel-case-only-btnInfoIsDisabled1", + "class": "style_module_css_camel-case-only-class", + "default": "style_module_css_camel-case-only-default", + "foo": "bar", + "fooBar": "style_module_css_camel-case-only-fooBar", + "myBtnInfoIsDisabled": "value", + "simple": "style_module_css_camel-case-only-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: camel-case-only 4`] = ` +Object { + "btnInfoIsDisabled": "tWVDJB", + "btnInfoIsDisabled1": "XcwArA", + "class": "NKUbIN", + "default": "uj_jzV", + "foo": "bar", + "fooBar": "_1q-K0I", + "myBtnInfoIsDisabled": "value", + "simple": "BbWfGD", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "class": "style_module_css_dashes-class", + "default": "style_module_css_dashes-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 2`] = ` +Object { + "btn--info_is-disabled_1": "aM7U7f", + "btn-info_is-disabled": "c5a9L4", + "btnInfo_isDisabled": "c5a9L4", + "btnInfo_isDisabled_1": "aM7U7f", + "class": "aIIX50", + "default": "bCs1Ll", + "foo": "bar", + "foo_bar": "HLzPse", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "G-zpOE", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 3`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled": "style_module_css_dashes-btn-info_is-disabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-btn--info_is-disabled_1", + "class": "style_module_css_dashes-class", + "default": "style_module_css_dashes-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-foo_bar", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes 4`] = ` +Object { + "btn--info_is-disabled_1": "aM7U7f", + "btn-info_is-disabled": "c5a9L4", + "btnInfo_isDisabled": "c5a9L4", + "btnInfo_isDisabled_1": "aM7U7f", + "class": "aIIX50", + "default": "bCs1Ll", + "foo": "bar", + "foo_bar": "HLzPse", + "my-btn-info_is-disabled": "value", + "myBtnInfo_isDisabled": "value", + "simple": "G-zpOE", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 1`] = ` +Object { + "btnInfo_isDisabled": "style_module_css_dashes-only-btnInfo_isDisabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-only-btnInfo_isDisabled_1", + "class": "style_module_css_dashes-only-class", + "default": "style_module_css_dashes-only-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-only-foo_bar", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-only-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 2`] = ` +Object { + "btnInfo_isDisabled": "fG7JbK", + "btnInfo_isDisabled_1": "tPWB1n", + "class": "tKttCk", + "default": "ovH3w9", + "foo": "bar", + "foo_bar": "NfxY76", + "myBtnInfo_isDisabled": "value", + "simple": "edJxRs", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 3`] = ` +Object { + "btnInfo_isDisabled": "style_module_css_dashes-only-btnInfo_isDisabled", + "btnInfo_isDisabled_1": "style_module_css_dashes-only-btnInfo_isDisabled_1", + "class": "style_module_css_dashes-only-class", + "default": "style_module_css_dashes-only-default", + "foo": "bar", + "foo_bar": "style_module_css_dashes-only-foo_bar", + "myBtnInfo_isDisabled": "value", + "simple": "style_module_css_dashes-only-simple", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: dashes-only 4`] = ` +Object { + "btnInfo_isDisabled": "fG7JbK", + "btnInfo_isDisabled_1": "tPWB1n", + "class": "tKttCk", + "default": "ovH3w9", + "foo": "bar", + "foo_bar": "NfxY76", + "myBtnInfo_isDisabled": "value", + "simple": "edJxRs", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper 1`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-CLASS", + "DEFAULT": "style_module_css_upper-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-SIMPLE", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper 2`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "x7XUsO", + "BTN-INFO_IS-DISABLED": "mtkl8q", + "CLASS": "ZOe2qu", + "DEFAULT": "w1lug9", + "FOO": "bar", + "FOO_BAR": "_5cbScz", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "lZQwR-", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper 3`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-CLASS", + "DEFAULT": "style_module_css_upper-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-SIMPLE", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper 4`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "x7XUsO", + "BTN-INFO_IS-DISABLED": "mtkl8q", + "CLASS": "ZOe2qu", + "DEFAULT": "w1lug9", + "FOO": "bar", + "FOO_BAR": "_5cbScz", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "lZQwR-", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 1`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-no-named-exports-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-no-named-exports-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-no-named-exports-CLASS", + "DEFAULT": "style_module_css_upper-no-named-exports-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-no-named-exports-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-no-named-exports-SIMPLE", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 2`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "qyQTB8", + "BTN-INFO_IS-DISABLED": "emVwWp", + "CLASS": "lBiVDX", + "DEFAULT": "_781BMr", + "FOO": "bar", + "FOO_BAR": "jzFqhs", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "j11jPT", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 3`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "style_module_css_upper-no-named-exports-BTN--INFO_IS-DISABLED_1", + "BTN-INFO_IS-DISABLED": "style_module_css_upper-no-named-exports-BTN-INFO_IS-DISABLED", + "CLASS": "style_module_css_upper-no-named-exports-CLASS", + "DEFAULT": "style_module_css_upper-no-named-exports-DEFAULT", + "FOO": "bar", + "FOO_BAR": "style_module_css_upper-no-named-exports-FOO_BAR", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "style_module_css_upper-no-named-exports-SIMPLE", +} +`; + +exports[`ConfigTestCases css exports-convention exported tests should have correct convention for css exports name: upper-and-no-named-export 4`] = ` +Object { + "BTN--INFO_IS-DISABLED_1": "qyQTB8", + "BTN-INFO_IS-DISABLED": "emVwWp", + "CLASS": "lBiVDX", + "DEFAULT": "_781BMr", + "FOO": "bar", + "FOO_BAR": "jzFqhs", + "MY-BTN-INFO_IS-DISABLED": "value", + "SIMPLE": "j11jPT", +} +`; diff --git a/test/configCases/css/exports-convention/index.js b/test/configCases/css/exports-convention/index.js new file mode 100644 index 00000000000..31e15451560 --- /dev/null +++ b/test/configCases/css/exports-convention/index.js @@ -0,0 +1,52 @@ +import * as styles1 from "./style.module.css?camel-case#1"; +import * as styles2 from "./style.module.css?camel-case#2"; + +const prod = process.env.NODE_ENV === "production"; +const target = process.env.TARGET; + +it("concatenation and mangling should work", () => { + expect(styles1.class).toBe(prod ? "w3DuhZ" : "style_module_css_camel-case_1-class"); + expect(styles1["default"]).toBe(prod ? "WsJIKm" : "style_module_css_camel-case_1-default"); + expect(styles1.fooBar).toBe(prod ? "HTuZs8" : "style_module_css_camel-case_1-foo_bar"); + expect(styles1.foo_bar).toBe(prod ? "HTuZs8" :"style_module_css_camel-case_1-foo_bar"); + + if (prod) { + expect(styles2).toMatchObject({ + "btn--info_is-disabled_1": "mnMWBb", + "btn-info_is-disabled": "ZfxL8J", + "btnInfoIsDisabled": "ZfxL8J", + "btnInfoIsDisabled1": "mnMWBb", + "class": "IrXVSh", + "default": "qflDly", + "foo": "bar", + "fooBar": "olf66b", + "foo_bar": "olf66b", + "my-btn-info_is-disabled": "value", + "myBtnInfoIsDisabled": "value", + "simple": "_8cG3vB", + }); + + expect(Object.keys(__webpack_modules__).length).toBe(target === "web" ? 8 : 1) + } +}); + +it("should have correct convention for css exports name", (done) => { + Promise.all([ + import("./style.module.css?as-is"), + import("./style.module.css?camel-case"), + import("./style.module.css?camel-case-only"), + import("./style.module.css?dashes"), + import("./style.module.css?dashes-only"), + import("./style.module.css?upper"), + import("./style.module.css?upper-no-named-exports"), + ]).then(([asIs, camelCase, camelCaseOnly, dashes, dashesOnly, upper, upperNoNamedExport]) => { + expect(asIs).toMatchSnapshot('as-is'); + expect(camelCase).toMatchSnapshot('camel-case'); + expect(camelCaseOnly).toMatchSnapshot('camel-case-only'); + expect(dashes).toMatchSnapshot('dashes'); + expect(dashesOnly).toMatchSnapshot('dashes-only'); + expect(upper).toMatchSnapshot('upper'); + expect(upperNoNamedExport.default).toMatchSnapshot('upper-and-no-named-export'); + done() + }).catch(done) +}); diff --git a/test/configCases/css/exports-convention/style.module.css b/test/configCases/css/exports-convention/style.module.css new file mode 100644 index 00000000000..702f167df1e --- /dev/null +++ b/test/configCases/css/exports-convention/style.module.css @@ -0,0 +1,32 @@ +.btn-info_is-disabled { + color: blue; +} + +.btn--info_is-disabled_1 { + color: blue; +} + +.simple { + color: red; +} + +a { + color: yellow; +} + +:export { + foo: bar; + my-btn-info_is-disabled: value; +} + +.foo_bar { + color: red; +} + +.class { + color: green; +} + +.default { + color: blue; +} diff --git a/test/configCases/css/exports-convention/test.config.js b/test/configCases/css/exports-convention/test.config.js new file mode 100644 index 00000000000..677bd29f1eb --- /dev/null +++ b/test/configCases/css/exports-convention/test.config.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return [ + `style_module_css_as-is.bundle${i}.js`, + `style_module_css_camel-case.bundle${i}.js`, + `style_module_css_camel-case-only.bundle${i}.js`, + `style_module_css_dashes.bundle${i}.js`, + `style_module_css_dashes-only.bundle${i}.js`, + `style_module_css_upper.bundle${i}.js`, + `style_module_css_upper-no-named-exports.bundle${i}.js`, + `bundle${i}.js` + ]; + } +}; diff --git a/test/configCases/css/exports-convention/webpack.config.js b/test/configCases/css/exports-convention/webpack.config.js new file mode 100644 index 00000000000..1887cec4540 --- /dev/null +++ b/test/configCases/css/exports-convention/webpack.config.js @@ -0,0 +1,118 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @typedef {import("../../../../").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */ +/** @typedef {import("../../../../").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */ + +const common = { + optimization: { + chunkIds: "named" + }, + module: { + rules: [ + { + test: /\.module\.css$/, + type: "css/module", + oneOf: [ + { + resourceQuery: /\?as-is$/, + generator: { + exportsConvention: "as-is" + } + }, + { + resourceQuery: /\?camel-case$/, + generator: { + exportsConvention: "camel-case" + } + }, + { + resourceQuery: /\?camel-case-only$/, + generator: { + exportsConvention: "camel-case-only" + } + }, + { + resourceQuery: /\?dashes$/, + generator: { + exportsConvention: "dashes" + } + }, + { + resourceQuery: /\?dashes-only$/, + generator: { + exportsConvention: "dashes-only" + } + }, + { + resourceQuery: /\?upper$/, + /** @type {GeneratorOptionsByModuleTypeKnown["css/module"]} */ + generator: { + exportsConvention: (name) => name.toUpperCase() + } + }, + { + resourceQuery: /\?upper-no-named-exports$/, + /** @type {ParserOptionsByModuleTypeKnown["css/module"]} */ + parser: { + namedExports: false + }, + /** @type {GeneratorOptionsByModuleTypeKnown["css/module"]} */ + generator: { + exportsConvention: (name) => name.toUpperCase() + } + } + ] + } + ] + }, + experiments: { + css: true + } +}; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + ...common, + mode: "development", + target: "web", + plugins: [ + new webpack.DefinePlugin({ + "process.env.TARGET": JSON.stringify("web") + }) + ] + }, + { + ...common, + devtool: false, + mode: "production", + target: "web", + plugins: [ + new webpack.DefinePlugin({ + "process.env.TARGET": JSON.stringify("web") + }) + ] + }, + { + ...common, + mode: "development", + target: "node", + plugins: [ + new webpack.DefinePlugin({ + "process.env.TARGET": JSON.stringify("node") + }) + ] + }, + { + ...common, + mode: "production", + target: "node", + plugins: [ + new webpack.DefinePlugin({ + "process.env.TARGET": JSON.stringify("node") + }) + ] + } +]; diff --git a/test/configCases/css/exports-in-node/index.js b/test/configCases/css/exports-in-node/index.js new file mode 100644 index 00000000000..5ea47f3f189 --- /dev/null +++ b/test/configCases/css/exports-in-node/index.js @@ -0,0 +1,74 @@ +import * as style from "../pseudo-export/style.module.css?ns"; +import { a, abc } from "../pseudo-export/style.module.css?picked"; +import def from "../pseudo-export/style.module.css?default"; + +it("should allow to import a css module", () => { + expect(style).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }) + ); + expect(a).toBe("a"); + expect(abc).toBe("a b c"); + expect(def).toBe("default"); +}); + +it("should allow to dynamic import a css module", done => { + import("../pseudo-export/style.module.css").then(x => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); + +it("should allow to reexport a css module", done => { + import("../pseudo-export/reexported").then(x => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); + +it("should allow to import a css module", done => { + import("../pseudo-export/imported").then(({ default: x }) => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); diff --git a/test/configCases/css/exports-in-node/webpack.config.js b/test/configCases/css/exports-in-node/webpack.config.js new file mode 100644 index 00000000000..8cfa4eda679 --- /dev/null +++ b/test/configCases/css/exports-in-node/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/exports-only-generator-options/index.js b/test/configCases/css/exports-only-generator-options/index.js new file mode 100644 index 00000000000..f0835d411ee --- /dev/null +++ b/test/configCases/css/exports-only-generator-options/index.js @@ -0,0 +1,26 @@ +it("should not have .css file", (done) => { + __non_webpack_require__("./pseudo-export_style_module_css.bundle0.js"); + __non_webpack_require__("./pseudo-export_style_module_css_exportsOnly.bundle0.js"); + Promise.all([ + import("../pseudo-export/style.module.css"), + import("../pseudo-export/style.module.css?module"), + import("../pseudo-export/style.module.css?exportsOnly"), + ]).then(([style1, style2, style3]) => { + const ns = nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }); + expect(style1).toEqual(ns); + expect(style2).toEqual(ns); + expect(style3).toEqual(ns); + }).then(() => { + const fs = __non_webpack_require__("fs"); + const path = __non_webpack_require__("path"); + expect(fs.existsSync(path.resolve(__dirname, "pseudo-export_style_module_css.bundle0.css"))).toBe(false); + expect(fs.existsSync(path.resolve(__dirname, "pseudo-export_style_module_css_exportsOnly.bundle0.css"))).toBe(false); + done() + }).catch(e => done(e)) +}); diff --git a/test/configCases/css/exports-only-generator-options/test.config.js b/test/configCases/css/exports-only-generator-options/test.config.js new file mode 100644 index 00000000000..cfe0f964059 --- /dev/null +++ b/test/configCases/css/exports-only-generator-options/test.config.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "pseudo-export_style_module_css.bundle0.js", + "pseudo-export_style_module_css_module.bundle0.js", + "pseudo-export_style_module_css_exportsOnly.bundle0.js", + "bundle0.js" + ]; + } +}; diff --git a/test/configCases/css/exports-only-generator-options/webpack.config.js b/test/configCases/css/exports-only-generator-options/webpack.config.js new file mode 100644 index 00000000000..79d12a89389 --- /dev/null +++ b/test/configCases/css/exports-only-generator-options/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + target: "web", + mode: "development", + module: { + generator: { + css: { + exportsOnly: true + }, + "css/module": { + exportsOnly: false + } + }, + rules: [ + { + resourceQuery: /\?module/, + type: "css/module" + }, + { + resourceQuery: /\?exportsOnly/, + generator: { + exportsOnly: true + }, + type: "css/global" + } + ] + }, + experiments: { + css: true + }, + node: { + __dirname: false + } + } +]; diff --git a/test/configCases/css/external-in-node/dynamic.modules.css b/test/configCases/css/external-in-node/dynamic.modules.css new file mode 100644 index 00000000000..ee599f756ff --- /dev/null +++ b/test/configCases/css/external-in-node/dynamic.modules.css @@ -0,0 +1,6 @@ +@import "style2.modules.css"; +@import "https://test.cases/path/../../../../configCases/css/external-in-web/dynamic-external.css"; + +.other { + color: blue; +} diff --git a/test/configCases/css/external-in-node/errors.js b/test/configCases/css/external-in-node/errors.js new file mode 100644 index 00000000000..73b9c1656dd --- /dev/null +++ b/test/configCases/css/external-in-node/errors.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = [ + [ + /UnhandledSchemeError: Reading from "https:\/\/test\.cases\/url-external\.css"/ + ], + [/UnhandledSchemeError: Reading from "https:\/\/test\.cases\/external\.css"/], + [ + /UnhandledSchemeError: Reading from "https:\/\/test\.cases\/url-external\.css"/ + ], + [/UnhandledSchemeError: Reading from "https:\/\/test\.cases\/external\.css"/] +]; diff --git a/test/configCases/css/external-in-node/index.js b/test/configCases/css/external-in-node/index.js new file mode 100644 index 00000000000..507b90d7274 --- /dev/null +++ b/test/configCases/css/external-in-node/index.js @@ -0,0 +1,27 @@ +import * as style from "./style.module.css"; +import * as style1 from "https://test.cases/external.css"; + +it("should import an external CSS inside CSS", () => { + expect(style).toEqual( + nsObj({ + class: "_external-in-node_style_module_css-class" + }) + ); +}); + +it("should work with an external URL", () => { + const url = new URL("https://test.cases/url-external.css", import.meta.url); + + expect(url.toString().endsWith("url-external.css")).toBe(true); +}); + +it("should import an external css dynamically", done => { + import("./dynamic.modules.css").then(x => { + expect(x).toEqual( + nsObj({ + other: "_external-in-node_dynamic_modules_css-other" + }) + ); + done(); + }, done); +}); diff --git a/test/configCases/css/external-in-node/infrastructure-log.js b/test/configCases/css/external-in-node/infrastructure-log.js new file mode 100644 index 00000000000..6e8e0098774 --- /dev/null +++ b/test/configCases/css/external-in-node/infrastructure-log.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = (options) => { + if (options[0].cache && options[0].cache.type === "filesystem") { + return [ + /Pack got invalid because of write to/, + /Pack got invalid because of write to/ + ]; + } + + return []; +}; diff --git a/test/configCases/css/external-in-node/style.module.css b/test/configCases/css/external-in-node/style.module.css new file mode 100644 index 00000000000..84799d64726 --- /dev/null +++ b/test/configCases/css/external-in-node/style.module.css @@ -0,0 +1,5 @@ +@import "https://test.cases/path/../../../../configCases/css/external-in-web/external.css"; + +.class { + padding: 10px; +} diff --git a/test/configCases/css/external-in-node/style2.modules.css b/test/configCases/css/external-in-node/style2.modules.css new file mode 100644 index 00000000000..326ac4a1831 --- /dev/null +++ b/test/configCases/css/external-in-node/style2.modules.css @@ -0,0 +1,4 @@ +body { + background: url(//example.com/image.png) url(https://example.com/image.png); + background-image: url(http://example.com/image.png); +} diff --git a/test/configCases/css/external-in-node/webpack.config.js b/test/configCases/css/external-in-node/webpack.config.js new file mode 100644 index 00000000000..4f3f4b5951b --- /dev/null +++ b/test/configCases/css/external-in-node/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + context: path.join(__dirname, "../external"), + entry: "../external-in-node/index.js", + target: "node", + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + experiments: { + css: true + } + }, + { + context: path.join(__dirname, "../external"), + entry: "../external-in-node/index.js", + target: "node", + optimization: { + chunkIds: "named", + moduleIds: "named" + }, + experiments: { + css: true, + outputModule: true + } + } +]; diff --git a/test/configCases/css/external-in-web/dynamic-external.css b/test/configCases/css/external-in-web/dynamic-external.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/css/external-in-web/dynamic-external.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/css/external-in-web/dynamic.css b/test/configCases/css/external-in-web/dynamic.css new file mode 100644 index 00000000000..90b4a68e56a --- /dev/null +++ b/test/configCases/css/external-in-web/dynamic.css @@ -0,0 +1,2 @@ +@import "style2.css"; +@import "https://test.cases/path/../../../../configCases/css/external-in-web/dynamic-external.css"; diff --git a/test/configCases/css/external-in-web/external.css b/test/configCases/css/external-in-web/external.css new file mode 100644 index 00000000000..f815695493b --- /dev/null +++ b/test/configCases/css/external-in-web/external.css @@ -0,0 +1,3 @@ +body { + color: green; +} diff --git a/test/configCases/css/external-in-web/index.js b/test/configCases/css/external-in-web/index.js new file mode 100644 index 00000000000..d43c2b37502 --- /dev/null +++ b/test/configCases/css/external-in-web/index.js @@ -0,0 +1,31 @@ +import * as style from "./style.css"; + +it("should import an external CSS inside CSS", () => { + const bodyStyle = getComputedStyle(document.body); + + expect(bodyStyle.getPropertyValue("color")).toBe(" green"); + expect(bodyStyle.getPropertyValue("padding")).toBe(" 10px"); +}); + +// import * as style1 from "http://test.com/import.css"; + +it("should work with an external URL", () => { + const url = new URL("https://test.cases/url-external.css", import.meta.url); + + expect(url.toString().endsWith("url-external.css")).toBe(true); +}); + +it("should import an external css dynamically", done => { + import("./dynamic.css").then(x => { + expect(x).toEqual({}); + const bodyStyle = getComputedStyle(document.body); + expect(bodyStyle.getPropertyValue("color")).toBe(" red"); + expect(bodyStyle.getPropertyValue("background")).toBe( + " url(//example.com/image.png) url(https://example.com/image.png)" + ); + expect(bodyStyle.getPropertyValue("background-image")).toBe( + " url(http://example.com/image.png)" + ); + done(); + }, done); +}); diff --git a/test/configCases/css/external-in-web/style.css b/test/configCases/css/external-in-web/style.css new file mode 100644 index 00000000000..618dc43ef5b --- /dev/null +++ b/test/configCases/css/external-in-web/style.css @@ -0,0 +1,5 @@ +@import "https://test.cases/path/../../../../configCases/css/external-in-web/external.css"; + +body { + padding: 10px; +} diff --git a/test/configCases/css/external-in-web/style2.css b/test/configCases/css/external-in-web/style2.css new file mode 100644 index 00000000000..326ac4a1831 --- /dev/null +++ b/test/configCases/css/external-in-web/style2.css @@ -0,0 +1,4 @@ +body { + background: url(//example.com/image.png) url(https://example.com/image.png); + background-image: url(http://example.com/image.png); +} diff --git a/test/configCases/css/external-in-web/test.config.js b/test/configCases/css/external-in-web/test.config.js new file mode 100644 index 00000000000..3ad5d09567c --- /dev/null +++ b/test/configCases/css/external-in-web/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + moduleScope(scope, stats) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = stats.experiments.outputModule ? "bundle1.css" : "bundle0.css"; + scope.window.document.head.appendChild(link); + }, + findBundle(i) { + return i === 0 ? ["dynamic_css.bundle0.js", "bundle0.js"] : ["bundle1.mjs"]; + } +}; diff --git a/test/configCases/css/external-in-web/url-external.css b/test/configCases/css/external-in-web/url-external.css new file mode 100644 index 00000000000..3cb1da4d6cf --- /dev/null +++ b/test/configCases/css/external-in-web/url-external.css @@ -0,0 +1,3 @@ +body { + border: 10px red solid; +} diff --git a/test/configCases/css/external-in-web/webpack.config.js b/test/configCases/css/external-in-web/webpack.config.js new file mode 100644 index 00000000000..1ccab186019 --- /dev/null +++ b/test/configCases/css/external-in-web/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + target: "web", + optimization: { + chunkIds: "named" + }, + experiments: { + css: true + } + }, + { + target: "web", + optimization: { + chunkIds: "named" + }, + experiments: { + css: true, + outputModule: true + } + } +]; diff --git a/test/configCases/css/import-at-middle/a.css b/test/configCases/css/import-at-middle/a.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/test/configCases/css/import-at-middle/a.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/configCases/css/import-at-middle/b.css b/test/configCases/css/import-at-middle/b.css new file mode 100644 index 00000000000..575be7ba729 --- /dev/null +++ b/test/configCases/css/import-at-middle/b.css @@ -0,0 +1,10 @@ +body { + background: blue; +} + +@import "./a.css"; +@import url(./a.css); + +body { + color: green; +} diff --git a/test/configCases/css/import-at-middle/c.css b/test/configCases/css/import-at-middle/c.css new file mode 100644 index 00000000000..8fc0fb15442 --- /dev/null +++ b/test/configCases/css/import-at-middle/c.css @@ -0,0 +1,9 @@ +body { + background: red; +} +@import "./a.css"; +@import "./b.css"; + +body { + color: yellow; +} diff --git a/test/configCases/css/import-at-middle/index.js b/test/configCases/css/import-at-middle/index.js new file mode 100644 index 00000000000..9b54f968864 --- /dev/null +++ b/test/configCases/css/import-at-middle/index.js @@ -0,0 +1,9 @@ +import "./style.css"; + +it("should compile with warnings", done => { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" blue"); + expect(style.getPropertyValue("color")).toBe(" green"); + + done(); +}); diff --git a/test/configCases/css/import-at-middle/style.css b/test/configCases/css/import-at-middle/style.css new file mode 100644 index 00000000000..1d835e13228 --- /dev/null +++ b/test/configCases/css/import-at-middle/style.css @@ -0,0 +1,2 @@ +@import "./c.css"; +@import "./b.css"; diff --git a/test/configCases/css/import-at-middle/test.config.js b/test/configCases/css/import-at-middle/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/import-at-middle/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/import-at-middle/warnings.js b/test/configCases/css/import-at-middle/warnings.js new file mode 100644 index 00000000000..2144a7273ff --- /dev/null +++ b/test/configCases/css/import-at-middle/warnings.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + /Any '@import' rules must precede all other rules/, + /Any '@import' rules must precede all other rules/, + /Any '@import' rules must precede all other rules/, + /Any '@import' rules must precede all other rules/ +]; diff --git a/test/configCases/css/import-at-middle/webpack.config.js b/test/configCases/css/import-at-middle/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/import-at-middle/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/import-css-stylesheet/basic.css b/test/configCases/css/import-css-stylesheet/basic.css new file mode 100644 index 00000000000..36341a88502 --- /dev/null +++ b/test/configCases/css/import-css-stylesheet/basic.css @@ -0,0 +1,20 @@ +@import url("./imported.css"); + +.test { + color: red; + background: blue; + + & .child { + color: green; + } +} + +.another { + font-size: 16px; +} + +.with-image { + background-image: url("./test.png"); + width: 100px; + height: 100px; +} diff --git a/test/configCases/css/import-css-stylesheet/imported.css b/test/configCases/css/import-css-stylesheet/imported.css new file mode 100644 index 00000000000..7771a7d9fad --- /dev/null +++ b/test/configCases/css/import-css-stylesheet/imported.css @@ -0,0 +1,5 @@ +.imported { + color: green; + font-style: italic; +} + diff --git a/test/configCases/css/import-css-stylesheet/index.js b/test/configCases/css/import-css-stylesheet/index.js new file mode 100644 index 00000000000..0cb43a15fcf --- /dev/null +++ b/test/configCases/css/import-css-stylesheet/index.js @@ -0,0 +1,58 @@ +import sheet from "./basic.css" with { type: "css" }; +import sheetAssert from "./basic.css" assert { type: "css" }; + +it("should import CSS as CSSStyleSheet with 'with' syntax", () => { + expect(sheet).toBeInstanceOf(CSSStyleSheet); + expect(sheet.cssRules.length).toBeGreaterThan(0); + + // Check that the CSS content is correct + const rules = Array.from(sheet.cssRules); + const testRule = rules.find(rule => rule.selectorText === ".test"); + expect(testRule).toBeDefined(); + expect(testRule.style.color).toBe("red"); + expect(testRule.style.background).toBe("blue"); +}); + +it("should import CSS as CSSStyleSheet with 'assert' syntax", () => { + expect(sheetAssert).toBeInstanceOf(CSSStyleSheet); + expect(sheetAssert.cssRules.length).toBeGreaterThan(0); + + // Check that the CSS content is correct + const rules = Array.from(sheetAssert.cssRules); + const testRule = rules.find(rule => rule.selectorText === ".test"); + expect(testRule).toBeDefined(); +}); + +it("should be able to adopt the stylesheet", () => { + // Test that the stylesheet can be adopted (basic API check) + expect(typeof sheet.replaceSync).toBe("function"); +}); + +it("should handle @import in CSSStyleSheet", () => { + const rules = Array.from(sheet.cssRules); + + // Check that imported styles are included + const importedRule = rules.find(rule => rule.selectorText === ".imported"); + expect(importedRule).toBeDefined(); + expect(importedRule.style.color).toBe("green"); + expect(importedRule.style["font-style"]).toBe("italic"); +}); + +it("should handle url() for images in CSSStyleSheet", () => { + const rules = Array.from(sheet.cssRules); + + // Check that the rule with background-image exists + const imageRule = rules.find(rule => rule.selectorText === ".with-image"); + expect(imageRule).toBeDefined(); + expect(imageRule.style["background-image"]).toContain("url("); + expect(imageRule.style.width).toBe("100px"); + expect(imageRule.style.height).toBe("100px"); +}); + +it("should handle CSS nesting in CSSStyleSheet", () => { + const rules = Array.from(sheet.cssRules); + // CSS nesting syntax (& .child) should be preserved in cssText + const nestedRule = rules.find(rule => rule.cssText.includes("& .child")); + expect(nestedRule).toBeDefined(); + expect(nestedRule.cssText).toContain("color: green"); +}); diff --git a/test/configCases/css/import-css-stylesheet/test.png b/test/configCases/css/import-css-stylesheet/test.png new file mode 100644 index 00000000000..0f2032305c0 --- /dev/null +++ b/test/configCases/css/import-css-stylesheet/test.png @@ -0,0 +1 @@ +iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg== diff --git a/test/configCases/css/import-css-stylesheet/webpack.config.js b/test/configCases/css/import-css-stylesheet/webpack.config.js new file mode 100644 index 00000000000..9194789b677 --- /dev/null +++ b/test/configCases/css/import-css-stylesheet/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/import-different-case/index.js b/test/configCases/css/import-different-case/index.js new file mode 100644 index 00000000000..f2d6eae5a97 --- /dev/null +++ b/test/configCases/css/import-different-case/index.js @@ -0,0 +1,8 @@ +import * as style from "./style.css"; + +it("should compile and load style on demand", () => { + expect(style).toEqual({}); + const computedStyle = getComputedStyle(document.body); + expect(computedStyle.getPropertyValue("background")).toBe(" red"); + expect(computedStyle.getPropertyValue("margin")).toBe(" 10px"); +}); diff --git a/test/configCases/css/import-different-case/style-imported.css b/test/configCases/css/import-different-case/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/import-different-case/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/import-different-case/style.css b/test/configCases/css/import-different-case/style.css new file mode 100644 index 00000000000..602ea2d5aa8 --- /dev/null +++ b/test/configCases/css/import-different-case/style.css @@ -0,0 +1,4 @@ +@IMPORT "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/import-different-case/test.config.js b/test/configCases/css/import-different-case/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/import-different-case/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/import-different-case/webpack.config.js b/test/configCases/css/import-different-case/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/import-different-case/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/import-module/a-pitching-loader.js b/test/configCases/css/import-module/a-pitching-loader.js new file mode 100644 index 00000000000..eb9ad595ce8 --- /dev/null +++ b/test/configCases/css/import-module/a-pitching-loader.js @@ -0,0 +1,9 @@ +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +exports.pitch = async function (remaining) { + const result = await this.importModule( + this.resourcePath + '.webpack[javascript/auto]' + '!=!' + remaining, { + publicPath: '' + }); + + return result.default || result; +}; diff --git a/test/configCases/css/import-module/colors.js b/test/configCases/css/import-module/colors.js new file mode 100644 index 00000000000..91f7b0d0db4 --- /dev/null +++ b/test/configCases/css/import-module/colors.js @@ -0,0 +1,2 @@ +export const red = '#f00'; +export const green = '#0f0'; \ No newline at end of file diff --git a/test/configCases/css/import-module/index.js b/test/configCases/css/import-module/index.js new file mode 100644 index 00000000000..ba908562a78 --- /dev/null +++ b/test/configCases/css/import-module/index.js @@ -0,0 +1,6 @@ +import stylesheet from './stylesheet.js'; + +it("should compile", () => { + expect(stylesheet).toBe("body { background: #f00; color: #0f0; }"); +}); + diff --git a/test/configCases/css/import-module/stylesheet.js b/test/configCases/css/import-module/stylesheet.js new file mode 100644 index 00000000000..a2400fa41d9 --- /dev/null +++ b/test/configCases/css/import-module/stylesheet.js @@ -0,0 +1,3 @@ +import { green, red } from './colors.js'; + +export default `body { background: ${red}; color: ${green}; }`; diff --git a/test/configCases/css/import-module/webpack.config.js b/test/configCases/css/import-module/webpack.config.js new file mode 100644 index 00000000000..fd7c39f6432 --- /dev/null +++ b/test/configCases/css/import-module/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new webpack.HotModuleReplacementPlugin()], + target: "web", + mode: "development", + module: { + rules: [ + { + test: /stylesheet\.js$/i, + use: ["./a-pitching-loader.js"], + type: "asset/source" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/import/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/import/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..b2983e1837e --- /dev/null +++ b/test/configCases/css/import/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,2276 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css import exported tests should compile 1`] = ` +Array [ + "/*!******************************************************************************************!*\\\\ + !*** external \\"https://test.cases/path/../../../../configCases/css/import/external.css\\" ***! + \\\\******************************************************************************************/ +body { + externally-imported: true; +} + +/*!******************************************!*\\\\ + !*** external \\"//example.com/style.css\\" ***! + \\\\******************************************/ +@import url(\\"//example.com/style.css\\"); +/*!*****************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Roboto\\" ***! + \\\\*****************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Roboto\\"); +/*!***********************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Noto+Sans+TC\\" ***! + \\\\***********************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Noto+Sans+TC\\"); +/*!******************************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto\\" ***! + \\\\******************************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto\\"); +/*!************************************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1\\" ***! + \\\\************************************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1\\") layer(super.foo) supports(display: flex) screen and (min-width: 400px); +/*!*******************************************************************************************!*\\\\ + !*** external \\"https://test.cases/path/../../../../configCases/css/import/external1.css\\" ***! + \\\\*******************************************************************************************/ +body { + externally-imported1: true; +} + +/*!*******************************************************************************************!*\\\\ + !*** external \\"https://test.cases/path/../../../../configCases/css/import/external2.css\\" ***! + \\\\*******************************************************************************************/ +body { + externally-imported2: true; +} + +/*!*********************************!*\\\\ + !*** external \\"external-1.css\\" ***! + \\\\*********************************/ +@import url(\\"external-1.css\\"); +/*!*********************************!*\\\\ + !*** external \\"external-2.css\\" ***! + \\\\*********************************/ +@import url(\\"external-2.css\\") supports(display: grid) screen and (max-width: 400px); +/*!*********************************!*\\\\ + !*** external \\"external-3.css\\" ***! + \\\\*********************************/ +@import url(\\"external-3.css\\") supports(not (display: grid) and (display: flex)) screen and (max-width: 400px); +/*!*********************************!*\\\\ + !*** external \\"external-4.css\\" ***! + \\\\*********************************/ +@import url(\\"external-4.css\\") supports((selector(h2 > p)) and + (font-tech(color-COLRv1))); +/*!*********************************!*\\\\ + !*** external \\"external-5.css\\" ***! + \\\\*********************************/ +@import url(\\"external-5.css\\") layer(default); +/*!*********************************!*\\\\ + !*** external \\"external-6.css\\" ***! + \\\\*********************************/ +@import url(\\"external-6.css\\") layer(default); +/*!*********************************!*\\\\ + !*** external \\"external-7.css\\" ***! + \\\\*********************************/ +@import url(\\"external-7.css\\") layer(); +/*!*********************************!*\\\\ + !*** external \\"external-8.css\\" ***! + \\\\*********************************/ +@import url(\\"external-8.css\\") layer(); +/*!*********************************!*\\\\ + !*** external \\"external-9.css\\" ***! + \\\\*********************************/ +@import url(\\"external-9.css\\") print; +/*!**********************************!*\\\\ + !*** external \\"external-10.css\\" ***! + \\\\**********************************/ +@import url(\\"external-10.css\\") print, screen; +/*!**********************************!*\\\\ + !*** external \\"external-11.css\\" ***! + \\\\**********************************/ +@import url(\\"external-11.css\\") screen; +/*!**********************************!*\\\\ + !*** external \\"external-12.css\\" ***! + \\\\**********************************/ +@import url(\\"external-12.css\\") screen and (orientation: landscape); +/*!**********************************!*\\\\ + !*** external \\"external-13.css\\" ***! + \\\\**********************************/ +@import url(\\"external-13.css\\") supports(not (display: flex)); +/*!**********************************!*\\\\ + !*** external \\"external-14.css\\" ***! + \\\\**********************************/ +@import url(\\"external-14.css\\") layer(default) supports(display: grid) screen and (max-width: 400px); +/*!***************************************************!*\\\\ + !*** css ./node_modules/style-library/styles.css ***! + \\\\***************************************************/ +p { + color: steelblue; +} + +/*!************************************************!*\\\\ + !*** css ./node_modules/main-field/styles.css ***! + \\\\************************************************/ +p { + color: antiquewhite; +} + +/*!*********************************************************!*\\\\ + !*** css ./node_modules/package-with-exports/style.css ***! + \\\\*********************************************************/ +.load-me { + color: red; +} + +/*!***************************************!*\\\\ + !*** css ./extensions-imported.mycss ***! + \\\\***************************************/ +.custom-extension{ + color: green; +}.using-loader { color: red; } +/*!***********************!*\\\\ + !*** css ./file.less ***! + \\\\***********************/ +.link { + color: #428bca; +} + +/*!**********************************!*\\\\ + !*** css ./with-less-import.css ***! + \\\\**********************************/ + +.foo { + color: red; +} + +/*!*********************************!*\\\\ + !*** css ./prefer-relative.css ***! + \\\\*********************************/ +.relative { + color: red; +} + +/*!************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style/default.css ***! + \\\\************************************************************/ +.default { + color: steelblue; +} + +/*!**************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style-mode/mode.css ***! + \\\\**************************************************************/ +.mode { + color: red; +} + +/*!******************************************************************!*\\\\ + !*** css ./node_modules/condition-names-subpath/dist/custom.css ***! + \\\\******************************************************************/ +.dist { + color: steelblue; +} + +/*!************************************************************************!*\\\\ + !*** css ./node_modules/condition-names-subpath-extra/dist/custom.css ***! + \\\\************************************************************************/ +.dist { + color: steelblue; +} + +/*!******************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style-less/default.less ***! + \\\\******************************************************************/ +.conditional-names { + color: #428bca; +} + +/*!**********************************************************************!*\\\\ + !*** css ./node_modules/condition-names-custom-name/custom-name.css ***! + \\\\**********************************************************************/ +.custom-name { + color: steelblue; +} + +/*!************************************************************!*\\\\ + !*** css ./node_modules/style-and-main-library/styles.css ***! + \\\\************************************************************/ +.style { + color: steelblue; +} + +/*!**************************************************************!*\\\\ + !*** css ./node_modules/condition-names-webpack/webpack.css ***! + \\\\**************************************************************/ +.webpack { + color: steelblue; +} + +/*!*******************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style-nested/default.css ***! + \\\\*******************************************************************/ +.default { + color: steelblue; +} + +/*!******************************!*\\\\ + !*** css ./style-import.css ***! + \\\\******************************/ + +/* Technically, this is not entirely true, but we allow it because the final file can be processed by the loader and return the CSS code */ + + +/* Failed */ + + +/*!*****************************!*\\\\ + !*** css ./print.css?foo=1 ***! + \\\\*****************************/ +body { + background: black; +} + +/*!*****************************!*\\\\ + !*** css ./print.css?foo=2 ***! + \\\\*****************************/ +body { + background: black; +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=3 (layer: default) ***! + \\\\**********************************************/ +@layer default { + body { + background: black; + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=4 (layer: default) ***! + \\\\**********************************************/ +@layer default { + body { + background: black; + } +} + +/*!*******************************************************!*\\\\ + !*** css ./print.css?foo=5 (supports: display: flex) ***! + \\\\*******************************************************/ +@supports (display: flex) { + body { + background: black; + } +} + +/*!*******************************************************!*\\\\ + !*** css ./print.css?foo=6 (supports: display: flex) ***! + \\\\*******************************************************/ +@supports (display: flex) { + body { + background: black; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./print.css?foo=7 (media: screen and (min-width: 400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width: 400px) { + body { + background: black; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./print.css?foo=8 (media: screen and (min-width: 400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width: 400px) { + body { + background: black; + } +} + +/*!************************************************************************!*\\\\ + !*** css ./print.css?foo=9 (layer: default) (supports: display: flex) ***! + \\\\************************************************************************/ +@layer default { + @supports (display: flex) { + body { + background: black; + } + } +} + +/*!**************************************************************************************!*\\\\ + !*** css ./print.css?foo=10 (layer: default) (media: screen and (min-width: 400px)) ***! + \\\\**************************************************************************************/ +@layer default { + @media screen and (min-width: 400px) { + body { + background: black; + } + } +} + +/*!***********************************************************************************************!*\\\\ + !*** css ./print.css?foo=11 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\***********************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=12 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=13 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=14 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=15 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!*****************************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=16 (layer: default) (supports: background: url(./img.png)) (media: screen and (min-width: 400px)) ***! + \\\\*****************************************************************************************************************************/ +@layer default { + @supports (background: url(./img.png)) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!*******************************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=17 (layer: default) (supports: background: url(\\"./img.png\\")) (media: screen and (min-width: 400px)) ***! + \\\\*******************************************************************************************************************************/ +@layer default { + @supports (background: url(\\"./img.png\\")) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=18 (media: screen) ***! + \\\\**********************************************/ +@media screen { + body { + background: black; + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=19 (media: screen) ***! + \\\\**********************************************/ +@media screen { + body { + background: black; + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=20 (media: screen) ***! + \\\\**********************************************/ +@media screen { + body { + background: black; + } +} + +/*!******************************!*\\\\ + !*** css ./print.css?foo=21 ***! + \\\\******************************/ +body { + background: black; +} + +/*!**************************!*\\\\ + !*** css ./imported.css ***! + \\\\**************************/ +body { + background: green; +} + +/*!****************************************!*\\\\ + !*** css ./imported.css (layer: base) ***! + \\\\****************************************/ +@layer base { + body { + background: green; + } +} + +/*!****************************************************!*\\\\ + !*** css ./imported.css (supports: display: flex) ***! + \\\\****************************************************/ +@supports (display: flex) { + body { + background: green; + } +} + +/*!*************************************************!*\\\\ + !*** css ./imported.css (media: screen, print) ***! + \\\\*************************************************/ +@media screen, print { + body { + background: green; + } +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=1 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=2 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=3 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=4 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=5 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=6 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=7 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=8 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=9 ***! + \\\\******************************/ +a { + color: red; +} + +/*!********************************************************************!*\\\\ + !*** css ./style2.css (media: screen and (orientation:landscape)) ***! + \\\\********************************************************************/ +@media screen and (orientation:landscape) { + a { + color: red; + } +} + +/*!*********************************************************************!*\\\\ + !*** css ./style2.css (media: SCREEN AND (ORIENTATION: LANDSCAPE)) ***! + \\\\*********************************************************************/ +@media SCREEN AND (ORIENTATION: LANDSCAPE) { + a { + color: red; + } +} + +/*!****************************************************!*\\\\ + !*** css ./style2.css (media: (min-width: 100px)) ***! + \\\\****************************************************/ +@media (min-width: 100px) { + a { + color: red; + } +} + +/*!**********************************!*\\\\ + !*** css ./test.css?foo=1&bar=1 ***! + \\\\**********************************/ +.class { + content: \\"test.css\\"; +} + +/*!*****************************************!*\\\\ + !*** css ./style2.css?foo=1&bar=1#hash ***! + \\\\*****************************************/ +a { + color: red; +} + +/*!*************************************************************************************!*\\\\ + !*** css ./style2.css?foo=1&bar=1#hash (media: screen and (orientation:landscape)) ***! + \\\\*************************************************************************************/ +@media screen and (orientation:landscape) { + a { + color: red; + } +} + +/*!******************************!*\\\\ + !*** css ./style3.css?bar=1 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style3.css?bar=2 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style3.css?bar=3 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style3.css?=bar4 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!**************************!*\\\\ + !*** css ./styl'le7.css ***! + \\\\**************************/ +.class { + content: \\"style7.css\\"; +} + +/*!********************************!*\\\\ + !*** css ./styl'le7.css?foo=1 ***! + \\\\********************************/ +.class { + content: \\"style7.css\\"; +} + +/*!***************************!*\\\\ + !*** css ./test test.css ***! + \\\\***************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=1 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=2 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=3 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=4 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=5 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!**********************!*\\\\ + !*** css ./test.css ***! + \\\\**********************/ +.class { + content: \\"test.css\\"; +} + +/*!****************************!*\\\\ + !*** css ./test.css?foo=1 ***! + \\\\****************************/ +.class { + content: \\"test.css\\"; +} + +/*!****************************!*\\\\ + !*** css ./test.css?foo=2 ***! + \\\\****************************/ +.class { + content: \\"test.css\\"; +} + +/*!****************************!*\\\\ + !*** css ./test.css?foo=3 ***! + \\\\****************************/ +.class { + content: \\"test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=6 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=7 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=8 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=9 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!**********************************!*\\\\ + !*** css ./test test.css?fpp=10 ***! + \\\\**********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!**********************************!*\\\\ + !*** css ./test test.css?foo=11 ***! + \\\\**********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./style6.css?foo=bazz ***! + \\\\*********************************/ +.class { + content: \\"style6.css\\"; +} + +/*!********************************************************!*\\\\ + !*** css ./string-loader.js?esModule=false!./test.css ***! + \\\\********************************************************/ +.class { + content: \\"test.css\\"; +} +.using-loader { color: red; } +/*!********************************!*\\\\ + !*** css ./style4.css?foo=bar ***! + \\\\********************************/ +.class { + content: \\"style4.css\\"; +} + +/*!*************************************!*\\\\ + !*** css ./style4.css?foo=bar#hash ***! + \\\\*************************************/ +.class { + content: \\"style4.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style4.css?#hash ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!********************************************************!*\\\\ + !*** css ./style4.css?foo=1 (supports: display: flex) ***! + \\\\********************************************************/ +@supports (display: flex) { + .class { + content: \\"style4.css\\"; + } +} + +/*!****************************************************************************************************!*\\\\ + !*** css ./style4.css?foo=2 (supports: display: flex) (media: screen and (orientation:landscape)) ***! + \\\\****************************************************************************************************/ +@supports (display: flex) { + @media screen and (orientation:landscape) { + .class { + content: \\"style4.css\\"; + } + } +} + +/*!******************************!*\\\\ + !*** css ./style4.css?foo=3 ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style4.css?foo=4 ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style4.css?foo=5 ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!*****************************************************************************************************!*\\\\ + !*** css ./string-loader.js?esModule=false!./test.css (media: screen and (orientation: landscape)) ***! + \\\\*****************************************************************************************************/ +@media screen and (orientation: landscape) { + .class { + content: \\"test.css\\"; + } + .using-loader { color: red; }} + +/*!*************************************************************************************!*\\\\ + !*** css data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D ***! + \\\\*************************************************************************************/ +a { + color: red; +} +/*!**********************************************************************************************************************************!*\\\\ + !*** css data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20blue%3B%0D%0A%7D (media: screen and (orientation:landscape)) ***! + \\\\**********************************************************************************************************************************/ +@media screen and (orientation:landscape) { + a { + color: blue; + }} + +/*!***************************************************************************!*\\\\ + !*** css data:text/css;charset=utf-8;base64,YSB7DQogIGNvbG9yOiByZWQ7DQp9 ***! + \\\\***************************************************************************/ +a { + color: red; +} +/*!******************************!*\\\\ + !*** css ./style5.css?foo=1 ***! + \\\\******************************/ +.class { + content: \\"style5.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style5.css?foo=2 ***! + \\\\******************************/ +.class { + content: \\"style5.css\\"; +} + +/*!**************************************************!*\\\\ + !*** css ./style5.css?foo=3 (supports: unknown) ***! + \\\\**************************************************/ +@supports (unknown) { + .class { + content: \\"style5.css\\"; + } +} + +/*!********************************************************!*\\\\ + !*** css ./style5.css?foo=4 (supports: display: flex) ***! + \\\\********************************************************/ +@supports (display: flex) { + .class { + content: \\"style5.css\\"; + } +} + +/*!*******************************************************************!*\\\\ + !*** css ./style5.css?foo=5 (supports: display: flex !important) ***! + \\\\*******************************************************************/ +@supports (display: flex !important) { + .class { + content: \\"style5.css\\"; + } +} + +/*!***********************************************************************************************!*\\\\ + !*** css ./style5.css?foo=6 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\***********************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"style5.css\\"; + } + } +} + +/*!********************************************************!*\\\\ + !*** css ./style5.css?foo=7 (supports: selector(a b)) ***! + \\\\********************************************************/ +@supports (selector(a b)) { + .class { + content: \\"style5.css\\"; + } +} + +/*!********************************************************!*\\\\ + !*** css ./style5.css?foo=8 (supports: display: flex) ***! + \\\\********************************************************/ +@supports (display: flex) { + .class { + content: \\"style5.css\\"; + } +} + +/*!*****************************!*\\\\ + !*** css ./layer.css?foo=1 ***! + \\\\*****************************/ +@layer { + .class { + content: \\"layer.css\\"; + } +} + +/*!**********************************************!*\\\\ + !*** css ./layer.css?foo=2 (layer: default) ***! + \\\\**********************************************/ +@layer default { + .class { + content: \\"layer.css\\"; + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./layer.css?foo=3 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"layer.css\\"; + } + } + } +} + +/*!**********************************************************************************************!*\\\\ + !*** css ./layer.css?foo=3 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************/ +@layer { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"layer.css\\"; + } + } + } +} + +/*!**********************************************************************************************!*\\\\ + !*** css ./layer.css?foo=4 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************/ +@layer { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"layer.css\\"; + } + } + } +} + +/*!*****************************!*\\\\ + !*** css ./layer.css?foo=5 ***! + \\\\*****************************/ +@layer { + .class { + content: \\"layer.css\\"; + } +} + +/*!**************************************************!*\\\\ + !*** css ./layer.css?foo=6 (layer: foo.bar.baz) ***! + \\\\**************************************************/ +@layer foo.bar.baz { + .class { + content: \\"layer.css\\"; + } +} + +/*!*****************************!*\\\\ + !*** css ./layer.css?foo=7 ***! + \\\\*****************************/ +@layer { + .class { + content: \\"layer.css\\"; + } +} + +/*!*********************************************************************************************************!*\\\\ + !*** css ./style6.css (layer: default) (supports: display: flex) (media: screen and (min-width:400px)) ***! + \\\\*********************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=1 (layer: default) (supports: display: flex) (media: screen and (min-width:400px)) ***! + \\\\***************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!**********************************************************************************************!*\\\\ + !*** css ./style6.css?foo=2 (supports: display: flex) (media: screen and (min-width:400px)) ***! + \\\\**********************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } + } +} + +/*!********************************************************************!*\\\\ + !*** css ./style6.css?foo=3 (media: screen and (min-width:400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./style6.css?foo=4 (media: screen and (min-width:400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./style6.css?foo=5 (media: screen and (min-width:400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } +} + +/*!****************************************************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=6 (layer: default) (supports: display : flex) (media: screen and ( min-width : 400px )) ***! + \\\\****************************************************************************************************************************************************/ +@layer default { + @supports (display : flex) { + @media screen and ( min-width : 400px ) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=7 (layer: DEFAULT) (supports: DISPLAY: FLEX) (media: SCREEN AND (MIN-WIDTH: 400PX)) ***! + \\\\****************************************************************************************************************/ +@layer DEFAULT { + @supports (DISPLAY: FLEX) { + @media SCREEN AND (MIN-WIDTH: 400PX) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!***********************************************************************************************!*\\\\ + !*** css ./style6.css?foo=8 (supports: DISPLAY: FLEX) (media: SCREEN AND (MIN-WIDTH: 400PX)) ***! + \\\\***********************************************************************************************/ +@layer { + @supports (DISPLAY: FLEX) { + @media SCREEN AND (MIN-WIDTH: 400PX) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=9 (layer: /* Comment *_/default/* Comment *_/) (supports: /* Comment *_/display/* Comment *_/:/* Comment *_/ flex/* Comment *_/) (media: screen/* Comment *_/ and/* Comment *_/ (/* Comment *_/min-width/* Comment *_/: /* Comment *_/400px/* Comment *_/)) ***! + \\\\****************************************************************************************************************************************************************************************************************************************************************************************/ +@layer /* Comment */default/* Comment */ { + @supports (/* Comment */display/* Comment */:/* Comment */ flex/* Comment */) { + @media screen/* Comment */ and/* Comment */ (/* Comment */min-width/* Comment */: /* Comment */400px/* Comment */) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=10 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=11 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=12 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=13 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=14 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=15 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!**************************************************************************!*\\\\ + !*** css ./style6.css?foo=16 (media: print and (orientation:landscape)) ***! + \\\\**************************************************************************/ +@media print and (orientation:landscape) { + .class { + content: \\"style6.css\\"; + } +} + +/*!****************************************************************************************!*\\\\ + !*** css ./style6.css?foo=17 (media: print and (orientation:landscape)/* Comment *_/) ***! + \\\\****************************************************************************************/ +@media print and (orientation:landscape)/* Comment */ { + .class { + content: \\"style6.css\\"; + } +} + +/*!**************************************************************************!*\\\\ + !*** css ./style6.css?foo=18 (media: print and (orientation:landscape)) ***! + \\\\**************************************************************************/ +@media print and (orientation:landscape) { + .class { + content: \\"style6.css\\"; + } +} + +/*!***************************************************************!*\\\\ + !*** css ./style8.css (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************/ +@media screen and (min-width: 400px) { + .class { + content: \\"style8.css\\"; + } +} + +/*!**************************************************************!*\\\\ + !*** css ./style8.css (media: (prefers-color-scheme: dark)) ***! + \\\\**************************************************************/ +@media (prefers-color-scheme: dark) { + .class { + content: \\"style8.css\\"; + } +} + +/*!**************************************************!*\\\\ + !*** css ./style8.css (supports: display: flex) ***! + \\\\**************************************************/ +@supports (display: flex) { + .class { + content: \\"style8.css\\"; + } +} + +/*!******************************************************!*\\\\ + !*** css ./style8.css (supports: ((display: flex))) ***! + \\\\******************************************************/ +@supports (((display: flex))) { + .class { + content: \\"style8.css\\"; + } +} + +/*!********************************************************************************************************!*\\\\ + !*** css ./style8.css (supports: ((display: inline-grid))) (media: screen and (((min-width: 400px)))) ***! + \\\\********************************************************************************************************/ +@supports (((display: inline-grid))) { + @media screen and (((min-width: 400px))) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!**************************************************!*\\\\ + !*** css ./style8.css (supports: display: grid) ***! + \\\\**************************************************/ +@supports (display: grid) { + .class { + content: \\"style8.css\\"; + } +} + +/*!*****************************************************************************************!*\\\\ + !*** css ./style8.css (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\*****************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!*******************************************!*\\\\ + !*** css ./style8.css (layer: framework) ***! + \\\\*******************************************/ +@layer framework { + .class { + content: \\"style8.css\\"; + } +} + +/*!*****************************************!*\\\\ + !*** css ./style8.css (layer: default) ***! + \\\\*****************************************/ +@layer default { + .class { + content: \\"style8.css\\"; + } +} + +/*!**************************************!*\\\\ + !*** css ./style8.css (layer: base) ***! + \\\\**************************************/ +@layer base { + .class { + content: \\"style8.css\\"; + } +} + +/*!*******************************************************************!*\\\\ + !*** css ./style8.css (layer: default) (supports: display: flex) ***! + \\\\*******************************************************************/ +@layer default { + @supports (display: flex) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!**********************************************************************************************************!*\\\\ + !*** css ./style8.css (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"style8.css\\"; + } + } + } +} + +/*!************************!*\\\\ + !*** css ./style2.css ***! + \\\\************************/ +@layer { + a { + color: red; + } +} + +/*!*********************************************************************************!*\\\\ + !*** css ./style9.css (media: unknown(default) unknown(display: flex) unknown) ***! + \\\\*********************************************************************************/ +@media unknown(default) unknown(display: flex) unknown { + .class { + content: \\"style9.css\\"; + } +} + +/*!**************************************************!*\\\\ + !*** css ./style9.css (media: unknown(default)) ***! + \\\\**************************************************/ +@media unknown(default) { + .class { + content: \\"style9.css\\"; + } +} + +/*!*************************!*\\\\ + !*** css ./style11.css ***! + \\\\*************************/ +.style11 { + color: red; +} + +/*!*************************!*\\\\ + !*** css ./style12.css ***! + \\\\*************************/ + +.style12 { + color: red; +} + +/*!*************************!*\\\\ + !*** css ./style13.css ***! + \\\\*************************/ +div{color: red;} + +/*!*************************!*\\\\ + !*** css ./style10.css ***! + \\\\*************************/ + + +.style10 { + color: red; +} + +/*!************************************************************************************!*\\\\ + !*** css ./media-deep-deep-nested.css (media: screen and (orientation: portrait)) ***! + \\\\************************************************************************************/ +@media screen and (min-width: 400px) { + @media screen and (max-width: 500px) { + @media screen and (orientation: portrait) { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!**************************************************************************!*\\\\ + !*** css ./media-deep-nested.css (media: screen and (max-width: 500px)) ***! + \\\\**************************************************************************/ +@media screen and (min-width: 400px) { + @media screen and (max-width: 500px) { + + .class { + deep-nested: 1; + } + } +} + +/*!*********************************************************************!*\\\\ + !*** css ./media-nested.css (media: screen and (min-width: 400px)) ***! + \\\\*********************************************************************/ +@media screen and (min-width: 400px) { + + .class { + nested: 1; + } +} + +/*!**********************************************************************!*\\\\ + !*** css ./supports-deep-deep-nested.css (supports: display: table) ***! + \\\\**********************************************************************/ +@supports (display: flex) { + @supports (display: grid) { + @supports (display: table) { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!****************************************************************!*\\\\ + !*** css ./supports-deep-nested.css (supports: display: grid) ***! + \\\\****************************************************************/ +@supports (display: flex) { + @supports (display: grid) { + + .class { + deep-nested: 1; + } + } +} + +/*!***********************************************************!*\\\\ + !*** css ./supports-nested.css (supports: display: flex) ***! + \\\\***********************************************************/ +@supports (display: flex) { + + .class { + nested: 1; + } +} + +/*!*****************************************************!*\\\\ + !*** css ./layer-deep-deep-nested.css (layer: baz) ***! + \\\\*****************************************************/ +@layer foo { + @layer bar { + @layer baz { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!************************************************!*\\\\ + !*** css ./layer-deep-nested.css (layer: bar) ***! + \\\\************************************************/ +@layer foo { + @layer bar { + + .class { + deep-nested: 1; + } + } +} + +/*!*******************************************!*\\\\ + !*** css ./layer-nested.css (layer: foo) ***! + \\\\*******************************************/ +@layer foo { + + .class { + nested: 1; + } +} + +/*!*********************************************************************************************************************!*\\\\ + !*** css ./all-deep-deep-nested.css (layer: baz) (supports: display: table) (media: screen and (min-width: 600px)) ***! + \\\\*********************************************************************************************************************/ +@layer foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + @layer baz { + @supports (display: table) { + @media screen and (min-width: 600px) { + .class { + deep-deep-nested: 1; + } + } + } + } + } + } + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./all-deep-nested.css (layer: bar) (supports: display: grid) (media: screen and (min-width: 500px)) ***! + \\\\***************************************************************************************************************/ +@layer foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + + .class { + deep-nested: 1; + } + } + } + } + } + } +} + +/*!**********************************************************************************************************!*\\\\ + !*** css ./all-nested.css (layer: foo) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************************/ +@layer foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + + .class { + nested: 1; + } + } + } +} + +/*!*****************************************************!*\\\\ + !*** css ./mixed-deep-deep-nested.css (layer: bar) ***! + \\\\*****************************************************/ +@media screen and (min-width: 400px) { + @supports (display: flex) { + @layer bar { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!*************************************************************!*\\\\ + !*** css ./mixed-deep-nested.css (supports: display: flex) ***! + \\\\*************************************************************/ +@media screen and (min-width: 400px) { + @supports (display: flex) { + + .class { + deep-nested: 1; + } + } +} + +/*!*********************************************************************!*\\\\ + !*** css ./mixed-nested.css (media: screen and (min-width: 400px)) ***! + \\\\*********************************************************************/ +@media screen and (min-width: 400px) { + + .class { + nested: 1; + } +} + +/*!********************************************!*\\\\ + !*** css ./anonymous-deep-deep-nested.css ***! + \\\\********************************************/ +@layer { + @layer { + @layer { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!***************************************!*\\\\ + !*** css ./anonymous-deep-nested.css ***! + \\\\***************************************/ +@layer { + @layer { + + .class { + deep-nested: 1; + } + } +} + +/*!*****************************************************!*\\\\ + !*** css ./layer-deep-deep-nested.css (layer: baz) ***! + \\\\*****************************************************/ +@layer { + @layer base { + @layer baz { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!*************************************************!*\\\\ + !*** css ./layer-deep-nested.css (layer: base) ***! + \\\\*************************************************/ +@layer { + @layer base { + + .class { + deep-nested: 1; + } + } +} + +/*!**********************************!*\\\\ + !*** css ./anonymous-nested.css ***! + \\\\**********************************/ +@layer { + + .class { + deep-nested: 1; + } +} + +/*!************************************************************************************!*\\\\ + !*** css ./media-deep-deep-nested.css (media: screen and (orientation: portrait)) ***! + \\\\************************************************************************************/ +@media screen and (orientation: portrait) { + .class { + deep-deep-nested: 1; + } +} + +/*!**************************************************!*\\\\ + !*** css ./style8.css (supports: display: flex) ***! + \\\\**************************************************/ +@media screen and (orientation: portrait) { + @supports (display: flex) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!******************************************************************************!*\\\\ + !*** css ./duplicate-nested.css (media: screen and (orientation: portrait)) ***! + \\\\******************************************************************************/ +@media screen and (orientation: portrait) { + + .class { + duplicate-nested: true; + } +} + +/*!********************************************!*\\\\ + !*** css ./anonymous-deep-deep-nested.css ***! + \\\\********************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer { + @layer { + .class { + deep-deep-nested: 1; + } + } + } + } +} + +/*!***************************************!*\\\\ + !*** css ./anonymous-deep-nested.css ***! + \\\\***************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer { + + .class { + deep-nested: 1; + } + } + } +} + +/*!*****************************************************!*\\\\ + !*** css ./layer-deep-deep-nested.css (layer: baz) ***! + \\\\*****************************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer base { + @layer baz { + .class { + deep-deep-nested: 1; + } + } + } + } +} + +/*!*************************************************!*\\\\ + !*** css ./layer-deep-nested.css (layer: base) ***! + \\\\*************************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer base { + + .class { + deep-nested: 1; + } + } + } +} + +/*!********************************************************************************************************!*\\\\ + !*** css ./anonymous-nested.css (supports: display: flex) (media: screen and (orientation: portrait)) ***! + \\\\********************************************************************************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + + .class { + deep-nested: 1; + } + } +} + +/*!*********************************************************************************************************************!*\\\\ + !*** css ./all-deep-deep-nested.css (layer: baz) (supports: display: table) (media: screen and (min-width: 600px)) ***! + \\\\*********************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + @layer baz { + @supports (display: table) { + @media screen and (min-width: 600px) { + .class { + deep-deep-nested: 1; + } + } + } + } + } + } + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./all-deep-nested.css (layer: bar) (supports: display: grid) (media: screen and (min-width: 500px)) ***! + \\\\***************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + + .class { + deep-nested: 1; + } + } + } + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./all-nested.css (layer: super.foo) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + + .class { + nested: 1; + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./style2.css?warning=6 (supports: unknown: layer(super.foo)) (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************/ +@supports (unknown: layer(super.foo)) { + @media screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./style2.css?warning=7 (supports: url: url(\\"./unknown.css\\")) (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************/ +@supports (url: url(\\"./unknown.css\\")) { + @media screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!*************************************************************************************************************!*\\\\ + !*** css ./style2.css?warning=8 (supports: url: url(./unknown.css)) (media: screen and (min-width: 400px)) ***! + \\\\*************************************************************************************************************/ +@supports (url: url(./unknown.css)) { + @media screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!***************************************************************************************************************************************!*\\\\ + !*** css ./style2.css?foo=unknown (layer: super.foo) (supports: display: flex) (media: unknown(\\"foo\\") screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media unknown(\\"foo\\") screen and (min-width: 400px) { + a { + color: red; + } + } + } +} + +/*!******************************************************************************************************************************************************!*\\\\ + !*** css ./style2.css?foo=unknown1 (layer: super.foo) (supports: display: url(\\"./unknown.css\\")) (media: unknown(foo) screen and (min-width: 400px)) ***! + \\\\******************************************************************************************************************************************************/ +@layer super.foo { + @supports (display: url(\\"./unknown.css\\")) { + @media unknown(foo) screen and (min-width: 400px) { + a { + color: red; + } + } + } +} + +/*!*********************************************************************************************************************************************!*\\\\ + !*** css ./style2.css?foo=unknown2 (layer: super.foo) (supports: display: url(./unknown.css)) (media: \\"foo\\" screen and (min-width: 400px)) ***! + \\\\*********************************************************************************************************************************************/ +@layer super.foo { + @supports (display: url(./unknown.css)) { + @media \\"foo\\" screen and (min-width: 400px) { + a { + color: red; + } + } + } +} + +/*!***************************************************!*\\\\ + !*** css ./style2.css?unknown3 (media: \\"string\\") ***! + \\\\***************************************************/ +@media \\"string\\" { + a { + color: red; + } +} + +/*!**********************************************************************************************************************************!*\\\\ + !*** css ./style2.css?wrong-order-but-valid=6 (supports: display: flex) (media: layer(super.foo) screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************************************************/ +@supports (display: flex) { + @media layer(super.foo) screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!****************************************!*\\\\ + !*** css ./style2.css?after-namespace ***! + \\\\****************************************/ +a { + color: red; +} + +/*!*************************************************************************!*\\\\ + !*** css ./style2.css?multiple=1 (media: url(./style2.css?multiple=2)) ***! + \\\\*************************************************************************/ +@media url(./style2.css?multiple=2) { + a { + color: red; + } +} + +/*!***************************************************************************!*\\\\ + !*** css ./style2.css?multiple=3 (media: url(\\"./style2.css?multiple=4\\")) ***! + \\\\***************************************************************************/ +@media url(\\"./style2.css?multiple=4\\") { + a { + color: red; + } +} + +/*!**************************************************************************!*\\\\ + !*** css ./style2.css?strange=3 (media: url(\\"./style2.css?multiple=4\\")) ***! + \\\\**************************************************************************/ +@media url(\\"./style2.css?multiple=4\\") { + a { + color: red; + } +} + +/*!************************************************************!*\\\\ + !*** css ./dark.css (media: (prefers-color-scheme: dark)) ***! + \\\\************************************************************/ +@media (prefers-color-scheme: dark) { + a { + color: white; + } +} + +/*!***************************************!*\\\\ + !*** css ./list-of-media-queries.css ***! + \\\\***************************************/ + +a { + color: black; +} + +/*!*********************************!*\\\\ + !*** css ./circular-nested.css ***! + \\\\*********************************/ + +.circular-nested { + color: red; +} + +/*!**************************!*\\\\ + !*** css ./circular.css ***! + \\\\**************************/ + +.circular { + color: red; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +/* Has the same URL */ + + + + + + + + +/* anonymous */ + +/* All unknown parse as media for compatibility */ + + + +/* Inside support */ + + +/** Possible syntax in future */ + + +/** Unknown */ + +@import-normalize; + +/** Warnings */ + +@import nourl(test.css); +@import ; +@import foo-bar; +@import layer(super.foo) \\"./style2.css?warning=1\\" supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) \\"./style2.css?warning=2\\" screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) \\"./style2.css?warning=3\\"; +@import layer(super.foo) url(fae7e602dbe59a260308.css?warning=4) supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) url(fae7e602dbe59a260308.css?warning=5) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) url(fae7e602dbe59a260308.css?warning=6); +@namespace url(http://www.w3.org/1999/xhtml); +@import supports(background: url(09a1a1112c577c279435.png)); +@import supports(background: url(09a1a1112c577c279435.png)) screen and (min-width: 400px); +@import layer(test) supports(background: url(09a1a1112c577c279435.png)) screen and (min-width: 400px); +@import screen and (min-width: 400px); + + + +/* FIXME */ +/*@import url(\\"webpackIgnore-order.css\\");*/ + +body { + background: red; +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; + +exports[`ConfigCacheTestCases css import exported tests should compile 2`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +@import \\"./style-import.css\\"; +@import \\"print.css?foo=1\\"; +@import url(\\"print.css?foo=2\\"); +@import \\"print.css?foo=3\\" layer(default); +@import url(\\"print.css?foo=4\\") layer(default); +@import \\"print.css?foo=5\\" supports(display: flex); +@import url(\\"print.css?foo=6\\") supports(display: flex); +@import \\"print.css?foo=7\\" screen and (min-width: 400px); +@import url(\\"print.css?foo=8\\") screen and (min-width: 400px); +@import \\"print.css?foo=9\\" layer(default) supports(display: flex); +@import \\"print.css?foo=10\\" layer(default) screen and (min-width: 400px); +@import \\"print.css?foo=11\\" supports(display: flex) screen and (min-width: 400px); +@import \\"print.css?foo=12\\" layer(default) supports(display: flex) screen and (min-width: 400px); +@import \\"print.css?foo=13\\"layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(print.css?foo=14)layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(\\"print.css?foo=15\\")layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(print.css?foo=16)layer(default)supports(background: url(./img.png))screen and (min-width: 400px); +@import url(print.css?foo=17)layer(default)supports(background: url(\\"./img.png\\"))screen and (min-width: 400px); +@import url(print.css?foo=18)screen; +@import url(\\"print.css?foo=19\\")screen; +@import \\"print.css?foo=20\\"screen; +@import url(print.css?foo=18) screen ; +@import url(\\"print.css?foo=19\\") screen ; +@import \\"print.css?foo=20\\" screen ; +@import \\"print.css?foo=21\\" ; + +/* Has the same URL */ +@import \\"imported.css\\"; +@import \\"imported.css\\" layer(base); +@import \\"imported.css\\" supports(display: flex); +@import \\"imported.css\\" screen, print; + +@import url(style2.css?foo=1); +@import url('style2.css?foo=2'); +@import url(\\"style2.css?foo=3\\"); +@IMPORT url(style2.css?foo=4); +@import URL(style2.css?foo=5); +@import url(style2.css?foo=6 ); +@import url( style2.css?foo=7); +@import url( style2.css?foo=8 ); +@import url( +style2.css?foo=9 +); +@import url(); +@import url(''); +@import url(\\"\\"); +@import ''; +@import \\"\\"; +@import \\" \\"; +@import \\"\\\\ +\\"; +@import url(); +@import url(''); +@import url(\\"\\"); +@import url(\\"\\") /* test */; +@import url(\\"\\") screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) SCREEN AND (ORIENTATION: LANDSCAPE); +@import url(style2.css)screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) (min-width: 100px); +@import url(https://test.cases/path/../../../../configCases/css/import/external.css); +@import url(https://test.cases/path/../../../../configCases/css/import/external.css) screen and (orientation:landscape); +@import \\"//example.com/style.css\\"; +@import url('test.css?foo=1&bar=1'); +@import url('style2.css?foo=1&bar=1#hash'); +@import url('style2.css?foo=1&bar=1#hash') screen and (orientation:landscape); +@import url('https://fonts.googleapis.com/css?family=Roboto'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1') layer(super.foo) supports(display: flex) screen and (min-width: 400px); + +@import './sty\\\\ +le3.css?bar=1'; +@import './sty\\\\ +\\\\ +\\\\ +le3.css?bar=2'; +@import url('./sty\\\\ +le3.css?bar=3'); +@import url('./sty\\\\ +\\\\ +\\\\ +le3.css?=bar4'); + +@import \\"./styl'le7.css\\"; +@import url(\\"./styl'le7.css?foo=1\\"); +@import './styl\\\\'le7.css'; +@import url('./styl\\\\'le7.css'); +@import './test test.css'; +@import url('./test test.css?foo=1'); +@import './test\\\\ test.css?foo=2'; +@import url('./test\\\\ test.css?foo=3'); +@import './test%20test.css?foo=4'; +@import url('./test%20test.css?foo=5'); +@import './\\\\74\\\\65\\\\73\\\\74.css'; +@import url('./\\\\74\\\\65\\\\73\\\\74.css?foo=1'); +@import './t\\\\65\\\\73\\\\74.css?foo=2'; +@import url('./t\\\\65\\\\73\\\\74.css?foo=3'); +@import url(./test\\\\ test.css?foo=6); +@import url(./t\\\\65st%20test.css?foo=7); +@import url('./t\\\\65st%20test.css?foo=8'); +@import url(\\"./t\\\\65st%20test.css?foo=9\\"); +@import \\"./t\\\\65st%20test.css?fpp=10\\"; +@import './t\\\\65st%20test.css?foo=11'; +@import url( style6.css?foo=bazz ); +@import '\\\\ +\\\\ +\\\\ +'; +@import url('./string-loader.js?esModule=false!./test.css'); +@import url(style4.css?foo=bar); +@import url(style4.css?foo=bar#hash); +@import url(style4.css?#hash); +@import \\"style4.css?foo=1\\" supports(display: flex); +@import \\"style4.css?foo=2\\" supports(display: flex) screen and (orientation:landscape); + +@import \\" ./style4.css?foo=3 \\"; +@import url(' ./style4.css?foo=4 '); +@import url( ./style4.css?foo=5 ); + +@import url(' https://fonts.googleapis.com/css?family=Roboto '); +@import url('./string-loader.js?esModule=false'); +@import url(' ./string-loader.js?esModule=false!./test.css ') screen and (orientation: landscape); +@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D); +@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20blue%3B%0D%0A%7D) screen and (orientation:landscape); +@import url(\\"data:text/css;charset=utf-8;base64,YSB7DQogIGNvbG9yOiByZWQ7DQp9\\"); + +@import url(\\"./style5.css?foo=1\\") supports(); +@import url(\\"./style5.css?foo=2\\") supports( ); +@import url(\\"./style5.css?foo=3\\") supports(unknown); +@import url(\\"./style5.css?foo=4\\") supports(display: flex); +@import url(\\"./style5.css?foo=5\\") supports(display: flex !important); +@import url(\\"./style5.css?foo=6\\") supports(display: flex) screen and (min-width: 400px); +@import url(\\"./style5.css?foo=7\\") supports(selector(a b)); +@import url(\\"./style5.css?foo=8\\") supports( display: flex ); +@import url(\\"./layer.css?foo=1\\") layer; +@import url(\\"./layer.css?foo=2\\") layer(default); +@import url(\\"./layer.css?foo=3\\") layer(default) supports(display: flex) screen and (min-width: 400px); +@import url(\\"./layer.css?foo=3\\") layer supports(display: flex) screen and (min-width: 400px); +@import url(\\"./layer.css?foo=4\\") layer() supports(display: flex) screen and (min-width: 400px); +@import url(\\"./layer.css?foo=5\\") layer(); +@import url(\\"./layer.css?foo=6\\") layer( foo.bar.baz ); +@import url(\\"./layer.css?foo=7\\") layer( ); +@import url(\\"./style6.css\\")layer(default)supports(display: flex)screen and (min-width:400px); +@import \\"./style6.css?foo=1\\"layer(default)supports(display: flex)screen and (min-width:400px); +@import \\"./style6.css?foo=2\\"supports(display: flex)screen and (min-width:400px); +@import \\"./style6.css?foo=3\\"screen and (min-width:400px); +@import url(\\"./style6.css?foo=4\\")screen and (min-width:400px); +@import url(./style6.css?foo=5)screen and (min-width:400px); +@import url(\\"./style6.css?foo=6\\") layer( default ) supports( display : flex ) screen and ( min-width : 400px ); +@import URL(\\"./style6.css?foo=7\\") LAYER(DEFAULT) SUPPORTS(DISPLAY: FLEX) SCREEN AND (MIN-WIDTH: 400PX); +@import url(\\"./style6.css?foo=8\\") LAYER SUPPORTS(DISPLAY: FLEX) SCREEN AND (MIN-WIDTH: 400PX); +@import url(\\"./style6.css?foo=9\\") /* Comment */ layer(/* Comment */default/* Comment */) /* Comment */ supports(/* Comment */display/* Comment */:/* Comment */ flex/* Comment */)/* Comment */ screen/* Comment */ and/* Comment */ (/* Comment */min-width/* Comment */: /* Comment */400px/* Comment */); +@import url(style6.css?foo=10) /* Comment */; +@import url(style6.css?foo=11) /* Comment */ /* Comment */; +@import url(style6.css?foo=12) /* Comment *//* Comment */; +@import url(style6.css?foo=13)/* Comment *//* Comment */; +@import +url(style6.css?foo=14) +/* Comment */ +/* Comment */; +@import /* Comment */ url(style6.css?foo=15) /* Comment */; +@import url(style6.css?foo=16) /* Comment */ print and (orientation:landscape); +@import url(style6.css?foo=17)/* Comment */print and (orientation:landscape)/* Comment */; +@import /* Comment */ url(style6.css?foo=18) /* Comment */ print and (orientation:landscape); + +@import url(\\"./style8.css\\") screen and (min-width: 400px); +@import url(\\"./style8.css\\") (prefers-color-scheme: dark); +@import url(\\"./style8.css\\") supports(display: flex); +@import url(\\"./style8.css\\") supports(((display: flex))); +@import url(\\"./style8.css\\") supports(((display: inline-grid))) screen and (((min-width: 400px))); +@import url(\\"./style8.css\\") supports(display: flex); +@import url('./style8.css') supports(display: grid); +@import url(\\"./style8.css\\") supports(display: flex) screen and (min-width: 400px); +@import url(\\"./style8.css\\") layer(framework); +@import url(\\"./style8.css\\") layer(default); +@import url(\\"./style8.css\\") layer(base); +@import url(\\"./style8.css\\") layer(default) supports(display: flex); +@import url(\\"./style8.css\\") layer(default) supports(display: flex) screen and (min-width: 400px); + +/* anonymous */ +@import \\"style2.css\\" layer(); +@import \\"style2.css\\" layer; + +/* All unknown parse as media for compatibility */ +@import url(\\"./style9.css\\") unknown(default) unknown(display: flex) unknown; +@import url(\\"./style9.css\\") unknown(default); + +@import url(\\"./style10.css\\"); + +@import \\"./media-nested.css\\" screen and (min-width: 400px); +@import \\"./supports-nested.css\\" supports(display: flex); +@import \\"./layer-nested.css\\" layer(foo); +@import \\"./all-nested.css\\" layer(foo) supports(display: flex) screen and (min-width: 400px); +@import \\"./mixed-nested.css\\" screen and (min-width: 400px); +@import \\"./anonymous-nested.css\\" layer; +@import \\"./media-deep-deep-nested.css\\" screen and (orientation: portrait); +@import \\"./duplicate-nested.css\\" screen and (orientation: portrait); +@import \\"./anonymous-nested.css\\" supports(display: flex) screen and (orientation: portrait); +@import \\"./all-nested.css\\" layer(super.foo) supports(display: flex) screen and (min-width: 400px); + +/* Inside support */ + +@import url(\\"/style2.css?warning=6\\") supports(unknown: layer(super.foo)) screen and (min-width: 400px); +@import url(\\"/style2.css?warning=7\\") supports(url: url(\\"./unknown.css\\")) screen and (min-width: 400px); +@import url(\\"/style2.css?warning=8\\") supports(url: url(./unknown.css)) screen and (min-width: 400px); + +/** Possible syntax in future */ + +@import url(\\"/style2.css?foo=unknown\\") layer(super.foo) supports(display: flex) unknown(\\"foo\\") screen and (min-width: 400px); +@import url(\\"/style2.css?foo=unknown1\\") layer(super.foo) supports(display: url(\\"./unknown.css\\")) unknown(foo) screen and (min-width: 400px); +@import url(\\"/style2.css?foo=unknown2\\") layer(super.foo) supports(display: url(./unknown.css)) \\"foo\\" screen and (min-width: 400px); +@import \\"./style2.css?unknown3\\" \\"string\\"; + +/** Unknown */ + +@import-normalize; + +/** Warnings */ + +@import nourl(test.css); +@import ; +@import foo-bar; +@import layer(super.foo) \\"./style2.css?warning=1\\" supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) \\"./style2.css?warning=2\\" screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) \\"./style2.css?warning=3\\"; +@import layer(super.foo) url(\\"./style2.css?warning=4\\") supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) url(\\"./style2.css?warning=5\\") screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) url(\\"./style2.css?warning=6\\"); +@import url(\\"/style2.css?wrong-order-but-valid=6\\") supports(display: flex) layer(super.foo) screen and (min-width: 400px); +@namespace url(http://www.w3.org/1999/xhtml); +@import url(\\"./style2.css?after-namespace\\"); +@import supports(background: url(\\"./img.png\\")); +@import supports(background: url(\\"./img.png\\")) screen and (min-width: 400px); +@import layer(test) supports(background: url(\\"./img.png\\")) screen and (min-width: 400px); +@import screen and (min-width: 400px); + +@import url(./style2.css?multiple=1) url(./style2.css?multiple=2); +@import url(\\"./style2.css?multiple=3\\") url(\\"./style2.css?multiple=4\\"); +@import \\"./style2.css?strange=3\\" url(\\"./style2.css?multiple=4\\"); + +@import url(\\"external-1.css\\"); +@import url(\\"external-2.css\\") supports(display: grid) screen and (max-width: 400px); +@import url(\\"external-3.css\\") supports(not (display: grid) and (display: flex)) screen and (max-width: 400px); +@import url(\\"external-4.css\\") supports((selector(h2 > p)) and + (font-tech(color-COLRv1))); +@import url(external-5.css) layer(default); +@import url(external-6.css) layer(default); +@import url(\\"external-7.css\\") layer(); +@import url(\\"external-8.css\\") layer; +@import url(\\"external-9.css\\") print; +@import url(\\"external-10.css\\") print, screen; +@import url(\\"external-11.css\\") screen; +@import url(\\"external-12.css\\") screen and (orientation: landscape); +@import url(\\"external-13.css\\") supports(not (display: flex)); +@import url(\\"external-14.css\\") layer(default) supports(display: grid) screen and (max-width: 400px); + +@import url(\\"ignore.css\\"); +@import url(\\"list-of-media-queries.css\\"); +@import url(\\"/alias.css\\"); +@import url(\\"circular.css\\"); +/* FIXME */ +/*@import url(\\"webpackIgnore-order.css\\");*/ + +body { + background: red; +} + + +/*# sourceMappingURL=bundle1.css.map*/", +] +`; diff --git a/test/configCases/css/import/__snapshots__/ConfigTest.snap b/test/configCases/css/import/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..32da9fea062 --- /dev/null +++ b/test/configCases/css/import/__snapshots__/ConfigTest.snap @@ -0,0 +1,2276 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css import exported tests should compile 1`] = ` +Array [ + "/*!******************************************************************************************!*\\\\ + !*** external \\"https://test.cases/path/../../../../configCases/css/import/external.css\\" ***! + \\\\******************************************************************************************/ +body { + externally-imported: true; +} + +/*!******************************************!*\\\\ + !*** external \\"//example.com/style.css\\" ***! + \\\\******************************************/ +@import url(\\"//example.com/style.css\\"); +/*!*****************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Roboto\\" ***! + \\\\*****************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Roboto\\"); +/*!***********************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Noto+Sans+TC\\" ***! + \\\\***********************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Noto+Sans+TC\\"); +/*!******************************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto\\" ***! + \\\\******************************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto\\"); +/*!************************************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1\\" ***! + \\\\************************************************************************************/ +@import url(\\"https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1\\") layer(super.foo) supports(display: flex) screen and (min-width: 400px); +/*!*******************************************************************************************!*\\\\ + !*** external \\"https://test.cases/path/../../../../configCases/css/import/external1.css\\" ***! + \\\\*******************************************************************************************/ +body { + externally-imported1: true; +} + +/*!*******************************************************************************************!*\\\\ + !*** external \\"https://test.cases/path/../../../../configCases/css/import/external2.css\\" ***! + \\\\*******************************************************************************************/ +body { + externally-imported2: true; +} + +/*!*********************************!*\\\\ + !*** external \\"external-1.css\\" ***! + \\\\*********************************/ +@import url(\\"external-1.css\\"); +/*!*********************************!*\\\\ + !*** external \\"external-2.css\\" ***! + \\\\*********************************/ +@import url(\\"external-2.css\\") supports(display: grid) screen and (max-width: 400px); +/*!*********************************!*\\\\ + !*** external \\"external-3.css\\" ***! + \\\\*********************************/ +@import url(\\"external-3.css\\") supports(not (display: grid) and (display: flex)) screen and (max-width: 400px); +/*!*********************************!*\\\\ + !*** external \\"external-4.css\\" ***! + \\\\*********************************/ +@import url(\\"external-4.css\\") supports((selector(h2 > p)) and + (font-tech(color-COLRv1))); +/*!*********************************!*\\\\ + !*** external \\"external-5.css\\" ***! + \\\\*********************************/ +@import url(\\"external-5.css\\") layer(default); +/*!*********************************!*\\\\ + !*** external \\"external-6.css\\" ***! + \\\\*********************************/ +@import url(\\"external-6.css\\") layer(default); +/*!*********************************!*\\\\ + !*** external \\"external-7.css\\" ***! + \\\\*********************************/ +@import url(\\"external-7.css\\") layer(); +/*!*********************************!*\\\\ + !*** external \\"external-8.css\\" ***! + \\\\*********************************/ +@import url(\\"external-8.css\\") layer(); +/*!*********************************!*\\\\ + !*** external \\"external-9.css\\" ***! + \\\\*********************************/ +@import url(\\"external-9.css\\") print; +/*!**********************************!*\\\\ + !*** external \\"external-10.css\\" ***! + \\\\**********************************/ +@import url(\\"external-10.css\\") print, screen; +/*!**********************************!*\\\\ + !*** external \\"external-11.css\\" ***! + \\\\**********************************/ +@import url(\\"external-11.css\\") screen; +/*!**********************************!*\\\\ + !*** external \\"external-12.css\\" ***! + \\\\**********************************/ +@import url(\\"external-12.css\\") screen and (orientation: landscape); +/*!**********************************!*\\\\ + !*** external \\"external-13.css\\" ***! + \\\\**********************************/ +@import url(\\"external-13.css\\") supports(not (display: flex)); +/*!**********************************!*\\\\ + !*** external \\"external-14.css\\" ***! + \\\\**********************************/ +@import url(\\"external-14.css\\") layer(default) supports(display: grid) screen and (max-width: 400px); +/*!***************************************************!*\\\\ + !*** css ./node_modules/style-library/styles.css ***! + \\\\***************************************************/ +p { + color: steelblue; +} + +/*!************************************************!*\\\\ + !*** css ./node_modules/main-field/styles.css ***! + \\\\************************************************/ +p { + color: antiquewhite; +} + +/*!*********************************************************!*\\\\ + !*** css ./node_modules/package-with-exports/style.css ***! + \\\\*********************************************************/ +.load-me { + color: red; +} + +/*!***************************************!*\\\\ + !*** css ./extensions-imported.mycss ***! + \\\\***************************************/ +.custom-extension{ + color: green; +}.using-loader { color: red; } +/*!***********************!*\\\\ + !*** css ./file.less ***! + \\\\***********************/ +.link { + color: #428bca; +} + +/*!**********************************!*\\\\ + !*** css ./with-less-import.css ***! + \\\\**********************************/ + +.foo { + color: red; +} + +/*!*********************************!*\\\\ + !*** css ./prefer-relative.css ***! + \\\\*********************************/ +.relative { + color: red; +} + +/*!************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style/default.css ***! + \\\\************************************************************/ +.default { + color: steelblue; +} + +/*!**************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style-mode/mode.css ***! + \\\\**************************************************************/ +.mode { + color: red; +} + +/*!******************************************************************!*\\\\ + !*** css ./node_modules/condition-names-subpath/dist/custom.css ***! + \\\\******************************************************************/ +.dist { + color: steelblue; +} + +/*!************************************************************************!*\\\\ + !*** css ./node_modules/condition-names-subpath-extra/dist/custom.css ***! + \\\\************************************************************************/ +.dist { + color: steelblue; +} + +/*!******************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style-less/default.less ***! + \\\\******************************************************************/ +.conditional-names { + color: #428bca; +} + +/*!**********************************************************************!*\\\\ + !*** css ./node_modules/condition-names-custom-name/custom-name.css ***! + \\\\**********************************************************************/ +.custom-name { + color: steelblue; +} + +/*!************************************************************!*\\\\ + !*** css ./node_modules/style-and-main-library/styles.css ***! + \\\\************************************************************/ +.style { + color: steelblue; +} + +/*!**************************************************************!*\\\\ + !*** css ./node_modules/condition-names-webpack/webpack.css ***! + \\\\**************************************************************/ +.webpack { + color: steelblue; +} + +/*!*******************************************************************!*\\\\ + !*** css ./node_modules/condition-names-style-nested/default.css ***! + \\\\*******************************************************************/ +.default { + color: steelblue; +} + +/*!******************************!*\\\\ + !*** css ./style-import.css ***! + \\\\******************************/ + +/* Technically, this is not entirely true, but we allow it because the final file can be processed by the loader and return the CSS code */ + + +/* Failed */ + + +/*!*****************************!*\\\\ + !*** css ./print.css?foo=1 ***! + \\\\*****************************/ +body { + background: black; +} + +/*!*****************************!*\\\\ + !*** css ./print.css?foo=2 ***! + \\\\*****************************/ +body { + background: black; +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=3 (layer: default) ***! + \\\\**********************************************/ +@layer default { + body { + background: black; + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=4 (layer: default) ***! + \\\\**********************************************/ +@layer default { + body { + background: black; + } +} + +/*!*******************************************************!*\\\\ + !*** css ./print.css?foo=5 (supports: display: flex) ***! + \\\\*******************************************************/ +@supports (display: flex) { + body { + background: black; + } +} + +/*!*******************************************************!*\\\\ + !*** css ./print.css?foo=6 (supports: display: flex) ***! + \\\\*******************************************************/ +@supports (display: flex) { + body { + background: black; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./print.css?foo=7 (media: screen and (min-width: 400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width: 400px) { + body { + background: black; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./print.css?foo=8 (media: screen and (min-width: 400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width: 400px) { + body { + background: black; + } +} + +/*!************************************************************************!*\\\\ + !*** css ./print.css?foo=9 (layer: default) (supports: display: flex) ***! + \\\\************************************************************************/ +@layer default { + @supports (display: flex) { + body { + background: black; + } + } +} + +/*!**************************************************************************************!*\\\\ + !*** css ./print.css?foo=10 (layer: default) (media: screen and (min-width: 400px)) ***! + \\\\**************************************************************************************/ +@layer default { + @media screen and (min-width: 400px) { + body { + background: black; + } + } +} + +/*!***********************************************************************************************!*\\\\ + !*** css ./print.css?foo=11 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\***********************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=12 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=13 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=14 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=15 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!*****************************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=16 (layer: default) (supports: background: url(./img.png)) (media: screen and (min-width: 400px)) ***! + \\\\*****************************************************************************************************************************/ +@layer default { + @supports (background: url(./img.png)) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!*******************************************************************************************************************************!*\\\\ + !*** css ./print.css?foo=17 (layer: default) (supports: background: url(\\"./img.png\\")) (media: screen and (min-width: 400px)) ***! + \\\\*******************************************************************************************************************************/ +@layer default { + @supports (background: url(\\"./img.png\\")) { + @media screen and (min-width: 400px) { + body { + background: black; + } + } + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=18 (media: screen) ***! + \\\\**********************************************/ +@media screen { + body { + background: black; + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=19 (media: screen) ***! + \\\\**********************************************/ +@media screen { + body { + background: black; + } +} + +/*!**********************************************!*\\\\ + !*** css ./print.css?foo=20 (media: screen) ***! + \\\\**********************************************/ +@media screen { + body { + background: black; + } +} + +/*!******************************!*\\\\ + !*** css ./print.css?foo=21 ***! + \\\\******************************/ +body { + background: black; +} + +/*!**************************!*\\\\ + !*** css ./imported.css ***! + \\\\**************************/ +body { + background: green; +} + +/*!****************************************!*\\\\ + !*** css ./imported.css (layer: base) ***! + \\\\****************************************/ +@layer base { + body { + background: green; + } +} + +/*!****************************************************!*\\\\ + !*** css ./imported.css (supports: display: flex) ***! + \\\\****************************************************/ +@supports (display: flex) { + body { + background: green; + } +} + +/*!*************************************************!*\\\\ + !*** css ./imported.css (media: screen, print) ***! + \\\\*************************************************/ +@media screen, print { + body { + background: green; + } +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=1 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=2 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=3 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=4 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=5 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=6 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=7 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=8 ***! + \\\\******************************/ +a { + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style2.css?foo=9 ***! + \\\\******************************/ +a { + color: red; +} + +/*!********************************************************************!*\\\\ + !*** css ./style2.css (media: screen and (orientation:landscape)) ***! + \\\\********************************************************************/ +@media screen and (orientation:landscape) { + a { + color: red; + } +} + +/*!*********************************************************************!*\\\\ + !*** css ./style2.css (media: SCREEN AND (ORIENTATION: LANDSCAPE)) ***! + \\\\*********************************************************************/ +@media SCREEN AND (ORIENTATION: LANDSCAPE) { + a { + color: red; + } +} + +/*!****************************************************!*\\\\ + !*** css ./style2.css (media: (min-width: 100px)) ***! + \\\\****************************************************/ +@media (min-width: 100px) { + a { + color: red; + } +} + +/*!**********************************!*\\\\ + !*** css ./test.css?foo=1&bar=1 ***! + \\\\**********************************/ +.class { + content: \\"test.css\\"; +} + +/*!*****************************************!*\\\\ + !*** css ./style2.css?foo=1&bar=1#hash ***! + \\\\*****************************************/ +a { + color: red; +} + +/*!*************************************************************************************!*\\\\ + !*** css ./style2.css?foo=1&bar=1#hash (media: screen and (orientation:landscape)) ***! + \\\\*************************************************************************************/ +@media screen and (orientation:landscape) { + a { + color: red; + } +} + +/*!******************************!*\\\\ + !*** css ./style3.css?bar=1 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style3.css?bar=2 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style3.css?bar=3 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!******************************!*\\\\ + !*** css ./style3.css?=bar4 ***! + \\\\******************************/ +.class { + content: \\"style.css\\"; + color: red; +} + +/*!**************************!*\\\\ + !*** css ./styl'le7.css ***! + \\\\**************************/ +.class { + content: \\"style7.css\\"; +} + +/*!********************************!*\\\\ + !*** css ./styl'le7.css?foo=1 ***! + \\\\********************************/ +.class { + content: \\"style7.css\\"; +} + +/*!***************************!*\\\\ + !*** css ./test test.css ***! + \\\\***************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=1 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=2 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=3 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=4 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=5 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!**********************!*\\\\ + !*** css ./test.css ***! + \\\\**********************/ +.class { + content: \\"test.css\\"; +} + +/*!****************************!*\\\\ + !*** css ./test.css?foo=1 ***! + \\\\****************************/ +.class { + content: \\"test.css\\"; +} + +/*!****************************!*\\\\ + !*** css ./test.css?foo=2 ***! + \\\\****************************/ +.class { + content: \\"test.css\\"; +} + +/*!****************************!*\\\\ + !*** css ./test.css?foo=3 ***! + \\\\****************************/ +.class { + content: \\"test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=6 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=7 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=8 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./test test.css?foo=9 ***! + \\\\*********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!**********************************!*\\\\ + !*** css ./test test.css?fpp=10 ***! + \\\\**********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!**********************************!*\\\\ + !*** css ./test test.css?foo=11 ***! + \\\\**********************************/ +.class { + content: \\"test test.css\\"; +} + +/*!*********************************!*\\\\ + !*** css ./style6.css?foo=bazz ***! + \\\\*********************************/ +.class { + content: \\"style6.css\\"; +} + +/*!********************************************************!*\\\\ + !*** css ./string-loader.js?esModule=false!./test.css ***! + \\\\********************************************************/ +.class { + content: \\"test.css\\"; +} +.using-loader { color: red; } +/*!********************************!*\\\\ + !*** css ./style4.css?foo=bar ***! + \\\\********************************/ +.class { + content: \\"style4.css\\"; +} + +/*!*************************************!*\\\\ + !*** css ./style4.css?foo=bar#hash ***! + \\\\*************************************/ +.class { + content: \\"style4.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style4.css?#hash ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!********************************************************!*\\\\ + !*** css ./style4.css?foo=1 (supports: display: flex) ***! + \\\\********************************************************/ +@supports (display: flex) { + .class { + content: \\"style4.css\\"; + } +} + +/*!****************************************************************************************************!*\\\\ + !*** css ./style4.css?foo=2 (supports: display: flex) (media: screen and (orientation:landscape)) ***! + \\\\****************************************************************************************************/ +@supports (display: flex) { + @media screen and (orientation:landscape) { + .class { + content: \\"style4.css\\"; + } + } +} + +/*!******************************!*\\\\ + !*** css ./style4.css?foo=3 ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style4.css?foo=4 ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style4.css?foo=5 ***! + \\\\******************************/ +.class { + content: \\"style4.css\\"; +} + +/*!*****************************************************************************************************!*\\\\ + !*** css ./string-loader.js?esModule=false!./test.css (media: screen and (orientation: landscape)) ***! + \\\\*****************************************************************************************************/ +@media screen and (orientation: landscape) { + .class { + content: \\"test.css\\"; + } + .using-loader { color: red; }} + +/*!*************************************************************************************!*\\\\ + !*** css data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D ***! + \\\\*************************************************************************************/ +a { + color: red; +} +/*!**********************************************************************************************************************************!*\\\\ + !*** css data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20blue%3B%0D%0A%7D (media: screen and (orientation:landscape)) ***! + \\\\**********************************************************************************************************************************/ +@media screen and (orientation:landscape) { + a { + color: blue; + }} + +/*!***************************************************************************!*\\\\ + !*** css data:text/css;charset=utf-8;base64,YSB7DQogIGNvbG9yOiByZWQ7DQp9 ***! + \\\\***************************************************************************/ +a { + color: red; +} +/*!******************************!*\\\\ + !*** css ./style5.css?foo=1 ***! + \\\\******************************/ +.class { + content: \\"style5.css\\"; +} + +/*!******************************!*\\\\ + !*** css ./style5.css?foo=2 ***! + \\\\******************************/ +.class { + content: \\"style5.css\\"; +} + +/*!**************************************************!*\\\\ + !*** css ./style5.css?foo=3 (supports: unknown) ***! + \\\\**************************************************/ +@supports (unknown) { + .class { + content: \\"style5.css\\"; + } +} + +/*!********************************************************!*\\\\ + !*** css ./style5.css?foo=4 (supports: display: flex) ***! + \\\\********************************************************/ +@supports (display: flex) { + .class { + content: \\"style5.css\\"; + } +} + +/*!*******************************************************************!*\\\\ + !*** css ./style5.css?foo=5 (supports: display: flex !important) ***! + \\\\*******************************************************************/ +@supports (display: flex !important) { + .class { + content: \\"style5.css\\"; + } +} + +/*!***********************************************************************************************!*\\\\ + !*** css ./style5.css?foo=6 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\***********************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"style5.css\\"; + } + } +} + +/*!********************************************************!*\\\\ + !*** css ./style5.css?foo=7 (supports: selector(a b)) ***! + \\\\********************************************************/ +@supports (selector(a b)) { + .class { + content: \\"style5.css\\"; + } +} + +/*!********************************************************!*\\\\ + !*** css ./style5.css?foo=8 (supports: display: flex) ***! + \\\\********************************************************/ +@supports (display: flex) { + .class { + content: \\"style5.css\\"; + } +} + +/*!*****************************!*\\\\ + !*** css ./layer.css?foo=1 ***! + \\\\*****************************/ +@layer { + .class { + content: \\"layer.css\\"; + } +} + +/*!**********************************************!*\\\\ + !*** css ./layer.css?foo=2 (layer: default) ***! + \\\\**********************************************/ +@layer default { + .class { + content: \\"layer.css\\"; + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./layer.css?foo=3 (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"layer.css\\"; + } + } + } +} + +/*!**********************************************************************************************!*\\\\ + !*** css ./layer.css?foo=3 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************/ +@layer { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"layer.css\\"; + } + } + } +} + +/*!**********************************************************************************************!*\\\\ + !*** css ./layer.css?foo=4 (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************/ +@layer { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"layer.css\\"; + } + } + } +} + +/*!*****************************!*\\\\ + !*** css ./layer.css?foo=5 ***! + \\\\*****************************/ +@layer { + .class { + content: \\"layer.css\\"; + } +} + +/*!**************************************************!*\\\\ + !*** css ./layer.css?foo=6 (layer: foo.bar.baz) ***! + \\\\**************************************************/ +@layer foo.bar.baz { + .class { + content: \\"layer.css\\"; + } +} + +/*!*****************************!*\\\\ + !*** css ./layer.css?foo=7 ***! + \\\\*****************************/ +@layer { + .class { + content: \\"layer.css\\"; + } +} + +/*!*********************************************************************************************************!*\\\\ + !*** css ./style6.css (layer: default) (supports: display: flex) (media: screen and (min-width:400px)) ***! + \\\\*********************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=1 (layer: default) (supports: display: flex) (media: screen and (min-width:400px)) ***! + \\\\***************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!**********************************************************************************************!*\\\\ + !*** css ./style6.css?foo=2 (supports: display: flex) (media: screen and (min-width:400px)) ***! + \\\\**********************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } + } +} + +/*!********************************************************************!*\\\\ + !*** css ./style6.css?foo=3 (media: screen and (min-width:400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./style6.css?foo=4 (media: screen and (min-width:400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } +} + +/*!********************************************************************!*\\\\ + !*** css ./style6.css?foo=5 (media: screen and (min-width:400px)) ***! + \\\\********************************************************************/ +@media screen and (min-width:400px) { + .class { + content: \\"style6.css\\"; + } +} + +/*!****************************************************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=6 (layer: default) (supports: display : flex) (media: screen and ( min-width : 400px )) ***! + \\\\****************************************************************************************************************************************************/ +@layer default { + @supports (display : flex) { + @media screen and ( min-width : 400px ) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=7 (layer: DEFAULT) (supports: DISPLAY: FLEX) (media: SCREEN AND (MIN-WIDTH: 400PX)) ***! + \\\\****************************************************************************************************************/ +@layer DEFAULT { + @supports (DISPLAY: FLEX) { + @media SCREEN AND (MIN-WIDTH: 400PX) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!***********************************************************************************************!*\\\\ + !*** css ./style6.css?foo=8 (supports: DISPLAY: FLEX) (media: SCREEN AND (MIN-WIDTH: 400PX)) ***! + \\\\***********************************************************************************************/ +@layer { + @supports (DISPLAY: FLEX) { + @media SCREEN AND (MIN-WIDTH: 400PX) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\\\\ + !*** css ./style6.css?foo=9 (layer: /* Comment *_/default/* Comment *_/) (supports: /* Comment *_/display/* Comment *_/:/* Comment *_/ flex/* Comment *_/) (media: screen/* Comment *_/ and/* Comment *_/ (/* Comment *_/min-width/* Comment *_/: /* Comment *_/400px/* Comment *_/)) ***! + \\\\****************************************************************************************************************************************************************************************************************************************************************************************/ +@layer /* Comment */default/* Comment */ { + @supports (/* Comment */display/* Comment */:/* Comment */ flex/* Comment */) { + @media screen/* Comment */ and/* Comment */ (/* Comment */min-width/* Comment */: /* Comment */400px/* Comment */) { + .class { + content: \\"style6.css\\"; + } + } + } +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=10 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=11 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=12 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=13 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=14 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!*******************************!*\\\\ + !*** css ./style6.css?foo=15 ***! + \\\\*******************************/ +.class { + content: \\"style6.css\\"; +} + +/*!**************************************************************************!*\\\\ + !*** css ./style6.css?foo=16 (media: print and (orientation:landscape)) ***! + \\\\**************************************************************************/ +@media print and (orientation:landscape) { + .class { + content: \\"style6.css\\"; + } +} + +/*!****************************************************************************************!*\\\\ + !*** css ./style6.css?foo=17 (media: print and (orientation:landscape)/* Comment *_/) ***! + \\\\****************************************************************************************/ +@media print and (orientation:landscape)/* Comment */ { + .class { + content: \\"style6.css\\"; + } +} + +/*!**************************************************************************!*\\\\ + !*** css ./style6.css?foo=18 (media: print and (orientation:landscape)) ***! + \\\\**************************************************************************/ +@media print and (orientation:landscape) { + .class { + content: \\"style6.css\\"; + } +} + +/*!***************************************************************!*\\\\ + !*** css ./style8.css (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************/ +@media screen and (min-width: 400px) { + .class { + content: \\"style8.css\\"; + } +} + +/*!**************************************************************!*\\\\ + !*** css ./style8.css (media: (prefers-color-scheme: dark)) ***! + \\\\**************************************************************/ +@media (prefers-color-scheme: dark) { + .class { + content: \\"style8.css\\"; + } +} + +/*!**************************************************!*\\\\ + !*** css ./style8.css (supports: display: flex) ***! + \\\\**************************************************/ +@supports (display: flex) { + .class { + content: \\"style8.css\\"; + } +} + +/*!******************************************************!*\\\\ + !*** css ./style8.css (supports: ((display: flex))) ***! + \\\\******************************************************/ +@supports (((display: flex))) { + .class { + content: \\"style8.css\\"; + } +} + +/*!********************************************************************************************************!*\\\\ + !*** css ./style8.css (supports: ((display: inline-grid))) (media: screen and (((min-width: 400px)))) ***! + \\\\********************************************************************************************************/ +@supports (((display: inline-grid))) { + @media screen and (((min-width: 400px))) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!**************************************************!*\\\\ + !*** css ./style8.css (supports: display: grid) ***! + \\\\**************************************************/ +@supports (display: grid) { + .class { + content: \\"style8.css\\"; + } +} + +/*!*****************************************************************************************!*\\\\ + !*** css ./style8.css (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\*****************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!*******************************************!*\\\\ + !*** css ./style8.css (layer: framework) ***! + \\\\*******************************************/ +@layer framework { + .class { + content: \\"style8.css\\"; + } +} + +/*!*****************************************!*\\\\ + !*** css ./style8.css (layer: default) ***! + \\\\*****************************************/ +@layer default { + .class { + content: \\"style8.css\\"; + } +} + +/*!**************************************!*\\\\ + !*** css ./style8.css (layer: base) ***! + \\\\**************************************/ +@layer base { + .class { + content: \\"style8.css\\"; + } +} + +/*!*******************************************************************!*\\\\ + !*** css ./style8.css (layer: default) (supports: display: flex) ***! + \\\\*******************************************************************/ +@layer default { + @supports (display: flex) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!**********************************************************************************************************!*\\\\ + !*** css ./style8.css (layer: default) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media screen and (min-width: 400px) { + .class { + content: \\"style8.css\\"; + } + } + } +} + +/*!************************!*\\\\ + !*** css ./style2.css ***! + \\\\************************/ +@layer { + a { + color: red; + } +} + +/*!*********************************************************************************!*\\\\ + !*** css ./style9.css (media: unknown(default) unknown(display: flex) unknown) ***! + \\\\*********************************************************************************/ +@media unknown(default) unknown(display: flex) unknown { + .class { + content: \\"style9.css\\"; + } +} + +/*!**************************************************!*\\\\ + !*** css ./style9.css (media: unknown(default)) ***! + \\\\**************************************************/ +@media unknown(default) { + .class { + content: \\"style9.css\\"; + } +} + +/*!*************************!*\\\\ + !*** css ./style11.css ***! + \\\\*************************/ +.style11 { + color: red; +} + +/*!*************************!*\\\\ + !*** css ./style12.css ***! + \\\\*************************/ + +.style12 { + color: red; +} + +/*!*************************!*\\\\ + !*** css ./style13.css ***! + \\\\*************************/ +div{color: red;} + +/*!*************************!*\\\\ + !*** css ./style10.css ***! + \\\\*************************/ + + +.style10 { + color: red; +} + +/*!************************************************************************************!*\\\\ + !*** css ./media-deep-deep-nested.css (media: screen and (orientation: portrait)) ***! + \\\\************************************************************************************/ +@media screen and (min-width: 400px) { + @media screen and (max-width: 500px) { + @media screen and (orientation: portrait) { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!**************************************************************************!*\\\\ + !*** css ./media-deep-nested.css (media: screen and (max-width: 500px)) ***! + \\\\**************************************************************************/ +@media screen and (min-width: 400px) { + @media screen and (max-width: 500px) { + + .class { + deep-nested: 1; + } + } +} + +/*!*********************************************************************!*\\\\ + !*** css ./media-nested.css (media: screen and (min-width: 400px)) ***! + \\\\*********************************************************************/ +@media screen and (min-width: 400px) { + + .class { + nested: 1; + } +} + +/*!**********************************************************************!*\\\\ + !*** css ./supports-deep-deep-nested.css (supports: display: table) ***! + \\\\**********************************************************************/ +@supports (display: flex) { + @supports (display: grid) { + @supports (display: table) { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!****************************************************************!*\\\\ + !*** css ./supports-deep-nested.css (supports: display: grid) ***! + \\\\****************************************************************/ +@supports (display: flex) { + @supports (display: grid) { + + .class { + deep-nested: 1; + } + } +} + +/*!***********************************************************!*\\\\ + !*** css ./supports-nested.css (supports: display: flex) ***! + \\\\***********************************************************/ +@supports (display: flex) { + + .class { + nested: 1; + } +} + +/*!*****************************************************!*\\\\ + !*** css ./layer-deep-deep-nested.css (layer: baz) ***! + \\\\*****************************************************/ +@layer foo { + @layer bar { + @layer baz { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!************************************************!*\\\\ + !*** css ./layer-deep-nested.css (layer: bar) ***! + \\\\************************************************/ +@layer foo { + @layer bar { + + .class { + deep-nested: 1; + } + } +} + +/*!*******************************************!*\\\\ + !*** css ./layer-nested.css (layer: foo) ***! + \\\\*******************************************/ +@layer foo { + + .class { + nested: 1; + } +} + +/*!*********************************************************************************************************************!*\\\\ + !*** css ./all-deep-deep-nested.css (layer: baz) (supports: display: table) (media: screen and (min-width: 600px)) ***! + \\\\*********************************************************************************************************************/ +@layer foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + @layer baz { + @supports (display: table) { + @media screen and (min-width: 600px) { + .class { + deep-deep-nested: 1; + } + } + } + } + } + } + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./all-deep-nested.css (layer: bar) (supports: display: grid) (media: screen and (min-width: 500px)) ***! + \\\\***************************************************************************************************************/ +@layer foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + + .class { + deep-nested: 1; + } + } + } + } + } + } +} + +/*!**********************************************************************************************************!*\\\\ + !*** css ./all-nested.css (layer: foo) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************************/ +@layer foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + + .class { + nested: 1; + } + } + } +} + +/*!*****************************************************!*\\\\ + !*** css ./mixed-deep-deep-nested.css (layer: bar) ***! + \\\\*****************************************************/ +@media screen and (min-width: 400px) { + @supports (display: flex) { + @layer bar { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!*************************************************************!*\\\\ + !*** css ./mixed-deep-nested.css (supports: display: flex) ***! + \\\\*************************************************************/ +@media screen and (min-width: 400px) { + @supports (display: flex) { + + .class { + deep-nested: 1; + } + } +} + +/*!*********************************************************************!*\\\\ + !*** css ./mixed-nested.css (media: screen and (min-width: 400px)) ***! + \\\\*********************************************************************/ +@media screen and (min-width: 400px) { + + .class { + nested: 1; + } +} + +/*!********************************************!*\\\\ + !*** css ./anonymous-deep-deep-nested.css ***! + \\\\********************************************/ +@layer { + @layer { + @layer { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!***************************************!*\\\\ + !*** css ./anonymous-deep-nested.css ***! + \\\\***************************************/ +@layer { + @layer { + + .class { + deep-nested: 1; + } + } +} + +/*!*****************************************************!*\\\\ + !*** css ./layer-deep-deep-nested.css (layer: baz) ***! + \\\\*****************************************************/ +@layer { + @layer base { + @layer baz { + .class { + deep-deep-nested: 1; + } + } + } +} + +/*!*************************************************!*\\\\ + !*** css ./layer-deep-nested.css (layer: base) ***! + \\\\*************************************************/ +@layer { + @layer base { + + .class { + deep-nested: 1; + } + } +} + +/*!**********************************!*\\\\ + !*** css ./anonymous-nested.css ***! + \\\\**********************************/ +@layer { + + .class { + deep-nested: 1; + } +} + +/*!************************************************************************************!*\\\\ + !*** css ./media-deep-deep-nested.css (media: screen and (orientation: portrait)) ***! + \\\\************************************************************************************/ +@media screen and (orientation: portrait) { + .class { + deep-deep-nested: 1; + } +} + +/*!**************************************************!*\\\\ + !*** css ./style8.css (supports: display: flex) ***! + \\\\**************************************************/ +@media screen and (orientation: portrait) { + @supports (display: flex) { + .class { + content: \\"style8.css\\"; + } + } +} + +/*!******************************************************************************!*\\\\ + !*** css ./duplicate-nested.css (media: screen and (orientation: portrait)) ***! + \\\\******************************************************************************/ +@media screen and (orientation: portrait) { + + .class { + duplicate-nested: true; + } +} + +/*!********************************************!*\\\\ + !*** css ./anonymous-deep-deep-nested.css ***! + \\\\********************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer { + @layer { + .class { + deep-deep-nested: 1; + } + } + } + } +} + +/*!***************************************!*\\\\ + !*** css ./anonymous-deep-nested.css ***! + \\\\***************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer { + + .class { + deep-nested: 1; + } + } + } +} + +/*!*****************************************************!*\\\\ + !*** css ./layer-deep-deep-nested.css (layer: baz) ***! + \\\\*****************************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer base { + @layer baz { + .class { + deep-deep-nested: 1; + } + } + } + } +} + +/*!*************************************************!*\\\\ + !*** css ./layer-deep-nested.css (layer: base) ***! + \\\\*************************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + @layer base { + + .class { + deep-nested: 1; + } + } + } +} + +/*!********************************************************************************************************!*\\\\ + !*** css ./anonymous-nested.css (supports: display: flex) (media: screen and (orientation: portrait)) ***! + \\\\********************************************************************************************************/ +@supports (display: flex) { + @media screen and (orientation: portrait) { + + .class { + deep-nested: 1; + } + } +} + +/*!*********************************************************************************************************************!*\\\\ + !*** css ./all-deep-deep-nested.css (layer: baz) (supports: display: table) (media: screen and (min-width: 600px)) ***! + \\\\*********************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + @layer baz { + @supports (display: table) { + @media screen and (min-width: 600px) { + .class { + deep-deep-nested: 1; + } + } + } + } + } + } + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./all-deep-nested.css (layer: bar) (supports: display: grid) (media: screen and (min-width: 500px)) ***! + \\\\***************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + @layer bar { + @supports (display: grid) { + @media screen and (min-width: 500px) { + + .class { + deep-nested: 1; + } + } + } + } + } + } +} + +/*!****************************************************************************************************************!*\\\\ + !*** css ./all-nested.css (layer: super.foo) (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\****************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media screen and (min-width: 400px) { + + .class { + nested: 1; + } + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./style2.css?warning=6 (supports: unknown: layer(super.foo)) (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************/ +@supports (unknown: layer(super.foo)) { + @media screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!***************************************************************************************************************!*\\\\ + !*** css ./style2.css?warning=7 (supports: url: url(\\"./unknown.css\\")) (media: screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************/ +@supports (url: url(\\"./unknown.css\\")) { + @media screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!*************************************************************************************************************!*\\\\ + !*** css ./style2.css?warning=8 (supports: url: url(./unknown.css)) (media: screen and (min-width: 400px)) ***! + \\\\*************************************************************************************************************/ +@supports (url: url(./unknown.css)) { + @media screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!***************************************************************************************************************************************!*\\\\ + !*** css ./style2.css?foo=unknown (layer: super.foo) (supports: display: flex) (media: unknown(\\"foo\\") screen and (min-width: 400px)) ***! + \\\\***************************************************************************************************************************************/ +@layer super.foo { + @supports (display: flex) { + @media unknown(\\"foo\\") screen and (min-width: 400px) { + a { + color: red; + } + } + } +} + +/*!******************************************************************************************************************************************************!*\\\\ + !*** css ./style2.css?foo=unknown1 (layer: super.foo) (supports: display: url(\\"./unknown.css\\")) (media: unknown(foo) screen and (min-width: 400px)) ***! + \\\\******************************************************************************************************************************************************/ +@layer super.foo { + @supports (display: url(\\"./unknown.css\\")) { + @media unknown(foo) screen and (min-width: 400px) { + a { + color: red; + } + } + } +} + +/*!*********************************************************************************************************************************************!*\\\\ + !*** css ./style2.css?foo=unknown2 (layer: super.foo) (supports: display: url(./unknown.css)) (media: \\"foo\\" screen and (min-width: 400px)) ***! + \\\\*********************************************************************************************************************************************/ +@layer super.foo { + @supports (display: url(./unknown.css)) { + @media \\"foo\\" screen and (min-width: 400px) { + a { + color: red; + } + } + } +} + +/*!***************************************************!*\\\\ + !*** css ./style2.css?unknown3 (media: \\"string\\") ***! + \\\\***************************************************/ +@media \\"string\\" { + a { + color: red; + } +} + +/*!**********************************************************************************************************************************!*\\\\ + !*** css ./style2.css?wrong-order-but-valid=6 (supports: display: flex) (media: layer(super.foo) screen and (min-width: 400px)) ***! + \\\\**********************************************************************************************************************************/ +@supports (display: flex) { + @media layer(super.foo) screen and (min-width: 400px) { + a { + color: red; + } + } +} + +/*!****************************************!*\\\\ + !*** css ./style2.css?after-namespace ***! + \\\\****************************************/ +a { + color: red; +} + +/*!*************************************************************************!*\\\\ + !*** css ./style2.css?multiple=1 (media: url(./style2.css?multiple=2)) ***! + \\\\*************************************************************************/ +@media url(./style2.css?multiple=2) { + a { + color: red; + } +} + +/*!***************************************************************************!*\\\\ + !*** css ./style2.css?multiple=3 (media: url(\\"./style2.css?multiple=4\\")) ***! + \\\\***************************************************************************/ +@media url(\\"./style2.css?multiple=4\\") { + a { + color: red; + } +} + +/*!**************************************************************************!*\\\\ + !*** css ./style2.css?strange=3 (media: url(\\"./style2.css?multiple=4\\")) ***! + \\\\**************************************************************************/ +@media url(\\"./style2.css?multiple=4\\") { + a { + color: red; + } +} + +/*!************************************************************!*\\\\ + !*** css ./dark.css (media: (prefers-color-scheme: dark)) ***! + \\\\************************************************************/ +@media (prefers-color-scheme: dark) { + a { + color: white; + } +} + +/*!***************************************!*\\\\ + !*** css ./list-of-media-queries.css ***! + \\\\***************************************/ + +a { + color: black; +} + +/*!*********************************!*\\\\ + !*** css ./circular-nested.css ***! + \\\\*********************************/ + +.circular-nested { + color: red; +} + +/*!**************************!*\\\\ + !*** css ./circular.css ***! + \\\\**************************/ + +.circular { + color: red; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +/* Has the same URL */ + + + + + + + + +/* anonymous */ + +/* All unknown parse as media for compatibility */ + + + +/* Inside support */ + + +/** Possible syntax in future */ + + +/** Unknown */ + +@import-normalize; + +/** Warnings */ + +@import nourl(test.css); +@import ; +@import foo-bar; +@import layer(super.foo) \\"./style2.css?warning=1\\" supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) \\"./style2.css?warning=2\\" screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) \\"./style2.css?warning=3\\"; +@import layer(super.foo) url(fae7e602dbe59a260308.css?warning=4) supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) url(fae7e602dbe59a260308.css?warning=5) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) url(fae7e602dbe59a260308.css?warning=6); +@namespace url(http://www.w3.org/1999/xhtml); +@import supports(background: url(09a1a1112c577c279435.png)); +@import supports(background: url(09a1a1112c577c279435.png)) screen and (min-width: 400px); +@import layer(test) supports(background: url(09a1a1112c577c279435.png)) screen and (min-width: 400px); +@import screen and (min-width: 400px); + + + +/* FIXME */ +/*@import url(\\"webpackIgnore-order.css\\");*/ + +body { + background: red; +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; + +exports[`ConfigTestCases css import exported tests should compile 2`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +@import \\"./style-import.css\\"; +@import \\"print.css?foo=1\\"; +@import url(\\"print.css?foo=2\\"); +@import \\"print.css?foo=3\\" layer(default); +@import url(\\"print.css?foo=4\\") layer(default); +@import \\"print.css?foo=5\\" supports(display: flex); +@import url(\\"print.css?foo=6\\") supports(display: flex); +@import \\"print.css?foo=7\\" screen and (min-width: 400px); +@import url(\\"print.css?foo=8\\") screen and (min-width: 400px); +@import \\"print.css?foo=9\\" layer(default) supports(display: flex); +@import \\"print.css?foo=10\\" layer(default) screen and (min-width: 400px); +@import \\"print.css?foo=11\\" supports(display: flex) screen and (min-width: 400px); +@import \\"print.css?foo=12\\" layer(default) supports(display: flex) screen and (min-width: 400px); +@import \\"print.css?foo=13\\"layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(print.css?foo=14)layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(\\"print.css?foo=15\\")layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(print.css?foo=16)layer(default)supports(background: url(./img.png))screen and (min-width: 400px); +@import url(print.css?foo=17)layer(default)supports(background: url(\\"./img.png\\"))screen and (min-width: 400px); +@import url(print.css?foo=18)screen; +@import url(\\"print.css?foo=19\\")screen; +@import \\"print.css?foo=20\\"screen; +@import url(print.css?foo=18) screen ; +@import url(\\"print.css?foo=19\\") screen ; +@import \\"print.css?foo=20\\" screen ; +@import \\"print.css?foo=21\\" ; + +/* Has the same URL */ +@import \\"imported.css\\"; +@import \\"imported.css\\" layer(base); +@import \\"imported.css\\" supports(display: flex); +@import \\"imported.css\\" screen, print; + +@import url(style2.css?foo=1); +@import url('style2.css?foo=2'); +@import url(\\"style2.css?foo=3\\"); +@IMPORT url(style2.css?foo=4); +@import URL(style2.css?foo=5); +@import url(style2.css?foo=6 ); +@import url( style2.css?foo=7); +@import url( style2.css?foo=8 ); +@import url( +style2.css?foo=9 +); +@import url(); +@import url(''); +@import url(\\"\\"); +@import ''; +@import \\"\\"; +@import \\" \\"; +@import \\"\\\\ +\\"; +@import url(); +@import url(''); +@import url(\\"\\"); +@import url(\\"\\") /* test */; +@import url(\\"\\") screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) SCREEN AND (ORIENTATION: LANDSCAPE); +@import url(style2.css)screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) (min-width: 100px); +@import url(https://test.cases/path/../../../../configCases/css/import/external.css); +@import url(https://test.cases/path/../../../../configCases/css/import/external.css) screen and (orientation:landscape); +@import \\"//example.com/style.css\\"; +@import url('test.css?foo=1&bar=1'); +@import url('style2.css?foo=1&bar=1#hash'); +@import url('style2.css?foo=1&bar=1#hash') screen and (orientation:landscape); +@import url('https://fonts.googleapis.com/css?family=Roboto'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1') layer(super.foo) supports(display: flex) screen and (min-width: 400px); + +@import './sty\\\\ +le3.css?bar=1'; +@import './sty\\\\ +\\\\ +\\\\ +le3.css?bar=2'; +@import url('./sty\\\\ +le3.css?bar=3'); +@import url('./sty\\\\ +\\\\ +\\\\ +le3.css?=bar4'); + +@import \\"./styl'le7.css\\"; +@import url(\\"./styl'le7.css?foo=1\\"); +@import './styl\\\\'le7.css'; +@import url('./styl\\\\'le7.css'); +@import './test test.css'; +@import url('./test test.css?foo=1'); +@import './test\\\\ test.css?foo=2'; +@import url('./test\\\\ test.css?foo=3'); +@import './test%20test.css?foo=4'; +@import url('./test%20test.css?foo=5'); +@import './\\\\74\\\\65\\\\73\\\\74.css'; +@import url('./\\\\74\\\\65\\\\73\\\\74.css?foo=1'); +@import './t\\\\65\\\\73\\\\74.css?foo=2'; +@import url('./t\\\\65\\\\73\\\\74.css?foo=3'); +@import url(./test\\\\ test.css?foo=6); +@import url(./t\\\\65st%20test.css?foo=7); +@import url('./t\\\\65st%20test.css?foo=8'); +@import url(\\"./t\\\\65st%20test.css?foo=9\\"); +@import \\"./t\\\\65st%20test.css?fpp=10\\"; +@import './t\\\\65st%20test.css?foo=11'; +@import url( style6.css?foo=bazz ); +@import '\\\\ +\\\\ +\\\\ +'; +@import url('./string-loader.js?esModule=false!./test.css'); +@import url(style4.css?foo=bar); +@import url(style4.css?foo=bar#hash); +@import url(style4.css?#hash); +@import \\"style4.css?foo=1\\" supports(display: flex); +@import \\"style4.css?foo=2\\" supports(display: flex) screen and (orientation:landscape); + +@import \\" ./style4.css?foo=3 \\"; +@import url(' ./style4.css?foo=4 '); +@import url( ./style4.css?foo=5 ); + +@import url(' https://fonts.googleapis.com/css?family=Roboto '); +@import url('./string-loader.js?esModule=false'); +@import url(' ./string-loader.js?esModule=false!./test.css ') screen and (orientation: landscape); +@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D); +@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20blue%3B%0D%0A%7D) screen and (orientation:landscape); +@import url(\\"data:text/css;charset=utf-8;base64,YSB7DQogIGNvbG9yOiByZWQ7DQp9\\"); + +@import url(\\"./style5.css?foo=1\\") supports(); +@import url(\\"./style5.css?foo=2\\") supports( ); +@import url(\\"./style5.css?foo=3\\") supports(unknown); +@import url(\\"./style5.css?foo=4\\") supports(display: flex); +@import url(\\"./style5.css?foo=5\\") supports(display: flex !important); +@import url(\\"./style5.css?foo=6\\") supports(display: flex) screen and (min-width: 400px); +@import url(\\"./style5.css?foo=7\\") supports(selector(a b)); +@import url(\\"./style5.css?foo=8\\") supports( display: flex ); +@import url(\\"./layer.css?foo=1\\") layer; +@import url(\\"./layer.css?foo=2\\") layer(default); +@import url(\\"./layer.css?foo=3\\") layer(default) supports(display: flex) screen and (min-width: 400px); +@import url(\\"./layer.css?foo=3\\") layer supports(display: flex) screen and (min-width: 400px); +@import url(\\"./layer.css?foo=4\\") layer() supports(display: flex) screen and (min-width: 400px); +@import url(\\"./layer.css?foo=5\\") layer(); +@import url(\\"./layer.css?foo=6\\") layer( foo.bar.baz ); +@import url(\\"./layer.css?foo=7\\") layer( ); +@import url(\\"./style6.css\\")layer(default)supports(display: flex)screen and (min-width:400px); +@import \\"./style6.css?foo=1\\"layer(default)supports(display: flex)screen and (min-width:400px); +@import \\"./style6.css?foo=2\\"supports(display: flex)screen and (min-width:400px); +@import \\"./style6.css?foo=3\\"screen and (min-width:400px); +@import url(\\"./style6.css?foo=4\\")screen and (min-width:400px); +@import url(./style6.css?foo=5)screen and (min-width:400px); +@import url(\\"./style6.css?foo=6\\") layer( default ) supports( display : flex ) screen and ( min-width : 400px ); +@import URL(\\"./style6.css?foo=7\\") LAYER(DEFAULT) SUPPORTS(DISPLAY: FLEX) SCREEN AND (MIN-WIDTH: 400PX); +@import url(\\"./style6.css?foo=8\\") LAYER SUPPORTS(DISPLAY: FLEX) SCREEN AND (MIN-WIDTH: 400PX); +@import url(\\"./style6.css?foo=9\\") /* Comment */ layer(/* Comment */default/* Comment */) /* Comment */ supports(/* Comment */display/* Comment */:/* Comment */ flex/* Comment */)/* Comment */ screen/* Comment */ and/* Comment */ (/* Comment */min-width/* Comment */: /* Comment */400px/* Comment */); +@import url(style6.css?foo=10) /* Comment */; +@import url(style6.css?foo=11) /* Comment */ /* Comment */; +@import url(style6.css?foo=12) /* Comment *//* Comment */; +@import url(style6.css?foo=13)/* Comment *//* Comment */; +@import +url(style6.css?foo=14) +/* Comment */ +/* Comment */; +@import /* Comment */ url(style6.css?foo=15) /* Comment */; +@import url(style6.css?foo=16) /* Comment */ print and (orientation:landscape); +@import url(style6.css?foo=17)/* Comment */print and (orientation:landscape)/* Comment */; +@import /* Comment */ url(style6.css?foo=18) /* Comment */ print and (orientation:landscape); + +@import url(\\"./style8.css\\") screen and (min-width: 400px); +@import url(\\"./style8.css\\") (prefers-color-scheme: dark); +@import url(\\"./style8.css\\") supports(display: flex); +@import url(\\"./style8.css\\") supports(((display: flex))); +@import url(\\"./style8.css\\") supports(((display: inline-grid))) screen and (((min-width: 400px))); +@import url(\\"./style8.css\\") supports(display: flex); +@import url('./style8.css') supports(display: grid); +@import url(\\"./style8.css\\") supports(display: flex) screen and (min-width: 400px); +@import url(\\"./style8.css\\") layer(framework); +@import url(\\"./style8.css\\") layer(default); +@import url(\\"./style8.css\\") layer(base); +@import url(\\"./style8.css\\") layer(default) supports(display: flex); +@import url(\\"./style8.css\\") layer(default) supports(display: flex) screen and (min-width: 400px); + +/* anonymous */ +@import \\"style2.css\\" layer(); +@import \\"style2.css\\" layer; + +/* All unknown parse as media for compatibility */ +@import url(\\"./style9.css\\") unknown(default) unknown(display: flex) unknown; +@import url(\\"./style9.css\\") unknown(default); + +@import url(\\"./style10.css\\"); + +@import \\"./media-nested.css\\" screen and (min-width: 400px); +@import \\"./supports-nested.css\\" supports(display: flex); +@import \\"./layer-nested.css\\" layer(foo); +@import \\"./all-nested.css\\" layer(foo) supports(display: flex) screen and (min-width: 400px); +@import \\"./mixed-nested.css\\" screen and (min-width: 400px); +@import \\"./anonymous-nested.css\\" layer; +@import \\"./media-deep-deep-nested.css\\" screen and (orientation: portrait); +@import \\"./duplicate-nested.css\\" screen and (orientation: portrait); +@import \\"./anonymous-nested.css\\" supports(display: flex) screen and (orientation: portrait); +@import \\"./all-nested.css\\" layer(super.foo) supports(display: flex) screen and (min-width: 400px); + +/* Inside support */ + +@import url(\\"/style2.css?warning=6\\") supports(unknown: layer(super.foo)) screen and (min-width: 400px); +@import url(\\"/style2.css?warning=7\\") supports(url: url(\\"./unknown.css\\")) screen and (min-width: 400px); +@import url(\\"/style2.css?warning=8\\") supports(url: url(./unknown.css)) screen and (min-width: 400px); + +/** Possible syntax in future */ + +@import url(\\"/style2.css?foo=unknown\\") layer(super.foo) supports(display: flex) unknown(\\"foo\\") screen and (min-width: 400px); +@import url(\\"/style2.css?foo=unknown1\\") layer(super.foo) supports(display: url(\\"./unknown.css\\")) unknown(foo) screen and (min-width: 400px); +@import url(\\"/style2.css?foo=unknown2\\") layer(super.foo) supports(display: url(./unknown.css)) \\"foo\\" screen and (min-width: 400px); +@import \\"./style2.css?unknown3\\" \\"string\\"; + +/** Unknown */ + +@import-normalize; + +/** Warnings */ + +@import nourl(test.css); +@import ; +@import foo-bar; +@import layer(super.foo) \\"./style2.css?warning=1\\" supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) \\"./style2.css?warning=2\\" screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) \\"./style2.css?warning=3\\"; +@import layer(super.foo) url(\\"./style2.css?warning=4\\") supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) url(\\"./style2.css?warning=5\\") screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) url(\\"./style2.css?warning=6\\"); +@import url(\\"/style2.css?wrong-order-but-valid=6\\") supports(display: flex) layer(super.foo) screen and (min-width: 400px); +@namespace url(http://www.w3.org/1999/xhtml); +@import url(\\"./style2.css?after-namespace\\"); +@import supports(background: url(\\"./img.png\\")); +@import supports(background: url(\\"./img.png\\")) screen and (min-width: 400px); +@import layer(test) supports(background: url(\\"./img.png\\")) screen and (min-width: 400px); +@import screen and (min-width: 400px); + +@import url(./style2.css?multiple=1) url(./style2.css?multiple=2); +@import url(\\"./style2.css?multiple=3\\") url(\\"./style2.css?multiple=4\\"); +@import \\"./style2.css?strange=3\\" url(\\"./style2.css?multiple=4\\"); + +@import url(\\"external-1.css\\"); +@import url(\\"external-2.css\\") supports(display: grid) screen and (max-width: 400px); +@import url(\\"external-3.css\\") supports(not (display: grid) and (display: flex)) screen and (max-width: 400px); +@import url(\\"external-4.css\\") supports((selector(h2 > p)) and + (font-tech(color-COLRv1))); +@import url(external-5.css) layer(default); +@import url(external-6.css) layer(default); +@import url(\\"external-7.css\\") layer(); +@import url(\\"external-8.css\\") layer; +@import url(\\"external-9.css\\") print; +@import url(\\"external-10.css\\") print, screen; +@import url(\\"external-11.css\\") screen; +@import url(\\"external-12.css\\") screen and (orientation: landscape); +@import url(\\"external-13.css\\") supports(not (display: flex)); +@import url(\\"external-14.css\\") layer(default) supports(display: grid) screen and (max-width: 400px); + +@import url(\\"ignore.css\\"); +@import url(\\"list-of-media-queries.css\\"); +@import url(\\"/alias.css\\"); +@import url(\\"circular.css\\"); +/* FIXME */ +/*@import url(\\"webpackIgnore-order.css\\");*/ + +body { + background: red; +} + + +/*# sourceMappingURL=bundle1.css.map*/", +] +`; diff --git a/test/configCases/css/import/all-deep-deep-nested.css b/test/configCases/css/import/all-deep-deep-nested.css new file mode 100644 index 00000000000..2b3fb00069f --- /dev/null +++ b/test/configCases/css/import/all-deep-deep-nested.css @@ -0,0 +1,3 @@ +.class { + deep-deep-nested: 1; +} diff --git a/test/configCases/css/import/all-deep-nested.css b/test/configCases/css/import/all-deep-nested.css new file mode 100644 index 00000000000..78ed2513899 --- /dev/null +++ b/test/configCases/css/import/all-deep-nested.css @@ -0,0 +1,5 @@ +@import "./all-deep-deep-nested.css" layer(baz) supports(display: table) screen and (min-width: 600px); + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/all-nested.css b/test/configCases/css/import/all-nested.css new file mode 100644 index 00000000000..1bfcebf48ac --- /dev/null +++ b/test/configCases/css/import/all-nested.css @@ -0,0 +1,5 @@ +@import "./all-deep-nested.css" layer(bar) supports(display: grid) screen and (min-width: 500px); + +.class { + nested: 1; +} diff --git a/test/configCases/css/import/anonymous-deep-deep-nested.css b/test/configCases/css/import/anonymous-deep-deep-nested.css new file mode 100644 index 00000000000..2b3fb00069f --- /dev/null +++ b/test/configCases/css/import/anonymous-deep-deep-nested.css @@ -0,0 +1,3 @@ +.class { + deep-deep-nested: 1; +} diff --git a/test/configCases/css/import/anonymous-deep-nested.css b/test/configCases/css/import/anonymous-deep-nested.css new file mode 100644 index 00000000000..f22d30e30b4 --- /dev/null +++ b/test/configCases/css/import/anonymous-deep-nested.css @@ -0,0 +1,5 @@ +@import "./anonymous-deep-deep-nested.css" layer; + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/anonymous-nested.css b/test/configCases/css/import/anonymous-nested.css new file mode 100644 index 00000000000..9187d233eea --- /dev/null +++ b/test/configCases/css/import/anonymous-nested.css @@ -0,0 +1,6 @@ +@import "./anonymous-deep-nested.css" layer; +@import "./layer-deep-nested.css" layer(base); + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/circular-nested.css b/test/configCases/css/import/circular-nested.css new file mode 100644 index 00000000000..98442fa7931 --- /dev/null +++ b/test/configCases/css/import/circular-nested.css @@ -0,0 +1,5 @@ +@import url(circular.css); + +.circular-nested { + color: red; +} diff --git a/test/configCases/css/import/circular.css b/test/configCases/css/import/circular.css new file mode 100644 index 00000000000..caea838fc46 --- /dev/null +++ b/test/configCases/css/import/circular.css @@ -0,0 +1,8 @@ +@import url(circular.css); +@import url(circular.css); +@import url(circular-nested.css); +@import url("./style2.css"); + +.circular { + color: red; +} diff --git a/test/configCases/css/import/dark.css b/test/configCases/css/import/dark.css new file mode 100644 index 00000000000..7e53924e2ed --- /dev/null +++ b/test/configCases/css/import/dark.css @@ -0,0 +1,3 @@ +a { + color: white; +} diff --git a/test/configCases/css/import/directory/index.css b/test/configCases/css/import/directory/index.css new file mode 100644 index 00000000000..dfd5bb45b24 --- /dev/null +++ b/test/configCases/css/import/directory/index.css @@ -0,0 +1,3 @@ +.directory-css { + color: red; +} \ No newline at end of file diff --git a/test/configCases/css/import/duplicate-nested.css b/test/configCases/css/import/duplicate-nested.css new file mode 100644 index 00000000000..94e620d7427 --- /dev/null +++ b/test/configCases/css/import/duplicate-nested.css @@ -0,0 +1,6 @@ +@import url("./style8.css") supports(display: flex); +@import url("./style8.css") supports(display: flex); + +.class { + duplicate-nested: true; +} diff --git a/test/configCases/css/import/errors.js b/test/configCases/css/import/errors.js new file mode 100644 index 00000000000..7e0aabc7f86 --- /dev/null +++ b/test/configCases/css/import/errors.js @@ -0,0 +1,12 @@ +"use strict"; + +const isMainBranches = Boolean(JSON.parse(process.env.MAIN_BRANCHES || "0")); + +module.exports = () => [ + /Can't resolve 'non-exported-css'/, + /Can't resolve '\.\/directory'/, + isMainBranches + ? /Package path \.\/non-valid\.css is exported from package (.+), but no valid target file was found/ + : /Can't resolve 'condition-names-subpath\/non-valid\.css'/, + /Can't resolve '\.\/no-extension-in-request'/ +]; diff --git a/test/configCases/css/import/extensions-imported.mycss b/test/configCases/css/import/extensions-imported.mycss new file mode 100644 index 00000000000..d70a689d7e7 --- /dev/null +++ b/test/configCases/css/import/extensions-imported.mycss @@ -0,0 +1,3 @@ +.custom-extension{ + color: green; +} \ No newline at end of file diff --git a/test/configCases/css/import/external.css b/test/configCases/css/import/external.css new file mode 100644 index 00000000000..2da62ee0768 --- /dev/null +++ b/test/configCases/css/import/external.css @@ -0,0 +1,3 @@ +body { + externally-imported: true; +} diff --git a/test/configCases/css/import/external1.css b/test/configCases/css/import/external1.css new file mode 100644 index 00000000000..f334e79ce27 --- /dev/null +++ b/test/configCases/css/import/external1.css @@ -0,0 +1,3 @@ +body { + externally-imported1: true; +} diff --git a/test/configCases/css/import/external2.css b/test/configCases/css/import/external2.css new file mode 100644 index 00000000000..8a7481f3e91 --- /dev/null +++ b/test/configCases/css/import/external2.css @@ -0,0 +1,3 @@ +body { + externally-imported2: true; +} diff --git a/test/configCases/css/import/file.less b/test/configCases/css/import/file.less new file mode 100644 index 00000000000..a5eb48d6d65 --- /dev/null +++ b/test/configCases/css/import/file.less @@ -0,0 +1,5 @@ +@link-color: #428bca; + +.link { + color: @link-color; +} diff --git a/test/configCases/css/import/img.png b/test/configCases/css/import/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/import/img.png differ diff --git a/test/configCases/css/import/imported.css b/test/configCases/css/import/imported.css new file mode 100644 index 00000000000..828bff206d5 --- /dev/null +++ b/test/configCases/css/import/imported.css @@ -0,0 +1,3 @@ +body { + background: green; +} diff --git a/test/configCases/css/import/index.js b/test/configCases/css/import/index.js new file mode 100644 index 00000000000..3b26850a1e7 --- /dev/null +++ b/test/configCases/css/import/index.js @@ -0,0 +1,14 @@ +import "./style.css"; + +it("should compile", done => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); + done(); +}); diff --git a/test/configCases/css/import/layer-deep-deep-nested.css b/test/configCases/css/import/layer-deep-deep-nested.css new file mode 100644 index 00000000000..2b3fb00069f --- /dev/null +++ b/test/configCases/css/import/layer-deep-deep-nested.css @@ -0,0 +1,3 @@ +.class { + deep-deep-nested: 1; +} diff --git a/test/configCases/css/import/layer-deep-nested.css b/test/configCases/css/import/layer-deep-nested.css new file mode 100644 index 00000000000..ad882bcd450 --- /dev/null +++ b/test/configCases/css/import/layer-deep-nested.css @@ -0,0 +1,5 @@ +@import "./layer-deep-deep-nested.css" layer(baz); + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/layer-nested.css b/test/configCases/css/import/layer-nested.css new file mode 100644 index 00000000000..476020101a6 --- /dev/null +++ b/test/configCases/css/import/layer-nested.css @@ -0,0 +1,5 @@ +@import "./layer-deep-nested.css" layer(bar); + +.class { + nested: 1; +} diff --git a/test/configCases/css/import/layer.css b/test/configCases/css/import/layer.css new file mode 100644 index 00000000000..317776dde97 --- /dev/null +++ b/test/configCases/css/import/layer.css @@ -0,0 +1,3 @@ +.class { + content: "layer.css"; +} diff --git a/test/configCases/css/import/list-of-media-queries.css b/test/configCases/css/import/list-of-media-queries.css new file mode 100644 index 00000000000..4410be1e4db --- /dev/null +++ b/test/configCases/css/import/list-of-media-queries.css @@ -0,0 +1,5 @@ +@import "./dark.css" (prefers-color-scheme: dark); + +a { + color: black; +} diff --git a/test/configCases/css/import/media-deep-deep-nested.css b/test/configCases/css/import/media-deep-deep-nested.css new file mode 100644 index 00000000000..2b3fb00069f --- /dev/null +++ b/test/configCases/css/import/media-deep-deep-nested.css @@ -0,0 +1,3 @@ +.class { + deep-deep-nested: 1; +} diff --git a/test/configCases/css/import/media-deep-nested.css b/test/configCases/css/import/media-deep-nested.css new file mode 100644 index 00000000000..b49af1e9239 --- /dev/null +++ b/test/configCases/css/import/media-deep-nested.css @@ -0,0 +1,5 @@ +@import "./media-deep-deep-nested.css" screen and (orientation: portrait); + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/media-nested.css b/test/configCases/css/import/media-nested.css new file mode 100644 index 00000000000..74f9e969f2c --- /dev/null +++ b/test/configCases/css/import/media-nested.css @@ -0,0 +1,5 @@ +@import "./media-deep-nested.css" screen and (max-width: 500px); + +.class { + nested: 1; +} diff --git a/test/configCases/css/import/mixed-deep-deep-nested.css b/test/configCases/css/import/mixed-deep-deep-nested.css new file mode 100644 index 00000000000..2b3fb00069f --- /dev/null +++ b/test/configCases/css/import/mixed-deep-deep-nested.css @@ -0,0 +1,3 @@ +.class { + deep-deep-nested: 1; +} diff --git a/test/configCases/css/import/mixed-deep-nested.css b/test/configCases/css/import/mixed-deep-nested.css new file mode 100644 index 00000000000..f646d9558db --- /dev/null +++ b/test/configCases/css/import/mixed-deep-nested.css @@ -0,0 +1,5 @@ +@import "./mixed-deep-deep-nested.css" layer(bar); + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/mixed-nested.css b/test/configCases/css/import/mixed-nested.css new file mode 100644 index 00000000000..af6552df728 --- /dev/null +++ b/test/configCases/css/import/mixed-nested.css @@ -0,0 +1,5 @@ +@import "./mixed-deep-nested.css" supports(display: flex); + +.class { + nested: 1; +} diff --git a/test/configCases/css/import/no-extension-in-request.css b/test/configCases/css/import/no-extension-in-request.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/import/node_modules/condition-names-custom-name/custom-name.css b/test/configCases/css/import/node_modules/condition-names-custom-name/custom-name.css new file mode 100644 index 00000000000..438223bb105 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-custom-name/custom-name.css @@ -0,0 +1,3 @@ +.custom-name { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-custom-name/default.css b/test/configCases/css/import/node_modules/condition-names-custom-name/default.css new file mode 100644 index 00000000000..03ea02130bf --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-custom-name/default.css @@ -0,0 +1,3 @@ +.default { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-custom-name/package.json b/test/configCases/css/import/node_modules/condition-names-custom-name/package.json new file mode 100644 index 00000000000..72986fb14da --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-custom-name/package.json @@ -0,0 +1,9 @@ +{ + "name": "condition-names-custom-name", + "exports": { + ".": { + "custom-name": "./custom-name.css", + "default": "./default.css" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-less/default.less b/test/configCases/css/import/node_modules/condition-names-style-less/default.less new file mode 100644 index 00000000000..37deb87d851 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-less/default.less @@ -0,0 +1,5 @@ +@link-color: #428bca; + +.conditional-names { + color: @link-color; +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-less/package.json b/test/configCases/css/import/node_modules/condition-names-style-less/package.json new file mode 100644 index 00000000000..3eb7a0ae36c --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-less/package.json @@ -0,0 +1,8 @@ +{ + "name": "condition-names-style-less", + "exports": { + ".": { + "default": "./default.less" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-mode/default.css b/test/configCases/css/import/node_modules/condition-names-style-mode/default.css new file mode 100644 index 00000000000..03ea02130bf --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-mode/default.css @@ -0,0 +1,3 @@ +.default { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-mode/mode.css b/test/configCases/css/import/node_modules/condition-names-style-mode/mode.css new file mode 100644 index 00000000000..300f0091cfc --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-mode/mode.css @@ -0,0 +1,3 @@ +.mode { + color: red; +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-mode/package.json b/test/configCases/css/import/node_modules/condition-names-style-mode/package.json new file mode 100644 index 00000000000..55ade3385c8 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-mode/package.json @@ -0,0 +1,10 @@ +{ + "name": "condition-names-style-development", + "exports": { + ".": { + "production": "./mode.css", + "development": "./mode.css", + "default": "./default.css" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-nested/default.css b/test/configCases/css/import/node_modules/condition-names-style-nested/default.css new file mode 100644 index 00000000000..03ea02130bf --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-nested/default.css @@ -0,0 +1,3 @@ +.default { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-style-nested/package.json b/test/configCases/css/import/node_modules/condition-names-style-nested/package.json new file mode 100644 index 00000000000..1181e52d22d --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style-nested/package.json @@ -0,0 +1,8 @@ +{ + "name": "condition-names-style-nested", + "exports": { + "style": { + "default": "./default.css" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-style/default.css b/test/configCases/css/import/node_modules/condition-names-style/default.css new file mode 100644 index 00000000000..03ea02130bf --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style/default.css @@ -0,0 +1,3 @@ +.default { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-style/package.json b/test/configCases/css/import/node_modules/condition-names-style/package.json new file mode 100644 index 00000000000..b397e56043d --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-style/package.json @@ -0,0 +1,9 @@ +{ + "name": "condition-names-style", + "exports": { + ".": { + "style": "./default.css", + "default": "./unknown.css" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-subpath-extra/custom.js b/test/configCases/css/import/node_modules/condition-names-subpath-extra/custom.js new file mode 100644 index 00000000000..b77c717214b --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-subpath-extra/custom.js @@ -0,0 +1 @@ +export default "should not be used"; diff --git a/test/configCases/css/import/node_modules/condition-names-subpath-extra/dist/custom.css b/test/configCases/css/import/node_modules/condition-names-subpath-extra/dist/custom.css new file mode 100644 index 00000000000..7920c3d9f42 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-subpath-extra/dist/custom.css @@ -0,0 +1,3 @@ +.dist { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-subpath-extra/package.json b/test/configCases/css/import/node_modules/condition-names-subpath-extra/package.json new file mode 100644 index 00000000000..795cf640f88 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-subpath-extra/package.json @@ -0,0 +1,6 @@ +{ + "name": "condition-names-subpath-extra", + "exports": { + "./custom.css":"./dist/custom.css" + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-subpath/custom.js b/test/configCases/css/import/node_modules/condition-names-subpath/custom.js new file mode 100644 index 00000000000..b77c717214b --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-subpath/custom.js @@ -0,0 +1 @@ +export default "should not be used"; diff --git a/test/configCases/css/import/node_modules/condition-names-subpath/dist/custom.css b/test/configCases/css/import/node_modules/condition-names-subpath/dist/custom.css new file mode 100644 index 00000000000..7920c3d9f42 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-subpath/dist/custom.css @@ -0,0 +1,3 @@ +.dist { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/condition-names-subpath/package.json b/test/configCases/css/import/node_modules/condition-names-subpath/package.json new file mode 100644 index 00000000000..8c94521a959 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-subpath/package.json @@ -0,0 +1,11 @@ +{ + "name": "condition-names-subpath", + "exports": { + "./custom.css": { + "default": "./dist/custom.css" + }, + "./non-valid.css": { + "default": "./dist/custom.js" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-webpack-js/package.json b/test/configCases/css/import/node_modules/condition-names-webpack-js/package.json new file mode 100644 index 00000000000..21c3e50d229 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-webpack-js/package.json @@ -0,0 +1,9 @@ +{ + "name": "condition-names-webpack", + "exports": { + ".": { + "webpack": "./webpack.js", + "default": "./unknown.js" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-webpack-js/webpack.js b/test/configCases/css/import/node_modules/condition-names-webpack-js/webpack.js new file mode 100644 index 00000000000..bc0fdf485a6 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-webpack-js/webpack.js @@ -0,0 +1 @@ +export default "webpack"; diff --git a/test/configCases/css/import/node_modules/condition-names-webpack/package.json b/test/configCases/css/import/node_modules/condition-names-webpack/package.json new file mode 100644 index 00000000000..471a210fa9b --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-webpack/package.json @@ -0,0 +1,9 @@ +{ + "name": "condition-names-webpack", + "exports": { + ".": { + "webpack": "./webpack.css", + "default": "./unknown.css" + } + } +} diff --git a/test/configCases/css/import/node_modules/condition-names-webpack/webpack.css b/test/configCases/css/import/node_modules/condition-names-webpack/webpack.css new file mode 100644 index 00000000000..44867d273a4 --- /dev/null +++ b/test/configCases/css/import/node_modules/condition-names-webpack/webpack.css @@ -0,0 +1,3 @@ +.webpack { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/js-import/index.js b/test/configCases/css/import/node_modules/js-import/index.js new file mode 100644 index 00000000000..0b2a8ed66e2 --- /dev/null +++ b/test/configCases/css/import/node_modules/js-import/index.js @@ -0,0 +1,3 @@ +function someCode() { + console.log('some code'); +} \ No newline at end of file diff --git a/test/configCases/css/import/node_modules/js-import/package.json b/test/configCases/css/import/node_modules/js-import/package.json new file mode 100644 index 00000000000..1f4546b29f3 --- /dev/null +++ b/test/configCases/css/import/node_modules/js-import/package.json @@ -0,0 +1,3 @@ +{ + "main": "index.js" +} \ No newline at end of file diff --git a/test/configCases/css/import/node_modules/main-field/package.json b/test/configCases/css/import/node_modules/main-field/package.json new file mode 100644 index 00000000000..51c982d306f --- /dev/null +++ b/test/configCases/css/import/node_modules/main-field/package.json @@ -0,0 +1,3 @@ +{ + "main": "styles.css" +} \ No newline at end of file diff --git a/test/configCases/css/import/node_modules/main-field/styles.css b/test/configCases/css/import/node_modules/main-field/styles.css new file mode 100644 index 00000000000..7ccc4470fc5 --- /dev/null +++ b/test/configCases/css/import/node_modules/main-field/styles.css @@ -0,0 +1,3 @@ +p { + color: antiquewhite; +} diff --git a/test/configCases/css/import/node_modules/non-exported-css/index.css b/test/configCases/css/import/node_modules/non-exported-css/index.css new file mode 100644 index 00000000000..3b220caa96f --- /dev/null +++ b/test/configCases/css/import/node_modules/non-exported-css/index.css @@ -0,0 +1,3 @@ +.non-exported-css{ + color: red; +} \ No newline at end of file diff --git a/test/configCases/css/import/node_modules/non-exported-css/package.json b/test/configCases/css/import/node_modules/non-exported-css/package.json new file mode 100644 index 00000000000..55c03f597b3 --- /dev/null +++ b/test/configCases/css/import/node_modules/non-exported-css/package.json @@ -0,0 +1,3 @@ +{ + "name": "non-exported-css" +} \ No newline at end of file diff --git a/test/configCases/css/import/node_modules/package-with-exports/index.cjs b/test/configCases/css/import/node_modules/package-with-exports/index.cjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/import/node_modules/package-with-exports/index.js b/test/configCases/css/import/node_modules/package-with-exports/index.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/import/node_modules/package-with-exports/package.json b/test/configCases/css/import/node_modules/package-with-exports/package.json new file mode 100644 index 00000000000..9b5e2b602a8 --- /dev/null +++ b/test/configCases/css/import/node_modules/package-with-exports/package.json @@ -0,0 +1,19 @@ +{ + "name": "package-with-exports", + "version": "1.0.0", + "description": "test", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT", + "type": "module", + "module": "index.js", + "main": "index.cjs", + "style": "style.css", + "exports": { + "style": "./style.css", + "require": "./index.cjs", + "import": "./index.js" + } +} diff --git a/test/configCases/css/import/node_modules/package-with-exports/style.css b/test/configCases/css/import/node_modules/package-with-exports/style.css new file mode 100644 index 00000000000..38ef857cb7d --- /dev/null +++ b/test/configCases/css/import/node_modules/package-with-exports/style.css @@ -0,0 +1,3 @@ +.load-me { + color: red; +} diff --git a/test/configCases/css/import/node_modules/prefer-relative.css/package.json b/test/configCases/css/import/node_modules/prefer-relative.css/package.json new file mode 100644 index 00000000000..183575c78ed --- /dev/null +++ b/test/configCases/css/import/node_modules/prefer-relative.css/package.json @@ -0,0 +1,4 @@ +{ + "name": "prefer-relative.css", + "style": "./styles.css" +} diff --git a/test/configCases/css/import/node_modules/prefer-relative.css/styles.css b/test/configCases/css/import/node_modules/prefer-relative.css/styles.css new file mode 100644 index 00000000000..f8ad35f95ed --- /dev/null +++ b/test/configCases/css/import/node_modules/prefer-relative.css/styles.css @@ -0,0 +1,3 @@ +.should-be-not-imported { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/style-and-main-library/main.css b/test/configCases/css/import/node_modules/style-and-main-library/main.css new file mode 100644 index 00000000000..864a5060ae2 --- /dev/null +++ b/test/configCases/css/import/node_modules/style-and-main-library/main.css @@ -0,0 +1,3 @@ +.main { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/style-and-main-library/package.json b/test/configCases/css/import/node_modules/style-and-main-library/package.json new file mode 100644 index 00000000000..f0dab2e32cb --- /dev/null +++ b/test/configCases/css/import/node_modules/style-and-main-library/package.json @@ -0,0 +1,4 @@ +{ + "name": "style-and-main-library", + "style": "./styles.css" +} diff --git a/test/configCases/css/import/node_modules/style-and-main-library/styles.css b/test/configCases/css/import/node_modules/style-and-main-library/styles.css new file mode 100644 index 00000000000..b5795b7efc5 --- /dev/null +++ b/test/configCases/css/import/node_modules/style-and-main-library/styles.css @@ -0,0 +1,3 @@ +.style { + color: steelblue; +} diff --git a/test/configCases/css/import/node_modules/style-library/package.json b/test/configCases/css/import/node_modules/style-library/package.json new file mode 100644 index 00000000000..4b64f1e4715 --- /dev/null +++ b/test/configCases/css/import/node_modules/style-library/package.json @@ -0,0 +1,4 @@ +{ + "name": "style-library", + "style": "./styles.css" +} diff --git a/test/configCases/css/import/node_modules/style-library/styles.css b/test/configCases/css/import/node_modules/style-library/styles.css new file mode 100644 index 00000000000..cf378a3afca --- /dev/null +++ b/test/configCases/css/import/node_modules/style-library/styles.css @@ -0,0 +1,3 @@ +p { + color: steelblue; +} diff --git a/test/configCases/css/import/prefer-relative.css b/test/configCases/css/import/prefer-relative.css new file mode 100644 index 00000000000..53ebf9f616d --- /dev/null +++ b/test/configCases/css/import/prefer-relative.css @@ -0,0 +1,3 @@ +.relative { + color: red; +} diff --git a/test/configCases/css/import/print.css b/test/configCases/css/import/print.css new file mode 100644 index 00000000000..5fa2bfe59ff --- /dev/null +++ b/test/configCases/css/import/print.css @@ -0,0 +1,3 @@ +body { + background: black; +} diff --git a/test/configCases/css/import/remove-source-map-url-loader.js b/test/configCases/css/import/remove-source-map-url-loader.js new file mode 100644 index 00000000000..088e5941693 --- /dev/null +++ b/test/configCases/css/import/remove-source-map-url-loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader(content) { + return content.replace(/\/[*/][#]?\s*sourceMappingURL=.+(\*\/)?/g, ""); +}; diff --git a/test/configCases/css/import/some-file.js b/test/configCases/css/import/some-file.js new file mode 100644 index 00000000000..ba55c81f9c5 --- /dev/null +++ b/test/configCases/css/import/some-file.js @@ -0,0 +1,3 @@ +function doNotImportCss() { + return 'doNotImportCss'; +} \ No newline at end of file diff --git a/test/configCases/css/import/string-loader.js b/test/configCases/css/import/string-loader.js new file mode 100644 index 00000000000..edb02509cad --- /dev/null +++ b/test/configCases/css/import/string-loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader(content) { + return content + `.using-loader { color: red; }`; +}; diff --git a/test/configCases/css/import/styl'le7.css b/test/configCases/css/import/styl'le7.css new file mode 100644 index 00000000000..8e5fc45d459 --- /dev/null +++ b/test/configCases/css/import/styl'le7.css @@ -0,0 +1,3 @@ +.class { + content: "style7.css"; +} diff --git a/test/configCases/css/import/style-import.css b/test/configCases/css/import/style-import.css new file mode 100644 index 00000000000..043966ece80 --- /dev/null +++ b/test/configCases/css/import/style-import.css @@ -0,0 +1,28 @@ +@import "style-library"; +@import "main-field"; +@import "package-with-exports"; +@import "./extensions-imported.mycss"; +@import "./with-less-import.css"; +@import "prefer-relative.css"; +@import "condition-names-style"; +@import "condition-names-style-mode"; +@import "condition-names-subpath/custom.css"; +@import "condition-names-subpath-extra/custom.css"; +@import "condition-names-style-less"; +@import "condition-names-custom-name"; +@import "style-and-main-library"; +@import "condition-names-webpack"; +@import "condition-names-style-nested"; + +/* Technically, this is not entirely true, but we allow it because the final file can be processed by the loader and return the CSS code */ + +@import "js-import"; +@import "condition-names-webpack-js"; +@import url("some-file.js"); + +/* Failed */ + +@import "non-exported-css"; +@import "./directory"; +@import "condition-names-subpath/non-valid.css"; +@import "./no-extension-in-request"; diff --git a/test/configCases/css/import/style.css b/test/configCases/css/import/style.css new file mode 100644 index 00000000000..ae06c63fd3d --- /dev/null +++ b/test/configCases/css/import/style.css @@ -0,0 +1,269 @@ +@import "./style-import.css"; +@import "print.css?foo=1"; +@import url("print.css?foo=2"); +@import "print.css?foo=3" layer(default); +@import url("print.css?foo=4") layer(default); +@import "print.css?foo=5" supports(display: flex); +@import url("print.css?foo=6") supports(display: flex); +@import "print.css?foo=7" screen and (min-width: 400px); +@import url("print.css?foo=8") screen and (min-width: 400px); +@import "print.css?foo=9" layer(default) supports(display: flex); +@import "print.css?foo=10" layer(default) screen and (min-width: 400px); +@import "print.css?foo=11" supports(display: flex) screen and (min-width: 400px); +@import "print.css?foo=12" layer(default) supports(display: flex) screen and (min-width: 400px); +@import "print.css?foo=13"layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(print.css?foo=14)layer(default)supports(display: flex)screen and (min-width: 400px); +@import url("print.css?foo=15")layer(default)supports(display: flex)screen and (min-width: 400px); +@import url(print.css?foo=16)layer(default)supports(background: url(./img.png))screen and (min-width: 400px); +@import url(print.css?foo=17)layer(default)supports(background: url("./img.png"))screen and (min-width: 400px); +@import url(print.css?foo=18)screen; +@import url("print.css?foo=19")screen; +@import "print.css?foo=20"screen; +@import url(print.css?foo=18) screen ; +@import url("print.css?foo=19") screen ; +@import "print.css?foo=20" screen ; +@import "print.css?foo=21" ; + +/* Has the same URL */ +@import "imported.css"; +@import "imported.css" layer(base); +@import "imported.css" supports(display: flex); +@import "imported.css" screen, print; + +@import url(style2.css?foo=1); +@import url('style2.css?foo=2'); +@import url("style2.css?foo=3"); +@IMPORT url(style2.css?foo=4); +@import URL(style2.css?foo=5); +@import url(style2.css?foo=6 ); +@import url( style2.css?foo=7); +@import url( style2.css?foo=8 ); +@import url( +style2.css?foo=9 +); +@import url(); +@import url(''); +@import url(""); +@import ''; +@import ""; +@import " "; +@import "\ +"; +@import url(); +@import url(''); +@import url(""); +@import url("") /* test */; +@import url("") screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) SCREEN AND (ORIENTATION: LANDSCAPE); +@import url(style2.css)screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) screen and (orientation:landscape); +@import url(style2.css) (min-width: 100px); +@import url(https://test.cases/path/../../../../configCases/css/import/external.css); +@import url(https://test.cases/path/../../../../configCases/css/import/external.css) screen and (orientation:landscape); +@import "//example.com/style.css"; +@import url('test.css?foo=1&bar=1'); +@import url('style2.css?foo=1&bar=1#hash'); +@import url('style2.css?foo=1&bar=1#hash') screen and (orientation:landscape); +@import url('https://fonts.googleapis.com/css?family=Roboto'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto'); +@import url('https://fonts.googleapis.com/css?family=Noto+Sans+TC|Roboto?foo=1') layer(super.foo) supports(display: flex) screen and (min-width: 400px); + +@import './sty\ +le3.css?bar=1'; +@import './sty\ +\ +\ +le3.css?bar=2'; +@import url('./sty\ +le3.css?bar=3'); +@import url('./sty\ +\ +\ +le3.css?=bar4'); + +@import "./styl'le7.css"; +@import url("./styl'le7.css?foo=1"); +@import './styl\'le7.css'; +@import url('./styl\'le7.css'); +@import './test test.css'; +@import url('./test test.css?foo=1'); +@import './test\ test.css?foo=2'; +@import url('./test\ test.css?foo=3'); +@import './test%20test.css?foo=4'; +@import url('./test%20test.css?foo=5'); +@import './\74\65\73\74.css'; +@import url('./\74\65\73\74.css?foo=1'); +@import './t\65\73\74.css?foo=2'; +@import url('./t\65\73\74.css?foo=3'); +@import url(./test\ test.css?foo=6); +@import url(./t\65st%20test.css?foo=7); +@import url('./t\65st%20test.css?foo=8'); +@import url("./t\65st%20test.css?foo=9"); +@import "./t\65st%20test.css?fpp=10"; +@import './t\65st%20test.css?foo=11'; +@import url( style6.css?foo=bazz ); +@import '\ +\ +\ +'; +@import url('./string-loader.js?esModule=false!./test.css'); +@import url(style4.css?foo=bar); +@import url(style4.css?foo=bar#hash); +@import url(style4.css?#hash); +@import "style4.css?foo=1" supports(display: flex); +@import "style4.css?foo=2" supports(display: flex) screen and (orientation:landscape); + +@import " ./style4.css?foo=3 "; +@import url(' ./style4.css?foo=4 '); +@import url( ./style4.css?foo=5 ); + +@import url(' https://fonts.googleapis.com/css?family=Roboto '); +@import url('./string-loader.js?esModule=false'); +@import url(' ./string-loader.js?esModule=false!./test.css ') screen and (orientation: landscape); +@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20red%3B%0D%0A%7D); +@import url(data:text/css;charset=utf-8,a%20%7B%0D%0A%20%20color%3A%20blue%3B%0D%0A%7D) screen and (orientation:landscape); +@import url("data:text/css;charset=utf-8;base64,YSB7DQogIGNvbG9yOiByZWQ7DQp9"); + +@import url("./style5.css?foo=1") supports(); +@import url("./style5.css?foo=2") supports( ); +@import url("./style5.css?foo=3") supports(unknown); +@import url("./style5.css?foo=4") supports(display: flex); +@import url("./style5.css?foo=5") supports(display: flex !important); +@import url("./style5.css?foo=6") supports(display: flex) screen and (min-width: 400px); +@import url("./style5.css?foo=7") supports(selector(a b)); +@import url("./style5.css?foo=8") supports( display: flex ); +@import url("./layer.css?foo=1") layer; +@import url("./layer.css?foo=2") layer(default); +@import url("./layer.css?foo=3") layer(default) supports(display: flex) screen and (min-width: 400px); +@import url("./layer.css?foo=3") layer supports(display: flex) screen and (min-width: 400px); +@import url("./layer.css?foo=4") layer() supports(display: flex) screen and (min-width: 400px); +@import url("./layer.css?foo=5") layer(); +@import url("./layer.css?foo=6") layer( foo.bar.baz ); +@import url("./layer.css?foo=7") layer( ); +@import url("./style6.css")layer(default)supports(display: flex)screen and (min-width:400px); +@import "./style6.css?foo=1"layer(default)supports(display: flex)screen and (min-width:400px); +@import "./style6.css?foo=2"supports(display: flex)screen and (min-width:400px); +@import "./style6.css?foo=3"screen and (min-width:400px); +@import url("./style6.css?foo=4")screen and (min-width:400px); +@import url(./style6.css?foo=5)screen and (min-width:400px); +@import url("./style6.css?foo=6") layer( default ) supports( display : flex ) screen and ( min-width : 400px ); +@import URL("./style6.css?foo=7") LAYER(DEFAULT) SUPPORTS(DISPLAY: FLEX) SCREEN AND (MIN-WIDTH: 400PX); +@import url("./style6.css?foo=8") LAYER SUPPORTS(DISPLAY: FLEX) SCREEN AND (MIN-WIDTH: 400PX); +@import url("./style6.css?foo=9") /* Comment */ layer(/* Comment */default/* Comment */) /* Comment */ supports(/* Comment */display/* Comment */:/* Comment */ flex/* Comment */)/* Comment */ screen/* Comment */ and/* Comment */ (/* Comment */min-width/* Comment */: /* Comment */400px/* Comment */); +@import url(style6.css?foo=10) /* Comment */; +@import url(style6.css?foo=11) /* Comment */ /* Comment */; +@import url(style6.css?foo=12) /* Comment *//* Comment */; +@import url(style6.css?foo=13)/* Comment *//* Comment */; +@import +url(style6.css?foo=14) +/* Comment */ +/* Comment */; +@import /* Comment */ url(style6.css?foo=15) /* Comment */; +@import url(style6.css?foo=16) /* Comment */ print and (orientation:landscape); +@import url(style6.css?foo=17)/* Comment */print and (orientation:landscape)/* Comment */; +@import /* Comment */ url(style6.css?foo=18) /* Comment */ print and (orientation:landscape); + +@import url("./style8.css") screen and (min-width: 400px); +@import url("./style8.css") (prefers-color-scheme: dark); +@import url("./style8.css") supports(display: flex); +@import url("./style8.css") supports(((display: flex))); +@import url("./style8.css") supports(((display: inline-grid))) screen and (((min-width: 400px))); +@import url("./style8.css") supports(display: flex); +@import url('./style8.css') supports(display: grid); +@import url("./style8.css") supports(display: flex) screen and (min-width: 400px); +@import url("./style8.css") layer(framework); +@import url("./style8.css") layer(default); +@import url("./style8.css") layer(base); +@import url("./style8.css") layer(default) supports(display: flex); +@import url("./style8.css") layer(default) supports(display: flex) screen and (min-width: 400px); + +/* anonymous */ +@import "style2.css" layer(); +@import "style2.css" layer; + +/* All unknown parse as media for compatibility */ +@import url("./style9.css") unknown(default) unknown(display: flex) unknown; +@import url("./style9.css") unknown(default); + +@import url("./style10.css"); + +@import "./media-nested.css" screen and (min-width: 400px); +@import "./supports-nested.css" supports(display: flex); +@import "./layer-nested.css" layer(foo); +@import "./all-nested.css" layer(foo) supports(display: flex) screen and (min-width: 400px); +@import "./mixed-nested.css" screen and (min-width: 400px); +@import "./anonymous-nested.css" layer; +@import "./media-deep-deep-nested.css" screen and (orientation: portrait); +@import "./duplicate-nested.css" screen and (orientation: portrait); +@import "./anonymous-nested.css" supports(display: flex) screen and (orientation: portrait); +@import "./all-nested.css" layer(super.foo) supports(display: flex) screen and (min-width: 400px); + +/* Inside support */ + +@import url("/style2.css?warning=6") supports(unknown: layer(super.foo)) screen and (min-width: 400px); +@import url("/style2.css?warning=7") supports(url: url("./unknown.css")) screen and (min-width: 400px); +@import url("/style2.css?warning=8") supports(url: url(./unknown.css)) screen and (min-width: 400px); + +/** Possible syntax in future */ + +@import url("/style2.css?foo=unknown") layer(super.foo) supports(display: flex) unknown("foo") screen and (min-width: 400px); +@import url("/style2.css?foo=unknown1") layer(super.foo) supports(display: url("./unknown.css")) unknown(foo) screen and (min-width: 400px); +@import url("/style2.css?foo=unknown2") layer(super.foo) supports(display: url(./unknown.css)) "foo" screen and (min-width: 400px); +@import "./style2.css?unknown3" "string"; + +/** Unknown */ + +@import-normalize; + +/** Warnings */ + +@import nourl(test.css); +@import ; +@import foo-bar; +@import layer(super.foo) "./style2.css?warning=1" supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) "./style2.css?warning=2" screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) "./style2.css?warning=3"; +@import layer(super.foo) url("./style2.css?warning=4") supports(display: flex) screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) url("./style2.css?warning=5") screen and (min-width: 400px); +@import layer(super.foo) supports(display: flex) screen and (min-width: 400px) url("./style2.css?warning=6"); +@import url("/style2.css?wrong-order-but-valid=6") supports(display: flex) layer(super.foo) screen and (min-width: 400px); +@namespace url(http://www.w3.org/1999/xhtml); +@import url("./style2.css?after-namespace"); +@import supports(background: url("./img.png")); +@import supports(background: url("./img.png")) screen and (min-width: 400px); +@import layer(test) supports(background: url("./img.png")) screen and (min-width: 400px); +@import screen and (min-width: 400px); + +@import url(./style2.css?multiple=1) url(./style2.css?multiple=2); +@import url("./style2.css?multiple=3") url("./style2.css?multiple=4"); +@import "./style2.css?strange=3" url("./style2.css?multiple=4"); + +@import url("external-1.css"); +@import url("external-2.css") supports(display: grid) screen and (max-width: 400px); +@import url("external-3.css") supports(not (display: grid) and (display: flex)) screen and (max-width: 400px); +@import url("external-4.css") supports((selector(h2 > p)) and + (font-tech(color-COLRv1))); +@import url(external-5.css) layer(default); +@import url(external-6.css) layer(default); +@import url("external-7.css") layer(); +@import url("external-8.css") layer; +@import url("external-9.css") print; +@import url("external-10.css") print, screen; +@import url("external-11.css") screen; +@import url("external-12.css") screen and (orientation: landscape); +@import url("external-13.css") supports(not (display: flex)); +@import url("external-14.css") layer(default) supports(display: grid) screen and (max-width: 400px); + +@import url("ignore.css"); +@import url("list-of-media-queries.css"); +@import url("/alias.css"); +@import url("circular.css"); +/* FIXME */ +/*@import url("webpackIgnore-order.css");*/ + +body { + background: red; +} diff --git a/test/configCases/css/import/style10.css b/test/configCases/css/import/style10.css new file mode 100644 index 00000000000..b7968ef6254 --- /dev/null +++ b/test/configCases/css/import/style10.css @@ -0,0 +1,9 @@ +@import url(./style11.css); +@import url(https://test.cases/path/../../../../configCases/css/import/external1.css); +@import url(./style12.css); +@import url(./style13.css); + + +.style10 { + color: red; +} diff --git a/test/configCases/css/import/style11.css b/test/configCases/css/import/style11.css new file mode 100644 index 00000000000..09831e221ec --- /dev/null +++ b/test/configCases/css/import/style11.css @@ -0,0 +1,3 @@ +.style11 { + color: red; +} diff --git a/test/configCases/css/import/style12.css b/test/configCases/css/import/style12.css new file mode 100644 index 00000000000..d3f40ad3c33 --- /dev/null +++ b/test/configCases/css/import/style12.css @@ -0,0 +1,5 @@ +@import url(https://test.cases/path/../../../../configCases/css/import/external2.css); + +.style12 { + color: red; +} diff --git a/test/configCases/css/import/style13.css b/test/configCases/css/import/style13.css new file mode 100644 index 00000000000..5c9af29d3f4 --- /dev/null +++ b/test/configCases/css/import/style13.css @@ -0,0 +1 @@ +@import url(https://test.cases/path/../../../../configCases/css/import/external2.css);div{color: red;} diff --git a/test/configCases/css/import/style2.css b/test/configCases/css/import/style2.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/css/import/style2.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/css/import/style3.css b/test/configCases/css/import/style3.css new file mode 100644 index 00000000000..3da7fa6f9a7 --- /dev/null +++ b/test/configCases/css/import/style3.css @@ -0,0 +1,4 @@ +.class { + content: "style.css"; + color: red; +} diff --git a/test/configCases/css/import/style4.css b/test/configCases/css/import/style4.css new file mode 100644 index 00000000000..ffafcc6bc82 --- /dev/null +++ b/test/configCases/css/import/style4.css @@ -0,0 +1,3 @@ +.class { + content: "style4.css"; +} diff --git a/test/configCases/css/import/style5.css b/test/configCases/css/import/style5.css new file mode 100644 index 00000000000..762f796a624 --- /dev/null +++ b/test/configCases/css/import/style5.css @@ -0,0 +1,3 @@ +.class { + content: "style5.css"; +} diff --git a/test/configCases/css/import/style6.css b/test/configCases/css/import/style6.css new file mode 100644 index 00000000000..07cf8d4947d --- /dev/null +++ b/test/configCases/css/import/style6.css @@ -0,0 +1,3 @@ +.class { + content: "style6.css"; +} diff --git a/test/configCases/css/import/style8.css b/test/configCases/css/import/style8.css new file mode 100644 index 00000000000..cdf5c7ed93a --- /dev/null +++ b/test/configCases/css/import/style8.css @@ -0,0 +1,3 @@ +.class { + content: "style8.css"; +} diff --git a/test/configCases/css/import/style9.css b/test/configCases/css/import/style9.css new file mode 100644 index 00000000000..cdaaa1da655 --- /dev/null +++ b/test/configCases/css/import/style9.css @@ -0,0 +1,3 @@ +.class { + content: "style9.css"; +} diff --git a/test/configCases/css/import/supports-deep-deep-nested.css b/test/configCases/css/import/supports-deep-deep-nested.css new file mode 100644 index 00000000000..2b3fb00069f --- /dev/null +++ b/test/configCases/css/import/supports-deep-deep-nested.css @@ -0,0 +1,3 @@ +.class { + deep-deep-nested: 1; +} diff --git a/test/configCases/css/import/supports-deep-nested.css b/test/configCases/css/import/supports-deep-nested.css new file mode 100644 index 00000000000..7a2e5ae40c8 --- /dev/null +++ b/test/configCases/css/import/supports-deep-nested.css @@ -0,0 +1,5 @@ +@import "./supports-deep-deep-nested.css" supports(display: table); + +.class { + deep-nested: 1; +} diff --git a/test/configCases/css/import/supports-nested.css b/test/configCases/css/import/supports-nested.css new file mode 100644 index 00000000000..29703ad014b --- /dev/null +++ b/test/configCases/css/import/supports-nested.css @@ -0,0 +1,5 @@ +@import "./supports-deep-nested.css" supports(display: grid); + +.class { + nested: 1; +} diff --git a/test/configCases/css/import/test test.css b/test/configCases/css/import/test test.css new file mode 100644 index 00000000000..1e68c3da01e --- /dev/null +++ b/test/configCases/css/import/test test.css @@ -0,0 +1,3 @@ +.class { + content: "test test.css"; +} diff --git a/test/configCases/css/import/test.config.js b/test/configCases/css/import/test.config.js new file mode 100644 index 00000000000..dbfd4316888 --- /dev/null +++ b/test/configCases/css/import/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = `bundle${scope.__STATS_I__}.css`; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/import/test.css b/test/configCases/css/import/test.css new file mode 100644 index 00000000000..2c03574bff6 --- /dev/null +++ b/test/configCases/css/import/test.css @@ -0,0 +1,3 @@ +.class { + content: "test.css"; +} diff --git a/test/configCases/css/import/warnings.js b/test/configCases/css/import/warnings.js new file mode 100644 index 00000000000..da91e8e8e03 --- /dev/null +++ b/test/configCases/css/import/warnings.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = [ + /Expected URL in '@import nourl\(test\.css\);'/, + /Expected URL in '@import ;'/, + /Expected URL in '@import foo-bar;'/, + /Expected URL in '@import layer\(super\.foo\) "\.\/style2\.css\?warning=1" supports\(display: flex\) screen and \(min-width: 400px\);'/, + /Expected URL in '@import layer\(super\.foo\) supports\(display: flex\) "\.\/style2\.css\?warning=2" screen and \(min-width: 400px\);'/, + /Expected URL in '@import layer\(super\.foo\) supports\(display: flex\) screen and \(min-width: 400px\) "\.\/style2\.css\?warning=3";'/, + /Expected URL in '@import layer\(super\.foo\) supports\(display: flex\) screen and \(min-width: 400px\) url\("\.\/style2\.css\?warning=6"\);'/, + /Expected URL in '@import layer\(super\.foo\) supports\(display: flex\) url\("\.\/style2\.css\?warning=5"\) screen and \(min-width: 400px\);'/, + /Expected URL in '@import layer\(super\.foo\) url\("\.\/style2\.css\?warning=4"\) supports\(display: flex\) screen and \(min-width: 400px\);'/, + /'@namespace' is not supported in bundled CSS/, + /Expected URL in '@import layer\(test\) supports\(background: url\("\.\/img\.png"\)\) screen and \(min-width: 400px\);'/, + /Expected URL in '@import screen and \(min-width: 400px\);'/, + /Expected URL in '@import supports\(background: url\("\.\/img\.png"\)\) screen and \(min-width: 400px\);'/, + /Expected URL in '@import supports\(background: url\("\.\/img\.png"\)\);'/, + /'@namespace' is not supported in bundled CSS/ +]; diff --git a/test/configCases/css/import/webpack.config.js b/test/configCases/css/import/webpack.config.js new file mode 100644 index 00000000000..e6e7aad48d9 --- /dev/null +++ b/test/configCases/css/import/webpack.config.js @@ -0,0 +1,70 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + target: "web", + mode: "development", + experiments: { + css: true + }, + resolve: { + alias: { + "/alias.css": false + }, + byDependency: { + "css-import": { + conditionNames: ["custom-name", "..."], + extensions: [".mycss", "..."] + } + } + }, + module: { + rules: [ + { + test: /\.mycss$/, + loader: "./string-loader", + type: "css/global" + }, + { + test: /\.less$/, + use: ["./remove-source-map-url-loader", "less-loader"], + type: "css/global" + } + ] + }, + externals: { + "external-1.css": "css-import external-1.css", + "external-2.css": "css-import external-2.css", + "external-3.css": "css-import external-3.css", + "external-4.css": "css-import external-4.css", + "external-5.css": "css-import external-5.css", + "external-6.css": "css-import external-6.css", + "external-7.css": "css-import external-7.css", + "external-8.css": "css-import external-8.css", + "external-9.css": "css-import external-9.css", + "external-10.css": "css-import external-10.css", + "external-11.css": "css-import external-11.css", + "external-12.css": "css-import external-12.css", + "external-13.css": "css-import external-13.css", + "external-14.css": "css-import external-14.css" + }, + plugins: [new webpack.IgnorePlugin({ resourceRegExp: /ignore\.css/ })] + }, + { + target: "web", + mode: "development", + experiments: { + css: true + }, + module: { + parser: { + css: { + import: false + } + } + } + } +]; diff --git a/test/configCases/css/import/webpackIgnore-order.css b/test/configCases/css/import/webpackIgnore-order.css new file mode 100644 index 00000000000..c57b445e8f0 --- /dev/null +++ b/test/configCases/css/import/webpackIgnore-order.css @@ -0,0 +1,6 @@ +@import /* webpackIgnore: true */ url("/assets/themes.css"); +@import "./style2.css"; + +body { + background: red; +} diff --git a/test/configCases/css/import/with-less-import.css b/test/configCases/css/import/with-less-import.css new file mode 100644 index 00000000000..75b8a62307d --- /dev/null +++ b/test/configCases/css/import/with-less-import.css @@ -0,0 +1,5 @@ +@import "./file.less"; + +.foo { + color: red; +} diff --git a/test/configCases/css/large/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/large/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..9b4a5608d90 --- /dev/null +++ b/test/configCases/css/large/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css large exported tests should allow to create css modules: dev 1`] = ` +Object { + "placeholder": "my-app-tailwind_module_css-placeholder-gray-700", +} +`; + +exports[`ConfigCacheTestCases css large exported tests should allow to create css modules: prod 1`] = ` +Object { + "placeholder": "Xk90he", +} +`; diff --git a/test/configCases/css/large/__snapshots__/ConfigTest.snap b/test/configCases/css/large/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..1b24888618f --- /dev/null +++ b/test/configCases/css/large/__snapshots__/ConfigTest.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css large exported tests should allow to create css modules: dev 1`] = ` +Object { + "placeholder": "my-app-tailwind_module_css-placeholder-gray-700", +} +`; + +exports[`ConfigTestCases css large exported tests should allow to create css modules: prod 1`] = ` +Object { + "placeholder": "Xk90he", +} +`; diff --git a/test/configCases/css/large/index.js b/test/configCases/css/large/index.js new file mode 100644 index 00000000000..ecef1d267f3 --- /dev/null +++ b/test/configCases/css/large/index.js @@ -0,0 +1,22 @@ +const prod = process.env.NODE_ENV === "production"; + +it("should allow to create css modules", done => { + prod + ? __non_webpack_require__("./961.bundle1.js") + : __non_webpack_require__("./use-style_js.bundle0.js"); + import("./use-style.js").then(({ default: x }) => { + try { + expect(x).toMatchSnapshot(prod ? "prod" : "dev"); + } catch (e) { + return done(e); + } + done(); + }, done); +}); + +it("should allow to process tailwind as global css", done => { + prod + ? __non_webpack_require__("./382.bundle1.js") + : __non_webpack_require__("./tailwind_min_css.bundle0.js"); + import("./tailwind.min.css").then(() => done(), done); +}); diff --git a/test/configCases/css/large/tailwind.min.css b/test/configCases/css/large/tailwind.min.css new file mode 100644 index 00000000000..dc016181652 --- /dev/null +++ b/test/configCases/css/large/tailwind.min.css @@ -0,0 +1 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.5}*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.divide-transparent>:not(template)~:not(template){border-color:transparent}.divide-current>:not(template)~:not(template){border-color:currentColor}.divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.divide-solid>:not(template)~:not(template){border-style:solid}.divide-dashed>:not(template)~:not(template){border-style:dashed}.divide-dotted>:not(template)~:not(template){border-style:dotted}.divide-double>:not(template)~:not(template){border-style:double}.divide-none>:not(template)~:not(template){border-style:none}.divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-clip-border{background-clip:border-box}.bg-clip-padding{background-clip:padding-box}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-transparent{background-color:transparent}.bg-current{background-color:currentColor}.bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-current:hover{background-color:currentColor}.hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.focus\:bg-transparent:focus{background-color:transparent}.focus\:bg-current:focus{background-color:currentColor}.focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.bg-none{background-image:none}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.to-transparent{--gradient-to-color:transparent}.to-current{--gradient-to-color:currentColor}.to-black{--gradient-to-color:#000}.to-white{--gradient-to-color:#fff}.to-gray-100{--gradient-to-color:#f7fafc}.to-gray-200{--gradient-to-color:#edf2f7}.to-gray-300{--gradient-to-color:#e2e8f0}.to-gray-400{--gradient-to-color:#cbd5e0}.to-gray-500{--gradient-to-color:#a0aec0}.to-gray-600{--gradient-to-color:#718096}.to-gray-700{--gradient-to-color:#4a5568}.to-gray-800{--gradient-to-color:#2d3748}.to-gray-900{--gradient-to-color:#1a202c}.to-red-100{--gradient-to-color:#fff5f5}.to-red-200{--gradient-to-color:#fed7d7}.to-red-300{--gradient-to-color:#feb2b2}.to-red-400{--gradient-to-color:#fc8181}.to-red-500{--gradient-to-color:#f56565}.to-red-600{--gradient-to-color:#e53e3e}.to-red-700{--gradient-to-color:#c53030}.to-red-800{--gradient-to-color:#9b2c2c}.to-red-900{--gradient-to-color:#742a2a}.to-orange-100{--gradient-to-color:#fffaf0}.to-orange-200{--gradient-to-color:#feebc8}.to-orange-300{--gradient-to-color:#fbd38d}.to-orange-400{--gradient-to-color:#f6ad55}.to-orange-500{--gradient-to-color:#ed8936}.to-orange-600{--gradient-to-color:#dd6b20}.to-orange-700{--gradient-to-color:#c05621}.to-orange-800{--gradient-to-color:#9c4221}.to-orange-900{--gradient-to-color:#7b341e}.to-yellow-100{--gradient-to-color:#fffff0}.to-yellow-200{--gradient-to-color:#fefcbf}.to-yellow-300{--gradient-to-color:#faf089}.to-yellow-400{--gradient-to-color:#f6e05e}.to-yellow-500{--gradient-to-color:#ecc94b}.to-yellow-600{--gradient-to-color:#d69e2e}.to-yellow-700{--gradient-to-color:#b7791f}.to-yellow-800{--gradient-to-color:#975a16}.to-yellow-900{--gradient-to-color:#744210}.to-green-100{--gradient-to-color:#f0fff4}.to-green-200{--gradient-to-color:#c6f6d5}.to-green-300{--gradient-to-color:#9ae6b4}.to-green-400{--gradient-to-color:#68d391}.to-green-500{--gradient-to-color:#48bb78}.to-green-600{--gradient-to-color:#38a169}.to-green-700{--gradient-to-color:#2f855a}.to-green-800{--gradient-to-color:#276749}.to-green-900{--gradient-to-color:#22543d}.to-teal-100{--gradient-to-color:#e6fffa}.to-teal-200{--gradient-to-color:#b2f5ea}.to-teal-300{--gradient-to-color:#81e6d9}.to-teal-400{--gradient-to-color:#4fd1c5}.to-teal-500{--gradient-to-color:#38b2ac}.to-teal-600{--gradient-to-color:#319795}.to-teal-700{--gradient-to-color:#2c7a7b}.to-teal-800{--gradient-to-color:#285e61}.to-teal-900{--gradient-to-color:#234e52}.to-blue-100{--gradient-to-color:#ebf8ff}.to-blue-200{--gradient-to-color:#bee3f8}.to-blue-300{--gradient-to-color:#90cdf4}.to-blue-400{--gradient-to-color:#63b3ed}.to-blue-500{--gradient-to-color:#4299e1}.to-blue-600{--gradient-to-color:#3182ce}.to-blue-700{--gradient-to-color:#2b6cb0}.to-blue-800{--gradient-to-color:#2c5282}.to-blue-900{--gradient-to-color:#2a4365}.to-indigo-100{--gradient-to-color:#ebf4ff}.to-indigo-200{--gradient-to-color:#c3dafe}.to-indigo-300{--gradient-to-color:#a3bffa}.to-indigo-400{--gradient-to-color:#7f9cf5}.to-indigo-500{--gradient-to-color:#667eea}.to-indigo-600{--gradient-to-color:#5a67d8}.to-indigo-700{--gradient-to-color:#4c51bf}.to-indigo-800{--gradient-to-color:#434190}.to-indigo-900{--gradient-to-color:#3c366b}.to-purple-100{--gradient-to-color:#faf5ff}.to-purple-200{--gradient-to-color:#e9d8fd}.to-purple-300{--gradient-to-color:#d6bcfa}.to-purple-400{--gradient-to-color:#b794f4}.to-purple-500{--gradient-to-color:#9f7aea}.to-purple-600{--gradient-to-color:#805ad5}.to-purple-700{--gradient-to-color:#6b46c1}.to-purple-800{--gradient-to-color:#553c9a}.to-purple-900{--gradient-to-color:#44337a}.to-pink-100{--gradient-to-color:#fff5f7}.to-pink-200{--gradient-to-color:#fed7e2}.to-pink-300{--gradient-to-color:#fbb6ce}.to-pink-400{--gradient-to-color:#f687b3}.to-pink-500{--gradient-to-color:#ed64a6}.to-pink-600{--gradient-to-color:#d53f8c}.to-pink-700{--gradient-to-color:#b83280}.to-pink-800{--gradient-to-color:#97266d}.to-pink-900{--gradient-to-color:#702459}.hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.hover\:to-transparent:hover{--gradient-to-color:transparent}.hover\:to-current:hover{--gradient-to-color:currentColor}.hover\:to-black:hover{--gradient-to-color:#000}.hover\:to-white:hover{--gradient-to-color:#fff}.hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.hover\:to-gray-600:hover{--gradient-to-color:#718096}.hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.hover\:to-red-400:hover{--gradient-to-color:#fc8181}.hover\:to-red-500:hover{--gradient-to-color:#f56565}.hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.hover\:to-red-700:hover{--gradient-to-color:#c53030}.hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.hover\:to-red-900:hover{--gradient-to-color:#742a2a}.hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.hover\:to-orange-700:hover{--gradient-to-color:#c05621}.hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.hover\:to-yellow-900:hover{--gradient-to-color:#744210}.hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.hover\:to-green-400:hover{--gradient-to-color:#68d391}.hover\:to-green-500:hover{--gradient-to-color:#48bb78}.hover\:to-green-600:hover{--gradient-to-color:#38a169}.hover\:to-green-700:hover{--gradient-to-color:#2f855a}.hover\:to-green-800:hover{--gradient-to-color:#276749}.hover\:to-green-900:hover{--gradient-to-color:#22543d}.hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.hover\:to-teal-600:hover{--gradient-to-color:#319795}.hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.hover\:to-teal-800:hover{--gradient-to-color:#285e61}.hover\:to-teal-900:hover{--gradient-to-color:#234e52}.hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.hover\:to-indigo-800:hover{--gradient-to-color:#434190}.hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.hover\:to-purple-900:hover{--gradient-to-color:#44337a}.hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.hover\:to-pink-700:hover{--gradient-to-color:#b83280}.hover\:to-pink-800:hover{--gradient-to-color:#97266d}.hover\:to-pink-900:hover{--gradient-to-color:#702459}.focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.focus\:to-transparent:focus{--gradient-to-color:transparent}.focus\:to-current:focus{--gradient-to-color:currentColor}.focus\:to-black:focus{--gradient-to-color:#000}.focus\:to-white:focus{--gradient-to-color:#fff}.focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.focus\:to-gray-600:focus{--gradient-to-color:#718096}.focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.focus\:to-red-400:focus{--gradient-to-color:#fc8181}.focus\:to-red-500:focus{--gradient-to-color:#f56565}.focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.focus\:to-red-700:focus{--gradient-to-color:#c53030}.focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.focus\:to-red-900:focus{--gradient-to-color:#742a2a}.focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.focus\:to-orange-700:focus{--gradient-to-color:#c05621}.focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.focus\:to-yellow-900:focus{--gradient-to-color:#744210}.focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.focus\:to-green-400:focus{--gradient-to-color:#68d391}.focus\:to-green-500:focus{--gradient-to-color:#48bb78}.focus\:to-green-600:focus{--gradient-to-color:#38a169}.focus\:to-green-700:focus{--gradient-to-color:#2f855a}.focus\:to-green-800:focus{--gradient-to-color:#276749}.focus\:to-green-900:focus{--gradient-to-color:#22543d}.focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.focus\:to-teal-600:focus{--gradient-to-color:#319795}.focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.focus\:to-teal-800:focus{--gradient-to-color:#285e61}.focus\:to-teal-900:focus{--gradient-to-color:#234e52}.focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.focus\:to-indigo-800:focus{--gradient-to-color:#434190}.focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.focus\:to-purple-900:focus{--gradient-to-color:#44337a}.focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.focus\:to-pink-700:focus{--gradient-to-color:#b83280}.focus\:to-pink-800:focus{--gradient-to-color:#97266d}.focus\:to-pink-900:focus{--gradient-to-color:#702459}.bg-opacity-0{--bg-opacity:0}.bg-opacity-25{--bg-opacity:0.25}.bg-opacity-50{--bg-opacity:0.5}.bg-opacity-75{--bg-opacity:0.75}.bg-opacity-100{--bg-opacity:1}.hover\:bg-opacity-0:hover{--bg-opacity:0}.hover\:bg-opacity-25:hover{--bg-opacity:0.25}.hover\:bg-opacity-50:hover{--bg-opacity:0.5}.hover\:bg-opacity-75:hover{--bg-opacity:0.75}.hover\:bg-opacity-100:hover{--bg-opacity:1}.focus\:bg-opacity-0:focus{--bg-opacity:0}.focus\:bg-opacity-25:focus{--bg-opacity:0.25}.focus\:bg-opacity-50:focus{--bg-opacity:0.5}.focus\:bg-opacity-75:focus{--bg-opacity:0.75}.focus\:bg-opacity-100:focus{--bg-opacity:1}.bg-bottom{background-position:bottom}.bg-center{background-position:center}.bg-left{background-position:left}.bg-left-bottom{background-position:left bottom}.bg-left-top{background-position:left top}.bg-right{background-position:right}.bg-right-bottom{background-position:right bottom}.bg-right-top{background-position:right top}.bg-top{background-position:top}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-transparent{border-color:transparent}.border-current{border-color:currentColor}.border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:border-current:hover{border-color:currentColor}.hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.focus\:border-transparent:focus{border-color:transparent}.focus\:border-current:focus{border-color:currentColor}.focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.border-opacity-0{--border-opacity:0}.border-opacity-25{--border-opacity:0.25}.border-opacity-50{--border-opacity:0.5}.border-opacity-75{--border-opacity:0.75}.border-opacity-100{--border-opacity:1}.hover\:border-opacity-0:hover{--border-opacity:0}.hover\:border-opacity-25:hover{--border-opacity:0.25}.hover\:border-opacity-50:hover{--border-opacity:0.5}.hover\:border-opacity-75:hover{--border-opacity:0.75}.hover\:border-opacity-100:hover{--border-opacity:1}.focus\:border-opacity-0:focus{--border-opacity:0}.focus\:border-opacity-25:focus{--border-opacity:0.25}.focus\:border-opacity-50:focus{--border-opacity:0.5}.focus\:border-opacity-75:focus{--border-opacity:0.75}.focus\:border-opacity-100:focus{--border-opacity:1}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.rounded-bl-sm{border-bottom-left-radius:.125rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-tl-md{border-top-left-radius:.375rem}.rounded-tr-md{border-top-right-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tr-lg{border-top-right-radius:.5rem}.rounded-br-lg{border-bottom-right-radius:.5rem}.rounded-bl-lg{border-bottom-left-radius:.5rem}.rounded-tl-xl{border-top-left-radius:.75rem}.rounded-tr-xl{border-top-right-radius:.75rem}.rounded-br-xl{border-bottom-right-radius:.75rem}.rounded-bl-xl{border-bottom-left-radius:.75rem}.rounded-tl-2xl{border-top-left-radius:1rem}.rounded-tr-2xl{border-top-right-radius:1rem}.rounded-br-2xl{border-bottom-right-radius:1rem}.rounded-bl-2xl{border-bottom-left-radius:1rem}.rounded-tl-3xl{border-top-left-radius:1.5rem}.rounded-tr-3xl{border-top-right-radius:1.5rem}.rounded-br-3xl{border-bottom-right-radius:1.5rem}.rounded-bl-3xl{border-bottom-left-radius:1.5rem}.rounded-tl-full{border-top-left-radius:9999px}.rounded-tr-full{border-top-right-radius:9999px}.rounded-br-full{border-bottom-right-radius:9999px}.rounded-bl-full{border-bottom-left-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-none{border-style:none}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-8{border-width:8px}.border{border-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-2{border-top-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-t-4{border-top-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-l-4{border-left-width:4px}.border-t-8{border-top-width:8px}.border-r-8{border-right-width:8px}.border-b-8{border-bottom-width:8px}.border-l-8{border-left-width:8px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-text{cursor:text}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.hidden{display:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-no-wrap{flex-wrap:nowrap}.place-items-auto{place-items:auto}.place-items-start{place-items:start}.place-items-end{place-items:end}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-content-between{place-content:space-between}.place-content-around{place-content:space-around}.place-content-evenly{place-content:space-evenly}.place-content-stretch{place-content:stretch}.place-self-auto{place-self:auto}.place-self-start{place-self:start}.place-self-end{place-self:end}.place-self-center{place-self:center}.place-self-stretch{place-self:stretch}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-items-auto{justify-items:auto}.justify-items-start{justify-items:start}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.justify-items-stretch{justify-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.justify-self-auto{justify-self:auto}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.justify-self-stretch{justify-self:stretch}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-grow-0{flex-grow:0}.flex-grow{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clearfix:after{content:"";display:table;clear:both}.clear-left{clear:left}.clear-right{clear:right}.clear-both{clear:both}.clear-none{clear:none}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.font-hairline{font-weight:100}.font-thin{font-weight:200}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-black{font-weight:900}.hover\:font-hairline:hover{font-weight:100}.hover\:font-thin:hover{font-weight:200}.hover\:font-light:hover{font-weight:300}.hover\:font-normal:hover{font-weight:400}.hover\:font-medium:hover{font-weight:500}.hover\:font-semibold:hover{font-weight:600}.hover\:font-bold:hover{font-weight:700}.hover\:font-extrabold:hover{font-weight:800}.hover\:font-black:hover{font-weight:900}.focus\:font-hairline:focus{font-weight:100}.focus\:font-thin:focus{font-weight:200}.focus\:font-light:focus{font-weight:300}.focus\:font-normal:focus{font-weight:400}.focus\:font-medium:focus{font-weight:500}.focus\:font-semibold:focus{font-weight:600}.focus\:font-bold:focus{font-weight:700}.focus\:font-extrabold:focus{font-weight:800}.focus\:font-black:focus{font-weight:900}.h-0{height:0}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-32{height:8rem}.h-40{height:10rem}.h-48{height:12rem}.h-56{height:14rem}.h-64{height:16rem}.h-auto{height:auto}.h-px{height:1px}.h-full{height:100%}.h-screen{height:100vh}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.text-5xl{font-size:3rem}.text-6xl{font-size:4rem}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-10{line-height:2.5rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-loose{line-height:2}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-8{margin:2rem}.m-10{margin:2.5rem}.m-12{margin:3rem}.m-16{margin:4rem}.m-20{margin:5rem}.m-24{margin:6rem}.m-32{margin:8rem}.m-40{margin:10rem}.m-48{margin:12rem}.m-56{margin:14rem}.m-64{margin:16rem}.m-auto{margin:auto}.m-px{margin:1px}.-m-1{margin:-.25rem}.-m-2{margin:-.5rem}.-m-3{margin:-.75rem}.-m-4{margin:-1rem}.-m-5{margin:-1.25rem}.-m-6{margin:-1.5rem}.-m-8{margin:-2rem}.-m-10{margin:-2.5rem}.-m-12{margin:-3rem}.-m-16{margin:-4rem}.-m-20{margin:-5rem}.-m-24{margin:-6rem}.-m-32{margin:-8rem}.-m-40{margin:-10rem}.-m-48{margin:-12rem}.-m-56{margin:-14rem}.-m-64{margin:-16rem}.-m-px{margin:-1px}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-12{margin-left:3rem;margin-right:3rem}.my-16{margin-top:4rem;margin-bottom:4rem}.mx-16{margin-left:4rem;margin-right:4rem}.my-20{margin-top:5rem;margin-bottom:5rem}.mx-20{margin-left:5rem;margin-right:5rem}.my-24{margin-top:6rem;margin-bottom:6rem}.mx-24{margin-left:6rem;margin-right:6rem}.my-32{margin-top:8rem;margin-bottom:8rem}.mx-32{margin-left:8rem;margin-right:8rem}.my-40{margin-top:10rem;margin-bottom:10rem}.mx-40{margin-left:10rem;margin-right:10rem}.my-48{margin-top:12rem;margin-bottom:12rem}.mx-48{margin-left:12rem;margin-right:12rem}.my-56{margin-top:14rem;margin-bottom:14rem}.mx-56{margin-left:14rem;margin-right:14rem}.my-64{margin-top:16rem;margin-bottom:16rem}.mx-64{margin-left:16rem;margin-right:16rem}.my-auto{margin-top:auto;margin-bottom:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-px{margin-top:1px;margin-bottom:1px}.mx-px{margin-left:1px;margin-right:1px}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-my-4{margin-top:-1rem;margin-bottom:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-8{margin-top:-2rem;margin-bottom:-2rem}.-mx-8{margin-left:-2rem;margin-right:-2rem}.-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-my-12{margin-top:-3rem;margin-bottom:-3rem}.-mx-12{margin-left:-3rem;margin-right:-3rem}.-my-16{margin-top:-4rem;margin-bottom:-4rem}.-mx-16{margin-left:-4rem;margin-right:-4rem}.-my-20{margin-top:-5rem;margin-bottom:-5rem}.-mx-20{margin-left:-5rem;margin-right:-5rem}.-my-24{margin-top:-6rem;margin-bottom:-6rem}.-mx-24{margin-left:-6rem;margin-right:-6rem}.-my-32{margin-top:-8rem;margin-bottom:-8rem}.-mx-32{margin-left:-8rem;margin-right:-8rem}.-my-40{margin-top:-10rem;margin-bottom:-10rem}.-mx-40{margin-left:-10rem;margin-right:-10rem}.-my-48{margin-top:-12rem;margin-bottom:-12rem}.-mx-48{margin-left:-12rem;margin-right:-12rem}.-my-56{margin-top:-14rem;margin-bottom:-14rem}.-mx-56{margin-left:-14rem;margin-right:-14rem}.-my-64{margin-top:-16rem;margin-bottom:-16rem}.-mx-64{margin-left:-16rem;margin-right:-16rem}.-my-px{margin-top:-1px;margin-bottom:-1px}.-mx-px{margin-left:-1px;margin-right:-1px}.mt-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.mt-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.mt-12{margin-top:3rem}.mr-12{margin-right:3rem}.mb-12{margin-bottom:3rem}.ml-12{margin-left:3rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.mb-16{margin-bottom:4rem}.ml-16{margin-left:4rem}.mt-20{margin-top:5rem}.mr-20{margin-right:5rem}.mb-20{margin-bottom:5rem}.ml-20{margin-left:5rem}.mt-24{margin-top:6rem}.mr-24{margin-right:6rem}.mb-24{margin-bottom:6rem}.ml-24{margin-left:6rem}.mt-32{margin-top:8rem}.mr-32{margin-right:8rem}.mb-32{margin-bottom:8rem}.ml-32{margin-left:8rem}.mt-40{margin-top:10rem}.mr-40{margin-right:10rem}.mb-40{margin-bottom:10rem}.ml-40{margin-left:10rem}.mt-48{margin-top:12rem}.mr-48{margin-right:12rem}.mb-48{margin-bottom:12rem}.ml-48{margin-left:12rem}.mt-56{margin-top:14rem}.mr-56{margin-right:14rem}.mb-56{margin-bottom:14rem}.ml-56{margin-left:14rem}.mt-64{margin-top:16rem}.mr-64{margin-right:16rem}.mb-64{margin-bottom:16rem}.ml-64{margin-left:16rem}.mt-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.mt-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-ml-1{margin-left:-.25rem}.-mt-2{margin-top:-.5rem}.-mr-2{margin-right:-.5rem}.-mb-2{margin-bottom:-.5rem}.-ml-2{margin-left:-.5rem}.-mt-3{margin-top:-.75rem}.-mr-3{margin-right:-.75rem}.-mb-3{margin-bottom:-.75rem}.-ml-3{margin-left:-.75rem}.-mt-4{margin-top:-1rem}.-mr-4{margin-right:-1rem}.-mb-4{margin-bottom:-1rem}.-ml-4{margin-left:-1rem}.-mt-5{margin-top:-1.25rem}.-mr-5{margin-right:-1.25rem}.-mb-5{margin-bottom:-1.25rem}.-ml-5{margin-left:-1.25rem}.-mt-6{margin-top:-1.5rem}.-mr-6{margin-right:-1.5rem}.-mb-6{margin-bottom:-1.5rem}.-ml-6{margin-left:-1.5rem}.-mt-8{margin-top:-2rem}.-mr-8{margin-right:-2rem}.-mb-8{margin-bottom:-2rem}.-ml-8{margin-left:-2rem}.-mt-10{margin-top:-2.5rem}.-mr-10{margin-right:-2.5rem}.-mb-10{margin-bottom:-2.5rem}.-ml-10{margin-left:-2.5rem}.-mt-12{margin-top:-3rem}.-mr-12{margin-right:-3rem}.-mb-12{margin-bottom:-3rem}.-ml-12{margin-left:-3rem}.-mt-16{margin-top:-4rem}.-mr-16{margin-right:-4rem}.-mb-16{margin-bottom:-4rem}.-ml-16{margin-left:-4rem}.-mt-20{margin-top:-5rem}.-mr-20{margin-right:-5rem}.-mb-20{margin-bottom:-5rem}.-ml-20{margin-left:-5rem}.-mt-24{margin-top:-6rem}.-mr-24{margin-right:-6rem}.-mb-24{margin-bottom:-6rem}.-ml-24{margin-left:-6rem}.-mt-32{margin-top:-8rem}.-mr-32{margin-right:-8rem}.-mb-32{margin-bottom:-8rem}.-ml-32{margin-left:-8rem}.-mt-40{margin-top:-10rem}.-mr-40{margin-right:-10rem}.-mb-40{margin-bottom:-10rem}.-ml-40{margin-left:-10rem}.-mt-48{margin-top:-12rem}.-mr-48{margin-right:-12rem}.-mb-48{margin-bottom:-12rem}.-ml-48{margin-left:-12rem}.-mt-56{margin-top:-14rem}.-mr-56{margin-right:-14rem}.-mb-56{margin-bottom:-14rem}.-ml-56{margin-left:-14rem}.-mt-64{margin-top:-16rem}.-mr-64{margin-right:-16rem}.-mb-64{margin-bottom:-16rem}.-ml-64{margin-left:-16rem}.-mt-px{margin-top:-1px}.-mr-px{margin-right:-1px}.-mb-px{margin-bottom:-1px}.-ml-px{margin-left:-1px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.max-w-sm{max-width:24rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-full{max-width:100%}.max-w-screen-sm{max-width:640px}.max-w-screen-md{max-width:768px}.max-w-screen-lg{max-width:1024px}.max-w-screen-xl{max-width:1280px}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-none{object-fit:none}.object-scale-down{object-fit:scale-down}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-left-bottom{object-position:left bottom}.object-left-top{object-position:left top}.object-right{object-position:right}.object-right-bottom{object-position:right bottom}.object-right-top{object-position:right top}.object-top{object-position:top}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.hover\:opacity-0:hover{opacity:0}.hover\:opacity-25:hover{opacity:.25}.hover\:opacity-50:hover{opacity:.5}.hover\:opacity-75:hover{opacity:.75}.hover\:opacity-100:hover{opacity:1}.focus\:opacity-0:focus{opacity:0}.focus\:opacity-25:focus{opacity:.25}.focus\:opacity-50:focus{opacity:.5}.focus\:opacity-75:focus{opacity:.75}.focus\:opacity-100:focus{opacity:1}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline-white{outline:2px dotted #fff;outline-offset:2px}.outline-black{outline:2px dotted #000;outline-offset:2px}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.scrolling-touch{-webkit-overflow-scrolling:touch}.scrolling-auto{-webkit-overflow-scrolling:auto}.overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-20{padding:5rem}.p-24{padding:6rem}.p-32{padding:8rem}.p-40{padding:10rem}.p-48{padding:12rem}.p-56{padding:14rem}.p-64{padding:16rem}.p-px{padding:1px}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-8{padding-left:2rem;padding-right:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.px-16{padding-left:4rem;padding-right:4rem}.py-20{padding-top:5rem;padding-bottom:5rem}.px-20{padding-left:5rem;padding-right:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.px-24{padding-left:6rem;padding-right:6rem}.py-32{padding-top:8rem;padding-bottom:8rem}.px-32{padding-left:8rem;padding-right:8rem}.py-40{padding-top:10rem;padding-bottom:10rem}.px-40{padding-left:10rem;padding-right:10rem}.py-48{padding-top:12rem;padding-bottom:12rem}.px-48{padding-left:12rem;padding-right:12rem}.py-56{padding-top:14rem;padding-bottom:14rem}.px-56{padding-left:14rem;padding-right:14rem}.py-64{padding-top:16rem;padding-bottom:16rem}.px-64{padding-left:16rem;padding-right:16rem}.py-px{padding-top:1px;padding-bottom:1px}.px-px{padding-left:1px;padding-right:1px}.pt-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.pt-12{padding-top:3rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-12{padding-left:3rem}.pt-16{padding-top:4rem}.pr-16{padding-right:4rem}.pb-16{padding-bottom:4rem}.pl-16{padding-left:4rem}.pt-20{padding-top:5rem}.pr-20{padding-right:5rem}.pb-20{padding-bottom:5rem}.pl-20{padding-left:5rem}.pt-24{padding-top:6rem}.pr-24{padding-right:6rem}.pb-24{padding-bottom:6rem}.pl-24{padding-left:6rem}.pt-32{padding-top:8rem}.pr-32{padding-right:8rem}.pb-32{padding-bottom:8rem}.pl-32{padding-left:8rem}.pt-40{padding-top:10rem}.pr-40{padding-right:10rem}.pb-40{padding-bottom:10rem}.pl-40{padding-left:10rem}.pt-48{padding-top:12rem}.pr-48{padding-right:12rem}.pb-48{padding-bottom:12rem}.pl-48{padding-left:12rem}.pt-56{padding-top:14rem}.pr-56{padding-right:14rem}.pb-56{padding-bottom:14rem}.pl-56{padding-left:14rem}.pt-64{padding-top:16rem}.pr-64{padding-right:16rem}.pb-64{padding-bottom:16rem}.pl-64{padding-left:16rem}.pt-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.placeholder-transparent:-ms-input-placeholder{color:transparent}.placeholder-transparent::-ms-input-placeholder{color:transparent}.placeholder-transparent::placeholder{color:transparent}.placeholder-current:-ms-input-placeholder{color:currentColor}.placeholder-current::-ms-input-placeholder{color:currentColor}.placeholder-current::placeholder{color:currentColor}.placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.focus\:placeholder-transparent:focus::placeholder{color:transparent}.focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.focus\:placeholder-current:focus::placeholder{color:currentColor}.focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.placeholder-opacity-0::placeholder{--placeholder-opacity:0}.placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.placeholder-opacity-100::placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-auto{top:auto;right:auto;bottom:auto;left:auto}.inset-y-0{top:0;bottom:0}.inset-x-0{right:0;left:0}.inset-y-auto{top:auto;bottom:auto}.inset-x-auto{right:auto;left:auto}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-auto{top:auto}.right-auto{right:auto}.bottom-auto{bottom:auto}.left-auto{left:auto}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.shadow-none{box-shadow:none}.hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.hover\:shadow-none:hover{box-shadow:none}.focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.focus\:shadow-none:focus{box-shadow:none}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.stroke-0{stroke-width:0}.stroke-1{stroke-width:1}.stroke-2{stroke-width:2}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-transparent{color:transparent}.text-current{color:currentColor}.text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.hover\:text-transparent:hover{color:transparent}.hover\:text-current:hover{color:currentColor}.hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.focus\:text-transparent:focus{color:transparent}.focus\:text-current:focus{color:currentColor}.focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.text-opacity-0{--text-opacity:0}.text-opacity-25{--text-opacity:0.25}.text-opacity-50{--text-opacity:0.5}.text-opacity-75{--text-opacity:0.75}.text-opacity-100{--text-opacity:1}.hover\:text-opacity-0:hover{--text-opacity:0}.hover\:text-opacity-25:hover{--text-opacity:0.25}.hover\:text-opacity-50:hover{--text-opacity:0.5}.hover\:text-opacity-75:hover{--text-opacity:0.75}.hover\:text-opacity-100:hover{--text-opacity:1}.focus\:text-opacity-0:focus{--text-opacity:0}.focus\:text-opacity-25:focus{--text-opacity:0.25}.focus\:text-opacity-50:focus{--text-opacity:0.5}.focus\:text-opacity-75:focus{--text-opacity:0.75}.focus\:text-opacity-100:focus{--text-opacity:1}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.hover\:line-through:hover{text-decoration:line-through}.hover\:no-underline:hover{text-decoration:none}.focus\:underline:focus{text-decoration:underline}.focus\:line-through:focus{text-decoration:line-through}.focus\:no-underline:focus{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.normal-nums{font-variant-numeric:normal}.ordinal{--font-variant-numeric-ordinal:ordinal}.slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.lining-nums{--font-variant-numeric-figure:lining-nums}.oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.proportional-nums{--font-variant-numeric-spacing:proportional-nums}.tabular-nums{--font-variant-numeric-spacing:tabular-nums}.diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.tracking-tighter{letter-spacing:-.05em}.tracking-tight{letter-spacing:-.025em}.tracking-normal{letter-spacing:0}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.visible{visibility:visible}.invisible{visibility:hidden}.whitespace-normal{white-space:normal}.whitespace-no-wrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.break-words{word-wrap:break-word;overflow-wrap:break-word}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-32{width:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-56{width:14rem}.w-64{width:16rem}.w-auto{width:auto}.w-px{width:1px}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-1\/6{width:16.666667%}.w-2\/6{width:33.333333%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-5\/12{width:41.666667%}.w-6\/12{width:50%}.w-7\/12{width:58.333333%}.w-8\/12{width:66.666667%}.w-9\/12{width:75%}.w-10\/12{width:83.333333%}.w-11\/12{width:91.666667%}.w-full{width:100%}.w-screen{width:100vw}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.gap-0{grid-gap:0;gap:0}.gap-1{grid-gap:.25rem;gap:.25rem}.gap-2{grid-gap:.5rem;gap:.5rem}.gap-3{grid-gap:.75rem;gap:.75rem}.gap-4{grid-gap:1rem;gap:1rem}.gap-5{grid-gap:1.25rem;gap:1.25rem}.gap-6{grid-gap:1.5rem;gap:1.5rem}.gap-8{grid-gap:2rem;gap:2rem}.gap-10{grid-gap:2.5rem;gap:2.5rem}.gap-12{grid-gap:3rem;gap:3rem}.gap-16{grid-gap:4rem;gap:4rem}.gap-20{grid-gap:5rem;gap:5rem}.gap-24{grid-gap:6rem;gap:6rem}.gap-32{grid-gap:8rem;gap:8rem}.gap-40{grid-gap:10rem;gap:10rem}.gap-48{grid-gap:12rem;gap:12rem}.gap-56{grid-gap:14rem;gap:14rem}.gap-64{grid-gap:16rem;gap:16rem}.gap-px{grid-gap:1px;gap:1px}.col-gap-0{grid-column-gap:0;column-gap:0}.col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.col-gap-4{grid-column-gap:1rem;column-gap:1rem}.col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.col-gap-8{grid-column-gap:2rem;column-gap:2rem}.col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.col-gap-12{grid-column-gap:3rem;column-gap:3rem}.col-gap-16{grid-column-gap:4rem;column-gap:4rem}.col-gap-20{grid-column-gap:5rem;column-gap:5rem}.col-gap-24{grid-column-gap:6rem;column-gap:6rem}.col-gap-32{grid-column-gap:8rem;column-gap:8rem}.col-gap-40{grid-column-gap:10rem;column-gap:10rem}.col-gap-48{grid-column-gap:12rem;column-gap:12rem}.col-gap-56{grid-column-gap:14rem;column-gap:14rem}.col-gap-64{grid-column-gap:16rem;column-gap:16rem}.col-gap-px{grid-column-gap:1px;column-gap:1px}.gap-x-0{grid-column-gap:0;column-gap:0}.gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.gap-x-4{grid-column-gap:1rem;column-gap:1rem}.gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{grid-column-gap:2rem;column-gap:2rem}.gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.gap-x-12{grid-column-gap:3rem;column-gap:3rem}.gap-x-16{grid-column-gap:4rem;column-gap:4rem}.gap-x-20{grid-column-gap:5rem;column-gap:5rem}.gap-x-24{grid-column-gap:6rem;column-gap:6rem}.gap-x-32{grid-column-gap:8rem;column-gap:8rem}.gap-x-40{grid-column-gap:10rem;column-gap:10rem}.gap-x-48{grid-column-gap:12rem;column-gap:12rem}.gap-x-56{grid-column-gap:14rem;column-gap:14rem}.gap-x-64{grid-column-gap:16rem;column-gap:16rem}.gap-x-px{grid-column-gap:1px;column-gap:1px}.row-gap-0{grid-row-gap:0;row-gap:0}.row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.row-gap-4{grid-row-gap:1rem;row-gap:1rem}.row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.row-gap-8{grid-row-gap:2rem;row-gap:2rem}.row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.row-gap-12{grid-row-gap:3rem;row-gap:3rem}.row-gap-16{grid-row-gap:4rem;row-gap:4rem}.row-gap-20{grid-row-gap:5rem;row-gap:5rem}.row-gap-24{grid-row-gap:6rem;row-gap:6rem}.row-gap-32{grid-row-gap:8rem;row-gap:8rem}.row-gap-40{grid-row-gap:10rem;row-gap:10rem}.row-gap-48{grid-row-gap:12rem;row-gap:12rem}.row-gap-56{grid-row-gap:14rem;row-gap:14rem}.row-gap-64{grid-row-gap:16rem;row-gap:16rem}.row-gap-px{grid-row-gap:1px;row-gap:1px}.gap-y-0{grid-row-gap:0;row-gap:0}.gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.gap-y-4{grid-row-gap:1rem;row-gap:1rem}.gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.gap-y-8{grid-row-gap:2rem;row-gap:2rem}.gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.gap-y-12{grid-row-gap:3rem;row-gap:3rem}.gap-y-16{grid-row-gap:4rem;row-gap:4rem}.gap-y-20{grid-row-gap:5rem;row-gap:5rem}.gap-y-24{grid-row-gap:6rem;row-gap:6rem}.gap-y-32{grid-row-gap:8rem;row-gap:8rem}.gap-y-40{grid-row-gap:10rem;row-gap:10rem}.gap-y-48{grid-row-gap:12rem;row-gap:12rem}.gap-y-56{grid-row-gap:14rem;row-gap:14rem}.gap-y-64{grid-row-gap:16rem;row-gap:16rem}.gap-y-px{grid-row-gap:1px;row-gap:1px}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-none{grid-template-columns:none}.auto-cols-auto{grid-auto-columns:auto}.auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.col-start-5{grid-column-start:5}.col-start-6{grid-column-start:6}.col-start-7{grid-column-start:7}.col-start-8{grid-column-start:8}.col-start-9{grid-column-start:9}.col-start-10{grid-column-start:10}.col-start-11{grid-column-start:11}.col-start-12{grid-column-start:12}.col-start-13{grid-column-start:13}.col-start-auto{grid-column-start:auto}.col-end-1{grid-column-end:1}.col-end-2{grid-column-end:2}.col-end-3{grid-column-end:3}.col-end-4{grid-column-end:4}.col-end-5{grid-column-end:5}.col-end-6{grid-column-end:6}.col-end-7{grid-column-end:7}.col-end-8{grid-column-end:8}.col-end-9{grid-column-end:9}.col-end-10{grid-column-end:10}.col-end-11{grid-column-end:11}.col-end-12{grid-column-end:12}.col-end-13{grid-column-end:13}.col-end-auto{grid-column-end:auto}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.grid-rows-none{grid-template-rows:none}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.row-auto{grid-row:auto}.row-span-1{grid-row:span 1/span 1}.row-span-2{grid-row:span 2/span 2}.row-span-3{grid-row:span 3/span 3}.row-span-4{grid-row:span 4/span 4}.row-span-5{grid-row:span 5/span 5}.row-span-6{grid-row:span 6/span 6}.row-span-full{grid-row:1/-1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.row-start-4{grid-row-start:4}.row-start-5{grid-row-start:5}.row-start-6{grid-row-start:6}.row-start-7{grid-row-start:7}.row-start-auto{grid-row-start:auto}.row-end-1{grid-row-end:1}.row-end-2{grid-row-end:2}.row-end-3{grid-row-end:3}.row-end-4{grid-row-end:4}.row-end-5{grid-row-end:5}.row-end-6{grid-row-end:6}.row-end-7{grid-row-end:7}.row-end-auto{grid-row-end:auto}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.transform-none{transform:none}.origin-center{transform-origin:center}.origin-top{transform-origin:top}.origin-top-right{transform-origin:top right}.origin-right{transform-origin:right}.origin-bottom-right{transform-origin:bottom right}.origin-bottom{transform-origin:bottom}.origin-bottom-left{transform-origin:bottom left}.origin-left{transform-origin:left}.origin-top-left{transform-origin:top left}.scale-0{--transform-scale-x:0;--transform-scale-y:0}.scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.scale-x-0{--transform-scale-x:0}.scale-x-50{--transform-scale-x:.5}.scale-x-75{--transform-scale-x:.75}.scale-x-90{--transform-scale-x:.9}.scale-x-95{--transform-scale-x:.95}.scale-x-100{--transform-scale-x:1}.scale-x-105{--transform-scale-x:1.05}.scale-x-110{--transform-scale-x:1.1}.scale-x-125{--transform-scale-x:1.25}.scale-x-150{--transform-scale-x:1.5}.scale-y-0{--transform-scale-y:0}.scale-y-50{--transform-scale-y:.5}.scale-y-75{--transform-scale-y:.75}.scale-y-90{--transform-scale-y:.9}.scale-y-95{--transform-scale-y:.95}.scale-y-100{--transform-scale-y:1}.scale-y-105{--transform-scale-y:1.05}.scale-y-110{--transform-scale-y:1.1}.scale-y-125{--transform-scale-y:1.25}.scale-y-150{--transform-scale-y:1.5}.hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.hover\:scale-x-0:hover{--transform-scale-x:0}.hover\:scale-x-50:hover{--transform-scale-x:.5}.hover\:scale-x-75:hover{--transform-scale-x:.75}.hover\:scale-x-90:hover{--transform-scale-x:.9}.hover\:scale-x-95:hover{--transform-scale-x:.95}.hover\:scale-x-100:hover{--transform-scale-x:1}.hover\:scale-x-105:hover{--transform-scale-x:1.05}.hover\:scale-x-110:hover{--transform-scale-x:1.1}.hover\:scale-x-125:hover{--transform-scale-x:1.25}.hover\:scale-x-150:hover{--transform-scale-x:1.5}.hover\:scale-y-0:hover{--transform-scale-y:0}.hover\:scale-y-50:hover{--transform-scale-y:.5}.hover\:scale-y-75:hover{--transform-scale-y:.75}.hover\:scale-y-90:hover{--transform-scale-y:.9}.hover\:scale-y-95:hover{--transform-scale-y:.95}.hover\:scale-y-100:hover{--transform-scale-y:1}.hover\:scale-y-105:hover{--transform-scale-y:1.05}.hover\:scale-y-110:hover{--transform-scale-y:1.1}.hover\:scale-y-125:hover{--transform-scale-y:1.25}.hover\:scale-y-150:hover{--transform-scale-y:1.5}.focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.focus\:scale-x-0:focus{--transform-scale-x:0}.focus\:scale-x-50:focus{--transform-scale-x:.5}.focus\:scale-x-75:focus{--transform-scale-x:.75}.focus\:scale-x-90:focus{--transform-scale-x:.9}.focus\:scale-x-95:focus{--transform-scale-x:.95}.focus\:scale-x-100:focus{--transform-scale-x:1}.focus\:scale-x-105:focus{--transform-scale-x:1.05}.focus\:scale-x-110:focus{--transform-scale-x:1.1}.focus\:scale-x-125:focus{--transform-scale-x:1.25}.focus\:scale-x-150:focus{--transform-scale-x:1.5}.focus\:scale-y-0:focus{--transform-scale-y:0}.focus\:scale-y-50:focus{--transform-scale-y:.5}.focus\:scale-y-75:focus{--transform-scale-y:.75}.focus\:scale-y-90:focus{--transform-scale-y:.9}.focus\:scale-y-95:focus{--transform-scale-y:.95}.focus\:scale-y-100:focus{--transform-scale-y:1}.focus\:scale-y-105:focus{--transform-scale-y:1.05}.focus\:scale-y-110:focus{--transform-scale-y:1.1}.focus\:scale-y-125:focus{--transform-scale-y:1.25}.focus\:scale-y-150:focus{--transform-scale-y:1.5}.rotate-0{--transform-rotate:0}.rotate-1{--transform-rotate:1deg}.rotate-2{--transform-rotate:2deg}.rotate-3{--transform-rotate:3deg}.rotate-6{--transform-rotate:6deg}.rotate-12{--transform-rotate:12deg}.rotate-45{--transform-rotate:45deg}.rotate-90{--transform-rotate:90deg}.rotate-180{--transform-rotate:180deg}.-rotate-180{--transform-rotate:-180deg}.-rotate-90{--transform-rotate:-90deg}.-rotate-45{--transform-rotate:-45deg}.-rotate-12{--transform-rotate:-12deg}.-rotate-6{--transform-rotate:-6deg}.-rotate-3{--transform-rotate:-3deg}.-rotate-2{--transform-rotate:-2deg}.-rotate-1{--transform-rotate:-1deg}.hover\:rotate-0:hover{--transform-rotate:0}.hover\:rotate-1:hover{--transform-rotate:1deg}.hover\:rotate-2:hover{--transform-rotate:2deg}.hover\:rotate-3:hover{--transform-rotate:3deg}.hover\:rotate-6:hover{--transform-rotate:6deg}.hover\:rotate-12:hover{--transform-rotate:12deg}.hover\:rotate-45:hover{--transform-rotate:45deg}.hover\:rotate-90:hover{--transform-rotate:90deg}.hover\:rotate-180:hover{--transform-rotate:180deg}.hover\:-rotate-180:hover{--transform-rotate:-180deg}.hover\:-rotate-90:hover{--transform-rotate:-90deg}.hover\:-rotate-45:hover{--transform-rotate:-45deg}.hover\:-rotate-12:hover{--transform-rotate:-12deg}.hover\:-rotate-6:hover{--transform-rotate:-6deg}.hover\:-rotate-3:hover{--transform-rotate:-3deg}.hover\:-rotate-2:hover{--transform-rotate:-2deg}.hover\:-rotate-1:hover{--transform-rotate:-1deg}.focus\:rotate-0:focus{--transform-rotate:0}.focus\:rotate-1:focus{--transform-rotate:1deg}.focus\:rotate-2:focus{--transform-rotate:2deg}.focus\:rotate-3:focus{--transform-rotate:3deg}.focus\:rotate-6:focus{--transform-rotate:6deg}.focus\:rotate-12:focus{--transform-rotate:12deg}.focus\:rotate-45:focus{--transform-rotate:45deg}.focus\:rotate-90:focus{--transform-rotate:90deg}.focus\:rotate-180:focus{--transform-rotate:180deg}.focus\:-rotate-180:focus{--transform-rotate:-180deg}.focus\:-rotate-90:focus{--transform-rotate:-90deg}.focus\:-rotate-45:focus{--transform-rotate:-45deg}.focus\:-rotate-12:focus{--transform-rotate:-12deg}.focus\:-rotate-6:focus{--transform-rotate:-6deg}.focus\:-rotate-3:focus{--transform-rotate:-3deg}.focus\:-rotate-2:focus{--transform-rotate:-2deg}.focus\:-rotate-1:focus{--transform-rotate:-1deg}.translate-x-0{--transform-translate-x:0}.translate-x-1{--transform-translate-x:0.25rem}.translate-x-2{--transform-translate-x:0.5rem}.translate-x-3{--transform-translate-x:0.75rem}.translate-x-4{--transform-translate-x:1rem}.translate-x-5{--transform-translate-x:1.25rem}.translate-x-6{--transform-translate-x:1.5rem}.translate-x-8{--transform-translate-x:2rem}.translate-x-10{--transform-translate-x:2.5rem}.translate-x-12{--transform-translate-x:3rem}.translate-x-16{--transform-translate-x:4rem}.translate-x-20{--transform-translate-x:5rem}.translate-x-24{--transform-translate-x:6rem}.translate-x-32{--transform-translate-x:8rem}.translate-x-40{--transform-translate-x:10rem}.translate-x-48{--transform-translate-x:12rem}.translate-x-56{--transform-translate-x:14rem}.translate-x-64{--transform-translate-x:16rem}.translate-x-px{--transform-translate-x:1px}.-translate-x-1{--transform-translate-x:-0.25rem}.-translate-x-2{--transform-translate-x:-0.5rem}.-translate-x-3{--transform-translate-x:-0.75rem}.-translate-x-4{--transform-translate-x:-1rem}.-translate-x-5{--transform-translate-x:-1.25rem}.-translate-x-6{--transform-translate-x:-1.5rem}.-translate-x-8{--transform-translate-x:-2rem}.-translate-x-10{--transform-translate-x:-2.5rem}.-translate-x-12{--transform-translate-x:-3rem}.-translate-x-16{--transform-translate-x:-4rem}.-translate-x-20{--transform-translate-x:-5rem}.-translate-x-24{--transform-translate-x:-6rem}.-translate-x-32{--transform-translate-x:-8rem}.-translate-x-40{--transform-translate-x:-10rem}.-translate-x-48{--transform-translate-x:-12rem}.-translate-x-56{--transform-translate-x:-14rem}.-translate-x-64{--transform-translate-x:-16rem}.-translate-x-px{--transform-translate-x:-1px}.-translate-x-full{--transform-translate-x:-100%}.-translate-x-1\/2{--transform-translate-x:-50%}.translate-x-1\/2{--transform-translate-x:50%}.translate-x-full{--transform-translate-x:100%}.translate-y-0{--transform-translate-y:0}.translate-y-1{--transform-translate-y:0.25rem}.translate-y-2{--transform-translate-y:0.5rem}.translate-y-3{--transform-translate-y:0.75rem}.translate-y-4{--transform-translate-y:1rem}.translate-y-5{--transform-translate-y:1.25rem}.translate-y-6{--transform-translate-y:1.5rem}.translate-y-8{--transform-translate-y:2rem}.translate-y-10{--transform-translate-y:2.5rem}.translate-y-12{--transform-translate-y:3rem}.translate-y-16{--transform-translate-y:4rem}.translate-y-20{--transform-translate-y:5rem}.translate-y-24{--transform-translate-y:6rem}.translate-y-32{--transform-translate-y:8rem}.translate-y-40{--transform-translate-y:10rem}.translate-y-48{--transform-translate-y:12rem}.translate-y-56{--transform-translate-y:14rem}.translate-y-64{--transform-translate-y:16rem}.translate-y-px{--transform-translate-y:1px}.-translate-y-1{--transform-translate-y:-0.25rem}.-translate-y-2{--transform-translate-y:-0.5rem}.-translate-y-3{--transform-translate-y:-0.75rem}.-translate-y-4{--transform-translate-y:-1rem}.-translate-y-5{--transform-translate-y:-1.25rem}.-translate-y-6{--transform-translate-y:-1.5rem}.-translate-y-8{--transform-translate-y:-2rem}.-translate-y-10{--transform-translate-y:-2.5rem}.-translate-y-12{--transform-translate-y:-3rem}.-translate-y-16{--transform-translate-y:-4rem}.-translate-y-20{--transform-translate-y:-5rem}.-translate-y-24{--transform-translate-y:-6rem}.-translate-y-32{--transform-translate-y:-8rem}.-translate-y-40{--transform-translate-y:-10rem}.-translate-y-48{--transform-translate-y:-12rem}.-translate-y-56{--transform-translate-y:-14rem}.-translate-y-64{--transform-translate-y:-16rem}.-translate-y-px{--transform-translate-y:-1px}.-translate-y-full{--transform-translate-y:-100%}.-translate-y-1\/2{--transform-translate-y:-50%}.translate-y-1\/2{--transform-translate-y:50%}.translate-y-full{--transform-translate-y:100%}.hover\:translate-x-0:hover{--transform-translate-x:0}.hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.hover\:translate-x-4:hover{--transform-translate-x:1rem}.hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.hover\:translate-x-8:hover{--transform-translate-x:2rem}.hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.hover\:translate-x-12:hover{--transform-translate-x:3rem}.hover\:translate-x-16:hover{--transform-translate-x:4rem}.hover\:translate-x-20:hover{--transform-translate-x:5rem}.hover\:translate-x-24:hover{--transform-translate-x:6rem}.hover\:translate-x-32:hover{--transform-translate-x:8rem}.hover\:translate-x-40:hover{--transform-translate-x:10rem}.hover\:translate-x-48:hover{--transform-translate-x:12rem}.hover\:translate-x-56:hover{--transform-translate-x:14rem}.hover\:translate-x-64:hover{--transform-translate-x:16rem}.hover\:translate-x-px:hover{--transform-translate-x:1px}.hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.hover\:-translate-x-px:hover{--transform-translate-x:-1px}.hover\:-translate-x-full:hover{--transform-translate-x:-100%}.hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.hover\:translate-x-full:hover{--transform-translate-x:100%}.hover\:translate-y-0:hover{--transform-translate-y:0}.hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.hover\:translate-y-4:hover{--transform-translate-y:1rem}.hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.hover\:translate-y-8:hover{--transform-translate-y:2rem}.hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.hover\:translate-y-12:hover{--transform-translate-y:3rem}.hover\:translate-y-16:hover{--transform-translate-y:4rem}.hover\:translate-y-20:hover{--transform-translate-y:5rem}.hover\:translate-y-24:hover{--transform-translate-y:6rem}.hover\:translate-y-32:hover{--transform-translate-y:8rem}.hover\:translate-y-40:hover{--transform-translate-y:10rem}.hover\:translate-y-48:hover{--transform-translate-y:12rem}.hover\:translate-y-56:hover{--transform-translate-y:14rem}.hover\:translate-y-64:hover{--transform-translate-y:16rem}.hover\:translate-y-px:hover{--transform-translate-y:1px}.hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.hover\:-translate-y-px:hover{--transform-translate-y:-1px}.hover\:-translate-y-full:hover{--transform-translate-y:-100%}.hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.hover\:translate-y-full:hover{--transform-translate-y:100%}.focus\:translate-x-0:focus{--transform-translate-x:0}.focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.focus\:translate-x-4:focus{--transform-translate-x:1rem}.focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.focus\:translate-x-8:focus{--transform-translate-x:2rem}.focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.focus\:translate-x-12:focus{--transform-translate-x:3rem}.focus\:translate-x-16:focus{--transform-translate-x:4rem}.focus\:translate-x-20:focus{--transform-translate-x:5rem}.focus\:translate-x-24:focus{--transform-translate-x:6rem}.focus\:translate-x-32:focus{--transform-translate-x:8rem}.focus\:translate-x-40:focus{--transform-translate-x:10rem}.focus\:translate-x-48:focus{--transform-translate-x:12rem}.focus\:translate-x-56:focus{--transform-translate-x:14rem}.focus\:translate-x-64:focus{--transform-translate-x:16rem}.focus\:translate-x-px:focus{--transform-translate-x:1px}.focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.focus\:-translate-x-px:focus{--transform-translate-x:-1px}.focus\:-translate-x-full:focus{--transform-translate-x:-100%}.focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.focus\:translate-x-full:focus{--transform-translate-x:100%}.focus\:translate-y-0:focus{--transform-translate-y:0}.focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.focus\:translate-y-4:focus{--transform-translate-y:1rem}.focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.focus\:translate-y-8:focus{--transform-translate-y:2rem}.focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.focus\:translate-y-12:focus{--transform-translate-y:3rem}.focus\:translate-y-16:focus{--transform-translate-y:4rem}.focus\:translate-y-20:focus{--transform-translate-y:5rem}.focus\:translate-y-24:focus{--transform-translate-y:6rem}.focus\:translate-y-32:focus{--transform-translate-y:8rem}.focus\:translate-y-40:focus{--transform-translate-y:10rem}.focus\:translate-y-48:focus{--transform-translate-y:12rem}.focus\:translate-y-56:focus{--transform-translate-y:14rem}.focus\:translate-y-64:focus{--transform-translate-y:16rem}.focus\:translate-y-px:focus{--transform-translate-y:1px}.focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.focus\:-translate-y-px:focus{--transform-translate-y:-1px}.focus\:-translate-y-full:focus{--transform-translate-y:-100%}.focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.focus\:translate-y-full:focus{--transform-translate-y:100%}.skew-x-0{--transform-skew-x:0}.skew-x-1{--transform-skew-x:1deg}.skew-x-2{--transform-skew-x:2deg}.skew-x-3{--transform-skew-x:3deg}.skew-x-6{--transform-skew-x:6deg}.skew-x-12{--transform-skew-x:12deg}.-skew-x-12{--transform-skew-x:-12deg}.-skew-x-6{--transform-skew-x:-6deg}.-skew-x-3{--transform-skew-x:-3deg}.-skew-x-2{--transform-skew-x:-2deg}.-skew-x-1{--transform-skew-x:-1deg}.skew-y-0{--transform-skew-y:0}.skew-y-1{--transform-skew-y:1deg}.skew-y-2{--transform-skew-y:2deg}.skew-y-3{--transform-skew-y:3deg}.skew-y-6{--transform-skew-y:6deg}.skew-y-12{--transform-skew-y:12deg}.-skew-y-12{--transform-skew-y:-12deg}.-skew-y-6{--transform-skew-y:-6deg}.-skew-y-3{--transform-skew-y:-3deg}.-skew-y-2{--transform-skew-y:-2deg}.-skew-y-1{--transform-skew-y:-1deg}.hover\:skew-x-0:hover{--transform-skew-x:0}.hover\:skew-x-1:hover{--transform-skew-x:1deg}.hover\:skew-x-2:hover{--transform-skew-x:2deg}.hover\:skew-x-3:hover{--transform-skew-x:3deg}.hover\:skew-x-6:hover{--transform-skew-x:6deg}.hover\:skew-x-12:hover{--transform-skew-x:12deg}.hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.hover\:skew-y-0:hover{--transform-skew-y:0}.hover\:skew-y-1:hover{--transform-skew-y:1deg}.hover\:skew-y-2:hover{--transform-skew-y:2deg}.hover\:skew-y-3:hover{--transform-skew-y:3deg}.hover\:skew-y-6:hover{--transform-skew-y:6deg}.hover\:skew-y-12:hover{--transform-skew-y:12deg}.hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.focus\:skew-x-0:focus{--transform-skew-x:0}.focus\:skew-x-1:focus{--transform-skew-x:1deg}.focus\:skew-x-2:focus{--transform-skew-x:2deg}.focus\:skew-x-3:focus{--transform-skew-x:3deg}.focus\:skew-x-6:focus{--transform-skew-x:6deg}.focus\:skew-x-12:focus{--transform-skew-x:12deg}.focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.focus\:skew-y-0:focus{--transform-skew-y:0}.focus\:skew-y-1:focus{--transform-skew-y:1deg}.focus\:skew-y-2:focus{--transform-skew-y:2deg}.focus\:skew-y-3:focus{--transform-skew-y:3deg}.focus\:skew-y-6:focus{--transform-skew-y:6deg}.focus\:skew-y-12:focus{--transform-skew-y:12deg}.focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.transition-none{transition-property:none}.transition-all{transition-property:all}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.transition-colors{transition-property:background-color,border-color,color,fill,stroke}.transition-opacity{transition-property:opacity}.transition-shadow{transition-property:box-shadow}.transition-transform{transition-property:transform}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:150ms}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-1000{transition-duration:1s}.delay-75{transition-delay:75ms}.delay-100{transition-delay:.1s}.delay-150{transition-delay:150ms}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-700{transition-delay:.7s}.delay-1000{transition-delay:1s}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{100%,75%{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-none{animation:none}.animate-spin{animation:spin 1s linear infinite}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-bounce{animation:bounce 1s infinite}@media (min-width:640px){.sm\:container{width:100%}@media (min-width:640px){.sm\:container{max-width:640px}}@media (min-width:768px){.sm\:container{max-width:768px}}@media (min-width:1024px){.sm\:container{max-width:1024px}}@media (min-width:1280px){.sm\:container{max-width:1280px}}.sm\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.sm\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.sm\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.sm\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.sm\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.sm\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.sm\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.sm\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.sm\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.sm\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.sm\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.sm\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.sm\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.sm\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.sm\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.sm\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.sm\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.sm\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.sm\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.sm\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.sm\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.sm\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.sm\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.sm\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.sm\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.sm\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.sm\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.sm\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.sm\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.sm\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.sm\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.sm\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.sm\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.sm\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.sm\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.sm\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.sm\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.sm\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.sm\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.sm\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.sm\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.sm\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.sm\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.sm\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.sm\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.sm\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.sm\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.sm\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.sm\:divide-transparent>:not(template)~:not(template){border-color:transparent}.sm\:divide-current>:not(template)~:not(template){border-color:currentColor}.sm\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.sm\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.sm\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.sm\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.sm\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.sm\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.sm\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.sm\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.sm\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.sm\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.sm\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.sm\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.sm\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.sm\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.sm\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.sm\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.sm\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.sm\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.sm\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.sm\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.sm\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.sm\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.sm\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.sm\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.sm\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.sm\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.sm\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.sm\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.sm\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.sm\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.sm\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.sm\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.sm\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.sm\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.sm\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.sm\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.sm\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.sm\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.sm\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.sm\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.sm\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.sm\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.sm\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.sm\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.sm\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.sm\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.sm\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.sm\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.sm\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.sm\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.sm\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.sm\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.sm\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.sm\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.sm\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.sm\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.sm\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.sm\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.sm\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.sm\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.sm\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.sm\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.sm\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.sm\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.sm\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.sm\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.sm\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.sm\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.sm\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.sm\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.sm\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.sm\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.sm\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.sm\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.sm\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.sm\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.sm\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.sm\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.sm\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.sm\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.sm\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.sm\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.sm\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.sm\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.sm\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.sm\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.sm\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.sm\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.sm\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.sm\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.sm\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.sm\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.sm\:divide-solid>:not(template)~:not(template){border-style:solid}.sm\:divide-dashed>:not(template)~:not(template){border-style:dashed}.sm\:divide-dotted>:not(template)~:not(template){border-style:dotted}.sm\:divide-double>:not(template)~:not(template){border-style:double}.sm\:divide-none>:not(template)~:not(template){border-style:none}.sm\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.sm\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.sm\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.sm\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.sm\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.sm\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sm\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sm\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sm\:bg-fixed{background-attachment:fixed}.sm\:bg-local{background-attachment:local}.sm\:bg-scroll{background-attachment:scroll}.sm\:bg-clip-border{background-clip:border-box}.sm\:bg-clip-padding{background-clip:padding-box}.sm\:bg-clip-content{background-clip:content-box}.sm\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.sm\:bg-transparent{background-color:transparent}.sm\:bg-current{background-color:currentColor}.sm\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.sm\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.sm\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.sm\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.sm\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.sm\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.sm\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.sm\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.sm\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.sm\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.sm\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.sm\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.sm\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.sm\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.sm\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.sm\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.sm\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.sm\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.sm\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.sm\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.sm\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.sm\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.sm\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.sm\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.sm\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.sm\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.sm\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.sm\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.sm\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.sm\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.sm\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.sm\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.sm\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.sm\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.sm\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.sm\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.sm\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.sm\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.sm\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.sm\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.sm\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.sm\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.sm\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.sm\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.sm\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.sm\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.sm\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.sm\:hover\:bg-transparent:hover{background-color:transparent}.sm\:hover\:bg-current:hover{background-color:currentColor}.sm\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.sm\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.sm\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.sm\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.sm\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.sm\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.sm\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.sm\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.sm\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.sm\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.sm\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.sm\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.sm\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.sm\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.sm\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.sm\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.sm\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.sm\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.sm\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.sm\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.sm\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.sm\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.sm\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.sm\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.sm\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.sm\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.sm\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.sm\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.sm\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.sm\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.sm\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.sm\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.sm\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.sm\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.sm\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.sm\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.sm\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.sm\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.sm\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.sm\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.sm\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.sm\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.sm\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.sm\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.sm\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.sm\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.sm\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.sm\:focus\:bg-transparent:focus{background-color:transparent}.sm\:focus\:bg-current:focus{background-color:currentColor}.sm\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.sm\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.sm\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.sm\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.sm\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.sm\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.sm\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.sm\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.sm\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.sm\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.sm\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.sm\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.sm\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.sm\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.sm\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.sm\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.sm\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.sm\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.sm\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.sm\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.sm\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.sm\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.sm\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.sm\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.sm\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.sm\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.sm\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.sm\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.sm\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.sm\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.sm\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.sm\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.sm\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.sm\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.sm\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.sm\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.sm\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.sm\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.sm\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.sm\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.sm\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.sm\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.sm\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.sm\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.sm\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.sm\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.sm\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.sm\:bg-none{background-image:none}.sm\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.sm\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.sm\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.sm\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.sm\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.sm\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.sm\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.sm\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.sm\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:to-transparent{--gradient-to-color:transparent}.sm\:to-current{--gradient-to-color:currentColor}.sm\:to-black{--gradient-to-color:#000}.sm\:to-white{--gradient-to-color:#fff}.sm\:to-gray-100{--gradient-to-color:#f7fafc}.sm\:to-gray-200{--gradient-to-color:#edf2f7}.sm\:to-gray-300{--gradient-to-color:#e2e8f0}.sm\:to-gray-400{--gradient-to-color:#cbd5e0}.sm\:to-gray-500{--gradient-to-color:#a0aec0}.sm\:to-gray-600{--gradient-to-color:#718096}.sm\:to-gray-700{--gradient-to-color:#4a5568}.sm\:to-gray-800{--gradient-to-color:#2d3748}.sm\:to-gray-900{--gradient-to-color:#1a202c}.sm\:to-red-100{--gradient-to-color:#fff5f5}.sm\:to-red-200{--gradient-to-color:#fed7d7}.sm\:to-red-300{--gradient-to-color:#feb2b2}.sm\:to-red-400{--gradient-to-color:#fc8181}.sm\:to-red-500{--gradient-to-color:#f56565}.sm\:to-red-600{--gradient-to-color:#e53e3e}.sm\:to-red-700{--gradient-to-color:#c53030}.sm\:to-red-800{--gradient-to-color:#9b2c2c}.sm\:to-red-900{--gradient-to-color:#742a2a}.sm\:to-orange-100{--gradient-to-color:#fffaf0}.sm\:to-orange-200{--gradient-to-color:#feebc8}.sm\:to-orange-300{--gradient-to-color:#fbd38d}.sm\:to-orange-400{--gradient-to-color:#f6ad55}.sm\:to-orange-500{--gradient-to-color:#ed8936}.sm\:to-orange-600{--gradient-to-color:#dd6b20}.sm\:to-orange-700{--gradient-to-color:#c05621}.sm\:to-orange-800{--gradient-to-color:#9c4221}.sm\:to-orange-900{--gradient-to-color:#7b341e}.sm\:to-yellow-100{--gradient-to-color:#fffff0}.sm\:to-yellow-200{--gradient-to-color:#fefcbf}.sm\:to-yellow-300{--gradient-to-color:#faf089}.sm\:to-yellow-400{--gradient-to-color:#f6e05e}.sm\:to-yellow-500{--gradient-to-color:#ecc94b}.sm\:to-yellow-600{--gradient-to-color:#d69e2e}.sm\:to-yellow-700{--gradient-to-color:#b7791f}.sm\:to-yellow-800{--gradient-to-color:#975a16}.sm\:to-yellow-900{--gradient-to-color:#744210}.sm\:to-green-100{--gradient-to-color:#f0fff4}.sm\:to-green-200{--gradient-to-color:#c6f6d5}.sm\:to-green-300{--gradient-to-color:#9ae6b4}.sm\:to-green-400{--gradient-to-color:#68d391}.sm\:to-green-500{--gradient-to-color:#48bb78}.sm\:to-green-600{--gradient-to-color:#38a169}.sm\:to-green-700{--gradient-to-color:#2f855a}.sm\:to-green-800{--gradient-to-color:#276749}.sm\:to-green-900{--gradient-to-color:#22543d}.sm\:to-teal-100{--gradient-to-color:#e6fffa}.sm\:to-teal-200{--gradient-to-color:#b2f5ea}.sm\:to-teal-300{--gradient-to-color:#81e6d9}.sm\:to-teal-400{--gradient-to-color:#4fd1c5}.sm\:to-teal-500{--gradient-to-color:#38b2ac}.sm\:to-teal-600{--gradient-to-color:#319795}.sm\:to-teal-700{--gradient-to-color:#2c7a7b}.sm\:to-teal-800{--gradient-to-color:#285e61}.sm\:to-teal-900{--gradient-to-color:#234e52}.sm\:to-blue-100{--gradient-to-color:#ebf8ff}.sm\:to-blue-200{--gradient-to-color:#bee3f8}.sm\:to-blue-300{--gradient-to-color:#90cdf4}.sm\:to-blue-400{--gradient-to-color:#63b3ed}.sm\:to-blue-500{--gradient-to-color:#4299e1}.sm\:to-blue-600{--gradient-to-color:#3182ce}.sm\:to-blue-700{--gradient-to-color:#2b6cb0}.sm\:to-blue-800{--gradient-to-color:#2c5282}.sm\:to-blue-900{--gradient-to-color:#2a4365}.sm\:to-indigo-100{--gradient-to-color:#ebf4ff}.sm\:to-indigo-200{--gradient-to-color:#c3dafe}.sm\:to-indigo-300{--gradient-to-color:#a3bffa}.sm\:to-indigo-400{--gradient-to-color:#7f9cf5}.sm\:to-indigo-500{--gradient-to-color:#667eea}.sm\:to-indigo-600{--gradient-to-color:#5a67d8}.sm\:to-indigo-700{--gradient-to-color:#4c51bf}.sm\:to-indigo-800{--gradient-to-color:#434190}.sm\:to-indigo-900{--gradient-to-color:#3c366b}.sm\:to-purple-100{--gradient-to-color:#faf5ff}.sm\:to-purple-200{--gradient-to-color:#e9d8fd}.sm\:to-purple-300{--gradient-to-color:#d6bcfa}.sm\:to-purple-400{--gradient-to-color:#b794f4}.sm\:to-purple-500{--gradient-to-color:#9f7aea}.sm\:to-purple-600{--gradient-to-color:#805ad5}.sm\:to-purple-700{--gradient-to-color:#6b46c1}.sm\:to-purple-800{--gradient-to-color:#553c9a}.sm\:to-purple-900{--gradient-to-color:#44337a}.sm\:to-pink-100{--gradient-to-color:#fff5f7}.sm\:to-pink-200{--gradient-to-color:#fed7e2}.sm\:to-pink-300{--gradient-to-color:#fbb6ce}.sm\:to-pink-400{--gradient-to-color:#f687b3}.sm\:to-pink-500{--gradient-to-color:#ed64a6}.sm\:to-pink-600{--gradient-to-color:#d53f8c}.sm\:to-pink-700{--gradient-to-color:#b83280}.sm\:to-pink-800{--gradient-to-color:#97266d}.sm\:to-pink-900{--gradient-to-color:#702459}.sm\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:hover\:to-transparent:hover{--gradient-to-color:transparent}.sm\:hover\:to-current:hover{--gradient-to-color:currentColor}.sm\:hover\:to-black:hover{--gradient-to-color:#000}.sm\:hover\:to-white:hover{--gradient-to-color:#fff}.sm\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.sm\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.sm\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.sm\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.sm\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.sm\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.sm\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.sm\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.sm\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.sm\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.sm\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.sm\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.sm\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.sm\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.sm\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.sm\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.sm\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.sm\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.sm\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.sm\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.sm\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.sm\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.sm\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.sm\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.sm\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.sm\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.sm\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.sm\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.sm\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.sm\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.sm\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.sm\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.sm\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.sm\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.sm\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.sm\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.sm\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.sm\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.sm\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.sm\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.sm\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.sm\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.sm\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.sm\:hover\:to-green-800:hover{--gradient-to-color:#276749}.sm\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.sm\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.sm\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.sm\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.sm\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.sm\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.sm\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.sm\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.sm\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.sm\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.sm\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.sm\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.sm\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.sm\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.sm\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.sm\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.sm\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.sm\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.sm\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.sm\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.sm\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.sm\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.sm\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.sm\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.sm\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.sm\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.sm\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.sm\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.sm\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.sm\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.sm\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.sm\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.sm\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.sm\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.sm\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.sm\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.sm\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.sm\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.sm\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.sm\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.sm\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.sm\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.sm\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.sm\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.sm\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.sm\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.sm\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:focus\:to-transparent:focus{--gradient-to-color:transparent}.sm\:focus\:to-current:focus{--gradient-to-color:currentColor}.sm\:focus\:to-black:focus{--gradient-to-color:#000}.sm\:focus\:to-white:focus{--gradient-to-color:#fff}.sm\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.sm\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.sm\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.sm\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.sm\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.sm\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.sm\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.sm\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.sm\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.sm\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.sm\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.sm\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.sm\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.sm\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.sm\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.sm\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.sm\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.sm\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.sm\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.sm\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.sm\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.sm\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.sm\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.sm\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.sm\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.sm\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.sm\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.sm\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.sm\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.sm\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.sm\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.sm\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.sm\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.sm\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.sm\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.sm\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.sm\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.sm\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.sm\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.sm\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.sm\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.sm\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.sm\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.sm\:focus\:to-green-800:focus{--gradient-to-color:#276749}.sm\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.sm\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.sm\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.sm\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.sm\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.sm\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.sm\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.sm\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.sm\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.sm\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.sm\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.sm\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.sm\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.sm\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.sm\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.sm\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.sm\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.sm\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.sm\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.sm\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.sm\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.sm\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.sm\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.sm\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.sm\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.sm\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.sm\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.sm\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.sm\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.sm\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.sm\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.sm\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.sm\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.sm\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.sm\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.sm\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.sm\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.sm\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.sm\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.sm\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.sm\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.sm\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.sm\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.sm\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.sm\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.sm\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.sm\:bg-opacity-0{--bg-opacity:0}.sm\:bg-opacity-25{--bg-opacity:0.25}.sm\:bg-opacity-50{--bg-opacity:0.5}.sm\:bg-opacity-75{--bg-opacity:0.75}.sm\:bg-opacity-100{--bg-opacity:1}.sm\:hover\:bg-opacity-0:hover{--bg-opacity:0}.sm\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.sm\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.sm\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.sm\:hover\:bg-opacity-100:hover{--bg-opacity:1}.sm\:focus\:bg-opacity-0:focus{--bg-opacity:0}.sm\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.sm\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.sm\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.sm\:focus\:bg-opacity-100:focus{--bg-opacity:1}.sm\:bg-bottom{background-position:bottom}.sm\:bg-center{background-position:center}.sm\:bg-left{background-position:left}.sm\:bg-left-bottom{background-position:left bottom}.sm\:bg-left-top{background-position:left top}.sm\:bg-right{background-position:right}.sm\:bg-right-bottom{background-position:right bottom}.sm\:bg-right-top{background-position:right top}.sm\:bg-top{background-position:top}.sm\:bg-repeat{background-repeat:repeat}.sm\:bg-no-repeat{background-repeat:no-repeat}.sm\:bg-repeat-x{background-repeat:repeat-x}.sm\:bg-repeat-y{background-repeat:repeat-y}.sm\:bg-repeat-round{background-repeat:round}.sm\:bg-repeat-space{background-repeat:space}.sm\:bg-auto{background-size:auto}.sm\:bg-cover{background-size:cover}.sm\:bg-contain{background-size:contain}.sm\:border-collapse{border-collapse:collapse}.sm\:border-separate{border-collapse:separate}.sm\:border-transparent{border-color:transparent}.sm\:border-current{border-color:currentColor}.sm\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.sm\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.sm\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.sm\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.sm\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.sm\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.sm\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.sm\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.sm\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.sm\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.sm\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.sm\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.sm\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.sm\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.sm\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.sm\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.sm\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.sm\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.sm\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.sm\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.sm\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.sm\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.sm\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.sm\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.sm\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.sm\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.sm\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.sm\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.sm\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.sm\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.sm\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.sm\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.sm\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.sm\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.sm\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.sm\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.sm\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.sm\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.sm\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.sm\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.sm\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.sm\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.sm\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.sm\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.sm\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.sm\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.sm\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.sm\:hover\:border-transparent:hover{border-color:transparent}.sm\:hover\:border-current:hover{border-color:currentColor}.sm\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.sm\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.sm\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.sm\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.sm\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.sm\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.sm\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.sm\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.sm\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.sm\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.sm\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.sm\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.sm\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.sm\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.sm\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.sm\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.sm\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.sm\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.sm\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.sm\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.sm\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.sm\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.sm\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.sm\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.sm\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.sm\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.sm\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.sm\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.sm\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.sm\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.sm\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.sm\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.sm\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.sm\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.sm\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.sm\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.sm\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.sm\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.sm\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.sm\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.sm\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.sm\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.sm\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.sm\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.sm\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.sm\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.sm\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.sm\:focus\:border-transparent:focus{border-color:transparent}.sm\:focus\:border-current:focus{border-color:currentColor}.sm\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.sm\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.sm\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.sm\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.sm\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.sm\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.sm\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.sm\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.sm\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.sm\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.sm\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.sm\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.sm\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.sm\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.sm\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.sm\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.sm\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.sm\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.sm\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.sm\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.sm\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.sm\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.sm\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.sm\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.sm\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.sm\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.sm\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.sm\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.sm\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.sm\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.sm\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.sm\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.sm\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.sm\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.sm\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.sm\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.sm\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.sm\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.sm\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.sm\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.sm\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.sm\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.sm\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.sm\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.sm\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.sm\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.sm\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.sm\:border-opacity-0{--border-opacity:0}.sm\:border-opacity-25{--border-opacity:0.25}.sm\:border-opacity-50{--border-opacity:0.5}.sm\:border-opacity-75{--border-opacity:0.75}.sm\:border-opacity-100{--border-opacity:1}.sm\:hover\:border-opacity-0:hover{--border-opacity:0}.sm\:hover\:border-opacity-25:hover{--border-opacity:0.25}.sm\:hover\:border-opacity-50:hover{--border-opacity:0.5}.sm\:hover\:border-opacity-75:hover{--border-opacity:0.75}.sm\:hover\:border-opacity-100:hover{--border-opacity:1}.sm\:focus\:border-opacity-0:focus{--border-opacity:0}.sm\:focus\:border-opacity-25:focus{--border-opacity:0.25}.sm\:focus\:border-opacity-50:focus{--border-opacity:0.5}.sm\:focus\:border-opacity-75:focus{--border-opacity:0.75}.sm\:focus\:border-opacity-100:focus{--border-opacity:1}.sm\:rounded-none{border-radius:0}.sm\:rounded-sm{border-radius:.125rem}.sm\:rounded{border-radius:.25rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-3xl{border-radius:1.5rem}.sm\:rounded-full{border-radius:9999px}.sm\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.sm\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sm\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.sm\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sm\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.sm\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.sm\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.sm\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.sm\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.sm\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.sm\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.sm\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.sm\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.sm\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.sm\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.sm\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.sm\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.sm\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.sm\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.sm\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.sm\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.sm\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.sm\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.sm\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.sm\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.sm\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.sm\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.sm\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.sm\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.sm\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.sm\:rounded-tl-none{border-top-left-radius:0}.sm\:rounded-tr-none{border-top-right-radius:0}.sm\:rounded-br-none{border-bottom-right-radius:0}.sm\:rounded-bl-none{border-bottom-left-radius:0}.sm\:rounded-tl-sm{border-top-left-radius:.125rem}.sm\:rounded-tr-sm{border-top-right-radius:.125rem}.sm\:rounded-br-sm{border-bottom-right-radius:.125rem}.sm\:rounded-bl-sm{border-bottom-left-radius:.125rem}.sm\:rounded-tl{border-top-left-radius:.25rem}.sm\:rounded-tr{border-top-right-radius:.25rem}.sm\:rounded-br{border-bottom-right-radius:.25rem}.sm\:rounded-bl{border-bottom-left-radius:.25rem}.sm\:rounded-tl-md{border-top-left-radius:.375rem}.sm\:rounded-tr-md{border-top-right-radius:.375rem}.sm\:rounded-br-md{border-bottom-right-radius:.375rem}.sm\:rounded-bl-md{border-bottom-left-radius:.375rem}.sm\:rounded-tl-lg{border-top-left-radius:.5rem}.sm\:rounded-tr-lg{border-top-right-radius:.5rem}.sm\:rounded-br-lg{border-bottom-right-radius:.5rem}.sm\:rounded-bl-lg{border-bottom-left-radius:.5rem}.sm\:rounded-tl-xl{border-top-left-radius:.75rem}.sm\:rounded-tr-xl{border-top-right-radius:.75rem}.sm\:rounded-br-xl{border-bottom-right-radius:.75rem}.sm\:rounded-bl-xl{border-bottom-left-radius:.75rem}.sm\:rounded-tl-2xl{border-top-left-radius:1rem}.sm\:rounded-tr-2xl{border-top-right-radius:1rem}.sm\:rounded-br-2xl{border-bottom-right-radius:1rem}.sm\:rounded-bl-2xl{border-bottom-left-radius:1rem}.sm\:rounded-tl-3xl{border-top-left-radius:1.5rem}.sm\:rounded-tr-3xl{border-top-right-radius:1.5rem}.sm\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.sm\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.sm\:rounded-tl-full{border-top-left-radius:9999px}.sm\:rounded-tr-full{border-top-right-radius:9999px}.sm\:rounded-br-full{border-bottom-right-radius:9999px}.sm\:rounded-bl-full{border-bottom-left-radius:9999px}.sm\:border-solid{border-style:solid}.sm\:border-dashed{border-style:dashed}.sm\:border-dotted{border-style:dotted}.sm\:border-double{border-style:double}.sm\:border-none{border-style:none}.sm\:border-0{border-width:0}.sm\:border-2{border-width:2px}.sm\:border-4{border-width:4px}.sm\:border-8{border-width:8px}.sm\:border{border-width:1px}.sm\:border-t-0{border-top-width:0}.sm\:border-r-0{border-right-width:0}.sm\:border-b-0{border-bottom-width:0}.sm\:border-l-0{border-left-width:0}.sm\:border-t-2{border-top-width:2px}.sm\:border-r-2{border-right-width:2px}.sm\:border-b-2{border-bottom-width:2px}.sm\:border-l-2{border-left-width:2px}.sm\:border-t-4{border-top-width:4px}.sm\:border-r-4{border-right-width:4px}.sm\:border-b-4{border-bottom-width:4px}.sm\:border-l-4{border-left-width:4px}.sm\:border-t-8{border-top-width:8px}.sm\:border-r-8{border-right-width:8px}.sm\:border-b-8{border-bottom-width:8px}.sm\:border-l-8{border-left-width:8px}.sm\:border-t{border-top-width:1px}.sm\:border-r{border-right-width:1px}.sm\:border-b{border-bottom-width:1px}.sm\:border-l{border-left-width:1px}.sm\:box-border{box-sizing:border-box}.sm\:box-content{box-sizing:content-box}.sm\:cursor-auto{cursor:auto}.sm\:cursor-default{cursor:default}.sm\:cursor-pointer{cursor:pointer}.sm\:cursor-wait{cursor:wait}.sm\:cursor-text{cursor:text}.sm\:cursor-move{cursor:move}.sm\:cursor-not-allowed{cursor:not-allowed}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:table{display:table}.sm\:table-caption{display:table-caption}.sm\:table-cell{display:table-cell}.sm\:table-column{display:table-column}.sm\:table-column-group{display:table-column-group}.sm\:table-footer-group{display:table-footer-group}.sm\:table-header-group{display:table-header-group}.sm\:table-row-group{display:table-row-group}.sm\:table-row{display:table-row}.sm\:flow-root{display:flow-root}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:contents{display:contents}.sm\:hidden{display:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-col{flex-direction:column}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-wrap-reverse{flex-wrap:wrap-reverse}.sm\:flex-no-wrap{flex-wrap:nowrap}.sm\:place-items-auto{place-items:auto}.sm\:place-items-start{place-items:start}.sm\:place-items-end{place-items:end}.sm\:place-items-center{place-items:center}.sm\:place-items-stretch{place-items:stretch}.sm\:place-content-center{place-content:center}.sm\:place-content-start{place-content:start}.sm\:place-content-end{place-content:end}.sm\:place-content-between{place-content:space-between}.sm\:place-content-around{place-content:space-around}.sm\:place-content-evenly{place-content:space-evenly}.sm\:place-content-stretch{place-content:stretch}.sm\:place-self-auto{place-self:auto}.sm\:place-self-start{place-self:start}.sm\:place-self-end{place-self:end}.sm\:place-self-center{place-self:center}.sm\:place-self-stretch{place-self:stretch}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:items-baseline{align-items:baseline}.sm\:items-stretch{align-items:stretch}.sm\:content-center{align-content:center}.sm\:content-start{align-content:flex-start}.sm\:content-end{align-content:flex-end}.sm\:content-between{align-content:space-between}.sm\:content-around{align-content:space-around}.sm\:content-evenly{align-content:space-evenly}.sm\:self-auto{align-self:auto}.sm\:self-start{align-self:flex-start}.sm\:self-end{align-self:flex-end}.sm\:self-center{align-self:center}.sm\:self-stretch{align-self:stretch}.sm\:justify-items-auto{justify-items:auto}.sm\:justify-items-start{justify-items:start}.sm\:justify-items-end{justify-items:end}.sm\:justify-items-center{justify-items:center}.sm\:justify-items-stretch{justify-items:stretch}.sm\:justify-start{justify-content:flex-start}.sm\:justify-end{justify-content:flex-end}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-around{justify-content:space-around}.sm\:justify-evenly{justify-content:space-evenly}.sm\:justify-self-auto{justify-self:auto}.sm\:justify-self-start{justify-self:start}.sm\:justify-self-end{justify-self:end}.sm\:justify-self-center{justify-self:center}.sm\:justify-self-stretch{justify-self:stretch}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-initial{flex:0 1 auto}.sm\:flex-none{flex:none}.sm\:flex-grow-0{flex-grow:0}.sm\:flex-grow{flex-grow:1}.sm\:flex-shrink-0{flex-shrink:0}.sm\:flex-shrink{flex-shrink:1}.sm\:order-1{order:1}.sm\:order-2{order:2}.sm\:order-3{order:3}.sm\:order-4{order:4}.sm\:order-5{order:5}.sm\:order-6{order:6}.sm\:order-7{order:7}.sm\:order-8{order:8}.sm\:order-9{order:9}.sm\:order-10{order:10}.sm\:order-11{order:11}.sm\:order-12{order:12}.sm\:order-first{order:-9999}.sm\:order-last{order:9999}.sm\:order-none{order:0}.sm\:float-right{float:right}.sm\:float-left{float:left}.sm\:float-none{float:none}.sm\:clearfix:after{content:"";display:table;clear:both}.sm\:clear-left{clear:left}.sm\:clear-right{clear:right}.sm\:clear-both{clear:both}.sm\:clear-none{clear:none}.sm\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.sm\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.sm\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.sm\:font-hairline{font-weight:100}.sm\:font-thin{font-weight:200}.sm\:font-light{font-weight:300}.sm\:font-normal{font-weight:400}.sm\:font-medium{font-weight:500}.sm\:font-semibold{font-weight:600}.sm\:font-bold{font-weight:700}.sm\:font-extrabold{font-weight:800}.sm\:font-black{font-weight:900}.sm\:hover\:font-hairline:hover{font-weight:100}.sm\:hover\:font-thin:hover{font-weight:200}.sm\:hover\:font-light:hover{font-weight:300}.sm\:hover\:font-normal:hover{font-weight:400}.sm\:hover\:font-medium:hover{font-weight:500}.sm\:hover\:font-semibold:hover{font-weight:600}.sm\:hover\:font-bold:hover{font-weight:700}.sm\:hover\:font-extrabold:hover{font-weight:800}.sm\:hover\:font-black:hover{font-weight:900}.sm\:focus\:font-hairline:focus{font-weight:100}.sm\:focus\:font-thin:focus{font-weight:200}.sm\:focus\:font-light:focus{font-weight:300}.sm\:focus\:font-normal:focus{font-weight:400}.sm\:focus\:font-medium:focus{font-weight:500}.sm\:focus\:font-semibold:focus{font-weight:600}.sm\:focus\:font-bold:focus{font-weight:700}.sm\:focus\:font-extrabold:focus{font-weight:800}.sm\:focus\:font-black:focus{font-weight:900}.sm\:h-0{height:0}.sm\:h-1{height:.25rem}.sm\:h-2{height:.5rem}.sm\:h-3{height:.75rem}.sm\:h-4{height:1rem}.sm\:h-5{height:1.25rem}.sm\:h-6{height:1.5rem}.sm\:h-8{height:2rem}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-16{height:4rem}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-32{height:8rem}.sm\:h-40{height:10rem}.sm\:h-48{height:12rem}.sm\:h-56{height:14rem}.sm\:h-64{height:16rem}.sm\:h-auto{height:auto}.sm\:h-px{height:1px}.sm\:h-full{height:100%}.sm\:h-screen{height:100vh}.sm\:text-xs{font-size:.75rem}.sm\:text-sm{font-size:.875rem}.sm\:text-base{font-size:1rem}.sm\:text-lg{font-size:1.125rem}.sm\:text-xl{font-size:1.25rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:text-4xl{font-size:2.25rem}.sm\:text-5xl{font-size:3rem}.sm\:text-6xl{font-size:4rem}.sm\:leading-3{line-height:.75rem}.sm\:leading-4{line-height:1rem}.sm\:leading-5{line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:leading-7{line-height:1.75rem}.sm\:leading-8{line-height:2rem}.sm\:leading-9{line-height:2.25rem}.sm\:leading-10{line-height:2.5rem}.sm\:leading-none{line-height:1}.sm\:leading-tight{line-height:1.25}.sm\:leading-snug{line-height:1.375}.sm\:leading-normal{line-height:1.5}.sm\:leading-relaxed{line-height:1.625}.sm\:leading-loose{line-height:2}.sm\:list-inside{list-style-position:inside}.sm\:list-outside{list-style-position:outside}.sm\:list-none{list-style-type:none}.sm\:list-disc{list-style-type:disc}.sm\:list-decimal{list-style-type:decimal}.sm\:m-0{margin:0}.sm\:m-1{margin:.25rem}.sm\:m-2{margin:.5rem}.sm\:m-3{margin:.75rem}.sm\:m-4{margin:1rem}.sm\:m-5{margin:1.25rem}.sm\:m-6{margin:1.5rem}.sm\:m-8{margin:2rem}.sm\:m-10{margin:2.5rem}.sm\:m-12{margin:3rem}.sm\:m-16{margin:4rem}.sm\:m-20{margin:5rem}.sm\:m-24{margin:6rem}.sm\:m-32{margin:8rem}.sm\:m-40{margin:10rem}.sm\:m-48{margin:12rem}.sm\:m-56{margin:14rem}.sm\:m-64{margin:16rem}.sm\:m-auto{margin:auto}.sm\:m-px{margin:1px}.sm\:-m-1{margin:-.25rem}.sm\:-m-2{margin:-.5rem}.sm\:-m-3{margin:-.75rem}.sm\:-m-4{margin:-1rem}.sm\:-m-5{margin:-1.25rem}.sm\:-m-6{margin:-1.5rem}.sm\:-m-8{margin:-2rem}.sm\:-m-10{margin:-2.5rem}.sm\:-m-12{margin:-3rem}.sm\:-m-16{margin:-4rem}.sm\:-m-20{margin:-5rem}.sm\:-m-24{margin:-6rem}.sm\:-m-32{margin:-8rem}.sm\:-m-40{margin:-10rem}.sm\:-m-48{margin:-12rem}.sm\:-m-56{margin:-14rem}.sm\:-m-64{margin:-16rem}.sm\:-m-px{margin:-1px}.sm\:my-0{margin-top:0;margin-bottom:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-1{margin-top:.25rem;margin-bottom:.25rem}.sm\:mx-1{margin-left:.25rem;margin-right:.25rem}.sm\:my-2{margin-top:.5rem;margin-bottom:.5rem}.sm\:mx-2{margin-left:.5rem;margin-right:.5rem}.sm\:my-3{margin-top:.75rem;margin-bottom:.75rem}.sm\:mx-3{margin-left:.75rem;margin-right:.75rem}.sm\:my-4{margin-top:1rem;margin-bottom:1rem}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.sm\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.sm\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:mx-8{margin-left:2rem;margin-right:2rem}.sm\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.sm\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.sm\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\:mx-12{margin-left:3rem;margin-right:3rem}.sm\:my-16{margin-top:4rem;margin-bottom:4rem}.sm\:mx-16{margin-left:4rem;margin-right:4rem}.sm\:my-20{margin-top:5rem;margin-bottom:5rem}.sm\:mx-20{margin-left:5rem;margin-right:5rem}.sm\:my-24{margin-top:6rem;margin-bottom:6rem}.sm\:mx-24{margin-left:6rem;margin-right:6rem}.sm\:my-32{margin-top:8rem;margin-bottom:8rem}.sm\:mx-32{margin-left:8rem;margin-right:8rem}.sm\:my-40{margin-top:10rem;margin-bottom:10rem}.sm\:mx-40{margin-left:10rem;margin-right:10rem}.sm\:my-48{margin-top:12rem;margin-bottom:12rem}.sm\:mx-48{margin-left:12rem;margin-right:12rem}.sm\:my-56{margin-top:14rem;margin-bottom:14rem}.sm\:mx-56{margin-left:14rem;margin-right:14rem}.sm\:my-64{margin-top:16rem;margin-bottom:16rem}.sm\:mx-64{margin-left:16rem;margin-right:16rem}.sm\:my-auto{margin-top:auto;margin-bottom:auto}.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:my-px{margin-top:1px;margin-bottom:1px}.sm\:mx-px{margin-left:1px;margin-right:1px}.sm\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.sm\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.sm\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.sm\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.sm\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.sm\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.sm\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.sm\:-mx-4{margin-left:-1rem;margin-right:-1rem}.sm\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.sm\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.sm\:-mx-8{margin-left:-2rem;margin-right:-2rem}.sm\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.sm\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.sm\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.sm\:-mx-12{margin-left:-3rem;margin-right:-3rem}.sm\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.sm\:-mx-16{margin-left:-4rem;margin-right:-4rem}.sm\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.sm\:-mx-20{margin-left:-5rem;margin-right:-5rem}.sm\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.sm\:-mx-24{margin-left:-6rem;margin-right:-6rem}.sm\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.sm\:-mx-32{margin-left:-8rem;margin-right:-8rem}.sm\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.sm\:-mx-40{margin-left:-10rem;margin-right:-10rem}.sm\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.sm\:-mx-48{margin-left:-12rem;margin-right:-12rem}.sm\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.sm\:-mx-56{margin-left:-14rem;margin-right:-14rem}.sm\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.sm\:-mx-64{margin-left:-16rem;margin-right:-16rem}.sm\:-my-px{margin-top:-1px;margin-bottom:-1px}.sm\:-mx-px{margin-left:-1px;margin-right:-1px}.sm\:mt-0{margin-top:0}.sm\:mr-0{margin-right:0}.sm\:mb-0{margin-bottom:0}.sm\:ml-0{margin-left:0}.sm\:mt-1{margin-top:.25rem}.sm\:mr-1{margin-right:.25rem}.sm\:mb-1{margin-bottom:.25rem}.sm\:ml-1{margin-left:.25rem}.sm\:mt-2{margin-top:.5rem}.sm\:mr-2{margin-right:.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:ml-2{margin-left:.5rem}.sm\:mt-3{margin-top:.75rem}.sm\:mr-3{margin-right:.75rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:ml-3{margin-left:.75rem}.sm\:mt-4{margin-top:1rem}.sm\:mr-4{margin-right:1rem}.sm\:mb-4{margin-bottom:1rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-5{margin-top:1.25rem}.sm\:mr-5{margin-right:1.25rem}.sm\:mb-5{margin-bottom:1.25rem}.sm\:ml-5{margin-left:1.25rem}.sm\:mt-6{margin-top:1.5rem}.sm\:mr-6{margin-right:1.5rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-8{margin-top:2rem}.sm\:mr-8{margin-right:2rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-8{margin-left:2rem}.sm\:mt-10{margin-top:2.5rem}.sm\:mr-10{margin-right:2.5rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:ml-10{margin-left:2.5rem}.sm\:mt-12{margin-top:3rem}.sm\:mr-12{margin-right:3rem}.sm\:mb-12{margin-bottom:3rem}.sm\:ml-12{margin-left:3rem}.sm\:mt-16{margin-top:4rem}.sm\:mr-16{margin-right:4rem}.sm\:mb-16{margin-bottom:4rem}.sm\:ml-16{margin-left:4rem}.sm\:mt-20{margin-top:5rem}.sm\:mr-20{margin-right:5rem}.sm\:mb-20{margin-bottom:5rem}.sm\:ml-20{margin-left:5rem}.sm\:mt-24{margin-top:6rem}.sm\:mr-24{margin-right:6rem}.sm\:mb-24{margin-bottom:6rem}.sm\:ml-24{margin-left:6rem}.sm\:mt-32{margin-top:8rem}.sm\:mr-32{margin-right:8rem}.sm\:mb-32{margin-bottom:8rem}.sm\:ml-32{margin-left:8rem}.sm\:mt-40{margin-top:10rem}.sm\:mr-40{margin-right:10rem}.sm\:mb-40{margin-bottom:10rem}.sm\:ml-40{margin-left:10rem}.sm\:mt-48{margin-top:12rem}.sm\:mr-48{margin-right:12rem}.sm\:mb-48{margin-bottom:12rem}.sm\:ml-48{margin-left:12rem}.sm\:mt-56{margin-top:14rem}.sm\:mr-56{margin-right:14rem}.sm\:mb-56{margin-bottom:14rem}.sm\:ml-56{margin-left:14rem}.sm\:mt-64{margin-top:16rem}.sm\:mr-64{margin-right:16rem}.sm\:mb-64{margin-bottom:16rem}.sm\:ml-64{margin-left:16rem}.sm\:mt-auto{margin-top:auto}.sm\:mr-auto{margin-right:auto}.sm\:mb-auto{margin-bottom:auto}.sm\:ml-auto{margin-left:auto}.sm\:mt-px{margin-top:1px}.sm\:mr-px{margin-right:1px}.sm\:mb-px{margin-bottom:1px}.sm\:ml-px{margin-left:1px}.sm\:-mt-1{margin-top:-.25rem}.sm\:-mr-1{margin-right:-.25rem}.sm\:-mb-1{margin-bottom:-.25rem}.sm\:-ml-1{margin-left:-.25rem}.sm\:-mt-2{margin-top:-.5rem}.sm\:-mr-2{margin-right:-.5rem}.sm\:-mb-2{margin-bottom:-.5rem}.sm\:-ml-2{margin-left:-.5rem}.sm\:-mt-3{margin-top:-.75rem}.sm\:-mr-3{margin-right:-.75rem}.sm\:-mb-3{margin-bottom:-.75rem}.sm\:-ml-3{margin-left:-.75rem}.sm\:-mt-4{margin-top:-1rem}.sm\:-mr-4{margin-right:-1rem}.sm\:-mb-4{margin-bottom:-1rem}.sm\:-ml-4{margin-left:-1rem}.sm\:-mt-5{margin-top:-1.25rem}.sm\:-mr-5{margin-right:-1.25rem}.sm\:-mb-5{margin-bottom:-1.25rem}.sm\:-ml-5{margin-left:-1.25rem}.sm\:-mt-6{margin-top:-1.5rem}.sm\:-mr-6{margin-right:-1.5rem}.sm\:-mb-6{margin-bottom:-1.5rem}.sm\:-ml-6{margin-left:-1.5rem}.sm\:-mt-8{margin-top:-2rem}.sm\:-mr-8{margin-right:-2rem}.sm\:-mb-8{margin-bottom:-2rem}.sm\:-ml-8{margin-left:-2rem}.sm\:-mt-10{margin-top:-2.5rem}.sm\:-mr-10{margin-right:-2.5rem}.sm\:-mb-10{margin-bottom:-2.5rem}.sm\:-ml-10{margin-left:-2.5rem}.sm\:-mt-12{margin-top:-3rem}.sm\:-mr-12{margin-right:-3rem}.sm\:-mb-12{margin-bottom:-3rem}.sm\:-ml-12{margin-left:-3rem}.sm\:-mt-16{margin-top:-4rem}.sm\:-mr-16{margin-right:-4rem}.sm\:-mb-16{margin-bottom:-4rem}.sm\:-ml-16{margin-left:-4rem}.sm\:-mt-20{margin-top:-5rem}.sm\:-mr-20{margin-right:-5rem}.sm\:-mb-20{margin-bottom:-5rem}.sm\:-ml-20{margin-left:-5rem}.sm\:-mt-24{margin-top:-6rem}.sm\:-mr-24{margin-right:-6rem}.sm\:-mb-24{margin-bottom:-6rem}.sm\:-ml-24{margin-left:-6rem}.sm\:-mt-32{margin-top:-8rem}.sm\:-mr-32{margin-right:-8rem}.sm\:-mb-32{margin-bottom:-8rem}.sm\:-ml-32{margin-left:-8rem}.sm\:-mt-40{margin-top:-10rem}.sm\:-mr-40{margin-right:-10rem}.sm\:-mb-40{margin-bottom:-10rem}.sm\:-ml-40{margin-left:-10rem}.sm\:-mt-48{margin-top:-12rem}.sm\:-mr-48{margin-right:-12rem}.sm\:-mb-48{margin-bottom:-12rem}.sm\:-ml-48{margin-left:-12rem}.sm\:-mt-56{margin-top:-14rem}.sm\:-mr-56{margin-right:-14rem}.sm\:-mb-56{margin-bottom:-14rem}.sm\:-ml-56{margin-left:-14rem}.sm\:-mt-64{margin-top:-16rem}.sm\:-mr-64{margin-right:-16rem}.sm\:-mb-64{margin-bottom:-16rem}.sm\:-ml-64{margin-left:-16rem}.sm\:-mt-px{margin-top:-1px}.sm\:-mr-px{margin-right:-1px}.sm\:-mb-px{margin-bottom:-1px}.sm\:-ml-px{margin-left:-1px}.sm\:max-h-full{max-height:100%}.sm\:max-h-screen{max-height:100vh}.sm\:max-w-none{max-width:none}.sm\:max-w-xs{max-width:20rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-full{max-width:100%}.sm\:max-w-screen-sm{max-width:640px}.sm\:max-w-screen-md{max-width:768px}.sm\:max-w-screen-lg{max-width:1024px}.sm\:max-w-screen-xl{max-width:1280px}.sm\:min-h-0{min-height:0}.sm\:min-h-full{min-height:100%}.sm\:min-h-screen{min-height:100vh}.sm\:min-w-0{min-width:0}.sm\:min-w-full{min-width:100%}.sm\:object-contain{object-fit:contain}.sm\:object-cover{object-fit:cover}.sm\:object-fill{object-fit:fill}.sm\:object-none{object-fit:none}.sm\:object-scale-down{object-fit:scale-down}.sm\:object-bottom{object-position:bottom}.sm\:object-center{object-position:center}.sm\:object-left{object-position:left}.sm\:object-left-bottom{object-position:left bottom}.sm\:object-left-top{object-position:left top}.sm\:object-right{object-position:right}.sm\:object-right-bottom{object-position:right bottom}.sm\:object-right-top{object-position:right top}.sm\:object-top{object-position:top}.sm\:opacity-0{opacity:0}.sm\:opacity-25{opacity:.25}.sm\:opacity-50{opacity:.5}.sm\:opacity-75{opacity:.75}.sm\:opacity-100{opacity:1}.sm\:hover\:opacity-0:hover{opacity:0}.sm\:hover\:opacity-25:hover{opacity:.25}.sm\:hover\:opacity-50:hover{opacity:.5}.sm\:hover\:opacity-75:hover{opacity:.75}.sm\:hover\:opacity-100:hover{opacity:1}.sm\:focus\:opacity-0:focus{opacity:0}.sm\:focus\:opacity-25:focus{opacity:.25}.sm\:focus\:opacity-50:focus{opacity:.5}.sm\:focus\:opacity-75:focus{opacity:.75}.sm\:focus\:opacity-100:focus{opacity:1}.sm\:outline-none{outline:2px solid transparent;outline-offset:2px}.sm\:outline-white{outline:2px dotted #fff;outline-offset:2px}.sm\:outline-black{outline:2px dotted #000;outline-offset:2px}.sm\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.sm\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.sm\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.sm\:overflow-auto{overflow:auto}.sm\:overflow-hidden{overflow:hidden}.sm\:overflow-visible{overflow:visible}.sm\:overflow-scroll{overflow:scroll}.sm\:overflow-x-auto{overflow-x:auto}.sm\:overflow-y-auto{overflow-y:auto}.sm\:overflow-x-hidden{overflow-x:hidden}.sm\:overflow-y-hidden{overflow-y:hidden}.sm\:overflow-x-visible{overflow-x:visible}.sm\:overflow-y-visible{overflow-y:visible}.sm\:overflow-x-scroll{overflow-x:scroll}.sm\:overflow-y-scroll{overflow-y:scroll}.sm\:scrolling-touch{-webkit-overflow-scrolling:touch}.sm\:scrolling-auto{-webkit-overflow-scrolling:auto}.sm\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.sm\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.sm\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.sm\:overscroll-y-auto{overscroll-behavior-y:auto}.sm\:overscroll-y-contain{overscroll-behavior-y:contain}.sm\:overscroll-y-none{overscroll-behavior-y:none}.sm\:overscroll-x-auto{overscroll-behavior-x:auto}.sm\:overscroll-x-contain{overscroll-behavior-x:contain}.sm\:overscroll-x-none{overscroll-behavior-x:none}.sm\:p-0{padding:0}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:p-10{padding:2.5rem}.sm\:p-12{padding:3rem}.sm\:p-16{padding:4rem}.sm\:p-20{padding:5rem}.sm\:p-24{padding:6rem}.sm\:p-32{padding:8rem}.sm\:p-40{padding:10rem}.sm\:p-48{padding:12rem}.sm\:p-56{padding:14rem}.sm\:p-64{padding:16rem}.sm\:p-px{padding:1px}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:px-0{padding-left:0;padding-right:0}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:px-1{padding-left:.25rem;padding-right:.25rem}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\:py-12{padding-top:3rem;padding-bottom:3rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:py-16{padding-top:4rem;padding-bottom:4rem}.sm\:px-16{padding-left:4rem;padding-right:4rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:px-20{padding-left:5rem;padding-right:5rem}.sm\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\:px-24{padding-left:6rem;padding-right:6rem}.sm\:py-32{padding-top:8rem;padding-bottom:8rem}.sm\:px-32{padding-left:8rem;padding-right:8rem}.sm\:py-40{padding-top:10rem;padding-bottom:10rem}.sm\:px-40{padding-left:10rem;padding-right:10rem}.sm\:py-48{padding-top:12rem;padding-bottom:12rem}.sm\:px-48{padding-left:12rem;padding-right:12rem}.sm\:py-56{padding-top:14rem;padding-bottom:14rem}.sm\:px-56{padding-left:14rem;padding-right:14rem}.sm\:py-64{padding-top:16rem;padding-bottom:16rem}.sm\:px-64{padding-left:16rem;padding-right:16rem}.sm\:py-px{padding-top:1px;padding-bottom:1px}.sm\:px-px{padding-left:1px;padding-right:1px}.sm\:pt-0{padding-top:0}.sm\:pr-0{padding-right:0}.sm\:pb-0{padding-bottom:0}.sm\:pl-0{padding-left:0}.sm\:pt-1{padding-top:.25rem}.sm\:pr-1{padding-right:.25rem}.sm\:pb-1{padding-bottom:.25rem}.sm\:pl-1{padding-left:.25rem}.sm\:pt-2{padding-top:.5rem}.sm\:pr-2{padding-right:.5rem}.sm\:pb-2{padding-bottom:.5rem}.sm\:pl-2{padding-left:.5rem}.sm\:pt-3{padding-top:.75rem}.sm\:pr-3{padding-right:.75rem}.sm\:pb-3{padding-bottom:.75rem}.sm\:pl-3{padding-left:.75rem}.sm\:pt-4{padding-top:1rem}.sm\:pr-4{padding-right:1rem}.sm\:pb-4{padding-bottom:1rem}.sm\:pl-4{padding-left:1rem}.sm\:pt-5{padding-top:1.25rem}.sm\:pr-5{padding-right:1.25rem}.sm\:pb-5{padding-bottom:1.25rem}.sm\:pl-5{padding-left:1.25rem}.sm\:pt-6{padding-top:1.5rem}.sm\:pr-6{padding-right:1.5rem}.sm\:pb-6{padding-bottom:1.5rem}.sm\:pl-6{padding-left:1.5rem}.sm\:pt-8{padding-top:2rem}.sm\:pr-8{padding-right:2rem}.sm\:pb-8{padding-bottom:2rem}.sm\:pl-8{padding-left:2rem}.sm\:pt-10{padding-top:2.5rem}.sm\:pr-10{padding-right:2.5rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pl-10{padding-left:2.5rem}.sm\:pt-12{padding-top:3rem}.sm\:pr-12{padding-right:3rem}.sm\:pb-12{padding-bottom:3rem}.sm\:pl-12{padding-left:3rem}.sm\:pt-16{padding-top:4rem}.sm\:pr-16{padding-right:4rem}.sm\:pb-16{padding-bottom:4rem}.sm\:pl-16{padding-left:4rem}.sm\:pt-20{padding-top:5rem}.sm\:pr-20{padding-right:5rem}.sm\:pb-20{padding-bottom:5rem}.sm\:pl-20{padding-left:5rem}.sm\:pt-24{padding-top:6rem}.sm\:pr-24{padding-right:6rem}.sm\:pb-24{padding-bottom:6rem}.sm\:pl-24{padding-left:6rem}.sm\:pt-32{padding-top:8rem}.sm\:pr-32{padding-right:8rem}.sm\:pb-32{padding-bottom:8rem}.sm\:pl-32{padding-left:8rem}.sm\:pt-40{padding-top:10rem}.sm\:pr-40{padding-right:10rem}.sm\:pb-40{padding-bottom:10rem}.sm\:pl-40{padding-left:10rem}.sm\:pt-48{padding-top:12rem}.sm\:pr-48{padding-right:12rem}.sm\:pb-48{padding-bottom:12rem}.sm\:pl-48{padding-left:12rem}.sm\:pt-56{padding-top:14rem}.sm\:pr-56{padding-right:14rem}.sm\:pb-56{padding-bottom:14rem}.sm\:pl-56{padding-left:14rem}.sm\:pt-64{padding-top:16rem}.sm\:pr-64{padding-right:16rem}.sm\:pb-64{padding-bottom:16rem}.sm\:pl-64{padding-left:16rem}.sm\:pt-px{padding-top:1px}.sm\:pr-px{padding-right:1px}.sm\:pb-px{padding-bottom:1px}.sm\:pl-px{padding-left:1px}.sm\:placeholder-transparent:-ms-input-placeholder{color:transparent}.sm\:placeholder-transparent::-ms-input-placeholder{color:transparent}.sm\:placeholder-transparent::placeholder{color:transparent}.sm\:placeholder-current:-ms-input-placeholder{color:currentColor}.sm\:placeholder-current::-ms-input-placeholder{color:currentColor}.sm\:placeholder-current::placeholder{color:currentColor}.sm\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.sm\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.sm\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.sm\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.sm\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.sm\:focus\:placeholder-current:focus::placeholder{color:currentColor}.sm\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.sm\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.sm\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.sm\:pointer-events-none{pointer-events:none}.sm\:pointer-events-auto{pointer-events:auto}.sm\:static{position:static}.sm\:fixed{position:fixed}.sm\:absolute{position:absolute}.sm\:relative{position:relative}.sm\:sticky{position:-webkit-sticky;position:sticky}.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.sm\:inset-y-0{top:0;bottom:0}.sm\:inset-x-0{right:0;left:0}.sm\:inset-y-auto{top:auto;bottom:auto}.sm\:inset-x-auto{right:auto;left:auto}.sm\:top-0{top:0}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:left-0{left:0}.sm\:top-auto{top:auto}.sm\:right-auto{right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-auto{left:auto}.sm\:resize-none{resize:none}.sm\:resize-y{resize:vertical}.sm\:resize-x{resize:horizontal}.sm\:resize{resize:both}.sm\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.sm\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:shadow-none{box-shadow:none}.sm\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.sm\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:hover\:shadow-none:hover{box-shadow:none}.sm\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.sm\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:focus\:shadow-none:focus{box-shadow:none}.sm\:fill-current{fill:currentColor}.sm\:stroke-current{stroke:currentColor}.sm\:stroke-0{stroke-width:0}.sm\:stroke-1{stroke-width:1}.sm\:stroke-2{stroke-width:2}.sm\:table-auto{table-layout:auto}.sm\:table-fixed{table-layout:fixed}.sm\:text-left{text-align:left}.sm\:text-center{text-align:center}.sm\:text-right{text-align:right}.sm\:text-justify{text-align:justify}.sm\:text-transparent{color:transparent}.sm\:text-current{color:currentColor}.sm\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.sm\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.sm\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.sm\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.sm\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.sm\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.sm\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.sm\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.sm\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.sm\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.sm\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.sm\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.sm\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.sm\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.sm\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.sm\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.sm\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.sm\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.sm\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.sm\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.sm\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.sm\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.sm\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.sm\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.sm\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.sm\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.sm\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.sm\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.sm\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.sm\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.sm\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.sm\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.sm\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.sm\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.sm\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.sm\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.sm\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.sm\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.sm\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.sm\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.sm\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.sm\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.sm\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.sm\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.sm\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.sm\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.sm\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.sm\:hover\:text-transparent:hover{color:transparent}.sm\:hover\:text-current:hover{color:currentColor}.sm\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.sm\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.sm\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.sm\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.sm\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.sm\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.sm\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.sm\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.sm\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.sm\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.sm\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.sm\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.sm\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.sm\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.sm\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.sm\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.sm\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.sm\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.sm\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.sm\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.sm\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.sm\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.sm\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.sm\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.sm\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.sm\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.sm\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.sm\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.sm\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.sm\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.sm\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.sm\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.sm\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.sm\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.sm\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.sm\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.sm\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.sm\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.sm\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.sm\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.sm\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.sm\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.sm\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.sm\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.sm\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.sm\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.sm\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.sm\:focus\:text-transparent:focus{color:transparent}.sm\:focus\:text-current:focus{color:currentColor}.sm\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.sm\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.sm\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.sm\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.sm\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.sm\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.sm\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.sm\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.sm\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.sm\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.sm\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.sm\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.sm\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.sm\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.sm\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.sm\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.sm\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.sm\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.sm\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.sm\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.sm\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.sm\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.sm\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.sm\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.sm\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.sm\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.sm\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.sm\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.sm\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.sm\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.sm\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.sm\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.sm\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.sm\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.sm\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.sm\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.sm\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.sm\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.sm\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.sm\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.sm\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.sm\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.sm\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.sm\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.sm\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.sm\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.sm\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.sm\:text-opacity-0{--text-opacity:0}.sm\:text-opacity-25{--text-opacity:0.25}.sm\:text-opacity-50{--text-opacity:0.5}.sm\:text-opacity-75{--text-opacity:0.75}.sm\:text-opacity-100{--text-opacity:1}.sm\:hover\:text-opacity-0:hover{--text-opacity:0}.sm\:hover\:text-opacity-25:hover{--text-opacity:0.25}.sm\:hover\:text-opacity-50:hover{--text-opacity:0.5}.sm\:hover\:text-opacity-75:hover{--text-opacity:0.75}.sm\:hover\:text-opacity-100:hover{--text-opacity:1}.sm\:focus\:text-opacity-0:focus{--text-opacity:0}.sm\:focus\:text-opacity-25:focus{--text-opacity:0.25}.sm\:focus\:text-opacity-50:focus{--text-opacity:0.5}.sm\:focus\:text-opacity-75:focus{--text-opacity:0.75}.sm\:focus\:text-opacity-100:focus{--text-opacity:1}.sm\:italic{font-style:italic}.sm\:not-italic{font-style:normal}.sm\:uppercase{text-transform:uppercase}.sm\:lowercase{text-transform:lowercase}.sm\:capitalize{text-transform:capitalize}.sm\:normal-case{text-transform:none}.sm\:underline{text-decoration:underline}.sm\:line-through{text-decoration:line-through}.sm\:no-underline{text-decoration:none}.sm\:hover\:underline:hover{text-decoration:underline}.sm\:hover\:line-through:hover{text-decoration:line-through}.sm\:hover\:no-underline:hover{text-decoration:none}.sm\:focus\:underline:focus{text-decoration:underline}.sm\:focus\:line-through:focus{text-decoration:line-through}.sm\:focus\:no-underline:focus{text-decoration:none}.sm\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\:diagonal-fractions,.sm\:lining-nums,.sm\:oldstyle-nums,.sm\:ordinal,.sm\:proportional-nums,.sm\:slashed-zero,.sm\:stacked-fractions,.sm\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.sm\:normal-nums{font-variant-numeric:normal}.sm\:ordinal{--font-variant-numeric-ordinal:ordinal}.sm\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.sm\:lining-nums{--font-variant-numeric-figure:lining-nums}.sm\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.sm\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.sm\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.sm\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.sm\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.sm\:tracking-tighter{letter-spacing:-.05em}.sm\:tracking-tight{letter-spacing:-.025em}.sm\:tracking-normal{letter-spacing:0}.sm\:tracking-wide{letter-spacing:.025em}.sm\:tracking-wider{letter-spacing:.05em}.sm\:tracking-widest{letter-spacing:.1em}.sm\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.sm\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.sm\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.sm\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.sm\:align-baseline{vertical-align:baseline}.sm\:align-top{vertical-align:top}.sm\:align-middle{vertical-align:middle}.sm\:align-bottom{vertical-align:bottom}.sm\:align-text-top{vertical-align:text-top}.sm\:align-text-bottom{vertical-align:text-bottom}.sm\:visible{visibility:visible}.sm\:invisible{visibility:hidden}.sm\:whitespace-normal{white-space:normal}.sm\:whitespace-no-wrap{white-space:nowrap}.sm\:whitespace-pre{white-space:pre}.sm\:whitespace-pre-line{white-space:pre-line}.sm\:whitespace-pre-wrap{white-space:pre-wrap}.sm\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.sm\:break-words{word-wrap:break-word;overflow-wrap:break-word}.sm\:break-all{word-break:break-all}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-0{width:0}.sm\:w-1{width:.25rem}.sm\:w-2{width:.5rem}.sm\:w-3{width:.75rem}.sm\:w-4{width:1rem}.sm\:w-5{width:1.25rem}.sm\:w-6{width:1.5rem}.sm\:w-8{width:2rem}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-16{width:4rem}.sm\:w-20{width:5rem}.sm\:w-24{width:6rem}.sm\:w-32{width:8rem}.sm\:w-40{width:10rem}.sm\:w-48{width:12rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-auto{width:auto}.sm\:w-px{width:1px}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.333333%}.sm\:w-2\/3{width:66.666667%}.sm\:w-1\/4{width:25%}.sm\:w-2\/4{width:50%}.sm\:w-3\/4{width:75%}.sm\:w-1\/5{width:20%}.sm\:w-2\/5{width:40%}.sm\:w-3\/5{width:60%}.sm\:w-4\/5{width:80%}.sm\:w-1\/6{width:16.666667%}.sm\:w-2\/6{width:33.333333%}.sm\:w-3\/6{width:50%}.sm\:w-4\/6{width:66.666667%}.sm\:w-5\/6{width:83.333333%}.sm\:w-1\/12{width:8.333333%}.sm\:w-2\/12{width:16.666667%}.sm\:w-3\/12{width:25%}.sm\:w-4\/12{width:33.333333%}.sm\:w-5\/12{width:41.666667%}.sm\:w-6\/12{width:50%}.sm\:w-7\/12{width:58.333333%}.sm\:w-8\/12{width:66.666667%}.sm\:w-9\/12{width:75%}.sm\:w-10\/12{width:83.333333%}.sm\:w-11\/12{width:91.666667%}.sm\:w-full{width:100%}.sm\:w-screen{width:100vw}.sm\:z-0{z-index:0}.sm\:z-10{z-index:10}.sm\:z-20{z-index:20}.sm\:z-30{z-index:30}.sm\:z-40{z-index:40}.sm\:z-50{z-index:50}.sm\:z-auto{z-index:auto}.sm\:gap-0{grid-gap:0;gap:0}.sm\:gap-1{grid-gap:.25rem;gap:.25rem}.sm\:gap-2{grid-gap:.5rem;gap:.5rem}.sm\:gap-3{grid-gap:.75rem;gap:.75rem}.sm\:gap-4{grid-gap:1rem;gap:1rem}.sm\:gap-5{grid-gap:1.25rem;gap:1.25rem}.sm\:gap-6{grid-gap:1.5rem;gap:1.5rem}.sm\:gap-8{grid-gap:2rem;gap:2rem}.sm\:gap-10{grid-gap:2.5rem;gap:2.5rem}.sm\:gap-12{grid-gap:3rem;gap:3rem}.sm\:gap-16{grid-gap:4rem;gap:4rem}.sm\:gap-20{grid-gap:5rem;gap:5rem}.sm\:gap-24{grid-gap:6rem;gap:6rem}.sm\:gap-32{grid-gap:8rem;gap:8rem}.sm\:gap-40{grid-gap:10rem;gap:10rem}.sm\:gap-48{grid-gap:12rem;gap:12rem}.sm\:gap-56{grid-gap:14rem;gap:14rem}.sm\:gap-64{grid-gap:16rem;gap:16rem}.sm\:gap-px{grid-gap:1px;gap:1px}.sm\:col-gap-0{grid-column-gap:0;column-gap:0}.sm\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.sm\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.sm\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.sm\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.sm\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.sm\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.sm\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.sm\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.sm\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.sm\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.sm\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.sm\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.sm\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.sm\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.sm\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.sm\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.sm\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.sm\:col-gap-px{grid-column-gap:1px;column-gap:1px}.sm\:gap-x-0{grid-column-gap:0;column-gap:0}.sm\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.sm\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.sm\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.sm\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.sm\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.sm\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.sm\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.sm\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.sm\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.sm\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.sm\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.sm\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.sm\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.sm\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.sm\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.sm\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.sm\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.sm\:gap-x-px{grid-column-gap:1px;column-gap:1px}.sm\:row-gap-0{grid-row-gap:0;row-gap:0}.sm\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.sm\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.sm\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.sm\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.sm\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.sm\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.sm\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.sm\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.sm\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.sm\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.sm\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.sm\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.sm\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.sm\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.sm\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.sm\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.sm\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.sm\:row-gap-px{grid-row-gap:1px;row-gap:1px}.sm\:gap-y-0{grid-row-gap:0;row-gap:0}.sm\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.sm\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.sm\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.sm\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.sm\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.sm\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.sm\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.sm\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.sm\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.sm\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.sm\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.sm\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.sm\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.sm\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.sm\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.sm\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.sm\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.sm\:gap-y-px{grid-row-gap:1px;row-gap:1px}.sm\:grid-flow-row{grid-auto-flow:row}.sm\:grid-flow-col{grid-auto-flow:column}.sm\:grid-flow-row-dense{grid-auto-flow:row dense}.sm\:grid-flow-col-dense{grid-auto-flow:column dense}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:auto-cols-auto{grid-auto-columns:auto}.sm\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.sm\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.sm\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.sm\:col-auto{grid-column:auto}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-full{grid-column:1/-1}.sm\:col-start-1{grid-column-start:1}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-3{grid-column-start:3}.sm\:col-start-4{grid-column-start:4}.sm\:col-start-5{grid-column-start:5}.sm\:col-start-6{grid-column-start:6}.sm\:col-start-7{grid-column-start:7}.sm\:col-start-8{grid-column-start:8}.sm\:col-start-9{grid-column-start:9}.sm\:col-start-10{grid-column-start:10}.sm\:col-start-11{grid-column-start:11}.sm\:col-start-12{grid-column-start:12}.sm\:col-start-13{grid-column-start:13}.sm\:col-start-auto{grid-column-start:auto}.sm\:col-end-1{grid-column-end:1}.sm\:col-end-2{grid-column-end:2}.sm\:col-end-3{grid-column-end:3}.sm\:col-end-4{grid-column-end:4}.sm\:col-end-5{grid-column-end:5}.sm\:col-end-6{grid-column-end:6}.sm\:col-end-7{grid-column-end:7}.sm\:col-end-8{grid-column-end:8}.sm\:col-end-9{grid-column-end:9}.sm\:col-end-10{grid-column-end:10}.sm\:col-end-11{grid-column-end:11}.sm\:col-end-12{grid-column-end:12}.sm\:col-end-13{grid-column-end:13}.sm\:col-end-auto{grid-column-end:auto}.sm\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.sm\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.sm\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.sm\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.sm\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.sm\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.sm\:grid-rows-none{grid-template-rows:none}.sm\:auto-rows-auto{grid-auto-rows:auto}.sm\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.sm\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.sm\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.sm\:row-auto{grid-row:auto}.sm\:row-span-1{grid-row:span 1/span 1}.sm\:row-span-2{grid-row:span 2/span 2}.sm\:row-span-3{grid-row:span 3/span 3}.sm\:row-span-4{grid-row:span 4/span 4}.sm\:row-span-5{grid-row:span 5/span 5}.sm\:row-span-6{grid-row:span 6/span 6}.sm\:row-span-full{grid-row:1/-1}.sm\:row-start-1{grid-row-start:1}.sm\:row-start-2{grid-row-start:2}.sm\:row-start-3{grid-row-start:3}.sm\:row-start-4{grid-row-start:4}.sm\:row-start-5{grid-row-start:5}.sm\:row-start-6{grid-row-start:6}.sm\:row-start-7{grid-row-start:7}.sm\:row-start-auto{grid-row-start:auto}.sm\:row-end-1{grid-row-end:1}.sm\:row-end-2{grid-row-end:2}.sm\:row-end-3{grid-row-end:3}.sm\:row-end-4{grid-row-end:4}.sm\:row-end-5{grid-row-end:5}.sm\:row-end-6{grid-row-end:6}.sm\:row-end-7{grid-row-end:7}.sm\:row-end-auto{grid-row-end:auto}.sm\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.sm\:transform-none{transform:none}.sm\:origin-center{transform-origin:center}.sm\:origin-top{transform-origin:top}.sm\:origin-top-right{transform-origin:top right}.sm\:origin-right{transform-origin:right}.sm\:origin-bottom-right{transform-origin:bottom right}.sm\:origin-bottom{transform-origin:bottom}.sm\:origin-bottom-left{transform-origin:bottom left}.sm\:origin-left{transform-origin:left}.sm\:origin-top-left{transform-origin:top left}.sm\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.sm\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.sm\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:scale-x-0{--transform-scale-x:0}.sm\:scale-x-50{--transform-scale-x:.5}.sm\:scale-x-75{--transform-scale-x:.75}.sm\:scale-x-90{--transform-scale-x:.9}.sm\:scale-x-95{--transform-scale-x:.95}.sm\:scale-x-100{--transform-scale-x:1}.sm\:scale-x-105{--transform-scale-x:1.05}.sm\:scale-x-110{--transform-scale-x:1.1}.sm\:scale-x-125{--transform-scale-x:1.25}.sm\:scale-x-150{--transform-scale-x:1.5}.sm\:scale-y-0{--transform-scale-y:0}.sm\:scale-y-50{--transform-scale-y:.5}.sm\:scale-y-75{--transform-scale-y:.75}.sm\:scale-y-90{--transform-scale-y:.9}.sm\:scale-y-95{--transform-scale-y:.95}.sm\:scale-y-100{--transform-scale-y:1}.sm\:scale-y-105{--transform-scale-y:1.05}.sm\:scale-y-110{--transform-scale-y:1.1}.sm\:scale-y-125{--transform-scale-y:1.25}.sm\:scale-y-150{--transform-scale-y:1.5}.sm\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.sm\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.sm\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:hover\:scale-x-0:hover{--transform-scale-x:0}.sm\:hover\:scale-x-50:hover{--transform-scale-x:.5}.sm\:hover\:scale-x-75:hover{--transform-scale-x:.75}.sm\:hover\:scale-x-90:hover{--transform-scale-x:.9}.sm\:hover\:scale-x-95:hover{--transform-scale-x:.95}.sm\:hover\:scale-x-100:hover{--transform-scale-x:1}.sm\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.sm\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.sm\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.sm\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.sm\:hover\:scale-y-0:hover{--transform-scale-y:0}.sm\:hover\:scale-y-50:hover{--transform-scale-y:.5}.sm\:hover\:scale-y-75:hover{--transform-scale-y:.75}.sm\:hover\:scale-y-90:hover{--transform-scale-y:.9}.sm\:hover\:scale-y-95:hover{--transform-scale-y:.95}.sm\:hover\:scale-y-100:hover{--transform-scale-y:1}.sm\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.sm\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.sm\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.sm\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.sm\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.sm\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.sm\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:focus\:scale-x-0:focus{--transform-scale-x:0}.sm\:focus\:scale-x-50:focus{--transform-scale-x:.5}.sm\:focus\:scale-x-75:focus{--transform-scale-x:.75}.sm\:focus\:scale-x-90:focus{--transform-scale-x:.9}.sm\:focus\:scale-x-95:focus{--transform-scale-x:.95}.sm\:focus\:scale-x-100:focus{--transform-scale-x:1}.sm\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.sm\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.sm\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.sm\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.sm\:focus\:scale-y-0:focus{--transform-scale-y:0}.sm\:focus\:scale-y-50:focus{--transform-scale-y:.5}.sm\:focus\:scale-y-75:focus{--transform-scale-y:.75}.sm\:focus\:scale-y-90:focus{--transform-scale-y:.9}.sm\:focus\:scale-y-95:focus{--transform-scale-y:.95}.sm\:focus\:scale-y-100:focus{--transform-scale-y:1}.sm\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.sm\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.sm\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.sm\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.sm\:rotate-0{--transform-rotate:0}.sm\:rotate-1{--transform-rotate:1deg}.sm\:rotate-2{--transform-rotate:2deg}.sm\:rotate-3{--transform-rotate:3deg}.sm\:rotate-6{--transform-rotate:6deg}.sm\:rotate-12{--transform-rotate:12deg}.sm\:rotate-45{--transform-rotate:45deg}.sm\:rotate-90{--transform-rotate:90deg}.sm\:rotate-180{--transform-rotate:180deg}.sm\:-rotate-180{--transform-rotate:-180deg}.sm\:-rotate-90{--transform-rotate:-90deg}.sm\:-rotate-45{--transform-rotate:-45deg}.sm\:-rotate-12{--transform-rotate:-12deg}.sm\:-rotate-6{--transform-rotate:-6deg}.sm\:-rotate-3{--transform-rotate:-3deg}.sm\:-rotate-2{--transform-rotate:-2deg}.sm\:-rotate-1{--transform-rotate:-1deg}.sm\:hover\:rotate-0:hover{--transform-rotate:0}.sm\:hover\:rotate-1:hover{--transform-rotate:1deg}.sm\:hover\:rotate-2:hover{--transform-rotate:2deg}.sm\:hover\:rotate-3:hover{--transform-rotate:3deg}.sm\:hover\:rotate-6:hover{--transform-rotate:6deg}.sm\:hover\:rotate-12:hover{--transform-rotate:12deg}.sm\:hover\:rotate-45:hover{--transform-rotate:45deg}.sm\:hover\:rotate-90:hover{--transform-rotate:90deg}.sm\:hover\:rotate-180:hover{--transform-rotate:180deg}.sm\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.sm\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.sm\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.sm\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.sm\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.sm\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.sm\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.sm\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.sm\:focus\:rotate-0:focus{--transform-rotate:0}.sm\:focus\:rotate-1:focus{--transform-rotate:1deg}.sm\:focus\:rotate-2:focus{--transform-rotate:2deg}.sm\:focus\:rotate-3:focus{--transform-rotate:3deg}.sm\:focus\:rotate-6:focus{--transform-rotate:6deg}.sm\:focus\:rotate-12:focus{--transform-rotate:12deg}.sm\:focus\:rotate-45:focus{--transform-rotate:45deg}.sm\:focus\:rotate-90:focus{--transform-rotate:90deg}.sm\:focus\:rotate-180:focus{--transform-rotate:180deg}.sm\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.sm\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.sm\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.sm\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.sm\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.sm\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.sm\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.sm\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.sm\:translate-x-0{--transform-translate-x:0}.sm\:translate-x-1{--transform-translate-x:0.25rem}.sm\:translate-x-2{--transform-translate-x:0.5rem}.sm\:translate-x-3{--transform-translate-x:0.75rem}.sm\:translate-x-4{--transform-translate-x:1rem}.sm\:translate-x-5{--transform-translate-x:1.25rem}.sm\:translate-x-6{--transform-translate-x:1.5rem}.sm\:translate-x-8{--transform-translate-x:2rem}.sm\:translate-x-10{--transform-translate-x:2.5rem}.sm\:translate-x-12{--transform-translate-x:3rem}.sm\:translate-x-16{--transform-translate-x:4rem}.sm\:translate-x-20{--transform-translate-x:5rem}.sm\:translate-x-24{--transform-translate-x:6rem}.sm\:translate-x-32{--transform-translate-x:8rem}.sm\:translate-x-40{--transform-translate-x:10rem}.sm\:translate-x-48{--transform-translate-x:12rem}.sm\:translate-x-56{--transform-translate-x:14rem}.sm\:translate-x-64{--transform-translate-x:16rem}.sm\:translate-x-px{--transform-translate-x:1px}.sm\:-translate-x-1{--transform-translate-x:-0.25rem}.sm\:-translate-x-2{--transform-translate-x:-0.5rem}.sm\:-translate-x-3{--transform-translate-x:-0.75rem}.sm\:-translate-x-4{--transform-translate-x:-1rem}.sm\:-translate-x-5{--transform-translate-x:-1.25rem}.sm\:-translate-x-6{--transform-translate-x:-1.5rem}.sm\:-translate-x-8{--transform-translate-x:-2rem}.sm\:-translate-x-10{--transform-translate-x:-2.5rem}.sm\:-translate-x-12{--transform-translate-x:-3rem}.sm\:-translate-x-16{--transform-translate-x:-4rem}.sm\:-translate-x-20{--transform-translate-x:-5rem}.sm\:-translate-x-24{--transform-translate-x:-6rem}.sm\:-translate-x-32{--transform-translate-x:-8rem}.sm\:-translate-x-40{--transform-translate-x:-10rem}.sm\:-translate-x-48{--transform-translate-x:-12rem}.sm\:-translate-x-56{--transform-translate-x:-14rem}.sm\:-translate-x-64{--transform-translate-x:-16rem}.sm\:-translate-x-px{--transform-translate-x:-1px}.sm\:-translate-x-full{--transform-translate-x:-100%}.sm\:-translate-x-1\/2{--transform-translate-x:-50%}.sm\:translate-x-1\/2{--transform-translate-x:50%}.sm\:translate-x-full{--transform-translate-x:100%}.sm\:translate-y-0{--transform-translate-y:0}.sm\:translate-y-1{--transform-translate-y:0.25rem}.sm\:translate-y-2{--transform-translate-y:0.5rem}.sm\:translate-y-3{--transform-translate-y:0.75rem}.sm\:translate-y-4{--transform-translate-y:1rem}.sm\:translate-y-5{--transform-translate-y:1.25rem}.sm\:translate-y-6{--transform-translate-y:1.5rem}.sm\:translate-y-8{--transform-translate-y:2rem}.sm\:translate-y-10{--transform-translate-y:2.5rem}.sm\:translate-y-12{--transform-translate-y:3rem}.sm\:translate-y-16{--transform-translate-y:4rem}.sm\:translate-y-20{--transform-translate-y:5rem}.sm\:translate-y-24{--transform-translate-y:6rem}.sm\:translate-y-32{--transform-translate-y:8rem}.sm\:translate-y-40{--transform-translate-y:10rem}.sm\:translate-y-48{--transform-translate-y:12rem}.sm\:translate-y-56{--transform-translate-y:14rem}.sm\:translate-y-64{--transform-translate-y:16rem}.sm\:translate-y-px{--transform-translate-y:1px}.sm\:-translate-y-1{--transform-translate-y:-0.25rem}.sm\:-translate-y-2{--transform-translate-y:-0.5rem}.sm\:-translate-y-3{--transform-translate-y:-0.75rem}.sm\:-translate-y-4{--transform-translate-y:-1rem}.sm\:-translate-y-5{--transform-translate-y:-1.25rem}.sm\:-translate-y-6{--transform-translate-y:-1.5rem}.sm\:-translate-y-8{--transform-translate-y:-2rem}.sm\:-translate-y-10{--transform-translate-y:-2.5rem}.sm\:-translate-y-12{--transform-translate-y:-3rem}.sm\:-translate-y-16{--transform-translate-y:-4rem}.sm\:-translate-y-20{--transform-translate-y:-5rem}.sm\:-translate-y-24{--transform-translate-y:-6rem}.sm\:-translate-y-32{--transform-translate-y:-8rem}.sm\:-translate-y-40{--transform-translate-y:-10rem}.sm\:-translate-y-48{--transform-translate-y:-12rem}.sm\:-translate-y-56{--transform-translate-y:-14rem}.sm\:-translate-y-64{--transform-translate-y:-16rem}.sm\:-translate-y-px{--transform-translate-y:-1px}.sm\:-translate-y-full{--transform-translate-y:-100%}.sm\:-translate-y-1\/2{--transform-translate-y:-50%}.sm\:translate-y-1\/2{--transform-translate-y:50%}.sm\:translate-y-full{--transform-translate-y:100%}.sm\:hover\:translate-x-0:hover{--transform-translate-x:0}.sm\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.sm\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.sm\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.sm\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.sm\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.sm\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.sm\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.sm\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.sm\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.sm\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.sm\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.sm\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.sm\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.sm\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.sm\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.sm\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.sm\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.sm\:hover\:translate-x-px:hover{--transform-translate-x:1px}.sm\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.sm\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.sm\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.sm\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.sm\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.sm\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.sm\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.sm\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.sm\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.sm\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.sm\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.sm\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.sm\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.sm\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.sm\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.sm\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.sm\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.sm\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.sm\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.sm\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.sm\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.sm\:hover\:translate-x-full:hover{--transform-translate-x:100%}.sm\:hover\:translate-y-0:hover{--transform-translate-y:0}.sm\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.sm\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.sm\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.sm\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.sm\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.sm\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.sm\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.sm\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.sm\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.sm\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.sm\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.sm\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.sm\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.sm\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.sm\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.sm\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.sm\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.sm\:hover\:translate-y-px:hover{--transform-translate-y:1px}.sm\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.sm\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.sm\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.sm\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.sm\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.sm\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.sm\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.sm\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.sm\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.sm\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.sm\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.sm\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.sm\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.sm\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.sm\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.sm\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.sm\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.sm\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.sm\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.sm\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.sm\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.sm\:hover\:translate-y-full:hover{--transform-translate-y:100%}.sm\:focus\:translate-x-0:focus{--transform-translate-x:0}.sm\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.sm\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.sm\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.sm\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.sm\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.sm\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.sm\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.sm\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.sm\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.sm\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.sm\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.sm\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.sm\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.sm\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.sm\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.sm\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.sm\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.sm\:focus\:translate-x-px:focus{--transform-translate-x:1px}.sm\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.sm\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.sm\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.sm\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.sm\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.sm\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.sm\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.sm\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.sm\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.sm\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.sm\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.sm\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.sm\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.sm\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.sm\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.sm\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.sm\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.sm\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.sm\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.sm\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.sm\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.sm\:focus\:translate-x-full:focus{--transform-translate-x:100%}.sm\:focus\:translate-y-0:focus{--transform-translate-y:0}.sm\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.sm\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.sm\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.sm\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.sm\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.sm\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.sm\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.sm\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.sm\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.sm\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.sm\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.sm\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.sm\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.sm\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.sm\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.sm\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.sm\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.sm\:focus\:translate-y-px:focus{--transform-translate-y:1px}.sm\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.sm\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.sm\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.sm\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.sm\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.sm\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.sm\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.sm\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.sm\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.sm\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.sm\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.sm\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.sm\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.sm\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.sm\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.sm\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.sm\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.sm\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.sm\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.sm\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.sm\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.sm\:focus\:translate-y-full:focus{--transform-translate-y:100%}.sm\:skew-x-0{--transform-skew-x:0}.sm\:skew-x-1{--transform-skew-x:1deg}.sm\:skew-x-2{--transform-skew-x:2deg}.sm\:skew-x-3{--transform-skew-x:3deg}.sm\:skew-x-6{--transform-skew-x:6deg}.sm\:skew-x-12{--transform-skew-x:12deg}.sm\:-skew-x-12{--transform-skew-x:-12deg}.sm\:-skew-x-6{--transform-skew-x:-6deg}.sm\:-skew-x-3{--transform-skew-x:-3deg}.sm\:-skew-x-2{--transform-skew-x:-2deg}.sm\:-skew-x-1{--transform-skew-x:-1deg}.sm\:skew-y-0{--transform-skew-y:0}.sm\:skew-y-1{--transform-skew-y:1deg}.sm\:skew-y-2{--transform-skew-y:2deg}.sm\:skew-y-3{--transform-skew-y:3deg}.sm\:skew-y-6{--transform-skew-y:6deg}.sm\:skew-y-12{--transform-skew-y:12deg}.sm\:-skew-y-12{--transform-skew-y:-12deg}.sm\:-skew-y-6{--transform-skew-y:-6deg}.sm\:-skew-y-3{--transform-skew-y:-3deg}.sm\:-skew-y-2{--transform-skew-y:-2deg}.sm\:-skew-y-1{--transform-skew-y:-1deg}.sm\:hover\:skew-x-0:hover{--transform-skew-x:0}.sm\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.sm\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.sm\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.sm\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.sm\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.sm\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.sm\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.sm\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.sm\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.sm\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.sm\:hover\:skew-y-0:hover{--transform-skew-y:0}.sm\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.sm\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.sm\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.sm\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.sm\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.sm\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.sm\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.sm\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.sm\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.sm\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.sm\:focus\:skew-x-0:focus{--transform-skew-x:0}.sm\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.sm\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.sm\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.sm\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.sm\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.sm\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.sm\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.sm\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.sm\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.sm\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.sm\:focus\:skew-y-0:focus{--transform-skew-y:0}.sm\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.sm\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.sm\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.sm\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.sm\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.sm\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.sm\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.sm\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.sm\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.sm\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.sm\:transition-none{transition-property:none}.sm\:transition-all{transition-property:all}.sm\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.sm\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.sm\:transition-opacity{transition-property:opacity}.sm\:transition-shadow{transition-property:box-shadow}.sm\:transition-transform{transition-property:transform}.sm\:ease-linear{transition-timing-function:linear}.sm\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.sm\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.sm\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.sm\:duration-75{transition-duration:75ms}.sm\:duration-100{transition-duration:.1s}.sm\:duration-150{transition-duration:150ms}.sm\:duration-200{transition-duration:.2s}.sm\:duration-300{transition-duration:.3s}.sm\:duration-500{transition-duration:.5s}.sm\:duration-700{transition-duration:.7s}.sm\:duration-1000{transition-duration:1s}.sm\:delay-75{transition-delay:75ms}.sm\:delay-100{transition-delay:.1s}.sm\:delay-150{transition-delay:150ms}.sm\:delay-200{transition-delay:.2s}.sm\:delay-300{transition-delay:.3s}.sm\:delay-500{transition-delay:.5s}.sm\:delay-700{transition-delay:.7s}.sm\:delay-1000{transition-delay:1s}.sm\:animate-none{animation:none}.sm\:animate-spin{animation:spin 1s linear infinite}.sm\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.sm\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.sm\:animate-bounce{animation:bounce 1s infinite}}@media (min-width:768px){.md\:container{width:100%}@media (min-width:640px){.md\:container{max-width:640px}}@media (min-width:768px){.md\:container{max-width:768px}}@media (min-width:1024px){.md\:container{max-width:1024px}}@media (min-width:1280px){.md\:container{max-width:1280px}}.md\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.md\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.md\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.md\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.md\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.md\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.md\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.md\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.md\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.md\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.md\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.md\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.md\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.md\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.md\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.md\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.md\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.md\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.md\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.md\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.md\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.md\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.md\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.md\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.md\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.md\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.md\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.md\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.md\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.md\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.md\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.md\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.md\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.md\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.md\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.md\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.md\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.md\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.md\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.md\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.md\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.md\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.md\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.md\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.md\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.md\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.md\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.md\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.md\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.md\:divide-transparent>:not(template)~:not(template){border-color:transparent}.md\:divide-current>:not(template)~:not(template){border-color:currentColor}.md\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.md\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.md\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.md\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.md\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.md\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.md\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.md\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.md\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.md\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.md\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.md\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.md\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.md\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.md\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.md\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.md\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.md\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.md\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.md\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.md\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.md\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.md\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.md\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.md\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.md\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.md\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.md\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.md\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.md\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.md\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.md\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.md\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.md\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.md\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.md\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.md\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.md\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.md\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.md\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.md\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.md\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.md\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.md\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.md\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.md\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.md\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.md\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.md\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.md\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.md\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.md\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.md\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.md\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.md\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.md\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.md\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.md\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.md\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.md\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.md\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.md\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.md\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.md\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.md\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.md\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.md\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.md\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.md\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.md\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.md\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.md\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.md\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.md\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.md\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.md\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.md\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.md\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.md\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.md\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.md\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.md\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.md\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.md\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.md\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.md\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.md\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.md\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.md\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.md\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.md\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.md\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.md\:divide-solid>:not(template)~:not(template){border-style:solid}.md\:divide-dashed>:not(template)~:not(template){border-style:dashed}.md\:divide-dotted>:not(template)~:not(template){border-style:dotted}.md\:divide-double>:not(template)~:not(template){border-style:double}.md\:divide-none>:not(template)~:not(template){border-style:none}.md\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.md\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.md\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.md\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.md\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.md\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.md\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.md\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.md\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.md\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.md\:bg-fixed{background-attachment:fixed}.md\:bg-local{background-attachment:local}.md\:bg-scroll{background-attachment:scroll}.md\:bg-clip-border{background-clip:border-box}.md\:bg-clip-padding{background-clip:padding-box}.md\:bg-clip-content{background-clip:content-box}.md\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.md\:bg-transparent{background-color:transparent}.md\:bg-current{background-color:currentColor}.md\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.md\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.md\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.md\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.md\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.md\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.md\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.md\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.md\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.md\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.md\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.md\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.md\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.md\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.md\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.md\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.md\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.md\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.md\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.md\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.md\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.md\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.md\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.md\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.md\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.md\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.md\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.md\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.md\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.md\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.md\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.md\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.md\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.md\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.md\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.md\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.md\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.md\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.md\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.md\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.md\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.md\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.md\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.md\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.md\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.md\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.md\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.md\:hover\:bg-transparent:hover{background-color:transparent}.md\:hover\:bg-current:hover{background-color:currentColor}.md\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.md\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.md\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.md\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.md\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.md\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.md\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.md\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.md\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.md\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.md\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.md\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.md\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.md\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.md\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.md\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.md\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.md\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.md\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.md\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.md\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.md\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.md\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.md\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.md\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.md\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.md\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.md\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.md\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.md\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.md\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.md\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.md\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.md\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.md\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.md\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.md\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.md\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.md\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.md\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.md\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.md\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.md\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.md\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.md\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.md\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.md\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.md\:focus\:bg-transparent:focus{background-color:transparent}.md\:focus\:bg-current:focus{background-color:currentColor}.md\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.md\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.md\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.md\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.md\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.md\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.md\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.md\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.md\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.md\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.md\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.md\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.md\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.md\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.md\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.md\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.md\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.md\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.md\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.md\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.md\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.md\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.md\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.md\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.md\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.md\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.md\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.md\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.md\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.md\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.md\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.md\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.md\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.md\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.md\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.md\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.md\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.md\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.md\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.md\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.md\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.md\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.md\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.md\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.md\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.md\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.md\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.md\:bg-none{background-image:none}.md\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.md\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.md\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.md\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.md\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.md\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.md\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.md\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.md\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:to-transparent{--gradient-to-color:transparent}.md\:to-current{--gradient-to-color:currentColor}.md\:to-black{--gradient-to-color:#000}.md\:to-white{--gradient-to-color:#fff}.md\:to-gray-100{--gradient-to-color:#f7fafc}.md\:to-gray-200{--gradient-to-color:#edf2f7}.md\:to-gray-300{--gradient-to-color:#e2e8f0}.md\:to-gray-400{--gradient-to-color:#cbd5e0}.md\:to-gray-500{--gradient-to-color:#a0aec0}.md\:to-gray-600{--gradient-to-color:#718096}.md\:to-gray-700{--gradient-to-color:#4a5568}.md\:to-gray-800{--gradient-to-color:#2d3748}.md\:to-gray-900{--gradient-to-color:#1a202c}.md\:to-red-100{--gradient-to-color:#fff5f5}.md\:to-red-200{--gradient-to-color:#fed7d7}.md\:to-red-300{--gradient-to-color:#feb2b2}.md\:to-red-400{--gradient-to-color:#fc8181}.md\:to-red-500{--gradient-to-color:#f56565}.md\:to-red-600{--gradient-to-color:#e53e3e}.md\:to-red-700{--gradient-to-color:#c53030}.md\:to-red-800{--gradient-to-color:#9b2c2c}.md\:to-red-900{--gradient-to-color:#742a2a}.md\:to-orange-100{--gradient-to-color:#fffaf0}.md\:to-orange-200{--gradient-to-color:#feebc8}.md\:to-orange-300{--gradient-to-color:#fbd38d}.md\:to-orange-400{--gradient-to-color:#f6ad55}.md\:to-orange-500{--gradient-to-color:#ed8936}.md\:to-orange-600{--gradient-to-color:#dd6b20}.md\:to-orange-700{--gradient-to-color:#c05621}.md\:to-orange-800{--gradient-to-color:#9c4221}.md\:to-orange-900{--gradient-to-color:#7b341e}.md\:to-yellow-100{--gradient-to-color:#fffff0}.md\:to-yellow-200{--gradient-to-color:#fefcbf}.md\:to-yellow-300{--gradient-to-color:#faf089}.md\:to-yellow-400{--gradient-to-color:#f6e05e}.md\:to-yellow-500{--gradient-to-color:#ecc94b}.md\:to-yellow-600{--gradient-to-color:#d69e2e}.md\:to-yellow-700{--gradient-to-color:#b7791f}.md\:to-yellow-800{--gradient-to-color:#975a16}.md\:to-yellow-900{--gradient-to-color:#744210}.md\:to-green-100{--gradient-to-color:#f0fff4}.md\:to-green-200{--gradient-to-color:#c6f6d5}.md\:to-green-300{--gradient-to-color:#9ae6b4}.md\:to-green-400{--gradient-to-color:#68d391}.md\:to-green-500{--gradient-to-color:#48bb78}.md\:to-green-600{--gradient-to-color:#38a169}.md\:to-green-700{--gradient-to-color:#2f855a}.md\:to-green-800{--gradient-to-color:#276749}.md\:to-green-900{--gradient-to-color:#22543d}.md\:to-teal-100{--gradient-to-color:#e6fffa}.md\:to-teal-200{--gradient-to-color:#b2f5ea}.md\:to-teal-300{--gradient-to-color:#81e6d9}.md\:to-teal-400{--gradient-to-color:#4fd1c5}.md\:to-teal-500{--gradient-to-color:#38b2ac}.md\:to-teal-600{--gradient-to-color:#319795}.md\:to-teal-700{--gradient-to-color:#2c7a7b}.md\:to-teal-800{--gradient-to-color:#285e61}.md\:to-teal-900{--gradient-to-color:#234e52}.md\:to-blue-100{--gradient-to-color:#ebf8ff}.md\:to-blue-200{--gradient-to-color:#bee3f8}.md\:to-blue-300{--gradient-to-color:#90cdf4}.md\:to-blue-400{--gradient-to-color:#63b3ed}.md\:to-blue-500{--gradient-to-color:#4299e1}.md\:to-blue-600{--gradient-to-color:#3182ce}.md\:to-blue-700{--gradient-to-color:#2b6cb0}.md\:to-blue-800{--gradient-to-color:#2c5282}.md\:to-blue-900{--gradient-to-color:#2a4365}.md\:to-indigo-100{--gradient-to-color:#ebf4ff}.md\:to-indigo-200{--gradient-to-color:#c3dafe}.md\:to-indigo-300{--gradient-to-color:#a3bffa}.md\:to-indigo-400{--gradient-to-color:#7f9cf5}.md\:to-indigo-500{--gradient-to-color:#667eea}.md\:to-indigo-600{--gradient-to-color:#5a67d8}.md\:to-indigo-700{--gradient-to-color:#4c51bf}.md\:to-indigo-800{--gradient-to-color:#434190}.md\:to-indigo-900{--gradient-to-color:#3c366b}.md\:to-purple-100{--gradient-to-color:#faf5ff}.md\:to-purple-200{--gradient-to-color:#e9d8fd}.md\:to-purple-300{--gradient-to-color:#d6bcfa}.md\:to-purple-400{--gradient-to-color:#b794f4}.md\:to-purple-500{--gradient-to-color:#9f7aea}.md\:to-purple-600{--gradient-to-color:#805ad5}.md\:to-purple-700{--gradient-to-color:#6b46c1}.md\:to-purple-800{--gradient-to-color:#553c9a}.md\:to-purple-900{--gradient-to-color:#44337a}.md\:to-pink-100{--gradient-to-color:#fff5f7}.md\:to-pink-200{--gradient-to-color:#fed7e2}.md\:to-pink-300{--gradient-to-color:#fbb6ce}.md\:to-pink-400{--gradient-to-color:#f687b3}.md\:to-pink-500{--gradient-to-color:#ed64a6}.md\:to-pink-600{--gradient-to-color:#d53f8c}.md\:to-pink-700{--gradient-to-color:#b83280}.md\:to-pink-800{--gradient-to-color:#97266d}.md\:to-pink-900{--gradient-to-color:#702459}.md\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:hover\:to-transparent:hover{--gradient-to-color:transparent}.md\:hover\:to-current:hover{--gradient-to-color:currentColor}.md\:hover\:to-black:hover{--gradient-to-color:#000}.md\:hover\:to-white:hover{--gradient-to-color:#fff}.md\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.md\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.md\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.md\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.md\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.md\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.md\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.md\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.md\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.md\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.md\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.md\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.md\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.md\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.md\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.md\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.md\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.md\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.md\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.md\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.md\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.md\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.md\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.md\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.md\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.md\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.md\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.md\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.md\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.md\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.md\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.md\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.md\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.md\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.md\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.md\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.md\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.md\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.md\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.md\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.md\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.md\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.md\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.md\:hover\:to-green-800:hover{--gradient-to-color:#276749}.md\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.md\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.md\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.md\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.md\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.md\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.md\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.md\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.md\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.md\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.md\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.md\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.md\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.md\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.md\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.md\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.md\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.md\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.md\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.md\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.md\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.md\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.md\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.md\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.md\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.md\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.md\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.md\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.md\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.md\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.md\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.md\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.md\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.md\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.md\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.md\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.md\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.md\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.md\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.md\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.md\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.md\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.md\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.md\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.md\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.md\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.md\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:focus\:to-transparent:focus{--gradient-to-color:transparent}.md\:focus\:to-current:focus{--gradient-to-color:currentColor}.md\:focus\:to-black:focus{--gradient-to-color:#000}.md\:focus\:to-white:focus{--gradient-to-color:#fff}.md\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.md\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.md\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.md\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.md\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.md\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.md\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.md\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.md\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.md\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.md\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.md\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.md\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.md\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.md\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.md\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.md\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.md\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.md\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.md\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.md\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.md\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.md\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.md\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.md\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.md\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.md\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.md\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.md\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.md\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.md\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.md\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.md\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.md\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.md\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.md\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.md\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.md\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.md\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.md\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.md\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.md\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.md\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.md\:focus\:to-green-800:focus{--gradient-to-color:#276749}.md\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.md\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.md\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.md\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.md\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.md\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.md\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.md\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.md\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.md\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.md\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.md\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.md\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.md\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.md\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.md\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.md\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.md\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.md\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.md\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.md\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.md\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.md\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.md\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.md\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.md\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.md\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.md\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.md\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.md\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.md\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.md\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.md\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.md\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.md\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.md\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.md\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.md\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.md\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.md\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.md\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.md\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.md\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.md\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.md\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.md\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.md\:bg-opacity-0{--bg-opacity:0}.md\:bg-opacity-25{--bg-opacity:0.25}.md\:bg-opacity-50{--bg-opacity:0.5}.md\:bg-opacity-75{--bg-opacity:0.75}.md\:bg-opacity-100{--bg-opacity:1}.md\:hover\:bg-opacity-0:hover{--bg-opacity:0}.md\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.md\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.md\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.md\:hover\:bg-opacity-100:hover{--bg-opacity:1}.md\:focus\:bg-opacity-0:focus{--bg-opacity:0}.md\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.md\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.md\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.md\:focus\:bg-opacity-100:focus{--bg-opacity:1}.md\:bg-bottom{background-position:bottom}.md\:bg-center{background-position:center}.md\:bg-left{background-position:left}.md\:bg-left-bottom{background-position:left bottom}.md\:bg-left-top{background-position:left top}.md\:bg-right{background-position:right}.md\:bg-right-bottom{background-position:right bottom}.md\:bg-right-top{background-position:right top}.md\:bg-top{background-position:top}.md\:bg-repeat{background-repeat:repeat}.md\:bg-no-repeat{background-repeat:no-repeat}.md\:bg-repeat-x{background-repeat:repeat-x}.md\:bg-repeat-y{background-repeat:repeat-y}.md\:bg-repeat-round{background-repeat:round}.md\:bg-repeat-space{background-repeat:space}.md\:bg-auto{background-size:auto}.md\:bg-cover{background-size:cover}.md\:bg-contain{background-size:contain}.md\:border-collapse{border-collapse:collapse}.md\:border-separate{border-collapse:separate}.md\:border-transparent{border-color:transparent}.md\:border-current{border-color:currentColor}.md\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.md\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.md\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.md\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.md\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.md\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.md\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.md\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.md\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.md\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.md\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.md\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.md\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.md\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.md\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.md\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.md\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.md\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.md\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.md\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.md\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.md\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.md\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.md\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.md\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.md\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.md\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.md\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.md\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.md\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.md\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.md\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.md\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.md\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.md\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.md\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.md\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.md\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.md\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.md\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.md\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.md\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.md\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.md\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.md\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.md\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.md\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.md\:hover\:border-transparent:hover{border-color:transparent}.md\:hover\:border-current:hover{border-color:currentColor}.md\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.md\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.md\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.md\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.md\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.md\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.md\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.md\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.md\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.md\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.md\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.md\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.md\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.md\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.md\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.md\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.md\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.md\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.md\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.md\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.md\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.md\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.md\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.md\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.md\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.md\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.md\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.md\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.md\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.md\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.md\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.md\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.md\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.md\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.md\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.md\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.md\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.md\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.md\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.md\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.md\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.md\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.md\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.md\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.md\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.md\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.md\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.md\:focus\:border-transparent:focus{border-color:transparent}.md\:focus\:border-current:focus{border-color:currentColor}.md\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.md\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.md\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.md\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.md\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.md\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.md\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.md\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.md\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.md\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.md\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.md\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.md\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.md\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.md\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.md\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.md\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.md\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.md\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.md\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.md\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.md\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.md\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.md\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.md\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.md\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.md\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.md\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.md\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.md\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.md\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.md\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.md\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.md\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.md\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.md\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.md\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.md\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.md\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.md\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.md\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.md\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.md\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.md\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.md\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.md\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.md\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.md\:border-opacity-0{--border-opacity:0}.md\:border-opacity-25{--border-opacity:0.25}.md\:border-opacity-50{--border-opacity:0.5}.md\:border-opacity-75{--border-opacity:0.75}.md\:border-opacity-100{--border-opacity:1}.md\:hover\:border-opacity-0:hover{--border-opacity:0}.md\:hover\:border-opacity-25:hover{--border-opacity:0.25}.md\:hover\:border-opacity-50:hover{--border-opacity:0.5}.md\:hover\:border-opacity-75:hover{--border-opacity:0.75}.md\:hover\:border-opacity-100:hover{--border-opacity:1}.md\:focus\:border-opacity-0:focus{--border-opacity:0}.md\:focus\:border-opacity-25:focus{--border-opacity:0.25}.md\:focus\:border-opacity-50:focus{--border-opacity:0.5}.md\:focus\:border-opacity-75:focus{--border-opacity:0.75}.md\:focus\:border-opacity-100:focus{--border-opacity:1}.md\:rounded-none{border-radius:0}.md\:rounded-sm{border-radius:.125rem}.md\:rounded{border-radius:.25rem}.md\:rounded-md{border-radius:.375rem}.md\:rounded-lg{border-radius:.5rem}.md\:rounded-xl{border-radius:.75rem}.md\:rounded-2xl{border-radius:1rem}.md\:rounded-3xl{border-radius:1.5rem}.md\:rounded-full{border-radius:9999px}.md\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.md\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.md\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.md\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.md\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.md\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.md\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.md\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.md\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.md\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.md\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.md\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.md\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.md\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.md\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.md\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.md\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.md\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.md\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.md\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.md\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.md\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.md\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.md\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.md\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.md\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.md\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.md\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.md\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.md\:rounded-tl-none{border-top-left-radius:0}.md\:rounded-tr-none{border-top-right-radius:0}.md\:rounded-br-none{border-bottom-right-radius:0}.md\:rounded-bl-none{border-bottom-left-radius:0}.md\:rounded-tl-sm{border-top-left-radius:.125rem}.md\:rounded-tr-sm{border-top-right-radius:.125rem}.md\:rounded-br-sm{border-bottom-right-radius:.125rem}.md\:rounded-bl-sm{border-bottom-left-radius:.125rem}.md\:rounded-tl{border-top-left-radius:.25rem}.md\:rounded-tr{border-top-right-radius:.25rem}.md\:rounded-br{border-bottom-right-radius:.25rem}.md\:rounded-bl{border-bottom-left-radius:.25rem}.md\:rounded-tl-md{border-top-left-radius:.375rem}.md\:rounded-tr-md{border-top-right-radius:.375rem}.md\:rounded-br-md{border-bottom-right-radius:.375rem}.md\:rounded-bl-md{border-bottom-left-radius:.375rem}.md\:rounded-tl-lg{border-top-left-radius:.5rem}.md\:rounded-tr-lg{border-top-right-radius:.5rem}.md\:rounded-br-lg{border-bottom-right-radius:.5rem}.md\:rounded-bl-lg{border-bottom-left-radius:.5rem}.md\:rounded-tl-xl{border-top-left-radius:.75rem}.md\:rounded-tr-xl{border-top-right-radius:.75rem}.md\:rounded-br-xl{border-bottom-right-radius:.75rem}.md\:rounded-bl-xl{border-bottom-left-radius:.75rem}.md\:rounded-tl-2xl{border-top-left-radius:1rem}.md\:rounded-tr-2xl{border-top-right-radius:1rem}.md\:rounded-br-2xl{border-bottom-right-radius:1rem}.md\:rounded-bl-2xl{border-bottom-left-radius:1rem}.md\:rounded-tl-3xl{border-top-left-radius:1.5rem}.md\:rounded-tr-3xl{border-top-right-radius:1.5rem}.md\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.md\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.md\:rounded-tl-full{border-top-left-radius:9999px}.md\:rounded-tr-full{border-top-right-radius:9999px}.md\:rounded-br-full{border-bottom-right-radius:9999px}.md\:rounded-bl-full{border-bottom-left-radius:9999px}.md\:border-solid{border-style:solid}.md\:border-dashed{border-style:dashed}.md\:border-dotted{border-style:dotted}.md\:border-double{border-style:double}.md\:border-none{border-style:none}.md\:border-0{border-width:0}.md\:border-2{border-width:2px}.md\:border-4{border-width:4px}.md\:border-8{border-width:8px}.md\:border{border-width:1px}.md\:border-t-0{border-top-width:0}.md\:border-r-0{border-right-width:0}.md\:border-b-0{border-bottom-width:0}.md\:border-l-0{border-left-width:0}.md\:border-t-2{border-top-width:2px}.md\:border-r-2{border-right-width:2px}.md\:border-b-2{border-bottom-width:2px}.md\:border-l-2{border-left-width:2px}.md\:border-t-4{border-top-width:4px}.md\:border-r-4{border-right-width:4px}.md\:border-b-4{border-bottom-width:4px}.md\:border-l-4{border-left-width:4px}.md\:border-t-8{border-top-width:8px}.md\:border-r-8{border-right-width:8px}.md\:border-b-8{border-bottom-width:8px}.md\:border-l-8{border-left-width:8px}.md\:border-t{border-top-width:1px}.md\:border-r{border-right-width:1px}.md\:border-b{border-bottom-width:1px}.md\:border-l{border-left-width:1px}.md\:box-border{box-sizing:border-box}.md\:box-content{box-sizing:content-box}.md\:cursor-auto{cursor:auto}.md\:cursor-default{cursor:default}.md\:cursor-pointer{cursor:pointer}.md\:cursor-wait{cursor:wait}.md\:cursor-text{cursor:text}.md\:cursor-move{cursor:move}.md\:cursor-not-allowed{cursor:not-allowed}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:table{display:table}.md\:table-caption{display:table-caption}.md\:table-cell{display:table-cell}.md\:table-column{display:table-column}.md\:table-column-group{display:table-column-group}.md\:table-footer-group{display:table-footer-group}.md\:table-header-group{display:table-header-group}.md\:table-row-group{display:table-row-group}.md\:table-row{display:table-row}.md\:flow-root{display:flow-root}.md\:grid{display:grid}.md\:inline-grid{display:inline-grid}.md\:contents{display:contents}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:flex-col{flex-direction:column}.md\:flex-col-reverse{flex-direction:column-reverse}.md\:flex-wrap{flex-wrap:wrap}.md\:flex-wrap-reverse{flex-wrap:wrap-reverse}.md\:flex-no-wrap{flex-wrap:nowrap}.md\:place-items-auto{place-items:auto}.md\:place-items-start{place-items:start}.md\:place-items-end{place-items:end}.md\:place-items-center{place-items:center}.md\:place-items-stretch{place-items:stretch}.md\:place-content-center{place-content:center}.md\:place-content-start{place-content:start}.md\:place-content-end{place-content:end}.md\:place-content-between{place-content:space-between}.md\:place-content-around{place-content:space-around}.md\:place-content-evenly{place-content:space-evenly}.md\:place-content-stretch{place-content:stretch}.md\:place-self-auto{place-self:auto}.md\:place-self-start{place-self:start}.md\:place-self-end{place-self:end}.md\:place-self-center{place-self:center}.md\:place-self-stretch{place-self:stretch}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:items-baseline{align-items:baseline}.md\:items-stretch{align-items:stretch}.md\:content-center{align-content:center}.md\:content-start{align-content:flex-start}.md\:content-end{align-content:flex-end}.md\:content-between{align-content:space-between}.md\:content-around{align-content:space-around}.md\:content-evenly{align-content:space-evenly}.md\:self-auto{align-self:auto}.md\:self-start{align-self:flex-start}.md\:self-end{align-self:flex-end}.md\:self-center{align-self:center}.md\:self-stretch{align-self:stretch}.md\:justify-items-auto{justify-items:auto}.md\:justify-items-start{justify-items:start}.md\:justify-items-end{justify-items:end}.md\:justify-items-center{justify-items:center}.md\:justify-items-stretch{justify-items:stretch}.md\:justify-start{justify-content:flex-start}.md\:justify-end{justify-content:flex-end}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:justify-around{justify-content:space-around}.md\:justify-evenly{justify-content:space-evenly}.md\:justify-self-auto{justify-self:auto}.md\:justify-self-start{justify-self:start}.md\:justify-self-end{justify-self:end}.md\:justify-self-center{justify-self:center}.md\:justify-self-stretch{justify-self:stretch}.md\:flex-1{flex:1 1 0%}.md\:flex-auto{flex:1 1 auto}.md\:flex-initial{flex:0 1 auto}.md\:flex-none{flex:none}.md\:flex-grow-0{flex-grow:0}.md\:flex-grow{flex-grow:1}.md\:flex-shrink-0{flex-shrink:0}.md\:flex-shrink{flex-shrink:1}.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:order-4{order:4}.md\:order-5{order:5}.md\:order-6{order:6}.md\:order-7{order:7}.md\:order-8{order:8}.md\:order-9{order:9}.md\:order-10{order:10}.md\:order-11{order:11}.md\:order-12{order:12}.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:order-none{order:0}.md\:float-right{float:right}.md\:float-left{float:left}.md\:float-none{float:none}.md\:clearfix:after{content:"";display:table;clear:both}.md\:clear-left{clear:left}.md\:clear-right{clear:right}.md\:clear-both{clear:both}.md\:clear-none{clear:none}.md\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.md\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.md\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.md\:font-hairline{font-weight:100}.md\:font-thin{font-weight:200}.md\:font-light{font-weight:300}.md\:font-normal{font-weight:400}.md\:font-medium{font-weight:500}.md\:font-semibold{font-weight:600}.md\:font-bold{font-weight:700}.md\:font-extrabold{font-weight:800}.md\:font-black{font-weight:900}.md\:hover\:font-hairline:hover{font-weight:100}.md\:hover\:font-thin:hover{font-weight:200}.md\:hover\:font-light:hover{font-weight:300}.md\:hover\:font-normal:hover{font-weight:400}.md\:hover\:font-medium:hover{font-weight:500}.md\:hover\:font-semibold:hover{font-weight:600}.md\:hover\:font-bold:hover{font-weight:700}.md\:hover\:font-extrabold:hover{font-weight:800}.md\:hover\:font-black:hover{font-weight:900}.md\:focus\:font-hairline:focus{font-weight:100}.md\:focus\:font-thin:focus{font-weight:200}.md\:focus\:font-light:focus{font-weight:300}.md\:focus\:font-normal:focus{font-weight:400}.md\:focus\:font-medium:focus{font-weight:500}.md\:focus\:font-semibold:focus{font-weight:600}.md\:focus\:font-bold:focus{font-weight:700}.md\:focus\:font-extrabold:focus{font-weight:800}.md\:focus\:font-black:focus{font-weight:900}.md\:h-0{height:0}.md\:h-1{height:.25rem}.md\:h-2{height:.5rem}.md\:h-3{height:.75rem}.md\:h-4{height:1rem}.md\:h-5{height:1.25rem}.md\:h-6{height:1.5rem}.md\:h-8{height:2rem}.md\:h-10{height:2.5rem}.md\:h-12{height:3rem}.md\:h-16{height:4rem}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-32{height:8rem}.md\:h-40{height:10rem}.md\:h-48{height:12rem}.md\:h-56{height:14rem}.md\:h-64{height:16rem}.md\:h-auto{height:auto}.md\:h-px{height:1px}.md\:h-full{height:100%}.md\:h-screen{height:100vh}.md\:text-xs{font-size:.75rem}.md\:text-sm{font-size:.875rem}.md\:text-base{font-size:1rem}.md\:text-lg{font-size:1.125rem}.md\:text-xl{font-size:1.25rem}.md\:text-2xl{font-size:1.5rem}.md\:text-3xl{font-size:1.875rem}.md\:text-4xl{font-size:2.25rem}.md\:text-5xl{font-size:3rem}.md\:text-6xl{font-size:4rem}.md\:leading-3{line-height:.75rem}.md\:leading-4{line-height:1rem}.md\:leading-5{line-height:1.25rem}.md\:leading-6{line-height:1.5rem}.md\:leading-7{line-height:1.75rem}.md\:leading-8{line-height:2rem}.md\:leading-9{line-height:2.25rem}.md\:leading-10{line-height:2.5rem}.md\:leading-none{line-height:1}.md\:leading-tight{line-height:1.25}.md\:leading-snug{line-height:1.375}.md\:leading-normal{line-height:1.5}.md\:leading-relaxed{line-height:1.625}.md\:leading-loose{line-height:2}.md\:list-inside{list-style-position:inside}.md\:list-outside{list-style-position:outside}.md\:list-none{list-style-type:none}.md\:list-disc{list-style-type:disc}.md\:list-decimal{list-style-type:decimal}.md\:m-0{margin:0}.md\:m-1{margin:.25rem}.md\:m-2{margin:.5rem}.md\:m-3{margin:.75rem}.md\:m-4{margin:1rem}.md\:m-5{margin:1.25rem}.md\:m-6{margin:1.5rem}.md\:m-8{margin:2rem}.md\:m-10{margin:2.5rem}.md\:m-12{margin:3rem}.md\:m-16{margin:4rem}.md\:m-20{margin:5rem}.md\:m-24{margin:6rem}.md\:m-32{margin:8rem}.md\:m-40{margin:10rem}.md\:m-48{margin:12rem}.md\:m-56{margin:14rem}.md\:m-64{margin:16rem}.md\:m-auto{margin:auto}.md\:m-px{margin:1px}.md\:-m-1{margin:-.25rem}.md\:-m-2{margin:-.5rem}.md\:-m-3{margin:-.75rem}.md\:-m-4{margin:-1rem}.md\:-m-5{margin:-1.25rem}.md\:-m-6{margin:-1.5rem}.md\:-m-8{margin:-2rem}.md\:-m-10{margin:-2.5rem}.md\:-m-12{margin:-3rem}.md\:-m-16{margin:-4rem}.md\:-m-20{margin:-5rem}.md\:-m-24{margin:-6rem}.md\:-m-32{margin:-8rem}.md\:-m-40{margin:-10rem}.md\:-m-48{margin:-12rem}.md\:-m-56{margin:-14rem}.md\:-m-64{margin:-16rem}.md\:-m-px{margin:-1px}.md\:my-0{margin-top:0;margin-bottom:0}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-1{margin-top:.25rem;margin-bottom:.25rem}.md\:mx-1{margin-left:.25rem;margin-right:.25rem}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mx-2{margin-left:.5rem;margin-right:.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:my-4{margin-top:1rem;margin-bottom:1rem}.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.md\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.md\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-8{margin-top:2rem;margin-bottom:2rem}.md\:mx-8{margin-left:2rem;margin-right:2rem}.md\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.md\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.md\:my-12{margin-top:3rem;margin-bottom:3rem}.md\:mx-12{margin-left:3rem;margin-right:3rem}.md\:my-16{margin-top:4rem;margin-bottom:4rem}.md\:mx-16{margin-left:4rem;margin-right:4rem}.md\:my-20{margin-top:5rem;margin-bottom:5rem}.md\:mx-20{margin-left:5rem;margin-right:5rem}.md\:my-24{margin-top:6rem;margin-bottom:6rem}.md\:mx-24{margin-left:6rem;margin-right:6rem}.md\:my-32{margin-top:8rem;margin-bottom:8rem}.md\:mx-32{margin-left:8rem;margin-right:8rem}.md\:my-40{margin-top:10rem;margin-bottom:10rem}.md\:mx-40{margin-left:10rem;margin-right:10rem}.md\:my-48{margin-top:12rem;margin-bottom:12rem}.md\:mx-48{margin-left:12rem;margin-right:12rem}.md\:my-56{margin-top:14rem;margin-bottom:14rem}.md\:mx-56{margin-left:14rem;margin-right:14rem}.md\:my-64{margin-top:16rem;margin-bottom:16rem}.md\:mx-64{margin-left:16rem;margin-right:16rem}.md\:my-auto{margin-top:auto;margin-bottom:auto}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:my-px{margin-top:1px;margin-bottom:1px}.md\:mx-px{margin-left:1px;margin-right:1px}.md\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.md\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.md\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.md\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.md\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.md\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.md\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\:-mx-4{margin-left:-1rem;margin-right:-1rem}.md\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.md\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.md\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.md\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.md\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.md\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.md\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.md\:-mx-12{margin-left:-3rem;margin-right:-3rem}.md\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.md\:-mx-16{margin-left:-4rem;margin-right:-4rem}.md\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.md\:-mx-20{margin-left:-5rem;margin-right:-5rem}.md\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.md\:-mx-24{margin-left:-6rem;margin-right:-6rem}.md\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.md\:-mx-32{margin-left:-8rem;margin-right:-8rem}.md\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.md\:-mx-40{margin-left:-10rem;margin-right:-10rem}.md\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.md\:-mx-48{margin-left:-12rem;margin-right:-12rem}.md\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.md\:-mx-56{margin-left:-14rem;margin-right:-14rem}.md\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.md\:-mx-64{margin-left:-16rem;margin-right:-16rem}.md\:-my-px{margin-top:-1px;margin-bottom:-1px}.md\:-mx-px{margin-left:-1px;margin-right:-1px}.md\:mt-0{margin-top:0}.md\:mr-0{margin-right:0}.md\:mb-0{margin-bottom:0}.md\:ml-0{margin-left:0}.md\:mt-1{margin-top:.25rem}.md\:mr-1{margin-right:.25rem}.md\:mb-1{margin-bottom:.25rem}.md\:ml-1{margin-left:.25rem}.md\:mt-2{margin-top:.5rem}.md\:mr-2{margin-right:.5rem}.md\:mb-2{margin-bottom:.5rem}.md\:ml-2{margin-left:.5rem}.md\:mt-3{margin-top:.75rem}.md\:mr-3{margin-right:.75rem}.md\:mb-3{margin-bottom:.75rem}.md\:ml-3{margin-left:.75rem}.md\:mt-4{margin-top:1rem}.md\:mr-4{margin-right:1rem}.md\:mb-4{margin-bottom:1rem}.md\:ml-4{margin-left:1rem}.md\:mt-5{margin-top:1.25rem}.md\:mr-5{margin-right:1.25rem}.md\:mb-5{margin-bottom:1.25rem}.md\:ml-5{margin-left:1.25rem}.md\:mt-6{margin-top:1.5rem}.md\:mr-6{margin-right:1.5rem}.md\:mb-6{margin-bottom:1.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mt-8{margin-top:2rem}.md\:mr-8{margin-right:2rem}.md\:mb-8{margin-bottom:2rem}.md\:ml-8{margin-left:2rem}.md\:mt-10{margin-top:2.5rem}.md\:mr-10{margin-right:2.5rem}.md\:mb-10{margin-bottom:2.5rem}.md\:ml-10{margin-left:2.5rem}.md\:mt-12{margin-top:3rem}.md\:mr-12{margin-right:3rem}.md\:mb-12{margin-bottom:3rem}.md\:ml-12{margin-left:3rem}.md\:mt-16{margin-top:4rem}.md\:mr-16{margin-right:4rem}.md\:mb-16{margin-bottom:4rem}.md\:ml-16{margin-left:4rem}.md\:mt-20{margin-top:5rem}.md\:mr-20{margin-right:5rem}.md\:mb-20{margin-bottom:5rem}.md\:ml-20{margin-left:5rem}.md\:mt-24{margin-top:6rem}.md\:mr-24{margin-right:6rem}.md\:mb-24{margin-bottom:6rem}.md\:ml-24{margin-left:6rem}.md\:mt-32{margin-top:8rem}.md\:mr-32{margin-right:8rem}.md\:mb-32{margin-bottom:8rem}.md\:ml-32{margin-left:8rem}.md\:mt-40{margin-top:10rem}.md\:mr-40{margin-right:10rem}.md\:mb-40{margin-bottom:10rem}.md\:ml-40{margin-left:10rem}.md\:mt-48{margin-top:12rem}.md\:mr-48{margin-right:12rem}.md\:mb-48{margin-bottom:12rem}.md\:ml-48{margin-left:12rem}.md\:mt-56{margin-top:14rem}.md\:mr-56{margin-right:14rem}.md\:mb-56{margin-bottom:14rem}.md\:ml-56{margin-left:14rem}.md\:mt-64{margin-top:16rem}.md\:mr-64{margin-right:16rem}.md\:mb-64{margin-bottom:16rem}.md\:ml-64{margin-left:16rem}.md\:mt-auto{margin-top:auto}.md\:mr-auto{margin-right:auto}.md\:mb-auto{margin-bottom:auto}.md\:ml-auto{margin-left:auto}.md\:mt-px{margin-top:1px}.md\:mr-px{margin-right:1px}.md\:mb-px{margin-bottom:1px}.md\:ml-px{margin-left:1px}.md\:-mt-1{margin-top:-.25rem}.md\:-mr-1{margin-right:-.25rem}.md\:-mb-1{margin-bottom:-.25rem}.md\:-ml-1{margin-left:-.25rem}.md\:-mt-2{margin-top:-.5rem}.md\:-mr-2{margin-right:-.5rem}.md\:-mb-2{margin-bottom:-.5rem}.md\:-ml-2{margin-left:-.5rem}.md\:-mt-3{margin-top:-.75rem}.md\:-mr-3{margin-right:-.75rem}.md\:-mb-3{margin-bottom:-.75rem}.md\:-ml-3{margin-left:-.75rem}.md\:-mt-4{margin-top:-1rem}.md\:-mr-4{margin-right:-1rem}.md\:-mb-4{margin-bottom:-1rem}.md\:-ml-4{margin-left:-1rem}.md\:-mt-5{margin-top:-1.25rem}.md\:-mr-5{margin-right:-1.25rem}.md\:-mb-5{margin-bottom:-1.25rem}.md\:-ml-5{margin-left:-1.25rem}.md\:-mt-6{margin-top:-1.5rem}.md\:-mr-6{margin-right:-1.5rem}.md\:-mb-6{margin-bottom:-1.5rem}.md\:-ml-6{margin-left:-1.5rem}.md\:-mt-8{margin-top:-2rem}.md\:-mr-8{margin-right:-2rem}.md\:-mb-8{margin-bottom:-2rem}.md\:-ml-8{margin-left:-2rem}.md\:-mt-10{margin-top:-2.5rem}.md\:-mr-10{margin-right:-2.5rem}.md\:-mb-10{margin-bottom:-2.5rem}.md\:-ml-10{margin-left:-2.5rem}.md\:-mt-12{margin-top:-3rem}.md\:-mr-12{margin-right:-3rem}.md\:-mb-12{margin-bottom:-3rem}.md\:-ml-12{margin-left:-3rem}.md\:-mt-16{margin-top:-4rem}.md\:-mr-16{margin-right:-4rem}.md\:-mb-16{margin-bottom:-4rem}.md\:-ml-16{margin-left:-4rem}.md\:-mt-20{margin-top:-5rem}.md\:-mr-20{margin-right:-5rem}.md\:-mb-20{margin-bottom:-5rem}.md\:-ml-20{margin-left:-5rem}.md\:-mt-24{margin-top:-6rem}.md\:-mr-24{margin-right:-6rem}.md\:-mb-24{margin-bottom:-6rem}.md\:-ml-24{margin-left:-6rem}.md\:-mt-32{margin-top:-8rem}.md\:-mr-32{margin-right:-8rem}.md\:-mb-32{margin-bottom:-8rem}.md\:-ml-32{margin-left:-8rem}.md\:-mt-40{margin-top:-10rem}.md\:-mr-40{margin-right:-10rem}.md\:-mb-40{margin-bottom:-10rem}.md\:-ml-40{margin-left:-10rem}.md\:-mt-48{margin-top:-12rem}.md\:-mr-48{margin-right:-12rem}.md\:-mb-48{margin-bottom:-12rem}.md\:-ml-48{margin-left:-12rem}.md\:-mt-56{margin-top:-14rem}.md\:-mr-56{margin-right:-14rem}.md\:-mb-56{margin-bottom:-14rem}.md\:-ml-56{margin-left:-14rem}.md\:-mt-64{margin-top:-16rem}.md\:-mr-64{margin-right:-16rem}.md\:-mb-64{margin-bottom:-16rem}.md\:-ml-64{margin-left:-16rem}.md\:-mt-px{margin-top:-1px}.md\:-mr-px{margin-right:-1px}.md\:-mb-px{margin-bottom:-1px}.md\:-ml-px{margin-left:-1px}.md\:max-h-full{max-height:100%}.md\:max-h-screen{max-height:100vh}.md\:max-w-none{max-width:none}.md\:max-w-xs{max-width:20rem}.md\:max-w-sm{max-width:24rem}.md\:max-w-md{max-width:28rem}.md\:max-w-lg{max-width:32rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-2xl{max-width:42rem}.md\:max-w-3xl{max-width:48rem}.md\:max-w-4xl{max-width:56rem}.md\:max-w-5xl{max-width:64rem}.md\:max-w-6xl{max-width:72rem}.md\:max-w-full{max-width:100%}.md\:max-w-screen-sm{max-width:640px}.md\:max-w-screen-md{max-width:768px}.md\:max-w-screen-lg{max-width:1024px}.md\:max-w-screen-xl{max-width:1280px}.md\:min-h-0{min-height:0}.md\:min-h-full{min-height:100%}.md\:min-h-screen{min-height:100vh}.md\:min-w-0{min-width:0}.md\:min-w-full{min-width:100%}.md\:object-contain{object-fit:contain}.md\:object-cover{object-fit:cover}.md\:object-fill{object-fit:fill}.md\:object-none{object-fit:none}.md\:object-scale-down{object-fit:scale-down}.md\:object-bottom{object-position:bottom}.md\:object-center{object-position:center}.md\:object-left{object-position:left}.md\:object-left-bottom{object-position:left bottom}.md\:object-left-top{object-position:left top}.md\:object-right{object-position:right}.md\:object-right-bottom{object-position:right bottom}.md\:object-right-top{object-position:right top}.md\:object-top{object-position:top}.md\:opacity-0{opacity:0}.md\:opacity-25{opacity:.25}.md\:opacity-50{opacity:.5}.md\:opacity-75{opacity:.75}.md\:opacity-100{opacity:1}.md\:hover\:opacity-0:hover{opacity:0}.md\:hover\:opacity-25:hover{opacity:.25}.md\:hover\:opacity-50:hover{opacity:.5}.md\:hover\:opacity-75:hover{opacity:.75}.md\:hover\:opacity-100:hover{opacity:1}.md\:focus\:opacity-0:focus{opacity:0}.md\:focus\:opacity-25:focus{opacity:.25}.md\:focus\:opacity-50:focus{opacity:.5}.md\:focus\:opacity-75:focus{opacity:.75}.md\:focus\:opacity-100:focus{opacity:1}.md\:outline-none{outline:2px solid transparent;outline-offset:2px}.md\:outline-white{outline:2px dotted #fff;outline-offset:2px}.md\:outline-black{outline:2px dotted #000;outline-offset:2px}.md\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.md\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.md\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.md\:overflow-auto{overflow:auto}.md\:overflow-hidden{overflow:hidden}.md\:overflow-visible{overflow:visible}.md\:overflow-scroll{overflow:scroll}.md\:overflow-x-auto{overflow-x:auto}.md\:overflow-y-auto{overflow-y:auto}.md\:overflow-x-hidden{overflow-x:hidden}.md\:overflow-y-hidden{overflow-y:hidden}.md\:overflow-x-visible{overflow-x:visible}.md\:overflow-y-visible{overflow-y:visible}.md\:overflow-x-scroll{overflow-x:scroll}.md\:overflow-y-scroll{overflow-y:scroll}.md\:scrolling-touch{-webkit-overflow-scrolling:touch}.md\:scrolling-auto{-webkit-overflow-scrolling:auto}.md\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.md\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.md\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.md\:overscroll-y-auto{overscroll-behavior-y:auto}.md\:overscroll-y-contain{overscroll-behavior-y:contain}.md\:overscroll-y-none{overscroll-behavior-y:none}.md\:overscroll-x-auto{overscroll-behavior-x:auto}.md\:overscroll-x-contain{overscroll-behavior-x:contain}.md\:overscroll-x-none{overscroll-behavior-x:none}.md\:p-0{padding:0}.md\:p-1{padding:.25rem}.md\:p-2{padding:.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-5{padding:1.25rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:p-10{padding:2.5rem}.md\:p-12{padding:3rem}.md\:p-16{padding:4rem}.md\:p-20{padding:5rem}.md\:p-24{padding:6rem}.md\:p-32{padding:8rem}.md\:p-40{padding:10rem}.md\:p-48{padding:12rem}.md\:p-56{padding:14rem}.md\:p-64{padding:16rem}.md\:p-px{padding:1px}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-0{padding-left:0;padding-right:0}.md\:py-1{padding-top:.25rem;padding-bottom:.25rem}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:py-12{padding-top:3rem;padding-bottom:3rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:py-16{padding-top:4rem;padding-bottom:4rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:py-24{padding-top:6rem;padding-bottom:6rem}.md\:px-24{padding-left:6rem;padding-right:6rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:px-32{padding-left:8rem;padding-right:8rem}.md\:py-40{padding-top:10rem;padding-bottom:10rem}.md\:px-40{padding-left:10rem;padding-right:10rem}.md\:py-48{padding-top:12rem;padding-bottom:12rem}.md\:px-48{padding-left:12rem;padding-right:12rem}.md\:py-56{padding-top:14rem;padding-bottom:14rem}.md\:px-56{padding-left:14rem;padding-right:14rem}.md\:py-64{padding-top:16rem;padding-bottom:16rem}.md\:px-64{padding-left:16rem;padding-right:16rem}.md\:py-px{padding-top:1px;padding-bottom:1px}.md\:px-px{padding-left:1px;padding-right:1px}.md\:pt-0{padding-top:0}.md\:pr-0{padding-right:0}.md\:pb-0{padding-bottom:0}.md\:pl-0{padding-left:0}.md\:pt-1{padding-top:.25rem}.md\:pr-1{padding-right:.25rem}.md\:pb-1{padding-bottom:.25rem}.md\:pl-1{padding-left:.25rem}.md\:pt-2{padding-top:.5rem}.md\:pr-2{padding-right:.5rem}.md\:pb-2{padding-bottom:.5rem}.md\:pl-2{padding-left:.5rem}.md\:pt-3{padding-top:.75rem}.md\:pr-3{padding-right:.75rem}.md\:pb-3{padding-bottom:.75rem}.md\:pl-3{padding-left:.75rem}.md\:pt-4{padding-top:1rem}.md\:pr-4{padding-right:1rem}.md\:pb-4{padding-bottom:1rem}.md\:pl-4{padding-left:1rem}.md\:pt-5{padding-top:1.25rem}.md\:pr-5{padding-right:1.25rem}.md\:pb-5{padding-bottom:1.25rem}.md\:pl-5{padding-left:1.25rem}.md\:pt-6{padding-top:1.5rem}.md\:pr-6{padding-right:1.5rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pl-6{padding-left:1.5rem}.md\:pt-8{padding-top:2rem}.md\:pr-8{padding-right:2rem}.md\:pb-8{padding-bottom:2rem}.md\:pl-8{padding-left:2rem}.md\:pt-10{padding-top:2.5rem}.md\:pr-10{padding-right:2.5rem}.md\:pb-10{padding-bottom:2.5rem}.md\:pl-10{padding-left:2.5rem}.md\:pt-12{padding-top:3rem}.md\:pr-12{padding-right:3rem}.md\:pb-12{padding-bottom:3rem}.md\:pl-12{padding-left:3rem}.md\:pt-16{padding-top:4rem}.md\:pr-16{padding-right:4rem}.md\:pb-16{padding-bottom:4rem}.md\:pl-16{padding-left:4rem}.md\:pt-20{padding-top:5rem}.md\:pr-20{padding-right:5rem}.md\:pb-20{padding-bottom:5rem}.md\:pl-20{padding-left:5rem}.md\:pt-24{padding-top:6rem}.md\:pr-24{padding-right:6rem}.md\:pb-24{padding-bottom:6rem}.md\:pl-24{padding-left:6rem}.md\:pt-32{padding-top:8rem}.md\:pr-32{padding-right:8rem}.md\:pb-32{padding-bottom:8rem}.md\:pl-32{padding-left:8rem}.md\:pt-40{padding-top:10rem}.md\:pr-40{padding-right:10rem}.md\:pb-40{padding-bottom:10rem}.md\:pl-40{padding-left:10rem}.md\:pt-48{padding-top:12rem}.md\:pr-48{padding-right:12rem}.md\:pb-48{padding-bottom:12rem}.md\:pl-48{padding-left:12rem}.md\:pt-56{padding-top:14rem}.md\:pr-56{padding-right:14rem}.md\:pb-56{padding-bottom:14rem}.md\:pl-56{padding-left:14rem}.md\:pt-64{padding-top:16rem}.md\:pr-64{padding-right:16rem}.md\:pb-64{padding-bottom:16rem}.md\:pl-64{padding-left:16rem}.md\:pt-px{padding-top:1px}.md\:pr-px{padding-right:1px}.md\:pb-px{padding-bottom:1px}.md\:pl-px{padding-left:1px}.md\:placeholder-transparent:-ms-input-placeholder{color:transparent}.md\:placeholder-transparent::-ms-input-placeholder{color:transparent}.md\:placeholder-transparent::placeholder{color:transparent}.md\:placeholder-current:-ms-input-placeholder{color:currentColor}.md\:placeholder-current::-ms-input-placeholder{color:currentColor}.md\:placeholder-current::placeholder{color:currentColor}.md\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.md\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.md\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.md\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.md\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.md\:focus\:placeholder-current:focus::placeholder{color:currentColor}.md\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.md\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.md\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.md\:pointer-events-none{pointer-events:none}.md\:pointer-events-auto{pointer-events:auto}.md\:static{position:static}.md\:fixed{position:fixed}.md\:absolute{position:absolute}.md\:relative{position:relative}.md\:sticky{position:-webkit-sticky;position:sticky}.md\:inset-0{top:0;right:0;bottom:0;left:0}.md\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.md\:inset-y-0{top:0;bottom:0}.md\:inset-x-0{right:0;left:0}.md\:inset-y-auto{top:auto;bottom:auto}.md\:inset-x-auto{right:auto;left:auto}.md\:top-0{top:0}.md\:right-0{right:0}.md\:bottom-0{bottom:0}.md\:left-0{left:0}.md\:top-auto{top:auto}.md\:right-auto{right:auto}.md\:bottom-auto{bottom:auto}.md\:left-auto{left:auto}.md\:resize-none{resize:none}.md\:resize-y{resize:vertical}.md\:resize-x{resize:horizontal}.md\:resize{resize:both}.md\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.md\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:shadow-none{box-shadow:none}.md\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.md\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:hover\:shadow-none:hover{box-shadow:none}.md\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.md\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:focus\:shadow-none:focus{box-shadow:none}.md\:fill-current{fill:currentColor}.md\:stroke-current{stroke:currentColor}.md\:stroke-0{stroke-width:0}.md\:stroke-1{stroke-width:1}.md\:stroke-2{stroke-width:2}.md\:table-auto{table-layout:auto}.md\:table-fixed{table-layout:fixed}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-right{text-align:right}.md\:text-justify{text-align:justify}.md\:text-transparent{color:transparent}.md\:text-current{color:currentColor}.md\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.md\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.md\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.md\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.md\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.md\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.md\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.md\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.md\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.md\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.md\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.md\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.md\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.md\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.md\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.md\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.md\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.md\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.md\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.md\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.md\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.md\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.md\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.md\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.md\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.md\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.md\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.md\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.md\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.md\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.md\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.md\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.md\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.md\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.md\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.md\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.md\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.md\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.md\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.md\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.md\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.md\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.md\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.md\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.md\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.md\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.md\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.md\:hover\:text-transparent:hover{color:transparent}.md\:hover\:text-current:hover{color:currentColor}.md\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.md\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.md\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.md\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.md\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.md\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.md\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.md\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.md\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.md\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.md\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.md\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.md\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.md\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.md\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.md\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.md\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.md\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.md\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.md\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.md\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.md\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.md\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.md\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.md\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.md\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.md\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.md\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.md\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.md\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.md\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.md\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.md\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.md\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.md\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.md\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.md\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.md\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.md\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.md\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.md\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.md\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.md\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.md\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.md\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.md\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.md\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.md\:focus\:text-transparent:focus{color:transparent}.md\:focus\:text-current:focus{color:currentColor}.md\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.md\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.md\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.md\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.md\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.md\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.md\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.md\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.md\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.md\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.md\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.md\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.md\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.md\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.md\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.md\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.md\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.md\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.md\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.md\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.md\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.md\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.md\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.md\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.md\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.md\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.md\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.md\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.md\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.md\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.md\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.md\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.md\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.md\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.md\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.md\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.md\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.md\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.md\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.md\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.md\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.md\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.md\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.md\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.md\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.md\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.md\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.md\:text-opacity-0{--text-opacity:0}.md\:text-opacity-25{--text-opacity:0.25}.md\:text-opacity-50{--text-opacity:0.5}.md\:text-opacity-75{--text-opacity:0.75}.md\:text-opacity-100{--text-opacity:1}.md\:hover\:text-opacity-0:hover{--text-opacity:0}.md\:hover\:text-opacity-25:hover{--text-opacity:0.25}.md\:hover\:text-opacity-50:hover{--text-opacity:0.5}.md\:hover\:text-opacity-75:hover{--text-opacity:0.75}.md\:hover\:text-opacity-100:hover{--text-opacity:1}.md\:focus\:text-opacity-0:focus{--text-opacity:0}.md\:focus\:text-opacity-25:focus{--text-opacity:0.25}.md\:focus\:text-opacity-50:focus{--text-opacity:0.5}.md\:focus\:text-opacity-75:focus{--text-opacity:0.75}.md\:focus\:text-opacity-100:focus{--text-opacity:1}.md\:italic{font-style:italic}.md\:not-italic{font-style:normal}.md\:uppercase{text-transform:uppercase}.md\:lowercase{text-transform:lowercase}.md\:capitalize{text-transform:capitalize}.md\:normal-case{text-transform:none}.md\:underline{text-decoration:underline}.md\:line-through{text-decoration:line-through}.md\:no-underline{text-decoration:none}.md\:hover\:underline:hover{text-decoration:underline}.md\:hover\:line-through:hover{text-decoration:line-through}.md\:hover\:no-underline:hover{text-decoration:none}.md\:focus\:underline:focus{text-decoration:underline}.md\:focus\:line-through:focus{text-decoration:line-through}.md\:focus\:no-underline:focus{text-decoration:none}.md\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\:diagonal-fractions,.md\:lining-nums,.md\:oldstyle-nums,.md\:ordinal,.md\:proportional-nums,.md\:slashed-zero,.md\:stacked-fractions,.md\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.md\:normal-nums{font-variant-numeric:normal}.md\:ordinal{--font-variant-numeric-ordinal:ordinal}.md\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.md\:lining-nums{--font-variant-numeric-figure:lining-nums}.md\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.md\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.md\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.md\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.md\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.md\:tracking-tighter{letter-spacing:-.05em}.md\:tracking-tight{letter-spacing:-.025em}.md\:tracking-normal{letter-spacing:0}.md\:tracking-wide{letter-spacing:.025em}.md\:tracking-wider{letter-spacing:.05em}.md\:tracking-widest{letter-spacing:.1em}.md\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.md\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.md\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.md\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.md\:align-baseline{vertical-align:baseline}.md\:align-top{vertical-align:top}.md\:align-middle{vertical-align:middle}.md\:align-bottom{vertical-align:bottom}.md\:align-text-top{vertical-align:text-top}.md\:align-text-bottom{vertical-align:text-bottom}.md\:visible{visibility:visible}.md\:invisible{visibility:hidden}.md\:whitespace-normal{white-space:normal}.md\:whitespace-no-wrap{white-space:nowrap}.md\:whitespace-pre{white-space:pre}.md\:whitespace-pre-line{white-space:pre-line}.md\:whitespace-pre-wrap{white-space:pre-wrap}.md\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.md\:break-words{word-wrap:break-word;overflow-wrap:break-word}.md\:break-all{word-break:break-all}.md\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md\:w-0{width:0}.md\:w-1{width:.25rem}.md\:w-2{width:.5rem}.md\:w-3{width:.75rem}.md\:w-4{width:1rem}.md\:w-5{width:1.25rem}.md\:w-6{width:1.5rem}.md\:w-8{width:2rem}.md\:w-10{width:2.5rem}.md\:w-12{width:3rem}.md\:w-16{width:4rem}.md\:w-20{width:5rem}.md\:w-24{width:6rem}.md\:w-32{width:8rem}.md\:w-40{width:10rem}.md\:w-48{width:12rem}.md\:w-56{width:14rem}.md\:w-64{width:16rem}.md\:w-auto{width:auto}.md\:w-px{width:1px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:w-2\/3{width:66.666667%}.md\:w-1\/4{width:25%}.md\:w-2\/4{width:50%}.md\:w-3\/4{width:75%}.md\:w-1\/5{width:20%}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:w-4\/5{width:80%}.md\:w-1\/6{width:16.666667%}.md\:w-2\/6{width:33.333333%}.md\:w-3\/6{width:50%}.md\:w-4\/6{width:66.666667%}.md\:w-5\/6{width:83.333333%}.md\:w-1\/12{width:8.333333%}.md\:w-2\/12{width:16.666667%}.md\:w-3\/12{width:25%}.md\:w-4\/12{width:33.333333%}.md\:w-5\/12{width:41.666667%}.md\:w-6\/12{width:50%}.md\:w-7\/12{width:58.333333%}.md\:w-8\/12{width:66.666667%}.md\:w-9\/12{width:75%}.md\:w-10\/12{width:83.333333%}.md\:w-11\/12{width:91.666667%}.md\:w-full{width:100%}.md\:w-screen{width:100vw}.md\:z-0{z-index:0}.md\:z-10{z-index:10}.md\:z-20{z-index:20}.md\:z-30{z-index:30}.md\:z-40{z-index:40}.md\:z-50{z-index:50}.md\:z-auto{z-index:auto}.md\:gap-0{grid-gap:0;gap:0}.md\:gap-1{grid-gap:.25rem;gap:.25rem}.md\:gap-2{grid-gap:.5rem;gap:.5rem}.md\:gap-3{grid-gap:.75rem;gap:.75rem}.md\:gap-4{grid-gap:1rem;gap:1rem}.md\:gap-5{grid-gap:1.25rem;gap:1.25rem}.md\:gap-6{grid-gap:1.5rem;gap:1.5rem}.md\:gap-8{grid-gap:2rem;gap:2rem}.md\:gap-10{grid-gap:2.5rem;gap:2.5rem}.md\:gap-12{grid-gap:3rem;gap:3rem}.md\:gap-16{grid-gap:4rem;gap:4rem}.md\:gap-20{grid-gap:5rem;gap:5rem}.md\:gap-24{grid-gap:6rem;gap:6rem}.md\:gap-32{grid-gap:8rem;gap:8rem}.md\:gap-40{grid-gap:10rem;gap:10rem}.md\:gap-48{grid-gap:12rem;gap:12rem}.md\:gap-56{grid-gap:14rem;gap:14rem}.md\:gap-64{grid-gap:16rem;gap:16rem}.md\:gap-px{grid-gap:1px;gap:1px}.md\:col-gap-0{grid-column-gap:0;column-gap:0}.md\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.md\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.md\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.md\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.md\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.md\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.md\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.md\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.md\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.md\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.md\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.md\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.md\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.md\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.md\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.md\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.md\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.md\:col-gap-px{grid-column-gap:1px;column-gap:1px}.md\:gap-x-0{grid-column-gap:0;column-gap:0}.md\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.md\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.md\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.md\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.md\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.md\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.md\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.md\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.md\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.md\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.md\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.md\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.md\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.md\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.md\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.md\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.md\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.md\:gap-x-px{grid-column-gap:1px;column-gap:1px}.md\:row-gap-0{grid-row-gap:0;row-gap:0}.md\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.md\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.md\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.md\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.md\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.md\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.md\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.md\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.md\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.md\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.md\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.md\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.md\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.md\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.md\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.md\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.md\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.md\:row-gap-px{grid-row-gap:1px;row-gap:1px}.md\:gap-y-0{grid-row-gap:0;row-gap:0}.md\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.md\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.md\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.md\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.md\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.md\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.md\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.md\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.md\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.md\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.md\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.md\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.md\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.md\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.md\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.md\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.md\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.md\:gap-y-px{grid-row-gap:1px;row-gap:1px}.md\:grid-flow-row{grid-auto-flow:row}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-flow-row-dense{grid-auto-flow:row dense}.md\:grid-flow-col-dense{grid-auto-flow:column dense}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}.md\:auto-cols-auto{grid-auto-columns:auto}.md\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.md\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.md\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.md\:col-auto{grid-column:auto}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-full{grid-column:1/-1}.md\:col-start-1{grid-column-start:1}.md\:col-start-2{grid-column-start:2}.md\:col-start-3{grid-column-start:3}.md\:col-start-4{grid-column-start:4}.md\:col-start-5{grid-column-start:5}.md\:col-start-6{grid-column-start:6}.md\:col-start-7{grid-column-start:7}.md\:col-start-8{grid-column-start:8}.md\:col-start-9{grid-column-start:9}.md\:col-start-10{grid-column-start:10}.md\:col-start-11{grid-column-start:11}.md\:col-start-12{grid-column-start:12}.md\:col-start-13{grid-column-start:13}.md\:col-start-auto{grid-column-start:auto}.md\:col-end-1{grid-column-end:1}.md\:col-end-2{grid-column-end:2}.md\:col-end-3{grid-column-end:3}.md\:col-end-4{grid-column-end:4}.md\:col-end-5{grid-column-end:5}.md\:col-end-6{grid-column-end:6}.md\:col-end-7{grid-column-end:7}.md\:col-end-8{grid-column-end:8}.md\:col-end-9{grid-column-end:9}.md\:col-end-10{grid-column-end:10}.md\:col-end-11{grid-column-end:11}.md\:col-end-12{grid-column-end:12}.md\:col-end-13{grid-column-end:13}.md\:col-end-auto{grid-column-end:auto}.md\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.md\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.md\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.md\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.md\:grid-rows-none{grid-template-rows:none}.md\:auto-rows-auto{grid-auto-rows:auto}.md\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.md\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.md\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.md\:row-auto{grid-row:auto}.md\:row-span-1{grid-row:span 1/span 1}.md\:row-span-2{grid-row:span 2/span 2}.md\:row-span-3{grid-row:span 3/span 3}.md\:row-span-4{grid-row:span 4/span 4}.md\:row-span-5{grid-row:span 5/span 5}.md\:row-span-6{grid-row:span 6/span 6}.md\:row-span-full{grid-row:1/-1}.md\:row-start-1{grid-row-start:1}.md\:row-start-2{grid-row-start:2}.md\:row-start-3{grid-row-start:3}.md\:row-start-4{grid-row-start:4}.md\:row-start-5{grid-row-start:5}.md\:row-start-6{grid-row-start:6}.md\:row-start-7{grid-row-start:7}.md\:row-start-auto{grid-row-start:auto}.md\:row-end-1{grid-row-end:1}.md\:row-end-2{grid-row-end:2}.md\:row-end-3{grid-row-end:3}.md\:row-end-4{grid-row-end:4}.md\:row-end-5{grid-row-end:5}.md\:row-end-6{grid-row-end:6}.md\:row-end-7{grid-row-end:7}.md\:row-end-auto{grid-row-end:auto}.md\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.md\:transform-none{transform:none}.md\:origin-center{transform-origin:center}.md\:origin-top{transform-origin:top}.md\:origin-top-right{transform-origin:top right}.md\:origin-right{transform-origin:right}.md\:origin-bottom-right{transform-origin:bottom right}.md\:origin-bottom{transform-origin:bottom}.md\:origin-bottom-left{transform-origin:bottom left}.md\:origin-left{transform-origin:left}.md\:origin-top-left{transform-origin:top left}.md\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.md\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.md\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.md\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.md\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.md\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.md\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:scale-x-0{--transform-scale-x:0}.md\:scale-x-50{--transform-scale-x:.5}.md\:scale-x-75{--transform-scale-x:.75}.md\:scale-x-90{--transform-scale-x:.9}.md\:scale-x-95{--transform-scale-x:.95}.md\:scale-x-100{--transform-scale-x:1}.md\:scale-x-105{--transform-scale-x:1.05}.md\:scale-x-110{--transform-scale-x:1.1}.md\:scale-x-125{--transform-scale-x:1.25}.md\:scale-x-150{--transform-scale-x:1.5}.md\:scale-y-0{--transform-scale-y:0}.md\:scale-y-50{--transform-scale-y:.5}.md\:scale-y-75{--transform-scale-y:.75}.md\:scale-y-90{--transform-scale-y:.9}.md\:scale-y-95{--transform-scale-y:.95}.md\:scale-y-100{--transform-scale-y:1}.md\:scale-y-105{--transform-scale-y:1.05}.md\:scale-y-110{--transform-scale-y:1.1}.md\:scale-y-125{--transform-scale-y:1.25}.md\:scale-y-150{--transform-scale-y:1.5}.md\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.md\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.md\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.md\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.md\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.md\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.md\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:hover\:scale-x-0:hover{--transform-scale-x:0}.md\:hover\:scale-x-50:hover{--transform-scale-x:.5}.md\:hover\:scale-x-75:hover{--transform-scale-x:.75}.md\:hover\:scale-x-90:hover{--transform-scale-x:.9}.md\:hover\:scale-x-95:hover{--transform-scale-x:.95}.md\:hover\:scale-x-100:hover{--transform-scale-x:1}.md\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.md\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.md\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.md\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.md\:hover\:scale-y-0:hover{--transform-scale-y:0}.md\:hover\:scale-y-50:hover{--transform-scale-y:.5}.md\:hover\:scale-y-75:hover{--transform-scale-y:.75}.md\:hover\:scale-y-90:hover{--transform-scale-y:.9}.md\:hover\:scale-y-95:hover{--transform-scale-y:.95}.md\:hover\:scale-y-100:hover{--transform-scale-y:1}.md\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.md\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.md\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.md\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.md\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.md\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.md\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.md\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.md\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.md\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.md\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:focus\:scale-x-0:focus{--transform-scale-x:0}.md\:focus\:scale-x-50:focus{--transform-scale-x:.5}.md\:focus\:scale-x-75:focus{--transform-scale-x:.75}.md\:focus\:scale-x-90:focus{--transform-scale-x:.9}.md\:focus\:scale-x-95:focus{--transform-scale-x:.95}.md\:focus\:scale-x-100:focus{--transform-scale-x:1}.md\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.md\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.md\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.md\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.md\:focus\:scale-y-0:focus{--transform-scale-y:0}.md\:focus\:scale-y-50:focus{--transform-scale-y:.5}.md\:focus\:scale-y-75:focus{--transform-scale-y:.75}.md\:focus\:scale-y-90:focus{--transform-scale-y:.9}.md\:focus\:scale-y-95:focus{--transform-scale-y:.95}.md\:focus\:scale-y-100:focus{--transform-scale-y:1}.md\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.md\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.md\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.md\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.md\:rotate-0{--transform-rotate:0}.md\:rotate-1{--transform-rotate:1deg}.md\:rotate-2{--transform-rotate:2deg}.md\:rotate-3{--transform-rotate:3deg}.md\:rotate-6{--transform-rotate:6deg}.md\:rotate-12{--transform-rotate:12deg}.md\:rotate-45{--transform-rotate:45deg}.md\:rotate-90{--transform-rotate:90deg}.md\:rotate-180{--transform-rotate:180deg}.md\:-rotate-180{--transform-rotate:-180deg}.md\:-rotate-90{--transform-rotate:-90deg}.md\:-rotate-45{--transform-rotate:-45deg}.md\:-rotate-12{--transform-rotate:-12deg}.md\:-rotate-6{--transform-rotate:-6deg}.md\:-rotate-3{--transform-rotate:-3deg}.md\:-rotate-2{--transform-rotate:-2deg}.md\:-rotate-1{--transform-rotate:-1deg}.md\:hover\:rotate-0:hover{--transform-rotate:0}.md\:hover\:rotate-1:hover{--transform-rotate:1deg}.md\:hover\:rotate-2:hover{--transform-rotate:2deg}.md\:hover\:rotate-3:hover{--transform-rotate:3deg}.md\:hover\:rotate-6:hover{--transform-rotate:6deg}.md\:hover\:rotate-12:hover{--transform-rotate:12deg}.md\:hover\:rotate-45:hover{--transform-rotate:45deg}.md\:hover\:rotate-90:hover{--transform-rotate:90deg}.md\:hover\:rotate-180:hover{--transform-rotate:180deg}.md\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.md\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.md\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.md\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.md\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.md\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.md\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.md\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.md\:focus\:rotate-0:focus{--transform-rotate:0}.md\:focus\:rotate-1:focus{--transform-rotate:1deg}.md\:focus\:rotate-2:focus{--transform-rotate:2deg}.md\:focus\:rotate-3:focus{--transform-rotate:3deg}.md\:focus\:rotate-6:focus{--transform-rotate:6deg}.md\:focus\:rotate-12:focus{--transform-rotate:12deg}.md\:focus\:rotate-45:focus{--transform-rotate:45deg}.md\:focus\:rotate-90:focus{--transform-rotate:90deg}.md\:focus\:rotate-180:focus{--transform-rotate:180deg}.md\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.md\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.md\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.md\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.md\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.md\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.md\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.md\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.md\:translate-x-0{--transform-translate-x:0}.md\:translate-x-1{--transform-translate-x:0.25rem}.md\:translate-x-2{--transform-translate-x:0.5rem}.md\:translate-x-3{--transform-translate-x:0.75rem}.md\:translate-x-4{--transform-translate-x:1rem}.md\:translate-x-5{--transform-translate-x:1.25rem}.md\:translate-x-6{--transform-translate-x:1.5rem}.md\:translate-x-8{--transform-translate-x:2rem}.md\:translate-x-10{--transform-translate-x:2.5rem}.md\:translate-x-12{--transform-translate-x:3rem}.md\:translate-x-16{--transform-translate-x:4rem}.md\:translate-x-20{--transform-translate-x:5rem}.md\:translate-x-24{--transform-translate-x:6rem}.md\:translate-x-32{--transform-translate-x:8rem}.md\:translate-x-40{--transform-translate-x:10rem}.md\:translate-x-48{--transform-translate-x:12rem}.md\:translate-x-56{--transform-translate-x:14rem}.md\:translate-x-64{--transform-translate-x:16rem}.md\:translate-x-px{--transform-translate-x:1px}.md\:-translate-x-1{--transform-translate-x:-0.25rem}.md\:-translate-x-2{--transform-translate-x:-0.5rem}.md\:-translate-x-3{--transform-translate-x:-0.75rem}.md\:-translate-x-4{--transform-translate-x:-1rem}.md\:-translate-x-5{--transform-translate-x:-1.25rem}.md\:-translate-x-6{--transform-translate-x:-1.5rem}.md\:-translate-x-8{--transform-translate-x:-2rem}.md\:-translate-x-10{--transform-translate-x:-2.5rem}.md\:-translate-x-12{--transform-translate-x:-3rem}.md\:-translate-x-16{--transform-translate-x:-4rem}.md\:-translate-x-20{--transform-translate-x:-5rem}.md\:-translate-x-24{--transform-translate-x:-6rem}.md\:-translate-x-32{--transform-translate-x:-8rem}.md\:-translate-x-40{--transform-translate-x:-10rem}.md\:-translate-x-48{--transform-translate-x:-12rem}.md\:-translate-x-56{--transform-translate-x:-14rem}.md\:-translate-x-64{--transform-translate-x:-16rem}.md\:-translate-x-px{--transform-translate-x:-1px}.md\:-translate-x-full{--transform-translate-x:-100%}.md\:-translate-x-1\/2{--transform-translate-x:-50%}.md\:translate-x-1\/2{--transform-translate-x:50%}.md\:translate-x-full{--transform-translate-x:100%}.md\:translate-y-0{--transform-translate-y:0}.md\:translate-y-1{--transform-translate-y:0.25rem}.md\:translate-y-2{--transform-translate-y:0.5rem}.md\:translate-y-3{--transform-translate-y:0.75rem}.md\:translate-y-4{--transform-translate-y:1rem}.md\:translate-y-5{--transform-translate-y:1.25rem}.md\:translate-y-6{--transform-translate-y:1.5rem}.md\:translate-y-8{--transform-translate-y:2rem}.md\:translate-y-10{--transform-translate-y:2.5rem}.md\:translate-y-12{--transform-translate-y:3rem}.md\:translate-y-16{--transform-translate-y:4rem}.md\:translate-y-20{--transform-translate-y:5rem}.md\:translate-y-24{--transform-translate-y:6rem}.md\:translate-y-32{--transform-translate-y:8rem}.md\:translate-y-40{--transform-translate-y:10rem}.md\:translate-y-48{--transform-translate-y:12rem}.md\:translate-y-56{--transform-translate-y:14rem}.md\:translate-y-64{--transform-translate-y:16rem}.md\:translate-y-px{--transform-translate-y:1px}.md\:-translate-y-1{--transform-translate-y:-0.25rem}.md\:-translate-y-2{--transform-translate-y:-0.5rem}.md\:-translate-y-3{--transform-translate-y:-0.75rem}.md\:-translate-y-4{--transform-translate-y:-1rem}.md\:-translate-y-5{--transform-translate-y:-1.25rem}.md\:-translate-y-6{--transform-translate-y:-1.5rem}.md\:-translate-y-8{--transform-translate-y:-2rem}.md\:-translate-y-10{--transform-translate-y:-2.5rem}.md\:-translate-y-12{--transform-translate-y:-3rem}.md\:-translate-y-16{--transform-translate-y:-4rem}.md\:-translate-y-20{--transform-translate-y:-5rem}.md\:-translate-y-24{--transform-translate-y:-6rem}.md\:-translate-y-32{--transform-translate-y:-8rem}.md\:-translate-y-40{--transform-translate-y:-10rem}.md\:-translate-y-48{--transform-translate-y:-12rem}.md\:-translate-y-56{--transform-translate-y:-14rem}.md\:-translate-y-64{--transform-translate-y:-16rem}.md\:-translate-y-px{--transform-translate-y:-1px}.md\:-translate-y-full{--transform-translate-y:-100%}.md\:-translate-y-1\/2{--transform-translate-y:-50%}.md\:translate-y-1\/2{--transform-translate-y:50%}.md\:translate-y-full{--transform-translate-y:100%}.md\:hover\:translate-x-0:hover{--transform-translate-x:0}.md\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.md\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.md\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.md\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.md\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.md\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.md\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.md\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.md\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.md\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.md\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.md\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.md\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.md\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.md\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.md\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.md\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.md\:hover\:translate-x-px:hover{--transform-translate-x:1px}.md\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.md\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.md\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.md\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.md\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.md\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.md\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.md\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.md\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.md\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.md\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.md\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.md\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.md\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.md\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.md\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.md\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.md\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.md\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.md\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.md\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.md\:hover\:translate-x-full:hover{--transform-translate-x:100%}.md\:hover\:translate-y-0:hover{--transform-translate-y:0}.md\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.md\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.md\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.md\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.md\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.md\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.md\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.md\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.md\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.md\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.md\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.md\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.md\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.md\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.md\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.md\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.md\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.md\:hover\:translate-y-px:hover{--transform-translate-y:1px}.md\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.md\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.md\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.md\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.md\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.md\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.md\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.md\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.md\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.md\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.md\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.md\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.md\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.md\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.md\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.md\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.md\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.md\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.md\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.md\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.md\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.md\:hover\:translate-y-full:hover{--transform-translate-y:100%}.md\:focus\:translate-x-0:focus{--transform-translate-x:0}.md\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.md\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.md\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.md\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.md\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.md\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.md\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.md\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.md\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.md\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.md\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.md\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.md\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.md\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.md\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.md\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.md\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.md\:focus\:translate-x-px:focus{--transform-translate-x:1px}.md\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.md\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.md\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.md\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.md\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.md\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.md\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.md\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.md\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.md\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.md\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.md\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.md\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.md\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.md\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.md\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.md\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.md\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.md\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.md\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.md\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.md\:focus\:translate-x-full:focus{--transform-translate-x:100%}.md\:focus\:translate-y-0:focus{--transform-translate-y:0}.md\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.md\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.md\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.md\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.md\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.md\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.md\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.md\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.md\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.md\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.md\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.md\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.md\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.md\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.md\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.md\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.md\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.md\:focus\:translate-y-px:focus{--transform-translate-y:1px}.md\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.md\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.md\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.md\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.md\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.md\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.md\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.md\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.md\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.md\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.md\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.md\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.md\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.md\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.md\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.md\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.md\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.md\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.md\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.md\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.md\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.md\:focus\:translate-y-full:focus{--transform-translate-y:100%}.md\:skew-x-0{--transform-skew-x:0}.md\:skew-x-1{--transform-skew-x:1deg}.md\:skew-x-2{--transform-skew-x:2deg}.md\:skew-x-3{--transform-skew-x:3deg}.md\:skew-x-6{--transform-skew-x:6deg}.md\:skew-x-12{--transform-skew-x:12deg}.md\:-skew-x-12{--transform-skew-x:-12deg}.md\:-skew-x-6{--transform-skew-x:-6deg}.md\:-skew-x-3{--transform-skew-x:-3deg}.md\:-skew-x-2{--transform-skew-x:-2deg}.md\:-skew-x-1{--transform-skew-x:-1deg}.md\:skew-y-0{--transform-skew-y:0}.md\:skew-y-1{--transform-skew-y:1deg}.md\:skew-y-2{--transform-skew-y:2deg}.md\:skew-y-3{--transform-skew-y:3deg}.md\:skew-y-6{--transform-skew-y:6deg}.md\:skew-y-12{--transform-skew-y:12deg}.md\:-skew-y-12{--transform-skew-y:-12deg}.md\:-skew-y-6{--transform-skew-y:-6deg}.md\:-skew-y-3{--transform-skew-y:-3deg}.md\:-skew-y-2{--transform-skew-y:-2deg}.md\:-skew-y-1{--transform-skew-y:-1deg}.md\:hover\:skew-x-0:hover{--transform-skew-x:0}.md\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.md\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.md\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.md\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.md\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.md\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.md\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.md\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.md\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.md\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.md\:hover\:skew-y-0:hover{--transform-skew-y:0}.md\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.md\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.md\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.md\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.md\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.md\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.md\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.md\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.md\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.md\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.md\:focus\:skew-x-0:focus{--transform-skew-x:0}.md\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.md\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.md\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.md\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.md\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.md\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.md\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.md\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.md\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.md\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.md\:focus\:skew-y-0:focus{--transform-skew-y:0}.md\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.md\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.md\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.md\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.md\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.md\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.md\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.md\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.md\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.md\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.md\:transition-none{transition-property:none}.md\:transition-all{transition-property:all}.md\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.md\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.md\:transition-opacity{transition-property:opacity}.md\:transition-shadow{transition-property:box-shadow}.md\:transition-transform{transition-property:transform}.md\:ease-linear{transition-timing-function:linear}.md\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.md\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.md\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.md\:duration-75{transition-duration:75ms}.md\:duration-100{transition-duration:.1s}.md\:duration-150{transition-duration:150ms}.md\:duration-200{transition-duration:.2s}.md\:duration-300{transition-duration:.3s}.md\:duration-500{transition-duration:.5s}.md\:duration-700{transition-duration:.7s}.md\:duration-1000{transition-duration:1s}.md\:delay-75{transition-delay:75ms}.md\:delay-100{transition-delay:.1s}.md\:delay-150{transition-delay:150ms}.md\:delay-200{transition-delay:.2s}.md\:delay-300{transition-delay:.3s}.md\:delay-500{transition-delay:.5s}.md\:delay-700{transition-delay:.7s}.md\:delay-1000{transition-delay:1s}.md\:animate-none{animation:none}.md\:animate-spin{animation:spin 1s linear infinite}.md\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.md\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.md\:animate-bounce{animation:bounce 1s infinite}}@media (min-width:1024px){.lg\:container{width:100%}@media (min-width:640px){.lg\:container{max-width:640px}}@media (min-width:768px){.lg\:container{max-width:768px}}@media (min-width:1024px){.lg\:container{max-width:1024px}}@media (min-width:1280px){.lg\:container{max-width:1280px}}.lg\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.lg\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.lg\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.lg\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.lg\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.lg\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.lg\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.lg\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.lg\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.lg\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.lg\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.lg\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.lg\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.lg\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.lg\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.lg\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.lg\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.lg\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.lg\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.lg\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.lg\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.lg\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.lg\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.lg\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.lg\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.lg\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.lg\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.lg\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.lg\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.lg\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.lg\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.lg\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.lg\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.lg\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.lg\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.lg\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.lg\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.lg\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.lg\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.lg\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.lg\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.lg\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.lg\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.lg\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.lg\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.lg\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.lg\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.lg\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.lg\:divide-transparent>:not(template)~:not(template){border-color:transparent}.lg\:divide-current>:not(template)~:not(template){border-color:currentColor}.lg\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.lg\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.lg\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.lg\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.lg\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.lg\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.lg\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.lg\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.lg\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.lg\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.lg\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.lg\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.lg\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.lg\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.lg\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.lg\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.lg\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.lg\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.lg\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.lg\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.lg\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.lg\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.lg\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.lg\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.lg\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.lg\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.lg\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.lg\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.lg\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.lg\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.lg\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.lg\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.lg\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.lg\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.lg\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.lg\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.lg\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.lg\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.lg\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.lg\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.lg\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.lg\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.lg\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.lg\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.lg\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.lg\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.lg\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.lg\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.lg\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.lg\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.lg\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.lg\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.lg\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.lg\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.lg\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.lg\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.lg\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.lg\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.lg\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.lg\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.lg\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.lg\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.lg\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.lg\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.lg\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.lg\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.lg\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.lg\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.lg\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.lg\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.lg\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.lg\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.lg\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.lg\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.lg\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.lg\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.lg\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.lg\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.lg\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.lg\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.lg\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.lg\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.lg\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.lg\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.lg\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.lg\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.lg\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.lg\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.lg\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.lg\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.lg\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.lg\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.lg\:divide-solid>:not(template)~:not(template){border-style:solid}.lg\:divide-dashed>:not(template)~:not(template){border-style:dashed}.lg\:divide-dotted>:not(template)~:not(template){border-style:dotted}.lg\:divide-double>:not(template)~:not(template){border-style:double}.lg\:divide-none>:not(template)~:not(template){border-style:none}.lg\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.lg\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.lg\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.lg\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.lg\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.lg\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lg\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.lg\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lg\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.lg\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lg\:bg-fixed{background-attachment:fixed}.lg\:bg-local{background-attachment:local}.lg\:bg-scroll{background-attachment:scroll}.lg\:bg-clip-border{background-clip:border-box}.lg\:bg-clip-padding{background-clip:padding-box}.lg\:bg-clip-content{background-clip:content-box}.lg\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.lg\:bg-transparent{background-color:transparent}.lg\:bg-current{background-color:currentColor}.lg\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.lg\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.lg\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.lg\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.lg\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.lg\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.lg\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.lg\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.lg\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.lg\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.lg\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.lg\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.lg\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.lg\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.lg\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.lg\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.lg\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.lg\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.lg\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.lg\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.lg\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.lg\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.lg\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.lg\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.lg\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.lg\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.lg\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.lg\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.lg\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.lg\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.lg\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.lg\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.lg\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.lg\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.lg\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.lg\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.lg\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.lg\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.lg\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.lg\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.lg\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.lg\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.lg\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.lg\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.lg\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.lg\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.lg\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.lg\:hover\:bg-transparent:hover{background-color:transparent}.lg\:hover\:bg-current:hover{background-color:currentColor}.lg\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.lg\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.lg\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.lg\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.lg\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.lg\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.lg\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.lg\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.lg\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.lg\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.lg\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.lg\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.lg\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.lg\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.lg\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.lg\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.lg\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.lg\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.lg\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.lg\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.lg\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.lg\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.lg\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.lg\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.lg\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.lg\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.lg\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.lg\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.lg\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.lg\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.lg\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.lg\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.lg\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.lg\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.lg\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.lg\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.lg\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.lg\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.lg\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.lg\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.lg\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.lg\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.lg\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.lg\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.lg\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.lg\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.lg\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.lg\:focus\:bg-transparent:focus{background-color:transparent}.lg\:focus\:bg-current:focus{background-color:currentColor}.lg\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.lg\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.lg\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.lg\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.lg\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.lg\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.lg\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.lg\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.lg\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.lg\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.lg\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.lg\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.lg\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.lg\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.lg\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.lg\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.lg\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.lg\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.lg\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.lg\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.lg\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.lg\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.lg\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.lg\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.lg\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.lg\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.lg\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.lg\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.lg\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.lg\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.lg\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.lg\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.lg\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.lg\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.lg\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.lg\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.lg\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.lg\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.lg\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.lg\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.lg\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.lg\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.lg\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.lg\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.lg\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.lg\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.lg\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.lg\:bg-none{background-image:none}.lg\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.lg\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.lg\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.lg\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.lg\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.lg\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.lg\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.lg\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.lg\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:to-transparent{--gradient-to-color:transparent}.lg\:to-current{--gradient-to-color:currentColor}.lg\:to-black{--gradient-to-color:#000}.lg\:to-white{--gradient-to-color:#fff}.lg\:to-gray-100{--gradient-to-color:#f7fafc}.lg\:to-gray-200{--gradient-to-color:#edf2f7}.lg\:to-gray-300{--gradient-to-color:#e2e8f0}.lg\:to-gray-400{--gradient-to-color:#cbd5e0}.lg\:to-gray-500{--gradient-to-color:#a0aec0}.lg\:to-gray-600{--gradient-to-color:#718096}.lg\:to-gray-700{--gradient-to-color:#4a5568}.lg\:to-gray-800{--gradient-to-color:#2d3748}.lg\:to-gray-900{--gradient-to-color:#1a202c}.lg\:to-red-100{--gradient-to-color:#fff5f5}.lg\:to-red-200{--gradient-to-color:#fed7d7}.lg\:to-red-300{--gradient-to-color:#feb2b2}.lg\:to-red-400{--gradient-to-color:#fc8181}.lg\:to-red-500{--gradient-to-color:#f56565}.lg\:to-red-600{--gradient-to-color:#e53e3e}.lg\:to-red-700{--gradient-to-color:#c53030}.lg\:to-red-800{--gradient-to-color:#9b2c2c}.lg\:to-red-900{--gradient-to-color:#742a2a}.lg\:to-orange-100{--gradient-to-color:#fffaf0}.lg\:to-orange-200{--gradient-to-color:#feebc8}.lg\:to-orange-300{--gradient-to-color:#fbd38d}.lg\:to-orange-400{--gradient-to-color:#f6ad55}.lg\:to-orange-500{--gradient-to-color:#ed8936}.lg\:to-orange-600{--gradient-to-color:#dd6b20}.lg\:to-orange-700{--gradient-to-color:#c05621}.lg\:to-orange-800{--gradient-to-color:#9c4221}.lg\:to-orange-900{--gradient-to-color:#7b341e}.lg\:to-yellow-100{--gradient-to-color:#fffff0}.lg\:to-yellow-200{--gradient-to-color:#fefcbf}.lg\:to-yellow-300{--gradient-to-color:#faf089}.lg\:to-yellow-400{--gradient-to-color:#f6e05e}.lg\:to-yellow-500{--gradient-to-color:#ecc94b}.lg\:to-yellow-600{--gradient-to-color:#d69e2e}.lg\:to-yellow-700{--gradient-to-color:#b7791f}.lg\:to-yellow-800{--gradient-to-color:#975a16}.lg\:to-yellow-900{--gradient-to-color:#744210}.lg\:to-green-100{--gradient-to-color:#f0fff4}.lg\:to-green-200{--gradient-to-color:#c6f6d5}.lg\:to-green-300{--gradient-to-color:#9ae6b4}.lg\:to-green-400{--gradient-to-color:#68d391}.lg\:to-green-500{--gradient-to-color:#48bb78}.lg\:to-green-600{--gradient-to-color:#38a169}.lg\:to-green-700{--gradient-to-color:#2f855a}.lg\:to-green-800{--gradient-to-color:#276749}.lg\:to-green-900{--gradient-to-color:#22543d}.lg\:to-teal-100{--gradient-to-color:#e6fffa}.lg\:to-teal-200{--gradient-to-color:#b2f5ea}.lg\:to-teal-300{--gradient-to-color:#81e6d9}.lg\:to-teal-400{--gradient-to-color:#4fd1c5}.lg\:to-teal-500{--gradient-to-color:#38b2ac}.lg\:to-teal-600{--gradient-to-color:#319795}.lg\:to-teal-700{--gradient-to-color:#2c7a7b}.lg\:to-teal-800{--gradient-to-color:#285e61}.lg\:to-teal-900{--gradient-to-color:#234e52}.lg\:to-blue-100{--gradient-to-color:#ebf8ff}.lg\:to-blue-200{--gradient-to-color:#bee3f8}.lg\:to-blue-300{--gradient-to-color:#90cdf4}.lg\:to-blue-400{--gradient-to-color:#63b3ed}.lg\:to-blue-500{--gradient-to-color:#4299e1}.lg\:to-blue-600{--gradient-to-color:#3182ce}.lg\:to-blue-700{--gradient-to-color:#2b6cb0}.lg\:to-blue-800{--gradient-to-color:#2c5282}.lg\:to-blue-900{--gradient-to-color:#2a4365}.lg\:to-indigo-100{--gradient-to-color:#ebf4ff}.lg\:to-indigo-200{--gradient-to-color:#c3dafe}.lg\:to-indigo-300{--gradient-to-color:#a3bffa}.lg\:to-indigo-400{--gradient-to-color:#7f9cf5}.lg\:to-indigo-500{--gradient-to-color:#667eea}.lg\:to-indigo-600{--gradient-to-color:#5a67d8}.lg\:to-indigo-700{--gradient-to-color:#4c51bf}.lg\:to-indigo-800{--gradient-to-color:#434190}.lg\:to-indigo-900{--gradient-to-color:#3c366b}.lg\:to-purple-100{--gradient-to-color:#faf5ff}.lg\:to-purple-200{--gradient-to-color:#e9d8fd}.lg\:to-purple-300{--gradient-to-color:#d6bcfa}.lg\:to-purple-400{--gradient-to-color:#b794f4}.lg\:to-purple-500{--gradient-to-color:#9f7aea}.lg\:to-purple-600{--gradient-to-color:#805ad5}.lg\:to-purple-700{--gradient-to-color:#6b46c1}.lg\:to-purple-800{--gradient-to-color:#553c9a}.lg\:to-purple-900{--gradient-to-color:#44337a}.lg\:to-pink-100{--gradient-to-color:#fff5f7}.lg\:to-pink-200{--gradient-to-color:#fed7e2}.lg\:to-pink-300{--gradient-to-color:#fbb6ce}.lg\:to-pink-400{--gradient-to-color:#f687b3}.lg\:to-pink-500{--gradient-to-color:#ed64a6}.lg\:to-pink-600{--gradient-to-color:#d53f8c}.lg\:to-pink-700{--gradient-to-color:#b83280}.lg\:to-pink-800{--gradient-to-color:#97266d}.lg\:to-pink-900{--gradient-to-color:#702459}.lg\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:hover\:to-transparent:hover{--gradient-to-color:transparent}.lg\:hover\:to-current:hover{--gradient-to-color:currentColor}.lg\:hover\:to-black:hover{--gradient-to-color:#000}.lg\:hover\:to-white:hover{--gradient-to-color:#fff}.lg\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.lg\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.lg\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.lg\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.lg\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.lg\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.lg\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.lg\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.lg\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.lg\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.lg\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.lg\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.lg\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.lg\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.lg\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.lg\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.lg\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.lg\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.lg\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.lg\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.lg\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.lg\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.lg\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.lg\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.lg\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.lg\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.lg\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.lg\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.lg\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.lg\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.lg\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.lg\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.lg\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.lg\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.lg\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.lg\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.lg\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.lg\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.lg\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.lg\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.lg\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.lg\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.lg\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.lg\:hover\:to-green-800:hover{--gradient-to-color:#276749}.lg\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.lg\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.lg\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.lg\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.lg\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.lg\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.lg\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.lg\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.lg\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.lg\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.lg\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.lg\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.lg\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.lg\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.lg\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.lg\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.lg\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.lg\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.lg\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.lg\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.lg\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.lg\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.lg\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.lg\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.lg\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.lg\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.lg\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.lg\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.lg\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.lg\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.lg\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.lg\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.lg\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.lg\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.lg\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.lg\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.lg\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.lg\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.lg\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.lg\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.lg\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.lg\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.lg\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.lg\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.lg\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.lg\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.lg\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:focus\:to-transparent:focus{--gradient-to-color:transparent}.lg\:focus\:to-current:focus{--gradient-to-color:currentColor}.lg\:focus\:to-black:focus{--gradient-to-color:#000}.lg\:focus\:to-white:focus{--gradient-to-color:#fff}.lg\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.lg\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.lg\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.lg\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.lg\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.lg\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.lg\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.lg\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.lg\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.lg\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.lg\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.lg\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.lg\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.lg\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.lg\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.lg\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.lg\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.lg\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.lg\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.lg\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.lg\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.lg\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.lg\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.lg\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.lg\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.lg\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.lg\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.lg\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.lg\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.lg\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.lg\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.lg\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.lg\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.lg\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.lg\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.lg\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.lg\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.lg\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.lg\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.lg\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.lg\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.lg\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.lg\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.lg\:focus\:to-green-800:focus{--gradient-to-color:#276749}.lg\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.lg\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.lg\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.lg\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.lg\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.lg\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.lg\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.lg\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.lg\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.lg\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.lg\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.lg\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.lg\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.lg\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.lg\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.lg\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.lg\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.lg\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.lg\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.lg\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.lg\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.lg\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.lg\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.lg\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.lg\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.lg\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.lg\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.lg\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.lg\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.lg\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.lg\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.lg\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.lg\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.lg\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.lg\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.lg\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.lg\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.lg\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.lg\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.lg\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.lg\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.lg\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.lg\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.lg\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.lg\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.lg\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.lg\:bg-opacity-0{--bg-opacity:0}.lg\:bg-opacity-25{--bg-opacity:0.25}.lg\:bg-opacity-50{--bg-opacity:0.5}.lg\:bg-opacity-75{--bg-opacity:0.75}.lg\:bg-opacity-100{--bg-opacity:1}.lg\:hover\:bg-opacity-0:hover{--bg-opacity:0}.lg\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.lg\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.lg\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.lg\:hover\:bg-opacity-100:hover{--bg-opacity:1}.lg\:focus\:bg-opacity-0:focus{--bg-opacity:0}.lg\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.lg\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.lg\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.lg\:focus\:bg-opacity-100:focus{--bg-opacity:1}.lg\:bg-bottom{background-position:bottom}.lg\:bg-center{background-position:center}.lg\:bg-left{background-position:left}.lg\:bg-left-bottom{background-position:left bottom}.lg\:bg-left-top{background-position:left top}.lg\:bg-right{background-position:right}.lg\:bg-right-bottom{background-position:right bottom}.lg\:bg-right-top{background-position:right top}.lg\:bg-top{background-position:top}.lg\:bg-repeat{background-repeat:repeat}.lg\:bg-no-repeat{background-repeat:no-repeat}.lg\:bg-repeat-x{background-repeat:repeat-x}.lg\:bg-repeat-y{background-repeat:repeat-y}.lg\:bg-repeat-round{background-repeat:round}.lg\:bg-repeat-space{background-repeat:space}.lg\:bg-auto{background-size:auto}.lg\:bg-cover{background-size:cover}.lg\:bg-contain{background-size:contain}.lg\:border-collapse{border-collapse:collapse}.lg\:border-separate{border-collapse:separate}.lg\:border-transparent{border-color:transparent}.lg\:border-current{border-color:currentColor}.lg\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.lg\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.lg\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.lg\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.lg\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.lg\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.lg\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.lg\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.lg\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.lg\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.lg\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.lg\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.lg\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.lg\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.lg\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.lg\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.lg\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.lg\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.lg\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.lg\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.lg\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.lg\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.lg\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.lg\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.lg\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.lg\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.lg\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.lg\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.lg\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.lg\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.lg\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.lg\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.lg\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.lg\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.lg\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.lg\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.lg\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.lg\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.lg\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.lg\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.lg\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.lg\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.lg\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.lg\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.lg\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.lg\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.lg\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.lg\:hover\:border-transparent:hover{border-color:transparent}.lg\:hover\:border-current:hover{border-color:currentColor}.lg\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.lg\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.lg\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.lg\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.lg\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.lg\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.lg\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.lg\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.lg\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.lg\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.lg\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.lg\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.lg\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.lg\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.lg\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.lg\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.lg\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.lg\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.lg\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.lg\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.lg\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.lg\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.lg\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.lg\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.lg\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.lg\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.lg\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.lg\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.lg\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.lg\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.lg\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.lg\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.lg\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.lg\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.lg\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.lg\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.lg\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.lg\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.lg\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.lg\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.lg\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.lg\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.lg\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.lg\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.lg\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.lg\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.lg\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.lg\:focus\:border-transparent:focus{border-color:transparent}.lg\:focus\:border-current:focus{border-color:currentColor}.lg\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.lg\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.lg\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.lg\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.lg\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.lg\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.lg\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.lg\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.lg\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.lg\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.lg\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.lg\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.lg\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.lg\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.lg\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.lg\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.lg\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.lg\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.lg\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.lg\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.lg\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.lg\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.lg\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.lg\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.lg\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.lg\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.lg\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.lg\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.lg\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.lg\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.lg\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.lg\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.lg\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.lg\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.lg\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.lg\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.lg\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.lg\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.lg\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.lg\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.lg\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.lg\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.lg\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.lg\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.lg\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.lg\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.lg\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.lg\:border-opacity-0{--border-opacity:0}.lg\:border-opacity-25{--border-opacity:0.25}.lg\:border-opacity-50{--border-opacity:0.5}.lg\:border-opacity-75{--border-opacity:0.75}.lg\:border-opacity-100{--border-opacity:1}.lg\:hover\:border-opacity-0:hover{--border-opacity:0}.lg\:hover\:border-opacity-25:hover{--border-opacity:0.25}.lg\:hover\:border-opacity-50:hover{--border-opacity:0.5}.lg\:hover\:border-opacity-75:hover{--border-opacity:0.75}.lg\:hover\:border-opacity-100:hover{--border-opacity:1}.lg\:focus\:border-opacity-0:focus{--border-opacity:0}.lg\:focus\:border-opacity-25:focus{--border-opacity:0.25}.lg\:focus\:border-opacity-50:focus{--border-opacity:0.5}.lg\:focus\:border-opacity-75:focus{--border-opacity:0.75}.lg\:focus\:border-opacity-100:focus{--border-opacity:1}.lg\:rounded-none{border-radius:0}.lg\:rounded-sm{border-radius:.125rem}.lg\:rounded{border-radius:.25rem}.lg\:rounded-md{border-radius:.375rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:rounded-xl{border-radius:.75rem}.lg\:rounded-2xl{border-radius:1rem}.lg\:rounded-3xl{border-radius:1.5rem}.lg\:rounded-full{border-radius:9999px}.lg\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.lg\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.lg\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.lg\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.lg\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.lg\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.lg\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.lg\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.lg\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.lg\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.lg\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.lg\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.lg\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.lg\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.lg\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.lg\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.lg\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.lg\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.lg\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.lg\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.lg\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.lg\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.lg\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.lg\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.lg\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.lg\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.lg\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.lg\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.lg\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.lg\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.lg\:rounded-tl-none{border-top-left-radius:0}.lg\:rounded-tr-none{border-top-right-radius:0}.lg\:rounded-br-none{border-bottom-right-radius:0}.lg\:rounded-bl-none{border-bottom-left-radius:0}.lg\:rounded-tl-sm{border-top-left-radius:.125rem}.lg\:rounded-tr-sm{border-top-right-radius:.125rem}.lg\:rounded-br-sm{border-bottom-right-radius:.125rem}.lg\:rounded-bl-sm{border-bottom-left-radius:.125rem}.lg\:rounded-tl{border-top-left-radius:.25rem}.lg\:rounded-tr{border-top-right-radius:.25rem}.lg\:rounded-br{border-bottom-right-radius:.25rem}.lg\:rounded-bl{border-bottom-left-radius:.25rem}.lg\:rounded-tl-md{border-top-left-radius:.375rem}.lg\:rounded-tr-md{border-top-right-radius:.375rem}.lg\:rounded-br-md{border-bottom-right-radius:.375rem}.lg\:rounded-bl-md{border-bottom-left-radius:.375rem}.lg\:rounded-tl-lg{border-top-left-radius:.5rem}.lg\:rounded-tr-lg{border-top-right-radius:.5rem}.lg\:rounded-br-lg{border-bottom-right-radius:.5rem}.lg\:rounded-bl-lg{border-bottom-left-radius:.5rem}.lg\:rounded-tl-xl{border-top-left-radius:.75rem}.lg\:rounded-tr-xl{border-top-right-radius:.75rem}.lg\:rounded-br-xl{border-bottom-right-radius:.75rem}.lg\:rounded-bl-xl{border-bottom-left-radius:.75rem}.lg\:rounded-tl-2xl{border-top-left-radius:1rem}.lg\:rounded-tr-2xl{border-top-right-radius:1rem}.lg\:rounded-br-2xl{border-bottom-right-radius:1rem}.lg\:rounded-bl-2xl{border-bottom-left-radius:1rem}.lg\:rounded-tl-3xl{border-top-left-radius:1.5rem}.lg\:rounded-tr-3xl{border-top-right-radius:1.5rem}.lg\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.lg\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.lg\:rounded-tl-full{border-top-left-radius:9999px}.lg\:rounded-tr-full{border-top-right-radius:9999px}.lg\:rounded-br-full{border-bottom-right-radius:9999px}.lg\:rounded-bl-full{border-bottom-left-radius:9999px}.lg\:border-solid{border-style:solid}.lg\:border-dashed{border-style:dashed}.lg\:border-dotted{border-style:dotted}.lg\:border-double{border-style:double}.lg\:border-none{border-style:none}.lg\:border-0{border-width:0}.lg\:border-2{border-width:2px}.lg\:border-4{border-width:4px}.lg\:border-8{border-width:8px}.lg\:border{border-width:1px}.lg\:border-t-0{border-top-width:0}.lg\:border-r-0{border-right-width:0}.lg\:border-b-0{border-bottom-width:0}.lg\:border-l-0{border-left-width:0}.lg\:border-t-2{border-top-width:2px}.lg\:border-r-2{border-right-width:2px}.lg\:border-b-2{border-bottom-width:2px}.lg\:border-l-2{border-left-width:2px}.lg\:border-t-4{border-top-width:4px}.lg\:border-r-4{border-right-width:4px}.lg\:border-b-4{border-bottom-width:4px}.lg\:border-l-4{border-left-width:4px}.lg\:border-t-8{border-top-width:8px}.lg\:border-r-8{border-right-width:8px}.lg\:border-b-8{border-bottom-width:8px}.lg\:border-l-8{border-left-width:8px}.lg\:border-t{border-top-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b{border-bottom-width:1px}.lg\:border-l{border-left-width:1px}.lg\:box-border{box-sizing:border-box}.lg\:box-content{box-sizing:content-box}.lg\:cursor-auto{cursor:auto}.lg\:cursor-default{cursor:default}.lg\:cursor-pointer{cursor:pointer}.lg\:cursor-wait{cursor:wait}.lg\:cursor-text{cursor:text}.lg\:cursor-move{cursor:move}.lg\:cursor-not-allowed{cursor:not-allowed}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:inline-flex{display:inline-flex}.lg\:table{display:table}.lg\:table-caption{display:table-caption}.lg\:table-cell{display:table-cell}.lg\:table-column{display:table-column}.lg\:table-column-group{display:table-column-group}.lg\:table-footer-group{display:table-footer-group}.lg\:table-header-group{display:table-header-group}.lg\:table-row-group{display:table-row-group}.lg\:table-row{display:table-row}.lg\:flow-root{display:flow-root}.lg\:grid{display:grid}.lg\:inline-grid{display:inline-grid}.lg\:contents{display:contents}.lg\:hidden{display:none}.lg\:flex-row{flex-direction:row}.lg\:flex-row-reverse{flex-direction:row-reverse}.lg\:flex-col{flex-direction:column}.lg\:flex-col-reverse{flex-direction:column-reverse}.lg\:flex-wrap{flex-wrap:wrap}.lg\:flex-wrap-reverse{flex-wrap:wrap-reverse}.lg\:flex-no-wrap{flex-wrap:nowrap}.lg\:place-items-auto{place-items:auto}.lg\:place-items-start{place-items:start}.lg\:place-items-end{place-items:end}.lg\:place-items-center{place-items:center}.lg\:place-items-stretch{place-items:stretch}.lg\:place-content-center{place-content:center}.lg\:place-content-start{place-content:start}.lg\:place-content-end{place-content:end}.lg\:place-content-between{place-content:space-between}.lg\:place-content-around{place-content:space-around}.lg\:place-content-evenly{place-content:space-evenly}.lg\:place-content-stretch{place-content:stretch}.lg\:place-self-auto{place-self:auto}.lg\:place-self-start{place-self:start}.lg\:place-self-end{place-self:end}.lg\:place-self-center{place-self:center}.lg\:place-self-stretch{place-self:stretch}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:items-baseline{align-items:baseline}.lg\:items-stretch{align-items:stretch}.lg\:content-center{align-content:center}.lg\:content-start{align-content:flex-start}.lg\:content-end{align-content:flex-end}.lg\:content-between{align-content:space-between}.lg\:content-around{align-content:space-around}.lg\:content-evenly{align-content:space-evenly}.lg\:self-auto{align-self:auto}.lg\:self-start{align-self:flex-start}.lg\:self-end{align-self:flex-end}.lg\:self-center{align-self:center}.lg\:self-stretch{align-self:stretch}.lg\:justify-items-auto{justify-items:auto}.lg\:justify-items-start{justify-items:start}.lg\:justify-items-end{justify-items:end}.lg\:justify-items-center{justify-items:center}.lg\:justify-items-stretch{justify-items:stretch}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-center{justify-content:center}.lg\:justify-between{justify-content:space-between}.lg\:justify-around{justify-content:space-around}.lg\:justify-evenly{justify-content:space-evenly}.lg\:justify-self-auto{justify-self:auto}.lg\:justify-self-start{justify-self:start}.lg\:justify-self-end{justify-self:end}.lg\:justify-self-center{justify-self:center}.lg\:justify-self-stretch{justify-self:stretch}.lg\:flex-1{flex:1 1 0%}.lg\:flex-auto{flex:1 1 auto}.lg\:flex-initial{flex:0 1 auto}.lg\:flex-none{flex:none}.lg\:flex-grow-0{flex-grow:0}.lg\:flex-grow{flex-grow:1}.lg\:flex-shrink-0{flex-shrink:0}.lg\:flex-shrink{flex-shrink:1}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-4{order:4}.lg\:order-5{order:5}.lg\:order-6{order:6}.lg\:order-7{order:7}.lg\:order-8{order:8}.lg\:order-9{order:9}.lg\:order-10{order:10}.lg\:order-11{order:11}.lg\:order-12{order:12}.lg\:order-first{order:-9999}.lg\:order-last{order:9999}.lg\:order-none{order:0}.lg\:float-right{float:right}.lg\:float-left{float:left}.lg\:float-none{float:none}.lg\:clearfix:after{content:"";display:table;clear:both}.lg\:clear-left{clear:left}.lg\:clear-right{clear:right}.lg\:clear-both{clear:both}.lg\:clear-none{clear:none}.lg\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.lg\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.lg\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.lg\:font-hairline{font-weight:100}.lg\:font-thin{font-weight:200}.lg\:font-light{font-weight:300}.lg\:font-normal{font-weight:400}.lg\:font-medium{font-weight:500}.lg\:font-semibold{font-weight:600}.lg\:font-bold{font-weight:700}.lg\:font-extrabold{font-weight:800}.lg\:font-black{font-weight:900}.lg\:hover\:font-hairline:hover{font-weight:100}.lg\:hover\:font-thin:hover{font-weight:200}.lg\:hover\:font-light:hover{font-weight:300}.lg\:hover\:font-normal:hover{font-weight:400}.lg\:hover\:font-medium:hover{font-weight:500}.lg\:hover\:font-semibold:hover{font-weight:600}.lg\:hover\:font-bold:hover{font-weight:700}.lg\:hover\:font-extrabold:hover{font-weight:800}.lg\:hover\:font-black:hover{font-weight:900}.lg\:focus\:font-hairline:focus{font-weight:100}.lg\:focus\:font-thin:focus{font-weight:200}.lg\:focus\:font-light:focus{font-weight:300}.lg\:focus\:font-normal:focus{font-weight:400}.lg\:focus\:font-medium:focus{font-weight:500}.lg\:focus\:font-semibold:focus{font-weight:600}.lg\:focus\:font-bold:focus{font-weight:700}.lg\:focus\:font-extrabold:focus{font-weight:800}.lg\:focus\:font-black:focus{font-weight:900}.lg\:h-0{height:0}.lg\:h-1{height:.25rem}.lg\:h-2{height:.5rem}.lg\:h-3{height:.75rem}.lg\:h-4{height:1rem}.lg\:h-5{height:1.25rem}.lg\:h-6{height:1.5rem}.lg\:h-8{height:2rem}.lg\:h-10{height:2.5rem}.lg\:h-12{height:3rem}.lg\:h-16{height:4rem}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-32{height:8rem}.lg\:h-40{height:10rem}.lg\:h-48{height:12rem}.lg\:h-56{height:14rem}.lg\:h-64{height:16rem}.lg\:h-auto{height:auto}.lg\:h-px{height:1px}.lg\:h-full{height:100%}.lg\:h-screen{height:100vh}.lg\:text-xs{font-size:.75rem}.lg\:text-sm{font-size:.875rem}.lg\:text-base{font-size:1rem}.lg\:text-lg{font-size:1.125rem}.lg\:text-xl{font-size:1.25rem}.lg\:text-2xl{font-size:1.5rem}.lg\:text-3xl{font-size:1.875rem}.lg\:text-4xl{font-size:2.25rem}.lg\:text-5xl{font-size:3rem}.lg\:text-6xl{font-size:4rem}.lg\:leading-3{line-height:.75rem}.lg\:leading-4{line-height:1rem}.lg\:leading-5{line-height:1.25rem}.lg\:leading-6{line-height:1.5rem}.lg\:leading-7{line-height:1.75rem}.lg\:leading-8{line-height:2rem}.lg\:leading-9{line-height:2.25rem}.lg\:leading-10{line-height:2.5rem}.lg\:leading-none{line-height:1}.lg\:leading-tight{line-height:1.25}.lg\:leading-snug{line-height:1.375}.lg\:leading-normal{line-height:1.5}.lg\:leading-relaxed{line-height:1.625}.lg\:leading-loose{line-height:2}.lg\:list-inside{list-style-position:inside}.lg\:list-outside{list-style-position:outside}.lg\:list-none{list-style-type:none}.lg\:list-disc{list-style-type:disc}.lg\:list-decimal{list-style-type:decimal}.lg\:m-0{margin:0}.lg\:m-1{margin:.25rem}.lg\:m-2{margin:.5rem}.lg\:m-3{margin:.75rem}.lg\:m-4{margin:1rem}.lg\:m-5{margin:1.25rem}.lg\:m-6{margin:1.5rem}.lg\:m-8{margin:2rem}.lg\:m-10{margin:2.5rem}.lg\:m-12{margin:3rem}.lg\:m-16{margin:4rem}.lg\:m-20{margin:5rem}.lg\:m-24{margin:6rem}.lg\:m-32{margin:8rem}.lg\:m-40{margin:10rem}.lg\:m-48{margin:12rem}.lg\:m-56{margin:14rem}.lg\:m-64{margin:16rem}.lg\:m-auto{margin:auto}.lg\:m-px{margin:1px}.lg\:-m-1{margin:-.25rem}.lg\:-m-2{margin:-.5rem}.lg\:-m-3{margin:-.75rem}.lg\:-m-4{margin:-1rem}.lg\:-m-5{margin:-1.25rem}.lg\:-m-6{margin:-1.5rem}.lg\:-m-8{margin:-2rem}.lg\:-m-10{margin:-2.5rem}.lg\:-m-12{margin:-3rem}.lg\:-m-16{margin:-4rem}.lg\:-m-20{margin:-5rem}.lg\:-m-24{margin:-6rem}.lg\:-m-32{margin:-8rem}.lg\:-m-40{margin:-10rem}.lg\:-m-48{margin:-12rem}.lg\:-m-56{margin:-14rem}.lg\:-m-64{margin:-16rem}.lg\:-m-px{margin:-1px}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\:mx-1{margin-left:.25rem;margin-right:.25rem}.lg\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\:mx-2{margin-left:.5rem;margin-right:.5rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mx-3{margin-left:.75rem;margin-right:.75rem}.lg\:my-4{margin-top:1rem;margin-bottom:1rem}.lg\:mx-4{margin-left:1rem;margin-right:1rem}.lg\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lg\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.lg\:my-8{margin-top:2rem;margin-bottom:2rem}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.lg\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.lg\:my-12{margin-top:3rem;margin-bottom:3rem}.lg\:mx-12{margin-left:3rem;margin-right:3rem}.lg\:my-16{margin-top:4rem;margin-bottom:4rem}.lg\:mx-16{margin-left:4rem;margin-right:4rem}.lg\:my-20{margin-top:5rem;margin-bottom:5rem}.lg\:mx-20{margin-left:5rem;margin-right:5rem}.lg\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\:mx-24{margin-left:6rem;margin-right:6rem}.lg\:my-32{margin-top:8rem;margin-bottom:8rem}.lg\:mx-32{margin-left:8rem;margin-right:8rem}.lg\:my-40{margin-top:10rem;margin-bottom:10rem}.lg\:mx-40{margin-left:10rem;margin-right:10rem}.lg\:my-48{margin-top:12rem;margin-bottom:12rem}.lg\:mx-48{margin-left:12rem;margin-right:12rem}.lg\:my-56{margin-top:14rem;margin-bottom:14rem}.lg\:mx-56{margin-left:14rem;margin-right:14rem}.lg\:my-64{margin-top:16rem;margin-bottom:16rem}.lg\:mx-64{margin-left:16rem;margin-right:16rem}.lg\:my-auto{margin-top:auto;margin-bottom:auto}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:my-px{margin-top:1px;margin-bottom:1px}.lg\:mx-px{margin-left:1px;margin-right:1px}.lg\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.lg\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lg\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.lg\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.lg\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.lg\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.lg\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.lg\:-mx-4{margin-left:-1rem;margin-right:-1rem}.lg\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.lg\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lg\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.lg\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.lg\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.lg\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.lg\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.lg\:-mx-12{margin-left:-3rem;margin-right:-3rem}.lg\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.lg\:-mx-16{margin-left:-4rem;margin-right:-4rem}.lg\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.lg\:-mx-20{margin-left:-5rem;margin-right:-5rem}.lg\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.lg\:-mx-24{margin-left:-6rem;margin-right:-6rem}.lg\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.lg\:-mx-32{margin-left:-8rem;margin-right:-8rem}.lg\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.lg\:-mx-40{margin-left:-10rem;margin-right:-10rem}.lg\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.lg\:-mx-48{margin-left:-12rem;margin-right:-12rem}.lg\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.lg\:-mx-56{margin-left:-14rem;margin-right:-14rem}.lg\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.lg\:-mx-64{margin-left:-16rem;margin-right:-16rem}.lg\:-my-px{margin-top:-1px;margin-bottom:-1px}.lg\:-mx-px{margin-left:-1px;margin-right:-1px}.lg\:mt-0{margin-top:0}.lg\:mr-0{margin-right:0}.lg\:mb-0{margin-bottom:0}.lg\:ml-0{margin-left:0}.lg\:mt-1{margin-top:.25rem}.lg\:mr-1{margin-right:.25rem}.lg\:mb-1{margin-bottom:.25rem}.lg\:ml-1{margin-left:.25rem}.lg\:mt-2{margin-top:.5rem}.lg\:mr-2{margin-right:.5rem}.lg\:mb-2{margin-bottom:.5rem}.lg\:ml-2{margin-left:.5rem}.lg\:mt-3{margin-top:.75rem}.lg\:mr-3{margin-right:.75rem}.lg\:mb-3{margin-bottom:.75rem}.lg\:ml-3{margin-left:.75rem}.lg\:mt-4{margin-top:1rem}.lg\:mr-4{margin-right:1rem}.lg\:mb-4{margin-bottom:1rem}.lg\:ml-4{margin-left:1rem}.lg\:mt-5{margin-top:1.25rem}.lg\:mr-5{margin-right:1.25rem}.lg\:mb-5{margin-bottom:1.25rem}.lg\:ml-5{margin-left:1.25rem}.lg\:mt-6{margin-top:1.5rem}.lg\:mr-6{margin-right:1.5rem}.lg\:mb-6{margin-bottom:1.5rem}.lg\:ml-6{margin-left:1.5rem}.lg\:mt-8{margin-top:2rem}.lg\:mr-8{margin-right:2rem}.lg\:mb-8{margin-bottom:2rem}.lg\:ml-8{margin-left:2rem}.lg\:mt-10{margin-top:2.5rem}.lg\:mr-10{margin-right:2.5rem}.lg\:mb-10{margin-bottom:2.5rem}.lg\:ml-10{margin-left:2.5rem}.lg\:mt-12{margin-top:3rem}.lg\:mr-12{margin-right:3rem}.lg\:mb-12{margin-bottom:3rem}.lg\:ml-12{margin-left:3rem}.lg\:mt-16{margin-top:4rem}.lg\:mr-16{margin-right:4rem}.lg\:mb-16{margin-bottom:4rem}.lg\:ml-16{margin-left:4rem}.lg\:mt-20{margin-top:5rem}.lg\:mr-20{margin-right:5rem}.lg\:mb-20{margin-bottom:5rem}.lg\:ml-20{margin-left:5rem}.lg\:mt-24{margin-top:6rem}.lg\:mr-24{margin-right:6rem}.lg\:mb-24{margin-bottom:6rem}.lg\:ml-24{margin-left:6rem}.lg\:mt-32{margin-top:8rem}.lg\:mr-32{margin-right:8rem}.lg\:mb-32{margin-bottom:8rem}.lg\:ml-32{margin-left:8rem}.lg\:mt-40{margin-top:10rem}.lg\:mr-40{margin-right:10rem}.lg\:mb-40{margin-bottom:10rem}.lg\:ml-40{margin-left:10rem}.lg\:mt-48{margin-top:12rem}.lg\:mr-48{margin-right:12rem}.lg\:mb-48{margin-bottom:12rem}.lg\:ml-48{margin-left:12rem}.lg\:mt-56{margin-top:14rem}.lg\:mr-56{margin-right:14rem}.lg\:mb-56{margin-bottom:14rem}.lg\:ml-56{margin-left:14rem}.lg\:mt-64{margin-top:16rem}.lg\:mr-64{margin-right:16rem}.lg\:mb-64{margin-bottom:16rem}.lg\:ml-64{margin-left:16rem}.lg\:mt-auto{margin-top:auto}.lg\:mr-auto{margin-right:auto}.lg\:mb-auto{margin-bottom:auto}.lg\:ml-auto{margin-left:auto}.lg\:mt-px{margin-top:1px}.lg\:mr-px{margin-right:1px}.lg\:mb-px{margin-bottom:1px}.lg\:ml-px{margin-left:1px}.lg\:-mt-1{margin-top:-.25rem}.lg\:-mr-1{margin-right:-.25rem}.lg\:-mb-1{margin-bottom:-.25rem}.lg\:-ml-1{margin-left:-.25rem}.lg\:-mt-2{margin-top:-.5rem}.lg\:-mr-2{margin-right:-.5rem}.lg\:-mb-2{margin-bottom:-.5rem}.lg\:-ml-2{margin-left:-.5rem}.lg\:-mt-3{margin-top:-.75rem}.lg\:-mr-3{margin-right:-.75rem}.lg\:-mb-3{margin-bottom:-.75rem}.lg\:-ml-3{margin-left:-.75rem}.lg\:-mt-4{margin-top:-1rem}.lg\:-mr-4{margin-right:-1rem}.lg\:-mb-4{margin-bottom:-1rem}.lg\:-ml-4{margin-left:-1rem}.lg\:-mt-5{margin-top:-1.25rem}.lg\:-mr-5{margin-right:-1.25rem}.lg\:-mb-5{margin-bottom:-1.25rem}.lg\:-ml-5{margin-left:-1.25rem}.lg\:-mt-6{margin-top:-1.5rem}.lg\:-mr-6{margin-right:-1.5rem}.lg\:-mb-6{margin-bottom:-1.5rem}.lg\:-ml-6{margin-left:-1.5rem}.lg\:-mt-8{margin-top:-2rem}.lg\:-mr-8{margin-right:-2rem}.lg\:-mb-8{margin-bottom:-2rem}.lg\:-ml-8{margin-left:-2rem}.lg\:-mt-10{margin-top:-2.5rem}.lg\:-mr-10{margin-right:-2.5rem}.lg\:-mb-10{margin-bottom:-2.5rem}.lg\:-ml-10{margin-left:-2.5rem}.lg\:-mt-12{margin-top:-3rem}.lg\:-mr-12{margin-right:-3rem}.lg\:-mb-12{margin-bottom:-3rem}.lg\:-ml-12{margin-left:-3rem}.lg\:-mt-16{margin-top:-4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:-mb-16{margin-bottom:-4rem}.lg\:-ml-16{margin-left:-4rem}.lg\:-mt-20{margin-top:-5rem}.lg\:-mr-20{margin-right:-5rem}.lg\:-mb-20{margin-bottom:-5rem}.lg\:-ml-20{margin-left:-5rem}.lg\:-mt-24{margin-top:-6rem}.lg\:-mr-24{margin-right:-6rem}.lg\:-mb-24{margin-bottom:-6rem}.lg\:-ml-24{margin-left:-6rem}.lg\:-mt-32{margin-top:-8rem}.lg\:-mr-32{margin-right:-8rem}.lg\:-mb-32{margin-bottom:-8rem}.lg\:-ml-32{margin-left:-8rem}.lg\:-mt-40{margin-top:-10rem}.lg\:-mr-40{margin-right:-10rem}.lg\:-mb-40{margin-bottom:-10rem}.lg\:-ml-40{margin-left:-10rem}.lg\:-mt-48{margin-top:-12rem}.lg\:-mr-48{margin-right:-12rem}.lg\:-mb-48{margin-bottom:-12rem}.lg\:-ml-48{margin-left:-12rem}.lg\:-mt-56{margin-top:-14rem}.lg\:-mr-56{margin-right:-14rem}.lg\:-mb-56{margin-bottom:-14rem}.lg\:-ml-56{margin-left:-14rem}.lg\:-mt-64{margin-top:-16rem}.lg\:-mr-64{margin-right:-16rem}.lg\:-mb-64{margin-bottom:-16rem}.lg\:-ml-64{margin-left:-16rem}.lg\:-mt-px{margin-top:-1px}.lg\:-mr-px{margin-right:-1px}.lg\:-mb-px{margin-bottom:-1px}.lg\:-ml-px{margin-left:-1px}.lg\:max-h-full{max-height:100%}.lg\:max-h-screen{max-height:100vh}.lg\:max-w-none{max-width:none}.lg\:max-w-xs{max-width:20rem}.lg\:max-w-sm{max-width:24rem}.lg\:max-w-md{max-width:28rem}.lg\:max-w-lg{max-width:32rem}.lg\:max-w-xl{max-width:36rem}.lg\:max-w-2xl{max-width:42rem}.lg\:max-w-3xl{max-width:48rem}.lg\:max-w-4xl{max-width:56rem}.lg\:max-w-5xl{max-width:64rem}.lg\:max-w-6xl{max-width:72rem}.lg\:max-w-full{max-width:100%}.lg\:max-w-screen-sm{max-width:640px}.lg\:max-w-screen-md{max-width:768px}.lg\:max-w-screen-lg{max-width:1024px}.lg\:max-w-screen-xl{max-width:1280px}.lg\:min-h-0{min-height:0}.lg\:min-h-full{min-height:100%}.lg\:min-h-screen{min-height:100vh}.lg\:min-w-0{min-width:0}.lg\:min-w-full{min-width:100%}.lg\:object-contain{object-fit:contain}.lg\:object-cover{object-fit:cover}.lg\:object-fill{object-fit:fill}.lg\:object-none{object-fit:none}.lg\:object-scale-down{object-fit:scale-down}.lg\:object-bottom{object-position:bottom}.lg\:object-center{object-position:center}.lg\:object-left{object-position:left}.lg\:object-left-bottom{object-position:left bottom}.lg\:object-left-top{object-position:left top}.lg\:object-right{object-position:right}.lg\:object-right-bottom{object-position:right bottom}.lg\:object-right-top{object-position:right top}.lg\:object-top{object-position:top}.lg\:opacity-0{opacity:0}.lg\:opacity-25{opacity:.25}.lg\:opacity-50{opacity:.5}.lg\:opacity-75{opacity:.75}.lg\:opacity-100{opacity:1}.lg\:hover\:opacity-0:hover{opacity:0}.lg\:hover\:opacity-25:hover{opacity:.25}.lg\:hover\:opacity-50:hover{opacity:.5}.lg\:hover\:opacity-75:hover{opacity:.75}.lg\:hover\:opacity-100:hover{opacity:1}.lg\:focus\:opacity-0:focus{opacity:0}.lg\:focus\:opacity-25:focus{opacity:.25}.lg\:focus\:opacity-50:focus{opacity:.5}.lg\:focus\:opacity-75:focus{opacity:.75}.lg\:focus\:opacity-100:focus{opacity:1}.lg\:outline-none{outline:2px solid transparent;outline-offset:2px}.lg\:outline-white{outline:2px dotted #fff;outline-offset:2px}.lg\:outline-black{outline:2px dotted #000;outline-offset:2px}.lg\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lg\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.lg\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.lg\:overflow-auto{overflow:auto}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-visible{overflow:visible}.lg\:overflow-scroll{overflow:scroll}.lg\:overflow-x-auto{overflow-x:auto}.lg\:overflow-y-auto{overflow-y:auto}.lg\:overflow-x-hidden{overflow-x:hidden}.lg\:overflow-y-hidden{overflow-y:hidden}.lg\:overflow-x-visible{overflow-x:visible}.lg\:overflow-y-visible{overflow-y:visible}.lg\:overflow-x-scroll{overflow-x:scroll}.lg\:overflow-y-scroll{overflow-y:scroll}.lg\:scrolling-touch{-webkit-overflow-scrolling:touch}.lg\:scrolling-auto{-webkit-overflow-scrolling:auto}.lg\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.lg\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.lg\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.lg\:overscroll-y-auto{overscroll-behavior-y:auto}.lg\:overscroll-y-contain{overscroll-behavior-y:contain}.lg\:overscroll-y-none{overscroll-behavior-y:none}.lg\:overscroll-x-auto{overscroll-behavior-x:auto}.lg\:overscroll-x-contain{overscroll-behavior-x:contain}.lg\:overscroll-x-none{overscroll-behavior-x:none}.lg\:p-0{padding:0}.lg\:p-1{padding:.25rem}.lg\:p-2{padding:.5rem}.lg\:p-3{padding:.75rem}.lg\:p-4{padding:1rem}.lg\:p-5{padding:1.25rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:p-10{padding:2.5rem}.lg\:p-12{padding:3rem}.lg\:p-16{padding:4rem}.lg\:p-20{padding:5rem}.lg\:p-24{padding:6rem}.lg\:p-32{padding:8rem}.lg\:p-40{padding:10rem}.lg\:p-48{padding:12rem}.lg\:p-56{padding:14rem}.lg\:p-64{padding:16rem}.lg\:p-px{padding:1px}.lg\:py-0{padding-top:0;padding-bottom:0}.lg\:px-0{padding-left:0;padding-right:0}.lg\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:py-3{padding-top:.75rem;padding-bottom:.75rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:py-4{padding-top:1rem;padding-bottom:1rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\:py-12{padding-top:3rem;padding-bottom:3rem}.lg\:px-12{padding-left:3rem;padding-right:3rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:px-20{padding-left:5rem;padding-right:5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:px-24{padding-left:6rem;padding-right:6rem}.lg\:py-32{padding-top:8rem;padding-bottom:8rem}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:py-40{padding-top:10rem;padding-bottom:10rem}.lg\:px-40{padding-left:10rem;padding-right:10rem}.lg\:py-48{padding-top:12rem;padding-bottom:12rem}.lg\:px-48{padding-left:12rem;padding-right:12rem}.lg\:py-56{padding-top:14rem;padding-bottom:14rem}.lg\:px-56{padding-left:14rem;padding-right:14rem}.lg\:py-64{padding-top:16rem;padding-bottom:16rem}.lg\:px-64{padding-left:16rem;padding-right:16rem}.lg\:py-px{padding-top:1px;padding-bottom:1px}.lg\:px-px{padding-left:1px;padding-right:1px}.lg\:pt-0{padding-top:0}.lg\:pr-0{padding-right:0}.lg\:pb-0{padding-bottom:0}.lg\:pl-0{padding-left:0}.lg\:pt-1{padding-top:.25rem}.lg\:pr-1{padding-right:.25rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:pl-1{padding-left:.25rem}.lg\:pt-2{padding-top:.5rem}.lg\:pr-2{padding-right:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:pt-3{padding-top:.75rem}.lg\:pr-3{padding-right:.75rem}.lg\:pb-3{padding-bottom:.75rem}.lg\:pl-3{padding-left:.75rem}.lg\:pt-4{padding-top:1rem}.lg\:pr-4{padding-right:1rem}.lg\:pb-4{padding-bottom:1rem}.lg\:pl-4{padding-left:1rem}.lg\:pt-5{padding-top:1.25rem}.lg\:pr-5{padding-right:1.25rem}.lg\:pb-5{padding-bottom:1.25rem}.lg\:pl-5{padding-left:1.25rem}.lg\:pt-6{padding-top:1.5rem}.lg\:pr-6{padding-right:1.5rem}.lg\:pb-6{padding-bottom:1.5rem}.lg\:pl-6{padding-left:1.5rem}.lg\:pt-8{padding-top:2rem}.lg\:pr-8{padding-right:2rem}.lg\:pb-8{padding-bottom:2rem}.lg\:pl-8{padding-left:2rem}.lg\:pt-10{padding-top:2.5rem}.lg\:pr-10{padding-right:2.5rem}.lg\:pb-10{padding-bottom:2.5rem}.lg\:pl-10{padding-left:2.5rem}.lg\:pt-12{padding-top:3rem}.lg\:pr-12{padding-right:3rem}.lg\:pb-12{padding-bottom:3rem}.lg\:pl-12{padding-left:3rem}.lg\:pt-16{padding-top:4rem}.lg\:pr-16{padding-right:4rem}.lg\:pb-16{padding-bottom:4rem}.lg\:pl-16{padding-left:4rem}.lg\:pt-20{padding-top:5rem}.lg\:pr-20{padding-right:5rem}.lg\:pb-20{padding-bottom:5rem}.lg\:pl-20{padding-left:5rem}.lg\:pt-24{padding-top:6rem}.lg\:pr-24{padding-right:6rem}.lg\:pb-24{padding-bottom:6rem}.lg\:pl-24{padding-left:6rem}.lg\:pt-32{padding-top:8rem}.lg\:pr-32{padding-right:8rem}.lg\:pb-32{padding-bottom:8rem}.lg\:pl-32{padding-left:8rem}.lg\:pt-40{padding-top:10rem}.lg\:pr-40{padding-right:10rem}.lg\:pb-40{padding-bottom:10rem}.lg\:pl-40{padding-left:10rem}.lg\:pt-48{padding-top:12rem}.lg\:pr-48{padding-right:12rem}.lg\:pb-48{padding-bottom:12rem}.lg\:pl-48{padding-left:12rem}.lg\:pt-56{padding-top:14rem}.lg\:pr-56{padding-right:14rem}.lg\:pb-56{padding-bottom:14rem}.lg\:pl-56{padding-left:14rem}.lg\:pt-64{padding-top:16rem}.lg\:pr-64{padding-right:16rem}.lg\:pb-64{padding-bottom:16rem}.lg\:pl-64{padding-left:16rem}.lg\:pt-px{padding-top:1px}.lg\:pr-px{padding-right:1px}.lg\:pb-px{padding-bottom:1px}.lg\:pl-px{padding-left:1px}.lg\:placeholder-transparent:-ms-input-placeholder{color:transparent}.lg\:placeholder-transparent::-ms-input-placeholder{color:transparent}.lg\:placeholder-transparent::placeholder{color:transparent}.lg\:placeholder-current:-ms-input-placeholder{color:currentColor}.lg\:placeholder-current::-ms-input-placeholder{color:currentColor}.lg\:placeholder-current::placeholder{color:currentColor}.lg\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.lg\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.lg\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.lg\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.lg\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.lg\:focus\:placeholder-current:focus::placeholder{color:currentColor}.lg\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.lg\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.lg\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.lg\:pointer-events-none{pointer-events:none}.lg\:pointer-events-auto{pointer-events:auto}.lg\:static{position:static}.lg\:fixed{position:fixed}.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:sticky{position:-webkit-sticky;position:sticky}.lg\:inset-0{top:0;right:0;bottom:0;left:0}.lg\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.lg\:inset-y-0{top:0;bottom:0}.lg\:inset-x-0{right:0;left:0}.lg\:inset-y-auto{top:auto;bottom:auto}.lg\:inset-x-auto{right:auto;left:auto}.lg\:top-0{top:0}.lg\:right-0{right:0}.lg\:bottom-0{bottom:0}.lg\:left-0{left:0}.lg\:top-auto{top:auto}.lg\:right-auto{right:auto}.lg\:bottom-auto{bottom:auto}.lg\:left-auto{left:auto}.lg\:resize-none{resize:none}.lg\:resize-y{resize:vertical}.lg\:resize-x{resize:horizontal}.lg\:resize{resize:both}.lg\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.lg\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:shadow-none{box-shadow:none}.lg\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.lg\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:hover\:shadow-none:hover{box-shadow:none}.lg\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.lg\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:focus\:shadow-none:focus{box-shadow:none}.lg\:fill-current{fill:currentColor}.lg\:stroke-current{stroke:currentColor}.lg\:stroke-0{stroke-width:0}.lg\:stroke-1{stroke-width:1}.lg\:stroke-2{stroke-width:2}.lg\:table-auto{table-layout:auto}.lg\:table-fixed{table-layout:fixed}.lg\:text-left{text-align:left}.lg\:text-center{text-align:center}.lg\:text-right{text-align:right}.lg\:text-justify{text-align:justify}.lg\:text-transparent{color:transparent}.lg\:text-current{color:currentColor}.lg\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.lg\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.lg\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.lg\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.lg\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.lg\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.lg\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.lg\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.lg\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.lg\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.lg\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.lg\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.lg\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.lg\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.lg\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.lg\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.lg\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.lg\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.lg\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.lg\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.lg\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.lg\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.lg\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.lg\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.lg\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.lg\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.lg\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.lg\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.lg\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.lg\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.lg\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.lg\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.lg\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.lg\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.lg\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.lg\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.lg\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.lg\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.lg\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.lg\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.lg\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.lg\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.lg\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.lg\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.lg\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.lg\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.lg\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.lg\:hover\:text-transparent:hover{color:transparent}.lg\:hover\:text-current:hover{color:currentColor}.lg\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.lg\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.lg\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.lg\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.lg\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.lg\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.lg\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.lg\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.lg\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.lg\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.lg\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.lg\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.lg\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.lg\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.lg\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.lg\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.lg\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.lg\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.lg\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.lg\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.lg\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.lg\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.lg\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.lg\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.lg\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.lg\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.lg\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.lg\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.lg\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.lg\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.lg\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.lg\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.lg\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.lg\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.lg\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.lg\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.lg\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.lg\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.lg\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.lg\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.lg\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.lg\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.lg\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.lg\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.lg\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.lg\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.lg\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.lg\:focus\:text-transparent:focus{color:transparent}.lg\:focus\:text-current:focus{color:currentColor}.lg\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.lg\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.lg\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.lg\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.lg\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.lg\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.lg\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.lg\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.lg\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.lg\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.lg\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.lg\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.lg\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.lg\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.lg\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.lg\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.lg\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.lg\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.lg\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.lg\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.lg\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.lg\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.lg\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.lg\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.lg\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.lg\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.lg\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.lg\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.lg\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.lg\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.lg\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.lg\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.lg\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.lg\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.lg\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.lg\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.lg\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.lg\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.lg\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.lg\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.lg\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.lg\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.lg\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.lg\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.lg\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.lg\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.lg\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.lg\:text-opacity-0{--text-opacity:0}.lg\:text-opacity-25{--text-opacity:0.25}.lg\:text-opacity-50{--text-opacity:0.5}.lg\:text-opacity-75{--text-opacity:0.75}.lg\:text-opacity-100{--text-opacity:1}.lg\:hover\:text-opacity-0:hover{--text-opacity:0}.lg\:hover\:text-opacity-25:hover{--text-opacity:0.25}.lg\:hover\:text-opacity-50:hover{--text-opacity:0.5}.lg\:hover\:text-opacity-75:hover{--text-opacity:0.75}.lg\:hover\:text-opacity-100:hover{--text-opacity:1}.lg\:focus\:text-opacity-0:focus{--text-opacity:0}.lg\:focus\:text-opacity-25:focus{--text-opacity:0.25}.lg\:focus\:text-opacity-50:focus{--text-opacity:0.5}.lg\:focus\:text-opacity-75:focus{--text-opacity:0.75}.lg\:focus\:text-opacity-100:focus{--text-opacity:1}.lg\:italic{font-style:italic}.lg\:not-italic{font-style:normal}.lg\:uppercase{text-transform:uppercase}.lg\:lowercase{text-transform:lowercase}.lg\:capitalize{text-transform:capitalize}.lg\:normal-case{text-transform:none}.lg\:underline{text-decoration:underline}.lg\:line-through{text-decoration:line-through}.lg\:no-underline{text-decoration:none}.lg\:hover\:underline:hover{text-decoration:underline}.lg\:hover\:line-through:hover{text-decoration:line-through}.lg\:hover\:no-underline:hover{text-decoration:none}.lg\:focus\:underline:focus{text-decoration:underline}.lg\:focus\:line-through:focus{text-decoration:line-through}.lg\:focus\:no-underline:focus{text-decoration:none}.lg\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\:diagonal-fractions,.lg\:lining-nums,.lg\:oldstyle-nums,.lg\:ordinal,.lg\:proportional-nums,.lg\:slashed-zero,.lg\:stacked-fractions,.lg\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.lg\:normal-nums{font-variant-numeric:normal}.lg\:ordinal{--font-variant-numeric-ordinal:ordinal}.lg\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.lg\:lining-nums{--font-variant-numeric-figure:lining-nums}.lg\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.lg\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.lg\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.lg\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.lg\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.lg\:tracking-tighter{letter-spacing:-.05em}.lg\:tracking-tight{letter-spacing:-.025em}.lg\:tracking-normal{letter-spacing:0}.lg\:tracking-wide{letter-spacing:.025em}.lg\:tracking-wider{letter-spacing:.05em}.lg\:tracking-widest{letter-spacing:.1em}.lg\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.lg\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.lg\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.lg\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.lg\:align-baseline{vertical-align:baseline}.lg\:align-top{vertical-align:top}.lg\:align-middle{vertical-align:middle}.lg\:align-bottom{vertical-align:bottom}.lg\:align-text-top{vertical-align:text-top}.lg\:align-text-bottom{vertical-align:text-bottom}.lg\:visible{visibility:visible}.lg\:invisible{visibility:hidden}.lg\:whitespace-normal{white-space:normal}.lg\:whitespace-no-wrap{white-space:nowrap}.lg\:whitespace-pre{white-space:pre}.lg\:whitespace-pre-line{white-space:pre-line}.lg\:whitespace-pre-wrap{white-space:pre-wrap}.lg\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.lg\:break-words{word-wrap:break-word;overflow-wrap:break-word}.lg\:break-all{word-break:break-all}.lg\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lg\:w-0{width:0}.lg\:w-1{width:.25rem}.lg\:w-2{width:.5rem}.lg\:w-3{width:.75rem}.lg\:w-4{width:1rem}.lg\:w-5{width:1.25rem}.lg\:w-6{width:1.5rem}.lg\:w-8{width:2rem}.lg\:w-10{width:2.5rem}.lg\:w-12{width:3rem}.lg\:w-16{width:4rem}.lg\:w-20{width:5rem}.lg\:w-24{width:6rem}.lg\:w-32{width:8rem}.lg\:w-40{width:10rem}.lg\:w-48{width:12rem}.lg\:w-56{width:14rem}.lg\:w-64{width:16rem}.lg\:w-auto{width:auto}.lg\:w-px{width:1px}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.333333%}.lg\:w-2\/3{width:66.666667%}.lg\:w-1\/4{width:25%}.lg\:w-2\/4{width:50%}.lg\:w-3\/4{width:75%}.lg\:w-1\/5{width:20%}.lg\:w-2\/5{width:40%}.lg\:w-3\/5{width:60%}.lg\:w-4\/5{width:80%}.lg\:w-1\/6{width:16.666667%}.lg\:w-2\/6{width:33.333333%}.lg\:w-3\/6{width:50%}.lg\:w-4\/6{width:66.666667%}.lg\:w-5\/6{width:83.333333%}.lg\:w-1\/12{width:8.333333%}.lg\:w-2\/12{width:16.666667%}.lg\:w-3\/12{width:25%}.lg\:w-4\/12{width:33.333333%}.lg\:w-5\/12{width:41.666667%}.lg\:w-6\/12{width:50%}.lg\:w-7\/12{width:58.333333%}.lg\:w-8\/12{width:66.666667%}.lg\:w-9\/12{width:75%}.lg\:w-10\/12{width:83.333333%}.lg\:w-11\/12{width:91.666667%}.lg\:w-full{width:100%}.lg\:w-screen{width:100vw}.lg\:z-0{z-index:0}.lg\:z-10{z-index:10}.lg\:z-20{z-index:20}.lg\:z-30{z-index:30}.lg\:z-40{z-index:40}.lg\:z-50{z-index:50}.lg\:z-auto{z-index:auto}.lg\:gap-0{grid-gap:0;gap:0}.lg\:gap-1{grid-gap:.25rem;gap:.25rem}.lg\:gap-2{grid-gap:.5rem;gap:.5rem}.lg\:gap-3{grid-gap:.75rem;gap:.75rem}.lg\:gap-4{grid-gap:1rem;gap:1rem}.lg\:gap-5{grid-gap:1.25rem;gap:1.25rem}.lg\:gap-6{grid-gap:1.5rem;gap:1.5rem}.lg\:gap-8{grid-gap:2rem;gap:2rem}.lg\:gap-10{grid-gap:2.5rem;gap:2.5rem}.lg\:gap-12{grid-gap:3rem;gap:3rem}.lg\:gap-16{grid-gap:4rem;gap:4rem}.lg\:gap-20{grid-gap:5rem;gap:5rem}.lg\:gap-24{grid-gap:6rem;gap:6rem}.lg\:gap-32{grid-gap:8rem;gap:8rem}.lg\:gap-40{grid-gap:10rem;gap:10rem}.lg\:gap-48{grid-gap:12rem;gap:12rem}.lg\:gap-56{grid-gap:14rem;gap:14rem}.lg\:gap-64{grid-gap:16rem;gap:16rem}.lg\:gap-px{grid-gap:1px;gap:1px}.lg\:col-gap-0{grid-column-gap:0;column-gap:0}.lg\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.lg\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.lg\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.lg\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.lg\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.lg\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.lg\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.lg\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.lg\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.lg\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.lg\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.lg\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.lg\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.lg\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.lg\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.lg\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.lg\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.lg\:col-gap-px{grid-column-gap:1px;column-gap:1px}.lg\:gap-x-0{grid-column-gap:0;column-gap:0}.lg\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.lg\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.lg\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.lg\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.lg\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.lg\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.lg\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.lg\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.lg\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.lg\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.lg\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.lg\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.lg\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.lg\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.lg\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.lg\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.lg\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.lg\:gap-x-px{grid-column-gap:1px;column-gap:1px}.lg\:row-gap-0{grid-row-gap:0;row-gap:0}.lg\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.lg\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.lg\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.lg\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.lg\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.lg\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.lg\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.lg\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.lg\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.lg\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.lg\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.lg\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.lg\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.lg\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.lg\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.lg\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.lg\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.lg\:row-gap-px{grid-row-gap:1px;row-gap:1px}.lg\:gap-y-0{grid-row-gap:0;row-gap:0}.lg\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.lg\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.lg\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.lg\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.lg\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.lg\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.lg\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.lg\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.lg\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.lg\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.lg\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.lg\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.lg\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.lg\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.lg\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.lg\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.lg\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.lg\:gap-y-px{grid-row-gap:1px;row-gap:1px}.lg\:grid-flow-row{grid-auto-flow:row}.lg\:grid-flow-col{grid-auto-flow:column}.lg\:grid-flow-row-dense{grid-auto-flow:row dense}.lg\:grid-flow-col-dense{grid-auto-flow:column dense}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}.lg\:auto-cols-auto{grid-auto-columns:auto}.lg\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.lg\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.lg\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.lg\:col-auto{grid-column:auto}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-full{grid-column:1/-1}.lg\:col-start-1{grid-column-start:1}.lg\:col-start-2{grid-column-start:2}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:col-start-5{grid-column-start:5}.lg\:col-start-6{grid-column-start:6}.lg\:col-start-7{grid-column-start:7}.lg\:col-start-8{grid-column-start:8}.lg\:col-start-9{grid-column-start:9}.lg\:col-start-10{grid-column-start:10}.lg\:col-start-11{grid-column-start:11}.lg\:col-start-12{grid-column-start:12}.lg\:col-start-13{grid-column-start:13}.lg\:col-start-auto{grid-column-start:auto}.lg\:col-end-1{grid-column-end:1}.lg\:col-end-2{grid-column-end:2}.lg\:col-end-3{grid-column-end:3}.lg\:col-end-4{grid-column-end:4}.lg\:col-end-5{grid-column-end:5}.lg\:col-end-6{grid-column-end:6}.lg\:col-end-7{grid-column-end:7}.lg\:col-end-8{grid-column-end:8}.lg\:col-end-9{grid-column-end:9}.lg\:col-end-10{grid-column-end:10}.lg\:col-end-11{grid-column-end:11}.lg\:col-end-12{grid-column-end:12}.lg\:col-end-13{grid-column-end:13}.lg\:col-end-auto{grid-column-end:auto}.lg\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.lg\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.lg\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.lg\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.lg\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.lg\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.lg\:grid-rows-none{grid-template-rows:none}.lg\:auto-rows-auto{grid-auto-rows:auto}.lg\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.lg\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.lg\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.lg\:row-auto{grid-row:auto}.lg\:row-span-1{grid-row:span 1/span 1}.lg\:row-span-2{grid-row:span 2/span 2}.lg\:row-span-3{grid-row:span 3/span 3}.lg\:row-span-4{grid-row:span 4/span 4}.lg\:row-span-5{grid-row:span 5/span 5}.lg\:row-span-6{grid-row:span 6/span 6}.lg\:row-span-full{grid-row:1/-1}.lg\:row-start-1{grid-row-start:1}.lg\:row-start-2{grid-row-start:2}.lg\:row-start-3{grid-row-start:3}.lg\:row-start-4{grid-row-start:4}.lg\:row-start-5{grid-row-start:5}.lg\:row-start-6{grid-row-start:6}.lg\:row-start-7{grid-row-start:7}.lg\:row-start-auto{grid-row-start:auto}.lg\:row-end-1{grid-row-end:1}.lg\:row-end-2{grid-row-end:2}.lg\:row-end-3{grid-row-end:3}.lg\:row-end-4{grid-row-end:4}.lg\:row-end-5{grid-row-end:5}.lg\:row-end-6{grid-row-end:6}.lg\:row-end-7{grid-row-end:7}.lg\:row-end-auto{grid-row-end:auto}.lg\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.lg\:transform-none{transform:none}.lg\:origin-center{transform-origin:center}.lg\:origin-top{transform-origin:top}.lg\:origin-top-right{transform-origin:top right}.lg\:origin-right{transform-origin:right}.lg\:origin-bottom-right{transform-origin:bottom right}.lg\:origin-bottom{transform-origin:bottom}.lg\:origin-bottom-left{transform-origin:bottom left}.lg\:origin-left{transform-origin:left}.lg\:origin-top-left{transform-origin:top left}.lg\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.lg\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.lg\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:scale-x-0{--transform-scale-x:0}.lg\:scale-x-50{--transform-scale-x:.5}.lg\:scale-x-75{--transform-scale-x:.75}.lg\:scale-x-90{--transform-scale-x:.9}.lg\:scale-x-95{--transform-scale-x:.95}.lg\:scale-x-100{--transform-scale-x:1}.lg\:scale-x-105{--transform-scale-x:1.05}.lg\:scale-x-110{--transform-scale-x:1.1}.lg\:scale-x-125{--transform-scale-x:1.25}.lg\:scale-x-150{--transform-scale-x:1.5}.lg\:scale-y-0{--transform-scale-y:0}.lg\:scale-y-50{--transform-scale-y:.5}.lg\:scale-y-75{--transform-scale-y:.75}.lg\:scale-y-90{--transform-scale-y:.9}.lg\:scale-y-95{--transform-scale-y:.95}.lg\:scale-y-100{--transform-scale-y:1}.lg\:scale-y-105{--transform-scale-y:1.05}.lg\:scale-y-110{--transform-scale-y:1.1}.lg\:scale-y-125{--transform-scale-y:1.25}.lg\:scale-y-150{--transform-scale-y:1.5}.lg\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.lg\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.lg\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:hover\:scale-x-0:hover{--transform-scale-x:0}.lg\:hover\:scale-x-50:hover{--transform-scale-x:.5}.lg\:hover\:scale-x-75:hover{--transform-scale-x:.75}.lg\:hover\:scale-x-90:hover{--transform-scale-x:.9}.lg\:hover\:scale-x-95:hover{--transform-scale-x:.95}.lg\:hover\:scale-x-100:hover{--transform-scale-x:1}.lg\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.lg\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.lg\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.lg\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.lg\:hover\:scale-y-0:hover{--transform-scale-y:0}.lg\:hover\:scale-y-50:hover{--transform-scale-y:.5}.lg\:hover\:scale-y-75:hover{--transform-scale-y:.75}.lg\:hover\:scale-y-90:hover{--transform-scale-y:.9}.lg\:hover\:scale-y-95:hover{--transform-scale-y:.95}.lg\:hover\:scale-y-100:hover{--transform-scale-y:1}.lg\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.lg\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.lg\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.lg\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.lg\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.lg\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.lg\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:focus\:scale-x-0:focus{--transform-scale-x:0}.lg\:focus\:scale-x-50:focus{--transform-scale-x:.5}.lg\:focus\:scale-x-75:focus{--transform-scale-x:.75}.lg\:focus\:scale-x-90:focus{--transform-scale-x:.9}.lg\:focus\:scale-x-95:focus{--transform-scale-x:.95}.lg\:focus\:scale-x-100:focus{--transform-scale-x:1}.lg\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.lg\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.lg\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.lg\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.lg\:focus\:scale-y-0:focus{--transform-scale-y:0}.lg\:focus\:scale-y-50:focus{--transform-scale-y:.5}.lg\:focus\:scale-y-75:focus{--transform-scale-y:.75}.lg\:focus\:scale-y-90:focus{--transform-scale-y:.9}.lg\:focus\:scale-y-95:focus{--transform-scale-y:.95}.lg\:focus\:scale-y-100:focus{--transform-scale-y:1}.lg\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.lg\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.lg\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.lg\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.lg\:rotate-0{--transform-rotate:0}.lg\:rotate-1{--transform-rotate:1deg}.lg\:rotate-2{--transform-rotate:2deg}.lg\:rotate-3{--transform-rotate:3deg}.lg\:rotate-6{--transform-rotate:6deg}.lg\:rotate-12{--transform-rotate:12deg}.lg\:rotate-45{--transform-rotate:45deg}.lg\:rotate-90{--transform-rotate:90deg}.lg\:rotate-180{--transform-rotate:180deg}.lg\:-rotate-180{--transform-rotate:-180deg}.lg\:-rotate-90{--transform-rotate:-90deg}.lg\:-rotate-45{--transform-rotate:-45deg}.lg\:-rotate-12{--transform-rotate:-12deg}.lg\:-rotate-6{--transform-rotate:-6deg}.lg\:-rotate-3{--transform-rotate:-3deg}.lg\:-rotate-2{--transform-rotate:-2deg}.lg\:-rotate-1{--transform-rotate:-1deg}.lg\:hover\:rotate-0:hover{--transform-rotate:0}.lg\:hover\:rotate-1:hover{--transform-rotate:1deg}.lg\:hover\:rotate-2:hover{--transform-rotate:2deg}.lg\:hover\:rotate-3:hover{--transform-rotate:3deg}.lg\:hover\:rotate-6:hover{--transform-rotate:6deg}.lg\:hover\:rotate-12:hover{--transform-rotate:12deg}.lg\:hover\:rotate-45:hover{--transform-rotate:45deg}.lg\:hover\:rotate-90:hover{--transform-rotate:90deg}.lg\:hover\:rotate-180:hover{--transform-rotate:180deg}.lg\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.lg\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.lg\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.lg\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.lg\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.lg\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.lg\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.lg\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.lg\:focus\:rotate-0:focus{--transform-rotate:0}.lg\:focus\:rotate-1:focus{--transform-rotate:1deg}.lg\:focus\:rotate-2:focus{--transform-rotate:2deg}.lg\:focus\:rotate-3:focus{--transform-rotate:3deg}.lg\:focus\:rotate-6:focus{--transform-rotate:6deg}.lg\:focus\:rotate-12:focus{--transform-rotate:12deg}.lg\:focus\:rotate-45:focus{--transform-rotate:45deg}.lg\:focus\:rotate-90:focus{--transform-rotate:90deg}.lg\:focus\:rotate-180:focus{--transform-rotate:180deg}.lg\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.lg\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.lg\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.lg\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.lg\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.lg\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.lg\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.lg\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.lg\:translate-x-0{--transform-translate-x:0}.lg\:translate-x-1{--transform-translate-x:0.25rem}.lg\:translate-x-2{--transform-translate-x:0.5rem}.lg\:translate-x-3{--transform-translate-x:0.75rem}.lg\:translate-x-4{--transform-translate-x:1rem}.lg\:translate-x-5{--transform-translate-x:1.25rem}.lg\:translate-x-6{--transform-translate-x:1.5rem}.lg\:translate-x-8{--transform-translate-x:2rem}.lg\:translate-x-10{--transform-translate-x:2.5rem}.lg\:translate-x-12{--transform-translate-x:3rem}.lg\:translate-x-16{--transform-translate-x:4rem}.lg\:translate-x-20{--transform-translate-x:5rem}.lg\:translate-x-24{--transform-translate-x:6rem}.lg\:translate-x-32{--transform-translate-x:8rem}.lg\:translate-x-40{--transform-translate-x:10rem}.lg\:translate-x-48{--transform-translate-x:12rem}.lg\:translate-x-56{--transform-translate-x:14rem}.lg\:translate-x-64{--transform-translate-x:16rem}.lg\:translate-x-px{--transform-translate-x:1px}.lg\:-translate-x-1{--transform-translate-x:-0.25rem}.lg\:-translate-x-2{--transform-translate-x:-0.5rem}.lg\:-translate-x-3{--transform-translate-x:-0.75rem}.lg\:-translate-x-4{--transform-translate-x:-1rem}.lg\:-translate-x-5{--transform-translate-x:-1.25rem}.lg\:-translate-x-6{--transform-translate-x:-1.5rem}.lg\:-translate-x-8{--transform-translate-x:-2rem}.lg\:-translate-x-10{--transform-translate-x:-2.5rem}.lg\:-translate-x-12{--transform-translate-x:-3rem}.lg\:-translate-x-16{--transform-translate-x:-4rem}.lg\:-translate-x-20{--transform-translate-x:-5rem}.lg\:-translate-x-24{--transform-translate-x:-6rem}.lg\:-translate-x-32{--transform-translate-x:-8rem}.lg\:-translate-x-40{--transform-translate-x:-10rem}.lg\:-translate-x-48{--transform-translate-x:-12rem}.lg\:-translate-x-56{--transform-translate-x:-14rem}.lg\:-translate-x-64{--transform-translate-x:-16rem}.lg\:-translate-x-px{--transform-translate-x:-1px}.lg\:-translate-x-full{--transform-translate-x:-100%}.lg\:-translate-x-1\/2{--transform-translate-x:-50%}.lg\:translate-x-1\/2{--transform-translate-x:50%}.lg\:translate-x-full{--transform-translate-x:100%}.lg\:translate-y-0{--transform-translate-y:0}.lg\:translate-y-1{--transform-translate-y:0.25rem}.lg\:translate-y-2{--transform-translate-y:0.5rem}.lg\:translate-y-3{--transform-translate-y:0.75rem}.lg\:translate-y-4{--transform-translate-y:1rem}.lg\:translate-y-5{--transform-translate-y:1.25rem}.lg\:translate-y-6{--transform-translate-y:1.5rem}.lg\:translate-y-8{--transform-translate-y:2rem}.lg\:translate-y-10{--transform-translate-y:2.5rem}.lg\:translate-y-12{--transform-translate-y:3rem}.lg\:translate-y-16{--transform-translate-y:4rem}.lg\:translate-y-20{--transform-translate-y:5rem}.lg\:translate-y-24{--transform-translate-y:6rem}.lg\:translate-y-32{--transform-translate-y:8rem}.lg\:translate-y-40{--transform-translate-y:10rem}.lg\:translate-y-48{--transform-translate-y:12rem}.lg\:translate-y-56{--transform-translate-y:14rem}.lg\:translate-y-64{--transform-translate-y:16rem}.lg\:translate-y-px{--transform-translate-y:1px}.lg\:-translate-y-1{--transform-translate-y:-0.25rem}.lg\:-translate-y-2{--transform-translate-y:-0.5rem}.lg\:-translate-y-3{--transform-translate-y:-0.75rem}.lg\:-translate-y-4{--transform-translate-y:-1rem}.lg\:-translate-y-5{--transform-translate-y:-1.25rem}.lg\:-translate-y-6{--transform-translate-y:-1.5rem}.lg\:-translate-y-8{--transform-translate-y:-2rem}.lg\:-translate-y-10{--transform-translate-y:-2.5rem}.lg\:-translate-y-12{--transform-translate-y:-3rem}.lg\:-translate-y-16{--transform-translate-y:-4rem}.lg\:-translate-y-20{--transform-translate-y:-5rem}.lg\:-translate-y-24{--transform-translate-y:-6rem}.lg\:-translate-y-32{--transform-translate-y:-8rem}.lg\:-translate-y-40{--transform-translate-y:-10rem}.lg\:-translate-y-48{--transform-translate-y:-12rem}.lg\:-translate-y-56{--transform-translate-y:-14rem}.lg\:-translate-y-64{--transform-translate-y:-16rem}.lg\:-translate-y-px{--transform-translate-y:-1px}.lg\:-translate-y-full{--transform-translate-y:-100%}.lg\:-translate-y-1\/2{--transform-translate-y:-50%}.lg\:translate-y-1\/2{--transform-translate-y:50%}.lg\:translate-y-full{--transform-translate-y:100%}.lg\:hover\:translate-x-0:hover{--transform-translate-x:0}.lg\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.lg\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.lg\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.lg\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.lg\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.lg\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.lg\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.lg\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.lg\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.lg\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.lg\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.lg\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.lg\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.lg\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.lg\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.lg\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.lg\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.lg\:hover\:translate-x-px:hover{--transform-translate-x:1px}.lg\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.lg\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.lg\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.lg\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.lg\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.lg\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.lg\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.lg\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.lg\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.lg\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.lg\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.lg\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.lg\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.lg\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.lg\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.lg\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.lg\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.lg\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.lg\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.lg\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.lg\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.lg\:hover\:translate-x-full:hover{--transform-translate-x:100%}.lg\:hover\:translate-y-0:hover{--transform-translate-y:0}.lg\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.lg\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.lg\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.lg\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.lg\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.lg\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.lg\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.lg\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.lg\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.lg\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.lg\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.lg\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.lg\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.lg\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.lg\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.lg\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.lg\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.lg\:hover\:translate-y-px:hover{--transform-translate-y:1px}.lg\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.lg\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.lg\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.lg\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.lg\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.lg\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.lg\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.lg\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.lg\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.lg\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.lg\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.lg\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.lg\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.lg\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.lg\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.lg\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.lg\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.lg\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.lg\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.lg\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.lg\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.lg\:hover\:translate-y-full:hover{--transform-translate-y:100%}.lg\:focus\:translate-x-0:focus{--transform-translate-x:0}.lg\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.lg\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.lg\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.lg\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.lg\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.lg\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.lg\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.lg\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.lg\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.lg\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.lg\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.lg\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.lg\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.lg\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.lg\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.lg\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.lg\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.lg\:focus\:translate-x-px:focus{--transform-translate-x:1px}.lg\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.lg\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.lg\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.lg\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.lg\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.lg\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.lg\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.lg\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.lg\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.lg\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.lg\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.lg\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.lg\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.lg\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.lg\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.lg\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.lg\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.lg\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.lg\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.lg\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.lg\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.lg\:focus\:translate-x-full:focus{--transform-translate-x:100%}.lg\:focus\:translate-y-0:focus{--transform-translate-y:0}.lg\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.lg\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.lg\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.lg\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.lg\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.lg\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.lg\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.lg\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.lg\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.lg\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.lg\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.lg\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.lg\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.lg\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.lg\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.lg\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.lg\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.lg\:focus\:translate-y-px:focus{--transform-translate-y:1px}.lg\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.lg\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.lg\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.lg\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.lg\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.lg\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.lg\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.lg\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.lg\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.lg\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.lg\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.lg\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.lg\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.lg\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.lg\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.lg\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.lg\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.lg\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.lg\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.lg\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.lg\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.lg\:focus\:translate-y-full:focus{--transform-translate-y:100%}.lg\:skew-x-0{--transform-skew-x:0}.lg\:skew-x-1{--transform-skew-x:1deg}.lg\:skew-x-2{--transform-skew-x:2deg}.lg\:skew-x-3{--transform-skew-x:3deg}.lg\:skew-x-6{--transform-skew-x:6deg}.lg\:skew-x-12{--transform-skew-x:12deg}.lg\:-skew-x-12{--transform-skew-x:-12deg}.lg\:-skew-x-6{--transform-skew-x:-6deg}.lg\:-skew-x-3{--transform-skew-x:-3deg}.lg\:-skew-x-2{--transform-skew-x:-2deg}.lg\:-skew-x-1{--transform-skew-x:-1deg}.lg\:skew-y-0{--transform-skew-y:0}.lg\:skew-y-1{--transform-skew-y:1deg}.lg\:skew-y-2{--transform-skew-y:2deg}.lg\:skew-y-3{--transform-skew-y:3deg}.lg\:skew-y-6{--transform-skew-y:6deg}.lg\:skew-y-12{--transform-skew-y:12deg}.lg\:-skew-y-12{--transform-skew-y:-12deg}.lg\:-skew-y-6{--transform-skew-y:-6deg}.lg\:-skew-y-3{--transform-skew-y:-3deg}.lg\:-skew-y-2{--transform-skew-y:-2deg}.lg\:-skew-y-1{--transform-skew-y:-1deg}.lg\:hover\:skew-x-0:hover{--transform-skew-x:0}.lg\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.lg\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.lg\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.lg\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.lg\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.lg\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.lg\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.lg\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.lg\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.lg\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.lg\:hover\:skew-y-0:hover{--transform-skew-y:0}.lg\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.lg\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.lg\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.lg\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.lg\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.lg\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.lg\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.lg\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.lg\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.lg\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.lg\:focus\:skew-x-0:focus{--transform-skew-x:0}.lg\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.lg\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.lg\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.lg\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.lg\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.lg\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.lg\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.lg\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.lg\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.lg\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.lg\:focus\:skew-y-0:focus{--transform-skew-y:0}.lg\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.lg\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.lg\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.lg\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.lg\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.lg\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.lg\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.lg\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.lg\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.lg\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.lg\:transition-none{transition-property:none}.lg\:transition-all{transition-property:all}.lg\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.lg\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.lg\:transition-opacity{transition-property:opacity}.lg\:transition-shadow{transition-property:box-shadow}.lg\:transition-transform{transition-property:transform}.lg\:ease-linear{transition-timing-function:linear}.lg\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lg\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.lg\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:duration-75{transition-duration:75ms}.lg\:duration-100{transition-duration:.1s}.lg\:duration-150{transition-duration:150ms}.lg\:duration-200{transition-duration:.2s}.lg\:duration-300{transition-duration:.3s}.lg\:duration-500{transition-duration:.5s}.lg\:duration-700{transition-duration:.7s}.lg\:duration-1000{transition-duration:1s}.lg\:delay-75{transition-delay:75ms}.lg\:delay-100{transition-delay:.1s}.lg\:delay-150{transition-delay:150ms}.lg\:delay-200{transition-delay:.2s}.lg\:delay-300{transition-delay:.3s}.lg\:delay-500{transition-delay:.5s}.lg\:delay-700{transition-delay:.7s}.lg\:delay-1000{transition-delay:1s}.lg\:animate-none{animation:none}.lg\:animate-spin{animation:spin 1s linear infinite}.lg\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.lg\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.lg\:animate-bounce{animation:bounce 1s infinite}}@media (min-width:1280px){.xl\:container{width:100%}@media (min-width:640px){.xl\:container{max-width:640px}}@media (min-width:768px){.xl\:container{max-width:768px}}@media (min-width:1024px){.xl\:container{max-width:1024px}}@media (min-width:1280px){.xl\:container{max-width:1280px}}.xl\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.xl\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.xl\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.xl\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.xl\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.xl\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.xl\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.xl\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.xl\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.xl\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.xl\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.xl\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.xl\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.xl\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.xl\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.xl\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.xl\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.xl\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.xl\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.xl\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.xl\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.xl\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.xl\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.xl\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.xl\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.xl\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.xl\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.xl\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.xl\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.xl\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.xl\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.xl\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.xl\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.xl\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.xl\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.xl\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.xl\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.xl\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.xl\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.xl\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.xl\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.xl\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.xl\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.xl\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.xl\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.xl\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.xl\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.xl\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.xl\:divide-transparent>:not(template)~:not(template){border-color:transparent}.xl\:divide-current>:not(template)~:not(template){border-color:currentColor}.xl\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.xl\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.xl\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.xl\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.xl\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.xl\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.xl\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.xl\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.xl\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.xl\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.xl\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.xl\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.xl\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.xl\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.xl\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.xl\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.xl\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.xl\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.xl\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.xl\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.xl\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.xl\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.xl\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.xl\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.xl\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.xl\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.xl\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.xl\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.xl\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.xl\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.xl\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.xl\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.xl\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.xl\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.xl\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.xl\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.xl\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.xl\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.xl\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.xl\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.xl\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.xl\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.xl\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.xl\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.xl\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.xl\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.xl\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.xl\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.xl\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.xl\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.xl\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.xl\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.xl\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.xl\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.xl\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.xl\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.xl\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.xl\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.xl\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.xl\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.xl\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.xl\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.xl\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.xl\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.xl\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.xl\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.xl\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.xl\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.xl\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.xl\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.xl\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.xl\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.xl\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.xl\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.xl\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.xl\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.xl\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.xl\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.xl\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.xl\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.xl\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.xl\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.xl\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.xl\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.xl\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.xl\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.xl\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.xl\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.xl\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.xl\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.xl\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.xl\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.xl\:divide-solid>:not(template)~:not(template){border-style:solid}.xl\:divide-dashed>:not(template)~:not(template){border-style:dashed}.xl\:divide-dotted>:not(template)~:not(template){border-style:dotted}.xl\:divide-double>:not(template)~:not(template){border-style:double}.xl\:divide-none>:not(template)~:not(template){border-style:none}.xl\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.xl\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.xl\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.xl\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.xl\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.xl\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.xl\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.xl\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.xl\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.xl\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.xl\:bg-fixed{background-attachment:fixed}.xl\:bg-local{background-attachment:local}.xl\:bg-scroll{background-attachment:scroll}.xl\:bg-clip-border{background-clip:border-box}.xl\:bg-clip-padding{background-clip:padding-box}.xl\:bg-clip-content{background-clip:content-box}.xl\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.xl\:bg-transparent{background-color:transparent}.xl\:bg-current{background-color:currentColor}.xl\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.xl\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.xl\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.xl\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.xl\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.xl\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.xl\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.xl\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.xl\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.xl\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.xl\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.xl\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.xl\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.xl\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.xl\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.xl\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.xl\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.xl\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.xl\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.xl\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.xl\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.xl\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.xl\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.xl\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.xl\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.xl\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.xl\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.xl\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.xl\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.xl\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.xl\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.xl\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.xl\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.xl\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.xl\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.xl\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.xl\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.xl\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.xl\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.xl\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.xl\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.xl\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.xl\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.xl\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.xl\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.xl\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.xl\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.xl\:hover\:bg-transparent:hover{background-color:transparent}.xl\:hover\:bg-current:hover{background-color:currentColor}.xl\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.xl\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.xl\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.xl\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.xl\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.xl\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.xl\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.xl\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.xl\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.xl\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.xl\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.xl\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.xl\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.xl\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.xl\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.xl\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.xl\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.xl\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.xl\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.xl\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.xl\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.xl\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.xl\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.xl\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.xl\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.xl\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.xl\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.xl\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.xl\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.xl\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.xl\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.xl\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.xl\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.xl\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.xl\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.xl\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.xl\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.xl\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.xl\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.xl\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.xl\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.xl\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.xl\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.xl\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.xl\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.xl\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.xl\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.xl\:focus\:bg-transparent:focus{background-color:transparent}.xl\:focus\:bg-current:focus{background-color:currentColor}.xl\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.xl\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.xl\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.xl\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.xl\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.xl\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.xl\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.xl\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.xl\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.xl\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.xl\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.xl\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.xl\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.xl\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.xl\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.xl\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.xl\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.xl\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.xl\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.xl\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.xl\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.xl\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.xl\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.xl\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.xl\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.xl\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.xl\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.xl\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.xl\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.xl\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.xl\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.xl\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.xl\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.xl\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.xl\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.xl\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.xl\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.xl\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.xl\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.xl\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.xl\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.xl\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.xl\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.xl\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.xl\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.xl\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.xl\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.xl\:bg-none{background-image:none}.xl\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.xl\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.xl\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.xl\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.xl\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.xl\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.xl\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.xl\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.xl\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:to-transparent{--gradient-to-color:transparent}.xl\:to-current{--gradient-to-color:currentColor}.xl\:to-black{--gradient-to-color:#000}.xl\:to-white{--gradient-to-color:#fff}.xl\:to-gray-100{--gradient-to-color:#f7fafc}.xl\:to-gray-200{--gradient-to-color:#edf2f7}.xl\:to-gray-300{--gradient-to-color:#e2e8f0}.xl\:to-gray-400{--gradient-to-color:#cbd5e0}.xl\:to-gray-500{--gradient-to-color:#a0aec0}.xl\:to-gray-600{--gradient-to-color:#718096}.xl\:to-gray-700{--gradient-to-color:#4a5568}.xl\:to-gray-800{--gradient-to-color:#2d3748}.xl\:to-gray-900{--gradient-to-color:#1a202c}.xl\:to-red-100{--gradient-to-color:#fff5f5}.xl\:to-red-200{--gradient-to-color:#fed7d7}.xl\:to-red-300{--gradient-to-color:#feb2b2}.xl\:to-red-400{--gradient-to-color:#fc8181}.xl\:to-red-500{--gradient-to-color:#f56565}.xl\:to-red-600{--gradient-to-color:#e53e3e}.xl\:to-red-700{--gradient-to-color:#c53030}.xl\:to-red-800{--gradient-to-color:#9b2c2c}.xl\:to-red-900{--gradient-to-color:#742a2a}.xl\:to-orange-100{--gradient-to-color:#fffaf0}.xl\:to-orange-200{--gradient-to-color:#feebc8}.xl\:to-orange-300{--gradient-to-color:#fbd38d}.xl\:to-orange-400{--gradient-to-color:#f6ad55}.xl\:to-orange-500{--gradient-to-color:#ed8936}.xl\:to-orange-600{--gradient-to-color:#dd6b20}.xl\:to-orange-700{--gradient-to-color:#c05621}.xl\:to-orange-800{--gradient-to-color:#9c4221}.xl\:to-orange-900{--gradient-to-color:#7b341e}.xl\:to-yellow-100{--gradient-to-color:#fffff0}.xl\:to-yellow-200{--gradient-to-color:#fefcbf}.xl\:to-yellow-300{--gradient-to-color:#faf089}.xl\:to-yellow-400{--gradient-to-color:#f6e05e}.xl\:to-yellow-500{--gradient-to-color:#ecc94b}.xl\:to-yellow-600{--gradient-to-color:#d69e2e}.xl\:to-yellow-700{--gradient-to-color:#b7791f}.xl\:to-yellow-800{--gradient-to-color:#975a16}.xl\:to-yellow-900{--gradient-to-color:#744210}.xl\:to-green-100{--gradient-to-color:#f0fff4}.xl\:to-green-200{--gradient-to-color:#c6f6d5}.xl\:to-green-300{--gradient-to-color:#9ae6b4}.xl\:to-green-400{--gradient-to-color:#68d391}.xl\:to-green-500{--gradient-to-color:#48bb78}.xl\:to-green-600{--gradient-to-color:#38a169}.xl\:to-green-700{--gradient-to-color:#2f855a}.xl\:to-green-800{--gradient-to-color:#276749}.xl\:to-green-900{--gradient-to-color:#22543d}.xl\:to-teal-100{--gradient-to-color:#e6fffa}.xl\:to-teal-200{--gradient-to-color:#b2f5ea}.xl\:to-teal-300{--gradient-to-color:#81e6d9}.xl\:to-teal-400{--gradient-to-color:#4fd1c5}.xl\:to-teal-500{--gradient-to-color:#38b2ac}.xl\:to-teal-600{--gradient-to-color:#319795}.xl\:to-teal-700{--gradient-to-color:#2c7a7b}.xl\:to-teal-800{--gradient-to-color:#285e61}.xl\:to-teal-900{--gradient-to-color:#234e52}.xl\:to-blue-100{--gradient-to-color:#ebf8ff}.xl\:to-blue-200{--gradient-to-color:#bee3f8}.xl\:to-blue-300{--gradient-to-color:#90cdf4}.xl\:to-blue-400{--gradient-to-color:#63b3ed}.xl\:to-blue-500{--gradient-to-color:#4299e1}.xl\:to-blue-600{--gradient-to-color:#3182ce}.xl\:to-blue-700{--gradient-to-color:#2b6cb0}.xl\:to-blue-800{--gradient-to-color:#2c5282}.xl\:to-blue-900{--gradient-to-color:#2a4365}.xl\:to-indigo-100{--gradient-to-color:#ebf4ff}.xl\:to-indigo-200{--gradient-to-color:#c3dafe}.xl\:to-indigo-300{--gradient-to-color:#a3bffa}.xl\:to-indigo-400{--gradient-to-color:#7f9cf5}.xl\:to-indigo-500{--gradient-to-color:#667eea}.xl\:to-indigo-600{--gradient-to-color:#5a67d8}.xl\:to-indigo-700{--gradient-to-color:#4c51bf}.xl\:to-indigo-800{--gradient-to-color:#434190}.xl\:to-indigo-900{--gradient-to-color:#3c366b}.xl\:to-purple-100{--gradient-to-color:#faf5ff}.xl\:to-purple-200{--gradient-to-color:#e9d8fd}.xl\:to-purple-300{--gradient-to-color:#d6bcfa}.xl\:to-purple-400{--gradient-to-color:#b794f4}.xl\:to-purple-500{--gradient-to-color:#9f7aea}.xl\:to-purple-600{--gradient-to-color:#805ad5}.xl\:to-purple-700{--gradient-to-color:#6b46c1}.xl\:to-purple-800{--gradient-to-color:#553c9a}.xl\:to-purple-900{--gradient-to-color:#44337a}.xl\:to-pink-100{--gradient-to-color:#fff5f7}.xl\:to-pink-200{--gradient-to-color:#fed7e2}.xl\:to-pink-300{--gradient-to-color:#fbb6ce}.xl\:to-pink-400{--gradient-to-color:#f687b3}.xl\:to-pink-500{--gradient-to-color:#ed64a6}.xl\:to-pink-600{--gradient-to-color:#d53f8c}.xl\:to-pink-700{--gradient-to-color:#b83280}.xl\:to-pink-800{--gradient-to-color:#97266d}.xl\:to-pink-900{--gradient-to-color:#702459}.xl\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:hover\:to-transparent:hover{--gradient-to-color:transparent}.xl\:hover\:to-current:hover{--gradient-to-color:currentColor}.xl\:hover\:to-black:hover{--gradient-to-color:#000}.xl\:hover\:to-white:hover{--gradient-to-color:#fff}.xl\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.xl\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.xl\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.xl\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.xl\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.xl\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.xl\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.xl\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.xl\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.xl\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.xl\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.xl\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.xl\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.xl\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.xl\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.xl\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.xl\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.xl\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.xl\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.xl\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.xl\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.xl\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.xl\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.xl\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.xl\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.xl\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.xl\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.xl\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.xl\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.xl\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.xl\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.xl\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.xl\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.xl\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.xl\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.xl\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.xl\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.xl\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.xl\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.xl\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.xl\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.xl\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.xl\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.xl\:hover\:to-green-800:hover{--gradient-to-color:#276749}.xl\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.xl\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.xl\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.xl\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.xl\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.xl\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.xl\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.xl\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.xl\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.xl\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.xl\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.xl\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.xl\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.xl\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.xl\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.xl\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.xl\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.xl\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.xl\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.xl\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.xl\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.xl\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.xl\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.xl\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.xl\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.xl\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.xl\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.xl\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.xl\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.xl\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.xl\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.xl\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.xl\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.xl\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.xl\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.xl\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.xl\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.xl\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.xl\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.xl\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.xl\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.xl\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.xl\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.xl\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.xl\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.xl\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.xl\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:focus\:to-transparent:focus{--gradient-to-color:transparent}.xl\:focus\:to-current:focus{--gradient-to-color:currentColor}.xl\:focus\:to-black:focus{--gradient-to-color:#000}.xl\:focus\:to-white:focus{--gradient-to-color:#fff}.xl\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.xl\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.xl\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.xl\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.xl\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.xl\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.xl\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.xl\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.xl\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.xl\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.xl\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.xl\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.xl\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.xl\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.xl\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.xl\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.xl\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.xl\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.xl\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.xl\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.xl\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.xl\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.xl\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.xl\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.xl\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.xl\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.xl\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.xl\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.xl\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.xl\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.xl\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.xl\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.xl\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.xl\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.xl\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.xl\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.xl\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.xl\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.xl\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.xl\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.xl\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.xl\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.xl\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.xl\:focus\:to-green-800:focus{--gradient-to-color:#276749}.xl\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.xl\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.xl\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.xl\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.xl\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.xl\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.xl\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.xl\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.xl\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.xl\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.xl\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.xl\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.xl\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.xl\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.xl\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.xl\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.xl\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.xl\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.xl\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.xl\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.xl\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.xl\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.xl\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.xl\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.xl\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.xl\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.xl\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.xl\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.xl\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.xl\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.xl\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.xl\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.xl\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.xl\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.xl\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.xl\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.xl\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.xl\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.xl\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.xl\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.xl\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.xl\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.xl\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.xl\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.xl\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.xl\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.xl\:bg-opacity-0{--bg-opacity:0}.xl\:bg-opacity-25{--bg-opacity:0.25}.xl\:bg-opacity-50{--bg-opacity:0.5}.xl\:bg-opacity-75{--bg-opacity:0.75}.xl\:bg-opacity-100{--bg-opacity:1}.xl\:hover\:bg-opacity-0:hover{--bg-opacity:0}.xl\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.xl\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.xl\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.xl\:hover\:bg-opacity-100:hover{--bg-opacity:1}.xl\:focus\:bg-opacity-0:focus{--bg-opacity:0}.xl\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.xl\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.xl\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.xl\:focus\:bg-opacity-100:focus{--bg-opacity:1}.xl\:bg-bottom{background-position:bottom}.xl\:bg-center{background-position:center}.xl\:bg-left{background-position:left}.xl\:bg-left-bottom{background-position:left bottom}.xl\:bg-left-top{background-position:left top}.xl\:bg-right{background-position:right}.xl\:bg-right-bottom{background-position:right bottom}.xl\:bg-right-top{background-position:right top}.xl\:bg-top{background-position:top}.xl\:bg-repeat{background-repeat:repeat}.xl\:bg-no-repeat{background-repeat:no-repeat}.xl\:bg-repeat-x{background-repeat:repeat-x}.xl\:bg-repeat-y{background-repeat:repeat-y}.xl\:bg-repeat-round{background-repeat:round}.xl\:bg-repeat-space{background-repeat:space}.xl\:bg-auto{background-size:auto}.xl\:bg-cover{background-size:cover}.xl\:bg-contain{background-size:contain}.xl\:border-collapse{border-collapse:collapse}.xl\:border-separate{border-collapse:separate}.xl\:border-transparent{border-color:transparent}.xl\:border-current{border-color:currentColor}.xl\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.xl\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.xl\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.xl\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.xl\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.xl\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.xl\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.xl\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.xl\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.xl\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.xl\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.xl\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.xl\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.xl\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.xl\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.xl\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.xl\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.xl\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.xl\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.xl\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.xl\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.xl\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.xl\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.xl\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.xl\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.xl\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.xl\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.xl\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.xl\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.xl\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.xl\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.xl\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.xl\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.xl\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.xl\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.xl\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.xl\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.xl\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.xl\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.xl\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.xl\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.xl\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.xl\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.xl\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.xl\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.xl\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.xl\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.xl\:hover\:border-transparent:hover{border-color:transparent}.xl\:hover\:border-current:hover{border-color:currentColor}.xl\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.xl\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.xl\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.xl\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.xl\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.xl\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.xl\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.xl\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.xl\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.xl\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.xl\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.xl\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.xl\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.xl\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.xl\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.xl\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.xl\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.xl\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.xl\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.xl\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.xl\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.xl\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.xl\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.xl\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.xl\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.xl\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.xl\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.xl\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.xl\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.xl\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.xl\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.xl\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.xl\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.xl\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.xl\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.xl\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.xl\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.xl\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.xl\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.xl\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.xl\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.xl\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.xl\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.xl\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.xl\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.xl\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.xl\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.xl\:focus\:border-transparent:focus{border-color:transparent}.xl\:focus\:border-current:focus{border-color:currentColor}.xl\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.xl\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.xl\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.xl\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.xl\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.xl\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.xl\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.xl\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.xl\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.xl\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.xl\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.xl\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.xl\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.xl\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.xl\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.xl\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.xl\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.xl\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.xl\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.xl\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.xl\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.xl\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.xl\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.xl\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.xl\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.xl\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.xl\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.xl\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.xl\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.xl\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.xl\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.xl\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.xl\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.xl\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.xl\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.xl\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.xl\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.xl\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.xl\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.xl\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.xl\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.xl\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.xl\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.xl\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.xl\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.xl\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.xl\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.xl\:border-opacity-0{--border-opacity:0}.xl\:border-opacity-25{--border-opacity:0.25}.xl\:border-opacity-50{--border-opacity:0.5}.xl\:border-opacity-75{--border-opacity:0.75}.xl\:border-opacity-100{--border-opacity:1}.xl\:hover\:border-opacity-0:hover{--border-opacity:0}.xl\:hover\:border-opacity-25:hover{--border-opacity:0.25}.xl\:hover\:border-opacity-50:hover{--border-opacity:0.5}.xl\:hover\:border-opacity-75:hover{--border-opacity:0.75}.xl\:hover\:border-opacity-100:hover{--border-opacity:1}.xl\:focus\:border-opacity-0:focus{--border-opacity:0}.xl\:focus\:border-opacity-25:focus{--border-opacity:0.25}.xl\:focus\:border-opacity-50:focus{--border-opacity:0.5}.xl\:focus\:border-opacity-75:focus{--border-opacity:0.75}.xl\:focus\:border-opacity-100:focus{--border-opacity:1}.xl\:rounded-none{border-radius:0}.xl\:rounded-sm{border-radius:.125rem}.xl\:rounded{border-radius:.25rem}.xl\:rounded-md{border-radius:.375rem}.xl\:rounded-lg{border-radius:.5rem}.xl\:rounded-xl{border-radius:.75rem}.xl\:rounded-2xl{border-radius:1rem}.xl\:rounded-3xl{border-radius:1.5rem}.xl\:rounded-full{border-radius:9999px}.xl\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.xl\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.xl\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.xl\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.xl\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.xl\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.xl\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.xl\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.xl\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.xl\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.xl\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.xl\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.xl\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.xl\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.xl\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.xl\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.xl\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.xl\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.xl\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.xl\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.xl\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.xl\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.xl\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.xl\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.xl\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.xl\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.xl\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.xl\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.xl\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.xl\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.xl\:rounded-tl-none{border-top-left-radius:0}.xl\:rounded-tr-none{border-top-right-radius:0}.xl\:rounded-br-none{border-bottom-right-radius:0}.xl\:rounded-bl-none{border-bottom-left-radius:0}.xl\:rounded-tl-sm{border-top-left-radius:.125rem}.xl\:rounded-tr-sm{border-top-right-radius:.125rem}.xl\:rounded-br-sm{border-bottom-right-radius:.125rem}.xl\:rounded-bl-sm{border-bottom-left-radius:.125rem}.xl\:rounded-tl{border-top-left-radius:.25rem}.xl\:rounded-tr{border-top-right-radius:.25rem}.xl\:rounded-br{border-bottom-right-radius:.25rem}.xl\:rounded-bl{border-bottom-left-radius:.25rem}.xl\:rounded-tl-md{border-top-left-radius:.375rem}.xl\:rounded-tr-md{border-top-right-radius:.375rem}.xl\:rounded-br-md{border-bottom-right-radius:.375rem}.xl\:rounded-bl-md{border-bottom-left-radius:.375rem}.xl\:rounded-tl-lg{border-top-left-radius:.5rem}.xl\:rounded-tr-lg{border-top-right-radius:.5rem}.xl\:rounded-br-lg{border-bottom-right-radius:.5rem}.xl\:rounded-bl-lg{border-bottom-left-radius:.5rem}.xl\:rounded-tl-xl{border-top-left-radius:.75rem}.xl\:rounded-tr-xl{border-top-right-radius:.75rem}.xl\:rounded-br-xl{border-bottom-right-radius:.75rem}.xl\:rounded-bl-xl{border-bottom-left-radius:.75rem}.xl\:rounded-tl-2xl{border-top-left-radius:1rem}.xl\:rounded-tr-2xl{border-top-right-radius:1rem}.xl\:rounded-br-2xl{border-bottom-right-radius:1rem}.xl\:rounded-bl-2xl{border-bottom-left-radius:1rem}.xl\:rounded-tl-3xl{border-top-left-radius:1.5rem}.xl\:rounded-tr-3xl{border-top-right-radius:1.5rem}.xl\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.xl\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.xl\:rounded-tl-full{border-top-left-radius:9999px}.xl\:rounded-tr-full{border-top-right-radius:9999px}.xl\:rounded-br-full{border-bottom-right-radius:9999px}.xl\:rounded-bl-full{border-bottom-left-radius:9999px}.xl\:border-solid{border-style:solid}.xl\:border-dashed{border-style:dashed}.xl\:border-dotted{border-style:dotted}.xl\:border-double{border-style:double}.xl\:border-none{border-style:none}.xl\:border-0{border-width:0}.xl\:border-2{border-width:2px}.xl\:border-4{border-width:4px}.xl\:border-8{border-width:8px}.xl\:border{border-width:1px}.xl\:border-t-0{border-top-width:0}.xl\:border-r-0{border-right-width:0}.xl\:border-b-0{border-bottom-width:0}.xl\:border-l-0{border-left-width:0}.xl\:border-t-2{border-top-width:2px}.xl\:border-r-2{border-right-width:2px}.xl\:border-b-2{border-bottom-width:2px}.xl\:border-l-2{border-left-width:2px}.xl\:border-t-4{border-top-width:4px}.xl\:border-r-4{border-right-width:4px}.xl\:border-b-4{border-bottom-width:4px}.xl\:border-l-4{border-left-width:4px}.xl\:border-t-8{border-top-width:8px}.xl\:border-r-8{border-right-width:8px}.xl\:border-b-8{border-bottom-width:8px}.xl\:border-l-8{border-left-width:8px}.xl\:border-t{border-top-width:1px}.xl\:border-r{border-right-width:1px}.xl\:border-b{border-bottom-width:1px}.xl\:border-l{border-left-width:1px}.xl\:box-border{box-sizing:border-box}.xl\:box-content{box-sizing:content-box}.xl\:cursor-auto{cursor:auto}.xl\:cursor-default{cursor:default}.xl\:cursor-pointer{cursor:pointer}.xl\:cursor-wait{cursor:wait}.xl\:cursor-text{cursor:text}.xl\:cursor-move{cursor:move}.xl\:cursor-not-allowed{cursor:not-allowed}.xl\:block{display:block}.xl\:inline-block{display:inline-block}.xl\:inline{display:inline}.xl\:flex{display:flex}.xl\:inline-flex{display:inline-flex}.xl\:table{display:table}.xl\:table-caption{display:table-caption}.xl\:table-cell{display:table-cell}.xl\:table-column{display:table-column}.xl\:table-column-group{display:table-column-group}.xl\:table-footer-group{display:table-footer-group}.xl\:table-header-group{display:table-header-group}.xl\:table-row-group{display:table-row-group}.xl\:table-row{display:table-row}.xl\:flow-root{display:flow-root}.xl\:grid{display:grid}.xl\:inline-grid{display:inline-grid}.xl\:contents{display:contents}.xl\:hidden{display:none}.xl\:flex-row{flex-direction:row}.xl\:flex-row-reverse{flex-direction:row-reverse}.xl\:flex-col{flex-direction:column}.xl\:flex-col-reverse{flex-direction:column-reverse}.xl\:flex-wrap{flex-wrap:wrap}.xl\:flex-wrap-reverse{flex-wrap:wrap-reverse}.xl\:flex-no-wrap{flex-wrap:nowrap}.xl\:place-items-auto{place-items:auto}.xl\:place-items-start{place-items:start}.xl\:place-items-end{place-items:end}.xl\:place-items-center{place-items:center}.xl\:place-items-stretch{place-items:stretch}.xl\:place-content-center{place-content:center}.xl\:place-content-start{place-content:start}.xl\:place-content-end{place-content:end}.xl\:place-content-between{place-content:space-between}.xl\:place-content-around{place-content:space-around}.xl\:place-content-evenly{place-content:space-evenly}.xl\:place-content-stretch{place-content:stretch}.xl\:place-self-auto{place-self:auto}.xl\:place-self-start{place-self:start}.xl\:place-self-end{place-self:end}.xl\:place-self-center{place-self:center}.xl\:place-self-stretch{place-self:stretch}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:items-baseline{align-items:baseline}.xl\:items-stretch{align-items:stretch}.xl\:content-center{align-content:center}.xl\:content-start{align-content:flex-start}.xl\:content-end{align-content:flex-end}.xl\:content-between{align-content:space-between}.xl\:content-around{align-content:space-around}.xl\:content-evenly{align-content:space-evenly}.xl\:self-auto{align-self:auto}.xl\:self-start{align-self:flex-start}.xl\:self-end{align-self:flex-end}.xl\:self-center{align-self:center}.xl\:self-stretch{align-self:stretch}.xl\:justify-items-auto{justify-items:auto}.xl\:justify-items-start{justify-items:start}.xl\:justify-items-end{justify-items:end}.xl\:justify-items-center{justify-items:center}.xl\:justify-items-stretch{justify-items:stretch}.xl\:justify-start{justify-content:flex-start}.xl\:justify-end{justify-content:flex-end}.xl\:justify-center{justify-content:center}.xl\:justify-between{justify-content:space-between}.xl\:justify-around{justify-content:space-around}.xl\:justify-evenly{justify-content:space-evenly}.xl\:justify-self-auto{justify-self:auto}.xl\:justify-self-start{justify-self:start}.xl\:justify-self-end{justify-self:end}.xl\:justify-self-center{justify-self:center}.xl\:justify-self-stretch{justify-self:stretch}.xl\:flex-1{flex:1 1 0%}.xl\:flex-auto{flex:1 1 auto}.xl\:flex-initial{flex:0 1 auto}.xl\:flex-none{flex:none}.xl\:flex-grow-0{flex-grow:0}.xl\:flex-grow{flex-grow:1}.xl\:flex-shrink-0{flex-shrink:0}.xl\:flex-shrink{flex-shrink:1}.xl\:order-1{order:1}.xl\:order-2{order:2}.xl\:order-3{order:3}.xl\:order-4{order:4}.xl\:order-5{order:5}.xl\:order-6{order:6}.xl\:order-7{order:7}.xl\:order-8{order:8}.xl\:order-9{order:9}.xl\:order-10{order:10}.xl\:order-11{order:11}.xl\:order-12{order:12}.xl\:order-first{order:-9999}.xl\:order-last{order:9999}.xl\:order-none{order:0}.xl\:float-right{float:right}.xl\:float-left{float:left}.xl\:float-none{float:none}.xl\:clearfix:after{content:"";display:table;clear:both}.xl\:clear-left{clear:left}.xl\:clear-right{clear:right}.xl\:clear-both{clear:both}.xl\:clear-none{clear:none}.xl\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.xl\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.xl\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.xl\:font-hairline{font-weight:100}.xl\:font-thin{font-weight:200}.xl\:font-light{font-weight:300}.xl\:font-normal{font-weight:400}.xl\:font-medium{font-weight:500}.xl\:font-semibold{font-weight:600}.xl\:font-bold{font-weight:700}.xl\:font-extrabold{font-weight:800}.xl\:font-black{font-weight:900}.xl\:hover\:font-hairline:hover{font-weight:100}.xl\:hover\:font-thin:hover{font-weight:200}.xl\:hover\:font-light:hover{font-weight:300}.xl\:hover\:font-normal:hover{font-weight:400}.xl\:hover\:font-medium:hover{font-weight:500}.xl\:hover\:font-semibold:hover{font-weight:600}.xl\:hover\:font-bold:hover{font-weight:700}.xl\:hover\:font-extrabold:hover{font-weight:800}.xl\:hover\:font-black:hover{font-weight:900}.xl\:focus\:font-hairline:focus{font-weight:100}.xl\:focus\:font-thin:focus{font-weight:200}.xl\:focus\:font-light:focus{font-weight:300}.xl\:focus\:font-normal:focus{font-weight:400}.xl\:focus\:font-medium:focus{font-weight:500}.xl\:focus\:font-semibold:focus{font-weight:600}.xl\:focus\:font-bold:focus{font-weight:700}.xl\:focus\:font-extrabold:focus{font-weight:800}.xl\:focus\:font-black:focus{font-weight:900}.xl\:h-0{height:0}.xl\:h-1{height:.25rem}.xl\:h-2{height:.5rem}.xl\:h-3{height:.75rem}.xl\:h-4{height:1rem}.xl\:h-5{height:1.25rem}.xl\:h-6{height:1.5rem}.xl\:h-8{height:2rem}.xl\:h-10{height:2.5rem}.xl\:h-12{height:3rem}.xl\:h-16{height:4rem}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-32{height:8rem}.xl\:h-40{height:10rem}.xl\:h-48{height:12rem}.xl\:h-56{height:14rem}.xl\:h-64{height:16rem}.xl\:h-auto{height:auto}.xl\:h-px{height:1px}.xl\:h-full{height:100%}.xl\:h-screen{height:100vh}.xl\:text-xs{font-size:.75rem}.xl\:text-sm{font-size:.875rem}.xl\:text-base{font-size:1rem}.xl\:text-lg{font-size:1.125rem}.xl\:text-xl{font-size:1.25rem}.xl\:text-2xl{font-size:1.5rem}.xl\:text-3xl{font-size:1.875rem}.xl\:text-4xl{font-size:2.25rem}.xl\:text-5xl{font-size:3rem}.xl\:text-6xl{font-size:4rem}.xl\:leading-3{line-height:.75rem}.xl\:leading-4{line-height:1rem}.xl\:leading-5{line-height:1.25rem}.xl\:leading-6{line-height:1.5rem}.xl\:leading-7{line-height:1.75rem}.xl\:leading-8{line-height:2rem}.xl\:leading-9{line-height:2.25rem}.xl\:leading-10{line-height:2.5rem}.xl\:leading-none{line-height:1}.xl\:leading-tight{line-height:1.25}.xl\:leading-snug{line-height:1.375}.xl\:leading-normal{line-height:1.5}.xl\:leading-relaxed{line-height:1.625}.xl\:leading-loose{line-height:2}.xl\:list-inside{list-style-position:inside}.xl\:list-outside{list-style-position:outside}.xl\:list-none{list-style-type:none}.xl\:list-disc{list-style-type:disc}.xl\:list-decimal{list-style-type:decimal}.xl\:m-0{margin:0}.xl\:m-1{margin:.25rem}.xl\:m-2{margin:.5rem}.xl\:m-3{margin:.75rem}.xl\:m-4{margin:1rem}.xl\:m-5{margin:1.25rem}.xl\:m-6{margin:1.5rem}.xl\:m-8{margin:2rem}.xl\:m-10{margin:2.5rem}.xl\:m-12{margin:3rem}.xl\:m-16{margin:4rem}.xl\:m-20{margin:5rem}.xl\:m-24{margin:6rem}.xl\:m-32{margin:8rem}.xl\:m-40{margin:10rem}.xl\:m-48{margin:12rem}.xl\:m-56{margin:14rem}.xl\:m-64{margin:16rem}.xl\:m-auto{margin:auto}.xl\:m-px{margin:1px}.xl\:-m-1{margin:-.25rem}.xl\:-m-2{margin:-.5rem}.xl\:-m-3{margin:-.75rem}.xl\:-m-4{margin:-1rem}.xl\:-m-5{margin:-1.25rem}.xl\:-m-6{margin:-1.5rem}.xl\:-m-8{margin:-2rem}.xl\:-m-10{margin:-2.5rem}.xl\:-m-12{margin:-3rem}.xl\:-m-16{margin:-4rem}.xl\:-m-20{margin:-5rem}.xl\:-m-24{margin:-6rem}.xl\:-m-32{margin:-8rem}.xl\:-m-40{margin:-10rem}.xl\:-m-48{margin:-12rem}.xl\:-m-56{margin:-14rem}.xl\:-m-64{margin:-16rem}.xl\:-m-px{margin:-1px}.xl\:my-0{margin-top:0;margin-bottom:0}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:my-1{margin-top:.25rem;margin-bottom:.25rem}.xl\:mx-1{margin-left:.25rem;margin-right:.25rem}.xl\:my-2{margin-top:.5rem;margin-bottom:.5rem}.xl\:mx-2{margin-left:.5rem;margin-right:.5rem}.xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}.xl\:mx-3{margin-left:.75rem;margin-right:.75rem}.xl\:my-4{margin-top:1rem;margin-bottom:1rem}.xl\:mx-4{margin-left:1rem;margin-right:1rem}.xl\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.xl\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.xl\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.xl\:my-8{margin-top:2rem;margin-bottom:2rem}.xl\:mx-8{margin-left:2rem;margin-right:2rem}.xl\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.xl\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.xl\:my-12{margin-top:3rem;margin-bottom:3rem}.xl\:mx-12{margin-left:3rem;margin-right:3rem}.xl\:my-16{margin-top:4rem;margin-bottom:4rem}.xl\:mx-16{margin-left:4rem;margin-right:4rem}.xl\:my-20{margin-top:5rem;margin-bottom:5rem}.xl\:mx-20{margin-left:5rem;margin-right:5rem}.xl\:my-24{margin-top:6rem;margin-bottom:6rem}.xl\:mx-24{margin-left:6rem;margin-right:6rem}.xl\:my-32{margin-top:8rem;margin-bottom:8rem}.xl\:mx-32{margin-left:8rem;margin-right:8rem}.xl\:my-40{margin-top:10rem;margin-bottom:10rem}.xl\:mx-40{margin-left:10rem;margin-right:10rem}.xl\:my-48{margin-top:12rem;margin-bottom:12rem}.xl\:mx-48{margin-left:12rem;margin-right:12rem}.xl\:my-56{margin-top:14rem;margin-bottom:14rem}.xl\:mx-56{margin-left:14rem;margin-right:14rem}.xl\:my-64{margin-top:16rem;margin-bottom:16rem}.xl\:mx-64{margin-left:16rem;margin-right:16rem}.xl\:my-auto{margin-top:auto;margin-bottom:auto}.xl\:mx-auto{margin-left:auto;margin-right:auto}.xl\:my-px{margin-top:1px;margin-bottom:1px}.xl\:mx-px{margin-left:1px;margin-right:1px}.xl\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.xl\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.xl\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.xl\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.xl\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.xl\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.xl\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.xl\:-mx-4{margin-left:-1rem;margin-right:-1rem}.xl\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.xl\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.xl\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.xl\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.xl\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.xl\:-mx-8{margin-left:-2rem;margin-right:-2rem}.xl\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.xl\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.xl\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.xl\:-mx-12{margin-left:-3rem;margin-right:-3rem}.xl\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.xl\:-mx-16{margin-left:-4rem;margin-right:-4rem}.xl\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.xl\:-mx-20{margin-left:-5rem;margin-right:-5rem}.xl\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.xl\:-mx-24{margin-left:-6rem;margin-right:-6rem}.xl\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.xl\:-mx-32{margin-left:-8rem;margin-right:-8rem}.xl\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.xl\:-mx-40{margin-left:-10rem;margin-right:-10rem}.xl\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.xl\:-mx-48{margin-left:-12rem;margin-right:-12rem}.xl\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.xl\:-mx-56{margin-left:-14rem;margin-right:-14rem}.xl\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.xl\:-mx-64{margin-left:-16rem;margin-right:-16rem}.xl\:-my-px{margin-top:-1px;margin-bottom:-1px}.xl\:-mx-px{margin-left:-1px;margin-right:-1px}.xl\:mt-0{margin-top:0}.xl\:mr-0{margin-right:0}.xl\:mb-0{margin-bottom:0}.xl\:ml-0{margin-left:0}.xl\:mt-1{margin-top:.25rem}.xl\:mr-1{margin-right:.25rem}.xl\:mb-1{margin-bottom:.25rem}.xl\:ml-1{margin-left:.25rem}.xl\:mt-2{margin-top:.5rem}.xl\:mr-2{margin-right:.5rem}.xl\:mb-2{margin-bottom:.5rem}.xl\:ml-2{margin-left:.5rem}.xl\:mt-3{margin-top:.75rem}.xl\:mr-3{margin-right:.75rem}.xl\:mb-3{margin-bottom:.75rem}.xl\:ml-3{margin-left:.75rem}.xl\:mt-4{margin-top:1rem}.xl\:mr-4{margin-right:1rem}.xl\:mb-4{margin-bottom:1rem}.xl\:ml-4{margin-left:1rem}.xl\:mt-5{margin-top:1.25rem}.xl\:mr-5{margin-right:1.25rem}.xl\:mb-5{margin-bottom:1.25rem}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-6{margin-top:1.5rem}.xl\:mr-6{margin-right:1.5rem}.xl\:mb-6{margin-bottom:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:mt-8{margin-top:2rem}.xl\:mr-8{margin-right:2rem}.xl\:mb-8{margin-bottom:2rem}.xl\:ml-8{margin-left:2rem}.xl\:mt-10{margin-top:2.5rem}.xl\:mr-10{margin-right:2.5rem}.xl\:mb-10{margin-bottom:2.5rem}.xl\:ml-10{margin-left:2.5rem}.xl\:mt-12{margin-top:3rem}.xl\:mr-12{margin-right:3rem}.xl\:mb-12{margin-bottom:3rem}.xl\:ml-12{margin-left:3rem}.xl\:mt-16{margin-top:4rem}.xl\:mr-16{margin-right:4rem}.xl\:mb-16{margin-bottom:4rem}.xl\:ml-16{margin-left:4rem}.xl\:mt-20{margin-top:5rem}.xl\:mr-20{margin-right:5rem}.xl\:mb-20{margin-bottom:5rem}.xl\:ml-20{margin-left:5rem}.xl\:mt-24{margin-top:6rem}.xl\:mr-24{margin-right:6rem}.xl\:mb-24{margin-bottom:6rem}.xl\:ml-24{margin-left:6rem}.xl\:mt-32{margin-top:8rem}.xl\:mr-32{margin-right:8rem}.xl\:mb-32{margin-bottom:8rem}.xl\:ml-32{margin-left:8rem}.xl\:mt-40{margin-top:10rem}.xl\:mr-40{margin-right:10rem}.xl\:mb-40{margin-bottom:10rem}.xl\:ml-40{margin-left:10rem}.xl\:mt-48{margin-top:12rem}.xl\:mr-48{margin-right:12rem}.xl\:mb-48{margin-bottom:12rem}.xl\:ml-48{margin-left:12rem}.xl\:mt-56{margin-top:14rem}.xl\:mr-56{margin-right:14rem}.xl\:mb-56{margin-bottom:14rem}.xl\:ml-56{margin-left:14rem}.xl\:mt-64{margin-top:16rem}.xl\:mr-64{margin-right:16rem}.xl\:mb-64{margin-bottom:16rem}.xl\:ml-64{margin-left:16rem}.xl\:mt-auto{margin-top:auto}.xl\:mr-auto{margin-right:auto}.xl\:mb-auto{margin-bottom:auto}.xl\:ml-auto{margin-left:auto}.xl\:mt-px{margin-top:1px}.xl\:mr-px{margin-right:1px}.xl\:mb-px{margin-bottom:1px}.xl\:ml-px{margin-left:1px}.xl\:-mt-1{margin-top:-.25rem}.xl\:-mr-1{margin-right:-.25rem}.xl\:-mb-1{margin-bottom:-.25rem}.xl\:-ml-1{margin-left:-.25rem}.xl\:-mt-2{margin-top:-.5rem}.xl\:-mr-2{margin-right:-.5rem}.xl\:-mb-2{margin-bottom:-.5rem}.xl\:-ml-2{margin-left:-.5rem}.xl\:-mt-3{margin-top:-.75rem}.xl\:-mr-3{margin-right:-.75rem}.xl\:-mb-3{margin-bottom:-.75rem}.xl\:-ml-3{margin-left:-.75rem}.xl\:-mt-4{margin-top:-1rem}.xl\:-mr-4{margin-right:-1rem}.xl\:-mb-4{margin-bottom:-1rem}.xl\:-ml-4{margin-left:-1rem}.xl\:-mt-5{margin-top:-1.25rem}.xl\:-mr-5{margin-right:-1.25rem}.xl\:-mb-5{margin-bottom:-1.25rem}.xl\:-ml-5{margin-left:-1.25rem}.xl\:-mt-6{margin-top:-1.5rem}.xl\:-mr-6{margin-right:-1.5rem}.xl\:-mb-6{margin-bottom:-1.5rem}.xl\:-ml-6{margin-left:-1.5rem}.xl\:-mt-8{margin-top:-2rem}.xl\:-mr-8{margin-right:-2rem}.xl\:-mb-8{margin-bottom:-2rem}.xl\:-ml-8{margin-left:-2rem}.xl\:-mt-10{margin-top:-2.5rem}.xl\:-mr-10{margin-right:-2.5rem}.xl\:-mb-10{margin-bottom:-2.5rem}.xl\:-ml-10{margin-left:-2.5rem}.xl\:-mt-12{margin-top:-3rem}.xl\:-mr-12{margin-right:-3rem}.xl\:-mb-12{margin-bottom:-3rem}.xl\:-ml-12{margin-left:-3rem}.xl\:-mt-16{margin-top:-4rem}.xl\:-mr-16{margin-right:-4rem}.xl\:-mb-16{margin-bottom:-4rem}.xl\:-ml-16{margin-left:-4rem}.xl\:-mt-20{margin-top:-5rem}.xl\:-mr-20{margin-right:-5rem}.xl\:-mb-20{margin-bottom:-5rem}.xl\:-ml-20{margin-left:-5rem}.xl\:-mt-24{margin-top:-6rem}.xl\:-mr-24{margin-right:-6rem}.xl\:-mb-24{margin-bottom:-6rem}.xl\:-ml-24{margin-left:-6rem}.xl\:-mt-32{margin-top:-8rem}.xl\:-mr-32{margin-right:-8rem}.xl\:-mb-32{margin-bottom:-8rem}.xl\:-ml-32{margin-left:-8rem}.xl\:-mt-40{margin-top:-10rem}.xl\:-mr-40{margin-right:-10rem}.xl\:-mb-40{margin-bottom:-10rem}.xl\:-ml-40{margin-left:-10rem}.xl\:-mt-48{margin-top:-12rem}.xl\:-mr-48{margin-right:-12rem}.xl\:-mb-48{margin-bottom:-12rem}.xl\:-ml-48{margin-left:-12rem}.xl\:-mt-56{margin-top:-14rem}.xl\:-mr-56{margin-right:-14rem}.xl\:-mb-56{margin-bottom:-14rem}.xl\:-ml-56{margin-left:-14rem}.xl\:-mt-64{margin-top:-16rem}.xl\:-mr-64{margin-right:-16rem}.xl\:-mb-64{margin-bottom:-16rem}.xl\:-ml-64{margin-left:-16rem}.xl\:-mt-px{margin-top:-1px}.xl\:-mr-px{margin-right:-1px}.xl\:-mb-px{margin-bottom:-1px}.xl\:-ml-px{margin-left:-1px}.xl\:max-h-full{max-height:100%}.xl\:max-h-screen{max-height:100vh}.xl\:max-w-none{max-width:none}.xl\:max-w-xs{max-width:20rem}.xl\:max-w-sm{max-width:24rem}.xl\:max-w-md{max-width:28rem}.xl\:max-w-lg{max-width:32rem}.xl\:max-w-xl{max-width:36rem}.xl\:max-w-2xl{max-width:42rem}.xl\:max-w-3xl{max-width:48rem}.xl\:max-w-4xl{max-width:56rem}.xl\:max-w-5xl{max-width:64rem}.xl\:max-w-6xl{max-width:72rem}.xl\:max-w-full{max-width:100%}.xl\:max-w-screen-sm{max-width:640px}.xl\:max-w-screen-md{max-width:768px}.xl\:max-w-screen-lg{max-width:1024px}.xl\:max-w-screen-xl{max-width:1280px}.xl\:min-h-0{min-height:0}.xl\:min-h-full{min-height:100%}.xl\:min-h-screen{min-height:100vh}.xl\:min-w-0{min-width:0}.xl\:min-w-full{min-width:100%}.xl\:object-contain{object-fit:contain}.xl\:object-cover{object-fit:cover}.xl\:object-fill{object-fit:fill}.xl\:object-none{object-fit:none}.xl\:object-scale-down{object-fit:scale-down}.xl\:object-bottom{object-position:bottom}.xl\:object-center{object-position:center}.xl\:object-left{object-position:left}.xl\:object-left-bottom{object-position:left bottom}.xl\:object-left-top{object-position:left top}.xl\:object-right{object-position:right}.xl\:object-right-bottom{object-position:right bottom}.xl\:object-right-top{object-position:right top}.xl\:object-top{object-position:top}.xl\:opacity-0{opacity:0}.xl\:opacity-25{opacity:.25}.xl\:opacity-50{opacity:.5}.xl\:opacity-75{opacity:.75}.xl\:opacity-100{opacity:1}.xl\:hover\:opacity-0:hover{opacity:0}.xl\:hover\:opacity-25:hover{opacity:.25}.xl\:hover\:opacity-50:hover{opacity:.5}.xl\:hover\:opacity-75:hover{opacity:.75}.xl\:hover\:opacity-100:hover{opacity:1}.xl\:focus\:opacity-0:focus{opacity:0}.xl\:focus\:opacity-25:focus{opacity:.25}.xl\:focus\:opacity-50:focus{opacity:.5}.xl\:focus\:opacity-75:focus{opacity:.75}.xl\:focus\:opacity-100:focus{opacity:1}.xl\:outline-none{outline:2px solid transparent;outline-offset:2px}.xl\:outline-white{outline:2px dotted #fff;outline-offset:2px}.xl\:outline-black{outline:2px dotted #000;outline-offset:2px}.xl\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.xl\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.xl\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.xl\:overflow-auto{overflow:auto}.xl\:overflow-hidden{overflow:hidden}.xl\:overflow-visible{overflow:visible}.xl\:overflow-scroll{overflow:scroll}.xl\:overflow-x-auto{overflow-x:auto}.xl\:overflow-y-auto{overflow-y:auto}.xl\:overflow-x-hidden{overflow-x:hidden}.xl\:overflow-y-hidden{overflow-y:hidden}.xl\:overflow-x-visible{overflow-x:visible}.xl\:overflow-y-visible{overflow-y:visible}.xl\:overflow-x-scroll{overflow-x:scroll}.xl\:overflow-y-scroll{overflow-y:scroll}.xl\:scrolling-touch{-webkit-overflow-scrolling:touch}.xl\:scrolling-auto{-webkit-overflow-scrolling:auto}.xl\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.xl\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.xl\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.xl\:overscroll-y-auto{overscroll-behavior-y:auto}.xl\:overscroll-y-contain{overscroll-behavior-y:contain}.xl\:overscroll-y-none{overscroll-behavior-y:none}.xl\:overscroll-x-auto{overscroll-behavior-x:auto}.xl\:overscroll-x-contain{overscroll-behavior-x:contain}.xl\:overscroll-x-none{overscroll-behavior-x:none}.xl\:p-0{padding:0}.xl\:p-1{padding:.25rem}.xl\:p-2{padding:.5rem}.xl\:p-3{padding:.75rem}.xl\:p-4{padding:1rem}.xl\:p-5{padding:1.25rem}.xl\:p-6{padding:1.5rem}.xl\:p-8{padding:2rem}.xl\:p-10{padding:2.5rem}.xl\:p-12{padding:3rem}.xl\:p-16{padding:4rem}.xl\:p-20{padding:5rem}.xl\:p-24{padding:6rem}.xl\:p-32{padding:8rem}.xl\:p-40{padding:10rem}.xl\:p-48{padding:12rem}.xl\:p-56{padding:14rem}.xl\:p-64{padding:16rem}.xl\:p-px{padding:1px}.xl\:py-0{padding-top:0;padding-bottom:0}.xl\:px-0{padding-left:0;padding-right:0}.xl\:py-1{padding-top:.25rem;padding-bottom:.25rem}.xl\:px-1{padding-left:.25rem;padding-right:.25rem}.xl\:py-2{padding-top:.5rem;padding-bottom:.5rem}.xl\:px-2{padding-left:.5rem;padding-right:.5rem}.xl\:py-3{padding-top:.75rem;padding-bottom:.75rem}.xl\:px-3{padding-left:.75rem;padding-right:.75rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.xl\:px-6{padding-left:1.5rem;padding-right:1.5rem}.xl\:py-8{padding-top:2rem;padding-bottom:2rem}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.xl\:px-10{padding-left:2.5rem;padding-right:2.5rem}.xl\:py-12{padding-top:3rem;padding-bottom:3rem}.xl\:px-12{padding-left:3rem;padding-right:3rem}.xl\:py-16{padding-top:4rem;padding-bottom:4rem}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:py-20{padding-top:5rem;padding-bottom:5rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:py-24{padding-top:6rem;padding-bottom:6rem}.xl\:px-24{padding-left:6rem;padding-right:6rem}.xl\:py-32{padding-top:8rem;padding-bottom:8rem}.xl\:px-32{padding-left:8rem;padding-right:8rem}.xl\:py-40{padding-top:10rem;padding-bottom:10rem}.xl\:px-40{padding-left:10rem;padding-right:10rem}.xl\:py-48{padding-top:12rem;padding-bottom:12rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:py-56{padding-top:14rem;padding-bottom:14rem}.xl\:px-56{padding-left:14rem;padding-right:14rem}.xl\:py-64{padding-top:16rem;padding-bottom:16rem}.xl\:px-64{padding-left:16rem;padding-right:16rem}.xl\:py-px{padding-top:1px;padding-bottom:1px}.xl\:px-px{padding-left:1px;padding-right:1px}.xl\:pt-0{padding-top:0}.xl\:pr-0{padding-right:0}.xl\:pb-0{padding-bottom:0}.xl\:pl-0{padding-left:0}.xl\:pt-1{padding-top:.25rem}.xl\:pr-1{padding-right:.25rem}.xl\:pb-1{padding-bottom:.25rem}.xl\:pl-1{padding-left:.25rem}.xl\:pt-2{padding-top:.5rem}.xl\:pr-2{padding-right:.5rem}.xl\:pb-2{padding-bottom:.5rem}.xl\:pl-2{padding-left:.5rem}.xl\:pt-3{padding-top:.75rem}.xl\:pr-3{padding-right:.75rem}.xl\:pb-3{padding-bottom:.75rem}.xl\:pl-3{padding-left:.75rem}.xl\:pt-4{padding-top:1rem}.xl\:pr-4{padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:pl-4{padding-left:1rem}.xl\:pt-5{padding-top:1.25rem}.xl\:pr-5{padding-right:1.25rem}.xl\:pb-5{padding-bottom:1.25rem}.xl\:pl-5{padding-left:1.25rem}.xl\:pt-6{padding-top:1.5rem}.xl\:pr-6{padding-right:1.5rem}.xl\:pb-6{padding-bottom:1.5rem}.xl\:pl-6{padding-left:1.5rem}.xl\:pt-8{padding-top:2rem}.xl\:pr-8{padding-right:2rem}.xl\:pb-8{padding-bottom:2rem}.xl\:pl-8{padding-left:2rem}.xl\:pt-10{padding-top:2.5rem}.xl\:pr-10{padding-right:2.5rem}.xl\:pb-10{padding-bottom:2.5rem}.xl\:pl-10{padding-left:2.5rem}.xl\:pt-12{padding-top:3rem}.xl\:pr-12{padding-right:3rem}.xl\:pb-12{padding-bottom:3rem}.xl\:pl-12{padding-left:3rem}.xl\:pt-16{padding-top:4rem}.xl\:pr-16{padding-right:4rem}.xl\:pb-16{padding-bottom:4rem}.xl\:pl-16{padding-left:4rem}.xl\:pt-20{padding-top:5rem}.xl\:pr-20{padding-right:5rem}.xl\:pb-20{padding-bottom:5rem}.xl\:pl-20{padding-left:5rem}.xl\:pt-24{padding-top:6rem}.xl\:pr-24{padding-right:6rem}.xl\:pb-24{padding-bottom:6rem}.xl\:pl-24{padding-left:6rem}.xl\:pt-32{padding-top:8rem}.xl\:pr-32{padding-right:8rem}.xl\:pb-32{padding-bottom:8rem}.xl\:pl-32{padding-left:8rem}.xl\:pt-40{padding-top:10rem}.xl\:pr-40{padding-right:10rem}.xl\:pb-40{padding-bottom:10rem}.xl\:pl-40{padding-left:10rem}.xl\:pt-48{padding-top:12rem}.xl\:pr-48{padding-right:12rem}.xl\:pb-48{padding-bottom:12rem}.xl\:pl-48{padding-left:12rem}.xl\:pt-56{padding-top:14rem}.xl\:pr-56{padding-right:14rem}.xl\:pb-56{padding-bottom:14rem}.xl\:pl-56{padding-left:14rem}.xl\:pt-64{padding-top:16rem}.xl\:pr-64{padding-right:16rem}.xl\:pb-64{padding-bottom:16rem}.xl\:pl-64{padding-left:16rem}.xl\:pt-px{padding-top:1px}.xl\:pr-px{padding-right:1px}.xl\:pb-px{padding-bottom:1px}.xl\:pl-px{padding-left:1px}.xl\:placeholder-transparent:-ms-input-placeholder{color:transparent}.xl\:placeholder-transparent::-ms-input-placeholder{color:transparent}.xl\:placeholder-transparent::placeholder{color:transparent}.xl\:placeholder-current:-ms-input-placeholder{color:currentColor}.xl\:placeholder-current::-ms-input-placeholder{color:currentColor}.xl\:placeholder-current::placeholder{color:currentColor}.xl\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.xl\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.xl\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.xl\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.xl\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.xl\:focus\:placeholder-current:focus::placeholder{color:currentColor}.xl\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.xl\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.xl\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.xl\:pointer-events-none{pointer-events:none}.xl\:pointer-events-auto{pointer-events:auto}.xl\:static{position:static}.xl\:fixed{position:fixed}.xl\:absolute{position:absolute}.xl\:relative{position:relative}.xl\:sticky{position:-webkit-sticky;position:sticky}.xl\:inset-0{top:0;right:0;bottom:0;left:0}.xl\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.xl\:inset-y-0{top:0;bottom:0}.xl\:inset-x-0{right:0;left:0}.xl\:inset-y-auto{top:auto;bottom:auto}.xl\:inset-x-auto{right:auto;left:auto}.xl\:top-0{top:0}.xl\:right-0{right:0}.xl\:bottom-0{bottom:0}.xl\:left-0{left:0}.xl\:top-auto{top:auto}.xl\:right-auto{right:auto}.xl\:bottom-auto{bottom:auto}.xl\:left-auto{left:auto}.xl\:resize-none{resize:none}.xl\:resize-y{resize:vertical}.xl\:resize-x{resize:horizontal}.xl\:resize{resize:both}.xl\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.xl\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:shadow-none{box-shadow:none}.xl\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.xl\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:hover\:shadow-none:hover{box-shadow:none}.xl\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.xl\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:focus\:shadow-none:focus{box-shadow:none}.xl\:fill-current{fill:currentColor}.xl\:stroke-current{stroke:currentColor}.xl\:stroke-0{stroke-width:0}.xl\:stroke-1{stroke-width:1}.xl\:stroke-2{stroke-width:2}.xl\:table-auto{table-layout:auto}.xl\:table-fixed{table-layout:fixed}.xl\:text-left{text-align:left}.xl\:text-center{text-align:center}.xl\:text-right{text-align:right}.xl\:text-justify{text-align:justify}.xl\:text-transparent{color:transparent}.xl\:text-current{color:currentColor}.xl\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.xl\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.xl\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.xl\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.xl\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.xl\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.xl\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.xl\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.xl\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.xl\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.xl\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.xl\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.xl\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.xl\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.xl\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.xl\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.xl\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.xl\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.xl\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.xl\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.xl\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.xl\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.xl\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.xl\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.xl\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.xl\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.xl\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.xl\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.xl\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.xl\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.xl\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.xl\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.xl\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.xl\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.xl\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.xl\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.xl\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.xl\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.xl\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.xl\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.xl\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.xl\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.xl\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.xl\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.xl\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.xl\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.xl\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.xl\:hover\:text-transparent:hover{color:transparent}.xl\:hover\:text-current:hover{color:currentColor}.xl\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.xl\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.xl\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.xl\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.xl\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.xl\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.xl\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.xl\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.xl\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.xl\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.xl\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.xl\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.xl\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.xl\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.xl\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.xl\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.xl\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.xl\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.xl\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.xl\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.xl\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.xl\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.xl\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.xl\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.xl\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.xl\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.xl\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.xl\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.xl\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.xl\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.xl\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.xl\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.xl\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.xl\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.xl\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.xl\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.xl\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.xl\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.xl\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.xl\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.xl\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.xl\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.xl\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.xl\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.xl\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.xl\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.xl\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.xl\:focus\:text-transparent:focus{color:transparent}.xl\:focus\:text-current:focus{color:currentColor}.xl\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.xl\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.xl\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.xl\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.xl\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.xl\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.xl\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.xl\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.xl\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.xl\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.xl\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.xl\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.xl\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.xl\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.xl\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.xl\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.xl\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.xl\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.xl\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.xl\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.xl\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.xl\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.xl\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.xl\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.xl\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.xl\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.xl\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.xl\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.xl\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.xl\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.xl\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.xl\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.xl\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.xl\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.xl\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.xl\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.xl\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.xl\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.xl\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.xl\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.xl\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.xl\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.xl\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.xl\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.xl\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.xl\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.xl\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.xl\:text-opacity-0{--text-opacity:0}.xl\:text-opacity-25{--text-opacity:0.25}.xl\:text-opacity-50{--text-opacity:0.5}.xl\:text-opacity-75{--text-opacity:0.75}.xl\:text-opacity-100{--text-opacity:1}.xl\:hover\:text-opacity-0:hover{--text-opacity:0}.xl\:hover\:text-opacity-25:hover{--text-opacity:0.25}.xl\:hover\:text-opacity-50:hover{--text-opacity:0.5}.xl\:hover\:text-opacity-75:hover{--text-opacity:0.75}.xl\:hover\:text-opacity-100:hover{--text-opacity:1}.xl\:focus\:text-opacity-0:focus{--text-opacity:0}.xl\:focus\:text-opacity-25:focus{--text-opacity:0.25}.xl\:focus\:text-opacity-50:focus{--text-opacity:0.5}.xl\:focus\:text-opacity-75:focus{--text-opacity:0.75}.xl\:focus\:text-opacity-100:focus{--text-opacity:1}.xl\:italic{font-style:italic}.xl\:not-italic{font-style:normal}.xl\:uppercase{text-transform:uppercase}.xl\:lowercase{text-transform:lowercase}.xl\:capitalize{text-transform:capitalize}.xl\:normal-case{text-transform:none}.xl\:underline{text-decoration:underline}.xl\:line-through{text-decoration:line-through}.xl\:no-underline{text-decoration:none}.xl\:hover\:underline:hover{text-decoration:underline}.xl\:hover\:line-through:hover{text-decoration:line-through}.xl\:hover\:no-underline:hover{text-decoration:none}.xl\:focus\:underline:focus{text-decoration:underline}.xl\:focus\:line-through:focus{text-decoration:line-through}.xl\:focus\:no-underline:focus{text-decoration:none}.xl\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.xl\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.xl\:diagonal-fractions,.xl\:lining-nums,.xl\:oldstyle-nums,.xl\:ordinal,.xl\:proportional-nums,.xl\:slashed-zero,.xl\:stacked-fractions,.xl\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.xl\:normal-nums{font-variant-numeric:normal}.xl\:ordinal{--font-variant-numeric-ordinal:ordinal}.xl\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.xl\:lining-nums{--font-variant-numeric-figure:lining-nums}.xl\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.xl\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.xl\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.xl\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.xl\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.xl\:tracking-tighter{letter-spacing:-.05em}.xl\:tracking-tight{letter-spacing:-.025em}.xl\:tracking-normal{letter-spacing:0}.xl\:tracking-wide{letter-spacing:.025em}.xl\:tracking-wider{letter-spacing:.05em}.xl\:tracking-widest{letter-spacing:.1em}.xl\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.xl\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.xl\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.xl\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.xl\:align-baseline{vertical-align:baseline}.xl\:align-top{vertical-align:top}.xl\:align-middle{vertical-align:middle}.xl\:align-bottom{vertical-align:bottom}.xl\:align-text-top{vertical-align:text-top}.xl\:align-text-bottom{vertical-align:text-bottom}.xl\:visible{visibility:visible}.xl\:invisible{visibility:hidden}.xl\:whitespace-normal{white-space:normal}.xl\:whitespace-no-wrap{white-space:nowrap}.xl\:whitespace-pre{white-space:pre}.xl\:whitespace-pre-line{white-space:pre-line}.xl\:whitespace-pre-wrap{white-space:pre-wrap}.xl\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.xl\:break-words{word-wrap:break-word;overflow-wrap:break-word}.xl\:break-all{word-break:break-all}.xl\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xl\:w-0{width:0}.xl\:w-1{width:.25rem}.xl\:w-2{width:.5rem}.xl\:w-3{width:.75rem}.xl\:w-4{width:1rem}.xl\:w-5{width:1.25rem}.xl\:w-6{width:1.5rem}.xl\:w-8{width:2rem}.xl\:w-10{width:2.5rem}.xl\:w-12{width:3rem}.xl\:w-16{width:4rem}.xl\:w-20{width:5rem}.xl\:w-24{width:6rem}.xl\:w-32{width:8rem}.xl\:w-40{width:10rem}.xl\:w-48{width:12rem}.xl\:w-56{width:14rem}.xl\:w-64{width:16rem}.xl\:w-auto{width:auto}.xl\:w-px{width:1px}.xl\:w-1\/2{width:50%}.xl\:w-1\/3{width:33.333333%}.xl\:w-2\/3{width:66.666667%}.xl\:w-1\/4{width:25%}.xl\:w-2\/4{width:50%}.xl\:w-3\/4{width:75%}.xl\:w-1\/5{width:20%}.xl\:w-2\/5{width:40%}.xl\:w-3\/5{width:60%}.xl\:w-4\/5{width:80%}.xl\:w-1\/6{width:16.666667%}.xl\:w-2\/6{width:33.333333%}.xl\:w-3\/6{width:50%}.xl\:w-4\/6{width:66.666667%}.xl\:w-5\/6{width:83.333333%}.xl\:w-1\/12{width:8.333333%}.xl\:w-2\/12{width:16.666667%}.xl\:w-3\/12{width:25%}.xl\:w-4\/12{width:33.333333%}.xl\:w-5\/12{width:41.666667%}.xl\:w-6\/12{width:50%}.xl\:w-7\/12{width:58.333333%}.xl\:w-8\/12{width:66.666667%}.xl\:w-9\/12{width:75%}.xl\:w-10\/12{width:83.333333%}.xl\:w-11\/12{width:91.666667%}.xl\:w-full{width:100%}.xl\:w-screen{width:100vw}.xl\:z-0{z-index:0}.xl\:z-10{z-index:10}.xl\:z-20{z-index:20}.xl\:z-30{z-index:30}.xl\:z-40{z-index:40}.xl\:z-50{z-index:50}.xl\:z-auto{z-index:auto}.xl\:gap-0{grid-gap:0;gap:0}.xl\:gap-1{grid-gap:.25rem;gap:.25rem}.xl\:gap-2{grid-gap:.5rem;gap:.5rem}.xl\:gap-3{grid-gap:.75rem;gap:.75rem}.xl\:gap-4{grid-gap:1rem;gap:1rem}.xl\:gap-5{grid-gap:1.25rem;gap:1.25rem}.xl\:gap-6{grid-gap:1.5rem;gap:1.5rem}.xl\:gap-8{grid-gap:2rem;gap:2rem}.xl\:gap-10{grid-gap:2.5rem;gap:2.5rem}.xl\:gap-12{grid-gap:3rem;gap:3rem}.xl\:gap-16{grid-gap:4rem;gap:4rem}.xl\:gap-20{grid-gap:5rem;gap:5rem}.xl\:gap-24{grid-gap:6rem;gap:6rem}.xl\:gap-32{grid-gap:8rem;gap:8rem}.xl\:gap-40{grid-gap:10rem;gap:10rem}.xl\:gap-48{grid-gap:12rem;gap:12rem}.xl\:gap-56{grid-gap:14rem;gap:14rem}.xl\:gap-64{grid-gap:16rem;gap:16rem}.xl\:gap-px{grid-gap:1px;gap:1px}.xl\:col-gap-0{grid-column-gap:0;column-gap:0}.xl\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.xl\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.xl\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.xl\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.xl\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.xl\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.xl\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.xl\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.xl\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.xl\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.xl\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.xl\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.xl\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.xl\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.xl\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.xl\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.xl\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.xl\:col-gap-px{grid-column-gap:1px;column-gap:1px}.xl\:gap-x-0{grid-column-gap:0;column-gap:0}.xl\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.xl\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.xl\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.xl\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.xl\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.xl\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.xl\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.xl\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.xl\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.xl\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.xl\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.xl\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.xl\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.xl\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.xl\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.xl\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.xl\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.xl\:gap-x-px{grid-column-gap:1px;column-gap:1px}.xl\:row-gap-0{grid-row-gap:0;row-gap:0}.xl\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.xl\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.xl\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.xl\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.xl\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.xl\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.xl\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.xl\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.xl\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.xl\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.xl\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.xl\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.xl\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.xl\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.xl\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.xl\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.xl\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.xl\:row-gap-px{grid-row-gap:1px;row-gap:1px}.xl\:gap-y-0{grid-row-gap:0;row-gap:0}.xl\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.xl\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.xl\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.xl\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.xl\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.xl\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.xl\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.xl\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.xl\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.xl\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.xl\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.xl\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.xl\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.xl\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.xl\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.xl\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.xl\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.xl\:gap-y-px{grid-row-gap:1px;row-gap:1px}.xl\:grid-flow-row{grid-auto-flow:row}.xl\:grid-flow-col{grid-auto-flow:column}.xl\:grid-flow-row-dense{grid-auto-flow:row dense}.xl\:grid-flow-col-dense{grid-auto-flow:column dense}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-none{grid-template-columns:none}.xl\:auto-cols-auto{grid-auto-columns:auto}.xl\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.xl\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.xl\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.xl\:col-auto{grid-column:auto}.xl\:col-span-1{grid-column:span 1/span 1}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-7{grid-column:span 7/span 7}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:col-span-10{grid-column:span 10/span 10}.xl\:col-span-11{grid-column:span 11/span 11}.xl\:col-span-12{grid-column:span 12/span 12}.xl\:col-span-full{grid-column:1/-1}.xl\:col-start-1{grid-column-start:1}.xl\:col-start-2{grid-column-start:2}.xl\:col-start-3{grid-column-start:3}.xl\:col-start-4{grid-column-start:4}.xl\:col-start-5{grid-column-start:5}.xl\:col-start-6{grid-column-start:6}.xl\:col-start-7{grid-column-start:7}.xl\:col-start-8{grid-column-start:8}.xl\:col-start-9{grid-column-start:9}.xl\:col-start-10{grid-column-start:10}.xl\:col-start-11{grid-column-start:11}.xl\:col-start-12{grid-column-start:12}.xl\:col-start-13{grid-column-start:13}.xl\:col-start-auto{grid-column-start:auto}.xl\:col-end-1{grid-column-end:1}.xl\:col-end-2{grid-column-end:2}.xl\:col-end-3{grid-column-end:3}.xl\:col-end-4{grid-column-end:4}.xl\:col-end-5{grid-column-end:5}.xl\:col-end-6{grid-column-end:6}.xl\:col-end-7{grid-column-end:7}.xl\:col-end-8{grid-column-end:8}.xl\:col-end-9{grid-column-end:9}.xl\:col-end-10{grid-column-end:10}.xl\:col-end-11{grid-column-end:11}.xl\:col-end-12{grid-column-end:12}.xl\:col-end-13{grid-column-end:13}.xl\:col-end-auto{grid-column-end:auto}.xl\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xl\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xl\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xl\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xl\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.xl\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.xl\:grid-rows-none{grid-template-rows:none}.xl\:auto-rows-auto{grid-auto-rows:auto}.xl\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.xl\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.xl\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.xl\:row-auto{grid-row:auto}.xl\:row-span-1{grid-row:span 1/span 1}.xl\:row-span-2{grid-row:span 2/span 2}.xl\:row-span-3{grid-row:span 3/span 3}.xl\:row-span-4{grid-row:span 4/span 4}.xl\:row-span-5{grid-row:span 5/span 5}.xl\:row-span-6{grid-row:span 6/span 6}.xl\:row-span-full{grid-row:1/-1}.xl\:row-start-1{grid-row-start:1}.xl\:row-start-2{grid-row-start:2}.xl\:row-start-3{grid-row-start:3}.xl\:row-start-4{grid-row-start:4}.xl\:row-start-5{grid-row-start:5}.xl\:row-start-6{grid-row-start:6}.xl\:row-start-7{grid-row-start:7}.xl\:row-start-auto{grid-row-start:auto}.xl\:row-end-1{grid-row-end:1}.xl\:row-end-2{grid-row-end:2}.xl\:row-end-3{grid-row-end:3}.xl\:row-end-4{grid-row-end:4}.xl\:row-end-5{grid-row-end:5}.xl\:row-end-6{grid-row-end:6}.xl\:row-end-7{grid-row-end:7}.xl\:row-end-auto{grid-row-end:auto}.xl\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.xl\:transform-none{transform:none}.xl\:origin-center{transform-origin:center}.xl\:origin-top{transform-origin:top}.xl\:origin-top-right{transform-origin:top right}.xl\:origin-right{transform-origin:right}.xl\:origin-bottom-right{transform-origin:bottom right}.xl\:origin-bottom{transform-origin:bottom}.xl\:origin-bottom-left{transform-origin:bottom left}.xl\:origin-left{transform-origin:left}.xl\:origin-top-left{transform-origin:top left}.xl\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.xl\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.xl\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:scale-x-0{--transform-scale-x:0}.xl\:scale-x-50{--transform-scale-x:.5}.xl\:scale-x-75{--transform-scale-x:.75}.xl\:scale-x-90{--transform-scale-x:.9}.xl\:scale-x-95{--transform-scale-x:.95}.xl\:scale-x-100{--transform-scale-x:1}.xl\:scale-x-105{--transform-scale-x:1.05}.xl\:scale-x-110{--transform-scale-x:1.1}.xl\:scale-x-125{--transform-scale-x:1.25}.xl\:scale-x-150{--transform-scale-x:1.5}.xl\:scale-y-0{--transform-scale-y:0}.xl\:scale-y-50{--transform-scale-y:.5}.xl\:scale-y-75{--transform-scale-y:.75}.xl\:scale-y-90{--transform-scale-y:.9}.xl\:scale-y-95{--transform-scale-y:.95}.xl\:scale-y-100{--transform-scale-y:1}.xl\:scale-y-105{--transform-scale-y:1.05}.xl\:scale-y-110{--transform-scale-y:1.1}.xl\:scale-y-125{--transform-scale-y:1.25}.xl\:scale-y-150{--transform-scale-y:1.5}.xl\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.xl\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.xl\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:hover\:scale-x-0:hover{--transform-scale-x:0}.xl\:hover\:scale-x-50:hover{--transform-scale-x:.5}.xl\:hover\:scale-x-75:hover{--transform-scale-x:.75}.xl\:hover\:scale-x-90:hover{--transform-scale-x:.9}.xl\:hover\:scale-x-95:hover{--transform-scale-x:.95}.xl\:hover\:scale-x-100:hover{--transform-scale-x:1}.xl\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.xl\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.xl\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.xl\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.xl\:hover\:scale-y-0:hover{--transform-scale-y:0}.xl\:hover\:scale-y-50:hover{--transform-scale-y:.5}.xl\:hover\:scale-y-75:hover{--transform-scale-y:.75}.xl\:hover\:scale-y-90:hover{--transform-scale-y:.9}.xl\:hover\:scale-y-95:hover{--transform-scale-y:.95}.xl\:hover\:scale-y-100:hover{--transform-scale-y:1}.xl\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.xl\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.xl\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.xl\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.xl\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.xl\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.xl\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:focus\:scale-x-0:focus{--transform-scale-x:0}.xl\:focus\:scale-x-50:focus{--transform-scale-x:.5}.xl\:focus\:scale-x-75:focus{--transform-scale-x:.75}.xl\:focus\:scale-x-90:focus{--transform-scale-x:.9}.xl\:focus\:scale-x-95:focus{--transform-scale-x:.95}.xl\:focus\:scale-x-100:focus{--transform-scale-x:1}.xl\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.xl\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.xl\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.xl\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.xl\:focus\:scale-y-0:focus{--transform-scale-y:0}.xl\:focus\:scale-y-50:focus{--transform-scale-y:.5}.xl\:focus\:scale-y-75:focus{--transform-scale-y:.75}.xl\:focus\:scale-y-90:focus{--transform-scale-y:.9}.xl\:focus\:scale-y-95:focus{--transform-scale-y:.95}.xl\:focus\:scale-y-100:focus{--transform-scale-y:1}.xl\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.xl\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.xl\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.xl\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.xl\:rotate-0{--transform-rotate:0}.xl\:rotate-1{--transform-rotate:1deg}.xl\:rotate-2{--transform-rotate:2deg}.xl\:rotate-3{--transform-rotate:3deg}.xl\:rotate-6{--transform-rotate:6deg}.xl\:rotate-12{--transform-rotate:12deg}.xl\:rotate-45{--transform-rotate:45deg}.xl\:rotate-90{--transform-rotate:90deg}.xl\:rotate-180{--transform-rotate:180deg}.xl\:-rotate-180{--transform-rotate:-180deg}.xl\:-rotate-90{--transform-rotate:-90deg}.xl\:-rotate-45{--transform-rotate:-45deg}.xl\:-rotate-12{--transform-rotate:-12deg}.xl\:-rotate-6{--transform-rotate:-6deg}.xl\:-rotate-3{--transform-rotate:-3deg}.xl\:-rotate-2{--transform-rotate:-2deg}.xl\:-rotate-1{--transform-rotate:-1deg}.xl\:hover\:rotate-0:hover{--transform-rotate:0}.xl\:hover\:rotate-1:hover{--transform-rotate:1deg}.xl\:hover\:rotate-2:hover{--transform-rotate:2deg}.xl\:hover\:rotate-3:hover{--transform-rotate:3deg}.xl\:hover\:rotate-6:hover{--transform-rotate:6deg}.xl\:hover\:rotate-12:hover{--transform-rotate:12deg}.xl\:hover\:rotate-45:hover{--transform-rotate:45deg}.xl\:hover\:rotate-90:hover{--transform-rotate:90deg}.xl\:hover\:rotate-180:hover{--transform-rotate:180deg}.xl\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.xl\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.xl\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.xl\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.xl\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.xl\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.xl\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.xl\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.xl\:focus\:rotate-0:focus{--transform-rotate:0}.xl\:focus\:rotate-1:focus{--transform-rotate:1deg}.xl\:focus\:rotate-2:focus{--transform-rotate:2deg}.xl\:focus\:rotate-3:focus{--transform-rotate:3deg}.xl\:focus\:rotate-6:focus{--transform-rotate:6deg}.xl\:focus\:rotate-12:focus{--transform-rotate:12deg}.xl\:focus\:rotate-45:focus{--transform-rotate:45deg}.xl\:focus\:rotate-90:focus{--transform-rotate:90deg}.xl\:focus\:rotate-180:focus{--transform-rotate:180deg}.xl\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.xl\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.xl\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.xl\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.xl\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.xl\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.xl\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.xl\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.xl\:translate-x-0{--transform-translate-x:0}.xl\:translate-x-1{--transform-translate-x:0.25rem}.xl\:translate-x-2{--transform-translate-x:0.5rem}.xl\:translate-x-3{--transform-translate-x:0.75rem}.xl\:translate-x-4{--transform-translate-x:1rem}.xl\:translate-x-5{--transform-translate-x:1.25rem}.xl\:translate-x-6{--transform-translate-x:1.5rem}.xl\:translate-x-8{--transform-translate-x:2rem}.xl\:translate-x-10{--transform-translate-x:2.5rem}.xl\:translate-x-12{--transform-translate-x:3rem}.xl\:translate-x-16{--transform-translate-x:4rem}.xl\:translate-x-20{--transform-translate-x:5rem}.xl\:translate-x-24{--transform-translate-x:6rem}.xl\:translate-x-32{--transform-translate-x:8rem}.xl\:translate-x-40{--transform-translate-x:10rem}.xl\:translate-x-48{--transform-translate-x:12rem}.xl\:translate-x-56{--transform-translate-x:14rem}.xl\:translate-x-64{--transform-translate-x:16rem}.xl\:translate-x-px{--transform-translate-x:1px}.xl\:-translate-x-1{--transform-translate-x:-0.25rem}.xl\:-translate-x-2{--transform-translate-x:-0.5rem}.xl\:-translate-x-3{--transform-translate-x:-0.75rem}.xl\:-translate-x-4{--transform-translate-x:-1rem}.xl\:-translate-x-5{--transform-translate-x:-1.25rem}.xl\:-translate-x-6{--transform-translate-x:-1.5rem}.xl\:-translate-x-8{--transform-translate-x:-2rem}.xl\:-translate-x-10{--transform-translate-x:-2.5rem}.xl\:-translate-x-12{--transform-translate-x:-3rem}.xl\:-translate-x-16{--transform-translate-x:-4rem}.xl\:-translate-x-20{--transform-translate-x:-5rem}.xl\:-translate-x-24{--transform-translate-x:-6rem}.xl\:-translate-x-32{--transform-translate-x:-8rem}.xl\:-translate-x-40{--transform-translate-x:-10rem}.xl\:-translate-x-48{--transform-translate-x:-12rem}.xl\:-translate-x-56{--transform-translate-x:-14rem}.xl\:-translate-x-64{--transform-translate-x:-16rem}.xl\:-translate-x-px{--transform-translate-x:-1px}.xl\:-translate-x-full{--transform-translate-x:-100%}.xl\:-translate-x-1\/2{--transform-translate-x:-50%}.xl\:translate-x-1\/2{--transform-translate-x:50%}.xl\:translate-x-full{--transform-translate-x:100%}.xl\:translate-y-0{--transform-translate-y:0}.xl\:translate-y-1{--transform-translate-y:0.25rem}.xl\:translate-y-2{--transform-translate-y:0.5rem}.xl\:translate-y-3{--transform-translate-y:0.75rem}.xl\:translate-y-4{--transform-translate-y:1rem}.xl\:translate-y-5{--transform-translate-y:1.25rem}.xl\:translate-y-6{--transform-translate-y:1.5rem}.xl\:translate-y-8{--transform-translate-y:2rem}.xl\:translate-y-10{--transform-translate-y:2.5rem}.xl\:translate-y-12{--transform-translate-y:3rem}.xl\:translate-y-16{--transform-translate-y:4rem}.xl\:translate-y-20{--transform-translate-y:5rem}.xl\:translate-y-24{--transform-translate-y:6rem}.xl\:translate-y-32{--transform-translate-y:8rem}.xl\:translate-y-40{--transform-translate-y:10rem}.xl\:translate-y-48{--transform-translate-y:12rem}.xl\:translate-y-56{--transform-translate-y:14rem}.xl\:translate-y-64{--transform-translate-y:16rem}.xl\:translate-y-px{--transform-translate-y:1px}.xl\:-translate-y-1{--transform-translate-y:-0.25rem}.xl\:-translate-y-2{--transform-translate-y:-0.5rem}.xl\:-translate-y-3{--transform-translate-y:-0.75rem}.xl\:-translate-y-4{--transform-translate-y:-1rem}.xl\:-translate-y-5{--transform-translate-y:-1.25rem}.xl\:-translate-y-6{--transform-translate-y:-1.5rem}.xl\:-translate-y-8{--transform-translate-y:-2rem}.xl\:-translate-y-10{--transform-translate-y:-2.5rem}.xl\:-translate-y-12{--transform-translate-y:-3rem}.xl\:-translate-y-16{--transform-translate-y:-4rem}.xl\:-translate-y-20{--transform-translate-y:-5rem}.xl\:-translate-y-24{--transform-translate-y:-6rem}.xl\:-translate-y-32{--transform-translate-y:-8rem}.xl\:-translate-y-40{--transform-translate-y:-10rem}.xl\:-translate-y-48{--transform-translate-y:-12rem}.xl\:-translate-y-56{--transform-translate-y:-14rem}.xl\:-translate-y-64{--transform-translate-y:-16rem}.xl\:-translate-y-px{--transform-translate-y:-1px}.xl\:-translate-y-full{--transform-translate-y:-100%}.xl\:-translate-y-1\/2{--transform-translate-y:-50%}.xl\:translate-y-1\/2{--transform-translate-y:50%}.xl\:translate-y-full{--transform-translate-y:100%}.xl\:hover\:translate-x-0:hover{--transform-translate-x:0}.xl\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.xl\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.xl\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.xl\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.xl\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.xl\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.xl\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.xl\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.xl\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.xl\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.xl\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.xl\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.xl\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.xl\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.xl\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.xl\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.xl\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.xl\:hover\:translate-x-px:hover{--transform-translate-x:1px}.xl\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.xl\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.xl\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.xl\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.xl\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.xl\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.xl\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.xl\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.xl\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.xl\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.xl\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.xl\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.xl\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.xl\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.xl\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.xl\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.xl\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.xl\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.xl\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.xl\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.xl\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.xl\:hover\:translate-x-full:hover{--transform-translate-x:100%}.xl\:hover\:translate-y-0:hover{--transform-translate-y:0}.xl\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.xl\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.xl\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.xl\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.xl\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.xl\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.xl\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.xl\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.xl\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.xl\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.xl\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.xl\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.xl\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.xl\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.xl\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.xl\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.xl\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.xl\:hover\:translate-y-px:hover{--transform-translate-y:1px}.xl\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.xl\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.xl\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.xl\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.xl\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.xl\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.xl\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.xl\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.xl\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.xl\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.xl\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.xl\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.xl\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.xl\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.xl\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.xl\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.xl\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.xl\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.xl\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.xl\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.xl\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.xl\:hover\:translate-y-full:hover{--transform-translate-y:100%}.xl\:focus\:translate-x-0:focus{--transform-translate-x:0}.xl\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.xl\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.xl\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.xl\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.xl\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.xl\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.xl\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.xl\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.xl\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.xl\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.xl\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.xl\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.xl\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.xl\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.xl\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.xl\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.xl\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.xl\:focus\:translate-x-px:focus{--transform-translate-x:1px}.xl\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.xl\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.xl\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.xl\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.xl\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.xl\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.xl\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.xl\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.xl\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.xl\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.xl\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.xl\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.xl\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.xl\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.xl\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.xl\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.xl\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.xl\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.xl\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.xl\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.xl\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.xl\:focus\:translate-x-full:focus{--transform-translate-x:100%}.xl\:focus\:translate-y-0:focus{--transform-translate-y:0}.xl\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.xl\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.xl\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.xl\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.xl\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.xl\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.xl\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.xl\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.xl\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.xl\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.xl\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.xl\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.xl\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.xl\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.xl\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.xl\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.xl\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.xl\:focus\:translate-y-px:focus{--transform-translate-y:1px}.xl\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.xl\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.xl\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.xl\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.xl\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.xl\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.xl\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.xl\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.xl\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.xl\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.xl\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.xl\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.xl\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.xl\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.xl\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.xl\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.xl\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.xl\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.xl\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.xl\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.xl\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.xl\:focus\:translate-y-full:focus{--transform-translate-y:100%}.xl\:skew-x-0{--transform-skew-x:0}.xl\:skew-x-1{--transform-skew-x:1deg}.xl\:skew-x-2{--transform-skew-x:2deg}.xl\:skew-x-3{--transform-skew-x:3deg}.xl\:skew-x-6{--transform-skew-x:6deg}.xl\:skew-x-12{--transform-skew-x:12deg}.xl\:-skew-x-12{--transform-skew-x:-12deg}.xl\:-skew-x-6{--transform-skew-x:-6deg}.xl\:-skew-x-3{--transform-skew-x:-3deg}.xl\:-skew-x-2{--transform-skew-x:-2deg}.xl\:-skew-x-1{--transform-skew-x:-1deg}.xl\:skew-y-0{--transform-skew-y:0}.xl\:skew-y-1{--transform-skew-y:1deg}.xl\:skew-y-2{--transform-skew-y:2deg}.xl\:skew-y-3{--transform-skew-y:3deg}.xl\:skew-y-6{--transform-skew-y:6deg}.xl\:skew-y-12{--transform-skew-y:12deg}.xl\:-skew-y-12{--transform-skew-y:-12deg}.xl\:-skew-y-6{--transform-skew-y:-6deg}.xl\:-skew-y-3{--transform-skew-y:-3deg}.xl\:-skew-y-2{--transform-skew-y:-2deg}.xl\:-skew-y-1{--transform-skew-y:-1deg}.xl\:hover\:skew-x-0:hover{--transform-skew-x:0}.xl\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.xl\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.xl\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.xl\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.xl\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.xl\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.xl\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.xl\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.xl\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.xl\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.xl\:hover\:skew-y-0:hover{--transform-skew-y:0}.xl\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.xl\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.xl\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.xl\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.xl\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.xl\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.xl\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.xl\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.xl\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.xl\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.xl\:focus\:skew-x-0:focus{--transform-skew-x:0}.xl\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.xl\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.xl\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.xl\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.xl\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.xl\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.xl\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.xl\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.xl\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.xl\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.xl\:focus\:skew-y-0:focus{--transform-skew-y:0}.xl\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.xl\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.xl\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.xl\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.xl\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.xl\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.xl\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.xl\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.xl\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.xl\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.xl\:transition-none{transition-property:none}.xl\:transition-all{transition-property:all}.xl\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.xl\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.xl\:transition-opacity{transition-property:opacity}.xl\:transition-shadow{transition-property:box-shadow}.xl\:transition-transform{transition-property:transform}.xl\:ease-linear{transition-timing-function:linear}.xl\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.xl\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.xl\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.xl\:duration-75{transition-duration:75ms}.xl\:duration-100{transition-duration:.1s}.xl\:duration-150{transition-duration:150ms}.xl\:duration-200{transition-duration:.2s}.xl\:duration-300{transition-duration:.3s}.xl\:duration-500{transition-duration:.5s}.xl\:duration-700{transition-duration:.7s}.xl\:duration-1000{transition-duration:1s}.xl\:delay-75{transition-delay:75ms}.xl\:delay-100{transition-delay:.1s}.xl\:delay-150{transition-delay:150ms}.xl\:delay-200{transition-delay:.2s}.xl\:delay-300{transition-delay:.3s}.xl\:delay-500{transition-delay:.5s}.xl\:delay-700{transition-delay:.7s}.xl\:delay-1000{transition-delay:1s}.xl\:animate-none{animation:none}.xl\:animate-spin{animation:spin 1s linear infinite}.xl\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.xl\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.xl\:animate-bounce{animation:bounce 1s infinite}} \ No newline at end of file diff --git a/test/configCases/css/large/tailwind.module.css b/test/configCases/css/large/tailwind.module.css new file mode 100644 index 00000000000..dc016181652 --- /dev/null +++ b/test/configCases/css/large/tailwind.module.css @@ -0,0 +1 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.5}*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.divide-transparent>:not(template)~:not(template){border-color:transparent}.divide-current>:not(template)~:not(template){border-color:currentColor}.divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.divide-solid>:not(template)~:not(template){border-style:solid}.divide-dashed>:not(template)~:not(template){border-style:dashed}.divide-dotted>:not(template)~:not(template){border-style:dotted}.divide-double>:not(template)~:not(template){border-style:double}.divide-none>:not(template)~:not(template){border-style:none}.divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-clip-border{background-clip:border-box}.bg-clip-padding{background-clip:padding-box}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-transparent{background-color:transparent}.bg-current{background-color:currentColor}.bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-current:hover{background-color:currentColor}.hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.focus\:bg-transparent:focus{background-color:transparent}.focus\:bg-current:focus{background-color:currentColor}.focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.bg-none{background-image:none}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.to-transparent{--gradient-to-color:transparent}.to-current{--gradient-to-color:currentColor}.to-black{--gradient-to-color:#000}.to-white{--gradient-to-color:#fff}.to-gray-100{--gradient-to-color:#f7fafc}.to-gray-200{--gradient-to-color:#edf2f7}.to-gray-300{--gradient-to-color:#e2e8f0}.to-gray-400{--gradient-to-color:#cbd5e0}.to-gray-500{--gradient-to-color:#a0aec0}.to-gray-600{--gradient-to-color:#718096}.to-gray-700{--gradient-to-color:#4a5568}.to-gray-800{--gradient-to-color:#2d3748}.to-gray-900{--gradient-to-color:#1a202c}.to-red-100{--gradient-to-color:#fff5f5}.to-red-200{--gradient-to-color:#fed7d7}.to-red-300{--gradient-to-color:#feb2b2}.to-red-400{--gradient-to-color:#fc8181}.to-red-500{--gradient-to-color:#f56565}.to-red-600{--gradient-to-color:#e53e3e}.to-red-700{--gradient-to-color:#c53030}.to-red-800{--gradient-to-color:#9b2c2c}.to-red-900{--gradient-to-color:#742a2a}.to-orange-100{--gradient-to-color:#fffaf0}.to-orange-200{--gradient-to-color:#feebc8}.to-orange-300{--gradient-to-color:#fbd38d}.to-orange-400{--gradient-to-color:#f6ad55}.to-orange-500{--gradient-to-color:#ed8936}.to-orange-600{--gradient-to-color:#dd6b20}.to-orange-700{--gradient-to-color:#c05621}.to-orange-800{--gradient-to-color:#9c4221}.to-orange-900{--gradient-to-color:#7b341e}.to-yellow-100{--gradient-to-color:#fffff0}.to-yellow-200{--gradient-to-color:#fefcbf}.to-yellow-300{--gradient-to-color:#faf089}.to-yellow-400{--gradient-to-color:#f6e05e}.to-yellow-500{--gradient-to-color:#ecc94b}.to-yellow-600{--gradient-to-color:#d69e2e}.to-yellow-700{--gradient-to-color:#b7791f}.to-yellow-800{--gradient-to-color:#975a16}.to-yellow-900{--gradient-to-color:#744210}.to-green-100{--gradient-to-color:#f0fff4}.to-green-200{--gradient-to-color:#c6f6d5}.to-green-300{--gradient-to-color:#9ae6b4}.to-green-400{--gradient-to-color:#68d391}.to-green-500{--gradient-to-color:#48bb78}.to-green-600{--gradient-to-color:#38a169}.to-green-700{--gradient-to-color:#2f855a}.to-green-800{--gradient-to-color:#276749}.to-green-900{--gradient-to-color:#22543d}.to-teal-100{--gradient-to-color:#e6fffa}.to-teal-200{--gradient-to-color:#b2f5ea}.to-teal-300{--gradient-to-color:#81e6d9}.to-teal-400{--gradient-to-color:#4fd1c5}.to-teal-500{--gradient-to-color:#38b2ac}.to-teal-600{--gradient-to-color:#319795}.to-teal-700{--gradient-to-color:#2c7a7b}.to-teal-800{--gradient-to-color:#285e61}.to-teal-900{--gradient-to-color:#234e52}.to-blue-100{--gradient-to-color:#ebf8ff}.to-blue-200{--gradient-to-color:#bee3f8}.to-blue-300{--gradient-to-color:#90cdf4}.to-blue-400{--gradient-to-color:#63b3ed}.to-blue-500{--gradient-to-color:#4299e1}.to-blue-600{--gradient-to-color:#3182ce}.to-blue-700{--gradient-to-color:#2b6cb0}.to-blue-800{--gradient-to-color:#2c5282}.to-blue-900{--gradient-to-color:#2a4365}.to-indigo-100{--gradient-to-color:#ebf4ff}.to-indigo-200{--gradient-to-color:#c3dafe}.to-indigo-300{--gradient-to-color:#a3bffa}.to-indigo-400{--gradient-to-color:#7f9cf5}.to-indigo-500{--gradient-to-color:#667eea}.to-indigo-600{--gradient-to-color:#5a67d8}.to-indigo-700{--gradient-to-color:#4c51bf}.to-indigo-800{--gradient-to-color:#434190}.to-indigo-900{--gradient-to-color:#3c366b}.to-purple-100{--gradient-to-color:#faf5ff}.to-purple-200{--gradient-to-color:#e9d8fd}.to-purple-300{--gradient-to-color:#d6bcfa}.to-purple-400{--gradient-to-color:#b794f4}.to-purple-500{--gradient-to-color:#9f7aea}.to-purple-600{--gradient-to-color:#805ad5}.to-purple-700{--gradient-to-color:#6b46c1}.to-purple-800{--gradient-to-color:#553c9a}.to-purple-900{--gradient-to-color:#44337a}.to-pink-100{--gradient-to-color:#fff5f7}.to-pink-200{--gradient-to-color:#fed7e2}.to-pink-300{--gradient-to-color:#fbb6ce}.to-pink-400{--gradient-to-color:#f687b3}.to-pink-500{--gradient-to-color:#ed64a6}.to-pink-600{--gradient-to-color:#d53f8c}.to-pink-700{--gradient-to-color:#b83280}.to-pink-800{--gradient-to-color:#97266d}.to-pink-900{--gradient-to-color:#702459}.hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.hover\:to-transparent:hover{--gradient-to-color:transparent}.hover\:to-current:hover{--gradient-to-color:currentColor}.hover\:to-black:hover{--gradient-to-color:#000}.hover\:to-white:hover{--gradient-to-color:#fff}.hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.hover\:to-gray-600:hover{--gradient-to-color:#718096}.hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.hover\:to-red-400:hover{--gradient-to-color:#fc8181}.hover\:to-red-500:hover{--gradient-to-color:#f56565}.hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.hover\:to-red-700:hover{--gradient-to-color:#c53030}.hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.hover\:to-red-900:hover{--gradient-to-color:#742a2a}.hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.hover\:to-orange-700:hover{--gradient-to-color:#c05621}.hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.hover\:to-yellow-900:hover{--gradient-to-color:#744210}.hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.hover\:to-green-400:hover{--gradient-to-color:#68d391}.hover\:to-green-500:hover{--gradient-to-color:#48bb78}.hover\:to-green-600:hover{--gradient-to-color:#38a169}.hover\:to-green-700:hover{--gradient-to-color:#2f855a}.hover\:to-green-800:hover{--gradient-to-color:#276749}.hover\:to-green-900:hover{--gradient-to-color:#22543d}.hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.hover\:to-teal-600:hover{--gradient-to-color:#319795}.hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.hover\:to-teal-800:hover{--gradient-to-color:#285e61}.hover\:to-teal-900:hover{--gradient-to-color:#234e52}.hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.hover\:to-indigo-800:hover{--gradient-to-color:#434190}.hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.hover\:to-purple-900:hover{--gradient-to-color:#44337a}.hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.hover\:to-pink-700:hover{--gradient-to-color:#b83280}.hover\:to-pink-800:hover{--gradient-to-color:#97266d}.hover\:to-pink-900:hover{--gradient-to-color:#702459}.focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.focus\:to-transparent:focus{--gradient-to-color:transparent}.focus\:to-current:focus{--gradient-to-color:currentColor}.focus\:to-black:focus{--gradient-to-color:#000}.focus\:to-white:focus{--gradient-to-color:#fff}.focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.focus\:to-gray-600:focus{--gradient-to-color:#718096}.focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.focus\:to-red-400:focus{--gradient-to-color:#fc8181}.focus\:to-red-500:focus{--gradient-to-color:#f56565}.focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.focus\:to-red-700:focus{--gradient-to-color:#c53030}.focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.focus\:to-red-900:focus{--gradient-to-color:#742a2a}.focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.focus\:to-orange-700:focus{--gradient-to-color:#c05621}.focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.focus\:to-yellow-900:focus{--gradient-to-color:#744210}.focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.focus\:to-green-400:focus{--gradient-to-color:#68d391}.focus\:to-green-500:focus{--gradient-to-color:#48bb78}.focus\:to-green-600:focus{--gradient-to-color:#38a169}.focus\:to-green-700:focus{--gradient-to-color:#2f855a}.focus\:to-green-800:focus{--gradient-to-color:#276749}.focus\:to-green-900:focus{--gradient-to-color:#22543d}.focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.focus\:to-teal-600:focus{--gradient-to-color:#319795}.focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.focus\:to-teal-800:focus{--gradient-to-color:#285e61}.focus\:to-teal-900:focus{--gradient-to-color:#234e52}.focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.focus\:to-indigo-800:focus{--gradient-to-color:#434190}.focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.focus\:to-purple-900:focus{--gradient-to-color:#44337a}.focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.focus\:to-pink-700:focus{--gradient-to-color:#b83280}.focus\:to-pink-800:focus{--gradient-to-color:#97266d}.focus\:to-pink-900:focus{--gradient-to-color:#702459}.bg-opacity-0{--bg-opacity:0}.bg-opacity-25{--bg-opacity:0.25}.bg-opacity-50{--bg-opacity:0.5}.bg-opacity-75{--bg-opacity:0.75}.bg-opacity-100{--bg-opacity:1}.hover\:bg-opacity-0:hover{--bg-opacity:0}.hover\:bg-opacity-25:hover{--bg-opacity:0.25}.hover\:bg-opacity-50:hover{--bg-opacity:0.5}.hover\:bg-opacity-75:hover{--bg-opacity:0.75}.hover\:bg-opacity-100:hover{--bg-opacity:1}.focus\:bg-opacity-0:focus{--bg-opacity:0}.focus\:bg-opacity-25:focus{--bg-opacity:0.25}.focus\:bg-opacity-50:focus{--bg-opacity:0.5}.focus\:bg-opacity-75:focus{--bg-opacity:0.75}.focus\:bg-opacity-100:focus{--bg-opacity:1}.bg-bottom{background-position:bottom}.bg-center{background-position:center}.bg-left{background-position:left}.bg-left-bottom{background-position:left bottom}.bg-left-top{background-position:left top}.bg-right{background-position:right}.bg-right-bottom{background-position:right bottom}.bg-right-top{background-position:right top}.bg-top{background-position:top}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-auto{background-size:auto}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-transparent{border-color:transparent}.border-current{border-color:currentColor}.border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:border-current:hover{border-color:currentColor}.hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.focus\:border-transparent:focus{border-color:transparent}.focus\:border-current:focus{border-color:currentColor}.focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.border-opacity-0{--border-opacity:0}.border-opacity-25{--border-opacity:0.25}.border-opacity-50{--border-opacity:0.5}.border-opacity-75{--border-opacity:0.75}.border-opacity-100{--border-opacity:1}.hover\:border-opacity-0:hover{--border-opacity:0}.hover\:border-opacity-25:hover{--border-opacity:0.25}.hover\:border-opacity-50:hover{--border-opacity:0.5}.hover\:border-opacity-75:hover{--border-opacity:0.75}.hover\:border-opacity-100:hover{--border-opacity:1}.focus\:border-opacity-0:focus{--border-opacity:0}.focus\:border-opacity-25:focus{--border-opacity:0.25}.focus\:border-opacity-50:focus{--border-opacity:0.5}.focus\:border-opacity-75:focus{--border-opacity:0.75}.focus\:border-opacity-100:focus{--border-opacity:1}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.rounded-tl-sm{border-top-left-radius:.125rem}.rounded-tr-sm{border-top-right-radius:.125rem}.rounded-br-sm{border-bottom-right-radius:.125rem}.rounded-bl-sm{border-bottom-left-radius:.125rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.rounded-tl-md{border-top-left-radius:.375rem}.rounded-tr-md{border-top-right-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tr-lg{border-top-right-radius:.5rem}.rounded-br-lg{border-bottom-right-radius:.5rem}.rounded-bl-lg{border-bottom-left-radius:.5rem}.rounded-tl-xl{border-top-left-radius:.75rem}.rounded-tr-xl{border-top-right-radius:.75rem}.rounded-br-xl{border-bottom-right-radius:.75rem}.rounded-bl-xl{border-bottom-left-radius:.75rem}.rounded-tl-2xl{border-top-left-radius:1rem}.rounded-tr-2xl{border-top-right-radius:1rem}.rounded-br-2xl{border-bottom-right-radius:1rem}.rounded-bl-2xl{border-bottom-left-radius:1rem}.rounded-tl-3xl{border-top-left-radius:1.5rem}.rounded-tr-3xl{border-top-right-radius:1.5rem}.rounded-br-3xl{border-bottom-right-radius:1.5rem}.rounded-bl-3xl{border-bottom-left-radius:1.5rem}.rounded-tl-full{border-top-left-radius:9999px}.rounded-tr-full{border-top-right-radius:9999px}.rounded-br-full{border-bottom-right-radius:9999px}.rounded-bl-full{border-bottom-left-radius:9999px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-none{border-style:none}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-8{border-width:8px}.border{border-width:1px}.border-t-0{border-top-width:0}.border-r-0{border-right-width:0}.border-b-0{border-bottom-width:0}.border-l-0{border-left-width:0}.border-t-2{border-top-width:2px}.border-r-2{border-right-width:2px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-t-4{border-top-width:4px}.border-r-4{border-right-width:4px}.border-b-4{border-bottom-width:4px}.border-l-4{border-left-width:4px}.border-t-8{border-top-width:8px}.border-r-8{border-right-width:8px}.border-b-8{border-bottom-width:8px}.border-l-8{border-left-width:8px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-text{cursor:text}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.hidden{display:none}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-no-wrap{flex-wrap:nowrap}.place-items-auto{place-items:auto}.place-items-start{place-items:start}.place-items-end{place-items:end}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-content-between{place-content:space-between}.place-content-around{place-content:space-around}.place-content-evenly{place-content:space-evenly}.place-content-stretch{place-content:stretch}.place-self-auto{place-self:auto}.place-self-start{place-self:start}.place-self-end{place-self:end}.place-self-center{place-self:center}.place-self-stretch{place-self:stretch}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-items-auto{justify-items:auto}.justify-items-start{justify-items:start}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.justify-items-stretch{justify-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.justify-self-auto{justify-self:auto}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.justify-self-stretch{justify-self:stretch}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-grow-0{flex-grow:0}.flex-grow{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.order-first{order:-9999}.order-last{order:9999}.order-none{order:0}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clearfix:after{content:"";display:table;clear:both}.clear-left{clear:left}.clear-right{clear:right}.clear-both{clear:both}.clear-none{clear:none}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.font-hairline{font-weight:100}.font-thin{font-weight:200}.font-light{font-weight:300}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-black{font-weight:900}.hover\:font-hairline:hover{font-weight:100}.hover\:font-thin:hover{font-weight:200}.hover\:font-light:hover{font-weight:300}.hover\:font-normal:hover{font-weight:400}.hover\:font-medium:hover{font-weight:500}.hover\:font-semibold:hover{font-weight:600}.hover\:font-bold:hover{font-weight:700}.hover\:font-extrabold:hover{font-weight:800}.hover\:font-black:hover{font-weight:900}.focus\:font-hairline:focus{font-weight:100}.focus\:font-thin:focus{font-weight:200}.focus\:font-light:focus{font-weight:300}.focus\:font-normal:focus{font-weight:400}.focus\:font-medium:focus{font-weight:500}.focus\:font-semibold:focus{font-weight:600}.focus\:font-bold:focus{font-weight:700}.focus\:font-extrabold:focus{font-weight:800}.focus\:font-black:focus{font-weight:900}.h-0{height:0}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-20{height:5rem}.h-24{height:6rem}.h-32{height:8rem}.h-40{height:10rem}.h-48{height:12rem}.h-56{height:14rem}.h-64{height:16rem}.h-auto{height:auto}.h-px{height:1px}.h-full{height:100%}.h-screen{height:100vh}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.text-5xl{font-size:3rem}.text-6xl{font-size:4rem}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-10{line-height:2.5rem}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-loose{line-height:2}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-8{margin:2rem}.m-10{margin:2.5rem}.m-12{margin:3rem}.m-16{margin:4rem}.m-20{margin:5rem}.m-24{margin:6rem}.m-32{margin:8rem}.m-40{margin:10rem}.m-48{margin:12rem}.m-56{margin:14rem}.m-64{margin:16rem}.m-auto{margin:auto}.m-px{margin:1px}.-m-1{margin:-.25rem}.-m-2{margin:-.5rem}.-m-3{margin:-.75rem}.-m-4{margin:-1rem}.-m-5{margin:-1.25rem}.-m-6{margin:-1.5rem}.-m-8{margin:-2rem}.-m-10{margin:-2.5rem}.-m-12{margin:-3rem}.-m-16{margin:-4rem}.-m-20{margin:-5rem}.-m-24{margin:-6rem}.-m-32{margin:-8rem}.-m-40{margin:-10rem}.-m-48{margin:-12rem}.-m-56{margin:-14rem}.-m-64{margin:-16rem}.-m-px{margin:-1px}.my-0{margin-top:0;margin-bottom:0}.mx-0{margin-left:0;margin-right:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-12{margin-left:3rem;margin-right:3rem}.my-16{margin-top:4rem;margin-bottom:4rem}.mx-16{margin-left:4rem;margin-right:4rem}.my-20{margin-top:5rem;margin-bottom:5rem}.mx-20{margin-left:5rem;margin-right:5rem}.my-24{margin-top:6rem;margin-bottom:6rem}.mx-24{margin-left:6rem;margin-right:6rem}.my-32{margin-top:8rem;margin-bottom:8rem}.mx-32{margin-left:8rem;margin-right:8rem}.my-40{margin-top:10rem;margin-bottom:10rem}.mx-40{margin-left:10rem;margin-right:10rem}.my-48{margin-top:12rem;margin-bottom:12rem}.mx-48{margin-left:12rem;margin-right:12rem}.my-56{margin-top:14rem;margin-bottom:14rem}.mx-56{margin-left:14rem;margin-right:14rem}.my-64{margin-top:16rem;margin-bottom:16rem}.mx-64{margin-left:16rem;margin-right:16rem}.my-auto{margin-top:auto;margin-bottom:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-px{margin-top:1px;margin-bottom:1px}.mx-px{margin-left:1px;margin-right:1px}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-my-4{margin-top:-1rem;margin-bottom:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-8{margin-top:-2rem;margin-bottom:-2rem}.-mx-8{margin-left:-2rem;margin-right:-2rem}.-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-my-12{margin-top:-3rem;margin-bottom:-3rem}.-mx-12{margin-left:-3rem;margin-right:-3rem}.-my-16{margin-top:-4rem;margin-bottom:-4rem}.-mx-16{margin-left:-4rem;margin-right:-4rem}.-my-20{margin-top:-5rem;margin-bottom:-5rem}.-mx-20{margin-left:-5rem;margin-right:-5rem}.-my-24{margin-top:-6rem;margin-bottom:-6rem}.-mx-24{margin-left:-6rem;margin-right:-6rem}.-my-32{margin-top:-8rem;margin-bottom:-8rem}.-mx-32{margin-left:-8rem;margin-right:-8rem}.-my-40{margin-top:-10rem;margin-bottom:-10rem}.-mx-40{margin-left:-10rem;margin-right:-10rem}.-my-48{margin-top:-12rem;margin-bottom:-12rem}.-mx-48{margin-left:-12rem;margin-right:-12rem}.-my-56{margin-top:-14rem;margin-bottom:-14rem}.-mx-56{margin-left:-14rem;margin-right:-14rem}.-my-64{margin-top:-16rem;margin-bottom:-16rem}.-mx-64{margin-left:-16rem;margin-right:-16rem}.-my-px{margin-top:-1px;margin-bottom:-1px}.-mx-px{margin-left:-1px;margin-right:-1px}.mt-0{margin-top:0}.mr-0{margin-right:0}.mb-0{margin-bottom:0}.ml-0{margin-left:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mr-5{margin-right:1.25rem}.mb-5{margin-bottom:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mb-8{margin-bottom:2rem}.ml-8{margin-left:2rem}.mt-10{margin-top:2.5rem}.mr-10{margin-right:2.5rem}.mb-10{margin-bottom:2.5rem}.ml-10{margin-left:2.5rem}.mt-12{margin-top:3rem}.mr-12{margin-right:3rem}.mb-12{margin-bottom:3rem}.ml-12{margin-left:3rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.mb-16{margin-bottom:4rem}.ml-16{margin-left:4rem}.mt-20{margin-top:5rem}.mr-20{margin-right:5rem}.mb-20{margin-bottom:5rem}.ml-20{margin-left:5rem}.mt-24{margin-top:6rem}.mr-24{margin-right:6rem}.mb-24{margin-bottom:6rem}.ml-24{margin-left:6rem}.mt-32{margin-top:8rem}.mr-32{margin-right:8rem}.mb-32{margin-bottom:8rem}.ml-32{margin-left:8rem}.mt-40{margin-top:10rem}.mr-40{margin-right:10rem}.mb-40{margin-bottom:10rem}.ml-40{margin-left:10rem}.mt-48{margin-top:12rem}.mr-48{margin-right:12rem}.mb-48{margin-bottom:12rem}.ml-48{margin-left:12rem}.mt-56{margin-top:14rem}.mr-56{margin-right:14rem}.mb-56{margin-bottom:14rem}.ml-56{margin-left:14rem}.mt-64{margin-top:16rem}.mr-64{margin-right:16rem}.mb-64{margin-bottom:16rem}.ml-64{margin-left:16rem}.mt-auto{margin-top:auto}.mr-auto{margin-right:auto}.mb-auto{margin-bottom:auto}.ml-auto{margin-left:auto}.mt-px{margin-top:1px}.mr-px{margin-right:1px}.mb-px{margin-bottom:1px}.ml-px{margin-left:1px}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-ml-1{margin-left:-.25rem}.-mt-2{margin-top:-.5rem}.-mr-2{margin-right:-.5rem}.-mb-2{margin-bottom:-.5rem}.-ml-2{margin-left:-.5rem}.-mt-3{margin-top:-.75rem}.-mr-3{margin-right:-.75rem}.-mb-3{margin-bottom:-.75rem}.-ml-3{margin-left:-.75rem}.-mt-4{margin-top:-1rem}.-mr-4{margin-right:-1rem}.-mb-4{margin-bottom:-1rem}.-ml-4{margin-left:-1rem}.-mt-5{margin-top:-1.25rem}.-mr-5{margin-right:-1.25rem}.-mb-5{margin-bottom:-1.25rem}.-ml-5{margin-left:-1.25rem}.-mt-6{margin-top:-1.5rem}.-mr-6{margin-right:-1.5rem}.-mb-6{margin-bottom:-1.5rem}.-ml-6{margin-left:-1.5rem}.-mt-8{margin-top:-2rem}.-mr-8{margin-right:-2rem}.-mb-8{margin-bottom:-2rem}.-ml-8{margin-left:-2rem}.-mt-10{margin-top:-2.5rem}.-mr-10{margin-right:-2.5rem}.-mb-10{margin-bottom:-2.5rem}.-ml-10{margin-left:-2.5rem}.-mt-12{margin-top:-3rem}.-mr-12{margin-right:-3rem}.-mb-12{margin-bottom:-3rem}.-ml-12{margin-left:-3rem}.-mt-16{margin-top:-4rem}.-mr-16{margin-right:-4rem}.-mb-16{margin-bottom:-4rem}.-ml-16{margin-left:-4rem}.-mt-20{margin-top:-5rem}.-mr-20{margin-right:-5rem}.-mb-20{margin-bottom:-5rem}.-ml-20{margin-left:-5rem}.-mt-24{margin-top:-6rem}.-mr-24{margin-right:-6rem}.-mb-24{margin-bottom:-6rem}.-ml-24{margin-left:-6rem}.-mt-32{margin-top:-8rem}.-mr-32{margin-right:-8rem}.-mb-32{margin-bottom:-8rem}.-ml-32{margin-left:-8rem}.-mt-40{margin-top:-10rem}.-mr-40{margin-right:-10rem}.-mb-40{margin-bottom:-10rem}.-ml-40{margin-left:-10rem}.-mt-48{margin-top:-12rem}.-mr-48{margin-right:-12rem}.-mb-48{margin-bottom:-12rem}.-ml-48{margin-left:-12rem}.-mt-56{margin-top:-14rem}.-mr-56{margin-right:-14rem}.-mb-56{margin-bottom:-14rem}.-ml-56{margin-left:-14rem}.-mt-64{margin-top:-16rem}.-mr-64{margin-right:-16rem}.-mb-64{margin-bottom:-16rem}.-ml-64{margin-left:-16rem}.-mt-px{margin-top:-1px}.-mr-px{margin-right:-1px}.-mb-px{margin-bottom:-1px}.-ml-px{margin-left:-1px}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.max-w-none{max-width:none}.max-w-xs{max-width:20rem}.max-w-sm{max-width:24rem}.max-w-md{max-width:28rem}.max-w-lg{max-width:32rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-full{max-width:100%}.max-w-screen-sm{max-width:640px}.max-w-screen-md{max-width:768px}.max-w-screen-lg{max-width:1024px}.max-w-screen-xl{max-width:1280px}.min-h-0{min-height:0}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-none{object-fit:none}.object-scale-down{object-fit:scale-down}.object-bottom{object-position:bottom}.object-center{object-position:center}.object-left{object-position:left}.object-left-bottom{object-position:left bottom}.object-left-top{object-position:left top}.object-right{object-position:right}.object-right-bottom{object-position:right bottom}.object-right-top{object-position:right top}.object-top{object-position:top}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-100{opacity:1}.hover\:opacity-0:hover{opacity:0}.hover\:opacity-25:hover{opacity:.25}.hover\:opacity-50:hover{opacity:.5}.hover\:opacity-75:hover{opacity:.75}.hover\:opacity-100:hover{opacity:1}.focus\:opacity-0:focus{opacity:0}.focus\:opacity-25:focus{opacity:.25}.focus\:opacity-50:focus{opacity:.5}.focus\:opacity-75:focus{opacity:.75}.focus\:opacity-100:focus{opacity:1}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline-white{outline:2px dotted #fff;outline-offset:2px}.outline-black{outline:2px dotted #000;outline-offset:2px}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.scrolling-touch{-webkit-overflow-scrolling:touch}.scrolling-auto{-webkit-overflow-scrolling:auto}.overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-20{padding:5rem}.p-24{padding:6rem}.p-32{padding:8rem}.p-40{padding:10rem}.p-48{padding:12rem}.p-56{padding:14rem}.p-64{padding:16rem}.p-px{padding:1px}.py-0{padding-top:0;padding-bottom:0}.px-0{padding-left:0;padding-right:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-8{padding-left:2rem;padding-right:2rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.px-16{padding-left:4rem;padding-right:4rem}.py-20{padding-top:5rem;padding-bottom:5rem}.px-20{padding-left:5rem;padding-right:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.px-24{padding-left:6rem;padding-right:6rem}.py-32{padding-top:8rem;padding-bottom:8rem}.px-32{padding-left:8rem;padding-right:8rem}.py-40{padding-top:10rem;padding-bottom:10rem}.px-40{padding-left:10rem;padding-right:10rem}.py-48{padding-top:12rem;padding-bottom:12rem}.px-48{padding-left:12rem;padding-right:12rem}.py-56{padding-top:14rem;padding-bottom:14rem}.px-56{padding-left:14rem;padding-right:14rem}.py-64{padding-top:16rem;padding-bottom:16rem}.px-64{padding-left:16rem;padding-right:16rem}.py-px{padding-top:1px;padding-bottom:1px}.px-px{padding-left:1px;padding-right:1px}.pt-0{padding-top:0}.pr-0{padding-right:0}.pb-0{padding-bottom:0}.pl-0{padding-left:0}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pr-5{padding-right:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-8{padding-top:2rem}.pr-8{padding-right:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pr-10{padding-right:2.5rem}.pb-10{padding-bottom:2.5rem}.pl-10{padding-left:2.5rem}.pt-12{padding-top:3rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-12{padding-left:3rem}.pt-16{padding-top:4rem}.pr-16{padding-right:4rem}.pb-16{padding-bottom:4rem}.pl-16{padding-left:4rem}.pt-20{padding-top:5rem}.pr-20{padding-right:5rem}.pb-20{padding-bottom:5rem}.pl-20{padding-left:5rem}.pt-24{padding-top:6rem}.pr-24{padding-right:6rem}.pb-24{padding-bottom:6rem}.pl-24{padding-left:6rem}.pt-32{padding-top:8rem}.pr-32{padding-right:8rem}.pb-32{padding-bottom:8rem}.pl-32{padding-left:8rem}.pt-40{padding-top:10rem}.pr-40{padding-right:10rem}.pb-40{padding-bottom:10rem}.pl-40{padding-left:10rem}.pt-48{padding-top:12rem}.pr-48{padding-right:12rem}.pb-48{padding-bottom:12rem}.pl-48{padding-left:12rem}.pt-56{padding-top:14rem}.pr-56{padding-right:14rem}.pb-56{padding-bottom:14rem}.pl-56{padding-left:14rem}.pt-64{padding-top:16rem}.pr-64{padding-right:16rem}.pb-64{padding-bottom:16rem}.pl-64{padding-left:16rem}.pt-px{padding-top:1px}.pr-px{padding-right:1px}.pb-px{padding-bottom:1px}.pl-px{padding-left:1px}.placeholder-transparent:-ms-input-placeholder{color:transparent}.placeholder-transparent::-ms-input-placeholder{color:transparent}.placeholder-transparent::placeholder{color:transparent}.placeholder-current:-ms-input-placeholder{color:currentColor}.placeholder-current::-ms-input-placeholder{color:currentColor}.placeholder-current::placeholder{color:currentColor}.placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.focus\:placeholder-transparent:focus::placeholder{color:transparent}.focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.focus\:placeholder-current:focus::placeholder{color:currentColor}.focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.placeholder-opacity-0::placeholder{--placeholder-opacity:0}.placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.placeholder-opacity-100::placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-auto{top:auto;right:auto;bottom:auto;left:auto}.inset-y-0{top:0;bottom:0}.inset-x-0{right:0;left:0}.inset-y-auto{top:auto;bottom:auto}.inset-x-auto{right:auto;left:auto}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-auto{top:auto}.right-auto{right:auto}.bottom-auto{bottom:auto}.left-auto{left:auto}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.shadow-none{box-shadow:none}.hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.hover\:shadow-none:hover{box-shadow:none}.focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.focus\:shadow-none:focus{box-shadow:none}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.stroke-0{stroke-width:0}.stroke-1{stroke-width:1}.stroke-2{stroke-width:2}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-transparent{color:transparent}.text-current{color:currentColor}.text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.hover\:text-transparent:hover{color:transparent}.hover\:text-current:hover{color:currentColor}.hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.focus\:text-transparent:focus{color:transparent}.focus\:text-current:focus{color:currentColor}.focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.text-opacity-0{--text-opacity:0}.text-opacity-25{--text-opacity:0.25}.text-opacity-50{--text-opacity:0.5}.text-opacity-75{--text-opacity:0.75}.text-opacity-100{--text-opacity:1}.hover\:text-opacity-0:hover{--text-opacity:0}.hover\:text-opacity-25:hover{--text-opacity:0.25}.hover\:text-opacity-50:hover{--text-opacity:0.5}.hover\:text-opacity-75:hover{--text-opacity:0.75}.hover\:text-opacity-100:hover{--text-opacity:1}.focus\:text-opacity-0:focus{--text-opacity:0}.focus\:text-opacity-25:focus{--text-opacity:0.25}.focus\:text-opacity-50:focus{--text-opacity:0.5}.focus\:text-opacity-75:focus{--text-opacity:0.75}.focus\:text-opacity-100:focus{--text-opacity:1}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.hover\:line-through:hover{text-decoration:line-through}.hover\:no-underline:hover{text-decoration:none}.focus\:underline:focus{text-decoration:underline}.focus\:line-through:focus{text-decoration:line-through}.focus\:no-underline:focus{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.normal-nums{font-variant-numeric:normal}.ordinal{--font-variant-numeric-ordinal:ordinal}.slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.lining-nums{--font-variant-numeric-figure:lining-nums}.oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.proportional-nums{--font-variant-numeric-spacing:proportional-nums}.tabular-nums{--font-variant-numeric-spacing:tabular-nums}.diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.tracking-tighter{letter-spacing:-.05em}.tracking-tight{letter-spacing:-.025em}.tracking-normal{letter-spacing:0}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.visible{visibility:visible}.invisible{visibility:hidden}.whitespace-normal{white-space:normal}.whitespace-no-wrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.break-words{word-wrap:break-word;overflow-wrap:break-word}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-0{width:0}.w-1{width:.25rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-32{width:8rem}.w-40{width:10rem}.w-48{width:12rem}.w-56{width:14rem}.w-64{width:16rem}.w-auto{width:auto}.w-px{width:1px}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-1\/6{width:16.666667%}.w-2\/6{width:33.333333%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-5\/12{width:41.666667%}.w-6\/12{width:50%}.w-7\/12{width:58.333333%}.w-8\/12{width:66.666667%}.w-9\/12{width:75%}.w-10\/12{width:83.333333%}.w-11\/12{width:91.666667%}.w-full{width:100%}.w-screen{width:100vw}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-auto{z-index:auto}.gap-0{grid-gap:0;gap:0}.gap-1{grid-gap:.25rem;gap:.25rem}.gap-2{grid-gap:.5rem;gap:.5rem}.gap-3{grid-gap:.75rem;gap:.75rem}.gap-4{grid-gap:1rem;gap:1rem}.gap-5{grid-gap:1.25rem;gap:1.25rem}.gap-6{grid-gap:1.5rem;gap:1.5rem}.gap-8{grid-gap:2rem;gap:2rem}.gap-10{grid-gap:2.5rem;gap:2.5rem}.gap-12{grid-gap:3rem;gap:3rem}.gap-16{grid-gap:4rem;gap:4rem}.gap-20{grid-gap:5rem;gap:5rem}.gap-24{grid-gap:6rem;gap:6rem}.gap-32{grid-gap:8rem;gap:8rem}.gap-40{grid-gap:10rem;gap:10rem}.gap-48{grid-gap:12rem;gap:12rem}.gap-56{grid-gap:14rem;gap:14rem}.gap-64{grid-gap:16rem;gap:16rem}.gap-px{grid-gap:1px;gap:1px}.col-gap-0{grid-column-gap:0;column-gap:0}.col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.col-gap-4{grid-column-gap:1rem;column-gap:1rem}.col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.col-gap-8{grid-column-gap:2rem;column-gap:2rem}.col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.col-gap-12{grid-column-gap:3rem;column-gap:3rem}.col-gap-16{grid-column-gap:4rem;column-gap:4rem}.col-gap-20{grid-column-gap:5rem;column-gap:5rem}.col-gap-24{grid-column-gap:6rem;column-gap:6rem}.col-gap-32{grid-column-gap:8rem;column-gap:8rem}.col-gap-40{grid-column-gap:10rem;column-gap:10rem}.col-gap-48{grid-column-gap:12rem;column-gap:12rem}.col-gap-56{grid-column-gap:14rem;column-gap:14rem}.col-gap-64{grid-column-gap:16rem;column-gap:16rem}.col-gap-px{grid-column-gap:1px;column-gap:1px}.gap-x-0{grid-column-gap:0;column-gap:0}.gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.gap-x-4{grid-column-gap:1rem;column-gap:1rem}.gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{grid-column-gap:2rem;column-gap:2rem}.gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.gap-x-12{grid-column-gap:3rem;column-gap:3rem}.gap-x-16{grid-column-gap:4rem;column-gap:4rem}.gap-x-20{grid-column-gap:5rem;column-gap:5rem}.gap-x-24{grid-column-gap:6rem;column-gap:6rem}.gap-x-32{grid-column-gap:8rem;column-gap:8rem}.gap-x-40{grid-column-gap:10rem;column-gap:10rem}.gap-x-48{grid-column-gap:12rem;column-gap:12rem}.gap-x-56{grid-column-gap:14rem;column-gap:14rem}.gap-x-64{grid-column-gap:16rem;column-gap:16rem}.gap-x-px{grid-column-gap:1px;column-gap:1px}.row-gap-0{grid-row-gap:0;row-gap:0}.row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.row-gap-4{grid-row-gap:1rem;row-gap:1rem}.row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.row-gap-8{grid-row-gap:2rem;row-gap:2rem}.row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.row-gap-12{grid-row-gap:3rem;row-gap:3rem}.row-gap-16{grid-row-gap:4rem;row-gap:4rem}.row-gap-20{grid-row-gap:5rem;row-gap:5rem}.row-gap-24{grid-row-gap:6rem;row-gap:6rem}.row-gap-32{grid-row-gap:8rem;row-gap:8rem}.row-gap-40{grid-row-gap:10rem;row-gap:10rem}.row-gap-48{grid-row-gap:12rem;row-gap:12rem}.row-gap-56{grid-row-gap:14rem;row-gap:14rem}.row-gap-64{grid-row-gap:16rem;row-gap:16rem}.row-gap-px{grid-row-gap:1px;row-gap:1px}.gap-y-0{grid-row-gap:0;row-gap:0}.gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.gap-y-4{grid-row-gap:1rem;row-gap:1rem}.gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.gap-y-8{grid-row-gap:2rem;row-gap:2rem}.gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.gap-y-12{grid-row-gap:3rem;row-gap:3rem}.gap-y-16{grid-row-gap:4rem;row-gap:4rem}.gap-y-20{grid-row-gap:5rem;row-gap:5rem}.gap-y-24{grid-row-gap:6rem;row-gap:6rem}.gap-y-32{grid-row-gap:8rem;row-gap:8rem}.gap-y-40{grid-row-gap:10rem;row-gap:10rem}.gap-y-48{grid-row-gap:12rem;row-gap:12rem}.gap-y-56{grid-row-gap:14rem;row-gap:14rem}.gap-y-64{grid-row-gap:16rem;row-gap:16rem}.gap-y-px{grid-row-gap:1px;row-gap:1px}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-none{grid-template-columns:none}.auto-cols-auto{grid-auto-columns:auto}.auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.col-span-9{grid-column:span 9/span 9}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.col-start-5{grid-column-start:5}.col-start-6{grid-column-start:6}.col-start-7{grid-column-start:7}.col-start-8{grid-column-start:8}.col-start-9{grid-column-start:9}.col-start-10{grid-column-start:10}.col-start-11{grid-column-start:11}.col-start-12{grid-column-start:12}.col-start-13{grid-column-start:13}.col-start-auto{grid-column-start:auto}.col-end-1{grid-column-end:1}.col-end-2{grid-column-end:2}.col-end-3{grid-column-end:3}.col-end-4{grid-column-end:4}.col-end-5{grid-column-end:5}.col-end-6{grid-column-end:6}.col-end-7{grid-column-end:7}.col-end-8{grid-column-end:8}.col-end-9{grid-column-end:9}.col-end-10{grid-column-end:10}.col-end-11{grid-column-end:11}.col-end-12{grid-column-end:12}.col-end-13{grid-column-end:13}.col-end-auto{grid-column-end:auto}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.grid-rows-none{grid-template-rows:none}.auto-rows-auto{grid-auto-rows:auto}.auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.row-auto{grid-row:auto}.row-span-1{grid-row:span 1/span 1}.row-span-2{grid-row:span 2/span 2}.row-span-3{grid-row:span 3/span 3}.row-span-4{grid-row:span 4/span 4}.row-span-5{grid-row:span 5/span 5}.row-span-6{grid-row:span 6/span 6}.row-span-full{grid-row:1/-1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.row-start-4{grid-row-start:4}.row-start-5{grid-row-start:5}.row-start-6{grid-row-start:6}.row-start-7{grid-row-start:7}.row-start-auto{grid-row-start:auto}.row-end-1{grid-row-end:1}.row-end-2{grid-row-end:2}.row-end-3{grid-row-end:3}.row-end-4{grid-row-end:4}.row-end-5{grid-row-end:5}.row-end-6{grid-row-end:6}.row-end-7{grid-row-end:7}.row-end-auto{grid-row-end:auto}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.transform-none{transform:none}.origin-center{transform-origin:center}.origin-top{transform-origin:top}.origin-top-right{transform-origin:top right}.origin-right{transform-origin:right}.origin-bottom-right{transform-origin:bottom right}.origin-bottom{transform-origin:bottom}.origin-bottom-left{transform-origin:bottom left}.origin-left{transform-origin:left}.origin-top-left{transform-origin:top left}.scale-0{--transform-scale-x:0;--transform-scale-y:0}.scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.scale-x-0{--transform-scale-x:0}.scale-x-50{--transform-scale-x:.5}.scale-x-75{--transform-scale-x:.75}.scale-x-90{--transform-scale-x:.9}.scale-x-95{--transform-scale-x:.95}.scale-x-100{--transform-scale-x:1}.scale-x-105{--transform-scale-x:1.05}.scale-x-110{--transform-scale-x:1.1}.scale-x-125{--transform-scale-x:1.25}.scale-x-150{--transform-scale-x:1.5}.scale-y-0{--transform-scale-y:0}.scale-y-50{--transform-scale-y:.5}.scale-y-75{--transform-scale-y:.75}.scale-y-90{--transform-scale-y:.9}.scale-y-95{--transform-scale-y:.95}.scale-y-100{--transform-scale-y:1}.scale-y-105{--transform-scale-y:1.05}.scale-y-110{--transform-scale-y:1.1}.scale-y-125{--transform-scale-y:1.25}.scale-y-150{--transform-scale-y:1.5}.hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.hover\:scale-x-0:hover{--transform-scale-x:0}.hover\:scale-x-50:hover{--transform-scale-x:.5}.hover\:scale-x-75:hover{--transform-scale-x:.75}.hover\:scale-x-90:hover{--transform-scale-x:.9}.hover\:scale-x-95:hover{--transform-scale-x:.95}.hover\:scale-x-100:hover{--transform-scale-x:1}.hover\:scale-x-105:hover{--transform-scale-x:1.05}.hover\:scale-x-110:hover{--transform-scale-x:1.1}.hover\:scale-x-125:hover{--transform-scale-x:1.25}.hover\:scale-x-150:hover{--transform-scale-x:1.5}.hover\:scale-y-0:hover{--transform-scale-y:0}.hover\:scale-y-50:hover{--transform-scale-y:.5}.hover\:scale-y-75:hover{--transform-scale-y:.75}.hover\:scale-y-90:hover{--transform-scale-y:.9}.hover\:scale-y-95:hover{--transform-scale-y:.95}.hover\:scale-y-100:hover{--transform-scale-y:1}.hover\:scale-y-105:hover{--transform-scale-y:1.05}.hover\:scale-y-110:hover{--transform-scale-y:1.1}.hover\:scale-y-125:hover{--transform-scale-y:1.25}.hover\:scale-y-150:hover{--transform-scale-y:1.5}.focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.focus\:scale-x-0:focus{--transform-scale-x:0}.focus\:scale-x-50:focus{--transform-scale-x:.5}.focus\:scale-x-75:focus{--transform-scale-x:.75}.focus\:scale-x-90:focus{--transform-scale-x:.9}.focus\:scale-x-95:focus{--transform-scale-x:.95}.focus\:scale-x-100:focus{--transform-scale-x:1}.focus\:scale-x-105:focus{--transform-scale-x:1.05}.focus\:scale-x-110:focus{--transform-scale-x:1.1}.focus\:scale-x-125:focus{--transform-scale-x:1.25}.focus\:scale-x-150:focus{--transform-scale-x:1.5}.focus\:scale-y-0:focus{--transform-scale-y:0}.focus\:scale-y-50:focus{--transform-scale-y:.5}.focus\:scale-y-75:focus{--transform-scale-y:.75}.focus\:scale-y-90:focus{--transform-scale-y:.9}.focus\:scale-y-95:focus{--transform-scale-y:.95}.focus\:scale-y-100:focus{--transform-scale-y:1}.focus\:scale-y-105:focus{--transform-scale-y:1.05}.focus\:scale-y-110:focus{--transform-scale-y:1.1}.focus\:scale-y-125:focus{--transform-scale-y:1.25}.focus\:scale-y-150:focus{--transform-scale-y:1.5}.rotate-0{--transform-rotate:0}.rotate-1{--transform-rotate:1deg}.rotate-2{--transform-rotate:2deg}.rotate-3{--transform-rotate:3deg}.rotate-6{--transform-rotate:6deg}.rotate-12{--transform-rotate:12deg}.rotate-45{--transform-rotate:45deg}.rotate-90{--transform-rotate:90deg}.rotate-180{--transform-rotate:180deg}.-rotate-180{--transform-rotate:-180deg}.-rotate-90{--transform-rotate:-90deg}.-rotate-45{--transform-rotate:-45deg}.-rotate-12{--transform-rotate:-12deg}.-rotate-6{--transform-rotate:-6deg}.-rotate-3{--transform-rotate:-3deg}.-rotate-2{--transform-rotate:-2deg}.-rotate-1{--transform-rotate:-1deg}.hover\:rotate-0:hover{--transform-rotate:0}.hover\:rotate-1:hover{--transform-rotate:1deg}.hover\:rotate-2:hover{--transform-rotate:2deg}.hover\:rotate-3:hover{--transform-rotate:3deg}.hover\:rotate-6:hover{--transform-rotate:6deg}.hover\:rotate-12:hover{--transform-rotate:12deg}.hover\:rotate-45:hover{--transform-rotate:45deg}.hover\:rotate-90:hover{--transform-rotate:90deg}.hover\:rotate-180:hover{--transform-rotate:180deg}.hover\:-rotate-180:hover{--transform-rotate:-180deg}.hover\:-rotate-90:hover{--transform-rotate:-90deg}.hover\:-rotate-45:hover{--transform-rotate:-45deg}.hover\:-rotate-12:hover{--transform-rotate:-12deg}.hover\:-rotate-6:hover{--transform-rotate:-6deg}.hover\:-rotate-3:hover{--transform-rotate:-3deg}.hover\:-rotate-2:hover{--transform-rotate:-2deg}.hover\:-rotate-1:hover{--transform-rotate:-1deg}.focus\:rotate-0:focus{--transform-rotate:0}.focus\:rotate-1:focus{--transform-rotate:1deg}.focus\:rotate-2:focus{--transform-rotate:2deg}.focus\:rotate-3:focus{--transform-rotate:3deg}.focus\:rotate-6:focus{--transform-rotate:6deg}.focus\:rotate-12:focus{--transform-rotate:12deg}.focus\:rotate-45:focus{--transform-rotate:45deg}.focus\:rotate-90:focus{--transform-rotate:90deg}.focus\:rotate-180:focus{--transform-rotate:180deg}.focus\:-rotate-180:focus{--transform-rotate:-180deg}.focus\:-rotate-90:focus{--transform-rotate:-90deg}.focus\:-rotate-45:focus{--transform-rotate:-45deg}.focus\:-rotate-12:focus{--transform-rotate:-12deg}.focus\:-rotate-6:focus{--transform-rotate:-6deg}.focus\:-rotate-3:focus{--transform-rotate:-3deg}.focus\:-rotate-2:focus{--transform-rotate:-2deg}.focus\:-rotate-1:focus{--transform-rotate:-1deg}.translate-x-0{--transform-translate-x:0}.translate-x-1{--transform-translate-x:0.25rem}.translate-x-2{--transform-translate-x:0.5rem}.translate-x-3{--transform-translate-x:0.75rem}.translate-x-4{--transform-translate-x:1rem}.translate-x-5{--transform-translate-x:1.25rem}.translate-x-6{--transform-translate-x:1.5rem}.translate-x-8{--transform-translate-x:2rem}.translate-x-10{--transform-translate-x:2.5rem}.translate-x-12{--transform-translate-x:3rem}.translate-x-16{--transform-translate-x:4rem}.translate-x-20{--transform-translate-x:5rem}.translate-x-24{--transform-translate-x:6rem}.translate-x-32{--transform-translate-x:8rem}.translate-x-40{--transform-translate-x:10rem}.translate-x-48{--transform-translate-x:12rem}.translate-x-56{--transform-translate-x:14rem}.translate-x-64{--transform-translate-x:16rem}.translate-x-px{--transform-translate-x:1px}.-translate-x-1{--transform-translate-x:-0.25rem}.-translate-x-2{--transform-translate-x:-0.5rem}.-translate-x-3{--transform-translate-x:-0.75rem}.-translate-x-4{--transform-translate-x:-1rem}.-translate-x-5{--transform-translate-x:-1.25rem}.-translate-x-6{--transform-translate-x:-1.5rem}.-translate-x-8{--transform-translate-x:-2rem}.-translate-x-10{--transform-translate-x:-2.5rem}.-translate-x-12{--transform-translate-x:-3rem}.-translate-x-16{--transform-translate-x:-4rem}.-translate-x-20{--transform-translate-x:-5rem}.-translate-x-24{--transform-translate-x:-6rem}.-translate-x-32{--transform-translate-x:-8rem}.-translate-x-40{--transform-translate-x:-10rem}.-translate-x-48{--transform-translate-x:-12rem}.-translate-x-56{--transform-translate-x:-14rem}.-translate-x-64{--transform-translate-x:-16rem}.-translate-x-px{--transform-translate-x:-1px}.-translate-x-full{--transform-translate-x:-100%}.-translate-x-1\/2{--transform-translate-x:-50%}.translate-x-1\/2{--transform-translate-x:50%}.translate-x-full{--transform-translate-x:100%}.translate-y-0{--transform-translate-y:0}.translate-y-1{--transform-translate-y:0.25rem}.translate-y-2{--transform-translate-y:0.5rem}.translate-y-3{--transform-translate-y:0.75rem}.translate-y-4{--transform-translate-y:1rem}.translate-y-5{--transform-translate-y:1.25rem}.translate-y-6{--transform-translate-y:1.5rem}.translate-y-8{--transform-translate-y:2rem}.translate-y-10{--transform-translate-y:2.5rem}.translate-y-12{--transform-translate-y:3rem}.translate-y-16{--transform-translate-y:4rem}.translate-y-20{--transform-translate-y:5rem}.translate-y-24{--transform-translate-y:6rem}.translate-y-32{--transform-translate-y:8rem}.translate-y-40{--transform-translate-y:10rem}.translate-y-48{--transform-translate-y:12rem}.translate-y-56{--transform-translate-y:14rem}.translate-y-64{--transform-translate-y:16rem}.translate-y-px{--transform-translate-y:1px}.-translate-y-1{--transform-translate-y:-0.25rem}.-translate-y-2{--transform-translate-y:-0.5rem}.-translate-y-3{--transform-translate-y:-0.75rem}.-translate-y-4{--transform-translate-y:-1rem}.-translate-y-5{--transform-translate-y:-1.25rem}.-translate-y-6{--transform-translate-y:-1.5rem}.-translate-y-8{--transform-translate-y:-2rem}.-translate-y-10{--transform-translate-y:-2.5rem}.-translate-y-12{--transform-translate-y:-3rem}.-translate-y-16{--transform-translate-y:-4rem}.-translate-y-20{--transform-translate-y:-5rem}.-translate-y-24{--transform-translate-y:-6rem}.-translate-y-32{--transform-translate-y:-8rem}.-translate-y-40{--transform-translate-y:-10rem}.-translate-y-48{--transform-translate-y:-12rem}.-translate-y-56{--transform-translate-y:-14rem}.-translate-y-64{--transform-translate-y:-16rem}.-translate-y-px{--transform-translate-y:-1px}.-translate-y-full{--transform-translate-y:-100%}.-translate-y-1\/2{--transform-translate-y:-50%}.translate-y-1\/2{--transform-translate-y:50%}.translate-y-full{--transform-translate-y:100%}.hover\:translate-x-0:hover{--transform-translate-x:0}.hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.hover\:translate-x-4:hover{--transform-translate-x:1rem}.hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.hover\:translate-x-8:hover{--transform-translate-x:2rem}.hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.hover\:translate-x-12:hover{--transform-translate-x:3rem}.hover\:translate-x-16:hover{--transform-translate-x:4rem}.hover\:translate-x-20:hover{--transform-translate-x:5rem}.hover\:translate-x-24:hover{--transform-translate-x:6rem}.hover\:translate-x-32:hover{--transform-translate-x:8rem}.hover\:translate-x-40:hover{--transform-translate-x:10rem}.hover\:translate-x-48:hover{--transform-translate-x:12rem}.hover\:translate-x-56:hover{--transform-translate-x:14rem}.hover\:translate-x-64:hover{--transform-translate-x:16rem}.hover\:translate-x-px:hover{--transform-translate-x:1px}.hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.hover\:-translate-x-px:hover{--transform-translate-x:-1px}.hover\:-translate-x-full:hover{--transform-translate-x:-100%}.hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.hover\:translate-x-full:hover{--transform-translate-x:100%}.hover\:translate-y-0:hover{--transform-translate-y:0}.hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.hover\:translate-y-4:hover{--transform-translate-y:1rem}.hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.hover\:translate-y-8:hover{--transform-translate-y:2rem}.hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.hover\:translate-y-12:hover{--transform-translate-y:3rem}.hover\:translate-y-16:hover{--transform-translate-y:4rem}.hover\:translate-y-20:hover{--transform-translate-y:5rem}.hover\:translate-y-24:hover{--transform-translate-y:6rem}.hover\:translate-y-32:hover{--transform-translate-y:8rem}.hover\:translate-y-40:hover{--transform-translate-y:10rem}.hover\:translate-y-48:hover{--transform-translate-y:12rem}.hover\:translate-y-56:hover{--transform-translate-y:14rem}.hover\:translate-y-64:hover{--transform-translate-y:16rem}.hover\:translate-y-px:hover{--transform-translate-y:1px}.hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.hover\:-translate-y-px:hover{--transform-translate-y:-1px}.hover\:-translate-y-full:hover{--transform-translate-y:-100%}.hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.hover\:translate-y-full:hover{--transform-translate-y:100%}.focus\:translate-x-0:focus{--transform-translate-x:0}.focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.focus\:translate-x-4:focus{--transform-translate-x:1rem}.focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.focus\:translate-x-8:focus{--transform-translate-x:2rem}.focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.focus\:translate-x-12:focus{--transform-translate-x:3rem}.focus\:translate-x-16:focus{--transform-translate-x:4rem}.focus\:translate-x-20:focus{--transform-translate-x:5rem}.focus\:translate-x-24:focus{--transform-translate-x:6rem}.focus\:translate-x-32:focus{--transform-translate-x:8rem}.focus\:translate-x-40:focus{--transform-translate-x:10rem}.focus\:translate-x-48:focus{--transform-translate-x:12rem}.focus\:translate-x-56:focus{--transform-translate-x:14rem}.focus\:translate-x-64:focus{--transform-translate-x:16rem}.focus\:translate-x-px:focus{--transform-translate-x:1px}.focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.focus\:-translate-x-px:focus{--transform-translate-x:-1px}.focus\:-translate-x-full:focus{--transform-translate-x:-100%}.focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.focus\:translate-x-full:focus{--transform-translate-x:100%}.focus\:translate-y-0:focus{--transform-translate-y:0}.focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.focus\:translate-y-4:focus{--transform-translate-y:1rem}.focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.focus\:translate-y-8:focus{--transform-translate-y:2rem}.focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.focus\:translate-y-12:focus{--transform-translate-y:3rem}.focus\:translate-y-16:focus{--transform-translate-y:4rem}.focus\:translate-y-20:focus{--transform-translate-y:5rem}.focus\:translate-y-24:focus{--transform-translate-y:6rem}.focus\:translate-y-32:focus{--transform-translate-y:8rem}.focus\:translate-y-40:focus{--transform-translate-y:10rem}.focus\:translate-y-48:focus{--transform-translate-y:12rem}.focus\:translate-y-56:focus{--transform-translate-y:14rem}.focus\:translate-y-64:focus{--transform-translate-y:16rem}.focus\:translate-y-px:focus{--transform-translate-y:1px}.focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.focus\:-translate-y-px:focus{--transform-translate-y:-1px}.focus\:-translate-y-full:focus{--transform-translate-y:-100%}.focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.focus\:translate-y-full:focus{--transform-translate-y:100%}.skew-x-0{--transform-skew-x:0}.skew-x-1{--transform-skew-x:1deg}.skew-x-2{--transform-skew-x:2deg}.skew-x-3{--transform-skew-x:3deg}.skew-x-6{--transform-skew-x:6deg}.skew-x-12{--transform-skew-x:12deg}.-skew-x-12{--transform-skew-x:-12deg}.-skew-x-6{--transform-skew-x:-6deg}.-skew-x-3{--transform-skew-x:-3deg}.-skew-x-2{--transform-skew-x:-2deg}.-skew-x-1{--transform-skew-x:-1deg}.skew-y-0{--transform-skew-y:0}.skew-y-1{--transform-skew-y:1deg}.skew-y-2{--transform-skew-y:2deg}.skew-y-3{--transform-skew-y:3deg}.skew-y-6{--transform-skew-y:6deg}.skew-y-12{--transform-skew-y:12deg}.-skew-y-12{--transform-skew-y:-12deg}.-skew-y-6{--transform-skew-y:-6deg}.-skew-y-3{--transform-skew-y:-3deg}.-skew-y-2{--transform-skew-y:-2deg}.-skew-y-1{--transform-skew-y:-1deg}.hover\:skew-x-0:hover{--transform-skew-x:0}.hover\:skew-x-1:hover{--transform-skew-x:1deg}.hover\:skew-x-2:hover{--transform-skew-x:2deg}.hover\:skew-x-3:hover{--transform-skew-x:3deg}.hover\:skew-x-6:hover{--transform-skew-x:6deg}.hover\:skew-x-12:hover{--transform-skew-x:12deg}.hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.hover\:skew-y-0:hover{--transform-skew-y:0}.hover\:skew-y-1:hover{--transform-skew-y:1deg}.hover\:skew-y-2:hover{--transform-skew-y:2deg}.hover\:skew-y-3:hover{--transform-skew-y:3deg}.hover\:skew-y-6:hover{--transform-skew-y:6deg}.hover\:skew-y-12:hover{--transform-skew-y:12deg}.hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.focus\:skew-x-0:focus{--transform-skew-x:0}.focus\:skew-x-1:focus{--transform-skew-x:1deg}.focus\:skew-x-2:focus{--transform-skew-x:2deg}.focus\:skew-x-3:focus{--transform-skew-x:3deg}.focus\:skew-x-6:focus{--transform-skew-x:6deg}.focus\:skew-x-12:focus{--transform-skew-x:12deg}.focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.focus\:skew-y-0:focus{--transform-skew-y:0}.focus\:skew-y-1:focus{--transform-skew-y:1deg}.focus\:skew-y-2:focus{--transform-skew-y:2deg}.focus\:skew-y-3:focus{--transform-skew-y:3deg}.focus\:skew-y-6:focus{--transform-skew-y:6deg}.focus\:skew-y-12:focus{--transform-skew-y:12deg}.focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.transition-none{transition-property:none}.transition-all{transition-property:all}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.transition-colors{transition-property:background-color,border-color,color,fill,stroke}.transition-opacity{transition-property:opacity}.transition-shadow{transition-property:box-shadow}.transition-transform{transition-property:transform}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:150ms}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-1000{transition-duration:1s}.delay-75{transition-delay:75ms}.delay-100{transition-delay:.1s}.delay-150{transition-delay:150ms}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.delay-500{transition-delay:.5s}.delay-700{transition-delay:.7s}.delay-1000{transition-delay:1s}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{100%,75%{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-none{animation:none}.animate-spin{animation:spin 1s linear infinite}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-bounce{animation:bounce 1s infinite}@media (min-width:640px){.sm\:container{width:100%}@media (min-width:640px){.sm\:container{max-width:640px}}@media (min-width:768px){.sm\:container{max-width:768px}}@media (min-width:1024px){.sm\:container{max-width:1024px}}@media (min-width:1280px){.sm\:container{max-width:1280px}}.sm\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.sm\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.sm\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.sm\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.sm\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.sm\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.sm\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.sm\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.sm\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.sm\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.sm\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.sm\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.sm\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.sm\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.sm\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.sm\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.sm\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.sm\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.sm\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.sm\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.sm\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.sm\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.sm\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.sm\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.sm\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.sm\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.sm\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.sm\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.sm\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.sm\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.sm\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.sm\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.sm\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.sm\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.sm\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.sm\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.sm\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.sm\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.sm\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.sm\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.sm\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.sm\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.sm\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.sm\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.sm\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.sm\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.sm\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.sm\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.sm\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.sm\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.sm\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.sm\:divide-transparent>:not(template)~:not(template){border-color:transparent}.sm\:divide-current>:not(template)~:not(template){border-color:currentColor}.sm\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.sm\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.sm\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.sm\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.sm\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.sm\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.sm\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.sm\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.sm\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.sm\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.sm\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.sm\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.sm\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.sm\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.sm\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.sm\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.sm\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.sm\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.sm\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.sm\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.sm\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.sm\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.sm\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.sm\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.sm\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.sm\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.sm\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.sm\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.sm\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.sm\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.sm\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.sm\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.sm\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.sm\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.sm\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.sm\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.sm\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.sm\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.sm\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.sm\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.sm\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.sm\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.sm\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.sm\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.sm\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.sm\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.sm\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.sm\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.sm\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.sm\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.sm\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.sm\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.sm\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.sm\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.sm\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.sm\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.sm\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.sm\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.sm\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.sm\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.sm\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.sm\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.sm\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.sm\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.sm\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.sm\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.sm\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.sm\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.sm\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.sm\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.sm\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.sm\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.sm\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.sm\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.sm\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.sm\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.sm\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.sm\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.sm\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.sm\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.sm\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.sm\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.sm\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.sm\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.sm\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.sm\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.sm\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.sm\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.sm\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.sm\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.sm\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.sm\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.sm\:divide-solid>:not(template)~:not(template){border-style:solid}.sm\:divide-dashed>:not(template)~:not(template){border-style:dashed}.sm\:divide-dotted>:not(template)~:not(template){border-style:dotted}.sm\:divide-double>:not(template)~:not(template){border-style:double}.sm\:divide-none>:not(template)~:not(template){border-style:none}.sm\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.sm\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.sm\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.sm\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.sm\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.sm\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sm\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sm\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.sm\:bg-fixed{background-attachment:fixed}.sm\:bg-local{background-attachment:local}.sm\:bg-scroll{background-attachment:scroll}.sm\:bg-clip-border{background-clip:border-box}.sm\:bg-clip-padding{background-clip:padding-box}.sm\:bg-clip-content{background-clip:content-box}.sm\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.sm\:bg-transparent{background-color:transparent}.sm\:bg-current{background-color:currentColor}.sm\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.sm\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.sm\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.sm\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.sm\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.sm\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.sm\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.sm\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.sm\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.sm\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.sm\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.sm\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.sm\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.sm\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.sm\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.sm\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.sm\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.sm\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.sm\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.sm\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.sm\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.sm\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.sm\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.sm\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.sm\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.sm\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.sm\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.sm\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.sm\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.sm\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.sm\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.sm\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.sm\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.sm\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.sm\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.sm\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.sm\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.sm\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.sm\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.sm\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.sm\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.sm\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.sm\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.sm\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.sm\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.sm\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.sm\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.sm\:hover\:bg-transparent:hover{background-color:transparent}.sm\:hover\:bg-current:hover{background-color:currentColor}.sm\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.sm\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.sm\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.sm\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.sm\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.sm\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.sm\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.sm\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.sm\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.sm\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.sm\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.sm\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.sm\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.sm\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.sm\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.sm\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.sm\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.sm\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.sm\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.sm\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.sm\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.sm\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.sm\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.sm\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.sm\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.sm\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.sm\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.sm\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.sm\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.sm\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.sm\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.sm\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.sm\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.sm\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.sm\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.sm\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.sm\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.sm\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.sm\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.sm\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.sm\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.sm\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.sm\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.sm\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.sm\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.sm\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.sm\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.sm\:focus\:bg-transparent:focus{background-color:transparent}.sm\:focus\:bg-current:focus{background-color:currentColor}.sm\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.sm\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.sm\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.sm\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.sm\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.sm\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.sm\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.sm\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.sm\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.sm\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.sm\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.sm\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.sm\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.sm\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.sm\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.sm\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.sm\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.sm\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.sm\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.sm\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.sm\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.sm\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.sm\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.sm\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.sm\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.sm\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.sm\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.sm\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.sm\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.sm\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.sm\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.sm\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.sm\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.sm\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.sm\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.sm\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.sm\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.sm\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.sm\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.sm\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.sm\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.sm\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.sm\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.sm\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.sm\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.sm\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.sm\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.sm\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.sm\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.sm\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.sm\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.sm\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.sm\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.sm\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.sm\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.sm\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.sm\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.sm\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.sm\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.sm\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.sm\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.sm\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.sm\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.sm\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.sm\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.sm\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.sm\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.sm\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.sm\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.sm\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.sm\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.sm\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.sm\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.sm\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.sm\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.sm\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.sm\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.sm\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.sm\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.sm\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.sm\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.sm\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.sm\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.sm\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.sm\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.sm\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.sm\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.sm\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.sm\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.sm\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.sm\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.sm\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.sm\:bg-none{background-image:none}.sm\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.sm\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.sm\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.sm\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.sm\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.sm\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.sm\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.sm\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.sm\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:to-transparent{--gradient-to-color:transparent}.sm\:to-current{--gradient-to-color:currentColor}.sm\:to-black{--gradient-to-color:#000}.sm\:to-white{--gradient-to-color:#fff}.sm\:to-gray-100{--gradient-to-color:#f7fafc}.sm\:to-gray-200{--gradient-to-color:#edf2f7}.sm\:to-gray-300{--gradient-to-color:#e2e8f0}.sm\:to-gray-400{--gradient-to-color:#cbd5e0}.sm\:to-gray-500{--gradient-to-color:#a0aec0}.sm\:to-gray-600{--gradient-to-color:#718096}.sm\:to-gray-700{--gradient-to-color:#4a5568}.sm\:to-gray-800{--gradient-to-color:#2d3748}.sm\:to-gray-900{--gradient-to-color:#1a202c}.sm\:to-red-100{--gradient-to-color:#fff5f5}.sm\:to-red-200{--gradient-to-color:#fed7d7}.sm\:to-red-300{--gradient-to-color:#feb2b2}.sm\:to-red-400{--gradient-to-color:#fc8181}.sm\:to-red-500{--gradient-to-color:#f56565}.sm\:to-red-600{--gradient-to-color:#e53e3e}.sm\:to-red-700{--gradient-to-color:#c53030}.sm\:to-red-800{--gradient-to-color:#9b2c2c}.sm\:to-red-900{--gradient-to-color:#742a2a}.sm\:to-orange-100{--gradient-to-color:#fffaf0}.sm\:to-orange-200{--gradient-to-color:#feebc8}.sm\:to-orange-300{--gradient-to-color:#fbd38d}.sm\:to-orange-400{--gradient-to-color:#f6ad55}.sm\:to-orange-500{--gradient-to-color:#ed8936}.sm\:to-orange-600{--gradient-to-color:#dd6b20}.sm\:to-orange-700{--gradient-to-color:#c05621}.sm\:to-orange-800{--gradient-to-color:#9c4221}.sm\:to-orange-900{--gradient-to-color:#7b341e}.sm\:to-yellow-100{--gradient-to-color:#fffff0}.sm\:to-yellow-200{--gradient-to-color:#fefcbf}.sm\:to-yellow-300{--gradient-to-color:#faf089}.sm\:to-yellow-400{--gradient-to-color:#f6e05e}.sm\:to-yellow-500{--gradient-to-color:#ecc94b}.sm\:to-yellow-600{--gradient-to-color:#d69e2e}.sm\:to-yellow-700{--gradient-to-color:#b7791f}.sm\:to-yellow-800{--gradient-to-color:#975a16}.sm\:to-yellow-900{--gradient-to-color:#744210}.sm\:to-green-100{--gradient-to-color:#f0fff4}.sm\:to-green-200{--gradient-to-color:#c6f6d5}.sm\:to-green-300{--gradient-to-color:#9ae6b4}.sm\:to-green-400{--gradient-to-color:#68d391}.sm\:to-green-500{--gradient-to-color:#48bb78}.sm\:to-green-600{--gradient-to-color:#38a169}.sm\:to-green-700{--gradient-to-color:#2f855a}.sm\:to-green-800{--gradient-to-color:#276749}.sm\:to-green-900{--gradient-to-color:#22543d}.sm\:to-teal-100{--gradient-to-color:#e6fffa}.sm\:to-teal-200{--gradient-to-color:#b2f5ea}.sm\:to-teal-300{--gradient-to-color:#81e6d9}.sm\:to-teal-400{--gradient-to-color:#4fd1c5}.sm\:to-teal-500{--gradient-to-color:#38b2ac}.sm\:to-teal-600{--gradient-to-color:#319795}.sm\:to-teal-700{--gradient-to-color:#2c7a7b}.sm\:to-teal-800{--gradient-to-color:#285e61}.sm\:to-teal-900{--gradient-to-color:#234e52}.sm\:to-blue-100{--gradient-to-color:#ebf8ff}.sm\:to-blue-200{--gradient-to-color:#bee3f8}.sm\:to-blue-300{--gradient-to-color:#90cdf4}.sm\:to-blue-400{--gradient-to-color:#63b3ed}.sm\:to-blue-500{--gradient-to-color:#4299e1}.sm\:to-blue-600{--gradient-to-color:#3182ce}.sm\:to-blue-700{--gradient-to-color:#2b6cb0}.sm\:to-blue-800{--gradient-to-color:#2c5282}.sm\:to-blue-900{--gradient-to-color:#2a4365}.sm\:to-indigo-100{--gradient-to-color:#ebf4ff}.sm\:to-indigo-200{--gradient-to-color:#c3dafe}.sm\:to-indigo-300{--gradient-to-color:#a3bffa}.sm\:to-indigo-400{--gradient-to-color:#7f9cf5}.sm\:to-indigo-500{--gradient-to-color:#667eea}.sm\:to-indigo-600{--gradient-to-color:#5a67d8}.sm\:to-indigo-700{--gradient-to-color:#4c51bf}.sm\:to-indigo-800{--gradient-to-color:#434190}.sm\:to-indigo-900{--gradient-to-color:#3c366b}.sm\:to-purple-100{--gradient-to-color:#faf5ff}.sm\:to-purple-200{--gradient-to-color:#e9d8fd}.sm\:to-purple-300{--gradient-to-color:#d6bcfa}.sm\:to-purple-400{--gradient-to-color:#b794f4}.sm\:to-purple-500{--gradient-to-color:#9f7aea}.sm\:to-purple-600{--gradient-to-color:#805ad5}.sm\:to-purple-700{--gradient-to-color:#6b46c1}.sm\:to-purple-800{--gradient-to-color:#553c9a}.sm\:to-purple-900{--gradient-to-color:#44337a}.sm\:to-pink-100{--gradient-to-color:#fff5f7}.sm\:to-pink-200{--gradient-to-color:#fed7e2}.sm\:to-pink-300{--gradient-to-color:#fbb6ce}.sm\:to-pink-400{--gradient-to-color:#f687b3}.sm\:to-pink-500{--gradient-to-color:#ed64a6}.sm\:to-pink-600{--gradient-to-color:#d53f8c}.sm\:to-pink-700{--gradient-to-color:#b83280}.sm\:to-pink-800{--gradient-to-color:#97266d}.sm\:to-pink-900{--gradient-to-color:#702459}.sm\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:hover\:to-transparent:hover{--gradient-to-color:transparent}.sm\:hover\:to-current:hover{--gradient-to-color:currentColor}.sm\:hover\:to-black:hover{--gradient-to-color:#000}.sm\:hover\:to-white:hover{--gradient-to-color:#fff}.sm\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.sm\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.sm\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.sm\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.sm\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.sm\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.sm\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.sm\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.sm\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.sm\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.sm\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.sm\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.sm\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.sm\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.sm\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.sm\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.sm\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.sm\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.sm\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.sm\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.sm\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.sm\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.sm\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.sm\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.sm\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.sm\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.sm\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.sm\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.sm\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.sm\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.sm\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.sm\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.sm\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.sm\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.sm\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.sm\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.sm\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.sm\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.sm\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.sm\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.sm\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.sm\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.sm\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.sm\:hover\:to-green-800:hover{--gradient-to-color:#276749}.sm\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.sm\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.sm\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.sm\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.sm\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.sm\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.sm\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.sm\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.sm\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.sm\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.sm\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.sm\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.sm\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.sm\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.sm\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.sm\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.sm\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.sm\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.sm\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.sm\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.sm\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.sm\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.sm\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.sm\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.sm\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.sm\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.sm\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.sm\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.sm\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.sm\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.sm\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.sm\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.sm\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.sm\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.sm\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.sm\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.sm\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.sm\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.sm\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.sm\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.sm\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.sm\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.sm\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.sm\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.sm\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.sm\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.sm\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.sm\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.sm\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.sm\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.sm\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.sm\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.sm\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.sm\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.sm\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.sm\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.sm\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.sm\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.sm\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.sm\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.sm\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.sm\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.sm\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.sm\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.sm\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.sm\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.sm\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.sm\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.sm\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.sm\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.sm\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.sm\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.sm\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.sm\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.sm\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.sm\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.sm\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.sm\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.sm\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.sm\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.sm\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.sm\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.sm\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.sm\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.sm\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.sm\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.sm\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.sm\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.sm\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.sm\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.sm\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.sm\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.sm\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.sm\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.sm\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.sm\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.sm\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.sm\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.sm\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.sm\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.sm\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.sm\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.sm\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.sm\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.sm\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.sm\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.sm\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.sm\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.sm\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.sm\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.sm\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.sm\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.sm\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.sm\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.sm\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.sm\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.sm\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.sm\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.sm\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.sm\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.sm\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.sm\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.sm\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.sm\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.sm\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.sm\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.sm\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.sm\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.sm\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.sm\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.sm\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.sm\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.sm\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.sm\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.sm\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.sm\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.sm\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.sm\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.sm\:focus\:to-transparent:focus{--gradient-to-color:transparent}.sm\:focus\:to-current:focus{--gradient-to-color:currentColor}.sm\:focus\:to-black:focus{--gradient-to-color:#000}.sm\:focus\:to-white:focus{--gradient-to-color:#fff}.sm\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.sm\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.sm\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.sm\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.sm\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.sm\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.sm\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.sm\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.sm\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.sm\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.sm\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.sm\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.sm\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.sm\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.sm\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.sm\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.sm\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.sm\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.sm\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.sm\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.sm\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.sm\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.sm\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.sm\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.sm\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.sm\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.sm\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.sm\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.sm\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.sm\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.sm\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.sm\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.sm\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.sm\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.sm\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.sm\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.sm\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.sm\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.sm\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.sm\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.sm\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.sm\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.sm\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.sm\:focus\:to-green-800:focus{--gradient-to-color:#276749}.sm\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.sm\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.sm\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.sm\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.sm\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.sm\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.sm\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.sm\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.sm\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.sm\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.sm\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.sm\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.sm\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.sm\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.sm\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.sm\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.sm\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.sm\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.sm\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.sm\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.sm\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.sm\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.sm\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.sm\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.sm\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.sm\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.sm\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.sm\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.sm\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.sm\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.sm\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.sm\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.sm\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.sm\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.sm\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.sm\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.sm\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.sm\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.sm\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.sm\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.sm\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.sm\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.sm\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.sm\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.sm\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.sm\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.sm\:bg-opacity-0{--bg-opacity:0}.sm\:bg-opacity-25{--bg-opacity:0.25}.sm\:bg-opacity-50{--bg-opacity:0.5}.sm\:bg-opacity-75{--bg-opacity:0.75}.sm\:bg-opacity-100{--bg-opacity:1}.sm\:hover\:bg-opacity-0:hover{--bg-opacity:0}.sm\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.sm\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.sm\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.sm\:hover\:bg-opacity-100:hover{--bg-opacity:1}.sm\:focus\:bg-opacity-0:focus{--bg-opacity:0}.sm\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.sm\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.sm\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.sm\:focus\:bg-opacity-100:focus{--bg-opacity:1}.sm\:bg-bottom{background-position:bottom}.sm\:bg-center{background-position:center}.sm\:bg-left{background-position:left}.sm\:bg-left-bottom{background-position:left bottom}.sm\:bg-left-top{background-position:left top}.sm\:bg-right{background-position:right}.sm\:bg-right-bottom{background-position:right bottom}.sm\:bg-right-top{background-position:right top}.sm\:bg-top{background-position:top}.sm\:bg-repeat{background-repeat:repeat}.sm\:bg-no-repeat{background-repeat:no-repeat}.sm\:bg-repeat-x{background-repeat:repeat-x}.sm\:bg-repeat-y{background-repeat:repeat-y}.sm\:bg-repeat-round{background-repeat:round}.sm\:bg-repeat-space{background-repeat:space}.sm\:bg-auto{background-size:auto}.sm\:bg-cover{background-size:cover}.sm\:bg-contain{background-size:contain}.sm\:border-collapse{border-collapse:collapse}.sm\:border-separate{border-collapse:separate}.sm\:border-transparent{border-color:transparent}.sm\:border-current{border-color:currentColor}.sm\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.sm\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.sm\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.sm\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.sm\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.sm\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.sm\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.sm\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.sm\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.sm\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.sm\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.sm\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.sm\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.sm\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.sm\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.sm\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.sm\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.sm\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.sm\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.sm\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.sm\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.sm\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.sm\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.sm\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.sm\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.sm\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.sm\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.sm\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.sm\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.sm\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.sm\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.sm\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.sm\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.sm\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.sm\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.sm\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.sm\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.sm\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.sm\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.sm\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.sm\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.sm\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.sm\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.sm\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.sm\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.sm\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.sm\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.sm\:hover\:border-transparent:hover{border-color:transparent}.sm\:hover\:border-current:hover{border-color:currentColor}.sm\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.sm\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.sm\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.sm\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.sm\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.sm\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.sm\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.sm\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.sm\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.sm\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.sm\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.sm\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.sm\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.sm\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.sm\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.sm\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.sm\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.sm\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.sm\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.sm\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.sm\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.sm\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.sm\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.sm\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.sm\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.sm\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.sm\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.sm\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.sm\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.sm\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.sm\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.sm\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.sm\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.sm\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.sm\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.sm\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.sm\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.sm\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.sm\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.sm\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.sm\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.sm\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.sm\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.sm\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.sm\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.sm\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.sm\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.sm\:focus\:border-transparent:focus{border-color:transparent}.sm\:focus\:border-current:focus{border-color:currentColor}.sm\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.sm\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.sm\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.sm\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.sm\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.sm\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.sm\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.sm\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.sm\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.sm\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.sm\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.sm\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.sm\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.sm\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.sm\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.sm\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.sm\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.sm\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.sm\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.sm\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.sm\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.sm\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.sm\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.sm\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.sm\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.sm\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.sm\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.sm\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.sm\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.sm\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.sm\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.sm\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.sm\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.sm\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.sm\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.sm\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.sm\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.sm\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.sm\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.sm\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.sm\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.sm\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.sm\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.sm\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.sm\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.sm\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.sm\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.sm\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.sm\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.sm\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.sm\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.sm\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.sm\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.sm\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.sm\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.sm\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.sm\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.sm\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.sm\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.sm\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.sm\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.sm\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.sm\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.sm\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.sm\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.sm\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.sm\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.sm\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.sm\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.sm\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.sm\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.sm\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.sm\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.sm\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.sm\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.sm\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.sm\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.sm\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.sm\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.sm\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.sm\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.sm\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.sm\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.sm\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.sm\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.sm\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.sm\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.sm\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.sm\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.sm\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.sm\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.sm\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.sm\:border-opacity-0{--border-opacity:0}.sm\:border-opacity-25{--border-opacity:0.25}.sm\:border-opacity-50{--border-opacity:0.5}.sm\:border-opacity-75{--border-opacity:0.75}.sm\:border-opacity-100{--border-opacity:1}.sm\:hover\:border-opacity-0:hover{--border-opacity:0}.sm\:hover\:border-opacity-25:hover{--border-opacity:0.25}.sm\:hover\:border-opacity-50:hover{--border-opacity:0.5}.sm\:hover\:border-opacity-75:hover{--border-opacity:0.75}.sm\:hover\:border-opacity-100:hover{--border-opacity:1}.sm\:focus\:border-opacity-0:focus{--border-opacity:0}.sm\:focus\:border-opacity-25:focus{--border-opacity:0.25}.sm\:focus\:border-opacity-50:focus{--border-opacity:0.5}.sm\:focus\:border-opacity-75:focus{--border-opacity:0.75}.sm\:focus\:border-opacity-100:focus{--border-opacity:1}.sm\:rounded-none{border-radius:0}.sm\:rounded-sm{border-radius:.125rem}.sm\:rounded{border-radius:.25rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-3xl{border-radius:1.5rem}.sm\:rounded-full{border-radius:9999px}.sm\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.sm\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.sm\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.sm\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.sm\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.sm\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.sm\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.sm\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.sm\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.sm\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.sm\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.sm\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.sm\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.sm\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.sm\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.sm\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.sm\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.sm\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.sm\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.sm\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.sm\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.sm\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.sm\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.sm\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.sm\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.sm\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.sm\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.sm\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.sm\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.sm\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.sm\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.sm\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.sm\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.sm\:rounded-tl-none{border-top-left-radius:0}.sm\:rounded-tr-none{border-top-right-radius:0}.sm\:rounded-br-none{border-bottom-right-radius:0}.sm\:rounded-bl-none{border-bottom-left-radius:0}.sm\:rounded-tl-sm{border-top-left-radius:.125rem}.sm\:rounded-tr-sm{border-top-right-radius:.125rem}.sm\:rounded-br-sm{border-bottom-right-radius:.125rem}.sm\:rounded-bl-sm{border-bottom-left-radius:.125rem}.sm\:rounded-tl{border-top-left-radius:.25rem}.sm\:rounded-tr{border-top-right-radius:.25rem}.sm\:rounded-br{border-bottom-right-radius:.25rem}.sm\:rounded-bl{border-bottom-left-radius:.25rem}.sm\:rounded-tl-md{border-top-left-radius:.375rem}.sm\:rounded-tr-md{border-top-right-radius:.375rem}.sm\:rounded-br-md{border-bottom-right-radius:.375rem}.sm\:rounded-bl-md{border-bottom-left-radius:.375rem}.sm\:rounded-tl-lg{border-top-left-radius:.5rem}.sm\:rounded-tr-lg{border-top-right-radius:.5rem}.sm\:rounded-br-lg{border-bottom-right-radius:.5rem}.sm\:rounded-bl-lg{border-bottom-left-radius:.5rem}.sm\:rounded-tl-xl{border-top-left-radius:.75rem}.sm\:rounded-tr-xl{border-top-right-radius:.75rem}.sm\:rounded-br-xl{border-bottom-right-radius:.75rem}.sm\:rounded-bl-xl{border-bottom-left-radius:.75rem}.sm\:rounded-tl-2xl{border-top-left-radius:1rem}.sm\:rounded-tr-2xl{border-top-right-radius:1rem}.sm\:rounded-br-2xl{border-bottom-right-radius:1rem}.sm\:rounded-bl-2xl{border-bottom-left-radius:1rem}.sm\:rounded-tl-3xl{border-top-left-radius:1.5rem}.sm\:rounded-tr-3xl{border-top-right-radius:1.5rem}.sm\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.sm\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.sm\:rounded-tl-full{border-top-left-radius:9999px}.sm\:rounded-tr-full{border-top-right-radius:9999px}.sm\:rounded-br-full{border-bottom-right-radius:9999px}.sm\:rounded-bl-full{border-bottom-left-radius:9999px}.sm\:border-solid{border-style:solid}.sm\:border-dashed{border-style:dashed}.sm\:border-dotted{border-style:dotted}.sm\:border-double{border-style:double}.sm\:border-none{border-style:none}.sm\:border-0{border-width:0}.sm\:border-2{border-width:2px}.sm\:border-4{border-width:4px}.sm\:border-8{border-width:8px}.sm\:border{border-width:1px}.sm\:border-t-0{border-top-width:0}.sm\:border-r-0{border-right-width:0}.sm\:border-b-0{border-bottom-width:0}.sm\:border-l-0{border-left-width:0}.sm\:border-t-2{border-top-width:2px}.sm\:border-r-2{border-right-width:2px}.sm\:border-b-2{border-bottom-width:2px}.sm\:border-l-2{border-left-width:2px}.sm\:border-t-4{border-top-width:4px}.sm\:border-r-4{border-right-width:4px}.sm\:border-b-4{border-bottom-width:4px}.sm\:border-l-4{border-left-width:4px}.sm\:border-t-8{border-top-width:8px}.sm\:border-r-8{border-right-width:8px}.sm\:border-b-8{border-bottom-width:8px}.sm\:border-l-8{border-left-width:8px}.sm\:border-t{border-top-width:1px}.sm\:border-r{border-right-width:1px}.sm\:border-b{border-bottom-width:1px}.sm\:border-l{border-left-width:1px}.sm\:box-border{box-sizing:border-box}.sm\:box-content{box-sizing:content-box}.sm\:cursor-auto{cursor:auto}.sm\:cursor-default{cursor:default}.sm\:cursor-pointer{cursor:pointer}.sm\:cursor-wait{cursor:wait}.sm\:cursor-text{cursor:text}.sm\:cursor-move{cursor:move}.sm\:cursor-not-allowed{cursor:not-allowed}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:table{display:table}.sm\:table-caption{display:table-caption}.sm\:table-cell{display:table-cell}.sm\:table-column{display:table-column}.sm\:table-column-group{display:table-column-group}.sm\:table-footer-group{display:table-footer-group}.sm\:table-header-group{display:table-header-group}.sm\:table-row-group{display:table-row-group}.sm\:table-row{display:table-row}.sm\:flow-root{display:flow-root}.sm\:grid{display:grid}.sm\:inline-grid{display:inline-grid}.sm\:contents{display:contents}.sm\:hidden{display:none}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-col{flex-direction:column}.sm\:flex-col-reverse{flex-direction:column-reverse}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-wrap-reverse{flex-wrap:wrap-reverse}.sm\:flex-no-wrap{flex-wrap:nowrap}.sm\:place-items-auto{place-items:auto}.sm\:place-items-start{place-items:start}.sm\:place-items-end{place-items:end}.sm\:place-items-center{place-items:center}.sm\:place-items-stretch{place-items:stretch}.sm\:place-content-center{place-content:center}.sm\:place-content-start{place-content:start}.sm\:place-content-end{place-content:end}.sm\:place-content-between{place-content:space-between}.sm\:place-content-around{place-content:space-around}.sm\:place-content-evenly{place-content:space-evenly}.sm\:place-content-stretch{place-content:stretch}.sm\:place-self-auto{place-self:auto}.sm\:place-self-start{place-self:start}.sm\:place-self-end{place-self:end}.sm\:place-self-center{place-self:center}.sm\:place-self-stretch{place-self:stretch}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:items-baseline{align-items:baseline}.sm\:items-stretch{align-items:stretch}.sm\:content-center{align-content:center}.sm\:content-start{align-content:flex-start}.sm\:content-end{align-content:flex-end}.sm\:content-between{align-content:space-between}.sm\:content-around{align-content:space-around}.sm\:content-evenly{align-content:space-evenly}.sm\:self-auto{align-self:auto}.sm\:self-start{align-self:flex-start}.sm\:self-end{align-self:flex-end}.sm\:self-center{align-self:center}.sm\:self-stretch{align-self:stretch}.sm\:justify-items-auto{justify-items:auto}.sm\:justify-items-start{justify-items:start}.sm\:justify-items-end{justify-items:end}.sm\:justify-items-center{justify-items:center}.sm\:justify-items-stretch{justify-items:stretch}.sm\:justify-start{justify-content:flex-start}.sm\:justify-end{justify-content:flex-end}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-around{justify-content:space-around}.sm\:justify-evenly{justify-content:space-evenly}.sm\:justify-self-auto{justify-self:auto}.sm\:justify-self-start{justify-self:start}.sm\:justify-self-end{justify-self:end}.sm\:justify-self-center{justify-self:center}.sm\:justify-self-stretch{justify-self:stretch}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-initial{flex:0 1 auto}.sm\:flex-none{flex:none}.sm\:flex-grow-0{flex-grow:0}.sm\:flex-grow{flex-grow:1}.sm\:flex-shrink-0{flex-shrink:0}.sm\:flex-shrink{flex-shrink:1}.sm\:order-1{order:1}.sm\:order-2{order:2}.sm\:order-3{order:3}.sm\:order-4{order:4}.sm\:order-5{order:5}.sm\:order-6{order:6}.sm\:order-7{order:7}.sm\:order-8{order:8}.sm\:order-9{order:9}.sm\:order-10{order:10}.sm\:order-11{order:11}.sm\:order-12{order:12}.sm\:order-first{order:-9999}.sm\:order-last{order:9999}.sm\:order-none{order:0}.sm\:float-right{float:right}.sm\:float-left{float:left}.sm\:float-none{float:none}.sm\:clearfix:after{content:"";display:table;clear:both}.sm\:clear-left{clear:left}.sm\:clear-right{clear:right}.sm\:clear-both{clear:both}.sm\:clear-none{clear:none}.sm\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.sm\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.sm\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.sm\:font-hairline{font-weight:100}.sm\:font-thin{font-weight:200}.sm\:font-light{font-weight:300}.sm\:font-normal{font-weight:400}.sm\:font-medium{font-weight:500}.sm\:font-semibold{font-weight:600}.sm\:font-bold{font-weight:700}.sm\:font-extrabold{font-weight:800}.sm\:font-black{font-weight:900}.sm\:hover\:font-hairline:hover{font-weight:100}.sm\:hover\:font-thin:hover{font-weight:200}.sm\:hover\:font-light:hover{font-weight:300}.sm\:hover\:font-normal:hover{font-weight:400}.sm\:hover\:font-medium:hover{font-weight:500}.sm\:hover\:font-semibold:hover{font-weight:600}.sm\:hover\:font-bold:hover{font-weight:700}.sm\:hover\:font-extrabold:hover{font-weight:800}.sm\:hover\:font-black:hover{font-weight:900}.sm\:focus\:font-hairline:focus{font-weight:100}.sm\:focus\:font-thin:focus{font-weight:200}.sm\:focus\:font-light:focus{font-weight:300}.sm\:focus\:font-normal:focus{font-weight:400}.sm\:focus\:font-medium:focus{font-weight:500}.sm\:focus\:font-semibold:focus{font-weight:600}.sm\:focus\:font-bold:focus{font-weight:700}.sm\:focus\:font-extrabold:focus{font-weight:800}.sm\:focus\:font-black:focus{font-weight:900}.sm\:h-0{height:0}.sm\:h-1{height:.25rem}.sm\:h-2{height:.5rem}.sm\:h-3{height:.75rem}.sm\:h-4{height:1rem}.sm\:h-5{height:1.25rem}.sm\:h-6{height:1.5rem}.sm\:h-8{height:2rem}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-16{height:4rem}.sm\:h-20{height:5rem}.sm\:h-24{height:6rem}.sm\:h-32{height:8rem}.sm\:h-40{height:10rem}.sm\:h-48{height:12rem}.sm\:h-56{height:14rem}.sm\:h-64{height:16rem}.sm\:h-auto{height:auto}.sm\:h-px{height:1px}.sm\:h-full{height:100%}.sm\:h-screen{height:100vh}.sm\:text-xs{font-size:.75rem}.sm\:text-sm{font-size:.875rem}.sm\:text-base{font-size:1rem}.sm\:text-lg{font-size:1.125rem}.sm\:text-xl{font-size:1.25rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:text-4xl{font-size:2.25rem}.sm\:text-5xl{font-size:3rem}.sm\:text-6xl{font-size:4rem}.sm\:leading-3{line-height:.75rem}.sm\:leading-4{line-height:1rem}.sm\:leading-5{line-height:1.25rem}.sm\:leading-6{line-height:1.5rem}.sm\:leading-7{line-height:1.75rem}.sm\:leading-8{line-height:2rem}.sm\:leading-9{line-height:2.25rem}.sm\:leading-10{line-height:2.5rem}.sm\:leading-none{line-height:1}.sm\:leading-tight{line-height:1.25}.sm\:leading-snug{line-height:1.375}.sm\:leading-normal{line-height:1.5}.sm\:leading-relaxed{line-height:1.625}.sm\:leading-loose{line-height:2}.sm\:list-inside{list-style-position:inside}.sm\:list-outside{list-style-position:outside}.sm\:list-none{list-style-type:none}.sm\:list-disc{list-style-type:disc}.sm\:list-decimal{list-style-type:decimal}.sm\:m-0{margin:0}.sm\:m-1{margin:.25rem}.sm\:m-2{margin:.5rem}.sm\:m-3{margin:.75rem}.sm\:m-4{margin:1rem}.sm\:m-5{margin:1.25rem}.sm\:m-6{margin:1.5rem}.sm\:m-8{margin:2rem}.sm\:m-10{margin:2.5rem}.sm\:m-12{margin:3rem}.sm\:m-16{margin:4rem}.sm\:m-20{margin:5rem}.sm\:m-24{margin:6rem}.sm\:m-32{margin:8rem}.sm\:m-40{margin:10rem}.sm\:m-48{margin:12rem}.sm\:m-56{margin:14rem}.sm\:m-64{margin:16rem}.sm\:m-auto{margin:auto}.sm\:m-px{margin:1px}.sm\:-m-1{margin:-.25rem}.sm\:-m-2{margin:-.5rem}.sm\:-m-3{margin:-.75rem}.sm\:-m-4{margin:-1rem}.sm\:-m-5{margin:-1.25rem}.sm\:-m-6{margin:-1.5rem}.sm\:-m-8{margin:-2rem}.sm\:-m-10{margin:-2.5rem}.sm\:-m-12{margin:-3rem}.sm\:-m-16{margin:-4rem}.sm\:-m-20{margin:-5rem}.sm\:-m-24{margin:-6rem}.sm\:-m-32{margin:-8rem}.sm\:-m-40{margin:-10rem}.sm\:-m-48{margin:-12rem}.sm\:-m-56{margin:-14rem}.sm\:-m-64{margin:-16rem}.sm\:-m-px{margin:-1px}.sm\:my-0{margin-top:0;margin-bottom:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-1{margin-top:.25rem;margin-bottom:.25rem}.sm\:mx-1{margin-left:.25rem;margin-right:.25rem}.sm\:my-2{margin-top:.5rem;margin-bottom:.5rem}.sm\:mx-2{margin-left:.5rem;margin-right:.5rem}.sm\:my-3{margin-top:.75rem;margin-bottom:.75rem}.sm\:mx-3{margin-left:.75rem;margin-right:.75rem}.sm\:my-4{margin-top:1rem;margin-bottom:1rem}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.sm\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.sm\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:mx-8{margin-left:2rem;margin-right:2rem}.sm\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.sm\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.sm\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\:mx-12{margin-left:3rem;margin-right:3rem}.sm\:my-16{margin-top:4rem;margin-bottom:4rem}.sm\:mx-16{margin-left:4rem;margin-right:4rem}.sm\:my-20{margin-top:5rem;margin-bottom:5rem}.sm\:mx-20{margin-left:5rem;margin-right:5rem}.sm\:my-24{margin-top:6rem;margin-bottom:6rem}.sm\:mx-24{margin-left:6rem;margin-right:6rem}.sm\:my-32{margin-top:8rem;margin-bottom:8rem}.sm\:mx-32{margin-left:8rem;margin-right:8rem}.sm\:my-40{margin-top:10rem;margin-bottom:10rem}.sm\:mx-40{margin-left:10rem;margin-right:10rem}.sm\:my-48{margin-top:12rem;margin-bottom:12rem}.sm\:mx-48{margin-left:12rem;margin-right:12rem}.sm\:my-56{margin-top:14rem;margin-bottom:14rem}.sm\:mx-56{margin-left:14rem;margin-right:14rem}.sm\:my-64{margin-top:16rem;margin-bottom:16rem}.sm\:mx-64{margin-left:16rem;margin-right:16rem}.sm\:my-auto{margin-top:auto;margin-bottom:auto}.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:my-px{margin-top:1px;margin-bottom:1px}.sm\:mx-px{margin-left:1px;margin-right:1px}.sm\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.sm\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.sm\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.sm\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.sm\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.sm\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.sm\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.sm\:-mx-4{margin-left:-1rem;margin-right:-1rem}.sm\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.sm\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.sm\:-mx-8{margin-left:-2rem;margin-right:-2rem}.sm\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.sm\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.sm\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.sm\:-mx-12{margin-left:-3rem;margin-right:-3rem}.sm\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.sm\:-mx-16{margin-left:-4rem;margin-right:-4rem}.sm\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.sm\:-mx-20{margin-left:-5rem;margin-right:-5rem}.sm\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.sm\:-mx-24{margin-left:-6rem;margin-right:-6rem}.sm\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.sm\:-mx-32{margin-left:-8rem;margin-right:-8rem}.sm\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.sm\:-mx-40{margin-left:-10rem;margin-right:-10rem}.sm\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.sm\:-mx-48{margin-left:-12rem;margin-right:-12rem}.sm\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.sm\:-mx-56{margin-left:-14rem;margin-right:-14rem}.sm\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.sm\:-mx-64{margin-left:-16rem;margin-right:-16rem}.sm\:-my-px{margin-top:-1px;margin-bottom:-1px}.sm\:-mx-px{margin-left:-1px;margin-right:-1px}.sm\:mt-0{margin-top:0}.sm\:mr-0{margin-right:0}.sm\:mb-0{margin-bottom:0}.sm\:ml-0{margin-left:0}.sm\:mt-1{margin-top:.25rem}.sm\:mr-1{margin-right:.25rem}.sm\:mb-1{margin-bottom:.25rem}.sm\:ml-1{margin-left:.25rem}.sm\:mt-2{margin-top:.5rem}.sm\:mr-2{margin-right:.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:ml-2{margin-left:.5rem}.sm\:mt-3{margin-top:.75rem}.sm\:mr-3{margin-right:.75rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:ml-3{margin-left:.75rem}.sm\:mt-4{margin-top:1rem}.sm\:mr-4{margin-right:1rem}.sm\:mb-4{margin-bottom:1rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-5{margin-top:1.25rem}.sm\:mr-5{margin-right:1.25rem}.sm\:mb-5{margin-bottom:1.25rem}.sm\:ml-5{margin-left:1.25rem}.sm\:mt-6{margin-top:1.5rem}.sm\:mr-6{margin-right:1.5rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-8{margin-top:2rem}.sm\:mr-8{margin-right:2rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-8{margin-left:2rem}.sm\:mt-10{margin-top:2.5rem}.sm\:mr-10{margin-right:2.5rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:ml-10{margin-left:2.5rem}.sm\:mt-12{margin-top:3rem}.sm\:mr-12{margin-right:3rem}.sm\:mb-12{margin-bottom:3rem}.sm\:ml-12{margin-left:3rem}.sm\:mt-16{margin-top:4rem}.sm\:mr-16{margin-right:4rem}.sm\:mb-16{margin-bottom:4rem}.sm\:ml-16{margin-left:4rem}.sm\:mt-20{margin-top:5rem}.sm\:mr-20{margin-right:5rem}.sm\:mb-20{margin-bottom:5rem}.sm\:ml-20{margin-left:5rem}.sm\:mt-24{margin-top:6rem}.sm\:mr-24{margin-right:6rem}.sm\:mb-24{margin-bottom:6rem}.sm\:ml-24{margin-left:6rem}.sm\:mt-32{margin-top:8rem}.sm\:mr-32{margin-right:8rem}.sm\:mb-32{margin-bottom:8rem}.sm\:ml-32{margin-left:8rem}.sm\:mt-40{margin-top:10rem}.sm\:mr-40{margin-right:10rem}.sm\:mb-40{margin-bottom:10rem}.sm\:ml-40{margin-left:10rem}.sm\:mt-48{margin-top:12rem}.sm\:mr-48{margin-right:12rem}.sm\:mb-48{margin-bottom:12rem}.sm\:ml-48{margin-left:12rem}.sm\:mt-56{margin-top:14rem}.sm\:mr-56{margin-right:14rem}.sm\:mb-56{margin-bottom:14rem}.sm\:ml-56{margin-left:14rem}.sm\:mt-64{margin-top:16rem}.sm\:mr-64{margin-right:16rem}.sm\:mb-64{margin-bottom:16rem}.sm\:ml-64{margin-left:16rem}.sm\:mt-auto{margin-top:auto}.sm\:mr-auto{margin-right:auto}.sm\:mb-auto{margin-bottom:auto}.sm\:ml-auto{margin-left:auto}.sm\:mt-px{margin-top:1px}.sm\:mr-px{margin-right:1px}.sm\:mb-px{margin-bottom:1px}.sm\:ml-px{margin-left:1px}.sm\:-mt-1{margin-top:-.25rem}.sm\:-mr-1{margin-right:-.25rem}.sm\:-mb-1{margin-bottom:-.25rem}.sm\:-ml-1{margin-left:-.25rem}.sm\:-mt-2{margin-top:-.5rem}.sm\:-mr-2{margin-right:-.5rem}.sm\:-mb-2{margin-bottom:-.5rem}.sm\:-ml-2{margin-left:-.5rem}.sm\:-mt-3{margin-top:-.75rem}.sm\:-mr-3{margin-right:-.75rem}.sm\:-mb-3{margin-bottom:-.75rem}.sm\:-ml-3{margin-left:-.75rem}.sm\:-mt-4{margin-top:-1rem}.sm\:-mr-4{margin-right:-1rem}.sm\:-mb-4{margin-bottom:-1rem}.sm\:-ml-4{margin-left:-1rem}.sm\:-mt-5{margin-top:-1.25rem}.sm\:-mr-5{margin-right:-1.25rem}.sm\:-mb-5{margin-bottom:-1.25rem}.sm\:-ml-5{margin-left:-1.25rem}.sm\:-mt-6{margin-top:-1.5rem}.sm\:-mr-6{margin-right:-1.5rem}.sm\:-mb-6{margin-bottom:-1.5rem}.sm\:-ml-6{margin-left:-1.5rem}.sm\:-mt-8{margin-top:-2rem}.sm\:-mr-8{margin-right:-2rem}.sm\:-mb-8{margin-bottom:-2rem}.sm\:-ml-8{margin-left:-2rem}.sm\:-mt-10{margin-top:-2.5rem}.sm\:-mr-10{margin-right:-2.5rem}.sm\:-mb-10{margin-bottom:-2.5rem}.sm\:-ml-10{margin-left:-2.5rem}.sm\:-mt-12{margin-top:-3rem}.sm\:-mr-12{margin-right:-3rem}.sm\:-mb-12{margin-bottom:-3rem}.sm\:-ml-12{margin-left:-3rem}.sm\:-mt-16{margin-top:-4rem}.sm\:-mr-16{margin-right:-4rem}.sm\:-mb-16{margin-bottom:-4rem}.sm\:-ml-16{margin-left:-4rem}.sm\:-mt-20{margin-top:-5rem}.sm\:-mr-20{margin-right:-5rem}.sm\:-mb-20{margin-bottom:-5rem}.sm\:-ml-20{margin-left:-5rem}.sm\:-mt-24{margin-top:-6rem}.sm\:-mr-24{margin-right:-6rem}.sm\:-mb-24{margin-bottom:-6rem}.sm\:-ml-24{margin-left:-6rem}.sm\:-mt-32{margin-top:-8rem}.sm\:-mr-32{margin-right:-8rem}.sm\:-mb-32{margin-bottom:-8rem}.sm\:-ml-32{margin-left:-8rem}.sm\:-mt-40{margin-top:-10rem}.sm\:-mr-40{margin-right:-10rem}.sm\:-mb-40{margin-bottom:-10rem}.sm\:-ml-40{margin-left:-10rem}.sm\:-mt-48{margin-top:-12rem}.sm\:-mr-48{margin-right:-12rem}.sm\:-mb-48{margin-bottom:-12rem}.sm\:-ml-48{margin-left:-12rem}.sm\:-mt-56{margin-top:-14rem}.sm\:-mr-56{margin-right:-14rem}.sm\:-mb-56{margin-bottom:-14rem}.sm\:-ml-56{margin-left:-14rem}.sm\:-mt-64{margin-top:-16rem}.sm\:-mr-64{margin-right:-16rem}.sm\:-mb-64{margin-bottom:-16rem}.sm\:-ml-64{margin-left:-16rem}.sm\:-mt-px{margin-top:-1px}.sm\:-mr-px{margin-right:-1px}.sm\:-mb-px{margin-bottom:-1px}.sm\:-ml-px{margin-left:-1px}.sm\:max-h-full{max-height:100%}.sm\:max-h-screen{max-height:100vh}.sm\:max-w-none{max-width:none}.sm\:max-w-xs{max-width:20rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-5xl{max-width:64rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-full{max-width:100%}.sm\:max-w-screen-sm{max-width:640px}.sm\:max-w-screen-md{max-width:768px}.sm\:max-w-screen-lg{max-width:1024px}.sm\:max-w-screen-xl{max-width:1280px}.sm\:min-h-0{min-height:0}.sm\:min-h-full{min-height:100%}.sm\:min-h-screen{min-height:100vh}.sm\:min-w-0{min-width:0}.sm\:min-w-full{min-width:100%}.sm\:object-contain{object-fit:contain}.sm\:object-cover{object-fit:cover}.sm\:object-fill{object-fit:fill}.sm\:object-none{object-fit:none}.sm\:object-scale-down{object-fit:scale-down}.sm\:object-bottom{object-position:bottom}.sm\:object-center{object-position:center}.sm\:object-left{object-position:left}.sm\:object-left-bottom{object-position:left bottom}.sm\:object-left-top{object-position:left top}.sm\:object-right{object-position:right}.sm\:object-right-bottom{object-position:right bottom}.sm\:object-right-top{object-position:right top}.sm\:object-top{object-position:top}.sm\:opacity-0{opacity:0}.sm\:opacity-25{opacity:.25}.sm\:opacity-50{opacity:.5}.sm\:opacity-75{opacity:.75}.sm\:opacity-100{opacity:1}.sm\:hover\:opacity-0:hover{opacity:0}.sm\:hover\:opacity-25:hover{opacity:.25}.sm\:hover\:opacity-50:hover{opacity:.5}.sm\:hover\:opacity-75:hover{opacity:.75}.sm\:hover\:opacity-100:hover{opacity:1}.sm\:focus\:opacity-0:focus{opacity:0}.sm\:focus\:opacity-25:focus{opacity:.25}.sm\:focus\:opacity-50:focus{opacity:.5}.sm\:focus\:opacity-75:focus{opacity:.75}.sm\:focus\:opacity-100:focus{opacity:1}.sm\:outline-none{outline:2px solid transparent;outline-offset:2px}.sm\:outline-white{outline:2px dotted #fff;outline-offset:2px}.sm\:outline-black{outline:2px dotted #000;outline-offset:2px}.sm\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.sm\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.sm\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.sm\:overflow-auto{overflow:auto}.sm\:overflow-hidden{overflow:hidden}.sm\:overflow-visible{overflow:visible}.sm\:overflow-scroll{overflow:scroll}.sm\:overflow-x-auto{overflow-x:auto}.sm\:overflow-y-auto{overflow-y:auto}.sm\:overflow-x-hidden{overflow-x:hidden}.sm\:overflow-y-hidden{overflow-y:hidden}.sm\:overflow-x-visible{overflow-x:visible}.sm\:overflow-y-visible{overflow-y:visible}.sm\:overflow-x-scroll{overflow-x:scroll}.sm\:overflow-y-scroll{overflow-y:scroll}.sm\:scrolling-touch{-webkit-overflow-scrolling:touch}.sm\:scrolling-auto{-webkit-overflow-scrolling:auto}.sm\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.sm\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.sm\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.sm\:overscroll-y-auto{overscroll-behavior-y:auto}.sm\:overscroll-y-contain{overscroll-behavior-y:contain}.sm\:overscroll-y-none{overscroll-behavior-y:none}.sm\:overscroll-x-auto{overscroll-behavior-x:auto}.sm\:overscroll-x-contain{overscroll-behavior-x:contain}.sm\:overscroll-x-none{overscroll-behavior-x:none}.sm\:p-0{padding:0}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-5{padding:1.25rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:p-10{padding:2.5rem}.sm\:p-12{padding:3rem}.sm\:p-16{padding:4rem}.sm\:p-20{padding:5rem}.sm\:p-24{padding:6rem}.sm\:p-32{padding:8rem}.sm\:p-40{padding:10rem}.sm\:p-48{padding:12rem}.sm\:p-56{padding:14rem}.sm\:p-64{padding:16rem}.sm\:p-px{padding:1px}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:px-0{padding-left:0;padding-right:0}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:px-1{padding-left:.25rem;padding-right:.25rem}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\:py-12{padding-top:3rem;padding-bottom:3rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:py-16{padding-top:4rem;padding-bottom:4rem}.sm\:px-16{padding-left:4rem;padding-right:4rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:px-20{padding-left:5rem;padding-right:5rem}.sm\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\:px-24{padding-left:6rem;padding-right:6rem}.sm\:py-32{padding-top:8rem;padding-bottom:8rem}.sm\:px-32{padding-left:8rem;padding-right:8rem}.sm\:py-40{padding-top:10rem;padding-bottom:10rem}.sm\:px-40{padding-left:10rem;padding-right:10rem}.sm\:py-48{padding-top:12rem;padding-bottom:12rem}.sm\:px-48{padding-left:12rem;padding-right:12rem}.sm\:py-56{padding-top:14rem;padding-bottom:14rem}.sm\:px-56{padding-left:14rem;padding-right:14rem}.sm\:py-64{padding-top:16rem;padding-bottom:16rem}.sm\:px-64{padding-left:16rem;padding-right:16rem}.sm\:py-px{padding-top:1px;padding-bottom:1px}.sm\:px-px{padding-left:1px;padding-right:1px}.sm\:pt-0{padding-top:0}.sm\:pr-0{padding-right:0}.sm\:pb-0{padding-bottom:0}.sm\:pl-0{padding-left:0}.sm\:pt-1{padding-top:.25rem}.sm\:pr-1{padding-right:.25rem}.sm\:pb-1{padding-bottom:.25rem}.sm\:pl-1{padding-left:.25rem}.sm\:pt-2{padding-top:.5rem}.sm\:pr-2{padding-right:.5rem}.sm\:pb-2{padding-bottom:.5rem}.sm\:pl-2{padding-left:.5rem}.sm\:pt-3{padding-top:.75rem}.sm\:pr-3{padding-right:.75rem}.sm\:pb-3{padding-bottom:.75rem}.sm\:pl-3{padding-left:.75rem}.sm\:pt-4{padding-top:1rem}.sm\:pr-4{padding-right:1rem}.sm\:pb-4{padding-bottom:1rem}.sm\:pl-4{padding-left:1rem}.sm\:pt-5{padding-top:1.25rem}.sm\:pr-5{padding-right:1.25rem}.sm\:pb-5{padding-bottom:1.25rem}.sm\:pl-5{padding-left:1.25rem}.sm\:pt-6{padding-top:1.5rem}.sm\:pr-6{padding-right:1.5rem}.sm\:pb-6{padding-bottom:1.5rem}.sm\:pl-6{padding-left:1.5rem}.sm\:pt-8{padding-top:2rem}.sm\:pr-8{padding-right:2rem}.sm\:pb-8{padding-bottom:2rem}.sm\:pl-8{padding-left:2rem}.sm\:pt-10{padding-top:2.5rem}.sm\:pr-10{padding-right:2.5rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pl-10{padding-left:2.5rem}.sm\:pt-12{padding-top:3rem}.sm\:pr-12{padding-right:3rem}.sm\:pb-12{padding-bottom:3rem}.sm\:pl-12{padding-left:3rem}.sm\:pt-16{padding-top:4rem}.sm\:pr-16{padding-right:4rem}.sm\:pb-16{padding-bottom:4rem}.sm\:pl-16{padding-left:4rem}.sm\:pt-20{padding-top:5rem}.sm\:pr-20{padding-right:5rem}.sm\:pb-20{padding-bottom:5rem}.sm\:pl-20{padding-left:5rem}.sm\:pt-24{padding-top:6rem}.sm\:pr-24{padding-right:6rem}.sm\:pb-24{padding-bottom:6rem}.sm\:pl-24{padding-left:6rem}.sm\:pt-32{padding-top:8rem}.sm\:pr-32{padding-right:8rem}.sm\:pb-32{padding-bottom:8rem}.sm\:pl-32{padding-left:8rem}.sm\:pt-40{padding-top:10rem}.sm\:pr-40{padding-right:10rem}.sm\:pb-40{padding-bottom:10rem}.sm\:pl-40{padding-left:10rem}.sm\:pt-48{padding-top:12rem}.sm\:pr-48{padding-right:12rem}.sm\:pb-48{padding-bottom:12rem}.sm\:pl-48{padding-left:12rem}.sm\:pt-56{padding-top:14rem}.sm\:pr-56{padding-right:14rem}.sm\:pb-56{padding-bottom:14rem}.sm\:pl-56{padding-left:14rem}.sm\:pt-64{padding-top:16rem}.sm\:pr-64{padding-right:16rem}.sm\:pb-64{padding-bottom:16rem}.sm\:pl-64{padding-left:16rem}.sm\:pt-px{padding-top:1px}.sm\:pr-px{padding-right:1px}.sm\:pb-px{padding-bottom:1px}.sm\:pl-px{padding-left:1px}.sm\:placeholder-transparent:-ms-input-placeholder{color:transparent}.sm\:placeholder-transparent::-ms-input-placeholder{color:transparent}.sm\:placeholder-transparent::placeholder{color:transparent}.sm\:placeholder-current:-ms-input-placeholder{color:currentColor}.sm\:placeholder-current::-ms-input-placeholder{color:currentColor}.sm\:placeholder-current::placeholder{color:currentColor}.sm\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.sm\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.sm\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.sm\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.sm\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.sm\:focus\:placeholder-current:focus::placeholder{color:currentColor}.sm\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.sm\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.sm\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.sm\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.sm\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.sm\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.sm\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.sm\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.sm\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.sm\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.sm\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.sm\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.sm\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.sm\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.sm\:pointer-events-none{pointer-events:none}.sm\:pointer-events-auto{pointer-events:auto}.sm\:static{position:static}.sm\:fixed{position:fixed}.sm\:absolute{position:absolute}.sm\:relative{position:relative}.sm\:sticky{position:-webkit-sticky;position:sticky}.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.sm\:inset-y-0{top:0;bottom:0}.sm\:inset-x-0{right:0;left:0}.sm\:inset-y-auto{top:auto;bottom:auto}.sm\:inset-x-auto{right:auto;left:auto}.sm\:top-0{top:0}.sm\:right-0{right:0}.sm\:bottom-0{bottom:0}.sm\:left-0{left:0}.sm\:top-auto{top:auto}.sm\:right-auto{right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-auto{left:auto}.sm\:resize-none{resize:none}.sm\:resize-y{resize:vertical}.sm\:resize-x{resize:horizontal}.sm\:resize{resize:both}.sm\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.sm\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:shadow-none{box-shadow:none}.sm\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.sm\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:hover\:shadow-none:hover{box-shadow:none}.sm\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.sm\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.sm\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.sm\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.sm\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.sm\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.sm\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.sm\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.sm\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.sm\:focus\:shadow-none:focus{box-shadow:none}.sm\:fill-current{fill:currentColor}.sm\:stroke-current{stroke:currentColor}.sm\:stroke-0{stroke-width:0}.sm\:stroke-1{stroke-width:1}.sm\:stroke-2{stroke-width:2}.sm\:table-auto{table-layout:auto}.sm\:table-fixed{table-layout:fixed}.sm\:text-left{text-align:left}.sm\:text-center{text-align:center}.sm\:text-right{text-align:right}.sm\:text-justify{text-align:justify}.sm\:text-transparent{color:transparent}.sm\:text-current{color:currentColor}.sm\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.sm\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.sm\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.sm\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.sm\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.sm\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.sm\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.sm\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.sm\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.sm\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.sm\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.sm\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.sm\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.sm\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.sm\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.sm\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.sm\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.sm\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.sm\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.sm\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.sm\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.sm\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.sm\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.sm\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.sm\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.sm\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.sm\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.sm\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.sm\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.sm\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.sm\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.sm\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.sm\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.sm\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.sm\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.sm\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.sm\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.sm\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.sm\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.sm\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.sm\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.sm\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.sm\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.sm\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.sm\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.sm\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.sm\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.sm\:hover\:text-transparent:hover{color:transparent}.sm\:hover\:text-current:hover{color:currentColor}.sm\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.sm\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.sm\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.sm\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.sm\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.sm\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.sm\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.sm\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.sm\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.sm\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.sm\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.sm\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.sm\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.sm\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.sm\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.sm\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.sm\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.sm\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.sm\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.sm\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.sm\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.sm\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.sm\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.sm\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.sm\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.sm\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.sm\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.sm\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.sm\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.sm\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.sm\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.sm\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.sm\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.sm\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.sm\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.sm\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.sm\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.sm\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.sm\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.sm\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.sm\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.sm\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.sm\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.sm\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.sm\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.sm\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.sm\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.sm\:focus\:text-transparent:focus{color:transparent}.sm\:focus\:text-current:focus{color:currentColor}.sm\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.sm\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.sm\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.sm\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.sm\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.sm\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.sm\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.sm\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.sm\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.sm\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.sm\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.sm\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.sm\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.sm\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.sm\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.sm\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.sm\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.sm\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.sm\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.sm\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.sm\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.sm\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.sm\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.sm\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.sm\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.sm\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.sm\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.sm\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.sm\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.sm\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.sm\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.sm\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.sm\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.sm\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.sm\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.sm\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.sm\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.sm\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.sm\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.sm\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.sm\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.sm\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.sm\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.sm\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.sm\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.sm\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.sm\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.sm\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.sm\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.sm\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.sm\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.sm\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.sm\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.sm\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.sm\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.sm\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.sm\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.sm\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.sm\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.sm\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.sm\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.sm\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.sm\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.sm\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.sm\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.sm\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.sm\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.sm\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.sm\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.sm\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.sm\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.sm\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.sm\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.sm\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.sm\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.sm\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.sm\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.sm\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.sm\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.sm\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.sm\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.sm\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.sm\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.sm\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.sm\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.sm\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.sm\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.sm\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.sm\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.sm\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.sm\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.sm\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.sm\:text-opacity-0{--text-opacity:0}.sm\:text-opacity-25{--text-opacity:0.25}.sm\:text-opacity-50{--text-opacity:0.5}.sm\:text-opacity-75{--text-opacity:0.75}.sm\:text-opacity-100{--text-opacity:1}.sm\:hover\:text-opacity-0:hover{--text-opacity:0}.sm\:hover\:text-opacity-25:hover{--text-opacity:0.25}.sm\:hover\:text-opacity-50:hover{--text-opacity:0.5}.sm\:hover\:text-opacity-75:hover{--text-opacity:0.75}.sm\:hover\:text-opacity-100:hover{--text-opacity:1}.sm\:focus\:text-opacity-0:focus{--text-opacity:0}.sm\:focus\:text-opacity-25:focus{--text-opacity:0.25}.sm\:focus\:text-opacity-50:focus{--text-opacity:0.5}.sm\:focus\:text-opacity-75:focus{--text-opacity:0.75}.sm\:focus\:text-opacity-100:focus{--text-opacity:1}.sm\:italic{font-style:italic}.sm\:not-italic{font-style:normal}.sm\:uppercase{text-transform:uppercase}.sm\:lowercase{text-transform:lowercase}.sm\:capitalize{text-transform:capitalize}.sm\:normal-case{text-transform:none}.sm\:underline{text-decoration:underline}.sm\:line-through{text-decoration:line-through}.sm\:no-underline{text-decoration:none}.sm\:hover\:underline:hover{text-decoration:underline}.sm\:hover\:line-through:hover{text-decoration:line-through}.sm\:hover\:no-underline:hover{text-decoration:none}.sm\:focus\:underline:focus{text-decoration:underline}.sm\:focus\:line-through:focus{text-decoration:line-through}.sm\:focus\:no-underline:focus{text-decoration:none}.sm\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sm\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.sm\:diagonal-fractions,.sm\:lining-nums,.sm\:oldstyle-nums,.sm\:ordinal,.sm\:proportional-nums,.sm\:slashed-zero,.sm\:stacked-fractions,.sm\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.sm\:normal-nums{font-variant-numeric:normal}.sm\:ordinal{--font-variant-numeric-ordinal:ordinal}.sm\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.sm\:lining-nums{--font-variant-numeric-figure:lining-nums}.sm\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.sm\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.sm\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.sm\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.sm\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.sm\:tracking-tighter{letter-spacing:-.05em}.sm\:tracking-tight{letter-spacing:-.025em}.sm\:tracking-normal{letter-spacing:0}.sm\:tracking-wide{letter-spacing:.025em}.sm\:tracking-wider{letter-spacing:.05em}.sm\:tracking-widest{letter-spacing:.1em}.sm\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.sm\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.sm\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.sm\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.sm\:align-baseline{vertical-align:baseline}.sm\:align-top{vertical-align:top}.sm\:align-middle{vertical-align:middle}.sm\:align-bottom{vertical-align:bottom}.sm\:align-text-top{vertical-align:text-top}.sm\:align-text-bottom{vertical-align:text-bottom}.sm\:visible{visibility:visible}.sm\:invisible{visibility:hidden}.sm\:whitespace-normal{white-space:normal}.sm\:whitespace-no-wrap{white-space:nowrap}.sm\:whitespace-pre{white-space:pre}.sm\:whitespace-pre-line{white-space:pre-line}.sm\:whitespace-pre-wrap{white-space:pre-wrap}.sm\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.sm\:break-words{word-wrap:break-word;overflow-wrap:break-word}.sm\:break-all{word-break:break-all}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-0{width:0}.sm\:w-1{width:.25rem}.sm\:w-2{width:.5rem}.sm\:w-3{width:.75rem}.sm\:w-4{width:1rem}.sm\:w-5{width:1.25rem}.sm\:w-6{width:1.5rem}.sm\:w-8{width:2rem}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-16{width:4rem}.sm\:w-20{width:5rem}.sm\:w-24{width:6rem}.sm\:w-32{width:8rem}.sm\:w-40{width:10rem}.sm\:w-48{width:12rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-auto{width:auto}.sm\:w-px{width:1px}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.333333%}.sm\:w-2\/3{width:66.666667%}.sm\:w-1\/4{width:25%}.sm\:w-2\/4{width:50%}.sm\:w-3\/4{width:75%}.sm\:w-1\/5{width:20%}.sm\:w-2\/5{width:40%}.sm\:w-3\/5{width:60%}.sm\:w-4\/5{width:80%}.sm\:w-1\/6{width:16.666667%}.sm\:w-2\/6{width:33.333333%}.sm\:w-3\/6{width:50%}.sm\:w-4\/6{width:66.666667%}.sm\:w-5\/6{width:83.333333%}.sm\:w-1\/12{width:8.333333%}.sm\:w-2\/12{width:16.666667%}.sm\:w-3\/12{width:25%}.sm\:w-4\/12{width:33.333333%}.sm\:w-5\/12{width:41.666667%}.sm\:w-6\/12{width:50%}.sm\:w-7\/12{width:58.333333%}.sm\:w-8\/12{width:66.666667%}.sm\:w-9\/12{width:75%}.sm\:w-10\/12{width:83.333333%}.sm\:w-11\/12{width:91.666667%}.sm\:w-full{width:100%}.sm\:w-screen{width:100vw}.sm\:z-0{z-index:0}.sm\:z-10{z-index:10}.sm\:z-20{z-index:20}.sm\:z-30{z-index:30}.sm\:z-40{z-index:40}.sm\:z-50{z-index:50}.sm\:z-auto{z-index:auto}.sm\:gap-0{grid-gap:0;gap:0}.sm\:gap-1{grid-gap:.25rem;gap:.25rem}.sm\:gap-2{grid-gap:.5rem;gap:.5rem}.sm\:gap-3{grid-gap:.75rem;gap:.75rem}.sm\:gap-4{grid-gap:1rem;gap:1rem}.sm\:gap-5{grid-gap:1.25rem;gap:1.25rem}.sm\:gap-6{grid-gap:1.5rem;gap:1.5rem}.sm\:gap-8{grid-gap:2rem;gap:2rem}.sm\:gap-10{grid-gap:2.5rem;gap:2.5rem}.sm\:gap-12{grid-gap:3rem;gap:3rem}.sm\:gap-16{grid-gap:4rem;gap:4rem}.sm\:gap-20{grid-gap:5rem;gap:5rem}.sm\:gap-24{grid-gap:6rem;gap:6rem}.sm\:gap-32{grid-gap:8rem;gap:8rem}.sm\:gap-40{grid-gap:10rem;gap:10rem}.sm\:gap-48{grid-gap:12rem;gap:12rem}.sm\:gap-56{grid-gap:14rem;gap:14rem}.sm\:gap-64{grid-gap:16rem;gap:16rem}.sm\:gap-px{grid-gap:1px;gap:1px}.sm\:col-gap-0{grid-column-gap:0;column-gap:0}.sm\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.sm\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.sm\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.sm\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.sm\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.sm\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.sm\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.sm\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.sm\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.sm\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.sm\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.sm\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.sm\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.sm\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.sm\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.sm\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.sm\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.sm\:col-gap-px{grid-column-gap:1px;column-gap:1px}.sm\:gap-x-0{grid-column-gap:0;column-gap:0}.sm\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.sm\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.sm\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.sm\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.sm\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.sm\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.sm\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.sm\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.sm\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.sm\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.sm\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.sm\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.sm\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.sm\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.sm\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.sm\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.sm\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.sm\:gap-x-px{grid-column-gap:1px;column-gap:1px}.sm\:row-gap-0{grid-row-gap:0;row-gap:0}.sm\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.sm\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.sm\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.sm\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.sm\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.sm\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.sm\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.sm\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.sm\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.sm\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.sm\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.sm\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.sm\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.sm\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.sm\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.sm\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.sm\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.sm\:row-gap-px{grid-row-gap:1px;row-gap:1px}.sm\:gap-y-0{grid-row-gap:0;row-gap:0}.sm\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.sm\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.sm\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.sm\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.sm\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.sm\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.sm\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.sm\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.sm\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.sm\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.sm\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.sm\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.sm\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.sm\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.sm\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.sm\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.sm\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.sm\:gap-y-px{grid-row-gap:1px;row-gap:1px}.sm\:grid-flow-row{grid-auto-flow:row}.sm\:grid-flow-col{grid-auto-flow:column}.sm\:grid-flow-row-dense{grid-auto-flow:row dense}.sm\:grid-flow-col-dense{grid-auto-flow:column dense}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.sm\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.sm\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.sm\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.sm\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.sm\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.sm\:grid-cols-none{grid-template-columns:none}.sm\:auto-cols-auto{grid-auto-columns:auto}.sm\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.sm\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.sm\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.sm\:col-auto{grid-column:auto}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-7{grid-column:span 7/span 7}.sm\:col-span-8{grid-column:span 8/span 8}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:col-span-10{grid-column:span 10/span 10}.sm\:col-span-11{grid-column:span 11/span 11}.sm\:col-span-12{grid-column:span 12/span 12}.sm\:col-span-full{grid-column:1/-1}.sm\:col-start-1{grid-column-start:1}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-3{grid-column-start:3}.sm\:col-start-4{grid-column-start:4}.sm\:col-start-5{grid-column-start:5}.sm\:col-start-6{grid-column-start:6}.sm\:col-start-7{grid-column-start:7}.sm\:col-start-8{grid-column-start:8}.sm\:col-start-9{grid-column-start:9}.sm\:col-start-10{grid-column-start:10}.sm\:col-start-11{grid-column-start:11}.sm\:col-start-12{grid-column-start:12}.sm\:col-start-13{grid-column-start:13}.sm\:col-start-auto{grid-column-start:auto}.sm\:col-end-1{grid-column-end:1}.sm\:col-end-2{grid-column-end:2}.sm\:col-end-3{grid-column-end:3}.sm\:col-end-4{grid-column-end:4}.sm\:col-end-5{grid-column-end:5}.sm\:col-end-6{grid-column-end:6}.sm\:col-end-7{grid-column-end:7}.sm\:col-end-8{grid-column-end:8}.sm\:col-end-9{grid-column-end:9}.sm\:col-end-10{grid-column-end:10}.sm\:col-end-11{grid-column-end:11}.sm\:col-end-12{grid-column-end:12}.sm\:col-end-13{grid-column-end:13}.sm\:col-end-auto{grid-column-end:auto}.sm\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.sm\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.sm\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.sm\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.sm\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.sm\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.sm\:grid-rows-none{grid-template-rows:none}.sm\:auto-rows-auto{grid-auto-rows:auto}.sm\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.sm\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.sm\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.sm\:row-auto{grid-row:auto}.sm\:row-span-1{grid-row:span 1/span 1}.sm\:row-span-2{grid-row:span 2/span 2}.sm\:row-span-3{grid-row:span 3/span 3}.sm\:row-span-4{grid-row:span 4/span 4}.sm\:row-span-5{grid-row:span 5/span 5}.sm\:row-span-6{grid-row:span 6/span 6}.sm\:row-span-full{grid-row:1/-1}.sm\:row-start-1{grid-row-start:1}.sm\:row-start-2{grid-row-start:2}.sm\:row-start-3{grid-row-start:3}.sm\:row-start-4{grid-row-start:4}.sm\:row-start-5{grid-row-start:5}.sm\:row-start-6{grid-row-start:6}.sm\:row-start-7{grid-row-start:7}.sm\:row-start-auto{grid-row-start:auto}.sm\:row-end-1{grid-row-end:1}.sm\:row-end-2{grid-row-end:2}.sm\:row-end-3{grid-row-end:3}.sm\:row-end-4{grid-row-end:4}.sm\:row-end-5{grid-row-end:5}.sm\:row-end-6{grid-row-end:6}.sm\:row-end-7{grid-row-end:7}.sm\:row-end-auto{grid-row-end:auto}.sm\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.sm\:transform-none{transform:none}.sm\:origin-center{transform-origin:center}.sm\:origin-top{transform-origin:top}.sm\:origin-top-right{transform-origin:top right}.sm\:origin-right{transform-origin:right}.sm\:origin-bottom-right{transform-origin:bottom right}.sm\:origin-bottom{transform-origin:bottom}.sm\:origin-bottom-left{transform-origin:bottom left}.sm\:origin-left{transform-origin:left}.sm\:origin-top-left{transform-origin:top left}.sm\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.sm\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.sm\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:scale-x-0{--transform-scale-x:0}.sm\:scale-x-50{--transform-scale-x:.5}.sm\:scale-x-75{--transform-scale-x:.75}.sm\:scale-x-90{--transform-scale-x:.9}.sm\:scale-x-95{--transform-scale-x:.95}.sm\:scale-x-100{--transform-scale-x:1}.sm\:scale-x-105{--transform-scale-x:1.05}.sm\:scale-x-110{--transform-scale-x:1.1}.sm\:scale-x-125{--transform-scale-x:1.25}.sm\:scale-x-150{--transform-scale-x:1.5}.sm\:scale-y-0{--transform-scale-y:0}.sm\:scale-y-50{--transform-scale-y:.5}.sm\:scale-y-75{--transform-scale-y:.75}.sm\:scale-y-90{--transform-scale-y:.9}.sm\:scale-y-95{--transform-scale-y:.95}.sm\:scale-y-100{--transform-scale-y:1}.sm\:scale-y-105{--transform-scale-y:1.05}.sm\:scale-y-110{--transform-scale-y:1.1}.sm\:scale-y-125{--transform-scale-y:1.25}.sm\:scale-y-150{--transform-scale-y:1.5}.sm\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.sm\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.sm\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:hover\:scale-x-0:hover{--transform-scale-x:0}.sm\:hover\:scale-x-50:hover{--transform-scale-x:.5}.sm\:hover\:scale-x-75:hover{--transform-scale-x:.75}.sm\:hover\:scale-x-90:hover{--transform-scale-x:.9}.sm\:hover\:scale-x-95:hover{--transform-scale-x:.95}.sm\:hover\:scale-x-100:hover{--transform-scale-x:1}.sm\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.sm\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.sm\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.sm\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.sm\:hover\:scale-y-0:hover{--transform-scale-y:0}.sm\:hover\:scale-y-50:hover{--transform-scale-y:.5}.sm\:hover\:scale-y-75:hover{--transform-scale-y:.75}.sm\:hover\:scale-y-90:hover{--transform-scale-y:.9}.sm\:hover\:scale-y-95:hover{--transform-scale-y:.95}.sm\:hover\:scale-y-100:hover{--transform-scale-y:1}.sm\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.sm\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.sm\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.sm\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.sm\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.sm\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.sm\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.sm\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.sm\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.sm\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.sm\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.sm\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.sm\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.sm\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.sm\:focus\:scale-x-0:focus{--transform-scale-x:0}.sm\:focus\:scale-x-50:focus{--transform-scale-x:.5}.sm\:focus\:scale-x-75:focus{--transform-scale-x:.75}.sm\:focus\:scale-x-90:focus{--transform-scale-x:.9}.sm\:focus\:scale-x-95:focus{--transform-scale-x:.95}.sm\:focus\:scale-x-100:focus{--transform-scale-x:1}.sm\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.sm\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.sm\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.sm\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.sm\:focus\:scale-y-0:focus{--transform-scale-y:0}.sm\:focus\:scale-y-50:focus{--transform-scale-y:.5}.sm\:focus\:scale-y-75:focus{--transform-scale-y:.75}.sm\:focus\:scale-y-90:focus{--transform-scale-y:.9}.sm\:focus\:scale-y-95:focus{--transform-scale-y:.95}.sm\:focus\:scale-y-100:focus{--transform-scale-y:1}.sm\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.sm\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.sm\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.sm\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.sm\:rotate-0{--transform-rotate:0}.sm\:rotate-1{--transform-rotate:1deg}.sm\:rotate-2{--transform-rotate:2deg}.sm\:rotate-3{--transform-rotate:3deg}.sm\:rotate-6{--transform-rotate:6deg}.sm\:rotate-12{--transform-rotate:12deg}.sm\:rotate-45{--transform-rotate:45deg}.sm\:rotate-90{--transform-rotate:90deg}.sm\:rotate-180{--transform-rotate:180deg}.sm\:-rotate-180{--transform-rotate:-180deg}.sm\:-rotate-90{--transform-rotate:-90deg}.sm\:-rotate-45{--transform-rotate:-45deg}.sm\:-rotate-12{--transform-rotate:-12deg}.sm\:-rotate-6{--transform-rotate:-6deg}.sm\:-rotate-3{--transform-rotate:-3deg}.sm\:-rotate-2{--transform-rotate:-2deg}.sm\:-rotate-1{--transform-rotate:-1deg}.sm\:hover\:rotate-0:hover{--transform-rotate:0}.sm\:hover\:rotate-1:hover{--transform-rotate:1deg}.sm\:hover\:rotate-2:hover{--transform-rotate:2deg}.sm\:hover\:rotate-3:hover{--transform-rotate:3deg}.sm\:hover\:rotate-6:hover{--transform-rotate:6deg}.sm\:hover\:rotate-12:hover{--transform-rotate:12deg}.sm\:hover\:rotate-45:hover{--transform-rotate:45deg}.sm\:hover\:rotate-90:hover{--transform-rotate:90deg}.sm\:hover\:rotate-180:hover{--transform-rotate:180deg}.sm\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.sm\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.sm\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.sm\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.sm\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.sm\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.sm\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.sm\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.sm\:focus\:rotate-0:focus{--transform-rotate:0}.sm\:focus\:rotate-1:focus{--transform-rotate:1deg}.sm\:focus\:rotate-2:focus{--transform-rotate:2deg}.sm\:focus\:rotate-3:focus{--transform-rotate:3deg}.sm\:focus\:rotate-6:focus{--transform-rotate:6deg}.sm\:focus\:rotate-12:focus{--transform-rotate:12deg}.sm\:focus\:rotate-45:focus{--transform-rotate:45deg}.sm\:focus\:rotate-90:focus{--transform-rotate:90deg}.sm\:focus\:rotate-180:focus{--transform-rotate:180deg}.sm\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.sm\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.sm\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.sm\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.sm\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.sm\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.sm\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.sm\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.sm\:translate-x-0{--transform-translate-x:0}.sm\:translate-x-1{--transform-translate-x:0.25rem}.sm\:translate-x-2{--transform-translate-x:0.5rem}.sm\:translate-x-3{--transform-translate-x:0.75rem}.sm\:translate-x-4{--transform-translate-x:1rem}.sm\:translate-x-5{--transform-translate-x:1.25rem}.sm\:translate-x-6{--transform-translate-x:1.5rem}.sm\:translate-x-8{--transform-translate-x:2rem}.sm\:translate-x-10{--transform-translate-x:2.5rem}.sm\:translate-x-12{--transform-translate-x:3rem}.sm\:translate-x-16{--transform-translate-x:4rem}.sm\:translate-x-20{--transform-translate-x:5rem}.sm\:translate-x-24{--transform-translate-x:6rem}.sm\:translate-x-32{--transform-translate-x:8rem}.sm\:translate-x-40{--transform-translate-x:10rem}.sm\:translate-x-48{--transform-translate-x:12rem}.sm\:translate-x-56{--transform-translate-x:14rem}.sm\:translate-x-64{--transform-translate-x:16rem}.sm\:translate-x-px{--transform-translate-x:1px}.sm\:-translate-x-1{--transform-translate-x:-0.25rem}.sm\:-translate-x-2{--transform-translate-x:-0.5rem}.sm\:-translate-x-3{--transform-translate-x:-0.75rem}.sm\:-translate-x-4{--transform-translate-x:-1rem}.sm\:-translate-x-5{--transform-translate-x:-1.25rem}.sm\:-translate-x-6{--transform-translate-x:-1.5rem}.sm\:-translate-x-8{--transform-translate-x:-2rem}.sm\:-translate-x-10{--transform-translate-x:-2.5rem}.sm\:-translate-x-12{--transform-translate-x:-3rem}.sm\:-translate-x-16{--transform-translate-x:-4rem}.sm\:-translate-x-20{--transform-translate-x:-5rem}.sm\:-translate-x-24{--transform-translate-x:-6rem}.sm\:-translate-x-32{--transform-translate-x:-8rem}.sm\:-translate-x-40{--transform-translate-x:-10rem}.sm\:-translate-x-48{--transform-translate-x:-12rem}.sm\:-translate-x-56{--transform-translate-x:-14rem}.sm\:-translate-x-64{--transform-translate-x:-16rem}.sm\:-translate-x-px{--transform-translate-x:-1px}.sm\:-translate-x-full{--transform-translate-x:-100%}.sm\:-translate-x-1\/2{--transform-translate-x:-50%}.sm\:translate-x-1\/2{--transform-translate-x:50%}.sm\:translate-x-full{--transform-translate-x:100%}.sm\:translate-y-0{--transform-translate-y:0}.sm\:translate-y-1{--transform-translate-y:0.25rem}.sm\:translate-y-2{--transform-translate-y:0.5rem}.sm\:translate-y-3{--transform-translate-y:0.75rem}.sm\:translate-y-4{--transform-translate-y:1rem}.sm\:translate-y-5{--transform-translate-y:1.25rem}.sm\:translate-y-6{--transform-translate-y:1.5rem}.sm\:translate-y-8{--transform-translate-y:2rem}.sm\:translate-y-10{--transform-translate-y:2.5rem}.sm\:translate-y-12{--transform-translate-y:3rem}.sm\:translate-y-16{--transform-translate-y:4rem}.sm\:translate-y-20{--transform-translate-y:5rem}.sm\:translate-y-24{--transform-translate-y:6rem}.sm\:translate-y-32{--transform-translate-y:8rem}.sm\:translate-y-40{--transform-translate-y:10rem}.sm\:translate-y-48{--transform-translate-y:12rem}.sm\:translate-y-56{--transform-translate-y:14rem}.sm\:translate-y-64{--transform-translate-y:16rem}.sm\:translate-y-px{--transform-translate-y:1px}.sm\:-translate-y-1{--transform-translate-y:-0.25rem}.sm\:-translate-y-2{--transform-translate-y:-0.5rem}.sm\:-translate-y-3{--transform-translate-y:-0.75rem}.sm\:-translate-y-4{--transform-translate-y:-1rem}.sm\:-translate-y-5{--transform-translate-y:-1.25rem}.sm\:-translate-y-6{--transform-translate-y:-1.5rem}.sm\:-translate-y-8{--transform-translate-y:-2rem}.sm\:-translate-y-10{--transform-translate-y:-2.5rem}.sm\:-translate-y-12{--transform-translate-y:-3rem}.sm\:-translate-y-16{--transform-translate-y:-4rem}.sm\:-translate-y-20{--transform-translate-y:-5rem}.sm\:-translate-y-24{--transform-translate-y:-6rem}.sm\:-translate-y-32{--transform-translate-y:-8rem}.sm\:-translate-y-40{--transform-translate-y:-10rem}.sm\:-translate-y-48{--transform-translate-y:-12rem}.sm\:-translate-y-56{--transform-translate-y:-14rem}.sm\:-translate-y-64{--transform-translate-y:-16rem}.sm\:-translate-y-px{--transform-translate-y:-1px}.sm\:-translate-y-full{--transform-translate-y:-100%}.sm\:-translate-y-1\/2{--transform-translate-y:-50%}.sm\:translate-y-1\/2{--transform-translate-y:50%}.sm\:translate-y-full{--transform-translate-y:100%}.sm\:hover\:translate-x-0:hover{--transform-translate-x:0}.sm\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.sm\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.sm\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.sm\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.sm\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.sm\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.sm\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.sm\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.sm\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.sm\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.sm\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.sm\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.sm\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.sm\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.sm\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.sm\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.sm\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.sm\:hover\:translate-x-px:hover{--transform-translate-x:1px}.sm\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.sm\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.sm\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.sm\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.sm\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.sm\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.sm\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.sm\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.sm\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.sm\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.sm\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.sm\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.sm\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.sm\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.sm\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.sm\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.sm\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.sm\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.sm\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.sm\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.sm\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.sm\:hover\:translate-x-full:hover{--transform-translate-x:100%}.sm\:hover\:translate-y-0:hover{--transform-translate-y:0}.sm\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.sm\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.sm\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.sm\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.sm\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.sm\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.sm\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.sm\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.sm\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.sm\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.sm\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.sm\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.sm\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.sm\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.sm\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.sm\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.sm\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.sm\:hover\:translate-y-px:hover{--transform-translate-y:1px}.sm\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.sm\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.sm\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.sm\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.sm\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.sm\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.sm\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.sm\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.sm\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.sm\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.sm\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.sm\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.sm\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.sm\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.sm\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.sm\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.sm\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.sm\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.sm\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.sm\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.sm\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.sm\:hover\:translate-y-full:hover{--transform-translate-y:100%}.sm\:focus\:translate-x-0:focus{--transform-translate-x:0}.sm\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.sm\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.sm\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.sm\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.sm\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.sm\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.sm\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.sm\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.sm\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.sm\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.sm\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.sm\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.sm\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.sm\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.sm\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.sm\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.sm\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.sm\:focus\:translate-x-px:focus{--transform-translate-x:1px}.sm\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.sm\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.sm\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.sm\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.sm\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.sm\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.sm\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.sm\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.sm\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.sm\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.sm\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.sm\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.sm\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.sm\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.sm\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.sm\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.sm\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.sm\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.sm\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.sm\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.sm\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.sm\:focus\:translate-x-full:focus{--transform-translate-x:100%}.sm\:focus\:translate-y-0:focus{--transform-translate-y:0}.sm\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.sm\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.sm\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.sm\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.sm\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.sm\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.sm\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.sm\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.sm\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.sm\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.sm\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.sm\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.sm\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.sm\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.sm\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.sm\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.sm\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.sm\:focus\:translate-y-px:focus{--transform-translate-y:1px}.sm\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.sm\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.sm\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.sm\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.sm\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.sm\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.sm\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.sm\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.sm\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.sm\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.sm\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.sm\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.sm\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.sm\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.sm\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.sm\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.sm\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.sm\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.sm\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.sm\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.sm\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.sm\:focus\:translate-y-full:focus{--transform-translate-y:100%}.sm\:skew-x-0{--transform-skew-x:0}.sm\:skew-x-1{--transform-skew-x:1deg}.sm\:skew-x-2{--transform-skew-x:2deg}.sm\:skew-x-3{--transform-skew-x:3deg}.sm\:skew-x-6{--transform-skew-x:6deg}.sm\:skew-x-12{--transform-skew-x:12deg}.sm\:-skew-x-12{--transform-skew-x:-12deg}.sm\:-skew-x-6{--transform-skew-x:-6deg}.sm\:-skew-x-3{--transform-skew-x:-3deg}.sm\:-skew-x-2{--transform-skew-x:-2deg}.sm\:-skew-x-1{--transform-skew-x:-1deg}.sm\:skew-y-0{--transform-skew-y:0}.sm\:skew-y-1{--transform-skew-y:1deg}.sm\:skew-y-2{--transform-skew-y:2deg}.sm\:skew-y-3{--transform-skew-y:3deg}.sm\:skew-y-6{--transform-skew-y:6deg}.sm\:skew-y-12{--transform-skew-y:12deg}.sm\:-skew-y-12{--transform-skew-y:-12deg}.sm\:-skew-y-6{--transform-skew-y:-6deg}.sm\:-skew-y-3{--transform-skew-y:-3deg}.sm\:-skew-y-2{--transform-skew-y:-2deg}.sm\:-skew-y-1{--transform-skew-y:-1deg}.sm\:hover\:skew-x-0:hover{--transform-skew-x:0}.sm\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.sm\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.sm\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.sm\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.sm\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.sm\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.sm\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.sm\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.sm\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.sm\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.sm\:hover\:skew-y-0:hover{--transform-skew-y:0}.sm\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.sm\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.sm\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.sm\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.sm\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.sm\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.sm\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.sm\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.sm\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.sm\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.sm\:focus\:skew-x-0:focus{--transform-skew-x:0}.sm\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.sm\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.sm\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.sm\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.sm\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.sm\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.sm\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.sm\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.sm\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.sm\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.sm\:focus\:skew-y-0:focus{--transform-skew-y:0}.sm\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.sm\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.sm\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.sm\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.sm\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.sm\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.sm\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.sm\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.sm\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.sm\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.sm\:transition-none{transition-property:none}.sm\:transition-all{transition-property:all}.sm\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.sm\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.sm\:transition-opacity{transition-property:opacity}.sm\:transition-shadow{transition-property:box-shadow}.sm\:transition-transform{transition-property:transform}.sm\:ease-linear{transition-timing-function:linear}.sm\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.sm\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.sm\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.sm\:duration-75{transition-duration:75ms}.sm\:duration-100{transition-duration:.1s}.sm\:duration-150{transition-duration:150ms}.sm\:duration-200{transition-duration:.2s}.sm\:duration-300{transition-duration:.3s}.sm\:duration-500{transition-duration:.5s}.sm\:duration-700{transition-duration:.7s}.sm\:duration-1000{transition-duration:1s}.sm\:delay-75{transition-delay:75ms}.sm\:delay-100{transition-delay:.1s}.sm\:delay-150{transition-delay:150ms}.sm\:delay-200{transition-delay:.2s}.sm\:delay-300{transition-delay:.3s}.sm\:delay-500{transition-delay:.5s}.sm\:delay-700{transition-delay:.7s}.sm\:delay-1000{transition-delay:1s}.sm\:animate-none{animation:none}.sm\:animate-spin{animation:spin 1s linear infinite}.sm\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.sm\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.sm\:animate-bounce{animation:bounce 1s infinite}}@media (min-width:768px){.md\:container{width:100%}@media (min-width:640px){.md\:container{max-width:640px}}@media (min-width:768px){.md\:container{max-width:768px}}@media (min-width:1024px){.md\:container{max-width:1024px}}@media (min-width:1280px){.md\:container{max-width:1280px}}.md\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.md\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.md\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.md\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.md\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.md\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.md\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.md\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.md\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.md\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.md\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.md\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.md\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.md\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.md\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.md\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.md\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.md\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.md\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.md\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.md\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.md\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.md\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.md\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.md\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.md\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.md\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.md\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.md\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.md\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.md\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.md\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.md\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.md\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.md\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.md\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.md\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.md\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.md\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.md\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.md\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.md\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.md\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.md\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.md\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.md\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.md\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.md\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.md\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.md\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.md\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.md\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.md\:divide-transparent>:not(template)~:not(template){border-color:transparent}.md\:divide-current>:not(template)~:not(template){border-color:currentColor}.md\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.md\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.md\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.md\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.md\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.md\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.md\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.md\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.md\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.md\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.md\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.md\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.md\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.md\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.md\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.md\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.md\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.md\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.md\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.md\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.md\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.md\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.md\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.md\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.md\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.md\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.md\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.md\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.md\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.md\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.md\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.md\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.md\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.md\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.md\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.md\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.md\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.md\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.md\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.md\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.md\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.md\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.md\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.md\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.md\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.md\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.md\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.md\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.md\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.md\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.md\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.md\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.md\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.md\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.md\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.md\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.md\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.md\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.md\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.md\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.md\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.md\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.md\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.md\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.md\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.md\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.md\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.md\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.md\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.md\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.md\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.md\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.md\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.md\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.md\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.md\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.md\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.md\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.md\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.md\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.md\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.md\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.md\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.md\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.md\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.md\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.md\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.md\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.md\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.md\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.md\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.md\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.md\:divide-solid>:not(template)~:not(template){border-style:solid}.md\:divide-dashed>:not(template)~:not(template){border-style:dashed}.md\:divide-dotted>:not(template)~:not(template){border-style:dotted}.md\:divide-double>:not(template)~:not(template){border-style:double}.md\:divide-none>:not(template)~:not(template){border-style:none}.md\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.md\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.md\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.md\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.md\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.md\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.md\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.md\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.md\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.md\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.md\:bg-fixed{background-attachment:fixed}.md\:bg-local{background-attachment:local}.md\:bg-scroll{background-attachment:scroll}.md\:bg-clip-border{background-clip:border-box}.md\:bg-clip-padding{background-clip:padding-box}.md\:bg-clip-content{background-clip:content-box}.md\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.md\:bg-transparent{background-color:transparent}.md\:bg-current{background-color:currentColor}.md\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.md\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.md\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.md\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.md\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.md\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.md\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.md\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.md\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.md\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.md\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.md\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.md\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.md\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.md\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.md\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.md\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.md\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.md\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.md\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.md\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.md\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.md\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.md\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.md\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.md\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.md\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.md\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.md\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.md\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.md\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.md\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.md\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.md\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.md\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.md\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.md\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.md\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.md\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.md\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.md\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.md\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.md\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.md\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.md\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.md\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.md\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.md\:hover\:bg-transparent:hover{background-color:transparent}.md\:hover\:bg-current:hover{background-color:currentColor}.md\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.md\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.md\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.md\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.md\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.md\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.md\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.md\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.md\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.md\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.md\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.md\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.md\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.md\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.md\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.md\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.md\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.md\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.md\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.md\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.md\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.md\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.md\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.md\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.md\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.md\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.md\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.md\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.md\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.md\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.md\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.md\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.md\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.md\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.md\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.md\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.md\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.md\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.md\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.md\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.md\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.md\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.md\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.md\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.md\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.md\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.md\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.md\:focus\:bg-transparent:focus{background-color:transparent}.md\:focus\:bg-current:focus{background-color:currentColor}.md\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.md\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.md\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.md\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.md\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.md\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.md\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.md\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.md\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.md\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.md\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.md\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.md\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.md\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.md\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.md\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.md\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.md\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.md\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.md\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.md\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.md\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.md\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.md\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.md\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.md\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.md\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.md\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.md\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.md\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.md\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.md\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.md\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.md\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.md\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.md\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.md\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.md\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.md\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.md\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.md\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.md\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.md\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.md\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.md\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.md\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.md\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.md\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.md\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.md\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.md\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.md\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.md\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.md\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.md\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.md\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.md\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.md\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.md\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.md\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.md\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.md\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.md\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.md\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.md\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.md\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.md\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.md\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.md\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.md\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.md\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.md\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.md\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.md\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.md\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.md\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.md\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.md\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.md\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.md\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.md\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.md\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.md\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.md\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.md\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.md\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.md\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.md\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.md\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.md\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.md\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.md\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.md\:bg-none{background-image:none}.md\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.md\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.md\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.md\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.md\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.md\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.md\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.md\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.md\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:to-transparent{--gradient-to-color:transparent}.md\:to-current{--gradient-to-color:currentColor}.md\:to-black{--gradient-to-color:#000}.md\:to-white{--gradient-to-color:#fff}.md\:to-gray-100{--gradient-to-color:#f7fafc}.md\:to-gray-200{--gradient-to-color:#edf2f7}.md\:to-gray-300{--gradient-to-color:#e2e8f0}.md\:to-gray-400{--gradient-to-color:#cbd5e0}.md\:to-gray-500{--gradient-to-color:#a0aec0}.md\:to-gray-600{--gradient-to-color:#718096}.md\:to-gray-700{--gradient-to-color:#4a5568}.md\:to-gray-800{--gradient-to-color:#2d3748}.md\:to-gray-900{--gradient-to-color:#1a202c}.md\:to-red-100{--gradient-to-color:#fff5f5}.md\:to-red-200{--gradient-to-color:#fed7d7}.md\:to-red-300{--gradient-to-color:#feb2b2}.md\:to-red-400{--gradient-to-color:#fc8181}.md\:to-red-500{--gradient-to-color:#f56565}.md\:to-red-600{--gradient-to-color:#e53e3e}.md\:to-red-700{--gradient-to-color:#c53030}.md\:to-red-800{--gradient-to-color:#9b2c2c}.md\:to-red-900{--gradient-to-color:#742a2a}.md\:to-orange-100{--gradient-to-color:#fffaf0}.md\:to-orange-200{--gradient-to-color:#feebc8}.md\:to-orange-300{--gradient-to-color:#fbd38d}.md\:to-orange-400{--gradient-to-color:#f6ad55}.md\:to-orange-500{--gradient-to-color:#ed8936}.md\:to-orange-600{--gradient-to-color:#dd6b20}.md\:to-orange-700{--gradient-to-color:#c05621}.md\:to-orange-800{--gradient-to-color:#9c4221}.md\:to-orange-900{--gradient-to-color:#7b341e}.md\:to-yellow-100{--gradient-to-color:#fffff0}.md\:to-yellow-200{--gradient-to-color:#fefcbf}.md\:to-yellow-300{--gradient-to-color:#faf089}.md\:to-yellow-400{--gradient-to-color:#f6e05e}.md\:to-yellow-500{--gradient-to-color:#ecc94b}.md\:to-yellow-600{--gradient-to-color:#d69e2e}.md\:to-yellow-700{--gradient-to-color:#b7791f}.md\:to-yellow-800{--gradient-to-color:#975a16}.md\:to-yellow-900{--gradient-to-color:#744210}.md\:to-green-100{--gradient-to-color:#f0fff4}.md\:to-green-200{--gradient-to-color:#c6f6d5}.md\:to-green-300{--gradient-to-color:#9ae6b4}.md\:to-green-400{--gradient-to-color:#68d391}.md\:to-green-500{--gradient-to-color:#48bb78}.md\:to-green-600{--gradient-to-color:#38a169}.md\:to-green-700{--gradient-to-color:#2f855a}.md\:to-green-800{--gradient-to-color:#276749}.md\:to-green-900{--gradient-to-color:#22543d}.md\:to-teal-100{--gradient-to-color:#e6fffa}.md\:to-teal-200{--gradient-to-color:#b2f5ea}.md\:to-teal-300{--gradient-to-color:#81e6d9}.md\:to-teal-400{--gradient-to-color:#4fd1c5}.md\:to-teal-500{--gradient-to-color:#38b2ac}.md\:to-teal-600{--gradient-to-color:#319795}.md\:to-teal-700{--gradient-to-color:#2c7a7b}.md\:to-teal-800{--gradient-to-color:#285e61}.md\:to-teal-900{--gradient-to-color:#234e52}.md\:to-blue-100{--gradient-to-color:#ebf8ff}.md\:to-blue-200{--gradient-to-color:#bee3f8}.md\:to-blue-300{--gradient-to-color:#90cdf4}.md\:to-blue-400{--gradient-to-color:#63b3ed}.md\:to-blue-500{--gradient-to-color:#4299e1}.md\:to-blue-600{--gradient-to-color:#3182ce}.md\:to-blue-700{--gradient-to-color:#2b6cb0}.md\:to-blue-800{--gradient-to-color:#2c5282}.md\:to-blue-900{--gradient-to-color:#2a4365}.md\:to-indigo-100{--gradient-to-color:#ebf4ff}.md\:to-indigo-200{--gradient-to-color:#c3dafe}.md\:to-indigo-300{--gradient-to-color:#a3bffa}.md\:to-indigo-400{--gradient-to-color:#7f9cf5}.md\:to-indigo-500{--gradient-to-color:#667eea}.md\:to-indigo-600{--gradient-to-color:#5a67d8}.md\:to-indigo-700{--gradient-to-color:#4c51bf}.md\:to-indigo-800{--gradient-to-color:#434190}.md\:to-indigo-900{--gradient-to-color:#3c366b}.md\:to-purple-100{--gradient-to-color:#faf5ff}.md\:to-purple-200{--gradient-to-color:#e9d8fd}.md\:to-purple-300{--gradient-to-color:#d6bcfa}.md\:to-purple-400{--gradient-to-color:#b794f4}.md\:to-purple-500{--gradient-to-color:#9f7aea}.md\:to-purple-600{--gradient-to-color:#805ad5}.md\:to-purple-700{--gradient-to-color:#6b46c1}.md\:to-purple-800{--gradient-to-color:#553c9a}.md\:to-purple-900{--gradient-to-color:#44337a}.md\:to-pink-100{--gradient-to-color:#fff5f7}.md\:to-pink-200{--gradient-to-color:#fed7e2}.md\:to-pink-300{--gradient-to-color:#fbb6ce}.md\:to-pink-400{--gradient-to-color:#f687b3}.md\:to-pink-500{--gradient-to-color:#ed64a6}.md\:to-pink-600{--gradient-to-color:#d53f8c}.md\:to-pink-700{--gradient-to-color:#b83280}.md\:to-pink-800{--gradient-to-color:#97266d}.md\:to-pink-900{--gradient-to-color:#702459}.md\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:hover\:to-transparent:hover{--gradient-to-color:transparent}.md\:hover\:to-current:hover{--gradient-to-color:currentColor}.md\:hover\:to-black:hover{--gradient-to-color:#000}.md\:hover\:to-white:hover{--gradient-to-color:#fff}.md\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.md\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.md\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.md\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.md\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.md\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.md\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.md\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.md\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.md\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.md\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.md\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.md\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.md\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.md\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.md\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.md\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.md\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.md\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.md\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.md\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.md\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.md\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.md\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.md\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.md\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.md\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.md\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.md\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.md\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.md\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.md\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.md\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.md\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.md\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.md\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.md\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.md\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.md\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.md\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.md\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.md\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.md\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.md\:hover\:to-green-800:hover{--gradient-to-color:#276749}.md\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.md\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.md\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.md\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.md\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.md\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.md\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.md\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.md\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.md\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.md\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.md\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.md\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.md\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.md\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.md\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.md\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.md\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.md\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.md\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.md\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.md\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.md\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.md\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.md\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.md\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.md\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.md\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.md\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.md\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.md\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.md\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.md\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.md\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.md\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.md\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.md\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.md\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.md\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.md\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.md\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.md\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.md\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.md\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.md\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.md\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.md\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.md\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.md\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.md\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.md\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.md\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.md\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.md\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.md\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.md\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.md\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.md\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.md\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.md\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.md\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.md\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.md\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.md\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.md\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.md\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.md\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.md\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.md\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.md\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.md\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.md\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.md\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.md\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.md\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.md\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.md\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.md\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.md\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.md\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.md\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.md\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.md\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.md\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.md\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.md\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.md\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.md\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.md\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.md\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.md\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.md\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.md\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.md\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.md\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.md\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.md\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.md\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.md\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.md\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.md\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.md\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.md\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.md\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.md\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.md\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.md\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.md\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.md\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.md\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.md\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.md\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.md\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.md\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.md\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.md\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.md\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.md\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.md\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.md\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.md\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.md\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.md\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.md\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.md\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.md\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.md\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.md\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.md\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.md\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.md\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.md\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.md\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.md\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.md\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.md\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.md\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.md\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.md\:focus\:to-transparent:focus{--gradient-to-color:transparent}.md\:focus\:to-current:focus{--gradient-to-color:currentColor}.md\:focus\:to-black:focus{--gradient-to-color:#000}.md\:focus\:to-white:focus{--gradient-to-color:#fff}.md\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.md\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.md\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.md\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.md\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.md\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.md\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.md\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.md\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.md\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.md\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.md\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.md\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.md\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.md\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.md\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.md\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.md\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.md\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.md\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.md\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.md\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.md\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.md\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.md\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.md\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.md\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.md\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.md\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.md\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.md\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.md\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.md\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.md\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.md\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.md\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.md\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.md\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.md\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.md\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.md\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.md\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.md\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.md\:focus\:to-green-800:focus{--gradient-to-color:#276749}.md\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.md\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.md\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.md\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.md\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.md\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.md\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.md\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.md\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.md\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.md\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.md\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.md\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.md\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.md\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.md\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.md\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.md\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.md\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.md\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.md\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.md\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.md\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.md\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.md\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.md\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.md\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.md\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.md\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.md\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.md\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.md\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.md\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.md\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.md\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.md\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.md\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.md\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.md\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.md\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.md\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.md\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.md\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.md\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.md\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.md\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.md\:bg-opacity-0{--bg-opacity:0}.md\:bg-opacity-25{--bg-opacity:0.25}.md\:bg-opacity-50{--bg-opacity:0.5}.md\:bg-opacity-75{--bg-opacity:0.75}.md\:bg-opacity-100{--bg-opacity:1}.md\:hover\:bg-opacity-0:hover{--bg-opacity:0}.md\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.md\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.md\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.md\:hover\:bg-opacity-100:hover{--bg-opacity:1}.md\:focus\:bg-opacity-0:focus{--bg-opacity:0}.md\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.md\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.md\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.md\:focus\:bg-opacity-100:focus{--bg-opacity:1}.md\:bg-bottom{background-position:bottom}.md\:bg-center{background-position:center}.md\:bg-left{background-position:left}.md\:bg-left-bottom{background-position:left bottom}.md\:bg-left-top{background-position:left top}.md\:bg-right{background-position:right}.md\:bg-right-bottom{background-position:right bottom}.md\:bg-right-top{background-position:right top}.md\:bg-top{background-position:top}.md\:bg-repeat{background-repeat:repeat}.md\:bg-no-repeat{background-repeat:no-repeat}.md\:bg-repeat-x{background-repeat:repeat-x}.md\:bg-repeat-y{background-repeat:repeat-y}.md\:bg-repeat-round{background-repeat:round}.md\:bg-repeat-space{background-repeat:space}.md\:bg-auto{background-size:auto}.md\:bg-cover{background-size:cover}.md\:bg-contain{background-size:contain}.md\:border-collapse{border-collapse:collapse}.md\:border-separate{border-collapse:separate}.md\:border-transparent{border-color:transparent}.md\:border-current{border-color:currentColor}.md\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.md\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.md\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.md\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.md\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.md\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.md\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.md\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.md\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.md\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.md\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.md\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.md\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.md\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.md\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.md\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.md\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.md\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.md\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.md\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.md\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.md\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.md\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.md\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.md\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.md\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.md\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.md\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.md\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.md\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.md\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.md\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.md\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.md\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.md\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.md\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.md\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.md\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.md\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.md\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.md\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.md\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.md\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.md\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.md\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.md\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.md\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.md\:hover\:border-transparent:hover{border-color:transparent}.md\:hover\:border-current:hover{border-color:currentColor}.md\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.md\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.md\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.md\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.md\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.md\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.md\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.md\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.md\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.md\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.md\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.md\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.md\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.md\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.md\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.md\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.md\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.md\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.md\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.md\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.md\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.md\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.md\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.md\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.md\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.md\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.md\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.md\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.md\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.md\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.md\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.md\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.md\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.md\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.md\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.md\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.md\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.md\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.md\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.md\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.md\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.md\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.md\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.md\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.md\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.md\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.md\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.md\:focus\:border-transparent:focus{border-color:transparent}.md\:focus\:border-current:focus{border-color:currentColor}.md\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.md\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.md\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.md\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.md\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.md\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.md\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.md\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.md\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.md\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.md\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.md\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.md\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.md\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.md\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.md\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.md\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.md\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.md\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.md\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.md\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.md\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.md\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.md\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.md\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.md\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.md\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.md\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.md\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.md\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.md\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.md\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.md\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.md\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.md\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.md\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.md\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.md\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.md\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.md\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.md\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.md\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.md\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.md\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.md\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.md\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.md\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.md\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.md\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.md\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.md\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.md\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.md\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.md\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.md\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.md\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.md\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.md\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.md\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.md\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.md\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.md\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.md\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.md\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.md\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.md\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.md\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.md\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.md\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.md\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.md\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.md\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.md\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.md\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.md\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.md\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.md\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.md\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.md\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.md\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.md\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.md\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.md\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.md\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.md\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.md\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.md\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.md\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.md\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.md\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.md\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.md\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.md\:border-opacity-0{--border-opacity:0}.md\:border-opacity-25{--border-opacity:0.25}.md\:border-opacity-50{--border-opacity:0.5}.md\:border-opacity-75{--border-opacity:0.75}.md\:border-opacity-100{--border-opacity:1}.md\:hover\:border-opacity-0:hover{--border-opacity:0}.md\:hover\:border-opacity-25:hover{--border-opacity:0.25}.md\:hover\:border-opacity-50:hover{--border-opacity:0.5}.md\:hover\:border-opacity-75:hover{--border-opacity:0.75}.md\:hover\:border-opacity-100:hover{--border-opacity:1}.md\:focus\:border-opacity-0:focus{--border-opacity:0}.md\:focus\:border-opacity-25:focus{--border-opacity:0.25}.md\:focus\:border-opacity-50:focus{--border-opacity:0.5}.md\:focus\:border-opacity-75:focus{--border-opacity:0.75}.md\:focus\:border-opacity-100:focus{--border-opacity:1}.md\:rounded-none{border-radius:0}.md\:rounded-sm{border-radius:.125rem}.md\:rounded{border-radius:.25rem}.md\:rounded-md{border-radius:.375rem}.md\:rounded-lg{border-radius:.5rem}.md\:rounded-xl{border-radius:.75rem}.md\:rounded-2xl{border-radius:1rem}.md\:rounded-3xl{border-radius:1.5rem}.md\:rounded-full{border-radius:9999px}.md\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.md\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.md\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.md\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.md\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.md\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.md\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.md\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.md\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.md\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.md\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.md\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.md\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.md\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.md\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.md\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.md\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.md\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.md\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.md\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.md\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.md\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.md\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.md\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.md\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.md\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.md\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.md\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.md\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.md\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.md\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.md\:rounded-tl-none{border-top-left-radius:0}.md\:rounded-tr-none{border-top-right-radius:0}.md\:rounded-br-none{border-bottom-right-radius:0}.md\:rounded-bl-none{border-bottom-left-radius:0}.md\:rounded-tl-sm{border-top-left-radius:.125rem}.md\:rounded-tr-sm{border-top-right-radius:.125rem}.md\:rounded-br-sm{border-bottom-right-radius:.125rem}.md\:rounded-bl-sm{border-bottom-left-radius:.125rem}.md\:rounded-tl{border-top-left-radius:.25rem}.md\:rounded-tr{border-top-right-radius:.25rem}.md\:rounded-br{border-bottom-right-radius:.25rem}.md\:rounded-bl{border-bottom-left-radius:.25rem}.md\:rounded-tl-md{border-top-left-radius:.375rem}.md\:rounded-tr-md{border-top-right-radius:.375rem}.md\:rounded-br-md{border-bottom-right-radius:.375rem}.md\:rounded-bl-md{border-bottom-left-radius:.375rem}.md\:rounded-tl-lg{border-top-left-radius:.5rem}.md\:rounded-tr-lg{border-top-right-radius:.5rem}.md\:rounded-br-lg{border-bottom-right-radius:.5rem}.md\:rounded-bl-lg{border-bottom-left-radius:.5rem}.md\:rounded-tl-xl{border-top-left-radius:.75rem}.md\:rounded-tr-xl{border-top-right-radius:.75rem}.md\:rounded-br-xl{border-bottom-right-radius:.75rem}.md\:rounded-bl-xl{border-bottom-left-radius:.75rem}.md\:rounded-tl-2xl{border-top-left-radius:1rem}.md\:rounded-tr-2xl{border-top-right-radius:1rem}.md\:rounded-br-2xl{border-bottom-right-radius:1rem}.md\:rounded-bl-2xl{border-bottom-left-radius:1rem}.md\:rounded-tl-3xl{border-top-left-radius:1.5rem}.md\:rounded-tr-3xl{border-top-right-radius:1.5rem}.md\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.md\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.md\:rounded-tl-full{border-top-left-radius:9999px}.md\:rounded-tr-full{border-top-right-radius:9999px}.md\:rounded-br-full{border-bottom-right-radius:9999px}.md\:rounded-bl-full{border-bottom-left-radius:9999px}.md\:border-solid{border-style:solid}.md\:border-dashed{border-style:dashed}.md\:border-dotted{border-style:dotted}.md\:border-double{border-style:double}.md\:border-none{border-style:none}.md\:border-0{border-width:0}.md\:border-2{border-width:2px}.md\:border-4{border-width:4px}.md\:border-8{border-width:8px}.md\:border{border-width:1px}.md\:border-t-0{border-top-width:0}.md\:border-r-0{border-right-width:0}.md\:border-b-0{border-bottom-width:0}.md\:border-l-0{border-left-width:0}.md\:border-t-2{border-top-width:2px}.md\:border-r-2{border-right-width:2px}.md\:border-b-2{border-bottom-width:2px}.md\:border-l-2{border-left-width:2px}.md\:border-t-4{border-top-width:4px}.md\:border-r-4{border-right-width:4px}.md\:border-b-4{border-bottom-width:4px}.md\:border-l-4{border-left-width:4px}.md\:border-t-8{border-top-width:8px}.md\:border-r-8{border-right-width:8px}.md\:border-b-8{border-bottom-width:8px}.md\:border-l-8{border-left-width:8px}.md\:border-t{border-top-width:1px}.md\:border-r{border-right-width:1px}.md\:border-b{border-bottom-width:1px}.md\:border-l{border-left-width:1px}.md\:box-border{box-sizing:border-box}.md\:box-content{box-sizing:content-box}.md\:cursor-auto{cursor:auto}.md\:cursor-default{cursor:default}.md\:cursor-pointer{cursor:pointer}.md\:cursor-wait{cursor:wait}.md\:cursor-text{cursor:text}.md\:cursor-move{cursor:move}.md\:cursor-not-allowed{cursor:not-allowed}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:table{display:table}.md\:table-caption{display:table-caption}.md\:table-cell{display:table-cell}.md\:table-column{display:table-column}.md\:table-column-group{display:table-column-group}.md\:table-footer-group{display:table-footer-group}.md\:table-header-group{display:table-header-group}.md\:table-row-group{display:table-row-group}.md\:table-row{display:table-row}.md\:flow-root{display:flow-root}.md\:grid{display:grid}.md\:inline-grid{display:inline-grid}.md\:contents{display:contents}.md\:hidden{display:none}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:flex-col{flex-direction:column}.md\:flex-col-reverse{flex-direction:column-reverse}.md\:flex-wrap{flex-wrap:wrap}.md\:flex-wrap-reverse{flex-wrap:wrap-reverse}.md\:flex-no-wrap{flex-wrap:nowrap}.md\:place-items-auto{place-items:auto}.md\:place-items-start{place-items:start}.md\:place-items-end{place-items:end}.md\:place-items-center{place-items:center}.md\:place-items-stretch{place-items:stretch}.md\:place-content-center{place-content:center}.md\:place-content-start{place-content:start}.md\:place-content-end{place-content:end}.md\:place-content-between{place-content:space-between}.md\:place-content-around{place-content:space-around}.md\:place-content-evenly{place-content:space-evenly}.md\:place-content-stretch{place-content:stretch}.md\:place-self-auto{place-self:auto}.md\:place-self-start{place-self:start}.md\:place-self-end{place-self:end}.md\:place-self-center{place-self:center}.md\:place-self-stretch{place-self:stretch}.md\:items-start{align-items:flex-start}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:items-baseline{align-items:baseline}.md\:items-stretch{align-items:stretch}.md\:content-center{align-content:center}.md\:content-start{align-content:flex-start}.md\:content-end{align-content:flex-end}.md\:content-between{align-content:space-between}.md\:content-around{align-content:space-around}.md\:content-evenly{align-content:space-evenly}.md\:self-auto{align-self:auto}.md\:self-start{align-self:flex-start}.md\:self-end{align-self:flex-end}.md\:self-center{align-self:center}.md\:self-stretch{align-self:stretch}.md\:justify-items-auto{justify-items:auto}.md\:justify-items-start{justify-items:start}.md\:justify-items-end{justify-items:end}.md\:justify-items-center{justify-items:center}.md\:justify-items-stretch{justify-items:stretch}.md\:justify-start{justify-content:flex-start}.md\:justify-end{justify-content:flex-end}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:justify-around{justify-content:space-around}.md\:justify-evenly{justify-content:space-evenly}.md\:justify-self-auto{justify-self:auto}.md\:justify-self-start{justify-self:start}.md\:justify-self-end{justify-self:end}.md\:justify-self-center{justify-self:center}.md\:justify-self-stretch{justify-self:stretch}.md\:flex-1{flex:1 1 0%}.md\:flex-auto{flex:1 1 auto}.md\:flex-initial{flex:0 1 auto}.md\:flex-none{flex:none}.md\:flex-grow-0{flex-grow:0}.md\:flex-grow{flex-grow:1}.md\:flex-shrink-0{flex-shrink:0}.md\:flex-shrink{flex-shrink:1}.md\:order-1{order:1}.md\:order-2{order:2}.md\:order-3{order:3}.md\:order-4{order:4}.md\:order-5{order:5}.md\:order-6{order:6}.md\:order-7{order:7}.md\:order-8{order:8}.md\:order-9{order:9}.md\:order-10{order:10}.md\:order-11{order:11}.md\:order-12{order:12}.md\:order-first{order:-9999}.md\:order-last{order:9999}.md\:order-none{order:0}.md\:float-right{float:right}.md\:float-left{float:left}.md\:float-none{float:none}.md\:clearfix:after{content:"";display:table;clear:both}.md\:clear-left{clear:left}.md\:clear-right{clear:right}.md\:clear-both{clear:both}.md\:clear-none{clear:none}.md\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.md\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.md\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.md\:font-hairline{font-weight:100}.md\:font-thin{font-weight:200}.md\:font-light{font-weight:300}.md\:font-normal{font-weight:400}.md\:font-medium{font-weight:500}.md\:font-semibold{font-weight:600}.md\:font-bold{font-weight:700}.md\:font-extrabold{font-weight:800}.md\:font-black{font-weight:900}.md\:hover\:font-hairline:hover{font-weight:100}.md\:hover\:font-thin:hover{font-weight:200}.md\:hover\:font-light:hover{font-weight:300}.md\:hover\:font-normal:hover{font-weight:400}.md\:hover\:font-medium:hover{font-weight:500}.md\:hover\:font-semibold:hover{font-weight:600}.md\:hover\:font-bold:hover{font-weight:700}.md\:hover\:font-extrabold:hover{font-weight:800}.md\:hover\:font-black:hover{font-weight:900}.md\:focus\:font-hairline:focus{font-weight:100}.md\:focus\:font-thin:focus{font-weight:200}.md\:focus\:font-light:focus{font-weight:300}.md\:focus\:font-normal:focus{font-weight:400}.md\:focus\:font-medium:focus{font-weight:500}.md\:focus\:font-semibold:focus{font-weight:600}.md\:focus\:font-bold:focus{font-weight:700}.md\:focus\:font-extrabold:focus{font-weight:800}.md\:focus\:font-black:focus{font-weight:900}.md\:h-0{height:0}.md\:h-1{height:.25rem}.md\:h-2{height:.5rem}.md\:h-3{height:.75rem}.md\:h-4{height:1rem}.md\:h-5{height:1.25rem}.md\:h-6{height:1.5rem}.md\:h-8{height:2rem}.md\:h-10{height:2.5rem}.md\:h-12{height:3rem}.md\:h-16{height:4rem}.md\:h-20{height:5rem}.md\:h-24{height:6rem}.md\:h-32{height:8rem}.md\:h-40{height:10rem}.md\:h-48{height:12rem}.md\:h-56{height:14rem}.md\:h-64{height:16rem}.md\:h-auto{height:auto}.md\:h-px{height:1px}.md\:h-full{height:100%}.md\:h-screen{height:100vh}.md\:text-xs{font-size:.75rem}.md\:text-sm{font-size:.875rem}.md\:text-base{font-size:1rem}.md\:text-lg{font-size:1.125rem}.md\:text-xl{font-size:1.25rem}.md\:text-2xl{font-size:1.5rem}.md\:text-3xl{font-size:1.875rem}.md\:text-4xl{font-size:2.25rem}.md\:text-5xl{font-size:3rem}.md\:text-6xl{font-size:4rem}.md\:leading-3{line-height:.75rem}.md\:leading-4{line-height:1rem}.md\:leading-5{line-height:1.25rem}.md\:leading-6{line-height:1.5rem}.md\:leading-7{line-height:1.75rem}.md\:leading-8{line-height:2rem}.md\:leading-9{line-height:2.25rem}.md\:leading-10{line-height:2.5rem}.md\:leading-none{line-height:1}.md\:leading-tight{line-height:1.25}.md\:leading-snug{line-height:1.375}.md\:leading-normal{line-height:1.5}.md\:leading-relaxed{line-height:1.625}.md\:leading-loose{line-height:2}.md\:list-inside{list-style-position:inside}.md\:list-outside{list-style-position:outside}.md\:list-none{list-style-type:none}.md\:list-disc{list-style-type:disc}.md\:list-decimal{list-style-type:decimal}.md\:m-0{margin:0}.md\:m-1{margin:.25rem}.md\:m-2{margin:.5rem}.md\:m-3{margin:.75rem}.md\:m-4{margin:1rem}.md\:m-5{margin:1.25rem}.md\:m-6{margin:1.5rem}.md\:m-8{margin:2rem}.md\:m-10{margin:2.5rem}.md\:m-12{margin:3rem}.md\:m-16{margin:4rem}.md\:m-20{margin:5rem}.md\:m-24{margin:6rem}.md\:m-32{margin:8rem}.md\:m-40{margin:10rem}.md\:m-48{margin:12rem}.md\:m-56{margin:14rem}.md\:m-64{margin:16rem}.md\:m-auto{margin:auto}.md\:m-px{margin:1px}.md\:-m-1{margin:-.25rem}.md\:-m-2{margin:-.5rem}.md\:-m-3{margin:-.75rem}.md\:-m-4{margin:-1rem}.md\:-m-5{margin:-1.25rem}.md\:-m-6{margin:-1.5rem}.md\:-m-8{margin:-2rem}.md\:-m-10{margin:-2.5rem}.md\:-m-12{margin:-3rem}.md\:-m-16{margin:-4rem}.md\:-m-20{margin:-5rem}.md\:-m-24{margin:-6rem}.md\:-m-32{margin:-8rem}.md\:-m-40{margin:-10rem}.md\:-m-48{margin:-12rem}.md\:-m-56{margin:-14rem}.md\:-m-64{margin:-16rem}.md\:-m-px{margin:-1px}.md\:my-0{margin-top:0;margin-bottom:0}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-1{margin-top:.25rem;margin-bottom:.25rem}.md\:mx-1{margin-left:.25rem;margin-right:.25rem}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mx-2{margin-left:.5rem;margin-right:.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mx-3{margin-left:.75rem;margin-right:.75rem}.md\:my-4{margin-top:1rem;margin-bottom:1rem}.md\:mx-4{margin-left:1rem;margin-right:1rem}.md\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.md\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.md\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-8{margin-top:2rem;margin-bottom:2rem}.md\:mx-8{margin-left:2rem;margin-right:2rem}.md\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.md\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.md\:my-12{margin-top:3rem;margin-bottom:3rem}.md\:mx-12{margin-left:3rem;margin-right:3rem}.md\:my-16{margin-top:4rem;margin-bottom:4rem}.md\:mx-16{margin-left:4rem;margin-right:4rem}.md\:my-20{margin-top:5rem;margin-bottom:5rem}.md\:mx-20{margin-left:5rem;margin-right:5rem}.md\:my-24{margin-top:6rem;margin-bottom:6rem}.md\:mx-24{margin-left:6rem;margin-right:6rem}.md\:my-32{margin-top:8rem;margin-bottom:8rem}.md\:mx-32{margin-left:8rem;margin-right:8rem}.md\:my-40{margin-top:10rem;margin-bottom:10rem}.md\:mx-40{margin-left:10rem;margin-right:10rem}.md\:my-48{margin-top:12rem;margin-bottom:12rem}.md\:mx-48{margin-left:12rem;margin-right:12rem}.md\:my-56{margin-top:14rem;margin-bottom:14rem}.md\:mx-56{margin-left:14rem;margin-right:14rem}.md\:my-64{margin-top:16rem;margin-bottom:16rem}.md\:mx-64{margin-left:16rem;margin-right:16rem}.md\:my-auto{margin-top:auto;margin-bottom:auto}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:my-px{margin-top:1px;margin-bottom:1px}.md\:mx-px{margin-left:1px;margin-right:1px}.md\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.md\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.md\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.md\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.md\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.md\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.md\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\:-mx-4{margin-left:-1rem;margin-right:-1rem}.md\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.md\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.md\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.md\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.md\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.md\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.md\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.md\:-mx-12{margin-left:-3rem;margin-right:-3rem}.md\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.md\:-mx-16{margin-left:-4rem;margin-right:-4rem}.md\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.md\:-mx-20{margin-left:-5rem;margin-right:-5rem}.md\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.md\:-mx-24{margin-left:-6rem;margin-right:-6rem}.md\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.md\:-mx-32{margin-left:-8rem;margin-right:-8rem}.md\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.md\:-mx-40{margin-left:-10rem;margin-right:-10rem}.md\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.md\:-mx-48{margin-left:-12rem;margin-right:-12rem}.md\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.md\:-mx-56{margin-left:-14rem;margin-right:-14rem}.md\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.md\:-mx-64{margin-left:-16rem;margin-right:-16rem}.md\:-my-px{margin-top:-1px;margin-bottom:-1px}.md\:-mx-px{margin-left:-1px;margin-right:-1px}.md\:mt-0{margin-top:0}.md\:mr-0{margin-right:0}.md\:mb-0{margin-bottom:0}.md\:ml-0{margin-left:0}.md\:mt-1{margin-top:.25rem}.md\:mr-1{margin-right:.25rem}.md\:mb-1{margin-bottom:.25rem}.md\:ml-1{margin-left:.25rem}.md\:mt-2{margin-top:.5rem}.md\:mr-2{margin-right:.5rem}.md\:mb-2{margin-bottom:.5rem}.md\:ml-2{margin-left:.5rem}.md\:mt-3{margin-top:.75rem}.md\:mr-3{margin-right:.75rem}.md\:mb-3{margin-bottom:.75rem}.md\:ml-3{margin-left:.75rem}.md\:mt-4{margin-top:1rem}.md\:mr-4{margin-right:1rem}.md\:mb-4{margin-bottom:1rem}.md\:ml-4{margin-left:1rem}.md\:mt-5{margin-top:1.25rem}.md\:mr-5{margin-right:1.25rem}.md\:mb-5{margin-bottom:1.25rem}.md\:ml-5{margin-left:1.25rem}.md\:mt-6{margin-top:1.5rem}.md\:mr-6{margin-right:1.5rem}.md\:mb-6{margin-bottom:1.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mt-8{margin-top:2rem}.md\:mr-8{margin-right:2rem}.md\:mb-8{margin-bottom:2rem}.md\:ml-8{margin-left:2rem}.md\:mt-10{margin-top:2.5rem}.md\:mr-10{margin-right:2.5rem}.md\:mb-10{margin-bottom:2.5rem}.md\:ml-10{margin-left:2.5rem}.md\:mt-12{margin-top:3rem}.md\:mr-12{margin-right:3rem}.md\:mb-12{margin-bottom:3rem}.md\:ml-12{margin-left:3rem}.md\:mt-16{margin-top:4rem}.md\:mr-16{margin-right:4rem}.md\:mb-16{margin-bottom:4rem}.md\:ml-16{margin-left:4rem}.md\:mt-20{margin-top:5rem}.md\:mr-20{margin-right:5rem}.md\:mb-20{margin-bottom:5rem}.md\:ml-20{margin-left:5rem}.md\:mt-24{margin-top:6rem}.md\:mr-24{margin-right:6rem}.md\:mb-24{margin-bottom:6rem}.md\:ml-24{margin-left:6rem}.md\:mt-32{margin-top:8rem}.md\:mr-32{margin-right:8rem}.md\:mb-32{margin-bottom:8rem}.md\:ml-32{margin-left:8rem}.md\:mt-40{margin-top:10rem}.md\:mr-40{margin-right:10rem}.md\:mb-40{margin-bottom:10rem}.md\:ml-40{margin-left:10rem}.md\:mt-48{margin-top:12rem}.md\:mr-48{margin-right:12rem}.md\:mb-48{margin-bottom:12rem}.md\:ml-48{margin-left:12rem}.md\:mt-56{margin-top:14rem}.md\:mr-56{margin-right:14rem}.md\:mb-56{margin-bottom:14rem}.md\:ml-56{margin-left:14rem}.md\:mt-64{margin-top:16rem}.md\:mr-64{margin-right:16rem}.md\:mb-64{margin-bottom:16rem}.md\:ml-64{margin-left:16rem}.md\:mt-auto{margin-top:auto}.md\:mr-auto{margin-right:auto}.md\:mb-auto{margin-bottom:auto}.md\:ml-auto{margin-left:auto}.md\:mt-px{margin-top:1px}.md\:mr-px{margin-right:1px}.md\:mb-px{margin-bottom:1px}.md\:ml-px{margin-left:1px}.md\:-mt-1{margin-top:-.25rem}.md\:-mr-1{margin-right:-.25rem}.md\:-mb-1{margin-bottom:-.25rem}.md\:-ml-1{margin-left:-.25rem}.md\:-mt-2{margin-top:-.5rem}.md\:-mr-2{margin-right:-.5rem}.md\:-mb-2{margin-bottom:-.5rem}.md\:-ml-2{margin-left:-.5rem}.md\:-mt-3{margin-top:-.75rem}.md\:-mr-3{margin-right:-.75rem}.md\:-mb-3{margin-bottom:-.75rem}.md\:-ml-3{margin-left:-.75rem}.md\:-mt-4{margin-top:-1rem}.md\:-mr-4{margin-right:-1rem}.md\:-mb-4{margin-bottom:-1rem}.md\:-ml-4{margin-left:-1rem}.md\:-mt-5{margin-top:-1.25rem}.md\:-mr-5{margin-right:-1.25rem}.md\:-mb-5{margin-bottom:-1.25rem}.md\:-ml-5{margin-left:-1.25rem}.md\:-mt-6{margin-top:-1.5rem}.md\:-mr-6{margin-right:-1.5rem}.md\:-mb-6{margin-bottom:-1.5rem}.md\:-ml-6{margin-left:-1.5rem}.md\:-mt-8{margin-top:-2rem}.md\:-mr-8{margin-right:-2rem}.md\:-mb-8{margin-bottom:-2rem}.md\:-ml-8{margin-left:-2rem}.md\:-mt-10{margin-top:-2.5rem}.md\:-mr-10{margin-right:-2.5rem}.md\:-mb-10{margin-bottom:-2.5rem}.md\:-ml-10{margin-left:-2.5rem}.md\:-mt-12{margin-top:-3rem}.md\:-mr-12{margin-right:-3rem}.md\:-mb-12{margin-bottom:-3rem}.md\:-ml-12{margin-left:-3rem}.md\:-mt-16{margin-top:-4rem}.md\:-mr-16{margin-right:-4rem}.md\:-mb-16{margin-bottom:-4rem}.md\:-ml-16{margin-left:-4rem}.md\:-mt-20{margin-top:-5rem}.md\:-mr-20{margin-right:-5rem}.md\:-mb-20{margin-bottom:-5rem}.md\:-ml-20{margin-left:-5rem}.md\:-mt-24{margin-top:-6rem}.md\:-mr-24{margin-right:-6rem}.md\:-mb-24{margin-bottom:-6rem}.md\:-ml-24{margin-left:-6rem}.md\:-mt-32{margin-top:-8rem}.md\:-mr-32{margin-right:-8rem}.md\:-mb-32{margin-bottom:-8rem}.md\:-ml-32{margin-left:-8rem}.md\:-mt-40{margin-top:-10rem}.md\:-mr-40{margin-right:-10rem}.md\:-mb-40{margin-bottom:-10rem}.md\:-ml-40{margin-left:-10rem}.md\:-mt-48{margin-top:-12rem}.md\:-mr-48{margin-right:-12rem}.md\:-mb-48{margin-bottom:-12rem}.md\:-ml-48{margin-left:-12rem}.md\:-mt-56{margin-top:-14rem}.md\:-mr-56{margin-right:-14rem}.md\:-mb-56{margin-bottom:-14rem}.md\:-ml-56{margin-left:-14rem}.md\:-mt-64{margin-top:-16rem}.md\:-mr-64{margin-right:-16rem}.md\:-mb-64{margin-bottom:-16rem}.md\:-ml-64{margin-left:-16rem}.md\:-mt-px{margin-top:-1px}.md\:-mr-px{margin-right:-1px}.md\:-mb-px{margin-bottom:-1px}.md\:-ml-px{margin-left:-1px}.md\:max-h-full{max-height:100%}.md\:max-h-screen{max-height:100vh}.md\:max-w-none{max-width:none}.md\:max-w-xs{max-width:20rem}.md\:max-w-sm{max-width:24rem}.md\:max-w-md{max-width:28rem}.md\:max-w-lg{max-width:32rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-2xl{max-width:42rem}.md\:max-w-3xl{max-width:48rem}.md\:max-w-4xl{max-width:56rem}.md\:max-w-5xl{max-width:64rem}.md\:max-w-6xl{max-width:72rem}.md\:max-w-full{max-width:100%}.md\:max-w-screen-sm{max-width:640px}.md\:max-w-screen-md{max-width:768px}.md\:max-w-screen-lg{max-width:1024px}.md\:max-w-screen-xl{max-width:1280px}.md\:min-h-0{min-height:0}.md\:min-h-full{min-height:100%}.md\:min-h-screen{min-height:100vh}.md\:min-w-0{min-width:0}.md\:min-w-full{min-width:100%}.md\:object-contain{object-fit:contain}.md\:object-cover{object-fit:cover}.md\:object-fill{object-fit:fill}.md\:object-none{object-fit:none}.md\:object-scale-down{object-fit:scale-down}.md\:object-bottom{object-position:bottom}.md\:object-center{object-position:center}.md\:object-left{object-position:left}.md\:object-left-bottom{object-position:left bottom}.md\:object-left-top{object-position:left top}.md\:object-right{object-position:right}.md\:object-right-bottom{object-position:right bottom}.md\:object-right-top{object-position:right top}.md\:object-top{object-position:top}.md\:opacity-0{opacity:0}.md\:opacity-25{opacity:.25}.md\:opacity-50{opacity:.5}.md\:opacity-75{opacity:.75}.md\:opacity-100{opacity:1}.md\:hover\:opacity-0:hover{opacity:0}.md\:hover\:opacity-25:hover{opacity:.25}.md\:hover\:opacity-50:hover{opacity:.5}.md\:hover\:opacity-75:hover{opacity:.75}.md\:hover\:opacity-100:hover{opacity:1}.md\:focus\:opacity-0:focus{opacity:0}.md\:focus\:opacity-25:focus{opacity:.25}.md\:focus\:opacity-50:focus{opacity:.5}.md\:focus\:opacity-75:focus{opacity:.75}.md\:focus\:opacity-100:focus{opacity:1}.md\:outline-none{outline:2px solid transparent;outline-offset:2px}.md\:outline-white{outline:2px dotted #fff;outline-offset:2px}.md\:outline-black{outline:2px dotted #000;outline-offset:2px}.md\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.md\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.md\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.md\:overflow-auto{overflow:auto}.md\:overflow-hidden{overflow:hidden}.md\:overflow-visible{overflow:visible}.md\:overflow-scroll{overflow:scroll}.md\:overflow-x-auto{overflow-x:auto}.md\:overflow-y-auto{overflow-y:auto}.md\:overflow-x-hidden{overflow-x:hidden}.md\:overflow-y-hidden{overflow-y:hidden}.md\:overflow-x-visible{overflow-x:visible}.md\:overflow-y-visible{overflow-y:visible}.md\:overflow-x-scroll{overflow-x:scroll}.md\:overflow-y-scroll{overflow-y:scroll}.md\:scrolling-touch{-webkit-overflow-scrolling:touch}.md\:scrolling-auto{-webkit-overflow-scrolling:auto}.md\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.md\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.md\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.md\:overscroll-y-auto{overscroll-behavior-y:auto}.md\:overscroll-y-contain{overscroll-behavior-y:contain}.md\:overscroll-y-none{overscroll-behavior-y:none}.md\:overscroll-x-auto{overscroll-behavior-x:auto}.md\:overscroll-x-contain{overscroll-behavior-x:contain}.md\:overscroll-x-none{overscroll-behavior-x:none}.md\:p-0{padding:0}.md\:p-1{padding:.25rem}.md\:p-2{padding:.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-5{padding:1.25rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:p-10{padding:2.5rem}.md\:p-12{padding:3rem}.md\:p-16{padding:4rem}.md\:p-20{padding:5rem}.md\:p-24{padding:6rem}.md\:p-32{padding:8rem}.md\:p-40{padding:10rem}.md\:p-48{padding:12rem}.md\:p-56{padding:14rem}.md\:p-64{padding:16rem}.md\:p-px{padding:1px}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-0{padding-left:0;padding-right:0}.md\:py-1{padding-top:.25rem;padding-bottom:.25rem}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:py-3{padding-top:.75rem;padding-bottom:.75rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:px-10{padding-left:2.5rem;padding-right:2.5rem}.md\:py-12{padding-top:3rem;padding-bottom:3rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:py-16{padding-top:4rem;padding-bottom:4rem}.md\:px-16{padding-left:4rem;padding-right:4rem}.md\:py-20{padding-top:5rem;padding-bottom:5rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:py-24{padding-top:6rem;padding-bottom:6rem}.md\:px-24{padding-left:6rem;padding-right:6rem}.md\:py-32{padding-top:8rem;padding-bottom:8rem}.md\:px-32{padding-left:8rem;padding-right:8rem}.md\:py-40{padding-top:10rem;padding-bottom:10rem}.md\:px-40{padding-left:10rem;padding-right:10rem}.md\:py-48{padding-top:12rem;padding-bottom:12rem}.md\:px-48{padding-left:12rem;padding-right:12rem}.md\:py-56{padding-top:14rem;padding-bottom:14rem}.md\:px-56{padding-left:14rem;padding-right:14rem}.md\:py-64{padding-top:16rem;padding-bottom:16rem}.md\:px-64{padding-left:16rem;padding-right:16rem}.md\:py-px{padding-top:1px;padding-bottom:1px}.md\:px-px{padding-left:1px;padding-right:1px}.md\:pt-0{padding-top:0}.md\:pr-0{padding-right:0}.md\:pb-0{padding-bottom:0}.md\:pl-0{padding-left:0}.md\:pt-1{padding-top:.25rem}.md\:pr-1{padding-right:.25rem}.md\:pb-1{padding-bottom:.25rem}.md\:pl-1{padding-left:.25rem}.md\:pt-2{padding-top:.5rem}.md\:pr-2{padding-right:.5rem}.md\:pb-2{padding-bottom:.5rem}.md\:pl-2{padding-left:.5rem}.md\:pt-3{padding-top:.75rem}.md\:pr-3{padding-right:.75rem}.md\:pb-3{padding-bottom:.75rem}.md\:pl-3{padding-left:.75rem}.md\:pt-4{padding-top:1rem}.md\:pr-4{padding-right:1rem}.md\:pb-4{padding-bottom:1rem}.md\:pl-4{padding-left:1rem}.md\:pt-5{padding-top:1.25rem}.md\:pr-5{padding-right:1.25rem}.md\:pb-5{padding-bottom:1.25rem}.md\:pl-5{padding-left:1.25rem}.md\:pt-6{padding-top:1.5rem}.md\:pr-6{padding-right:1.5rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pl-6{padding-left:1.5rem}.md\:pt-8{padding-top:2rem}.md\:pr-8{padding-right:2rem}.md\:pb-8{padding-bottom:2rem}.md\:pl-8{padding-left:2rem}.md\:pt-10{padding-top:2.5rem}.md\:pr-10{padding-right:2.5rem}.md\:pb-10{padding-bottom:2.5rem}.md\:pl-10{padding-left:2.5rem}.md\:pt-12{padding-top:3rem}.md\:pr-12{padding-right:3rem}.md\:pb-12{padding-bottom:3rem}.md\:pl-12{padding-left:3rem}.md\:pt-16{padding-top:4rem}.md\:pr-16{padding-right:4rem}.md\:pb-16{padding-bottom:4rem}.md\:pl-16{padding-left:4rem}.md\:pt-20{padding-top:5rem}.md\:pr-20{padding-right:5rem}.md\:pb-20{padding-bottom:5rem}.md\:pl-20{padding-left:5rem}.md\:pt-24{padding-top:6rem}.md\:pr-24{padding-right:6rem}.md\:pb-24{padding-bottom:6rem}.md\:pl-24{padding-left:6rem}.md\:pt-32{padding-top:8rem}.md\:pr-32{padding-right:8rem}.md\:pb-32{padding-bottom:8rem}.md\:pl-32{padding-left:8rem}.md\:pt-40{padding-top:10rem}.md\:pr-40{padding-right:10rem}.md\:pb-40{padding-bottom:10rem}.md\:pl-40{padding-left:10rem}.md\:pt-48{padding-top:12rem}.md\:pr-48{padding-right:12rem}.md\:pb-48{padding-bottom:12rem}.md\:pl-48{padding-left:12rem}.md\:pt-56{padding-top:14rem}.md\:pr-56{padding-right:14rem}.md\:pb-56{padding-bottom:14rem}.md\:pl-56{padding-left:14rem}.md\:pt-64{padding-top:16rem}.md\:pr-64{padding-right:16rem}.md\:pb-64{padding-bottom:16rem}.md\:pl-64{padding-left:16rem}.md\:pt-px{padding-top:1px}.md\:pr-px{padding-right:1px}.md\:pb-px{padding-bottom:1px}.md\:pl-px{padding-left:1px}.md\:placeholder-transparent:-ms-input-placeholder{color:transparent}.md\:placeholder-transparent::-ms-input-placeholder{color:transparent}.md\:placeholder-transparent::placeholder{color:transparent}.md\:placeholder-current:-ms-input-placeholder{color:currentColor}.md\:placeholder-current::-ms-input-placeholder{color:currentColor}.md\:placeholder-current::placeholder{color:currentColor}.md\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.md\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.md\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.md\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.md\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.md\:focus\:placeholder-current:focus::placeholder{color:currentColor}.md\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.md\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.md\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.md\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.md\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.md\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.md\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.md\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.md\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.md\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.md\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.md\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.md\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.md\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.md\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.md\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.md\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.md\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.md\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.md\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.md\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.md\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.md\:pointer-events-none{pointer-events:none}.md\:pointer-events-auto{pointer-events:auto}.md\:static{position:static}.md\:fixed{position:fixed}.md\:absolute{position:absolute}.md\:relative{position:relative}.md\:sticky{position:-webkit-sticky;position:sticky}.md\:inset-0{top:0;right:0;bottom:0;left:0}.md\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.md\:inset-y-0{top:0;bottom:0}.md\:inset-x-0{right:0;left:0}.md\:inset-y-auto{top:auto;bottom:auto}.md\:inset-x-auto{right:auto;left:auto}.md\:top-0{top:0}.md\:right-0{right:0}.md\:bottom-0{bottom:0}.md\:left-0{left:0}.md\:top-auto{top:auto}.md\:right-auto{right:auto}.md\:bottom-auto{bottom:auto}.md\:left-auto{left:auto}.md\:resize-none{resize:none}.md\:resize-y{resize:vertical}.md\:resize-x{resize:horizontal}.md\:resize{resize:both}.md\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.md\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:shadow-none{box-shadow:none}.md\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.md\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:hover\:shadow-none:hover{box-shadow:none}.md\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.md\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.md\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.md\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.md\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.md\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.md\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.md\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.md\:focus\:shadow-none:focus{box-shadow:none}.md\:fill-current{fill:currentColor}.md\:stroke-current{stroke:currentColor}.md\:stroke-0{stroke-width:0}.md\:stroke-1{stroke-width:1}.md\:stroke-2{stroke-width:2}.md\:table-auto{table-layout:auto}.md\:table-fixed{table-layout:fixed}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-right{text-align:right}.md\:text-justify{text-align:justify}.md\:text-transparent{color:transparent}.md\:text-current{color:currentColor}.md\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.md\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.md\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.md\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.md\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.md\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.md\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.md\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.md\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.md\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.md\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.md\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.md\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.md\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.md\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.md\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.md\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.md\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.md\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.md\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.md\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.md\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.md\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.md\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.md\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.md\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.md\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.md\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.md\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.md\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.md\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.md\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.md\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.md\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.md\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.md\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.md\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.md\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.md\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.md\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.md\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.md\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.md\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.md\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.md\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.md\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.md\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.md\:hover\:text-transparent:hover{color:transparent}.md\:hover\:text-current:hover{color:currentColor}.md\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.md\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.md\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.md\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.md\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.md\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.md\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.md\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.md\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.md\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.md\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.md\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.md\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.md\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.md\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.md\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.md\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.md\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.md\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.md\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.md\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.md\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.md\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.md\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.md\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.md\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.md\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.md\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.md\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.md\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.md\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.md\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.md\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.md\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.md\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.md\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.md\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.md\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.md\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.md\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.md\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.md\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.md\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.md\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.md\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.md\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.md\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.md\:focus\:text-transparent:focus{color:transparent}.md\:focus\:text-current:focus{color:currentColor}.md\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.md\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.md\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.md\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.md\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.md\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.md\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.md\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.md\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.md\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.md\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.md\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.md\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.md\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.md\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.md\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.md\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.md\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.md\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.md\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.md\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.md\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.md\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.md\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.md\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.md\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.md\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.md\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.md\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.md\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.md\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.md\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.md\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.md\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.md\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.md\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.md\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.md\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.md\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.md\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.md\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.md\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.md\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.md\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.md\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.md\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.md\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.md\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.md\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.md\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.md\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.md\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.md\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.md\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.md\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.md\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.md\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.md\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.md\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.md\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.md\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.md\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.md\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.md\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.md\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.md\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.md\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.md\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.md\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.md\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.md\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.md\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.md\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.md\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.md\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.md\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.md\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.md\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.md\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.md\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.md\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.md\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.md\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.md\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.md\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.md\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.md\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.md\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.md\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.md\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.md\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.md\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.md\:text-opacity-0{--text-opacity:0}.md\:text-opacity-25{--text-opacity:0.25}.md\:text-opacity-50{--text-opacity:0.5}.md\:text-opacity-75{--text-opacity:0.75}.md\:text-opacity-100{--text-opacity:1}.md\:hover\:text-opacity-0:hover{--text-opacity:0}.md\:hover\:text-opacity-25:hover{--text-opacity:0.25}.md\:hover\:text-opacity-50:hover{--text-opacity:0.5}.md\:hover\:text-opacity-75:hover{--text-opacity:0.75}.md\:hover\:text-opacity-100:hover{--text-opacity:1}.md\:focus\:text-opacity-0:focus{--text-opacity:0}.md\:focus\:text-opacity-25:focus{--text-opacity:0.25}.md\:focus\:text-opacity-50:focus{--text-opacity:0.5}.md\:focus\:text-opacity-75:focus{--text-opacity:0.75}.md\:focus\:text-opacity-100:focus{--text-opacity:1}.md\:italic{font-style:italic}.md\:not-italic{font-style:normal}.md\:uppercase{text-transform:uppercase}.md\:lowercase{text-transform:lowercase}.md\:capitalize{text-transform:capitalize}.md\:normal-case{text-transform:none}.md\:underline{text-decoration:underline}.md\:line-through{text-decoration:line-through}.md\:no-underline{text-decoration:none}.md\:hover\:underline:hover{text-decoration:underline}.md\:hover\:line-through:hover{text-decoration:line-through}.md\:hover\:no-underline:hover{text-decoration:none}.md\:focus\:underline:focus{text-decoration:underline}.md\:focus\:line-through:focus{text-decoration:line-through}.md\:focus\:no-underline:focus{text-decoration:none}.md\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.md\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.md\:diagonal-fractions,.md\:lining-nums,.md\:oldstyle-nums,.md\:ordinal,.md\:proportional-nums,.md\:slashed-zero,.md\:stacked-fractions,.md\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.md\:normal-nums{font-variant-numeric:normal}.md\:ordinal{--font-variant-numeric-ordinal:ordinal}.md\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.md\:lining-nums{--font-variant-numeric-figure:lining-nums}.md\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.md\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.md\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.md\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.md\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.md\:tracking-tighter{letter-spacing:-.05em}.md\:tracking-tight{letter-spacing:-.025em}.md\:tracking-normal{letter-spacing:0}.md\:tracking-wide{letter-spacing:.025em}.md\:tracking-wider{letter-spacing:.05em}.md\:tracking-widest{letter-spacing:.1em}.md\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.md\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.md\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.md\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.md\:align-baseline{vertical-align:baseline}.md\:align-top{vertical-align:top}.md\:align-middle{vertical-align:middle}.md\:align-bottom{vertical-align:bottom}.md\:align-text-top{vertical-align:text-top}.md\:align-text-bottom{vertical-align:text-bottom}.md\:visible{visibility:visible}.md\:invisible{visibility:hidden}.md\:whitespace-normal{white-space:normal}.md\:whitespace-no-wrap{white-space:nowrap}.md\:whitespace-pre{white-space:pre}.md\:whitespace-pre-line{white-space:pre-line}.md\:whitespace-pre-wrap{white-space:pre-wrap}.md\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.md\:break-words{word-wrap:break-word;overflow-wrap:break-word}.md\:break-all{word-break:break-all}.md\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md\:w-0{width:0}.md\:w-1{width:.25rem}.md\:w-2{width:.5rem}.md\:w-3{width:.75rem}.md\:w-4{width:1rem}.md\:w-5{width:1.25rem}.md\:w-6{width:1.5rem}.md\:w-8{width:2rem}.md\:w-10{width:2.5rem}.md\:w-12{width:3rem}.md\:w-16{width:4rem}.md\:w-20{width:5rem}.md\:w-24{width:6rem}.md\:w-32{width:8rem}.md\:w-40{width:10rem}.md\:w-48{width:12rem}.md\:w-56{width:14rem}.md\:w-64{width:16rem}.md\:w-auto{width:auto}.md\:w-px{width:1px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:w-2\/3{width:66.666667%}.md\:w-1\/4{width:25%}.md\:w-2\/4{width:50%}.md\:w-3\/4{width:75%}.md\:w-1\/5{width:20%}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:w-4\/5{width:80%}.md\:w-1\/6{width:16.666667%}.md\:w-2\/6{width:33.333333%}.md\:w-3\/6{width:50%}.md\:w-4\/6{width:66.666667%}.md\:w-5\/6{width:83.333333%}.md\:w-1\/12{width:8.333333%}.md\:w-2\/12{width:16.666667%}.md\:w-3\/12{width:25%}.md\:w-4\/12{width:33.333333%}.md\:w-5\/12{width:41.666667%}.md\:w-6\/12{width:50%}.md\:w-7\/12{width:58.333333%}.md\:w-8\/12{width:66.666667%}.md\:w-9\/12{width:75%}.md\:w-10\/12{width:83.333333%}.md\:w-11\/12{width:91.666667%}.md\:w-full{width:100%}.md\:w-screen{width:100vw}.md\:z-0{z-index:0}.md\:z-10{z-index:10}.md\:z-20{z-index:20}.md\:z-30{z-index:30}.md\:z-40{z-index:40}.md\:z-50{z-index:50}.md\:z-auto{z-index:auto}.md\:gap-0{grid-gap:0;gap:0}.md\:gap-1{grid-gap:.25rem;gap:.25rem}.md\:gap-2{grid-gap:.5rem;gap:.5rem}.md\:gap-3{grid-gap:.75rem;gap:.75rem}.md\:gap-4{grid-gap:1rem;gap:1rem}.md\:gap-5{grid-gap:1.25rem;gap:1.25rem}.md\:gap-6{grid-gap:1.5rem;gap:1.5rem}.md\:gap-8{grid-gap:2rem;gap:2rem}.md\:gap-10{grid-gap:2.5rem;gap:2.5rem}.md\:gap-12{grid-gap:3rem;gap:3rem}.md\:gap-16{grid-gap:4rem;gap:4rem}.md\:gap-20{grid-gap:5rem;gap:5rem}.md\:gap-24{grid-gap:6rem;gap:6rem}.md\:gap-32{grid-gap:8rem;gap:8rem}.md\:gap-40{grid-gap:10rem;gap:10rem}.md\:gap-48{grid-gap:12rem;gap:12rem}.md\:gap-56{grid-gap:14rem;gap:14rem}.md\:gap-64{grid-gap:16rem;gap:16rem}.md\:gap-px{grid-gap:1px;gap:1px}.md\:col-gap-0{grid-column-gap:0;column-gap:0}.md\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.md\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.md\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.md\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.md\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.md\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.md\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.md\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.md\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.md\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.md\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.md\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.md\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.md\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.md\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.md\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.md\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.md\:col-gap-px{grid-column-gap:1px;column-gap:1px}.md\:gap-x-0{grid-column-gap:0;column-gap:0}.md\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.md\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.md\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.md\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.md\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.md\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.md\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.md\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.md\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.md\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.md\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.md\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.md\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.md\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.md\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.md\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.md\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.md\:gap-x-px{grid-column-gap:1px;column-gap:1px}.md\:row-gap-0{grid-row-gap:0;row-gap:0}.md\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.md\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.md\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.md\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.md\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.md\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.md\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.md\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.md\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.md\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.md\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.md\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.md\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.md\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.md\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.md\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.md\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.md\:row-gap-px{grid-row-gap:1px;row-gap:1px}.md\:gap-y-0{grid-row-gap:0;row-gap:0}.md\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.md\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.md\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.md\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.md\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.md\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.md\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.md\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.md\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.md\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.md\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.md\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.md\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.md\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.md\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.md\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.md\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.md\:gap-y-px{grid-row-gap:1px;row-gap:1px}.md\:grid-flow-row{grid-auto-flow:row}.md\:grid-flow-col{grid-auto-flow:column}.md\:grid-flow-row-dense{grid-auto-flow:row dense}.md\:grid-flow-col-dense{grid-auto-flow:column dense}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.md\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.md\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.md\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-none{grid-template-columns:none}.md\:auto-cols-auto{grid-auto-columns:auto}.md\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.md\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.md\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.md\:col-auto{grid-column:auto}.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:col-span-9{grid-column:span 9/span 9}.md\:col-span-10{grid-column:span 10/span 10}.md\:col-span-11{grid-column:span 11/span 11}.md\:col-span-12{grid-column:span 12/span 12}.md\:col-span-full{grid-column:1/-1}.md\:col-start-1{grid-column-start:1}.md\:col-start-2{grid-column-start:2}.md\:col-start-3{grid-column-start:3}.md\:col-start-4{grid-column-start:4}.md\:col-start-5{grid-column-start:5}.md\:col-start-6{grid-column-start:6}.md\:col-start-7{grid-column-start:7}.md\:col-start-8{grid-column-start:8}.md\:col-start-9{grid-column-start:9}.md\:col-start-10{grid-column-start:10}.md\:col-start-11{grid-column-start:11}.md\:col-start-12{grid-column-start:12}.md\:col-start-13{grid-column-start:13}.md\:col-start-auto{grid-column-start:auto}.md\:col-end-1{grid-column-end:1}.md\:col-end-2{grid-column-end:2}.md\:col-end-3{grid-column-end:3}.md\:col-end-4{grid-column-end:4}.md\:col-end-5{grid-column-end:5}.md\:col-end-6{grid-column-end:6}.md\:col-end-7{grid-column-end:7}.md\:col-end-8{grid-column-end:8}.md\:col-end-9{grid-column-end:9}.md\:col-end-10{grid-column-end:10}.md\:col-end-11{grid-column-end:11}.md\:col-end-12{grid-column-end:12}.md\:col-end-13{grid-column-end:13}.md\:col-end-auto{grid-column-end:auto}.md\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.md\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.md\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.md\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.md\:grid-rows-none{grid-template-rows:none}.md\:auto-rows-auto{grid-auto-rows:auto}.md\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.md\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.md\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.md\:row-auto{grid-row:auto}.md\:row-span-1{grid-row:span 1/span 1}.md\:row-span-2{grid-row:span 2/span 2}.md\:row-span-3{grid-row:span 3/span 3}.md\:row-span-4{grid-row:span 4/span 4}.md\:row-span-5{grid-row:span 5/span 5}.md\:row-span-6{grid-row:span 6/span 6}.md\:row-span-full{grid-row:1/-1}.md\:row-start-1{grid-row-start:1}.md\:row-start-2{grid-row-start:2}.md\:row-start-3{grid-row-start:3}.md\:row-start-4{grid-row-start:4}.md\:row-start-5{grid-row-start:5}.md\:row-start-6{grid-row-start:6}.md\:row-start-7{grid-row-start:7}.md\:row-start-auto{grid-row-start:auto}.md\:row-end-1{grid-row-end:1}.md\:row-end-2{grid-row-end:2}.md\:row-end-3{grid-row-end:3}.md\:row-end-4{grid-row-end:4}.md\:row-end-5{grid-row-end:5}.md\:row-end-6{grid-row-end:6}.md\:row-end-7{grid-row-end:7}.md\:row-end-auto{grid-row-end:auto}.md\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.md\:transform-none{transform:none}.md\:origin-center{transform-origin:center}.md\:origin-top{transform-origin:top}.md\:origin-top-right{transform-origin:top right}.md\:origin-right{transform-origin:right}.md\:origin-bottom-right{transform-origin:bottom right}.md\:origin-bottom{transform-origin:bottom}.md\:origin-bottom-left{transform-origin:bottom left}.md\:origin-left{transform-origin:left}.md\:origin-top-left{transform-origin:top left}.md\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.md\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.md\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.md\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.md\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.md\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.md\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:scale-x-0{--transform-scale-x:0}.md\:scale-x-50{--transform-scale-x:.5}.md\:scale-x-75{--transform-scale-x:.75}.md\:scale-x-90{--transform-scale-x:.9}.md\:scale-x-95{--transform-scale-x:.95}.md\:scale-x-100{--transform-scale-x:1}.md\:scale-x-105{--transform-scale-x:1.05}.md\:scale-x-110{--transform-scale-x:1.1}.md\:scale-x-125{--transform-scale-x:1.25}.md\:scale-x-150{--transform-scale-x:1.5}.md\:scale-y-0{--transform-scale-y:0}.md\:scale-y-50{--transform-scale-y:.5}.md\:scale-y-75{--transform-scale-y:.75}.md\:scale-y-90{--transform-scale-y:.9}.md\:scale-y-95{--transform-scale-y:.95}.md\:scale-y-100{--transform-scale-y:1}.md\:scale-y-105{--transform-scale-y:1.05}.md\:scale-y-110{--transform-scale-y:1.1}.md\:scale-y-125{--transform-scale-y:1.25}.md\:scale-y-150{--transform-scale-y:1.5}.md\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.md\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.md\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.md\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.md\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.md\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.md\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:hover\:scale-x-0:hover{--transform-scale-x:0}.md\:hover\:scale-x-50:hover{--transform-scale-x:.5}.md\:hover\:scale-x-75:hover{--transform-scale-x:.75}.md\:hover\:scale-x-90:hover{--transform-scale-x:.9}.md\:hover\:scale-x-95:hover{--transform-scale-x:.95}.md\:hover\:scale-x-100:hover{--transform-scale-x:1}.md\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.md\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.md\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.md\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.md\:hover\:scale-y-0:hover{--transform-scale-y:0}.md\:hover\:scale-y-50:hover{--transform-scale-y:.5}.md\:hover\:scale-y-75:hover{--transform-scale-y:.75}.md\:hover\:scale-y-90:hover{--transform-scale-y:.9}.md\:hover\:scale-y-95:hover{--transform-scale-y:.95}.md\:hover\:scale-y-100:hover{--transform-scale-y:1}.md\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.md\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.md\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.md\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.md\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.md\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.md\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.md\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.md\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.md\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.md\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.md\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.md\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.md\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.md\:focus\:scale-x-0:focus{--transform-scale-x:0}.md\:focus\:scale-x-50:focus{--transform-scale-x:.5}.md\:focus\:scale-x-75:focus{--transform-scale-x:.75}.md\:focus\:scale-x-90:focus{--transform-scale-x:.9}.md\:focus\:scale-x-95:focus{--transform-scale-x:.95}.md\:focus\:scale-x-100:focus{--transform-scale-x:1}.md\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.md\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.md\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.md\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.md\:focus\:scale-y-0:focus{--transform-scale-y:0}.md\:focus\:scale-y-50:focus{--transform-scale-y:.5}.md\:focus\:scale-y-75:focus{--transform-scale-y:.75}.md\:focus\:scale-y-90:focus{--transform-scale-y:.9}.md\:focus\:scale-y-95:focus{--transform-scale-y:.95}.md\:focus\:scale-y-100:focus{--transform-scale-y:1}.md\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.md\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.md\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.md\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.md\:rotate-0{--transform-rotate:0}.md\:rotate-1{--transform-rotate:1deg}.md\:rotate-2{--transform-rotate:2deg}.md\:rotate-3{--transform-rotate:3deg}.md\:rotate-6{--transform-rotate:6deg}.md\:rotate-12{--transform-rotate:12deg}.md\:rotate-45{--transform-rotate:45deg}.md\:rotate-90{--transform-rotate:90deg}.md\:rotate-180{--transform-rotate:180deg}.md\:-rotate-180{--transform-rotate:-180deg}.md\:-rotate-90{--transform-rotate:-90deg}.md\:-rotate-45{--transform-rotate:-45deg}.md\:-rotate-12{--transform-rotate:-12deg}.md\:-rotate-6{--transform-rotate:-6deg}.md\:-rotate-3{--transform-rotate:-3deg}.md\:-rotate-2{--transform-rotate:-2deg}.md\:-rotate-1{--transform-rotate:-1deg}.md\:hover\:rotate-0:hover{--transform-rotate:0}.md\:hover\:rotate-1:hover{--transform-rotate:1deg}.md\:hover\:rotate-2:hover{--transform-rotate:2deg}.md\:hover\:rotate-3:hover{--transform-rotate:3deg}.md\:hover\:rotate-6:hover{--transform-rotate:6deg}.md\:hover\:rotate-12:hover{--transform-rotate:12deg}.md\:hover\:rotate-45:hover{--transform-rotate:45deg}.md\:hover\:rotate-90:hover{--transform-rotate:90deg}.md\:hover\:rotate-180:hover{--transform-rotate:180deg}.md\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.md\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.md\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.md\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.md\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.md\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.md\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.md\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.md\:focus\:rotate-0:focus{--transform-rotate:0}.md\:focus\:rotate-1:focus{--transform-rotate:1deg}.md\:focus\:rotate-2:focus{--transform-rotate:2deg}.md\:focus\:rotate-3:focus{--transform-rotate:3deg}.md\:focus\:rotate-6:focus{--transform-rotate:6deg}.md\:focus\:rotate-12:focus{--transform-rotate:12deg}.md\:focus\:rotate-45:focus{--transform-rotate:45deg}.md\:focus\:rotate-90:focus{--transform-rotate:90deg}.md\:focus\:rotate-180:focus{--transform-rotate:180deg}.md\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.md\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.md\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.md\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.md\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.md\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.md\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.md\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.md\:translate-x-0{--transform-translate-x:0}.md\:translate-x-1{--transform-translate-x:0.25rem}.md\:translate-x-2{--transform-translate-x:0.5rem}.md\:translate-x-3{--transform-translate-x:0.75rem}.md\:translate-x-4{--transform-translate-x:1rem}.md\:translate-x-5{--transform-translate-x:1.25rem}.md\:translate-x-6{--transform-translate-x:1.5rem}.md\:translate-x-8{--transform-translate-x:2rem}.md\:translate-x-10{--transform-translate-x:2.5rem}.md\:translate-x-12{--transform-translate-x:3rem}.md\:translate-x-16{--transform-translate-x:4rem}.md\:translate-x-20{--transform-translate-x:5rem}.md\:translate-x-24{--transform-translate-x:6rem}.md\:translate-x-32{--transform-translate-x:8rem}.md\:translate-x-40{--transform-translate-x:10rem}.md\:translate-x-48{--transform-translate-x:12rem}.md\:translate-x-56{--transform-translate-x:14rem}.md\:translate-x-64{--transform-translate-x:16rem}.md\:translate-x-px{--transform-translate-x:1px}.md\:-translate-x-1{--transform-translate-x:-0.25rem}.md\:-translate-x-2{--transform-translate-x:-0.5rem}.md\:-translate-x-3{--transform-translate-x:-0.75rem}.md\:-translate-x-4{--transform-translate-x:-1rem}.md\:-translate-x-5{--transform-translate-x:-1.25rem}.md\:-translate-x-6{--transform-translate-x:-1.5rem}.md\:-translate-x-8{--transform-translate-x:-2rem}.md\:-translate-x-10{--transform-translate-x:-2.5rem}.md\:-translate-x-12{--transform-translate-x:-3rem}.md\:-translate-x-16{--transform-translate-x:-4rem}.md\:-translate-x-20{--transform-translate-x:-5rem}.md\:-translate-x-24{--transform-translate-x:-6rem}.md\:-translate-x-32{--transform-translate-x:-8rem}.md\:-translate-x-40{--transform-translate-x:-10rem}.md\:-translate-x-48{--transform-translate-x:-12rem}.md\:-translate-x-56{--transform-translate-x:-14rem}.md\:-translate-x-64{--transform-translate-x:-16rem}.md\:-translate-x-px{--transform-translate-x:-1px}.md\:-translate-x-full{--transform-translate-x:-100%}.md\:-translate-x-1\/2{--transform-translate-x:-50%}.md\:translate-x-1\/2{--transform-translate-x:50%}.md\:translate-x-full{--transform-translate-x:100%}.md\:translate-y-0{--transform-translate-y:0}.md\:translate-y-1{--transform-translate-y:0.25rem}.md\:translate-y-2{--transform-translate-y:0.5rem}.md\:translate-y-3{--transform-translate-y:0.75rem}.md\:translate-y-4{--transform-translate-y:1rem}.md\:translate-y-5{--transform-translate-y:1.25rem}.md\:translate-y-6{--transform-translate-y:1.5rem}.md\:translate-y-8{--transform-translate-y:2rem}.md\:translate-y-10{--transform-translate-y:2.5rem}.md\:translate-y-12{--transform-translate-y:3rem}.md\:translate-y-16{--transform-translate-y:4rem}.md\:translate-y-20{--transform-translate-y:5rem}.md\:translate-y-24{--transform-translate-y:6rem}.md\:translate-y-32{--transform-translate-y:8rem}.md\:translate-y-40{--transform-translate-y:10rem}.md\:translate-y-48{--transform-translate-y:12rem}.md\:translate-y-56{--transform-translate-y:14rem}.md\:translate-y-64{--transform-translate-y:16rem}.md\:translate-y-px{--transform-translate-y:1px}.md\:-translate-y-1{--transform-translate-y:-0.25rem}.md\:-translate-y-2{--transform-translate-y:-0.5rem}.md\:-translate-y-3{--transform-translate-y:-0.75rem}.md\:-translate-y-4{--transform-translate-y:-1rem}.md\:-translate-y-5{--transform-translate-y:-1.25rem}.md\:-translate-y-6{--transform-translate-y:-1.5rem}.md\:-translate-y-8{--transform-translate-y:-2rem}.md\:-translate-y-10{--transform-translate-y:-2.5rem}.md\:-translate-y-12{--transform-translate-y:-3rem}.md\:-translate-y-16{--transform-translate-y:-4rem}.md\:-translate-y-20{--transform-translate-y:-5rem}.md\:-translate-y-24{--transform-translate-y:-6rem}.md\:-translate-y-32{--transform-translate-y:-8rem}.md\:-translate-y-40{--transform-translate-y:-10rem}.md\:-translate-y-48{--transform-translate-y:-12rem}.md\:-translate-y-56{--transform-translate-y:-14rem}.md\:-translate-y-64{--transform-translate-y:-16rem}.md\:-translate-y-px{--transform-translate-y:-1px}.md\:-translate-y-full{--transform-translate-y:-100%}.md\:-translate-y-1\/2{--transform-translate-y:-50%}.md\:translate-y-1\/2{--transform-translate-y:50%}.md\:translate-y-full{--transform-translate-y:100%}.md\:hover\:translate-x-0:hover{--transform-translate-x:0}.md\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.md\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.md\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.md\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.md\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.md\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.md\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.md\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.md\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.md\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.md\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.md\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.md\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.md\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.md\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.md\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.md\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.md\:hover\:translate-x-px:hover{--transform-translate-x:1px}.md\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.md\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.md\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.md\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.md\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.md\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.md\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.md\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.md\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.md\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.md\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.md\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.md\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.md\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.md\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.md\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.md\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.md\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.md\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.md\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.md\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.md\:hover\:translate-x-full:hover{--transform-translate-x:100%}.md\:hover\:translate-y-0:hover{--transform-translate-y:0}.md\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.md\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.md\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.md\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.md\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.md\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.md\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.md\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.md\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.md\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.md\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.md\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.md\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.md\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.md\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.md\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.md\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.md\:hover\:translate-y-px:hover{--transform-translate-y:1px}.md\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.md\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.md\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.md\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.md\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.md\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.md\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.md\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.md\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.md\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.md\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.md\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.md\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.md\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.md\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.md\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.md\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.md\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.md\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.md\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.md\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.md\:hover\:translate-y-full:hover{--transform-translate-y:100%}.md\:focus\:translate-x-0:focus{--transform-translate-x:0}.md\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.md\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.md\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.md\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.md\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.md\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.md\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.md\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.md\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.md\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.md\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.md\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.md\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.md\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.md\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.md\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.md\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.md\:focus\:translate-x-px:focus{--transform-translate-x:1px}.md\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.md\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.md\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.md\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.md\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.md\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.md\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.md\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.md\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.md\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.md\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.md\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.md\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.md\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.md\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.md\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.md\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.md\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.md\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.md\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.md\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.md\:focus\:translate-x-full:focus{--transform-translate-x:100%}.md\:focus\:translate-y-0:focus{--transform-translate-y:0}.md\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.md\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.md\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.md\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.md\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.md\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.md\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.md\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.md\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.md\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.md\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.md\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.md\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.md\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.md\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.md\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.md\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.md\:focus\:translate-y-px:focus{--transform-translate-y:1px}.md\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.md\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.md\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.md\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.md\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.md\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.md\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.md\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.md\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.md\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.md\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.md\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.md\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.md\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.md\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.md\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.md\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.md\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.md\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.md\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.md\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.md\:focus\:translate-y-full:focus{--transform-translate-y:100%}.md\:skew-x-0{--transform-skew-x:0}.md\:skew-x-1{--transform-skew-x:1deg}.md\:skew-x-2{--transform-skew-x:2deg}.md\:skew-x-3{--transform-skew-x:3deg}.md\:skew-x-6{--transform-skew-x:6deg}.md\:skew-x-12{--transform-skew-x:12deg}.md\:-skew-x-12{--transform-skew-x:-12deg}.md\:-skew-x-6{--transform-skew-x:-6deg}.md\:-skew-x-3{--transform-skew-x:-3deg}.md\:-skew-x-2{--transform-skew-x:-2deg}.md\:-skew-x-1{--transform-skew-x:-1deg}.md\:skew-y-0{--transform-skew-y:0}.md\:skew-y-1{--transform-skew-y:1deg}.md\:skew-y-2{--transform-skew-y:2deg}.md\:skew-y-3{--transform-skew-y:3deg}.md\:skew-y-6{--transform-skew-y:6deg}.md\:skew-y-12{--transform-skew-y:12deg}.md\:-skew-y-12{--transform-skew-y:-12deg}.md\:-skew-y-6{--transform-skew-y:-6deg}.md\:-skew-y-3{--transform-skew-y:-3deg}.md\:-skew-y-2{--transform-skew-y:-2deg}.md\:-skew-y-1{--transform-skew-y:-1deg}.md\:hover\:skew-x-0:hover{--transform-skew-x:0}.md\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.md\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.md\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.md\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.md\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.md\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.md\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.md\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.md\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.md\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.md\:hover\:skew-y-0:hover{--transform-skew-y:0}.md\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.md\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.md\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.md\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.md\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.md\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.md\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.md\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.md\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.md\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.md\:focus\:skew-x-0:focus{--transform-skew-x:0}.md\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.md\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.md\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.md\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.md\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.md\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.md\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.md\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.md\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.md\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.md\:focus\:skew-y-0:focus{--transform-skew-y:0}.md\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.md\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.md\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.md\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.md\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.md\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.md\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.md\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.md\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.md\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.md\:transition-none{transition-property:none}.md\:transition-all{transition-property:all}.md\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.md\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.md\:transition-opacity{transition-property:opacity}.md\:transition-shadow{transition-property:box-shadow}.md\:transition-transform{transition-property:transform}.md\:ease-linear{transition-timing-function:linear}.md\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.md\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.md\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.md\:duration-75{transition-duration:75ms}.md\:duration-100{transition-duration:.1s}.md\:duration-150{transition-duration:150ms}.md\:duration-200{transition-duration:.2s}.md\:duration-300{transition-duration:.3s}.md\:duration-500{transition-duration:.5s}.md\:duration-700{transition-duration:.7s}.md\:duration-1000{transition-duration:1s}.md\:delay-75{transition-delay:75ms}.md\:delay-100{transition-delay:.1s}.md\:delay-150{transition-delay:150ms}.md\:delay-200{transition-delay:.2s}.md\:delay-300{transition-delay:.3s}.md\:delay-500{transition-delay:.5s}.md\:delay-700{transition-delay:.7s}.md\:delay-1000{transition-delay:1s}.md\:animate-none{animation:none}.md\:animate-spin{animation:spin 1s linear infinite}.md\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.md\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.md\:animate-bounce{animation:bounce 1s infinite}}@media (min-width:1024px){.lg\:container{width:100%}@media (min-width:640px){.lg\:container{max-width:640px}}@media (min-width:768px){.lg\:container{max-width:768px}}@media (min-width:1024px){.lg\:container{max-width:1024px}}@media (min-width:1280px){.lg\:container{max-width:1280px}}.lg\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.lg\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.lg\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.lg\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.lg\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.lg\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.lg\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.lg\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.lg\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.lg\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.lg\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.lg\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.lg\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.lg\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.lg\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.lg\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.lg\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.lg\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.lg\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.lg\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.lg\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.lg\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.lg\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.lg\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.lg\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.lg\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.lg\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.lg\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.lg\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.lg\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.lg\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.lg\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.lg\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.lg\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.lg\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.lg\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.lg\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.lg\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.lg\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.lg\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.lg\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.lg\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.lg\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.lg\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.lg\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.lg\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.lg\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.lg\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.lg\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.lg\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.lg\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.lg\:divide-transparent>:not(template)~:not(template){border-color:transparent}.lg\:divide-current>:not(template)~:not(template){border-color:currentColor}.lg\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.lg\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.lg\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.lg\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.lg\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.lg\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.lg\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.lg\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.lg\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.lg\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.lg\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.lg\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.lg\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.lg\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.lg\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.lg\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.lg\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.lg\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.lg\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.lg\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.lg\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.lg\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.lg\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.lg\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.lg\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.lg\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.lg\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.lg\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.lg\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.lg\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.lg\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.lg\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.lg\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.lg\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.lg\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.lg\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.lg\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.lg\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.lg\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.lg\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.lg\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.lg\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.lg\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.lg\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.lg\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.lg\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.lg\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.lg\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.lg\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.lg\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.lg\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.lg\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.lg\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.lg\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.lg\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.lg\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.lg\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.lg\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.lg\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.lg\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.lg\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.lg\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.lg\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.lg\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.lg\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.lg\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.lg\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.lg\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.lg\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.lg\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.lg\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.lg\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.lg\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.lg\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.lg\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.lg\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.lg\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.lg\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.lg\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.lg\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.lg\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.lg\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.lg\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.lg\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.lg\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.lg\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.lg\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.lg\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.lg\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.lg\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.lg\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.lg\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.lg\:divide-solid>:not(template)~:not(template){border-style:solid}.lg\:divide-dashed>:not(template)~:not(template){border-style:dashed}.lg\:divide-dotted>:not(template)~:not(template){border-style:dotted}.lg\:divide-double>:not(template)~:not(template){border-style:double}.lg\:divide-none>:not(template)~:not(template){border-style:none}.lg\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.lg\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.lg\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.lg\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.lg\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.lg\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lg\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.lg\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.lg\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.lg\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.lg\:bg-fixed{background-attachment:fixed}.lg\:bg-local{background-attachment:local}.lg\:bg-scroll{background-attachment:scroll}.lg\:bg-clip-border{background-clip:border-box}.lg\:bg-clip-padding{background-clip:padding-box}.lg\:bg-clip-content{background-clip:content-box}.lg\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.lg\:bg-transparent{background-color:transparent}.lg\:bg-current{background-color:currentColor}.lg\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.lg\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.lg\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.lg\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.lg\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.lg\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.lg\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.lg\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.lg\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.lg\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.lg\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.lg\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.lg\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.lg\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.lg\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.lg\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.lg\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.lg\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.lg\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.lg\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.lg\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.lg\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.lg\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.lg\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.lg\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.lg\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.lg\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.lg\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.lg\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.lg\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.lg\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.lg\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.lg\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.lg\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.lg\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.lg\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.lg\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.lg\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.lg\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.lg\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.lg\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.lg\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.lg\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.lg\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.lg\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.lg\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.lg\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.lg\:hover\:bg-transparent:hover{background-color:transparent}.lg\:hover\:bg-current:hover{background-color:currentColor}.lg\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.lg\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.lg\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.lg\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.lg\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.lg\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.lg\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.lg\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.lg\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.lg\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.lg\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.lg\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.lg\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.lg\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.lg\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.lg\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.lg\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.lg\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.lg\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.lg\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.lg\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.lg\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.lg\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.lg\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.lg\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.lg\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.lg\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.lg\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.lg\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.lg\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.lg\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.lg\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.lg\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.lg\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.lg\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.lg\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.lg\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.lg\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.lg\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.lg\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.lg\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.lg\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.lg\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.lg\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.lg\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.lg\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.lg\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.lg\:focus\:bg-transparent:focus{background-color:transparent}.lg\:focus\:bg-current:focus{background-color:currentColor}.lg\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.lg\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.lg\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.lg\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.lg\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.lg\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.lg\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.lg\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.lg\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.lg\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.lg\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.lg\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.lg\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.lg\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.lg\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.lg\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.lg\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.lg\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.lg\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.lg\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.lg\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.lg\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.lg\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.lg\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.lg\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.lg\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.lg\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.lg\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.lg\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.lg\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.lg\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.lg\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.lg\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.lg\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.lg\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.lg\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.lg\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.lg\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.lg\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.lg\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.lg\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.lg\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.lg\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.lg\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.lg\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.lg\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.lg\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.lg\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.lg\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.lg\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.lg\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.lg\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.lg\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.lg\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.lg\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.lg\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.lg\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.lg\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.lg\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.lg\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.lg\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.lg\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.lg\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.lg\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.lg\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.lg\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.lg\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.lg\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.lg\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.lg\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.lg\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.lg\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.lg\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.lg\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.lg\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.lg\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.lg\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.lg\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.lg\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.lg\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.lg\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.lg\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.lg\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.lg\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.lg\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.lg\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.lg\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.lg\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.lg\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.lg\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.lg\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.lg\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.lg\:bg-none{background-image:none}.lg\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.lg\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.lg\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.lg\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.lg\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.lg\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.lg\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.lg\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.lg\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:to-transparent{--gradient-to-color:transparent}.lg\:to-current{--gradient-to-color:currentColor}.lg\:to-black{--gradient-to-color:#000}.lg\:to-white{--gradient-to-color:#fff}.lg\:to-gray-100{--gradient-to-color:#f7fafc}.lg\:to-gray-200{--gradient-to-color:#edf2f7}.lg\:to-gray-300{--gradient-to-color:#e2e8f0}.lg\:to-gray-400{--gradient-to-color:#cbd5e0}.lg\:to-gray-500{--gradient-to-color:#a0aec0}.lg\:to-gray-600{--gradient-to-color:#718096}.lg\:to-gray-700{--gradient-to-color:#4a5568}.lg\:to-gray-800{--gradient-to-color:#2d3748}.lg\:to-gray-900{--gradient-to-color:#1a202c}.lg\:to-red-100{--gradient-to-color:#fff5f5}.lg\:to-red-200{--gradient-to-color:#fed7d7}.lg\:to-red-300{--gradient-to-color:#feb2b2}.lg\:to-red-400{--gradient-to-color:#fc8181}.lg\:to-red-500{--gradient-to-color:#f56565}.lg\:to-red-600{--gradient-to-color:#e53e3e}.lg\:to-red-700{--gradient-to-color:#c53030}.lg\:to-red-800{--gradient-to-color:#9b2c2c}.lg\:to-red-900{--gradient-to-color:#742a2a}.lg\:to-orange-100{--gradient-to-color:#fffaf0}.lg\:to-orange-200{--gradient-to-color:#feebc8}.lg\:to-orange-300{--gradient-to-color:#fbd38d}.lg\:to-orange-400{--gradient-to-color:#f6ad55}.lg\:to-orange-500{--gradient-to-color:#ed8936}.lg\:to-orange-600{--gradient-to-color:#dd6b20}.lg\:to-orange-700{--gradient-to-color:#c05621}.lg\:to-orange-800{--gradient-to-color:#9c4221}.lg\:to-orange-900{--gradient-to-color:#7b341e}.lg\:to-yellow-100{--gradient-to-color:#fffff0}.lg\:to-yellow-200{--gradient-to-color:#fefcbf}.lg\:to-yellow-300{--gradient-to-color:#faf089}.lg\:to-yellow-400{--gradient-to-color:#f6e05e}.lg\:to-yellow-500{--gradient-to-color:#ecc94b}.lg\:to-yellow-600{--gradient-to-color:#d69e2e}.lg\:to-yellow-700{--gradient-to-color:#b7791f}.lg\:to-yellow-800{--gradient-to-color:#975a16}.lg\:to-yellow-900{--gradient-to-color:#744210}.lg\:to-green-100{--gradient-to-color:#f0fff4}.lg\:to-green-200{--gradient-to-color:#c6f6d5}.lg\:to-green-300{--gradient-to-color:#9ae6b4}.lg\:to-green-400{--gradient-to-color:#68d391}.lg\:to-green-500{--gradient-to-color:#48bb78}.lg\:to-green-600{--gradient-to-color:#38a169}.lg\:to-green-700{--gradient-to-color:#2f855a}.lg\:to-green-800{--gradient-to-color:#276749}.lg\:to-green-900{--gradient-to-color:#22543d}.lg\:to-teal-100{--gradient-to-color:#e6fffa}.lg\:to-teal-200{--gradient-to-color:#b2f5ea}.lg\:to-teal-300{--gradient-to-color:#81e6d9}.lg\:to-teal-400{--gradient-to-color:#4fd1c5}.lg\:to-teal-500{--gradient-to-color:#38b2ac}.lg\:to-teal-600{--gradient-to-color:#319795}.lg\:to-teal-700{--gradient-to-color:#2c7a7b}.lg\:to-teal-800{--gradient-to-color:#285e61}.lg\:to-teal-900{--gradient-to-color:#234e52}.lg\:to-blue-100{--gradient-to-color:#ebf8ff}.lg\:to-blue-200{--gradient-to-color:#bee3f8}.lg\:to-blue-300{--gradient-to-color:#90cdf4}.lg\:to-blue-400{--gradient-to-color:#63b3ed}.lg\:to-blue-500{--gradient-to-color:#4299e1}.lg\:to-blue-600{--gradient-to-color:#3182ce}.lg\:to-blue-700{--gradient-to-color:#2b6cb0}.lg\:to-blue-800{--gradient-to-color:#2c5282}.lg\:to-blue-900{--gradient-to-color:#2a4365}.lg\:to-indigo-100{--gradient-to-color:#ebf4ff}.lg\:to-indigo-200{--gradient-to-color:#c3dafe}.lg\:to-indigo-300{--gradient-to-color:#a3bffa}.lg\:to-indigo-400{--gradient-to-color:#7f9cf5}.lg\:to-indigo-500{--gradient-to-color:#667eea}.lg\:to-indigo-600{--gradient-to-color:#5a67d8}.lg\:to-indigo-700{--gradient-to-color:#4c51bf}.lg\:to-indigo-800{--gradient-to-color:#434190}.lg\:to-indigo-900{--gradient-to-color:#3c366b}.lg\:to-purple-100{--gradient-to-color:#faf5ff}.lg\:to-purple-200{--gradient-to-color:#e9d8fd}.lg\:to-purple-300{--gradient-to-color:#d6bcfa}.lg\:to-purple-400{--gradient-to-color:#b794f4}.lg\:to-purple-500{--gradient-to-color:#9f7aea}.lg\:to-purple-600{--gradient-to-color:#805ad5}.lg\:to-purple-700{--gradient-to-color:#6b46c1}.lg\:to-purple-800{--gradient-to-color:#553c9a}.lg\:to-purple-900{--gradient-to-color:#44337a}.lg\:to-pink-100{--gradient-to-color:#fff5f7}.lg\:to-pink-200{--gradient-to-color:#fed7e2}.lg\:to-pink-300{--gradient-to-color:#fbb6ce}.lg\:to-pink-400{--gradient-to-color:#f687b3}.lg\:to-pink-500{--gradient-to-color:#ed64a6}.lg\:to-pink-600{--gradient-to-color:#d53f8c}.lg\:to-pink-700{--gradient-to-color:#b83280}.lg\:to-pink-800{--gradient-to-color:#97266d}.lg\:to-pink-900{--gradient-to-color:#702459}.lg\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:hover\:to-transparent:hover{--gradient-to-color:transparent}.lg\:hover\:to-current:hover{--gradient-to-color:currentColor}.lg\:hover\:to-black:hover{--gradient-to-color:#000}.lg\:hover\:to-white:hover{--gradient-to-color:#fff}.lg\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.lg\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.lg\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.lg\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.lg\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.lg\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.lg\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.lg\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.lg\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.lg\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.lg\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.lg\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.lg\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.lg\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.lg\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.lg\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.lg\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.lg\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.lg\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.lg\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.lg\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.lg\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.lg\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.lg\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.lg\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.lg\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.lg\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.lg\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.lg\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.lg\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.lg\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.lg\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.lg\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.lg\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.lg\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.lg\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.lg\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.lg\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.lg\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.lg\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.lg\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.lg\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.lg\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.lg\:hover\:to-green-800:hover{--gradient-to-color:#276749}.lg\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.lg\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.lg\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.lg\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.lg\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.lg\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.lg\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.lg\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.lg\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.lg\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.lg\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.lg\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.lg\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.lg\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.lg\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.lg\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.lg\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.lg\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.lg\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.lg\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.lg\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.lg\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.lg\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.lg\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.lg\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.lg\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.lg\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.lg\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.lg\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.lg\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.lg\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.lg\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.lg\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.lg\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.lg\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.lg\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.lg\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.lg\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.lg\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.lg\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.lg\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.lg\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.lg\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.lg\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.lg\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.lg\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.lg\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.lg\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.lg\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.lg\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.lg\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.lg\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.lg\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.lg\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.lg\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.lg\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.lg\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.lg\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.lg\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.lg\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.lg\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.lg\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.lg\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.lg\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.lg\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.lg\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.lg\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.lg\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.lg\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.lg\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.lg\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.lg\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.lg\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.lg\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.lg\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.lg\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.lg\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.lg\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.lg\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.lg\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.lg\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.lg\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.lg\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.lg\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.lg\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.lg\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.lg\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.lg\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.lg\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.lg\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.lg\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.lg\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.lg\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.lg\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.lg\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.lg\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.lg\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.lg\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.lg\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.lg\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.lg\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.lg\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.lg\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.lg\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.lg\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.lg\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.lg\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.lg\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.lg\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.lg\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.lg\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.lg\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.lg\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.lg\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.lg\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.lg\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.lg\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.lg\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.lg\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.lg\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.lg\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.lg\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.lg\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.lg\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.lg\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.lg\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.lg\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.lg\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.lg\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.lg\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.lg\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.lg\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.lg\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.lg\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.lg\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.lg\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.lg\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.lg\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.lg\:focus\:to-transparent:focus{--gradient-to-color:transparent}.lg\:focus\:to-current:focus{--gradient-to-color:currentColor}.lg\:focus\:to-black:focus{--gradient-to-color:#000}.lg\:focus\:to-white:focus{--gradient-to-color:#fff}.lg\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.lg\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.lg\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.lg\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.lg\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.lg\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.lg\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.lg\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.lg\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.lg\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.lg\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.lg\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.lg\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.lg\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.lg\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.lg\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.lg\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.lg\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.lg\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.lg\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.lg\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.lg\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.lg\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.lg\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.lg\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.lg\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.lg\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.lg\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.lg\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.lg\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.lg\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.lg\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.lg\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.lg\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.lg\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.lg\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.lg\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.lg\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.lg\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.lg\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.lg\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.lg\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.lg\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.lg\:focus\:to-green-800:focus{--gradient-to-color:#276749}.lg\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.lg\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.lg\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.lg\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.lg\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.lg\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.lg\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.lg\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.lg\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.lg\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.lg\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.lg\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.lg\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.lg\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.lg\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.lg\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.lg\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.lg\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.lg\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.lg\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.lg\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.lg\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.lg\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.lg\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.lg\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.lg\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.lg\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.lg\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.lg\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.lg\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.lg\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.lg\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.lg\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.lg\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.lg\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.lg\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.lg\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.lg\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.lg\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.lg\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.lg\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.lg\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.lg\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.lg\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.lg\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.lg\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.lg\:bg-opacity-0{--bg-opacity:0}.lg\:bg-opacity-25{--bg-opacity:0.25}.lg\:bg-opacity-50{--bg-opacity:0.5}.lg\:bg-opacity-75{--bg-opacity:0.75}.lg\:bg-opacity-100{--bg-opacity:1}.lg\:hover\:bg-opacity-0:hover{--bg-opacity:0}.lg\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.lg\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.lg\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.lg\:hover\:bg-opacity-100:hover{--bg-opacity:1}.lg\:focus\:bg-opacity-0:focus{--bg-opacity:0}.lg\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.lg\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.lg\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.lg\:focus\:bg-opacity-100:focus{--bg-opacity:1}.lg\:bg-bottom{background-position:bottom}.lg\:bg-center{background-position:center}.lg\:bg-left{background-position:left}.lg\:bg-left-bottom{background-position:left bottom}.lg\:bg-left-top{background-position:left top}.lg\:bg-right{background-position:right}.lg\:bg-right-bottom{background-position:right bottom}.lg\:bg-right-top{background-position:right top}.lg\:bg-top{background-position:top}.lg\:bg-repeat{background-repeat:repeat}.lg\:bg-no-repeat{background-repeat:no-repeat}.lg\:bg-repeat-x{background-repeat:repeat-x}.lg\:bg-repeat-y{background-repeat:repeat-y}.lg\:bg-repeat-round{background-repeat:round}.lg\:bg-repeat-space{background-repeat:space}.lg\:bg-auto{background-size:auto}.lg\:bg-cover{background-size:cover}.lg\:bg-contain{background-size:contain}.lg\:border-collapse{border-collapse:collapse}.lg\:border-separate{border-collapse:separate}.lg\:border-transparent{border-color:transparent}.lg\:border-current{border-color:currentColor}.lg\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.lg\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.lg\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.lg\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.lg\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.lg\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.lg\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.lg\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.lg\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.lg\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.lg\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.lg\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.lg\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.lg\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.lg\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.lg\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.lg\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.lg\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.lg\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.lg\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.lg\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.lg\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.lg\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.lg\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.lg\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.lg\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.lg\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.lg\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.lg\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.lg\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.lg\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.lg\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.lg\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.lg\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.lg\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.lg\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.lg\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.lg\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.lg\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.lg\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.lg\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.lg\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.lg\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.lg\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.lg\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.lg\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.lg\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.lg\:hover\:border-transparent:hover{border-color:transparent}.lg\:hover\:border-current:hover{border-color:currentColor}.lg\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.lg\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.lg\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.lg\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.lg\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.lg\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.lg\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.lg\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.lg\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.lg\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.lg\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.lg\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.lg\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.lg\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.lg\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.lg\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.lg\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.lg\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.lg\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.lg\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.lg\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.lg\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.lg\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.lg\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.lg\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.lg\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.lg\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.lg\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.lg\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.lg\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.lg\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.lg\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.lg\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.lg\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.lg\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.lg\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.lg\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.lg\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.lg\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.lg\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.lg\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.lg\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.lg\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.lg\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.lg\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.lg\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.lg\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.lg\:focus\:border-transparent:focus{border-color:transparent}.lg\:focus\:border-current:focus{border-color:currentColor}.lg\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.lg\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.lg\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.lg\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.lg\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.lg\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.lg\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.lg\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.lg\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.lg\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.lg\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.lg\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.lg\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.lg\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.lg\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.lg\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.lg\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.lg\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.lg\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.lg\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.lg\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.lg\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.lg\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.lg\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.lg\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.lg\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.lg\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.lg\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.lg\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.lg\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.lg\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.lg\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.lg\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.lg\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.lg\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.lg\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.lg\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.lg\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.lg\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.lg\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.lg\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.lg\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.lg\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.lg\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.lg\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.lg\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.lg\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.lg\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.lg\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.lg\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.lg\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.lg\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.lg\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.lg\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.lg\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.lg\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.lg\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.lg\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.lg\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.lg\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.lg\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.lg\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.lg\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.lg\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.lg\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.lg\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.lg\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.lg\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.lg\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.lg\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.lg\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.lg\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.lg\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.lg\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.lg\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.lg\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.lg\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.lg\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.lg\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.lg\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.lg\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.lg\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.lg\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.lg\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.lg\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.lg\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.lg\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.lg\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.lg\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.lg\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.lg\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.lg\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.lg\:border-opacity-0{--border-opacity:0}.lg\:border-opacity-25{--border-opacity:0.25}.lg\:border-opacity-50{--border-opacity:0.5}.lg\:border-opacity-75{--border-opacity:0.75}.lg\:border-opacity-100{--border-opacity:1}.lg\:hover\:border-opacity-0:hover{--border-opacity:0}.lg\:hover\:border-opacity-25:hover{--border-opacity:0.25}.lg\:hover\:border-opacity-50:hover{--border-opacity:0.5}.lg\:hover\:border-opacity-75:hover{--border-opacity:0.75}.lg\:hover\:border-opacity-100:hover{--border-opacity:1}.lg\:focus\:border-opacity-0:focus{--border-opacity:0}.lg\:focus\:border-opacity-25:focus{--border-opacity:0.25}.lg\:focus\:border-opacity-50:focus{--border-opacity:0.5}.lg\:focus\:border-opacity-75:focus{--border-opacity:0.75}.lg\:focus\:border-opacity-100:focus{--border-opacity:1}.lg\:rounded-none{border-radius:0}.lg\:rounded-sm{border-radius:.125rem}.lg\:rounded{border-radius:.25rem}.lg\:rounded-md{border-radius:.375rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:rounded-xl{border-radius:.75rem}.lg\:rounded-2xl{border-radius:1rem}.lg\:rounded-3xl{border-radius:1.5rem}.lg\:rounded-full{border-radius:9999px}.lg\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.lg\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.lg\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.lg\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.lg\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.lg\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.lg\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.lg\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.lg\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.lg\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.lg\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.lg\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.lg\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.lg\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.lg\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.lg\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.lg\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.lg\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.lg\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.lg\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.lg\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.lg\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.lg\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.lg\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.lg\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.lg\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.lg\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.lg\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.lg\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.lg\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.lg\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.lg\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.lg\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.lg\:rounded-tl-none{border-top-left-radius:0}.lg\:rounded-tr-none{border-top-right-radius:0}.lg\:rounded-br-none{border-bottom-right-radius:0}.lg\:rounded-bl-none{border-bottom-left-radius:0}.lg\:rounded-tl-sm{border-top-left-radius:.125rem}.lg\:rounded-tr-sm{border-top-right-radius:.125rem}.lg\:rounded-br-sm{border-bottom-right-radius:.125rem}.lg\:rounded-bl-sm{border-bottom-left-radius:.125rem}.lg\:rounded-tl{border-top-left-radius:.25rem}.lg\:rounded-tr{border-top-right-radius:.25rem}.lg\:rounded-br{border-bottom-right-radius:.25rem}.lg\:rounded-bl{border-bottom-left-radius:.25rem}.lg\:rounded-tl-md{border-top-left-radius:.375rem}.lg\:rounded-tr-md{border-top-right-radius:.375rem}.lg\:rounded-br-md{border-bottom-right-radius:.375rem}.lg\:rounded-bl-md{border-bottom-left-radius:.375rem}.lg\:rounded-tl-lg{border-top-left-radius:.5rem}.lg\:rounded-tr-lg{border-top-right-radius:.5rem}.lg\:rounded-br-lg{border-bottom-right-radius:.5rem}.lg\:rounded-bl-lg{border-bottom-left-radius:.5rem}.lg\:rounded-tl-xl{border-top-left-radius:.75rem}.lg\:rounded-tr-xl{border-top-right-radius:.75rem}.lg\:rounded-br-xl{border-bottom-right-radius:.75rem}.lg\:rounded-bl-xl{border-bottom-left-radius:.75rem}.lg\:rounded-tl-2xl{border-top-left-radius:1rem}.lg\:rounded-tr-2xl{border-top-right-radius:1rem}.lg\:rounded-br-2xl{border-bottom-right-radius:1rem}.lg\:rounded-bl-2xl{border-bottom-left-radius:1rem}.lg\:rounded-tl-3xl{border-top-left-radius:1.5rem}.lg\:rounded-tr-3xl{border-top-right-radius:1.5rem}.lg\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.lg\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.lg\:rounded-tl-full{border-top-left-radius:9999px}.lg\:rounded-tr-full{border-top-right-radius:9999px}.lg\:rounded-br-full{border-bottom-right-radius:9999px}.lg\:rounded-bl-full{border-bottom-left-radius:9999px}.lg\:border-solid{border-style:solid}.lg\:border-dashed{border-style:dashed}.lg\:border-dotted{border-style:dotted}.lg\:border-double{border-style:double}.lg\:border-none{border-style:none}.lg\:border-0{border-width:0}.lg\:border-2{border-width:2px}.lg\:border-4{border-width:4px}.lg\:border-8{border-width:8px}.lg\:border{border-width:1px}.lg\:border-t-0{border-top-width:0}.lg\:border-r-0{border-right-width:0}.lg\:border-b-0{border-bottom-width:0}.lg\:border-l-0{border-left-width:0}.lg\:border-t-2{border-top-width:2px}.lg\:border-r-2{border-right-width:2px}.lg\:border-b-2{border-bottom-width:2px}.lg\:border-l-2{border-left-width:2px}.lg\:border-t-4{border-top-width:4px}.lg\:border-r-4{border-right-width:4px}.lg\:border-b-4{border-bottom-width:4px}.lg\:border-l-4{border-left-width:4px}.lg\:border-t-8{border-top-width:8px}.lg\:border-r-8{border-right-width:8px}.lg\:border-b-8{border-bottom-width:8px}.lg\:border-l-8{border-left-width:8px}.lg\:border-t{border-top-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b{border-bottom-width:1px}.lg\:border-l{border-left-width:1px}.lg\:box-border{box-sizing:border-box}.lg\:box-content{box-sizing:content-box}.lg\:cursor-auto{cursor:auto}.lg\:cursor-default{cursor:default}.lg\:cursor-pointer{cursor:pointer}.lg\:cursor-wait{cursor:wait}.lg\:cursor-text{cursor:text}.lg\:cursor-move{cursor:move}.lg\:cursor-not-allowed{cursor:not-allowed}.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:inline-flex{display:inline-flex}.lg\:table{display:table}.lg\:table-caption{display:table-caption}.lg\:table-cell{display:table-cell}.lg\:table-column{display:table-column}.lg\:table-column-group{display:table-column-group}.lg\:table-footer-group{display:table-footer-group}.lg\:table-header-group{display:table-header-group}.lg\:table-row-group{display:table-row-group}.lg\:table-row{display:table-row}.lg\:flow-root{display:flow-root}.lg\:grid{display:grid}.lg\:inline-grid{display:inline-grid}.lg\:contents{display:contents}.lg\:hidden{display:none}.lg\:flex-row{flex-direction:row}.lg\:flex-row-reverse{flex-direction:row-reverse}.lg\:flex-col{flex-direction:column}.lg\:flex-col-reverse{flex-direction:column-reverse}.lg\:flex-wrap{flex-wrap:wrap}.lg\:flex-wrap-reverse{flex-wrap:wrap-reverse}.lg\:flex-no-wrap{flex-wrap:nowrap}.lg\:place-items-auto{place-items:auto}.lg\:place-items-start{place-items:start}.lg\:place-items-end{place-items:end}.lg\:place-items-center{place-items:center}.lg\:place-items-stretch{place-items:stretch}.lg\:place-content-center{place-content:center}.lg\:place-content-start{place-content:start}.lg\:place-content-end{place-content:end}.lg\:place-content-between{place-content:space-between}.lg\:place-content-around{place-content:space-around}.lg\:place-content-evenly{place-content:space-evenly}.lg\:place-content-stretch{place-content:stretch}.lg\:place-self-auto{place-self:auto}.lg\:place-self-start{place-self:start}.lg\:place-self-end{place-self:end}.lg\:place-self-center{place-self:center}.lg\:place-self-stretch{place-self:stretch}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:items-baseline{align-items:baseline}.lg\:items-stretch{align-items:stretch}.lg\:content-center{align-content:center}.lg\:content-start{align-content:flex-start}.lg\:content-end{align-content:flex-end}.lg\:content-between{align-content:space-between}.lg\:content-around{align-content:space-around}.lg\:content-evenly{align-content:space-evenly}.lg\:self-auto{align-self:auto}.lg\:self-start{align-self:flex-start}.lg\:self-end{align-self:flex-end}.lg\:self-center{align-self:center}.lg\:self-stretch{align-self:stretch}.lg\:justify-items-auto{justify-items:auto}.lg\:justify-items-start{justify-items:start}.lg\:justify-items-end{justify-items:end}.lg\:justify-items-center{justify-items:center}.lg\:justify-items-stretch{justify-items:stretch}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-center{justify-content:center}.lg\:justify-between{justify-content:space-between}.lg\:justify-around{justify-content:space-around}.lg\:justify-evenly{justify-content:space-evenly}.lg\:justify-self-auto{justify-self:auto}.lg\:justify-self-start{justify-self:start}.lg\:justify-self-end{justify-self:end}.lg\:justify-self-center{justify-self:center}.lg\:justify-self-stretch{justify-self:stretch}.lg\:flex-1{flex:1 1 0%}.lg\:flex-auto{flex:1 1 auto}.lg\:flex-initial{flex:0 1 auto}.lg\:flex-none{flex:none}.lg\:flex-grow-0{flex-grow:0}.lg\:flex-grow{flex-grow:1}.lg\:flex-shrink-0{flex-shrink:0}.lg\:flex-shrink{flex-shrink:1}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-3{order:3}.lg\:order-4{order:4}.lg\:order-5{order:5}.lg\:order-6{order:6}.lg\:order-7{order:7}.lg\:order-8{order:8}.lg\:order-9{order:9}.lg\:order-10{order:10}.lg\:order-11{order:11}.lg\:order-12{order:12}.lg\:order-first{order:-9999}.lg\:order-last{order:9999}.lg\:order-none{order:0}.lg\:float-right{float:right}.lg\:float-left{float:left}.lg\:float-none{float:none}.lg\:clearfix:after{content:"";display:table;clear:both}.lg\:clear-left{clear:left}.lg\:clear-right{clear:right}.lg\:clear-both{clear:both}.lg\:clear-none{clear:none}.lg\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.lg\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.lg\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.lg\:font-hairline{font-weight:100}.lg\:font-thin{font-weight:200}.lg\:font-light{font-weight:300}.lg\:font-normal{font-weight:400}.lg\:font-medium{font-weight:500}.lg\:font-semibold{font-weight:600}.lg\:font-bold{font-weight:700}.lg\:font-extrabold{font-weight:800}.lg\:font-black{font-weight:900}.lg\:hover\:font-hairline:hover{font-weight:100}.lg\:hover\:font-thin:hover{font-weight:200}.lg\:hover\:font-light:hover{font-weight:300}.lg\:hover\:font-normal:hover{font-weight:400}.lg\:hover\:font-medium:hover{font-weight:500}.lg\:hover\:font-semibold:hover{font-weight:600}.lg\:hover\:font-bold:hover{font-weight:700}.lg\:hover\:font-extrabold:hover{font-weight:800}.lg\:hover\:font-black:hover{font-weight:900}.lg\:focus\:font-hairline:focus{font-weight:100}.lg\:focus\:font-thin:focus{font-weight:200}.lg\:focus\:font-light:focus{font-weight:300}.lg\:focus\:font-normal:focus{font-weight:400}.lg\:focus\:font-medium:focus{font-weight:500}.lg\:focus\:font-semibold:focus{font-weight:600}.lg\:focus\:font-bold:focus{font-weight:700}.lg\:focus\:font-extrabold:focus{font-weight:800}.lg\:focus\:font-black:focus{font-weight:900}.lg\:h-0{height:0}.lg\:h-1{height:.25rem}.lg\:h-2{height:.5rem}.lg\:h-3{height:.75rem}.lg\:h-4{height:1rem}.lg\:h-5{height:1.25rem}.lg\:h-6{height:1.5rem}.lg\:h-8{height:2rem}.lg\:h-10{height:2.5rem}.lg\:h-12{height:3rem}.lg\:h-16{height:4rem}.lg\:h-20{height:5rem}.lg\:h-24{height:6rem}.lg\:h-32{height:8rem}.lg\:h-40{height:10rem}.lg\:h-48{height:12rem}.lg\:h-56{height:14rem}.lg\:h-64{height:16rem}.lg\:h-auto{height:auto}.lg\:h-px{height:1px}.lg\:h-full{height:100%}.lg\:h-screen{height:100vh}.lg\:text-xs{font-size:.75rem}.lg\:text-sm{font-size:.875rem}.lg\:text-base{font-size:1rem}.lg\:text-lg{font-size:1.125rem}.lg\:text-xl{font-size:1.25rem}.lg\:text-2xl{font-size:1.5rem}.lg\:text-3xl{font-size:1.875rem}.lg\:text-4xl{font-size:2.25rem}.lg\:text-5xl{font-size:3rem}.lg\:text-6xl{font-size:4rem}.lg\:leading-3{line-height:.75rem}.lg\:leading-4{line-height:1rem}.lg\:leading-5{line-height:1.25rem}.lg\:leading-6{line-height:1.5rem}.lg\:leading-7{line-height:1.75rem}.lg\:leading-8{line-height:2rem}.lg\:leading-9{line-height:2.25rem}.lg\:leading-10{line-height:2.5rem}.lg\:leading-none{line-height:1}.lg\:leading-tight{line-height:1.25}.lg\:leading-snug{line-height:1.375}.lg\:leading-normal{line-height:1.5}.lg\:leading-relaxed{line-height:1.625}.lg\:leading-loose{line-height:2}.lg\:list-inside{list-style-position:inside}.lg\:list-outside{list-style-position:outside}.lg\:list-none{list-style-type:none}.lg\:list-disc{list-style-type:disc}.lg\:list-decimal{list-style-type:decimal}.lg\:m-0{margin:0}.lg\:m-1{margin:.25rem}.lg\:m-2{margin:.5rem}.lg\:m-3{margin:.75rem}.lg\:m-4{margin:1rem}.lg\:m-5{margin:1.25rem}.lg\:m-6{margin:1.5rem}.lg\:m-8{margin:2rem}.lg\:m-10{margin:2.5rem}.lg\:m-12{margin:3rem}.lg\:m-16{margin:4rem}.lg\:m-20{margin:5rem}.lg\:m-24{margin:6rem}.lg\:m-32{margin:8rem}.lg\:m-40{margin:10rem}.lg\:m-48{margin:12rem}.lg\:m-56{margin:14rem}.lg\:m-64{margin:16rem}.lg\:m-auto{margin:auto}.lg\:m-px{margin:1px}.lg\:-m-1{margin:-.25rem}.lg\:-m-2{margin:-.5rem}.lg\:-m-3{margin:-.75rem}.lg\:-m-4{margin:-1rem}.lg\:-m-5{margin:-1.25rem}.lg\:-m-6{margin:-1.5rem}.lg\:-m-8{margin:-2rem}.lg\:-m-10{margin:-2.5rem}.lg\:-m-12{margin:-3rem}.lg\:-m-16{margin:-4rem}.lg\:-m-20{margin:-5rem}.lg\:-m-24{margin:-6rem}.lg\:-m-32{margin:-8rem}.lg\:-m-40{margin:-10rem}.lg\:-m-48{margin:-12rem}.lg\:-m-56{margin:-14rem}.lg\:-m-64{margin:-16rem}.lg\:-m-px{margin:-1px}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\:mx-1{margin-left:.25rem;margin-right:.25rem}.lg\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\:mx-2{margin-left:.5rem;margin-right:.5rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mx-3{margin-left:.75rem;margin-right:.75rem}.lg\:my-4{margin-top:1rem;margin-bottom:1rem}.lg\:mx-4{margin-left:1rem;margin-right:1rem}.lg\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.lg\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.lg\:my-8{margin-top:2rem;margin-bottom:2rem}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.lg\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.lg\:my-12{margin-top:3rem;margin-bottom:3rem}.lg\:mx-12{margin-left:3rem;margin-right:3rem}.lg\:my-16{margin-top:4rem;margin-bottom:4rem}.lg\:mx-16{margin-left:4rem;margin-right:4rem}.lg\:my-20{margin-top:5rem;margin-bottom:5rem}.lg\:mx-20{margin-left:5rem;margin-right:5rem}.lg\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\:mx-24{margin-left:6rem;margin-right:6rem}.lg\:my-32{margin-top:8rem;margin-bottom:8rem}.lg\:mx-32{margin-left:8rem;margin-right:8rem}.lg\:my-40{margin-top:10rem;margin-bottom:10rem}.lg\:mx-40{margin-left:10rem;margin-right:10rem}.lg\:my-48{margin-top:12rem;margin-bottom:12rem}.lg\:mx-48{margin-left:12rem;margin-right:12rem}.lg\:my-56{margin-top:14rem;margin-bottom:14rem}.lg\:mx-56{margin-left:14rem;margin-right:14rem}.lg\:my-64{margin-top:16rem;margin-bottom:16rem}.lg\:mx-64{margin-left:16rem;margin-right:16rem}.lg\:my-auto{margin-top:auto;margin-bottom:auto}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:my-px{margin-top:1px;margin-bottom:1px}.lg\:mx-px{margin-left:1px;margin-right:1px}.lg\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.lg\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.lg\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.lg\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.lg\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.lg\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.lg\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.lg\:-mx-4{margin-left:-1rem;margin-right:-1rem}.lg\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.lg\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.lg\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.lg\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.lg\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.lg\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.lg\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.lg\:-mx-12{margin-left:-3rem;margin-right:-3rem}.lg\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.lg\:-mx-16{margin-left:-4rem;margin-right:-4rem}.lg\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.lg\:-mx-20{margin-left:-5rem;margin-right:-5rem}.lg\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.lg\:-mx-24{margin-left:-6rem;margin-right:-6rem}.lg\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.lg\:-mx-32{margin-left:-8rem;margin-right:-8rem}.lg\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.lg\:-mx-40{margin-left:-10rem;margin-right:-10rem}.lg\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.lg\:-mx-48{margin-left:-12rem;margin-right:-12rem}.lg\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.lg\:-mx-56{margin-left:-14rem;margin-right:-14rem}.lg\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.lg\:-mx-64{margin-left:-16rem;margin-right:-16rem}.lg\:-my-px{margin-top:-1px;margin-bottom:-1px}.lg\:-mx-px{margin-left:-1px;margin-right:-1px}.lg\:mt-0{margin-top:0}.lg\:mr-0{margin-right:0}.lg\:mb-0{margin-bottom:0}.lg\:ml-0{margin-left:0}.lg\:mt-1{margin-top:.25rem}.lg\:mr-1{margin-right:.25rem}.lg\:mb-1{margin-bottom:.25rem}.lg\:ml-1{margin-left:.25rem}.lg\:mt-2{margin-top:.5rem}.lg\:mr-2{margin-right:.5rem}.lg\:mb-2{margin-bottom:.5rem}.lg\:ml-2{margin-left:.5rem}.lg\:mt-3{margin-top:.75rem}.lg\:mr-3{margin-right:.75rem}.lg\:mb-3{margin-bottom:.75rem}.lg\:ml-3{margin-left:.75rem}.lg\:mt-4{margin-top:1rem}.lg\:mr-4{margin-right:1rem}.lg\:mb-4{margin-bottom:1rem}.lg\:ml-4{margin-left:1rem}.lg\:mt-5{margin-top:1.25rem}.lg\:mr-5{margin-right:1.25rem}.lg\:mb-5{margin-bottom:1.25rem}.lg\:ml-5{margin-left:1.25rem}.lg\:mt-6{margin-top:1.5rem}.lg\:mr-6{margin-right:1.5rem}.lg\:mb-6{margin-bottom:1.5rem}.lg\:ml-6{margin-left:1.5rem}.lg\:mt-8{margin-top:2rem}.lg\:mr-8{margin-right:2rem}.lg\:mb-8{margin-bottom:2rem}.lg\:ml-8{margin-left:2rem}.lg\:mt-10{margin-top:2.5rem}.lg\:mr-10{margin-right:2.5rem}.lg\:mb-10{margin-bottom:2.5rem}.lg\:ml-10{margin-left:2.5rem}.lg\:mt-12{margin-top:3rem}.lg\:mr-12{margin-right:3rem}.lg\:mb-12{margin-bottom:3rem}.lg\:ml-12{margin-left:3rem}.lg\:mt-16{margin-top:4rem}.lg\:mr-16{margin-right:4rem}.lg\:mb-16{margin-bottom:4rem}.lg\:ml-16{margin-left:4rem}.lg\:mt-20{margin-top:5rem}.lg\:mr-20{margin-right:5rem}.lg\:mb-20{margin-bottom:5rem}.lg\:ml-20{margin-left:5rem}.lg\:mt-24{margin-top:6rem}.lg\:mr-24{margin-right:6rem}.lg\:mb-24{margin-bottom:6rem}.lg\:ml-24{margin-left:6rem}.lg\:mt-32{margin-top:8rem}.lg\:mr-32{margin-right:8rem}.lg\:mb-32{margin-bottom:8rem}.lg\:ml-32{margin-left:8rem}.lg\:mt-40{margin-top:10rem}.lg\:mr-40{margin-right:10rem}.lg\:mb-40{margin-bottom:10rem}.lg\:ml-40{margin-left:10rem}.lg\:mt-48{margin-top:12rem}.lg\:mr-48{margin-right:12rem}.lg\:mb-48{margin-bottom:12rem}.lg\:ml-48{margin-left:12rem}.lg\:mt-56{margin-top:14rem}.lg\:mr-56{margin-right:14rem}.lg\:mb-56{margin-bottom:14rem}.lg\:ml-56{margin-left:14rem}.lg\:mt-64{margin-top:16rem}.lg\:mr-64{margin-right:16rem}.lg\:mb-64{margin-bottom:16rem}.lg\:ml-64{margin-left:16rem}.lg\:mt-auto{margin-top:auto}.lg\:mr-auto{margin-right:auto}.lg\:mb-auto{margin-bottom:auto}.lg\:ml-auto{margin-left:auto}.lg\:mt-px{margin-top:1px}.lg\:mr-px{margin-right:1px}.lg\:mb-px{margin-bottom:1px}.lg\:ml-px{margin-left:1px}.lg\:-mt-1{margin-top:-.25rem}.lg\:-mr-1{margin-right:-.25rem}.lg\:-mb-1{margin-bottom:-.25rem}.lg\:-ml-1{margin-left:-.25rem}.lg\:-mt-2{margin-top:-.5rem}.lg\:-mr-2{margin-right:-.5rem}.lg\:-mb-2{margin-bottom:-.5rem}.lg\:-ml-2{margin-left:-.5rem}.lg\:-mt-3{margin-top:-.75rem}.lg\:-mr-3{margin-right:-.75rem}.lg\:-mb-3{margin-bottom:-.75rem}.lg\:-ml-3{margin-left:-.75rem}.lg\:-mt-4{margin-top:-1rem}.lg\:-mr-4{margin-right:-1rem}.lg\:-mb-4{margin-bottom:-1rem}.lg\:-ml-4{margin-left:-1rem}.lg\:-mt-5{margin-top:-1.25rem}.lg\:-mr-5{margin-right:-1.25rem}.lg\:-mb-5{margin-bottom:-1.25rem}.lg\:-ml-5{margin-left:-1.25rem}.lg\:-mt-6{margin-top:-1.5rem}.lg\:-mr-6{margin-right:-1.5rem}.lg\:-mb-6{margin-bottom:-1.5rem}.lg\:-ml-6{margin-left:-1.5rem}.lg\:-mt-8{margin-top:-2rem}.lg\:-mr-8{margin-right:-2rem}.lg\:-mb-8{margin-bottom:-2rem}.lg\:-ml-8{margin-left:-2rem}.lg\:-mt-10{margin-top:-2.5rem}.lg\:-mr-10{margin-right:-2.5rem}.lg\:-mb-10{margin-bottom:-2.5rem}.lg\:-ml-10{margin-left:-2.5rem}.lg\:-mt-12{margin-top:-3rem}.lg\:-mr-12{margin-right:-3rem}.lg\:-mb-12{margin-bottom:-3rem}.lg\:-ml-12{margin-left:-3rem}.lg\:-mt-16{margin-top:-4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:-mb-16{margin-bottom:-4rem}.lg\:-ml-16{margin-left:-4rem}.lg\:-mt-20{margin-top:-5rem}.lg\:-mr-20{margin-right:-5rem}.lg\:-mb-20{margin-bottom:-5rem}.lg\:-ml-20{margin-left:-5rem}.lg\:-mt-24{margin-top:-6rem}.lg\:-mr-24{margin-right:-6rem}.lg\:-mb-24{margin-bottom:-6rem}.lg\:-ml-24{margin-left:-6rem}.lg\:-mt-32{margin-top:-8rem}.lg\:-mr-32{margin-right:-8rem}.lg\:-mb-32{margin-bottom:-8rem}.lg\:-ml-32{margin-left:-8rem}.lg\:-mt-40{margin-top:-10rem}.lg\:-mr-40{margin-right:-10rem}.lg\:-mb-40{margin-bottom:-10rem}.lg\:-ml-40{margin-left:-10rem}.lg\:-mt-48{margin-top:-12rem}.lg\:-mr-48{margin-right:-12rem}.lg\:-mb-48{margin-bottom:-12rem}.lg\:-ml-48{margin-left:-12rem}.lg\:-mt-56{margin-top:-14rem}.lg\:-mr-56{margin-right:-14rem}.lg\:-mb-56{margin-bottom:-14rem}.lg\:-ml-56{margin-left:-14rem}.lg\:-mt-64{margin-top:-16rem}.lg\:-mr-64{margin-right:-16rem}.lg\:-mb-64{margin-bottom:-16rem}.lg\:-ml-64{margin-left:-16rem}.lg\:-mt-px{margin-top:-1px}.lg\:-mr-px{margin-right:-1px}.lg\:-mb-px{margin-bottom:-1px}.lg\:-ml-px{margin-left:-1px}.lg\:max-h-full{max-height:100%}.lg\:max-h-screen{max-height:100vh}.lg\:max-w-none{max-width:none}.lg\:max-w-xs{max-width:20rem}.lg\:max-w-sm{max-width:24rem}.lg\:max-w-md{max-width:28rem}.lg\:max-w-lg{max-width:32rem}.lg\:max-w-xl{max-width:36rem}.lg\:max-w-2xl{max-width:42rem}.lg\:max-w-3xl{max-width:48rem}.lg\:max-w-4xl{max-width:56rem}.lg\:max-w-5xl{max-width:64rem}.lg\:max-w-6xl{max-width:72rem}.lg\:max-w-full{max-width:100%}.lg\:max-w-screen-sm{max-width:640px}.lg\:max-w-screen-md{max-width:768px}.lg\:max-w-screen-lg{max-width:1024px}.lg\:max-w-screen-xl{max-width:1280px}.lg\:min-h-0{min-height:0}.lg\:min-h-full{min-height:100%}.lg\:min-h-screen{min-height:100vh}.lg\:min-w-0{min-width:0}.lg\:min-w-full{min-width:100%}.lg\:object-contain{object-fit:contain}.lg\:object-cover{object-fit:cover}.lg\:object-fill{object-fit:fill}.lg\:object-none{object-fit:none}.lg\:object-scale-down{object-fit:scale-down}.lg\:object-bottom{object-position:bottom}.lg\:object-center{object-position:center}.lg\:object-left{object-position:left}.lg\:object-left-bottom{object-position:left bottom}.lg\:object-left-top{object-position:left top}.lg\:object-right{object-position:right}.lg\:object-right-bottom{object-position:right bottom}.lg\:object-right-top{object-position:right top}.lg\:object-top{object-position:top}.lg\:opacity-0{opacity:0}.lg\:opacity-25{opacity:.25}.lg\:opacity-50{opacity:.5}.lg\:opacity-75{opacity:.75}.lg\:opacity-100{opacity:1}.lg\:hover\:opacity-0:hover{opacity:0}.lg\:hover\:opacity-25:hover{opacity:.25}.lg\:hover\:opacity-50:hover{opacity:.5}.lg\:hover\:opacity-75:hover{opacity:.75}.lg\:hover\:opacity-100:hover{opacity:1}.lg\:focus\:opacity-0:focus{opacity:0}.lg\:focus\:opacity-25:focus{opacity:.25}.lg\:focus\:opacity-50:focus{opacity:.5}.lg\:focus\:opacity-75:focus{opacity:.75}.lg\:focus\:opacity-100:focus{opacity:1}.lg\:outline-none{outline:2px solid transparent;outline-offset:2px}.lg\:outline-white{outline:2px dotted #fff;outline-offset:2px}.lg\:outline-black{outline:2px dotted #000;outline-offset:2px}.lg\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.lg\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.lg\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.lg\:overflow-auto{overflow:auto}.lg\:overflow-hidden{overflow:hidden}.lg\:overflow-visible{overflow:visible}.lg\:overflow-scroll{overflow:scroll}.lg\:overflow-x-auto{overflow-x:auto}.lg\:overflow-y-auto{overflow-y:auto}.lg\:overflow-x-hidden{overflow-x:hidden}.lg\:overflow-y-hidden{overflow-y:hidden}.lg\:overflow-x-visible{overflow-x:visible}.lg\:overflow-y-visible{overflow-y:visible}.lg\:overflow-x-scroll{overflow-x:scroll}.lg\:overflow-y-scroll{overflow-y:scroll}.lg\:scrolling-touch{-webkit-overflow-scrolling:touch}.lg\:scrolling-auto{-webkit-overflow-scrolling:auto}.lg\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.lg\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.lg\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.lg\:overscroll-y-auto{overscroll-behavior-y:auto}.lg\:overscroll-y-contain{overscroll-behavior-y:contain}.lg\:overscroll-y-none{overscroll-behavior-y:none}.lg\:overscroll-x-auto{overscroll-behavior-x:auto}.lg\:overscroll-x-contain{overscroll-behavior-x:contain}.lg\:overscroll-x-none{overscroll-behavior-x:none}.lg\:p-0{padding:0}.lg\:p-1{padding:.25rem}.lg\:p-2{padding:.5rem}.lg\:p-3{padding:.75rem}.lg\:p-4{padding:1rem}.lg\:p-5{padding:1.25rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:p-10{padding:2.5rem}.lg\:p-12{padding:3rem}.lg\:p-16{padding:4rem}.lg\:p-20{padding:5rem}.lg\:p-24{padding:6rem}.lg\:p-32{padding:8rem}.lg\:p-40{padding:10rem}.lg\:p-48{padding:12rem}.lg\:p-56{padding:14rem}.lg\:p-64{padding:16rem}.lg\:p-px{padding:1px}.lg\:py-0{padding-top:0;padding-bottom:0}.lg\:px-0{padding-left:0;padding-right:0}.lg\:py-1{padding-top:.25rem;padding-bottom:.25rem}.lg\:px-1{padding-left:.25rem;padding-right:.25rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:py-3{padding-top:.75rem;padding-bottom:.75rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:py-4{padding-top:1rem;padding-bottom:1rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.lg\:px-5{padding-left:1.25rem;padding-right:1.25rem}.lg\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\:px-10{padding-left:2.5rem;padding-right:2.5rem}.lg\:py-12{padding-top:3rem;padding-bottom:3rem}.lg\:px-12{padding-left:3rem;padding-right:3rem}.lg\:py-16{padding-top:4rem;padding-bottom:4rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:px-20{padding-left:5rem;padding-right:5rem}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:px-24{padding-left:6rem;padding-right:6rem}.lg\:py-32{padding-top:8rem;padding-bottom:8rem}.lg\:px-32{padding-left:8rem;padding-right:8rem}.lg\:py-40{padding-top:10rem;padding-bottom:10rem}.lg\:px-40{padding-left:10rem;padding-right:10rem}.lg\:py-48{padding-top:12rem;padding-bottom:12rem}.lg\:px-48{padding-left:12rem;padding-right:12rem}.lg\:py-56{padding-top:14rem;padding-bottom:14rem}.lg\:px-56{padding-left:14rem;padding-right:14rem}.lg\:py-64{padding-top:16rem;padding-bottom:16rem}.lg\:px-64{padding-left:16rem;padding-right:16rem}.lg\:py-px{padding-top:1px;padding-bottom:1px}.lg\:px-px{padding-left:1px;padding-right:1px}.lg\:pt-0{padding-top:0}.lg\:pr-0{padding-right:0}.lg\:pb-0{padding-bottom:0}.lg\:pl-0{padding-left:0}.lg\:pt-1{padding-top:.25rem}.lg\:pr-1{padding-right:.25rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:pl-1{padding-left:.25rem}.lg\:pt-2{padding-top:.5rem}.lg\:pr-2{padding-right:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:pt-3{padding-top:.75rem}.lg\:pr-3{padding-right:.75rem}.lg\:pb-3{padding-bottom:.75rem}.lg\:pl-3{padding-left:.75rem}.lg\:pt-4{padding-top:1rem}.lg\:pr-4{padding-right:1rem}.lg\:pb-4{padding-bottom:1rem}.lg\:pl-4{padding-left:1rem}.lg\:pt-5{padding-top:1.25rem}.lg\:pr-5{padding-right:1.25rem}.lg\:pb-5{padding-bottom:1.25rem}.lg\:pl-5{padding-left:1.25rem}.lg\:pt-6{padding-top:1.5rem}.lg\:pr-6{padding-right:1.5rem}.lg\:pb-6{padding-bottom:1.5rem}.lg\:pl-6{padding-left:1.5rem}.lg\:pt-8{padding-top:2rem}.lg\:pr-8{padding-right:2rem}.lg\:pb-8{padding-bottom:2rem}.lg\:pl-8{padding-left:2rem}.lg\:pt-10{padding-top:2.5rem}.lg\:pr-10{padding-right:2.5rem}.lg\:pb-10{padding-bottom:2.5rem}.lg\:pl-10{padding-left:2.5rem}.lg\:pt-12{padding-top:3rem}.lg\:pr-12{padding-right:3rem}.lg\:pb-12{padding-bottom:3rem}.lg\:pl-12{padding-left:3rem}.lg\:pt-16{padding-top:4rem}.lg\:pr-16{padding-right:4rem}.lg\:pb-16{padding-bottom:4rem}.lg\:pl-16{padding-left:4rem}.lg\:pt-20{padding-top:5rem}.lg\:pr-20{padding-right:5rem}.lg\:pb-20{padding-bottom:5rem}.lg\:pl-20{padding-left:5rem}.lg\:pt-24{padding-top:6rem}.lg\:pr-24{padding-right:6rem}.lg\:pb-24{padding-bottom:6rem}.lg\:pl-24{padding-left:6rem}.lg\:pt-32{padding-top:8rem}.lg\:pr-32{padding-right:8rem}.lg\:pb-32{padding-bottom:8rem}.lg\:pl-32{padding-left:8rem}.lg\:pt-40{padding-top:10rem}.lg\:pr-40{padding-right:10rem}.lg\:pb-40{padding-bottom:10rem}.lg\:pl-40{padding-left:10rem}.lg\:pt-48{padding-top:12rem}.lg\:pr-48{padding-right:12rem}.lg\:pb-48{padding-bottom:12rem}.lg\:pl-48{padding-left:12rem}.lg\:pt-56{padding-top:14rem}.lg\:pr-56{padding-right:14rem}.lg\:pb-56{padding-bottom:14rem}.lg\:pl-56{padding-left:14rem}.lg\:pt-64{padding-top:16rem}.lg\:pr-64{padding-right:16rem}.lg\:pb-64{padding-bottom:16rem}.lg\:pl-64{padding-left:16rem}.lg\:pt-px{padding-top:1px}.lg\:pr-px{padding-right:1px}.lg\:pb-px{padding-bottom:1px}.lg\:pl-px{padding-left:1px}.lg\:placeholder-transparent:-ms-input-placeholder{color:transparent}.lg\:placeholder-transparent::-ms-input-placeholder{color:transparent}.lg\:placeholder-transparent::placeholder{color:transparent}.lg\:placeholder-current:-ms-input-placeholder{color:currentColor}.lg\:placeholder-current::-ms-input-placeholder{color:currentColor}.lg\:placeholder-current::placeholder{color:currentColor}.lg\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.lg\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.lg\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.lg\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.lg\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.lg\:focus\:placeholder-current:focus::placeholder{color:currentColor}.lg\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.lg\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.lg\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.lg\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.lg\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.lg\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.lg\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.lg\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.lg\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.lg\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.lg\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.lg\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.lg\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.lg\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.lg\:pointer-events-none{pointer-events:none}.lg\:pointer-events-auto{pointer-events:auto}.lg\:static{position:static}.lg\:fixed{position:fixed}.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:sticky{position:-webkit-sticky;position:sticky}.lg\:inset-0{top:0;right:0;bottom:0;left:0}.lg\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.lg\:inset-y-0{top:0;bottom:0}.lg\:inset-x-0{right:0;left:0}.lg\:inset-y-auto{top:auto;bottom:auto}.lg\:inset-x-auto{right:auto;left:auto}.lg\:top-0{top:0}.lg\:right-0{right:0}.lg\:bottom-0{bottom:0}.lg\:left-0{left:0}.lg\:top-auto{top:auto}.lg\:right-auto{right:auto}.lg\:bottom-auto{bottom:auto}.lg\:left-auto{left:auto}.lg\:resize-none{resize:none}.lg\:resize-y{resize:vertical}.lg\:resize-x{resize:horizontal}.lg\:resize{resize:both}.lg\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.lg\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:shadow-none{box-shadow:none}.lg\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.lg\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:hover\:shadow-none:hover{box-shadow:none}.lg\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.lg\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.lg\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.lg\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.lg\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.lg\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.lg\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.lg\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.lg\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.lg\:focus\:shadow-none:focus{box-shadow:none}.lg\:fill-current{fill:currentColor}.lg\:stroke-current{stroke:currentColor}.lg\:stroke-0{stroke-width:0}.lg\:stroke-1{stroke-width:1}.lg\:stroke-2{stroke-width:2}.lg\:table-auto{table-layout:auto}.lg\:table-fixed{table-layout:fixed}.lg\:text-left{text-align:left}.lg\:text-center{text-align:center}.lg\:text-right{text-align:right}.lg\:text-justify{text-align:justify}.lg\:text-transparent{color:transparent}.lg\:text-current{color:currentColor}.lg\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.lg\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.lg\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.lg\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.lg\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.lg\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.lg\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.lg\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.lg\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.lg\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.lg\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.lg\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.lg\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.lg\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.lg\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.lg\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.lg\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.lg\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.lg\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.lg\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.lg\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.lg\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.lg\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.lg\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.lg\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.lg\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.lg\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.lg\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.lg\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.lg\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.lg\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.lg\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.lg\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.lg\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.lg\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.lg\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.lg\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.lg\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.lg\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.lg\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.lg\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.lg\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.lg\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.lg\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.lg\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.lg\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.lg\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.lg\:hover\:text-transparent:hover{color:transparent}.lg\:hover\:text-current:hover{color:currentColor}.lg\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.lg\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.lg\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.lg\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.lg\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.lg\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.lg\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.lg\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.lg\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.lg\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.lg\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.lg\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.lg\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.lg\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.lg\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.lg\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.lg\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.lg\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.lg\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.lg\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.lg\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.lg\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.lg\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.lg\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.lg\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.lg\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.lg\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.lg\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.lg\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.lg\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.lg\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.lg\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.lg\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.lg\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.lg\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.lg\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.lg\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.lg\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.lg\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.lg\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.lg\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.lg\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.lg\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.lg\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.lg\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.lg\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.lg\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.lg\:focus\:text-transparent:focus{color:transparent}.lg\:focus\:text-current:focus{color:currentColor}.lg\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.lg\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.lg\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.lg\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.lg\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.lg\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.lg\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.lg\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.lg\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.lg\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.lg\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.lg\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.lg\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.lg\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.lg\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.lg\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.lg\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.lg\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.lg\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.lg\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.lg\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.lg\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.lg\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.lg\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.lg\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.lg\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.lg\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.lg\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.lg\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.lg\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.lg\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.lg\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.lg\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.lg\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.lg\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.lg\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.lg\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.lg\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.lg\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.lg\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.lg\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.lg\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.lg\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.lg\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.lg\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.lg\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.lg\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.lg\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.lg\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.lg\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.lg\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.lg\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.lg\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.lg\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.lg\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.lg\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.lg\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.lg\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.lg\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.lg\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.lg\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.lg\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.lg\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.lg\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.lg\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.lg\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.lg\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.lg\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.lg\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.lg\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.lg\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.lg\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.lg\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.lg\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.lg\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.lg\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.lg\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.lg\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.lg\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.lg\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.lg\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.lg\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.lg\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.lg\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.lg\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.lg\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.lg\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.lg\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.lg\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.lg\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.lg\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.lg\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.lg\:text-opacity-0{--text-opacity:0}.lg\:text-opacity-25{--text-opacity:0.25}.lg\:text-opacity-50{--text-opacity:0.5}.lg\:text-opacity-75{--text-opacity:0.75}.lg\:text-opacity-100{--text-opacity:1}.lg\:hover\:text-opacity-0:hover{--text-opacity:0}.lg\:hover\:text-opacity-25:hover{--text-opacity:0.25}.lg\:hover\:text-opacity-50:hover{--text-opacity:0.5}.lg\:hover\:text-opacity-75:hover{--text-opacity:0.75}.lg\:hover\:text-opacity-100:hover{--text-opacity:1}.lg\:focus\:text-opacity-0:focus{--text-opacity:0}.lg\:focus\:text-opacity-25:focus{--text-opacity:0.25}.lg\:focus\:text-opacity-50:focus{--text-opacity:0.5}.lg\:focus\:text-opacity-75:focus{--text-opacity:0.75}.lg\:focus\:text-opacity-100:focus{--text-opacity:1}.lg\:italic{font-style:italic}.lg\:not-italic{font-style:normal}.lg\:uppercase{text-transform:uppercase}.lg\:lowercase{text-transform:lowercase}.lg\:capitalize{text-transform:capitalize}.lg\:normal-case{text-transform:none}.lg\:underline{text-decoration:underline}.lg\:line-through{text-decoration:line-through}.lg\:no-underline{text-decoration:none}.lg\:hover\:underline:hover{text-decoration:underline}.lg\:hover\:line-through:hover{text-decoration:line-through}.lg\:hover\:no-underline:hover{text-decoration:none}.lg\:focus\:underline:focus{text-decoration:underline}.lg\:focus\:line-through:focus{text-decoration:line-through}.lg\:focus\:no-underline:focus{text-decoration:none}.lg\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.lg\:diagonal-fractions,.lg\:lining-nums,.lg\:oldstyle-nums,.lg\:ordinal,.lg\:proportional-nums,.lg\:slashed-zero,.lg\:stacked-fractions,.lg\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.lg\:normal-nums{font-variant-numeric:normal}.lg\:ordinal{--font-variant-numeric-ordinal:ordinal}.lg\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.lg\:lining-nums{--font-variant-numeric-figure:lining-nums}.lg\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.lg\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.lg\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.lg\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.lg\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.lg\:tracking-tighter{letter-spacing:-.05em}.lg\:tracking-tight{letter-spacing:-.025em}.lg\:tracking-normal{letter-spacing:0}.lg\:tracking-wide{letter-spacing:.025em}.lg\:tracking-wider{letter-spacing:.05em}.lg\:tracking-widest{letter-spacing:.1em}.lg\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.lg\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.lg\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.lg\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.lg\:align-baseline{vertical-align:baseline}.lg\:align-top{vertical-align:top}.lg\:align-middle{vertical-align:middle}.lg\:align-bottom{vertical-align:bottom}.lg\:align-text-top{vertical-align:text-top}.lg\:align-text-bottom{vertical-align:text-bottom}.lg\:visible{visibility:visible}.lg\:invisible{visibility:hidden}.lg\:whitespace-normal{white-space:normal}.lg\:whitespace-no-wrap{white-space:nowrap}.lg\:whitespace-pre{white-space:pre}.lg\:whitespace-pre-line{white-space:pre-line}.lg\:whitespace-pre-wrap{white-space:pre-wrap}.lg\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.lg\:break-words{word-wrap:break-word;overflow-wrap:break-word}.lg\:break-all{word-break:break-all}.lg\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lg\:w-0{width:0}.lg\:w-1{width:.25rem}.lg\:w-2{width:.5rem}.lg\:w-3{width:.75rem}.lg\:w-4{width:1rem}.lg\:w-5{width:1.25rem}.lg\:w-6{width:1.5rem}.lg\:w-8{width:2rem}.lg\:w-10{width:2.5rem}.lg\:w-12{width:3rem}.lg\:w-16{width:4rem}.lg\:w-20{width:5rem}.lg\:w-24{width:6rem}.lg\:w-32{width:8rem}.lg\:w-40{width:10rem}.lg\:w-48{width:12rem}.lg\:w-56{width:14rem}.lg\:w-64{width:16rem}.lg\:w-auto{width:auto}.lg\:w-px{width:1px}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.333333%}.lg\:w-2\/3{width:66.666667%}.lg\:w-1\/4{width:25%}.lg\:w-2\/4{width:50%}.lg\:w-3\/4{width:75%}.lg\:w-1\/5{width:20%}.lg\:w-2\/5{width:40%}.lg\:w-3\/5{width:60%}.lg\:w-4\/5{width:80%}.lg\:w-1\/6{width:16.666667%}.lg\:w-2\/6{width:33.333333%}.lg\:w-3\/6{width:50%}.lg\:w-4\/6{width:66.666667%}.lg\:w-5\/6{width:83.333333%}.lg\:w-1\/12{width:8.333333%}.lg\:w-2\/12{width:16.666667%}.lg\:w-3\/12{width:25%}.lg\:w-4\/12{width:33.333333%}.lg\:w-5\/12{width:41.666667%}.lg\:w-6\/12{width:50%}.lg\:w-7\/12{width:58.333333%}.lg\:w-8\/12{width:66.666667%}.lg\:w-9\/12{width:75%}.lg\:w-10\/12{width:83.333333%}.lg\:w-11\/12{width:91.666667%}.lg\:w-full{width:100%}.lg\:w-screen{width:100vw}.lg\:z-0{z-index:0}.lg\:z-10{z-index:10}.lg\:z-20{z-index:20}.lg\:z-30{z-index:30}.lg\:z-40{z-index:40}.lg\:z-50{z-index:50}.lg\:z-auto{z-index:auto}.lg\:gap-0{grid-gap:0;gap:0}.lg\:gap-1{grid-gap:.25rem;gap:.25rem}.lg\:gap-2{grid-gap:.5rem;gap:.5rem}.lg\:gap-3{grid-gap:.75rem;gap:.75rem}.lg\:gap-4{grid-gap:1rem;gap:1rem}.lg\:gap-5{grid-gap:1.25rem;gap:1.25rem}.lg\:gap-6{grid-gap:1.5rem;gap:1.5rem}.lg\:gap-8{grid-gap:2rem;gap:2rem}.lg\:gap-10{grid-gap:2.5rem;gap:2.5rem}.lg\:gap-12{grid-gap:3rem;gap:3rem}.lg\:gap-16{grid-gap:4rem;gap:4rem}.lg\:gap-20{grid-gap:5rem;gap:5rem}.lg\:gap-24{grid-gap:6rem;gap:6rem}.lg\:gap-32{grid-gap:8rem;gap:8rem}.lg\:gap-40{grid-gap:10rem;gap:10rem}.lg\:gap-48{grid-gap:12rem;gap:12rem}.lg\:gap-56{grid-gap:14rem;gap:14rem}.lg\:gap-64{grid-gap:16rem;gap:16rem}.lg\:gap-px{grid-gap:1px;gap:1px}.lg\:col-gap-0{grid-column-gap:0;column-gap:0}.lg\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.lg\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.lg\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.lg\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.lg\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.lg\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.lg\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.lg\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.lg\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.lg\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.lg\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.lg\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.lg\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.lg\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.lg\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.lg\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.lg\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.lg\:col-gap-px{grid-column-gap:1px;column-gap:1px}.lg\:gap-x-0{grid-column-gap:0;column-gap:0}.lg\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.lg\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.lg\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.lg\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.lg\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.lg\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.lg\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.lg\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.lg\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.lg\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.lg\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.lg\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.lg\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.lg\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.lg\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.lg\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.lg\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.lg\:gap-x-px{grid-column-gap:1px;column-gap:1px}.lg\:row-gap-0{grid-row-gap:0;row-gap:0}.lg\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.lg\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.lg\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.lg\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.lg\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.lg\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.lg\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.lg\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.lg\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.lg\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.lg\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.lg\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.lg\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.lg\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.lg\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.lg\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.lg\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.lg\:row-gap-px{grid-row-gap:1px;row-gap:1px}.lg\:gap-y-0{grid-row-gap:0;row-gap:0}.lg\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.lg\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.lg\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.lg\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.lg\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.lg\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.lg\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.lg\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.lg\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.lg\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.lg\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.lg\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.lg\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.lg\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.lg\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.lg\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.lg\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.lg\:gap-y-px{grid-row-gap:1px;row-gap:1px}.lg\:grid-flow-row{grid-auto-flow:row}.lg\:grid-flow-col{grid-auto-flow:column}.lg\:grid-flow-row-dense{grid-auto-flow:row dense}.lg\:grid-flow-col-dense{grid-auto-flow:column dense}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.lg\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.lg\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-none{grid-template-columns:none}.lg\:auto-cols-auto{grid-auto-columns:auto}.lg\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.lg\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.lg\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.lg\:col-auto{grid-column:auto}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-span-9{grid-column:span 9/span 9}.lg\:col-span-10{grid-column:span 10/span 10}.lg\:col-span-11{grid-column:span 11/span 11}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:col-span-full{grid-column:1/-1}.lg\:col-start-1{grid-column-start:1}.lg\:col-start-2{grid-column-start:2}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:col-start-5{grid-column-start:5}.lg\:col-start-6{grid-column-start:6}.lg\:col-start-7{grid-column-start:7}.lg\:col-start-8{grid-column-start:8}.lg\:col-start-9{grid-column-start:9}.lg\:col-start-10{grid-column-start:10}.lg\:col-start-11{grid-column-start:11}.lg\:col-start-12{grid-column-start:12}.lg\:col-start-13{grid-column-start:13}.lg\:col-start-auto{grid-column-start:auto}.lg\:col-end-1{grid-column-end:1}.lg\:col-end-2{grid-column-end:2}.lg\:col-end-3{grid-column-end:3}.lg\:col-end-4{grid-column-end:4}.lg\:col-end-5{grid-column-end:5}.lg\:col-end-6{grid-column-end:6}.lg\:col-end-7{grid-column-end:7}.lg\:col-end-8{grid-column-end:8}.lg\:col-end-9{grid-column-end:9}.lg\:col-end-10{grid-column-end:10}.lg\:col-end-11{grid-column-end:11}.lg\:col-end-12{grid-column-end:12}.lg\:col-end-13{grid-column-end:13}.lg\:col-end-auto{grid-column-end:auto}.lg\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.lg\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.lg\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.lg\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.lg\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.lg\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.lg\:grid-rows-none{grid-template-rows:none}.lg\:auto-rows-auto{grid-auto-rows:auto}.lg\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.lg\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.lg\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.lg\:row-auto{grid-row:auto}.lg\:row-span-1{grid-row:span 1/span 1}.lg\:row-span-2{grid-row:span 2/span 2}.lg\:row-span-3{grid-row:span 3/span 3}.lg\:row-span-4{grid-row:span 4/span 4}.lg\:row-span-5{grid-row:span 5/span 5}.lg\:row-span-6{grid-row:span 6/span 6}.lg\:row-span-full{grid-row:1/-1}.lg\:row-start-1{grid-row-start:1}.lg\:row-start-2{grid-row-start:2}.lg\:row-start-3{grid-row-start:3}.lg\:row-start-4{grid-row-start:4}.lg\:row-start-5{grid-row-start:5}.lg\:row-start-6{grid-row-start:6}.lg\:row-start-7{grid-row-start:7}.lg\:row-start-auto{grid-row-start:auto}.lg\:row-end-1{grid-row-end:1}.lg\:row-end-2{grid-row-end:2}.lg\:row-end-3{grid-row-end:3}.lg\:row-end-4{grid-row-end:4}.lg\:row-end-5{grid-row-end:5}.lg\:row-end-6{grid-row-end:6}.lg\:row-end-7{grid-row-end:7}.lg\:row-end-auto{grid-row-end:auto}.lg\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.lg\:transform-none{transform:none}.lg\:origin-center{transform-origin:center}.lg\:origin-top{transform-origin:top}.lg\:origin-top-right{transform-origin:top right}.lg\:origin-right{transform-origin:right}.lg\:origin-bottom-right{transform-origin:bottom right}.lg\:origin-bottom{transform-origin:bottom}.lg\:origin-bottom-left{transform-origin:bottom left}.lg\:origin-left{transform-origin:left}.lg\:origin-top-left{transform-origin:top left}.lg\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.lg\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.lg\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:scale-x-0{--transform-scale-x:0}.lg\:scale-x-50{--transform-scale-x:.5}.lg\:scale-x-75{--transform-scale-x:.75}.lg\:scale-x-90{--transform-scale-x:.9}.lg\:scale-x-95{--transform-scale-x:.95}.lg\:scale-x-100{--transform-scale-x:1}.lg\:scale-x-105{--transform-scale-x:1.05}.lg\:scale-x-110{--transform-scale-x:1.1}.lg\:scale-x-125{--transform-scale-x:1.25}.lg\:scale-x-150{--transform-scale-x:1.5}.lg\:scale-y-0{--transform-scale-y:0}.lg\:scale-y-50{--transform-scale-y:.5}.lg\:scale-y-75{--transform-scale-y:.75}.lg\:scale-y-90{--transform-scale-y:.9}.lg\:scale-y-95{--transform-scale-y:.95}.lg\:scale-y-100{--transform-scale-y:1}.lg\:scale-y-105{--transform-scale-y:1.05}.lg\:scale-y-110{--transform-scale-y:1.1}.lg\:scale-y-125{--transform-scale-y:1.25}.lg\:scale-y-150{--transform-scale-y:1.5}.lg\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.lg\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.lg\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:hover\:scale-x-0:hover{--transform-scale-x:0}.lg\:hover\:scale-x-50:hover{--transform-scale-x:.5}.lg\:hover\:scale-x-75:hover{--transform-scale-x:.75}.lg\:hover\:scale-x-90:hover{--transform-scale-x:.9}.lg\:hover\:scale-x-95:hover{--transform-scale-x:.95}.lg\:hover\:scale-x-100:hover{--transform-scale-x:1}.lg\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.lg\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.lg\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.lg\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.lg\:hover\:scale-y-0:hover{--transform-scale-y:0}.lg\:hover\:scale-y-50:hover{--transform-scale-y:.5}.lg\:hover\:scale-y-75:hover{--transform-scale-y:.75}.lg\:hover\:scale-y-90:hover{--transform-scale-y:.9}.lg\:hover\:scale-y-95:hover{--transform-scale-y:.95}.lg\:hover\:scale-y-100:hover{--transform-scale-y:1}.lg\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.lg\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.lg\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.lg\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.lg\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.lg\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.lg\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.lg\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.lg\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.lg\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.lg\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.lg\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.lg\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.lg\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.lg\:focus\:scale-x-0:focus{--transform-scale-x:0}.lg\:focus\:scale-x-50:focus{--transform-scale-x:.5}.lg\:focus\:scale-x-75:focus{--transform-scale-x:.75}.lg\:focus\:scale-x-90:focus{--transform-scale-x:.9}.lg\:focus\:scale-x-95:focus{--transform-scale-x:.95}.lg\:focus\:scale-x-100:focus{--transform-scale-x:1}.lg\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.lg\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.lg\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.lg\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.lg\:focus\:scale-y-0:focus{--transform-scale-y:0}.lg\:focus\:scale-y-50:focus{--transform-scale-y:.5}.lg\:focus\:scale-y-75:focus{--transform-scale-y:.75}.lg\:focus\:scale-y-90:focus{--transform-scale-y:.9}.lg\:focus\:scale-y-95:focus{--transform-scale-y:.95}.lg\:focus\:scale-y-100:focus{--transform-scale-y:1}.lg\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.lg\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.lg\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.lg\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.lg\:rotate-0{--transform-rotate:0}.lg\:rotate-1{--transform-rotate:1deg}.lg\:rotate-2{--transform-rotate:2deg}.lg\:rotate-3{--transform-rotate:3deg}.lg\:rotate-6{--transform-rotate:6deg}.lg\:rotate-12{--transform-rotate:12deg}.lg\:rotate-45{--transform-rotate:45deg}.lg\:rotate-90{--transform-rotate:90deg}.lg\:rotate-180{--transform-rotate:180deg}.lg\:-rotate-180{--transform-rotate:-180deg}.lg\:-rotate-90{--transform-rotate:-90deg}.lg\:-rotate-45{--transform-rotate:-45deg}.lg\:-rotate-12{--transform-rotate:-12deg}.lg\:-rotate-6{--transform-rotate:-6deg}.lg\:-rotate-3{--transform-rotate:-3deg}.lg\:-rotate-2{--transform-rotate:-2deg}.lg\:-rotate-1{--transform-rotate:-1deg}.lg\:hover\:rotate-0:hover{--transform-rotate:0}.lg\:hover\:rotate-1:hover{--transform-rotate:1deg}.lg\:hover\:rotate-2:hover{--transform-rotate:2deg}.lg\:hover\:rotate-3:hover{--transform-rotate:3deg}.lg\:hover\:rotate-6:hover{--transform-rotate:6deg}.lg\:hover\:rotate-12:hover{--transform-rotate:12deg}.lg\:hover\:rotate-45:hover{--transform-rotate:45deg}.lg\:hover\:rotate-90:hover{--transform-rotate:90deg}.lg\:hover\:rotate-180:hover{--transform-rotate:180deg}.lg\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.lg\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.lg\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.lg\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.lg\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.lg\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.lg\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.lg\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.lg\:focus\:rotate-0:focus{--transform-rotate:0}.lg\:focus\:rotate-1:focus{--transform-rotate:1deg}.lg\:focus\:rotate-2:focus{--transform-rotate:2deg}.lg\:focus\:rotate-3:focus{--transform-rotate:3deg}.lg\:focus\:rotate-6:focus{--transform-rotate:6deg}.lg\:focus\:rotate-12:focus{--transform-rotate:12deg}.lg\:focus\:rotate-45:focus{--transform-rotate:45deg}.lg\:focus\:rotate-90:focus{--transform-rotate:90deg}.lg\:focus\:rotate-180:focus{--transform-rotate:180deg}.lg\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.lg\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.lg\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.lg\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.lg\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.lg\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.lg\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.lg\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.lg\:translate-x-0{--transform-translate-x:0}.lg\:translate-x-1{--transform-translate-x:0.25rem}.lg\:translate-x-2{--transform-translate-x:0.5rem}.lg\:translate-x-3{--transform-translate-x:0.75rem}.lg\:translate-x-4{--transform-translate-x:1rem}.lg\:translate-x-5{--transform-translate-x:1.25rem}.lg\:translate-x-6{--transform-translate-x:1.5rem}.lg\:translate-x-8{--transform-translate-x:2rem}.lg\:translate-x-10{--transform-translate-x:2.5rem}.lg\:translate-x-12{--transform-translate-x:3rem}.lg\:translate-x-16{--transform-translate-x:4rem}.lg\:translate-x-20{--transform-translate-x:5rem}.lg\:translate-x-24{--transform-translate-x:6rem}.lg\:translate-x-32{--transform-translate-x:8rem}.lg\:translate-x-40{--transform-translate-x:10rem}.lg\:translate-x-48{--transform-translate-x:12rem}.lg\:translate-x-56{--transform-translate-x:14rem}.lg\:translate-x-64{--transform-translate-x:16rem}.lg\:translate-x-px{--transform-translate-x:1px}.lg\:-translate-x-1{--transform-translate-x:-0.25rem}.lg\:-translate-x-2{--transform-translate-x:-0.5rem}.lg\:-translate-x-3{--transform-translate-x:-0.75rem}.lg\:-translate-x-4{--transform-translate-x:-1rem}.lg\:-translate-x-5{--transform-translate-x:-1.25rem}.lg\:-translate-x-6{--transform-translate-x:-1.5rem}.lg\:-translate-x-8{--transform-translate-x:-2rem}.lg\:-translate-x-10{--transform-translate-x:-2.5rem}.lg\:-translate-x-12{--transform-translate-x:-3rem}.lg\:-translate-x-16{--transform-translate-x:-4rem}.lg\:-translate-x-20{--transform-translate-x:-5rem}.lg\:-translate-x-24{--transform-translate-x:-6rem}.lg\:-translate-x-32{--transform-translate-x:-8rem}.lg\:-translate-x-40{--transform-translate-x:-10rem}.lg\:-translate-x-48{--transform-translate-x:-12rem}.lg\:-translate-x-56{--transform-translate-x:-14rem}.lg\:-translate-x-64{--transform-translate-x:-16rem}.lg\:-translate-x-px{--transform-translate-x:-1px}.lg\:-translate-x-full{--transform-translate-x:-100%}.lg\:-translate-x-1\/2{--transform-translate-x:-50%}.lg\:translate-x-1\/2{--transform-translate-x:50%}.lg\:translate-x-full{--transform-translate-x:100%}.lg\:translate-y-0{--transform-translate-y:0}.lg\:translate-y-1{--transform-translate-y:0.25rem}.lg\:translate-y-2{--transform-translate-y:0.5rem}.lg\:translate-y-3{--transform-translate-y:0.75rem}.lg\:translate-y-4{--transform-translate-y:1rem}.lg\:translate-y-5{--transform-translate-y:1.25rem}.lg\:translate-y-6{--transform-translate-y:1.5rem}.lg\:translate-y-8{--transform-translate-y:2rem}.lg\:translate-y-10{--transform-translate-y:2.5rem}.lg\:translate-y-12{--transform-translate-y:3rem}.lg\:translate-y-16{--transform-translate-y:4rem}.lg\:translate-y-20{--transform-translate-y:5rem}.lg\:translate-y-24{--transform-translate-y:6rem}.lg\:translate-y-32{--transform-translate-y:8rem}.lg\:translate-y-40{--transform-translate-y:10rem}.lg\:translate-y-48{--transform-translate-y:12rem}.lg\:translate-y-56{--transform-translate-y:14rem}.lg\:translate-y-64{--transform-translate-y:16rem}.lg\:translate-y-px{--transform-translate-y:1px}.lg\:-translate-y-1{--transform-translate-y:-0.25rem}.lg\:-translate-y-2{--transform-translate-y:-0.5rem}.lg\:-translate-y-3{--transform-translate-y:-0.75rem}.lg\:-translate-y-4{--transform-translate-y:-1rem}.lg\:-translate-y-5{--transform-translate-y:-1.25rem}.lg\:-translate-y-6{--transform-translate-y:-1.5rem}.lg\:-translate-y-8{--transform-translate-y:-2rem}.lg\:-translate-y-10{--transform-translate-y:-2.5rem}.lg\:-translate-y-12{--transform-translate-y:-3rem}.lg\:-translate-y-16{--transform-translate-y:-4rem}.lg\:-translate-y-20{--transform-translate-y:-5rem}.lg\:-translate-y-24{--transform-translate-y:-6rem}.lg\:-translate-y-32{--transform-translate-y:-8rem}.lg\:-translate-y-40{--transform-translate-y:-10rem}.lg\:-translate-y-48{--transform-translate-y:-12rem}.lg\:-translate-y-56{--transform-translate-y:-14rem}.lg\:-translate-y-64{--transform-translate-y:-16rem}.lg\:-translate-y-px{--transform-translate-y:-1px}.lg\:-translate-y-full{--transform-translate-y:-100%}.lg\:-translate-y-1\/2{--transform-translate-y:-50%}.lg\:translate-y-1\/2{--transform-translate-y:50%}.lg\:translate-y-full{--transform-translate-y:100%}.lg\:hover\:translate-x-0:hover{--transform-translate-x:0}.lg\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.lg\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.lg\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.lg\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.lg\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.lg\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.lg\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.lg\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.lg\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.lg\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.lg\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.lg\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.lg\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.lg\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.lg\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.lg\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.lg\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.lg\:hover\:translate-x-px:hover{--transform-translate-x:1px}.lg\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.lg\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.lg\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.lg\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.lg\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.lg\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.lg\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.lg\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.lg\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.lg\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.lg\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.lg\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.lg\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.lg\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.lg\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.lg\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.lg\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.lg\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.lg\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.lg\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.lg\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.lg\:hover\:translate-x-full:hover{--transform-translate-x:100%}.lg\:hover\:translate-y-0:hover{--transform-translate-y:0}.lg\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.lg\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.lg\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.lg\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.lg\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.lg\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.lg\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.lg\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.lg\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.lg\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.lg\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.lg\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.lg\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.lg\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.lg\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.lg\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.lg\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.lg\:hover\:translate-y-px:hover{--transform-translate-y:1px}.lg\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.lg\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.lg\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.lg\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.lg\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.lg\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.lg\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.lg\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.lg\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.lg\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.lg\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.lg\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.lg\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.lg\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.lg\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.lg\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.lg\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.lg\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.lg\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.lg\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.lg\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.lg\:hover\:translate-y-full:hover{--transform-translate-y:100%}.lg\:focus\:translate-x-0:focus{--transform-translate-x:0}.lg\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.lg\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.lg\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.lg\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.lg\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.lg\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.lg\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.lg\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.lg\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.lg\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.lg\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.lg\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.lg\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.lg\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.lg\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.lg\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.lg\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.lg\:focus\:translate-x-px:focus{--transform-translate-x:1px}.lg\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.lg\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.lg\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.lg\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.lg\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.lg\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.lg\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.lg\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.lg\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.lg\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.lg\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.lg\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.lg\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.lg\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.lg\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.lg\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.lg\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.lg\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.lg\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.lg\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.lg\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.lg\:focus\:translate-x-full:focus{--transform-translate-x:100%}.lg\:focus\:translate-y-0:focus{--transform-translate-y:0}.lg\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.lg\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.lg\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.lg\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.lg\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.lg\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.lg\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.lg\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.lg\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.lg\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.lg\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.lg\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.lg\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.lg\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.lg\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.lg\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.lg\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.lg\:focus\:translate-y-px:focus{--transform-translate-y:1px}.lg\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.lg\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.lg\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.lg\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.lg\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.lg\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.lg\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.lg\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.lg\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.lg\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.lg\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.lg\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.lg\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.lg\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.lg\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.lg\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.lg\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.lg\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.lg\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.lg\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.lg\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.lg\:focus\:translate-y-full:focus{--transform-translate-y:100%}.lg\:skew-x-0{--transform-skew-x:0}.lg\:skew-x-1{--transform-skew-x:1deg}.lg\:skew-x-2{--transform-skew-x:2deg}.lg\:skew-x-3{--transform-skew-x:3deg}.lg\:skew-x-6{--transform-skew-x:6deg}.lg\:skew-x-12{--transform-skew-x:12deg}.lg\:-skew-x-12{--transform-skew-x:-12deg}.lg\:-skew-x-6{--transform-skew-x:-6deg}.lg\:-skew-x-3{--transform-skew-x:-3deg}.lg\:-skew-x-2{--transform-skew-x:-2deg}.lg\:-skew-x-1{--transform-skew-x:-1deg}.lg\:skew-y-0{--transform-skew-y:0}.lg\:skew-y-1{--transform-skew-y:1deg}.lg\:skew-y-2{--transform-skew-y:2deg}.lg\:skew-y-3{--transform-skew-y:3deg}.lg\:skew-y-6{--transform-skew-y:6deg}.lg\:skew-y-12{--transform-skew-y:12deg}.lg\:-skew-y-12{--transform-skew-y:-12deg}.lg\:-skew-y-6{--transform-skew-y:-6deg}.lg\:-skew-y-3{--transform-skew-y:-3deg}.lg\:-skew-y-2{--transform-skew-y:-2deg}.lg\:-skew-y-1{--transform-skew-y:-1deg}.lg\:hover\:skew-x-0:hover{--transform-skew-x:0}.lg\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.lg\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.lg\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.lg\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.lg\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.lg\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.lg\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.lg\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.lg\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.lg\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.lg\:hover\:skew-y-0:hover{--transform-skew-y:0}.lg\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.lg\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.lg\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.lg\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.lg\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.lg\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.lg\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.lg\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.lg\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.lg\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.lg\:focus\:skew-x-0:focus{--transform-skew-x:0}.lg\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.lg\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.lg\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.lg\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.lg\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.lg\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.lg\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.lg\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.lg\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.lg\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.lg\:focus\:skew-y-0:focus{--transform-skew-y:0}.lg\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.lg\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.lg\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.lg\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.lg\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.lg\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.lg\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.lg\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.lg\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.lg\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.lg\:transition-none{transition-property:none}.lg\:transition-all{transition-property:all}.lg\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.lg\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.lg\:transition-opacity{transition-property:opacity}.lg\:transition-shadow{transition-property:box-shadow}.lg\:transition-transform{transition-property:transform}.lg\:ease-linear{transition-timing-function:linear}.lg\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.lg\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.lg\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.lg\:duration-75{transition-duration:75ms}.lg\:duration-100{transition-duration:.1s}.lg\:duration-150{transition-duration:150ms}.lg\:duration-200{transition-duration:.2s}.lg\:duration-300{transition-duration:.3s}.lg\:duration-500{transition-duration:.5s}.lg\:duration-700{transition-duration:.7s}.lg\:duration-1000{transition-duration:1s}.lg\:delay-75{transition-delay:75ms}.lg\:delay-100{transition-delay:.1s}.lg\:delay-150{transition-delay:150ms}.lg\:delay-200{transition-delay:.2s}.lg\:delay-300{transition-delay:.3s}.lg\:delay-500{transition-delay:.5s}.lg\:delay-700{transition-delay:.7s}.lg\:delay-1000{transition-delay:1s}.lg\:animate-none{animation:none}.lg\:animate-spin{animation:spin 1s linear infinite}.lg\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.lg\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.lg\:animate-bounce{animation:bounce 1s infinite}}@media (min-width:1280px){.xl\:container{width:100%}@media (min-width:640px){.xl\:container{max-width:640px}}@media (min-width:768px){.xl\:container{max-width:768px}}@media (min-width:1024px){.xl\:container{max-width:1024px}}@media (min-width:1280px){.xl\:container{max-width:1280px}}.xl\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(0px * var(--space-y-reverse))}.xl\:space-x-0>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0px * var(--space-x-reverse));margin-left:calc(0px * calc(1 - var(--space-x-reverse)))}.xl\:space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.25rem * var(--space-y-reverse))}.xl\:space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.25rem * var(--space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.5rem * var(--space-y-reverse))}.xl\:space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.5rem * var(--space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(.75rem * var(--space-y-reverse))}.xl\:space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(.75rem * var(--space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1rem * var(--space-y-reverse))}.xl\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem * var(--space-x-reverse));margin-left:calc(1rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem * var(--space-y-reverse))}.xl\:space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.25rem * var(--space-x-reverse));margin-left:calc(1.25rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.xl\:space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1.5rem * var(--space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2rem * var(--space-y-reverse))}.xl\:space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2rem * var(--space-x-reverse));margin-left:calc(2rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(2.5rem * var(--space-y-reverse))}.xl\:space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(2.5rem * var(--space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(3rem * var(--space-y-reverse))}.xl\:space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(3rem * var(--space-x-reverse));margin-left:calc(3rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(4rem * var(--space-y-reverse))}.xl\:space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(4rem * var(--space-x-reverse));margin-left:calc(4rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(5rem * var(--space-y-reverse))}.xl\:space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(5rem * var(--space-x-reverse));margin-left:calc(5rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(6rem * var(--space-y-reverse))}.xl\:space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(6rem * var(--space-x-reverse));margin-left:calc(6rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(8rem * var(--space-y-reverse))}.xl\:space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(8rem * var(--space-x-reverse));margin-left:calc(8rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(10rem * var(--space-y-reverse))}.xl\:space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(10rem * var(--space-x-reverse));margin-left:calc(10rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(12rem * var(--space-y-reverse))}.xl\:space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(12rem * var(--space-x-reverse));margin-left:calc(12rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(14rem * var(--space-y-reverse))}.xl\:space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(14rem * var(--space-x-reverse));margin-left:calc(14rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(16rem * var(--space-y-reverse))}.xl\:space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(16rem * var(--space-x-reverse));margin-left:calc(16rem * calc(1 - var(--space-x-reverse)))}.xl\:space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1px * var(--space-y-reverse))}.xl\:space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1px * var(--space-x-reverse));margin-left:calc(1px * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.25rem * var(--space-y-reverse))}.xl\:-space-x-1>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.25rem * var(--space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.5rem * var(--space-y-reverse))}.xl\:-space-x-2>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.5rem * var(--space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-.75rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-.75rem * var(--space-y-reverse))}.xl\:-space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-.75rem * var(--space-x-reverse));margin-left:calc(-.75rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1rem * var(--space-y-reverse))}.xl\:-space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1rem * var(--space-x-reverse));margin-left:calc(-1rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.25rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.25rem * var(--space-y-reverse))}.xl\:-space-x-5>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.25rem * var(--space-x-reverse));margin-left:calc(-1.25rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-6>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1.5rem * var(--space-y-reverse))}.xl\:-space-x-6>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1.5rem * var(--space-x-reverse));margin-left:calc(-1.5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-8>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2rem * var(--space-y-reverse))}.xl\:-space-x-8>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2rem * var(--space-x-reverse));margin-left:calc(-2rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-10>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-2.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-2.5rem * var(--space-y-reverse))}.xl\:-space-x-10>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-2.5rem * var(--space-x-reverse));margin-left:calc(-2.5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-12>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-3rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-3rem * var(--space-y-reverse))}.xl\:-space-x-12>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-3rem * var(--space-x-reverse));margin-left:calc(-3rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-16>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-4rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-4rem * var(--space-y-reverse))}.xl\:-space-x-16>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-4rem * var(--space-x-reverse));margin-left:calc(-4rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-20>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-5rem * var(--space-y-reverse))}.xl\:-space-x-20>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-5rem * var(--space-x-reverse));margin-left:calc(-5rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-24>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-6rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-6rem * var(--space-y-reverse))}.xl\:-space-x-24>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-6rem * var(--space-x-reverse));margin-left:calc(-6rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-32>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-8rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-8rem * var(--space-y-reverse))}.xl\:-space-x-32>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-8rem * var(--space-x-reverse));margin-left:calc(-8rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-40>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-10rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-10rem * var(--space-y-reverse))}.xl\:-space-x-40>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-10rem * var(--space-x-reverse));margin-left:calc(-10rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-48>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-12rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-12rem * var(--space-y-reverse))}.xl\:-space-x-48>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-12rem * var(--space-x-reverse));margin-left:calc(-12rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-56>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-14rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-14rem * var(--space-y-reverse))}.xl\:-space-x-56>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-14rem * var(--space-x-reverse));margin-left:calc(-14rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-64>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-16rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-16rem * var(--space-y-reverse))}.xl\:-space-x-64>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-16rem * var(--space-x-reverse));margin-left:calc(-16rem * calc(1 - var(--space-x-reverse)))}.xl\:-space-y-px>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(-1px * calc(1 - var(--space-y-reverse)));margin-bottom:calc(-1px * var(--space-y-reverse))}.xl\:-space-x-px>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(-1px * var(--space-x-reverse));margin-left:calc(-1px * calc(1 - var(--space-x-reverse)))}.xl\:space-y-reverse>:not(template)~:not(template){--space-y-reverse:1}.xl\:space-x-reverse>:not(template)~:not(template){--space-x-reverse:1}.xl\:divide-y-0>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(0px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(0px * var(--divide-y-reverse))}.xl\:divide-x-0>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(0px * var(--divide-x-reverse));border-left-width:calc(0px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-2>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(2px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(2px * var(--divide-y-reverse))}.xl\:divide-x-2>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(2px * var(--divide-x-reverse));border-left-width:calc(2px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-4>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(4px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(4px * var(--divide-y-reverse))}.xl\:divide-x-4>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(4px * var(--divide-x-reverse));border-left-width:calc(4px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-8>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(8px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(8px * var(--divide-y-reverse))}.xl\:divide-x-8>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(8px * var(--divide-x-reverse));border-left-width:calc(8px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px * var(--divide-y-reverse))}.xl\:divide-x>:not(template)~:not(template){--divide-x-reverse:0;border-right-width:calc(1px * var(--divide-x-reverse));border-left-width:calc(1px * calc(1 - var(--divide-x-reverse)))}.xl\:divide-y-reverse>:not(template)~:not(template){--divide-y-reverse:1}.xl\:divide-x-reverse>:not(template)~:not(template){--divide-x-reverse:1}.xl\:divide-transparent>:not(template)~:not(template){border-color:transparent}.xl\:divide-current>:not(template)~:not(template){border-color:currentColor}.xl\:divide-black>:not(template)~:not(template){--divide-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--divide-opacity))}.xl\:divide-white>:not(template)~:not(template){--divide-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--divide-opacity))}.xl\:divide-gray-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--divide-opacity))}.xl\:divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--divide-opacity))}.xl\:divide-gray-300>:not(template)~:not(template){--divide-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--divide-opacity))}.xl\:divide-gray-400>:not(template)~:not(template){--divide-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--divide-opacity))}.xl\:divide-gray-500>:not(template)~:not(template){--divide-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--divide-opacity))}.xl\:divide-gray-600>:not(template)~:not(template){--divide-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--divide-opacity))}.xl\:divide-gray-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--divide-opacity))}.xl\:divide-gray-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--divide-opacity))}.xl\:divide-gray-900>:not(template)~:not(template){--divide-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--divide-opacity))}.xl\:divide-red-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--divide-opacity))}.xl\:divide-red-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--divide-opacity))}.xl\:divide-red-300>:not(template)~:not(template){--divide-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--divide-opacity))}.xl\:divide-red-400>:not(template)~:not(template){--divide-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--divide-opacity))}.xl\:divide-red-500>:not(template)~:not(template){--divide-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--divide-opacity))}.xl\:divide-red-600>:not(template)~:not(template){--divide-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--divide-opacity))}.xl\:divide-red-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--divide-opacity))}.xl\:divide-red-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--divide-opacity))}.xl\:divide-red-900>:not(template)~:not(template){--divide-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--divide-opacity))}.xl\:divide-orange-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--divide-opacity))}.xl\:divide-orange-200>:not(template)~:not(template){--divide-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--divide-opacity))}.xl\:divide-orange-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--divide-opacity))}.xl\:divide-orange-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--divide-opacity))}.xl\:divide-orange-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--divide-opacity))}.xl\:divide-orange-600>:not(template)~:not(template){--divide-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--divide-opacity))}.xl\:divide-orange-700>:not(template)~:not(template){--divide-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--divide-opacity))}.xl\:divide-orange-800>:not(template)~:not(template){--divide-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--divide-opacity))}.xl\:divide-orange-900>:not(template)~:not(template){--divide-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--divide-opacity))}.xl\:divide-yellow-100>:not(template)~:not(template){--divide-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--divide-opacity))}.xl\:divide-yellow-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--divide-opacity))}.xl\:divide-yellow-300>:not(template)~:not(template){--divide-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--divide-opacity))}.xl\:divide-yellow-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--divide-opacity))}.xl\:divide-yellow-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--divide-opacity))}.xl\:divide-yellow-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--divide-opacity))}.xl\:divide-yellow-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--divide-opacity))}.xl\:divide-yellow-800>:not(template)~:not(template){--divide-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--divide-opacity))}.xl\:divide-yellow-900>:not(template)~:not(template){--divide-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--divide-opacity))}.xl\:divide-green-100>:not(template)~:not(template){--divide-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--divide-opacity))}.xl\:divide-green-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--divide-opacity))}.xl\:divide-green-300>:not(template)~:not(template){--divide-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--divide-opacity))}.xl\:divide-green-400>:not(template)~:not(template){--divide-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--divide-opacity))}.xl\:divide-green-500>:not(template)~:not(template){--divide-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--divide-opacity))}.xl\:divide-green-600>:not(template)~:not(template){--divide-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--divide-opacity))}.xl\:divide-green-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--divide-opacity))}.xl\:divide-green-800>:not(template)~:not(template){--divide-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--divide-opacity))}.xl\:divide-green-900>:not(template)~:not(template){--divide-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--divide-opacity))}.xl\:divide-teal-100>:not(template)~:not(template){--divide-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--divide-opacity))}.xl\:divide-teal-200>:not(template)~:not(template){--divide-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--divide-opacity))}.xl\:divide-teal-300>:not(template)~:not(template){--divide-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--divide-opacity))}.xl\:divide-teal-400>:not(template)~:not(template){--divide-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--divide-opacity))}.xl\:divide-teal-500>:not(template)~:not(template){--divide-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--divide-opacity))}.xl\:divide-teal-600>:not(template)~:not(template){--divide-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--divide-opacity))}.xl\:divide-teal-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--divide-opacity))}.xl\:divide-teal-800>:not(template)~:not(template){--divide-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--divide-opacity))}.xl\:divide-teal-900>:not(template)~:not(template){--divide-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--divide-opacity))}.xl\:divide-blue-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--divide-opacity))}.xl\:divide-blue-200>:not(template)~:not(template){--divide-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--divide-opacity))}.xl\:divide-blue-300>:not(template)~:not(template){--divide-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--divide-opacity))}.xl\:divide-blue-400>:not(template)~:not(template){--divide-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--divide-opacity))}.xl\:divide-blue-500>:not(template)~:not(template){--divide-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--divide-opacity))}.xl\:divide-blue-600>:not(template)~:not(template){--divide-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--divide-opacity))}.xl\:divide-blue-700>:not(template)~:not(template){--divide-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--divide-opacity))}.xl\:divide-blue-800>:not(template)~:not(template){--divide-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--divide-opacity))}.xl\:divide-blue-900>:not(template)~:not(template){--divide-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--divide-opacity))}.xl\:divide-indigo-100>:not(template)~:not(template){--divide-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--divide-opacity))}.xl\:divide-indigo-200>:not(template)~:not(template){--divide-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--divide-opacity))}.xl\:divide-indigo-300>:not(template)~:not(template){--divide-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--divide-opacity))}.xl\:divide-indigo-400>:not(template)~:not(template){--divide-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--divide-opacity))}.xl\:divide-indigo-500>:not(template)~:not(template){--divide-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--divide-opacity))}.xl\:divide-indigo-600>:not(template)~:not(template){--divide-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--divide-opacity))}.xl\:divide-indigo-700>:not(template)~:not(template){--divide-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--divide-opacity))}.xl\:divide-indigo-800>:not(template)~:not(template){--divide-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--divide-opacity))}.xl\:divide-indigo-900>:not(template)~:not(template){--divide-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--divide-opacity))}.xl\:divide-purple-100>:not(template)~:not(template){--divide-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--divide-opacity))}.xl\:divide-purple-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--divide-opacity))}.xl\:divide-purple-300>:not(template)~:not(template){--divide-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--divide-opacity))}.xl\:divide-purple-400>:not(template)~:not(template){--divide-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--divide-opacity))}.xl\:divide-purple-500>:not(template)~:not(template){--divide-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--divide-opacity))}.xl\:divide-purple-600>:not(template)~:not(template){--divide-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--divide-opacity))}.xl\:divide-purple-700>:not(template)~:not(template){--divide-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--divide-opacity))}.xl\:divide-purple-800>:not(template)~:not(template){--divide-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--divide-opacity))}.xl\:divide-purple-900>:not(template)~:not(template){--divide-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--divide-opacity))}.xl\:divide-pink-100>:not(template)~:not(template){--divide-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--divide-opacity))}.xl\:divide-pink-200>:not(template)~:not(template){--divide-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--divide-opacity))}.xl\:divide-pink-300>:not(template)~:not(template){--divide-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--divide-opacity))}.xl\:divide-pink-400>:not(template)~:not(template){--divide-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--divide-opacity))}.xl\:divide-pink-500>:not(template)~:not(template){--divide-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--divide-opacity))}.xl\:divide-pink-600>:not(template)~:not(template){--divide-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--divide-opacity))}.xl\:divide-pink-700>:not(template)~:not(template){--divide-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--divide-opacity))}.xl\:divide-pink-800>:not(template)~:not(template){--divide-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--divide-opacity))}.xl\:divide-pink-900>:not(template)~:not(template){--divide-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--divide-opacity))}.xl\:divide-solid>:not(template)~:not(template){border-style:solid}.xl\:divide-dashed>:not(template)~:not(template){border-style:dashed}.xl\:divide-dotted>:not(template)~:not(template){border-style:dotted}.xl\:divide-double>:not(template)~:not(template){border-style:double}.xl\:divide-none>:not(template)~:not(template){border-style:none}.xl\:divide-opacity-0>:not(template)~:not(template){--divide-opacity:0}.xl\:divide-opacity-25>:not(template)~:not(template){--divide-opacity:0.25}.xl\:divide-opacity-50>:not(template)~:not(template){--divide-opacity:0.5}.xl\:divide-opacity-75>:not(template)~:not(template){--divide-opacity:0.75}.xl\:divide-opacity-100>:not(template)~:not(template){--divide-opacity:1}.xl\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.xl\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.xl\:focus\:sr-only:focus{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.xl\:focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.xl\:appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.xl\:bg-fixed{background-attachment:fixed}.xl\:bg-local{background-attachment:local}.xl\:bg-scroll{background-attachment:scroll}.xl\:bg-clip-border{background-clip:border-box}.xl\:bg-clip-padding{background-clip:padding-box}.xl\:bg-clip-content{background-clip:content-box}.xl\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.xl\:bg-transparent{background-color:transparent}.xl\:bg-current{background-color:currentColor}.xl\:bg-black{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.xl\:bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.xl\:bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:bg-gray-200{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:bg-gray-300{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:bg-gray-400{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:bg-gray-500{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:bg-gray-600{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:bg-gray-700{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:bg-red-100{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.xl\:bg-red-200{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.xl\:bg-red-300{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.xl\:bg-red-400{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.xl\:bg-red-500{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.xl\:bg-red-600{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.xl\:bg-red-700{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.xl\:bg-red-800{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.xl\:bg-red-900{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.xl\:bg-orange-100{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.xl\:bg-orange-200{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.xl\:bg-orange-300{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.xl\:bg-orange-400{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.xl\:bg-orange-500{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.xl\:bg-orange-600{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.xl\:bg-orange-700{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.xl\:bg-orange-800{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.xl\:bg-orange-900{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.xl\:bg-yellow-100{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.xl\:bg-yellow-200{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.xl\:bg-yellow-300{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.xl\:bg-yellow-400{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.xl\:bg-yellow-500{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.xl\:bg-yellow-600{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.xl\:bg-yellow-700{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.xl\:bg-yellow-800{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.xl\:bg-yellow-900{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.xl\:bg-green-100{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:bg-green-200{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:bg-green-300{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:bg-green-400{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:bg-green-500{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:bg-green-600{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:bg-green-700{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:bg-green-800{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:bg-green-900{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:bg-teal-100{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:bg-teal-200{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:bg-teal-300{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:bg-teal-400{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:bg-teal-500{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:bg-teal-600{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:bg-teal-700{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:bg-teal-800{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:bg-teal-900{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:bg-blue-100{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.xl\:bg-blue-200{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.xl\:bg-blue-300{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.xl\:bg-blue-400{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.xl\:bg-blue-500{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.xl\:bg-blue-600{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.xl\:bg-blue-700{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.xl\:bg-blue-800{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.xl\:bg-blue-900{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.xl\:bg-indigo-100{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:bg-indigo-200{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:bg-indigo-300{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:bg-indigo-400{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:bg-indigo-500{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:bg-indigo-600{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:bg-indigo-700{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:bg-indigo-800{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:bg-indigo-900{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:bg-purple-100{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:bg-purple-200{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:bg-purple-300{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:bg-purple-400{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:bg-purple-500{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:bg-purple-600{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:bg-purple-700{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:bg-purple-800{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:bg-purple-900{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:bg-pink-100{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.xl\:bg-pink-200{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.xl\:bg-pink-300{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.xl\:bg-pink-400{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.xl\:bg-pink-500{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.xl\:bg-pink-600{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.xl\:bg-pink-700{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.xl\:bg-pink-800{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.xl\:bg-pink-900{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.xl\:hover\:bg-transparent:hover{background-color:transparent}.xl\:hover\:bg-current:hover{background-color:currentColor}.xl\:hover\:bg-black:hover{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.xl\:hover\:bg-white:hover{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.xl\:hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:hover\:bg-gray-200:hover{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:hover\:bg-gray-300:hover{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:hover\:bg-gray-400:hover{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:hover\:bg-gray-500:hover{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:hover\:bg-gray-600:hover{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:hover\:bg-gray-700:hover{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:hover\:bg-gray-800:hover{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:hover\:bg-gray-900:hover{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:hover\:bg-red-100:hover{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.xl\:hover\:bg-red-200:hover{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.xl\:hover\:bg-red-300:hover{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.xl\:hover\:bg-red-400:hover{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.xl\:hover\:bg-red-500:hover{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.xl\:hover\:bg-red-600:hover{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.xl\:hover\:bg-red-700:hover{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.xl\:hover\:bg-red-800:hover{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.xl\:hover\:bg-red-900:hover{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.xl\:hover\:bg-orange-100:hover{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.xl\:hover\:bg-orange-200:hover{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.xl\:hover\:bg-orange-300:hover{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.xl\:hover\:bg-orange-400:hover{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.xl\:hover\:bg-orange-500:hover{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.xl\:hover\:bg-orange-600:hover{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.xl\:hover\:bg-orange-700:hover{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.xl\:hover\:bg-orange-800:hover{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.xl\:hover\:bg-orange-900:hover{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.xl\:hover\:bg-yellow-100:hover{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.xl\:hover\:bg-yellow-200:hover{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.xl\:hover\:bg-yellow-300:hover{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.xl\:hover\:bg-yellow-400:hover{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.xl\:hover\:bg-yellow-500:hover{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.xl\:hover\:bg-yellow-600:hover{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.xl\:hover\:bg-yellow-700:hover{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.xl\:hover\:bg-yellow-800:hover{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.xl\:hover\:bg-yellow-900:hover{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.xl\:hover\:bg-green-100:hover{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:hover\:bg-green-200:hover{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:hover\:bg-green-300:hover{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:hover\:bg-green-400:hover{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:hover\:bg-green-500:hover{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:hover\:bg-green-600:hover{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:hover\:bg-green-700:hover{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:hover\:bg-green-800:hover{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:hover\:bg-green-900:hover{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:hover\:bg-teal-100:hover{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:hover\:bg-teal-200:hover{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:hover\:bg-teal-300:hover{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:hover\:bg-teal-400:hover{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:hover\:bg-teal-500:hover{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:hover\:bg-teal-600:hover{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:hover\:bg-teal-700:hover{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:hover\:bg-teal-800:hover{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:hover\:bg-teal-900:hover{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:hover\:bg-blue-100:hover{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.xl\:hover\:bg-blue-200:hover{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.xl\:hover\:bg-blue-300:hover{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.xl\:hover\:bg-blue-400:hover{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.xl\:hover\:bg-blue-500:hover{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.xl\:hover\:bg-blue-600:hover{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.xl\:hover\:bg-blue-700:hover{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.xl\:hover\:bg-blue-800:hover{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.xl\:hover\:bg-blue-900:hover{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.xl\:hover\:bg-indigo-100:hover{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:hover\:bg-indigo-200:hover{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:hover\:bg-indigo-300:hover{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:hover\:bg-indigo-400:hover{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:hover\:bg-indigo-700:hover{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:hover\:bg-indigo-800:hover{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:hover\:bg-indigo-900:hover{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:hover\:bg-purple-100:hover{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:hover\:bg-purple-200:hover{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:hover\:bg-purple-300:hover{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:hover\:bg-purple-400:hover{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:hover\:bg-purple-500:hover{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:hover\:bg-purple-600:hover{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:hover\:bg-purple-700:hover{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:hover\:bg-purple-800:hover{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:hover\:bg-purple-900:hover{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:hover\:bg-pink-100:hover{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.xl\:hover\:bg-pink-200:hover{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.xl\:hover\:bg-pink-300:hover{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.xl\:hover\:bg-pink-400:hover{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.xl\:hover\:bg-pink-500:hover{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.xl\:hover\:bg-pink-600:hover{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.xl\:hover\:bg-pink-700:hover{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.xl\:hover\:bg-pink-800:hover{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.xl\:hover\:bg-pink-900:hover{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.xl\:focus\:bg-transparent:focus{background-color:transparent}.xl\:focus\:bg-current:focus{background-color:currentColor}.xl\:focus\:bg-black:focus{--bg-opacity:1;background-color:#000;background-color:rgba(0,0,0,var(--bg-opacity))}.xl\:focus\:bg-white:focus{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.xl\:focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.xl\:focus\:bg-gray-200:focus{--bg-opacity:1;background-color:#edf2f7;background-color:rgba(237,242,247,var(--bg-opacity))}.xl\:focus\:bg-gray-300:focus{--bg-opacity:1;background-color:#e2e8f0;background-color:rgba(226,232,240,var(--bg-opacity))}.xl\:focus\:bg-gray-400:focus{--bg-opacity:1;background-color:#cbd5e0;background-color:rgba(203,213,224,var(--bg-opacity))}.xl\:focus\:bg-gray-500:focus{--bg-opacity:1;background-color:#a0aec0;background-color:rgba(160,174,192,var(--bg-opacity))}.xl\:focus\:bg-gray-600:focus{--bg-opacity:1;background-color:#718096;background-color:rgba(113,128,150,var(--bg-opacity))}.xl\:focus\:bg-gray-700:focus{--bg-opacity:1;background-color:#4a5568;background-color:rgba(74,85,104,var(--bg-opacity))}.xl\:focus\:bg-gray-800:focus{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.xl\:focus\:bg-gray-900:focus{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.xl\:focus\:bg-red-100:focus{--bg-opacity:1;background-color:#fff5f5;background-color:rgba(255,245,245,var(--bg-opacity))}.xl\:focus\:bg-red-200:focus{--bg-opacity:1;background-color:#fed7d7;background-color:rgba(254,215,215,var(--bg-opacity))}.xl\:focus\:bg-red-300:focus{--bg-opacity:1;background-color:#feb2b2;background-color:rgba(254,178,178,var(--bg-opacity))}.xl\:focus\:bg-red-400:focus{--bg-opacity:1;background-color:#fc8181;background-color:rgba(252,129,129,var(--bg-opacity))}.xl\:focus\:bg-red-500:focus{--bg-opacity:1;background-color:#f56565;background-color:rgba(245,101,101,var(--bg-opacity))}.xl\:focus\:bg-red-600:focus{--bg-opacity:1;background-color:#e53e3e;background-color:rgba(229,62,62,var(--bg-opacity))}.xl\:focus\:bg-red-700:focus{--bg-opacity:1;background-color:#c53030;background-color:rgba(197,48,48,var(--bg-opacity))}.xl\:focus\:bg-red-800:focus{--bg-opacity:1;background-color:#9b2c2c;background-color:rgba(155,44,44,var(--bg-opacity))}.xl\:focus\:bg-red-900:focus{--bg-opacity:1;background-color:#742a2a;background-color:rgba(116,42,42,var(--bg-opacity))}.xl\:focus\:bg-orange-100:focus{--bg-opacity:1;background-color:#fffaf0;background-color:rgba(255,250,240,var(--bg-opacity))}.xl\:focus\:bg-orange-200:focus{--bg-opacity:1;background-color:#feebc8;background-color:rgba(254,235,200,var(--bg-opacity))}.xl\:focus\:bg-orange-300:focus{--bg-opacity:1;background-color:#fbd38d;background-color:rgba(251,211,141,var(--bg-opacity))}.xl\:focus\:bg-orange-400:focus{--bg-opacity:1;background-color:#f6ad55;background-color:rgba(246,173,85,var(--bg-opacity))}.xl\:focus\:bg-orange-500:focus{--bg-opacity:1;background-color:#ed8936;background-color:rgba(237,137,54,var(--bg-opacity))}.xl\:focus\:bg-orange-600:focus{--bg-opacity:1;background-color:#dd6b20;background-color:rgba(221,107,32,var(--bg-opacity))}.xl\:focus\:bg-orange-700:focus{--bg-opacity:1;background-color:#c05621;background-color:rgba(192,86,33,var(--bg-opacity))}.xl\:focus\:bg-orange-800:focus{--bg-opacity:1;background-color:#9c4221;background-color:rgba(156,66,33,var(--bg-opacity))}.xl\:focus\:bg-orange-900:focus{--bg-opacity:1;background-color:#7b341e;background-color:rgba(123,52,30,var(--bg-opacity))}.xl\:focus\:bg-yellow-100:focus{--bg-opacity:1;background-color:ivory;background-color:rgba(255,255,240,var(--bg-opacity))}.xl\:focus\:bg-yellow-200:focus{--bg-opacity:1;background-color:#fefcbf;background-color:rgba(254,252,191,var(--bg-opacity))}.xl\:focus\:bg-yellow-300:focus{--bg-opacity:1;background-color:#faf089;background-color:rgba(250,240,137,var(--bg-opacity))}.xl\:focus\:bg-yellow-400:focus{--bg-opacity:1;background-color:#f6e05e;background-color:rgba(246,224,94,var(--bg-opacity))}.xl\:focus\:bg-yellow-500:focus{--bg-opacity:1;background-color:#ecc94b;background-color:rgba(236,201,75,var(--bg-opacity))}.xl\:focus\:bg-yellow-600:focus{--bg-opacity:1;background-color:#d69e2e;background-color:rgba(214,158,46,var(--bg-opacity))}.xl\:focus\:bg-yellow-700:focus{--bg-opacity:1;background-color:#b7791f;background-color:rgba(183,121,31,var(--bg-opacity))}.xl\:focus\:bg-yellow-800:focus{--bg-opacity:1;background-color:#975a16;background-color:rgba(151,90,22,var(--bg-opacity))}.xl\:focus\:bg-yellow-900:focus{--bg-opacity:1;background-color:#744210;background-color:rgba(116,66,16,var(--bg-opacity))}.xl\:focus\:bg-green-100:focus{--bg-opacity:1;background-color:#f0fff4;background-color:rgba(240,255,244,var(--bg-opacity))}.xl\:focus\:bg-green-200:focus{--bg-opacity:1;background-color:#c6f6d5;background-color:rgba(198,246,213,var(--bg-opacity))}.xl\:focus\:bg-green-300:focus{--bg-opacity:1;background-color:#9ae6b4;background-color:rgba(154,230,180,var(--bg-opacity))}.xl\:focus\:bg-green-400:focus{--bg-opacity:1;background-color:#68d391;background-color:rgba(104,211,145,var(--bg-opacity))}.xl\:focus\:bg-green-500:focus{--bg-opacity:1;background-color:#48bb78;background-color:rgba(72,187,120,var(--bg-opacity))}.xl\:focus\:bg-green-600:focus{--bg-opacity:1;background-color:#38a169;background-color:rgba(56,161,105,var(--bg-opacity))}.xl\:focus\:bg-green-700:focus{--bg-opacity:1;background-color:#2f855a;background-color:rgba(47,133,90,var(--bg-opacity))}.xl\:focus\:bg-green-800:focus{--bg-opacity:1;background-color:#276749;background-color:rgba(39,103,73,var(--bg-opacity))}.xl\:focus\:bg-green-900:focus{--bg-opacity:1;background-color:#22543d;background-color:rgba(34,84,61,var(--bg-opacity))}.xl\:focus\:bg-teal-100:focus{--bg-opacity:1;background-color:#e6fffa;background-color:rgba(230,255,250,var(--bg-opacity))}.xl\:focus\:bg-teal-200:focus{--bg-opacity:1;background-color:#b2f5ea;background-color:rgba(178,245,234,var(--bg-opacity))}.xl\:focus\:bg-teal-300:focus{--bg-opacity:1;background-color:#81e6d9;background-color:rgba(129,230,217,var(--bg-opacity))}.xl\:focus\:bg-teal-400:focus{--bg-opacity:1;background-color:#4fd1c5;background-color:rgba(79,209,197,var(--bg-opacity))}.xl\:focus\:bg-teal-500:focus{--bg-opacity:1;background-color:#38b2ac;background-color:rgba(56,178,172,var(--bg-opacity))}.xl\:focus\:bg-teal-600:focus{--bg-opacity:1;background-color:#319795;background-color:rgba(49,151,149,var(--bg-opacity))}.xl\:focus\:bg-teal-700:focus{--bg-opacity:1;background-color:#2c7a7b;background-color:rgba(44,122,123,var(--bg-opacity))}.xl\:focus\:bg-teal-800:focus{--bg-opacity:1;background-color:#285e61;background-color:rgba(40,94,97,var(--bg-opacity))}.xl\:focus\:bg-teal-900:focus{--bg-opacity:1;background-color:#234e52;background-color:rgba(35,78,82,var(--bg-opacity))}.xl\:focus\:bg-blue-100:focus{--bg-opacity:1;background-color:#ebf8ff;background-color:rgba(235,248,255,var(--bg-opacity))}.xl\:focus\:bg-blue-200:focus{--bg-opacity:1;background-color:#bee3f8;background-color:rgba(190,227,248,var(--bg-opacity))}.xl\:focus\:bg-blue-300:focus{--bg-opacity:1;background-color:#90cdf4;background-color:rgba(144,205,244,var(--bg-opacity))}.xl\:focus\:bg-blue-400:focus{--bg-opacity:1;background-color:#63b3ed;background-color:rgba(99,179,237,var(--bg-opacity))}.xl\:focus\:bg-blue-500:focus{--bg-opacity:1;background-color:#4299e1;background-color:rgba(66,153,225,var(--bg-opacity))}.xl\:focus\:bg-blue-600:focus{--bg-opacity:1;background-color:#3182ce;background-color:rgba(49,130,206,var(--bg-opacity))}.xl\:focus\:bg-blue-700:focus{--bg-opacity:1;background-color:#2b6cb0;background-color:rgba(43,108,176,var(--bg-opacity))}.xl\:focus\:bg-blue-800:focus{--bg-opacity:1;background-color:#2c5282;background-color:rgba(44,82,130,var(--bg-opacity))}.xl\:focus\:bg-blue-900:focus{--bg-opacity:1;background-color:#2a4365;background-color:rgba(42,67,101,var(--bg-opacity))}.xl\:focus\:bg-indigo-100:focus{--bg-opacity:1;background-color:#ebf4ff;background-color:rgba(235,244,255,var(--bg-opacity))}.xl\:focus\:bg-indigo-200:focus{--bg-opacity:1;background-color:#c3dafe;background-color:rgba(195,218,254,var(--bg-opacity))}.xl\:focus\:bg-indigo-300:focus{--bg-opacity:1;background-color:#a3bffa;background-color:rgba(163,191,250,var(--bg-opacity))}.xl\:focus\:bg-indigo-400:focus{--bg-opacity:1;background-color:#7f9cf5;background-color:rgba(127,156,245,var(--bg-opacity))}.xl\:focus\:bg-indigo-500:focus{--bg-opacity:1;background-color:#667eea;background-color:rgba(102,126,234,var(--bg-opacity))}.xl\:focus\:bg-indigo-600:focus{--bg-opacity:1;background-color:#5a67d8;background-color:rgba(90,103,216,var(--bg-opacity))}.xl\:focus\:bg-indigo-700:focus{--bg-opacity:1;background-color:#4c51bf;background-color:rgba(76,81,191,var(--bg-opacity))}.xl\:focus\:bg-indigo-800:focus{--bg-opacity:1;background-color:#434190;background-color:rgba(67,65,144,var(--bg-opacity))}.xl\:focus\:bg-indigo-900:focus{--bg-opacity:1;background-color:#3c366b;background-color:rgba(60,54,107,var(--bg-opacity))}.xl\:focus\:bg-purple-100:focus{--bg-opacity:1;background-color:#faf5ff;background-color:rgba(250,245,255,var(--bg-opacity))}.xl\:focus\:bg-purple-200:focus{--bg-opacity:1;background-color:#e9d8fd;background-color:rgba(233,216,253,var(--bg-opacity))}.xl\:focus\:bg-purple-300:focus{--bg-opacity:1;background-color:#d6bcfa;background-color:rgba(214,188,250,var(--bg-opacity))}.xl\:focus\:bg-purple-400:focus{--bg-opacity:1;background-color:#b794f4;background-color:rgba(183,148,244,var(--bg-opacity))}.xl\:focus\:bg-purple-500:focus{--bg-opacity:1;background-color:#9f7aea;background-color:rgba(159,122,234,var(--bg-opacity))}.xl\:focus\:bg-purple-600:focus{--bg-opacity:1;background-color:#805ad5;background-color:rgba(128,90,213,var(--bg-opacity))}.xl\:focus\:bg-purple-700:focus{--bg-opacity:1;background-color:#6b46c1;background-color:rgba(107,70,193,var(--bg-opacity))}.xl\:focus\:bg-purple-800:focus{--bg-opacity:1;background-color:#553c9a;background-color:rgba(85,60,154,var(--bg-opacity))}.xl\:focus\:bg-purple-900:focus{--bg-opacity:1;background-color:#44337a;background-color:rgba(68,51,122,var(--bg-opacity))}.xl\:focus\:bg-pink-100:focus{--bg-opacity:1;background-color:#fff5f7;background-color:rgba(255,245,247,var(--bg-opacity))}.xl\:focus\:bg-pink-200:focus{--bg-opacity:1;background-color:#fed7e2;background-color:rgba(254,215,226,var(--bg-opacity))}.xl\:focus\:bg-pink-300:focus{--bg-opacity:1;background-color:#fbb6ce;background-color:rgba(251,182,206,var(--bg-opacity))}.xl\:focus\:bg-pink-400:focus{--bg-opacity:1;background-color:#f687b3;background-color:rgba(246,135,179,var(--bg-opacity))}.xl\:focus\:bg-pink-500:focus{--bg-opacity:1;background-color:#ed64a6;background-color:rgba(237,100,166,var(--bg-opacity))}.xl\:focus\:bg-pink-600:focus{--bg-opacity:1;background-color:#d53f8c;background-color:rgba(213,63,140,var(--bg-opacity))}.xl\:focus\:bg-pink-700:focus{--bg-opacity:1;background-color:#b83280;background-color:rgba(184,50,128,var(--bg-opacity))}.xl\:focus\:bg-pink-800:focus{--bg-opacity:1;background-color:#97266d;background-color:rgba(151,38,109,var(--bg-opacity))}.xl\:focus\:bg-pink-900:focus{--bg-opacity:1;background-color:#702459;background-color:rgba(112,36,89,var(--bg-opacity))}.xl\:bg-none{background-image:none}.xl\:bg-gradient-to-t{background-image:linear-gradient(to top,var(--gradient-color-stops))}.xl\:bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--gradient-color-stops))}.xl\:bg-gradient-to-r{background-image:linear-gradient(to right,var(--gradient-color-stops))}.xl\:bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--gradient-color-stops))}.xl\:bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--gradient-color-stops))}.xl\:bg-gradient-to-bl{background-image:linear-gradient(to bottom left,var(--gradient-color-stops))}.xl\:bg-gradient-to-l{background-image:linear-gradient(to left,var(--gradient-color-stops))}.xl\:bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--gradient-color-stops))}.xl\:from-transparent{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:from-current{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:from-black{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:from-white{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:from-gray-100{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:from-gray-200{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:from-gray-300{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:from-gray-400{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:from-gray-500{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:from-gray-600{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:from-gray-700{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:from-gray-800{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:from-gray-900{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:from-red-100{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:from-red-200{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:from-red-300{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:from-red-400{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:from-red-500{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:from-red-600{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:from-red-700{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:from-red-800{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:from-red-900{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:from-orange-100{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:from-orange-200{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:from-orange-300{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:from-orange-400{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:from-orange-500{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:from-orange-600{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:from-orange-700{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:from-orange-800{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:from-orange-900{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:from-yellow-100{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:from-yellow-200{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:from-yellow-300{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:from-yellow-400{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:from-yellow-500{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:from-yellow-600{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:from-yellow-700{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:from-yellow-800{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:from-yellow-900{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:from-green-100{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:from-green-200{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:from-green-300{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:from-green-400{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:from-green-500{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:from-green-600{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:from-green-700{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:from-green-800{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:from-green-900{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:from-teal-100{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:from-teal-200{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:from-teal-300{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:from-teal-400{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:from-teal-500{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:from-teal-600{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:from-teal-700{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:from-teal-800{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:from-teal-900{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:from-blue-100{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:from-blue-200{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:from-blue-300{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:from-blue-400{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:from-blue-500{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:from-blue-600{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:from-blue-700{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:from-blue-800{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:from-blue-900{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:from-indigo-100{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:from-indigo-200{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:from-indigo-300{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:from-indigo-400{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:from-indigo-500{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:from-indigo-600{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:from-indigo-700{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:from-indigo-800{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:from-indigo-900{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:from-purple-100{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:from-purple-200{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:from-purple-300{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:from-purple-400{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:from-purple-500{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:from-purple-600{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:from-purple-700{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:from-purple-800{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:from-purple-900{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:from-pink-100{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:from-pink-200{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:from-pink-300{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:from-pink-400{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:from-pink-500{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:from-pink-600{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:from-pink-700{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:from-pink-800{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:from-pink-900{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:via-transparent{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:via-current{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:via-black{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:via-white{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:via-gray-100{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:via-gray-200{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:via-gray-300{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:via-gray-400{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:via-gray-500{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:via-gray-600{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:via-gray-700{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:via-gray-800{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:via-gray-900{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:via-red-100{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:via-red-200{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:via-red-300{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:via-red-400{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:via-red-500{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:via-red-600{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:via-red-700{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:via-red-800{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:via-red-900{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:via-orange-100{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:via-orange-200{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:via-orange-300{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:via-orange-400{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:via-orange-500{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:via-orange-600{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:via-orange-700{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:via-orange-800{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:via-orange-900{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:via-yellow-100{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:via-yellow-200{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:via-yellow-300{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:via-yellow-400{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:via-yellow-500{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:via-yellow-600{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:via-yellow-700{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:via-yellow-800{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:via-yellow-900{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:via-green-100{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:via-green-200{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:via-green-300{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:via-green-400{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:via-green-500{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:via-green-600{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:via-green-700{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:via-green-800{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:via-green-900{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:via-teal-100{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:via-teal-200{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:via-teal-300{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:via-teal-400{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:via-teal-500{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:via-teal-600{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:via-teal-700{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:via-teal-800{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:via-teal-900{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:via-blue-100{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:via-blue-200{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:via-blue-300{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:via-blue-400{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:via-blue-500{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:via-blue-600{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:via-blue-700{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:via-blue-800{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:via-blue-900{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:via-indigo-100{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:via-indigo-200{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:via-indigo-300{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:via-indigo-400{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:via-indigo-500{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:via-indigo-600{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:via-indigo-700{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:via-indigo-800{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:via-indigo-900{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:via-purple-100{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:via-purple-200{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:via-purple-300{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:via-purple-400{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:via-purple-500{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:via-purple-600{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:via-purple-700{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:via-purple-800{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:via-purple-900{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:via-pink-100{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:via-pink-200{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:via-pink-300{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:via-pink-400{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:via-pink-500{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:via-pink-600{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:via-pink-700{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:via-pink-800{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:via-pink-900{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:to-transparent{--gradient-to-color:transparent}.xl\:to-current{--gradient-to-color:currentColor}.xl\:to-black{--gradient-to-color:#000}.xl\:to-white{--gradient-to-color:#fff}.xl\:to-gray-100{--gradient-to-color:#f7fafc}.xl\:to-gray-200{--gradient-to-color:#edf2f7}.xl\:to-gray-300{--gradient-to-color:#e2e8f0}.xl\:to-gray-400{--gradient-to-color:#cbd5e0}.xl\:to-gray-500{--gradient-to-color:#a0aec0}.xl\:to-gray-600{--gradient-to-color:#718096}.xl\:to-gray-700{--gradient-to-color:#4a5568}.xl\:to-gray-800{--gradient-to-color:#2d3748}.xl\:to-gray-900{--gradient-to-color:#1a202c}.xl\:to-red-100{--gradient-to-color:#fff5f5}.xl\:to-red-200{--gradient-to-color:#fed7d7}.xl\:to-red-300{--gradient-to-color:#feb2b2}.xl\:to-red-400{--gradient-to-color:#fc8181}.xl\:to-red-500{--gradient-to-color:#f56565}.xl\:to-red-600{--gradient-to-color:#e53e3e}.xl\:to-red-700{--gradient-to-color:#c53030}.xl\:to-red-800{--gradient-to-color:#9b2c2c}.xl\:to-red-900{--gradient-to-color:#742a2a}.xl\:to-orange-100{--gradient-to-color:#fffaf0}.xl\:to-orange-200{--gradient-to-color:#feebc8}.xl\:to-orange-300{--gradient-to-color:#fbd38d}.xl\:to-orange-400{--gradient-to-color:#f6ad55}.xl\:to-orange-500{--gradient-to-color:#ed8936}.xl\:to-orange-600{--gradient-to-color:#dd6b20}.xl\:to-orange-700{--gradient-to-color:#c05621}.xl\:to-orange-800{--gradient-to-color:#9c4221}.xl\:to-orange-900{--gradient-to-color:#7b341e}.xl\:to-yellow-100{--gradient-to-color:#fffff0}.xl\:to-yellow-200{--gradient-to-color:#fefcbf}.xl\:to-yellow-300{--gradient-to-color:#faf089}.xl\:to-yellow-400{--gradient-to-color:#f6e05e}.xl\:to-yellow-500{--gradient-to-color:#ecc94b}.xl\:to-yellow-600{--gradient-to-color:#d69e2e}.xl\:to-yellow-700{--gradient-to-color:#b7791f}.xl\:to-yellow-800{--gradient-to-color:#975a16}.xl\:to-yellow-900{--gradient-to-color:#744210}.xl\:to-green-100{--gradient-to-color:#f0fff4}.xl\:to-green-200{--gradient-to-color:#c6f6d5}.xl\:to-green-300{--gradient-to-color:#9ae6b4}.xl\:to-green-400{--gradient-to-color:#68d391}.xl\:to-green-500{--gradient-to-color:#48bb78}.xl\:to-green-600{--gradient-to-color:#38a169}.xl\:to-green-700{--gradient-to-color:#2f855a}.xl\:to-green-800{--gradient-to-color:#276749}.xl\:to-green-900{--gradient-to-color:#22543d}.xl\:to-teal-100{--gradient-to-color:#e6fffa}.xl\:to-teal-200{--gradient-to-color:#b2f5ea}.xl\:to-teal-300{--gradient-to-color:#81e6d9}.xl\:to-teal-400{--gradient-to-color:#4fd1c5}.xl\:to-teal-500{--gradient-to-color:#38b2ac}.xl\:to-teal-600{--gradient-to-color:#319795}.xl\:to-teal-700{--gradient-to-color:#2c7a7b}.xl\:to-teal-800{--gradient-to-color:#285e61}.xl\:to-teal-900{--gradient-to-color:#234e52}.xl\:to-blue-100{--gradient-to-color:#ebf8ff}.xl\:to-blue-200{--gradient-to-color:#bee3f8}.xl\:to-blue-300{--gradient-to-color:#90cdf4}.xl\:to-blue-400{--gradient-to-color:#63b3ed}.xl\:to-blue-500{--gradient-to-color:#4299e1}.xl\:to-blue-600{--gradient-to-color:#3182ce}.xl\:to-blue-700{--gradient-to-color:#2b6cb0}.xl\:to-blue-800{--gradient-to-color:#2c5282}.xl\:to-blue-900{--gradient-to-color:#2a4365}.xl\:to-indigo-100{--gradient-to-color:#ebf4ff}.xl\:to-indigo-200{--gradient-to-color:#c3dafe}.xl\:to-indigo-300{--gradient-to-color:#a3bffa}.xl\:to-indigo-400{--gradient-to-color:#7f9cf5}.xl\:to-indigo-500{--gradient-to-color:#667eea}.xl\:to-indigo-600{--gradient-to-color:#5a67d8}.xl\:to-indigo-700{--gradient-to-color:#4c51bf}.xl\:to-indigo-800{--gradient-to-color:#434190}.xl\:to-indigo-900{--gradient-to-color:#3c366b}.xl\:to-purple-100{--gradient-to-color:#faf5ff}.xl\:to-purple-200{--gradient-to-color:#e9d8fd}.xl\:to-purple-300{--gradient-to-color:#d6bcfa}.xl\:to-purple-400{--gradient-to-color:#b794f4}.xl\:to-purple-500{--gradient-to-color:#9f7aea}.xl\:to-purple-600{--gradient-to-color:#805ad5}.xl\:to-purple-700{--gradient-to-color:#6b46c1}.xl\:to-purple-800{--gradient-to-color:#553c9a}.xl\:to-purple-900{--gradient-to-color:#44337a}.xl\:to-pink-100{--gradient-to-color:#fff5f7}.xl\:to-pink-200{--gradient-to-color:#fed7e2}.xl\:to-pink-300{--gradient-to-color:#fbb6ce}.xl\:to-pink-400{--gradient-to-color:#f687b3}.xl\:to-pink-500{--gradient-to-color:#ed64a6}.xl\:to-pink-600{--gradient-to-color:#d53f8c}.xl\:to-pink-700{--gradient-to-color:#b83280}.xl\:to-pink-800{--gradient-to-color:#97266d}.xl\:to-pink-900{--gradient-to-color:#702459}.xl\:hover\:from-transparent:hover{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:from-current:hover{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:from-black:hover{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:from-white:hover{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:from-gray-100:hover{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:hover\:from-gray-200:hover{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:hover\:from-gray-300:hover{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:hover\:from-gray-400:hover{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:hover\:from-gray-500:hover{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:hover\:from-gray-600:hover{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:hover\:from-gray-700:hover{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:hover\:from-gray-800:hover{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:hover\:from-gray-900:hover{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:hover\:from-red-100:hover{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:hover\:from-red-200:hover{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:hover\:from-red-300:hover{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:hover\:from-red-400:hover{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:hover\:from-red-500:hover{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:hover\:from-red-600:hover{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:hover\:from-red-700:hover{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:hover\:from-red-800:hover{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:hover\:from-red-900:hover{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:hover\:from-orange-100:hover{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:hover\:from-orange-200:hover{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:hover\:from-orange-300:hover{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:hover\:from-orange-400:hover{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:hover\:from-orange-500:hover{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:hover\:from-orange-600:hover{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:hover\:from-orange-700:hover{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:hover\:from-orange-800:hover{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:hover\:from-orange-900:hover{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:hover\:from-yellow-100:hover{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:hover\:from-yellow-200:hover{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:hover\:from-yellow-300:hover{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:hover\:from-yellow-400:hover{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:hover\:from-yellow-500:hover{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:hover\:from-yellow-600:hover{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:hover\:from-yellow-700:hover{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:hover\:from-yellow-800:hover{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:hover\:from-yellow-900:hover{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:hover\:from-green-100:hover{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:hover\:from-green-200:hover{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:hover\:from-green-300:hover{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:hover\:from-green-400:hover{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:hover\:from-green-500:hover{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:hover\:from-green-600:hover{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:hover\:from-green-700:hover{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:hover\:from-green-800:hover{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:hover\:from-green-900:hover{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:hover\:from-teal-100:hover{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:hover\:from-teal-200:hover{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:hover\:from-teal-300:hover{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:hover\:from-teal-400:hover{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:hover\:from-teal-500:hover{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:hover\:from-teal-600:hover{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:hover\:from-teal-700:hover{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:hover\:from-teal-800:hover{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:hover\:from-teal-900:hover{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:hover\:from-blue-100:hover{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:hover\:from-blue-200:hover{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:hover\:from-blue-300:hover{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:hover\:from-blue-400:hover{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:hover\:from-blue-500:hover{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:hover\:from-blue-600:hover{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:hover\:from-blue-700:hover{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:hover\:from-blue-800:hover{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:hover\:from-blue-900:hover{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:hover\:from-indigo-100:hover{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:hover\:from-indigo-200:hover{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:hover\:from-indigo-300:hover{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:hover\:from-indigo-400:hover{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:hover\:from-indigo-500:hover{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:hover\:from-indigo-600:hover{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:hover\:from-indigo-700:hover{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:hover\:from-indigo-800:hover{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:hover\:from-indigo-900:hover{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:hover\:from-purple-100:hover{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:hover\:from-purple-200:hover{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:hover\:from-purple-300:hover{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:hover\:from-purple-400:hover{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:hover\:from-purple-500:hover{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:hover\:from-purple-600:hover{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:hover\:from-purple-700:hover{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:hover\:from-purple-800:hover{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:hover\:from-purple-900:hover{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:hover\:from-pink-100:hover{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:hover\:from-pink-200:hover{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:hover\:from-pink-300:hover{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:hover\:from-pink-400:hover{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:hover\:from-pink-500:hover{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:hover\:from-pink-600:hover{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:hover\:from-pink-700:hover{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:hover\:from-pink-800:hover{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:hover\:from-pink-900:hover{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:hover\:via-transparent:hover{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:via-current:hover{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:via-black:hover{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:hover\:via-white:hover{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:hover\:via-gray-100:hover{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:hover\:via-gray-200:hover{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:hover\:via-gray-300:hover{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:hover\:via-gray-400:hover{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:hover\:via-gray-500:hover{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:hover\:via-gray-600:hover{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:hover\:via-gray-700:hover{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:hover\:via-gray-800:hover{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:hover\:via-gray-900:hover{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:hover\:via-red-100:hover{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:hover\:via-red-200:hover{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:hover\:via-red-300:hover{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:hover\:via-red-400:hover{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:hover\:via-red-500:hover{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:hover\:via-red-600:hover{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:hover\:via-red-700:hover{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:hover\:via-red-800:hover{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:hover\:via-red-900:hover{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:hover\:via-orange-100:hover{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:hover\:via-orange-200:hover{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:hover\:via-orange-300:hover{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:hover\:via-orange-400:hover{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:hover\:via-orange-500:hover{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:hover\:via-orange-600:hover{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:hover\:via-orange-700:hover{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:hover\:via-orange-800:hover{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:hover\:via-orange-900:hover{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:hover\:via-yellow-100:hover{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:hover\:via-yellow-200:hover{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:hover\:via-yellow-300:hover{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:hover\:via-yellow-400:hover{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:hover\:via-yellow-500:hover{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:hover\:via-yellow-600:hover{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:hover\:via-yellow-700:hover{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:hover\:via-yellow-800:hover{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:hover\:via-yellow-900:hover{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:hover\:via-green-100:hover{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:hover\:via-green-200:hover{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:hover\:via-green-300:hover{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:hover\:via-green-400:hover{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:hover\:via-green-500:hover{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:hover\:via-green-600:hover{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:hover\:via-green-700:hover{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:hover\:via-green-800:hover{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:hover\:via-green-900:hover{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:hover\:via-teal-100:hover{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:hover\:via-teal-200:hover{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:hover\:via-teal-300:hover{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:hover\:via-teal-400:hover{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:hover\:via-teal-500:hover{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:hover\:via-teal-600:hover{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:hover\:via-teal-700:hover{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:hover\:via-teal-800:hover{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:hover\:via-teal-900:hover{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:hover\:via-blue-100:hover{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:hover\:via-blue-200:hover{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:hover\:via-blue-300:hover{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:hover\:via-blue-400:hover{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:hover\:via-blue-500:hover{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:hover\:via-blue-600:hover{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:hover\:via-blue-700:hover{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:hover\:via-blue-800:hover{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:hover\:via-blue-900:hover{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:hover\:via-indigo-100:hover{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:hover\:via-indigo-200:hover{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:hover\:via-indigo-300:hover{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:hover\:via-indigo-400:hover{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:hover\:via-indigo-500:hover{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:hover\:via-indigo-600:hover{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:hover\:via-indigo-700:hover{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:hover\:via-indigo-800:hover{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:hover\:via-indigo-900:hover{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:hover\:via-purple-100:hover{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:hover\:via-purple-200:hover{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:hover\:via-purple-300:hover{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:hover\:via-purple-400:hover{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:hover\:via-purple-500:hover{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:hover\:via-purple-600:hover{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:hover\:via-purple-700:hover{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:hover\:via-purple-800:hover{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:hover\:via-purple-900:hover{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:hover\:via-pink-100:hover{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:hover\:via-pink-200:hover{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:hover\:via-pink-300:hover{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:hover\:via-pink-400:hover{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:hover\:via-pink-500:hover{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:hover\:via-pink-600:hover{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:hover\:via-pink-700:hover{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:hover\:via-pink-800:hover{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:hover\:via-pink-900:hover{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:hover\:to-transparent:hover{--gradient-to-color:transparent}.xl\:hover\:to-current:hover{--gradient-to-color:currentColor}.xl\:hover\:to-black:hover{--gradient-to-color:#000}.xl\:hover\:to-white:hover{--gradient-to-color:#fff}.xl\:hover\:to-gray-100:hover{--gradient-to-color:#f7fafc}.xl\:hover\:to-gray-200:hover{--gradient-to-color:#edf2f7}.xl\:hover\:to-gray-300:hover{--gradient-to-color:#e2e8f0}.xl\:hover\:to-gray-400:hover{--gradient-to-color:#cbd5e0}.xl\:hover\:to-gray-500:hover{--gradient-to-color:#a0aec0}.xl\:hover\:to-gray-600:hover{--gradient-to-color:#718096}.xl\:hover\:to-gray-700:hover{--gradient-to-color:#4a5568}.xl\:hover\:to-gray-800:hover{--gradient-to-color:#2d3748}.xl\:hover\:to-gray-900:hover{--gradient-to-color:#1a202c}.xl\:hover\:to-red-100:hover{--gradient-to-color:#fff5f5}.xl\:hover\:to-red-200:hover{--gradient-to-color:#fed7d7}.xl\:hover\:to-red-300:hover{--gradient-to-color:#feb2b2}.xl\:hover\:to-red-400:hover{--gradient-to-color:#fc8181}.xl\:hover\:to-red-500:hover{--gradient-to-color:#f56565}.xl\:hover\:to-red-600:hover{--gradient-to-color:#e53e3e}.xl\:hover\:to-red-700:hover{--gradient-to-color:#c53030}.xl\:hover\:to-red-800:hover{--gradient-to-color:#9b2c2c}.xl\:hover\:to-red-900:hover{--gradient-to-color:#742a2a}.xl\:hover\:to-orange-100:hover{--gradient-to-color:#fffaf0}.xl\:hover\:to-orange-200:hover{--gradient-to-color:#feebc8}.xl\:hover\:to-orange-300:hover{--gradient-to-color:#fbd38d}.xl\:hover\:to-orange-400:hover{--gradient-to-color:#f6ad55}.xl\:hover\:to-orange-500:hover{--gradient-to-color:#ed8936}.xl\:hover\:to-orange-600:hover{--gradient-to-color:#dd6b20}.xl\:hover\:to-orange-700:hover{--gradient-to-color:#c05621}.xl\:hover\:to-orange-800:hover{--gradient-to-color:#9c4221}.xl\:hover\:to-orange-900:hover{--gradient-to-color:#7b341e}.xl\:hover\:to-yellow-100:hover{--gradient-to-color:#fffff0}.xl\:hover\:to-yellow-200:hover{--gradient-to-color:#fefcbf}.xl\:hover\:to-yellow-300:hover{--gradient-to-color:#faf089}.xl\:hover\:to-yellow-400:hover{--gradient-to-color:#f6e05e}.xl\:hover\:to-yellow-500:hover{--gradient-to-color:#ecc94b}.xl\:hover\:to-yellow-600:hover{--gradient-to-color:#d69e2e}.xl\:hover\:to-yellow-700:hover{--gradient-to-color:#b7791f}.xl\:hover\:to-yellow-800:hover{--gradient-to-color:#975a16}.xl\:hover\:to-yellow-900:hover{--gradient-to-color:#744210}.xl\:hover\:to-green-100:hover{--gradient-to-color:#f0fff4}.xl\:hover\:to-green-200:hover{--gradient-to-color:#c6f6d5}.xl\:hover\:to-green-300:hover{--gradient-to-color:#9ae6b4}.xl\:hover\:to-green-400:hover{--gradient-to-color:#68d391}.xl\:hover\:to-green-500:hover{--gradient-to-color:#48bb78}.xl\:hover\:to-green-600:hover{--gradient-to-color:#38a169}.xl\:hover\:to-green-700:hover{--gradient-to-color:#2f855a}.xl\:hover\:to-green-800:hover{--gradient-to-color:#276749}.xl\:hover\:to-green-900:hover{--gradient-to-color:#22543d}.xl\:hover\:to-teal-100:hover{--gradient-to-color:#e6fffa}.xl\:hover\:to-teal-200:hover{--gradient-to-color:#b2f5ea}.xl\:hover\:to-teal-300:hover{--gradient-to-color:#81e6d9}.xl\:hover\:to-teal-400:hover{--gradient-to-color:#4fd1c5}.xl\:hover\:to-teal-500:hover{--gradient-to-color:#38b2ac}.xl\:hover\:to-teal-600:hover{--gradient-to-color:#319795}.xl\:hover\:to-teal-700:hover{--gradient-to-color:#2c7a7b}.xl\:hover\:to-teal-800:hover{--gradient-to-color:#285e61}.xl\:hover\:to-teal-900:hover{--gradient-to-color:#234e52}.xl\:hover\:to-blue-100:hover{--gradient-to-color:#ebf8ff}.xl\:hover\:to-blue-200:hover{--gradient-to-color:#bee3f8}.xl\:hover\:to-blue-300:hover{--gradient-to-color:#90cdf4}.xl\:hover\:to-blue-400:hover{--gradient-to-color:#63b3ed}.xl\:hover\:to-blue-500:hover{--gradient-to-color:#4299e1}.xl\:hover\:to-blue-600:hover{--gradient-to-color:#3182ce}.xl\:hover\:to-blue-700:hover{--gradient-to-color:#2b6cb0}.xl\:hover\:to-blue-800:hover{--gradient-to-color:#2c5282}.xl\:hover\:to-blue-900:hover{--gradient-to-color:#2a4365}.xl\:hover\:to-indigo-100:hover{--gradient-to-color:#ebf4ff}.xl\:hover\:to-indigo-200:hover{--gradient-to-color:#c3dafe}.xl\:hover\:to-indigo-300:hover{--gradient-to-color:#a3bffa}.xl\:hover\:to-indigo-400:hover{--gradient-to-color:#7f9cf5}.xl\:hover\:to-indigo-500:hover{--gradient-to-color:#667eea}.xl\:hover\:to-indigo-600:hover{--gradient-to-color:#5a67d8}.xl\:hover\:to-indigo-700:hover{--gradient-to-color:#4c51bf}.xl\:hover\:to-indigo-800:hover{--gradient-to-color:#434190}.xl\:hover\:to-indigo-900:hover{--gradient-to-color:#3c366b}.xl\:hover\:to-purple-100:hover{--gradient-to-color:#faf5ff}.xl\:hover\:to-purple-200:hover{--gradient-to-color:#e9d8fd}.xl\:hover\:to-purple-300:hover{--gradient-to-color:#d6bcfa}.xl\:hover\:to-purple-400:hover{--gradient-to-color:#b794f4}.xl\:hover\:to-purple-500:hover{--gradient-to-color:#9f7aea}.xl\:hover\:to-purple-600:hover{--gradient-to-color:#805ad5}.xl\:hover\:to-purple-700:hover{--gradient-to-color:#6b46c1}.xl\:hover\:to-purple-800:hover{--gradient-to-color:#553c9a}.xl\:hover\:to-purple-900:hover{--gradient-to-color:#44337a}.xl\:hover\:to-pink-100:hover{--gradient-to-color:#fff5f7}.xl\:hover\:to-pink-200:hover{--gradient-to-color:#fed7e2}.xl\:hover\:to-pink-300:hover{--gradient-to-color:#fbb6ce}.xl\:hover\:to-pink-400:hover{--gradient-to-color:#f687b3}.xl\:hover\:to-pink-500:hover{--gradient-to-color:#ed64a6}.xl\:hover\:to-pink-600:hover{--gradient-to-color:#d53f8c}.xl\:hover\:to-pink-700:hover{--gradient-to-color:#b83280}.xl\:hover\:to-pink-800:hover{--gradient-to-color:#97266d}.xl\:hover\:to-pink-900:hover{--gradient-to-color:#702459}.xl\:focus\:from-transparent:focus{--gradient-from-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:from-current:focus{--gradient-from-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:from-black:focus{--gradient-from-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:from-white:focus{--gradient-from-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:from-gray-100:focus{--gradient-from-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:focus\:from-gray-200:focus{--gradient-from-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:focus\:from-gray-300:focus{--gradient-from-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:focus\:from-gray-400:focus{--gradient-from-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:focus\:from-gray-500:focus{--gradient-from-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:focus\:from-gray-600:focus{--gradient-from-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:focus\:from-gray-700:focus{--gradient-from-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:focus\:from-gray-800:focus{--gradient-from-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:focus\:from-gray-900:focus{--gradient-from-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:focus\:from-red-100:focus{--gradient-from-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:focus\:from-red-200:focus{--gradient-from-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:focus\:from-red-300:focus{--gradient-from-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:focus\:from-red-400:focus{--gradient-from-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:focus\:from-red-500:focus{--gradient-from-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:focus\:from-red-600:focus{--gradient-from-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:focus\:from-red-700:focus{--gradient-from-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:focus\:from-red-800:focus{--gradient-from-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:focus\:from-red-900:focus{--gradient-from-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:focus\:from-orange-100:focus{--gradient-from-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:focus\:from-orange-200:focus{--gradient-from-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:focus\:from-orange-300:focus{--gradient-from-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:focus\:from-orange-400:focus{--gradient-from-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:focus\:from-orange-500:focus{--gradient-from-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:focus\:from-orange-600:focus{--gradient-from-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:focus\:from-orange-700:focus{--gradient-from-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:focus\:from-orange-800:focus{--gradient-from-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:focus\:from-orange-900:focus{--gradient-from-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:focus\:from-yellow-100:focus{--gradient-from-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:focus\:from-yellow-200:focus{--gradient-from-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:focus\:from-yellow-300:focus{--gradient-from-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:focus\:from-yellow-400:focus{--gradient-from-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:focus\:from-yellow-500:focus{--gradient-from-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:focus\:from-yellow-600:focus{--gradient-from-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:focus\:from-yellow-700:focus{--gradient-from-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:focus\:from-yellow-800:focus{--gradient-from-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:focus\:from-yellow-900:focus{--gradient-from-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:focus\:from-green-100:focus{--gradient-from-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:focus\:from-green-200:focus{--gradient-from-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:focus\:from-green-300:focus{--gradient-from-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:focus\:from-green-400:focus{--gradient-from-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:focus\:from-green-500:focus{--gradient-from-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:focus\:from-green-600:focus{--gradient-from-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:focus\:from-green-700:focus{--gradient-from-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:focus\:from-green-800:focus{--gradient-from-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:focus\:from-green-900:focus{--gradient-from-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:focus\:from-teal-100:focus{--gradient-from-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:focus\:from-teal-200:focus{--gradient-from-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:focus\:from-teal-300:focus{--gradient-from-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:focus\:from-teal-400:focus{--gradient-from-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:focus\:from-teal-500:focus{--gradient-from-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:focus\:from-teal-600:focus{--gradient-from-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:focus\:from-teal-700:focus{--gradient-from-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:focus\:from-teal-800:focus{--gradient-from-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:focus\:from-teal-900:focus{--gradient-from-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:focus\:from-blue-100:focus{--gradient-from-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:focus\:from-blue-200:focus{--gradient-from-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:focus\:from-blue-300:focus{--gradient-from-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:focus\:from-blue-400:focus{--gradient-from-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:focus\:from-blue-500:focus{--gradient-from-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:focus\:from-blue-600:focus{--gradient-from-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:focus\:from-blue-700:focus{--gradient-from-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:focus\:from-blue-800:focus{--gradient-from-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:focus\:from-blue-900:focus{--gradient-from-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:focus\:from-indigo-100:focus{--gradient-from-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:focus\:from-indigo-200:focus{--gradient-from-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:focus\:from-indigo-300:focus{--gradient-from-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:focus\:from-indigo-400:focus{--gradient-from-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:focus\:from-indigo-500:focus{--gradient-from-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:focus\:from-indigo-600:focus{--gradient-from-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:focus\:from-indigo-700:focus{--gradient-from-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:focus\:from-indigo-800:focus{--gradient-from-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:focus\:from-indigo-900:focus{--gradient-from-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:focus\:from-purple-100:focus{--gradient-from-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:focus\:from-purple-200:focus{--gradient-from-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:focus\:from-purple-300:focus{--gradient-from-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:focus\:from-purple-400:focus{--gradient-from-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:focus\:from-purple-500:focus{--gradient-from-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:focus\:from-purple-600:focus{--gradient-from-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:focus\:from-purple-700:focus{--gradient-from-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:focus\:from-purple-800:focus{--gradient-from-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:focus\:from-purple-900:focus{--gradient-from-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:focus\:from-pink-100:focus{--gradient-from-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:focus\:from-pink-200:focus{--gradient-from-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:focus\:from-pink-300:focus{--gradient-from-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:focus\:from-pink-400:focus{--gradient-from-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:focus\:from-pink-500:focus{--gradient-from-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:focus\:from-pink-600:focus{--gradient-from-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:focus\:from-pink-700:focus{--gradient-from-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:focus\:from-pink-800:focus{--gradient-from-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:focus\:from-pink-900:focus{--gradient-from-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:focus\:via-transparent:focus{--gradient-via-color:transparent;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:via-current:focus{--gradient-via-color:currentColor;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:via-black:focus{--gradient-via-color:#000;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(0, 0, 0, 0))}.xl\:focus\:via-white:focus{--gradient-via-color:#fff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 255, 0))}.xl\:focus\:via-gray-100:focus{--gradient-via-color:#f7fafc;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(247, 250, 252, 0))}.xl\:focus\:via-gray-200:focus{--gradient-via-color:#edf2f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 242, 247, 0))}.xl\:focus\:via-gray-300:focus{--gradient-via-color:#e2e8f0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(226, 232, 240, 0))}.xl\:focus\:via-gray-400:focus{--gradient-via-color:#cbd5e0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(203, 213, 224, 0))}.xl\:focus\:via-gray-500:focus{--gradient-via-color:#a0aec0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(160, 174, 192, 0))}.xl\:focus\:via-gray-600:focus{--gradient-via-color:#718096;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(113, 128, 150, 0))}.xl\:focus\:via-gray-700:focus{--gradient-via-color:#4a5568;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(74, 85, 104, 0))}.xl\:focus\:via-gray-800:focus{--gradient-via-color:#2d3748;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(45, 55, 72, 0))}.xl\:focus\:via-gray-900:focus{--gradient-via-color:#1a202c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(26, 32, 44, 0))}.xl\:focus\:via-red-100:focus{--gradient-via-color:#fff5f5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 245, 0))}.xl\:focus\:via-red-200:focus{--gradient-via-color:#fed7d7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 215, 0))}.xl\:focus\:via-red-300:focus{--gradient-via-color:#feb2b2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 178, 178, 0))}.xl\:focus\:via-red-400:focus{--gradient-via-color:#fc8181;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(252, 129, 129, 0))}.xl\:focus\:via-red-500:focus{--gradient-via-color:#f56565;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(245, 101, 101, 0))}.xl\:focus\:via-red-600:focus{--gradient-via-color:#e53e3e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(229, 62, 62, 0))}.xl\:focus\:via-red-700:focus{--gradient-via-color:#c53030;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(197, 48, 48, 0))}.xl\:focus\:via-red-800:focus{--gradient-via-color:#9b2c2c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(155, 44, 44, 0))}.xl\:focus\:via-red-900:focus{--gradient-via-color:#742a2a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 42, 42, 0))}.xl\:focus\:via-orange-100:focus{--gradient-via-color:#fffaf0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 250, 240, 0))}.xl\:focus\:via-orange-200:focus{--gradient-via-color:#feebc8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 235, 200, 0))}.xl\:focus\:via-orange-300:focus{--gradient-via-color:#fbd38d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 211, 141, 0))}.xl\:focus\:via-orange-400:focus{--gradient-via-color:#f6ad55;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 173, 85, 0))}.xl\:focus\:via-orange-500:focus{--gradient-via-color:#ed8936;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 137, 54, 0))}.xl\:focus\:via-orange-600:focus{--gradient-via-color:#dd6b20;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(221, 107, 32, 0))}.xl\:focus\:via-orange-700:focus{--gradient-via-color:#c05621;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(192, 86, 33, 0))}.xl\:focus\:via-orange-800:focus{--gradient-via-color:#9c4221;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(156, 66, 33, 0))}.xl\:focus\:via-orange-900:focus{--gradient-via-color:#7b341e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(123, 52, 30, 0))}.xl\:focus\:via-yellow-100:focus{--gradient-via-color:#fffff0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 255, 240, 0))}.xl\:focus\:via-yellow-200:focus{--gradient-via-color:#fefcbf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 252, 191, 0))}.xl\:focus\:via-yellow-300:focus{--gradient-via-color:#faf089;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 240, 137, 0))}.xl\:focus\:via-yellow-400:focus{--gradient-via-color:#f6e05e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 224, 94, 0))}.xl\:focus\:via-yellow-500:focus{--gradient-via-color:#ecc94b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(236, 201, 75, 0))}.xl\:focus\:via-yellow-600:focus{--gradient-via-color:#d69e2e;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 158, 46, 0))}.xl\:focus\:via-yellow-700:focus{--gradient-via-color:#b7791f;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 121, 31, 0))}.xl\:focus\:via-yellow-800:focus{--gradient-via-color:#975a16;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 90, 22, 0))}.xl\:focus\:via-yellow-900:focus{--gradient-via-color:#744210;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(116, 66, 16, 0))}.xl\:focus\:via-green-100:focus{--gradient-via-color:#f0fff4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(240, 255, 244, 0))}.xl\:focus\:via-green-200:focus{--gradient-via-color:#c6f6d5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(198, 246, 213, 0))}.xl\:focus\:via-green-300:focus{--gradient-via-color:#9ae6b4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(154, 230, 180, 0))}.xl\:focus\:via-green-400:focus{--gradient-via-color:#68d391;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(104, 211, 145, 0))}.xl\:focus\:via-green-500:focus{--gradient-via-color:#48bb78;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(72, 187, 120, 0))}.xl\:focus\:via-green-600:focus{--gradient-via-color:#38a169;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 161, 105, 0))}.xl\:focus\:via-green-700:focus{--gradient-via-color:#2f855a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(47, 133, 90, 0))}.xl\:focus\:via-green-800:focus{--gradient-via-color:#276749;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(39, 103, 73, 0))}.xl\:focus\:via-green-900:focus{--gradient-via-color:#22543d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(34, 84, 61, 0))}.xl\:focus\:via-teal-100:focus{--gradient-via-color:#e6fffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(230, 255, 250, 0))}.xl\:focus\:via-teal-200:focus{--gradient-via-color:#b2f5ea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(178, 245, 234, 0))}.xl\:focus\:via-teal-300:focus{--gradient-via-color:#81e6d9;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(129, 230, 217, 0))}.xl\:focus\:via-teal-400:focus{--gradient-via-color:#4fd1c5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(79, 209, 197, 0))}.xl\:focus\:via-teal-500:focus{--gradient-via-color:#38b2ac;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(56, 178, 172, 0))}.xl\:focus\:via-teal-600:focus{--gradient-via-color:#319795;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 151, 149, 0))}.xl\:focus\:via-teal-700:focus{--gradient-via-color:#2c7a7b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 122, 123, 0))}.xl\:focus\:via-teal-800:focus{--gradient-via-color:#285e61;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(40, 94, 97, 0))}.xl\:focus\:via-teal-900:focus{--gradient-via-color:#234e52;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(35, 78, 82, 0))}.xl\:focus\:via-blue-100:focus{--gradient-via-color:#ebf8ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 248, 255, 0))}.xl\:focus\:via-blue-200:focus{--gradient-via-color:#bee3f8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(190, 227, 248, 0))}.xl\:focus\:via-blue-300:focus{--gradient-via-color:#90cdf4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(144, 205, 244, 0))}.xl\:focus\:via-blue-400:focus{--gradient-via-color:#63b3ed;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(99, 179, 237, 0))}.xl\:focus\:via-blue-500:focus{--gradient-via-color:#4299e1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(66, 153, 225, 0))}.xl\:focus\:via-blue-600:focus{--gradient-via-color:#3182ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(49, 130, 206, 0))}.xl\:focus\:via-blue-700:focus{--gradient-via-color:#2b6cb0;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(43, 108, 176, 0))}.xl\:focus\:via-blue-800:focus{--gradient-via-color:#2c5282;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(44, 82, 130, 0))}.xl\:focus\:via-blue-900:focus{--gradient-via-color:#2a4365;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(42, 67, 101, 0))}.xl\:focus\:via-indigo-100:focus{--gradient-via-color:#ebf4ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(235, 244, 255, 0))}.xl\:focus\:via-indigo-200:focus{--gradient-via-color:#c3dafe;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(195, 218, 254, 0))}.xl\:focus\:via-indigo-300:focus{--gradient-via-color:#a3bffa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(163, 191, 250, 0))}.xl\:focus\:via-indigo-400:focus{--gradient-via-color:#7f9cf5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(127, 156, 245, 0))}.xl\:focus\:via-indigo-500:focus{--gradient-via-color:#667eea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(102, 126, 234, 0))}.xl\:focus\:via-indigo-600:focus{--gradient-via-color:#5a67d8;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(90, 103, 216, 0))}.xl\:focus\:via-indigo-700:focus{--gradient-via-color:#4c51bf;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(76, 81, 191, 0))}.xl\:focus\:via-indigo-800:focus{--gradient-via-color:#434190;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(67, 65, 144, 0))}.xl\:focus\:via-indigo-900:focus{--gradient-via-color:#3c366b;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(60, 54, 107, 0))}.xl\:focus\:via-purple-100:focus{--gradient-via-color:#faf5ff;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(250, 245, 255, 0))}.xl\:focus\:via-purple-200:focus{--gradient-via-color:#e9d8fd;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(233, 216, 253, 0))}.xl\:focus\:via-purple-300:focus{--gradient-via-color:#d6bcfa;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(214, 188, 250, 0))}.xl\:focus\:via-purple-400:focus{--gradient-via-color:#b794f4;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(183, 148, 244, 0))}.xl\:focus\:via-purple-500:focus{--gradient-via-color:#9f7aea;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(159, 122, 234, 0))}.xl\:focus\:via-purple-600:focus{--gradient-via-color:#805ad5;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(128, 90, 213, 0))}.xl\:focus\:via-purple-700:focus{--gradient-via-color:#6b46c1;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(107, 70, 193, 0))}.xl\:focus\:via-purple-800:focus{--gradient-via-color:#553c9a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(85, 60, 154, 0))}.xl\:focus\:via-purple-900:focus{--gradient-via-color:#44337a;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(68, 51, 122, 0))}.xl\:focus\:via-pink-100:focus{--gradient-via-color:#fff5f7;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(255, 245, 247, 0))}.xl\:focus\:via-pink-200:focus{--gradient-via-color:#fed7e2;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(254, 215, 226, 0))}.xl\:focus\:via-pink-300:focus{--gradient-via-color:#fbb6ce;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(251, 182, 206, 0))}.xl\:focus\:via-pink-400:focus{--gradient-via-color:#f687b3;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(246, 135, 179, 0))}.xl\:focus\:via-pink-500:focus{--gradient-via-color:#ed64a6;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(237, 100, 166, 0))}.xl\:focus\:via-pink-600:focus{--gradient-via-color:#d53f8c;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(213, 63, 140, 0))}.xl\:focus\:via-pink-700:focus{--gradient-via-color:#b83280;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(184, 50, 128, 0))}.xl\:focus\:via-pink-800:focus{--gradient-via-color:#97266d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(151, 38, 109, 0))}.xl\:focus\:via-pink-900:focus{--gradient-via-color:#702459;--gradient-color-stops:var(--gradient-from-color),var(--gradient-via-color),var(--gradient-to-color, rgba(112, 36, 89, 0))}.xl\:focus\:to-transparent:focus{--gradient-to-color:transparent}.xl\:focus\:to-current:focus{--gradient-to-color:currentColor}.xl\:focus\:to-black:focus{--gradient-to-color:#000}.xl\:focus\:to-white:focus{--gradient-to-color:#fff}.xl\:focus\:to-gray-100:focus{--gradient-to-color:#f7fafc}.xl\:focus\:to-gray-200:focus{--gradient-to-color:#edf2f7}.xl\:focus\:to-gray-300:focus{--gradient-to-color:#e2e8f0}.xl\:focus\:to-gray-400:focus{--gradient-to-color:#cbd5e0}.xl\:focus\:to-gray-500:focus{--gradient-to-color:#a0aec0}.xl\:focus\:to-gray-600:focus{--gradient-to-color:#718096}.xl\:focus\:to-gray-700:focus{--gradient-to-color:#4a5568}.xl\:focus\:to-gray-800:focus{--gradient-to-color:#2d3748}.xl\:focus\:to-gray-900:focus{--gradient-to-color:#1a202c}.xl\:focus\:to-red-100:focus{--gradient-to-color:#fff5f5}.xl\:focus\:to-red-200:focus{--gradient-to-color:#fed7d7}.xl\:focus\:to-red-300:focus{--gradient-to-color:#feb2b2}.xl\:focus\:to-red-400:focus{--gradient-to-color:#fc8181}.xl\:focus\:to-red-500:focus{--gradient-to-color:#f56565}.xl\:focus\:to-red-600:focus{--gradient-to-color:#e53e3e}.xl\:focus\:to-red-700:focus{--gradient-to-color:#c53030}.xl\:focus\:to-red-800:focus{--gradient-to-color:#9b2c2c}.xl\:focus\:to-red-900:focus{--gradient-to-color:#742a2a}.xl\:focus\:to-orange-100:focus{--gradient-to-color:#fffaf0}.xl\:focus\:to-orange-200:focus{--gradient-to-color:#feebc8}.xl\:focus\:to-orange-300:focus{--gradient-to-color:#fbd38d}.xl\:focus\:to-orange-400:focus{--gradient-to-color:#f6ad55}.xl\:focus\:to-orange-500:focus{--gradient-to-color:#ed8936}.xl\:focus\:to-orange-600:focus{--gradient-to-color:#dd6b20}.xl\:focus\:to-orange-700:focus{--gradient-to-color:#c05621}.xl\:focus\:to-orange-800:focus{--gradient-to-color:#9c4221}.xl\:focus\:to-orange-900:focus{--gradient-to-color:#7b341e}.xl\:focus\:to-yellow-100:focus{--gradient-to-color:#fffff0}.xl\:focus\:to-yellow-200:focus{--gradient-to-color:#fefcbf}.xl\:focus\:to-yellow-300:focus{--gradient-to-color:#faf089}.xl\:focus\:to-yellow-400:focus{--gradient-to-color:#f6e05e}.xl\:focus\:to-yellow-500:focus{--gradient-to-color:#ecc94b}.xl\:focus\:to-yellow-600:focus{--gradient-to-color:#d69e2e}.xl\:focus\:to-yellow-700:focus{--gradient-to-color:#b7791f}.xl\:focus\:to-yellow-800:focus{--gradient-to-color:#975a16}.xl\:focus\:to-yellow-900:focus{--gradient-to-color:#744210}.xl\:focus\:to-green-100:focus{--gradient-to-color:#f0fff4}.xl\:focus\:to-green-200:focus{--gradient-to-color:#c6f6d5}.xl\:focus\:to-green-300:focus{--gradient-to-color:#9ae6b4}.xl\:focus\:to-green-400:focus{--gradient-to-color:#68d391}.xl\:focus\:to-green-500:focus{--gradient-to-color:#48bb78}.xl\:focus\:to-green-600:focus{--gradient-to-color:#38a169}.xl\:focus\:to-green-700:focus{--gradient-to-color:#2f855a}.xl\:focus\:to-green-800:focus{--gradient-to-color:#276749}.xl\:focus\:to-green-900:focus{--gradient-to-color:#22543d}.xl\:focus\:to-teal-100:focus{--gradient-to-color:#e6fffa}.xl\:focus\:to-teal-200:focus{--gradient-to-color:#b2f5ea}.xl\:focus\:to-teal-300:focus{--gradient-to-color:#81e6d9}.xl\:focus\:to-teal-400:focus{--gradient-to-color:#4fd1c5}.xl\:focus\:to-teal-500:focus{--gradient-to-color:#38b2ac}.xl\:focus\:to-teal-600:focus{--gradient-to-color:#319795}.xl\:focus\:to-teal-700:focus{--gradient-to-color:#2c7a7b}.xl\:focus\:to-teal-800:focus{--gradient-to-color:#285e61}.xl\:focus\:to-teal-900:focus{--gradient-to-color:#234e52}.xl\:focus\:to-blue-100:focus{--gradient-to-color:#ebf8ff}.xl\:focus\:to-blue-200:focus{--gradient-to-color:#bee3f8}.xl\:focus\:to-blue-300:focus{--gradient-to-color:#90cdf4}.xl\:focus\:to-blue-400:focus{--gradient-to-color:#63b3ed}.xl\:focus\:to-blue-500:focus{--gradient-to-color:#4299e1}.xl\:focus\:to-blue-600:focus{--gradient-to-color:#3182ce}.xl\:focus\:to-blue-700:focus{--gradient-to-color:#2b6cb0}.xl\:focus\:to-blue-800:focus{--gradient-to-color:#2c5282}.xl\:focus\:to-blue-900:focus{--gradient-to-color:#2a4365}.xl\:focus\:to-indigo-100:focus{--gradient-to-color:#ebf4ff}.xl\:focus\:to-indigo-200:focus{--gradient-to-color:#c3dafe}.xl\:focus\:to-indigo-300:focus{--gradient-to-color:#a3bffa}.xl\:focus\:to-indigo-400:focus{--gradient-to-color:#7f9cf5}.xl\:focus\:to-indigo-500:focus{--gradient-to-color:#667eea}.xl\:focus\:to-indigo-600:focus{--gradient-to-color:#5a67d8}.xl\:focus\:to-indigo-700:focus{--gradient-to-color:#4c51bf}.xl\:focus\:to-indigo-800:focus{--gradient-to-color:#434190}.xl\:focus\:to-indigo-900:focus{--gradient-to-color:#3c366b}.xl\:focus\:to-purple-100:focus{--gradient-to-color:#faf5ff}.xl\:focus\:to-purple-200:focus{--gradient-to-color:#e9d8fd}.xl\:focus\:to-purple-300:focus{--gradient-to-color:#d6bcfa}.xl\:focus\:to-purple-400:focus{--gradient-to-color:#b794f4}.xl\:focus\:to-purple-500:focus{--gradient-to-color:#9f7aea}.xl\:focus\:to-purple-600:focus{--gradient-to-color:#805ad5}.xl\:focus\:to-purple-700:focus{--gradient-to-color:#6b46c1}.xl\:focus\:to-purple-800:focus{--gradient-to-color:#553c9a}.xl\:focus\:to-purple-900:focus{--gradient-to-color:#44337a}.xl\:focus\:to-pink-100:focus{--gradient-to-color:#fff5f7}.xl\:focus\:to-pink-200:focus{--gradient-to-color:#fed7e2}.xl\:focus\:to-pink-300:focus{--gradient-to-color:#fbb6ce}.xl\:focus\:to-pink-400:focus{--gradient-to-color:#f687b3}.xl\:focus\:to-pink-500:focus{--gradient-to-color:#ed64a6}.xl\:focus\:to-pink-600:focus{--gradient-to-color:#d53f8c}.xl\:focus\:to-pink-700:focus{--gradient-to-color:#b83280}.xl\:focus\:to-pink-800:focus{--gradient-to-color:#97266d}.xl\:focus\:to-pink-900:focus{--gradient-to-color:#702459}.xl\:bg-opacity-0{--bg-opacity:0}.xl\:bg-opacity-25{--bg-opacity:0.25}.xl\:bg-opacity-50{--bg-opacity:0.5}.xl\:bg-opacity-75{--bg-opacity:0.75}.xl\:bg-opacity-100{--bg-opacity:1}.xl\:hover\:bg-opacity-0:hover{--bg-opacity:0}.xl\:hover\:bg-opacity-25:hover{--bg-opacity:0.25}.xl\:hover\:bg-opacity-50:hover{--bg-opacity:0.5}.xl\:hover\:bg-opacity-75:hover{--bg-opacity:0.75}.xl\:hover\:bg-opacity-100:hover{--bg-opacity:1}.xl\:focus\:bg-opacity-0:focus{--bg-opacity:0}.xl\:focus\:bg-opacity-25:focus{--bg-opacity:0.25}.xl\:focus\:bg-opacity-50:focus{--bg-opacity:0.5}.xl\:focus\:bg-opacity-75:focus{--bg-opacity:0.75}.xl\:focus\:bg-opacity-100:focus{--bg-opacity:1}.xl\:bg-bottom{background-position:bottom}.xl\:bg-center{background-position:center}.xl\:bg-left{background-position:left}.xl\:bg-left-bottom{background-position:left bottom}.xl\:bg-left-top{background-position:left top}.xl\:bg-right{background-position:right}.xl\:bg-right-bottom{background-position:right bottom}.xl\:bg-right-top{background-position:right top}.xl\:bg-top{background-position:top}.xl\:bg-repeat{background-repeat:repeat}.xl\:bg-no-repeat{background-repeat:no-repeat}.xl\:bg-repeat-x{background-repeat:repeat-x}.xl\:bg-repeat-y{background-repeat:repeat-y}.xl\:bg-repeat-round{background-repeat:round}.xl\:bg-repeat-space{background-repeat:space}.xl\:bg-auto{background-size:auto}.xl\:bg-cover{background-size:cover}.xl\:bg-contain{background-size:contain}.xl\:border-collapse{border-collapse:collapse}.xl\:border-separate{border-collapse:separate}.xl\:border-transparent{border-color:transparent}.xl\:border-current{border-color:currentColor}.xl\:border-black{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.xl\:border-white{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.xl\:border-gray-100{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:border-gray-300{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:border-gray-400{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:border-gray-500{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:border-gray-600{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:border-gray-800{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:border-gray-900{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:border-red-100{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.xl\:border-red-200{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.xl\:border-red-300{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.xl\:border-red-400{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.xl\:border-red-500{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.xl\:border-red-600{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.xl\:border-red-700{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.xl\:border-red-800{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.xl\:border-red-900{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.xl\:border-orange-100{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.xl\:border-orange-200{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.xl\:border-orange-300{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.xl\:border-orange-400{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.xl\:border-orange-500{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.xl\:border-orange-600{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.xl\:border-orange-700{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.xl\:border-orange-800{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.xl\:border-orange-900{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.xl\:border-yellow-100{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.xl\:border-yellow-200{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.xl\:border-yellow-300{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.xl\:border-yellow-400{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.xl\:border-yellow-500{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.xl\:border-yellow-600{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.xl\:border-yellow-700{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.xl\:border-yellow-800{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.xl\:border-yellow-900{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.xl\:border-green-100{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:border-green-200{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:border-green-300{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:border-green-400{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:border-green-500{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:border-green-600{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:border-green-700{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:border-green-800{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:border-green-900{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:border-teal-100{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:border-teal-200{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:border-teal-300{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:border-teal-400{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:border-teal-500{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:border-teal-600{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:border-teal-700{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:border-teal-800{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:border-teal-900{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:border-blue-100{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.xl\:border-blue-200{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.xl\:border-blue-300{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.xl\:border-blue-400{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.xl\:border-blue-500{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.xl\:border-blue-600{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.xl\:border-blue-700{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.xl\:border-blue-800{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.xl\:border-blue-900{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.xl\:border-indigo-100{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:border-indigo-200{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:border-indigo-300{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:border-indigo-400{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:border-indigo-500{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:border-indigo-600{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:border-indigo-700{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:border-indigo-800{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:border-indigo-900{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:border-purple-100{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:border-purple-200{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:border-purple-300{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:border-purple-400{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:border-purple-500{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:border-purple-600{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:border-purple-700{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:border-purple-800{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:border-purple-900{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:border-pink-100{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.xl\:border-pink-200{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.xl\:border-pink-300{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.xl\:border-pink-400{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.xl\:border-pink-500{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.xl\:border-pink-600{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.xl\:border-pink-700{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.xl\:border-pink-800{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.xl\:border-pink-900{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.xl\:hover\:border-transparent:hover{border-color:transparent}.xl\:hover\:border-current:hover{border-color:currentColor}.xl\:hover\:border-black:hover{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.xl\:hover\:border-white:hover{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.xl\:hover\:border-gray-100:hover{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:hover\:border-gray-200:hover{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:hover\:border-gray-300:hover{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:hover\:border-gray-400:hover{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:hover\:border-gray-500:hover{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:hover\:border-gray-600:hover{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:hover\:border-gray-700:hover{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:hover\:border-gray-800:hover{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:hover\:border-gray-900:hover{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:hover\:border-red-100:hover{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.xl\:hover\:border-red-200:hover{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.xl\:hover\:border-red-300:hover{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.xl\:hover\:border-red-400:hover{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.xl\:hover\:border-red-500:hover{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.xl\:hover\:border-red-600:hover{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.xl\:hover\:border-red-700:hover{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.xl\:hover\:border-red-800:hover{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.xl\:hover\:border-red-900:hover{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.xl\:hover\:border-orange-100:hover{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.xl\:hover\:border-orange-200:hover{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.xl\:hover\:border-orange-300:hover{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.xl\:hover\:border-orange-400:hover{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.xl\:hover\:border-orange-500:hover{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.xl\:hover\:border-orange-600:hover{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.xl\:hover\:border-orange-700:hover{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.xl\:hover\:border-orange-800:hover{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.xl\:hover\:border-orange-900:hover{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.xl\:hover\:border-yellow-100:hover{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.xl\:hover\:border-yellow-200:hover{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.xl\:hover\:border-yellow-300:hover{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.xl\:hover\:border-yellow-400:hover{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.xl\:hover\:border-yellow-500:hover{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.xl\:hover\:border-yellow-600:hover{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.xl\:hover\:border-yellow-700:hover{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.xl\:hover\:border-yellow-800:hover{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.xl\:hover\:border-yellow-900:hover{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.xl\:hover\:border-green-100:hover{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:hover\:border-green-200:hover{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:hover\:border-green-300:hover{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:hover\:border-green-400:hover{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:hover\:border-green-500:hover{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:hover\:border-green-600:hover{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:hover\:border-green-700:hover{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:hover\:border-green-800:hover{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:hover\:border-green-900:hover{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:hover\:border-teal-100:hover{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:hover\:border-teal-200:hover{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:hover\:border-teal-300:hover{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:hover\:border-teal-400:hover{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:hover\:border-teal-500:hover{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:hover\:border-teal-600:hover{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:hover\:border-teal-700:hover{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:hover\:border-teal-800:hover{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:hover\:border-teal-900:hover{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:hover\:border-blue-100:hover{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.xl\:hover\:border-blue-200:hover{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.xl\:hover\:border-blue-300:hover{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.xl\:hover\:border-blue-400:hover{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.xl\:hover\:border-blue-500:hover{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.xl\:hover\:border-blue-600:hover{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.xl\:hover\:border-blue-700:hover{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.xl\:hover\:border-blue-800:hover{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.xl\:hover\:border-blue-900:hover{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.xl\:hover\:border-indigo-100:hover{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:hover\:border-indigo-200:hover{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:hover\:border-indigo-300:hover{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:hover\:border-indigo-400:hover{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:hover\:border-indigo-500:hover{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:hover\:border-indigo-700:hover{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:hover\:border-indigo-800:hover{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:hover\:border-indigo-900:hover{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:hover\:border-purple-100:hover{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:hover\:border-purple-200:hover{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:hover\:border-purple-300:hover{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:hover\:border-purple-400:hover{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:hover\:border-purple-500:hover{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:hover\:border-purple-600:hover{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:hover\:border-purple-700:hover{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:hover\:border-purple-800:hover{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:hover\:border-purple-900:hover{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:hover\:border-pink-100:hover{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.xl\:hover\:border-pink-200:hover{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.xl\:hover\:border-pink-300:hover{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.xl\:hover\:border-pink-400:hover{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.xl\:hover\:border-pink-500:hover{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.xl\:hover\:border-pink-600:hover{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.xl\:hover\:border-pink-700:hover{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.xl\:hover\:border-pink-800:hover{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.xl\:hover\:border-pink-900:hover{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.xl\:focus\:border-transparent:focus{border-color:transparent}.xl\:focus\:border-current:focus{border-color:currentColor}.xl\:focus\:border-black:focus{--border-opacity:1;border-color:#000;border-color:rgba(0,0,0,var(--border-opacity))}.xl\:focus\:border-white:focus{--border-opacity:1;border-color:#fff;border-color:rgba(255,255,255,var(--border-opacity))}.xl\:focus\:border-gray-100:focus{--border-opacity:1;border-color:#f7fafc;border-color:rgba(247,250,252,var(--border-opacity))}.xl\:focus\:border-gray-200:focus{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.xl\:focus\:border-gray-300:focus{--border-opacity:1;border-color:#e2e8f0;border-color:rgba(226,232,240,var(--border-opacity))}.xl\:focus\:border-gray-400:focus{--border-opacity:1;border-color:#cbd5e0;border-color:rgba(203,213,224,var(--border-opacity))}.xl\:focus\:border-gray-500:focus{--border-opacity:1;border-color:#a0aec0;border-color:rgba(160,174,192,var(--border-opacity))}.xl\:focus\:border-gray-600:focus{--border-opacity:1;border-color:#718096;border-color:rgba(113,128,150,var(--border-opacity))}.xl\:focus\:border-gray-700:focus{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.xl\:focus\:border-gray-800:focus{--border-opacity:1;border-color:#2d3748;border-color:rgba(45,55,72,var(--border-opacity))}.xl\:focus\:border-gray-900:focus{--border-opacity:1;border-color:#1a202c;border-color:rgba(26,32,44,var(--border-opacity))}.xl\:focus\:border-red-100:focus{--border-opacity:1;border-color:#fff5f5;border-color:rgba(255,245,245,var(--border-opacity))}.xl\:focus\:border-red-200:focus{--border-opacity:1;border-color:#fed7d7;border-color:rgba(254,215,215,var(--border-opacity))}.xl\:focus\:border-red-300:focus{--border-opacity:1;border-color:#feb2b2;border-color:rgba(254,178,178,var(--border-opacity))}.xl\:focus\:border-red-400:focus{--border-opacity:1;border-color:#fc8181;border-color:rgba(252,129,129,var(--border-opacity))}.xl\:focus\:border-red-500:focus{--border-opacity:1;border-color:#f56565;border-color:rgba(245,101,101,var(--border-opacity))}.xl\:focus\:border-red-600:focus{--border-opacity:1;border-color:#e53e3e;border-color:rgba(229,62,62,var(--border-opacity))}.xl\:focus\:border-red-700:focus{--border-opacity:1;border-color:#c53030;border-color:rgba(197,48,48,var(--border-opacity))}.xl\:focus\:border-red-800:focus{--border-opacity:1;border-color:#9b2c2c;border-color:rgba(155,44,44,var(--border-opacity))}.xl\:focus\:border-red-900:focus{--border-opacity:1;border-color:#742a2a;border-color:rgba(116,42,42,var(--border-opacity))}.xl\:focus\:border-orange-100:focus{--border-opacity:1;border-color:#fffaf0;border-color:rgba(255,250,240,var(--border-opacity))}.xl\:focus\:border-orange-200:focus{--border-opacity:1;border-color:#feebc8;border-color:rgba(254,235,200,var(--border-opacity))}.xl\:focus\:border-orange-300:focus{--border-opacity:1;border-color:#fbd38d;border-color:rgba(251,211,141,var(--border-opacity))}.xl\:focus\:border-orange-400:focus{--border-opacity:1;border-color:#f6ad55;border-color:rgba(246,173,85,var(--border-opacity))}.xl\:focus\:border-orange-500:focus{--border-opacity:1;border-color:#ed8936;border-color:rgba(237,137,54,var(--border-opacity))}.xl\:focus\:border-orange-600:focus{--border-opacity:1;border-color:#dd6b20;border-color:rgba(221,107,32,var(--border-opacity))}.xl\:focus\:border-orange-700:focus{--border-opacity:1;border-color:#c05621;border-color:rgba(192,86,33,var(--border-opacity))}.xl\:focus\:border-orange-800:focus{--border-opacity:1;border-color:#9c4221;border-color:rgba(156,66,33,var(--border-opacity))}.xl\:focus\:border-orange-900:focus{--border-opacity:1;border-color:#7b341e;border-color:rgba(123,52,30,var(--border-opacity))}.xl\:focus\:border-yellow-100:focus{--border-opacity:1;border-color:ivory;border-color:rgba(255,255,240,var(--border-opacity))}.xl\:focus\:border-yellow-200:focus{--border-opacity:1;border-color:#fefcbf;border-color:rgba(254,252,191,var(--border-opacity))}.xl\:focus\:border-yellow-300:focus{--border-opacity:1;border-color:#faf089;border-color:rgba(250,240,137,var(--border-opacity))}.xl\:focus\:border-yellow-400:focus{--border-opacity:1;border-color:#f6e05e;border-color:rgba(246,224,94,var(--border-opacity))}.xl\:focus\:border-yellow-500:focus{--border-opacity:1;border-color:#ecc94b;border-color:rgba(236,201,75,var(--border-opacity))}.xl\:focus\:border-yellow-600:focus{--border-opacity:1;border-color:#d69e2e;border-color:rgba(214,158,46,var(--border-opacity))}.xl\:focus\:border-yellow-700:focus{--border-opacity:1;border-color:#b7791f;border-color:rgba(183,121,31,var(--border-opacity))}.xl\:focus\:border-yellow-800:focus{--border-opacity:1;border-color:#975a16;border-color:rgba(151,90,22,var(--border-opacity))}.xl\:focus\:border-yellow-900:focus{--border-opacity:1;border-color:#744210;border-color:rgba(116,66,16,var(--border-opacity))}.xl\:focus\:border-green-100:focus{--border-opacity:1;border-color:#f0fff4;border-color:rgba(240,255,244,var(--border-opacity))}.xl\:focus\:border-green-200:focus{--border-opacity:1;border-color:#c6f6d5;border-color:rgba(198,246,213,var(--border-opacity))}.xl\:focus\:border-green-300:focus{--border-opacity:1;border-color:#9ae6b4;border-color:rgba(154,230,180,var(--border-opacity))}.xl\:focus\:border-green-400:focus{--border-opacity:1;border-color:#68d391;border-color:rgba(104,211,145,var(--border-opacity))}.xl\:focus\:border-green-500:focus{--border-opacity:1;border-color:#48bb78;border-color:rgba(72,187,120,var(--border-opacity))}.xl\:focus\:border-green-600:focus{--border-opacity:1;border-color:#38a169;border-color:rgba(56,161,105,var(--border-opacity))}.xl\:focus\:border-green-700:focus{--border-opacity:1;border-color:#2f855a;border-color:rgba(47,133,90,var(--border-opacity))}.xl\:focus\:border-green-800:focus{--border-opacity:1;border-color:#276749;border-color:rgba(39,103,73,var(--border-opacity))}.xl\:focus\:border-green-900:focus{--border-opacity:1;border-color:#22543d;border-color:rgba(34,84,61,var(--border-opacity))}.xl\:focus\:border-teal-100:focus{--border-opacity:1;border-color:#e6fffa;border-color:rgba(230,255,250,var(--border-opacity))}.xl\:focus\:border-teal-200:focus{--border-opacity:1;border-color:#b2f5ea;border-color:rgba(178,245,234,var(--border-opacity))}.xl\:focus\:border-teal-300:focus{--border-opacity:1;border-color:#81e6d9;border-color:rgba(129,230,217,var(--border-opacity))}.xl\:focus\:border-teal-400:focus{--border-opacity:1;border-color:#4fd1c5;border-color:rgba(79,209,197,var(--border-opacity))}.xl\:focus\:border-teal-500:focus{--border-opacity:1;border-color:#38b2ac;border-color:rgba(56,178,172,var(--border-opacity))}.xl\:focus\:border-teal-600:focus{--border-opacity:1;border-color:#319795;border-color:rgba(49,151,149,var(--border-opacity))}.xl\:focus\:border-teal-700:focus{--border-opacity:1;border-color:#2c7a7b;border-color:rgba(44,122,123,var(--border-opacity))}.xl\:focus\:border-teal-800:focus{--border-opacity:1;border-color:#285e61;border-color:rgba(40,94,97,var(--border-opacity))}.xl\:focus\:border-teal-900:focus{--border-opacity:1;border-color:#234e52;border-color:rgba(35,78,82,var(--border-opacity))}.xl\:focus\:border-blue-100:focus{--border-opacity:1;border-color:#ebf8ff;border-color:rgba(235,248,255,var(--border-opacity))}.xl\:focus\:border-blue-200:focus{--border-opacity:1;border-color:#bee3f8;border-color:rgba(190,227,248,var(--border-opacity))}.xl\:focus\:border-blue-300:focus{--border-opacity:1;border-color:#90cdf4;border-color:rgba(144,205,244,var(--border-opacity))}.xl\:focus\:border-blue-400:focus{--border-opacity:1;border-color:#63b3ed;border-color:rgba(99,179,237,var(--border-opacity))}.xl\:focus\:border-blue-500:focus{--border-opacity:1;border-color:#4299e1;border-color:rgba(66,153,225,var(--border-opacity))}.xl\:focus\:border-blue-600:focus{--border-opacity:1;border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity))}.xl\:focus\:border-blue-700:focus{--border-opacity:1;border-color:#2b6cb0;border-color:rgba(43,108,176,var(--border-opacity))}.xl\:focus\:border-blue-800:focus{--border-opacity:1;border-color:#2c5282;border-color:rgba(44,82,130,var(--border-opacity))}.xl\:focus\:border-blue-900:focus{--border-opacity:1;border-color:#2a4365;border-color:rgba(42,67,101,var(--border-opacity))}.xl\:focus\:border-indigo-100:focus{--border-opacity:1;border-color:#ebf4ff;border-color:rgba(235,244,255,var(--border-opacity))}.xl\:focus\:border-indigo-200:focus{--border-opacity:1;border-color:#c3dafe;border-color:rgba(195,218,254,var(--border-opacity))}.xl\:focus\:border-indigo-300:focus{--border-opacity:1;border-color:#a3bffa;border-color:rgba(163,191,250,var(--border-opacity))}.xl\:focus\:border-indigo-400:focus{--border-opacity:1;border-color:#7f9cf5;border-color:rgba(127,156,245,var(--border-opacity))}.xl\:focus\:border-indigo-500:focus{--border-opacity:1;border-color:#667eea;border-color:rgba(102,126,234,var(--border-opacity))}.xl\:focus\:border-indigo-600:focus{--border-opacity:1;border-color:#5a67d8;border-color:rgba(90,103,216,var(--border-opacity))}.xl\:focus\:border-indigo-700:focus{--border-opacity:1;border-color:#4c51bf;border-color:rgba(76,81,191,var(--border-opacity))}.xl\:focus\:border-indigo-800:focus{--border-opacity:1;border-color:#434190;border-color:rgba(67,65,144,var(--border-opacity))}.xl\:focus\:border-indigo-900:focus{--border-opacity:1;border-color:#3c366b;border-color:rgba(60,54,107,var(--border-opacity))}.xl\:focus\:border-purple-100:focus{--border-opacity:1;border-color:#faf5ff;border-color:rgba(250,245,255,var(--border-opacity))}.xl\:focus\:border-purple-200:focus{--border-opacity:1;border-color:#e9d8fd;border-color:rgba(233,216,253,var(--border-opacity))}.xl\:focus\:border-purple-300:focus{--border-opacity:1;border-color:#d6bcfa;border-color:rgba(214,188,250,var(--border-opacity))}.xl\:focus\:border-purple-400:focus{--border-opacity:1;border-color:#b794f4;border-color:rgba(183,148,244,var(--border-opacity))}.xl\:focus\:border-purple-500:focus{--border-opacity:1;border-color:#9f7aea;border-color:rgba(159,122,234,var(--border-opacity))}.xl\:focus\:border-purple-600:focus{--border-opacity:1;border-color:#805ad5;border-color:rgba(128,90,213,var(--border-opacity))}.xl\:focus\:border-purple-700:focus{--border-opacity:1;border-color:#6b46c1;border-color:rgba(107,70,193,var(--border-opacity))}.xl\:focus\:border-purple-800:focus{--border-opacity:1;border-color:#553c9a;border-color:rgba(85,60,154,var(--border-opacity))}.xl\:focus\:border-purple-900:focus{--border-opacity:1;border-color:#44337a;border-color:rgba(68,51,122,var(--border-opacity))}.xl\:focus\:border-pink-100:focus{--border-opacity:1;border-color:#fff5f7;border-color:rgba(255,245,247,var(--border-opacity))}.xl\:focus\:border-pink-200:focus{--border-opacity:1;border-color:#fed7e2;border-color:rgba(254,215,226,var(--border-opacity))}.xl\:focus\:border-pink-300:focus{--border-opacity:1;border-color:#fbb6ce;border-color:rgba(251,182,206,var(--border-opacity))}.xl\:focus\:border-pink-400:focus{--border-opacity:1;border-color:#f687b3;border-color:rgba(246,135,179,var(--border-opacity))}.xl\:focus\:border-pink-500:focus{--border-opacity:1;border-color:#ed64a6;border-color:rgba(237,100,166,var(--border-opacity))}.xl\:focus\:border-pink-600:focus{--border-opacity:1;border-color:#d53f8c;border-color:rgba(213,63,140,var(--border-opacity))}.xl\:focus\:border-pink-700:focus{--border-opacity:1;border-color:#b83280;border-color:rgba(184,50,128,var(--border-opacity))}.xl\:focus\:border-pink-800:focus{--border-opacity:1;border-color:#97266d;border-color:rgba(151,38,109,var(--border-opacity))}.xl\:focus\:border-pink-900:focus{--border-opacity:1;border-color:#702459;border-color:rgba(112,36,89,var(--border-opacity))}.xl\:border-opacity-0{--border-opacity:0}.xl\:border-opacity-25{--border-opacity:0.25}.xl\:border-opacity-50{--border-opacity:0.5}.xl\:border-opacity-75{--border-opacity:0.75}.xl\:border-opacity-100{--border-opacity:1}.xl\:hover\:border-opacity-0:hover{--border-opacity:0}.xl\:hover\:border-opacity-25:hover{--border-opacity:0.25}.xl\:hover\:border-opacity-50:hover{--border-opacity:0.5}.xl\:hover\:border-opacity-75:hover{--border-opacity:0.75}.xl\:hover\:border-opacity-100:hover{--border-opacity:1}.xl\:focus\:border-opacity-0:focus{--border-opacity:0}.xl\:focus\:border-opacity-25:focus{--border-opacity:0.25}.xl\:focus\:border-opacity-50:focus{--border-opacity:0.5}.xl\:focus\:border-opacity-75:focus{--border-opacity:0.75}.xl\:focus\:border-opacity-100:focus{--border-opacity:1}.xl\:rounded-none{border-radius:0}.xl\:rounded-sm{border-radius:.125rem}.xl\:rounded{border-radius:.25rem}.xl\:rounded-md{border-radius:.375rem}.xl\:rounded-lg{border-radius:.5rem}.xl\:rounded-xl{border-radius:.75rem}.xl\:rounded-2xl{border-radius:1rem}.xl\:rounded-3xl{border-radius:1.5rem}.xl\:rounded-full{border-radius:9999px}.xl\:rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.xl\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.xl\:rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.xl\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.xl\:rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.xl\:rounded-r-sm{border-top-right-radius:.125rem;border-bottom-right-radius:.125rem}.xl\:rounded-b-sm{border-bottom-right-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-l-sm{border-top-left-radius:.125rem;border-bottom-left-radius:.125rem}.xl\:rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.xl\:rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.xl\:rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.xl\:rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.xl\:rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.xl\:rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.xl\:rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.xl\:rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.xl\:rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.xl\:rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.xl\:rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.xl\:rounded-t-xl{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.xl\:rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.xl\:rounded-b-xl{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.xl\:rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.xl\:rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.xl\:rounded-r-2xl{border-top-right-radius:1rem;border-bottom-right-radius:1rem}.xl\:rounded-b-2xl{border-bottom-right-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-l-2xl{border-top-left-radius:1rem;border-bottom-left-radius:1rem}.xl\:rounded-t-3xl{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem}.xl\:rounded-r-3xl{border-top-right-radius:1.5rem;border-bottom-right-radius:1.5rem}.xl\:rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.xl\:rounded-l-3xl{border-top-left-radius:1.5rem;border-bottom-left-radius:1.5rem}.xl\:rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.xl\:rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.xl\:rounded-b-full{border-bottom-right-radius:9999px;border-bottom-left-radius:9999px}.xl\:rounded-l-full{border-top-left-radius:9999px;border-bottom-left-radius:9999px}.xl\:rounded-tl-none{border-top-left-radius:0}.xl\:rounded-tr-none{border-top-right-radius:0}.xl\:rounded-br-none{border-bottom-right-radius:0}.xl\:rounded-bl-none{border-bottom-left-radius:0}.xl\:rounded-tl-sm{border-top-left-radius:.125rem}.xl\:rounded-tr-sm{border-top-right-radius:.125rem}.xl\:rounded-br-sm{border-bottom-right-radius:.125rem}.xl\:rounded-bl-sm{border-bottom-left-radius:.125rem}.xl\:rounded-tl{border-top-left-radius:.25rem}.xl\:rounded-tr{border-top-right-radius:.25rem}.xl\:rounded-br{border-bottom-right-radius:.25rem}.xl\:rounded-bl{border-bottom-left-radius:.25rem}.xl\:rounded-tl-md{border-top-left-radius:.375rem}.xl\:rounded-tr-md{border-top-right-radius:.375rem}.xl\:rounded-br-md{border-bottom-right-radius:.375rem}.xl\:rounded-bl-md{border-bottom-left-radius:.375rem}.xl\:rounded-tl-lg{border-top-left-radius:.5rem}.xl\:rounded-tr-lg{border-top-right-radius:.5rem}.xl\:rounded-br-lg{border-bottom-right-radius:.5rem}.xl\:rounded-bl-lg{border-bottom-left-radius:.5rem}.xl\:rounded-tl-xl{border-top-left-radius:.75rem}.xl\:rounded-tr-xl{border-top-right-radius:.75rem}.xl\:rounded-br-xl{border-bottom-right-radius:.75rem}.xl\:rounded-bl-xl{border-bottom-left-radius:.75rem}.xl\:rounded-tl-2xl{border-top-left-radius:1rem}.xl\:rounded-tr-2xl{border-top-right-radius:1rem}.xl\:rounded-br-2xl{border-bottom-right-radius:1rem}.xl\:rounded-bl-2xl{border-bottom-left-radius:1rem}.xl\:rounded-tl-3xl{border-top-left-radius:1.5rem}.xl\:rounded-tr-3xl{border-top-right-radius:1.5rem}.xl\:rounded-br-3xl{border-bottom-right-radius:1.5rem}.xl\:rounded-bl-3xl{border-bottom-left-radius:1.5rem}.xl\:rounded-tl-full{border-top-left-radius:9999px}.xl\:rounded-tr-full{border-top-right-radius:9999px}.xl\:rounded-br-full{border-bottom-right-radius:9999px}.xl\:rounded-bl-full{border-bottom-left-radius:9999px}.xl\:border-solid{border-style:solid}.xl\:border-dashed{border-style:dashed}.xl\:border-dotted{border-style:dotted}.xl\:border-double{border-style:double}.xl\:border-none{border-style:none}.xl\:border-0{border-width:0}.xl\:border-2{border-width:2px}.xl\:border-4{border-width:4px}.xl\:border-8{border-width:8px}.xl\:border{border-width:1px}.xl\:border-t-0{border-top-width:0}.xl\:border-r-0{border-right-width:0}.xl\:border-b-0{border-bottom-width:0}.xl\:border-l-0{border-left-width:0}.xl\:border-t-2{border-top-width:2px}.xl\:border-r-2{border-right-width:2px}.xl\:border-b-2{border-bottom-width:2px}.xl\:border-l-2{border-left-width:2px}.xl\:border-t-4{border-top-width:4px}.xl\:border-r-4{border-right-width:4px}.xl\:border-b-4{border-bottom-width:4px}.xl\:border-l-4{border-left-width:4px}.xl\:border-t-8{border-top-width:8px}.xl\:border-r-8{border-right-width:8px}.xl\:border-b-8{border-bottom-width:8px}.xl\:border-l-8{border-left-width:8px}.xl\:border-t{border-top-width:1px}.xl\:border-r{border-right-width:1px}.xl\:border-b{border-bottom-width:1px}.xl\:border-l{border-left-width:1px}.xl\:box-border{box-sizing:border-box}.xl\:box-content{box-sizing:content-box}.xl\:cursor-auto{cursor:auto}.xl\:cursor-default{cursor:default}.xl\:cursor-pointer{cursor:pointer}.xl\:cursor-wait{cursor:wait}.xl\:cursor-text{cursor:text}.xl\:cursor-move{cursor:move}.xl\:cursor-not-allowed{cursor:not-allowed}.xl\:block{display:block}.xl\:inline-block{display:inline-block}.xl\:inline{display:inline}.xl\:flex{display:flex}.xl\:inline-flex{display:inline-flex}.xl\:table{display:table}.xl\:table-caption{display:table-caption}.xl\:table-cell{display:table-cell}.xl\:table-column{display:table-column}.xl\:table-column-group{display:table-column-group}.xl\:table-footer-group{display:table-footer-group}.xl\:table-header-group{display:table-header-group}.xl\:table-row-group{display:table-row-group}.xl\:table-row{display:table-row}.xl\:flow-root{display:flow-root}.xl\:grid{display:grid}.xl\:inline-grid{display:inline-grid}.xl\:contents{display:contents}.xl\:hidden{display:none}.xl\:flex-row{flex-direction:row}.xl\:flex-row-reverse{flex-direction:row-reverse}.xl\:flex-col{flex-direction:column}.xl\:flex-col-reverse{flex-direction:column-reverse}.xl\:flex-wrap{flex-wrap:wrap}.xl\:flex-wrap-reverse{flex-wrap:wrap-reverse}.xl\:flex-no-wrap{flex-wrap:nowrap}.xl\:place-items-auto{place-items:auto}.xl\:place-items-start{place-items:start}.xl\:place-items-end{place-items:end}.xl\:place-items-center{place-items:center}.xl\:place-items-stretch{place-items:stretch}.xl\:place-content-center{place-content:center}.xl\:place-content-start{place-content:start}.xl\:place-content-end{place-content:end}.xl\:place-content-between{place-content:space-between}.xl\:place-content-around{place-content:space-around}.xl\:place-content-evenly{place-content:space-evenly}.xl\:place-content-stretch{place-content:stretch}.xl\:place-self-auto{place-self:auto}.xl\:place-self-start{place-self:start}.xl\:place-self-end{place-self:end}.xl\:place-self-center{place-self:center}.xl\:place-self-stretch{place-self:stretch}.xl\:items-start{align-items:flex-start}.xl\:items-end{align-items:flex-end}.xl\:items-center{align-items:center}.xl\:items-baseline{align-items:baseline}.xl\:items-stretch{align-items:stretch}.xl\:content-center{align-content:center}.xl\:content-start{align-content:flex-start}.xl\:content-end{align-content:flex-end}.xl\:content-between{align-content:space-between}.xl\:content-around{align-content:space-around}.xl\:content-evenly{align-content:space-evenly}.xl\:self-auto{align-self:auto}.xl\:self-start{align-self:flex-start}.xl\:self-end{align-self:flex-end}.xl\:self-center{align-self:center}.xl\:self-stretch{align-self:stretch}.xl\:justify-items-auto{justify-items:auto}.xl\:justify-items-start{justify-items:start}.xl\:justify-items-end{justify-items:end}.xl\:justify-items-center{justify-items:center}.xl\:justify-items-stretch{justify-items:stretch}.xl\:justify-start{justify-content:flex-start}.xl\:justify-end{justify-content:flex-end}.xl\:justify-center{justify-content:center}.xl\:justify-between{justify-content:space-between}.xl\:justify-around{justify-content:space-around}.xl\:justify-evenly{justify-content:space-evenly}.xl\:justify-self-auto{justify-self:auto}.xl\:justify-self-start{justify-self:start}.xl\:justify-self-end{justify-self:end}.xl\:justify-self-center{justify-self:center}.xl\:justify-self-stretch{justify-self:stretch}.xl\:flex-1{flex:1 1 0%}.xl\:flex-auto{flex:1 1 auto}.xl\:flex-initial{flex:0 1 auto}.xl\:flex-none{flex:none}.xl\:flex-grow-0{flex-grow:0}.xl\:flex-grow{flex-grow:1}.xl\:flex-shrink-0{flex-shrink:0}.xl\:flex-shrink{flex-shrink:1}.xl\:order-1{order:1}.xl\:order-2{order:2}.xl\:order-3{order:3}.xl\:order-4{order:4}.xl\:order-5{order:5}.xl\:order-6{order:6}.xl\:order-7{order:7}.xl\:order-8{order:8}.xl\:order-9{order:9}.xl\:order-10{order:10}.xl\:order-11{order:11}.xl\:order-12{order:12}.xl\:order-first{order:-9999}.xl\:order-last{order:9999}.xl\:order-none{order:0}.xl\:float-right{float:right}.xl\:float-left{float:left}.xl\:float-none{float:none}.xl\:clearfix:after{content:"";display:table;clear:both}.xl\:clear-left{clear:left}.xl\:clear-right{clear:right}.xl\:clear-both{clear:both}.xl\:clear-none{clear:none}.xl\:font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.xl\:font-serif{font-family:Georgia,Cambria,"Times New Roman",Times,serif}.xl\:font-mono{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.xl\:font-hairline{font-weight:100}.xl\:font-thin{font-weight:200}.xl\:font-light{font-weight:300}.xl\:font-normal{font-weight:400}.xl\:font-medium{font-weight:500}.xl\:font-semibold{font-weight:600}.xl\:font-bold{font-weight:700}.xl\:font-extrabold{font-weight:800}.xl\:font-black{font-weight:900}.xl\:hover\:font-hairline:hover{font-weight:100}.xl\:hover\:font-thin:hover{font-weight:200}.xl\:hover\:font-light:hover{font-weight:300}.xl\:hover\:font-normal:hover{font-weight:400}.xl\:hover\:font-medium:hover{font-weight:500}.xl\:hover\:font-semibold:hover{font-weight:600}.xl\:hover\:font-bold:hover{font-weight:700}.xl\:hover\:font-extrabold:hover{font-weight:800}.xl\:hover\:font-black:hover{font-weight:900}.xl\:focus\:font-hairline:focus{font-weight:100}.xl\:focus\:font-thin:focus{font-weight:200}.xl\:focus\:font-light:focus{font-weight:300}.xl\:focus\:font-normal:focus{font-weight:400}.xl\:focus\:font-medium:focus{font-weight:500}.xl\:focus\:font-semibold:focus{font-weight:600}.xl\:focus\:font-bold:focus{font-weight:700}.xl\:focus\:font-extrabold:focus{font-weight:800}.xl\:focus\:font-black:focus{font-weight:900}.xl\:h-0{height:0}.xl\:h-1{height:.25rem}.xl\:h-2{height:.5rem}.xl\:h-3{height:.75rem}.xl\:h-4{height:1rem}.xl\:h-5{height:1.25rem}.xl\:h-6{height:1.5rem}.xl\:h-8{height:2rem}.xl\:h-10{height:2.5rem}.xl\:h-12{height:3rem}.xl\:h-16{height:4rem}.xl\:h-20{height:5rem}.xl\:h-24{height:6rem}.xl\:h-32{height:8rem}.xl\:h-40{height:10rem}.xl\:h-48{height:12rem}.xl\:h-56{height:14rem}.xl\:h-64{height:16rem}.xl\:h-auto{height:auto}.xl\:h-px{height:1px}.xl\:h-full{height:100%}.xl\:h-screen{height:100vh}.xl\:text-xs{font-size:.75rem}.xl\:text-sm{font-size:.875rem}.xl\:text-base{font-size:1rem}.xl\:text-lg{font-size:1.125rem}.xl\:text-xl{font-size:1.25rem}.xl\:text-2xl{font-size:1.5rem}.xl\:text-3xl{font-size:1.875rem}.xl\:text-4xl{font-size:2.25rem}.xl\:text-5xl{font-size:3rem}.xl\:text-6xl{font-size:4rem}.xl\:leading-3{line-height:.75rem}.xl\:leading-4{line-height:1rem}.xl\:leading-5{line-height:1.25rem}.xl\:leading-6{line-height:1.5rem}.xl\:leading-7{line-height:1.75rem}.xl\:leading-8{line-height:2rem}.xl\:leading-9{line-height:2.25rem}.xl\:leading-10{line-height:2.5rem}.xl\:leading-none{line-height:1}.xl\:leading-tight{line-height:1.25}.xl\:leading-snug{line-height:1.375}.xl\:leading-normal{line-height:1.5}.xl\:leading-relaxed{line-height:1.625}.xl\:leading-loose{line-height:2}.xl\:list-inside{list-style-position:inside}.xl\:list-outside{list-style-position:outside}.xl\:list-none{list-style-type:none}.xl\:list-disc{list-style-type:disc}.xl\:list-decimal{list-style-type:decimal}.xl\:m-0{margin:0}.xl\:m-1{margin:.25rem}.xl\:m-2{margin:.5rem}.xl\:m-3{margin:.75rem}.xl\:m-4{margin:1rem}.xl\:m-5{margin:1.25rem}.xl\:m-6{margin:1.5rem}.xl\:m-8{margin:2rem}.xl\:m-10{margin:2.5rem}.xl\:m-12{margin:3rem}.xl\:m-16{margin:4rem}.xl\:m-20{margin:5rem}.xl\:m-24{margin:6rem}.xl\:m-32{margin:8rem}.xl\:m-40{margin:10rem}.xl\:m-48{margin:12rem}.xl\:m-56{margin:14rem}.xl\:m-64{margin:16rem}.xl\:m-auto{margin:auto}.xl\:m-px{margin:1px}.xl\:-m-1{margin:-.25rem}.xl\:-m-2{margin:-.5rem}.xl\:-m-3{margin:-.75rem}.xl\:-m-4{margin:-1rem}.xl\:-m-5{margin:-1.25rem}.xl\:-m-6{margin:-1.5rem}.xl\:-m-8{margin:-2rem}.xl\:-m-10{margin:-2.5rem}.xl\:-m-12{margin:-3rem}.xl\:-m-16{margin:-4rem}.xl\:-m-20{margin:-5rem}.xl\:-m-24{margin:-6rem}.xl\:-m-32{margin:-8rem}.xl\:-m-40{margin:-10rem}.xl\:-m-48{margin:-12rem}.xl\:-m-56{margin:-14rem}.xl\:-m-64{margin:-16rem}.xl\:-m-px{margin:-1px}.xl\:my-0{margin-top:0;margin-bottom:0}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:my-1{margin-top:.25rem;margin-bottom:.25rem}.xl\:mx-1{margin-left:.25rem;margin-right:.25rem}.xl\:my-2{margin-top:.5rem;margin-bottom:.5rem}.xl\:mx-2{margin-left:.5rem;margin-right:.5rem}.xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}.xl\:mx-3{margin-left:.75rem;margin-right:.75rem}.xl\:my-4{margin-top:1rem;margin-bottom:1rem}.xl\:mx-4{margin-left:1rem;margin-right:1rem}.xl\:my-5{margin-top:1.25rem;margin-bottom:1.25rem}.xl\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.xl\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.xl\:my-8{margin-top:2rem;margin-bottom:2rem}.xl\:mx-8{margin-left:2rem;margin-right:2rem}.xl\:my-10{margin-top:2.5rem;margin-bottom:2.5rem}.xl\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.xl\:my-12{margin-top:3rem;margin-bottom:3rem}.xl\:mx-12{margin-left:3rem;margin-right:3rem}.xl\:my-16{margin-top:4rem;margin-bottom:4rem}.xl\:mx-16{margin-left:4rem;margin-right:4rem}.xl\:my-20{margin-top:5rem;margin-bottom:5rem}.xl\:mx-20{margin-left:5rem;margin-right:5rem}.xl\:my-24{margin-top:6rem;margin-bottom:6rem}.xl\:mx-24{margin-left:6rem;margin-right:6rem}.xl\:my-32{margin-top:8rem;margin-bottom:8rem}.xl\:mx-32{margin-left:8rem;margin-right:8rem}.xl\:my-40{margin-top:10rem;margin-bottom:10rem}.xl\:mx-40{margin-left:10rem;margin-right:10rem}.xl\:my-48{margin-top:12rem;margin-bottom:12rem}.xl\:mx-48{margin-left:12rem;margin-right:12rem}.xl\:my-56{margin-top:14rem;margin-bottom:14rem}.xl\:mx-56{margin-left:14rem;margin-right:14rem}.xl\:my-64{margin-top:16rem;margin-bottom:16rem}.xl\:mx-64{margin-left:16rem;margin-right:16rem}.xl\:my-auto{margin-top:auto;margin-bottom:auto}.xl\:mx-auto{margin-left:auto;margin-right:auto}.xl\:my-px{margin-top:1px;margin-bottom:1px}.xl\:mx-px{margin-left:1px;margin-right:1px}.xl\:-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.xl\:-mx-1{margin-left:-.25rem;margin-right:-.25rem}.xl\:-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.xl\:-mx-2{margin-left:-.5rem;margin-right:-.5rem}.xl\:-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.xl\:-mx-3{margin-left:-.75rem;margin-right:-.75rem}.xl\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.xl\:-mx-4{margin-left:-1rem;margin-right:-1rem}.xl\:-my-5{margin-top:-1.25rem;margin-bottom:-1.25rem}.xl\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.xl\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.xl\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.xl\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.xl\:-mx-8{margin-left:-2rem;margin-right:-2rem}.xl\:-my-10{margin-top:-2.5rem;margin-bottom:-2.5rem}.xl\:-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.xl\:-my-12{margin-top:-3rem;margin-bottom:-3rem}.xl\:-mx-12{margin-left:-3rem;margin-right:-3rem}.xl\:-my-16{margin-top:-4rem;margin-bottom:-4rem}.xl\:-mx-16{margin-left:-4rem;margin-right:-4rem}.xl\:-my-20{margin-top:-5rem;margin-bottom:-5rem}.xl\:-mx-20{margin-left:-5rem;margin-right:-5rem}.xl\:-my-24{margin-top:-6rem;margin-bottom:-6rem}.xl\:-mx-24{margin-left:-6rem;margin-right:-6rem}.xl\:-my-32{margin-top:-8rem;margin-bottom:-8rem}.xl\:-mx-32{margin-left:-8rem;margin-right:-8rem}.xl\:-my-40{margin-top:-10rem;margin-bottom:-10rem}.xl\:-mx-40{margin-left:-10rem;margin-right:-10rem}.xl\:-my-48{margin-top:-12rem;margin-bottom:-12rem}.xl\:-mx-48{margin-left:-12rem;margin-right:-12rem}.xl\:-my-56{margin-top:-14rem;margin-bottom:-14rem}.xl\:-mx-56{margin-left:-14rem;margin-right:-14rem}.xl\:-my-64{margin-top:-16rem;margin-bottom:-16rem}.xl\:-mx-64{margin-left:-16rem;margin-right:-16rem}.xl\:-my-px{margin-top:-1px;margin-bottom:-1px}.xl\:-mx-px{margin-left:-1px;margin-right:-1px}.xl\:mt-0{margin-top:0}.xl\:mr-0{margin-right:0}.xl\:mb-0{margin-bottom:0}.xl\:ml-0{margin-left:0}.xl\:mt-1{margin-top:.25rem}.xl\:mr-1{margin-right:.25rem}.xl\:mb-1{margin-bottom:.25rem}.xl\:ml-1{margin-left:.25rem}.xl\:mt-2{margin-top:.5rem}.xl\:mr-2{margin-right:.5rem}.xl\:mb-2{margin-bottom:.5rem}.xl\:ml-2{margin-left:.5rem}.xl\:mt-3{margin-top:.75rem}.xl\:mr-3{margin-right:.75rem}.xl\:mb-3{margin-bottom:.75rem}.xl\:ml-3{margin-left:.75rem}.xl\:mt-4{margin-top:1rem}.xl\:mr-4{margin-right:1rem}.xl\:mb-4{margin-bottom:1rem}.xl\:ml-4{margin-left:1rem}.xl\:mt-5{margin-top:1.25rem}.xl\:mr-5{margin-right:1.25rem}.xl\:mb-5{margin-bottom:1.25rem}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-6{margin-top:1.5rem}.xl\:mr-6{margin-right:1.5rem}.xl\:mb-6{margin-bottom:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:mt-8{margin-top:2rem}.xl\:mr-8{margin-right:2rem}.xl\:mb-8{margin-bottom:2rem}.xl\:ml-8{margin-left:2rem}.xl\:mt-10{margin-top:2.5rem}.xl\:mr-10{margin-right:2.5rem}.xl\:mb-10{margin-bottom:2.5rem}.xl\:ml-10{margin-left:2.5rem}.xl\:mt-12{margin-top:3rem}.xl\:mr-12{margin-right:3rem}.xl\:mb-12{margin-bottom:3rem}.xl\:ml-12{margin-left:3rem}.xl\:mt-16{margin-top:4rem}.xl\:mr-16{margin-right:4rem}.xl\:mb-16{margin-bottom:4rem}.xl\:ml-16{margin-left:4rem}.xl\:mt-20{margin-top:5rem}.xl\:mr-20{margin-right:5rem}.xl\:mb-20{margin-bottom:5rem}.xl\:ml-20{margin-left:5rem}.xl\:mt-24{margin-top:6rem}.xl\:mr-24{margin-right:6rem}.xl\:mb-24{margin-bottom:6rem}.xl\:ml-24{margin-left:6rem}.xl\:mt-32{margin-top:8rem}.xl\:mr-32{margin-right:8rem}.xl\:mb-32{margin-bottom:8rem}.xl\:ml-32{margin-left:8rem}.xl\:mt-40{margin-top:10rem}.xl\:mr-40{margin-right:10rem}.xl\:mb-40{margin-bottom:10rem}.xl\:ml-40{margin-left:10rem}.xl\:mt-48{margin-top:12rem}.xl\:mr-48{margin-right:12rem}.xl\:mb-48{margin-bottom:12rem}.xl\:ml-48{margin-left:12rem}.xl\:mt-56{margin-top:14rem}.xl\:mr-56{margin-right:14rem}.xl\:mb-56{margin-bottom:14rem}.xl\:ml-56{margin-left:14rem}.xl\:mt-64{margin-top:16rem}.xl\:mr-64{margin-right:16rem}.xl\:mb-64{margin-bottom:16rem}.xl\:ml-64{margin-left:16rem}.xl\:mt-auto{margin-top:auto}.xl\:mr-auto{margin-right:auto}.xl\:mb-auto{margin-bottom:auto}.xl\:ml-auto{margin-left:auto}.xl\:mt-px{margin-top:1px}.xl\:mr-px{margin-right:1px}.xl\:mb-px{margin-bottom:1px}.xl\:ml-px{margin-left:1px}.xl\:-mt-1{margin-top:-.25rem}.xl\:-mr-1{margin-right:-.25rem}.xl\:-mb-1{margin-bottom:-.25rem}.xl\:-ml-1{margin-left:-.25rem}.xl\:-mt-2{margin-top:-.5rem}.xl\:-mr-2{margin-right:-.5rem}.xl\:-mb-2{margin-bottom:-.5rem}.xl\:-ml-2{margin-left:-.5rem}.xl\:-mt-3{margin-top:-.75rem}.xl\:-mr-3{margin-right:-.75rem}.xl\:-mb-3{margin-bottom:-.75rem}.xl\:-ml-3{margin-left:-.75rem}.xl\:-mt-4{margin-top:-1rem}.xl\:-mr-4{margin-right:-1rem}.xl\:-mb-4{margin-bottom:-1rem}.xl\:-ml-4{margin-left:-1rem}.xl\:-mt-5{margin-top:-1.25rem}.xl\:-mr-5{margin-right:-1.25rem}.xl\:-mb-5{margin-bottom:-1.25rem}.xl\:-ml-5{margin-left:-1.25rem}.xl\:-mt-6{margin-top:-1.5rem}.xl\:-mr-6{margin-right:-1.5rem}.xl\:-mb-6{margin-bottom:-1.5rem}.xl\:-ml-6{margin-left:-1.5rem}.xl\:-mt-8{margin-top:-2rem}.xl\:-mr-8{margin-right:-2rem}.xl\:-mb-8{margin-bottom:-2rem}.xl\:-ml-8{margin-left:-2rem}.xl\:-mt-10{margin-top:-2.5rem}.xl\:-mr-10{margin-right:-2.5rem}.xl\:-mb-10{margin-bottom:-2.5rem}.xl\:-ml-10{margin-left:-2.5rem}.xl\:-mt-12{margin-top:-3rem}.xl\:-mr-12{margin-right:-3rem}.xl\:-mb-12{margin-bottom:-3rem}.xl\:-ml-12{margin-left:-3rem}.xl\:-mt-16{margin-top:-4rem}.xl\:-mr-16{margin-right:-4rem}.xl\:-mb-16{margin-bottom:-4rem}.xl\:-ml-16{margin-left:-4rem}.xl\:-mt-20{margin-top:-5rem}.xl\:-mr-20{margin-right:-5rem}.xl\:-mb-20{margin-bottom:-5rem}.xl\:-ml-20{margin-left:-5rem}.xl\:-mt-24{margin-top:-6rem}.xl\:-mr-24{margin-right:-6rem}.xl\:-mb-24{margin-bottom:-6rem}.xl\:-ml-24{margin-left:-6rem}.xl\:-mt-32{margin-top:-8rem}.xl\:-mr-32{margin-right:-8rem}.xl\:-mb-32{margin-bottom:-8rem}.xl\:-ml-32{margin-left:-8rem}.xl\:-mt-40{margin-top:-10rem}.xl\:-mr-40{margin-right:-10rem}.xl\:-mb-40{margin-bottom:-10rem}.xl\:-ml-40{margin-left:-10rem}.xl\:-mt-48{margin-top:-12rem}.xl\:-mr-48{margin-right:-12rem}.xl\:-mb-48{margin-bottom:-12rem}.xl\:-ml-48{margin-left:-12rem}.xl\:-mt-56{margin-top:-14rem}.xl\:-mr-56{margin-right:-14rem}.xl\:-mb-56{margin-bottom:-14rem}.xl\:-ml-56{margin-left:-14rem}.xl\:-mt-64{margin-top:-16rem}.xl\:-mr-64{margin-right:-16rem}.xl\:-mb-64{margin-bottom:-16rem}.xl\:-ml-64{margin-left:-16rem}.xl\:-mt-px{margin-top:-1px}.xl\:-mr-px{margin-right:-1px}.xl\:-mb-px{margin-bottom:-1px}.xl\:-ml-px{margin-left:-1px}.xl\:max-h-full{max-height:100%}.xl\:max-h-screen{max-height:100vh}.xl\:max-w-none{max-width:none}.xl\:max-w-xs{max-width:20rem}.xl\:max-w-sm{max-width:24rem}.xl\:max-w-md{max-width:28rem}.xl\:max-w-lg{max-width:32rem}.xl\:max-w-xl{max-width:36rem}.xl\:max-w-2xl{max-width:42rem}.xl\:max-w-3xl{max-width:48rem}.xl\:max-w-4xl{max-width:56rem}.xl\:max-w-5xl{max-width:64rem}.xl\:max-w-6xl{max-width:72rem}.xl\:max-w-full{max-width:100%}.xl\:max-w-screen-sm{max-width:640px}.xl\:max-w-screen-md{max-width:768px}.xl\:max-w-screen-lg{max-width:1024px}.xl\:max-w-screen-xl{max-width:1280px}.xl\:min-h-0{min-height:0}.xl\:min-h-full{min-height:100%}.xl\:min-h-screen{min-height:100vh}.xl\:min-w-0{min-width:0}.xl\:min-w-full{min-width:100%}.xl\:object-contain{object-fit:contain}.xl\:object-cover{object-fit:cover}.xl\:object-fill{object-fit:fill}.xl\:object-none{object-fit:none}.xl\:object-scale-down{object-fit:scale-down}.xl\:object-bottom{object-position:bottom}.xl\:object-center{object-position:center}.xl\:object-left{object-position:left}.xl\:object-left-bottom{object-position:left bottom}.xl\:object-left-top{object-position:left top}.xl\:object-right{object-position:right}.xl\:object-right-bottom{object-position:right bottom}.xl\:object-right-top{object-position:right top}.xl\:object-top{object-position:top}.xl\:opacity-0{opacity:0}.xl\:opacity-25{opacity:.25}.xl\:opacity-50{opacity:.5}.xl\:opacity-75{opacity:.75}.xl\:opacity-100{opacity:1}.xl\:hover\:opacity-0:hover{opacity:0}.xl\:hover\:opacity-25:hover{opacity:.25}.xl\:hover\:opacity-50:hover{opacity:.5}.xl\:hover\:opacity-75:hover{opacity:.75}.xl\:hover\:opacity-100:hover{opacity:1}.xl\:focus\:opacity-0:focus{opacity:0}.xl\:focus\:opacity-25:focus{opacity:.25}.xl\:focus\:opacity-50:focus{opacity:.5}.xl\:focus\:opacity-75:focus{opacity:.75}.xl\:focus\:opacity-100:focus{opacity:1}.xl\:outline-none{outline:2px solid transparent;outline-offset:2px}.xl\:outline-white{outline:2px dotted #fff;outline-offset:2px}.xl\:outline-black{outline:2px dotted #000;outline-offset:2px}.xl\:focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.xl\:focus\:outline-white:focus{outline:2px dotted #fff;outline-offset:2px}.xl\:focus\:outline-black:focus{outline:2px dotted #000;outline-offset:2px}.xl\:overflow-auto{overflow:auto}.xl\:overflow-hidden{overflow:hidden}.xl\:overflow-visible{overflow:visible}.xl\:overflow-scroll{overflow:scroll}.xl\:overflow-x-auto{overflow-x:auto}.xl\:overflow-y-auto{overflow-y:auto}.xl\:overflow-x-hidden{overflow-x:hidden}.xl\:overflow-y-hidden{overflow-y:hidden}.xl\:overflow-x-visible{overflow-x:visible}.xl\:overflow-y-visible{overflow-y:visible}.xl\:overflow-x-scroll{overflow-x:scroll}.xl\:overflow-y-scroll{overflow-y:scroll}.xl\:scrolling-touch{-webkit-overflow-scrolling:touch}.xl\:scrolling-auto{-webkit-overflow-scrolling:auto}.xl\:overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.xl\:overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.xl\:overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.xl\:overscroll-y-auto{overscroll-behavior-y:auto}.xl\:overscroll-y-contain{overscroll-behavior-y:contain}.xl\:overscroll-y-none{overscroll-behavior-y:none}.xl\:overscroll-x-auto{overscroll-behavior-x:auto}.xl\:overscroll-x-contain{overscroll-behavior-x:contain}.xl\:overscroll-x-none{overscroll-behavior-x:none}.xl\:p-0{padding:0}.xl\:p-1{padding:.25rem}.xl\:p-2{padding:.5rem}.xl\:p-3{padding:.75rem}.xl\:p-4{padding:1rem}.xl\:p-5{padding:1.25rem}.xl\:p-6{padding:1.5rem}.xl\:p-8{padding:2rem}.xl\:p-10{padding:2.5rem}.xl\:p-12{padding:3rem}.xl\:p-16{padding:4rem}.xl\:p-20{padding:5rem}.xl\:p-24{padding:6rem}.xl\:p-32{padding:8rem}.xl\:p-40{padding:10rem}.xl\:p-48{padding:12rem}.xl\:p-56{padding:14rem}.xl\:p-64{padding:16rem}.xl\:p-px{padding:1px}.xl\:py-0{padding-top:0;padding-bottom:0}.xl\:px-0{padding-left:0;padding-right:0}.xl\:py-1{padding-top:.25rem;padding-bottom:.25rem}.xl\:px-1{padding-left:.25rem;padding-right:.25rem}.xl\:py-2{padding-top:.5rem;padding-bottom:.5rem}.xl\:px-2{padding-left:.5rem;padding-right:.5rem}.xl\:py-3{padding-top:.75rem;padding-bottom:.75rem}.xl\:px-3{padding-left:.75rem;padding-right:.75rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.xl\:px-6{padding-left:1.5rem;padding-right:1.5rem}.xl\:py-8{padding-top:2rem;padding-bottom:2rem}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.xl\:px-10{padding-left:2.5rem;padding-right:2.5rem}.xl\:py-12{padding-top:3rem;padding-bottom:3rem}.xl\:px-12{padding-left:3rem;padding-right:3rem}.xl\:py-16{padding-top:4rem;padding-bottom:4rem}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:py-20{padding-top:5rem;padding-bottom:5rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:py-24{padding-top:6rem;padding-bottom:6rem}.xl\:px-24{padding-left:6rem;padding-right:6rem}.xl\:py-32{padding-top:8rem;padding-bottom:8rem}.xl\:px-32{padding-left:8rem;padding-right:8rem}.xl\:py-40{padding-top:10rem;padding-bottom:10rem}.xl\:px-40{padding-left:10rem;padding-right:10rem}.xl\:py-48{padding-top:12rem;padding-bottom:12rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:py-56{padding-top:14rem;padding-bottom:14rem}.xl\:px-56{padding-left:14rem;padding-right:14rem}.xl\:py-64{padding-top:16rem;padding-bottom:16rem}.xl\:px-64{padding-left:16rem;padding-right:16rem}.xl\:py-px{padding-top:1px;padding-bottom:1px}.xl\:px-px{padding-left:1px;padding-right:1px}.xl\:pt-0{padding-top:0}.xl\:pr-0{padding-right:0}.xl\:pb-0{padding-bottom:0}.xl\:pl-0{padding-left:0}.xl\:pt-1{padding-top:.25rem}.xl\:pr-1{padding-right:.25rem}.xl\:pb-1{padding-bottom:.25rem}.xl\:pl-1{padding-left:.25rem}.xl\:pt-2{padding-top:.5rem}.xl\:pr-2{padding-right:.5rem}.xl\:pb-2{padding-bottom:.5rem}.xl\:pl-2{padding-left:.5rem}.xl\:pt-3{padding-top:.75rem}.xl\:pr-3{padding-right:.75rem}.xl\:pb-3{padding-bottom:.75rem}.xl\:pl-3{padding-left:.75rem}.xl\:pt-4{padding-top:1rem}.xl\:pr-4{padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:pl-4{padding-left:1rem}.xl\:pt-5{padding-top:1.25rem}.xl\:pr-5{padding-right:1.25rem}.xl\:pb-5{padding-bottom:1.25rem}.xl\:pl-5{padding-left:1.25rem}.xl\:pt-6{padding-top:1.5rem}.xl\:pr-6{padding-right:1.5rem}.xl\:pb-6{padding-bottom:1.5rem}.xl\:pl-6{padding-left:1.5rem}.xl\:pt-8{padding-top:2rem}.xl\:pr-8{padding-right:2rem}.xl\:pb-8{padding-bottom:2rem}.xl\:pl-8{padding-left:2rem}.xl\:pt-10{padding-top:2.5rem}.xl\:pr-10{padding-right:2.5rem}.xl\:pb-10{padding-bottom:2.5rem}.xl\:pl-10{padding-left:2.5rem}.xl\:pt-12{padding-top:3rem}.xl\:pr-12{padding-right:3rem}.xl\:pb-12{padding-bottom:3rem}.xl\:pl-12{padding-left:3rem}.xl\:pt-16{padding-top:4rem}.xl\:pr-16{padding-right:4rem}.xl\:pb-16{padding-bottom:4rem}.xl\:pl-16{padding-left:4rem}.xl\:pt-20{padding-top:5rem}.xl\:pr-20{padding-right:5rem}.xl\:pb-20{padding-bottom:5rem}.xl\:pl-20{padding-left:5rem}.xl\:pt-24{padding-top:6rem}.xl\:pr-24{padding-right:6rem}.xl\:pb-24{padding-bottom:6rem}.xl\:pl-24{padding-left:6rem}.xl\:pt-32{padding-top:8rem}.xl\:pr-32{padding-right:8rem}.xl\:pb-32{padding-bottom:8rem}.xl\:pl-32{padding-left:8rem}.xl\:pt-40{padding-top:10rem}.xl\:pr-40{padding-right:10rem}.xl\:pb-40{padding-bottom:10rem}.xl\:pl-40{padding-left:10rem}.xl\:pt-48{padding-top:12rem}.xl\:pr-48{padding-right:12rem}.xl\:pb-48{padding-bottom:12rem}.xl\:pl-48{padding-left:12rem}.xl\:pt-56{padding-top:14rem}.xl\:pr-56{padding-right:14rem}.xl\:pb-56{padding-bottom:14rem}.xl\:pl-56{padding-left:14rem}.xl\:pt-64{padding-top:16rem}.xl\:pr-64{padding-right:16rem}.xl\:pb-64{padding-bottom:16rem}.xl\:pl-64{padding-left:16rem}.xl\:pt-px{padding-top:1px}.xl\:pr-px{padding-right:1px}.xl\:pb-px{padding-bottom:1px}.xl\:pl-px{padding-left:1px}.xl\:placeholder-transparent:-ms-input-placeholder{color:transparent}.xl\:placeholder-transparent::-ms-input-placeholder{color:transparent}.xl\:placeholder-transparent::placeholder{color:transparent}.xl\:placeholder-current:-ms-input-placeholder{color:currentColor}.xl\:placeholder-current::-ms-input-placeholder{color:currentColor}.xl\:placeholder-current::placeholder{color:currentColor}.xl\:placeholder-black:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:placeholder-black::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:placeholder-black::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:placeholder-white:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:placeholder-white::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:placeholder-white::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:placeholder-gray-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-100::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:placeholder-gray-200:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-200::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-200::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:placeholder-gray-300:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-300::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-300::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:placeholder-gray-400:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-400::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-400::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:placeholder-gray-500:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-500::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-500::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:placeholder-gray-600:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-600::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-600::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:placeholder-gray-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-700::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:placeholder-gray-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-800::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:placeholder-gray-900:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-900::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-gray-900::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:placeholder-red-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:placeholder-red-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:placeholder-red-100::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:placeholder-red-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:placeholder-red-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:placeholder-red-200::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:placeholder-red-300:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:placeholder-red-300::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:placeholder-red-300::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:placeholder-red-400:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:placeholder-red-400::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:placeholder-red-400::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:placeholder-red-500:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:placeholder-red-500::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:placeholder-red-500::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:placeholder-red-600:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:placeholder-red-600::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:placeholder-red-600::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:placeholder-red-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:placeholder-red-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:placeholder-red-700::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:placeholder-red-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:placeholder-red-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:placeholder-red-800::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:placeholder-red-900:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:placeholder-red-900::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:placeholder-red-900::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:placeholder-orange-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:placeholder-orange-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:placeholder-orange-100::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:placeholder-orange-200:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:placeholder-orange-200::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:placeholder-orange-200::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:placeholder-orange-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:placeholder-orange-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:placeholder-orange-300::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:placeholder-orange-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:placeholder-orange-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:placeholder-orange-400::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:placeholder-orange-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:placeholder-orange-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:placeholder-orange-500::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:placeholder-orange-600:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:placeholder-orange-600::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:placeholder-orange-600::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:placeholder-orange-700:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:placeholder-orange-700::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:placeholder-orange-700::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:placeholder-orange-800:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:placeholder-orange-800::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:placeholder-orange-800::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:placeholder-orange-900:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:placeholder-orange-900::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:placeholder-orange-900::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:placeholder-yellow-100:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:placeholder-yellow-100::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:placeholder-yellow-100::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:placeholder-yellow-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:placeholder-yellow-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:placeholder-yellow-200::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:placeholder-yellow-300:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:placeholder-yellow-300::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:placeholder-yellow-300::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:placeholder-yellow-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:placeholder-yellow-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:placeholder-yellow-400::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:placeholder-yellow-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:placeholder-yellow-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:placeholder-yellow-500::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:placeholder-yellow-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:placeholder-yellow-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:placeholder-yellow-600::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:placeholder-yellow-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:placeholder-yellow-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:placeholder-yellow-700::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:placeholder-yellow-800:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:placeholder-yellow-800::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:placeholder-yellow-800::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:placeholder-yellow-900:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:placeholder-yellow-900::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:placeholder-yellow-900::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:placeholder-green-100:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-100::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-100::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:placeholder-green-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-200::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:placeholder-green-300:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-300::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-300::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:placeholder-green-400:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-400::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-400::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:placeholder-green-500:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-500::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-500::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:placeholder-green-600:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-600::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-600::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:placeholder-green-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-700::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:placeholder-green-800:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-800::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-800::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:placeholder-green-900:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-900::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-green-900::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:placeholder-teal-100:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-100::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-100::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:placeholder-teal-200:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-200::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-200::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:placeholder-teal-300:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-300::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-300::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:placeholder-teal-400:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-400::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-400::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:placeholder-teal-500:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-500::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-500::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:placeholder-teal-600:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-600::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-600::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:placeholder-teal-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-700::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:placeholder-teal-800:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-800::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-800::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:placeholder-teal-900:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-900::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-teal-900::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:placeholder-blue-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:placeholder-blue-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:placeholder-blue-100::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:placeholder-blue-200:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:placeholder-blue-200::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:placeholder-blue-200::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:placeholder-blue-300:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:placeholder-blue-300::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:placeholder-blue-300::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:placeholder-blue-400:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:placeholder-blue-400::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:placeholder-blue-400::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:placeholder-blue-500:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:placeholder-blue-500::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:placeholder-blue-500::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:placeholder-blue-600:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:placeholder-blue-600::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:placeholder-blue-600::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:placeholder-blue-700:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:placeholder-blue-700::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:placeholder-blue-700::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:placeholder-blue-800:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:placeholder-blue-800::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:placeholder-blue-800::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:placeholder-blue-900:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:placeholder-blue-900::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:placeholder-blue-900::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:placeholder-indigo-100:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-100::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-100::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:placeholder-indigo-200:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-200::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-200::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:placeholder-indigo-300:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-300::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-300::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:placeholder-indigo-400:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-400::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-400::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:placeholder-indigo-500:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-500::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-500::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:placeholder-indigo-600:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-600::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-600::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:placeholder-indigo-700:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-700::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-700::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:placeholder-indigo-800:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-800::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-800::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:placeholder-indigo-900:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-900::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-indigo-900::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:placeholder-purple-100:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-100::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-100::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:placeholder-purple-200:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-200::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-200::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:placeholder-purple-300:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-300::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-300::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:placeholder-purple-400:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-400::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-400::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:placeholder-purple-500:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-500::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-500::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:placeholder-purple-600:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-600::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-600::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:placeholder-purple-700:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-700::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-700::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:placeholder-purple-800:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-800::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-800::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:placeholder-purple-900:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-900::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-purple-900::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:placeholder-pink-100:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:placeholder-pink-100::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:placeholder-pink-100::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:placeholder-pink-200:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:placeholder-pink-200::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:placeholder-pink-200::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:placeholder-pink-300:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:placeholder-pink-300::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:placeholder-pink-300::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:placeholder-pink-400:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:placeholder-pink-400::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:placeholder-pink-400::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:placeholder-pink-500:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:placeholder-pink-500::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:placeholder-pink-500::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:placeholder-pink-600:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:placeholder-pink-600::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:placeholder-pink-600::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:placeholder-pink-700:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:placeholder-pink-700::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:placeholder-pink-700::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:placeholder-pink-800:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:placeholder-pink-800::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:placeholder-pink-800::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:placeholder-pink-900:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:placeholder-pink-900::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:placeholder-pink-900::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:focus\:placeholder-transparent:focus:-ms-input-placeholder{color:transparent}.xl\:focus\:placeholder-transparent:focus::-ms-input-placeholder{color:transparent}.xl\:focus\:placeholder-transparent:focus::placeholder{color:transparent}.xl\:focus\:placeholder-current:focus:-ms-input-placeholder{color:currentColor}.xl\:focus\:placeholder-current:focus::-ms-input-placeholder{color:currentColor}.xl\:focus\:placeholder-current:focus::placeholder{color:currentColor}.xl\:focus\:placeholder-black:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:focus\:placeholder-black:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:focus\:placeholder-black:focus::placeholder{--placeholder-opacity:1;color:#000;color:rgba(0,0,0,var(--placeholder-opacity))}.xl\:focus\:placeholder-white:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-white:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-white:focus::placeholder{--placeholder-opacity:1;color:#fff;color:rgba(255,255,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-100:focus::placeholder{--placeholder-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-200:focus::placeholder{--placeholder-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-300:focus::placeholder{--placeholder-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-400:focus::placeholder{--placeholder-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-500:focus::placeholder{--placeholder-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-600:focus::placeholder{--placeholder-opacity:1;color:#718096;color:rgba(113,128,150,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-700:focus::placeholder{--placeholder-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-800:focus::placeholder{--placeholder-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-gray-900:focus::placeholder{--placeholder-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-200:focus::placeholder{--placeholder-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-300:focus::placeholder{--placeholder-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-400:focus::placeholder{--placeholder-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-500:focus::placeholder{--placeholder-opacity:1;color:#f56565;color:rgba(245,101,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-600:focus::placeholder{--placeholder-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-700:focus::placeholder{--placeholder-opacity:1;color:#c53030;color:rgba(197,48,48,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-800:focus::placeholder{--placeholder-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:focus\:placeholder-red-900:focus::placeholder{--placeholder-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-100:focus::placeholder{--placeholder-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-200:focus::placeholder{--placeholder-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-300:focus::placeholder{--placeholder-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-400:focus::placeholder{--placeholder-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-500:focus::placeholder{--placeholder-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-600:focus::placeholder{--placeholder-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-700:focus::placeholder{--placeholder-opacity:1;color:#c05621;color:rgba(192,86,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-800:focus::placeholder{--placeholder-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:focus\:placeholder-orange-900:focus::placeholder{--placeholder-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-100:focus::placeholder{--placeholder-opacity:1;color:ivory;color:rgba(255,255,240,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-200:focus::placeholder{--placeholder-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-300:focus::placeholder{--placeholder-opacity:1;color:#faf089;color:rgba(250,240,137,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-400:focus::placeholder{--placeholder-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-500:focus::placeholder{--placeholder-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-600:focus::placeholder{--placeholder-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-700:focus::placeholder{--placeholder-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-800:focus::placeholder{--placeholder-opacity:1;color:#975a16;color:rgba(151,90,22,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:focus\:placeholder-yellow-900:focus::placeholder{--placeholder-opacity:1;color:#744210;color:rgba(116,66,16,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-100:focus::placeholder{--placeholder-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-200:focus::placeholder{--placeholder-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-300:focus::placeholder{--placeholder-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-400:focus::placeholder{--placeholder-opacity:1;color:#68d391;color:rgba(104,211,145,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-500:focus::placeholder{--placeholder-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-600:focus::placeholder{--placeholder-opacity:1;color:#38a169;color:rgba(56,161,105,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-700:focus::placeholder{--placeholder-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-800:focus::placeholder{--placeholder-opacity:1;color:#276749;color:rgba(39,103,73,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-green-900:focus::placeholder{--placeholder-opacity:1;color:#22543d;color:rgba(34,84,61,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-100:focus::placeholder{--placeholder-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-200:focus::placeholder{--placeholder-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-300:focus::placeholder{--placeholder-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-400:focus::placeholder{--placeholder-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-500:focus::placeholder{--placeholder-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-600:focus::placeholder{--placeholder-opacity:1;color:#319795;color:rgba(49,151,149,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-700:focus::placeholder{--placeholder-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-800:focus::placeholder{--placeholder-opacity:1;color:#285e61;color:rgba(40,94,97,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-teal-900:focus::placeholder{--placeholder-opacity:1;color:#234e52;color:rgba(35,78,82,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-100:focus::placeholder{--placeholder-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-200:focus::placeholder{--placeholder-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-300:focus::placeholder{--placeholder-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-400:focus::placeholder{--placeholder-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-500:focus::placeholder{--placeholder-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-600:focus::placeholder{--placeholder-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-700:focus::placeholder{--placeholder-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-800:focus::placeholder{--placeholder-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-blue-900:focus::placeholder{--placeholder-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-100:focus::placeholder{--placeholder-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-200:focus::placeholder{--placeholder-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-300:focus::placeholder{--placeholder-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-400:focus::placeholder{--placeholder-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-500:focus::placeholder{--placeholder-opacity:1;color:#667eea;color:rgba(102,126,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-600:focus::placeholder{--placeholder-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-700:focus::placeholder{--placeholder-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-800:focus::placeholder{--placeholder-opacity:1;color:#434190;color:rgba(67,65,144,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-indigo-900:focus::placeholder{--placeholder-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-100:focus::placeholder{--placeholder-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-200:focus::placeholder{--placeholder-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-300:focus::placeholder{--placeholder-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-400:focus::placeholder{--placeholder-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-500:focus::placeholder{--placeholder-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-600:focus::placeholder{--placeholder-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-700:focus::placeholder{--placeholder-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-800:focus::placeholder{--placeholder-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-purple-900:focus::placeholder{--placeholder-opacity:1;color:#44337a;color:rgba(68,51,122,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-100:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-100:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-100:focus::placeholder{--placeholder-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-200:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-200:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-200:focus::placeholder{--placeholder-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-300:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-300:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-300:focus::placeholder{--placeholder-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-400:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-400:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-400:focus::placeholder{--placeholder-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-500:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-500:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-500:focus::placeholder{--placeholder-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-600:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-600:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-600:focus::placeholder{--placeholder-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-700:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-700:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-700:focus::placeholder{--placeholder-opacity:1;color:#b83280;color:rgba(184,50,128,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-800:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-800:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-800:focus::placeholder{--placeholder-opacity:1;color:#97266d;color:rgba(151,38,109,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-900:focus:-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-900:focus::-ms-input-placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:focus\:placeholder-pink-900:focus::placeholder{--placeholder-opacity:1;color:#702459;color:rgba(112,36,89,var(--placeholder-opacity))}.xl\:placeholder-opacity-0:-ms-input-placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-0::-ms-input-placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-0::placeholder{--placeholder-opacity:0}.xl\:placeholder-opacity-25:-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-25::-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-25::placeholder{--placeholder-opacity:0.25}.xl\:placeholder-opacity-50:-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-50::-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-50::placeholder{--placeholder-opacity:0.5}.xl\:placeholder-opacity-75:-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-75::-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-75::placeholder{--placeholder-opacity:0.75}.xl\:placeholder-opacity-100:-ms-input-placeholder{--placeholder-opacity:1}.xl\:placeholder-opacity-100::-ms-input-placeholder{--placeholder-opacity:1}.xl\:placeholder-opacity-100::placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-0:focus:-ms-input-placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-0:focus::-ms-input-placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-0:focus::placeholder{--placeholder-opacity:0}.xl\:focus\:placeholder-opacity-25:focus:-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-25:focus::-ms-input-placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-25:focus::placeholder{--placeholder-opacity:0.25}.xl\:focus\:placeholder-opacity-50:focus:-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-50:focus::-ms-input-placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-50:focus::placeholder{--placeholder-opacity:0.5}.xl\:focus\:placeholder-opacity-75:focus:-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-75:focus::-ms-input-placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-75:focus::placeholder{--placeholder-opacity:0.75}.xl\:focus\:placeholder-opacity-100:focus:-ms-input-placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-100:focus::-ms-input-placeholder{--placeholder-opacity:1}.xl\:focus\:placeholder-opacity-100:focus::placeholder{--placeholder-opacity:1}.xl\:pointer-events-none{pointer-events:none}.xl\:pointer-events-auto{pointer-events:auto}.xl\:static{position:static}.xl\:fixed{position:fixed}.xl\:absolute{position:absolute}.xl\:relative{position:relative}.xl\:sticky{position:-webkit-sticky;position:sticky}.xl\:inset-0{top:0;right:0;bottom:0;left:0}.xl\:inset-auto{top:auto;right:auto;bottom:auto;left:auto}.xl\:inset-y-0{top:0;bottom:0}.xl\:inset-x-0{right:0;left:0}.xl\:inset-y-auto{top:auto;bottom:auto}.xl\:inset-x-auto{right:auto;left:auto}.xl\:top-0{top:0}.xl\:right-0{right:0}.xl\:bottom-0{bottom:0}.xl\:left-0{left:0}.xl\:top-auto{top:auto}.xl\:right-auto{right:auto}.xl\:bottom-auto{bottom:auto}.xl\:left-auto{left:auto}.xl\:resize-none{resize:none}.xl\:resize-y{resize:vertical}.xl\:resize-x{resize:horizontal}.xl\:resize{resize:both}.xl\:shadow-xs{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.xl\:shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:shadow-md{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:shadow-lg{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:shadow-xl{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:shadow-inner{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:shadow-outline{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:shadow-none{box-shadow:none}.xl\:hover\:shadow-xs:hover{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:hover\:shadow-sm:hover{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.xl\:hover\:shadow:hover{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:hover\:shadow-md:hover{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:hover\:shadow-xl:hover{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:hover\:shadow-2xl:hover{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:hover\:shadow-inner:hover{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:hover\:shadow-outline:hover{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:hover\:shadow-none:hover{box-shadow:none}.xl\:focus\:shadow-xs:focus{box-shadow:0 0 0 1px rgba(0,0,0,.05)}.xl\:focus\:shadow-sm:focus{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.xl\:focus\:shadow:focus{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.xl\:focus\:shadow-md:focus{box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.xl\:focus\:shadow-lg:focus{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.xl\:focus\:shadow-xl:focus{box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.xl\:focus\:shadow-2xl:focus{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)}.xl\:focus\:shadow-inner:focus{box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.xl\:focus\:shadow-outline:focus{box-shadow:0 0 0 3px rgba(66,153,225,.5)}.xl\:focus\:shadow-none:focus{box-shadow:none}.xl\:fill-current{fill:currentColor}.xl\:stroke-current{stroke:currentColor}.xl\:stroke-0{stroke-width:0}.xl\:stroke-1{stroke-width:1}.xl\:stroke-2{stroke-width:2}.xl\:table-auto{table-layout:auto}.xl\:table-fixed{table-layout:fixed}.xl\:text-left{text-align:left}.xl\:text-center{text-align:center}.xl\:text-right{text-align:right}.xl\:text-justify{text-align:justify}.xl\:text-transparent{color:transparent}.xl\:text-current{color:currentColor}.xl\:text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.xl\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.xl\:text-gray-100{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:text-gray-800{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:text-red-100{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.xl\:text-red-200{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.xl\:text-red-300{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.xl\:text-red-400{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.xl\:text-red-500{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.xl\:text-red-600{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.xl\:text-red-700{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.xl\:text-red-800{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.xl\:text-red-900{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.xl\:text-orange-100{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.xl\:text-orange-200{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.xl\:text-orange-300{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.xl\:text-orange-400{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.xl\:text-orange-500{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.xl\:text-orange-600{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.xl\:text-orange-700{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.xl\:text-orange-800{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.xl\:text-orange-900{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.xl\:text-yellow-100{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.xl\:text-yellow-200{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.xl\:text-yellow-300{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.xl\:text-yellow-400{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.xl\:text-yellow-500{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.xl\:text-yellow-600{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.xl\:text-yellow-700{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.xl\:text-yellow-800{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.xl\:text-yellow-900{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.xl\:text-green-100{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:text-green-200{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:text-green-300{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:text-green-400{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:text-green-500{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:text-green-600{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:text-green-700{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:text-green-800{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:text-green-900{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:text-teal-100{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:text-teal-200{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:text-teal-300{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:text-teal-400{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:text-teal-500{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:text-teal-600{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:text-teal-700{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:text-teal-800{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:text-teal-900{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:text-blue-100{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.xl\:text-blue-200{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.xl\:text-blue-300{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.xl\:text-blue-400{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.xl\:text-blue-500{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.xl\:text-blue-600{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.xl\:text-blue-700{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.xl\:text-blue-800{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.xl\:text-blue-900{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.xl\:text-indigo-100{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:text-indigo-200{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:text-indigo-300{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:text-indigo-400{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:text-indigo-500{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:text-indigo-600{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:text-indigo-700{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:text-indigo-800{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:text-indigo-900{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:text-purple-100{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:text-purple-200{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:text-purple-300{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:text-purple-400{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:text-purple-500{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:text-purple-600{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:text-purple-700{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:text-purple-800{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:text-purple-900{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:text-pink-100{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.xl\:text-pink-200{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.xl\:text-pink-300{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.xl\:text-pink-400{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.xl\:text-pink-500{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.xl\:text-pink-600{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.xl\:text-pink-700{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.xl\:text-pink-800{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.xl\:text-pink-900{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.xl\:hover\:text-transparent:hover{color:transparent}.xl\:hover\:text-current:hover{color:currentColor}.xl\:hover\:text-black:hover{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.xl\:hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.xl\:hover\:text-gray-100:hover{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:hover\:text-gray-200:hover{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:hover\:text-gray-300:hover{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:hover\:text-gray-400:hover{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:hover\:text-gray-500:hover{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:hover\:text-gray-600:hover{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:hover\:text-gray-700:hover{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:hover\:text-gray-800:hover{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:hover\:text-gray-900:hover{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:hover\:text-red-100:hover{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.xl\:hover\:text-red-200:hover{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.xl\:hover\:text-red-300:hover{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.xl\:hover\:text-red-400:hover{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.xl\:hover\:text-red-500:hover{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.xl\:hover\:text-red-600:hover{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.xl\:hover\:text-red-700:hover{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.xl\:hover\:text-red-800:hover{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.xl\:hover\:text-red-900:hover{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.xl\:hover\:text-orange-100:hover{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.xl\:hover\:text-orange-200:hover{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.xl\:hover\:text-orange-300:hover{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.xl\:hover\:text-orange-400:hover{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.xl\:hover\:text-orange-500:hover{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.xl\:hover\:text-orange-600:hover{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.xl\:hover\:text-orange-700:hover{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.xl\:hover\:text-orange-800:hover{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.xl\:hover\:text-orange-900:hover{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.xl\:hover\:text-yellow-100:hover{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.xl\:hover\:text-yellow-200:hover{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.xl\:hover\:text-yellow-300:hover{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.xl\:hover\:text-yellow-400:hover{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.xl\:hover\:text-yellow-500:hover{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.xl\:hover\:text-yellow-600:hover{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.xl\:hover\:text-yellow-700:hover{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.xl\:hover\:text-yellow-800:hover{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.xl\:hover\:text-yellow-900:hover{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.xl\:hover\:text-green-100:hover{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:hover\:text-green-200:hover{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:hover\:text-green-300:hover{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:hover\:text-green-400:hover{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:hover\:text-green-500:hover{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:hover\:text-green-600:hover{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:hover\:text-green-700:hover{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:hover\:text-green-800:hover{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:hover\:text-green-900:hover{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:hover\:text-teal-100:hover{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:hover\:text-teal-200:hover{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:hover\:text-teal-300:hover{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:hover\:text-teal-400:hover{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:hover\:text-teal-500:hover{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:hover\:text-teal-600:hover{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:hover\:text-teal-700:hover{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:hover\:text-teal-800:hover{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:hover\:text-teal-900:hover{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:hover\:text-blue-100:hover{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.xl\:hover\:text-blue-200:hover{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.xl\:hover\:text-blue-300:hover{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.xl\:hover\:text-blue-400:hover{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.xl\:hover\:text-blue-500:hover{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.xl\:hover\:text-blue-600:hover{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.xl\:hover\:text-blue-700:hover{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.xl\:hover\:text-blue-800:hover{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.xl\:hover\:text-blue-900:hover{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.xl\:hover\:text-indigo-100:hover{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:hover\:text-indigo-200:hover{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:hover\:text-indigo-300:hover{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:hover\:text-indigo-400:hover{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:hover\:text-indigo-500:hover{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:hover\:text-indigo-600:hover{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:hover\:text-indigo-700:hover{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:hover\:text-indigo-800:hover{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:hover\:text-indigo-900:hover{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:hover\:text-purple-100:hover{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:hover\:text-purple-200:hover{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:hover\:text-purple-300:hover{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:hover\:text-purple-400:hover{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:hover\:text-purple-500:hover{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:hover\:text-purple-600:hover{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:hover\:text-purple-700:hover{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:hover\:text-purple-800:hover{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:hover\:text-purple-900:hover{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:hover\:text-pink-100:hover{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.xl\:hover\:text-pink-200:hover{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.xl\:hover\:text-pink-300:hover{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.xl\:hover\:text-pink-400:hover{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.xl\:hover\:text-pink-500:hover{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.xl\:hover\:text-pink-600:hover{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.xl\:hover\:text-pink-700:hover{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.xl\:hover\:text-pink-800:hover{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.xl\:hover\:text-pink-900:hover{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.xl\:focus\:text-transparent:focus{color:transparent}.xl\:focus\:text-current:focus{color:currentColor}.xl\:focus\:text-black:focus{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.xl\:focus\:text-white:focus{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.xl\:focus\:text-gray-100:focus{--text-opacity:1;color:#f7fafc;color:rgba(247,250,252,var(--text-opacity))}.xl\:focus\:text-gray-200:focus{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.xl\:focus\:text-gray-300:focus{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.xl\:focus\:text-gray-400:focus{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.xl\:focus\:text-gray-500:focus{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.xl\:focus\:text-gray-600:focus{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.xl\:focus\:text-gray-700:focus{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.xl\:focus\:text-gray-800:focus{--text-opacity:1;color:#2d3748;color:rgba(45,55,72,var(--text-opacity))}.xl\:focus\:text-gray-900:focus{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.xl\:focus\:text-red-100:focus{--text-opacity:1;color:#fff5f5;color:rgba(255,245,245,var(--text-opacity))}.xl\:focus\:text-red-200:focus{--text-opacity:1;color:#fed7d7;color:rgba(254,215,215,var(--text-opacity))}.xl\:focus\:text-red-300:focus{--text-opacity:1;color:#feb2b2;color:rgba(254,178,178,var(--text-opacity))}.xl\:focus\:text-red-400:focus{--text-opacity:1;color:#fc8181;color:rgba(252,129,129,var(--text-opacity))}.xl\:focus\:text-red-500:focus{--text-opacity:1;color:#f56565;color:rgba(245,101,101,var(--text-opacity))}.xl\:focus\:text-red-600:focus{--text-opacity:1;color:#e53e3e;color:rgba(229,62,62,var(--text-opacity))}.xl\:focus\:text-red-700:focus{--text-opacity:1;color:#c53030;color:rgba(197,48,48,var(--text-opacity))}.xl\:focus\:text-red-800:focus{--text-opacity:1;color:#9b2c2c;color:rgba(155,44,44,var(--text-opacity))}.xl\:focus\:text-red-900:focus{--text-opacity:1;color:#742a2a;color:rgba(116,42,42,var(--text-opacity))}.xl\:focus\:text-orange-100:focus{--text-opacity:1;color:#fffaf0;color:rgba(255,250,240,var(--text-opacity))}.xl\:focus\:text-orange-200:focus{--text-opacity:1;color:#feebc8;color:rgba(254,235,200,var(--text-opacity))}.xl\:focus\:text-orange-300:focus{--text-opacity:1;color:#fbd38d;color:rgba(251,211,141,var(--text-opacity))}.xl\:focus\:text-orange-400:focus{--text-opacity:1;color:#f6ad55;color:rgba(246,173,85,var(--text-opacity))}.xl\:focus\:text-orange-500:focus{--text-opacity:1;color:#ed8936;color:rgba(237,137,54,var(--text-opacity))}.xl\:focus\:text-orange-600:focus{--text-opacity:1;color:#dd6b20;color:rgba(221,107,32,var(--text-opacity))}.xl\:focus\:text-orange-700:focus{--text-opacity:1;color:#c05621;color:rgba(192,86,33,var(--text-opacity))}.xl\:focus\:text-orange-800:focus{--text-opacity:1;color:#9c4221;color:rgba(156,66,33,var(--text-opacity))}.xl\:focus\:text-orange-900:focus{--text-opacity:1;color:#7b341e;color:rgba(123,52,30,var(--text-opacity))}.xl\:focus\:text-yellow-100:focus{--text-opacity:1;color:ivory;color:rgba(255,255,240,var(--text-opacity))}.xl\:focus\:text-yellow-200:focus{--text-opacity:1;color:#fefcbf;color:rgba(254,252,191,var(--text-opacity))}.xl\:focus\:text-yellow-300:focus{--text-opacity:1;color:#faf089;color:rgba(250,240,137,var(--text-opacity))}.xl\:focus\:text-yellow-400:focus{--text-opacity:1;color:#f6e05e;color:rgba(246,224,94,var(--text-opacity))}.xl\:focus\:text-yellow-500:focus{--text-opacity:1;color:#ecc94b;color:rgba(236,201,75,var(--text-opacity))}.xl\:focus\:text-yellow-600:focus{--text-opacity:1;color:#d69e2e;color:rgba(214,158,46,var(--text-opacity))}.xl\:focus\:text-yellow-700:focus{--text-opacity:1;color:#b7791f;color:rgba(183,121,31,var(--text-opacity))}.xl\:focus\:text-yellow-800:focus{--text-opacity:1;color:#975a16;color:rgba(151,90,22,var(--text-opacity))}.xl\:focus\:text-yellow-900:focus{--text-opacity:1;color:#744210;color:rgba(116,66,16,var(--text-opacity))}.xl\:focus\:text-green-100:focus{--text-opacity:1;color:#f0fff4;color:rgba(240,255,244,var(--text-opacity))}.xl\:focus\:text-green-200:focus{--text-opacity:1;color:#c6f6d5;color:rgba(198,246,213,var(--text-opacity))}.xl\:focus\:text-green-300:focus{--text-opacity:1;color:#9ae6b4;color:rgba(154,230,180,var(--text-opacity))}.xl\:focus\:text-green-400:focus{--text-opacity:1;color:#68d391;color:rgba(104,211,145,var(--text-opacity))}.xl\:focus\:text-green-500:focus{--text-opacity:1;color:#48bb78;color:rgba(72,187,120,var(--text-opacity))}.xl\:focus\:text-green-600:focus{--text-opacity:1;color:#38a169;color:rgba(56,161,105,var(--text-opacity))}.xl\:focus\:text-green-700:focus{--text-opacity:1;color:#2f855a;color:rgba(47,133,90,var(--text-opacity))}.xl\:focus\:text-green-800:focus{--text-opacity:1;color:#276749;color:rgba(39,103,73,var(--text-opacity))}.xl\:focus\:text-green-900:focus{--text-opacity:1;color:#22543d;color:rgba(34,84,61,var(--text-opacity))}.xl\:focus\:text-teal-100:focus{--text-opacity:1;color:#e6fffa;color:rgba(230,255,250,var(--text-opacity))}.xl\:focus\:text-teal-200:focus{--text-opacity:1;color:#b2f5ea;color:rgba(178,245,234,var(--text-opacity))}.xl\:focus\:text-teal-300:focus{--text-opacity:1;color:#81e6d9;color:rgba(129,230,217,var(--text-opacity))}.xl\:focus\:text-teal-400:focus{--text-opacity:1;color:#4fd1c5;color:rgba(79,209,197,var(--text-opacity))}.xl\:focus\:text-teal-500:focus{--text-opacity:1;color:#38b2ac;color:rgba(56,178,172,var(--text-opacity))}.xl\:focus\:text-teal-600:focus{--text-opacity:1;color:#319795;color:rgba(49,151,149,var(--text-opacity))}.xl\:focus\:text-teal-700:focus{--text-opacity:1;color:#2c7a7b;color:rgba(44,122,123,var(--text-opacity))}.xl\:focus\:text-teal-800:focus{--text-opacity:1;color:#285e61;color:rgba(40,94,97,var(--text-opacity))}.xl\:focus\:text-teal-900:focus{--text-opacity:1;color:#234e52;color:rgba(35,78,82,var(--text-opacity))}.xl\:focus\:text-blue-100:focus{--text-opacity:1;color:#ebf8ff;color:rgba(235,248,255,var(--text-opacity))}.xl\:focus\:text-blue-200:focus{--text-opacity:1;color:#bee3f8;color:rgba(190,227,248,var(--text-opacity))}.xl\:focus\:text-blue-300:focus{--text-opacity:1;color:#90cdf4;color:rgba(144,205,244,var(--text-opacity))}.xl\:focus\:text-blue-400:focus{--text-opacity:1;color:#63b3ed;color:rgba(99,179,237,var(--text-opacity))}.xl\:focus\:text-blue-500:focus{--text-opacity:1;color:#4299e1;color:rgba(66,153,225,var(--text-opacity))}.xl\:focus\:text-blue-600:focus{--text-opacity:1;color:#3182ce;color:rgba(49,130,206,var(--text-opacity))}.xl\:focus\:text-blue-700:focus{--text-opacity:1;color:#2b6cb0;color:rgba(43,108,176,var(--text-opacity))}.xl\:focus\:text-blue-800:focus{--text-opacity:1;color:#2c5282;color:rgba(44,82,130,var(--text-opacity))}.xl\:focus\:text-blue-900:focus{--text-opacity:1;color:#2a4365;color:rgba(42,67,101,var(--text-opacity))}.xl\:focus\:text-indigo-100:focus{--text-opacity:1;color:#ebf4ff;color:rgba(235,244,255,var(--text-opacity))}.xl\:focus\:text-indigo-200:focus{--text-opacity:1;color:#c3dafe;color:rgba(195,218,254,var(--text-opacity))}.xl\:focus\:text-indigo-300:focus{--text-opacity:1;color:#a3bffa;color:rgba(163,191,250,var(--text-opacity))}.xl\:focus\:text-indigo-400:focus{--text-opacity:1;color:#7f9cf5;color:rgba(127,156,245,var(--text-opacity))}.xl\:focus\:text-indigo-500:focus{--text-opacity:1;color:#667eea;color:rgba(102,126,234,var(--text-opacity))}.xl\:focus\:text-indigo-600:focus{--text-opacity:1;color:#5a67d8;color:rgba(90,103,216,var(--text-opacity))}.xl\:focus\:text-indigo-700:focus{--text-opacity:1;color:#4c51bf;color:rgba(76,81,191,var(--text-opacity))}.xl\:focus\:text-indigo-800:focus{--text-opacity:1;color:#434190;color:rgba(67,65,144,var(--text-opacity))}.xl\:focus\:text-indigo-900:focus{--text-opacity:1;color:#3c366b;color:rgba(60,54,107,var(--text-opacity))}.xl\:focus\:text-purple-100:focus{--text-opacity:1;color:#faf5ff;color:rgba(250,245,255,var(--text-opacity))}.xl\:focus\:text-purple-200:focus{--text-opacity:1;color:#e9d8fd;color:rgba(233,216,253,var(--text-opacity))}.xl\:focus\:text-purple-300:focus{--text-opacity:1;color:#d6bcfa;color:rgba(214,188,250,var(--text-opacity))}.xl\:focus\:text-purple-400:focus{--text-opacity:1;color:#b794f4;color:rgba(183,148,244,var(--text-opacity))}.xl\:focus\:text-purple-500:focus{--text-opacity:1;color:#9f7aea;color:rgba(159,122,234,var(--text-opacity))}.xl\:focus\:text-purple-600:focus{--text-opacity:1;color:#805ad5;color:rgba(128,90,213,var(--text-opacity))}.xl\:focus\:text-purple-700:focus{--text-opacity:1;color:#6b46c1;color:rgba(107,70,193,var(--text-opacity))}.xl\:focus\:text-purple-800:focus{--text-opacity:1;color:#553c9a;color:rgba(85,60,154,var(--text-opacity))}.xl\:focus\:text-purple-900:focus{--text-opacity:1;color:#44337a;color:rgba(68,51,122,var(--text-opacity))}.xl\:focus\:text-pink-100:focus{--text-opacity:1;color:#fff5f7;color:rgba(255,245,247,var(--text-opacity))}.xl\:focus\:text-pink-200:focus{--text-opacity:1;color:#fed7e2;color:rgba(254,215,226,var(--text-opacity))}.xl\:focus\:text-pink-300:focus{--text-opacity:1;color:#fbb6ce;color:rgba(251,182,206,var(--text-opacity))}.xl\:focus\:text-pink-400:focus{--text-opacity:1;color:#f687b3;color:rgba(246,135,179,var(--text-opacity))}.xl\:focus\:text-pink-500:focus{--text-opacity:1;color:#ed64a6;color:rgba(237,100,166,var(--text-opacity))}.xl\:focus\:text-pink-600:focus{--text-opacity:1;color:#d53f8c;color:rgba(213,63,140,var(--text-opacity))}.xl\:focus\:text-pink-700:focus{--text-opacity:1;color:#b83280;color:rgba(184,50,128,var(--text-opacity))}.xl\:focus\:text-pink-800:focus{--text-opacity:1;color:#97266d;color:rgba(151,38,109,var(--text-opacity))}.xl\:focus\:text-pink-900:focus{--text-opacity:1;color:#702459;color:rgba(112,36,89,var(--text-opacity))}.xl\:text-opacity-0{--text-opacity:0}.xl\:text-opacity-25{--text-opacity:0.25}.xl\:text-opacity-50{--text-opacity:0.5}.xl\:text-opacity-75{--text-opacity:0.75}.xl\:text-opacity-100{--text-opacity:1}.xl\:hover\:text-opacity-0:hover{--text-opacity:0}.xl\:hover\:text-opacity-25:hover{--text-opacity:0.25}.xl\:hover\:text-opacity-50:hover{--text-opacity:0.5}.xl\:hover\:text-opacity-75:hover{--text-opacity:0.75}.xl\:hover\:text-opacity-100:hover{--text-opacity:1}.xl\:focus\:text-opacity-0:focus{--text-opacity:0}.xl\:focus\:text-opacity-25:focus{--text-opacity:0.25}.xl\:focus\:text-opacity-50:focus{--text-opacity:0.5}.xl\:focus\:text-opacity-75:focus{--text-opacity:0.75}.xl\:focus\:text-opacity-100:focus{--text-opacity:1}.xl\:italic{font-style:italic}.xl\:not-italic{font-style:normal}.xl\:uppercase{text-transform:uppercase}.xl\:lowercase{text-transform:lowercase}.xl\:capitalize{text-transform:capitalize}.xl\:normal-case{text-transform:none}.xl\:underline{text-decoration:underline}.xl\:line-through{text-decoration:line-through}.xl\:no-underline{text-decoration:none}.xl\:hover\:underline:hover{text-decoration:underline}.xl\:hover\:line-through:hover{text-decoration:line-through}.xl\:hover\:no-underline:hover{text-decoration:none}.xl\:focus\:underline:focus{text-decoration:underline}.xl\:focus\:line-through:focus{text-decoration:line-through}.xl\:focus\:no-underline:focus{text-decoration:none}.xl\:antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.xl\:subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.xl\:diagonal-fractions,.xl\:lining-nums,.xl\:oldstyle-nums,.xl\:ordinal,.xl\:proportional-nums,.xl\:slashed-zero,.xl\:stacked-fractions,.xl\:tabular-nums{--font-variant-numeric-ordinal:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-slashed-zero:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-figure:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-spacing:var(--tailwind-empty, );/*!*//*!*/--font-variant-numeric-fraction:var(--tailwind-empty, );/*!*//*!*/font-variant-numeric:var(--font-variant-numeric-ordinal) var(--font-variant-numeric-slashed-zero) var(--font-variant-numeric-figure) var(--font-variant-numeric-spacing) var(--font-variant-numeric-fraction)}.xl\:normal-nums{font-variant-numeric:normal}.xl\:ordinal{--font-variant-numeric-ordinal:ordinal}.xl\:slashed-zero{--font-variant-numeric-slashed-zero:slashed-zero}.xl\:lining-nums{--font-variant-numeric-figure:lining-nums}.xl\:oldstyle-nums{--font-variant-numeric-figure:oldstyle-nums}.xl\:proportional-nums{--font-variant-numeric-spacing:proportional-nums}.xl\:tabular-nums{--font-variant-numeric-spacing:tabular-nums}.xl\:diagonal-fractions{--font-variant-numeric-fraction:diagonal-fractions}.xl\:stacked-fractions{--font-variant-numeric-fraction:stacked-fractions}.xl\:tracking-tighter{letter-spacing:-.05em}.xl\:tracking-tight{letter-spacing:-.025em}.xl\:tracking-normal{letter-spacing:0}.xl\:tracking-wide{letter-spacing:.025em}.xl\:tracking-wider{letter-spacing:.05em}.xl\:tracking-widest{letter-spacing:.1em}.xl\:select-none{-webkit-user-select:none;-ms-user-select:none;user-select:none}.xl\:select-text{-webkit-user-select:text;-ms-user-select:text;user-select:text}.xl\:select-all{-webkit-user-select:all;-ms-user-select:all;user-select:all}.xl\:select-auto{-webkit-user-select:auto;-ms-user-select:auto;user-select:auto}.xl\:align-baseline{vertical-align:baseline}.xl\:align-top{vertical-align:top}.xl\:align-middle{vertical-align:middle}.xl\:align-bottom{vertical-align:bottom}.xl\:align-text-top{vertical-align:text-top}.xl\:align-text-bottom{vertical-align:text-bottom}.xl\:visible{visibility:visible}.xl\:invisible{visibility:hidden}.xl\:whitespace-normal{white-space:normal}.xl\:whitespace-no-wrap{white-space:nowrap}.xl\:whitespace-pre{white-space:pre}.xl\:whitespace-pre-line{white-space:pre-line}.xl\:whitespace-pre-wrap{white-space:pre-wrap}.xl\:break-normal{word-wrap:normal;overflow-wrap:normal;word-break:normal}.xl\:break-words{word-wrap:break-word;overflow-wrap:break-word}.xl\:break-all{word-break:break-all}.xl\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xl\:w-0{width:0}.xl\:w-1{width:.25rem}.xl\:w-2{width:.5rem}.xl\:w-3{width:.75rem}.xl\:w-4{width:1rem}.xl\:w-5{width:1.25rem}.xl\:w-6{width:1.5rem}.xl\:w-8{width:2rem}.xl\:w-10{width:2.5rem}.xl\:w-12{width:3rem}.xl\:w-16{width:4rem}.xl\:w-20{width:5rem}.xl\:w-24{width:6rem}.xl\:w-32{width:8rem}.xl\:w-40{width:10rem}.xl\:w-48{width:12rem}.xl\:w-56{width:14rem}.xl\:w-64{width:16rem}.xl\:w-auto{width:auto}.xl\:w-px{width:1px}.xl\:w-1\/2{width:50%}.xl\:w-1\/3{width:33.333333%}.xl\:w-2\/3{width:66.666667%}.xl\:w-1\/4{width:25%}.xl\:w-2\/4{width:50%}.xl\:w-3\/4{width:75%}.xl\:w-1\/5{width:20%}.xl\:w-2\/5{width:40%}.xl\:w-3\/5{width:60%}.xl\:w-4\/5{width:80%}.xl\:w-1\/6{width:16.666667%}.xl\:w-2\/6{width:33.333333%}.xl\:w-3\/6{width:50%}.xl\:w-4\/6{width:66.666667%}.xl\:w-5\/6{width:83.333333%}.xl\:w-1\/12{width:8.333333%}.xl\:w-2\/12{width:16.666667%}.xl\:w-3\/12{width:25%}.xl\:w-4\/12{width:33.333333%}.xl\:w-5\/12{width:41.666667%}.xl\:w-6\/12{width:50%}.xl\:w-7\/12{width:58.333333%}.xl\:w-8\/12{width:66.666667%}.xl\:w-9\/12{width:75%}.xl\:w-10\/12{width:83.333333%}.xl\:w-11\/12{width:91.666667%}.xl\:w-full{width:100%}.xl\:w-screen{width:100vw}.xl\:z-0{z-index:0}.xl\:z-10{z-index:10}.xl\:z-20{z-index:20}.xl\:z-30{z-index:30}.xl\:z-40{z-index:40}.xl\:z-50{z-index:50}.xl\:z-auto{z-index:auto}.xl\:gap-0{grid-gap:0;gap:0}.xl\:gap-1{grid-gap:.25rem;gap:.25rem}.xl\:gap-2{grid-gap:.5rem;gap:.5rem}.xl\:gap-3{grid-gap:.75rem;gap:.75rem}.xl\:gap-4{grid-gap:1rem;gap:1rem}.xl\:gap-5{grid-gap:1.25rem;gap:1.25rem}.xl\:gap-6{grid-gap:1.5rem;gap:1.5rem}.xl\:gap-8{grid-gap:2rem;gap:2rem}.xl\:gap-10{grid-gap:2.5rem;gap:2.5rem}.xl\:gap-12{grid-gap:3rem;gap:3rem}.xl\:gap-16{grid-gap:4rem;gap:4rem}.xl\:gap-20{grid-gap:5rem;gap:5rem}.xl\:gap-24{grid-gap:6rem;gap:6rem}.xl\:gap-32{grid-gap:8rem;gap:8rem}.xl\:gap-40{grid-gap:10rem;gap:10rem}.xl\:gap-48{grid-gap:12rem;gap:12rem}.xl\:gap-56{grid-gap:14rem;gap:14rem}.xl\:gap-64{grid-gap:16rem;gap:16rem}.xl\:gap-px{grid-gap:1px;gap:1px}.xl\:col-gap-0{grid-column-gap:0;column-gap:0}.xl\:col-gap-1{grid-column-gap:.25rem;column-gap:.25rem}.xl\:col-gap-2{grid-column-gap:.5rem;column-gap:.5rem}.xl\:col-gap-3{grid-column-gap:.75rem;column-gap:.75rem}.xl\:col-gap-4{grid-column-gap:1rem;column-gap:1rem}.xl\:col-gap-5{grid-column-gap:1.25rem;column-gap:1.25rem}.xl\:col-gap-6{grid-column-gap:1.5rem;column-gap:1.5rem}.xl\:col-gap-8{grid-column-gap:2rem;column-gap:2rem}.xl\:col-gap-10{grid-column-gap:2.5rem;column-gap:2.5rem}.xl\:col-gap-12{grid-column-gap:3rem;column-gap:3rem}.xl\:col-gap-16{grid-column-gap:4rem;column-gap:4rem}.xl\:col-gap-20{grid-column-gap:5rem;column-gap:5rem}.xl\:col-gap-24{grid-column-gap:6rem;column-gap:6rem}.xl\:col-gap-32{grid-column-gap:8rem;column-gap:8rem}.xl\:col-gap-40{grid-column-gap:10rem;column-gap:10rem}.xl\:col-gap-48{grid-column-gap:12rem;column-gap:12rem}.xl\:col-gap-56{grid-column-gap:14rem;column-gap:14rem}.xl\:col-gap-64{grid-column-gap:16rem;column-gap:16rem}.xl\:col-gap-px{grid-column-gap:1px;column-gap:1px}.xl\:gap-x-0{grid-column-gap:0;column-gap:0}.xl\:gap-x-1{grid-column-gap:.25rem;column-gap:.25rem}.xl\:gap-x-2{grid-column-gap:.5rem;column-gap:.5rem}.xl\:gap-x-3{grid-column-gap:.75rem;column-gap:.75rem}.xl\:gap-x-4{grid-column-gap:1rem;column-gap:1rem}.xl\:gap-x-5{grid-column-gap:1.25rem;column-gap:1.25rem}.xl\:gap-x-6{grid-column-gap:1.5rem;column-gap:1.5rem}.xl\:gap-x-8{grid-column-gap:2rem;column-gap:2rem}.xl\:gap-x-10{grid-column-gap:2.5rem;column-gap:2.5rem}.xl\:gap-x-12{grid-column-gap:3rem;column-gap:3rem}.xl\:gap-x-16{grid-column-gap:4rem;column-gap:4rem}.xl\:gap-x-20{grid-column-gap:5rem;column-gap:5rem}.xl\:gap-x-24{grid-column-gap:6rem;column-gap:6rem}.xl\:gap-x-32{grid-column-gap:8rem;column-gap:8rem}.xl\:gap-x-40{grid-column-gap:10rem;column-gap:10rem}.xl\:gap-x-48{grid-column-gap:12rem;column-gap:12rem}.xl\:gap-x-56{grid-column-gap:14rem;column-gap:14rem}.xl\:gap-x-64{grid-column-gap:16rem;column-gap:16rem}.xl\:gap-x-px{grid-column-gap:1px;column-gap:1px}.xl\:row-gap-0{grid-row-gap:0;row-gap:0}.xl\:row-gap-1{grid-row-gap:.25rem;row-gap:.25rem}.xl\:row-gap-2{grid-row-gap:.5rem;row-gap:.5rem}.xl\:row-gap-3{grid-row-gap:.75rem;row-gap:.75rem}.xl\:row-gap-4{grid-row-gap:1rem;row-gap:1rem}.xl\:row-gap-5{grid-row-gap:1.25rem;row-gap:1.25rem}.xl\:row-gap-6{grid-row-gap:1.5rem;row-gap:1.5rem}.xl\:row-gap-8{grid-row-gap:2rem;row-gap:2rem}.xl\:row-gap-10{grid-row-gap:2.5rem;row-gap:2.5rem}.xl\:row-gap-12{grid-row-gap:3rem;row-gap:3rem}.xl\:row-gap-16{grid-row-gap:4rem;row-gap:4rem}.xl\:row-gap-20{grid-row-gap:5rem;row-gap:5rem}.xl\:row-gap-24{grid-row-gap:6rem;row-gap:6rem}.xl\:row-gap-32{grid-row-gap:8rem;row-gap:8rem}.xl\:row-gap-40{grid-row-gap:10rem;row-gap:10rem}.xl\:row-gap-48{grid-row-gap:12rem;row-gap:12rem}.xl\:row-gap-56{grid-row-gap:14rem;row-gap:14rem}.xl\:row-gap-64{grid-row-gap:16rem;row-gap:16rem}.xl\:row-gap-px{grid-row-gap:1px;row-gap:1px}.xl\:gap-y-0{grid-row-gap:0;row-gap:0}.xl\:gap-y-1{grid-row-gap:.25rem;row-gap:.25rem}.xl\:gap-y-2{grid-row-gap:.5rem;row-gap:.5rem}.xl\:gap-y-3{grid-row-gap:.75rem;row-gap:.75rem}.xl\:gap-y-4{grid-row-gap:1rem;row-gap:1rem}.xl\:gap-y-5{grid-row-gap:1.25rem;row-gap:1.25rem}.xl\:gap-y-6{grid-row-gap:1.5rem;row-gap:1.5rem}.xl\:gap-y-8{grid-row-gap:2rem;row-gap:2rem}.xl\:gap-y-10{grid-row-gap:2.5rem;row-gap:2.5rem}.xl\:gap-y-12{grid-row-gap:3rem;row-gap:3rem}.xl\:gap-y-16{grid-row-gap:4rem;row-gap:4rem}.xl\:gap-y-20{grid-row-gap:5rem;row-gap:5rem}.xl\:gap-y-24{grid-row-gap:6rem;row-gap:6rem}.xl\:gap-y-32{grid-row-gap:8rem;row-gap:8rem}.xl\:gap-y-40{grid-row-gap:10rem;row-gap:10rem}.xl\:gap-y-48{grid-row-gap:12rem;row-gap:12rem}.xl\:gap-y-56{grid-row-gap:14rem;row-gap:14rem}.xl\:gap-y-64{grid-row-gap:16rem;row-gap:16rem}.xl\:gap-y-px{grid-row-gap:1px;row-gap:1px}.xl\:grid-flow-row{grid-auto-flow:row}.xl\:grid-flow-col{grid-auto-flow:column}.xl\:grid-flow-row-dense{grid-auto-flow:row dense}.xl\:grid-flow-col-dense{grid-auto-flow:column dense}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xl\:grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xl\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xl\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xl\:grid-cols-none{grid-template-columns:none}.xl\:auto-cols-auto{grid-auto-columns:auto}.xl\:auto-cols-min{grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content}.xl\:auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.xl\:auto-cols-fr{grid-auto-columns:minmax(0,1fr)}.xl\:col-auto{grid-column:auto}.xl\:col-span-1{grid-column:span 1/span 1}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-7{grid-column:span 7/span 7}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:col-span-10{grid-column:span 10/span 10}.xl\:col-span-11{grid-column:span 11/span 11}.xl\:col-span-12{grid-column:span 12/span 12}.xl\:col-span-full{grid-column:1/-1}.xl\:col-start-1{grid-column-start:1}.xl\:col-start-2{grid-column-start:2}.xl\:col-start-3{grid-column-start:3}.xl\:col-start-4{grid-column-start:4}.xl\:col-start-5{grid-column-start:5}.xl\:col-start-6{grid-column-start:6}.xl\:col-start-7{grid-column-start:7}.xl\:col-start-8{grid-column-start:8}.xl\:col-start-9{grid-column-start:9}.xl\:col-start-10{grid-column-start:10}.xl\:col-start-11{grid-column-start:11}.xl\:col-start-12{grid-column-start:12}.xl\:col-start-13{grid-column-start:13}.xl\:col-start-auto{grid-column-start:auto}.xl\:col-end-1{grid-column-end:1}.xl\:col-end-2{grid-column-end:2}.xl\:col-end-3{grid-column-end:3}.xl\:col-end-4{grid-column-end:4}.xl\:col-end-5{grid-column-end:5}.xl\:col-end-6{grid-column-end:6}.xl\:col-end-7{grid-column-end:7}.xl\:col-end-8{grid-column-end:8}.xl\:col-end-9{grid-column-end:9}.xl\:col-end-10{grid-column-end:10}.xl\:col-end-11{grid-column-end:11}.xl\:col-end-12{grid-column-end:12}.xl\:col-end-13{grid-column-end:13}.xl\:col-end-auto{grid-column-end:auto}.xl\:grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xl\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xl\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xl\:grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xl\:grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.xl\:grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.xl\:grid-rows-none{grid-template-rows:none}.xl\:auto-rows-auto{grid-auto-rows:auto}.xl\:auto-rows-min{grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content}.xl\:auto-rows-max{grid-auto-rows:-webkit-max-content;grid-auto-rows:max-content}.xl\:auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.xl\:row-auto{grid-row:auto}.xl\:row-span-1{grid-row:span 1/span 1}.xl\:row-span-2{grid-row:span 2/span 2}.xl\:row-span-3{grid-row:span 3/span 3}.xl\:row-span-4{grid-row:span 4/span 4}.xl\:row-span-5{grid-row:span 5/span 5}.xl\:row-span-6{grid-row:span 6/span 6}.xl\:row-span-full{grid-row:1/-1}.xl\:row-start-1{grid-row-start:1}.xl\:row-start-2{grid-row-start:2}.xl\:row-start-3{grid-row-start:3}.xl\:row-start-4{grid-row-start:4}.xl\:row-start-5{grid-row-start:5}.xl\:row-start-6{grid-row-start:6}.xl\:row-start-7{grid-row-start:7}.xl\:row-start-auto{grid-row-start:auto}.xl\:row-end-1{grid-row-end:1}.xl\:row-end-2{grid-row-end:2}.xl\:row-end-3{grid-row-end:3}.xl\:row-end-4{grid-row-end:4}.xl\:row-end-5{grid-row-end:5}.xl\:row-end-6{grid-row-end:6}.xl\:row-end-7{grid-row-end:7}.xl\:row-end-auto{grid-row-end:auto}.xl\:transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.xl\:transform-none{transform:none}.xl\:origin-center{transform-origin:center}.xl\:origin-top{transform-origin:top}.xl\:origin-top-right{transform-origin:top right}.xl\:origin-right{transform-origin:right}.xl\:origin-bottom-right{transform-origin:bottom right}.xl\:origin-bottom{transform-origin:bottom}.xl\:origin-bottom-left{transform-origin:bottom left}.xl\:origin-left{transform-origin:left}.xl\:origin-top-left{transform-origin:top left}.xl\:scale-0{--transform-scale-x:0;--transform-scale-y:0}.xl\:scale-50{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:scale-75{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:scale-90{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:scale-100{--transform-scale-x:1;--transform-scale-y:1}.xl\:scale-105{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:scale-110{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:scale-125{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:scale-150{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:scale-x-0{--transform-scale-x:0}.xl\:scale-x-50{--transform-scale-x:.5}.xl\:scale-x-75{--transform-scale-x:.75}.xl\:scale-x-90{--transform-scale-x:.9}.xl\:scale-x-95{--transform-scale-x:.95}.xl\:scale-x-100{--transform-scale-x:1}.xl\:scale-x-105{--transform-scale-x:1.05}.xl\:scale-x-110{--transform-scale-x:1.1}.xl\:scale-x-125{--transform-scale-x:1.25}.xl\:scale-x-150{--transform-scale-x:1.5}.xl\:scale-y-0{--transform-scale-y:0}.xl\:scale-y-50{--transform-scale-y:.5}.xl\:scale-y-75{--transform-scale-y:.75}.xl\:scale-y-90{--transform-scale-y:.9}.xl\:scale-y-95{--transform-scale-y:.95}.xl\:scale-y-100{--transform-scale-y:1}.xl\:scale-y-105{--transform-scale-y:1.05}.xl\:scale-y-110{--transform-scale-y:1.1}.xl\:scale-y-125{--transform-scale-y:1.25}.xl\:scale-y-150{--transform-scale-y:1.5}.xl\:hover\:scale-0:hover{--transform-scale-x:0;--transform-scale-y:0}.xl\:hover\:scale-50:hover{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:hover\:scale-75:hover{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:hover\:scale-90:hover{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:hover\:scale-95:hover{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:hover\:scale-100:hover{--transform-scale-x:1;--transform-scale-y:1}.xl\:hover\:scale-105:hover{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:hover\:scale-110:hover{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:hover\:scale-125:hover{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:hover\:scale-150:hover{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:hover\:scale-x-0:hover{--transform-scale-x:0}.xl\:hover\:scale-x-50:hover{--transform-scale-x:.5}.xl\:hover\:scale-x-75:hover{--transform-scale-x:.75}.xl\:hover\:scale-x-90:hover{--transform-scale-x:.9}.xl\:hover\:scale-x-95:hover{--transform-scale-x:.95}.xl\:hover\:scale-x-100:hover{--transform-scale-x:1}.xl\:hover\:scale-x-105:hover{--transform-scale-x:1.05}.xl\:hover\:scale-x-110:hover{--transform-scale-x:1.1}.xl\:hover\:scale-x-125:hover{--transform-scale-x:1.25}.xl\:hover\:scale-x-150:hover{--transform-scale-x:1.5}.xl\:hover\:scale-y-0:hover{--transform-scale-y:0}.xl\:hover\:scale-y-50:hover{--transform-scale-y:.5}.xl\:hover\:scale-y-75:hover{--transform-scale-y:.75}.xl\:hover\:scale-y-90:hover{--transform-scale-y:.9}.xl\:hover\:scale-y-95:hover{--transform-scale-y:.95}.xl\:hover\:scale-y-100:hover{--transform-scale-y:1}.xl\:hover\:scale-y-105:hover{--transform-scale-y:1.05}.xl\:hover\:scale-y-110:hover{--transform-scale-y:1.1}.xl\:hover\:scale-y-125:hover{--transform-scale-y:1.25}.xl\:hover\:scale-y-150:hover{--transform-scale-y:1.5}.xl\:focus\:scale-0:focus{--transform-scale-x:0;--transform-scale-y:0}.xl\:focus\:scale-50:focus{--transform-scale-x:.5;--transform-scale-y:.5}.xl\:focus\:scale-75:focus{--transform-scale-x:.75;--transform-scale-y:.75}.xl\:focus\:scale-90:focus{--transform-scale-x:.9;--transform-scale-y:.9}.xl\:focus\:scale-95:focus{--transform-scale-x:.95;--transform-scale-y:.95}.xl\:focus\:scale-100:focus{--transform-scale-x:1;--transform-scale-y:1}.xl\:focus\:scale-105:focus{--transform-scale-x:1.05;--transform-scale-y:1.05}.xl\:focus\:scale-110:focus{--transform-scale-x:1.1;--transform-scale-y:1.1}.xl\:focus\:scale-125:focus{--transform-scale-x:1.25;--transform-scale-y:1.25}.xl\:focus\:scale-150:focus{--transform-scale-x:1.5;--transform-scale-y:1.5}.xl\:focus\:scale-x-0:focus{--transform-scale-x:0}.xl\:focus\:scale-x-50:focus{--transform-scale-x:.5}.xl\:focus\:scale-x-75:focus{--transform-scale-x:.75}.xl\:focus\:scale-x-90:focus{--transform-scale-x:.9}.xl\:focus\:scale-x-95:focus{--transform-scale-x:.95}.xl\:focus\:scale-x-100:focus{--transform-scale-x:1}.xl\:focus\:scale-x-105:focus{--transform-scale-x:1.05}.xl\:focus\:scale-x-110:focus{--transform-scale-x:1.1}.xl\:focus\:scale-x-125:focus{--transform-scale-x:1.25}.xl\:focus\:scale-x-150:focus{--transform-scale-x:1.5}.xl\:focus\:scale-y-0:focus{--transform-scale-y:0}.xl\:focus\:scale-y-50:focus{--transform-scale-y:.5}.xl\:focus\:scale-y-75:focus{--transform-scale-y:.75}.xl\:focus\:scale-y-90:focus{--transform-scale-y:.9}.xl\:focus\:scale-y-95:focus{--transform-scale-y:.95}.xl\:focus\:scale-y-100:focus{--transform-scale-y:1}.xl\:focus\:scale-y-105:focus{--transform-scale-y:1.05}.xl\:focus\:scale-y-110:focus{--transform-scale-y:1.1}.xl\:focus\:scale-y-125:focus{--transform-scale-y:1.25}.xl\:focus\:scale-y-150:focus{--transform-scale-y:1.5}.xl\:rotate-0{--transform-rotate:0}.xl\:rotate-1{--transform-rotate:1deg}.xl\:rotate-2{--transform-rotate:2deg}.xl\:rotate-3{--transform-rotate:3deg}.xl\:rotate-6{--transform-rotate:6deg}.xl\:rotate-12{--transform-rotate:12deg}.xl\:rotate-45{--transform-rotate:45deg}.xl\:rotate-90{--transform-rotate:90deg}.xl\:rotate-180{--transform-rotate:180deg}.xl\:-rotate-180{--transform-rotate:-180deg}.xl\:-rotate-90{--transform-rotate:-90deg}.xl\:-rotate-45{--transform-rotate:-45deg}.xl\:-rotate-12{--transform-rotate:-12deg}.xl\:-rotate-6{--transform-rotate:-6deg}.xl\:-rotate-3{--transform-rotate:-3deg}.xl\:-rotate-2{--transform-rotate:-2deg}.xl\:-rotate-1{--transform-rotate:-1deg}.xl\:hover\:rotate-0:hover{--transform-rotate:0}.xl\:hover\:rotate-1:hover{--transform-rotate:1deg}.xl\:hover\:rotate-2:hover{--transform-rotate:2deg}.xl\:hover\:rotate-3:hover{--transform-rotate:3deg}.xl\:hover\:rotate-6:hover{--transform-rotate:6deg}.xl\:hover\:rotate-12:hover{--transform-rotate:12deg}.xl\:hover\:rotate-45:hover{--transform-rotate:45deg}.xl\:hover\:rotate-90:hover{--transform-rotate:90deg}.xl\:hover\:rotate-180:hover{--transform-rotate:180deg}.xl\:hover\:-rotate-180:hover{--transform-rotate:-180deg}.xl\:hover\:-rotate-90:hover{--transform-rotate:-90deg}.xl\:hover\:-rotate-45:hover{--transform-rotate:-45deg}.xl\:hover\:-rotate-12:hover{--transform-rotate:-12deg}.xl\:hover\:-rotate-6:hover{--transform-rotate:-6deg}.xl\:hover\:-rotate-3:hover{--transform-rotate:-3deg}.xl\:hover\:-rotate-2:hover{--transform-rotate:-2deg}.xl\:hover\:-rotate-1:hover{--transform-rotate:-1deg}.xl\:focus\:rotate-0:focus{--transform-rotate:0}.xl\:focus\:rotate-1:focus{--transform-rotate:1deg}.xl\:focus\:rotate-2:focus{--transform-rotate:2deg}.xl\:focus\:rotate-3:focus{--transform-rotate:3deg}.xl\:focus\:rotate-6:focus{--transform-rotate:6deg}.xl\:focus\:rotate-12:focus{--transform-rotate:12deg}.xl\:focus\:rotate-45:focus{--transform-rotate:45deg}.xl\:focus\:rotate-90:focus{--transform-rotate:90deg}.xl\:focus\:rotate-180:focus{--transform-rotate:180deg}.xl\:focus\:-rotate-180:focus{--transform-rotate:-180deg}.xl\:focus\:-rotate-90:focus{--transform-rotate:-90deg}.xl\:focus\:-rotate-45:focus{--transform-rotate:-45deg}.xl\:focus\:-rotate-12:focus{--transform-rotate:-12deg}.xl\:focus\:-rotate-6:focus{--transform-rotate:-6deg}.xl\:focus\:-rotate-3:focus{--transform-rotate:-3deg}.xl\:focus\:-rotate-2:focus{--transform-rotate:-2deg}.xl\:focus\:-rotate-1:focus{--transform-rotate:-1deg}.xl\:translate-x-0{--transform-translate-x:0}.xl\:translate-x-1{--transform-translate-x:0.25rem}.xl\:translate-x-2{--transform-translate-x:0.5rem}.xl\:translate-x-3{--transform-translate-x:0.75rem}.xl\:translate-x-4{--transform-translate-x:1rem}.xl\:translate-x-5{--transform-translate-x:1.25rem}.xl\:translate-x-6{--transform-translate-x:1.5rem}.xl\:translate-x-8{--transform-translate-x:2rem}.xl\:translate-x-10{--transform-translate-x:2.5rem}.xl\:translate-x-12{--transform-translate-x:3rem}.xl\:translate-x-16{--transform-translate-x:4rem}.xl\:translate-x-20{--transform-translate-x:5rem}.xl\:translate-x-24{--transform-translate-x:6rem}.xl\:translate-x-32{--transform-translate-x:8rem}.xl\:translate-x-40{--transform-translate-x:10rem}.xl\:translate-x-48{--transform-translate-x:12rem}.xl\:translate-x-56{--transform-translate-x:14rem}.xl\:translate-x-64{--transform-translate-x:16rem}.xl\:translate-x-px{--transform-translate-x:1px}.xl\:-translate-x-1{--transform-translate-x:-0.25rem}.xl\:-translate-x-2{--transform-translate-x:-0.5rem}.xl\:-translate-x-3{--transform-translate-x:-0.75rem}.xl\:-translate-x-4{--transform-translate-x:-1rem}.xl\:-translate-x-5{--transform-translate-x:-1.25rem}.xl\:-translate-x-6{--transform-translate-x:-1.5rem}.xl\:-translate-x-8{--transform-translate-x:-2rem}.xl\:-translate-x-10{--transform-translate-x:-2.5rem}.xl\:-translate-x-12{--transform-translate-x:-3rem}.xl\:-translate-x-16{--transform-translate-x:-4rem}.xl\:-translate-x-20{--transform-translate-x:-5rem}.xl\:-translate-x-24{--transform-translate-x:-6rem}.xl\:-translate-x-32{--transform-translate-x:-8rem}.xl\:-translate-x-40{--transform-translate-x:-10rem}.xl\:-translate-x-48{--transform-translate-x:-12rem}.xl\:-translate-x-56{--transform-translate-x:-14rem}.xl\:-translate-x-64{--transform-translate-x:-16rem}.xl\:-translate-x-px{--transform-translate-x:-1px}.xl\:-translate-x-full{--transform-translate-x:-100%}.xl\:-translate-x-1\/2{--transform-translate-x:-50%}.xl\:translate-x-1\/2{--transform-translate-x:50%}.xl\:translate-x-full{--transform-translate-x:100%}.xl\:translate-y-0{--transform-translate-y:0}.xl\:translate-y-1{--transform-translate-y:0.25rem}.xl\:translate-y-2{--transform-translate-y:0.5rem}.xl\:translate-y-3{--transform-translate-y:0.75rem}.xl\:translate-y-4{--transform-translate-y:1rem}.xl\:translate-y-5{--transform-translate-y:1.25rem}.xl\:translate-y-6{--transform-translate-y:1.5rem}.xl\:translate-y-8{--transform-translate-y:2rem}.xl\:translate-y-10{--transform-translate-y:2.5rem}.xl\:translate-y-12{--transform-translate-y:3rem}.xl\:translate-y-16{--transform-translate-y:4rem}.xl\:translate-y-20{--transform-translate-y:5rem}.xl\:translate-y-24{--transform-translate-y:6rem}.xl\:translate-y-32{--transform-translate-y:8rem}.xl\:translate-y-40{--transform-translate-y:10rem}.xl\:translate-y-48{--transform-translate-y:12rem}.xl\:translate-y-56{--transform-translate-y:14rem}.xl\:translate-y-64{--transform-translate-y:16rem}.xl\:translate-y-px{--transform-translate-y:1px}.xl\:-translate-y-1{--transform-translate-y:-0.25rem}.xl\:-translate-y-2{--transform-translate-y:-0.5rem}.xl\:-translate-y-3{--transform-translate-y:-0.75rem}.xl\:-translate-y-4{--transform-translate-y:-1rem}.xl\:-translate-y-5{--transform-translate-y:-1.25rem}.xl\:-translate-y-6{--transform-translate-y:-1.5rem}.xl\:-translate-y-8{--transform-translate-y:-2rem}.xl\:-translate-y-10{--transform-translate-y:-2.5rem}.xl\:-translate-y-12{--transform-translate-y:-3rem}.xl\:-translate-y-16{--transform-translate-y:-4rem}.xl\:-translate-y-20{--transform-translate-y:-5rem}.xl\:-translate-y-24{--transform-translate-y:-6rem}.xl\:-translate-y-32{--transform-translate-y:-8rem}.xl\:-translate-y-40{--transform-translate-y:-10rem}.xl\:-translate-y-48{--transform-translate-y:-12rem}.xl\:-translate-y-56{--transform-translate-y:-14rem}.xl\:-translate-y-64{--transform-translate-y:-16rem}.xl\:-translate-y-px{--transform-translate-y:-1px}.xl\:-translate-y-full{--transform-translate-y:-100%}.xl\:-translate-y-1\/2{--transform-translate-y:-50%}.xl\:translate-y-1\/2{--transform-translate-y:50%}.xl\:translate-y-full{--transform-translate-y:100%}.xl\:hover\:translate-x-0:hover{--transform-translate-x:0}.xl\:hover\:translate-x-1:hover{--transform-translate-x:0.25rem}.xl\:hover\:translate-x-2:hover{--transform-translate-x:0.5rem}.xl\:hover\:translate-x-3:hover{--transform-translate-x:0.75rem}.xl\:hover\:translate-x-4:hover{--transform-translate-x:1rem}.xl\:hover\:translate-x-5:hover{--transform-translate-x:1.25rem}.xl\:hover\:translate-x-6:hover{--transform-translate-x:1.5rem}.xl\:hover\:translate-x-8:hover{--transform-translate-x:2rem}.xl\:hover\:translate-x-10:hover{--transform-translate-x:2.5rem}.xl\:hover\:translate-x-12:hover{--transform-translate-x:3rem}.xl\:hover\:translate-x-16:hover{--transform-translate-x:4rem}.xl\:hover\:translate-x-20:hover{--transform-translate-x:5rem}.xl\:hover\:translate-x-24:hover{--transform-translate-x:6rem}.xl\:hover\:translate-x-32:hover{--transform-translate-x:8rem}.xl\:hover\:translate-x-40:hover{--transform-translate-x:10rem}.xl\:hover\:translate-x-48:hover{--transform-translate-x:12rem}.xl\:hover\:translate-x-56:hover{--transform-translate-x:14rem}.xl\:hover\:translate-x-64:hover{--transform-translate-x:16rem}.xl\:hover\:translate-x-px:hover{--transform-translate-x:1px}.xl\:hover\:-translate-x-1:hover{--transform-translate-x:-0.25rem}.xl\:hover\:-translate-x-2:hover{--transform-translate-x:-0.5rem}.xl\:hover\:-translate-x-3:hover{--transform-translate-x:-0.75rem}.xl\:hover\:-translate-x-4:hover{--transform-translate-x:-1rem}.xl\:hover\:-translate-x-5:hover{--transform-translate-x:-1.25rem}.xl\:hover\:-translate-x-6:hover{--transform-translate-x:-1.5rem}.xl\:hover\:-translate-x-8:hover{--transform-translate-x:-2rem}.xl\:hover\:-translate-x-10:hover{--transform-translate-x:-2.5rem}.xl\:hover\:-translate-x-12:hover{--transform-translate-x:-3rem}.xl\:hover\:-translate-x-16:hover{--transform-translate-x:-4rem}.xl\:hover\:-translate-x-20:hover{--transform-translate-x:-5rem}.xl\:hover\:-translate-x-24:hover{--transform-translate-x:-6rem}.xl\:hover\:-translate-x-32:hover{--transform-translate-x:-8rem}.xl\:hover\:-translate-x-40:hover{--transform-translate-x:-10rem}.xl\:hover\:-translate-x-48:hover{--transform-translate-x:-12rem}.xl\:hover\:-translate-x-56:hover{--transform-translate-x:-14rem}.xl\:hover\:-translate-x-64:hover{--transform-translate-x:-16rem}.xl\:hover\:-translate-x-px:hover{--transform-translate-x:-1px}.xl\:hover\:-translate-x-full:hover{--transform-translate-x:-100%}.xl\:hover\:-translate-x-1\/2:hover{--transform-translate-x:-50%}.xl\:hover\:translate-x-1\/2:hover{--transform-translate-x:50%}.xl\:hover\:translate-x-full:hover{--transform-translate-x:100%}.xl\:hover\:translate-y-0:hover{--transform-translate-y:0}.xl\:hover\:translate-y-1:hover{--transform-translate-y:0.25rem}.xl\:hover\:translate-y-2:hover{--transform-translate-y:0.5rem}.xl\:hover\:translate-y-3:hover{--transform-translate-y:0.75rem}.xl\:hover\:translate-y-4:hover{--transform-translate-y:1rem}.xl\:hover\:translate-y-5:hover{--transform-translate-y:1.25rem}.xl\:hover\:translate-y-6:hover{--transform-translate-y:1.5rem}.xl\:hover\:translate-y-8:hover{--transform-translate-y:2rem}.xl\:hover\:translate-y-10:hover{--transform-translate-y:2.5rem}.xl\:hover\:translate-y-12:hover{--transform-translate-y:3rem}.xl\:hover\:translate-y-16:hover{--transform-translate-y:4rem}.xl\:hover\:translate-y-20:hover{--transform-translate-y:5rem}.xl\:hover\:translate-y-24:hover{--transform-translate-y:6rem}.xl\:hover\:translate-y-32:hover{--transform-translate-y:8rem}.xl\:hover\:translate-y-40:hover{--transform-translate-y:10rem}.xl\:hover\:translate-y-48:hover{--transform-translate-y:12rem}.xl\:hover\:translate-y-56:hover{--transform-translate-y:14rem}.xl\:hover\:translate-y-64:hover{--transform-translate-y:16rem}.xl\:hover\:translate-y-px:hover{--transform-translate-y:1px}.xl\:hover\:-translate-y-1:hover{--transform-translate-y:-0.25rem}.xl\:hover\:-translate-y-2:hover{--transform-translate-y:-0.5rem}.xl\:hover\:-translate-y-3:hover{--transform-translate-y:-0.75rem}.xl\:hover\:-translate-y-4:hover{--transform-translate-y:-1rem}.xl\:hover\:-translate-y-5:hover{--transform-translate-y:-1.25rem}.xl\:hover\:-translate-y-6:hover{--transform-translate-y:-1.5rem}.xl\:hover\:-translate-y-8:hover{--transform-translate-y:-2rem}.xl\:hover\:-translate-y-10:hover{--transform-translate-y:-2.5rem}.xl\:hover\:-translate-y-12:hover{--transform-translate-y:-3rem}.xl\:hover\:-translate-y-16:hover{--transform-translate-y:-4rem}.xl\:hover\:-translate-y-20:hover{--transform-translate-y:-5rem}.xl\:hover\:-translate-y-24:hover{--transform-translate-y:-6rem}.xl\:hover\:-translate-y-32:hover{--transform-translate-y:-8rem}.xl\:hover\:-translate-y-40:hover{--transform-translate-y:-10rem}.xl\:hover\:-translate-y-48:hover{--transform-translate-y:-12rem}.xl\:hover\:-translate-y-56:hover{--transform-translate-y:-14rem}.xl\:hover\:-translate-y-64:hover{--transform-translate-y:-16rem}.xl\:hover\:-translate-y-px:hover{--transform-translate-y:-1px}.xl\:hover\:-translate-y-full:hover{--transform-translate-y:-100%}.xl\:hover\:-translate-y-1\/2:hover{--transform-translate-y:-50%}.xl\:hover\:translate-y-1\/2:hover{--transform-translate-y:50%}.xl\:hover\:translate-y-full:hover{--transform-translate-y:100%}.xl\:focus\:translate-x-0:focus{--transform-translate-x:0}.xl\:focus\:translate-x-1:focus{--transform-translate-x:0.25rem}.xl\:focus\:translate-x-2:focus{--transform-translate-x:0.5rem}.xl\:focus\:translate-x-3:focus{--transform-translate-x:0.75rem}.xl\:focus\:translate-x-4:focus{--transform-translate-x:1rem}.xl\:focus\:translate-x-5:focus{--transform-translate-x:1.25rem}.xl\:focus\:translate-x-6:focus{--transform-translate-x:1.5rem}.xl\:focus\:translate-x-8:focus{--transform-translate-x:2rem}.xl\:focus\:translate-x-10:focus{--transform-translate-x:2.5rem}.xl\:focus\:translate-x-12:focus{--transform-translate-x:3rem}.xl\:focus\:translate-x-16:focus{--transform-translate-x:4rem}.xl\:focus\:translate-x-20:focus{--transform-translate-x:5rem}.xl\:focus\:translate-x-24:focus{--transform-translate-x:6rem}.xl\:focus\:translate-x-32:focus{--transform-translate-x:8rem}.xl\:focus\:translate-x-40:focus{--transform-translate-x:10rem}.xl\:focus\:translate-x-48:focus{--transform-translate-x:12rem}.xl\:focus\:translate-x-56:focus{--transform-translate-x:14rem}.xl\:focus\:translate-x-64:focus{--transform-translate-x:16rem}.xl\:focus\:translate-x-px:focus{--transform-translate-x:1px}.xl\:focus\:-translate-x-1:focus{--transform-translate-x:-0.25rem}.xl\:focus\:-translate-x-2:focus{--transform-translate-x:-0.5rem}.xl\:focus\:-translate-x-3:focus{--transform-translate-x:-0.75rem}.xl\:focus\:-translate-x-4:focus{--transform-translate-x:-1rem}.xl\:focus\:-translate-x-5:focus{--transform-translate-x:-1.25rem}.xl\:focus\:-translate-x-6:focus{--transform-translate-x:-1.5rem}.xl\:focus\:-translate-x-8:focus{--transform-translate-x:-2rem}.xl\:focus\:-translate-x-10:focus{--transform-translate-x:-2.5rem}.xl\:focus\:-translate-x-12:focus{--transform-translate-x:-3rem}.xl\:focus\:-translate-x-16:focus{--transform-translate-x:-4rem}.xl\:focus\:-translate-x-20:focus{--transform-translate-x:-5rem}.xl\:focus\:-translate-x-24:focus{--transform-translate-x:-6rem}.xl\:focus\:-translate-x-32:focus{--transform-translate-x:-8rem}.xl\:focus\:-translate-x-40:focus{--transform-translate-x:-10rem}.xl\:focus\:-translate-x-48:focus{--transform-translate-x:-12rem}.xl\:focus\:-translate-x-56:focus{--transform-translate-x:-14rem}.xl\:focus\:-translate-x-64:focus{--transform-translate-x:-16rem}.xl\:focus\:-translate-x-px:focus{--transform-translate-x:-1px}.xl\:focus\:-translate-x-full:focus{--transform-translate-x:-100%}.xl\:focus\:-translate-x-1\/2:focus{--transform-translate-x:-50%}.xl\:focus\:translate-x-1\/2:focus{--transform-translate-x:50%}.xl\:focus\:translate-x-full:focus{--transform-translate-x:100%}.xl\:focus\:translate-y-0:focus{--transform-translate-y:0}.xl\:focus\:translate-y-1:focus{--transform-translate-y:0.25rem}.xl\:focus\:translate-y-2:focus{--transform-translate-y:0.5rem}.xl\:focus\:translate-y-3:focus{--transform-translate-y:0.75rem}.xl\:focus\:translate-y-4:focus{--transform-translate-y:1rem}.xl\:focus\:translate-y-5:focus{--transform-translate-y:1.25rem}.xl\:focus\:translate-y-6:focus{--transform-translate-y:1.5rem}.xl\:focus\:translate-y-8:focus{--transform-translate-y:2rem}.xl\:focus\:translate-y-10:focus{--transform-translate-y:2.5rem}.xl\:focus\:translate-y-12:focus{--transform-translate-y:3rem}.xl\:focus\:translate-y-16:focus{--transform-translate-y:4rem}.xl\:focus\:translate-y-20:focus{--transform-translate-y:5rem}.xl\:focus\:translate-y-24:focus{--transform-translate-y:6rem}.xl\:focus\:translate-y-32:focus{--transform-translate-y:8rem}.xl\:focus\:translate-y-40:focus{--transform-translate-y:10rem}.xl\:focus\:translate-y-48:focus{--transform-translate-y:12rem}.xl\:focus\:translate-y-56:focus{--transform-translate-y:14rem}.xl\:focus\:translate-y-64:focus{--transform-translate-y:16rem}.xl\:focus\:translate-y-px:focus{--transform-translate-y:1px}.xl\:focus\:-translate-y-1:focus{--transform-translate-y:-0.25rem}.xl\:focus\:-translate-y-2:focus{--transform-translate-y:-0.5rem}.xl\:focus\:-translate-y-3:focus{--transform-translate-y:-0.75rem}.xl\:focus\:-translate-y-4:focus{--transform-translate-y:-1rem}.xl\:focus\:-translate-y-5:focus{--transform-translate-y:-1.25rem}.xl\:focus\:-translate-y-6:focus{--transform-translate-y:-1.5rem}.xl\:focus\:-translate-y-8:focus{--transform-translate-y:-2rem}.xl\:focus\:-translate-y-10:focus{--transform-translate-y:-2.5rem}.xl\:focus\:-translate-y-12:focus{--transform-translate-y:-3rem}.xl\:focus\:-translate-y-16:focus{--transform-translate-y:-4rem}.xl\:focus\:-translate-y-20:focus{--transform-translate-y:-5rem}.xl\:focus\:-translate-y-24:focus{--transform-translate-y:-6rem}.xl\:focus\:-translate-y-32:focus{--transform-translate-y:-8rem}.xl\:focus\:-translate-y-40:focus{--transform-translate-y:-10rem}.xl\:focus\:-translate-y-48:focus{--transform-translate-y:-12rem}.xl\:focus\:-translate-y-56:focus{--transform-translate-y:-14rem}.xl\:focus\:-translate-y-64:focus{--transform-translate-y:-16rem}.xl\:focus\:-translate-y-px:focus{--transform-translate-y:-1px}.xl\:focus\:-translate-y-full:focus{--transform-translate-y:-100%}.xl\:focus\:-translate-y-1\/2:focus{--transform-translate-y:-50%}.xl\:focus\:translate-y-1\/2:focus{--transform-translate-y:50%}.xl\:focus\:translate-y-full:focus{--transform-translate-y:100%}.xl\:skew-x-0{--transform-skew-x:0}.xl\:skew-x-1{--transform-skew-x:1deg}.xl\:skew-x-2{--transform-skew-x:2deg}.xl\:skew-x-3{--transform-skew-x:3deg}.xl\:skew-x-6{--transform-skew-x:6deg}.xl\:skew-x-12{--transform-skew-x:12deg}.xl\:-skew-x-12{--transform-skew-x:-12deg}.xl\:-skew-x-6{--transform-skew-x:-6deg}.xl\:-skew-x-3{--transform-skew-x:-3deg}.xl\:-skew-x-2{--transform-skew-x:-2deg}.xl\:-skew-x-1{--transform-skew-x:-1deg}.xl\:skew-y-0{--transform-skew-y:0}.xl\:skew-y-1{--transform-skew-y:1deg}.xl\:skew-y-2{--transform-skew-y:2deg}.xl\:skew-y-3{--transform-skew-y:3deg}.xl\:skew-y-6{--transform-skew-y:6deg}.xl\:skew-y-12{--transform-skew-y:12deg}.xl\:-skew-y-12{--transform-skew-y:-12deg}.xl\:-skew-y-6{--transform-skew-y:-6deg}.xl\:-skew-y-3{--transform-skew-y:-3deg}.xl\:-skew-y-2{--transform-skew-y:-2deg}.xl\:-skew-y-1{--transform-skew-y:-1deg}.xl\:hover\:skew-x-0:hover{--transform-skew-x:0}.xl\:hover\:skew-x-1:hover{--transform-skew-x:1deg}.xl\:hover\:skew-x-2:hover{--transform-skew-x:2deg}.xl\:hover\:skew-x-3:hover{--transform-skew-x:3deg}.xl\:hover\:skew-x-6:hover{--transform-skew-x:6deg}.xl\:hover\:skew-x-12:hover{--transform-skew-x:12deg}.xl\:hover\:-skew-x-12:hover{--transform-skew-x:-12deg}.xl\:hover\:-skew-x-6:hover{--transform-skew-x:-6deg}.xl\:hover\:-skew-x-3:hover{--transform-skew-x:-3deg}.xl\:hover\:-skew-x-2:hover{--transform-skew-x:-2deg}.xl\:hover\:-skew-x-1:hover{--transform-skew-x:-1deg}.xl\:hover\:skew-y-0:hover{--transform-skew-y:0}.xl\:hover\:skew-y-1:hover{--transform-skew-y:1deg}.xl\:hover\:skew-y-2:hover{--transform-skew-y:2deg}.xl\:hover\:skew-y-3:hover{--transform-skew-y:3deg}.xl\:hover\:skew-y-6:hover{--transform-skew-y:6deg}.xl\:hover\:skew-y-12:hover{--transform-skew-y:12deg}.xl\:hover\:-skew-y-12:hover{--transform-skew-y:-12deg}.xl\:hover\:-skew-y-6:hover{--transform-skew-y:-6deg}.xl\:hover\:-skew-y-3:hover{--transform-skew-y:-3deg}.xl\:hover\:-skew-y-2:hover{--transform-skew-y:-2deg}.xl\:hover\:-skew-y-1:hover{--transform-skew-y:-1deg}.xl\:focus\:skew-x-0:focus{--transform-skew-x:0}.xl\:focus\:skew-x-1:focus{--transform-skew-x:1deg}.xl\:focus\:skew-x-2:focus{--transform-skew-x:2deg}.xl\:focus\:skew-x-3:focus{--transform-skew-x:3deg}.xl\:focus\:skew-x-6:focus{--transform-skew-x:6deg}.xl\:focus\:skew-x-12:focus{--transform-skew-x:12deg}.xl\:focus\:-skew-x-12:focus{--transform-skew-x:-12deg}.xl\:focus\:-skew-x-6:focus{--transform-skew-x:-6deg}.xl\:focus\:-skew-x-3:focus{--transform-skew-x:-3deg}.xl\:focus\:-skew-x-2:focus{--transform-skew-x:-2deg}.xl\:focus\:-skew-x-1:focus{--transform-skew-x:-1deg}.xl\:focus\:skew-y-0:focus{--transform-skew-y:0}.xl\:focus\:skew-y-1:focus{--transform-skew-y:1deg}.xl\:focus\:skew-y-2:focus{--transform-skew-y:2deg}.xl\:focus\:skew-y-3:focus{--transform-skew-y:3deg}.xl\:focus\:skew-y-6:focus{--transform-skew-y:6deg}.xl\:focus\:skew-y-12:focus{--transform-skew-y:12deg}.xl\:focus\:-skew-y-12:focus{--transform-skew-y:-12deg}.xl\:focus\:-skew-y-6:focus{--transform-skew-y:-6deg}.xl\:focus\:-skew-y-3:focus{--transform-skew-y:-3deg}.xl\:focus\:-skew-y-2:focus{--transform-skew-y:-2deg}.xl\:focus\:-skew-y-1:focus{--transform-skew-y:-1deg}.xl\:transition-none{transition-property:none}.xl\:transition-all{transition-property:all}.xl\:transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform}.xl\:transition-colors{transition-property:background-color,border-color,color,fill,stroke}.xl\:transition-opacity{transition-property:opacity}.xl\:transition-shadow{transition-property:box-shadow}.xl\:transition-transform{transition-property:transform}.xl\:ease-linear{transition-timing-function:linear}.xl\:ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.xl\:ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.xl\:ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.xl\:duration-75{transition-duration:75ms}.xl\:duration-100{transition-duration:.1s}.xl\:duration-150{transition-duration:150ms}.xl\:duration-200{transition-duration:.2s}.xl\:duration-300{transition-duration:.3s}.xl\:duration-500{transition-duration:.5s}.xl\:duration-700{transition-duration:.7s}.xl\:duration-1000{transition-duration:1s}.xl\:delay-75{transition-delay:75ms}.xl\:delay-100{transition-delay:.1s}.xl\:delay-150{transition-delay:150ms}.xl\:delay-200{transition-delay:.2s}.xl\:delay-300{transition-delay:.3s}.xl\:delay-500{transition-delay:.5s}.xl\:delay-700{transition-delay:.7s}.xl\:delay-1000{transition-delay:1s}.xl\:animate-none{animation:none}.xl\:animate-spin{animation:spin 1s linear infinite}.xl\:animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.xl\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.xl\:animate-bounce{animation:bounce 1s infinite}} \ No newline at end of file diff --git a/test/configCases/css/large/use-style.js b/test/configCases/css/large/use-style.js new file mode 100644 index 00000000000..8f394120676 --- /dev/null +++ b/test/configCases/css/large/use-style.js @@ -0,0 +1,5 @@ +import * as style from "./tailwind.module.css"; + +export default { + placeholder: style["placeholder-gray-700"] +}; diff --git a/test/configCases/css/large/webpack.config.js b/test/configCases/css/large/webpack.config.js new file mode 100644 index 00000000000..544806d3b1b --- /dev/null +++ b/test/configCases/css/large/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "web", + mode: "development", + output: { + uniqueName: "my-app" + }, + experiments: { + css: true + } + }, + { + target: "web", + mode: "production", + performance: false, + experiments: { + css: true + } + } +]; diff --git a/test/configCases/css/local-ident-name/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/local-ident-name/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..385b1d704e7 --- /dev/null +++ b/test/configCases/css/local-ident-name/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,193 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css-btn-info_is-disabled", + "color-red": "--style_module_css-color-red", + "foo": "bar", + "foo_bar": "style_module_css-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css-simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 2`] = ` +Object { + "btn--info_is-disabled_1": "_8ee4d8b938ce15d40534", + "btn-info_is-disabled": "_8ee4d8b938ce15d40534", + "color-red": "--_8ee4d8b938ce15d40534", + "foo": "bar", + "foo_bar": "_8ee4d8b938ce15d40534", + "my-btn-info_is-disabled": "value", + "simple": "_8ee4d8b938ce15d40534", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 3`] = ` +Object { + "btn--info_is-disabled_1": "f0e5e7b8779254ec04d4-btn--info_is-disabled_1", + "btn-info_is-disabled": "f0e5e7b8779254ec04d4-btn-info_is-disabled", + "color-red": "--f0e5e7b8779254ec04d4-color-red", + "foo": "bar", + "foo_bar": "f0e5e7b8779254ec04d4-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "f0e5e7b8779254ec04d4-simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 4`] = ` +Object { + "btn--info_is-disabled_1": "./style.module__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module__btn-info_is-disabled", + "color-red": "--./style.module__color-red", + "foo": "bar", + "foo_bar": "./style.module__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module__simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 5`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css__btn-info_is-disabled", + "color-red": "--./style.module.css__color-red", + "foo": "bar", + "foo_bar": "./style.module.css__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css__simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 6`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css?q#f__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css?q#f__btn-info_is-disabled", + "color-red": "--./style.module.css?q#f__color-red", + "foo": "bar", + "foo_bar": "./style.module.css?q#f__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css?q#f__simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 7`] = ` +Object { + "btn--info_is-disabled_1": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "btn-info_is-disabled": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "color-red": "---style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "foo": "bar", + "foo_bar": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "my-btn-info_is-disabled": "value", + "simple": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 8`] = ` +Object { + "btn--info_is-disabled_1": "d5c602f0c8fdc09fea74-btn--info_is-disabled_1", + "btn-info_is-disabled": "d5c602f0c8fdc09fea74-btn-info_is-disabled", + "color-red": "--d5c602f0c8fdc09fea74-color-red", + "foo": "bar", + "foo_bar": "d5c602f0c8fdc09fea74-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "d5c602f0c8fdc09fea74-simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 9`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css-btn-info_is-disabled", + "color-red": "--style_module_css-color-red", + "foo": "bar", + "foo_bar": "style_module_css-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css-simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 10`] = ` +Object { + "btn--info_is-disabled_1": "_8ee4d8b938ce15d40534", + "btn-info_is-disabled": "_8ee4d8b938ce15d40534", + "color-red": "--_8ee4d8b938ce15d40534", + "foo": "bar", + "foo_bar": "_8ee4d8b938ce15d40534", + "my-btn-info_is-disabled": "value", + "simple": "_8ee4d8b938ce15d40534", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 11`] = ` +Object { + "btn--info_is-disabled_1": "f0e5e7b8779254ec04d4-btn--info_is-disabled_1", + "btn-info_is-disabled": "f0e5e7b8779254ec04d4-btn-info_is-disabled", + "color-red": "--f0e5e7b8779254ec04d4-color-red", + "foo": "bar", + "foo_bar": "f0e5e7b8779254ec04d4-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "f0e5e7b8779254ec04d4-simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 12`] = ` +Object { + "btn--info_is-disabled_1": "./style.module__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module__btn-info_is-disabled", + "color-red": "--./style.module__color-red", + "foo": "bar", + "foo_bar": "./style.module__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module__simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 13`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css__btn-info_is-disabled", + "color-red": "--./style.module.css__color-red", + "foo": "bar", + "foo_bar": "./style.module.css__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css__simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 14`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css?q#f__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css?q#f__btn-info_is-disabled", + "color-red": "--./style.module.css?q#f__color-red", + "foo": "bar", + "foo_bar": "./style.module.css?q#f__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css?q#f__simple", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 15`] = ` +Object { + "btn--info_is-disabled_1": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "btn-info_is-disabled": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "color-red": "---style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "foo": "bar", + "foo_bar": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "my-btn-info_is-disabled": "value", + "simple": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", +} +`; + +exports[`ConfigCacheTestCases css local-ident-name exported tests should have correct local ident for css export locals 16`] = ` +Object { + "btn--info_is-disabled_1": "d5c602f0c8fdc09fea74-btn--info_is-disabled_1", + "btn-info_is-disabled": "d5c602f0c8fdc09fea74-btn-info_is-disabled", + "color-red": "--d5c602f0c8fdc09fea74-color-red", + "foo": "bar", + "foo_bar": "d5c602f0c8fdc09fea74-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "d5c602f0c8fdc09fea74-simple", +} +`; diff --git a/test/configCases/css/local-ident-name/__snapshots__/ConfigTest.snap b/test/configCases/css/local-ident-name/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..54a7b992292 --- /dev/null +++ b/test/configCases/css/local-ident-name/__snapshots__/ConfigTest.snap @@ -0,0 +1,193 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 1`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css-btn-info_is-disabled", + "color-red": "--style_module_css-color-red", + "foo": "bar", + "foo_bar": "style_module_css-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css-simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 2`] = ` +Object { + "btn--info_is-disabled_1": "_8ee4d8b938ce15d40534", + "btn-info_is-disabled": "_8ee4d8b938ce15d40534", + "color-red": "--_8ee4d8b938ce15d40534", + "foo": "bar", + "foo_bar": "_8ee4d8b938ce15d40534", + "my-btn-info_is-disabled": "value", + "simple": "_8ee4d8b938ce15d40534", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 3`] = ` +Object { + "btn--info_is-disabled_1": "f0e5e7b8779254ec04d4-btn--info_is-disabled_1", + "btn-info_is-disabled": "f0e5e7b8779254ec04d4-btn-info_is-disabled", + "color-red": "--f0e5e7b8779254ec04d4-color-red", + "foo": "bar", + "foo_bar": "f0e5e7b8779254ec04d4-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "f0e5e7b8779254ec04d4-simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 4`] = ` +Object { + "btn--info_is-disabled_1": "./style.module__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module__btn-info_is-disabled", + "color-red": "--./style.module__color-red", + "foo": "bar", + "foo_bar": "./style.module__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module__simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 5`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css__btn-info_is-disabled", + "color-red": "--./style.module.css__color-red", + "foo": "bar", + "foo_bar": "./style.module.css__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css__simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 6`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css?q#f__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css?q#f__btn-info_is-disabled", + "color-red": "--./style.module.css?q#f__color-red", + "foo": "bar", + "foo_bar": "./style.module.css?q#f__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css?q#f__simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 7`] = ` +Object { + "btn--info_is-disabled_1": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "btn-info_is-disabled": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "color-red": "---style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "foo": "bar", + "foo_bar": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "my-btn-info_is-disabled": "value", + "simple": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 8`] = ` +Object { + "btn--info_is-disabled_1": "d5c602f0c8fdc09fea74-btn--info_is-disabled_1", + "btn-info_is-disabled": "d5c602f0c8fdc09fea74-btn-info_is-disabled", + "color-red": "--d5c602f0c8fdc09fea74-color-red", + "foo": "bar", + "foo_bar": "d5c602f0c8fdc09fea74-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "d5c602f0c8fdc09fea74-simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 9`] = ` +Object { + "btn--info_is-disabled_1": "style_module_css-btn--info_is-disabled_1", + "btn-info_is-disabled": "style_module_css-btn-info_is-disabled", + "color-red": "--style_module_css-color-red", + "foo": "bar", + "foo_bar": "style_module_css-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "style_module_css-simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 10`] = ` +Object { + "btn--info_is-disabled_1": "_8ee4d8b938ce15d40534", + "btn-info_is-disabled": "_8ee4d8b938ce15d40534", + "color-red": "--_8ee4d8b938ce15d40534", + "foo": "bar", + "foo_bar": "_8ee4d8b938ce15d40534", + "my-btn-info_is-disabled": "value", + "simple": "_8ee4d8b938ce15d40534", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 11`] = ` +Object { + "btn--info_is-disabled_1": "f0e5e7b8779254ec04d4-btn--info_is-disabled_1", + "btn-info_is-disabled": "f0e5e7b8779254ec04d4-btn-info_is-disabled", + "color-red": "--f0e5e7b8779254ec04d4-color-red", + "foo": "bar", + "foo_bar": "f0e5e7b8779254ec04d4-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "f0e5e7b8779254ec04d4-simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 12`] = ` +Object { + "btn--info_is-disabled_1": "./style.module__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module__btn-info_is-disabled", + "color-red": "--./style.module__color-red", + "foo": "bar", + "foo_bar": "./style.module__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module__simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 13`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css__btn-info_is-disabled", + "color-red": "--./style.module.css__color-red", + "foo": "bar", + "foo_bar": "./style.module.css__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css__simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 14`] = ` +Object { + "btn--info_is-disabled_1": "./style.module.css?q#f__btn--info_is-disabled_1", + "btn-info_is-disabled": "./style.module.css?q#f__btn-info_is-disabled", + "color-red": "--./style.module.css?q#f__color-red", + "foo": "bar", + "foo_bar": "./style.module.css?q#f__foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "./style.module.css?q#f__simple", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 15`] = ` +Object { + "btn--info_is-disabled_1": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "btn-info_is-disabled": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "color-red": "---style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "foo": "bar", + "foo_bar": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", + "my-btn-info_is-disabled": "value", + "simple": "-style_module_css_uniqueName-id-contenthash-66ccbbe4ce365e96ef13", +} +`; + +exports[`ConfigTestCases css local-ident-name exported tests should have correct local ident for css export locals 16`] = ` +Object { + "btn--info_is-disabled_1": "d5c602f0c8fdc09fea74-btn--info_is-disabled_1", + "btn-info_is-disabled": "d5c602f0c8fdc09fea74-btn-info_is-disabled", + "color-red": "--d5c602f0c8fdc09fea74-color-red", + "foo": "bar", + "foo_bar": "d5c602f0c8fdc09fea74-foo_bar", + "my-btn-info_is-disabled": "value", + "simple": "d5c602f0c8fdc09fea74-simple", +} +`; diff --git a/test/configCases/css/local-ident-name/index.js b/test/configCases/css/local-ident-name/index.js new file mode 100644 index 00000000000..b26cd6bcfee --- /dev/null +++ b/test/configCases/css/local-ident-name/index.js @@ -0,0 +1,23 @@ +it("should have correct local ident for css export locals", (done) => { + Promise.all([ + import("./style.module.css"), + import("./style.module.css?hash"), + import("./style.module.css?hash-local"), + import("./style.module.css?path-name-local"), + import("./style.module.css?file-local"), + import("./style.module.css?q#f"), + import("./style.module.css?uniqueName-id-contenthash"), + import("./style.module.css?hash-local-custom"), + import("./style.module.less"), + ]).then(([idLocal, hash, hashLocal, pathNameLocal, fileLocal, queryFragment, uniqueNameIdContenthash, less]) => { + expect(idLocal).toMatchSnapshot(); + expect(hash).toMatchSnapshot(); + expect(hashLocal).toMatchSnapshot(); + expect(pathNameLocal).toMatchSnapshot(); + expect(fileLocal).toMatchSnapshot(); + expect(queryFragment).toMatchSnapshot(); + expect(uniqueNameIdContenthash).toMatchSnapshot(); + expect(less).toMatchSnapshot(); + done() + }).catch(done) +}); diff --git a/test/configCases/css/local-ident-name/style.module.css b/test/configCases/css/local-ident-name/style.module.css new file mode 100644 index 00000000000..864a29382e0 --- /dev/null +++ b/test/configCases/css/local-ident-name/style.module.css @@ -0,0 +1,25 @@ +.btn-info_is-disabled { + color: blue; +} + +.btn--info_is-disabled_1 { + color: blue; +} + +.simple { + color: red; +} + +a { + color: yellow; +} + +:export { + foo: bar; + my-btn-info_is-disabled: value; +} + +.foo_bar { + --color-red: red; + color: var(--color-red); +} diff --git a/test/configCases/css/local-ident-name/style.module.less b/test/configCases/css/local-ident-name/style.module.less new file mode 100644 index 00000000000..864a29382e0 --- /dev/null +++ b/test/configCases/css/local-ident-name/style.module.less @@ -0,0 +1,25 @@ +.btn-info_is-disabled { + color: blue; +} + +.btn--info_is-disabled_1 { + color: blue; +} + +.simple { + color: red; +} + +a { + color: yellow; +} + +:export { + foo: bar; + my-btn-info_is-disabled: value; +} + +.foo_bar { + --color-red: red; + color: var(--color-red); +} diff --git a/test/configCases/css/local-ident-name/test.config.js b/test/configCases/css/local-ident-name/test.config.js new file mode 100644 index 00000000000..71be7317df0 --- /dev/null +++ b/test/configCases/css/local-ident-name/test.config.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return [ + `style_module_css.bundle${i}.js`, + `style_module_css_hash.bundle${i}.js`, + `style_module_css_hash-local.bundle${i}.js`, + `style_module_css_path-name-local.bundle${i}.js`, + `style_module_css_file-local.bundle${i}.js`, + `style_module_css_q_f.bundle${i}.js`, + `style_module_css_uniqueName-id-contenthash.bundle${i}.js`, + `style_module_css_hash-local-custom.bundle${i}.js`, + `style_module_less.bundle${i}.js`, + `bundle${i}.js` + ]; + } +}; diff --git a/test/configCases/css/local-ident-name/webpack.config.js b/test/configCases/css/local-ident-name/webpack.config.js new file mode 100644 index 00000000000..8248ad166ff --- /dev/null +++ b/test/configCases/css/local-ident-name/webpack.config.js @@ -0,0 +1,85 @@ +"use strict"; + +const common = { + mode: "development", + devtool: false, + module: { + rules: [ + { + test: /\.less$/, + type: "css/auto", + use: ["less-loader"], + generator: { + localIdentName: "[path][name][ext]__[local]" + } + }, + { + test: /\.css$/, + type: "css/auto", + oneOf: [ + { + resourceQuery: /\?hash$/, + generator: { + localIdentName: "[hash]" + } + }, + { + resourceQuery: /\?hash-local$/, + generator: { + localIdentName: "[hash]-[local]" + } + }, + { + resourceQuery: /\?path-name-local$/, + generator: { + localIdentName: "[path][name]__[local]" + } + }, + { + resourceQuery: /\?file-local$/, + generator: { + localIdentName: "[file]__[local]" + } + }, + { + resourceQuery: /\?q$/, + resourceFragment: /#f$/, + generator: { + localIdentName: "[file][query][fragment]__[local]" + } + }, + { + resourceQuery: /\?uniqueName-id-contenthash$/, + generator: { + localIdentName: "[uniqueName]-[id]-[contenthash]" + } + }, + { + resourceQuery: /\?hash-local-custom$/, + generator: { + localIdentHashSalt: "salt", + localIdentHashDigest: "base26", + localIdentHashDigestLength: 16, + localIdentName: "[hash]-[local]" + } + } + ] + } + ] + }, + experiments: { + css: true + } +}; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + ...common, + target: "web" + }, + { + ...common, + target: "node" + } +]; diff --git a/test/configCases/css/mini-css-extract-plugin/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/mini-css-extract-plugin/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..8019c8203c7 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,526 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work css modules and composes 1`] = ` +Object { + "base": "mjFmCE q1JB1w", +} +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work css modules and composes 2`] = ` +Object { + "composed": "q1JB1w", +} +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work css modules and composes 3`] = ` +Array [ + "/*!******************************************!*\\\\ + !*** css ./composes-async-2.modules.css ***! + \\\\******************************************/ +.q1JB1w { + background: green; +} + +/*!******************************************!*\\\\ + !*** css ./composes-async-1.modules.css ***! + \\\\******************************************/ +.mjFmCE { + background: blue; +} + +", + "/*!******************************************!*\\\\ + !*** css ./composes-async-2.modules.css ***! + \\\\******************************************/ +.q1JB1w { + background: green; +} + +", +] +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work nested CSS modules 1`] = ` +"/*!**************************!*\\\\ + !*** css ./nested-a.css ***! + \\\\**************************/ +.class-a { + background: red; +} + +/*!**********************************!*\\\\ + !*** css ./nested-component.css ***! + \\\\**********************************/ +.class-b { + background: blue; +} + +/*!**************************!*\\\\ + !*** css ./nested-b.css ***! + \\\\**************************/ +.class-c { + background: red; +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with asset modules 1`] = ` +"/*!*******************************!*\\\\ + !*** css ./asset-modules.css ***! + \\\\*******************************/ +body { + background: red; + background-image: url(c9e192c015437a21dea1.svg); +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with css modules 1`] = ` +"/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ +.E3ncvS { + background: red; +} + +.bHJbOX { + color: green; +} + +.PPFDk2 { + color: blue; +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with css modules 2`] = ` +Object { + "a-class": "E3ncvS", + "b__class": "bHJbOX", + "cClass": "PPFDk2", +} +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with css modules when named export false 1`] = ` +"/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ +.E3ncvS { + background: red; +} + +.bHJbOX { + color: green; +} + +.PPFDk2 { + color: blue; +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with css modules when named export false 2`] = ` +Object { + "a-class": "E3ncvS", + "b__class": "bHJbOX", + "cClass": "PPFDk2", +} +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with different layer at-rules 1`] = ` +"/*!***************************************************!*\\\\ + !*** css ./layer-at-rule-other.css (layer: base) ***! + \\\\***************************************************/ +@layer framework { + @layer base { + .bottom { + background: blue; + } + } +} + +/*!********************************************************!*\\\\ + !*** css ./layer-at-rule-named.css (layer: framework) ***! + \\\\********************************************************/ +@layer framework { + + @layer base { + .middle { + background: green; + } + } +} + +/*!***************************************!*\\\\ + !*** css ./layer-at-rule-unnamed.css ***! + \\\\***************************************/ +@layer { + .color { + color: red; + } +} + +/*!************************************************************************************************************************!*\\\\ + !*** css ./layer-at-rule-other-too.css (layer: base) (supports: display: grid) (media: screen and (min-width: 900px)) ***! + \\\\************************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media (prefers-color-scheme: dark) { + @layer base { + @supports (display: grid) { + @media screen and (min-width: 900px) { + .foo { + color: red; + } + } + } + } + } + } +} + +/*!********************************************************************************************************************************************!*\\\\ + !*** css ./layer-at-rule-name-and-supports-and-media.css (layer: default) (supports: display: flex) (media: (prefers-color-scheme: dark)) ***! + \\\\********************************************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media (prefers-color-scheme: dark) { + + .bar { + color: blue; + } + } + } +} + +/*!*******************************!*\\\\ + !*** css ./layer-at-rule.css ***! + \\\\*******************************/ + +.top { + background: red; +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with different media at-rules 1`] = ` +"/*!*********************************!*\\\\ + !*** css ./media-at-rule-a.css ***! + \\\\*********************************/ +body { + font-size: 24px; +} + +/*!******************************************************************************!*\\\\ + !*** css ./media-at-rule-b.css (media: screen and (orientation: landscape)) ***! + \\\\******************************************************************************/ +@media screen and (orientation: landscape) { + body { + font-size: 32px; + } +} + +/*!***********************************************************!*\\\\ + !*** css ./media-at-rule-c.css (supports: display: flex) ***! + \\\\***********************************************************/ +@supports (display: flex) { + body { + font-size: 64px; + } +} + +/*!**************************************************************************************************!*\\\\ + !*** css ./media-at-rule-d.css (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**************************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + body { + font-size: 128px; + } + } +} + +/*!**************************************************************************************************************************!*\\\\ + !*** css ./media-at-rule-e.css (supports: display : flex) (media: screen and ( min-width : 400px )) ***! + \\\\**************************************************************************************************************************/ +@supports (display : flex) { + @media screen and ( min-width : 400px ) { + body { + font-size: 256px; + } + } +} + +/*!*****************************************************************!*\\\\ + !*** css ./media-at-rule-f.css (supports: not (display: flex)) ***! + \\\\*****************************************************************/ +@supports (not (display: flex)) { + body { + font-size: 512px; + } +} + +/*!*****************************************************************!*\\\\ + !*** css ./media-at-rule-g.css (supports: NOT (DISPLAY: FLEX)) ***! + \\\\*****************************************************************/ +@supports (NOT (DISPLAY: FLEX)) { + body { + font-size: 1024px; + } +} + +/*!*******************************!*\\\\ + !*** css ./media-at-rule.css ***! + \\\\*******************************/ + +div { + color: blue; +} + +@media { + div { + color: red; + } +} + +@media screen and (min-width: 900px) { + article { + padding: 1rem 3rem; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with different order of CSS modules in async chunks 1`] = ` +Array [ + "/*!*****************************************!*\\\\ + !*** css ./async-different-order-1.css ***! + \\\\*****************************************/ +.a { + color: red; +} + +/*!*****************************************!*\\\\ + !*** css ./async-different-order-2.css ***! + \\\\*****************************************/ +.b { + color: red; +} + +", + "/*!*****************************************!*\\\\ + !*** css ./async-different-order-2.css ***! + \\\\*****************************************/ +.b { + color: red; +} + +/*!*****************************************!*\\\\ + !*** css ./async-different-order-1.css ***! + \\\\*****************************************/ +.a { + color: red; +} + +", +] +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with different supports at-rules 1`] = ` +"/*!************************************************************************!*\\\\ + !*** css ./supports-at-rule-nested-more.css (supports: display: grid) ***! + \\\\************************************************************************/ +@supports (display: flex) { + @supports (display: grid) { + .bottom { + background: blue; + } + } +} + +/*!*******************************************************************!*\\\\ + !*** css ./supports-at-rule-nested.css (supports: display: flex) ***! + \\\\*******************************************************************/ +@supports (display: flex) { + + .middle { + background: green; + } +} + +/*!**********************************!*\\\\ + !*** css ./supports-at-rule.css ***! + \\\\**********************************/ + +.top { + background: red; +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with fonts 1`] = ` +"/*!***********************!*\\\\ + !*** css ./fonts.css ***! + \\\\***********************/ +@font-face { + font-family: \\"Roboto\\"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: + local(\\"Roboto Light\\"), + local(\\"Roboto-Light\\"), + url(815babffe97b00a1f30b.woff2) format(\\"woff2\\"), + url(d4c409dfe110747b1763.woff) format(\\"woff\\"), + url(a0de923c946d4ccb38b0.ttf) format(\\"truetype\\"); +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with match resource 1`] = ` +"/*!****************************************!*\\\\ + !*** css ./virtual.css!=!./source.txt ***! + \\\\****************************************/ +body { + background-image: url(c89332e66f09d6bf27f1.svg); +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with multiple @charset at-rules 1`] = ` +"/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css1.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css1.css\\"); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css2.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css2.css\\") screen and (max-width: 1024px); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css3.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css3.css\\") supports(display: grid) screen and (max-width: 400px); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css4.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css4.css\\") supports(display: grid); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css5.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css5.css\\") layer(); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css6.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css6.css\\") layer(layer-name) supports(display: grid) screen and (max-width: 1024px); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css7.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css7.css\\") layer(layer-name) screen and (max-width: 1024px); +/*!****************************************!*\\\\ + !*** css ./multiple-at-charset-aa.css ***! + \\\\****************************************/ +@charset \\"utf-8\\"; + +.aa { + background: green; +} + +/*!***************************************!*\\\\ + !*** css ./multiple-at-charset-a.css ***! + \\\\***************************************/ +@charset \\"utf-8\\"; + + +body { + background: red; +} + +/*!****************************************!*\\\\ + !*** css ./multiple-at-charset-ba.css ***! + \\\\****************************************/ +@charset \\"utf-8\\"; + +.ba { + background: green; +} + +/*!****************************************!*\\\\ + !*** css ./multiple-at-charset-bb.css ***! + \\\\****************************************/ +@charset \\"utf-8\\"; + +.bb { + background: green; +} + +/*!***************************************!*\\\\ + !*** css ./multiple-at-charset-b.css ***! + \\\\***************************************/ +@charset \\"utf-8\\"; + + + + +body { + background: yellow; +} + +" +`; + +exports[`ConfigCacheTestCases css mini-css-extract-plugin exported tests should work with shared \`@import\` 1`] = ` +Array [ + "/*!**************************************!*\\\\ + !*** css ./shared-import-shared.css ***! + \\\\**************************************/ +.shared { + color: green; + background-color: green; + border: 1px solid green; +} + +/*!*********************************!*\\\\ + !*** css ./shared-import-a.css ***! + \\\\*********************************/ + +.shared { + color: red; +} + +/*!*********************************!*\\\\ + !*** css ./shared-import-b.css ***! + \\\\*********************************/ + +.shared { + background-color: red; +} + +", + "/*!*********************************!*\\\\ + !*** css ./shared-import-c.css ***! + \\\\*********************************/ + +.shared { + border: 1px solid red; +} + +", +] +`; diff --git a/test/configCases/css/mini-css-extract-plugin/__snapshots__/ConfigTest.snap b/test/configCases/css/mini-css-extract-plugin/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..5899e295d8d --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/__snapshots__/ConfigTest.snap @@ -0,0 +1,526 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work css modules and composes 1`] = ` +Object { + "base": "mjFmCE q1JB1w", +} +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work css modules and composes 2`] = ` +Object { + "composed": "q1JB1w", +} +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work css modules and composes 3`] = ` +Array [ + "/*!******************************************!*\\\\ + !*** css ./composes-async-2.modules.css ***! + \\\\******************************************/ +.q1JB1w { + background: green; +} + +/*!******************************************!*\\\\ + !*** css ./composes-async-1.modules.css ***! + \\\\******************************************/ +.mjFmCE { + background: blue; +} + +", + "/*!******************************************!*\\\\ + !*** css ./composes-async-2.modules.css ***! + \\\\******************************************/ +.q1JB1w { + background: green; +} + +", +] +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work nested CSS modules 1`] = ` +"/*!**************************!*\\\\ + !*** css ./nested-a.css ***! + \\\\**************************/ +.class-a { + background: red; +} + +/*!**********************************!*\\\\ + !*** css ./nested-component.css ***! + \\\\**********************************/ +.class-b { + background: blue; +} + +/*!**************************!*\\\\ + !*** css ./nested-b.css ***! + \\\\**************************/ +.class-c { + background: red; +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with asset modules 1`] = ` +"/*!*******************************!*\\\\ + !*** css ./asset-modules.css ***! + \\\\*******************************/ +body { + background: red; + background-image: url(c9e192c015437a21dea1.svg); +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with css modules 1`] = ` +"/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ +.E3ncvS { + background: red; +} + +.bHJbOX { + color: green; +} + +.PPFDk2 { + color: blue; +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with css modules 2`] = ` +Object { + "a-class": "E3ncvS", + "b__class": "bHJbOX", + "cClass": "PPFDk2", +} +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with css modules when named export false 1`] = ` +"/*!******************************!*\\\\ + !*** css ./style.module.css ***! + \\\\******************************/ +.E3ncvS { + background: red; +} + +.bHJbOX { + color: green; +} + +.PPFDk2 { + color: blue; +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with css modules when named export false 2`] = ` +Object { + "a-class": "E3ncvS", + "b__class": "bHJbOX", + "cClass": "PPFDk2", +} +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with different layer at-rules 1`] = ` +"/*!***************************************************!*\\\\ + !*** css ./layer-at-rule-other.css (layer: base) ***! + \\\\***************************************************/ +@layer framework { + @layer base { + .bottom { + background: blue; + } + } +} + +/*!********************************************************!*\\\\ + !*** css ./layer-at-rule-named.css (layer: framework) ***! + \\\\********************************************************/ +@layer framework { + + @layer base { + .middle { + background: green; + } + } +} + +/*!***************************************!*\\\\ + !*** css ./layer-at-rule-unnamed.css ***! + \\\\***************************************/ +@layer { + .color { + color: red; + } +} + +/*!************************************************************************************************************************!*\\\\ + !*** css ./layer-at-rule-other-too.css (layer: base) (supports: display: grid) (media: screen and (min-width: 900px)) ***! + \\\\************************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media (prefers-color-scheme: dark) { + @layer base { + @supports (display: grid) { + @media screen and (min-width: 900px) { + .foo { + color: red; + } + } + } + } + } + } +} + +/*!********************************************************************************************************************************************!*\\\\ + !*** css ./layer-at-rule-name-and-supports-and-media.css (layer: default) (supports: display: flex) (media: (prefers-color-scheme: dark)) ***! + \\\\********************************************************************************************************************************************/ +@layer default { + @supports (display: flex) { + @media (prefers-color-scheme: dark) { + + .bar { + color: blue; + } + } + } +} + +/*!*******************************!*\\\\ + !*** css ./layer-at-rule.css ***! + \\\\*******************************/ + +.top { + background: red; +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with different media at-rules 1`] = ` +"/*!*********************************!*\\\\ + !*** css ./media-at-rule-a.css ***! + \\\\*********************************/ +body { + font-size: 24px; +} + +/*!******************************************************************************!*\\\\ + !*** css ./media-at-rule-b.css (media: screen and (orientation: landscape)) ***! + \\\\******************************************************************************/ +@media screen and (orientation: landscape) { + body { + font-size: 32px; + } +} + +/*!***********************************************************!*\\\\ + !*** css ./media-at-rule-c.css (supports: display: flex) ***! + \\\\***********************************************************/ +@supports (display: flex) { + body { + font-size: 64px; + } +} + +/*!**************************************************************************************************!*\\\\ + !*** css ./media-at-rule-d.css (supports: display: flex) (media: screen and (min-width: 400px)) ***! + \\\\**************************************************************************************************/ +@supports (display: flex) { + @media screen and (min-width: 400px) { + body { + font-size: 128px; + } + } +} + +/*!**************************************************************************************************************************!*\\\\ + !*** css ./media-at-rule-e.css (supports: display : flex) (media: screen and ( min-width : 400px )) ***! + \\\\**************************************************************************************************************************/ +@supports (display : flex) { + @media screen and ( min-width : 400px ) { + body { + font-size: 256px; + } + } +} + +/*!*****************************************************************!*\\\\ + !*** css ./media-at-rule-f.css (supports: not (display: flex)) ***! + \\\\*****************************************************************/ +@supports (not (display: flex)) { + body { + font-size: 512px; + } +} + +/*!*****************************************************************!*\\\\ + !*** css ./media-at-rule-g.css (supports: NOT (DISPLAY: FLEX)) ***! + \\\\*****************************************************************/ +@supports (NOT (DISPLAY: FLEX)) { + body { + font-size: 1024px; + } +} + +/*!*******************************!*\\\\ + !*** css ./media-at-rule.css ***! + \\\\*******************************/ + +div { + color: blue; +} + +@media { + div { + color: red; + } +} + +@media screen and (min-width: 900px) { + article { + padding: 1rem 3rem; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with different order of CSS modules in async chunks 1`] = ` +Array [ + "/*!*****************************************!*\\\\ + !*** css ./async-different-order-1.css ***! + \\\\*****************************************/ +.a { + color: red; +} + +/*!*****************************************!*\\\\ + !*** css ./async-different-order-2.css ***! + \\\\*****************************************/ +.b { + color: red; +} + +", + "/*!*****************************************!*\\\\ + !*** css ./async-different-order-2.css ***! + \\\\*****************************************/ +.b { + color: red; +} + +/*!*****************************************!*\\\\ + !*** css ./async-different-order-1.css ***! + \\\\*****************************************/ +.a { + color: red; +} + +", +] +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with different supports at-rules 1`] = ` +"/*!************************************************************************!*\\\\ + !*** css ./supports-at-rule-nested-more.css (supports: display: grid) ***! + \\\\************************************************************************/ +@supports (display: flex) { + @supports (display: grid) { + .bottom { + background: blue; + } + } +} + +/*!*******************************************************************!*\\\\ + !*** css ./supports-at-rule-nested.css (supports: display: flex) ***! + \\\\*******************************************************************/ +@supports (display: flex) { + + .middle { + background: green; + } +} + +/*!**********************************!*\\\\ + !*** css ./supports-at-rule.css ***! + \\\\**********************************/ + +.top { + background: red; +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with fonts 1`] = ` +"/*!***********************!*\\\\ + !*** css ./fonts.css ***! + \\\\***********************/ +@font-face { + font-family: \\"Roboto\\"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: + local(\\"Roboto Light\\"), + local(\\"Roboto-Light\\"), + url(815babffe97b00a1f30b.woff2) format(\\"woff2\\"), + url(d4c409dfe110747b1763.woff) format(\\"woff\\"), + url(a0de923c946d4ccb38b0.ttf) format(\\"truetype\\"); +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with match resource 1`] = ` +"/*!****************************************!*\\\\ + !*** css ./virtual.css!=!./source.txt ***! + \\\\****************************************/ +body { + background-image: url(c89332e66f09d6bf27f1.svg); +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with multiple @charset at-rules 1`] = ` +"/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css1.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css1.css\\"); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css2.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css2.css\\") screen and (max-width: 1024px); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css3.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css3.css\\") supports(display: grid) screen and (max-width: 400px); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css4.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css4.css\\") supports(display: grid); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css5.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css5.css\\") layer(); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css6.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css6.css\\") layer(layer-name) supports(display: grid) screen and (max-width: 1024px); +/*!***********************************************!*\\\\ + !*** external \\"http://some/path/to/css7.css\\" ***! + \\\\***********************************************/ +@import url(\\"http://some/path/to/css7.css\\") layer(layer-name) screen and (max-width: 1024px); +/*!****************************************!*\\\\ + !*** css ./multiple-at-charset-aa.css ***! + \\\\****************************************/ +@charset \\"utf-8\\"; + +.aa { + background: green; +} + +/*!***************************************!*\\\\ + !*** css ./multiple-at-charset-a.css ***! + \\\\***************************************/ +@charset \\"utf-8\\"; + + +body { + background: red; +} + +/*!****************************************!*\\\\ + !*** css ./multiple-at-charset-ba.css ***! + \\\\****************************************/ +@charset \\"utf-8\\"; + +.ba { + background: green; +} + +/*!****************************************!*\\\\ + !*** css ./multiple-at-charset-bb.css ***! + \\\\****************************************/ +@charset \\"utf-8\\"; + +.bb { + background: green; +} + +/*!***************************************!*\\\\ + !*** css ./multiple-at-charset-b.css ***! + \\\\***************************************/ +@charset \\"utf-8\\"; + + + + +body { + background: yellow; +} + +" +`; + +exports[`ConfigTestCases css mini-css-extract-plugin exported tests should work with shared \`@import\` 1`] = ` +Array [ + "/*!**************************************!*\\\\ + !*** css ./shared-import-shared.css ***! + \\\\**************************************/ +.shared { + color: green; + background-color: green; + border: 1px solid green; +} + +/*!*********************************!*\\\\ + !*** css ./shared-import-a.css ***! + \\\\*********************************/ + +.shared { + color: red; +} + +/*!*********************************!*\\\\ + !*** css ./shared-import-b.css ***! + \\\\*********************************/ + +.shared { + background-color: red; +} + +", + "/*!*********************************!*\\\\ + !*** css ./shared-import-c.css ***! + \\\\*********************************/ + +.shared { + border: 1px solid red; +} + +", +] +`; diff --git a/test/configCases/css/mini-css-extract-plugin/asset-modules.css b/test/configCases/css/mini-css-extract-plugin/asset-modules.css new file mode 100644 index 00000000000..6e35081c430 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/asset-modules.css @@ -0,0 +1,4 @@ +body { + background: red; + background-image: url(./webpack.svg); +} diff --git a/test/configCases/css/mini-css-extract-plugin/async-different-order-1.css b/test/configCases/css/mini-css-extract-plugin/async-different-order-1.css new file mode 100644 index 00000000000..461cdec8fb1 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/async-different-order-1.css @@ -0,0 +1,3 @@ +.a { + color: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/async-different-order-2.css b/test/configCases/css/mini-css-extract-plugin/async-different-order-2.css new file mode 100644 index 00000000000..869690c300d --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/async-different-order-2.css @@ -0,0 +1,3 @@ +.b { + color: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/async-different-order-one.js b/test/configCases/css/mini-css-extract-plugin/async-different-order-one.js new file mode 100644 index 00000000000..e7e5724b9b5 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/async-different-order-one.js @@ -0,0 +1,2 @@ +import "./async-different-order-1.css"; +import "./async-different-order-2.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/async-different-order-two.js b/test/configCases/css/mini-css-extract-plugin/async-different-order-two.js new file mode 100644 index 00000000000..bc1b7da4994 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/async-different-order-two.js @@ -0,0 +1,2 @@ +import "./async-different-order-2.css"; +import "./async-different-order-1.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/async-different-order.js b/test/configCases/css/mini-css-extract-plugin/async-different-order.js new file mode 100644 index 00000000000..0ab35a33cdb --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/async-different-order.js @@ -0,0 +1,9 @@ +function load1() { + return import("./async-different-order-one.js"); +} + +function load2() { + return import("./async-different-order-two.js"); +} + +Promise.all([load1(), load2()]).catch(() => {}); diff --git a/test/configCases/css/mini-css-extract-plugin/composes-async-1.modules.css b/test/configCases/css/mini-css-extract-plugin/composes-async-1.modules.css new file mode 100644 index 00000000000..1bd45658562 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/composes-async-1.modules.css @@ -0,0 +1,4 @@ +:local .base { + composes: composed from "./composes-async-2.modules.css"; + background: blue; +} diff --git a/test/configCases/css/mini-css-extract-plugin/composes-async-2.modules.css b/test/configCases/css/mini-css-extract-plugin/composes-async-2.modules.css new file mode 100644 index 00000000000..4cc245e5622 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/composes-async-2.modules.css @@ -0,0 +1,3 @@ +:local .composed { + background: green; +} diff --git a/test/configCases/css/mini-css-extract-plugin/composes-async.js b/test/configCases/css/mini-css-extract-plugin/composes-async.js new file mode 100644 index 00000000000..1b484625a35 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/composes-async.js @@ -0,0 +1,12 @@ +it("should work css modules and composes", async () => { + const styles = await import(/* webpackChunkName: "composes-async-1" */ "./composes-async-1.modules.css"); + const styles1 = await import(/* webpackChunkName: "composes-async-2" */ "./composes-async-2.modules.css"); + + expect(styles).toMatchSnapshot(); + expect(styles1).toMatchSnapshot(); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.filter((item) => /composes-async/.test(item.href)).map((item) => item.sheet.css)).toMatchSnapshot(); +}); + diff --git a/test/configCases/css/mini-css-extract-plugin/fonts.css b/test/configCases/css/mini-css-extract-plugin/fonts.css new file mode 100644 index 00000000000..22b75b91d79 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: + local("Roboto Light"), + local("Roboto-Light"), + url("fonts/roboto-v18-latin-300.woff2") format("woff2"), + url("fonts/roboto-v18-latin-300.woff") format("woff"), + url("fonts/roboto-v18-latin-300.ttf") format("truetype"); +} diff --git a/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.ttf b/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.ttf new file mode 100644 index 00000000000..a22188eed36 Binary files /dev/null and b/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.ttf differ diff --git a/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.woff b/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.woff new file mode 100644 index 00000000000..96663f0727f Binary files /dev/null and b/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.woff differ diff --git a/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.woff2 b/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.woff2 new file mode 100644 index 00000000000..52c5845a7c3 Binary files /dev/null and b/test/configCases/css/mini-css-extract-plugin/fonts/roboto-v18-latin-300.woff2 differ diff --git a/test/configCases/css/mini-css-extract-plugin/icon.svg b/test/configCases/css/mini-css-extract-plugin/icon.svg new file mode 100644 index 00000000000..3b4bcabe8b8 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/icon.svg @@ -0,0 +1 @@ + diff --git a/test/configCases/css/mini-css-extract-plugin/index.js b/test/configCases/css/mini-css-extract-plugin/index.js new file mode 100644 index 00000000000..96d9c728ea7 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/index.js @@ -0,0 +1,102 @@ +it("should work with asset modules", async () => { + await import("./asset-modules.css"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /asset-modules/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +// TODO fix me +it("should work with multiple @charset at-rules", async () => { + await import("./multiple-at-charset.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /multiple-at-charset/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with different media at-rules", async () => { + await import("./media-at-rule.css"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /media-at-rule/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with different layer at-rules", async () => { + await import("./layer-at-rule.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /layer-at-rule/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with different supports at-rules", async () => { + await import("./supports-at-rule.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /supports-at-rule/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with fonts", async () => { + await import("./fonts.css"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /fonts/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with css modules", async () => { + const styles = await import("./style.module.css"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /style_module_css/.test(item.href)).sheet.css).toMatchSnapshot(); + expect(styles).toMatchSnapshot(); +}); + +it("should work with css modules when named export false", async () => { + const styles = await import("./style.module.css"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /style_module_css/.test(item.href)).sheet.css).toMatchSnapshot(); + expect(styles).toMatchSnapshot(); +}); + +it("should work nested CSS modules", async () => { + await import("./nested.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /nested/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with match resource", async () => { + await import("./match-resource-url.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /match-resource-url/.test(item.href)).sheet.css).toMatchSnapshot(); +}); + +it("should work with shared `@import`", async () => { + await import("./shared-import.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.filter((item) => /shared-import/.test(item.href)).map((item) => item.sheet.css)).toMatchSnapshot(); +}); + +it("should work with different order of CSS modules in async chunks", async () => { + await import("./async-different-order.js"); + + const links = [...document.getElementsByTagName("link")]; + + expect(links.filter((item) => /async-different-order/.test(item.href)).map((item) => item.sheet.css)).toMatchSnapshot(); +}); + +it("should work with composes in async chunks", async () => { + await import("./composes-async.js"); +}); diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule-name-and-supports-and-media.css b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-name-and-supports-and-media.css new file mode 100644 index 00000000000..dd62c5525f0 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-name-and-supports-and-media.css @@ -0,0 +1,5 @@ +@import url("./layer-at-rule-other-too.css") layer(base) supports(display: grid) screen and (min-width: 900px); + +.bar { + color: blue; +} diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule-named.css b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-named.css new file mode 100644 index 00000000000..e1b86f0ba95 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-named.css @@ -0,0 +1,7 @@ +@import url("./layer-at-rule-other.css") layer(base); + +@layer base { + .middle { + background: green; + } +} diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule-other-too.css b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-other-too.css new file mode 100644 index 00000000000..cedf0a6d1f1 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-other-too.css @@ -0,0 +1,3 @@ +.foo { + color: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule-other.css b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-other.css new file mode 100644 index 00000000000..b704b96d4ad --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-other.css @@ -0,0 +1,3 @@ +.bottom { + background: blue; +} diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule-unnamed.css b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-unnamed.css new file mode 100644 index 00000000000..d005c9f333e --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule-unnamed.css @@ -0,0 +1,3 @@ +.color { + color: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule.css b/test/configCases/css/mini-css-extract-plugin/layer-at-rule.css new file mode 100644 index 00000000000..b3c44b57595 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule.css @@ -0,0 +1,7 @@ +@import url("./layer-at-rule-named.css") layer(framework); +@import url("./layer-at-rule-unnamed.css") layer; +@import url("./layer-at-rule-name-and-supports-and-media.css") layer(default) supports(display: flex) (prefers-color-scheme: dark); + +.top { + background: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/layer-at-rule.js b/test/configCases/css/mini-css-extract-plugin/layer-at-rule.js new file mode 100644 index 00000000000..30c16bbf483 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/layer-at-rule.js @@ -0,0 +1 @@ +import "./layer-at-rule.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/match-resource-url.js b/test/configCases/css/mini-css-extract-plugin/match-resource-url.js new file mode 100644 index 00000000000..0bb9d665d42 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/match-resource-url.js @@ -0,0 +1 @@ +import "./virtual.css!=!./source.txt"; diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-a.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-a.css new file mode 100644 index 00000000000..88a63b4be4d --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-a.css @@ -0,0 +1,3 @@ +body { + font-size: 24px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-b.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-b.css new file mode 100644 index 00000000000..006df2e26ba --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-b.css @@ -0,0 +1,3 @@ +body { + font-size: 32px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-c.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-c.css new file mode 100644 index 00000000000..a0b43b876b6 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-c.css @@ -0,0 +1,3 @@ +body { + font-size: 64px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-d.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-d.css new file mode 100644 index 00000000000..a809c5294bf --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-d.css @@ -0,0 +1,3 @@ +body { + font-size: 128px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-e.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-e.css new file mode 100644 index 00000000000..51aa94f5dcf --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-e.css @@ -0,0 +1,3 @@ +body { + font-size: 256px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-f.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-f.css new file mode 100644 index 00000000000..4dd03532c7a --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-f.css @@ -0,0 +1,3 @@ +body { + font-size: 512px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule-g.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule-g.css new file mode 100644 index 00000000000..96b5b8019ff --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule-g.css @@ -0,0 +1,3 @@ +body { + font-size: 1024px; +} diff --git a/test/configCases/css/mini-css-extract-plugin/media-at-rule.css b/test/configCases/css/mini-css-extract-plugin/media-at-rule.css new file mode 100644 index 00000000000..ec24269116e --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/media-at-rule.css @@ -0,0 +1,31 @@ +@import url("./media-at-rule-a.css"); +@import url("./media-at-rule-b.css") screen and (orientation: landscape); +@import url("./media-at-rule-c.css") supports(display: flex); +@import url("./media-at-rule-d.css") supports(display: flex) screen and (min-width: 400px); +@import url("./media-at-rule-e.css") supports( display : flex ) screen and ( min-width : 400px ) ; +@import url("./media-at-rule-f.css") supports(not (display: flex)); +@import url("./media-at-rule-g.css") SUPPORTS(NOT (DISPLAY: FLEX)); + +div { + color: blue; +} + +@media { + div { + color: red; + } +} + +@media screen and (min-width: 900px) { + article { + padding: 1rem 3rem; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} diff --git a/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-a.css b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-a.css new file mode 100644 index 00000000000..502a94eb87a --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-a.css @@ -0,0 +1,7 @@ +@charset "utf-8"; + +@import "./multiple-at-charset-aa.css"; + +body { + background: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-aa.css b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-aa.css new file mode 100644 index 00000000000..02e845281ff --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-aa.css @@ -0,0 +1,5 @@ +@charset "utf-8"; + +.aa { + background: green; +} diff --git a/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-b.css b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-b.css new file mode 100644 index 00000000000..5364277818d --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-b.css @@ -0,0 +1,17 @@ +@charset "utf-8"; + +@import url(http://some/path/to/css1.css); +@import url(http://some/path/to/css2.css) screen and (max-width: 1024px); +@import url(http://some/path/to/css3.css) supports(display: grid) screen and (max-width: 400px); +@import url(http://some/path/to/css4.css) supports(display: grid); +@import url(http://some/path/to/css5.css) layer; +@import url(http://some/path/to/css6.css) layer(layer-name) supports(display: grid) screen and (max-width: 1024px); +@import url(http://some/path/to/css7.css) layer(layer-name) screen and (max-width: 1024px); + + +@import "./multiple-at-charset-ba.css"; +@import "./multiple-at-charset-bb.css"; + +body { + background: yellow; +} diff --git a/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-ba.css b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-ba.css new file mode 100644 index 00000000000..2e7348d853a --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-ba.css @@ -0,0 +1,5 @@ +@charset "utf-8"; + +.ba { + background: green; +} diff --git a/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-bb.css b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-bb.css new file mode 100644 index 00000000000..6c06c8acd9a --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset-bb.css @@ -0,0 +1,5 @@ +@charset "utf-8"; + +.bb { + background: green; +} diff --git a/test/configCases/css/mini-css-extract-plugin/multiple-at-charset.js b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset.js new file mode 100644 index 00000000000..04cf44c7e8c --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/multiple-at-charset.js @@ -0,0 +1,2 @@ +import "./multiple-at-charset-a.css"; +import "./multiple-at-charset-b.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/nested-a.css b/test/configCases/css/mini-css-extract-plugin/nested-a.css new file mode 100644 index 00000000000..c121a1021fc --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/nested-a.css @@ -0,0 +1,3 @@ +.class-a { + background: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/nested-b.css b/test/configCases/css/mini-css-extract-plugin/nested-b.css new file mode 100644 index 00000000000..e591b3555a0 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/nested-b.css @@ -0,0 +1,3 @@ +.class-c { + background: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/nested-component.css b/test/configCases/css/mini-css-extract-plugin/nested-component.css new file mode 100644 index 00000000000..92dac448728 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/nested-component.css @@ -0,0 +1,3 @@ +.class-b { + background: blue; +} diff --git a/test/configCases/css/mini-css-extract-plugin/nested-component.js b/test/configCases/css/mini-css-extract-plugin/nested-component.js new file mode 100644 index 00000000000..6a4f2144395 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/nested-component.js @@ -0,0 +1 @@ +import "./nested-component.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/nested.js b/test/configCases/css/mini-css-extract-plugin/nested.js new file mode 100644 index 00000000000..e7a9543ca99 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/nested.js @@ -0,0 +1,3 @@ +import "./nested-a.css"; +import "./nested-component.js"; +import "./nested-b.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/shared-import-a.css b/test/configCases/css/mini-css-extract-plugin/shared-import-a.css new file mode 100644 index 00000000000..58c4597064b --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/shared-import-a.css @@ -0,0 +1,5 @@ +@import "./shared-import-shared.css"; + +.shared { + color: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/shared-import-b.css b/test/configCases/css/mini-css-extract-plugin/shared-import-b.css new file mode 100644 index 00000000000..d5d12a619c1 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/shared-import-b.css @@ -0,0 +1,5 @@ +@import "./shared-import-shared.css"; + +.shared { + background-color: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/shared-import-c.css b/test/configCases/css/mini-css-extract-plugin/shared-import-c.css new file mode 100644 index 00000000000..10ad5a0a64a --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/shared-import-c.css @@ -0,0 +1,5 @@ +@import "./shared-import-shared.css"; + +.shared { + border: 1px solid red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/shared-import-shared.css b/test/configCases/css/mini-css-extract-plugin/shared-import-shared.css new file mode 100644 index 00000000000..b92ddc6a33a --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/shared-import-shared.css @@ -0,0 +1,5 @@ +.shared { + color: green; + background-color: green; + border: 1px solid green; +} diff --git a/test/configCases/css/mini-css-extract-plugin/shared-import.js b/test/configCases/css/mini-css-extract-plugin/shared-import.js new file mode 100644 index 00000000000..fba4de7f645 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/shared-import.js @@ -0,0 +1,4 @@ +import "./shared-import-a.css"; +import "./shared-import-b.css"; + +await import("./shared-import-c.css"); diff --git a/test/configCases/css/mini-css-extract-plugin/source.txt b/test/configCases/css/mini-css-extract-plugin/source.txt new file mode 100644 index 00000000000..8f8d8336a1b --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/source.txt @@ -0,0 +1,3 @@ +body { + background-image: url(./icon.svg); +} diff --git a/test/configCases/css/mini-css-extract-plugin/style.module.css b/test/configCases/css/mini-css-extract-plugin/style.module.css new file mode 100644 index 00000000000..5537e86910e --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/style.module.css @@ -0,0 +1,11 @@ +.a-class { + background: red; +} + +.b__class { + color: green; +} + +.cClass { + color: blue; +} diff --git a/test/configCases/css/mini-css-extract-plugin/supports-at-rule-nested-more.css b/test/configCases/css/mini-css-extract-plugin/supports-at-rule-nested-more.css new file mode 100644 index 00000000000..b0b2e04117d --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/supports-at-rule-nested-more.css @@ -0,0 +1,3 @@ +.bottom { + background: blue; +} diff --git a/test/configCases/css/mini-css-extract-plugin/supports-at-rule-nested.css b/test/configCases/css/mini-css-extract-plugin/supports-at-rule-nested.css new file mode 100644 index 00000000000..869301ce48d --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/supports-at-rule-nested.css @@ -0,0 +1,5 @@ +@import url("./supports-at-rule-nested-more.css") supports(display: grid); + +.middle { + background: green; +} diff --git a/test/configCases/css/mini-css-extract-plugin/supports-at-rule.css b/test/configCases/css/mini-css-extract-plugin/supports-at-rule.css new file mode 100644 index 00000000000..b8a779142c4 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/supports-at-rule.css @@ -0,0 +1,5 @@ +@import url("./supports-at-rule-nested.css") supports(display: flex); + +.top { + background: red; +} diff --git a/test/configCases/css/mini-css-extract-plugin/supports-at-rule.js b/test/configCases/css/mini-css-extract-plugin/supports-at-rule.js new file mode 100644 index 00000000000..ebd2d619530 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/supports-at-rule.js @@ -0,0 +1 @@ +import "./supports-at-rule.css"; diff --git a/test/configCases/css/mini-css-extract-plugin/test.config.js b/test/configCases/css/mini-css-extract-plugin/test.config.js new file mode 100644 index 00000000000..c0e5a480864 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/test.config.js @@ -0,0 +1,26 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "asset-modules_css.chunk.js", + "multiple-at-charset_js-multiple-at-charset-a_css-multiple-at-charset-b_css.chunk.js", + "media-at-rule_css.chunk.js", + "layer-at-rule_js-layer-at-rule_css.chunk.js", + "supports-at-rule_js-supports-at-rule_css.chunk.js", + "fonts_css.chunk.js", + "style_module_css.chunk.js", + "nested_js-nested-a_css-nested-b_css-nested-component_css.chunk.js", + "match-resource-url_js-virtual_css_source_txt.chunk.js", + "shared-import-c_css.chunk.js", + "shared-import_js.chunk.js", + "async-different-order-one_js.chunk.js", + "async-different-order-two_js.chunk.js", + "async-different-order_js.chunk.js", + "composes-async-1.chunk.js", + "composes-async-2.chunk.js", + "composes-async_js.chunk.js", + "bundle0.js" + ]; + } +}; diff --git a/test/configCases/css/mini-css-extract-plugin/webpack.config.js b/test/configCases/css/mini-css-extract-plugin/webpack.config.js new file mode 100644 index 00000000000..8b80e0623a9 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + output: { + chunkFilename: "[name].chunk.js" + }, + optimization: { + chunkIds: "named" + }, + module: { + rules: [] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/mini-css-extract-plugin/webpack.svg b/test/configCases/css/mini-css-extract-plugin/webpack.svg new file mode 100644 index 00000000000..5b3b22a45f0 --- /dev/null +++ b/test/configCases/css/mini-css-extract-plugin/webpack.svg @@ -0,0 +1 @@ +logo-on-dark-bg \ No newline at end of file diff --git a/test/configCases/css/multiple-entries-common/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/multiple-entries-common/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..461045163e1 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,73 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css multiple-entries-common exported tests should work: async 1`] = ` +"/*!*******************!*\\\\ + !*** css ./c.css ***! + \\\\*******************/ +body { + background: blue; +} + +/*!*******************!*\\\\ + !*** css ./d.css ***! + \\\\*******************/ +body { + background: yellow; +} + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries-common exported tests should work: async 2`] = ` +"/*!*******************!*\\\\ + !*** css ./d.css ***! + \\\\*******************/ +body { + background: yellow; +} + +/*!*******************!*\\\\ + !*** css ./c.css ***! + \\\\*******************/ +body { + background: blue; +} + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries-common exported tests should work: initial 1`] = ` +"/*!*******************!*\\\\ + !*** css ./a.css ***! + \\\\*******************/ +body { + background: red; +} + +/*!*******************!*\\\\ + !*** css ./b.css ***! + \\\\*******************/ +body { + background: green; +} + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries-common exported tests should work: initial 2`] = ` +"/*!*******************!*\\\\ + !*** css ./b.css ***! + \\\\*******************/ +body { + background: green; +} + +/*!*******************!*\\\\ + !*** css ./a.css ***! + \\\\*******************/ +body { + background: red; +} + +" +`; diff --git a/test/configCases/css/multiple-entries-common/__snapshots__/ConfigTest.snap b/test/configCases/css/multiple-entries-common/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..e324d531b4f --- /dev/null +++ b/test/configCases/css/multiple-entries-common/__snapshots__/ConfigTest.snap @@ -0,0 +1,73 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css multiple-entries-common exported tests should work: async 1`] = ` +"/*!*******************!*\\\\ + !*** css ./c.css ***! + \\\\*******************/ +body { + background: blue; +} + +/*!*******************!*\\\\ + !*** css ./d.css ***! + \\\\*******************/ +body { + background: yellow; +} + +" +`; + +exports[`ConfigTestCases css multiple-entries-common exported tests should work: async 2`] = ` +"/*!*******************!*\\\\ + !*** css ./d.css ***! + \\\\*******************/ +body { + background: yellow; +} + +/*!*******************!*\\\\ + !*** css ./c.css ***! + \\\\*******************/ +body { + background: blue; +} + +" +`; + +exports[`ConfigTestCases css multiple-entries-common exported tests should work: initial 1`] = ` +"/*!*******************!*\\\\ + !*** css ./a.css ***! + \\\\*******************/ +body { + background: red; +} + +/*!*******************!*\\\\ + !*** css ./b.css ***! + \\\\*******************/ +body { + background: green; +} + +" +`; + +exports[`ConfigTestCases css multiple-entries-common exported tests should work: initial 2`] = ` +"/*!*******************!*\\\\ + !*** css ./b.css ***! + \\\\*******************/ +body { + background: green; +} + +/*!*******************!*\\\\ + !*** css ./a.css ***! + \\\\*******************/ +body { + background: red; +} + +" +`; diff --git a/test/configCases/css/multiple-entries-common/a.css b/test/configCases/css/multiple-entries-common/a.css new file mode 100644 index 00000000000..67ce83e4d09 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/a.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/configCases/css/multiple-entries-common/async-one.js b/test/configCases/css/multiple-entries-common/async-one.js new file mode 100644 index 00000000000..eb558470811 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/async-one.js @@ -0,0 +1,2 @@ +import "./c.css"; +import "./d.css"; diff --git a/test/configCases/css/multiple-entries-common/async-two.js b/test/configCases/css/multiple-entries-common/async-two.js new file mode 100644 index 00000000000..3dd844df607 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/async-two.js @@ -0,0 +1,2 @@ +import "./d.css"; +import "./c.css"; diff --git a/test/configCases/css/multiple-entries-common/b.css b/test/configCases/css/multiple-entries-common/b.css new file mode 100644 index 00000000000..90439bacfe0 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/b.css @@ -0,0 +1,3 @@ +body { + background: green; +} diff --git a/test/configCases/css/multiple-entries-common/c.css b/test/configCases/css/multiple-entries-common/c.css new file mode 100644 index 00000000000..ae844dcf78b --- /dev/null +++ b/test/configCases/css/multiple-entries-common/c.css @@ -0,0 +1,3 @@ +body { + background: blue; +} diff --git a/test/configCases/css/multiple-entries-common/d.css b/test/configCases/css/multiple-entries-common/d.css new file mode 100644 index 00000000000..19f9965277a --- /dev/null +++ b/test/configCases/css/multiple-entries-common/d.css @@ -0,0 +1,3 @@ +body { + background: yellow; +} diff --git a/test/configCases/css/multiple-entries-common/one.js b/test/configCases/css/multiple-entries-common/one.js new file mode 100644 index 00000000000..c366fa5eaa4 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/one.js @@ -0,0 +1,11 @@ +import "./a.css"; +import "./b.css"; + +it("should work", async () => { + await import("./async-one.js"); + + const links = document.getElementsByTagName("link"); + + expect(links.find((item) => /one\.css/.test(item.href)).sheet.css).toMatchSnapshot("initial"); + expect(links.find((item) => /async-one_js-c_css-d_css\.chunk\.css/.test(item.href)).sheet.css).toMatchSnapshot("async"); +}); diff --git a/test/configCases/css/multiple-entries-common/test.config.js b/test/configCases/css/multiple-entries-common/test.config.js new file mode 100644 index 00000000000..e19fe4a6cf9 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/test.config.js @@ -0,0 +1,29 @@ +"use strict"; + +let once = false; + +module.exports = { + moduleScope(scope) { + if (once) { + return; + } + + const link1 = scope.window.document.createElement("link"); + link1.rel = "stylesheet"; + link1.href = "one.css"; + scope.window.document.head.appendChild(link1); + const link2 = scope.window.document.createElement("link"); + link2.rel = "stylesheet"; + link2.href = "two.css"; + scope.window.document.head.appendChild(link2); + once = true; + }, + findBundle() { + return [ + "async-one_js-c_css-d_css.chunk.js", + "one.js", + "async-two_js-c_css-d_css.chunk.js", + "two.js" + ]; + } +}; diff --git a/test/configCases/css/multiple-entries-common/two.js b/test/configCases/css/multiple-entries-common/two.js new file mode 100644 index 00000000000..5a50ad2836a --- /dev/null +++ b/test/configCases/css/multiple-entries-common/two.js @@ -0,0 +1,11 @@ +import "./b.css"; +import "./a.css"; + +it("should work", async () => { + await import("./async-two.js"); + + const links = document.getElementsByTagName("link"); + + expect(links.find((item) => /two\.css/.test(item.href)).sheet.css).toMatchSnapshot("initial"); + expect(links.find((item) => /async-two_js-c_css-d_css\.chunk\.css/.test(item.href)).sheet.css).toMatchSnapshot("async"); +}); diff --git a/test/configCases/css/multiple-entries-common/webpack.config.js b/test/configCases/css/multiple-entries-common/webpack.config.js new file mode 100644 index 00000000000..af336a30445 --- /dev/null +++ b/test/configCases/css/multiple-entries-common/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + entry: { + one: "./one.js", + two: "./two.js" + }, + output: { + filename: "[name].js", + chunkFilename: "[name].chunk.js" + }, + optimization: { + chunkIds: "named" + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/multiple-entries/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/multiple-entries/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..985a0693a50 --- /dev/null +++ b/test/configCases/css/multiple-entries/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,121 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile 1`] = ` +Array [ + "basic.js", + "common.css", + "common.js", + "five.css", + "four.css", + "one.css", + "six.css", + "six.js", + "three.css", + "two.css", +] +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: common.css 1`] = ` +"/*!************************!*\\\\ + !*** css ./common.css ***! + \\\\************************/ +.class-a { + background: red; +} + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: five.css 1`] = ` +"/*!**************************************************!*\\\\ + !*** external \\"https://some/other/external/css\\" ***! + \\\\**************************************************/ +@import url(\\"https://some/other/external/css\\"); +/*!********************************************!*\\\\ + !*** external \\"https://some/external/css\\" ***! + \\\\********************************************/ +@import url(\\"https://some/external/css\\"); +/*!************************!*\\\\ + !*** css ./five-a.css ***! + \\\\************************/ + +.a { + color: yellow; +} + +/*!************************!*\\\\ + !*** css ./five-b.css ***! + \\\\************************/ + +.b { + color: yellow; +} + +/*!**********************!*\\\\ + !*** css ./five.css ***! + \\\\**********************/ + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: four.css 1`] = ` +"/*!*********************************************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css2?family=Manrope:wght@500;800&display=swap\\" ***! + \\\\*********************************************************************************************/ +@import url(\\"https://fonts.googleapis.com/css2?family=Manrope:wght@500;800&display=swap\\"); +/*!**********************!*\\\\ + !*** css ./four.css ***! + \\\\**********************/ + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: one.css 1`] = ` +"/*!*********************!*\\\\ + !*** css ./one.css ***! + \\\\*********************/ +.class-1 { + color: red; +} + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: six.css 1`] = ` +"/*!***********************!*\\\\ + !*** css ./six-b.css ***! + \\\\***********************/ +.class-b { + background: blue; +} + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: three.css 1`] = ` +"/*!************************************************************!*\\\\ + !*** css ./dark.css (media: (prefers-color-scheme: dark)) ***! + \\\\************************************************************/ +@media (prefers-color-scheme: dark) { + body { + background: black; + } +} + +/*!***********************!*\\\\ + !*** css ./three.css ***! + \\\\***********************/ + +" +`; + +exports[`ConfigCacheTestCases css multiple-entries multiple-entries should compile: two.css 1`] = ` +"/*!*********************!*\\\\ + !*** css ./two.css ***! + \\\\*********************/ +.class-2 { + color: blue; +} + +" +`; diff --git a/test/configCases/css/multiple-entries/__snapshots__/ConfigTest.snap b/test/configCases/css/multiple-entries/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..99ba406a01b --- /dev/null +++ b/test/configCases/css/multiple-entries/__snapshots__/ConfigTest.snap @@ -0,0 +1,121 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile 1`] = ` +Array [ + "basic.js", + "common.css", + "common.js", + "five.css", + "four.css", + "one.css", + "six.css", + "six.js", + "three.css", + "two.css", +] +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: common.css 1`] = ` +"/*!************************!*\\\\ + !*** css ./common.css ***! + \\\\************************/ +.class-a { + background: red; +} + +" +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: five.css 1`] = ` +"/*!**************************************************!*\\\\ + !*** external \\"https://some/other/external/css\\" ***! + \\\\**************************************************/ +@import url(\\"https://some/other/external/css\\"); +/*!********************************************!*\\\\ + !*** external \\"https://some/external/css\\" ***! + \\\\********************************************/ +@import url(\\"https://some/external/css\\"); +/*!************************!*\\\\ + !*** css ./five-a.css ***! + \\\\************************/ + +.a { + color: yellow; +} + +/*!************************!*\\\\ + !*** css ./five-b.css ***! + \\\\************************/ + +.b { + color: yellow; +} + +/*!**********************!*\\\\ + !*** css ./five.css ***! + \\\\**********************/ + +" +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: four.css 1`] = ` +"/*!*********************************************************************************************!*\\\\ + !*** external \\"https://fonts.googleapis.com/css2?family=Manrope:wght@500;800&display=swap\\" ***! + \\\\*********************************************************************************************/ +@import url(\\"https://fonts.googleapis.com/css2?family=Manrope:wght@500;800&display=swap\\"); +/*!**********************!*\\\\ + !*** css ./four.css ***! + \\\\**********************/ + +" +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: one.css 1`] = ` +"/*!*********************!*\\\\ + !*** css ./one.css ***! + \\\\*********************/ +.class-1 { + color: red; +} + +" +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: six.css 1`] = ` +"/*!***********************!*\\\\ + !*** css ./six-b.css ***! + \\\\***********************/ +.class-b { + background: blue; +} + +" +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: three.css 1`] = ` +"/*!************************************************************!*\\\\ + !*** css ./dark.css (media: (prefers-color-scheme: dark)) ***! + \\\\************************************************************/ +@media (prefers-color-scheme: dark) { + body { + background: black; + } +} + +/*!***********************!*\\\\ + !*** css ./three.css ***! + \\\\***********************/ + +" +`; + +exports[`ConfigTestCases css multiple-entries multiple-entries should compile: two.css 1`] = ` +"/*!*********************!*\\\\ + !*** css ./two.css ***! + \\\\*********************/ +.class-2 { + color: blue; +} + +" +`; diff --git a/test/configCases/css/multiple-entries/basic.js b/test/configCases/css/multiple-entries/basic.js new file mode 100644 index 00000000000..91b8aad501c --- /dev/null +++ b/test/configCases/css/multiple-entries/basic.js @@ -0,0 +1,3 @@ +it("should contain only one module", () => { + expect(Object.keys(__webpack_modules__).length).toBe(1); +}); diff --git a/test/configCases/css/multiple-entries/common.css b/test/configCases/css/multiple-entries/common.css new file mode 100644 index 00000000000..6f124a95b85 --- /dev/null +++ b/test/configCases/css/multiple-entries/common.css @@ -0,0 +1,3 @@ +.class-a { + background: red; +} diff --git a/test/configCases/css/multiple-entries/commonjs.js b/test/configCases/css/multiple-entries/commonjs.js new file mode 100644 index 00000000000..3b529e8a100 --- /dev/null +++ b/test/configCases/css/multiple-entries/commonjs.js @@ -0,0 +1 @@ +import "./common.css"; diff --git a/test/configCases/css/multiple-entries/dark.css b/test/configCases/css/multiple-entries/dark.css new file mode 100644 index 00000000000..5fa2bfe59ff --- /dev/null +++ b/test/configCases/css/multiple-entries/dark.css @@ -0,0 +1,3 @@ +body { + background: black; +} diff --git a/test/configCases/css/multiple-entries/five-a.css b/test/configCases/css/multiple-entries/five-a.css new file mode 100644 index 00000000000..8e1745c203f --- /dev/null +++ b/test/configCases/css/multiple-entries/five-a.css @@ -0,0 +1,5 @@ +@import url("https://some/other/external/css"); + +.a { + color: yellow; +} diff --git a/test/configCases/css/multiple-entries/five-b.css b/test/configCases/css/multiple-entries/five-b.css new file mode 100644 index 00000000000..1d722b0a7c4 --- /dev/null +++ b/test/configCases/css/multiple-entries/five-b.css @@ -0,0 +1,5 @@ +@import url("https://some/external/css"); + +.b { + color: yellow; +} diff --git a/test/configCases/css/multiple-entries/five.css b/test/configCases/css/multiple-entries/five.css new file mode 100644 index 00000000000..c88900d5fda --- /dev/null +++ b/test/configCases/css/multiple-entries/five.css @@ -0,0 +1,2 @@ +@import "./five-a.css"; +@import "./five-b.css"; diff --git a/test/configCases/css/multiple-entries/four.css b/test/configCases/css/multiple-entries/four.css new file mode 100644 index 00000000000..0fb8a8485ae --- /dev/null +++ b/test/configCases/css/multiple-entries/four.css @@ -0,0 +1 @@ +@import url(https://fonts.googleapis.com/css2?family=Manrope:wght@500;800&display=swap); diff --git a/test/configCases/css/multiple-entries/one.css b/test/configCases/css/multiple-entries/one.css new file mode 100644 index 00000000000..7def6e8c0af --- /dev/null +++ b/test/configCases/css/multiple-entries/one.css @@ -0,0 +1,3 @@ +.class-1 { + color: red; +} diff --git a/test/configCases/css/multiple-entries/six-b.css b/test/configCases/css/multiple-entries/six-b.css new file mode 100644 index 00000000000..e120a12f606 --- /dev/null +++ b/test/configCases/css/multiple-entries/six-b.css @@ -0,0 +1,3 @@ +.class-b { + background: blue; +} diff --git a/test/configCases/css/multiple-entries/six.js b/test/configCases/css/multiple-entries/six.js new file mode 100644 index 00000000000..6bf5c1cb969 --- /dev/null +++ b/test/configCases/css/multiple-entries/six.js @@ -0,0 +1 @@ +import "./six-b.css"; diff --git a/test/configCases/css/multiple-entries/test.config.js b/test/configCases/css/multiple-entries/test.config.js new file mode 100644 index 00000000000..5a59e5e96c6 --- /dev/null +++ b/test/configCases/css/multiple-entries/test.config.js @@ -0,0 +1,23 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = { + findBundle() { + return ["basic.js"]; + }, + afterExecute(options) { + const files = fs + .readdirSync(options.output.path) + .filter((item) => !/stats/.test(item)); + + expect(files).toMatchSnapshot(); + + for (const file of files.filter((item) => /\.css/.test(item))) { + expect( + fs.readFileSync(path.join(options.output.path, file), "utf8") + ).toMatchSnapshot(file); + } + } +}; diff --git a/test/configCases/css/multiple-entries/three.css b/test/configCases/css/multiple-entries/three.css new file mode 100644 index 00000000000..9551bc78f56 --- /dev/null +++ b/test/configCases/css/multiple-entries/three.css @@ -0,0 +1 @@ +@import "./dark.css" (prefers-color-scheme: dark); diff --git a/test/configCases/css/multiple-entries/two.css b/test/configCases/css/multiple-entries/two.css new file mode 100644 index 00000000000..53e9107e328 --- /dev/null +++ b/test/configCases/css/multiple-entries/two.css @@ -0,0 +1,3 @@ +.class-2 { + color: blue; +} diff --git a/test/configCases/css/multiple-entries/webpack.config.js b/test/configCases/css/multiple-entries/webpack.config.js new file mode 100644 index 00000000000..6392ba8db08 --- /dev/null +++ b/test/configCases/css/multiple-entries/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + entry: { + basic: "./basic.js", + one: "./one.css", + two: "./two.css", + three: "./three.css", + four: "./four.css", + five: "./five.css", + common: "./commonjs.js", + six: { import: "./six.js", dependOn: "common" } + }, + output: { + filename: "[name].js", + chunkFilename: "[name].chunk.js" + }, + optimization: { + chunkIds: "named" + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/named-exports-parser-options/index.js b/test/configCases/css/named-exports-parser-options/index.js new file mode 100644 index 00000000000..08e6d8803fd --- /dev/null +++ b/test/configCases/css/named-exports-parser-options/index.js @@ -0,0 +1,25 @@ +import * as style1 from "./style.module.css" +import style2 from "./style.module.css?default" +import * as style3 from "./style.module.css?named" + +it("should able to import with different namedExports", () => { + expect(style1).toEqual(nsObj({ class: 'style_module_css-class' })); + expect(style2).toEqual(nsObj({ class: 'style_module_css_default-class' })); + expect(style3).toEqual(nsObj({ class: 'style_module_css_named-class' })); +}); + +it("should able to import with different namedExports (async)", (done) => { + Promise.all([ + import("./style.module.css"), + import("./style.module.css?default"), + import("./style.module.css?named"), + ]).then(([style1, style2, style3]) => { + expect(style1).toEqual(nsObj({ class: 'style_module_css-class' })); + expect(style2).toEqual(nsObj({ + class: "style_module_css_default-class", + default: nsObj({ class: 'style_module_css_default-class' }) + })); + expect(style3).toEqual(nsObj({ class: 'style_module_css_named-class' })); + done() + }, done) +}); diff --git a/test/configCases/css/named-exports-parser-options/style.module.css b/test/configCases/css/named-exports-parser-options/style.module.css new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/css/named-exports-parser-options/style.module.css @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/css/named-exports-parser-options/webpack.config.js b/test/configCases/css/named-exports-parser-options/webpack.config.js new file mode 100644 index 00000000000..9ab994f7fa8 --- /dev/null +++ b/test/configCases/css/named-exports-parser-options/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + module: { + rules: [ + { + resourceQuery: /\?default/, + parser: { + namedExports: false + }, + type: "css/module" + }, + { + resourceQuery: /\?named/, + parser: { + namedExports: true + }, + type: "css/module" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/namespace/index.js b/test/configCases/css/namespace/index.js new file mode 100644 index 00000000000..78be77a3a32 --- /dev/null +++ b/test/configCases/css/namespace/index.js @@ -0,0 +1,7 @@ +import "./style.css"; + +it("should compile with warning", done => { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + done(); +}); diff --git a/test/configCases/css/namespace/style.css b/test/configCases/css/namespace/style.css new file mode 100644 index 00000000000..e16ce897e5d --- /dev/null +++ b/test/configCases/css/namespace/style.css @@ -0,0 +1,5 @@ +@namespace svg url('http://www.w3.org/2000/svg'); + +body { + background: red; +} diff --git a/test/configCases/css/namespace/test.config.js b/test/configCases/css/namespace/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/namespace/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/namespace/warnings.js b/test/configCases/css/namespace/warnings.js new file mode 100644 index 00000000000..1d2c445448e --- /dev/null +++ b/test/configCases/css/namespace/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [/'@namespace' is not supported in bundled CSS/]; diff --git a/test/configCases/css/namespace/webpack.config.js b/test/configCases/css/namespace/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/namespace/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/no-extra-empty-js/index.js b/test/configCases/css/no-extra-empty-js/index.js new file mode 100644 index 00000000000..03ecfb1c075 --- /dev/null +++ b/test/configCases/css/no-extra-empty-js/index.js @@ -0,0 +1,6 @@ +import './style.css' // doesn't has js output + +it('should contain no js outupt', () => { + // only has index.js + expect(Reflect.ownKeys(__webpack_modules__).length).toBe(1) +}) diff --git a/test/configCases/css/no-extra-empty-js/other.css b/test/configCases/css/no-extra-empty-js/other.css new file mode 100644 index 00000000000..3090e7d7405 --- /dev/null +++ b/test/configCases/css/no-extra-empty-js/other.css @@ -0,0 +1,3 @@ +body { + color: white; +} diff --git a/test/configCases/css/no-extra-empty-js/style.css b/test/configCases/css/no-extra-empty-js/style.css new file mode 100644 index 00000000000..e9a050ee460 --- /dev/null +++ b/test/configCases/css/no-extra-empty-js/style.css @@ -0,0 +1,5 @@ +@import './other.css'; + +body { + background-color: red; +} diff --git a/test/configCases/css/no-extra-empty-js/webpack.config.js b/test/configCases/css/no-extra-empty-js/webpack.config.js new file mode 100644 index 00000000000..1264c194215 --- /dev/null +++ b/test/configCases/css/no-extra-empty-js/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/no-extra-runtime-css-modules/a1.css b/test/configCases/css/no-extra-runtime-css-modules/a1.css new file mode 100644 index 00000000000..be9d5269a9b --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/a1.css @@ -0,0 +1,3 @@ +.bar { + background-color: black; +} diff --git a/test/configCases/css/no-extra-runtime-css-modules/a1.module.css b/test/configCases/css/no-extra-runtime-css-modules/a1.module.css new file mode 100644 index 00000000000..be9d5269a9b --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/a1.module.css @@ -0,0 +1,3 @@ +.bar { + background-color: black; +} diff --git a/test/configCases/css/no-extra-runtime-css-modules/a2.css b/test/configCases/css/no-extra-runtime-css-modules/a2.css new file mode 100644 index 00000000000..be9d5269a9b --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/a2.css @@ -0,0 +1,3 @@ +.bar { + background-color: black; +} diff --git a/test/configCases/css/no-extra-runtime-css-modules/a2.module.css b/test/configCases/css/no-extra-runtime-css-modules/a2.module.css new file mode 100644 index 00000000000..be9d5269a9b --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/a2.module.css @@ -0,0 +1,3 @@ +.bar { + background-color: black; +} diff --git a/test/configCases/css/no-extra-runtime-css-modules/a3.module.css b/test/configCases/css/no-extra-runtime-css-modules/a3.module.css new file mode 100644 index 00000000000..be9d5269a9b --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/a3.module.css @@ -0,0 +1,3 @@ +.bar { + background-color: black; +} diff --git a/test/configCases/css/no-extra-runtime-css-modules/main.css b/test/configCases/css/no-extra-runtime-css-modules/main.css new file mode 100644 index 00000000000..f56551dd69a --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/main.css @@ -0,0 +1,5 @@ +@import url("./a1.css"); + +.foo { + background-color: red; +} diff --git a/test/configCases/css/no-extra-runtime-css-modules/main1.js b/test/configCases/css/no-extra-runtime-css-modules/main1.js new file mode 100644 index 00000000000..dd349e5cf4d --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/main1.js @@ -0,0 +1,4 @@ +import "./main.css" +require("./a2.css") +import("./a2.css").then(() => {}) + diff --git a/test/configCases/css/no-extra-runtime-css-modules/main2.js b/test/configCases/css/no-extra-runtime-css-modules/main2.js new file mode 100644 index 00000000000..4d2835fe754 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/main2.js @@ -0,0 +1,3 @@ +import a1 from "./a1.module.css" +const a2 = require("./a2.module.css") +import("./a3.module.css").then(() => {}) diff --git a/test/configCases/css/no-extra-runtime-css-modules/test.config.js b/test/configCases/css/no-extra-runtime-css-modules/test.config.js new file mode 100644 index 00000000000..5eae4bcbacf --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/test.config.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = { + findBundle(i) { + switch (i) { + case 0: + return ["test.js"]; + case 1: + return ["test.js", "1/main.js"]; + case 2: + return ["test.js", "2/main.js"]; + } + } +}; diff --git a/test/configCases/css/no-extra-runtime-css-modules/test.js b/test/configCases/css/no-extra-runtime-css-modules/test.js new file mode 100644 index 00000000000..22221c023d8 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/test.js @@ -0,0 +1,29 @@ +it("should work", () => { + const stats = __STATS__.children[__STATS_I__]; + + expect(stats.assets.findIndex(a => a.name === "test.js") > -1).toBe(true); + + expect( + stats.assets.findIndex(a => a.name === `${__STATS_I__}/main.css`) > -1 + ).toBe(true); + + if (__STATS_I__ === 0) { + // ./main.css + // ./a.css + // and it still output one runtime module: + // 'webpack/runtime/css loading' + expect(stats.modules.length).toBe(3); + } else if (__STATS_I__ === 1) { + stats.modules + .filter(module => module.moduleType === "css/auto") + .forEach(module => { + expect(module.sizes["javascript"]).toBe(module.identifier.includes('main.css') || module.identifier.includes('a1.css') ? undefined : 1); + }); + } else if (__STATS_I__ === 2) { + stats.modules + .filter(module => module.moduleType === "css/auto") + .forEach(module => { + expect(module.sizes["javascript"] === 1).toBe(false); + }); + } +}); diff --git a/test/configCases/css/no-extra-runtime-css-modules/webpack.config.js b/test/configCases/css/no-extra-runtime-css-modules/webpack.config.js new file mode 100644 index 00000000000..a8642569936 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-css-modules/webpack.config.js @@ -0,0 +1,75 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +/** + * @param {0 | 1 | 2} i index + * @returns {{ main: string[] }} entry + */ +const entry = (i) => { + switch (i) { + case 0: + return { + main: ["./main.css"] + }; + case 1: + return { + main: ["./main1.js"] + }; + case 2: + return { + main: ["./main2.js"] + }; + } +}; + +/** + * @param {0 | 1 | 2} i param + * @returns {import("../../../../").Configuration} return + */ +const common = (i) => ({ + entry: { + ...entry(i) + }, + target: "web", + devtool: false, + experiments: { + css: true + }, + output: { + filename: `${i}/[name].js`, + chunkFilename: `${i}/[name].js`, + cssFilename: `${i}/[name].css`, + cssChunkFilename: `${i}/[name].css` + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const data = fs.readFileSync( + path.resolve(__dirname, "./test.js") + ); + + compilation.emitAsset( + "test.js", + new webpack.sources.RawSource(data) + ); + } + ); + }); + } + } + ] +}); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = /** @type {(0 | 1 | 2)[]} */ ([0, 1]).map((i) => common(i)); diff --git a/test/configCases/css/no-extra-runtime-only-initial/classes.modules.css b/test/configCases/css/no-extra-runtime-only-initial/classes.modules.css new file mode 100644 index 00000000000..dd0d19bd797 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-only-initial/classes.modules.css @@ -0,0 +1,3 @@ +.otherClassName { + color: green; +} diff --git a/test/configCases/css/no-extra-runtime-only-initial/index.js b/test/configCases/css/no-extra-runtime-only-initial/index.js new file mode 100644 index 00000000000..a66726da653 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-only-initial/index.js @@ -0,0 +1,8 @@ +import { exportName } from "./style.modules.css"; +import { div } from "./module.js"; + +it("should don't generate extra runtime modules", () => { + expect(exportName).toBeDefined(); + expect(div(2, 2)).toBe(1); + expect(__STATS__.modules.length).toBe(5); +}); diff --git a/test/configCases/css/no-extra-runtime-only-initial/module.js b/test/configCases/css/no-extra-runtime-only-initial/module.js new file mode 100644 index 00000000000..2c24f61a01f --- /dev/null +++ b/test/configCases/css/no-extra-runtime-only-initial/module.js @@ -0,0 +1,3 @@ +export function div(a, b) { + return a / b; +} diff --git a/test/configCases/css/no-extra-runtime-only-initial/style.modules.css b/test/configCases/css/no-extra-runtime-only-initial/style.modules.css new file mode 100644 index 00000000000..4a067f269b4 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-only-initial/style.modules.css @@ -0,0 +1,9 @@ +.className { + border-radius: 12px; +} + +.exportName { + composes: className; + composes: className from global; + composes: otherClassName from "./classes.modules.css"; +} diff --git a/test/configCases/css/no-extra-runtime-only-initial/webpack.config.js b/test/configCases/css/no-extra-runtime-only-initial/webpack.config.js new file mode 100644 index 00000000000..e2867f9fcff --- /dev/null +++ b/test/configCases/css/no-extra-runtime-only-initial/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + mode: "production", + target: "web", + optimization: { + minimize: false + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/no-extra-runtime-with-asset-modules/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..f6ae737f311 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,39 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css no-extra-runtime-with-asset-modules exported tests should compile 1`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class { + color: red; + background: + url(img.png), + url(img.png), + url(d4da020aedcd249a7a41.png); + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=), + url(resource.png), + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=), + url(7976064b7fcb4f6b3916.html), + url(https://example.com/img.png); +} + +.class-2 { + background: url(shared.png); +} + +.class-3 { + background: url(shared-external.png); +} + +.class-4 { + background: url(cde81354a9a8ce8d5f51.gif); +} + +.class-5 { + background: url(5649e83cc54c4b57bc28.png); +} + +", +] +`; diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/__snapshots__/ConfigTest.snap b/test/configCases/css/no-extra-runtime-with-asset-modules/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..36cc63786ea --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/__snapshots__/ConfigTest.snap @@ -0,0 +1,39 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css no-extra-runtime-with-asset-modules exported tests should compile 1`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class { + color: red; + background: + url(img.png), + url(img.png), + url(d4da020aedcd249a7a41.png); + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=), + url(resource.png), + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=), + url(7976064b7fcb4f6b3916.html), + url(https://example.com/img.png); +} + +.class-2 { + background: url(shared.png); +} + +.class-3 { + background: url(shared-external.png); +} + +.class-4 { + background: url(cde81354a9a8ce8d5f51.gif); +} + +.class-5 { + background: url(5649e83cc54c4b57bc28.png); +} + +", +] +`; diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/img.png b/test/configCases/css/no-extra-runtime-with-asset-modules/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/no-extra-runtime-with-asset-modules/img.png differ diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/index.js b/test/configCases/css/no-extra-runtime-with-asset-modules/index.js new file mode 100644 index 00000000000..e00902d7148 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/index.js @@ -0,0 +1,47 @@ +import "./style.css"; + +it("should compile", () => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); + expect(Object.keys(__webpack_modules__).length).toBe(6); + expect(__webpack_modules__['./index.js']).toBeDefined(); + expect(__webpack_modules__['./shared-external.png']).toBeDefined(); + expect(__webpack_modules__['./shared.png']).toBeDefined(); + expect(__webpack_modules__['data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAABNJREFUCB1jZGBg+A/EDEwgAgQADigBA//q6GsAAAAASUVORK5CYII%3D']).toBeDefined(); + expect(__webpack_modules__['data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=']).toBeDefined(); + expect(__webpack_modules__['https://example.com/only-external.png']).toBeDefined(); + expect(__webpack_modules__['./style.css']).toBeUndefined(); + +}); + +it("should work with shared asset module", () => { + const img = new URL("./shared.png", import.meta.url); + expect(img.href.endsWith("shared.png")).toBe(true); +}); + +it("should work with shared external asset module", () => { + const img = new URL("./shared-external.png", import.meta.url); + expect(img.href.endsWith("shared-external.png")).toBe(true); +}); + +it("should work with external asset module", () => { + const img = new URL("https://example.com/only-external.png", import.meta.url); + expect(img.href.endsWith("only-external.png")).toBe(true); +}); + +it("should work and extract DataURI", () => { + const img = new URL("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48dGl0bGU+aWNvbi1zcXVhcmUtc21hbGw8L3RpdGxlPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMDAgLjFMNTY1IDE1MHYyOTkuOUwzMDAgNTk5LjggMzUgNDQ5LjlWMTUweiIvPjxwYXRoIGZpbGw9IiM4RUQ2RkIiIGQ9Ik01MTcuNyA0MzkuNUwzMDguOCA1NTcuOHYtOTJMNDM5IDM5NC4xbDc4LjcgNDUuNHptMTQuMy0xMi45VjE3OS40bC03Ni40IDQ0LjF2MTU5bDc2LjQgNDQuMXpNODEuNSA0MzkuNWwyMDguOSAxMTguMnYtOTJsLTEzMC4yLTcxLjYtNzguNyA0NS40em0tMTQuMy0xMi45VjE3OS40bDc2LjQgNDQuMXYxNTlsLTc2LjQgNDQuMXptOC45LTI2My4yTDI5MC40IDQyLjJ2ODlsLTEzNy4zIDc1LjUtMS4xLjYtNzUuOS00My45em00NDYuOSAwTDMwOC44IDQyLjJ2ODlMNDQ2IDIwNi44bDEuMS42IDc1LjktNDR6Ii8+PHBhdGggZmlsbD0iIzFDNzhDMCIgZD0iTTI5MC40IDQ0NC44TDE2MiAzNzQuMVYyMzQuMmwxMjguNCA3NC4xdjEzNi41em0xOC40IDBsMTI4LjQtNzAuNnYtMTQwbC0xMjguNCA3NC4xdjEzNi41ek0yOTkuNiAzMDN6bS0xMjktODVsMTI5LTcwLjlMNDI4LjUgMjE4bC0xMjguOSA3NC40LTEyOS03NC40eiIvPjwvc3ZnPgo=", import.meta.url); + expect(img.href.endsWith(".svg")).toBe(true); +}); + +it("should work and extract shared DataURI", () => { + const img = new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAABNJREFUCB1jZGBg+A/EDEwgAgQADigBA//q6GsAAAAASUVORK5CYII%3D", import.meta.url); + expect(img.href.endsWith(".png")).toBe(true); +}); diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/inline.png b/test/configCases/css/no-extra-runtime-with-asset-modules/inline.png new file mode 100644 index 00000000000..1914264c087 Binary files /dev/null and b/test/configCases/css/no-extra-runtime-with-asset-modules/inline.png differ diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/resource.png b/test/configCases/css/no-extra-runtime-with-asset-modules/resource.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/no-extra-runtime-with-asset-modules/resource.png differ diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/shared-external.png b/test/configCases/css/no-extra-runtime-with-asset-modules/shared-external.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/no-extra-runtime-with-asset-modules/shared-external.png differ diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/shared.png b/test/configCases/css/no-extra-runtime-with-asset-modules/shared.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/no-extra-runtime-with-asset-modules/shared.png differ diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/source.text b/test/configCases/css/no-extra-runtime-with-asset-modules/source.text new file mode 100644 index 00000000000..595b9c8ccf1 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/source.text @@ -0,0 +1 @@ +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII= \ No newline at end of file diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/style.css b/test/configCases/css/no-extra-runtime-with-asset-modules/style.css new file mode 100644 index 00000000000..a3011b70388 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/style.css @@ -0,0 +1,28 @@ +.class { + color: red; + background: + url("./img.png"), + url("./img.png"), + url("data:image/png;base64,AAA"); + url('./inline.png'), + url('./resource.png'), + url('./source.text'), + url('data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E'), + url('https://example.com/img.png'); +} + +.class-2 { + background: url("./shared.png"); +} + +.class-3 { + background: url("./shared-external.png"); +} + +.class-4 { + background: url("data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="); +} + +.class-5 { + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAABNJREFUCB1jZGBg+A/EDEwgAgQADigBA//q6GsAAAAASUVORK5CYII%3D"); +} diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/test.config.js b/test/configCases/css/no-extra-runtime-with-asset-modules/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/no-extra-runtime-with-asset-modules/webpack.config.js b/test/configCases/css/no-extra-runtime-with-asset-modules/webpack.config.js new file mode 100644 index 00000000000..7aae301615e --- /dev/null +++ b/test/configCases/css/no-extra-runtime-with-asset-modules/webpack.config.js @@ -0,0 +1,49 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + devtool: false, + experiments: { + css: true + }, + module: { + rules: [ + { + test: /resource\.png$/, + type: "asset/resource" + }, + { + test: /inline\.png$/, + type: "asset/inline" + }, + { + test: /source\.text$/, + type: "asset/source" + }, + { + mimetype: "text/html", + type: "asset/resource" + }, + { + mimetype: "image/svg", + type: "asset/resource" + }, + { + mimetype: "image/gif", + type: "asset/resource" + }, + { + mimetype: "image/png", + type: "asset/resource" + } + ] + }, + output: { + assetModuleFilename: "[name][ext]" + }, + externals: { + "shared-external.png": "asset shared-external.png" + } +}; diff --git a/test/configCases/css/node/e.modules.css b/test/configCases/css/node/e.modules.css new file mode 100644 index 00000000000..ef3f61a1079 --- /dev/null +++ b/test/configCases/css/node/e.modules.css @@ -0,0 +1,3 @@ +.e { + background-color: red; +} \ No newline at end of file diff --git a/test/configCases/css/node/i.modules.css b/test/configCases/css/node/i.modules.css new file mode 100644 index 00000000000..059f5acdbfa --- /dev/null +++ b/test/configCases/css/node/i.modules.css @@ -0,0 +1,3 @@ +.i { + composes: e from "./e.modules.css"; +} \ No newline at end of file diff --git a/test/configCases/css/node/index.js b/test/configCases/css/node/index.js new file mode 100644 index 00000000000..231fe009d38 --- /dev/null +++ b/test/configCases/css/node/index.js @@ -0,0 +1,7 @@ +import { i } from "./i.modules.css" + +it("should work", () => { + expect(typeof i).toBe("string") + expect(__webpack_modules__["./i.modules.css"]).toBeDefined(); + expect(__webpack_modules__["./e.modules.css"]).toBeUndefined(); +}) \ No newline at end of file diff --git a/test/configCases/css/node/webpack.config.js b/test/configCases/css/node/webpack.config.js new file mode 100644 index 00000000000..a4219c1965a --- /dev/null +++ b/test/configCases/css/node/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "development", + devtool: false, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/parsing/cases/at-rule.css b/test/configCases/css/parsing/cases/at-rule.css new file mode 100644 index 00000000000..70f5adac94b --- /dev/null +++ b/test/configCases/css/parsing/cases/at-rule.css @@ -0,0 +1,65 @@ +@unknown; +@unknown x y; +@unknown "blah"; +@unknown \"blah\"; +@unknown /*test*/; +@unknown /*test*/x/*test*/ y; +@unknown ; +@unknown x y; + +@unknown {} +@\unknown {} +@unknown a b {} +@unknown {p:v} +@unknown x y {p:v} +@unknown x, y x(1) {p:v} +@unknown x, y x(1+2) {p:v} +@unknown/*test*/{/*test*/p/*test*/:/*test*/v/*test*/} +@unknown /*test*/x/*test*/ y/*test*/{/*test*/p/*test*/:/*test*/v/*test*/} +@unknown /*test*/x/*test*/,/*test*/y/*test*/ x(/*test*/1/*test*/+/*test*/2/*test*/)/*test*/{/*test*/p/*test*/:/*test*/v/*test*/} +@unknown { p : v } +@unknown x y { p : v } +@unknown x , y x( 1 + 2 ) { p : v } + +@unknown {s{p:v}} +@unknown x y {s{p:v}} +@unknown x, y f(1) {s{p:v}} +@unknown x, y f(1+2) {s{p:v}} +@unknown { .a { p: v; } .b { p: v } } +@unknown/*test*/{/*test*/s/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}/*test*/} +@unknown /*test*/x/*test*/ y/*test*/{/*test*/s/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}/*test*/} +@unknown /*test*/x/*test*/,/*test*/y/*test*/ f(/*test*/1/*test*/+/*test*/2/*test*/)/*test*/{/*test*/s/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}/*test*/} +@unknown { s { p : v } } +@unknown x y { s { p : v } } +@unknown x , y f( 1 ) { s { p : v } } +@unknown x , y f( 1 2 ) { s { p : v } } + +@unknown { +--> {} + + + + + + +div { + color: red; +} + + + +.test {} diff --git a/test/configCases/css/parsing/cases/comment.css b/test/configCases/css/parsing/cases/comment.css new file mode 100644 index 00000000000..1aafff30502 --- /dev/null +++ b/test/configCases/css/parsing/cases/comment.css @@ -0,0 +1,51 @@ +/* comment */a/* comment */ +{ + /* comment */color/* comment */:/* comment */red/* comment */; +} + +/* a { color: black } */ +/**/ +/* */ +div { + /* inside */ + color: black; + /* between */ + background: red; + /* end */ +} +/* b */ + +a { + color: black; + /* c */ +} + +@media/* comment */screen/* comment */{} +@media /* comment */ screen /* comment */ {} + +/*!test*/ +/*!te +st*/ +/*!te + + +st*/ +/*!te**st*/ +/****************************/ +/*************** FOO *****************/ +/* comment *//* comment */ + +/* comment *//* comment */ +/**/ +/*a*/ +/* +*/ +/**//**/ +/**//**//*a*/ +/**//**//* a *//**//**/ +./**test*//**test**/a { background: red; } + +/** + + */ + diff --git a/test/configCases/css/parsing/cases/dashed-ident.css b/test/configCases/css/parsing/cases/dashed-ident.css new file mode 100644 index 00000000000..0b325e13088 --- /dev/null +++ b/test/configCases/css/parsing/cases/dashed-ident.css @@ -0,0 +1,19 @@ +:root { + --main-color: #06c; + --accent-color: #006; +} + +.foo { + --fg-color: blue; +} + +#foo h1 { + color: var(--main-color); +} + +@--custom {} +@--library1-custom {} + +.class { + --vendor-property: --vendor-function("test"); +} diff --git a/test/configCases/css/parsing/cases/declaration.css b/test/configCases/css/parsing/cases/declaration.css new file mode 100644 index 00000000000..d10de1b7a7c --- /dev/null +++ b/test/configCases/css/parsing/cases/declaration.css @@ -0,0 +1,40 @@ +div { + prop: value; + prop: (value); + prop: {value}; + prop: [value]; + prop: fn(value); + prop: fn(value)fn(value); + prop: value, value; + prop: value ,value; + prop: value,value; + prop: value , value; + prop: 100%100%; + prop: "string""string"; + prop: #ccc#ccc; + prop: url(img.png)url(img.png); + prop: (value)(value); + prop: {value}{value}; + prop: [value][value]; + prop: center/1em; + prop: center/ 1em; + prop: center /1em; + prop: center / 1em; + c\olor: red; + prop/**/: big; + prop: (;); + prop: [;]; + prop: {;}; +} + +a { color: a/* ; */ b ; } +a{color:black} + +a {;; + color: black; + ; ; +} + +a { + color: \\ red \\ blue; +} diff --git a/test/configCases/css/parsing/cases/delim.css b/test/configCases/css/parsing/cases/delim.css new file mode 100644 index 00000000000..2df23ba84c6 --- /dev/null +++ b/test/configCases/css/parsing/cases/delim.css @@ -0,0 +1,6 @@ +.foo { color: # } +.foo { color: + } +.foo { color: - } +.foo { color: < } +.foo { color: > } +.foo { color: @ } diff --git a/test/configCases/css/parsing/cases/dimension.css b/test/configCases/css/parsing/cases/dimension.css new file mode 100644 index 00000000000..bedd4bd93bb --- /dev/null +++ b/test/configCases/css/parsing/cases/dimension.css @@ -0,0 +1,9 @@ +a { + prop: 10px; + prop: .10px; + prop: 12.34px; + prop: 0000.000px; + prop: 1px\\9; + prop: 1e; + prop: 1unknown; +} diff --git a/test/configCases/css/parsing/cases/function.css b/test/configCases/css/parsing/cases/function.css new file mode 100644 index 00000000000..df13997bb96 --- /dev/null +++ b/test/configCases/css/parsing/cases/function.css @@ -0,0 +1,234 @@ +div { + prod: fn(100px); + prod: --fn(100px); + prod: --fn--fn(100px); +} + +:root { + font-size: calc(100vw / 35); +} + +div { + --width: calc(10% + 30px); + + width: calc(0px); + line-height: calc(0); + line-height: calc(2 + 3 * 4); + line-height: calc((2 + 3) * 4); + line-height: calc(-5 * 0); + width: calc((100px + 100px)); + width: calc( ( 100px + 100px ) ); + width: calc( 100px + 100px ); + width: calc(500px + 50%); + width: calc(10% + 20%); + width: calc(2pc + 3pt); + width: calc(100% / 3 - 2 * 1em - 2 * 1px); + + width: calc(calc(50px)); + width: calc(calc(60%) - 20px); + width: calc(calc(3 * 25%)); + width: calc(2 * var(--width)); + width: calc(pow(pow(30px / 1px, 3), 1/3) * 1px); + width: calc(infinity); + width: calc(InFiNiTy); + width: calc(-InFiNiTy); + width: calc(NaN); + width: calc((1 * 2) * (5px + 20em / 2) - 80% / (3 - 1) + 5px); +} + +.bar { + font-size: calc(1rem * pow(1.5, -1)); + font-size: calc(1rem * pow(1.5, 0)); + font-size: calc(1rem * pow(1.5, 1)); + font-size: calc(1rem * pow(1.5, 2)); + font-size: calc(1rem * pow(1.5, 3)); + font-size: calc(1rem * pow(1.5, 4)); +} + +.fade { + background-image: linear-gradient(silver 0%, white 20px, white calc(100% - 20px), silver 100%); +} + +div { + /*height: -webkit-calc(9/16 * 100%)!important;*/ + /*width: -moz-calc((50px - 50%)*2);*/ +} +div { width: calc(100% / 4); } +div { margin-top: calc(-120% - 4px); } +div { width: calc(50% - ( ( 4% ) * 0.5 ) ); } + +.fade { + background-image: linear-gradient(silver 0%, white 20px, + white calc(100% - 20px), silver 100%); +} + +.type { + /* Set font-size to 10x the average of vw and vh, + but don’t let it go below 12px. */ + font-size: max(10 * (1vw + 1vh) / 2, 12px); +} + +.type { + /* Force the font-size to stay between 12px and 100px */ + font-size: clamp(12px, 10 * (1vw + 1vh) / 2, 100px); +} + +.more { + width: mod(18px, 5px); + transform: rotate(mod(-140deg, -90deg)); + transform: rotate(atan2(1, -1)); + transform: rotate(tan(90deg)); + transform: rotate(atan(tan(90deg))); + font-size: hypot(2em); + font-size: hypot(-2em); + font-size: hypot(30px, 40px); + background-position: sign(10%); + width: calc(pow(e, pi) - pi); + width: min(pi, 5, e); + width: log(5); + width: log(5, 5); + width: round(var(--width), 50px); + width: round(nearest, var(--width), 50px); + width: round(up, var(--width), 50px); + width: round(down, var(--width), 50px); + width: round(to-zero, var(--width), 50px); +} + +.min-max { + width: min(10px, 20px, 40px, 100px); + width: max(10px, 20px, 40px, 100px); + width: min( 10px , 20px , 40px , 100px ); +} + +.rem { + width: rem(-18px, 5px); +} + +.sin { + transform: rotate(sin(45deg)); + transform: rotate(sin(3.14159 / 4)); +} + +.cos { + transform: rotate(cos(45deg)); + transform: rotate(cos(3.14159 / 4)); +} + +.asin { + transform: rotate(asin(45deg)); + transform: rotate(asin(pi / 4)); +} + +.acos { + transform: rotate(acos(45deg)); + transform: rotate(acos(pi / 4)); +} + +.atan { + transform: rotate(atan(1 / -1)); +} + +.atan2 { + transform: rotate(atan2(1, -1)); +} + +.sqrt { + size: sqrt(250); +} + +.exp { + size: exp(250 * 2); +} + +.abs { + background-position: calc(10% * abs(-10%)); +} + +.sign { + background-position: sign(10%); + background-position: sign(10% * 2); + background-position: sign( 10% * 2 ); + background-position: sign(10%*2); + background-position: sign( 10 + 10 ); + background-position: sign( 10% ); + width: calc( ( 100px + 100px ) * 2 ); +} + +a { + background: element(#css-source) no-repeat; + background: element(var(--foo)) no-repeat; + background: -moz-element(#css-source) no-repeat; + background: -moz-element(var(--foo)) no-repeat; +} + +a { + background: linear-gradient(white, gray); + background: linear-gradient(yellow, blue); + background: linear-gradient(to bottom, yellow, blue); + background: linear-gradient(180deg, yellow, blue); + background: linear-gradient(to top, blue, yellow); + background: linear-gradient(to bottom, yellow 0%, blue 100%); + background: linear-gradient(135deg, yellow, blue); + background: linear-gradient(-45deg, blue, yellow); + background: linear-gradient(yellow, blue 20%, #0f0); + background: linear-gradient(to top right, red, white, blue); + background: linear-gradient(0deg, blue, green 40%, red); + background: linear-gradient(.25turn, red 10%, blue); + background: linear-gradient(45deg, red 0 50%, blue 50% 100%); +} + +div { + /* mix( [ && [ by ]? ] ; ; ) */ + opacity: mix( 70% by ease ; 0% ; 100% ); + opacity: mix(70%;0%;100%); +} + +a { + background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + background-image: url("./img.png"); + background-image: url('./img.png'); + background-image: URL('./img.png'); + background-image: url( './img.png'); + background-image: url('./img.png' ); + background-image: url( './img.png' ); + background-image: url( + 'img.png' + ); + background-image: url(); + background-image: url( ); + background-image: url(""); + background-image: url( "" ); + background-image: url(''); + background-image: url( '' ); + background-image: url( ' ' ); + background-image: url(./img.png); + background-image: url( ./img.png ); + background-image: url( ./image\32.png ); + background-image: url( + ./image\32.png + ); + background-image: url( + + + + ./image\32.png + + + + ); + background-image: url( + + + + ./image\32.png + + + + ); +} + +div { + color: var(--a); + color: var(--a,); + color: var(--a, blue); +} diff --git a/test/configCases/css/parsing/cases/hacks.css b/test/configCases/css/parsing/cases/hacks.css new file mode 100644 index 00000000000..526596eaa77 --- /dev/null +++ b/test/configCases/css/parsing/cases/hacks.css @@ -0,0 +1,7 @@ +html > /**/ body .selector {} +head ~ /**/ body .selector {} + +.selector { _property: value; } +.selector { -property: value; } +.selector { property: value\9; } +.selector { property/*\**/: value\9; } diff --git a/test/configCases/css/parsing/cases/hex-colors.css b/test/configCases/css/parsing/cases/hex-colors.css new file mode 100644 index 00000000000..e5dfdab55d4 --- /dev/null +++ b/test/configCases/css/parsing/cases/hex-colors.css @@ -0,0 +1,18 @@ +a { + color: #000000; + color: #ffffff; + color: #FFFFFF; + color: #0000ffcc; + color: #0000FFCC; + color: #000; + color: #fff; + color: #FFF; + color: #0000; + color: #ffff; + color: #FFFF; + color: #1; + color: #FF; + color: #123456789; + color: #abc; + color: #aa\61; +} diff --git a/test/configCases/css/parsing/cases/image2.png b/test/configCases/css/parsing/cases/image2.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/parsing/cases/image2.png differ diff --git a/test/configCases/css/parsing/cases/img.png b/test/configCases/css/parsing/cases/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/parsing/cases/img.png differ diff --git a/test/configCases/css/parsing/cases/important.css b/test/configCases/css/parsing/cases/important.css new file mode 100644 index 00000000000..a4407339b9b --- /dev/null +++ b/test/configCases/css/parsing/cases/important.css @@ -0,0 +1,19 @@ +.a { + prop: important; + color: red important; + width: 1px!important; + color: red!important; + color: red !important; + color: red !important; + color: red ! important ; + color: blue !IMPORTANT; + color: white ! IMPORTANT ; + margin: 10px ! important; + padding: 20px ! /* test */ important; + width: 100px ! /*! test */ important; + height: 100px /*! test */ important; + z-index: 1 ""! important; + padding: 1px/* sep */!important; + prop: red !iMpOrTaNt; + color: red !imp\ortant; +} diff --git a/test/configCases/css/parsing/cases/nesting.css b/test/configCases/css/parsing/cases/nesting.css new file mode 100644 index 00000000000..8f287052a00 --- /dev/null +++ b/test/configCases/css/parsing/cases/nesting.css @@ -0,0 +1,392 @@ +.foo { + color: green; + .bar { + font-size: 1.4rem; + } +} + +main { + div { color: red } + .bar { color: red } + #baz { color: red } + :has(p) { color: red } + ::backdrop { color: red } + [lang|="zh"] { color: red } + * { color: red } +} + +main { + + article { color: red } + > p { color: red } + ~ main { color: red } +} + +main { + & + article { color: red } + & > p { color: red } + & ~ main { color: red } +} + +ul { + padding-left: 1em; + .component & { + padding-left: 0; + } +} + +a { + color: blue; + &:hover { + color: lightblue; + } +} + +/* & can be used on its own */ +.foo { + color: blue; + & > .bar { color: red; } + > .baz { color: green; } +} +/* equivalent to + .foo { color: blue; } + .foo > .bar { color: red; } + .foo > .baz { color: green; } +*/ + + +/* or in a compound selector, + refining the parent’s selector */ +.foo { + color: blue; + &.bar { color: red; } +} +/* equivalent to + .foo { color: blue; } + .foo.bar { color: red; } +*/ + +/* multiple selectors in the list are all + relative to the parent */ +.foo, .bar { + color: blue; + + .baz, &.qux { color: red; } +} +/* equivalent to + .foo, .bar { color: blue; } + :is(.foo, .bar) + .baz, + :is(.foo, .bar).qux { color: red; } +*/ + +/* & can be used multiple times in a single selector */ +.foo { + color: blue; + & .bar & .baz & .qux { color: red; } +} +/* equivalent to + .foo { color: blue; } + .foo .bar .foo .baz .foo .qux { color: red; } +*/ + +/* & doesn’t have to be at the beginning of the selector */ + +.foo { + color: red; + .parent & { + color: blue; + } +} +/* equivalent to + .foo { color: red; } + .parent .foo { color: blue; } +*/ + +.foo { + color: red; + :not(&) { + color: blue; + } +} +/* equivalent to + .foo { color: red; } + :not(.foo) { color: blue; } +*/ + +/* But if you use a relative selector, + an initial & is implied automatically */ + +.foo { + color: red; + + .bar + & { color: blue; } +} + +/* equivalent to + .foo { color: red; } + .foo + .bar + .foo { color: blue; } +*/ + +/* Somewhat silly, but & can be used all on its own, as well. */ +.foo { + color: blue; + & { padding: 2ch; } +} +/* equivalent to + .foo { color: blue; } + .foo { padding: 2ch; } + + // or + + .foo { + color: blue; + padding: 2ch; + } +*/ + +/* Again, silly, but can even be doubled up. */ +.foo { + color: blue; + && { padding: 2ch; } +} +/* equivalent to + .foo { color: blue; } + .foo.foo { padding: 2ch; } +*/ + +/* The parent selector can be arbitrarily complicated */ +.error, #404 { + &:hover > .baz { color: red; } +} +/* equivalent to + :is(.error, #404):hover > .baz { color: red; } +*/ + +.ancestor .el { + .other-ancestor & { color: red; } +} +/* equivalent to + .other-ancestor :is(.ancestor .el) { color: red; } + +/* As can the nested selector */ +.foo { + & :is(.bar, &.baz) { color: red; } +} +/* equivalent to + .foo :is(.bar, .foo.baz) { color: red; } +*/ + +/* Multiple levels of nesting "stack up" the selectors */ +figure { + margin: 0; + + > figcaption { + background: hsl(0 0% 0% / 50%); + + > p { + font-size: .9rem; + } + } +} +/* equivalent to + figure { margin: 0; } + figure > figcaption { background: hsl(0 0% 0% / 50%); } + figure > figcaption > p { font-size: .9rem; } +*/ + +/* Example usage with Cascade Layers */ +@layer base { + html { + block-size: 100%; + + body { + min-block-size: 100%; + } + } +} +/* equivalent to + @layer base { + html { block-size: 100%; } + html body { min-block-size: 100%; } + } +*/ + +/* Example nesting Cascade Layers */ +@layer base { + html { + block-size: 100%; + + @layer support { + body { + min-block-size: 100%; + } + } + } +} +/* equivalent to + @layer base { + html { block-size: 100%; } + } + @layer base.support { + html body { min-block-size: 100%; } + } +*/ + +/* Example usage with Scoping */ +@scope (.card) to (> header) { + :scope { + inline-size: 40ch; + aspect-ratio: 3/4; + + > header { + border-block-end: 1px solid white; + } + } +} +/* equivalent to + @scope (.card) to (> header) { + :scope { inline-size: 40ch; aspect-ratio: 3/4; } + :scope > header { border-block-end: 1px solid white; } + } +*/ + +/* Example nesting Scoping */ +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) to (> header > *) { + :scope > header { + border-block-end: 1px solid white; + } + } +} + +/* equivalent to + .card { inline-size: 40ch; aspect-ratio: 3/4; } + @scope (.card) to (> header > *) { + :scope > header { border-block-end: 1px solid white; } + } +*/ + +/* Properties can be directly used */ +.foo { + display: grid; + + @media (orientation: landscape) { + grid-auto-flow: column; + } +} + +/* equivalent to: */ +.foo { + display: grid; +} +@media (orientation: landscape) { + .foo { + grid-auto-flow: column + } +} + +/* and also equivalent to the unnested: */ +.foo { display: grid; } + +@media (orientation: landscape) { + .foo { + grid-auto-flow: column; + } +} + +/* Conditionals can be further nested */ +.foo { + display: grid; + + @media (orientation: landscape) { + grid-auto-flow: column; + + @media (min-width > 1024px) { + max-inline-size: 1024px; + } + } +} + +/* equivalent to */ +.foo { display: grid; } + +@media (orientation: landscape) { + .foo { + grid-auto-flow: column; + } +} + +@media (orientation: landscape) and (min-width > 1024px) { + .foo { + max-inline-size: 1024px; + } +} + +/* Example nesting Cascade Layers */ +html { + @layer base { + block-size: 100%; + + @layer support { + & body { + min-block-size: 100%; + } + } + } +} + +/* equivalent to */ +@layer base { + html { block-size: 100%; } +} +@layer base.support { + html body { min-block-size: 100%; } +} + +/* Example nesting Scoping */ +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +/* equivalent to */ +.card { inline-size: 40ch; aspect-ratio: 3/4; } + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +article { + color: green; + & { color: blue; } + color: red; +} + +a, b { + & c { color: blue; } +} + +.foo, .foo::before, .foo::after { + color: black; + @media (prefers-color-scheme: dark) { + & { + color: white; + } + } +} diff --git a/test/configCases/css/parsing/cases/newline-windows.css b/test/configCases/css/parsing/cases/newline-windows.css new file mode 100644 index 00000000000..d5105eec8c5 --- /dev/null +++ b/test/configCases/css/parsing/cases/newline-windows.css @@ -0,0 +1,23 @@ +a::before { + content: "A really long \ +awesome string"; + color: #00ff00; + a24: \123456 + B; + test: url( + + + "./img.png" + + + ); + test: url( + + + ./img.png + + + ); + test: url( "" ); + test: url( '' ); +} diff --git a/test/configCases/css/parsing/cases/number.css b/test/configCases/css/parsing/cases/number.css new file mode 100644 index 00000000000..5597c09a849 --- /dev/null +++ b/test/configCases/css/parsing/cases/number.css @@ -0,0 +1,59 @@ +div { + property: 10; + property: +10; + property: -10; + property: 0.1; + property: +0.1; + property: -0.1; + property: -.1; + property: +.1; + property: 0; + property: 10; + property: .10; + property: 12.34; + property: 0.1; + property: 1.0; + property: 0.0; + property: +0.0; + property: -0.0; + property: .0; + property: 1.200000; + property: 1.2e2; + property: 1e2; + property: .2e2; + property: 1.2E2; + property: 1.2e+2; + property: 1.2e-2; + property: -1; + property: -1.2; + property: .2; + property: -.2; + property: +.2; + property: -1.2e3; + property: 1.75; + property: +1.75; + property: 1e0; + property: 1e1; + property: 1e+1; + property: 1e-1; + property: 1e-10; + property: 1+2; + property: 1-2; + property: 4.01; + property: -456.8; + property: .60; + property: .0060; + property: 10e3; + property: -3.4e-2; + property: 0.5600000000; + property: 10e6; + property: 10000000; + property: 0.0; + property: -0.0; + property: +0.0; + property: 1e1; + property: 1e2; + property: 1e3; + property: 1e4; + property: 100.1e-6; +} diff --git a/test/configCases/css/parsing/cases/pseudo-functions.css b/test/configCases/css/parsing/cases/pseudo-functions.css new file mode 100644 index 00000000000..830b3477a9f --- /dev/null +++ b/test/configCases/css/parsing/cases/pseudo-functions.css @@ -0,0 +1,3 @@ +:local(.class#id, .class:not(*:hover)) { color: red; } + +:import(something from ":somewhere") {} diff --git a/test/configCases/css/parsing/cases/revers-solidus.css b/test/configCases/css/parsing/cases/revers-solidus.css new file mode 100644 index 00000000000..57ddad2aec5 --- /dev/null +++ b/test/configCases/css/parsing/cases/revers-solidus.css @@ -0,0 +1 @@ +\ diff --git a/test/configCases/css/parsing/cases/selectors.css b/test/configCases/css/parsing/cases/selectors.css new file mode 100644 index 00000000000..79b6c36bd16 --- /dev/null +++ b/test/configCases/css/parsing/cases/selectors.css @@ -0,0 +1,746 @@ +[title] {} +[title=foo] {} +[title="foo"] {} +[ title = "foo" ] {} +[ title = "foo" ] {} +[lang~="en-us"] {} +[lang|="zh"] {} +[href^="#"] {} +[href$=".org"] {} +[href*="example"] {} +[href*="insensitive" i] {} +[href*="insensitive" I] {} +[href*="cAsE" s] {} +[href*="cAsE" S] {} +[foo|att=val] {} +[*|att] {} +[ *|att ] {} +[|att] {} +[ |att ] {} +[ |att ] {} +[att] {} +[ att ] {} +[ att ] {} +a[ class = "test" ] {} +a[ class = "test" ] {} +[href*="insensitive" i] {} +[ href*="insensitive" i ] {} +[ href *= "insensitive" i ] {} +[ href ] {} +[frame=hsides i] {} +#id.class[target] {} +#id[target] {} +[target].class {} +[title='foo'] {} +[data-style='value'][data-loading] {} +a[href="te's't"] {} +a[href='te"s"t'] {} +[ng\:cloak] {} +[ng\3a cloak] {} +[ng\00003acloak] {} +:not([foo=")"]) {} +:not(div/*)*/) { } +[foo=\"] {} +[foo=\{] {} +[foo=\(] {} +[foo=yes\:\(it\'s\ work\)] {} +[attr=\;] { } +[*|attr|="test"] {} +[foo|attr|="test"] {} + +.class {} +.♥ {} +.© {} +.“‘’” {} +.☺☃ {} +.⌘⌥ {} +.𝄞♪♩♫♬ {} +.💩 {} +.\? {} +.\@ {} +.\. {} +.\3A \) {} +.\3A \`\( {} +.\31 23 {} +.\31 a2b3c {} +.\ {} +.\<\>\<\<\<\>\>\<\> {} +.\+\+\+\+\+\+\+\+\+\+\[\>\+\+\+\+\+\+\+\>\+\+\+\+\+\+\+\+\+\+\>\+\+\+\>\+\<\<\<\<\-\]\>\+\+\.\>\+\.\+\+\+\+\+\+\+\.\.\+\+\+\.\>\+\+\.\<\<\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\.\>\.\+\+\+\.\-\-\-\-\-\-\.\-\-\-\-\-\-\-\-\.\>\+\.\>\. {} +.\# {} +.\#\# {} +.\#\.\#\.\# {} +.\_ {} +.\{\} {} +.\.fake\-class {} +.foo\.bar {} +.\3A hover {} +.\3A hover\3A focus\3A active {} +.\[attr\=value\] {} +.f\/o\/o {} +.f\\o\\o {} +.f\*o\*o {} +.f\!o\!o {} +.f\'o\'o {} +.f\~o\~o {} +.f\+o\+o {} +.-a-b-c- {} +.\#fake-id {} +foo.class > .foo.class {} +.foo#id {} +.class[target] {} +.class#id[target] {} +ul.list {} +ul.list::before {} +.\31 a2b3c {} +.\<\>\<\<\<\>\>\<\> {} +.\31 23 {} +.\# {} +.\#\# {} +.\#fake\-id {} +.foo\.bar {} +.\3A hover {} +.\3A hover\3A focus\3A active {} +.\[attr\=value\] {} +.not-pseudo\:focus {} +.not-pseudo\:\:focus {} +.\\1D306 {} +.\; {} + +/* { } */a b {} +/* test */a b {} +/* { } */ a b {} +/* test */ a b {} +a/* { } */b {} +a/* test */b {} +a /* { } */ b {} +a /* test */ b {} +a b/* { } */ {} +a b/* test */ {} +a b /* { } */ {} +a b /* test */ {} +a b/* { } */{} +a b/* test */{} +a/* test */,/* test */b{} +a /* test */ , /* test */ b {} + +article p {} +article +p {} +article p {} +article > p {} +article +> +p {} +article > p {} +p + img {} +p ++ +img {} +p + img {} +p ~ img {} +p +~ +img {} +p ~ img {} +article > p > a {} +article +> +p +> +a {} +div p {} +.class p {} +div .class {} +.class .class {} +#id p {} +div #id {} +#id #id {} +[attribute] p {} +div [attribute] {} +[attribute] [src] {} +div > p {} +.class > p {} +div > .class {} +.class > .class {} +#id > p {} +div > #id {} +#id > #id {} +[attribute] > p {} +div > [attribute] {} +[attribute] > [src] {} +div + p {} +.class + p {} +div + .class {} +.class + .class {} +#id + p {} +div + #id {} +#id + #id {} +[attribute] + p {} +div + [attribute] {} +[attribute] + [src] {} +div ~ p {} +.class ~ p {} +div ~ .class {} +.class ~ .class {} +#id ~ p {} +div ~ #id {} +#id ~ #id {} +[attribute] ~ p {} +div ~ [attribute] {} +[attribute] ~ [src] {} +a:hover [attribute] {} +a:hover #id {} +a:hover .class {} +a:hover div#thing {} +a + a[href='place'] {} +ul.list + a {} +.foo ~ a + bar {} +a+ a {} +a> a {} +a~ a {} +a +a {} +a >a {} +a ~a {} +a+a {} +a>a {} +a~a {} +a [type='button'] {} +a +[type='button'] {} +a a {} +namespace|type#id > .foo {} +#id > .cl + .cl2 {} +a c, d + e h {} +a ~ h + d {} +div div div div div div div div div div div {} +[href][class][name] h1 > h2 {} +[href*="test.com"][rel='external'][id][class~="test"] > [name] {} +[data-weird-attr*="Something=weird"], [data-weird-attr^="Something=weird"], [data-weird-attr$="Something=weird"], [data-weird-attr|="Something=weird"] {} +* + * {} +* * {} +* * {} +*[href] *:not(*.green) {} +*::-webkit-media-controls-play-button {} +col.selected || td {} +col.selected +|| +td +{} +col.selected||td {} + +.one {} +.foo.bar {} +.foo#id {} +.class[target] {} +.class#id[target] {} +#id.class {} +#id.class[target] {} +div#thing:hover {} +div#thing::before {} +a[href='place']:hover {} +a[href='place']::before {} +.one.two.three {} +button.btn-primary {} +*#z98y {} +#one#two {} +#one.two.three {} + +#id {} +#♥ {} +#© {} +#“‘’” {} +#☺☃ {} +#⌘⌥ {} +#𝄞♪♩♫♬ {} +#💩 {} +#\? {} +#\@ {} +#\. {} +#\3A \) {} +#\3A \`\( {} +#\31 23 {} +#\31 a2b3c {} +#\ {} +#\<\>\<\<\<\>\>\<\> {} +#\+\+\+\+\+\+\+\+\+\+\[\>\+\+\+\+\+\+\+\>\+\+\+\+\+\+\+\+\+\+\>\+\+\+\>\+\<\<\<\<\-\]\>\+\+\.\>\+\.\+\+\+\+\+\+\+\.\.\+\+\+\.\>\+\+\.\<\<\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\.\>\.\+\+\+\.\-\-\-\-\-\-\.\-\-\-\-\-\-\-\-\.\>\+\.\>\. {} +#\# {} +#\#\# {} +#\#\.\#\.\# {} +#\_ {} +#\{\} {} +#\.fake\-class {} +#foo\.bar {} +#\3A hover {} +#\3A hover\3A focus\3A active {} +#\[attr\=value\] {} +#f\/o\/o {} +#f\\o\\o {} +#f\*o\*o {} +#f\!o\!o {} +#f\'o\'o {} +#f\~o\~o {} +#f\+o\+o {} +#id {} +#id.class {} +#id.class[target] {} +div#thing:hover {} +div#thing:nth-child(2n+1) {} +div#thing::before {} +#foo[lang^=en] {} +#\; {} +#u-m\00002b {} +#♥ {} +#“‘’” {} +#☺☃ {} +#\@ {} +#\. {} +#\3A \) {} +#\3A \`\( {} +#\31 23 {} +#\31 a2b3c {} +#\ {} +#\<\>\<\<\<\>\>\<\> {} +#\# {} +#\#\# {} +#\#\.\#\.\# {} +#\_ {} +#\{\} {} +#\.fake\-class {} +#foo\.bar {} +#\3A hover {} +#\3A hover\3A focus\3A active {} +#\[attr\=value\] {} +#f\/o\/o {} +#f\\o\\o {} +#f\*o\*o {} +#f\!o\!o {} +#f\\\'o\\\'o {} +#f\~o\~o {} +#f\+o\+o {} + +div, p {} +div , p {} +div , p {} +a, a[href='place'] {} +a #foo > [foo='bar'], .FOO {} +div, p, a {} +div,p,a{} +div , p , a {} +div +, +p +, +a +{} +.foo, .bar, *.baz {} +input::-moz-placeholder, input::placeholder {} +a,b,c,d,e,f,g {} +a, b, c, d, e, f, g {} +*, * {} +#id, #id2 {} +h1, h2 {} +.class, .foo {} +[attr], [attrtoo] {} +a/* { } */ b {} + +table.colortable { + & td { + text-align: center; + &.c { text-transform:uppercase } + &:first-child, &:first-child + td { border:1px solid black } + } + + & th { + text-align:center; + background:black; + color:white; + } +} + +.foo { + color: blue; + & > .bar { color: red; } +} + +.foo { + color: blue; + &.bar { color: red; } +} + +.foo, .bar { + color: blue; + & + .baz, &.qux { color: red; } +} + +.foo { + color: blue; + & .bar & .baz & .qux { color: red; } +} + +.foo { + color: blue; + & { padding: 2ch; } +} + +/* TODO fix me */ +/*.foo {*/ +/* color: blue;*/ +/* && { padding: 2ch; }*/ +/*}*/ + +.error, #test { + &:hover > .baz { color: red; } +} + +.foo { + &:is(.bar, &.baz) { color: red; } +} + +figure { + margin: 0; + + & > figcaption { + background: hsl(0 0% 0% / 50%); + + & > p { + font-size: .9rem; + } + } +} + +.foo { + color: blue; + &__bar { color: red; } +} + +.foo { + color: red; + + .bar { + color: blue; + } +} + +.foo { + color: red; + + + .bar { + color: blue; + } +} + +.foo { + color: blue; + & > .bar { color: red; } + > .baz { color: green; } +} + +div { + color: red; + + & input { margin: 1em; } + /* valid, no longer starts with an identifier */ + + :is(input) { margin: 1em; } + /* valid, starts with a colon, + and equivalent to the previous rule. */ +} + +.foo, .bar { + color: blue; + + .baz, &.qux { color: red; } +} + +.foo { + color: blue; + & .bar & .baz & .qux { color: red; } +} + +.foo { + color: red; + .parent & { + color: blue; + } +} + +.foo { + color: red; + :not(&) { + color: blue; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.ancestor .el { + .other-ancestor & { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +@layer base { + html { + block-size: 100%; + + & body { + min-block-size: 100%; + } + } +} + +@layer base { + html { + block-size: 100%; + + @layer base.support { + & body { + min-block-size: 100%; + } + } + } +} + +article { + color: green; + & { color: blue; } + color: red; +} + +.foo { + color: red; + @media (min-width: 480px) { + & h1, & h2 { + color: blue; + } + } +} + +:unknown {} +:unknown() {} +:unknown(foo) {} +:unknown(foo bar) {} +:unknown(foo, bar) {} +:unknown([foo]) {} +:unknown((foo bar)) {} +:unknown(((foo bar))) {} +:unknown({foo: bar}) {} +:unknown({{foo: bar}}) {} +:unknown({foo: bar !important}) {} +:unknown("string") {} +:unknown("string", foo) {} +:unknown('string') {} +:unknown(url(img.png)) {} +:unknown({!}) {} +:unknown(!) {} +:unknown({;}) {} +:unknown(;) {} + +:nth-child(2n+1) {} +:nth-child(2n +1) {} +:nth-child(2n + 1) {} +:nth-child(2n+ 1) {} +:nth-child(2n-1) {} +:nth-child(2n -1) {} +:nth-child(2n- 1) {} +:nth-child(2n - 1) {} +:nth-child(-2n+1) {} +:nth-child(-2n +1) {} +:nth-child(-2n + 1) {} +:nth-child(-2n+ 1) {} +:nth-child(-2n-1) {} +:nth-child(-2n -1) {} +:nth-child(-2n - 1) {} +:nth-child(+2n+1) {} +:nth-child(+2n +1) {} +:nth-child(+2n + 1) {} +:nth-child(+2n+ 1) {} +:nth-child(+2n-1) {} +:nth-child(+2n -1) {} +:nth-child(+2n- 1) {} +:nth-child(+2n - 1) {} +:nth-child(n+1) {} +:nth-child(n +1) {} +:nth-child(n + 1) {} +:nth-child(n+ 1) {} +:nth-child(n-1) {} +:nth-child(n -1) {} +:nth-child(n- 1) {} +:nth-child(n - 1) {} +:nth-child(-n+1) {} +:nth-child(-n +1) {} +:nth-child(-n + 1) {} +:nth-child(-n+ 1) {} +:nth-child(-n-1) {} +:nth-child(-n -1) {} +:nth-child(-n- 1) {} +:nth-child(-n - 1) {} +:nth-child(+n+1) {} +:nth-child(+n +1) {} +:nth-child(+n + 1) {} +:nth-child(+n+ 1) {} +:nth-child(+n-1) {} +:nth-child(+n -1) {} +:nth-child(+n- 1) {} +:nth-child(+n - 1) {} +:nth-child(n) {} +:nth-child(-n) {} +:nth-child(+n) {} +:nth-child(2n) {} +:nth-child(-2n) {} +:nth-child(+2n) {} +:nth-child(N) {} +:nth-child(-N) {} +:nth-child(+N) {} +:nth-child(2N) {} +:nth-child(-2N) {} +:nth-child(+2N) {} +:nth-child(1) {} +:nth-child(-1) {} +:nth-child(+1) {} +:nth-child(123456n-12345678) {} + +:Nth-Child(2n+1) {} +:NTH-CHILD(2n+1) {} + +:nth-child(odd) {} +:nth-child(ODD) {} +:nth-child(oDd) {} +:nth-child(even) {} +:nth-child(eVeN) {} +:nth-child(EVEN) {} + +:nth-child(/*test*/2n/*test*/+/*test*/1/*test*/) {} +:nth-last-child(/*test*/+3n/*test*/-/*test*/2/*test*/) {} + +:nth-child( 2n + 1 ) {} +:nth-last-child( +3n - 2 ) {} + +:nth-child(-2n+1) {} +:nth-last-child(2n+1) {} +:nth-of-type(2n+1) {} +:nth-last-of-type(2n+1) {} + +:nth-col(odd) {} +:nth-col(2n+1) {} +:nth-last-col(odd) {} +:nth-last-col(2n+1) {} + + +p:nth-child(0){} +p:nth-child(+0){} +p:nth-child(-0){} +p:nth-child(1){} +p:nth-child(+1){} +p:nth-child(-1){} +p:nth-child(3){} +p:nth-child(+3){} +p:nth-child(-3){} + +:nth-child(2n+1 of li) {} +:nth-child( 2n+1 of li ) {} +:nth-child(2n+1 of li,.test) {} +:nth-child(2n+1 of li, .test) {} +:nth-child(-n+3 of li.important) {} +tr:nth-child(even of :not([hidden])) {} + +:root {} +:any-link {} +button:hover {} +div\:before {} +div\::before {} +iNpUt {} +:matches(section, article, aside, nav) h1 {} +input:not([type='submit']) {} +div.sidebar:has(*:nth-child(5)):not(:has(*:nth-child(6))) {} +::-webkit-scrollbar-thumb:window-inactive {} +::-webkit-scrollbar-button:horizontal:decrement {} +.test::-webkit-scrollbar-button:horizontal:decrement {} +*:is(*) {} +:--heading {} +a:-moz-placeholder {} +a:hover::before {} +div :nth-child(2) {} +a:hOvEr {} +:-webkit-full-screen a {} + +a::after {} + +dialog::backdrop {} + +a::before {} + +video::cue {} +video::cue(b) {} + +video::cue-region {} +video::cue-region(#scroll) {} + +::grammar-error {} + +::marker {} + +tabbed-custom-element::part(tab) {} + +::placeholder {} + +::selection {} + +::slotted(*) {} +::slotted(span) {} + +::spelling-error {} + +::target-text {} + +.form-range::-webkit-slider-thumb:active {} + +a::bEfOrE {} + +a:hover::before {} +a:hover::-moz-placeholder {} +a, b > .foo::before {} +*:hover.class {} + +*|* {} +foo|h1 {} +foo|* {} +|h1 {} +*|h1 {} +h1 {} +\2d {} +\2d a {} +div\:before {} +d\iv {} +foreignObject {} +html textPath {} +div#thing {} +* {} +* #foo {} +*#foo {} +#foo * {} +.bar * {} +*.bar {} +*[lang^=en] {} +*:hover {} +*::before {} +* *:not(*) {} +a/**/{} +a/**/ +{} +\@noat { } +h1\\{ + color: \\; +} +. a { + +} + +# a { + +} + diff --git a/test/configCases/css/parsing/cases/urls.css b/test/configCases/css/parsing/cases/urls.css new file mode 100644 index 00000000000..7d9694915f0 --- /dev/null +++ b/test/configCases/css/parsing/cases/urls.css @@ -0,0 +1,26 @@ +body { + background: url( + https://example\2f4a8f.com\image.png + ) +} + +--element name.class name#_id { + background: + url( "https://example.com/some url \"with\" 'spaces'.png" ) + url('https://example.com/\'"quotes"\'.png'); +} + +div { + color: red; + a200:-webkit-image-set("img.png"1x); +} + +div { + color: red; + a201:url("img.png"); +} + +div { + color: red; + a202:url(img.png); +} diff --git a/test/configCases/css/parsing/cases/values.css b/test/configCases/css/parsing/cases/values.css new file mode 100644 index 00000000000..2649ab32383 --- /dev/null +++ b/test/configCases/css/parsing/cases/values.css @@ -0,0 +1,615 @@ +div { + transform: rotate(45deg); + transform: rotate(-50grad); + transform: rotate(3.1416rad); + transform: rotate(1.75turn); +} + +.hex-color { + color: #00ff00; + color: #0000ffcc; + color: #123; + color: #123c; +} + +.rgb { + color: rgb(255, 165, 0); + color: rgb(255,165,0); + color: rGb(255,165,0); + color: rgb(0 255 0); + color: rgb(0%100%0%); + color: rgb(29 164 192 / 95%); + color: rgb(123 255 255 / .5); + color: rgb(123 255 255 / 50%); + color: rgb(48% 100% 100% / 50%); + color: rgb(48% none 100% / 50%); + color: rgb(48% 100% 100% / none); + color: rgb(var(--red), var(--green), var(--blue)); + color: rgb(var(--red) var(--green) var(--blue)); + color: rgb(var(--red) var(--green) var(--blue) / var(--alpha)); +} + +.rgba { + color: rgba(255, 0, 0, 100%); + color: rgba(255, 255, 0, 1); + color: rgba(255, 255, 0, 0.8); + color: rgba(255, 165, 0); + color: rgba(255,165,0); + color: rGbA(255,165,0); + color: rgba(0 255 0); + color: rgba(0%100%0%); + color: rgba(29 164 192 / 95%); + color: rgba(123 255 255 / .5); + color: rgba(123 255 255 / 50%); + color: rgba(48% 100% 100% / 50%); + color: rgba(48% none 100% / 50%); + color: rgba(48% 100% 100% / none); + color: rgba(123 none 123 / 50%); + color: rgba(123 123 123 / none); + color: rgb(var(--red), var(--green), var(--blue), var(--alpha)); +} + +.hsl { + color: hsl(38.824 100% 50%); + color: HsL(39 100% 50%); + color: hsl(100deg, 100%, 50%); + color: hsl(100, 100%, 50%); + color: hsl(100 100% 50%); + color: hsl(100, 100%, 50%, .8); + color: hsl(100 100% 50% / .8); + color: hsl(var(--a), var(--b), var(--c)); + color: hsl(var(--a), var(--b), var(--c), var(--d)); + color: hsl(var(--a) var(--b) var(--c)); + color: hsl(var(--a) var(--b) var(--c) / var(--d)); +} + +.hsla { + color: hsla(100, 100%, 50%, .8); + color: hsla(100 100% 50% / .8); + color: hsla(var(--a), var(--b), var(--c), var(--d)); +} + +.hwb { + color: hwb(194 0% 0%); + color: hwb(194 0% 0% / 50%); + color: hwb(194 0% 50%); + color: hwb(194 50% 0%); + color: hwb(194 50% 50%); + color: hwb(var(--a) var(--b) var(--c)); + color: hwb(var(--a) var(--b) var(--c) / var(--d)); +} + +.lab { + color: lab(29.2345% 39.3825 20.0664); + color: lab(29.2345% 39.3825 20.0664 / 100%); + color: lab(29.2345% 39.3825 20.0664 / 50%); + color: lab(var(--a) var(--b) var(--c)); + color: lab(var(--a) var(--b) var(--c) / var(--d)); +} + +.lch { + color: lch(52.2345% 72.2 56.2 / 1); + color: lch(29.2345% 44.2 27); + color: lch(29.2345% 44.2 45deg); + color: lch(29.2345% 44.2 .5turn); + color: lch(29.2345% 44.2 27 / 100%); + color: lch(29.2345% 44.2 27 / 50%); + color: lch(var(--a) var(--b) var(--c)); + color: lch(var(--a) var(--b) var(--c) / var(--d)); +} + +.oklab { + color: oklab(40.101% 0.1147 0.0453); + color: oklab(var(--a) var(--b) var(--c)); +} + +.oklch { + color: oklch(42.1% 0.192 328.6 / 1); + color: oklch(42.1% 0.192 328.6); + color: oklch(var(--a) var(--b) var(--c)); + color: oklch(var(--a) var(--b) var(--c) / var(--d)); +} + +.color { + color: color(sRGB 0 1 0); + color: color(srgb-linear 0 1 0); + color: color(display-p3 0 1 0); + color: color(a98-rgb 0 1 0); + color: color(prophoto-rgb 0 1 0); + color: color(rec2020 0 1 0); + color: color(sRGB 0 none 0); + color: color(display-p3 0.823 0.6554 0.2537 /1); + color: color(display-p3 0.823 0.6554 0.2537 / 1); + color: color(display-p3 0.823 0.6554 0.2537/1); + color: color(display-p3 0.823 0.6554 0.2537); + color: color(xyz 0.472 0.372 0.131); + color: color(xyz-d50 0.472 0.372 0.131); + color: color(xyz-d65 0.472 0.372 0.131); + color: color(display-p3 -0.6112 1.0079 -0.2192); + color: color(sRGB 0.41587 0.503670 0.36664); + color: color(display-p3 0.43313 0.50108 0.37950); + color: color(a98-rgb 0.44091 0.49971 0.37408); + color: color(prophoto-rgb 0.36589 0.41717 0.31333); + color: color(rec2020 0.42210 0.47580 0.35605); + color: color(profoto-rgb 0.4835 0.9167 0.2188); + color: color(var(--a) var(--b) var(--c) var(--d)); + color: color(var(--a) var(--b) var(--c) var(--d) / var(--e)); +} + +@color-profile --fogra55beta { + src: url('https://example.org/2020_13.003_FOGRA55beta_CL_Profile.icc'); +} + +.dark_skin { + background-color: color(--fogra55beta 0.183596 0.464444 0.461729 0.612490 0.156903 0.000000 0.000000); + background-color: color(--fogra55beta 0.070804 0.334971 0.321802 0.215606 0.103107 0.000000 0.000000); + background-color: color(--fogra55beta 0.572088 0.229346 0.081708 0.282044 0.000000 0.000000 0.168260); + background-color: color(--fogra55beta 0.314566 0.145687 0.661941 0.582879 0.000000 0.234362 0.000000); + background-color: color(--fogra55beta 0.375515 0.259934 0.034849 0.107161 0.000000 0.000000 0.308200); + background-color: color(--fogra55beta 0.397575 0.010047 0.223682 0.031140 0.000000 0.317066 0.000000); +} + +.device-cmyk { + color: device-cmyk(0 81% 81% 30%); + color: device-cmyk(0% 70% 20% 0%); + color: device-cmyk(0% 70% 20% 0%); + color: device-cmyk(0 0.7 0.2 0); + color: device-cmyk(var(--a) var(--b) var(--c) var(--d)); +} + +.color-mix { + color: color-mix(in lch, purple 50%, plum 50%); + color: color-mix(in lch, purple 50%, plum); + color: color-mix(in lch, purple, plum 50%); + color: color-mix(in lch, purple, plum); + color: color-mix(in lch, plum, purple); + color: color-mix(in lch, purple 80%, plum 80%); +} + +.color-contrast { + color: color-contrast(currentColor vs hsl(200 83% 23%), purple to AA); + color: color-contrast(currentColor vs rgb(10 75 107), rgb(128 0 128) to 4.5); +} + +.foo { + color: device-cmyk(0 81% 81% 30%); + color: rgb(178 34 34); + color: firebrick; +} + +.bar { + color: device-cmyk(0 81% 81% 30%); + color: lab(45.060% 45.477 35.459); + color: rgb(70.690% 26.851% 19.724%); +} + +.calc { + color: rgba(calc(255 - 1), 255, 255, 1); + color: rgba(255, calc(255 - 1), 255, 1); + color: rgba(255, 255, calc(255 - 1), 1); + color: rgba(255, 255, 255, calc(1 - 1)); + color: hsla(calc(120deg + 16deg) 100% 50%); + color: hsla(120deg calc(20% + 10%) 50%); + color: hsla(120deg 40% calc(20% + 10%)); + color: hsl(120deg 40% 20% / calc(20% + 10%)); + color: hwb(194 calc(20% + 10%) 0% / .5); + color: device-cmyk(0 calc(20%) 81% 30%); + color: color(display-p3 calc(1 + 2) 0.5 0); +} + +.relative { + color: rgb(from indianred 255 255 255); + color: rgb(from transparent 255 255 255); + color: lch(from var(--mygray) 62% 30 -34); + color: rgb(from Canvas 255 255 255); + color: rgb(from canvas 255 255 255); + color: rgb(from ActiveBorder 255 255 255); + color: rgb(from -moz-buttondefault 255 255 255); + color: rgb(from -moz-activehyperlinktext 255 255 255); + color: rgb(from currentColor 255 255 255); +} + + +.var { + color: rgb(var(--red) var(--green) var(--blue)); + color: rgb(var(--red) var(--green) var(--blue) / var(--alpha)); + + color: rgb(env(--red) env(--green) env(--blue)); + color: rgb(env(--red) env(--green) env(--blue) / env(--alpha)); + + color: rgb(constant(--red) constant(--green) constant(--blue)); + color: rgb(constant(--red) constant(--green) constant(--blue) / constant(--alpha)); +} + +div { + color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity)); + color: lab(var(--mycolor)); + color: rgba(var(--bg-color) 1); + color: rgba(var(--bg-color) / 1); + color: lab(var(--mycolor) 0); + color: lab(var(--mycolor) var(--mycolor)); + color: lab(from var(--mycolor) 0 0 0); + color: lab(from var(--mycolor) var(--color)); + color: rgb(var(--bg-color)); + color: rgb(var(--bg-color), var(--bg-color-a)); + color: rgb(var(--bg-color) var(--bg-color-a)); + color: rgba(var(--bg-color) 1); + color: rgb(var(--mycolor) var(--mycolor) var(--mycolor)); + color: lab(var(--mycolor) var(--mycolor) var(--mycolor)); + color: color(from var(--bg-color) var(--bg-color)); + color: color(from var(--bg-color) var(--bg-color) var(--bg-color)); + color: color(var(--bg-color) var(--bg-color)); + color: color(var(--bg-color)); + color: color(from var(--base) mi calc(pi * 2) calc(pi / 2)); + color: color(var(--bg-color)); + color: color(--unwise 35% 20% 8%); + color: color(--unwise var(--bg-color)); + color: color(--unwise var(--bg-color) var(--bg-color)); + color: device-cmyk(var(--bg-color)); + color: device-cmyk(var(--bg-color) var(--bg-color)); + color: device-cmyk(var(--bg-color) var(--bg-color) var(--bg-color)); + color: device-cmyk(var(--bg-color) var(--bg-color) var(--bg-color) var(--bg-color)); + color: device-cmyk(var(--bg-color) var(--bg-color) var(--bg-color) var(--bg-color) / var(--bg-color)); + color: device-cmyk(var(--bg-color) var(--bg-color) / var(--bg-color)); + color: device-cmyk(var(--bg-color) / var(--bg-color)); + color: device-cmyk(var(--bg-color) var(--bg-color)); + color: rgb(var(--bg-color)); + color: rgb(var(--bg-color) var(--bg-color)); + color: rgb(var(--bg-color) var(--bg-color) var(--bg-color)); + color: rgb(var(--bg-color) var(--bg-color) var(--bg-color) / var(--bg-color)); + color: rgb(var(--bg-color) var(--bg-color) / var(--bg-color)); + color: rgb(var(--bg-color) / var(--bg-color)); + color: rgb(var(--bg-color) var(--bg-color)); + color: rgb(var(--bg-color)); + color: rgb(var(--bg-color), var(--bg-color)); + color: rgb(var(--bg-color), var(--bg-color), var(--bg-color)); + color: rgb(var(--bg-color), var(--bg-color), var(--bg-color), var(--bg-color)); + color: rgb(var(--bg-color), var(--bg-color), var(--bg-color)); + color: hwb(var(--bg-color)); + color: hwb(var(--bg-color) var(--bg-color)); + color: hwb(var(--bg-color) var(--bg-color) var(--bg-color)); + color: hwb(var(--bg-color) var(--bg-color) var(--bg-color) / var(--bg-color)); + color: hwb(var(--bg-color) var(--bg-color) / var(--bg-color)); + color: hwb(var(--bg-color) / var(--bg-color)); + color: hwb(var(--bg-color) var(--bg-color)); + color: hwb(var(--bg-color)); + color: hwb(120 0% 49.8039%); + color: hwb(120 var(--bg-color) 49.8039%); + color: hwb(120 var(--bg-color) 49.8039% / 1); + color: hwb(120 var(--bg-color) 49.8039% / 100); + color: hwb(120 var(--bg-color) var(--bg-color)); + color: hwb(var(--bg-color) var(--bg-color) var(--bg-color)); + color: color(rec2020 0.42053 0.979780 0.00579); + color: color(rec2020 0.42053 0.979780 0.00579 / var(--color)); + color: color(rec2020 0.42053 var(--color)); + color: color(rec2020 0.42053 var(--color) / 100%); + color: color(rec2020 var(--color)); + color: color(rec2020 var(--color) / var(--color)); + color: color(var(--color) var(--color)); + color: color(var(--color)); + color: color(xyz-d50 0.2005 0.14089 0.4472); + color: color(sRGB 0.41587 0.503670 0.36664); + color: color(display-p3 0.43313 0.50108 0.37950); + color: color(a98-rgb 0.44091 0.49971 0.37408); + color: color(prophoto-rgb 0.36589 0.41717 0.31333); + color: color(rec2020 0.42210 0.47580 0.35605); +} + +:root { + ---:value; + + --important:value!important; + --important1: value!important; + --important2: value !important; + --important3:value !important; + --important4: calc(1)!important; + + --empty: ; + --empty2: /**/; + --empty3: !important; + --empty4:/**/ !important; + --empty5:/* 1 */ /* 2 */; + + --no-whitespace:ident; + --number: 1; + --unit: 100vw; + --color: #06c; + + --function: calc(1 + 1); + --variable: var(--unit); + + --string: 'single quoted string'; + --string: "double quoted string"; + + --square-block: [1, 2, 3]; + --square-block1: []; + --square-block2:[]; + --round-block: (1, 2, 3); + --round-block1: (); + --round-block2:(); + --bracket-block: {1, 2, 3}; + --bracket-block1: {}; + --bracket-block2:{}; + + + --JSON: [1, "2", {"three": {"a":1}}, [4]]; +--javascript: function(rule) { console.log(rule) }; + +--CDO: ; + +--complex-balanced:{[({()})()()[({})]]}[{()}]([]); +--fake-important:{!important}; +--semicolon-not-top-level: (;); +--delim-not-top-level: (!); +--zero-size: { +width: 0; +height: 0; +}; +--small-icon: { +width: 16px; +height: 16px; +} +; +} + +:root{--a:1} +:root {--foo: } +:root { + --foo: +} + +:root { + --var: value; +} + +div { + width: 100\%; + width: 100px2p; + width: 100px; + width: 100PX; + width: 100UNKNOWN; + width: 100НЕИЗВЕСТНО; +} + +table { + color: \red; +} + +a { + background: \;a; +} +:not([foo=")"]) { } +:not(div/*)*/) { } +:not(:nth-child(2n of [foo=")"])) { } +[foo=\"] { } +[foo=\{] { } +[foo=\(] { } +[foo=yes\:\(it\'s\ work\)] { } + +\@noat { } + +h1\\{ + color: \\; +} + +[attr="\;"] { } + +.prop { + \62 olor: red +} + +div { + prop: 1Hz; + prop: 1kHz; +} + +a { animation: test; } +a { animation: тест; } +a { animation: т\ест; } +a { animation: 😋; } +a { animation: \\😋; } +a { animation: \😋; } + +div { + z-index: 12; + z-index: +123; + z-index: -456; + z-index: 0; + z-index: +0; + z-index: -0; +} + +div { + width: 100e\x; + width: 100ex; + width: 100px; + width: 100PX; + width: 100pX; +} + +div { + width: 0%; + width: 0.1%; + width: 100%; + width: 100.5%; + width: 100.1000%; + width: 1e0%; + width: 1e1%; + width: 1e2%; + width: 10e-1%; + width: 10e-5%; + width: 10e+2%; +} + +div { + margin: -5%; + margin: -5.5%; +} + +a::before { + content: "This string is demarcated by double quotes."; + content: 'This string is demarcated by single quotes.'; + content: "This is a string with \" an escaped double quote."; + content: "This string also has \22 an escaped double quote."; + content: 'This is a string with \' an escaped single quote.'; + content: 'This string also has \27 an escaped single quote.'; + content: "This is a string with \\ an escaped backslash."; + content: "This string also has \22an escaped double quote."; + content: "This string also has \22 an escaped double quote."; + content: "This string has a \Aline break in it."; + content: "A really long \ +awesome string"; + content: ";'@ /**/\""; + content: '\'"\\'; + content: "a\ +b"; + content: "a\ +b"; + content: "a\ +b"; + content: "a\ b"; + content: "a\ +\ +\ +\ \ +b"; + content: 'a\62 c'; +} + +a[title="a not s\ +o very long title"] { + color: red; +} +a[title="a not so very long title"] { + color: red; +} + +div { + family-name: "A;' /**/"; +} + + +.foo { + content: ";'@ /**/\""; + content: '\'"\\'; +} + +@media print and (min-resolution: 300dpi) {} +@media print and (min-resolution: 300dpcm) {} +@media print and (min-resolution: 300dppx) {} +@media print and (min-resolution: 300x) {} + +div { + prop: []; + prop: [ ]; + prop: [row1-start]; + prop: [ row1-start-with-spaces-around ]; + prop: [red #fff 12px]; + prop: [row1-start] 25% [row1-end row2-start] 25% [row2-end]; +} + +#delay { + font-size: 14px; + transition-property: font-size; + transition-duration: 4s; + transition-delay: 2s; +} + +.box { + transition: width 2s, height 2s, background-color 2s, transform 2s; +} + +.time { + transition-duration: 4s; + transition-duration: 4000ms; +} + +@font-face { + font-family: 'Ampersand'; + src: local('Times New Roman'); + unicode-range: U+26; /* single codepoint */ + unicode-range: u+26; + unicode-range: U+0-7F; + unicode-range: U+0025-00FF; /* codepoint range */ + unicode-range: U+4??; /* wildcard range */ + unicode-range: U+0025-00FF, U+4??; /* multiple values */ + unicode-range: U+A5, U+4E00-9FFF, U+30??, U+FF00-FF9F; /* multiple values */ + unicode-range: U+????; + unicode-range: U+??????; + unicode-range: U+12; + unicode-range: U+12e112; + unicode-range: U+1e1ee1; + unicode-range: U+1e1ee1-FFFFFF; + unicode-range: U+1e1ee?; + unicode-range: U+12-13; +} + +div { + background: url(https://example.com/image.png); + background: URL(https://example.com/image.png); + background: \URL(https://example.com/image.png); + background: url("https://example.com/image.png"); + background: url('https://example.com/image.png'); + background: URL('https://example.com/image.png'); + background: \URL('https://example.com/image.png'); + background: url(data:image/png;base64,iRxVB0); + background: url(#IDofSVGpath); + + /* A is either an or a functional notation. */ + background: url("//aa.com/img.svg" prefetch); + background: url("//aa.com/img.svg" foo bar baz func(test)); + background: url("http://example.com/image.svg" param(--color var(--primary-color))); + + background: url(); + background: url(""); + background: url(''); + + --foo: "http://www.example.com/pinkish.gif"; + + background: src("http://www.example.com/pinkish.gif"); + background: SRC("http://www.example.com/pinkish.gif"); + background: src(var(--foo)); + background: url( https://example.com/image.png ); + background: u\rl( https://example.com/image.png ); + background: url( + https://example.com/image.png + ); + background: url( + + + https://example.com/image.png + + + ); + background: URL(https://example.com/ima\)ge.png); + background: url( "https://example.com/image.png" ); +} + +.delim { + a1: @ 12; + a2: 1 # 1; + a3: ( 1 2 3 ); + a4: 1 + 1; + a5: +s1; + a6: "test", "test"; + a7: 1 - 2 - 3; + a8: fn("test");;;;; + a9: < >; + a10: \ ; + a11: $ ; + a12: --1; + a13: -+1; + a14: ident1ident2; + a15: --fn("test"); + a16: +3.4e2; + a17: +3.4e-2; + a18: +3.4e+2; + a19: 12.1.1; + a20: +-12.2; + a21: 12.; + a22: \A; + a23: \00000A; + a23: \00000AB; + a24: \123456 B; +} diff --git a/test/configCases/css/parsing/index.js b/test/configCases/css/parsing/index.js new file mode 100644 index 00000000000..e352817466b --- /dev/null +++ b/test/configCases/css/parsing/index.js @@ -0,0 +1,8 @@ +import "./style.css"; + +it("should compile and load style on demand", done => { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + + done(); +}); diff --git a/test/configCases/css/parsing/style.css b/test/configCases/css/parsing/style.css new file mode 100644 index 00000000000..d5336c1e145 --- /dev/null +++ b/test/configCases/css/parsing/style.css @@ -0,0 +1,22 @@ +@import "./cases/at-rule.css"; +@import "./cases/bad-url-token.css"; +@import "./cases/cdo-and-cdc.css"; +@import "./cases/comment.css"; +@import "./cases/dashed-ident.css"; +@import "./cases/declaration.css"; +@import "./cases/dimension.css"; +@import "./cases/function.css"; +@import "./cases/hacks.css"; +@import "./cases/hex-colors.css"; +@import "./cases/important.css"; +@import "./cases/nesting.css"; +@import "./cases/number.css"; +@import "./cases/pseudo-functions.css"; +@import "./cases/selectors.css"; +@import "./cases/urls.css"; +@import "./cases/values.css"; +@import "./cases/newline-windows.css"; + +body { + background: red; +} diff --git a/test/configCases/css/parsing/test.config.js b/test/configCases/css/parsing/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/parsing/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/parsing/webpack.config.js b/test/configCases/css/parsing/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/parsing/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/pathinfo/index.js b/test/configCases/css/pathinfo/index.js new file mode 100644 index 00000000000..eb4c93a7f52 --- /dev/null +++ b/test/configCases/css/pathinfo/index.js @@ -0,0 +1,14 @@ +import * as style from "./style.css"; + +it("should compile and load style on demand", done => { + expect(style).toEqual({}); + import("./style2.css").then(x => { + expect(x).toEqual({}); + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("margin")).toBe(" 10px"); + expect(style.getPropertyValue("color")).toBe(" green"); + expect(style.getPropertyValue("padding")).toBe(" 20px 10px"); + done(); + }, done); +}); diff --git a/test/configCases/css/pathinfo/style-imported.css b/test/configCases/css/pathinfo/style-imported.css new file mode 100644 index 00000000000..eb0ae451455 --- /dev/null +++ b/test/configCases/css/pathinfo/style-imported.css @@ -0,0 +1,3 @@ +body { + margin: 10px; +} diff --git a/test/configCases/css/pathinfo/style.css b/test/configCases/css/pathinfo/style.css new file mode 100644 index 00000000000..ba0cfaf6561 --- /dev/null +++ b/test/configCases/css/pathinfo/style.css @@ -0,0 +1,4 @@ +@import "style-imported.css"; +body { + background: red; +} diff --git a/test/configCases/css/pathinfo/style2-imported.css b/test/configCases/css/pathinfo/style2-imported.css new file mode 100644 index 00000000000..ff9387e5d3e --- /dev/null +++ b/test/configCases/css/pathinfo/style2-imported.css @@ -0,0 +1,3 @@ +body { + padding: 20px 10px; +} diff --git a/test/configCases/css/pathinfo/style2.css b/test/configCases/css/pathinfo/style2.css new file mode 100644 index 00000000000..d80cbcd05df --- /dev/null +++ b/test/configCases/css/pathinfo/style2.css @@ -0,0 +1,4 @@ +@import "./style2-imported.css"; +body { + color: green; +} diff --git a/test/configCases/css/pathinfo/test.config.js b/test/configCases/css/pathinfo/test.config.js new file mode 100644 index 00000000000..5029f57ff58 --- /dev/null +++ b/test/configCases/css/pathinfo/test.config.js @@ -0,0 +1,32 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + }, + findBundle(i, options) { + const source = fs.readFileSync( + path.resolve(options.output.path, "bundle0.css"), + "utf8" + ); + + if ( + !source.includes(`/*!********************************!*\\ + !*** css ./style-imported.css ***! + \\********************************/`) && + !source.includes(`/*!***********************!*\\ + !*** css ./style.css ***! + \\***********************/`) + ) { + throw new Error("The `pathinfo` option doesn't work."); + } + + return ["./style2_css.bundle0.js", "./bundle0.js"]; + } +}; diff --git a/test/configCases/css/pathinfo/webpack.config.js b/test/configCases/css/pathinfo/webpack.config.js new file mode 100644 index 00000000000..e9040033e3f --- /dev/null +++ b/test/configCases/css/pathinfo/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + devtool: false, + output: { + pathinfo: true, + cssChunkFilename: "[name].[chunkhash].css" + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/postcss-modules-plugins/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/postcss-modules-plugins/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..c3e77f2a3fe --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,2550 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 1`] = ` +Object { + "bar": "postcss-modules-extract-imports_modules_css-bar", + "baz": "postcss-modules-extract-imports_modules_css-baz", + "exportName1": "postcss-modules-extract-imports_modules_css-exportName1 importName secondImport", + "exportName10": "postcss-modules-extract-imports_modules_css-exportName10", + "exportName11": "postcss-modules-extract-imports_modules_css-exportName11 b_modules_css-b c_modules_css-c", + "exportName12": "postcss-modules-extract-imports_modules_css-exportName12 library_modules_css-importName", + "exportName13": "postcss-modules-extract-imports_modules_css-exportName13 library_modules_css-importName", + "exportName14": "postcss-modules-extract-imports_modules_css-exportName14 library_modules_css-importName library_modules_css-importName2 library_modules_css-importName library_modules_css-importName2", + "exportName15": "postcss-modules-extract-imports_modules_css-exportName15 library_modules_css-importName", + "exportName16": "postcss-modules-extract-imports_modules_css-exportName16 library_modules_css-importName beforeName importName secondImport library_modules_css-firstImport library_modules_css-secondImport", + "exportName17": "postcss-modules-extract-imports_modules_css-exportName17 a_modules_css-a b_modules_css-b c_modules_css-c a_modules_css-a c_modules_css-c", + "exportName18": "postcss-modules-extract-imports_modules_css-exportName18 library_modules_css-importName library_modules_css-importName2 library_modules_css-importName3 library_modules_css-importName4", + "exportName19": "postcss-modules-extract-imports_modules_css-exportName19 postcss-modules-extract-imports_modules_css-foo postcss-modules-extract-imports_modules_css-bar postcss-modules-extract-imports_modules_css-baz", + "exportName19-nested": "postcss-modules-extract-imports_modules_css-exportName19-nested", + "exportName19-nested-nested": "postcss-modules-extract-imports_modules_css-exportName19-nested-nested", + "exportName2": "postcss-modules-extract-imports_modules_css-exportName2 library_modules_css-importName", + "exportName20": "postcss-modules-extract-imports_modules_css-exportName20 c_modules_css-c", + "exportName21": "postcss-modules-extract-imports_modules_css-exportName21 b_modules_css-b c_modules_css-c", + "exportName22": "postcss-modules-extract-imports_modules_css-exportName22 a_modules_css-a b_modules_css-b c_modules_css-c a_modules_css-a c_modules_css-c", + "exportName23": "postcss-modules-extract-imports_modules_css-exportName23 a_modules_css-a", + "exportName24": "postcss-modules-extract-imports_modules_css-exportName24 b_modules_css-b a_modules_css-hidden-b", + "exportName25": "postcss-modules-extract-imports_modules_css-exportName25 c_modules_css-c a_modules_css-hidden-c", + "exportName26": "postcss-modules-extract-imports_modules_css-exportName26 c_modules_css-hidden-d b_modules_css-hidden-d d_modules_css-d", + "exportName27": "postcss-modules-extract-imports_modules_css-exportName27 characters_modules_css-a characters_modules_css--b characters_modules_css---c characters_modules_css-_d characters_modules_css-a_ characters_modules_css-b- characters_modules_css-c-- characters_modules_css-d%", + "exportName28": "postcss-modules-extract-imports_modules_css-exportName28 b_modules_css-b-last c_modules_css-c-last", + "exportName29": "postcss-modules-extract-imports_modules_css-exportName29 c_modules_css-c-last b_modules_css-b-last", + "exportName3": "postcss-modules-extract-imports_modules_css-exportName3 library_modules_css-importName library_modules_css-secondImport", + "exportName30": "postcss-modules-extract-imports_modules_css-exportName30", + "exportName31": "postcss-modules-extract-imports_modules_css-exportName31 postcss-modules-extract-imports_modules_css-from postcss-modules-extract-imports_modules_css-from", + "exportName32": "postcss-modules-extract-imports_modules_css-exportName32", + "exportName33": "postcss-modules-extract-imports_modules_css-exportName33", + "exportName34": "postcss-modules-extract-imports_modules_css-exportName34 a_modules_css-a b_modules_css-b", + "exportName35": "postcss-modules-extract-imports_modules_css-exportName35 other_css-className", + "exportName36": "postcss-modules-extract-imports_modules_css-exportName36 c_modules_css-deep-nested-c", + "exportName37": "postcss-modules-extract-imports_modules_css-exportName37 postcss-modules-extract-imports_modules_css-localName", + "exportName38": "postcss-modules-extract-imports_modules_css-exportName38 postcss-modules-extract-imports_modules_css-localName", + "exportName39": "postcss-modules-extract-imports_modules_css-exportName39 postcss-modules-extract-imports_modules_css-localName", + "exportName4": "postcss-modules-extract-imports_modules_css-exportName4 postcss-modules-extract-imports_modules_css-localName", + "exportName40": "postcss-modules-extract-imports_modules_css-exportName40 postcss-modules-extract-imports_modules_css-localName", + "exportName41": "postcss-modules-extract-imports_modules_css-exportName41 postcss-modules-extract-imports_modules_css-localName", + "exportName42": "postcss-modules-extract-imports_modules_css-exportName42 postcss-modules-extract-imports_modules_css-localName", + "exportName43": "postcss-modules-extract-imports_modules_css-exportName43 postcss-modules-extract-imports_modules_css-localName", + "exportName44": "postcss-modules-extract-imports_modules_css-exportName44", + "exportName5": "postcss-modules-extract-imports_modules_css-exportName5 library_modules_css-importName library_modules_css-importName2", + "exportName6": "postcss-modules-extract-imports_modules_css-exportName6 library_modules_css-importName", + "exportName7": "postcss-modules-extract-imports_modules_css-exportName7 library_modules_css-importName library_modules_css-secondImport", + "exportName8": "postcss-modules-extract-imports_modules_css-exportName8 library_modules_css-importName library_modules_css-secondImport library_modules_css-importName library_modules_css-importName2", + "exportName9": "postcss-modules-extract-imports_modules_css-exportName9 library_modules_css-secondImport library_modules_css-secondImport library_modules_css-thirdDep", + "foo": "postcss-modules-extract-imports_modules_css-foo", + "from": "postcss-modules-extract-imports_modules_css-from", + "localName": "postcss-modules-extract-imports_modules_css-localName", + "otherExport": "postcss-modules-extract-imports_modules_css-otherExport library_modules_css-thirdImport library_modules_css-otherLibImport", +} +`; + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 2`] = ` +Object { + " +": "postcss-modules-local-by-default_local_modules_css- +", + " as": "postcss-modules-local-by-default_local_modules_css- as", + "#test": "postcss-modules-local-by-default_local_modules_css-#test", + "- +": "postcss-modules-local-by-default_local_modules_css-- +", + "--": "postcss-modules-local-by-default_local_modules_css---", + "-- +": "postcss-modules-local-by-default_local_modules_css--- +", + "--foo": "postcss-modules-local-by-default_local_modules_css---foo", + "-a_value": "postcss-modules-local-by-default_local_modules_css--a_value", + ":)": "postcss-modules-local-by-default_local_modules_css-:)", + "@bounce": "postcss-modules-local-by-default_local_modules_css-@bounce", + "@foo": "postcss-modules-local-by-default_local_modules_css-@foo", + "BAR": "postcss-modules-local-by-default_local_modules_css-BAR", + "a": "postcss-modules-local-by-default_local_modules_css-a", + "a_value": "postcss-modules-local-by-default_local_modules_css-a_value", + "article-body": "postcss-modules-local-by-default_local_modules_css-article-body", + "article-footer": "postcss-modules-local-by-default_local_modules_css-article-footer", + "article-header": "postcss-modules-local-by-default_local_modules_css-article-header", + "b": "postcss-modules-local-by-default_local_modules_css-b", + "bar": "postcss-modules-local-by-default_local_modules_css-bar", + "bar-unique": "--postcss-modules-local-by-default_local_modules_css-bar-unique", + "barfoo": "postcss-modules-local-by-default_local_modules_css-barfoo", + "baz": "postcss-modules-local-by-default_local_modules_css-baz", + "bou@nce": "postcss-modules-local-by-default_local_modules_css-bou@nce", + "bounce": "postcss-modules-local-by-default_local_modules_css-bounce", + "c": "postcss-modules-local-by-default_local_modules_css-c", + "class": "postcss-modules-local-by-default_local_modules_css-class", + "class-1": "postcss-modules-local-by-default_local_modules_css-class-1", + "colon-local-name": "postcss-modules-local-by-default_local_modules_css-colon-local-name", + "constructor": "postcss-modules-local-by-default_local_modules_css-constructor", + "duplicate-name": "postcss-modules-local-by-default_local_modules_css-duplicate-name", + "ease": "postcss-modules-local-by-default_local_modules_css-ease", + "ease-in": "postcss-modules-local-by-default_local_modules_css-ease-in", + "ease-out": "postcss-modules-local-by-default_local_modules_css-ease-out", + "easeOutQuart": "--postcss-modules-local-by-default_local_modules_css-easeOutQuart", + "f@oo": "postcss-modules-local-by-default_local_modules_css-f@oo", + "fade": "postcss-modules-local-by-default_local_modules_css-fade", + "fade-in": "postcss-modules-local-by-default_local_modules_css-fade-in", + "fadeInOut": "postcss-modules-local-by-default_local_modules_css-fadeInOut", + "fly": "postcss-modules-local-by-default_local_modules_css-fly", + "foo": "__foo", + "foo-bar": "--postcss-modules-local-by-default_local_modules_css-foo-bar", + "foobar": "postcss-modules-local-by-default_local_modules_css-foobar", + "infinite": "postcss-modules-local-by-default_local_modules_css-infinite", + "local-name": "postcss-modules-local-by-default_local_modules_css-local-name", + "my-custom-var": "--postcss-modules-local-by-default_local_modules_css-my-custom-var", + "name": "postcss-modules-local-by-default_local_modules_css-name", + "rotate": "postcss-modules-local-by-default_local_modules_css-rotate", + "slide-right": "postcss-modules-local-by-default_local_modules_css-slide-right", + "spin": "postcss-modules-local-by-default_local_modules_css-spin", + "sr-only": "--postcss-modules-local-by-default_local_modules_css-sr-only", + "t t": "postcss-modules-local-by-default_local_modules_css-t t", + "test": "postcss-modules-local-by-default_local_modules_css-test", + "title-align": "--postcss-modules-local-by-default_local_modules_css-title-align", + "u-m+ ": "postcss-modules-local-by-default_local_modules_css-u-m+ ", + "😃bounce😃": "postcss-modules-local-by-default_local_modules_css-😃bounce😃", +} +`; + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 3`] = ` +Object { + "a": "postcss-modules-local-by-default_global_modules_css-a", + "article-header": "postcss-modules-local-by-default_global_modules_css-article-header", + "b": "postcss-modules-local-by-default_global_modules_css-b", + "bar": "postcss-modules-local-by-default_global_modules_css-bar", + "baz": "postcss-modules-local-by-default_global_modules_css-baz", + "bounce": "postcss-modules-local-by-default_global_modules_css-bounce", + "class": "postcss-modules-local-by-default_global_modules_css-class", + "class-1": "postcss-modules-local-by-default_global_modules_css-class-1", + "fly": "postcss-modules-local-by-default_global_modules_css-fly", + "foo": "postcss-modules-local-by-default_global_modules_css-foo", +} +`; + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 4`] = ` +Object { + "a": "postcss-modules-local-by-default_pure_modules_css-a", + "article-footer": "postcss-modules-local-by-default_pure_modules_css-article-footer", + "article-header": "postcss-modules-local-by-default_pure_modules_css-article-header", + "bar": "postcss-modules-local-by-default_pure_modules_css-bar", + "baz": "postcss-modules-local-by-default_pure_modules_css-baz", + "bounce": "postcss-modules-local-by-default_pure_modules_css-bounce", + "class": "postcss-modules-local-by-default_pure_modules_css-class", + "class-1": "postcss-modules-local-by-default_pure_modules_css-class-1", + "class-2": "postcss-modules-local-by-default_pure_modules_css-class-2", + "export-foo": "__foo", + "fadeInOut": "postcss-modules-local-by-default_pure_modules_css-fadeInOut", + "fly": "postcss-modules-local-by-default_pure_modules_css-fly", + "foo": "postcss-modules-local-by-default_pure_modules_css-foo", + "label": "postcss-modules-local-by-default_pure_modules_css-label", + "local": "postcss-modules-local-by-default_pure_modules_css-local", + "rotate": "postcss-modules-local-by-default_pure_modules_css-rotate", +} +`; + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 5`] = ` +Object { + "a": "postcss-modules-scope_modules_css-a", + "bar": "--postcss-modules-scope_modules_css-bar", + "class": "postcss-modules-scope_modules_css-class abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d", + "className": "postcss-modules-scope_modules_css-className", + "constructor": "postcss-modules-scope_modules_css-constructor", + "exportName1": "postcss-modules-scope_modules_css-exportName1", + "exportName10": "postcss-modules-scope_modules_css-exportName10 a b postcss-modules-scope_modules_css-local-a postcss-modules-scope_modules_css-local-b", + "exportName11": "postcss-modules-scope_modules_css-exportName11", + "exportName12": "postcss-modules-scope_modules_css-exportName12 postcss-modules-scope_modules_css-exportName11", + "exportName13": "postcss-modules-scope_modules_css-exportName13", + "exportName14": "postcss-modules-scope_modules_css-exportName14", + "exportName15": "postcss-modules-scope_modules_css-exportName15", + "exportName16": "postcss-modules-scope_modules_css-exportName16", + "exportName17": "postcss-modules-scope_modules_css-exportName17", + "exportName18": "postcss-modules-scope_modules_css-exportName18", + "exportName19": "postcss-modules-scope_modules_css-exportName19", + "exportName2": "postcss-modules-scope_modules_css-exportName2", + "exportName20": "postcss-modules-scope_modules_css-exportName20", + "exportName21": "postcss-modules-scope_modules_css-exportName21", + "exportName22": "postcss-modules-scope_modules_css-exportName22", + "exportName23": "postcss-modules-scope_modules_css-exportName23", + "exportName24": "postcss-modules-scope_modules_css-exportName24", + "exportName25": "postcss-modules-scope_modules_css-exportName25", + "exportName26": "postcss-modules-scope_modules_css-exportName26", + "exportName27": "postcss-modules-scope_modules_css-exportName27", + "exportName28": "postcss-modules-scope_modules_css-exportName28", + "exportName29": "postcss-modules-scope_modules_css-exportName29", + "exportName3": "postcss-modules-scope_modules_css-exportName3", + "exportName30": "postcss-modules-scope_modules_css-exportName30", + "exportName31": "postcss-modules-scope_modules_css-exportName31", + "exportName32": "postcss-modules-scope_modules_css-exportName32", + "exportName33": "postcss-modules-scope_modules_css-exportName33", + "exportName34": "postcss-modules-scope_modules_css-exportName34", + "exportName35": "postcss-modules-scope_modules_css-exportName35", + "exportName36": "postcss-modules-scope_modules_css-exportName36", + "exportName37": "postcss-modules-scope_modules_css-exportName37", + "exportName38": "postcss-modules-scope_modules_css-exportName38", + "exportName39": "postcss-modules-scope_modules_css-exportName39 postcss-modules-scope_modules_css-exportName40", + "exportName4": "postcss-modules-scope_modules_css-exportName4", + "exportName41": "postcss-modules-scope_modules_css-exportName41", + "exportName42": "postcss-modules-scope_modules_css-exportName42 postcss-modules-scope_modules_css-exportName41", + "exportName43": "postcss-modules-scope_modules_css-exportName43", + "exportName44": "postcss-modules-scope_modules_css-exportName44", + "exportName45": "postcss-modules-scope_modules_css-exportName45", + "exportName46": "postcss-modules-scope_modules_css-exportName46", + "exportName47": "postcss-modules-scope_modules_css-exportName47", + "exportName48": "postcss-modules-scope_modules_css-exportName48", + "exportName49": "postcss-modules-scope_modules_css-exportName49", + "exportName5": "postcss-modules-scope_modules_css-exportName5", + "exportName50": "postcss-modules-scope_modules_css-exportName50", + "exportName51": "postcss-modules-scope_modules_css-exportName51", + "exportName52": "postcss-modules-scope_modules_css-exportName52", + "exportName53": "postcss-modules-scope_modules_css-exportName53", + "exportName54": "postcss-modules-scope_modules_css-exportName54", + "exportName55": "postcss-modules-scope_modules_css-exportName55", + "exportName56": "postcss-modules-scope_modules_css-exportName56", + "exportName57": "postcss-modules-scope_modules_css-exportName57", + "exportName58": "postcss-modules-scope_modules_css-exportName58 postcss-modules-scope_modules_css-exportName57", + "exportName59": "postcss-modules-scope_modules_css-exportName59 postcss-modules-scope_modules_css-exportName58 postcss-modules-scope_modules_css-exportName57", + "exportName6": "postcss-modules-scope_modules_css-exportName6", + "exportName60": "postcss-modules-scope_modules_css-exportName60 otherClass andAgain aThirdClass", + "exportName60-function-syntax": "postcss-modules-scope_modules_css-exportName60-function-syntax otherClass andAgain aThirdClass", + "exportName63": "postcss-modules-scope_modules_css-exportName63", + "exportName64": "postcss-modules-scope_modules_css-exportName64", + "exportName65": "postcss-modules-scope_modules_css-exportName65", + "exportName66": "postcss-modules-scope_modules_css-exportName66 postcss-modules-scope_modules_css-exportName63 postcss-modules-scope_modules_css-exportName64 postcss-modules-scope_modules_css-exportName65", + "exportName67": "postcss-modules-scope_modules_css-exportName67", + "exportName68": "postcss-modules-scope_modules_css-exportName68 postcss-modules-scope_modules_css-exportName67", + "exportName69": "postcss-modules-scope_modules_css-exportName69 postcss-modules-scope_modules_css-exportName68 postcss-modules-scope_modules_css-exportName67", + "exportName7": "postcss-modules-scope_modules_css-exportName7", + "exportName70": "postcss-modules-scope_modules_css-exportName70 postcss-modules-scope_modules_css-exportName71 postcss-modules-scope_modules_css-exportName72", + "exportName71": "postcss-modules-scope_modules_css-exportName71 postcss-modules-scope_modules_css-exportName72", + "exportName72": "postcss-modules-scope_modules_css-exportName72", + "exportName73": "postcss-modules-scope_modules_css-exportName73 classes_css-bar classes_css-localName", + "exportName74": "postcss-modules-scope_modules_css-exportName74 postcss-modules-scope_modules_css-exportName73 classes_css-bar classes_css-localName postcss-modules-scope_modules_css-exportName75 my-global", + "exportName75": "postcss-modules-scope_modules_css-exportName75", + "exportName76": "postcss-modules-scope_modules_css-exportName76 import_modules_css-otherClass", + "exportName77": "postcss-modules-scope_modules_css-exportName77 abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d", + "exportName78": "postcss-modules-scope_modules_css-exportName78", + "exportName79": "postcss-modules-scope_modules_css-exportName79 postcss-modules-scope_modules_css-class abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d postcss-modules-scope_modules_css-bar", + "exportName8": "postcss-modules-scope_modules_css-exportName8", + "exportName9": "postcss-modules-scope_modules_css-exportName9", + "fade-export": "postcss-modules-scope_modules_css-fade-export", + "fade-in": "postcss-modules-scope_modules_css-fade-in", + "fade-in-export": "postcss-modules-scope_modules_css-fade-in-export", + "fade-out": "postcss-modules-scope_modules_css-fade-out", + "fadeIn": "postcss-modules-scope_modules_css-fadeIn", + "fadeIn-export": "postcss-modules-scope_modules_css-fadeIn-export", + "global": "postcss-modules-scope_modules_css-global", + "idName": "postcss-modules-scope_modules_css-idName", + "local-a": "postcss-modules-scope_modules_css-local-a", + "local-b": "postcss-modules-scope_modules_css-local-b", + "slidein": "postcss-modules-scope_modules_css-slidein", + "smile": "postcss-modules-scope_modules_css-smile", + "smile_with_A": "postcss-modules-scope_modules_css-smile_with_A", + "sr-only": "--postcss-modules-scope_modules_css-sr-only", + "test": "--postcss-modules-scope_modules_css-test", + "title-align": "--postcss-modules-scope_modules_css-title-align", + "toString": "postcss-modules-scope_modules_css-toString", + "wrong": "postcss-modules-scope_modules_css-wrong", + "😀": "postcss-modules-scope_modules_css-😀", +} +`; + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 6`] = ` +Object { + "--red": "blue", + "a": "a_modules_css-a", + "b": "b_modules_css-b", + "bar": "postcss-modules-values_modules_css-bar", + "char3": "#0f0", + "char6": "#00ff00", + "color": "--postcss-modules-values_modules_css-color", + "colors": "\\"./colors.css\\"", + "coolShadow": "0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14)", + "exportName": "blue", + "exportName1": "blue @value exportName2 yellow", + "exportName10": "red", + "exportName11": "red", + "exportName12": "blue", + "exportName13": "postcss-modules-values_modules_css-exportName13", + "exportName14": "postcss-modules-values_modules_css-exportName14", + "exportName15": "postcss-modules-values_modules_css-exportName15", + "exportName16": "postcss-modules-values_modules_css-exportName16", + "exportName17": "postcss-modules-values_modules_css-exportName17", + "exportName18": "#FFF", + "exportName19": "#FFF", + "exportName2": "(max-width: 599px)", + "exportName20": "postcss-modules-values_modules_css-exportName20", + "exportName22": "10px", + "exportName23": "calc(exportName22 * 2)", + "exportName24": "postcss-modules-values_modules_css-exportName24", + "exportName25": "postcss-modules-values_modules_css-exportName25", + "exportName26": "postcss-modules-values_modules_css-exportName26", + "exportName27": "postcss-modules-values_modules_css-exportName27", + "exportName28": "postcss-modules-values_modules_css-exportName28", + "exportName29": "postcss-modules-values_modules_css-exportName29", + "exportName3": "red", + "exportName30": "postcss-modules-values_modules_css-exportName30", + "exportName4": "red", + "exportName5": "red", + "exportName6": "red", + "exportName7": "40px", + "exportName8": "36px", + "exportName9": "fuchsia", + "exportNameRed": "blue", + "foo-replace": "postcss-modules-values_modules_css-foo-replace", + "foo-replace-1": "postcss-modules-values_modules_css-foo-replace-1", + "foo-replace-2": "postcss-modules-values_modules_css-foo-replace-2", + "foo-replace-3": "postcss-modules-values_modules_css-foo-replace-3", + "foo-replace-4": "postcss-modules-values_modules_css-foo-replace-4", + "hsla": "hsla(220, 13.0%, 18.0%, 1)", + "my-own-color": "--postcss-modules-values_modules_css-my-own-color", + "named": "aqua", + "namedBlue": "red", + "namedRed": "blue", + "otherBlue": "red", + "otherRed": "blue", + "parentheses": "color(red lightness(50%))", + "red": "yellow", + "rgba": "rgba(34, 12, 64, 0.3)", + "v-color": "my-custom-value", + "v-comment": "", + "v-comment-other": "/* comment */", + "v-empty": " /* comment */", + "v-empty-1": " ", + "v-empty-2": " ", + "wrongOrder": "blue", +} +`; + +exports[`ConfigCacheTestCases css postcss-modules-plugins exported tests should work 7`] = ` +Array [ + "/*!*********************************!*\\\\ + !*** css ./library.modules.css ***! + \\\\*********************************/ +.library_modules_css-something {} + +.library_modules_css-importName { + color: red; +} + +.library_modules_css-importName2 { + color: red; +} + +.library_modules_css-importName3 { + color: azure; +} + +.library_modules_css-importName4 { + color: antiquewhite; +} + +.library_modules_css-secondImport { + color: green; +} + +.library_modules_css-thirdImport { + color: blue; +} + +.library_modules_css-otherLibImport { + color: yellow; +} + +.library_modules_css-thirdDep { + color: black; +} + +.library_modules_css-firstImport { + color: red; +} + +.library_modules_css-secondImport { + color: red; +} + +/*!***************************!*\\\\ + !*** css ./b.modules.css ***! + \\\\***************************/ +.b_modules_css-b { color: red; } + +.b_modules_css-hidden-d { + color: blue; +} + +.b_modules_css-b-last { + color: red; +} + + +/*!***************************!*\\\\ + !*** css ./c.modules.css ***! + \\\\***************************/ +.c_modules_css-c { color: red } + +.c_modules_css-hidden-d { + color: blue; +} + +.c_modules_css-c-last { + color: red; +} + +.c_modules_css-deep-nested-c { + color: red; +} + +/*!***************************!*\\\\ + !*** css ./a.modules.css ***! + \\\\***************************/ +.a_modules_css-a { color: red; } + +.a_modules_css-hidden-b { + color: blue; +} + +.a_modules_css-hidden-c { + color: aliceblue; +} + +/*!***************************!*\\\\ + !*** css ./d.modules.css ***! + \\\\***************************/ +.d_modules_css-d { + color: red; +} + +/*!************************************!*\\\\ + !*** css ./characters.modules.css ***! + \\\\************************************/ +.characters_modules_css-a { + color: red; +} + +.characters_modules_css-a_ { + color: red; +} + +.characters_modules_css--b { + color: red; +} + +.characters_modules_css-b- { + color: red; +} + +.characters_modules_css---c { + color: red; +} + +.characters_modules_css-c-- { + color: red; +} + +.characters_modules_css-_d { + color: red; +} + +.characters_modules_css-d\\\\% { + color: tan; +} + +/*!***********************!*\\\\ + !*** css ./other.css ***! + \\\\***********************/ +.other_css-className { color: red } + +/*!********************************!*\\\\ + !*** css ./import.modules.css ***! + \\\\********************************/ + +.import_modules_css-abc { + color: red; +} + +.import_modules_css-__foo { + color: red; +} + +.import_modules_css-some-value { + color: red; +} + +.import_modules_css-otherClass { + color: red; +} + + +/*!**************************************************!*\\\\ + !*** css ./node_modules/foo/my-custom-style.css ***! + \\\\**************************************************/ +.node_modules_foo_my-custom-style_css-custom-other-name { + color: red; +} + +/*!*********************************************************!*\\\\ + !*** css ./postcss-modules-extract-imports.modules.css ***! + \\\\*********************************************************/ +/* postcss-modules-extract-imports */ + + +/* composing-globals */ +.postcss-modules-extract-imports_modules_css-exportName1 { other: rule; } + +/* existing-import */ + +.postcss-modules-extract-imports_modules_css-exportName2 { + } + +/* import-comment */ +/* +:local(.exportName) { + composes: importName from \\"path/library.css\\"; + other: rule; +} +*/ + +/* import-consolidate */ +.postcss-modules-extract-imports_modules_css-exportName3 { + other: rule; +} + +.postcss-modules-extract-imports_modules_css-otherExport { + } + +/* import-local-extends */ +.postcss-modules-extract-imports_modules_css-localName { color: red; } + +.postcss-modules-extract-imports_modules_css-exportName4 { + other: rule; +} + +/* import-media */ +@media screen { + .postcss-modules-extract-imports_modules_css-exportName5 { + other: rule2; + } +} + +.postcss-modules-extract-imports_modules_css-exportName6 { + other: rule; +} + +/* import-multiple-classes */ +.postcss-modules-extract-imports_modules_css-exportName7 { other: rule; } + +/* import-multiple-references */ +.postcss-modules-extract-imports_modules_css-exportName8 { + } +.postcss-modules-extract-imports_modules_css-exportName9 { + } + +/* import-only-whitelist */ +.postcss-modules-extract-imports_modules_css-exportName10 { imports: importName from \\"path/library.css\\"; something-else: otherLibImport from \\"path/other-lib.css\\"; } + +/* import-preserving-order */ +.postcss-modules-extract-imports_modules_css-exportName11 { + color: #aaa; +} + +/* import-single-quotes */ +.postcss-modules-extract-imports_modules_css-exportName12 { + other: rule; +} + +/* import-double-quotes */ +.postcss-modules-extract-imports_modules_css-exportName13 { + other: rule; +} + +/* import-spacing */ +.postcss-modules-extract-imports_modules_css-exportName14 { + other: rule; +} + +/* import-within */ +.postcss-modules-extract-imports_modules_css-exportName15 { + other: rule; +} + +/* multiple-composes */ +.postcss-modules-extract-imports_modules_css-exportName16 { + other: rule; +} + +.postcss-modules-extract-imports_modules_css-exportName17 { + } + +.postcss-modules-extract-imports_modules_css-exportName18 { + } + +.postcss-modules-extract-imports_modules_css-foo { color: red } +.postcss-modules-extract-imports_modules_css-bar { color: blue } +.postcss-modules-extract-imports_modules_css-baz { color: green } +.postcss-modules-extract-imports_modules_css-exportName19 { + } + +/* nesting */ +.postcss-modules-extract-imports_modules_css-exportName19 { + display: grid; + + @media (orientation: landscape) { + &.postcss-modules-extract-imports_modules_css-exportName19-nested { + grid-auto-flow: column; + + @media (min-width: 1024px) { + &.postcss-modules-extract-imports_modules_css-exportName19-nested-nested { + composes: importName from \\"library.modules.css\\"; + } + } + } + } +} + +/* TODO bug - need port https://github.com/css-modules/postcss-modules-extract-imports/pull/138 */ +/* resolve-composes-order */ +.postcss-modules-extract-imports_modules_css-exportName20 { + color: #bebebe; +} + +.postcss-modules-extract-imports_modules_css-exportName21 { + /* \`b\` should be after \`c\` */ + color: #aaa; +} + +/* resolve-duplicates */ + +.postcss-modules-extract-imports_modules_css-exportName22 { + } + +/* resolve-imports-order */ + + +.postcss-modules-extract-imports_modules_css-exportName23 { + } + +.postcss-modules-extract-imports_modules_css-exportName24 { + } + +.postcss-modules-extract-imports_modules_css-exportName25 { + } + +.postcss-modules-extract-imports_modules_css-exportName26 { + } + +/* valid-characters */ +.postcss-modules-extract-imports_modules_css-exportName27 { + } + +/* We pass this test */ +/* check-import-order */ +.postcss-modules-extract-imports_modules_css-exportName28 { + } + +.postcss-modules-extract-imports_modules_css-exportName29 { + } + +/* empty-composes */ +.postcss-modules-extract-imports_modules_css-exportName30 { + } + +/* weird-composes */ +.postcss-modules-extract-imports_modules_css-from { color: red; } +.postcss-modules-extract-imports_modules_css-exportName31 { + } + +/* broken-composes */ +.postcss-modules-extract-imports_modules_css-exportName32 { + composes: className from 12; +} + +/* broken-composes-2 */ +.postcss-modules-extract-imports_modules_css-exportName33 { + composes: 12; +} + +/* composes-multiple-declarations */ +.postcss-modules-extract-imports_modules_css-exportName34 { + } + +.postcss-modules-extract-imports_modules_css-exportName34 { + } + +/* inherit-module-type */ +.postcss-modules-extract-imports_modules_css-exportName35 { + } + +/* composes from-import */ + +.postcss-modules-extract-imports_modules_css-exportName36 { + } + +.postcss-modules-extract-imports_modules_css-exportName37 {} + +.postcss-modules-extract-imports_modules_css-exportName38 { + } + +.postcss-modules-extract-imports_modules_css-exportName39 { + } + +.postcss-modules-extract-imports_modules_css-exportName40 {color:red;} + +.postcss-modules-extract-imports_modules_css-exportName41 {color:red;} + +.postcss-modules-extract-imports_modules_css-exportName42 {color:red} + +.postcss-modules-extract-imports_modules_css-exportName43 { + + color:red; +} + + +.postcss-modules-extract-imports_modules_css-exportName44 { color: unknown; } + +/*!****************************************************************!*\\\\ + !*** css ./postcss-modules-local-by-default.local.modules.css ***! + \\\\****************************************************************/ +/* postcss-modules-local-by-default */ + + +/* scope selectors */ +.postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* scope escaped selectors */ +.postcss-modules-local-by-default_local_modules_css-\\\\:\\\\) {} + +/* scope ids */ +#postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* scope escaped ids */ +#postcss-modules-local-by-default_local_modules_css-\\\\#test {} + +/* scope escaped ids (2) */ +#postcss-modules-local-by-default_local_modules_css-u-m\\\\+\\\\ {} + +/* scope multiple selectors */ +.postcss-modules-local-by-default_local_modules_css-foo, .postcss-modules-local-by-default_local_modules_css-baz { a_value: some-value; } + +/* scope sibling selectors */ +.postcss-modules-local-by-default_local_modules_css-foo ~ .postcss-modules-local-by-default_local_modules_css-baz { a_value: some-value; } + +/* scope pseudo elements */ +.postcss-modules-local-by-default_local_modules_css-foo:after { a_value: some-value; } + +/* scope media queries */ +@media only screen { .postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } } + +/* allow narrow global selectors */ +.foo .bar { a_value: some-value; } + +/* allow narrow local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* allow broad global selectors */ +.foo .bar { a_value: some-value; } + +/* allow broad local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* allow multiple narrow global selectors */ +.foo, .bar { a_value: some-value; } + +/* allow multiple broad global selectors */ +.foo, .bar { a_value: some-value; } + +/* allow multiple broad local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo, .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* allow narrow global selectors nested inside local styles */ +.postcss-modules-local-by-default_local_modules_css-foo .foo .bar { a_value: some-value; } + +/* allow broad global selectors nested inside local styles */ +.postcss-modules-local-by-default_local_modules_css-foo .foo .bar { a_value: some-value; } + +/* allow parentheses inside narrow global selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .foo:not(.bar) { a_value: some-value; } + +/* allow parentheses inside narrow local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-foo:not(.postcss-modules-local-by-default_local_modules_css-bar) { a_value: some-value; } + +/* allow narrow global selectors appended to local styles */ +.postcss-modules-local-by-default_local_modules_css-foo.foo.bar { a_value: some-value; } + +/* ignore selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* ignore nested selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* ignore multiple selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo, .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* ignore sibling selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo ~ .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* ignore psuedo elements that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo:after { a_value: some-value; } + +/* trim whitespace after empty broad selector */ +.postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* broad global should be limited to selector */ +.foo, .postcss-modules-local-by-default_local_modules_css-bar , .postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* broad global should be limited to nested selector */ +.postcss-modules-local-by-default_local_modules_css-foo:not(.bar).postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* broad global and local should allow switching */ +.postcss-modules-local-by-default_local_modules_css-foo .bar .postcss-modules-local-by-default_local_modules_css-foobar .postcss-modules-local-by-default_local_modules_css-barfoo { a_value: some-value; } + +/* localize a single animation-name */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar; } + +/* localize a single animation-name #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar; } +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar; } + +/* passed because \`--bar\` not found */ +/* not localize animation-name in a var function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: var(--postcss-modules-local-by-default_local_modules_css-bar-unique); } + +/* passed because \`--bar\` not found */ +/* not localize animation-name in a var function #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: vAr(--postcss-modules-local-by-default_local_modules_css-bar-unique); } +/* Work, because found */ +:root { --postcss-modules-local-by-default_local_modules_css-my-custom-var: name; } +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: vAr(--postcss-modules-local-by-default_local_modules_css-my-custom-var); } + +/* not localize animation-name in an env function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: env(bar); } + +/* not localize animation-name in an global function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: bar; } +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: bar; } + +/* localize and not localize animation-name in mixed case */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-fadeInOut, moveLeft300px, postcss-modules-local-by-default_local_modules_css-bounce; } + +/* not localize animation in an global function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: bar; } + +/* not localize a certain animation in an global function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: bar, postcss-modules-local-by-default_local_modules_css-foo; } + +/* localize and not localize a certain animation in mixed case */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-rotate 1s, spin 3s, postcss-modules-local-by-default_local_modules_css-fly 6s; } + +/* not localize animation-name in an env function #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: eNv(bar); } + +/* not localize a single animation-delay */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-delay: 1s; } + +/* localize multiple animation-names */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar, postcss-modules-local-by-default_local_modules_css-foobar; } + +/* not localize revert */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: revert; } + +/* not localize revert #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: revert; } + +/* not localize revert #3 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: revert, postcss-modules-local-by-default_local_modules_css-foo, none; } + +/* not localize revert-layer */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: revert-layer; } + +/* not localize revert */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: revert-layer; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-\\\\@bounce; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-bou\\\\@nce; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-\\\\ as; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-t\\\\ t; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css--\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css---\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css--\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css---; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-😃bounce😃; } + +/* localize custom property */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css---foo; } + +/* don't find a localize name, but localize var */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-fade .2s var(--postcss-modules-local-by-default_local_modules_css-easeOutQuart) .1s forwards } + +/* not localize name in nested function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-fade .2s env(FOO_BAR) .1s forwards, postcss-modules-local-by-default_local_modules_css-name } + +/* don't find a localize name, but localize var */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: var(--postcss-modules-local-by-default_local_modules_css-foo-bar) .1s forwards, postcss-modules-local-by-default_local_modules_css-name } + +/* don't find a localize name, but localize var */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: var(--postcss-modules-local-by-default_local_modules_css-foo-bar) .1s forwards postcss-modules-local-by-default_local_modules_css-name, postcss-modules-local-by-default_local_modules_css-name } + +/* localize animation */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-a; } + +/* localize animation #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-bar 5s, postcss-modules-local-by-default_local_modules_css-foobar; } + +/* localize animation #3 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: ease postcss-modules-local-by-default_local_modules_css-ease; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: ease postcss-modules-local-by-default_local_modules_css-ease; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: ease postcss-modules-local-by-default_local_modules_css-ease, ease-in postcss-modules-local-by-default_local_modules_css-ease-in, ease-out postcss-modules-local-by-default_local_modules_css-ease-out; } + +/* localize animation #4 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 0s ease 0s 1 normal none postcss-modules-local-by-default_local_modules_css-test running; } + +/* localize animation with vendor prefix */ +.postcss-modules-local-by-default_local_modules_css-foo { -webkit-animation: postcss-modules-local-by-default_local_modules_css-bar; animation: postcss-modules-local-by-default_local_modules_css-bar; } + +/* not localize other rules */ +.postcss-modules-local-by-default_local_modules_css-foo { content: \\"animation: bar;\\" } + +/* not localize global rules */ +.foo { animation: foo; animation-name: bar; } + +/* handle nested global */ +.a:not(.b) { a_value: some-value; } + +/* handle nested global #1 */ +.a:not(.b:not(.c)) { a_value: some-value; } + +/* handle nested global #2 */ +.postcss-modules-local-by-default_local_modules_css-a:not(:not(:not(.c))) { a_value: some-value; } + +/* handle nested global #3 */ +.a:not(.b, .c) { a_value: some-value; } + +/* handle nested global #4 */ +.postcss-modules-local-by-default_local_modules_css-a:not(.b, .postcss-modules-local-by-default_local_modules_css-c) { a_value: some-value; } + +/* handle nested global #5 */ +.a:not(.postcss-modules-local-by-default_local_modules_css-b, .c) { a_value: some-value; } + +/* handle nested global #6 */ +.a:not(.b, .c) { a_value: some-value; } + +/* handle nested global #7 */ +.postcss-modules-local-by-default_local_modules_css-a:not(.postcss-modules-local-by-default_local_modules_css-b, .postcss-modules-local-by-default_local_modules_css-c) { a_value: some-value; } + +/* handle nested global #8 */ +.a:not(.postcss-modules-local-by-default_local_modules_css-b, .postcss-modules-local-by-default_local_modules_css-c) { a_value: some-value; } + +/* handle a complex animation rule */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-foo, postcss-modules-local-by-default_local_modules_css-bar 5s linear 2s infinite alternate, postcss-modules-local-by-default_local_modules_css-barfoo 1s; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-foo, postcss-modules-local-by-default_local_modules_css-BAR 5s LINEAR 2s INFINITE ALTERNATE, postcss-modules-local-by-default_local_modules_css-barfoo 1s; } + +/* handle animations where the first value is not the animation name */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s postcss-modules-local-by-default_local_modules_css-foo; } + +/* handle animations where the first value is not the animation name whilst also using keywords */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s normal ease-out infinite postcss-modules-local-by-default_local_modules_css-foo; } + +/* not treat animation curve as identifier of animation name even if it separated by comma */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out, postcss-modules-local-by-default_local_modules_css-fade-in 300ms forwards ease-out; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; @media screen { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; } } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; .postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; } } + +/* not treat \\"start\\" and \\"end\\" keywords in steps() function as identifiers */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s steps(12, end) infinite; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s STEPS(12, start) infinite; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s steps(12, END) infinite; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s steps(12, START) infinite; } + +/* handle animations with custom timing functions */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s normal cubic-bezier(0.25, 0.5, 0.5. 0.75) postcss-modules-local-by-default_local_modules_css-foo; } + +/* handle animations whose names are keywords */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s infinite postcss-modules-local-by-default_local_modules_css-infinite; } + +/* handle not localize an animation shorthand value of \\"inherit\\" */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: inherit; } + +/* handle \\"constructor\\" as animation name */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-constructor postcss-modules-local-by-default_local_modules_css-constructor; } + +/* default to local when mode provided */ +.postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } + +/* localize keyframes */ +@keyframes postcss-modules-local-by-default_local_modules_css-foo { from { a_value: some-value; } to { a_value: some-value; } } + +/* localize keyframes starting with special characters */ +@keyframes postcss-modules-local-by-default_local_modules_css-\\\\@foo { from { color: red; } to { color: blue; } } + +/* localize keyframes containing special characters */ +@keyframes postcss-modules-local-by-default_local_modules_css-f\\\\@oo { from { color: red; } to { color: blue; } } + +/* localize explicit keyframes */ +@keyframes postcss-modules-local-by-default_local_modules_css-foo { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@-webkit-keyframes bar { from { color: red; } to { color: blue; } } +@keyframes postcss-modules-local-by-default_local_modules_css-local-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes postcss-modules-local-by-default_local_modules_css-colon-local-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes global-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes colon-global-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } + +/* ignore :export statements */ + +/* ignore :import statements */ + +/* incorrectly handle nested selectors */ +.postcss-modules-local-by-default_local_modules_css-bar:not(.foo-name, .baz-name) { a_value: some-value; } + +/* compile explict global element */ +input { a_value: some-value; } + +/* compile explict global attribute */ +[type=\\"radio\\"], :not([type=\\"radio\\"]) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on inconsistent selector result */ +.foo, .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* throw on nested :locals, but we allow to do it */ +.postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } + +/* throw on nested :globals, but we allow to do it */ +.foo { a_value: some-value; } + +/* throw on nested mixed, but we allow to do it */ +.foo { a_value: some-value; } + +/* throw on nested broad :local, but we allow to do it */ +.postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } + +/* throw on incorrect spacing with broad :global */ +.postcss-modules-local-by-default_local_modules_css-foo .bar { a_value: some-value; } + +/* TODO bug no report */ +/* throw on incorrect spacing with broad :local */ +.postcss-modules-local-by-default_local_modules_css-foo.postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* pass through global element */ +input { a_value: some-value; } + +/* localise class and pass through element */ +.postcss-modules-local-by-default_local_modules_css-foo input { a_value: some-value; } + +/* pass through attribute selector */ +[type=\\"radio\\"] { a_value: some-value; } + +/* Not related to us */ +/* not modify urls without option */ +/*.a { background: url(./image.png); }*/ +/*:global .b { background: url(image.png); }*/ +/*.c { background: url(\\"./image.png\\"); }*/ + +/* Not related to us */ +/* rewrite url in local block */ +/*.a { background: url(./image.png); }*/ +/*:global .b { background: url(image.png); }*/ +/*.c { background: url(\\"./image.png\\"); }*/ +/*.c { background: url('./image.png'); }*/ +/*.d { background: -webkit-image-set(url(\\"./image.png\\") 1x, url(\\"./image2x.png\\") 2x); }*/ +/*@font-face { src: url(\\"./font.woff\\"); }*/ +/*@-webkit-font-face { src: url(\\"./font.woff\\"); }*/ +/*@media screen { .a { src: url(\\"./image.png\\"); } }*/ +/*@keyframes :global(ani1) { 0% { src: url(\\"image.png\\"); } }*/ +/*@keyframes ani2 { 0% { src: url(\\"./image.png\\"); } }*/ +/*foo { background: end-with-url(something); }*/ + +/* Not related to us */ +/* not crash on atrule without nodes */ +/*@charset \\"utf-8\\";*/ + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193\\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193 \\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193\\\\2193\\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193 \\\\2193 \\\\2193\\" } + +/* not ignore custom property set */ +:root { --postcss-modules-local-by-default_local_modules_css-title-align: center; --postcss-modules-local-by-default_local_modules_css-sr-only: { position: absolute; } } + +/* not localize imported alias */ + +.postcss-modules-local-by-default_local_modules_css-foo > .postcss-modules-local-by-default_local_modules_css-a_value { import_modules_css-some-value: some-value; } + +/* + * All the original \`import()\` tests do not replace the property, but we can consider this a feature, + * because we allow to replace any identifier, we can reconsider this in future + */ + +/* not localize nested imported alias */ + +.postcss-modules-local-by-default_local_modules_css-foo > .postcss-modules-local-by-default_local_modules_css-a_value > .postcss-modules-local-by-default_local_modules_css-bar { import_modules_css-some-value: some-value; } + +/* ignore imported in explicit local */ + +.postcss-modules-local-by-default_local_modules_css-a_value { import_modules_css-some-value: some-value; } + +/* escape local context with explict global */ + +.postcss-modules-local-by-default_local_modules_css-foo .a_value .postcss-modules-local-by-default_local_modules_css-bar { import_modules_css-some-value: some-value; } + +/* respect explicit local */ + +.postcss-modules-local-by-default_local_modules_css-a_value .postcss-modules-local-by-default_local_modules_css-a_value .postcss-modules-local-by-default_local_modules_css-foo .a_value { import_modules_css-some-value: some-value; } + +/* not localize imported animation-name */ + +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-a_value; } + +/* Not related to us */ +/* throw on invalid syntax id usage */ +. { a_value: some-value; } + +/* Not related to us */ +/* throw on invalid syntax class usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid syntax local class usage */ +. { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid syntax local id usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +. { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +.a:not(.b, .c) { a_value: some-value; } + +/* css nesting */ +.postcss-modules-local-by-default_local_modules_css-foo { + &.postcss-modules-local-by-default_local_modules_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .postcss-modules-local-by-default_local_modules_css-bar { + c_value: some-value; + } + + &.postcss-modules-local-by-default_local_modules_css-baz { + c_value: some-value; + } + } +} + +/* handle negative animation-delay in animation shorthand */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s -500ms; } + +/* handle negative animation-delay in animation shorthand #1 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s -500.0ms; } + +/* handle negative animation-delay in animation shorthand #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s -500.0ms postcss-modules-local-by-default_local_modules_css--a_value; } + +/* @scope at-rule */ +.postcss-modules-local-by-default_local_modules_css-article-header { + color: red; +} + +.postcss-modules-local-by-default_local_modules_css-article-body { + color: blue; +} + +@scope (.postcss-modules-local-by-default_local_modules_css-article-body) to (.postcss-modules-local-by-default_local_modules_css-article-header) { + .postcss-modules-local-by-default_local_modules_css-article-body { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope(.postcss-modules-local-by-default_local_modules_css-article-body)to(.postcss-modules-local-by-default_local_modules_css-article-header){ + .postcss-modules-local-by-default_local_modules_css-article-footer { + border: 5px solid black; + } +} + +@scope ( .postcss-modules-local-by-default_local_modules_css-article-body ) { + img { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope { + :scope { + color: red; + } +} + +/* @scope at-rule #1 */ +@scope (.postcss-modules-local-by-default_local_modules_css-article-body) to (figure) { + .postcss-modules-local-by-default_local_modules_css-article-footer { + border: 5px solid black; + } +} + +/* @scope at-rule #2 */ +@scope (.postcss-modules-local-by-default_local_modules_css-article-body) to (.class) { + .postcss-modules-local-by-default_local_modules_css-article-footer { + border: 5px solid black; + } + .postcss-modules-local-by-default_local_modules_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/* @scope at-rule #5 */ +@scope (.postcss-modules-local-by-default_local_modules_css-article-header) to (.postcss-modules-local-by-default_local_modules_css-class) { + .postcss-modules-local-by-default_local_modules_css-article-footer { + color: red; + } +} + +/* @scope at-rule #6 */ +.postcss-modules-local-by-default_local_modules_css-foo { + @scope (.postcss-modules-local-by-default_local_modules_css-article-header) to (.postcss-modules-local-by-default_local_modules_css-class) { + :scope { + background: blue; + } + + .postcss-modules-local-by-default_local_modules_css-bar { + color: red; + } + } +} + +/* duplicate-name */ +#postcss-modules-local-by-default_local_modules_css-duplicate-name { color: red; } +.postcss-modules-local-by-default_local_modules_css-duplicate-name { color: red; } + +/* in-media */ +@media screen and (min-width: 900px) { html .postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value } } + +/*!*****************************************************************!*\\\\ + !*** css ./postcss-modules-local-by-default.global.modules.css ***! + \\\\*****************************************************************/ +/* postcss-modules-local-by-default */ + + +/* localize and not localize animation-name in mixed case #2 */ +.foo { animation-name: fadeInOut, moveLeft300px, postcss-modules-local-by-default_global_modules_css-bounce; } + +/* localize and not localize a certain animation in mixed case #2 */ +.foo { animation: rotate 1s, spin 3s, postcss-modules-local-by-default_global_modules_css-fly 6s; } + +/* default to global when mode provided */ +.foo { a_value: some-value; } + +/* use correct spacing */ +.a .postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b {} +.a .postcss-modules-local-by-default_global_modules_css-b {} +.a .postcss-modules-local-by-default_global_modules_css-b {} +.postcss-modules-local-by-default_global_modules_css-a.b {} +.postcss-modules-local-by-default_global_modules_css-a.b {} +.postcss-modules-local-by-default_global_modules_css-a .b {} +.postcss-modules-local-by-default_global_modules_css-a .b {} +.a /* test */ /* test*/ .postcss-modules-local-by-default_global_modules_css-b {} +.a /* test *//* test*/ .postcss-modules-local-by-default_global_modules_css-b {} +.a/* test */ /* test*/.postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b /* test */ {} +.a.postcss-modules-local-by-default_global_modules_css-b/* test */ {} +.a.postcss-modules-local-by-default_global_modules_css-b/* test */ {} +.a.postcss-modules-local-by-default_global_modules_css-b /* test */ {} + +/* localize keyframes in global default mode */ +@keyframes foo { a_value: some-value; } + +/* css nesting #1 */ +.postcss-modules-local-by-default_global_modules_css-foo { + &.postcss-modules-local-by-default_global_modules_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .postcss-modules-local-by-default_global_modules_css-bar { + c_value: some-value; + } + + &.postcss-modules-local-by-default_global_modules_css-baz { + c_value: some-value; + } + } +} + +/* @scope at-rule #3 */ +@scope (.postcss-modules-local-by-default_global_modules_css-article-header) to (.class) { + .article-footer { + border: 5px solid black; + } + .postcss-modules-local-by-default_global_modules_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/*!***************************************************************!*\\\\ + !*** css ./postcss-modules-local-by-default.pure.modules.css ***! + \\\\***************************************************************/ +/* postcss-modules-local-by-default */ +/* TODO not implemented yet */ + +@keyframes postcss-modules-local-by-default_pure_modules_css-bounce {} +@keyframes postcss-modules-local-by-default_pure_modules_css-fly {} + +/* localize and not localize animation-name in mixed case #3 */ +.postcss-modules-local-by-default_pure_modules_css-foo { animation-name: postcss-modules-local-by-default_pure_modules_css-fadeInOut, moveLeft300px, postcss-modules-local-by-default_pure_modules_css-bounce; } + +/* localize and not localize a certain animation in mixed case #2 */ +.postcss-modules-local-by-default_pure_modules_css-foo { animation: postcss-modules-local-by-default_pure_modules_css-rotate 1s, spin 3s, postcss-modules-local-by-default_pure_modules_css-fly 6s; } + +/* compile in pure mode */ +.foo.postcss-modules-local-by-default_pure_modules_css-bar, [type=\\"radio\\"] ~ .postcss-modules-local-by-default_pure_modules_css-label, :not(.postcss-modules-local-by-default_pure_modules_css-foo), #postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } + +/* throw on not pure selector (global class) */ +.foo { a_value: some-value; } + +/* throw on not pure selector (with multiple 1) */ +.postcss-modules-local-by-default_pure_modules_css-foo, .bar { a_value: some-value; } + +/* throw on not pure selector (with multiple 2) */ +.bar, .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } + +/* throw on not pure selector (element) */ +input { a_value: some-value; } + +/* throw on not pure selector (attribute) */ +[type=\\"radio\\"] { a_value: some-value; } + +/* throw on not pure keyframes */ +@keyframes foo { a_value: some-value; } + +/* consider & statements as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo { &:hover { a_value: some-value; } } + +/* consider & statements as pure #2 */ +.postcss-modules-local-by-default_pure_modules_css-foo { @media screen and (min-width: 900px) { &:hover { a_value: some-value; } } } + +/* consider global inside local as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo button { a_value: some-value; } + +/* consider selector & statements as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo { html &:hover { a_value: some-value; } } + +/* consider selector & statements as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo { &.bar { a_value: some-value; } } + +/* throw on nested & selectors without a local selector */ +.foo { &:hover { a_value: some-value; } } + +/* should suppress errors for global selectors after ignore comment */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #2 */ +/* cssmodules-pure-ignore */ +/* another comment */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #3 */ +/* another comment */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #4 */ +/* cssmodules-pure-ignore */ /* another comment */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #5 */ +/* another comment */ /* cssmodules-pure-ignore */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #6 */ +.postcss-modules-local-by-default_pure_modules_css-foo { /* cssmodules-pure-ignore */ .bar { color: blue }; } + +/* should suppress errors for global selectors after ignore comment #7 */ +/* cssmodules-pure-ignore */ .foo { /* cssmodules-pure-ignore */ .bar { color: blue } } + +/* should suppress errors for global selectors after ignore comment #8 */ +/* cssmodules-pure-ignore */ .foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #9 */ +/* + cssmodules-pure-ignore + */ .foo { color: blue; } + +/* should allow additional text in ignore comment */ +/* cssmodules-pure-ignore - needed for third party integration */ +#foo { color: blue; } + +/* should not affect rules after the ignored block */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } +.bar { color: red; } + +/* should work with nested global selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo { + .bar { color: blue; } +} + +/* should work with ignored nested global selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo { + /* cssmodules-pure-ignore */ + .bar { color: blue; } +} + +/* should work with view transitions in ignored block */ +/* cssmodules-pure-ignore */ +::view-transition-group(modal) { + animation-duration: 300ms; +} + +/* should work with keyframes in ignored block */ +/* cssmodules-pure-ignore */ +@keyframes fadeOut { + from { opacity: 1; } + to { opacity: 0; } +} + +/* should work with scope in ignored block */ + +/* cssmodules-pure-ignore */ +@scope (.foo) to (.bar) { + .postcss-modules-local-by-default_pure_modules_css-article-footer { + border: 5px solid black; + } +} + + +/* should work with scope in ignored block #2 */ + +/* cssmodules-pure-ignore */ +@scope (.foo) +to (.bar) { + .postcss-modules-local-by-default_pure_modules_css-article-footer { + border: 5px solid black; + } +} + + +/* should work in media queries */ +@media (min-width: 768px) { + /* cssmodules-pure-ignore */ + .foo { color: blue; } +} + +/* should handle multiple ignore comments */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } +.postcss-modules-local-by-default_pure_modules_css-local { color: green; } +/* cssmodules-pure-ignore */ +.bar { color: red; } + +/* should work with complex selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo:hover > .bar + .baz { + color: blue; +} + +/* should work with multiple selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo, +.bar, +.baz { + color: blue; +} + +/* should work with pseudo-elements in ignored block */ +/* cssmodules-pure-ignore */ +.foo::before, +.foo::after { + content: ''; +} + +/* should disable pure mode checks for entire file with no-check comment */ +/* cssmodules-pure-no-check */ +.foo { border: 1px solid #e2e8f0 } +.bar { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) } +.baz { background: #4299e1 } + +/* should disable pure mode checks for nested selectors */ +/* cssmodules-pure-no-check */ +.foo { + &:hover { border-color: #cbd5e0 } + & .bar { color: blue } +} + +/* should ignore no-check comment if not at root level */ +.bar { color: blue } +/* cssmodules-pure-no-check */ + +/* should ignore no-check comment if not at root level #2 */ +/* Some file description */ +.postcss-modules-local-by-default_pure_modules_css-class { color: red; } +/* cssmodules-pure-no-check */ +.foo { color: blue } + +/* should allow other comments before no-check comment */ +/* Some file description */ +/* cssmodules-pure-no-check */ +.foo { color: blue } + +/* should disable pure mode checks for deep nested selectors */ +/* cssmodules-pure-no-check */ +.foo { max-width: 600px } +.bar { background: #fafafa } +.baz { + .foobar { + &::-webkit-scrollbar { width: 8px } + } +} + +/* should work with keyframes when no-check is enabled */ +/* cssmodules-pure-no-check */ +@keyframes fadeIn { + from { opacity: 0 } + to { opacity: 1 } +} +.animate { animation: fadeIn 0.3s } + +/* should allow multiline no-check comment */ +/* + cssmodules-pure-no-check +*/ +.foo { color: blue } + +/* should allow additional text in no-check comment */ +/* cssmodules-pure-no-check - needed for styling third-party components */ +.foo { color: blue } + +/* should work with media queries when no-check is enabled */ +/* cssmodules-pure-no-check */ +@media (max-width: 768px) { + .foo { position: fixed } +} + +/* css nesting #2 */ + +.postcss-modules-local-by-default_pure_modules_css-foo { + &.postcss-modules-local-by-default_pure_modules_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .postcss-modules-local-by-default_pure_modules_css-bar { + c_value: some-value; + } + + &.postcss-modules-local-by-default_pure_modules_css-baz { + c_value: some-value; + } + } +} + +/* css nesting #3 */ +.postcss-modules-local-by-default_pure_modules_css-foo { span { a_value: some-value; } } + +/* css nesting (unfolded) #3 */ +.postcss-modules-local-by-default_pure_modules_css-foo span { a_value: some-value } + +/* css nesting #4 */ +.postcss-modules-local-by-default_pure_modules_css-foo { span { a { a_value: some-value; } } } + +/* css nesting (unfolded) #4 */ +.postcss-modules-local-by-default_pure_modules_css-foo span a { a_value: some-value } + +/* css nesting #5 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } + +/* css nesting (unfolded) #5 */ +html .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value } + +/* css nesting #6 */ +html { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } + +/* css nesting (unfolded) #6 */ +@media screen and (min-width: 900px) { html .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value } } + +/* css nesting #7 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } } + +/* css nesting (unfolded) #7 */ +html .postcss-modules-local-by-default_pure_modules_css-foo, html .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value } + +/* css nesting #8 */ +.postcss-modules-local-by-default_pure_modules_css-class { @media screen and (min-width: 900px) { & > span { a_value: some-value; } } } + +/* css nesting (unfolded) #8 */ +@media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-class > span { a_value: some-value } } + +/* css nesting #9 */ +html { @media screen and (min-width: 900px) { & > .postcss-modules-local-by-default_pure_modules_css-class { a_value: some-value; } } } + +/* css nesting (unfolded) #9 */ +@media screen and (min-width: 900px) { html > .postcss-modules-local-by-default_pure_modules_css-class { a_value: some-value } } + +/* css nesting #10 */ +.postcss-modules-local-by-default_pure_modules_css-class { @media screen and (min-width: 900px) { & { a_value: some-value; } } } + +/* css nesting (unfolded) #10 */ +@media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-class { a_value: some-value } } + +/* css nesting #11 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { span { a_value: some-value; } } } + +/* css nesting (unfolded) #11 */ +html .postcss-modules-local-by-default_pure_modules_css-foo span { a_value: some-value } + +/* css nesting #12 */ +html { button { .postcss-modules-local-by-default_pure_modules_css-foo { div { span { a_value: some-value; } } } } } + +/* css nesting #13 */ +.postcss-modules-local-by-default_pure_modules_css-foo { button { div { div { span { a_value: some-value; } } } } } + +/* css nesting #14 */ +html { button { div { div { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } } } + +/* css nesting #15 */ +html { button { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { div { span { a_value: some-value; } } } } } } + +/* css nesting #16 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } + +/* css nesting #17 */ +.postcss-modules-local-by-default_pure_modules_css-foo { div { a_value: some-value; } } + +/* css nesting #18 */ +@media screen and (min-width: 900px) { html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } + +/* css nesting #19 */ +html { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } + +/* css nesting #20 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { @media screen and (min-width: 900px) { a_value: some-value; } } } + +/* css nesting #21 */ +@media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { div { a_value: some-value; } } } + +/* css nesting #22 */ +.postcss-modules-local-by-default_pure_modules_css-foo { @media screen and (min-width: 900px) { div { a_value: some-value; } } } + +/* css nesting #23 */ +.postcss-modules-local-by-default_pure_modules_css-foo { div { @media screen and (min-width: 900px) { a_value: some-value; } } } + +/* css nesting - throw on mixed parents */ +.postcss-modules-local-by-default_pure_modules_css-foo, html { span { a_value: some-value; } } + +/* css nesting - throw on & */ +html { & > span { a_value: some-value; } } + +/* css nesting - throw on & #2 */ +html { button { & > span { a_value: some-value; } } } + +/* css nesting - throw on & #3 */ +html { @media screen and (min-width: 900px) { & > span { a_value: some-value; } } } + +/* css nesting - throw on & #4 */ +html { button { div { div { & { a_value: some-value; } } } } } + +/* css nesting - throw */ +html { button { div { div { div { a_value: some-value; } } } } } + +/* css nesting - throw #2 */ +html { button { div { div { div { } } } } } + +/* css nesting - throw #3 */ +html { button { @media screen and (min-width: 900px) { div { div { div { } } } } } } + +/* css nesting - throw #4 */ +@media screen and (min-width: 900px) { html { button { div { div { div { } } } } } } + +/* css nesting - throw #5 */ +html { div { @media screen and (min-width: 900px) { color: red } } } + +/* css nesting - throw #6 */ +html { div { @media screen and (min-width: 900px) { @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #7 */ +html { div { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-a { } @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #7 */ +html { div { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-a { a_value: some-value; } @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #8 */ + +@media screen and (min-width: 900px) { + .postcss-modules-local-by-default_pure_modules_css-a { a_value: some-value; } + @media screen and (min-width: 900px) { + div { + color: red + } + } +} + +/* css nesting - throw on global styles with a local selector */ +html { a_value: some-value; .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } + +/* css nesting - throw on global styles with a local selector #2 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } a_value: some-value; } + +/* css nesting - throw on global styles with a local selector #3 */ + +html { + .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } + button { + color: red; + .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } + } +} + +/* css nesting - throw on global styles with a local selector #4 */ + +html { + @media screen and (min-width: 900px) { + button { + color: red; + .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } + } + } +} + +/* consider :import statements pure */ + +/* consider :export statements pure */ + +/* @scope at-rule #4 */ + +@scope (.postcss-modules-local-by-default_pure_modules_css-article-header) to (.postcss-modules-local-by-default_pure_modules_css-class) { + .postcss-modules-local-by-default_pure_modules_css-article-footer { + border: 5px solid black; + } + .postcss-modules-local-by-default_pure_modules_css-class-1 { + color: red; + } + .postcss-modules-local-by-default_pure_modules_css-class-2 { + color: blue; + } +} + + +/* @scope at-rule #7 */ + +@scope (.article-header.postcss-modules-local-by-default_pure_modules_css-foo) to (.class.postcss-modules-local-by-default_pure_modules_css-bar) { + .postcss-modules-local-by-default_pure_modules_css-bar { + color: red; + } +} + +/*!******************************!*\\\\ + !*** css ./abcd.modules.css ***! + \\\\******************************/ +.abcd_modules_css-a { + color: red; +} + +.abcd_modules_css-b { + color: red; +} + +.abcd_modules_css-c { + color: red; +} + +.abcd_modules_css-d { + color: red; +} + +/*!*************************!*\\\\ + !*** css ./classes.css ***! + \\\\*************************/ +.classes_css-localName { + background: red; +} + +.classes_css-bar { + } + +/*!***********************************************!*\\\\ + !*** css ./postcss-modules-scope.modules.css ***! + \\\\***********************************************/ +/* postcss-modules-scope */ + +/* at-rule-scope */ +.postcss-modules-scope_modules_css-exportName4 { + color: red; +} + +@scope (.postcss-modules-scope_modules_css-exportName1) to (.postcss-modules-scope_modules_css-exportName2) { + .postcss-modules-scope_modules_css-exportName3 { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope (.postcss-modules-scope_modules_css-exportName1) { + .postcss-modules-scope_modules_css-exportName5 { + border: 5px solid black; + } +} + +@scope (.postcss-modules-scope_modules_css-exportName1) to (img) { + .postcss-modules-scope_modules_css-exportName3 { + background-color: goldenrod; + } +} + +@scope (.postcss-modules-scope_modules_css-exportName6) { + img { + backdrop-filter: blur(2px); + } +} + +@scope { + :scope { + color: red; + } +} + +/* at-rule */ +.postcss-modules-scope_modules_css-exportName7 { + background: red; +} + +@media screen { + .postcss-modules-scope_modules_css-exportName8 { + color: green; + .postcss-modules-scope_modules_css-exportName9 { + color: blue; + } + } +} + +/* composes-only-allowed */ +.postcss-modules-scope_modules_css-local-a { color: red; } +.postcss-modules-scope_modules_css-local-b { color: green; } +.postcss-modules-scope_modules_css-exportName10 { + a-composes: c; + composes-b: d; + a-composes-b: e; + a-compose-with-b: b; +} + +/* css-nesting-composes */ +.postcss-modules-scope_modules_css-exportName11 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName12 { + display: grid; + @media (orientation: landscape) { + grid-auto-flow: column; + } +} + +/* css-nesting */ +.postcss-modules-scope_modules_css-exportName12 { + background: red; +} + +.postcss-modules-scope_modules_css-exportName13 { + color: green; + + @media (max-width: 520px) { + .postcss-modules-scope_modules_css-exportName14 { + color: darkgreen; + } + + &.postcss-modules-scope_modules_css-exportName15 { + color: blue; + } + } +} + +.postcss-modules-scope_modules_css-exportName16 { + color: red; + + &.postcss-modules-scope_modules_css-exportName17 { + color: green; + } + + .postcss-modules-scope_modules_css-exportName18 { + color: blue; + } +} + +/* error-comma-in-local */ +.postcss-modules-scope_modules_css-className { color: red; } +.postcss-modules-scope_modules_css-exportName19, .postcss-modules-scope_modules_css-exportName20 { + composes: className; +} + +/* error-composes-css-nesting-at-rule */ +.postcss-modules-scope_modules_css-exportName21 { +} + +@media (min-width: 1024px) { + .postcss-modules-scope_modules_css-exportName22 { + .postcss-modules-scope_modules_css-exportName23 { + compose-with: exportName21; + } + } +} + +/* error-composes-css-nesting-with-media */ +.postcss-modules-scope_modules_css-exportName24 { +} + +.postcss-modules-scope_modules_css-exportName25 { + @media (min-width: 1024px) { + .postcss-modules-scope_modules_css-exportName26 { + compose-with: exportName24; + } + } +} + +/* error-composes-css-nesting */ +.postcss-modules-scope_modules_css-exportName27 { +} + +.postcss-modules-scope_modules_css-exportName28 { + .postcss-modules-scope_modules_css-exportName29 { + compose-with: exportName27; + } +} + +/* TODO bug no report */ +/* error-composes-keyframes */ +.postcss-modules-scope_modules_css-exportName30 { +} + +@keyframes postcss-modules-scope_modules_css-slidein { + from { + transform: translateX(0%); + } + + to { + composes: exportName30; + } +} + +/* TODO bug no report */ +/* error-composes-not-allowed-in-local-id */ +.postcss-modules-scope_modules_css-exportName31 {} + +#postcss-modules-scope_modules_css-idName { + composes: exportName31; +} + +/* error-composes-not-allowed-in-multiple */ +.postcss-modules-scope_modules_css-exportName32 {} +.postcss-modules-scope_modules_css-exportName33 .postcss-modules-scope_modules_css-exportName34 { + composes: exportName32; +} + +/* TODO bug no report */ +/* error-composes-not-allowed-in-simple */ +.postcss-modules-scope_modules_css-exportName35 {} +body { + composes: exportName35; +} + +/* error-composes-not-allowed-in-wrong-local */ +.postcss-modules-scope_modules_css-exportName36 {} +.postcss-modules-scope_modules_css-exportName37.postcss-modules-scope_modules_css-exportName38 { + composes: exportName36; +} + +/* error-composes-not-defined-class */ +.postcss-modules-scope_modules_css-exportName39 { + } + +/* TODO bug no report */ +/* error-multiple-nested-media */ +.postcss-modules-scope_modules_css-exportName41 { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName42 { + display: grid; + + @media (orientation: landscape) { + grid-auto-flow: column; + + @media (min-width: 1024px) { + } + } +} + +/* TODO bug no report */ +/* error-not-allowed-in-local */ +body { + color: red; +} + +/* TODO bug no report */ +/* error-when-attribute-is-href */ +.postcss-modules-scope_modules_css-exportName42[href^=\\"https\\"] { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-target */ +.postcss-modules-scope_modules_css-exportName43[target=\\"_blank\\"] { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-title */ +.postcss-modules-scope_modules_css-exportName44[title=\\"flower\\"] { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-title */ +.postcss-modules-scope_modules_css-exportName45[type=\\"text\\"] { + color: blue; +} + +/* escape-sequence */ +.postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile_with_A { + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-😀{ + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-😀{ + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile_with_A .postcss-modules-scope_modules_css-😀{ + color: red; +} + +#postcss-modules-scope_modules_css-😀 #postcss-modules-scope_modules_css-smile #postcss-modules-scope_modules_css-😀{ + color: red; +} + +#postcss-modules-scope_modules_css-😀 #postcss-modules-scope_modules_css-smile_with_A #postcss-modules-scope_modules_css-😀{ + color: red; +} + +.postcss-modules-scope_modules_css-a .postcss-modules-scope_modules_css-smile b { + color: red; +} + +.postcss-modules-scope_modules_css-smile > .postcss-modules-scope_modules_css-smile > .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-😀.postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-😀.postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-a { + color: red; +} + +.postcss-modules-scope_modules_css-smile.postcss-modules-scope_modules_css-a { + color: red; +} + +.postcss-modules-scope_modules_css-a .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-a.postcss-modules-scope_modules_css-smile { + color: red; +} + +/* export-child-class */ +.postcss-modules-scope_modules_css-exportName46 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName46 h1 { + color: blue; +} + +/* export-class-attribute */ +.postcss-modules-scope_modules_css-exportName47 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName48 { + color: green; +} + +.postcss-modules-scope_modules_css-exportName48[class=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[class=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class = \\"postcss-modules-scope_modules_css-exportName47\\" ] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class = postcss-modules-scope_modules_css-exportName47 ] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[class~=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class ~= \\"postcss-modules-scope_modules_css-exportName47\\" ] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class ~= postcss-modules-scope_modules_css-exportName47 ] { + color: blue; +} + +.globalClass[class=\\"otherGlobalClass\\"] { + color: blue; +} + +.globaClass[class~=\\"otherGlobalClass\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName49[class=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +/* export-difficult */ +@keyframes postcss-modules-scope_modules_css-fade-in { + from { + opacity: 0; + } +} + +@-webkit-keyframes postcss-modules-scope_modules_css-fade-out { + to { + opacity: 0; + } +} + +.postcss-modules-scope_modules_css-fadeIn { + animation: postcss-modules-scope_modules_css-fade-in 5s,/* some, :local(comment) */ + postcss-modules-scope_modules_css-fade-out 1s postcss-modules-scope_modules_css-wrong; + content: postcss-modules-scope_modules_css-fade-in, wrong, \\"difficult, :local(wrong)\\" postcss-modules-scope_modules_css-wrong; +} + +/* export-global-class */ +.postcss-modules-scope_modules_css-exportName50 { + color: green; +} + +.postcss-modules-scope_modules_css-exportName50:hover { + color: red; +} + +@media screen { + body { + background: red; + } +} + +.postcss-modules-scope_modules_css-exportName51 { + color: blue; +} + +/* export-keyframes */ +@keyframes postcss-modules-scope_modules_css-fade-in-export { + from { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes postcss-modules-scope_modules_css-fade-export { + from { + opacity: 0.5; + } +} + +.postcss-modules-scope_modules_css-fadeIn-export { + animation-name: postcss-modules-scope_modules_css-fade-in-export; +} + +.postcss-modules-scope_modules_css-fadeIn-export { + animation: 2s postcss-modules-scope_modules_css-fade-in-export; +} + +.postcss-modules-scope_modules_css-fadeIn-export { + animation: postcss-modules-scope_modules_css-fade-in-export 2s; +} + +/* export-keywords-selector */ +.postcss-modules-scope_modules_css-constructor { + color: green; +} + +.postcss-modules-scope_modules_css-toString { + color: red; +} + +/* export-multiple-classes */ +.postcss-modules-scope_modules_css-exportName52 .postcss-modules-scope_modules_css-exportName53 { + color: green; +} + +.postcss-modules-scope_modules_css-exportName52.postcss-modules-scope_modules_css-exportName53 { + color: red; +} + +/* export-nested-class */ +.postcss-modules-scope_modules_css-exportName54:not(.postcss-modules-scope_modules_css-exportName55.postcss-modules-scope_modules_css-global) { + color: green; +} + +.postcss-modules-scope_modules_css-exportName54:has(.postcss-modules-scope_modules_css-exportName55, .postcss-modules-scope_modules_css-exportName56) { + color: red; +} + +/* export-with-composes-imported-class */ + +.postcss-modules-scope_modules_css-exportName76 { + color: green; +} + +/* export-with-composes */ +.postcss-modules-scope_modules_css-exportName57 { background: red; } +.postcss-modules-scope_modules_css-exportName58 { color: green; } +.postcss-modules-scope_modules_css-exportName59 { color: green; } + + /* export-with-global-composes */ +.otherClass { background: red; } +.andAgain { font-size: 2em; } +.aThirdClass { color: red; } +.postcss-modules-scope_modules_css-exportName60-function-syntax { color: green; } +.postcss-modules-scope_modules_css-exportName60 { color: green; } + +/* export-with-multiple-composes */ +.postcss-modules-scope_modules_css-exportName63 { background: red; } +.postcss-modules-scope_modules_css-exportName64 { font-size: 2em; } +.postcss-modules-scope_modules_css-exportName65 { color: red; } +.postcss-modules-scope_modules_css-exportName66 { color: green; } + +/* export-with-transitive-composes */ +.postcss-modules-scope_modules_css-exportName67 { + font-size: 2em; +} +.postcss-modules-scope_modules_css-exportName68 { + background: red; +} +.postcss-modules-scope_modules_css-exportName69 { + color: green; +} + +/* Not related to us */ +/* ignore-custom-property-set */ +:root { + --postcss-modules-scope_modules_css-title-align: center; + --postcss-modules-scope_modules_css-sr-only: { + position: absolute; + } +} + +/* multiple-composes */ +.postcss-modules-scope_modules_css-class { + color: red; +} + +/* nested-rule */ +:root { + --postcss-modules-scope_modules_css-test: { + --postcss-modules-scope_modules_css-test: foo; + --postcss-modules-scope_modules_css-bar: 1; + } +} + +/* We pass this limitation, order can be any now */ +/* export-with-composes-broken-order */ +.postcss-modules-scope_modules_css-exportName70 { color: green; } +.postcss-modules-scope_modules_css-exportName71 { color: green; } +.postcss-modules-scope_modules_css-exportName72 { background: red; } + +/* transitive composes */ +.postcss-modules-scope_modules_css-exportName73 { color: green; } +.postcss-modules-scope_modules_css-exportName74 { color: green; } +.postcss-modules-scope_modules_css-exportName75 { color: red } +.postcss-modules-scope_modules_css-exportName74 { color: green; } +.postcss-modules-scope_modules_css-exportName74 { color: green; } + +/* deep transitive composes */ +.postcss-modules-scope_modules_css-exportName77 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName78 {} + +.postcss-modules-scope_modules_css-exportName79 { + } + +/*!************************!*\\\\ + !*** css ./colors.css ***! + \\\\************************/ + + + +/*!********************************!*\\\\ + !*** css ./colors.modules.css ***! + \\\\********************************/ + + + + + + + + + + +/*!************************************************!*\\\\ + !*** css ./postcss-modules-values.modules.css ***! + \\\\************************************************/ +/* postcss-modules-values */ + +/* should export a constant */ + + +/* Should pass for us, not a warning */ +/* gives a warnings when there is no semicolon between lines */ + + +/* Should pass for us, not a warning */ +/* gives a warnings on empty value */ + + +/* Should pass for us, not a warning */ +/* gives a warnings on empty value with comment */ + + +/* should export a more complex constant */ + + +/* should replace constants within the file */ + +.postcss-modules-values_modules_css-foo-replace { color: red; } + +/* should replace constants within the file #1 */ + +.postcss-modules-values_modules_css-foo-replace-1 { &.postcss-modules-values_modules_css-bar { color: red; } } + +/* should replace constants within the file #2 */ + +.postcss-modules-values_modules_css-foo-replace-2 { @media (min-width: 1024px) { &.postcss-modules-values_modules_css-bar { color: red; } } } + +/* should replace constants within the file #3 */ + +.postcss-modules-values_modules_css-foo-replace-3 { @media (min-width: 1024px) { &.postcss-modules-values_modules_css-bar { @media (min-width: 1024px) { color: red; } } } } + +/* should replace constants within the file #4 */ + + +.postcss-modules-values_modules_css-foo-replace-4 { height: 40px; height: 36px; } + +/* should replace selectors within the file */ + +.postcss-modules-values_modules_css-fuchsia { color: fuchsia; } + +/* should replace selectors within the file #1 */ + +#postcss-modules-values_modules_css-red { color: red; } + +/* should replace selectors within the file #2 */ + +.postcss-modules-values_modules_css-red > .postcss-modules-values_modules_css-red { color: red; } + +/* should import and re-export a simple constant */ + + +/* should import a simple constant and replace usages */ + +.postcss-modules-values_modules_css-exportName13 { color: blue; } + +/* should import and alias a constant and replace usages */ + +.postcss-modules-values_modules_css-exportName14 { color: yellow; } + +/* should import multiple from a single file */ + +.postcss-modules-values_modules_css-exportName15 { color: blue; } +.postcss-modules-values_modules_css-exportName16 { color: red } + +/* should import from a definition */ + + +.postcss-modules-values_modules_css-exportName17 { color: red; } + +/* should only allow values for paths if defined in the right order - throw an error */ + + + +/* should allow transitive values */ + + +.postcss-modules-values_modules_css-exportName20 { color: #FFF; } + +/* TODO bug */ +/* should allow transitive values within calc */ + + +.postcss-modules-values_modules_css-exportName24 { margin: calc(exportName22 * 2); } + +/* should preserve import order */ + + + +/* should allow custom-property-style names */ + +.postcss-modules-values_modules_css-exportName25 { color: blue; } + +/* should allow all colour types */ + + + + + +.postcss-modules-values_modules_css-exportName26 { + color: aqua; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + +/* should import multiple from a single file on multiple lines */ + +.postcss-modules-values_modules_css-exportName27 { color: red; } +.postcss-modules-values_modules_css-exportName28 { color: blue } + +/* should allow definitions with commas in them */ + +.postcss-modules-values_modules_css-exportName29 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + +/* should allow values with nested parentheses */ + +.postcss-modules-values_modules_css-exportName30 { + color: color(red lightness(50%)) +} + +/* should work with custom properties */ + +:root { --postcss-modules-values_modules_css-my-own-color: my-custom-value; } + +/* should work with empty custom properties */ + +:root { --postcss-modules-values_modules_css-color: ; } + +/* should work with empty custom properties #2 */ + +:root { --postcss-modules-values_modules_css-color: ; } + +/* should work with empty custom properties #3 */ + +:root { --postcss-modules-values_modules_css-color: /* comment */; } + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/postcss-modules-plugins/__snapshots__/ConfigTest.snap b/test/configCases/css/postcss-modules-plugins/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..b7f73aff303 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/__snapshots__/ConfigTest.snap @@ -0,0 +1,2550 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 1`] = ` +Object { + "bar": "postcss-modules-extract-imports_modules_css-bar", + "baz": "postcss-modules-extract-imports_modules_css-baz", + "exportName1": "postcss-modules-extract-imports_modules_css-exportName1 importName secondImport", + "exportName10": "postcss-modules-extract-imports_modules_css-exportName10", + "exportName11": "postcss-modules-extract-imports_modules_css-exportName11 b_modules_css-b c_modules_css-c", + "exportName12": "postcss-modules-extract-imports_modules_css-exportName12 library_modules_css-importName", + "exportName13": "postcss-modules-extract-imports_modules_css-exportName13 library_modules_css-importName", + "exportName14": "postcss-modules-extract-imports_modules_css-exportName14 library_modules_css-importName library_modules_css-importName2 library_modules_css-importName library_modules_css-importName2", + "exportName15": "postcss-modules-extract-imports_modules_css-exportName15 library_modules_css-importName", + "exportName16": "postcss-modules-extract-imports_modules_css-exportName16 library_modules_css-importName beforeName importName secondImport library_modules_css-firstImport library_modules_css-secondImport", + "exportName17": "postcss-modules-extract-imports_modules_css-exportName17 a_modules_css-a b_modules_css-b c_modules_css-c a_modules_css-a c_modules_css-c", + "exportName18": "postcss-modules-extract-imports_modules_css-exportName18 library_modules_css-importName library_modules_css-importName2 library_modules_css-importName3 library_modules_css-importName4", + "exportName19": "postcss-modules-extract-imports_modules_css-exportName19 postcss-modules-extract-imports_modules_css-foo postcss-modules-extract-imports_modules_css-bar postcss-modules-extract-imports_modules_css-baz", + "exportName19-nested": "postcss-modules-extract-imports_modules_css-exportName19-nested", + "exportName19-nested-nested": "postcss-modules-extract-imports_modules_css-exportName19-nested-nested", + "exportName2": "postcss-modules-extract-imports_modules_css-exportName2 library_modules_css-importName", + "exportName20": "postcss-modules-extract-imports_modules_css-exportName20 c_modules_css-c", + "exportName21": "postcss-modules-extract-imports_modules_css-exportName21 b_modules_css-b c_modules_css-c", + "exportName22": "postcss-modules-extract-imports_modules_css-exportName22 a_modules_css-a b_modules_css-b c_modules_css-c a_modules_css-a c_modules_css-c", + "exportName23": "postcss-modules-extract-imports_modules_css-exportName23 a_modules_css-a", + "exportName24": "postcss-modules-extract-imports_modules_css-exportName24 b_modules_css-b a_modules_css-hidden-b", + "exportName25": "postcss-modules-extract-imports_modules_css-exportName25 c_modules_css-c a_modules_css-hidden-c", + "exportName26": "postcss-modules-extract-imports_modules_css-exportName26 c_modules_css-hidden-d b_modules_css-hidden-d d_modules_css-d", + "exportName27": "postcss-modules-extract-imports_modules_css-exportName27 characters_modules_css-a characters_modules_css--b characters_modules_css---c characters_modules_css-_d characters_modules_css-a_ characters_modules_css-b- characters_modules_css-c-- characters_modules_css-d%", + "exportName28": "postcss-modules-extract-imports_modules_css-exportName28 b_modules_css-b-last c_modules_css-c-last", + "exportName29": "postcss-modules-extract-imports_modules_css-exportName29 c_modules_css-c-last b_modules_css-b-last", + "exportName3": "postcss-modules-extract-imports_modules_css-exportName3 library_modules_css-importName library_modules_css-secondImport", + "exportName30": "postcss-modules-extract-imports_modules_css-exportName30", + "exportName31": "postcss-modules-extract-imports_modules_css-exportName31 postcss-modules-extract-imports_modules_css-from postcss-modules-extract-imports_modules_css-from", + "exportName32": "postcss-modules-extract-imports_modules_css-exportName32", + "exportName33": "postcss-modules-extract-imports_modules_css-exportName33", + "exportName34": "postcss-modules-extract-imports_modules_css-exportName34 a_modules_css-a b_modules_css-b", + "exportName35": "postcss-modules-extract-imports_modules_css-exportName35 other_css-className", + "exportName36": "postcss-modules-extract-imports_modules_css-exportName36 c_modules_css-deep-nested-c", + "exportName37": "postcss-modules-extract-imports_modules_css-exportName37 postcss-modules-extract-imports_modules_css-localName", + "exportName38": "postcss-modules-extract-imports_modules_css-exportName38 postcss-modules-extract-imports_modules_css-localName", + "exportName39": "postcss-modules-extract-imports_modules_css-exportName39 postcss-modules-extract-imports_modules_css-localName", + "exportName4": "postcss-modules-extract-imports_modules_css-exportName4 postcss-modules-extract-imports_modules_css-localName", + "exportName40": "postcss-modules-extract-imports_modules_css-exportName40 postcss-modules-extract-imports_modules_css-localName", + "exportName41": "postcss-modules-extract-imports_modules_css-exportName41 postcss-modules-extract-imports_modules_css-localName", + "exportName42": "postcss-modules-extract-imports_modules_css-exportName42 postcss-modules-extract-imports_modules_css-localName", + "exportName43": "postcss-modules-extract-imports_modules_css-exportName43 postcss-modules-extract-imports_modules_css-localName", + "exportName44": "postcss-modules-extract-imports_modules_css-exportName44", + "exportName5": "postcss-modules-extract-imports_modules_css-exportName5 library_modules_css-importName library_modules_css-importName2", + "exportName6": "postcss-modules-extract-imports_modules_css-exportName6 library_modules_css-importName", + "exportName7": "postcss-modules-extract-imports_modules_css-exportName7 library_modules_css-importName library_modules_css-secondImport", + "exportName8": "postcss-modules-extract-imports_modules_css-exportName8 library_modules_css-importName library_modules_css-secondImport library_modules_css-importName library_modules_css-importName2", + "exportName9": "postcss-modules-extract-imports_modules_css-exportName9 library_modules_css-secondImport library_modules_css-secondImport library_modules_css-thirdDep", + "foo": "postcss-modules-extract-imports_modules_css-foo", + "from": "postcss-modules-extract-imports_modules_css-from", + "localName": "postcss-modules-extract-imports_modules_css-localName", + "otherExport": "postcss-modules-extract-imports_modules_css-otherExport library_modules_css-thirdImport library_modules_css-otherLibImport", +} +`; + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 2`] = ` +Object { + " +": "postcss-modules-local-by-default_local_modules_css- +", + " as": "postcss-modules-local-by-default_local_modules_css- as", + "#test": "postcss-modules-local-by-default_local_modules_css-#test", + "- +": "postcss-modules-local-by-default_local_modules_css-- +", + "--": "postcss-modules-local-by-default_local_modules_css---", + "-- +": "postcss-modules-local-by-default_local_modules_css--- +", + "--foo": "postcss-modules-local-by-default_local_modules_css---foo", + "-a_value": "postcss-modules-local-by-default_local_modules_css--a_value", + ":)": "postcss-modules-local-by-default_local_modules_css-:)", + "@bounce": "postcss-modules-local-by-default_local_modules_css-@bounce", + "@foo": "postcss-modules-local-by-default_local_modules_css-@foo", + "BAR": "postcss-modules-local-by-default_local_modules_css-BAR", + "a": "postcss-modules-local-by-default_local_modules_css-a", + "a_value": "postcss-modules-local-by-default_local_modules_css-a_value", + "article-body": "postcss-modules-local-by-default_local_modules_css-article-body", + "article-footer": "postcss-modules-local-by-default_local_modules_css-article-footer", + "article-header": "postcss-modules-local-by-default_local_modules_css-article-header", + "b": "postcss-modules-local-by-default_local_modules_css-b", + "bar": "postcss-modules-local-by-default_local_modules_css-bar", + "bar-unique": "--postcss-modules-local-by-default_local_modules_css-bar-unique", + "barfoo": "postcss-modules-local-by-default_local_modules_css-barfoo", + "baz": "postcss-modules-local-by-default_local_modules_css-baz", + "bou@nce": "postcss-modules-local-by-default_local_modules_css-bou@nce", + "bounce": "postcss-modules-local-by-default_local_modules_css-bounce", + "c": "postcss-modules-local-by-default_local_modules_css-c", + "class": "postcss-modules-local-by-default_local_modules_css-class", + "class-1": "postcss-modules-local-by-default_local_modules_css-class-1", + "colon-local-name": "postcss-modules-local-by-default_local_modules_css-colon-local-name", + "constructor": "postcss-modules-local-by-default_local_modules_css-constructor", + "duplicate-name": "postcss-modules-local-by-default_local_modules_css-duplicate-name", + "ease": "postcss-modules-local-by-default_local_modules_css-ease", + "ease-in": "postcss-modules-local-by-default_local_modules_css-ease-in", + "ease-out": "postcss-modules-local-by-default_local_modules_css-ease-out", + "easeOutQuart": "--postcss-modules-local-by-default_local_modules_css-easeOutQuart", + "f@oo": "postcss-modules-local-by-default_local_modules_css-f@oo", + "fade": "postcss-modules-local-by-default_local_modules_css-fade", + "fade-in": "postcss-modules-local-by-default_local_modules_css-fade-in", + "fadeInOut": "postcss-modules-local-by-default_local_modules_css-fadeInOut", + "fly": "postcss-modules-local-by-default_local_modules_css-fly", + "foo": "__foo", + "foo-bar": "--postcss-modules-local-by-default_local_modules_css-foo-bar", + "foobar": "postcss-modules-local-by-default_local_modules_css-foobar", + "infinite": "postcss-modules-local-by-default_local_modules_css-infinite", + "local-name": "postcss-modules-local-by-default_local_modules_css-local-name", + "my-custom-var": "--postcss-modules-local-by-default_local_modules_css-my-custom-var", + "name": "postcss-modules-local-by-default_local_modules_css-name", + "rotate": "postcss-modules-local-by-default_local_modules_css-rotate", + "slide-right": "postcss-modules-local-by-default_local_modules_css-slide-right", + "spin": "postcss-modules-local-by-default_local_modules_css-spin", + "sr-only": "--postcss-modules-local-by-default_local_modules_css-sr-only", + "t t": "postcss-modules-local-by-default_local_modules_css-t t", + "test": "postcss-modules-local-by-default_local_modules_css-test", + "title-align": "--postcss-modules-local-by-default_local_modules_css-title-align", + "u-m+ ": "postcss-modules-local-by-default_local_modules_css-u-m+ ", + "😃bounce😃": "postcss-modules-local-by-default_local_modules_css-😃bounce😃", +} +`; + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 3`] = ` +Object { + "a": "postcss-modules-local-by-default_global_modules_css-a", + "article-header": "postcss-modules-local-by-default_global_modules_css-article-header", + "b": "postcss-modules-local-by-default_global_modules_css-b", + "bar": "postcss-modules-local-by-default_global_modules_css-bar", + "baz": "postcss-modules-local-by-default_global_modules_css-baz", + "bounce": "postcss-modules-local-by-default_global_modules_css-bounce", + "class": "postcss-modules-local-by-default_global_modules_css-class", + "class-1": "postcss-modules-local-by-default_global_modules_css-class-1", + "fly": "postcss-modules-local-by-default_global_modules_css-fly", + "foo": "postcss-modules-local-by-default_global_modules_css-foo", +} +`; + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 4`] = ` +Object { + "a": "postcss-modules-local-by-default_pure_modules_css-a", + "article-footer": "postcss-modules-local-by-default_pure_modules_css-article-footer", + "article-header": "postcss-modules-local-by-default_pure_modules_css-article-header", + "bar": "postcss-modules-local-by-default_pure_modules_css-bar", + "baz": "postcss-modules-local-by-default_pure_modules_css-baz", + "bounce": "postcss-modules-local-by-default_pure_modules_css-bounce", + "class": "postcss-modules-local-by-default_pure_modules_css-class", + "class-1": "postcss-modules-local-by-default_pure_modules_css-class-1", + "class-2": "postcss-modules-local-by-default_pure_modules_css-class-2", + "export-foo": "__foo", + "fadeInOut": "postcss-modules-local-by-default_pure_modules_css-fadeInOut", + "fly": "postcss-modules-local-by-default_pure_modules_css-fly", + "foo": "postcss-modules-local-by-default_pure_modules_css-foo", + "label": "postcss-modules-local-by-default_pure_modules_css-label", + "local": "postcss-modules-local-by-default_pure_modules_css-local", + "rotate": "postcss-modules-local-by-default_pure_modules_css-rotate", +} +`; + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 5`] = ` +Object { + "a": "postcss-modules-scope_modules_css-a", + "bar": "--postcss-modules-scope_modules_css-bar", + "class": "postcss-modules-scope_modules_css-class abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d", + "className": "postcss-modules-scope_modules_css-className", + "constructor": "postcss-modules-scope_modules_css-constructor", + "exportName1": "postcss-modules-scope_modules_css-exportName1", + "exportName10": "postcss-modules-scope_modules_css-exportName10 a b postcss-modules-scope_modules_css-local-a postcss-modules-scope_modules_css-local-b", + "exportName11": "postcss-modules-scope_modules_css-exportName11", + "exportName12": "postcss-modules-scope_modules_css-exportName12 postcss-modules-scope_modules_css-exportName11", + "exportName13": "postcss-modules-scope_modules_css-exportName13", + "exportName14": "postcss-modules-scope_modules_css-exportName14", + "exportName15": "postcss-modules-scope_modules_css-exportName15", + "exportName16": "postcss-modules-scope_modules_css-exportName16", + "exportName17": "postcss-modules-scope_modules_css-exportName17", + "exportName18": "postcss-modules-scope_modules_css-exportName18", + "exportName19": "postcss-modules-scope_modules_css-exportName19", + "exportName2": "postcss-modules-scope_modules_css-exportName2", + "exportName20": "postcss-modules-scope_modules_css-exportName20", + "exportName21": "postcss-modules-scope_modules_css-exportName21", + "exportName22": "postcss-modules-scope_modules_css-exportName22", + "exportName23": "postcss-modules-scope_modules_css-exportName23", + "exportName24": "postcss-modules-scope_modules_css-exportName24", + "exportName25": "postcss-modules-scope_modules_css-exportName25", + "exportName26": "postcss-modules-scope_modules_css-exportName26", + "exportName27": "postcss-modules-scope_modules_css-exportName27", + "exportName28": "postcss-modules-scope_modules_css-exportName28", + "exportName29": "postcss-modules-scope_modules_css-exportName29", + "exportName3": "postcss-modules-scope_modules_css-exportName3", + "exportName30": "postcss-modules-scope_modules_css-exportName30", + "exportName31": "postcss-modules-scope_modules_css-exportName31", + "exportName32": "postcss-modules-scope_modules_css-exportName32", + "exportName33": "postcss-modules-scope_modules_css-exportName33", + "exportName34": "postcss-modules-scope_modules_css-exportName34", + "exportName35": "postcss-modules-scope_modules_css-exportName35", + "exportName36": "postcss-modules-scope_modules_css-exportName36", + "exportName37": "postcss-modules-scope_modules_css-exportName37", + "exportName38": "postcss-modules-scope_modules_css-exportName38", + "exportName39": "postcss-modules-scope_modules_css-exportName39 postcss-modules-scope_modules_css-exportName40", + "exportName4": "postcss-modules-scope_modules_css-exportName4", + "exportName41": "postcss-modules-scope_modules_css-exportName41", + "exportName42": "postcss-modules-scope_modules_css-exportName42 postcss-modules-scope_modules_css-exportName41", + "exportName43": "postcss-modules-scope_modules_css-exportName43", + "exportName44": "postcss-modules-scope_modules_css-exportName44", + "exportName45": "postcss-modules-scope_modules_css-exportName45", + "exportName46": "postcss-modules-scope_modules_css-exportName46", + "exportName47": "postcss-modules-scope_modules_css-exportName47", + "exportName48": "postcss-modules-scope_modules_css-exportName48", + "exportName49": "postcss-modules-scope_modules_css-exportName49", + "exportName5": "postcss-modules-scope_modules_css-exportName5", + "exportName50": "postcss-modules-scope_modules_css-exportName50", + "exportName51": "postcss-modules-scope_modules_css-exportName51", + "exportName52": "postcss-modules-scope_modules_css-exportName52", + "exportName53": "postcss-modules-scope_modules_css-exportName53", + "exportName54": "postcss-modules-scope_modules_css-exportName54", + "exportName55": "postcss-modules-scope_modules_css-exportName55", + "exportName56": "postcss-modules-scope_modules_css-exportName56", + "exportName57": "postcss-modules-scope_modules_css-exportName57", + "exportName58": "postcss-modules-scope_modules_css-exportName58 postcss-modules-scope_modules_css-exportName57", + "exportName59": "postcss-modules-scope_modules_css-exportName59 postcss-modules-scope_modules_css-exportName58 postcss-modules-scope_modules_css-exportName57", + "exportName6": "postcss-modules-scope_modules_css-exportName6", + "exportName60": "postcss-modules-scope_modules_css-exportName60 otherClass andAgain aThirdClass", + "exportName60-function-syntax": "postcss-modules-scope_modules_css-exportName60-function-syntax otherClass andAgain aThirdClass", + "exportName63": "postcss-modules-scope_modules_css-exportName63", + "exportName64": "postcss-modules-scope_modules_css-exportName64", + "exportName65": "postcss-modules-scope_modules_css-exportName65", + "exportName66": "postcss-modules-scope_modules_css-exportName66 postcss-modules-scope_modules_css-exportName63 postcss-modules-scope_modules_css-exportName64 postcss-modules-scope_modules_css-exportName65", + "exportName67": "postcss-modules-scope_modules_css-exportName67", + "exportName68": "postcss-modules-scope_modules_css-exportName68 postcss-modules-scope_modules_css-exportName67", + "exportName69": "postcss-modules-scope_modules_css-exportName69 postcss-modules-scope_modules_css-exportName68 postcss-modules-scope_modules_css-exportName67", + "exportName7": "postcss-modules-scope_modules_css-exportName7", + "exportName70": "postcss-modules-scope_modules_css-exportName70 postcss-modules-scope_modules_css-exportName71 postcss-modules-scope_modules_css-exportName72", + "exportName71": "postcss-modules-scope_modules_css-exportName71 postcss-modules-scope_modules_css-exportName72", + "exportName72": "postcss-modules-scope_modules_css-exportName72", + "exportName73": "postcss-modules-scope_modules_css-exportName73 classes_css-bar classes_css-localName", + "exportName74": "postcss-modules-scope_modules_css-exportName74 postcss-modules-scope_modules_css-exportName73 classes_css-bar classes_css-localName postcss-modules-scope_modules_css-exportName75 my-global", + "exportName75": "postcss-modules-scope_modules_css-exportName75", + "exportName76": "postcss-modules-scope_modules_css-exportName76 import_modules_css-otherClass", + "exportName77": "postcss-modules-scope_modules_css-exportName77 abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d", + "exportName78": "postcss-modules-scope_modules_css-exportName78", + "exportName79": "postcss-modules-scope_modules_css-exportName79 postcss-modules-scope_modules_css-class abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d postcss-modules-scope_modules_css-bar", + "exportName8": "postcss-modules-scope_modules_css-exportName8", + "exportName9": "postcss-modules-scope_modules_css-exportName9", + "fade-export": "postcss-modules-scope_modules_css-fade-export", + "fade-in": "postcss-modules-scope_modules_css-fade-in", + "fade-in-export": "postcss-modules-scope_modules_css-fade-in-export", + "fade-out": "postcss-modules-scope_modules_css-fade-out", + "fadeIn": "postcss-modules-scope_modules_css-fadeIn", + "fadeIn-export": "postcss-modules-scope_modules_css-fadeIn-export", + "global": "postcss-modules-scope_modules_css-global", + "idName": "postcss-modules-scope_modules_css-idName", + "local-a": "postcss-modules-scope_modules_css-local-a", + "local-b": "postcss-modules-scope_modules_css-local-b", + "slidein": "postcss-modules-scope_modules_css-slidein", + "smile": "postcss-modules-scope_modules_css-smile", + "smile_with_A": "postcss-modules-scope_modules_css-smile_with_A", + "sr-only": "--postcss-modules-scope_modules_css-sr-only", + "test": "--postcss-modules-scope_modules_css-test", + "title-align": "--postcss-modules-scope_modules_css-title-align", + "toString": "postcss-modules-scope_modules_css-toString", + "wrong": "postcss-modules-scope_modules_css-wrong", + "😀": "postcss-modules-scope_modules_css-😀", +} +`; + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 6`] = ` +Object { + "--red": "blue", + "a": "a_modules_css-a", + "b": "b_modules_css-b", + "bar": "postcss-modules-values_modules_css-bar", + "char3": "#0f0", + "char6": "#00ff00", + "color": "--postcss-modules-values_modules_css-color", + "colors": "\\"./colors.css\\"", + "coolShadow": "0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14)", + "exportName": "blue", + "exportName1": "blue @value exportName2 yellow", + "exportName10": "red", + "exportName11": "red", + "exportName12": "blue", + "exportName13": "postcss-modules-values_modules_css-exportName13", + "exportName14": "postcss-modules-values_modules_css-exportName14", + "exportName15": "postcss-modules-values_modules_css-exportName15", + "exportName16": "postcss-modules-values_modules_css-exportName16", + "exportName17": "postcss-modules-values_modules_css-exportName17", + "exportName18": "#FFF", + "exportName19": "#FFF", + "exportName2": "(max-width: 599px)", + "exportName20": "postcss-modules-values_modules_css-exportName20", + "exportName22": "10px", + "exportName23": "calc(exportName22 * 2)", + "exportName24": "postcss-modules-values_modules_css-exportName24", + "exportName25": "postcss-modules-values_modules_css-exportName25", + "exportName26": "postcss-modules-values_modules_css-exportName26", + "exportName27": "postcss-modules-values_modules_css-exportName27", + "exportName28": "postcss-modules-values_modules_css-exportName28", + "exportName29": "postcss-modules-values_modules_css-exportName29", + "exportName3": "red", + "exportName30": "postcss-modules-values_modules_css-exportName30", + "exportName4": "red", + "exportName5": "red", + "exportName6": "red", + "exportName7": "40px", + "exportName8": "36px", + "exportName9": "fuchsia", + "exportNameRed": "blue", + "foo-replace": "postcss-modules-values_modules_css-foo-replace", + "foo-replace-1": "postcss-modules-values_modules_css-foo-replace-1", + "foo-replace-2": "postcss-modules-values_modules_css-foo-replace-2", + "foo-replace-3": "postcss-modules-values_modules_css-foo-replace-3", + "foo-replace-4": "postcss-modules-values_modules_css-foo-replace-4", + "hsla": "hsla(220, 13.0%, 18.0%, 1)", + "my-own-color": "--postcss-modules-values_modules_css-my-own-color", + "named": "aqua", + "namedBlue": "red", + "namedRed": "blue", + "otherBlue": "red", + "otherRed": "blue", + "parentheses": "color(red lightness(50%))", + "red": "yellow", + "rgba": "rgba(34, 12, 64, 0.3)", + "v-color": "my-custom-value", + "v-comment": "", + "v-comment-other": "/* comment */", + "v-empty": " /* comment */", + "v-empty-1": " ", + "v-empty-2": " ", + "wrongOrder": "blue", +} +`; + +exports[`ConfigTestCases css postcss-modules-plugins exported tests should work 7`] = ` +Array [ + "/*!*********************************!*\\\\ + !*** css ./library.modules.css ***! + \\\\*********************************/ +.library_modules_css-something {} + +.library_modules_css-importName { + color: red; +} + +.library_modules_css-importName2 { + color: red; +} + +.library_modules_css-importName3 { + color: azure; +} + +.library_modules_css-importName4 { + color: antiquewhite; +} + +.library_modules_css-secondImport { + color: green; +} + +.library_modules_css-thirdImport { + color: blue; +} + +.library_modules_css-otherLibImport { + color: yellow; +} + +.library_modules_css-thirdDep { + color: black; +} + +.library_modules_css-firstImport { + color: red; +} + +.library_modules_css-secondImport { + color: red; +} + +/*!***************************!*\\\\ + !*** css ./b.modules.css ***! + \\\\***************************/ +.b_modules_css-b { color: red; } + +.b_modules_css-hidden-d { + color: blue; +} + +.b_modules_css-b-last { + color: red; +} + + +/*!***************************!*\\\\ + !*** css ./c.modules.css ***! + \\\\***************************/ +.c_modules_css-c { color: red } + +.c_modules_css-hidden-d { + color: blue; +} + +.c_modules_css-c-last { + color: red; +} + +.c_modules_css-deep-nested-c { + color: red; +} + +/*!***************************!*\\\\ + !*** css ./a.modules.css ***! + \\\\***************************/ +.a_modules_css-a { color: red; } + +.a_modules_css-hidden-b { + color: blue; +} + +.a_modules_css-hidden-c { + color: aliceblue; +} + +/*!***************************!*\\\\ + !*** css ./d.modules.css ***! + \\\\***************************/ +.d_modules_css-d { + color: red; +} + +/*!************************************!*\\\\ + !*** css ./characters.modules.css ***! + \\\\************************************/ +.characters_modules_css-a { + color: red; +} + +.characters_modules_css-a_ { + color: red; +} + +.characters_modules_css--b { + color: red; +} + +.characters_modules_css-b- { + color: red; +} + +.characters_modules_css---c { + color: red; +} + +.characters_modules_css-c-- { + color: red; +} + +.characters_modules_css-_d { + color: red; +} + +.characters_modules_css-d\\\\% { + color: tan; +} + +/*!***********************!*\\\\ + !*** css ./other.css ***! + \\\\***********************/ +.other_css-className { color: red } + +/*!********************************!*\\\\ + !*** css ./import.modules.css ***! + \\\\********************************/ + +.import_modules_css-abc { + color: red; +} + +.import_modules_css-__foo { + color: red; +} + +.import_modules_css-some-value { + color: red; +} + +.import_modules_css-otherClass { + color: red; +} + + +/*!**************************************************!*\\\\ + !*** css ./node_modules/foo/my-custom-style.css ***! + \\\\**************************************************/ +.node_modules_foo_my-custom-style_css-custom-other-name { + color: red; +} + +/*!*********************************************************!*\\\\ + !*** css ./postcss-modules-extract-imports.modules.css ***! + \\\\*********************************************************/ +/* postcss-modules-extract-imports */ + + +/* composing-globals */ +.postcss-modules-extract-imports_modules_css-exportName1 { other: rule; } + +/* existing-import */ + +.postcss-modules-extract-imports_modules_css-exportName2 { + } + +/* import-comment */ +/* +:local(.exportName) { + composes: importName from \\"path/library.css\\"; + other: rule; +} +*/ + +/* import-consolidate */ +.postcss-modules-extract-imports_modules_css-exportName3 { + other: rule; +} + +.postcss-modules-extract-imports_modules_css-otherExport { + } + +/* import-local-extends */ +.postcss-modules-extract-imports_modules_css-localName { color: red; } + +.postcss-modules-extract-imports_modules_css-exportName4 { + other: rule; +} + +/* import-media */ +@media screen { + .postcss-modules-extract-imports_modules_css-exportName5 { + other: rule2; + } +} + +.postcss-modules-extract-imports_modules_css-exportName6 { + other: rule; +} + +/* import-multiple-classes */ +.postcss-modules-extract-imports_modules_css-exportName7 { other: rule; } + +/* import-multiple-references */ +.postcss-modules-extract-imports_modules_css-exportName8 { + } +.postcss-modules-extract-imports_modules_css-exportName9 { + } + +/* import-only-whitelist */ +.postcss-modules-extract-imports_modules_css-exportName10 { imports: importName from \\"path/library.css\\"; something-else: otherLibImport from \\"path/other-lib.css\\"; } + +/* import-preserving-order */ +.postcss-modules-extract-imports_modules_css-exportName11 { + color: #aaa; +} + +/* import-single-quotes */ +.postcss-modules-extract-imports_modules_css-exportName12 { + other: rule; +} + +/* import-double-quotes */ +.postcss-modules-extract-imports_modules_css-exportName13 { + other: rule; +} + +/* import-spacing */ +.postcss-modules-extract-imports_modules_css-exportName14 { + other: rule; +} + +/* import-within */ +.postcss-modules-extract-imports_modules_css-exportName15 { + other: rule; +} + +/* multiple-composes */ +.postcss-modules-extract-imports_modules_css-exportName16 { + other: rule; +} + +.postcss-modules-extract-imports_modules_css-exportName17 { + } + +.postcss-modules-extract-imports_modules_css-exportName18 { + } + +.postcss-modules-extract-imports_modules_css-foo { color: red } +.postcss-modules-extract-imports_modules_css-bar { color: blue } +.postcss-modules-extract-imports_modules_css-baz { color: green } +.postcss-modules-extract-imports_modules_css-exportName19 { + } + +/* nesting */ +.postcss-modules-extract-imports_modules_css-exportName19 { + display: grid; + + @media (orientation: landscape) { + &.postcss-modules-extract-imports_modules_css-exportName19-nested { + grid-auto-flow: column; + + @media (min-width: 1024px) { + &.postcss-modules-extract-imports_modules_css-exportName19-nested-nested { + composes: importName from \\"library.modules.css\\"; + } + } + } + } +} + +/* TODO bug - need port https://github.com/css-modules/postcss-modules-extract-imports/pull/138 */ +/* resolve-composes-order */ +.postcss-modules-extract-imports_modules_css-exportName20 { + color: #bebebe; +} + +.postcss-modules-extract-imports_modules_css-exportName21 { + /* \`b\` should be after \`c\` */ + color: #aaa; +} + +/* resolve-duplicates */ + +.postcss-modules-extract-imports_modules_css-exportName22 { + } + +/* resolve-imports-order */ + + +.postcss-modules-extract-imports_modules_css-exportName23 { + } + +.postcss-modules-extract-imports_modules_css-exportName24 { + } + +.postcss-modules-extract-imports_modules_css-exportName25 { + } + +.postcss-modules-extract-imports_modules_css-exportName26 { + } + +/* valid-characters */ +.postcss-modules-extract-imports_modules_css-exportName27 { + } + +/* We pass this test */ +/* check-import-order */ +.postcss-modules-extract-imports_modules_css-exportName28 { + } + +.postcss-modules-extract-imports_modules_css-exportName29 { + } + +/* empty-composes */ +.postcss-modules-extract-imports_modules_css-exportName30 { + } + +/* weird-composes */ +.postcss-modules-extract-imports_modules_css-from { color: red; } +.postcss-modules-extract-imports_modules_css-exportName31 { + } + +/* broken-composes */ +.postcss-modules-extract-imports_modules_css-exportName32 { + composes: className from 12; +} + +/* broken-composes-2 */ +.postcss-modules-extract-imports_modules_css-exportName33 { + composes: 12; +} + +/* composes-multiple-declarations */ +.postcss-modules-extract-imports_modules_css-exportName34 { + } + +.postcss-modules-extract-imports_modules_css-exportName34 { + } + +/* inherit-module-type */ +.postcss-modules-extract-imports_modules_css-exportName35 { + } + +/* composes from-import */ + +.postcss-modules-extract-imports_modules_css-exportName36 { + } + +.postcss-modules-extract-imports_modules_css-exportName37 {} + +.postcss-modules-extract-imports_modules_css-exportName38 { + } + +.postcss-modules-extract-imports_modules_css-exportName39 { + } + +.postcss-modules-extract-imports_modules_css-exportName40 {color:red;} + +.postcss-modules-extract-imports_modules_css-exportName41 {color:red;} + +.postcss-modules-extract-imports_modules_css-exportName42 {color:red} + +.postcss-modules-extract-imports_modules_css-exportName43 { + + color:red; +} + + +.postcss-modules-extract-imports_modules_css-exportName44 { color: unknown; } + +/*!****************************************************************!*\\\\ + !*** css ./postcss-modules-local-by-default.local.modules.css ***! + \\\\****************************************************************/ +/* postcss-modules-local-by-default */ + + +/* scope selectors */ +.postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* scope escaped selectors */ +.postcss-modules-local-by-default_local_modules_css-\\\\:\\\\) {} + +/* scope ids */ +#postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* scope escaped ids */ +#postcss-modules-local-by-default_local_modules_css-\\\\#test {} + +/* scope escaped ids (2) */ +#postcss-modules-local-by-default_local_modules_css-u-m\\\\+\\\\ {} + +/* scope multiple selectors */ +.postcss-modules-local-by-default_local_modules_css-foo, .postcss-modules-local-by-default_local_modules_css-baz { a_value: some-value; } + +/* scope sibling selectors */ +.postcss-modules-local-by-default_local_modules_css-foo ~ .postcss-modules-local-by-default_local_modules_css-baz { a_value: some-value; } + +/* scope pseudo elements */ +.postcss-modules-local-by-default_local_modules_css-foo:after { a_value: some-value; } + +/* scope media queries */ +@media only screen { .postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } } + +/* allow narrow global selectors */ +.foo .bar { a_value: some-value; } + +/* allow narrow local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* allow broad global selectors */ +.foo .bar { a_value: some-value; } + +/* allow broad local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* allow multiple narrow global selectors */ +.foo, .bar { a_value: some-value; } + +/* allow multiple broad global selectors */ +.foo, .bar { a_value: some-value; } + +/* allow multiple broad local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo, .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* allow narrow global selectors nested inside local styles */ +.postcss-modules-local-by-default_local_modules_css-foo .foo .bar { a_value: some-value; } + +/* allow broad global selectors nested inside local styles */ +.postcss-modules-local-by-default_local_modules_css-foo .foo .bar { a_value: some-value; } + +/* allow parentheses inside narrow global selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .foo:not(.bar) { a_value: some-value; } + +/* allow parentheses inside narrow local selectors */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-foo:not(.postcss-modules-local-by-default_local_modules_css-bar) { a_value: some-value; } + +/* allow narrow global selectors appended to local styles */ +.postcss-modules-local-by-default_local_modules_css-foo.foo.bar { a_value: some-value; } + +/* ignore selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* ignore nested selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* ignore multiple selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo, .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* ignore sibling selectors that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo ~ .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* ignore psuedo elements that are already local */ +.postcss-modules-local-by-default_local_modules_css-foo:after { a_value: some-value; } + +/* trim whitespace after empty broad selector */ +.postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* broad global should be limited to selector */ +.foo, .postcss-modules-local-by-default_local_modules_css-bar , .postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* broad global should be limited to nested selector */ +.postcss-modules-local-by-default_local_modules_css-foo:not(.bar).postcss-modules-local-by-default_local_modules_css-foobar { a_value: some-value; } + +/* broad global and local should allow switching */ +.postcss-modules-local-by-default_local_modules_css-foo .bar .postcss-modules-local-by-default_local_modules_css-foobar .postcss-modules-local-by-default_local_modules_css-barfoo { a_value: some-value; } + +/* localize a single animation-name */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar; } + +/* localize a single animation-name #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar; } +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar; } + +/* passed because \`--bar\` not found */ +/* not localize animation-name in a var function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: var(--postcss-modules-local-by-default_local_modules_css-bar-unique); } + +/* passed because \`--bar\` not found */ +/* not localize animation-name in a var function #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: vAr(--postcss-modules-local-by-default_local_modules_css-bar-unique); } +/* Work, because found */ +:root { --postcss-modules-local-by-default_local_modules_css-my-custom-var: name; } +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: vAr(--postcss-modules-local-by-default_local_modules_css-my-custom-var); } + +/* not localize animation-name in an env function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: env(bar); } + +/* not localize animation-name in an global function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: bar; } +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: bar; } + +/* localize and not localize animation-name in mixed case */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-fadeInOut, moveLeft300px, postcss-modules-local-by-default_local_modules_css-bounce; } + +/* not localize animation in an global function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: bar; } + +/* not localize a certain animation in an global function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: bar, postcss-modules-local-by-default_local_modules_css-foo; } + +/* localize and not localize a certain animation in mixed case */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-rotate 1s, spin 3s, postcss-modules-local-by-default_local_modules_css-fly 6s; } + +/* not localize animation-name in an env function #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: eNv(bar); } + +/* not localize a single animation-delay */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-delay: 1s; } + +/* localize multiple animation-names */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-bar, postcss-modules-local-by-default_local_modules_css-foobar; } + +/* not localize revert */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: revert; } + +/* not localize revert #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: revert; } + +/* not localize revert #3 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: revert, postcss-modules-local-by-default_local_modules_css-foo, none; } + +/* not localize revert-layer */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: revert-layer; } + +/* not localize revert */ +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: revert-layer; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-\\\\@bounce; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-bou\\\\@nce; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-\\\\ as; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-t\\\\ t; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css--\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css---\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css--\\\\A; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css---; } + +/* localize animation using special characters */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-😃bounce😃; } + +/* localize custom property */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css---foo; } + +/* don't find a localize name, but localize var */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-fade .2s var(--postcss-modules-local-by-default_local_modules_css-easeOutQuart) .1s forwards } + +/* not localize name in nested function */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-fade .2s env(FOO_BAR) .1s forwards, postcss-modules-local-by-default_local_modules_css-name } + +/* don't find a localize name, but localize var */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: var(--postcss-modules-local-by-default_local_modules_css-foo-bar) .1s forwards, postcss-modules-local-by-default_local_modules_css-name } + +/* don't find a localize name, but localize var */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: var(--postcss-modules-local-by-default_local_modules_css-foo-bar) .1s forwards postcss-modules-local-by-default_local_modules_css-name, postcss-modules-local-by-default_local_modules_css-name } + +/* localize animation */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-a; } + +/* localize animation #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-bar 5s, postcss-modules-local-by-default_local_modules_css-foobar; } + +/* localize animation #3 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: ease postcss-modules-local-by-default_local_modules_css-ease; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: ease postcss-modules-local-by-default_local_modules_css-ease; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: ease postcss-modules-local-by-default_local_modules_css-ease, ease-in postcss-modules-local-by-default_local_modules_css-ease-in, ease-out postcss-modules-local-by-default_local_modules_css-ease-out; } + +/* localize animation #4 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 0s ease 0s 1 normal none postcss-modules-local-by-default_local_modules_css-test running; } + +/* localize animation with vendor prefix */ +.postcss-modules-local-by-default_local_modules_css-foo { -webkit-animation: postcss-modules-local-by-default_local_modules_css-bar; animation: postcss-modules-local-by-default_local_modules_css-bar; } + +/* not localize other rules */ +.postcss-modules-local-by-default_local_modules_css-foo { content: \\"animation: bar;\\" } + +/* not localize global rules */ +.foo { animation: foo; animation-name: bar; } + +/* handle nested global */ +.a:not(.b) { a_value: some-value; } + +/* handle nested global #1 */ +.a:not(.b:not(.c)) { a_value: some-value; } + +/* handle nested global #2 */ +.postcss-modules-local-by-default_local_modules_css-a:not(:not(:not(.c))) { a_value: some-value; } + +/* handle nested global #3 */ +.a:not(.b, .c) { a_value: some-value; } + +/* handle nested global #4 */ +.postcss-modules-local-by-default_local_modules_css-a:not(.b, .postcss-modules-local-by-default_local_modules_css-c) { a_value: some-value; } + +/* handle nested global #5 */ +.a:not(.postcss-modules-local-by-default_local_modules_css-b, .c) { a_value: some-value; } + +/* handle nested global #6 */ +.a:not(.b, .c) { a_value: some-value; } + +/* handle nested global #7 */ +.postcss-modules-local-by-default_local_modules_css-a:not(.postcss-modules-local-by-default_local_modules_css-b, .postcss-modules-local-by-default_local_modules_css-c) { a_value: some-value; } + +/* handle nested global #8 */ +.a:not(.postcss-modules-local-by-default_local_modules_css-b, .postcss-modules-local-by-default_local_modules_css-c) { a_value: some-value; } + +/* handle a complex animation rule */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-foo, postcss-modules-local-by-default_local_modules_css-bar 5s linear 2s infinite alternate, postcss-modules-local-by-default_local_modules_css-barfoo 1s; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-foo, postcss-modules-local-by-default_local_modules_css-BAR 5s LINEAR 2s INFINITE ALTERNATE, postcss-modules-local-by-default_local_modules_css-barfoo 1s; } + +/* handle animations where the first value is not the animation name */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s postcss-modules-local-by-default_local_modules_css-foo; } + +/* handle animations where the first value is not the animation name whilst also using keywords */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s normal ease-out infinite postcss-modules-local-by-default_local_modules_css-foo; } + +/* not treat animation curve as identifier of animation name even if it separated by comma */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out, postcss-modules-local-by-default_local_modules_css-fade-in 300ms forwards ease-out; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; @media screen { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; } } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; .postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-slide-right 300ms forwards ease-out; } } + +/* not treat \\"start\\" and \\"end\\" keywords in steps() function as identifiers */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s steps(12, end) infinite; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s STEPS(12, start) infinite; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s steps(12, END) infinite; } +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-spin 1s steps(12, START) infinite; } + +/* handle animations with custom timing functions */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s normal cubic-bezier(0.25, 0.5, 0.5. 0.75) postcss-modules-local-by-default_local_modules_css-foo; } + +/* handle animations whose names are keywords */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s infinite postcss-modules-local-by-default_local_modules_css-infinite; } + +/* handle not localize an animation shorthand value of \\"inherit\\" */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: inherit; } + +/* handle \\"constructor\\" as animation name */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: postcss-modules-local-by-default_local_modules_css-constructor postcss-modules-local-by-default_local_modules_css-constructor; } + +/* default to local when mode provided */ +.postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } + +/* localize keyframes */ +@keyframes postcss-modules-local-by-default_local_modules_css-foo { from { a_value: some-value; } to { a_value: some-value; } } + +/* localize keyframes starting with special characters */ +@keyframes postcss-modules-local-by-default_local_modules_css-\\\\@foo { from { color: red; } to { color: blue; } } + +/* localize keyframes containing special characters */ +@keyframes postcss-modules-local-by-default_local_modules_css-f\\\\@oo { from { color: red; } to { color: blue; } } + +/* localize explicit keyframes */ +@keyframes postcss-modules-local-by-default_local_modules_css-foo { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@-webkit-keyframes bar { from { color: red; } to { color: blue; } } +@keyframes postcss-modules-local-by-default_local_modules_css-local-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes postcss-modules-local-by-default_local_modules_css-colon-local-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes global-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes colon-global-name { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } + +/* ignore :export statements */ + +/* ignore :import statements */ + +/* incorrectly handle nested selectors */ +.postcss-modules-local-by-default_local_modules_css-bar:not(.foo-name, .baz-name) { a_value: some-value; } + +/* compile explict global element */ +input { a_value: some-value; } + +/* compile explict global attribute */ +[type=\\"radio\\"], :not([type=\\"radio\\"]) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on inconsistent selector result */ +.foo, .postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* throw on nested :locals, but we allow to do it */ +.postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } + +/* throw on nested :globals, but we allow to do it */ +.foo { a_value: some-value; } + +/* throw on nested mixed, but we allow to do it */ +.foo { a_value: some-value; } + +/* throw on nested broad :local, but we allow to do it */ +.postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value; } + +/* throw on incorrect spacing with broad :global */ +.postcss-modules-local-by-default_local_modules_css-foo .bar { a_value: some-value; } + +/* TODO bug no report */ +/* throw on incorrect spacing with broad :local */ +.postcss-modules-local-by-default_local_modules_css-foo.postcss-modules-local-by-default_local_modules_css-bar { a_value: some-value; } + +/* pass through global element */ +input { a_value: some-value; } + +/* localise class and pass through element */ +.postcss-modules-local-by-default_local_modules_css-foo input { a_value: some-value; } + +/* pass through attribute selector */ +[type=\\"radio\\"] { a_value: some-value; } + +/* Not related to us */ +/* not modify urls without option */ +/*.a { background: url(./image.png); }*/ +/*:global .b { background: url(image.png); }*/ +/*.c { background: url(\\"./image.png\\"); }*/ + +/* Not related to us */ +/* rewrite url in local block */ +/*.a { background: url(./image.png); }*/ +/*:global .b { background: url(image.png); }*/ +/*.c { background: url(\\"./image.png\\"); }*/ +/*.c { background: url('./image.png'); }*/ +/*.d { background: -webkit-image-set(url(\\"./image.png\\") 1x, url(\\"./image2x.png\\") 2x); }*/ +/*@font-face { src: url(\\"./font.woff\\"); }*/ +/*@-webkit-font-face { src: url(\\"./font.woff\\"); }*/ +/*@media screen { .a { src: url(\\"./image.png\\"); } }*/ +/*@keyframes :global(ani1) { 0% { src: url(\\"image.png\\"); } }*/ +/*@keyframes ani2 { 0% { src: url(\\"./image.png\\"); } }*/ +/*foo { background: end-with-url(something); }*/ + +/* Not related to us */ +/* not crash on atrule without nodes */ +/*@charset \\"utf-8\\";*/ + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193\\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193 \\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193\\\\2193\\\\2193\\" } + +/* not break unicode characters */ +.postcss-modules-local-by-default_local_modules_css-a { content: \\"\\\\2193 \\\\2193 \\\\2193\\" } + +/* not ignore custom property set */ +:root { --postcss-modules-local-by-default_local_modules_css-title-align: center; --postcss-modules-local-by-default_local_modules_css-sr-only: { position: absolute; } } + +/* not localize imported alias */ + +.postcss-modules-local-by-default_local_modules_css-foo > .postcss-modules-local-by-default_local_modules_css-a_value { import_modules_css-some-value: some-value; } + +/* + * All the original \`import()\` tests do not replace the property, but we can consider this a feature, + * because we allow to replace any identifier, we can reconsider this in future + */ + +/* not localize nested imported alias */ + +.postcss-modules-local-by-default_local_modules_css-foo > .postcss-modules-local-by-default_local_modules_css-a_value > .postcss-modules-local-by-default_local_modules_css-bar { import_modules_css-some-value: some-value; } + +/* ignore imported in explicit local */ + +.postcss-modules-local-by-default_local_modules_css-a_value { import_modules_css-some-value: some-value; } + +/* escape local context with explict global */ + +.postcss-modules-local-by-default_local_modules_css-foo .a_value .postcss-modules-local-by-default_local_modules_css-bar { import_modules_css-some-value: some-value; } + +/* respect explicit local */ + +.postcss-modules-local-by-default_local_modules_css-a_value .postcss-modules-local-by-default_local_modules_css-a_value .postcss-modules-local-by-default_local_modules_css-foo .a_value { import_modules_css-some-value: some-value; } + +/* not localize imported animation-name */ + +.postcss-modules-local-by-default_local_modules_css-foo { animation-name: postcss-modules-local-by-default_local_modules_css-a_value; } + +/* Not related to us */ +/* throw on invalid syntax id usage */ +. { a_value: some-value; } + +/* Not related to us */ +/* throw on invalid syntax class usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid syntax local class usage */ +. { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid syntax local id usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +. { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +.a:not(.b, .c) { a_value: some-value; } + +/* css nesting */ +.postcss-modules-local-by-default_local_modules_css-foo { + &.postcss-modules-local-by-default_local_modules_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .postcss-modules-local-by-default_local_modules_css-bar { + c_value: some-value; + } + + &.postcss-modules-local-by-default_local_modules_css-baz { + c_value: some-value; + } + } +} + +/* handle negative animation-delay in animation shorthand */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s -500ms; } + +/* handle negative animation-delay in animation shorthand #1 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s -500.0ms; } + +/* handle negative animation-delay in animation shorthand #2 */ +.postcss-modules-local-by-default_local_modules_css-foo { animation: 1s -500.0ms postcss-modules-local-by-default_local_modules_css--a_value; } + +/* @scope at-rule */ +.postcss-modules-local-by-default_local_modules_css-article-header { + color: red; +} + +.postcss-modules-local-by-default_local_modules_css-article-body { + color: blue; +} + +@scope (.postcss-modules-local-by-default_local_modules_css-article-body) to (.postcss-modules-local-by-default_local_modules_css-article-header) { + .postcss-modules-local-by-default_local_modules_css-article-body { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope(.postcss-modules-local-by-default_local_modules_css-article-body)to(.postcss-modules-local-by-default_local_modules_css-article-header){ + .postcss-modules-local-by-default_local_modules_css-article-footer { + border: 5px solid black; + } +} + +@scope ( .postcss-modules-local-by-default_local_modules_css-article-body ) { + img { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope { + :scope { + color: red; + } +} + +/* @scope at-rule #1 */ +@scope (.postcss-modules-local-by-default_local_modules_css-article-body) to (figure) { + .postcss-modules-local-by-default_local_modules_css-article-footer { + border: 5px solid black; + } +} + +/* @scope at-rule #2 */ +@scope (.postcss-modules-local-by-default_local_modules_css-article-body) to (.class) { + .postcss-modules-local-by-default_local_modules_css-article-footer { + border: 5px solid black; + } + .postcss-modules-local-by-default_local_modules_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/* @scope at-rule #5 */ +@scope (.postcss-modules-local-by-default_local_modules_css-article-header) to (.postcss-modules-local-by-default_local_modules_css-class) { + .postcss-modules-local-by-default_local_modules_css-article-footer { + color: red; + } +} + +/* @scope at-rule #6 */ +.postcss-modules-local-by-default_local_modules_css-foo { + @scope (.postcss-modules-local-by-default_local_modules_css-article-header) to (.postcss-modules-local-by-default_local_modules_css-class) { + :scope { + background: blue; + } + + .postcss-modules-local-by-default_local_modules_css-bar { + color: red; + } + } +} + +/* duplicate-name */ +#postcss-modules-local-by-default_local_modules_css-duplicate-name { color: red; } +.postcss-modules-local-by-default_local_modules_css-duplicate-name { color: red; } + +/* in-media */ +@media screen and (min-width: 900px) { html .postcss-modules-local-by-default_local_modules_css-foo { a_value: some-value } } + +/*!*****************************************************************!*\\\\ + !*** css ./postcss-modules-local-by-default.global.modules.css ***! + \\\\*****************************************************************/ +/* postcss-modules-local-by-default */ + + +/* localize and not localize animation-name in mixed case #2 */ +.foo { animation-name: fadeInOut, moveLeft300px, postcss-modules-local-by-default_global_modules_css-bounce; } + +/* localize and not localize a certain animation in mixed case #2 */ +.foo { animation: rotate 1s, spin 3s, postcss-modules-local-by-default_global_modules_css-fly 6s; } + +/* default to global when mode provided */ +.foo { a_value: some-value; } + +/* use correct spacing */ +.a .postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b {} +.a .postcss-modules-local-by-default_global_modules_css-b {} +.a .postcss-modules-local-by-default_global_modules_css-b {} +.postcss-modules-local-by-default_global_modules_css-a.b {} +.postcss-modules-local-by-default_global_modules_css-a.b {} +.postcss-modules-local-by-default_global_modules_css-a .b {} +.postcss-modules-local-by-default_global_modules_css-a .b {} +.a /* test */ /* test*/ .postcss-modules-local-by-default_global_modules_css-b {} +.a /* test *//* test*/ .postcss-modules-local-by-default_global_modules_css-b {} +.a/* test */ /* test*/.postcss-modules-local-by-default_global_modules_css-b {} +.a.postcss-modules-local-by-default_global_modules_css-b /* test */ {} +.a.postcss-modules-local-by-default_global_modules_css-b/* test */ {} +.a.postcss-modules-local-by-default_global_modules_css-b/* test */ {} +.a.postcss-modules-local-by-default_global_modules_css-b /* test */ {} + +/* localize keyframes in global default mode */ +@keyframes foo { a_value: some-value; } + +/* css nesting #1 */ +.postcss-modules-local-by-default_global_modules_css-foo { + &.postcss-modules-local-by-default_global_modules_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .postcss-modules-local-by-default_global_modules_css-bar { + c_value: some-value; + } + + &.postcss-modules-local-by-default_global_modules_css-baz { + c_value: some-value; + } + } +} + +/* @scope at-rule #3 */ +@scope (.postcss-modules-local-by-default_global_modules_css-article-header) to (.class) { + .article-footer { + border: 5px solid black; + } + .postcss-modules-local-by-default_global_modules_css-class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + +/*!***************************************************************!*\\\\ + !*** css ./postcss-modules-local-by-default.pure.modules.css ***! + \\\\***************************************************************/ +/* postcss-modules-local-by-default */ +/* TODO not implemented yet */ + +@keyframes postcss-modules-local-by-default_pure_modules_css-bounce {} +@keyframes postcss-modules-local-by-default_pure_modules_css-fly {} + +/* localize and not localize animation-name in mixed case #3 */ +.postcss-modules-local-by-default_pure_modules_css-foo { animation-name: postcss-modules-local-by-default_pure_modules_css-fadeInOut, moveLeft300px, postcss-modules-local-by-default_pure_modules_css-bounce; } + +/* localize and not localize a certain animation in mixed case #2 */ +.postcss-modules-local-by-default_pure_modules_css-foo { animation: postcss-modules-local-by-default_pure_modules_css-rotate 1s, spin 3s, postcss-modules-local-by-default_pure_modules_css-fly 6s; } + +/* compile in pure mode */ +.foo.postcss-modules-local-by-default_pure_modules_css-bar, [type=\\"radio\\"] ~ .postcss-modules-local-by-default_pure_modules_css-label, :not(.postcss-modules-local-by-default_pure_modules_css-foo), #postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } + +/* throw on not pure selector (global class) */ +.foo { a_value: some-value; } + +/* throw on not pure selector (with multiple 1) */ +.postcss-modules-local-by-default_pure_modules_css-foo, .bar { a_value: some-value; } + +/* throw on not pure selector (with multiple 2) */ +.bar, .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } + +/* throw on not pure selector (element) */ +input { a_value: some-value; } + +/* throw on not pure selector (attribute) */ +[type=\\"radio\\"] { a_value: some-value; } + +/* throw on not pure keyframes */ +@keyframes foo { a_value: some-value; } + +/* consider & statements as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo { &:hover { a_value: some-value; } } + +/* consider & statements as pure #2 */ +.postcss-modules-local-by-default_pure_modules_css-foo { @media screen and (min-width: 900px) { &:hover { a_value: some-value; } } } + +/* consider global inside local as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo button { a_value: some-value; } + +/* consider selector & statements as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo { html &:hover { a_value: some-value; } } + +/* consider selector & statements as pure */ +.postcss-modules-local-by-default_pure_modules_css-foo { &.bar { a_value: some-value; } } + +/* throw on nested & selectors without a local selector */ +.foo { &:hover { a_value: some-value; } } + +/* should suppress errors for global selectors after ignore comment */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #2 */ +/* cssmodules-pure-ignore */ +/* another comment */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #3 */ +/* another comment */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #4 */ +/* cssmodules-pure-ignore */ /* another comment */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #5 */ +/* another comment */ /* cssmodules-pure-ignore */ +.foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #6 */ +.postcss-modules-local-by-default_pure_modules_css-foo { /* cssmodules-pure-ignore */ .bar { color: blue }; } + +/* should suppress errors for global selectors after ignore comment #7 */ +/* cssmodules-pure-ignore */ .foo { /* cssmodules-pure-ignore */ .bar { color: blue } } + +/* should suppress errors for global selectors after ignore comment #8 */ +/* cssmodules-pure-ignore */ .foo { color: blue; } + +/* should suppress errors for global selectors after ignore comment #9 */ +/* + cssmodules-pure-ignore + */ .foo { color: blue; } + +/* should allow additional text in ignore comment */ +/* cssmodules-pure-ignore - needed for third party integration */ +#foo { color: blue; } + +/* should not affect rules after the ignored block */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } +.bar { color: red; } + +/* should work with nested global selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo { + .bar { color: blue; } +} + +/* should work with ignored nested global selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo { + /* cssmodules-pure-ignore */ + .bar { color: blue; } +} + +/* should work with view transitions in ignored block */ +/* cssmodules-pure-ignore */ +::view-transition-group(modal) { + animation-duration: 300ms; +} + +/* should work with keyframes in ignored block */ +/* cssmodules-pure-ignore */ +@keyframes fadeOut { + from { opacity: 1; } + to { opacity: 0; } +} + +/* should work with scope in ignored block */ + +/* cssmodules-pure-ignore */ +@scope (.foo) to (.bar) { + .postcss-modules-local-by-default_pure_modules_css-article-footer { + border: 5px solid black; + } +} + + +/* should work with scope in ignored block #2 */ + +/* cssmodules-pure-ignore */ +@scope (.foo) +to (.bar) { + .postcss-modules-local-by-default_pure_modules_css-article-footer { + border: 5px solid black; + } +} + + +/* should work in media queries */ +@media (min-width: 768px) { + /* cssmodules-pure-ignore */ + .foo { color: blue; } +} + +/* should handle multiple ignore comments */ +/* cssmodules-pure-ignore */ +.foo { color: blue; } +.postcss-modules-local-by-default_pure_modules_css-local { color: green; } +/* cssmodules-pure-ignore */ +.bar { color: red; } + +/* should work with complex selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo:hover > .bar + .baz { + color: blue; +} + +/* should work with multiple selectors in ignored block */ +/* cssmodules-pure-ignore */ +.foo, +.bar, +.baz { + color: blue; +} + +/* should work with pseudo-elements in ignored block */ +/* cssmodules-pure-ignore */ +.foo::before, +.foo::after { + content: ''; +} + +/* should disable pure mode checks for entire file with no-check comment */ +/* cssmodules-pure-no-check */ +.foo { border: 1px solid #e2e8f0 } +.bar { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) } +.baz { background: #4299e1 } + +/* should disable pure mode checks for nested selectors */ +/* cssmodules-pure-no-check */ +.foo { + &:hover { border-color: #cbd5e0 } + & .bar { color: blue } +} + +/* should ignore no-check comment if not at root level */ +.bar { color: blue } +/* cssmodules-pure-no-check */ + +/* should ignore no-check comment if not at root level #2 */ +/* Some file description */ +.postcss-modules-local-by-default_pure_modules_css-class { color: red; } +/* cssmodules-pure-no-check */ +.foo { color: blue } + +/* should allow other comments before no-check comment */ +/* Some file description */ +/* cssmodules-pure-no-check */ +.foo { color: blue } + +/* should disable pure mode checks for deep nested selectors */ +/* cssmodules-pure-no-check */ +.foo { max-width: 600px } +.bar { background: #fafafa } +.baz { + .foobar { + &::-webkit-scrollbar { width: 8px } + } +} + +/* should work with keyframes when no-check is enabled */ +/* cssmodules-pure-no-check */ +@keyframes fadeIn { + from { opacity: 0 } + to { opacity: 1 } +} +.animate { animation: fadeIn 0.3s } + +/* should allow multiline no-check comment */ +/* + cssmodules-pure-no-check +*/ +.foo { color: blue } + +/* should allow additional text in no-check comment */ +/* cssmodules-pure-no-check - needed for styling third-party components */ +.foo { color: blue } + +/* should work with media queries when no-check is enabled */ +/* cssmodules-pure-no-check */ +@media (max-width: 768px) { + .foo { position: fixed } +} + +/* css nesting #2 */ + +.postcss-modules-local-by-default_pure_modules_css-foo { + &.postcss-modules-local-by-default_pure_modules_css-class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .postcss-modules-local-by-default_pure_modules_css-bar { + c_value: some-value; + } + + &.postcss-modules-local-by-default_pure_modules_css-baz { + c_value: some-value; + } + } +} + +/* css nesting #3 */ +.postcss-modules-local-by-default_pure_modules_css-foo { span { a_value: some-value; } } + +/* css nesting (unfolded) #3 */ +.postcss-modules-local-by-default_pure_modules_css-foo span { a_value: some-value } + +/* css nesting #4 */ +.postcss-modules-local-by-default_pure_modules_css-foo { span { a { a_value: some-value; } } } + +/* css nesting (unfolded) #4 */ +.postcss-modules-local-by-default_pure_modules_css-foo span a { a_value: some-value } + +/* css nesting #5 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } + +/* css nesting (unfolded) #5 */ +html .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value } + +/* css nesting #6 */ +html { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } + +/* css nesting (unfolded) #6 */ +@media screen and (min-width: 900px) { html .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value } } + +/* css nesting #7 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } } + +/* css nesting (unfolded) #7 */ +html .postcss-modules-local-by-default_pure_modules_css-foo, html .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value } + +/* css nesting #8 */ +.postcss-modules-local-by-default_pure_modules_css-class { @media screen and (min-width: 900px) { & > span { a_value: some-value; } } } + +/* css nesting (unfolded) #8 */ +@media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-class > span { a_value: some-value } } + +/* css nesting #9 */ +html { @media screen and (min-width: 900px) { & > .postcss-modules-local-by-default_pure_modules_css-class { a_value: some-value; } } } + +/* css nesting (unfolded) #9 */ +@media screen and (min-width: 900px) { html > .postcss-modules-local-by-default_pure_modules_css-class { a_value: some-value } } + +/* css nesting #10 */ +.postcss-modules-local-by-default_pure_modules_css-class { @media screen and (min-width: 900px) { & { a_value: some-value; } } } + +/* css nesting (unfolded) #10 */ +@media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-class { a_value: some-value } } + +/* css nesting #11 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { span { a_value: some-value; } } } + +/* css nesting (unfolded) #11 */ +html .postcss-modules-local-by-default_pure_modules_css-foo span { a_value: some-value } + +/* css nesting #12 */ +html { button { .postcss-modules-local-by-default_pure_modules_css-foo { div { span { a_value: some-value; } } } } } + +/* css nesting #13 */ +.postcss-modules-local-by-default_pure_modules_css-foo { button { div { div { span { a_value: some-value; } } } } } + +/* css nesting #14 */ +html { button { div { div { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } } } + +/* css nesting #15 */ +html { button { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { div { span { a_value: some-value; } } } } } } + +/* css nesting #16 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } + +/* css nesting #17 */ +.postcss-modules-local-by-default_pure_modules_css-foo { div { a_value: some-value; } } + +/* css nesting #18 */ +@media screen and (min-width: 900px) { html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } + +/* css nesting #19 */ +html { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } } + +/* css nesting #20 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { @media screen and (min-width: 900px) { a_value: some-value; } } } + +/* css nesting #21 */ +@media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-foo { div { a_value: some-value; } } } + +/* css nesting #22 */ +.postcss-modules-local-by-default_pure_modules_css-foo { @media screen and (min-width: 900px) { div { a_value: some-value; } } } + +/* css nesting #23 */ +.postcss-modules-local-by-default_pure_modules_css-foo { div { @media screen and (min-width: 900px) { a_value: some-value; } } } + +/* css nesting - throw on mixed parents */ +.postcss-modules-local-by-default_pure_modules_css-foo, html { span { a_value: some-value; } } + +/* css nesting - throw on & */ +html { & > span { a_value: some-value; } } + +/* css nesting - throw on & #2 */ +html { button { & > span { a_value: some-value; } } } + +/* css nesting - throw on & #3 */ +html { @media screen and (min-width: 900px) { & > span { a_value: some-value; } } } + +/* css nesting - throw on & #4 */ +html { button { div { div { & { a_value: some-value; } } } } } + +/* css nesting - throw */ +html { button { div { div { div { a_value: some-value; } } } } } + +/* css nesting - throw #2 */ +html { button { div { div { div { } } } } } + +/* css nesting - throw #3 */ +html { button { @media screen and (min-width: 900px) { div { div { div { } } } } } } + +/* css nesting - throw #4 */ +@media screen and (min-width: 900px) { html { button { div { div { div { } } } } } } + +/* css nesting - throw #5 */ +html { div { @media screen and (min-width: 900px) { color: red } } } + +/* css nesting - throw #6 */ +html { div { @media screen and (min-width: 900px) { @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #7 */ +html { div { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-a { } @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #7 */ +html { div { @media screen and (min-width: 900px) { .postcss-modules-local-by-default_pure_modules_css-a { a_value: some-value; } @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #8 */ + +@media screen and (min-width: 900px) { + .postcss-modules-local-by-default_pure_modules_css-a { a_value: some-value; } + @media screen and (min-width: 900px) { + div { + color: red + } + } +} + +/* css nesting - throw on global styles with a local selector */ +html { a_value: some-value; .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } } + +/* css nesting - throw on global styles with a local selector #2 */ +html { .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } a_value: some-value; } + +/* css nesting - throw on global styles with a local selector #3 */ + +html { + .postcss-modules-local-by-default_pure_modules_css-foo { a_value: some-value; } + button { + color: red; + .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } + } +} + +/* css nesting - throw on global styles with a local selector #4 */ + +html { + @media screen and (min-width: 900px) { + button { + color: red; + .postcss-modules-local-by-default_pure_modules_css-bar { a_value: some-value; } + } + } +} + +/* consider :import statements pure */ + +/* consider :export statements pure */ + +/* @scope at-rule #4 */ + +@scope (.postcss-modules-local-by-default_pure_modules_css-article-header) to (.postcss-modules-local-by-default_pure_modules_css-class) { + .postcss-modules-local-by-default_pure_modules_css-article-footer { + border: 5px solid black; + } + .postcss-modules-local-by-default_pure_modules_css-class-1 { + color: red; + } + .postcss-modules-local-by-default_pure_modules_css-class-2 { + color: blue; + } +} + + +/* @scope at-rule #7 */ + +@scope (.article-header.postcss-modules-local-by-default_pure_modules_css-foo) to (.class.postcss-modules-local-by-default_pure_modules_css-bar) { + .postcss-modules-local-by-default_pure_modules_css-bar { + color: red; + } +} + +/*!******************************!*\\\\ + !*** css ./abcd.modules.css ***! + \\\\******************************/ +.abcd_modules_css-a { + color: red; +} + +.abcd_modules_css-b { + color: red; +} + +.abcd_modules_css-c { + color: red; +} + +.abcd_modules_css-d { + color: red; +} + +/*!*************************!*\\\\ + !*** css ./classes.css ***! + \\\\*************************/ +.classes_css-localName { + background: red; +} + +.classes_css-bar { + } + +/*!***********************************************!*\\\\ + !*** css ./postcss-modules-scope.modules.css ***! + \\\\***********************************************/ +/* postcss-modules-scope */ + +/* at-rule-scope */ +.postcss-modules-scope_modules_css-exportName4 { + color: red; +} + +@scope (.postcss-modules-scope_modules_css-exportName1) to (.postcss-modules-scope_modules_css-exportName2) { + .postcss-modules-scope_modules_css-exportName3 { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope (.postcss-modules-scope_modules_css-exportName1) { + .postcss-modules-scope_modules_css-exportName5 { + border: 5px solid black; + } +} + +@scope (.postcss-modules-scope_modules_css-exportName1) to (img) { + .postcss-modules-scope_modules_css-exportName3 { + background-color: goldenrod; + } +} + +@scope (.postcss-modules-scope_modules_css-exportName6) { + img { + backdrop-filter: blur(2px); + } +} + +@scope { + :scope { + color: red; + } +} + +/* at-rule */ +.postcss-modules-scope_modules_css-exportName7 { + background: red; +} + +@media screen { + .postcss-modules-scope_modules_css-exportName8 { + color: green; + .postcss-modules-scope_modules_css-exportName9 { + color: blue; + } + } +} + +/* composes-only-allowed */ +.postcss-modules-scope_modules_css-local-a { color: red; } +.postcss-modules-scope_modules_css-local-b { color: green; } +.postcss-modules-scope_modules_css-exportName10 { + a-composes: c; + composes-b: d; + a-composes-b: e; + a-compose-with-b: b; +} + +/* css-nesting-composes */ +.postcss-modules-scope_modules_css-exportName11 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName12 { + display: grid; + @media (orientation: landscape) { + grid-auto-flow: column; + } +} + +/* css-nesting */ +.postcss-modules-scope_modules_css-exportName12 { + background: red; +} + +.postcss-modules-scope_modules_css-exportName13 { + color: green; + + @media (max-width: 520px) { + .postcss-modules-scope_modules_css-exportName14 { + color: darkgreen; + } + + &.postcss-modules-scope_modules_css-exportName15 { + color: blue; + } + } +} + +.postcss-modules-scope_modules_css-exportName16 { + color: red; + + &.postcss-modules-scope_modules_css-exportName17 { + color: green; + } + + .postcss-modules-scope_modules_css-exportName18 { + color: blue; + } +} + +/* error-comma-in-local */ +.postcss-modules-scope_modules_css-className { color: red; } +.postcss-modules-scope_modules_css-exportName19, .postcss-modules-scope_modules_css-exportName20 { + composes: className; +} + +/* error-composes-css-nesting-at-rule */ +.postcss-modules-scope_modules_css-exportName21 { +} + +@media (min-width: 1024px) { + .postcss-modules-scope_modules_css-exportName22 { + .postcss-modules-scope_modules_css-exportName23 { + compose-with: exportName21; + } + } +} + +/* error-composes-css-nesting-with-media */ +.postcss-modules-scope_modules_css-exportName24 { +} + +.postcss-modules-scope_modules_css-exportName25 { + @media (min-width: 1024px) { + .postcss-modules-scope_modules_css-exportName26 { + compose-with: exportName24; + } + } +} + +/* error-composes-css-nesting */ +.postcss-modules-scope_modules_css-exportName27 { +} + +.postcss-modules-scope_modules_css-exportName28 { + .postcss-modules-scope_modules_css-exportName29 { + compose-with: exportName27; + } +} + +/* TODO bug no report */ +/* error-composes-keyframes */ +.postcss-modules-scope_modules_css-exportName30 { +} + +@keyframes postcss-modules-scope_modules_css-slidein { + from { + transform: translateX(0%); + } + + to { + composes: exportName30; + } +} + +/* TODO bug no report */ +/* error-composes-not-allowed-in-local-id */ +.postcss-modules-scope_modules_css-exportName31 {} + +#postcss-modules-scope_modules_css-idName { + composes: exportName31; +} + +/* error-composes-not-allowed-in-multiple */ +.postcss-modules-scope_modules_css-exportName32 {} +.postcss-modules-scope_modules_css-exportName33 .postcss-modules-scope_modules_css-exportName34 { + composes: exportName32; +} + +/* TODO bug no report */ +/* error-composes-not-allowed-in-simple */ +.postcss-modules-scope_modules_css-exportName35 {} +body { + composes: exportName35; +} + +/* error-composes-not-allowed-in-wrong-local */ +.postcss-modules-scope_modules_css-exportName36 {} +.postcss-modules-scope_modules_css-exportName37.postcss-modules-scope_modules_css-exportName38 { + composes: exportName36; +} + +/* error-composes-not-defined-class */ +.postcss-modules-scope_modules_css-exportName39 { + } + +/* TODO bug no report */ +/* error-multiple-nested-media */ +.postcss-modules-scope_modules_css-exportName41 { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName42 { + display: grid; + + @media (orientation: landscape) { + grid-auto-flow: column; + + @media (min-width: 1024px) { + } + } +} + +/* TODO bug no report */ +/* error-not-allowed-in-local */ +body { + color: red; +} + +/* TODO bug no report */ +/* error-when-attribute-is-href */ +.postcss-modules-scope_modules_css-exportName42[href^=\\"https\\"] { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-target */ +.postcss-modules-scope_modules_css-exportName43[target=\\"_blank\\"] { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-title */ +.postcss-modules-scope_modules_css-exportName44[title=\\"flower\\"] { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-title */ +.postcss-modules-scope_modules_css-exportName45[type=\\"text\\"] { + color: blue; +} + +/* escape-sequence */ +.postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile_with_A { + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-😀{ + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-😀{ + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile_with_A .postcss-modules-scope_modules_css-😀{ + color: red; +} + +#postcss-modules-scope_modules_css-😀 #postcss-modules-scope_modules_css-smile #postcss-modules-scope_modules_css-😀{ + color: red; +} + +#postcss-modules-scope_modules_css-😀 #postcss-modules-scope_modules_css-smile_with_A #postcss-modules-scope_modules_css-😀{ + color: red; +} + +.postcss-modules-scope_modules_css-a .postcss-modules-scope_modules_css-smile b { + color: red; +} + +.postcss-modules-scope_modules_css-smile > .postcss-modules-scope_modules_css-smile > .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-😀.postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-😀.postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-😀 .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-smile .postcss-modules-scope_modules_css-a { + color: red; +} + +.postcss-modules-scope_modules_css-smile.postcss-modules-scope_modules_css-a { + color: red; +} + +.postcss-modules-scope_modules_css-a .postcss-modules-scope_modules_css-smile { + color: red; +} + +.postcss-modules-scope_modules_css-a.postcss-modules-scope_modules_css-smile { + color: red; +} + +/* export-child-class */ +.postcss-modules-scope_modules_css-exportName46 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName46 h1 { + color: blue; +} + +/* export-class-attribute */ +.postcss-modules-scope_modules_css-exportName47 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName48 { + color: green; +} + +.postcss-modules-scope_modules_css-exportName48[class=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[class=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class = \\"postcss-modules-scope_modules_css-exportName47\\" ] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class = postcss-modules-scope_modules_css-exportName47 ] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[class~=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class ~= \\"postcss-modules-scope_modules_css-exportName47\\" ] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName48[ class ~= postcss-modules-scope_modules_css-exportName47 ] { + color: blue; +} + +.globalClass[class=\\"otherGlobalClass\\"] { + color: blue; +} + +.globaClass[class~=\\"otherGlobalClass\\"] { + color: blue; +} + +.postcss-modules-scope_modules_css-exportName49[class=\\"postcss-modules-scope_modules_css-exportName47\\"] { + color: blue; +} + +/* export-difficult */ +@keyframes postcss-modules-scope_modules_css-fade-in { + from { + opacity: 0; + } +} + +@-webkit-keyframes postcss-modules-scope_modules_css-fade-out { + to { + opacity: 0; + } +} + +.postcss-modules-scope_modules_css-fadeIn { + animation: postcss-modules-scope_modules_css-fade-in 5s,/* some, :local(comment) */ + postcss-modules-scope_modules_css-fade-out 1s postcss-modules-scope_modules_css-wrong; + content: postcss-modules-scope_modules_css-fade-in, wrong, \\"difficult, :local(wrong)\\" postcss-modules-scope_modules_css-wrong; +} + +/* export-global-class */ +.postcss-modules-scope_modules_css-exportName50 { + color: green; +} + +.postcss-modules-scope_modules_css-exportName50:hover { + color: red; +} + +@media screen { + body { + background: red; + } +} + +.postcss-modules-scope_modules_css-exportName51 { + color: blue; +} + +/* export-keyframes */ +@keyframes postcss-modules-scope_modules_css-fade-in-export { + from { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes postcss-modules-scope_modules_css-fade-export { + from { + opacity: 0.5; + } +} + +.postcss-modules-scope_modules_css-fadeIn-export { + animation-name: postcss-modules-scope_modules_css-fade-in-export; +} + +.postcss-modules-scope_modules_css-fadeIn-export { + animation: 2s postcss-modules-scope_modules_css-fade-in-export; +} + +.postcss-modules-scope_modules_css-fadeIn-export { + animation: postcss-modules-scope_modules_css-fade-in-export 2s; +} + +/* export-keywords-selector */ +.postcss-modules-scope_modules_css-constructor { + color: green; +} + +.postcss-modules-scope_modules_css-toString { + color: red; +} + +/* export-multiple-classes */ +.postcss-modules-scope_modules_css-exportName52 .postcss-modules-scope_modules_css-exportName53 { + color: green; +} + +.postcss-modules-scope_modules_css-exportName52.postcss-modules-scope_modules_css-exportName53 { + color: red; +} + +/* export-nested-class */ +.postcss-modules-scope_modules_css-exportName54:not(.postcss-modules-scope_modules_css-exportName55.postcss-modules-scope_modules_css-global) { + color: green; +} + +.postcss-modules-scope_modules_css-exportName54:has(.postcss-modules-scope_modules_css-exportName55, .postcss-modules-scope_modules_css-exportName56) { + color: red; +} + +/* export-with-composes-imported-class */ + +.postcss-modules-scope_modules_css-exportName76 { + color: green; +} + +/* export-with-composes */ +.postcss-modules-scope_modules_css-exportName57 { background: red; } +.postcss-modules-scope_modules_css-exportName58 { color: green; } +.postcss-modules-scope_modules_css-exportName59 { color: green; } + + /* export-with-global-composes */ +.otherClass { background: red; } +.andAgain { font-size: 2em; } +.aThirdClass { color: red; } +.postcss-modules-scope_modules_css-exportName60-function-syntax { color: green; } +.postcss-modules-scope_modules_css-exportName60 { color: green; } + +/* export-with-multiple-composes */ +.postcss-modules-scope_modules_css-exportName63 { background: red; } +.postcss-modules-scope_modules_css-exportName64 { font-size: 2em; } +.postcss-modules-scope_modules_css-exportName65 { color: red; } +.postcss-modules-scope_modules_css-exportName66 { color: green; } + +/* export-with-transitive-composes */ +.postcss-modules-scope_modules_css-exportName67 { + font-size: 2em; +} +.postcss-modules-scope_modules_css-exportName68 { + background: red; +} +.postcss-modules-scope_modules_css-exportName69 { + color: green; +} + +/* Not related to us */ +/* ignore-custom-property-set */ +:root { + --postcss-modules-scope_modules_css-title-align: center; + --postcss-modules-scope_modules_css-sr-only: { + position: absolute; + } +} + +/* multiple-composes */ +.postcss-modules-scope_modules_css-class { + color: red; +} + +/* nested-rule */ +:root { + --postcss-modules-scope_modules_css-test: { + --postcss-modules-scope_modules_css-test: foo; + --postcss-modules-scope_modules_css-bar: 1; + } +} + +/* We pass this limitation, order can be any now */ +/* export-with-composes-broken-order */ +.postcss-modules-scope_modules_css-exportName70 { color: green; } +.postcss-modules-scope_modules_css-exportName71 { color: green; } +.postcss-modules-scope_modules_css-exportName72 { background: red; } + +/* transitive composes */ +.postcss-modules-scope_modules_css-exportName73 { color: green; } +.postcss-modules-scope_modules_css-exportName74 { color: green; } +.postcss-modules-scope_modules_css-exportName75 { color: red } +.postcss-modules-scope_modules_css-exportName74 { color: green; } +.postcss-modules-scope_modules_css-exportName74 { color: green; } + +/* deep transitive composes */ +.postcss-modules-scope_modules_css-exportName77 { + color: red; +} + +.postcss-modules-scope_modules_css-exportName78 {} + +.postcss-modules-scope_modules_css-exportName79 { + } + +/*!************************!*\\\\ + !*** css ./colors.css ***! + \\\\************************/ + + + +/*!********************************!*\\\\ + !*** css ./colors.modules.css ***! + \\\\********************************/ + + + + + + + + + + +/*!************************************************!*\\\\ + !*** css ./postcss-modules-values.modules.css ***! + \\\\************************************************/ +/* postcss-modules-values */ + +/* should export a constant */ + + +/* Should pass for us, not a warning */ +/* gives a warnings when there is no semicolon between lines */ + + +/* Should pass for us, not a warning */ +/* gives a warnings on empty value */ + + +/* Should pass for us, not a warning */ +/* gives a warnings on empty value with comment */ + + +/* should export a more complex constant */ + + +/* should replace constants within the file */ + +.postcss-modules-values_modules_css-foo-replace { color: red; } + +/* should replace constants within the file #1 */ + +.postcss-modules-values_modules_css-foo-replace-1 { &.postcss-modules-values_modules_css-bar { color: red; } } + +/* should replace constants within the file #2 */ + +.postcss-modules-values_modules_css-foo-replace-2 { @media (min-width: 1024px) { &.postcss-modules-values_modules_css-bar { color: red; } } } + +/* should replace constants within the file #3 */ + +.postcss-modules-values_modules_css-foo-replace-3 { @media (min-width: 1024px) { &.postcss-modules-values_modules_css-bar { @media (min-width: 1024px) { color: red; } } } } + +/* should replace constants within the file #4 */ + + +.postcss-modules-values_modules_css-foo-replace-4 { height: 40px; height: 36px; } + +/* should replace selectors within the file */ + +.postcss-modules-values_modules_css-fuchsia { color: fuchsia; } + +/* should replace selectors within the file #1 */ + +#postcss-modules-values_modules_css-red { color: red; } + +/* should replace selectors within the file #2 */ + +.postcss-modules-values_modules_css-red > .postcss-modules-values_modules_css-red { color: red; } + +/* should import and re-export a simple constant */ + + +/* should import a simple constant and replace usages */ + +.postcss-modules-values_modules_css-exportName13 { color: blue; } + +/* should import and alias a constant and replace usages */ + +.postcss-modules-values_modules_css-exportName14 { color: yellow; } + +/* should import multiple from a single file */ + +.postcss-modules-values_modules_css-exportName15 { color: blue; } +.postcss-modules-values_modules_css-exportName16 { color: red } + +/* should import from a definition */ + + +.postcss-modules-values_modules_css-exportName17 { color: red; } + +/* should only allow values for paths if defined in the right order - throw an error */ + + + +/* should allow transitive values */ + + +.postcss-modules-values_modules_css-exportName20 { color: #FFF; } + +/* TODO bug */ +/* should allow transitive values within calc */ + + +.postcss-modules-values_modules_css-exportName24 { margin: calc(exportName22 * 2); } + +/* should preserve import order */ + + + +/* should allow custom-property-style names */ + +.postcss-modules-values_modules_css-exportName25 { color: blue; } + +/* should allow all colour types */ + + + + + +.postcss-modules-values_modules_css-exportName26 { + color: aqua; + background-color: #0f0; + border-top-color: #00ff00; + border-bottom-color: rgba(34, 12, 64, 0.3); + outline-color: hsla(220, 13.0%, 18.0%, 1); +} + +/* should import multiple from a single file on multiple lines */ + +.postcss-modules-values_modules_css-exportName27 { color: red; } +.postcss-modules-values_modules_css-exportName28 { color: blue } + +/* should allow definitions with commas in them */ + +.postcss-modules-values_modules_css-exportName29 { box-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); } + +/* should allow values with nested parentheses */ + +.postcss-modules-values_modules_css-exportName30 { + color: color(red lightness(50%)) +} + +/* should work with custom properties */ + +:root { --postcss-modules-values_modules_css-my-own-color: my-custom-value; } + +/* should work with empty custom properties */ + +:root { --postcss-modules-values_modules_css-color: ; } + +/* should work with empty custom properties #2 */ + +:root { --postcss-modules-values_modules_css-color: ; } + +/* should work with empty custom properties #3 */ + +:root { --postcss-modules-values_modules_css-color: /* comment */; } + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/postcss-modules-plugins/a.modules.css b/test/configCases/css/postcss-modules-plugins/a.modules.css new file mode 100644 index 00000000000..eae57ede8d5 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/a.modules.css @@ -0,0 +1,9 @@ +.a { color: red; } + +.hidden-b { + color: blue; +} + +.hidden-c { + color: aliceblue; +} diff --git a/test/configCases/css/postcss-modules-plugins/abcd.modules.css b/test/configCases/css/postcss-modules-plugins/abcd.modules.css new file mode 100644 index 00000000000..fc39ebe97db --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/abcd.modules.css @@ -0,0 +1,15 @@ +.a { + color: red; +} + +.b { + color: red; +} + +.c { + color: red; +} + +.d { + color: red; +} diff --git a/test/configCases/css/postcss-modules-plugins/b.modules.css b/test/configCases/css/postcss-modules-plugins/b.modules.css new file mode 100644 index 00000000000..b213957bba7 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/b.modules.css @@ -0,0 +1,11 @@ +.b { color: red; } + +.hidden-d { + color: blue; +} + +.b-last { + color: red; +} + +:export { localvalue: red } diff --git a/test/configCases/css/postcss-modules-plugins/c.modules.css b/test/configCases/css/postcss-modules-plugins/c.modules.css new file mode 100644 index 00000000000..57493531999 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/c.modules.css @@ -0,0 +1,13 @@ +.c { color: red } + +.hidden-d { + color: blue; +} + +.c-last { + color: red; +} + +.deep-nested-c { + color: red; +} diff --git a/test/configCases/css/postcss-modules-plugins/characters.modules.css b/test/configCases/css/postcss-modules-plugins/characters.modules.css new file mode 100644 index 00000000000..c7787bf74a2 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/characters.modules.css @@ -0,0 +1,31 @@ +.a { + color: red; +} + +.a_ { + color: red; +} + +.-b { + color: red; +} + +.b- { + color: red; +} + +.--c { + color: red; +} + +.c-- { + color: red; +} + +._d { + color: red; +} + +.d\% { + color: tan; +} diff --git a/test/configCases/css/postcss-modules-plugins/classes.css b/test/configCases/css/postcss-modules-plugins/classes.css new file mode 100644 index 00000000000..70286ecc412 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/classes.css @@ -0,0 +1,7 @@ +.localName { + background: red; +} + +.bar { + composes: localName; +} diff --git a/test/configCases/css/postcss-modules-plugins/colors.css b/test/configCases/css/postcss-modules-plugins/colors.css new file mode 100644 index 00000000000..b9fa776eb54 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/colors.css @@ -0,0 +1,2 @@ +@value exportName12: blue; +@value exportNameRed: blue; diff --git a/test/configCases/css/postcss-modules-plugins/colors.modules.css b/test/configCases/css/postcss-modules-plugins/colors.modules.css new file mode 100644 index 00000000000..a70d3a5fdbf --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/colors.modules.css @@ -0,0 +1,9 @@ +@value exportNameRed: blue; +@value exportNameBlue: yellow; +@value otherBlue: red; +@value otherRed: blue; +@value wrongOrder: blue; +@value --red: blue; + +@value namedBlue: red; +@value namedRed: blue; diff --git a/test/configCases/css/postcss-modules-plugins/custom-path.css b/test/configCases/css/postcss-modules-plugins/custom-path.css new file mode 100644 index 00000000000..97f5c2163a7 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/custom-path.css @@ -0,0 +1,3 @@ +.not-in-output { + color: red; +} diff --git a/test/configCases/css/postcss-modules-plugins/d.modules.css b/test/configCases/css/postcss-modules-plugins/d.modules.css new file mode 100644 index 00000000000..3c127998869 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/d.modules.css @@ -0,0 +1,3 @@ +.d { + color: red; +} diff --git a/test/configCases/css/postcss-modules-plugins/import.modules.css b/test/configCases/css/postcss-modules-plugins/import.modules.css new file mode 100644 index 00000000000..f7377864c78 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/import.modules.css @@ -0,0 +1,21 @@ +:import("./c.modules.css") { + value: deep-nested-c; +} + +.abc { + color: red; +} + +.__foo { + color: red; +} + +.some-value { + color: red; +} + +.otherClass { + color: red; +} + +:export { abcd: value } diff --git a/test/configCases/css/postcss-modules-plugins/index.js b/test/configCases/css/postcss-modules-plugins/index.js new file mode 100644 index 00000000000..8fb1ce6f5ba --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/index.js @@ -0,0 +1,24 @@ +import * as composes from "./postcss-modules-extract-imports.modules.css"; +import * as local from "./postcss-modules-local-by-default.local.modules.css"; +import * as global from "./postcss-modules-local-by-default.global.modules.css"; +import * as pure from "./postcss-modules-local-by-default.pure.modules.css"; +import * as scope from "./postcss-modules-scope.modules.css"; +import * as values from "./postcss-modules-values.modules.css"; + +it("should work", () => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(composes).toMatchSnapshot(); + expect(local).toMatchSnapshot(); + expect(global).toMatchSnapshot(); + expect(pure).toMatchSnapshot(); + expect(scope).toMatchSnapshot(); + expect(values).toMatchSnapshot(); + expect(css).toMatchSnapshot(); +}); diff --git a/test/configCases/css/postcss-modules-plugins/library.modules.css b/test/configCases/css/postcss-modules-plugins/library.modules.css new file mode 100644 index 00000000000..92b20441d9b --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/library.modules.css @@ -0,0 +1,41 @@ +.something {} + +.importName { + color: red; +} + +.importName2 { + color: red; +} + +.importName3 { + color: azure; +} + +.importName4 { + color: antiquewhite; +} + +.secondImport { + color: green; +} + +.thirdImport { + color: blue; +} + +.otherLibImport { + color: yellow; +} + +.thirdDep { + color: black; +} + +.firstImport { + color: red; +} + +.secondImport { + color: red; +} diff --git a/test/configCases/css/postcss-modules-plugins/node_modules/foo/my-custom-style.css b/test/configCases/css/postcss-modules-plugins/node_modules/foo/my-custom-style.css new file mode 100644 index 00000000000..a5ef4c034d0 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/node_modules/foo/my-custom-style.css @@ -0,0 +1,3 @@ +.custom-other-name { + color: red; +} diff --git a/test/configCases/css/postcss-modules-plugins/node_modules/foo/package.json b/test/configCases/css/postcss-modules-plugins/node_modules/foo/package.json new file mode 100644 index 00000000000..47de0eae4c1 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/node_modules/foo/package.json @@ -0,0 +1,5 @@ +{ + "name": "foo", + "version": "1.0.0", + "style": "./my-custom-style.css" +} diff --git a/test/configCases/css/postcss-modules-plugins/other.css b/test/configCases/css/postcss-modules-plugins/other.css new file mode 100644 index 00000000000..e34317dafc6 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/other.css @@ -0,0 +1 @@ +.className { color: red } diff --git a/test/configCases/css/postcss-modules-plugins/postcss-modules-extract-imports.modules.css b/test/configCases/css/postcss-modules-plugins/postcss-modules-extract-imports.modules.css new file mode 100644 index 00000000000..a8ceea1df7a --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/postcss-modules-extract-imports.modules.css @@ -0,0 +1,289 @@ +/* postcss-modules-extract-imports */ + + +/* composing-globals */ +:local(.exportName1) { composes: importName secondImport from global; other: rule; } + +/* existing-import */ +:import("library.modules.css") { + something: something; +} + +:local(.exportName2) { + composes: importName from 'library.modules.css'; +} + +/* import-comment */ +/* +:local(.exportName) { + composes: importName from "path/library.css"; + other: rule; +} +*/ + +/* import-consolidate */ +:local(.exportName3) { + composes: importName secondImport from 'library.modules.css'; + other: rule; +} + +:local(.otherExport) { + composes: thirdImport from 'library.modules.css'; + composes: otherLibImport from 'library.modules.css'; +} + +/* import-local-extends */ +.localName { color: red; } + +:local(.exportName4) { + composes: localName; + other: rule; +} + +/* import-media */ +@media screen { + :local(.exportName5) { + composes: importName from "library.modules.css"; + composes: importName2 from "library.modules.css"; + other: rule2; + } +} + +:local(.exportName6) { + composes: importName from "library.modules.css"; + other: rule; +} + +/* import-multiple-classes */ +:local(.exportName7) { composes: importName secondImport from 'library.modules.css'; other: rule; } + +/* import-multiple-references */ +:local(.exportName8) { + composes: importName secondImport from 'library.modules.css'; + composes: importName from 'library.modules.css'; + composes: importName2 from 'library.modules.css'; +} +:local(.exportName9) { + composes: secondImport from 'library.modules.css'; + composes: secondImport from 'library.modules.css'; + composes: thirdDep from 'library.modules.css'; +} + +/* import-only-whitelist */ +:local(.exportName10) { imports: importName from "path/library.css"; something-else: otherLibImport from "path/other-lib.css"; } + +/* import-preserving-order */ +:local(.exportName11) { + composes: b from "./b.modules.css"; + composes: c from "./c.modules.css"; + color: #aaa; +} + +/* import-single-quotes */ +:local(.exportName12) { + composes: importName from 'library.modules.css'; + other: rule; +} + +/* import-double-quotes */ +:local(.exportName13) { + composes: importName from "library.modules.css"; + other: rule; +} + +/* import-spacing */ +:local(.exportName14) { + composes: importName from "library.modules.css"; + composes: importName2 from "library.modules.css"; + composes: importName importName2 from "library.modules.css"; + other: rule; +} + +/* import-within */ +:local(.exportName15) { + composes: importName from "library.modules.css"; + other: rule; +} + +/* multiple-composes */ +:local(.exportName16) { + composes: importName from "library.modules.css", beforeName from global, importName secondImport from global, firstImport secondImport from "library.modules.css"; + other: rule; +} + +:local(.exportName17) { + composes: a from "./a.modules.css", b from "./b.modules.css", c from "./c.modules.css", a from "./a.modules.css", c from "./c.modules.css"; +} + +:local(.exportName18) { + composes: importName importName2 from "library.modules.css", importName3 importName4 from "library.modules.css"; +} + +.foo { color: red } +.bar { color: blue } +.baz { color: green } +:local(.exportName19) { + composes: foo bar, baz; +} + +/* nesting */ +:local(.exportName19) { + display: grid; + + @media (orientation: landscape) { + &:local(.exportName19-nested) { + grid-auto-flow: column; + + @media (min-width: 1024px) { + &:local(.exportName19-nested-nested) { + composes: importName from "library.modules.css"; + } + } + } + } +} + +/* TODO bug - need port https://github.com/css-modules/postcss-modules-extract-imports/pull/138 */ +/* resolve-composes-order */ +:local(.exportName20) { + composes: c from "./c.modules.css"; + color: #bebebe; +} + +:local(.exportName21) { + /* `b` should be after `c` */ + composes: b from "./b.modules.css"; + composes: c from "./c.modules.css"; + color: #aaa; +} + +/* resolve-duplicates */ +:import("./c.modules.css") { + something: c; +} + +:local(.exportName22) { + composes: a from './a.modules.css'; + composes: b from './b.modules.css'; + composes: c from './c.modules.css'; + composes: a from './a.modules.css'; + composes: c from './c.modules.css'; +} + +/* resolve-imports-order */ +:import("custom-path.css") { + /* empty to check the order */ +} + +:import("./b.modules.css") { + somevalue: localvalue; +} + +:local(.exportName23) { + composes: a from './a.modules.css'; +} + +:local(.exportName24) { + composes: b from './b.modules.css'; + composes: hidden-b from './a.modules.css'; +} + +:local(.exportName25) { + composes: c from './c.modules.css'; + composes: hidden-c from './a.modules.css'; +} + +:local(.exportName26) { + composes: hidden-d from './c.modules.css'; + composes: hidden-d from './b.modules.css'; + composes: d from './d.modules.css'; +} + +/* valid-characters */ +:local(.exportName27) { + composes: a -b --c _d from "characters.modules.css"; + composes: a_ b- c-- d\% from "characters.modules.css"; +} + +/* We pass this test */ +/* check-import-order */ +:local(.exportName28) { + composes: b-last from './b.modules.css'; + composes: c-last from './c.modules.css'; +} + +:local(.exportName29) { + composes: c-last from './c.modules.css'; + composes: b-last from './b.modules.css'; +} + +/* empty-composes */ +:local(.exportName30) { + composes:; +} + +/* weird-composes */ +.from { color: red; } +:local(.exportName31) { + composes: from from; +} + +/* broken-composes */ +:local(.exportName32) { + composes: className from 12; +} + +/* broken-composes-2 */ +:local(.exportName33) { + composes: 12; +} + +/* composes-multiple-declarations */ +:local(.exportName34) { + composes: a from './a.modules.css'; +} + +:local(.exportName34) { + composes: b from './b.modules.css'; +} + +/* inherit-module-type */ +:local(.exportName35) { + composes: className from './other.css'; +} + +/* composes from-import */ +:import("./import.modules.css") { abc-from-def: abcd;} + +:local(.exportName36) { + composes: abc-from-def; +} + +:local(.exportName37) {composes: localName} + +:local(.exportName38) { + composes: localName +} + +:local(.exportName39) { + composes: localName; +} + +:local(.exportName40) {color:red;composes:localName} + +:local(.exportName41) {composes:localName;color:red;} + +:local(.exportName42) {composes:localName;color:red} + +:local(.exportName43) { + + composes:localName; + + color:red; +} + +:import("foo") { + my-own-name-here: custom-other-name; +} + +.exportName44 { color: unknown; } diff --git a/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.global.modules.css b/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.global.modules.css new file mode 100644 index 00000000000..186c13c05b4 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.global.modules.css @@ -0,0 +1,65 @@ +/* postcss-modules-local-by-default */ + + +/* localize and not localize animation-name in mixed case #2 */ +.foo { animation-name: fadeInOut, global(moveLeft300px), local(bounce); } + +/* localize and not localize a certain animation in mixed case #2 */ +.foo { animation: rotate 1s, global(spin) 3s, local(fly) 6s; } + +/* default to global when mode provided */ +.foo { a_value: some-value; } + +/* use correct spacing */ +.a :local .b {} +.a:local.b {} +.a:local(.b) {} +.a:local( .b ) {} +.a :local(.b) {} +.a :local( .b ) {} +:local(.a).b {} +:local( .a ).b {} +:local(.a) .b {} +:local( .a ) .b {} +.a /* test */ :local /* test*/ .b {} +.a /* test */:local/* test*/ .b {} +.a/* test */ :local /* test*/.b {} +.a:local(/* test */ .b /* test */) {} +.a:local(/* test */.b/* test */) {} +.a:local(/* test */ .b/* test */) {} +.a:local(/* test */.b /* test */) {} + +/* localize keyframes in global default mode */ +@keyframes foo { a_value: some-value; } + +/* css nesting #1 */ +:local(.foo) { + &:local(.class) { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + :local(.bar) { + c_value: some-value; + } + + &:local(.baz) { + c_value: some-value; + } + } +} + +/* @scope at-rule #3 */ +@scope (:local(.article-header)) to (:global(.class)) { + .article-footer { + border: 5px solid black; + } + :local(.class-1) { + color: red; + } + :global(.class-2) { + color: blue; + } +} diff --git a/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.local.modules.css b/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.local.modules.css new file mode 100644 index 00000000000..68920809ca9 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.local.modules.css @@ -0,0 +1,564 @@ +/* postcss-modules-local-by-default */ + + +/* scope selectors */ +.foobar { a_value: some-value; } + +/* scope escaped selectors */ +.\3A \) {} + +/* scope ids */ +#foobar { a_value: some-value; } + +/* scope escaped ids */ +#\#test {} + +/* scope escaped ids (2) */ +#u-m\00002b {} + +/* scope multiple selectors */ +.foo, .baz { a_value: some-value; } + +/* scope sibling selectors */ +.foo ~ .baz { a_value: some-value; } + +/* scope pseudo elements */ +.foo:after { a_value: some-value; } + +/* scope media queries */ +@media only screen { .foo { a_value: some-value; } } + +/* allow narrow global selectors */ +:global(.foo .bar) { a_value: some-value; } + +/* allow narrow local selectors */ +:local(.foo .bar) { a_value: some-value; } + +/* allow broad global selectors */ +:global .foo .bar { a_value: some-value; } + +/* allow broad local selectors */ +:local .foo .bar { a_value: some-value; } + +/* allow multiple narrow global selectors */ +:global(.foo), :global(.bar) { a_value: some-value; } + +/* allow multiple broad global selectors */ +:global .foo, :global .bar { a_value: some-value; } + +/* allow multiple broad local selectors */ +:local .foo, :local .bar { a_value: some-value; } + +/* allow narrow global selectors nested inside local styles */ +.foo :global(.foo .bar) { a_value: some-value; } + +/* allow broad global selectors nested inside local styles */ +.foo :global .foo .bar { a_value: some-value; } + +/* allow parentheses inside narrow global selectors */ +.foo :global(.foo:not(.bar)) { a_value: some-value; } + +/* allow parentheses inside narrow local selectors */ +.foo :local(.foo:not(.bar)) { a_value: some-value; } + +/* allow narrow global selectors appended to local styles */ +.foo:global(.foo.bar) { a_value: some-value; } + +/* ignore selectors that are already local */ +:local(.foobar) { a_value: some-value; } + +/* ignore nested selectors that are already local */ +:local(.foo) :local(.bar) { a_value: some-value; } + +/* ignore multiple selectors that are already local */ +:local(.foo), :local(.bar) { a_value: some-value; } + +/* ignore sibling selectors that are already local */ +:local(.foo) ~ :local(.bar) { a_value: some-value; } + +/* ignore psuedo elements that are already local */ +:local(.foo):after { a_value: some-value; } + +/* trim whitespace after empty broad selector */ +.bar :global :global { a_value: some-value; } + +/* broad global should be limited to selector */ +:global .foo, .bar :global, .foobar :global { a_value: some-value; } + +/* broad global should be limited to nested selector */ +.foo:not(:global .bar).foobar { a_value: some-value; } + +/* broad global and local should allow switching */ +.foo :global .bar :local .foobar :local .barfoo { a_value: some-value; } + +/* localize a single animation-name */ +.foo { animation-name: bar; } + +/* localize a single animation-name #2 */ +.foo { animation-name: local(bar); } +.foo { animation-name: :local(bar); } + +/* passed because `--bar` not found */ +/* not localize animation-name in a var function */ +.foo { animation-name: var(--bar-unique); } + +/* passed because `--bar` not found */ +/* not localize animation-name in a var function #2 */ +.foo { animation-name: vAr(--bar-unique); } +/* Work, because found */ +:root { --my-custom-var: name; } +.foo { animation-name: vAr(--my-custom-var); } + +/* not localize animation-name in an env function */ +.foo { animation-name: env(bar); } + +/* not localize animation-name in an global function */ +.foo { animation-name: global(bar); } +.foo { animation-name: :global(bar); } + +/* localize and not localize animation-name in mixed case */ +.foo { animation-name: fadeInOut, global(moveLeft300px), local(bounce); } + +/* not localize animation in an global function */ +.foo { animation: global(bar); } + +/* not localize a certain animation in an global function */ +.foo { animation: global(bar), foo; } + +/* localize and not localize a certain animation in mixed case */ +.foo { animation: rotate 1s, global(spin) 3s, local(fly) 6s; } + +/* not localize animation-name in an env function #2 */ +.foo { animation-name: eNv(bar); } + +/* not localize a single animation-delay */ +.foo { animation-delay: 1s; } + +/* localize multiple animation-names */ +.foo { animation-name: bar, foobar; } + +/* not localize revert */ +.foo { animation: revert; } + +/* not localize revert #2 */ +.foo { animation-name: revert; } + +/* not localize revert #3 */ +.foo { animation-name: revert, foo, none; } + +/* not localize revert-layer */ +.foo { animation: revert-layer; } + +/* not localize revert */ +.foo { animation-name: revert-layer; } + +/* localize animation using special characters */ +.foo { animation: \@bounce; } + +/* localize animation using special characters */ +.foo { animation: bou\@nce; } + +/* localize animation using special characters */ +.foo { animation: \ as; } + +/* localize animation using special characters */ +.foo { animation: t\ t; } + +/* localize animation using special characters */ +.foo { animation: -\a; } + +/* localize animation using special characters */ +.foo { animation: --\a; } + +/* localize animation using special characters */ +.foo { animation: \a; } + +/* localize animation using special characters */ +.foo { animation: -\a; } + +/* localize animation using special characters */ +.foo { animation: --; } + +/* localize animation using special characters */ +.foo { animation: 😃bounce😃; } + +/* localize custom property */ +.foo { animation: --foo; } + +/* don't find a localize name, but localize var */ +.foo { animation: fade .2s var(--easeOutQuart) .1s forwards } + +/* not localize name in nested function */ +.foo { animation: fade .2s env(FOO_BAR) .1s forwards, name } + +/* don't find a localize name, but localize var */ +.foo { animation: var(--foo-bar) .1s forwards, name } + +/* don't find a localize name, but localize var */ +.foo { animation: var(--foo-bar) .1s forwards name, name } + +/* localize animation */ +.foo { animation: a; } + +/* localize animation #2 */ +.foo { animation: bar 5s, foobar; } + +/* localize animation #3 */ +.foo { animation: ease ease; } +.foo { animation: ease ease; } +.foo { animation: ease ease, ease-in ease-in, ease-out ease-out; } + +/* localize animation #4 */ +.foo { animation: 0s ease 0s 1 normal none test running; } + +/* localize animation with vendor prefix */ +.foo { -webkit-animation: bar; animation: bar; } + +/* not localize other rules */ +.foo { content: "animation: bar;" } + +/* not localize global rules */ +:global .foo { animation: foo; animation-name: bar; } + +/* handle nested global */ +:global .a:not(:global .b) { a_value: some-value; } + +/* handle nested global #1 */ +:global .a:not(:global .b:not(:global .c)) { a_value: some-value; } + +/* handle nested global #2 */ +:local .a:not(:not(:not(:global .c))) { a_value: some-value; } + +/* handle nested global #3 */ +:global .a:not(:global .b, :global .c) { a_value: some-value; } + +/* handle nested global #4 */ +:local .a:not(:global .b, :local .c) { a_value: some-value; } + +/* handle nested global #5 */ +:global .a:not(:local .b, :global .c) { a_value: some-value; } + +/* handle nested global #6 */ +:global .a:not(.b, .c) { a_value: some-value; } + +/* handle nested global #7 */ +:local .a:not(.b, .c) { a_value: some-value; } + +/* handle nested global #8 */ +:global .a:not(:local .b, .c) { a_value: some-value; } + +/* handle a complex animation rule */ +.foo { animation: foo, bar 5s linear 2s infinite alternate, barfoo 1s; } +.foo { animation: foo, BAR 5s LINEAR 2s INFINITE ALTERNATE, barfoo 1s; } + +/* handle animations where the first value is not the animation name */ +.foo { animation: 1s foo; } + +/* handle animations where the first value is not the animation name whilst also using keywords */ +.foo { animation: 1s normal ease-out infinite foo; } + +/* not treat animation curve as identifier of animation name even if it separated by comma */ +.foo { animation: slide-right 300ms forwards ease-out, fade-in 300ms forwards ease-out; } +.foo { animation: slide-right 300ms forwards ease-out } +.foo { animation: slide-right 300ms forwards ease-out; @media screen { animation: slide-right 300ms forwards ease-out; } } +.foo { animation: slide-right 300ms forwards ease-out; .foo { animation: slide-right 300ms forwards ease-out; } } + +/* not treat "start" and "end" keywords in steps() function as identifiers */ +.foo { animation: spin 1s steps(12, end) infinite; } +.foo { animation: spin 1s STEPS(12, start) infinite; } +.foo { animation: spin 1s steps(12, END) infinite; } +.foo { animation: spin 1s steps(12, START) infinite; } + +/* handle animations with custom timing functions */ +.foo { animation: 1s normal cubic-bezier(0.25, 0.5, 0.5. 0.75) foo; } + +/* handle animations whose names are keywords */ +.foo { animation: 1s infinite infinite; } + +/* handle not localize an animation shorthand value of "inherit" */ +.foo { animation: inherit; } + +/* handle "constructor" as animation name */ +.foo { animation: constructor constructor; } + +/* default to local when mode provided */ +.foo { a_value: some-value; } + +/* localize keyframes */ +@keyframes foo { from { a_value: some-value; } to { a_value: some-value; } } + +/* localize keyframes starting with special characters */ +@keyframes \@foo { from { color: red; } to { color: blue; } } + +/* localize keyframes containing special characters */ +@keyframes f\@oo { from { color: red; } to { color: blue; } } + +/* localize explicit keyframes */ +@keyframes :local(foo) { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@-webkit-keyframes :global(bar) { from { color: red; } to { color: blue; } } +@keyframes local(local-name) { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes :local(colon-local-name) { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes global(global-name) { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } +@keyframes :global(colon-global-name) { 0% { color: red; } 33.3% { color: yellow; } 100% { color: blue; } } + +/* ignore :export statements */ +:export { foo: __foo; } + +/* ignore :import statements */ +:import("./import.modules.css") { local-foo: __foo; } + +/* incorrectly handle nested selectors */ +.bar:not(:global .foo-name, .baz-name) { a_value: some-value; } + +/* compile explict global element */ +:global(input) { a_value: some-value; } + +/* compile explict global attribute */ +:global([type="radio"]), :not(:global [type="radio"]) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on inconsistent selector result */ +:global .foo, .bar { a_value: some-value; } + +/* throw on nested :locals, but we allow to do it */ +:local(:local(.foo)) { a_value: some-value; } + +/* throw on nested :globals, but we allow to do it */ +:global(:global(.foo)) { a_value: some-value; } + +/* throw on nested mixed, but we allow to do it */ +:local(:global(.foo)) { a_value: some-value; } + +/* throw on nested broad :local, but we allow to do it */ +:global(:local .foo) { a_value: some-value; } + +/* throw on incorrect spacing with broad :global */ +.foo :global.bar { a_value: some-value; } + +/* TODO bug no report */ +/* throw on incorrect spacing with broad :local */ +.foo:local .bar { a_value: some-value; } + +/* pass through global element */ +input { a_value: some-value; } + +/* localise class and pass through element */ +.foo input { a_value: some-value; } + +/* pass through attribute selector */ +[type="radio"] { a_value: some-value; } + +/* Not related to us */ +/* not modify urls without option */ +/*.a { background: url(./image.png); }*/ +/*:global .b { background: url(image.png); }*/ +/*.c { background: url("./image.png"); }*/ + +/* Not related to us */ +/* rewrite url in local block */ +/*.a { background: url(./image.png); }*/ +/*:global .b { background: url(image.png); }*/ +/*.c { background: url("./image.png"); }*/ +/*.c { background: url('./image.png'); }*/ +/*.d { background: -webkit-image-set(url("./image.png") 1x, url("./image2x.png") 2x); }*/ +/*@font-face { src: url("./font.woff"); }*/ +/*@-webkit-font-face { src: url("./font.woff"); }*/ +/*@media screen { .a { src: url("./image.png"); } }*/ +/*@keyframes :global(ani1) { 0% { src: url("image.png"); } }*/ +/*@keyframes ani2 { 0% { src: url("./image.png"); } }*/ +/*foo { background: end-with-url(something); }*/ + +/* Not related to us */ +/* not crash on atrule without nodes */ +/*@charset "utf-8";*/ + +/* not break unicode characters */ +.a { content: "\2193" } + +/* not break unicode characters */ +.a { content: "\2193\2193" } + +/* not break unicode characters */ +.a { content: "\2193 \2193" } + +/* not break unicode characters */ +.a { content: "\2193\2193\2193" } + +/* not break unicode characters */ +.a { content: "\2193 \2193 \2193" } + +/* not ignore custom property set */ +:root { --title-align: center; --sr-only: { position: absolute; } } + +/* not localize imported alias */ +:import("./import.modules.css") { a_value1: some-value; } + +.foo > .a_value { a_value1: some-value; } + +/* + * All the original `import()` tests do not replace the property, but we can consider this a feature, + * because we allow to replace any identifier, we can reconsider this in future + */ + +/* not localize nested imported alias */ +:import("./import.modules.css") { a_value2: some-value; } + +.foo > .a_value > .bar { a_value2: some-value; } + +/* ignore imported in explicit local */ +:import("./import.modules.css") { a_value3: some-value; } + +:local(.a_value) { a_value3: some-value; } + +/* escape local context with explict global */ +:import("./import.modules.css") { a_value4: some-value; } + +:local .foo :global(.a_value) .bar { a_value4: some-value; } + +/* respect explicit local */ +:import("./import.modules.css") { a_value5: some-value; } + +.a_value :local .a_value .foo :global .a_value { a_value5: some-value; } + +/* not localize imported animation-name */ +:import("./import.modules.css") { a_value6: some-value; } + +.foo { animation-name: a_value; } + +/* Not related to us */ +/* throw on invalid syntax id usage */ +. { a_value: some-value; } + +/* Not related to us */ +/* throw on invalid syntax class usage */ +# { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid syntax local class usage */ +:local(.) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid syntax local id usage */ +:local(#) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +:global(.) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +:global(#) { a_value: some-value; } + +/* TODO bug no report */ +/* throw on invalid global class usage */ +:global(.a:not(:global .b, :global .c)) { a_value: some-value; } + +/* css nesting */ +.foo { + &.class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .bar { + c_value: some-value; + } + + &.baz { + c_value: some-value; + } + } +} + +/* handle negative animation-delay in animation shorthand */ +.foo { animation: 1s -500ms; } + +/* handle negative animation-delay in animation shorthand #1 */ +.foo { animation: 1s -500.0ms; } + +/* handle negative animation-delay in animation shorthand #2 */ +.foo { animation: 1s -500.0ms -a_value; } + +/* @scope at-rule */ +.article-header { + color: red; +} + +.article-body { + color: blue; +} + +@scope (.article-body) to (.article-header) { + .article-body { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope(.article-body)to(.article-header){ + .article-footer { + border: 5px solid black; + } +} + +@scope ( .article-body ) { + img { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope { + :scope { + color: red; + } +} + +/* @scope at-rule #1 */ +@scope (.article-body) to (figure) { + .article-footer { + border: 5px solid black; + } +} + +/* @scope at-rule #2 */ +@scope (:local(.article-body)) to (:global(.class)) { + .article-footer { + border: 5px solid black; + } + :local(.class-1) { + color: red; + } + :global(.class-2) { + color: blue; + } +} + +/* @scope at-rule #5 */ +@scope (.article-header) to (.class) { + .article-footer { + color: red; + } +} + +/* @scope at-rule #6 */ +.foo { + @scope (.article-header) to (.class) { + :scope { + background: blue; + } + + .bar { + color: red; + } + } +} + +/* duplicate-name */ +#duplicate-name { color: red; } +.duplicate-name { color: red; } + +/* in-media */ +@media screen and (min-width: 900px) { html .foo { a_value: some-value } } diff --git a/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.pure.modules.css b/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.pure.modules.css new file mode 100644 index 00000000000..c88f51b718e --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/postcss-modules-local-by-default.pure.modules.css @@ -0,0 +1,454 @@ +/* postcss-modules-local-by-default */ +/* TODO not implemented yet */ + +@keyframes bounce {} +@keyframes fly {} + +/* localize and not localize animation-name in mixed case #3 */ +.foo { animation-name: fadeInOut, global(moveLeft300px), local(bounce); } + +/* localize and not localize a certain animation in mixed case #2 */ +.foo { animation: rotate 1s, global(spin) 3s, local(fly) 6s; } + +/* compile in pure mode */ +:global(.foo).bar, [type="radio"] ~ .label, :not(.foo), #bar { a_value: some-value; } + +/* throw on not pure selector (global class) */ +:global(.foo) { a_value: some-value; } + +/* throw on not pure selector (with multiple 1) */ +.foo, :global(.bar) { a_value: some-value; } + +/* throw on not pure selector (with multiple 2) */ +:global(.bar), .foo { a_value: some-value; } + +/* throw on not pure selector (element) */ +input { a_value: some-value; } + +/* throw on not pure selector (attribute) */ +[type="radio"] { a_value: some-value; } + +/* throw on not pure keyframes */ +@keyframes :global(foo) { a_value: some-value; } + +/* consider & statements as pure */ +.foo { &:hover { a_value: some-value; } } + +/* consider & statements as pure #2 */ +.foo { @media screen and (min-width: 900px) { &:hover { a_value: some-value; } } } + +/* consider global inside local as pure */ +.foo button { a_value: some-value; } + +/* consider selector & statements as pure */ +.foo { html &:hover { a_value: some-value; } } + +/* consider selector & statements as pure */ +.foo { &:global(.bar) { a_value: some-value; } } + +/* throw on nested & selectors without a local selector */ +:global(.foo) { &:hover { a_value: some-value; } } + +/* should suppress errors for global selectors after ignore comment */ +/* cssmodules-pure-ignore */ +:global(.foo) { color: blue; } + +/* should suppress errors for global selectors after ignore comment #2 */ +/* cssmodules-pure-ignore */ +/* another comment */ +:global(.foo) { color: blue; } + +/* should suppress errors for global selectors after ignore comment #3 */ +/* another comment */ +/* cssmodules-pure-ignore */ +:global(.foo) { color: blue; } + +/* should suppress errors for global selectors after ignore comment #4 */ +/* cssmodules-pure-ignore */ /* another comment */ +:global(.foo) { color: blue; } + +/* should suppress errors for global selectors after ignore comment #5 */ +/* another comment */ /* cssmodules-pure-ignore */ +:global(.foo) { color: blue; } + +/* should suppress errors for global selectors after ignore comment #6 */ +.foo { /* cssmodules-pure-ignore */ :global(.bar) { color: blue }; } + +/* should suppress errors for global selectors after ignore comment #7 */ +/* cssmodules-pure-ignore */ :global(.foo) { /* cssmodules-pure-ignore */ :global(.bar) { color: blue } } + +/* should suppress errors for global selectors after ignore comment #8 */ +/* cssmodules-pure-ignore */ :global(.foo) { color: blue; } + +/* should suppress errors for global selectors after ignore comment #9 */ +/* + cssmodules-pure-ignore + */ :global(.foo) { color: blue; } + +/* should allow additional text in ignore comment */ +/* cssmodules-pure-ignore - needed for third party integration */ +:global(#foo) { color: blue; } + +/* should not affect rules after the ignored block */ +/* cssmodules-pure-ignore */ +:global(.foo) { color: blue; } +:global(.bar) { color: red; } + +/* should work with nested global selectors in ignored block */ +/* cssmodules-pure-ignore */ +:global(.foo) { + :global(.bar) { color: blue; } +} + +/* should work with ignored nested global selectors in ignored block */ +/* cssmodules-pure-ignore */ +:global(.foo) { + /* cssmodules-pure-ignore */ + :global(.bar) { color: blue; } +} + +/* should work with view transitions in ignored block */ +/* cssmodules-pure-ignore */ +::view-transition-group(modal) { + animation-duration: 300ms; +} + +/* should work with keyframes in ignored block */ +/* cssmodules-pure-ignore */ +@keyframes :global(fadeOut) { + from { opacity: 1; } + to { opacity: 0; } +} + +/* should work with scope in ignored block */ + +/* cssmodules-pure-ignore */ +@scope (:global(.foo)) to (:global(.bar)) { + .article-footer { + border: 5px solid black; + } +} + + +/* should work with scope in ignored block #2 */ + +/* cssmodules-pure-ignore */ +@scope (:global(.foo)) +to (:global(.bar)) { + .article-footer { + border: 5px solid black; + } +} + + +/* should work in media queries */ +@media (min-width: 768px) { + /* cssmodules-pure-ignore */ + :global(.foo) { color: blue; } +} + +/* should handle multiple ignore comments */ +/* cssmodules-pure-ignore */ +:global(.foo) { color: blue; } +.local { color: green; } +/* cssmodules-pure-ignore */ +:global(.bar) { color: red; } + +/* should work with complex selectors in ignored block */ +/* cssmodules-pure-ignore */ +:global(.foo):hover > :global(.bar) + :global(.baz) { + color: blue; +} + +/* should work with multiple selectors in ignored block */ +/* cssmodules-pure-ignore */ +:global(.foo), +:global(.bar), +:global(.baz) { + color: blue; +} + +/* should work with pseudo-elements in ignored block */ +/* cssmodules-pure-ignore */ +:global(.foo)::before, +:global(.foo)::after { + content: ''; +} + +/* should disable pure mode checks for entire file with no-check comment */ +/* cssmodules-pure-no-check */ +:global(.foo) { border: 1px solid #e2e8f0 } +:global(.bar) { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) } +:global(.baz) { background: #4299e1 } + +/* should disable pure mode checks for nested selectors */ +/* cssmodules-pure-no-check */ +:global(.foo) { + &:hover { border-color: #cbd5e0 } + & :global(.bar) { color: blue } +} + +/* should ignore no-check comment if not at root level */ +:global(.bar) { color: blue } +/* cssmodules-pure-no-check */ + +/* should ignore no-check comment if not at root level #2 */ +/* Some file description */ +.class { color: red; } +/* cssmodules-pure-no-check */ +:global(.foo) { color: blue } + +/* should allow other comments before no-check comment */ +/* Some file description */ +/* cssmodules-pure-no-check */ +:global(.foo) { color: blue } + +/* should disable pure mode checks for deep nested selectors */ +/* cssmodules-pure-no-check */ +:global(.foo) { max-width: 600px } +:global(.bar) { background: #fafafa } +:global(.baz) { + :global(.foobar) { + &::-webkit-scrollbar { width: 8px } + } +} + +/* should work with keyframes when no-check is enabled */ +/* cssmodules-pure-no-check */ +@keyframes :global(fadeIn) { + from { opacity: 0 } + to { opacity: 1 } +} +:global(.animate) { animation: global(fadeIn) 0.3s } + +/* should allow multiline no-check comment */ +/* + cssmodules-pure-no-check +*/ +:global(.foo) { color: blue } + +/* should allow additional text in no-check comment */ +/* cssmodules-pure-no-check - needed for styling third-party components */ +:global(.foo) { color: blue } + +/* should work with media queries when no-check is enabled */ +/* cssmodules-pure-no-check */ +@media (max-width: 768px) { + :global(.foo) { position: fixed } +} + +/* css nesting #2 */ + +.foo { + &.class { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + .bar { + c_value: some-value; + } + + &.baz { + c_value: some-value; + } + } +} + +/* css nesting #3 */ +.foo { span { a_value: some-value; } } + +/* css nesting (unfolded) #3 */ +.foo span { a_value: some-value } + +/* css nesting #4 */ +.foo { span { a { a_value: some-value; } } } + +/* css nesting (unfolded) #4 */ +.foo span a { a_value: some-value } + +/* css nesting #5 */ +html { .foo { a_value: some-value; } } + +/* css nesting (unfolded) #5 */ +html .foo { a_value: some-value } + +/* css nesting #6 */ +html { @media screen and (min-width: 900px) { .foo { a_value: some-value; } } } + +/* css nesting (unfolded) #6 */ +@media screen and (min-width: 900px) { html .foo { a_value: some-value } } + +/* css nesting #7 */ +html { .foo { a_value: some-value; } .bar { a_value: some-value; } } + +/* css nesting (unfolded) #7 */ +html .foo, html .bar { a_value: some-value } + +/* css nesting #8 */ +.class { @media screen and (min-width: 900px) { & > span { a_value: some-value; } } } + +/* css nesting (unfolded) #8 */ +@media screen and (min-width: 900px) { .class > span { a_value: some-value } } + +/* css nesting #9 */ +html { @media screen and (min-width: 900px) { & > .class { a_value: some-value; } } } + +/* css nesting (unfolded) #9 */ +@media screen and (min-width: 900px) { html > .class { a_value: some-value } } + +/* css nesting #10 */ +.class { @media screen and (min-width: 900px) { & { a_value: some-value; } } } + +/* css nesting (unfolded) #10 */ +@media screen and (min-width: 900px) { .class { a_value: some-value } } + +/* css nesting #11 */ +html { .foo { span { a_value: some-value; } } } + +/* css nesting (unfolded) #11 */ +html .foo span { a_value: some-value } + +/* css nesting #12 */ +html { button { .foo { div { span { a_value: some-value; } } } } } + +/* css nesting #13 */ +.foo { button { div { div { span { a_value: some-value; } } } } } + +/* css nesting #14 */ +html { button { div { div { .foo { a_value: some-value; } } } } } + +/* css nesting #15 */ +html { button { @media screen and (min-width: 900px) { .foo { div { span { a_value: some-value; } } } } } } + +/* css nesting #16 */ +html { .foo { a_value: some-value; } } + +/* css nesting #17 */ +.foo { div { a_value: some-value; } } + +/* css nesting #18 */ +@media screen and (min-width: 900px) { html { .foo { a_value: some-value; } } } + +/* css nesting #19 */ +html { @media screen and (min-width: 900px) { .foo { a_value: some-value; } } } + +/* css nesting #20 */ +html { .foo { @media screen and (min-width: 900px) { a_value: some-value; } } } + +/* css nesting #21 */ +@media screen and (min-width: 900px) { .foo { div { a_value: some-value; } } } + +/* css nesting #22 */ +.foo { @media screen and (min-width: 900px) { div { a_value: some-value; } } } + +/* css nesting #23 */ +.foo { div { @media screen and (min-width: 900px) { a_value: some-value; } } } + +/* css nesting - throw on mixed parents */ +.foo, html { span { a_value: some-value; } } + +/* css nesting - throw on & */ +html { & > span { a_value: some-value; } } + +/* css nesting - throw on & #2 */ +html { button { & > span { a_value: some-value; } } } + +/* css nesting - throw on & #3 */ +html { @media screen and (min-width: 900px) { & > span { a_value: some-value; } } } + +/* css nesting - throw on & #4 */ +html { button { div { div { & { a_value: some-value; } } } } } + +/* css nesting - throw */ +html { button { div { div { div { a_value: some-value; } } } } } + +/* css nesting - throw #2 */ +html { button { div { div { div { } } } } } + +/* css nesting - throw #3 */ +html { button { @media screen and (min-width: 900px) { div { div { div { } } } } } } + +/* css nesting - throw #4 */ +@media screen and (min-width: 900px) { html { button { div { div { div { } } } } } } + +/* css nesting - throw #5 */ +html { div { @media screen and (min-width: 900px) { color: red } } } + +/* css nesting - throw #6 */ +html { div { @media screen and (min-width: 900px) { @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #7 */ +html { div { @media screen and (min-width: 900px) { .a { } @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #7 */ +html { div { @media screen and (min-width: 900px) { .a { a_value: some-value; } @media screen and (min-width: 900px) { color: red } } } } + +/* css nesting - throw #8 */ + +@media screen and (min-width: 900px) { + .a { a_value: some-value; } + @media screen and (min-width: 900px) { + div { + color: red + } + } +} + +/* css nesting - throw on global styles with a local selector */ +html { a_value: some-value; .foo { a_value: some-value; } } + +/* css nesting - throw on global styles with a local selector #2 */ +html { .foo { a_value: some-value; } a_value: some-value; } + +/* css nesting - throw on global styles with a local selector #3 */ + +html { + .foo { a_value: some-value; } + button { + color: red; + .bar { a_value: some-value; } + } +} + +/* css nesting - throw on global styles with a local selector #4 */ + +html { + @media screen and (min-width: 900px) { + button { + color: red; + .bar { a_value: some-value; } + } + } +} + +/* consider :import statements pure */ +:import("./import.modules.css") { local-foo: __foo; } + +/* consider :export statements pure */ +:export { export-foo: __foo; } + +/* @scope at-rule #4 */ + +@scope (.article-header) to (.class) { + .article-footer { + border: 5px solid black; + } + .class-1 { + color: red; + } + .class-2 { + color: blue; + } +} + + +/* @scope at-rule #7 */ + +@scope (:global(.article-header).foo) to (:global(.class).bar) { + .bar { + color: red; + } +} diff --git a/test/configCases/css/postcss-modules-plugins/postcss-modules-scope.modules.css b/test/configCases/css/postcss-modules-plugins/postcss-modules-scope.modules.css new file mode 100644 index 00000000000..0b74c07d2b8 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/postcss-modules-scope.modules.css @@ -0,0 +1,574 @@ +/* postcss-modules-scope */ + +/* at-rule-scope */ +:local(.exportName4) { + color: red; +} + +@scope (:local(.exportName1)) to (:local(.exportName2)) { + :local(.exportName3) { + border: 5px solid black; + background-color: goldenrod; + } +} + +@scope (:local(.exportName1)) { + :local(.exportName5) { + border: 5px solid black; + } +} + +@scope (:local(.exportName1)) to (img) { + :local(.exportName3) { + background-color: goldenrod; + } +} + +@scope (:local(.exportName6)) { + img { + backdrop-filter: blur(2px); + } +} + +@scope { + :scope { + color: red; + } +} + +/* at-rule */ +:local(.exportName7) { + background: red; +} + +@media screen { + :local(.exportName8) { + color: green; + :local(.exportName9) { + color: blue; + } + } +} + +/* composes-only-allowed */ +.local-a { color: red; } +.local-b { color: green; } +:local(.exportName10) { + composes: global(a); + compose-with: global(b); + composes: local(local-a); + compose-with: local(local-b); + a-composes: global(c); + composes-b: global(d); + a-composes-b: global(e); + a-compose-with-b: global(b); +} + +/* css-nesting-composes */ +:local(.exportName11) { + color: red; +} + +:local(.exportName12) { + display: grid; + composes: exportName11; + + @media (orientation: landscape) { + grid-auto-flow: column; + } +} + +/* css-nesting */ +:local(.exportName12) { + background: red; +} + +:local(.exportName13) { + color: green; + + @media (max-width: 520px) { + :local(.exportName14) { + color: darkgreen; + } + + &:local(.exportName15) { + color: blue; + } + } +} + +:local(.exportName16) { + color: red; + + &:local(.exportName17) { + color: green; + } + + :local(.exportName18) { + color: blue; + } +} + +/* error-comma-in-local */ +.className { color: red; } +:local(.exportName19, .exportName20) { + composes: className; +} + +/* error-composes-css-nesting-at-rule */ +:local(.exportName21) { +} + +@media (min-width: 1024px) { + :local(.exportName22) { + :local(.exportName23) { + compose-with: exportName21; + } + } +} + +/* error-composes-css-nesting-with-media */ +:local(.exportName24) { +} + +:local(.exportName25) { + @media (min-width: 1024px) { + :local(.exportName26) { + compose-with: exportName24; + } + } +} + +/* error-composes-css-nesting */ +:local(.exportName27) { +} + +:local(.exportName28) { + :local(.exportName29) { + compose-with: exportName27; + } +} + +/* TODO bug no report */ +/* error-composes-keyframes */ +:local(.exportName30) { +} + +@keyframes slidein { + from { + transform: translateX(0%); + } + + to { + composes: exportName30; + } +} + +/* TODO bug no report */ +/* error-composes-not-allowed-in-local-id */ +.exportName31 {} + +:local(#idName) { + composes: exportName31; +} + +/* error-composes-not-allowed-in-multiple */ +.exportName32 {} +:local(.exportName33) :local(.exportName34) { + composes: exportName32; +} + +/* TODO bug no report */ +/* error-composes-not-allowed-in-simple */ +.exportName35 {} +body { + composes: exportName35; +} + +/* error-composes-not-allowed-in-wrong-local */ +.exportName36 {} +:local(.exportName37.exportName38) { + composes: exportName36; +} + +/* error-composes-not-defined-class */ +:local(.exportName39) { + compose-with: exportName40; +} + +/* TODO bug no report */ +/* error-multiple-nested-media */ +:local(.exportName41) { + color: blue; +} + +:local(.exportName42) { + display: grid; + + @media (orientation: landscape) { + grid-auto-flow: column; + + @media (min-width: 1024px) { + composes: exportName41; + } + } +} + +/* TODO bug no report */ +/* error-not-allowed-in-local */ +:local(body) { + color: red; +} + +/* TODO bug no report */ +/* error-when-attribute-is-href */ +:local(.exportName42[href^="https"]) { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-target */ +:local(.exportName43[target="_blank"]) { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-title */ +:local(.exportName44[title="flower"]) { + color: blue; +} + +/* TODO bug no report */ +/* error-when-attribute-is-title */ +:local(.exportName45[type="text"]) { + color: blue; +} + +/* escape-sequence */ +:local(.smile) { + color: red; +} + +:local(.smile) :local(.smile) { + color: red; +} + +:local(.smile) :local(.smile) :local(.smile) { + color: red; +} + +:local(.smile_with_A) { + color: red; +} + +.\1F600 :local(.smile) { + color: red; +} + +:local(.smile) .\1F600 { + color: red; +} + +.\1F600 :local(.smile) .\1F600 { + color: red; +} + +.\1F600 :local(.smile_with_A) .\1F600 { + color: red; +} + +#\1F600 :local(#smile) #\1F600 { + color: red; +} + +#\1F600 :local(#smile_with_A) #\1F600 { + color: red; +} + +.a :local(.smile) b { + color: red; +} + +:local(.smile) > :local(.smile) > :local(.smile) { + color: red; +} + +.\1F600 :local(.smile) { + color: red; +} + +.\1F600:local(.smile) { + color: red; +} + +.\1F600 :local(.smile) { + color: red; +} + +:local(.smile) .a { + color: red; +} + +:local(.smile).a { + color: red; +} + +.a :local(.smile) { + color: red; +} + +.a:local(.smile) { + color: red; +} + +/* export-child-class */ +:local(.exportName46) { + color: red; +} + +:local(.exportName46) h1 { + color: blue; +} + +/* export-class-attribute */ +:local(.exportName47) { + color: red; +} + +:local(.exportName48) { + color: green; +} + +.exportName48[class="exportName47"] { + color: blue; +} + +:local(.exportName48[class="exportName47"]) { + color: blue; +} + +:local(.exportName48[ class = "exportName47" ]) { + color: blue; +} + +:local(.exportName48[ class = exportName47 ]) { + color: blue; +} + +:local(.exportName48[class~="exportName47"]) { + color: blue; +} + +:local(.exportName48[ class ~= "exportName47" ]) { + color: blue; +} + +:local(.exportName48[ class ~= exportName47 ]) { + color: blue; +} + +:global(.globalClass[class="otherGlobalClass"]) { + color: blue; +} + +:global(.globaClass[class~="otherGlobalClass"]) { + color: blue; +} + +:local(.exportName49[class="exportName47"]) { + color: blue; +} + +/* export-difficult */ +@keyframes :local(fade-in) { + from { + opacity: 0; + } +} + +@-webkit-keyframes :local(fade-out) { + to { + opacity: 0; + } +} + +:local(.fadeIn) { + animation: :local(fade-in) 5s,/* some, :local(comment) */ + :local(fade-out) 1s :local(wrong); + content: :local(fade-in), wrong, "difficult, :local(wrong)" :local(wrong); +} + +/* export-global-class */ +.exportName50 { + color: green; +} + +.exportName50:hover { + color: red; +} + +@media screen { + body { + background: red; + } +} + +:local(.exportName51) { + color: blue; +} + +/* export-keyframes */ +@keyframes :local(fade-in-export) { + from { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes fade-export { + from { + opacity: 0.5; + } +} + +:local(.fadeIn-export) { + animation-name: :local(fade-in-export); +} + +:local(.fadeIn-export) { + animation: 2s :local(fade-in-export); +} + +:local(.fadeIn-export) { + animation: :local(fade-in-export) 2s; +} + +/* export-keywords-selector */ +:local(.constructor) { + color: green; +} + +:local(.toString) { + color: red; +} + +/* export-multiple-classes */ +:local(.exportName52) :local(.exportName53) { + color: green; +} + +:local(.exportName52):local(.exportName53) { + color: red; +} + +/* export-nested-class */ +:local(.exportName54):not(:local(.exportName55).global) { + color: green; +} + +:local(.exportName54):has(:local(.exportName55), :local(.exportName56)) { + color: red; +} + +/* export-with-composes-imported-class */ +:import("./import.modules.css") { + imported_otherClass: otherClass; +} + +:local(.exportName76) { + composes: imported_otherClass; + color: green; +} + +/* export-with-composes */ +:local(.exportName57) { background: red; } +:local(.exportName58) { compose-with: exportName57; color: green; } +:local(.exportName59) { compose-with: exportName58; color: green; } + + /* export-with-global-composes */ +:global(.otherClass) { background: red; } +:global(.andAgain) { font-size: 2em; } +:global(.aThirdClass) { color: red; } +:local(.exportName60-function-syntax) { compose-with: global(otherClass) global(andAgain); compose-with: global(aThirdClass); color: green; } +:local(.exportName60) { compose-with: otherClass andAgain from global; compose-with: aThirdClass from global; color: green; } + +/* export-with-multiple-composes */ +:local(.exportName63) { background: red; } +:local(.exportName64) { font-size: 2em; } +:local(.exportName65) { color: red; } +:local(.exportName66) { compose-with: exportName63 exportName64; compose-with: exportName65; color: green; } + +/* export-with-transitive-composes */ +:local(.exportName67) { + font-size: 2em; +} +:local(.exportName68) { + composes: exportName67; + background: red; +} +:local(.exportName69) { + composes: exportName68; + color: green; +} + +/* Not related to us */ +/* ignore-custom-property-set */ +:root { + --title-align: center; + --sr-only: { + position: absolute; + } +} + +/* multiple-composes */ +:import("abcd.modules.css") { + i__i_a_0: a; + i__i_b_0: b; + i__i_c_0: c; + i__i_d_0: d; +} +:local(.class) { + composes: i__i_a_0 i__i_b_0, i__i_c_0, global(d) global(e), global(f), i__i_d_0; + color: red; +} + +/* nested-rule */ +:root { + --test: { + --test: foo; + --bar: 1; + } +} + +/* We pass this limitation, order can be any now */ +/* export-with-composes-broken-order */ +:local(.exportName70) { compose-with: exportName71; color: green; } +:local(.exportName71) { compose-with: exportName72; color: green; } +:local(.exportName72) { background: red; } + +/* transitive composes */ +.exportName73 { composes: bar from "./classes.css"; color: green; } +.exportName74 { composes: exportName73; color: green; } +.exportName75 { color: red } +.exportName74 { composes: exportName75; color: green; } +.exportName74 { composes: my-global from global; color: green; } + +/* deep transitive composes */ +:import("abcd.modules.css") { + i__i_a_0: a; + i__i_b_0: b; + i__i_c_0: c; + i__i_d_0: d; +} +:local(.exportName77) { + composes: i__i_a_0 i__i_b_0, i__i_c_0, global(d) global(e), global(f), i__i_d_0; + color: red; +} + +:local(.exportName78) {} + +:local(.exportName79) { + composes: class, bar; +} diff --git a/test/configCases/css/postcss-modules-plugins/postcss-modules-values.modules.css b/test/configCases/css/postcss-modules-plugins/postcss-modules-values.modules.css new file mode 100644 index 00000000000..e97916fc93b --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/postcss-modules-values.modules.css @@ -0,0 +1,144 @@ +/* postcss-modules-values */ + +/* should export a constant */ +@value exportName blue; + +/* Should pass for us, not a warning */ +/* gives a warnings when there is no semicolon between lines */ +@value exportName1 blue @value exportName2 yellow; + +/* Should pass for us, not a warning */ +/* gives a warnings on empty value */ +@value v-comment:; + +/* Should pass for us, not a warning */ +/* gives a warnings on empty value with comment */ +@value v-comment-other:/* comment */; + +/* should export a more complex constant */ +@value exportName2: (max-width: 599px); + +/* should replace constants within the file */ +@value exportName3: red; +.foo-replace { color: exportName3; } + +/* should replace constants within the file #1 */ +@value exportName4: red; +.foo-replace-1 { &.bar { color: exportName4; } } + +/* should replace constants within the file #2 */ +@value exportName5: red; +.foo-replace-2 { @media (min-width: 1024px) { &.bar { color: exportName5; } } } + +/* should replace constants within the file #3 */ +@value exportName6: red; +.foo-replace-3 { @media (min-width: 1024px) { &.bar { @media (min-width: 1024px) { color: exportName6; } } } } + +/* should replace constants within the file #4 */ +@value exportName7: 40px; +@value exportName8: 36px; +.foo-replace-4 { height: exportName7; height: exportName8; } + +/* should replace selectors within the file */ +@value exportName9: fuchsia; +.exportName9 { color: exportName9; } + +/* should replace selectors within the file #1 */ +@value exportName10: red; +#exportName10 { color: exportName10; } + +/* should replace selectors within the file #2 */ +@value exportName11: red; +.exportName11 > .exportName11 { color: exportName11; } + +/* should import and re-export a simple constant */ +@value exportName12 from "./colors.css"; + +/* should import a simple constant and replace usages */ +@value exportNameRed from "./colors.modules.css"; +.exportName13 { color: exportNameRed; } + +/* should import and alias a constant and replace usages */ +@value exportNameBlue as red from "./colors.modules.css"; +.exportName14 { color: red; } + +/* should import multiple from a single file */ +@value otherBlue, otherRed from "./colors.modules.css"; +.exportName15 { color: otherRed; } +.exportName16 { color: otherBlue } + +/* should import from a definition */ +@value colors: "./colors.modules.css"; +@value otherBlue from colors; +.exportName17 { color: otherBlue; } + +/* should only allow values for paths if defined in the right order - throw an error */ +@value wrongOrder from colors; +@value colors: "./colors.css"; + +/* should allow transitive values */ +@value exportName18: #FFF; +@value exportName19: exportName18; +.exportName20 { color: exportName19; } + +/* TODO bug */ +/* should allow transitive values within calc */ +@value exportName22: 10px; +@value exportName23: calc(exportName22 * 2); +.exportName24 { margin: exportName23; } + +/* should preserve import order */ +@value a from "./a.modules.css"; +@value b from "./b.modules.css"; + +/* should allow custom-property-style names */ +@value --red from "./colors.modules.css"; +.exportName25 { color: --red; } + +/* should allow all colour types */ +@value named: aqua; +@value char3 #0f0; +@value char6 #00ff00; +@value rgba rgba(34, 12, 64, 0.3); +@value hsla hsla(220, 13.0%, 18.0%, 1); +.exportName26 { + color: named; + background-color: char3; + border-top-color: char6; + border-bottom-color: rgba; + outline-color: hsla; +} + +/* should import multiple from a single file on multiple lines */ +@value ( + namedBlue, + namedRed +) from "./colors.modules.css"; +.exportName27 { color: namedBlue; } +.exportName28 { color: namedRed } + +/* should allow definitions with commas in them */ +@value coolShadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; +.exportName29 { box-shadow: coolShadow; } + +/* should allow values with nested parentheses */ +@value parentheses: color(red lightness(50%)); +.exportName30 { + color: parentheses +} + +/* should work with custom properties */ +@value v-color: my-custom-value; +:root { --my-own-color: v-color; } + +/* should work with empty custom properties */ +@value v-empty-1: ; +:root { --color:v-empty-1; } + +/* should work with empty custom properties #2 */ +@value v-empty-2: ; +:root { --color:v-empty-2; } + +/* should work with empty custom properties #3 */ +@value v-empty: /* comment */; +:root { --color:v-empty; } diff --git a/test/configCases/css/postcss-modules-plugins/test.config.js b/test/configCases/css/postcss-modules-plugins/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/postcss-modules-plugins/warnings.js b/test/configCases/css/postcss-modules-plugins/warnings.js new file mode 100644 index 00000000000..a5d0a632a6a --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/warnings.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = [ + /Composition is only allowed when selector is single local class name not in "exportName19", "exportName19-nested", "exportName19-nested-nested"/, + /Incorrect composition, expected global keyword or string value/, + /Incorrect composition, expected class named/, + /Composition is only allowed when selector is single local class name not in "exportName19", "exportName20"/, + /Composition is only allowed when selector is single local class name not in "exportName22", "exportName23"/, + /Composition is only allowed when selector is single local class name not in "exportName25", "exportName26"/, + /Composition is only allowed when selector is single local class name not in "exportName28", "exportName29"/, + /Composition is only allowed when selector is single local class name not in "exportName33", "exportName34"/, + /Composition is only allowed when selector is single local class name not in "exportName37", "exportName38"/, + /Self-referencing name "exportName40" not found/, + /Missing whitespace after ':local' in ':local.b \{'/, + /Missing whitespace after ':global' in ':global, .foobar :global \{'/, + /Missing whitespace after ':global' in ':global.bar \{'/ +]; diff --git a/test/configCases/css/postcss-modules-plugins/webpack.config.js b/test/configCases/css/postcss-modules-plugins/webpack.config.js new file mode 100644 index 00000000000..4fbe4df75ca --- /dev/null +++ b/test/configCases/css/postcss-modules-plugins/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + }, + module: { + rules: [ + { + test: /postcss-modules-local-by-default\.global\.modules\.css$/, + type: "css/global" + }, + { + test: /postcss-modules-local-by-default\.local\.modules\.css$/, + type: "css/module" + }, + { + test: /postcss-modules-local-by-default\.pure\.modules\.css$/, + // Pure is like a local but more strict + type: "css/module" + } + ] + } +}; diff --git a/test/configCases/css/prefer-relative-css-import/bar.modules.css b/test/configCases/css/prefer-relative-css-import/bar.modules.css new file mode 100644 index 00000000000..212af39cfba --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/bar.modules.css @@ -0,0 +1,7 @@ +body { + color: red; +} + +.bar { + color: red; +} diff --git a/test/configCases/css/prefer-relative-css-import/foo.css b/test/configCases/css/prefer-relative-css-import/foo.css new file mode 100644 index 00000000000..bb644f91459 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/foo.css @@ -0,0 +1,7 @@ +body { + background: red; +} + +.foo { + color: red; +} diff --git a/test/configCases/css/prefer-relative-css-import/index.js b/test/configCases/css/prefer-relative-css-import/index.js new file mode 100644 index 00000000000..b8be250d802 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/index.js @@ -0,0 +1,14 @@ +import * as styles1 from "./style.less"; +import * as styles2 from "./style.modules.less"; + +it("should prefer relative", () => { + expect(styles1).toEqual({}); + expect(styles2).toEqual(nsObj({ + "style-module": "style_modules_less-style-module", + })); + + const style = getComputedStyle(document.body); + + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("color")).toBe(" red"); +}); diff --git a/test/configCases/css/prefer-relative-css-import/node_modules/bar.modules.css/package.json b/test/configCases/css/prefer-relative-css-import/node_modules/bar.modules.css/package.json new file mode 100644 index 00000000000..bfdbb88698b --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/node_modules/bar.modules.css/package.json @@ -0,0 +1,4 @@ +{ + "name": "bar.modules.css", + "main": "style.css" +} diff --git a/test/configCases/css/prefer-relative-css-import/node_modules/bar.modules.css/style.css b/test/configCases/css/prefer-relative-css-import/node_modules/bar.modules.css/style.css new file mode 100644 index 00000000000..36505138bc9 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/node_modules/bar.modules.css/style.css @@ -0,0 +1,3 @@ +body { + color: blue; +} diff --git a/test/configCases/css/prefer-relative-css-import/node_modules/foo.css/package.json b/test/configCases/css/prefer-relative-css-import/node_modules/foo.css/package.json new file mode 100644 index 00000000000..f273efd2294 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/node_modules/foo.css/package.json @@ -0,0 +1,4 @@ +{ + "name": "foo.css", + "main": "style.css" +} diff --git a/test/configCases/css/prefer-relative-css-import/node_modules/foo.css/style.css b/test/configCases/css/prefer-relative-css-import/node_modules/foo.css/style.css new file mode 100644 index 00000000000..eedeb9d0ff9 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/node_modules/foo.css/style.css @@ -0,0 +1,3 @@ +body { + background: blue; +} diff --git a/test/configCases/css/prefer-relative-css-import/style.less b/test/configCases/css/prefer-relative-css-import/style.less new file mode 100644 index 00000000000..7aed5ec6680 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/style.less @@ -0,0 +1,5 @@ +@import 'foo.css'; + +.style { + color: red; +} diff --git a/test/configCases/css/prefer-relative-css-import/style.modules.less b/test/configCases/css/prefer-relative-css-import/style.modules.less new file mode 100644 index 00000000000..69dc14ca454 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/style.modules.less @@ -0,0 +1,5 @@ +@import 'bar.modules.css'; + +.style-module { + color: red; +} diff --git a/test/configCases/css/prefer-relative-css-import/test.config.js b/test/configCases/css/prefer-relative-css-import/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/prefer-relative-css-import/webpack.config.js b/test/configCases/css/prefer-relative-css-import/webpack.config.js new file mode 100644 index 00000000000..63eb2a1656d --- /dev/null +++ b/test/configCases/css/prefer-relative-css-import/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + module: { + rules: [ + { + test: /\.less$/, + use: "less-loader", + type: "css/auto" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/prefer-relative/bar.modules.css b/test/configCases/css/prefer-relative/bar.modules.css new file mode 100644 index 00000000000..212af39cfba --- /dev/null +++ b/test/configCases/css/prefer-relative/bar.modules.css @@ -0,0 +1,7 @@ +body { + color: red; +} + +.bar { + color: red; +} diff --git a/test/configCases/css/prefer-relative/foo.css b/test/configCases/css/prefer-relative/foo.css new file mode 100644 index 00000000000..bb644f91459 --- /dev/null +++ b/test/configCases/css/prefer-relative/foo.css @@ -0,0 +1,7 @@ +body { + background: red; +} + +.foo { + color: red; +} diff --git a/test/configCases/css/prefer-relative/index.js b/test/configCases/css/prefer-relative/index.js new file mode 100644 index 00000000000..a994215dd83 --- /dev/null +++ b/test/configCases/css/prefer-relative/index.js @@ -0,0 +1,14 @@ +import * as styles1 from "./style.css"; +import * as styles2 from "./style.modules.css"; + +it("should prefer relative", () => { + expect(styles1).toEqual({}); + expect(styles2).toEqual(nsObj({ + "style-module": "style_modules_css-style-module", + })); + + const style = getComputedStyle(document.body); + + expect(style.getPropertyValue("background")).toBe(" red"); + expect(style.getPropertyValue("color")).toBe(" red"); +}); diff --git a/test/configCases/css/prefer-relative/node_modules/bar.modules.css/package.json b/test/configCases/css/prefer-relative/node_modules/bar.modules.css/package.json new file mode 100644 index 00000000000..bfdbb88698b --- /dev/null +++ b/test/configCases/css/prefer-relative/node_modules/bar.modules.css/package.json @@ -0,0 +1,4 @@ +{ + "name": "bar.modules.css", + "main": "style.css" +} diff --git a/test/configCases/css/prefer-relative/node_modules/bar.modules.css/style.css b/test/configCases/css/prefer-relative/node_modules/bar.modules.css/style.css new file mode 100644 index 00000000000..36505138bc9 --- /dev/null +++ b/test/configCases/css/prefer-relative/node_modules/bar.modules.css/style.css @@ -0,0 +1,3 @@ +body { + color: blue; +} diff --git a/test/configCases/css/prefer-relative/node_modules/foo.css/package.json b/test/configCases/css/prefer-relative/node_modules/foo.css/package.json new file mode 100644 index 00000000000..f273efd2294 --- /dev/null +++ b/test/configCases/css/prefer-relative/node_modules/foo.css/package.json @@ -0,0 +1,4 @@ +{ + "name": "foo.css", + "main": "style.css" +} diff --git a/test/configCases/css/prefer-relative/node_modules/foo.css/style.css b/test/configCases/css/prefer-relative/node_modules/foo.css/style.css new file mode 100644 index 00000000000..eedeb9d0ff9 --- /dev/null +++ b/test/configCases/css/prefer-relative/node_modules/foo.css/style.css @@ -0,0 +1,3 @@ +body { + background: blue; +} diff --git a/test/configCases/css/prefer-relative/style.css b/test/configCases/css/prefer-relative/style.css new file mode 100644 index 00000000000..7aed5ec6680 --- /dev/null +++ b/test/configCases/css/prefer-relative/style.css @@ -0,0 +1,5 @@ +@import 'foo.css'; + +.style { + color: red; +} diff --git a/test/configCases/css/prefer-relative/style.modules.css b/test/configCases/css/prefer-relative/style.modules.css new file mode 100644 index 00000000000..69dc14ca454 --- /dev/null +++ b/test/configCases/css/prefer-relative/style.modules.css @@ -0,0 +1,5 @@ +@import 'bar.modules.css'; + +.style-module { + color: red; +} diff --git a/test/configCases/css/prefer-relative/test.config.js b/test/configCases/css/prefer-relative/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/prefer-relative/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/prefer-relative/webpack.config.js b/test/configCases/css/prefer-relative/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/prefer-relative/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk1-a.css b/test/configCases/css/prefetch-preload-module-only-css/chunk1-a.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/chunk1-a.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk1-a.mjs b/test/configCases/css/prefetch-preload-module-only-css/chunk1-a.mjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk1-b.mjs b/test/configCases/css/prefetch-preload-module-only-css/chunk1-b.mjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk1-c.mjs b/test/configCases/css/prefetch-preload-module-only-css/chunk1-c.mjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk1.css b/test/configCases/css/prefetch-preload-module-only-css/chunk1.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/chunk1.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk1.mjs b/test/configCases/css/prefetch-preload-module-only-css/chunk1.mjs new file mode 100644 index 00000000000..ade3f333705 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/chunk1.mjs @@ -0,0 +1,6 @@ +export default function() { + import(/* webpackChunkName: "chunk1-a" */ "./chunk1-a.mjs"); + import(/* webpackChunkName: "chunk1-b" */ "./chunk1-b.mjs"); + import(/* webpackPreload: true, webpackChunkName: "chunk1-a-css" */ "./chunk1-a.css"); + import(/* webpackChunkName: "chunk1-c" */ "./chunk1-c.mjs"); +} diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk2.css b/test/configCases/css/prefetch-preload-module-only-css/chunk2.css new file mode 100644 index 00000000000..3b4cc03b68a --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/chunk2.css @@ -0,0 +1,3 @@ +a { + color: blue; +} diff --git a/test/configCases/css/prefetch-preload-module-only-css/chunk2.mjs b/test/configCases/css/prefetch-preload-module-only-css/chunk2.mjs new file mode 100644 index 00000000000..efa843a62fb --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/chunk2.mjs @@ -0,0 +1,4 @@ +export default function() { + import(/* webpackChunkName: "chunk1-a" */ "./chunk1-a.mjs"); + import(/* webpackChunkName: "chunk1-b" */ "./chunk1-b.mjs"); +} diff --git a/test/configCases/css/prefetch-preload-module-only-css/index.mjs b/test/configCases/css/prefetch-preload-module-only-css/index.mjs new file mode 100644 index 00000000000..6e881e5c99a --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/index.mjs @@ -0,0 +1,74 @@ +// This config need to be set on initial evaluation to be effective + +__webpack_nonce__ = "nonce"; +__webpack_public_path__ = "https://example.com/public/path/"; + +it("should prefetch and preload child chunks on chunk load", () => { + let link; + + expect(document.head._children).toHaveLength(2); + + // Test prefetch + link = document.head._children[0]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("style"); + expect(link.href).toBe("https://example.com/public/path/chunk2-css.css"); + + link = document.head._children[1]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("script"); + expect(link.href).toBe("https://example.com/public/path/chunk2-css.mjs"); + + const promise = import( + /* webpackChunkName: "chunk1" */ "./chunk1.mjs" + ); + + expect(document.head._children).toHaveLength(4); + + link = document.head._children[2]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("preload"); + expect(link.as).toBe("style"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a-css.css"); + + link = document.head._children[3]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("modulepreload"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a-css.mjs"); + + return promise.then(() => { + expect(document.head._children).toHaveLength(4); + + const promise2 = import( + /* webpackChunkName: "chunk1" */ "./chunk1.mjs" + ); + + const promise3 = import(/* webpackChunkNafme: "chunk2" */ "./chunk2.mjs"); + + return promise3.then(() => { + expect(document.head._children).toHaveLength(4); + + const promise4 = import(/* webpackChunkName: "chunk1-css" */ "./chunk1.css"); + + expect(document.head._children).toHaveLength(5); + + link = document.head._children[4]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("stylesheet"); + expect(link.href).toBe("https://example.com/public/path/chunk1-css.css"); + expect(link.crossOrigin).toBe("anonymous"); + + const promise5 = import(/* webpackChunkName: "chunk2-css", webpackPrefetch: true */ "./chunk2.css"); + + expect(document.head._children).toHaveLength(6); + + link = document.head._children[5]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("stylesheet"); + expect(link.href).toBe("https://example.com/public/path/chunk2-css.css"); + expect(link.crossOrigin).toBe("anonymous"); + }); + }); +}); diff --git a/test/configCases/css/prefetch-preload-module-only-css/webpack.config.js b/test/configCases/css/prefetch-preload-module-only-css/webpack.config.js new file mode 100644 index 00000000000..3e545f2e498 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module-only-css/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./index.mjs", + experiments: { + outputModule: true, + css: true + }, + name: "esm", + target: "web", + output: { + publicPath: "", + module: true, + filename: "bundle0.mjs", + chunkFilename: "[name].mjs", + crossOriginLoading: "anonymous", + chunkFormat: "module" + }, + performance: { + hints: false + }, + optimization: { + minimize: false + } +}; diff --git a/test/configCases/css/prefetch-preload-module/chunk1-a.css b/test/configCases/css/prefetch-preload-module/chunk1-a.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/chunk1-a.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/css/prefetch-preload-module/chunk1-a.mjs b/test/configCases/css/prefetch-preload-module/chunk1-a.mjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/prefetch-preload-module/chunk1-b.mjs b/test/configCases/css/prefetch-preload-module/chunk1-b.mjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/prefetch-preload-module/chunk1-c.mjs b/test/configCases/css/prefetch-preload-module/chunk1-c.mjs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/prefetch-preload-module/chunk1.css b/test/configCases/css/prefetch-preload-module/chunk1.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/chunk1.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/css/prefetch-preload-module/chunk1.mjs b/test/configCases/css/prefetch-preload-module/chunk1.mjs new file mode 100644 index 00000000000..eedf378375d --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/chunk1.mjs @@ -0,0 +1,6 @@ +export default function() { + import(/* webpackPrefetch: true, webpackChunkName: "chunk1-a" */ "./chunk1-a.mjs"); + import(/* webpackPreload: true, webpackChunkName: "chunk1-b" */ "./chunk1-b.mjs"); + import(/* webpackPreload: true, webpackChunkName: "chunk1-a-css" */ "./chunk1-a.css"); + import(/* webpackPrefetch: 10, webpackChunkName: "chunk1-c" */ "./chunk1-c.mjs"); +} diff --git a/test/configCases/css/prefetch-preload-module/chunk2.css b/test/configCases/css/prefetch-preload-module/chunk2.css new file mode 100644 index 00000000000..3b4cc03b68a --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/chunk2.css @@ -0,0 +1,3 @@ +a { + color: blue; +} diff --git a/test/configCases/css/prefetch-preload-module/chunk2.mjs b/test/configCases/css/prefetch-preload-module/chunk2.mjs new file mode 100644 index 00000000000..1c565540ef9 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/chunk2.mjs @@ -0,0 +1,4 @@ +export default function() { + import(/* webpackPrefetch: true, webpackChunkName: "chunk1-a" */ "./chunk1-a.mjs"); + import(/* webpackPreload: true, webpackChunkName: "chunk1-b" */ "./chunk1-b.mjs"); +} diff --git a/test/configCases/css/prefetch-preload-module/index.mjs b/test/configCases/css/prefetch-preload-module/index.mjs new file mode 100644 index 00000000000..86b97ef2ea3 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/index.mjs @@ -0,0 +1,103 @@ +// This config need to be set on initial evaluation to be effective +__webpack_nonce__ = "nonce"; +__webpack_public_path__ = "https://example.com/public/path/"; + +it("should prefetch and preload child chunks on chunk load", () => { + let link, script; + + expect(document.head._children).toHaveLength(3); + + // Test preload + link = document.head._children[0]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("script"); + expect(link.href).toBe("https://example.com/public/path/chunk1.mjs"); + + // Test prefetch + link = document.head._children[1]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("style"); + expect(link.href).toBe("https://example.com/public/path/chunk2-css.css"); + + link = document.head._children[2]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("script"); + expect(link.href).toBe("https://example.com/public/path/chunk2-css.mjs"); + + const promise = import( + /* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1.mjs" + ); + + expect(document.head._children).toHaveLength(6); + + // Test normal script loading + link = document.head._children[3]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("preload"); + expect(link.as).toBe("style"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a-css.css"); + + link = document.head._children[4]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("modulepreload"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a-css.mjs"); + + link = document.head._children[5]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("modulepreload"); + expect(link.href).toBe("https://example.com/public/path/chunk1-b.mjs"); + + return promise.then(() => { + expect(document.head._children).toHaveLength(8); + + link = document.head._children[6]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("script"); + expect(link.href).toBe("https://example.com/public/path/chunk1-c.mjs"); + + link = document.head._children[7]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + expect(link.as).toBe("script"); + expect(link.href).toBe("https://example.com/public/path/chunk1-a.mjs"); + + const promise2 = import( + /* webpackChunkName: "chunk1", webpackPrefetch: true */ "./chunk1.mjs" + ); + + // Loading chunk1 again should not trigger prefetch/preload + expect(document.head._children).toHaveLength(8); + + const promise3 = import(/* webpackChunkName: "chunk2" */ "./chunk2.mjs"); + + expect(document.head._children).toHaveLength(8); + + return promise3.then(() => { + expect(document.head._children).toHaveLength(8); + + const promise4 = import(/* webpackChunkName: "chunk1-css" */ "./chunk1.css"); + + expect(document.head._children).toHaveLength(9); + + link = document.head._children[8]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("stylesheet"); + expect(link.href).toBe("https://example.com/public/path/chunk1-css.css"); + expect(link.crossOrigin).toBe("anonymous"); + + const promise5 = import(/* webpackChunkName: "chunk2-css", webpackPrefetch: true */ "./chunk2.css"); + + expect(document.head._children).toHaveLength(10); + + link = document.head._children[9]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("stylesheet"); + expect(link.href).toBe("https://example.com/public/path/chunk2-css.css"); + expect(link.crossOrigin).toBe("anonymous"); + }); + }); +}); diff --git a/test/configCases/css/prefetch-preload-module/webpack.config.js b/test/configCases/css/prefetch-preload-module/webpack.config.js new file mode 100644 index 00000000000..3e545f2e498 --- /dev/null +++ b/test/configCases/css/prefetch-preload-module/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./index.mjs", + experiments: { + outputModule: true, + css: true + }, + name: "esm", + target: "web", + output: { + publicPath: "", + module: true, + filename: "bundle0.mjs", + chunkFilename: "[name].mjs", + crossOriginLoading: "anonymous", + chunkFormat: "module" + }, + performance: { + hints: false + }, + optimization: { + minimize: false + } +}; diff --git a/test/configCases/css/pseudo-export/imported.js b/test/configCases/css/pseudo-export/imported.js new file mode 100644 index 00000000000..c00487d795d --- /dev/null +++ b/test/configCases/css/pseudo-export/imported.js @@ -0,0 +1,3 @@ +import * as style from "./style.module.css?imported"; + +export default Object(style); diff --git a/test/configCases/css/pseudo-export/index.js b/test/configCases/css/pseudo-export/index.js new file mode 100644 index 00000000000..a5544176023 --- /dev/null +++ b/test/configCases/css/pseudo-export/index.js @@ -0,0 +1,58 @@ +it("should allow to dynamic import a css module", done => { + __non_webpack_require__("./style_module_css.bundle0.js"); + import("./style.module.css").then(x => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); + +it("should allow to reexport a css module", done => { + __non_webpack_require__("./reexported_js.bundle0.js"); + import("./reexported").then(x => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef" + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); + +it("should allow to import a css module", done => { + __non_webpack_require__("./imported_js.bundle0.js"); + import("./imported").then(({ default: x }) => { + try { + expect(x).toEqual( + nsObj({ + a: "a", + abc: "a b c", + comments: "abc/****/ /* hello world *//****/ def", + whitespace: "abc\n\tdef", + default: "default" + }) + ); + } catch (e) { + return done(e); + } + done(); + }, done); +}); diff --git a/test/configCases/css/pseudo-export/reexported.js b/test/configCases/css/pseudo-export/reexported.js new file mode 100644 index 00000000000..d50dc4c5003 --- /dev/null +++ b/test/configCases/css/pseudo-export/reexported.js @@ -0,0 +1 @@ +export * from "./style.module.css?reexported"; diff --git a/test/configCases/css/pseudo-export/style.module.css b/test/configCases/css/pseudo-export/style.module.css new file mode 100644 index 00000000000..24f1786c047 --- /dev/null +++ b/test/configCases/css/pseudo-export/style.module.css @@ -0,0 +1,25 @@ +:export { + a: a; +} + +:export { + abc: a b c; + comments: abc/****/ /* hello world *//****/ def +} + +:export + + +{ + + + whitespace + + : + + abc + def + +} + +:export{default:default} diff --git a/test/configCases/css/pseudo-export/webpack.config.js b/test/configCases/css/pseudo-export/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/pseudo-export/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/pseudo-import/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/pseudo-import/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..0c8454af6ba --- /dev/null +++ b/test/configCases/css/pseudo-import/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,170 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css pseudo-import exported tests should compile 1`] = ` +Array [ + "/*!********************************!*\\\\ + !*** css ./export.modules.css ***! + \\\\********************************/ + +/*!*********************************!*\\\\ + !*** css ./library.modules.css ***! + \\\\*********************************/ + +/*!*******************************!*\\\\ + !*** css ./after.modules.css ***! + \\\\*******************************/ + +/*!******************************!*\\\\ + !*** css ./vars.modules.css ***! + \\\\******************************/ + +/*!**********************************!*\\\\ + !*** css ./reexport.modules.css ***! + \\\\**********************************/ + +.reexport_modules_css_5b81-className { + color: red; + display: block; +} + + +/*!********************************!*\\\\ + !*** css ./vars-1.modules.css ***! + \\\\********************************/ + +/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ + + +.style_modules_css-class { + color: red; + background: red; +} + + +.style_modules_css-class {background: red} + +.style_modules_css-class { + color: red; + color: red; + color: red; + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class {color: red} + + +.style_modules_css-class { + color: red, red, func() ; +} + +.style_modules_css-nest { + :import(\\"./export.modules.css\\") { + unknown: unknown; + } + + :export { + unknown: unknown; + } + + unknown: unknown; +} + + +/*# sourceMappingURL=bundle0.css.map*/", + "/*!********************************!*\\\\ + !*** css ./export.modules.css ***! + \\\\********************************/ + +/*!*********************************!*\\\\ + !*** css ./library.modules.css ***! + \\\\*********************************/ + +/*!*******************************!*\\\\ + !*** css ./after.modules.css ***! + \\\\*******************************/ + +/*!******************************!*\\\\ + !*** css ./vars.modules.css ***! + \\\\******************************/ + +/*!**********************************!*\\\\ + !*** css ./reexport.modules.css ***! + \\\\**********************************/ + +.reexport_modules_css_5b81-className { + color: red; + display: block; +} + + +/*!********************************!*\\\\ + !*** css ./vars-1.modules.css ***! + \\\\********************************/ + +/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ + + +.style_modules_css-class { + color: red; + background: red; +} + + +.style_modules_css-class {background: red} + +.style_modules_css-class { + color: red; + color: red; + color: red; + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class {color: red} + + +.style_modules_css-class { + color: red, red, func() ; +} + +.style_modules_css-nest { + :import(\\"./export.modules.css\\") { + unknown: unknown; + } + + :export { + unknown: unknown; + } + + unknown: unknown; +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/pseudo-import/__snapshots__/ConfigTest.snap b/test/configCases/css/pseudo-import/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..945689de519 --- /dev/null +++ b/test/configCases/css/pseudo-import/__snapshots__/ConfigTest.snap @@ -0,0 +1,170 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css pseudo-import exported tests should compile 1`] = ` +Array [ + "/*!********************************!*\\\\ + !*** css ./export.modules.css ***! + \\\\********************************/ + +/*!*********************************!*\\\\ + !*** css ./library.modules.css ***! + \\\\*********************************/ + +/*!*******************************!*\\\\ + !*** css ./after.modules.css ***! + \\\\*******************************/ + +/*!******************************!*\\\\ + !*** css ./vars.modules.css ***! + \\\\******************************/ + +/*!**********************************!*\\\\ + !*** css ./reexport.modules.css ***! + \\\\**********************************/ + +.reexport_modules_css_5b81-className { + color: red; + display: block; +} + + +/*!********************************!*\\\\ + !*** css ./vars-1.modules.css ***! + \\\\********************************/ + +/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ + + +.style_modules_css-class { + color: red; + background: red; +} + + +.style_modules_css-class {background: red} + +.style_modules_css-class { + color: red; + color: red; + color: red; + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class {color: red} + + +.style_modules_css-class { + color: red, red, func() ; +} + +.style_modules_css-nest { + :import(\\"./export.modules.css\\") { + unknown: unknown; + } + + :export { + unknown: unknown; + } + + unknown: unknown; +} + + +/*# sourceMappingURL=bundle0.css.map*/", + "/*!********************************!*\\\\ + !*** css ./export.modules.css ***! + \\\\********************************/ + +/*!*********************************!*\\\\ + !*** css ./library.modules.css ***! + \\\\*********************************/ + +/*!*******************************!*\\\\ + !*** css ./after.modules.css ***! + \\\\*******************************/ + +/*!******************************!*\\\\ + !*** css ./vars.modules.css ***! + \\\\******************************/ + +/*!**********************************!*\\\\ + !*** css ./reexport.modules.css ***! + \\\\**********************************/ + +.reexport_modules_css_5b81-className { + color: red; + display: block; +} + + +/*!********************************!*\\\\ + !*** css ./vars-1.modules.css ***! + \\\\********************************/ + +/*!*******************************!*\\\\ + !*** css ./style.modules.css ***! + \\\\*******************************/ + + +.style_modules_css-class { + color: red; + background: red; +} + + +.style_modules_css-class {background: red} + +.style_modules_css-class { + color: red; + color: red; + color: red; + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class { + color: red; +} + + +.style_modules_css-class {color: red} + + +.style_modules_css-class { + color: red, red, func() ; +} + +.style_modules_css-nest { + :import(\\"./export.modules.css\\") { + unknown: unknown; + } + + :export { + unknown: unknown; + } + + unknown: unknown; +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/pseudo-import/after.modules.css b/test/configCases/css/pseudo-import/after.modules.css new file mode 100644 index 00000000000..2c01aa6cf1c --- /dev/null +++ b/test/configCases/css/pseudo-import/after.modules.css @@ -0,0 +1,3 @@ +:export { + somevalue: red; +} diff --git a/test/configCases/css/pseudo-import/export.modules.css b/test/configCases/css/pseudo-import/export.modules.css new file mode 100644 index 00000000000..26d29938006 --- /dev/null +++ b/test/configCases/css/pseudo-import/export.modules.css @@ -0,0 +1,3 @@ +:export { + primary-color: red; +} diff --git a/test/configCases/css/pseudo-import/index.js b/test/configCases/css/pseudo-import/index.js new file mode 100644 index 00000000000..ff3c95be5ba --- /dev/null +++ b/test/configCases/css/pseudo-import/index.js @@ -0,0 +1,30 @@ +import './style.modules.css'; + +it("should compile", () => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); +}); + +it("should re-export", (done) => { + import("./reexport.modules.css").then((module) => { + try { + expect(module).toEqual(nsObj({ + "className": "reexport_modules_css_d342-className", + "primary-color": "red", + "secondary-color": "block", + })); + } catch(e) { + done(e); + return; + } + + done() + }, done) +}); diff --git a/test/configCases/css/pseudo-import/library.modules.css b/test/configCases/css/pseudo-import/library.modules.css new file mode 100644 index 00000000000..08ed1e13494 --- /dev/null +++ b/test/configCases/css/pseudo-import/library.modules.css @@ -0,0 +1,6 @@ +:export { + a: red; + -b: red; + --c: red; + _d: red; +} diff --git a/test/configCases/css/pseudo-import/reexport.modules.css b/test/configCases/css/pseudo-import/reexport.modules.css new file mode 100644 index 00000000000..edcae7e7a8a --- /dev/null +++ b/test/configCases/css/pseudo-import/reexport.modules.css @@ -0,0 +1,14 @@ +:import("./vars.modules.css") { + constructor: primary-color; + toString: secondary-color; +} + +.className { + color: constructor; + display: toString; +} + +:export { + primary-color: constructor; + secondary-color: toString; +} diff --git a/test/configCases/css/pseudo-import/style.modules.css b/test/configCases/css/pseudo-import/style.modules.css new file mode 100644 index 00000000000..49267ae7c3d --- /dev/null +++ b/test/configCases/css/pseudo-import/style.modules.css @@ -0,0 +1,67 @@ +:import( /* test */ "./export.modules.css" /* test */ ) { + IMPORTED_NAME: primary-color; +} + +:import("library.modules.css") { + i__imported_a_0: a; + i__imported__b_1: -b; + i__imported___c_2: --c; + i__imported__d_3: _d; +} + +.class { + color: IMPORTED_NAME; + background: IMPORTED_NAME; +} + + +.class {background: IMPORTED_NAME} + +.class { + color: i__imported_a_0; + color: i__imported__b_1; + color: i__imported___c_2; + color: i__imported__d_3; +} + +:import("./after.modules.css") { + something: somevalue; +} + +.class { + color: something; +} + +:import("./after.modules.css") { + again: somevalue; +} + +.class { + color: again; +} + +:import("reexport.modules.css") { + primary-color: primary-color; +} + +.class {color: primary-color} + +:import("vars-1.modules.css") { + _i_multile_values: multile-values; +} + +.class { + color: _i_multile_values ; +} + +.nest { + :import("./export.modules.css") { + unknown: unknown; + } + + :export { + unknown: unknown; + } + + unknown: unknown; +} diff --git a/test/configCases/css/pseudo-import/test.config.js b/test/configCases/css/pseudo-import/test.config.js new file mode 100644 index 00000000000..84026f61eb3 --- /dev/null +++ b/test/configCases/css/pseudo-import/test.config.js @@ -0,0 +1,13 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["reexport_modules_css.bundle0.js", "bundle0.js"]; + }, + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/pseudo-import/vars-1.modules.css b/test/configCases/css/pseudo-import/vars-1.modules.css new file mode 100644 index 00000000000..eeffd40f3e7 --- /dev/null +++ b/test/configCases/css/pseudo-import/vars-1.modules.css @@ -0,0 +1,3 @@ +:export { + multile-values: red, red, func() +} diff --git a/test/configCases/css/pseudo-import/vars.modules.css b/test/configCases/css/pseudo-import/vars.modules.css new file mode 100644 index 00000000000..0c56d212b11 --- /dev/null +++ b/test/configCases/css/pseudo-import/vars.modules.css @@ -0,0 +1,4 @@ +:export { + primary-color: red; + secondary-color: block; +} diff --git a/test/configCases/css/pseudo-import/warnings.js b/test/configCases/css/pseudo-import/warnings.js new file mode 100644 index 00000000000..d300b3f6b5b --- /dev/null +++ b/test/configCases/css/pseudo-import/warnings.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + // /ICSS import "NONE_IMPORT" has no value./ +]; diff --git a/test/configCases/css/pseudo-import/webpack.config.js b/test/configCases/css/pseudo-import/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/pseudo-import/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/public-path/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/public-path/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..ca0ef841fb2 --- /dev/null +++ b/test/configCases/css/public-path/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,721 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css public-path exported tests should work 1`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(same_root.svg); +} + +.class-2 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(same_root.svg); +} + +.class-6 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 2`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(/same_root.svg); +} + +.class-2 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(/same_root.svg); +} + +.class-6 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 3`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(/static/img/same_root.svg); +} + +.class-2 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(/static/img/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(/static/img/same_root.svg); +} + +.class-6 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 4`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(/static/img/../deep/same_root.svg); +} + +.class-2 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(/static/img/../deep/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(/static/img/../deep/same_root.svg); +} + +.class-6 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 5`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(//cdn.webpack.js/assets/same_root.svg); +} + +.class-2 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(//cdn.webpack.js/assets/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(//cdn.webpack.js/assets/same_root.svg); +} + +.class-6 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 6`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(same_root.svg); +} + +.class-2 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(same_root.svg); +} + +.class-6 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 7`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 8`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/../foo/same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/../foo/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/../foo/same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 9`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/foo/../same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/foo/../styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/foo/../same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 10`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org./same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org./styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org./same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 11`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(../same_root.svg); +} + +.class-2 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(../styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(../same_root.svg); +} + +.class-6 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 12`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(./same_root.svg); +} + +.class-2 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(./styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(./same_root.svg); +} + +.class-6 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 13`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(../static/same_root.svg); +} + +.class-2 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(../static/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(../static/same_root.svg); +} + +.class-6 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 14`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(./static/same_root.svg); +} + +.class-2 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(./static/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(./static/same_root.svg); +} + +.class-6 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigCacheTestCases css public-path exported tests should work 15`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/undefined/same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/undefined/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/undefined/same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +", +] +`; diff --git a/test/configCases/css/public-path/__snapshots__/ConfigTest.snap b/test/configCases/css/public-path/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..7dd027f8333 --- /dev/null +++ b/test/configCases/css/public-path/__snapshots__/ConfigTest.snap @@ -0,0 +1,721 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css public-path exported tests should work 1`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(same_root.svg); +} + +.class-2 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(same_root.svg); +} + +.class-6 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 2`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(/same_root.svg); +} + +.class-2 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(/same_root.svg); +} + +.class-6 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 3`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(/static/img/same_root.svg); +} + +.class-2 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(/static/img/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(/static/img/same_root.svg); +} + +.class-6 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(/static/img/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 4`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(/static/img/../deep/same_root.svg); +} + +.class-2 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(/static/img/../deep/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(/static/img/../deep/same_root.svg); +} + +.class-6 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(/static/img/../deep/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 5`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(//cdn.webpack.js/assets/same_root.svg); +} + +.class-2 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(//cdn.webpack.js/assets/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(//cdn.webpack.js/assets/same_root.svg); +} + +.class-6 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(//cdn.webpack.js/assets/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 6`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(same_root.svg); +} + +.class-2 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(same_root.svg); +} + +.class-6 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 7`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 8`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/../foo/same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/../foo/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/../foo/same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/../foo/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 9`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/foo/../same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/foo/../styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/foo/../same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/foo/../c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 10`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org./same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org./styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org./same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org./c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 11`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(../same_root.svg); +} + +.class-2 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(../styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(../same_root.svg); +} + +.class-6 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(../c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 12`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(./same_root.svg); +} + +.class-2 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(./styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(./same_root.svg); +} + +.class-6 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(./c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 13`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(../static/same_root.svg); +} + +.class-2 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(../static/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(../static/same_root.svg); +} + +.class-6 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(../static/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 14`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(./static/same_root.svg); +} + +.class-2 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(./static/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(./static/same_root.svg); +} + +.class-6 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(./static/c9e192c015437a21dea1.svg); +} + +", +] +`; + +exports[`ConfigTestCases css public-path exported tests should work 15`] = ` +Array [ + "/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +.class-1 { + background-image: url(https://webpack.js.org/undefined/same_root.svg); +} + +.class-2 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-3 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-4 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-5 { + background-image: url(https://webpack.js.org/undefined/styles/nested/nested_dir.svg); +} + +/*!******************************!*\\\\ + !*** css ./nested/style.css ***! + \\\\******************************/ +.class-5 { + background-image: url(https://webpack.js.org/undefined/same_root.svg); +} + +.class-6 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-7 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +.class-8 { + background-image: url(https://webpack.js.org/undefined/c9e192c015437a21dea1.svg); +} + +", +] +`; diff --git a/test/configCases/css/public-path/images/webpack.svg b/test/configCases/css/public-path/images/webpack.svg new file mode 100644 index 00000000000..5b3b22a45f0 --- /dev/null +++ b/test/configCases/css/public-path/images/webpack.svg @@ -0,0 +1 @@ +logo-on-dark-bg \ No newline at end of file diff --git a/test/configCases/css/public-path/index.js b/test/configCases/css/public-path/index.js new file mode 100644 index 00000000000..15f8d19c98b --- /dev/null +++ b/test/configCases/css/public-path/index.js @@ -0,0 +1,14 @@ +import "./style.css"; +import "./nested/style.css"; + +it("should work", () => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); +}); diff --git a/test/configCases/css/public-path/nested/deep_nested/webpack.svg b/test/configCases/css/public-path/nested/deep_nested/webpack.svg new file mode 100644 index 00000000000..5b3b22a45f0 --- /dev/null +++ b/test/configCases/css/public-path/nested/deep_nested/webpack.svg @@ -0,0 +1 @@ +logo-on-dark-bg \ No newline at end of file diff --git a/test/configCases/css/public-path/nested/style.css b/test/configCases/css/public-path/nested/style.css new file mode 100644 index 00000000000..152b0e37ce9 --- /dev/null +++ b/test/configCases/css/public-path/nested/style.css @@ -0,0 +1,15 @@ +.class-5 { + background-image: url(../same_root.svg); +} + +.class-6 { + background-image: url(../images/webpack.svg); +} + +.class-7 { + background-image: url(./deep_nested/webpack.svg); +} + +.class-8 { + background-image: url(deep_nested/webpack.svg); +} diff --git a/test/configCases/css/public-path/nested_dir.svg b/test/configCases/css/public-path/nested_dir.svg new file mode 100644 index 00000000000..5b3b22a45f0 --- /dev/null +++ b/test/configCases/css/public-path/nested_dir.svg @@ -0,0 +1 @@ +logo-on-dark-bg \ No newline at end of file diff --git a/test/configCases/css/public-path/same_root.svg b/test/configCases/css/public-path/same_root.svg new file mode 100644 index 00000000000..5b3b22a45f0 --- /dev/null +++ b/test/configCases/css/public-path/same_root.svg @@ -0,0 +1 @@ +logo-on-dark-bg \ No newline at end of file diff --git a/test/configCases/css/public-path/style.css b/test/configCases/css/public-path/style.css new file mode 100644 index 00000000000..ec13d77ed41 --- /dev/null +++ b/test/configCases/css/public-path/style.css @@ -0,0 +1,19 @@ +.class-1 { + background-image: url(./same_root.svg); +} + +.class-2 { + background-image: url(./images/webpack.svg); +} + +.class-3 { + background-image: url(images/webpack.svg); +} + +.class-4 { + background-image: url(/images/webpack.svg); +} + +.class-5 { + background-image: url(./nested_dir.svg); +} diff --git a/test/configCases/css/public-path/test.config.js b/test/configCases/css/public-path/test.config.js new file mode 100644 index 00000000000..b39ab1bfcaf --- /dev/null +++ b/test/configCases/css/public-path/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope, options) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = `bundle${options.name}.css`; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/public-path/webpack.config.js b/test/configCases/css/public-path/webpack.config.js new file mode 100644 index 00000000000..f7a291d4e25 --- /dev/null +++ b/test/configCases/css/public-path/webpack.config.js @@ -0,0 +1,56 @@ +"use strict"; + +/** @typedef {import("../../../../").PathData} PathData */ + +const publicPaths = [ + "auto", + "/", + "/static/img/", + "/static/img/../deep/", + "//cdn.webpack.js/assets/", + "", + "https://webpack.js.org/", + "https://webpack.js.org/../foo/", + "https://webpack.js.org/foo/../", + "https://webpack.js.org./", + "../", + "./", + "../static/", + "./static/", + // TODO BUG + /** + * @param {PathData} pathData path data + * @returns {string} public path + */ + (pathData) => `https://webpack.js.org/${pathData.hash}/` +]; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = publicPaths.map((item, idx) => ({ + name: String(idx), + target: "web", + output: { + chunkFilename: "[name].chunk.js", + publicPath: item + }, + optimization: { + chunkIds: "named" + }, + module: { + rules: [ + { + test: /same_root\.(svg)$/, + type: "asset/resource", + generator: { filename: "[name][ext]" } + }, + { + test: /nested_dir\.(svg)$/, + type: "asset/resource", + generator: { filename: "styles/nested/[name][ext]" } + } + ] + }, + experiments: { + css: true + } +})); diff --git a/test/configCases/css/pure-css/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/pure-css/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..72a0e8a34c9 --- /dev/null +++ b/test/configCases/css/pure-css/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,2680 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css pure-css exported tests should compile 1`] = ` +Array [ + "/*!***************************************************!*\\\\ + !*** css ../css-modules/at-rule-value.module.css ***! + \\\\***************************************************/ +@value my-red blue; + +.value-in-class { + color: my-red; +} + +@value v-comment-broken:; +@value v-comment-broken-v1:/* comment */; + +@value small: (max-width: 599px); + +@media small { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + +@value blue-v1: red; + +.foo { color: blue-v1; } + +@value blue-v3: red; + +.foo { + &.bar { color: blue-v3; } +} + +@value blue-v3: red; + +.foo { + @media (min-width: 1024px) { + &.bar { color: blue-v3; } + } +} + +@value blue-v4: red; + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: blue-v4; + } + } + } +} + +@value test-t: 40px; +@value test_q: 36px; + +.foo { height: test-t; height: test_q; } + +@value colorValue: red; + +.colorValue { + color: colorValue; +} + +@value colorValue-v1: red; + +#colorValue-v1 { + color: colorValue-v1; +} + +@value colorValue-v2: red; + +.colorValue-v2 > .colorValue-v2 { + color: colorValue-v2; +} + +@value colorValue-v3: .red; + +colorValue-v3 { + color: colorValue-v3; +} + +@value red-v2 from \\"./colors.module.css\\"; + +.export { + color: red-v2; +} + +@value blue-v1 as green from \\"./colors.module.css\\"; + +.foo { color: green; } + +@value blue-i, green-v2 from \\"./colors.module.css\\"; + +.foo { color: blue-i; } +.bar { color: green-v2 } + +@value colors: \\"./colors.module.css\\"; +@value red-v4 from colors; + +.foo { color: red-v4; } + +@value aaa: red; +@value bbb: aaa; + +.class-a { color: bbb; } + +@value base: 10px; +@value large: calc(base * 2); + +.class-a { margin: large; } + +@value a from \\"./colors.module.css\\"; +@value b from \\"./colors.module.css\\"; + +.class-a { content: a b; } + +@value --red from \\"./colors.module.css\\"; + +.foo { color: --red; } + +@value named: red; +@value _3char #0f0; +@value _6char #00ff00; +@value rgba rgba(34, 12, 64, 0.3); +@value hsla hsla(220, 13.0%, 18.0%, 1); + +.foo { + color: named; + background-color: _3char; + border-top-color: _6char; + border-bottom-color: rgba; + outline-color: hsla; +} + +@value (blue-i, red-i) from \\"./colors.module.css\\"; + +.foo { color: red-i; } +.bar { color: blue-i } + +@value coolShadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow; } + +@value func: color(red lightness(50%)); + +.foo { color: func; } + +@value v-color: red; + +:root { --color: v-color; } + +@value v-empty: ; + +:root { --color:v-empty; } + +@value v-empty-v2: ; + +:root { --color:v-empty-v2; } + +@value v-empty-v3: /* comment */; + +:root { --color:v-empty-v3; } + +@value override: blue; +@value override: red; + +.override { + color: override; +} + +@value (blue-v1 as my-name) from \\"./colors.module.css\\"; +@value (blue-v1 as my-name-again, red-v1) from \\"./colors.module.css\\"; + +.class { + color: my-name; + color: my-name-again; + color: red-v1; +} + +@value/* test */blue-v5/* test */:/* test */red/* test */; + +.color { + color: blue-v5; +} + +@value/* test */blue-v6/* test *//* test */red/* test */; + +.color { + color: blue-v6; +} + +@value coolShadow-v2 : 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v2; } + +@value /* test */ coolShadow-v3 /* test */ : 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v3; } + +@value /* test */ coolShadow-v4 /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v4; } + +@value/* test */coolShadow-v5/* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v5; } + +@value/* test */coolShadow-v6/* test */:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v6; } + +@value/* test */coolShadow-v7/* test */:/* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v7; } + +@value /* test */ test-v1 /* test */ from /* test */ \\"./colors.module.css\\" /* test */; + +.foo { color: test-v1; } + +@value/* test */test-v2/* test */from/* test */\\"./colors.module.css\\"/* test */; + +.foo { color: test-v2; } + +@value/* test */(/* test */blue-v1/* test */as/* test */my-name-q/* test */)/* test */from/* test */\\"./colors.module.css\\"/* test */; + +.foo { color: my-name-q; } + +@value/* + multiline + comment +*/multiline-v1/* + multiline + comment +*/:/* + multiline + comment +*/red/* + multiline + comment +*/; + +.color { + color: multiline-v1; +} + +@value /* + multiline comment +*/ red-v3 /* + multiline comment +*/ from /* + multiline comment +*/ \\"./colors.module.css\\" /* + multiline comment +*/; + +.foo { color: red-v3; } + +@value multiline-empty: /* + multiline + comment +*/; + +:root { --color:multiline-empty; } + +@value; +@value test; + +/*!**************************************************!*\\\\ + !*** css ../css-modules/var-function.module.css ***! + \\\\**************************************************/ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: \\"reserved\\"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from \\"./var-function-export.modules.css\\")); +} + +.from-2 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-var-u2 from \\"./var-function-export.modules.css\\")); +} + +.from-4 { + color: var(--1 from \\"./var-function-export.modules.css\\"); +} + +.from-5 { + color: var(----a from \\"./var-function-export.modules.css\\"); +} + +.from-6 { + color: var(--main-bg-color from \\"./var-function-export.modules.css\\"); +} + +.mixed { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from \\"./var-function-export.modules.css\\") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} + +/*!*******************************************!*\\\\ + !*** css ../css-modules/style.module.css ***! + \\\\*******************************************/ + +.class { + color: red; +} + +.local1, +.local2 :global .global, +.local3 { + color: green; +} + +:global .global :local .local4 { + color: yellow; +} + +.local5:global(.global).local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +:global(:global(:local(.nested1)).nested2).nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars :global { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +:GLOBAL .globalUpperCase :LOCAL .localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase :GLOBAL { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: :local(.test); + unknown2: :global(.test); + unknown3: local(.test); + unknown4: global(.test); + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown local(.local) global(.global) { + color: red; +} + +@unknown :local(.local) :global(.global) { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + :local .local-nested { + color: red; + } + + :global .global-nested { + color: red; + } + + :local(.local-nested) { + color: red; + } + + :global(.global-nested) { + color: red; + } + + :local .local-nested, :global .global-nested-next { + color: red; + } + + :local(.local-nested), :global(.global-nested-next) { + color: red; + } + + :global .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +:global .global-foo { + .nested-global { + color: red; + } + + :local .local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +:global .class :local .in-local-global-scope, +:global .class :local .in-local-global-scope, +:local .class-local-scope :global .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +:global .global-foo, :local .bar { + :local .local-in-global { + color: blue; + } + + @media screen { + :global .my-global-class-again, + :local .my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +:global .again-global { + color:red; +} + +:global .again-again-global { + :global .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +:global .again-again-global { + color: var(--foo); + + :global .again-again-global { + color: var(--foo); + } +} + +:global .again-again-global { + animation: slidein 3s; + + :global .again-again-global, .class, :global(:global(:local(.nested1)).nested2).nested3 { + animation: slidein 3s; + } + + .local2 :global .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + :/** test */global(.class) { + color: red; + } + + :/** test */global .class { + color: red; + } + + :/** test */local(.class) { + color: red; + } + + :/** test */local .class { + color: red; + } + + ./** test **/class { + color: red; + } + + :local(./** test **/class) { + color: red; + } + + :local ./** test **/class { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: local(sticky-heading); + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from \\"./classes.modules.css\\" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from \\"classes.modules.css\\" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from \\"./classes.modules.css\\" ; + composes: className otherClassName from \\"./classes.modules.css\\" ; + composes: className from \\"./classes.modules.css\\" , otherClassName from \\"./classes.modules.css\\" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from\\"./classes.modules.css\\",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from \\"./classes.modules.css\\"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\\\\% from \\"./classes.modules.css\\"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(local(bounce), 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function :local(--transparent-local)(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function :global(--transparent-global)(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: local(--transparent-local)(var(--base-color), 0.8); + background-color: global(--transparent-global)(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile local(--swop5c-local) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile :local(--swop5c-local) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile global(--swop5c) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile :global(--swop5c) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(local(--swop5c-local) 0% 70% 20% 0%); + background-color: color(:local(--swop5c-local) 0% 70% 20% 0%); + background-color: color(global(--swop5c) 0% 70% 20% 0%); + background-color: color(:global(--swop5c) 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(local(--swop5c-local, \\"./shared.css\\") 0% 70% 20% 0%); + background-color: color(:local(--swop5c-local, \\"./shared.css\\") 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + :global.class-no-space { + color: red; + } + + :global/** test **/.class { + color: red; + } + + :local.class { + color: red; + } + + :local/** test **/.class { + color: red; + } + + :local/** test **/#hash { + color: red; + } + + :local/** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.just-class { + color: red; +} + +:local(.my-simple-local) { + color: red; +} + +:global(.my-global-local) { + color: red; +} + +:local(.multiple-first.multiple-second) { + color: red; +} + +:local(.multiple-first-with-space .multiple-second-with-space) { + color: red; +} + +div:not(:local(.special)) { + color: blue; +} + +p:not(:local(#main-paragraph)) { + font-weight: bold; +} + +:local(.container) { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & :local(.header) { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & :local(.active) { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item:local(.selected) { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +:local(.local-class-name) { + color: red; +} + +.global-befor-local :local(.local-class-name) { + color: red; +} + +:local(.local-class-name) .global-after-local { + color: red; +} + +:local(.foo) { + &:local(.class) { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + :local(.bar) { + c_value: some-value; + } + + &:local(.baz) { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +:local(.local-class) { + color: white; +} + +:global(.global-class-other) { + color: red; +} + +:local(.class-with-composes) { + composes: + local-class, + global-class from global, + global-class-other from global, + local-my-shared-class from \\"./shared.css\\"; +} + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes local(local-keyframes) {} +@keyframes global(global-keyframes) {} +/** Deprecated syntax */ +@keyframes :local(local-keyframes-old-syntax) {} +@keyframes :global(local-keyframes-old-syntax) {} + +.foo { + animation-name: basic-keyframes, global(global-keyframes), local(local-keyframes); +} + +@property local(--progress) { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes local(progressAnimationLocal) { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(local(--progress)), + black var(local(--progress)) + ); + animation: local(progressAnimationLocal) 2.5s ease infinite; +} + +@scope (:local(.article-header)) to (:global(.class)) { + .article-footer { + border: 5px solid black; + } + :local(.class-1) { + color: red; + } + :global(.class-2) { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + local(--local-foo-bar), + global(--global-foo-bar), + /** Deprecated syntax */ + :local(--local-foo-bar), + :global(--global-foo-bar); +} + +.class { + background-color: + var(--foo-bar), + var(local(--local-foo-bar)), + var(global(--global-foo-bar)), + /** Deprecated syntax */ + var(:local(--local-foo-bar)), + var(:global(--global-foo-bar)), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule local(unknown-at-rule) {} + +.class { + custom-name: local(unknown-at-rule); +} + +:global .class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: local(animation-name-test) global(animation-name-test) +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +.class { + color: red; + background: var(--color); +} + +@keyframes test { + 0% { + color: red; + } + 100% { + color: blue; + } +} + +:local(.class) { + color: red; +} + +:local .class { + color: green; +} + +:global(.class) { + color: blue; +} + +:global .class { + color: white; +} + +:export { + foo: bar; +} + +.class { + animation: test 1s, test; +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/pure-css/__snapshots__/ConfigTest.snap b/test/configCases/css/pure-css/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..477013a8ce7 --- /dev/null +++ b/test/configCases/css/pure-css/__snapshots__/ConfigTest.snap @@ -0,0 +1,2680 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css pure-css exported tests should compile 1`] = ` +Array [ + "/*!***************************************************!*\\\\ + !*** css ../css-modules/at-rule-value.module.css ***! + \\\\***************************************************/ +@value my-red blue; + +.value-in-class { + color: my-red; +} + +@value v-comment-broken:; +@value v-comment-broken-v1:/* comment */; + +@value small: (max-width: 599px); + +@media small { + abbr:hover { + color: limegreen; + transition-duration: 1s; + } +} + +@value blue-v1: red; + +.foo { color: blue-v1; } + +@value blue-v3: red; + +.foo { + &.bar { color: blue-v3; } +} + +@value blue-v3: red; + +.foo { + @media (min-width: 1024px) { + &.bar { color: blue-v3; } + } +} + +@value blue-v4: red; + +.foo { + @media (min-width: 1024px) { + &.bar { + @media (min-width: 1024px) { + color: blue-v4; + } + } + } +} + +@value test-t: 40px; +@value test_q: 36px; + +.foo { height: test-t; height: test_q; } + +@value colorValue: red; + +.colorValue { + color: colorValue; +} + +@value colorValue-v1: red; + +#colorValue-v1 { + color: colorValue-v1; +} + +@value colorValue-v2: red; + +.colorValue-v2 > .colorValue-v2 { + color: colorValue-v2; +} + +@value colorValue-v3: .red; + +colorValue-v3 { + color: colorValue-v3; +} + +@value red-v2 from \\"./colors.module.css\\"; + +.export { + color: red-v2; +} + +@value blue-v1 as green from \\"./colors.module.css\\"; + +.foo { color: green; } + +@value blue-i, green-v2 from \\"./colors.module.css\\"; + +.foo { color: blue-i; } +.bar { color: green-v2 } + +@value colors: \\"./colors.module.css\\"; +@value red-v4 from colors; + +.foo { color: red-v4; } + +@value aaa: red; +@value bbb: aaa; + +.class-a { color: bbb; } + +@value base: 10px; +@value large: calc(base * 2); + +.class-a { margin: large; } + +@value a from \\"./colors.module.css\\"; +@value b from \\"./colors.module.css\\"; + +.class-a { content: a b; } + +@value --red from \\"./colors.module.css\\"; + +.foo { color: --red; } + +@value named: red; +@value _3char #0f0; +@value _6char #00ff00; +@value rgba rgba(34, 12, 64, 0.3); +@value hsla hsla(220, 13.0%, 18.0%, 1); + +.foo { + color: named; + background-color: _3char; + border-top-color: _6char; + border-bottom-color: rgba; + outline-color: hsla; +} + +@value (blue-i, red-i) from \\"./colors.module.css\\"; + +.foo { color: red-i; } +.bar { color: blue-i } + +@value coolShadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow; } + +@value func: color(red lightness(50%)); + +.foo { color: func; } + +@value v-color: red; + +:root { --color: v-color; } + +@value v-empty: ; + +:root { --color:v-empty; } + +@value v-empty-v2: ; + +:root { --color:v-empty-v2; } + +@value v-empty-v3: /* comment */; + +:root { --color:v-empty-v3; } + +@value override: blue; +@value override: red; + +.override { + color: override; +} + +@value (blue-v1 as my-name) from \\"./colors.module.css\\"; +@value (blue-v1 as my-name-again, red-v1) from \\"./colors.module.css\\"; + +.class { + color: my-name; + color: my-name-again; + color: red-v1; +} + +@value/* test */blue-v5/* test */:/* test */red/* test */; + +.color { + color: blue-v5; +} + +@value/* test */blue-v6/* test *//* test */red/* test */; + +.color { + color: blue-v6; +} + +@value coolShadow-v2 : 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v2; } + +@value /* test */ coolShadow-v3 /* test */ : 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v3; } + +@value /* test */ coolShadow-v4 /* test */ 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14) ; + +.foo { box-shadow: coolShadow-v4; } + +@value/* test */coolShadow-v5/* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v5; } + +@value/* test */coolShadow-v6/* test */:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v6; } + +@value/* test */coolShadow-v7/* test */:/* test */0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14); + +.foo { box-shadow: coolShadow-v7; } + +@value /* test */ test-v1 /* test */ from /* test */ \\"./colors.module.css\\" /* test */; + +.foo { color: test-v1; } + +@value/* test */test-v2/* test */from/* test */\\"./colors.module.css\\"/* test */; + +.foo { color: test-v2; } + +@value/* test */(/* test */blue-v1/* test */as/* test */my-name-q/* test */)/* test */from/* test */\\"./colors.module.css\\"/* test */; + +.foo { color: my-name-q; } + +@value/* + multiline + comment +*/multiline-v1/* + multiline + comment +*/:/* + multiline + comment +*/red/* + multiline + comment +*/; + +.color { + color: multiline-v1; +} + +@value /* + multiline comment +*/ red-v3 /* + multiline comment +*/ from /* + multiline comment +*/ \\"./colors.module.css\\" /* + multiline comment +*/; + +.foo { color: red-v3; } + +@value multiline-empty: /* + multiline + comment +*/; + +:root { --color:multiline-empty; } + +@value; +@value test; + +/*!**************************************************!*\\\\ + !*** css ../css-modules/var-function.module.css ***! + \\\\**************************************************/ +:root { + --main-bg-color: brown; + --my-var: red; + --my-background: blue; + --my-global: yellow; + --: \\"reserved\\"; + --a: green; +} + +.class { + color: var(--main-bg-color); +} + +@property --logo-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property -- { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +.class { + color: var(--logo-color); +} + +div { + background-color: var(--box-color); +} + +.two { + --box-color: cornflowerblue; +} + +.three { + --box-color: aquamarine; +} + + +.one { + /* Red if --my-var is not defined */ + color: var(--my-var, red); +} + +.two { + /* pink if --my-var and --my-background are not defined */ + color: var(--my-var, var(--my-background, pink)); +} + +.reserved { + color: var(--); +} + +.green { + color: var(--a); +} + +.global { + color: var(--my-global from global); +} + +.global-and-default { + color: var(--my-global from global, pink); +} + +.global-and-default-1 { + color: var(--my-global from global, var(--my-global-background from global)); +} + +.global-and-default-2 { + color: var(--my-global from global, var(--my-global-background from global, pink)); +} + +.global-and-default-3 { + color: var(--my-global from global, var(--my-background, pink)); +} + +.global-and-default-5 { + color: var( --my-global from global,var(--my-background,pink)); +} + +.global-and-default-6 { + background: var( --main-bg-color , var( --my-background , pink ) ) , var(--my-global from global); +} + +.global-and-default-7 { + background: var(--main-bg-color,var(--my-background,pink)),var(--my-global from global); +} + +.from { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\"); +} + +.from-1 { + color: var(--main-bg-color, var(--my-var-u1 from \\"./var-function-export.modules.css\\")); +} + +.from-2 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--main-bg-color)); +} + +.from-3 { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-var-u2 from \\"./var-function-export.modules.css\\")); +} + +.from-4 { + color: var(--1 from \\"./var-function-export.modules.css\\"); +} + +.from-5 { + color: var(----a from \\"./var-function-export.modules.css\\"); +} + +.from-6 { + color: var(--main-bg-color from \\"./var-function-export.modules.css\\"); +} + +.mixed { + color: var(--my-var-u1 from \\"./var-function-export.modules.css\\", var(--my-global from global, var(--main-bg-color, red))); +} + +.broken { + color: var(--my-global from); +} + +.broken-1 { + color: var(--my-global from 1); +} + +:root { + --not-override-class: red; +} + +.not-override-class { + color: var(--not-override-class from \\"./var-function-export.modules.css\\") +} + +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +.parent { + --parent-padding: 20px; + padding: var(--parent-padding); + + .child { + --child-margin: 10px; + margin-top: var(--child-margin); + padding-left: var(--parent-padding); /* Accessing parent's variable */ + } +} + +@media (min-width: 768px) { + :root { + --base-padding: 1.5rem; + --font-scale: 1.2; + } +} + +.container { + padding: var(--base-padding); /* This will be 1rem or 1.5rem based on screen size */ +} + +.item-title { + /* Dynamic font size based on screen size using the variable */ + font-size: calc(1.2rem * var(--font-scale)); + margin-bottom: calc(var(--base-padding) / 2); +} + +.item-details { + /* Using calc() to create a flexible layout */ + width: calc(100% - (var(--base-padding) * 2)); +} + +.banner { + /* Locally scoped variables (pseudo-private) */ + --banner-bg: #e0f7fa; /* Default info color */ + --banner-text: #00796b; + --banner-icon: \\"ℹ️\\"; + + padding: 1em; + background-color: var(--banner-bg); + color: var(--banner-text); + border-left: 5px solid var(--banner-text); +} + +:root { + --accordion-bg: #fff; + --accordion-border: #ddd; + --accordion-text: #333; + --accordion-accent: royalblue; +} + +.accordion-container { + border: 1px solid var(--accordion-border); + border-radius: 4px; + width: 100%; + max-width: 400px; + + /* CSS Nesting starts here */ + & .accordion-item { + background: var(--accordion-bg); + color: var(--accordion-text); + border-bottom: 1px solid var(--accordion-border); + + &:last-child { + border-bottom: none; + } + + & .accordion-header { + padding: 1rem; + cursor: pointer; + display: flex; + justify-content: space-between; + align-items: center; + + &:hover { + background: color-mix(in srgb, var(--accordion-bg) 90%, gray); + } + } + + /* Override variables locally for a specific state (e.g., active item) */ + &.is-active { + --accordion-bg: var(--accordion-accent); /* Nested override */ + --accordion-text: #fff; /* Nested override */ + + & .accordion-header { + font-weight: bold; + } + } + } + + /* Define a complete alternate theme nested inside the container */ + &.is-dark-theme { + /* These variables are scoped only to elements within this specific container */ + --accordion-bg: #333; + --accordion-border: #555; + --accordion-text: #eee; + --accordion-accent: #2ecc71; /* A new accent color for the dark theme */ + } +} + +.media-object { + /* Establish a container context for cqw units */ + container-type: inline-size; + display: flex; + gap: 1rem; + padding: 1rem; + border: 1px solid #ccc; + + /* Define default mobile variables */ + --avatar-size: 48px; + --text-size: 1rem; + + & .avatar { + width: var(--avatar-size); + height: var(--avatar-size); + border-radius: 50%; + background: lightgray; + } + + & .content { + font-size: var(--text-size); + } + + /* Nested Container Query (Responsive override of variables) */ + @container (min-width: 400px) { + /* Redefine variables when container is wide enough */ + --avatar-size: 10cqw; /* Dynamic size based on container width (10% of container) */ + --text-size: 1.2rem; + gap: 1.5rem; + } +} + +:root { + --primary-color: #007bff; + --text-color: var(--primary-color); /* --text-color now uses the value of --primary-color */ + --highlight-background: linear-gradient(to right, var(--primary-color), #6c757d); +} + +.element { + color: var(--text-color); + background: var(--highlight-background); +} + +/*!*******************************************!*\\\\ + !*** css ../css-modules/style.module.css ***! + \\\\*******************************************/ + +.class { + color: red; +} + +.local1, +.local2 :global .global, +.local3 { + color: green; +} + +:global .global :local .local4 { + color: yellow; +} + +.local5:global(.global).local6 { + color: blue; +} + +.local7 div:not(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local8 :is(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local10 :where(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +.local11 div:has(.disabled, .mButtonDisabled, .tipOnly) { + pointer-events: initial !important; +} + +.local12 div:current(p, span) { + background-color: yellow; +} + +.local13 div:past(p, span) { + display: none; +} + +.local14 div:future(p, span) { + background-color: yellow; +} + +.local15 div:-moz-any(ol, ul, menu, dir) { + list-style-type: square; +} + +.local16 li:-webkit-any(:first-child, :last-child) { + background-color: aquamarine; +} + +.local9 :matches(div.parent1.child1.vertical-tiny, + div.parent1.child1.vertical-small, + div.otherDiv.horizontal-tiny, + div.otherDiv.horizontal-small div.description) { + max-height: 0; + margin: 0; + overflow: hidden; +} + +:global(:global(:local(.nested1)).nested2).nested3 { + color: pink; +} + +#ident { + color: purple; +} + +@keyframes localkeyframes { + 0% { + left: var(--pos1x); + top: var(--pos1y); + color: var(--theme-color1); + } + 100% { + left: var(--pos2x); + top: var(--pos2y); + color: var(--theme-color2); + } +} + +@keyframes localkeyframes2 { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +.animation { + animation-name: localkeyframes; + animation: 3s ease-in 1s 2 reverse both paused localkeyframes, localkeyframes2; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +.vars { + color: var(--local-color); + --local-color: red; +} + +.globalVars :global { + color: var(--global-color); + --global-color: red; +} + +@media (min-width: 1600px) { + .wideScreenClass { + color: var(--local-color); + --local-color: green; + } +} + +@media screen and (max-width: 600px) { + .narrowScreenClass { + color: var(--local-color); + --local-color: purple; + } +} + +@supports (display: grid) { + .displayGridInSupports { + display: grid; + } +} + +@supports not (display: grid) { + .floatRightInNegativeSupports { + float: right; + } +} + +@supports (display: flex) { + @media screen and (min-width: 900px) { + .displayFlexInMediaInSupports { + display: flex; + } + } +} + +@media screen and (min-width: 900px) { + @supports (display: flex) { + .displayFlexInSupportsInMedia { + display: flex; + } + } +} + +@MEDIA screen and (min-width: 900px) { + @SUPPORTS (display: flex) { + .displayFlexInSupportsInMediaUpperCase { + display: flex; + } + } +} + +.animationUpperCase { + ANIMATION-NAME: localkeyframesUPPERCASE; + ANIMATION: 3s ease-in 1s 2 reverse both paused localkeyframesUPPERCASE, localkeyframes2UPPPERCASE; + --pos1x: 0px; + --pos1y: 0px; + --pos2x: 10px; + --pos2y: 20px; +} + +@KEYFRAMES localkeyframesUPPERCASE { + 0% { + left: VAR(--pos1x); + top: VAR(--pos1y); + color: VAR(--theme-color1); + } + 100% { + left: VAR(--pos2x); + top: VAR(--pos2y); + color: VAR(--theme-color2); + } +} + +@KEYframes localkeyframes2UPPPERCASE { + 0% { + left: 0; + } + 100% { + left: 100px; + } +} + +:GLOBAL .globalUpperCase :LOCAL .localUpperCase { + color: yellow; +} + +.VARS { + color: VAR(--LOCAL-COLOR); + --LOCAL-COLOR: red; +} + +.globalVarsUpperCase :GLOBAL { + COLOR: VAR(--GLOBAR-COLOR); + --GLOBAR-COLOR: red; +} + +@supports (top: env(safe-area-inset-top, 0)) { + .inSupportScope { + color: red; + } +} + +.a { + animation: 3s animationName; + -webkit-animation: 3s animationName; +} + +.b { + animation: animationName 3s; + -webkit-animation: animationName 3s; +} + +.c { + animation-name: animationName; + -webkit-animation-name: animationName; +} + +.d { + --animation-name: animationName; +} + +@keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-webkit-keyframes animationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@-moz-keyframes mozAnimationName { + 0% { + background: white; + } + 100% { + background: red; + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +/* At-rule for \\"nice-style\\" in Font Two */ +@font-feature-values Font Two { + @styleset { + nice-style: 4; + } +} + +@property --my-color { + syntax: \\"\\"; + inherits: false; + initial-value: #c0ffee; +} + +@property --my-color-1 { + initial-value: #c0ffee; + syntax: \\"\\"; + inherits: false; +} + +@property --my-color-2 { + syntax: \\"\\"; + initial-value: #c0ffee; + inherits: false; +} + +.class { + color: var(--my-color); +} + +@layer utilities { + .padding-sm { + padding: 0.5rem; + } + + .padding-lg { + padding: 0.8rem; + } +} + +.class { + color: red; + + .nested-pure { + color: red; + } + + @media screen and (min-width: 200px) { + color: blue; + + .nested-media { + color: blue; + } + } + + @supports (display: flex) { + display: flex; + + .nested-supports { + display: flex; + } + } + + @layer foo { + background: red; + + .nested-layer { + background: red; + } + } + + @container foo { + background: red; + + .nested-layer { + background: red; + } + } +} + +.not-selector-inside { + color: #fff; + opacity: 0.12; + padding: .5px; + unknown: :local(.test); + unknown2: :global(.test); + unknown3: local(.test); + unknown4: global(.test); + /* No one support it */ + unknown5: :local .test; + unknown6: :global .test; + unknown7: .foo, .bar, #bar; +} + +@unknown local(.local) global(.global) { + color: red; +} + +@unknown :local(.local) :global(.global) { + color: red; +} + +.nested-var { + .again { + color: var(--local-color); + } +} + +.nested-with-local-pseudo { + color: red; + + :local .local-nested { + color: red; + } + + :global .global-nested { + color: red; + } + + :local(.local-nested) { + color: red; + } + + :global(.global-nested) { + color: red; + } + + :local .local-nested, :global .global-nested-next { + color: red; + } + + :local(.local-nested), :global(.global-nested-next) { + color: red; + } + + :global .foo, .bar { + color: red; + } +} + +#id-foo { + color: red; + + #id-bar { + color: red; + } +} + +.nested-parens { + .local9 div:has(.vertical-tiny, .vertical-small) { + max-height: 0; + margin: 0; + overflow: hidden; + } +} + +:global .global-foo { + .nested-global { + color: red; + } + + :local .local-in-global { + color: blue; + } +} + +@unknown .class { + color: red; + + .class { + color: red; + } +} + +:global .class :local .in-local-global-scope, +:global .class :local .in-local-global-scope, +:local .class-local-scope :global .in-local-global-scope { + color: red; +} + +@container (width > 400px) { + .class-in-container { + font-size: 1.5em; + } +} + +@container summary (min-width: 400px) { + @container (width > 400px) { + .deep-class-in-container { + font-size: 1.5em; + } + } +} + +:scope { + color: red; +} + +.placeholder-gray-700:-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::-ms-input-placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} +.placeholder-gray-700::placeholder { + --placeholder-opacity: 1; + color: #4a5568; + color: rgba(74, 85, 104, var(--placeholder-opacity)); +} + +:root { + --test: dark; +} + +@media screen and (prefers-color-scheme: var(--test)) { + .baz { + color: white; + } +} + +@keyframes slidein { + from { + margin-left: 100%; + width: 300%; + } + + to { + margin-left: 0%; + width: 100%; + } +} + +.class { + animation: + foo var(--animation-name) 3s, + var(--animation-name) 3s, + 3s linear 1s infinite running slidein, + 3s linear env(foo, var(--baz)) infinite running slidein; +} + +:root { + --baz: 10px; +} + +.class { + bar: env(foo, var(--baz)); +} + +:global .global-foo, :local .bar { + :local .local-in-global { + color: blue; + } + + @media screen { + :global .my-global-class-again, + :local .my-global-class-again { + color: red; + } + } +} + +.first-nested { + .first-nested-nested { + color: red; + } +} + +.first-nested-at-rule { + @media screen { + .first-nested-nested-at-rule-deep { + color: red; + } + } +} + +:global .again-global { + color:red; +} + +:global .again-again-global { + :global .again-again-global { + color: red; + } +} + +:root { + --foo: red; +} + +:global .again-again-global { + color: var(--foo); + + :global .again-again-global { + color: var(--foo); + } +} + +:global .again-again-global { + animation: slidein 3s; + + :global .again-again-global, .class, :global(:global(:local(.nested1)).nested2).nested3 { + animation: slidein 3s; + } + + .local2 :global .global, + .local3 { + color: red; + } +} + +@unknown var(--foo) { + color: red; +} + +.class { + .class { + .class { + .class {} + } + } +} + +.class { + .class { + .class { + .class { + animation: slidein 3s; + } + } + } +} + +.class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + .class { + animation: slidein 3s; + } + } + } +} + +.broken { + . global(.class) { + color: red; + } + + : global(.class) { + color: red; + } + + : global .class { + color: red; + } + + : local(.class) { + color: red; + } + + : local .class { + color: red; + } + + # hash { + color: red; + } +} + +.comments { + :/** test */global(.class) { + color: red; + } + + :/** test */global .class { + color: red; + } + + :/** test */local(.class) { + color: red; + } + + :/** test */local .class { + color: red; + } + + ./** test **/class { + color: red; + } + + :local(./** test **/class) { + color: red; + } + + :local ./** test **/class { + color: red; + } +} + +.foo { + color: red; + + .bar + & { color: blue; } +} + +.error, #err-404 { + &:hover > .baz { color: red; } +} + +.foo { + & :is(.bar, &.baz) { color: red; } +} + +.qqq { + color: green; + & .a { color: blue; } + color: red; +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + & .content { + color: red; + } + } +} + +.parent { + color: blue; + + @scope (& > .scope) to (& > .limit) { + .content { + color: red; + } + } + + .a { + color: red; + } +} + +@scope (.card) { + :scope { border-block-end: 1px solid white; } +} + +.card { + inline-size: 40ch; + aspect-ratio: 3/4; + + @scope (&) { + :scope { + border: 1px solid white; + } + } +} + +.foo { + display: grid; + + @media (orientation: landscape) { + .bar { + grid-auto-flow: column; + + @media (min-width > 1024px) { + .baz-1 { + display: grid; + } + + max-inline-size: 1024px; + + .baz-2 { + display: grid; + } + } + } + } +} + +@counter-style thumbs { + system: cyclic; + symbols: \\"\\\\1F44D\\"; + suffix: \\" \\"; +} + +ul { + list-style: thumbs; +} + +@counter-style extend-thumbs { + fallback: thumbs; + system: extends thumbs; + speak-as: thumbs; +} + +div { + list-style: inside; + list-style: outside; + list-style: upper-roman inside; + list-style: circle outside; + list-style: none disc; + list-style: none url(09a1a1112c577c279435.png); + list-style: none; + list-style: none disc url(09a1a1112c577c279435.png); + list-style: lower-alpha; + list-style: disc; + list-style: square; + list-style: url(09a1a1112c577c279435.png); + list-style: georgian inside url(09a1a1112c577c279435.png); + list-style: georgian outside url(09a1a1112c577c279435.png); + /* type */ + list-style: square; + + /* image */ + list-style: url(09a1a1112c577c279435.png); + + /* position */ + list-style: inside; + + /* two values */ + list-style: georgian outside; + list-style: url(09a1a1112c577c279435.png) inside; + + /* three values */ + list-style: lower-roman url(09a1a1112c577c279435.png) outside; + + /* Keyword value */ + list-style: none; + + /* Global values */ + list-style: inherit; + list-style: initial; + list-style: revert; + list-style: revert-layer; + list-style: unset; + + list-style-type: \\"★\\"; + + list-style-type: extend-thumbs; + list-style: extend-thumbs; +} + +@container (width > 400px) and style(--responsive: true) { + .class { + font-size: 1.5em; + } +} + +@container tall (height > 30rem) { + p { + line-height: 1.6; + } +} + +@container sticky-heading scroll-state(stuck: top) { + h2 { + background: purple; + color: white; + } +} + +@container card (width > 400px), style(--responsive: true), scroll-state(stuck: top) { + h2 { + font-size: 1.5em; + } +} + +@container (width > 400px) and (height > 400px) { + /* */ +} + +@container (width > 400px) or (height > 400px) { + /* */ +} + +@container not (width < 400px) { + /* */ +} + +@container (min-width: 400px) { + /* … */ +} +@container (orientation: landscape) and (width > 400px) { + /* … */ +} +@container (15em <= block-size <= 30em) { + /* … */ +} + +.post { + container-name: tall; + container-type: inline-size; + + container: none; + container: inherit; + container: sticky-heading / inline-size; + container: sticky-heading / size; + container: sticky-heading / scroll-state; + --my-var: local(sticky-heading); + + container: var(--my-var); + --cards: small; + container-type: inline-size; +} + + +@container summary style(--cards: small) { + .card { + border: thin solid silver; + border-radius: 0.5em; + padding: 1em; + } +} + +/* At-rule for \\"nice-style\\" in Font One */ +@font-feature-values Font One { + @styleset { + nice-style: 12; + } +} + +@font-palette-values --identifier { + font-family: Bixa; +} + +.my-class { + font-palette: --identifier; +} + +@keyframes foo { /* ... */ } +@keyframes \\"foo\\" { /* ... */ } +@keyframes { /* ... */ } +@keyframes{ /* ... */ } + +@supports (display: flex) { + @media screen and (min-width: 900px) { + article { + display: flex; + } + } +} + +@starting-style { + .class { + opacity: 0; + transform: scaleX(0); + } +} + +.class { + opacity: 1; + transform: scaleX(1); + + @starting-style { + opacity: 0; + transform: scaleX(0); + } +} + +@scope (.feature) { + .class { opacity: 0; } + + :scope .class-1 { opacity: 0; } + + & .class { opacity: 0; } +} + +@position-try --custom-left { + position-area: left; + width: 100px; + margin: 0 10px 0 0; +} + +@position-try --custom-bottom { + top: anchor(bottom); + justify-self: anchor-center; + margin: 10px 0 0 0; + position-area: none; +} + +@position-try --custom-right { + left: calc(anchor(right) + 10px); + align-self: anchor-center; + width: 100px; + position-area: none; +} + +@position-try --custom-bottom-right { + position-area: bottom right; + margin: 10px 0 0 10px; +} + +.infobox { + position: fixed; + position-anchor: --myAnchor; + position-area: top; + width: 200px; + margin: 0 0 10px 0; + position-try-fallbacks: + --custom-left, --custom-bottom, + --custom-right, --custom-bottom-right; +} + +@page { + size: 8.5in 9in; + margin-top: 4in; +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.header { + background-color: color(--swop5c 0% 70% 20% 0%); +} + +.test { + test: (1, 2) [3, 4], { 1: 2}; + .a { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + width: 200px; + } +} + +.test { + width: 200px; + + .test { + .test { + width: 200px; + } + } +} + +.test { + width: 200px; + + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + + .test { + width: 200px; + } + } +} + +.test { + .test { + width: 200px; + } + width: 200px; +} + +.test { + .test { + width: 200px; + } + .test { + width: 200px; + } +} + +.test { + .test { + width: 200px; + } + width: 200px; + .test { + width: 200px; + } +} + +#test { + c: 1; + + #test { + c: 2; + } +} + +@property --item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +.container { + display: flex; + height: 200px; + border: 1px dashed black; + + /* set custom property values on parent */ + --item-size: 20%; + --item-color: orange; +} + +.item { + width: var(--item-size); + height: var(--item-size); + background-color: var(--item-color); +} + +.two { + --item-size: initial; + --item-color: inherit; +} + +.three { + /* invalid values */ + --item-size: 1000px; + --item-color: xyz; +} + +@property invalid { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} + +@property --progress { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(--progress), + black var(--progress) + ); + animation: progressAnimation 2.5s ease infinite; +} + +@keyframes progressAnimation { + to { + --progress: 100%; + } +} + +@keyframes \\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\" { /* ... */ } +@keyframes/**test**/\\"initial\\"/**test**/{ /* ... */ } +@keyframes/**test**//**test**/\\"initial\\"/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ \\"initial\\" /**test**/ /**test**/ { /* ... */ } +@keyframes \\"None\\" { /* ... */ } +@property/**test**/--item-size { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/--item-size/**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/--item-size/**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property/**test**/ --item-size /**test**/{ + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +@property /**test**/ --item-size /**test**/ { + syntax: \\"\\"; + inherits: true; + initial-value: 40%; +} +div { + animation: 3s ease-in 1s 2 reverse both paused \\"initial\\", localkeyframes2; + animation-name: \\"initial\\"; + animation-duration: 2s; +} + +.item-1 { + width: var( --item-size ); + height: var(/**comment**/--item-size); + background-color: var( /**comment**/--item-color); + background-color-1: var(/**comment**/ --item-color); + background-color-2: var( /**comment**/ --item-color); + background-color-3: var( /**comment**/ --item-color /**comment**/ ); + background-color-3: var( /**comment**/--item-color/**comment**/ ); + background-color-3: var(/**comment**/--item-color/**comment**/); +} + +@keyframes/**test**/foo { /* ... */ } +@keyframes /**test**/foo { /* ... */ } +@keyframes/**test**/ foo { /* ... */ } +@keyframes /**test**/ foo { /* ... */ } +@keyframes /**test**//**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/ foo { /* ... */ } +@keyframes /**test**/ /**test**/foo { /* ... */ } +@keyframes /**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo { /* ... */ } +@keyframes/**test**//**test**/foo/**test**//**test**/{ /* ... */ } +@keyframes /**test**/ /**test**/ foo /**test**/ /**test**/ { /* ... */ } + +./**test**//**test**/class { + background: red; +} + +./**test**/ /**test**/class { + background: red; +} + +.var { + --main-color: black; + --FOO: 10px; + --foo: 10px; + --bar: calc(var(--foo) + 10px); + --accent-background: linear-gradient(to top, var(--main-color), white); + --external-link: \\"test\\"; + --custom-prop: yellow; + --default-value: red; + --main-bg-color: red; + --backup-bg-color: black; + -foo: calc(var(--bar) + 10px); + var: var(--main-color); + var1: var(--foo); + var2: var(--FOO); + content: \\" (\\" var(--external-link) \\")\\"; + var3: var(--main-color, blue); + var4: var(--custom-prop,); + var5: var(--custom-prop, initial); + var6: var(--custom-prop, var(--default-value)); + var7: var(--custom-prop, var(--default-value, red)); + var8: var(--unknown); + background-color: var(--main-bg-color, var(--backup-bg-color, white)); +} + +.var-order { + background-color: var(--test); + --test: red; +} + +.className { + border-radius: 12px; +} + +.classNameLocal { + border-radius: 12px; +} + +.classNameLocalOther { + border-radius: 12px; +} + +.exportName { + composes: + className from \\"./classes.modules.css\\" , + beforeName from global , + className , + classNameLocal , + importName secondImport from global , + otherClassName otherClassNameToo from \\"classes.modules.css\\" +; + composes: classNameLocal ; + composes: classNameLocal classNameLocalOther ; + composes: classNameLocal , classNameLocalOther ; + composes: className from global ; + composes: className classNameOther from global ; + composes: className from global , classNameOther from global ; + composes: className from \\"./classes.modules.css\\" ; + composes: className otherClassName from \\"./classes.modules.css\\" ; + composes: className from \\"./classes.modules.css\\" , otherClassName from \\"./classes.modules.css\\" ; + border: red; +} + +.exportNameOtherNoSpaces { + composes:className from\\"./classes.modules.css\\",beforeName from global,className; +} + +.from { + color: red; +} + +.exportNameOtherFromKeyword { + composes: from; +} + +.exportNameOtherFromKeywordWithFrom1 { + composes: from from global; +} + +.exportNameOtherFromKeywordWithFrom2 { + composes: from from \\"./classes.modules.css\\"; +} + +.exportNameWeirdCharacters { + composes: a -b b- --c c-- _d d\\\\% from \\"./classes.modules.css\\"; +} + +@function --transparent(--color , --alpha type( | )) returns { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); +} + +@function --max-plus-x(--list #, --x ) { + result: calc(max(var(--list)) + var(--x)); +} + +div { + width: --max-plus-x({1px, 7px, 2px}, 3px); /* 10px */ +} + +@function --anim-1s(--animation, --count) { + --duration: 1s; + --easing: linear; + result: var(--animation) var(--duration) var(--count) var(--easing); +} + +div { + animation: --anim-1s(local(bounce), 2); +} + +@function --outer(--outer-arg) { + --outer-local: 2; + result: --inner(); +} + +@function --inner() returns { + result: calc(var(--outer-arg) + var(--outer-local)); +} + +div { + z-index: --outer(1); /* 3 */ +} + +@function --narrow-wide(--narrow, --wide) { + result: var(--wide); + @media (width < 700px) { + result: var(--narrow); + } +} + +@function --narrow-wide-if-else(--narrow, --wide) { + result: if(media(width < 700px): var(--narrow) ; else: var(--wide)); +} + +@function --transparent(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function :local(--transparent-local)(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +@function :global(--transparent-global)(--color, --alpha) { + result: oklch(from var(--color) l c h / var(--alpha)); +} + +section { + --base-color: #faa6ff; + background-color: --transparent(var(--base-color), 0.8); + background-color: local(--transparent-local)(var(--base-color), 0.8); + background-color: global(--transparent-global)(var(--base-color), 0.8); +} + +:root { + --mode: sharp; +} + +.apply-sharp { + border-radius: if(style(--mode: sharp): 0px; else: revert-rule); +} + +@color-profile --swop5c { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile local(--swop5c-local) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile :local(--swop5c-local) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile global(--swop5c) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +@color-profile :global(--swop5c) { + src: url(https://example.org/SWOP2006_Coated5v2.icc); +} + +.class { + background-color: color(--swop5c 0% 70% 20% 0%); + background-color: color(local(--swop5c-local) 0% 70% 20% 0%); + background-color: color(:local(--swop5c-local) 0% 70% 20% 0%); + background-color: color(global(--swop5c) 0% 70% 20% 0%); + background-color: color(:global(--swop5c) 0% 70% 20% 0%); + background-color: color(--swop5c from global 0% 70% 20% 0%); + background-color: color(--from-shared from \\"./shared.css\\" 0% 70% 20% 0%); + background-color: color(local(--swop5c-local, \\"./shared.css\\") 0% 70% 20% 0%); + background-color: color(:local(--swop5c-local, \\"./shared.css\\") 0% 70% 20% 0%); +} + +:root { + --text-color: #eee; +} + +.simple { + color: var(--text-color); +} + +/* Just nesting */ +.theme-dark { + --text-color: #fff; + --bg-color: #333; + + .button { + --button-color: var(--text-color); + --button-bg: var(--bg-color); + color: var(--button-color); + background-color: var(--button-bg); + } +} + +/* A container context based on inline size */ +.post { + --themeColor: blue; + container-type: inline-size; +} + +/* Apply styles if the container is narrower than 650px */ +@container (width < 650px) and style(--themeColor: blue) { + .card { + width: 50%; + background-color: lightgray; + font-size: 1em; + } +} + +@keyframes broken; + +.class-name-after-broken-keyframes { + color: red; +} + +.no-space { + :global.class-no-space { + color: red; + } + + :global/** test **/.class { + color: red; + } + + :local.class { + color: red; + } + + :local/** test **/.class { + color: red; + } + + :local/** test **/#hash { + color: red; + } + + :local/** test **/{ + color: red; + } +} + +/* nesting */ + +.class{.class{}} +.class{color:#fff5f5} +.class{.class{color:#f1f1f1}} +.class{--foo:#fff5f5} +.class{--foo:#fff5f5;color:#f1f1f1} +.class{--foo:#fff5f5;color:#f1f1f1;} +.class{--foo:#fff5f5;color:#f1f1f1;.class{color:#f1f1f1}} +.class{--foo:#fff5f5;.class{color:#f1f1f1}color:#f1f1f1;} +.class{.class{color:#f1f1f1}--foo:#fff5f5;color:#f1f1f1;} +/* TODO fix, but this syntax is not used anywhere */ +.class{--bar:{1, 'string', .class, #f1f1f1, #id}} +.class{--baz:[1, \\"string\\", .class, #f1f1f1, #id]} +.class{--baz:(1, \\"string\\", .class, #f1f1f1, #id)} + +/* Cases for \`css/global\` */ + +.just-class { + color: red; +} + +:local(.my-simple-local) { + color: red; +} + +:global(.my-global-local) { + color: red; +} + +:local(.multiple-first.multiple-second) { + color: red; +} + +:local(.multiple-first-with-space .multiple-second-with-space) { + color: red; +} + +div:not(:local(.special)) { + color: blue; +} + +p:not(:local(#main-paragraph)) { + font-weight: bold; +} + +:local(.container) { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & :local(.header) { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & :local(.active) { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item:local(.selected) { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +.container-only-classes { + /* Styles for .container */ + background-color: lightblue; + + @media (min-width: 768px) { + /* Styles for .card on larger screens */ + display: flex; + gap: 1rem; + } + + @supports (display: grid) { + & .header { + display: grid; + grid-template-columns: 1fr 1fr; + } + } + + & .active { + /* Styles for .container.active */ + border: 2px solid blue; + } + + &.highlighted { + /* Styles for .container.highlighted */ + box-shadow: 0 0 5px yellow; + } + + /* Nesting a descendant with multiple classes */ + .item.selected { + /* Styles for .container .item.selected */ + font-weight: bold; + color: darkgreen; + } +} + +:local(.local-class-name) { + color: red; +} + +.global-befor-local :local(.local-class-name) { + color: red; +} + +:local(.local-class-name) .global-after-local { + color: red; +} + +:local(.foo) { + &:local(.class) { + a_value: some-value; + } + + @media screen and (min-width: 900px) { + b_value: some-value; + + :local(.bar) { + c_value: some-value; + } + + &:local(.baz) { + c_value: some-value; + } + } +} + +/* Composes */ + +.class { + color: black; +} + +:local(.local-class) { + color: white; +} + +:global(.global-class-other) { + color: red; +} + +:local(.class-with-composes) { + composes: + local-class, + global-class from global, + global-class-other from global, + local-my-shared-class from \\"./shared.css\\"; +} + +/* At-rules */ + +@keyframes basic-keyframes {} +@keyframes local(local-keyframes) {} +@keyframes global(global-keyframes) {} +/** Deprecated syntax */ +@keyframes :local(local-keyframes-old-syntax) {} +@keyframes :global(local-keyframes-old-syntax) {} + +.foo { + animation-name: basic-keyframes, global(global-keyframes), local(local-keyframes); +} + +@property local(--progress) { + syntax: \\"\\"; + inherits: false; + initial-value: 25%; +} + +@keyframes local(progressAnimationLocal) { + to { + --progress: 100%; + } +} + +.bar { + display: inline-block; + --progress: 25%; + width: 100%; + height: 5px; + background: linear-gradient( + to right, + #00d230 var(local(--progress)), + black var(local(--progress)) + ); + animation: local(progressAnimationLocal) 2.5s ease infinite; +} + +@scope (:local(.article-header)) to (:global(.class)) { + .article-footer { + border: 5px solid black; + } + :local(.class-1) { + color: red; + } + :global(.class-2) { + color: blue; + } +} + +/** Custom properties */ + +:root { + --foo-bar: red; + --local-foo-bar: red; + --global-foo-bar: red; + --local-and-global-in-var: + red, + local(--local-foo-bar), + global(--global-foo-bar), + /** Deprecated syntax */ + :local(--local-foo-bar), + :global(--global-foo-bar); +} + +.class { + background-color: + var(--foo-bar), + var(local(--local-foo-bar)), + var(global(--global-foo-bar)), + /** Deprecated syntax */ + var(:local(--local-foo-bar)), + var(:global(--global-foo-bar)), + var(--global-foo-bar from global), + var(--from-shared from \\"./shared.css\\"); +} + +/** Custom local value */ + +@unknown-rule local(unknown-at-rule) {} + +.class { + custom-name: local(unknown-at-rule); +} + +:global .class { + --test-1: red; + color: var(--test-1); + animation-name: animation-name-test; + local-and-global: local(animation-name-test) global(animation-name-test) +} + +/* GRID */ + +.grid1 { + grid: none; +} + +.gird2 { + grid: \\"a\\" 100px \\"b\\" 1fr; +} + +.grid3 { + grid: [line-name1] \\"a\\" 100px [line-name2]; +} + +.grid4 { + grid: \\"a\\" 200px \\"b\\" min-content; +} + +.grid5 { + grid: \\"a\\" minmax(100px, max-content) \\"b\\" 20%; +} + +.grid6 { + grid: 100px / 200px; +} + +.grid7 { + grid: minmax(400px, min-content) / repeat(auto-fill, 50px); +} + +.grid8 { + grid: 200px / auto-flow; +} + +.grid9 { + grid: 30% / auto-flow dense; +} + +.grid10 { + grid: repeat(3, [line1 line2 line3] 200px) / auto-flow 300px; +} + +.grid11 { + grid: [line1] minmax(20em, max-content) / auto-flow dense 40%; +} + +.grid12 { + grid: auto-flow / 200px; +} + +.grid13 { + grid: auto-flow dense / 30%; +} + +.grid14 { + grid: auto-flow 300px / repeat(3, [line1 line2 line3] 200px); +} + +.grid15 { + grid: auto-flow dense 40% / [line1] minmax(20em, max-content); +} + +.grid16 { + grid: inherit; + grid: initial; + grid: revert; + grid: revert-layer; + grid: unset; +} + +.grid17 { + grid-template-areas: 'nav main'; +} + +.grid-area { + grid-area: auto / auto / auto / auto; +} + +.grid-area1 { + grid-area: some-grid-area; +} + +.grid-area2 { + grid-area: some-grid-area / another-grid-area; +} + +.grid-area3 { + grid-area: 4 some-grid-area / 2 another-grid-area; +} + +.grid-area4 { + grid-area: span 3 / span some-grid-area; +} + +/* Keyword value */ +.grid-row-start { + grid-row-start: auto; +} + +/* values */ +.grid-row-start1 { + grid-row-start: some-grid-area; +} + +/* + values */ +.grid-row-start2 { + grid-row-start: 2; +} +.grid-row-start3 { + grid-row-start: some-grid-area 4; +} + +/* span + + values */ +.grid-row-start4 { + grid-row-start: span 3; +} +.grid-row-start5 { + grid-row-start: span some-grid-area; +} +.grid-row-start6 { + grid-row-start: 5 some-grid-area span; +} + +/* Global values */ +.grid-row-start7 { + grid-row-start: inherit; +} +.grid-row-start8 { + grid-row-start: initial; +} +.grid-row-start9 { + grid-row-start: revert; +} +.grid-row-start10 { + grid-row-start: revert-layer; +} +.grid-row-start11 { + grid-row-start: unset; +} + +.grid-template-areas { + grid-template-areas: + \\"a b .\\" + \\"a c d\\"; +} + +.grid-template-rows { + grid-template-rows: [line-name1] 100px [line-name2 line-name3]; +} + +.grid-template-rows1 { + grid-template-rows: + [line-name1 line-name2] 100px + repeat(auto-fit, [line-name1] 300px) [line-name3]; +} + +.grid-template-rows2 { + grid-template-rows: + [line-name1] 100px [line-name2] + repeat(auto-fit, [line-name3 line-name4] 300px) + 100px; +} + +.grid-template-rows3 { + grid-template-rows: max-content 1fr max-content; +} + +.grid-template { + grid-template: + [header-top] \\"a a a\\" [header-bottom] + [main-top] \\"b b b\\" 1fr [main-bottom] + / auto 1fr auto; +} + +.grid-container { + display: grid; + /* 1. Use repeat, auto-fit, and minmax for responsive columns. + Columns will be at least 150px wide, growing to fill available space (1fr). + Lines are named 'col-start' and 'col-end' for each track repetition. */ + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); + + /* 2. Define explicit row heights and name key row lines. */ + grid-template-rows: [header-start] 100px [header-end content-start] auto [content-end]; + + /* 3. Add gaps for spacing */ + gap: 20px; + + padding: 20px; + background-color: #f0f0f0; +} + +.class { + grid-template-columns: repeat(auto-fit, [col-start] minmax(150px, 1fr) [col-end]); +} + +.wrapper { + display: grid; + grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end]; + grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end]; +} + +.box1 { + grid-column-start: main-start; + grid-row-start: main-start; + grid-row-end: main-end; +} + +.box2 { + grid-column-start: content-end; + grid-row-start: main-start; + grid-row-end: content-end; +} + +.box3 { + grid-column-start: content-start; + grid-row-start: main-start; +} + +.box4 { + grid-column-start: content-start; + grid-column-end: main-end; + grid-row-start: content-end; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(9, 1fr); + grid-auto-rows: minmax(100px, auto); + grid-template-areas: + \\"hd hd hd hd hd hd hd hd hd\\" + \\"sd sd sd main main main main main main\\" + \\"ft ft ft ft ft ft ft ft ft\\"; +} + +.header { + grid-area: hd; +} + +.footer { + grid-area: ft; +} + +.content { + grid-area: main; +} + +.sidebar { + grid-area: sd; +} + +.wrapper > div.overlay { + z-index: 10; + grid-column: main-start / main-end; + grid-row: hd-start / ft-end; + border: 4px solid rgb(92 148 13); + background-color: rgb(92 148 13 / 40%); + color: rgb(92 148 13); + font-size: 150%; +} + +.wrapper { + display: grid; + grid-template-columns: repeat(12, [col-start] 1fr); +} + +.item1to5 { + grid-column: col-start / col-start 5; +} + +.item7to9 { + grid-column: col-start 7 / span 3; +} + +.wrapper { + grid-template-columns: repeat(4, [col1-start] 1fr [col2-start] 3fr); +} + +.wrapper { + grid-template-columns: repeat(4, [col-start] 1fr [col-end]); +} + +.wrapper { + grid-template-columns: [col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end col-start] 1fr [col-end]; +} + +.importantAnimation { + animation: none !important; + animation-name: none !important; + color: red !important; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +.class { + color: red; + background: var(--color); +} + +@keyframes test { + 0% { + color: red; + } + 100% { + color: blue; + } +} + +:local(.class) { + color: red; +} + +:local .class { + color: green; +} + +:global(.class) { + color: blue; +} + +:global .class { + color: white; +} + +:export { + foo: bar; +} + +.class { + animation: test 1s, test; +} + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/css/pure-css/index.js b/test/configCases/css/pure-css/index.js new file mode 100644 index 00000000000..3b26850a1e7 --- /dev/null +++ b/test/configCases/css/pure-css/index.js @@ -0,0 +1,14 @@ +import "./style.css"; + +it("should compile", done => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); + done(); +}); diff --git a/test/configCases/css/pure-css/style.css b/test/configCases/css/pure-css/style.css new file mode 100644 index 00000000000..6d8da5a2a7b --- /dev/null +++ b/test/configCases/css/pure-css/style.css @@ -0,0 +1,39 @@ +@import url("../css-modules/style.module.css"); + +.class { + color: red; + background: var(--color); +} + +@keyframes test { + 0% { + color: red; + } + 100% { + color: blue; + } +} + +:local(.class) { + color: red; +} + +:local .class { + color: green; +} + +:global(.class) { + color: blue; +} + +:global .class { + color: white; +} + +:export { + foo: bar; +} + +.class { + animation: test 1s, test; +} diff --git a/test/configCases/css/pure-css/test.config.js b/test/configCases/css/pure-css/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/pure-css/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/pure-css/webpack.config.js b/test/configCases/css/pure-css/webpack.config.js new file mode 100644 index 00000000000..1955d3808f9 --- /dev/null +++ b/test/configCases/css/pure-css/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + module: { + rules: [ + { + test: /\.css$/i, + type: "css" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/css/reexport/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/reexport/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..e9bcb412e58 --- /dev/null +++ b/test/configCases/css/reexport/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,1473 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css reexport exported tests should work with asset modules 1`] = ` +"/*!************************************!*\\\\ + !*** css ./colors-more.module.css ***! + \\\\************************************/ + + + +/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + +/*!******************************!*\\\\ + !*** css ./theme.module.css ***! + \\\\******************************/ + + + + + +/*!**************************************!*\\\\ + !*** css ./value-at-rule.module.css ***! + \\\\**************************************/ + + + + + + +.value-at-rule_module_css-color { + color: #e74c3c +} + +.value-at-rule_module_css-button { + background-color: #3498db; + color: white; +} + +.value-at-rule_module_css-button-error { + background-color: #e74c3c; + border: 2px solid darkred; +} + +/*!*********************************!*\\\\ + !*** css ./cyclical.module.css ***! + \\\\*********************************/ + +.cyclical_module_css-class { + color: __value__; +} + +.cyclical_module_css-class-with-composes-nested { + } + + +/*!***********************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep-more.module.css ***! + \\\\***********************************************************/ + +/*!******************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep.module.css ***! + \\\\******************************************************/ + + +/*!*************************************************!*\\\\ + !*** css ./pseudo-import-and-export.module.css ***! + \\\\*************************************************/ + + +/*!******************************!*\\\\ + !*** css ./reset.module.css ***! + \\\\******************************/ +.reset_module_css-reset-display { + display: unset; +} + +/*!************************************!*\\\\ + !*** css ./atoms-extra.module.css ***! + \\\\************************************/ +.atoms-extra_module_css-transition { + transition: transform 0.2s ease; +} + +.atoms-extra_module_css-cursor { + cursor: pointer; +} + +/*!******************************!*\\\\ + !*** css ./atoms.module.css ***! + \\\\******************************/ +.atoms_module_css-display-flex { + display: flex; +} + +.atoms_module_css-align-center { + align-items: center; +} + +.atoms_module_css-padding-box { + padding: 16px; +} + +.atoms_module_css-interactive { + will-change: transform; +} + +.atoms_module_css-interactive:hover { + transform: scale(1.02); +} + +/*!****************************************!*\\\\ + !*** css ./button-reexport.module.css ***! + \\\\****************************************/ +.button-reexport_module_css-base-reexport { + border: 1px solid #ccc; + border-radius: 8px; +} + +/*!*******************************!*\\\\ + !*** css ./button.module.css ***! + \\\\*******************************/ +.button_module_css-base { + border: 1px solid #ccc; + border-radius: 8px; +} + + + +/*!******************************!*\\\\ + !*** css ./abcd.modules.css ***! + \\\\******************************/ +.abcd_modules_css-a { + color: a; +} + +.abcd_modules_css-b { + color: b; +} + +.abcd_modules_css-c { + color: c; +} + +.abcd_modules_css-d { + color: d; +} + +.abcd_modules_css-e { + color: d; +} + +.abcd_modules_css-f { + } + +/*!*************************************!*\\\\ + !*** css ./classes-deep.module.css ***! + \\\\*************************************/ +.classes-deep_module_css-deep-selector { + color: red; +} + +.classes-deep_module_css-deep-selector-with-composes { + color: red; +} + +.classes-deep_module_css-deep-selector-with-composes { + } + +.classes-deep_module_css-deep-nested-c { + color: red; +} + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ + +.classes_module_css-localName { + background: red; +} + +.classes_module_css-localNameOther { + color: blue; +} + +.classes_module_css-bar { + } + + + + + + +/*!*****************************************!*\\\\ + !*** css ./classes-the-same.module.css ***! + \\\\*****************************************/ +.classes-the-same_module_css-localName { + background: blue; +} + +/*!*****************************!*\\\\ + !*** css ./vars.module.css ***! + \\\\*****************************/ +:root { + --vars_module_css-my-var-u1: red; +} + +.vars_module_css-my-var-u1 { + color: red; +} + +/*!******************************************************!*\\\\ + !*** css ./shared-deep-custom-properties.module.css ***! + \\\\******************************************************/ +:root { + --shared-deep-custom-properties_module_css-deep-shared: black; +} + +/*!*************************************************!*\\\\ + !*** css ./shared-custom-properties.module.css ***! + \\\\*************************************************/ +:root { + --shared-custom-properties_module_css-shared: blue; + --shared-custom-properties_module_css-deep-shared: var(--shared-deep-custom-properties_module_css-deep-shared) +} + +/*!***************************************!*\\\\ + !*** css ./selectors-more.module.css ***! + \\\\***************************************/ + + +/*!**********************************!*\\\\ + !*** css ./selectors.module.css ***! + \\\\**********************************/ + + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.styles_module_css_d9f7-button-color-red { + color: red; +} + +.styles_module_css_d9f7-u-1\\\\/2 { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.styles_module_css_d9f7-composes-here { + display: block; +} + +.styles_module_css_d9f7-composes-here { + background-color: black; +} + +.styles_module_css_d9f7-button-complex { + background: blue; +} + +.styles_module_css_d9f7-button-complex-1 { + } + +.styles_module_css_d9f7-button-complex-2 { + } + +.styles_module_css_d9f7-local-composes { + color: blue; +} + +.styles_module_css_d9f7-local-composes { + color: blue; +} + + +.styles_module_css_d9f7-local-composes-with-reexport { + color: blue; +} + + + +.styles_module_css_d9f7-local-composes-with-reexport-and-value { + color: blue; +} + +.styles_module_css_d9f7-exportName73 { color: red; } +.styles_module_css_d9f7-exportName74 { color: green; } +.styles_module_css_d9f7-exportName75 { color: blue } +.styles_module_css_d9f7-exportName74 { color: white; } +.styles_module_css_d9f7-exportName74 { color: black; } + +.styles_module_css_d9f7-multiple-composes-with-simple { + color: red; +} + +.styles_module_css_d9f7-multiple-composes-with-composes { + color: blue; +} + +.styles_module_css_d9f7-the-same-classes-in-composes-but-different-modules { + } + +:root { + --styles_module_css_d9f7-color: red; +} + + + + +.styles_module_css_d9f7-custom-properties { + color: var(--styles_module_css_d9f7-color); + background-color: var(--shared-custom-properties_module_css-shared); + border-color: var(--shared-custom-properties_module_css-deep-shared); + outline-color: var(--styles_module_css_d9f7-color); + text-decoration-color: var(--vars_module_css-my-var-u1); +} + +.styles_module_css_d9f7-from { + color: var(--vars_module_css-my-var-u1); +} + + + +.styles_module_css_d9f7-button-with-color { + background-color: #3498db; + color: #2ecc71; +} + + + +.styles_module_css_d9f7-button-with-color-too { + color: red; +} + + + + +.styles_module_css_d9f7-button-rename-1 { + background-color: #3498db; +} + + + + +.styles_module_css_d9f7-button-rename-2 { + background-color: #e74c3c; +} + + + + +.styles_module_css_d9f7-button-rename-3 { + background-color: #e74c3c; +} + + + + +.styles_module_css_d9f7-button-rename-4 { + background-color: #c1c2c3; +} + +.styles_module_css_d9f7-button-export-5 { + content: \\"export3-value\\" +} + + +.styles_module_css_d9f7-my-selector-value { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.styles_module_css_d9f7-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.styles_module_css_d9f7-class-with-composes { + } + + +.styles_module_css_d9f7-class-local-my { color: red } + +.styles_module_css_d9f7-composes-from-import { + color: red; +} + + +.styles_module_css_d9f7-local-for-reexport { color: #3498db; } + +.styles_module_css_d9f7-deep-reexport-in-composes { + } + + +.styles_module_css_d9f7-deep-reexport-in-composes-other { + } + + +.styles_module_css_d9f7-only-reexport { + } + + +.styles_module_css_d9f7-class-from-pseudo-import { + color: classes_module_css-localName; +} + + + +.styles_module_css_d9f7-class { + color: __value_cyclical__; +} + + + + + +.styles_module_css_d9f7-local-for-reexport { color: #3498db; } + +.styles_module_css_d9f7-deep-reexport-in-composes-other-other { + } + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.styles_module_css_be02-button-color-red { + color: red; +} + +.styles_module_css_be02-u-1\\\\/2 { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.styles_module_css_be02-composes-here { + display: block; +} + +.styles_module_css_be02-composes-here { + background-color: black; +} + +.styles_module_css_be02-button-complex { + background: blue; +} + +.styles_module_css_be02-button-complex-1 { + } + +.styles_module_css_be02-button-complex-2 { + } + +.styles_module_css_be02-local-composes { + color: blue; +} + +.styles_module_css_be02-local-composes { + color: blue; +} + + +.styles_module_css_be02-local-composes-with-reexport { + color: blue; +} + + + +.styles_module_css_be02-local-composes-with-reexport-and-value { + color: blue; +} + +.styles_module_css_be02-exportName73 { color: red; } +.styles_module_css_be02-exportName74 { color: green; } +.styles_module_css_be02-exportName75 { color: blue } +.styles_module_css_be02-exportName74 { color: white; } +.styles_module_css_be02-exportName74 { color: black; } + +.styles_module_css_be02-multiple-composes-with-simple { + color: red; +} + +.styles_module_css_be02-multiple-composes-with-composes { + color: blue; +} + +.styles_module_css_be02-the-same-classes-in-composes-but-different-modules { + } + +:root { + --styles_module_css_be02-color: red; +} + + + + +.styles_module_css_be02-custom-properties { + color: var(--styles_module_css_be02-color); + background-color: var(--shared-custom-properties_module_css-shared); + border-color: var(--shared-custom-properties_module_css-deep-shared); + outline-color: var(--styles_module_css_be02-color); + text-decoration-color: var(--vars_module_css-my-var-u1); +} + +.styles_module_css_be02-from { + color: var(--vars_module_css-my-var-u1); +} + + + +.styles_module_css_be02-button-with-color { + background-color: #3498db; + color: #2ecc71; +} + + + +.styles_module_css_be02-button-with-color-too { + color: red; +} + + + + +.styles_module_css_be02-button-rename-1 { + background-color: #3498db; +} + + + + +.styles_module_css_be02-button-rename-2 { + background-color: #e74c3c; +} + + + + +.styles_module_css_be02-button-rename-3 { + background-color: #e74c3c; +} + + + + +.styles_module_css_be02-button-rename-4 { + background-color: #c1c2c3; +} + +.styles_module_css_be02-button-export-5 { + content: \\"export3-value\\" +} + + +.styles_module_css_be02-my-selector-value { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.styles_module_css_be02-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.styles_module_css_be02-class-with-composes { + } + + +.styles_module_css_be02-class-local-my { color: red } + +.styles_module_css_be02-composes-from-import { + color: red; +} + + +.styles_module_css_be02-local-for-reexport { color: #3498db; } + +.styles_module_css_be02-deep-reexport-in-composes { + } + + +.styles_module_css_be02-deep-reexport-in-composes-other { + } + + +.styles_module_css_be02-only-reexport { + } + + +.styles_module_css_be02-class-from-pseudo-import { + color: classes_module_css-localName; +} + + + +.styles_module_css_be02-class { + color: __value_cyclical__; +} + + + + + +.styles_module_css_be02-local-for-reexport { color: #3498db; } + +.styles_module_css_be02-deep-reexport-in-composes-other-other { + } + + +" +`; + +exports[`ConfigCacheTestCases css reexport exported tests should work with asset modules 2`] = ` +Object { + "--my-custom-property-1": "--color", + "alias-other-selector": "other-selector-value", + "blue": "#3498db", + "button-color-red": "styles_module_css_be02-button-color-red", + "button-complex": "styles_module_css_be02-button-complex styles_module_css_be02-u-1/2 styles_module_css_be02-local-composes styles_module_css_be02-composes-here bar styles_module_css_be02-button-color-red button-global-font-size button_module_css-base atoms_module_css-display-flex atoms_module_css-align-center atoms_module_css-padding-box atoms_module_css-interactive atoms-extra_module_css-transition reset_module_css-reset-display atoms-extra_module_css-cursor", + "button-complex-1": "styles_module_css_be02-button-complex-1 button-reexport_module_css-base-reexport atoms_module_css-display-flex atoms_module_css-align-center atoms_module_css-padding-box atoms_module_css-interactive atoms-extra_module_css-transition reset_module_css-reset-display atoms-extra_module_css-cursor", + "button-complex-2": "styles_module_css_be02-button-complex-2 styles_module_css_be02-local-composes styles_module_css_be02-composes-here bar", + "button-export-5": "styles_module_css_be02-button-export-5", + "button-rename-1": "styles_module_css_be02-button-rename-1", + "button-rename-2": "styles_module_css_be02-button-rename-2", + "button-rename-3": "styles_module_css_be02-button-rename-3", + "button-rename-4": "styles_module_css_be02-button-rename-4", + "button-with-color": "styles_module_css_be02-button-with-color", + "button-with-color-too": "styles_module_css_be02-button-with-color-too", + "class": "styles_module_css_be02-class", + "class-from-pseudo-import": "styles_module_css_be02-class-from-pseudo-import", + "class-local-my": "styles_module_css_be02-class-local-my", + "class-with-composes": "styles_module_css_be02-class-with-composes styles_module_css_be02-local-class global-class global-class-other classes_module_css-localName", + "color": "--styles_module_css_be02-color", + "colors": "\\"./colors.module.css\\"", + "composes-from-import": "styles_module_css_be02-composes-from-import styles_module_css_be02-class-local-my abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d abcd_modules_css-f abcd_modules_css-e", + "composes-here": "styles_module_css_be02-composes-here", + "composes-test-here": "composes-here", + "custom-properties": "styles_module_css_be02-custom-properties", + "cyclical": "__value_cyclical__", + "danger": "#e74c3c", + "danger-alias": "#e74c3c", + "danger-alias-selector": "#e74c3c", + "deep-reexport-in-composes": "styles_module_css_be02-deep-reexport-in-composes styles_module_css_be02-local-for-reexport classes-deep_module_css-deep-selector", + "deep-reexport-in-composes-other": "styles_module_css_be02-deep-reexport-in-composes-other styles_module_css_be02-local-for-reexport classes-deep_module_css-deep-selector-with-composes classes-deep_module_css-deep-selector", + "deep-reexport-in-composes-other-other": "styles_module_css_be02-deep-reexport-in-composes-other-other styles_module_css_be02-local-for-reexport classes-deep_module_css-deep-selector", + "deep-shared": "--shared-custom-properties_module_css-deep-shared", + "export": "\\"export-value\\"", + "export1": "\\"export1-value\\"", + "export2": "\\"export2-value\\"", + "export3": "\\"export3-value\\"", + "exportName73": "styles_module_css_be02-exportName73 classes_module_css-bar classes_module_css-localName", + "exportName74": "styles_module_css_be02-exportName74 styles_module_css_be02-exportName73 classes_module_css-bar classes_module_css-localName styles_module_css_be02-exportName75 my-global", + "exportName75": "styles_module_css_be02-exportName75", + "foo": "red", + "from": "styles_module_css_be02-from", + "in-composes": "classes-deep_module_css-deep-selector", + "local-class": "styles_module_css_be02-local-class", + "local-composes": "styles_module_css_be02-local-composes styles_module_css_be02-composes-here bar styles_module_css_be02-composes-here", + "local-composes-with-reexport": "styles_module_css_be02-local-composes-with-reexport styles_module_css_be02-composes-here abcd_modules_css-f abcd_modules_css-e bar", + "local-composes-with-reexport-and-value": "styles_module_css_be02-local-composes-with-reexport-and-value styles_module_css_be02-composes-here abcd_modules_css-f abcd_modules_css-e bar", + "local-for-reexport": "styles_module_css_be02-local-for-reexport", + "multiple-composes-with-composes": "styles_module_css_be02-multiple-composes-with-composes classes_module_css-localName classes_module_css-bar classes_module_css-localName", + "multiple-composes-with-simple": "styles_module_css_be02-multiple-composes-with-simple classes_module_css-localName classes_module_css-localNameOther", + "my-custom-color": "#2ecc71", + "my-custom-property-1": "--styles_module_css_be02-color", + "my-var-u1": "--vars_module_css-my-var-u1", + "only-reexport": "styles_module_css_be02-only-reexport classes-deep_module_css-deep-nested-c", + "other-selector": "other-selector-value", + "primary": "#3498db", + "reexport": "classes_module_css-localName", + "reexport-my-var-u1": "--vars_module_css-my-var-u1", + "reexport-selector": "reexport-selector-value", + "reexport-selector-alias": "reexport-selector-value", + "rename": "#3498db", + "rename-2": "#e74c3c", + "rename-3": "#e74c3c", + "selector": "my-selector-value", + "shared": "--shared-custom-properties_module_css-shared", + "the-same-classes-in-composes-but-different-modules": "styles_module_css_be02-the-same-classes-in-composes-but-different-modules classes_module_css-localName classes-the-same_module_css-localName", + "third": "#c1c2c3", + "u-1/2": "styles_module_css_be02-u-1/2", +} +`; + +exports[`ConfigCacheTestCases css reexport exported tests should work with asset modules 3`] = ` +"/*!************************************!*\\\\ + !*** css ./colors-more.module.css ***! + \\\\************************************/ + + + +/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + +/*!******************************!*\\\\ + !*** css ./theme.module.css ***! + \\\\******************************/ + + + + + +/*!**************************************!*\\\\ + !*** css ./value-at-rule.module.css ***! + \\\\**************************************/ + + + + + + +.S3xPqZ { + color: #e74c3c +} + +.DSFgG0 { + background-color: #3498db; + color: white; +} + +.Rm7a_t { + background-color: #e74c3c; + border: 2px solid darkred; +} + +/*!*********************************!*\\\\ + !*** css ./cyclical.module.css ***! + \\\\*********************************/ + +._9gmTyg { + color: __value__; +} + +.Tm1Jev { + } + + +/*!***********************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep-more.module.css ***! + \\\\***********************************************************/ + +/*!******************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep.module.css ***! + \\\\******************************************************/ + + +/*!*************************************************!*\\\\ + !*** css ./pseudo-import-and-export.module.css ***! + \\\\*************************************************/ + + +/*!******************************!*\\\\ + !*** css ./reset.module.css ***! + \\\\******************************/ +.r7veIg { + display: unset; +} + +/*!************************************!*\\\\ + !*** css ./atoms-extra.module.css ***! + \\\\************************************/ +.uTFqYl { + transition: transform 0.2s ease; +} + +._G2W-m { + cursor: pointer; +} + +/*!******************************!*\\\\ + !*** css ./atoms.module.css ***! + \\\\******************************/ +._4hzrjS { + display: flex; +} + +._3N7KUJ { + align-items: center; +} + +.FOqO9N { + padding: 16px; +} + +.h1WMpX { + will-change: transform; +} + +.h1WMpX:hover { + transform: scale(1.02); +} + +/*!****************************************!*\\\\ + !*** css ./button-reexport.module.css ***! + \\\\****************************************/ +._3hkn5Z { + border: 1px solid #ccc; + border-radius: 8px; +} + +/*!*******************************!*\\\\ + !*** css ./button.module.css ***! + \\\\*******************************/ +.IRudRu { + border: 1px solid #ccc; + border-radius: 8px; +} + + + +/*!******************************!*\\\\ + !*** css ./abcd.modules.css ***! + \\\\******************************/ +._0bqD8c { + color: a; +} + +.JJtGTB { + color: b; +} + +.BNoXdB { + color: c; +} + +.xoOP4R { + color: d; +} + +._6NOMLC { + color: d; +} + +.L4uOGL { + } + +/*!*************************************!*\\\\ + !*** css ./classes-deep.module.css ***! + \\\\*************************************/ +._1U1vje { + color: red; +} + +.OPw9Jj { + color: red; +} + +.OPw9Jj { + } + +.h7hEph { + color: red; +} + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ + +.sQL78s { + background: red; +} + +.Cpujl1 { + color: blue; +} + +.pmxb7o { + } + + + + + + +/*!*****************************************!*\\\\ + !*** css ./classes-the-same.module.css ***! + \\\\*****************************************/ +.MClDz9 { + background: blue; +} + +/*!*****************************!*\\\\ + !*** css ./vars.module.css ***! + \\\\*****************************/ +:root { + --KP4m31: red; +} + +.KP4m31 { + color: red; +} + +/*!******************************************************!*\\\\ + !*** css ./shared-deep-custom-properties.module.css ***! + \\\\******************************************************/ +:root { + --_7xy4NT: black; +} + +/*!*************************************************!*\\\\ + !*** css ./shared-custom-properties.module.css ***! + \\\\*************************************************/ +:root { + --qX-CSb: blue; + --_TnMz_: var(--_7xy4NT) +} + +/*!***************************************!*\\\\ + !*** css ./selectors-more.module.css ***! + \\\\***************************************/ + + +/*!**********************************!*\\\\ + !*** css ./selectors.module.css ***! + \\\\**********************************/ + + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.Nk2MvV { + color: red; +} + +.FVlv2P { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.vTFlpN { + display: block; +} + +.vTFlpN { + background-color: black; +} + +.m8FtUN { + background: blue; +} + +.OG0OVF { + } + +.kp2wNS { + } + +.vupji7 { + color: blue; +} + +.vupji7 { + color: blue; +} + + +.VTgblp { + color: blue; +} + + + +.XeMa0a { + color: blue; +} + +.qgqd-J { color: red; } +.Ns9rmr { color: green; } +.hsOyo6 { color: blue } +.Ns9rmr { color: white; } +.Ns9rmr { color: black; } + +.s5T2tp { + color: red; +} + +.kAC3V_ { + color: blue; +} + +.u0iYW_ { + } + +:root { + --uGelqc: red; +} + + + + +.unbpP8 { + color: var(--uGelqc); + background-color: var(--qX-CSb); + border-color: var(--_TnMz_); + outline-color: var(--uGelqc); + text-decoration-color: var(--KP4m31); +} + +.MI7KS4 { + color: var(--KP4m31); +} + + + +.bAMUwp { + background-color: #3498db; + color: #2ecc71; +} + + + +.f2oaPF { + color: red; +} + + + + +.EwEwRz { + background-color: #3498db; +} + + + + +.tmQHLg { + background-color: #e74c3c; +} + + + + +.F5aPmd { + background-color: #e74c3c; +} + + + + +._T5aMe { + background-color: #c1c2c3; +} + +.nqaRG2 { + content: \\"export3-value\\" +} + + +.BBfiX6 { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.gAniDw { + color: white; +} + +.global-class-other { + color: red; +} + +.gRd4c8 { + } + + +.saX-62 { color: red } + +._2HzoTb { + color: red; +} + + +.-F4AOV { color: #3498db; } + +._0XYMUG { + } + + +.zB77X1 { + } + + +.CiSiqk { + } + + +.R3-Tbw { + color: sQL78s; +} + + + +.A7_UOA { + color: __value_cyclical__; +} + + + + + +.-F4AOV { color: #3498db; } + +.Hh8KGg { + } + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.Nk2MvV { + color: red; +} + +.FVlv2P { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.vTFlpN { + display: block; +} + +.vTFlpN { + background-color: black; +} + +.m8FtUN { + background: blue; +} + +.OG0OVF { + } + +.kp2wNS { + } + +.vupji7 { + color: blue; +} + +.vupji7 { + color: blue; +} + + +.VTgblp { + color: blue; +} + + + +.XeMa0a { + color: blue; +} + +.qgqd-J { color: red; } +.Ns9rmr { color: green; } +.hsOyo6 { color: blue } +.Ns9rmr { color: white; } +.Ns9rmr { color: black; } + +.s5T2tp { + color: red; +} + +.kAC3V_ { + color: blue; +} + +.u0iYW_ { + } + +:root { + --uGelqc: red; +} + + + + +.unbpP8 { + color: var(--uGelqc); + background-color: var(--qX-CSb); + border-color: var(--_TnMz_); + outline-color: var(--uGelqc); + text-decoration-color: var(--KP4m31); +} + +.MI7KS4 { + color: var(--KP4m31); +} + + + +.bAMUwp { + background-color: #3498db; + color: #2ecc71; +} + + + +.f2oaPF { + color: red; +} + + + + +.EwEwRz { + background-color: #3498db; +} + + + + +.tmQHLg { + background-color: #e74c3c; +} + + + + +.F5aPmd { + background-color: #e74c3c; +} + + + + +._T5aMe { + background-color: #c1c2c3; +} + +.nqaRG2 { + content: \\"export3-value\\" +} + + +.BBfiX6 { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.gAniDw { + color: white; +} + +.global-class-other { + color: red; +} + +.gRd4c8 { + } + + +.saX-62 { color: red } + +._2HzoTb { + color: red; +} + + +.-F4AOV { color: #3498db; } + +._0XYMUG { + } + + +.zB77X1 { + } + + +.CiSiqk { + } + + +.R3-Tbw { + color: sQL78s; +} + + + +.A7_UOA { + color: __value_cyclical__; +} + + + + + +.-F4AOV { color: #3498db; } + +.Hh8KGg { + } + + +" +`; + +exports[`ConfigCacheTestCases css reexport exported tests should work with asset modules 4`] = ` +Object { + "--my-custom-property-1": "--color", + "alias-other-selector": "other-selector-value", + "blue": "#3498db", + "button-color-red": "Nk2MvV", + "button-complex": "m8FtUN FVlv2P vupji7 vTFlpN bar Nk2MvV button-global-font-size IRudRu _4hzrjS _3N7KUJ FOqO9N h1WMpX uTFqYl r7veIg _G2W-m", + "button-complex-1": "OG0OVF _3hkn5Z _4hzrjS _3N7KUJ FOqO9N h1WMpX uTFqYl r7veIg _G2W-m", + "button-complex-2": "kp2wNS vupji7 vTFlpN bar", + "button-export-5": "nqaRG2", + "button-rename-1": "EwEwRz", + "button-rename-2": "tmQHLg", + "button-rename-3": "F5aPmd", + "button-rename-4": "_T5aMe", + "button-with-color": "bAMUwp", + "button-with-color-too": "f2oaPF", + "class": "A7_UOA", + "class-from-pseudo-import": "R3-Tbw", + "class-local-my": "saX-62", + "class-with-composes": "gRd4c8 gAniDw global-class global-class-other sQL78s", + "color": "--uGelqc", + "colors": "\\"./colors.module.css\\"", + "composes-from-import": "_2HzoTb saX-62 _0bqD8c JJtGTB BNoXdB d e f xoOP4R L4uOGL _6NOMLC", + "composes-here": "vTFlpN", + "composes-test-here": "composes-here", + "custom-properties": "unbpP8", + "cyclical": "__value_cyclical__", + "danger": "#e74c3c", + "danger-alias": "#e74c3c", + "danger-alias-selector": "#e74c3c", + "deep-reexport-in-composes": "_0XYMUG -F4AOV _1U1vje", + "deep-reexport-in-composes-other": "zB77X1 -F4AOV OPw9Jj _1U1vje", + "deep-reexport-in-composes-other-other": "Hh8KGg -F4AOV _1U1vje", + "deep-shared": "--_TnMz_", + "export": "\\"export-value\\"", + "export1": "\\"export1-value\\"", + "export2": "\\"export2-value\\"", + "export3": "\\"export3-value\\"", + "exportName73": "qgqd-J pmxb7o sQL78s", + "exportName74": "Ns9rmr qgqd-J pmxb7o sQL78s hsOyo6 my-global", + "exportName75": "hsOyo6", + "foo": "red", + "from": "MI7KS4", + "in-composes": "_1U1vje", + "local-class": "gAniDw", + "local-composes": "vupji7 vTFlpN bar vTFlpN", + "local-composes-with-reexport": "VTgblp vTFlpN L4uOGL _6NOMLC bar", + "local-composes-with-reexport-and-value": "XeMa0a vTFlpN L4uOGL _6NOMLC bar", + "local-for-reexport": "-F4AOV", + "multiple-composes-with-composes": "kAC3V_ sQL78s pmxb7o sQL78s", + "multiple-composes-with-simple": "s5T2tp sQL78s Cpujl1", + "my-custom-color": "#2ecc71", + "my-custom-property-1": "--uGelqc", + "my-var-u1": "--KP4m31", + "only-reexport": "CiSiqk h7hEph", + "other-selector": "other-selector-value", + "primary": "#3498db", + "reexport": "sQL78s", + "reexport-my-var-u1": "--KP4m31", + "reexport-selector": "reexport-selector-value", + "reexport-selector-alias": "reexport-selector-value", + "rename": "#3498db", + "rename-2": "#e74c3c", + "rename-3": "#e74c3c", + "selector": "my-selector-value", + "shared": "--qX-CSb", + "the-same-classes-in-composes-but-different-modules": "u0iYW_ sQL78s MClDz9", + "third": "#c1c2c3", + "u-1/2": "FVlv2P", +} +`; diff --git a/test/configCases/css/reexport/__snapshots__/ConfigTest.snap b/test/configCases/css/reexport/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..19300dc7504 --- /dev/null +++ b/test/configCases/css/reexport/__snapshots__/ConfigTest.snap @@ -0,0 +1,1473 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css reexport exported tests should work with asset modules 1`] = ` +"/*!************************************!*\\\\ + !*** css ./colors-more.module.css ***! + \\\\************************************/ + + + +/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + +/*!******************************!*\\\\ + !*** css ./theme.module.css ***! + \\\\******************************/ + + + + + +/*!**************************************!*\\\\ + !*** css ./value-at-rule.module.css ***! + \\\\**************************************/ + + + + + + +.value-at-rule_module_css-color { + color: #e74c3c +} + +.value-at-rule_module_css-button { + background-color: #3498db; + color: white; +} + +.value-at-rule_module_css-button-error { + background-color: #e74c3c; + border: 2px solid darkred; +} + +/*!*********************************!*\\\\ + !*** css ./cyclical.module.css ***! + \\\\*********************************/ + +.cyclical_module_css-class { + color: __value__; +} + +.cyclical_module_css-class-with-composes-nested { + } + + +/*!***********************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep-more.module.css ***! + \\\\***********************************************************/ + +/*!******************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep.module.css ***! + \\\\******************************************************/ + + +/*!*************************************************!*\\\\ + !*** css ./pseudo-import-and-export.module.css ***! + \\\\*************************************************/ + + +/*!******************************!*\\\\ + !*** css ./reset.module.css ***! + \\\\******************************/ +.reset_module_css-reset-display { + display: unset; +} + +/*!************************************!*\\\\ + !*** css ./atoms-extra.module.css ***! + \\\\************************************/ +.atoms-extra_module_css-transition { + transition: transform 0.2s ease; +} + +.atoms-extra_module_css-cursor { + cursor: pointer; +} + +/*!******************************!*\\\\ + !*** css ./atoms.module.css ***! + \\\\******************************/ +.atoms_module_css-display-flex { + display: flex; +} + +.atoms_module_css-align-center { + align-items: center; +} + +.atoms_module_css-padding-box { + padding: 16px; +} + +.atoms_module_css-interactive { + will-change: transform; +} + +.atoms_module_css-interactive:hover { + transform: scale(1.02); +} + +/*!****************************************!*\\\\ + !*** css ./button-reexport.module.css ***! + \\\\****************************************/ +.button-reexport_module_css-base-reexport { + border: 1px solid #ccc; + border-radius: 8px; +} + +/*!*******************************!*\\\\ + !*** css ./button.module.css ***! + \\\\*******************************/ +.button_module_css-base { + border: 1px solid #ccc; + border-radius: 8px; +} + + + +/*!******************************!*\\\\ + !*** css ./abcd.modules.css ***! + \\\\******************************/ +.abcd_modules_css-a { + color: a; +} + +.abcd_modules_css-b { + color: b; +} + +.abcd_modules_css-c { + color: c; +} + +.abcd_modules_css-d { + color: d; +} + +.abcd_modules_css-e { + color: d; +} + +.abcd_modules_css-f { + } + +/*!*************************************!*\\\\ + !*** css ./classes-deep.module.css ***! + \\\\*************************************/ +.classes-deep_module_css-deep-selector { + color: red; +} + +.classes-deep_module_css-deep-selector-with-composes { + color: red; +} + +.classes-deep_module_css-deep-selector-with-composes { + } + +.classes-deep_module_css-deep-nested-c { + color: red; +} + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ + +.classes_module_css-localName { + background: red; +} + +.classes_module_css-localNameOther { + color: blue; +} + +.classes_module_css-bar { + } + + + + + + +/*!*****************************************!*\\\\ + !*** css ./classes-the-same.module.css ***! + \\\\*****************************************/ +.classes-the-same_module_css-localName { + background: blue; +} + +/*!*****************************!*\\\\ + !*** css ./vars.module.css ***! + \\\\*****************************/ +:root { + --vars_module_css-my-var-u1: red; +} + +.vars_module_css-my-var-u1 { + color: red; +} + +/*!******************************************************!*\\\\ + !*** css ./shared-deep-custom-properties.module.css ***! + \\\\******************************************************/ +:root { + --shared-deep-custom-properties_module_css-deep-shared: black; +} + +/*!*************************************************!*\\\\ + !*** css ./shared-custom-properties.module.css ***! + \\\\*************************************************/ +:root { + --shared-custom-properties_module_css-shared: blue; + --shared-custom-properties_module_css-deep-shared: var(--shared-deep-custom-properties_module_css-deep-shared) +} + +/*!***************************************!*\\\\ + !*** css ./selectors-more.module.css ***! + \\\\***************************************/ + + +/*!**********************************!*\\\\ + !*** css ./selectors.module.css ***! + \\\\**********************************/ + + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.styles_module_css_d9f7-button-color-red { + color: red; +} + +.styles_module_css_d9f7-u-1\\\\/2 { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.styles_module_css_d9f7-composes-here { + display: block; +} + +.styles_module_css_d9f7-composes-here { + background-color: black; +} + +.styles_module_css_d9f7-button-complex { + background: blue; +} + +.styles_module_css_d9f7-button-complex-1 { + } + +.styles_module_css_d9f7-button-complex-2 { + } + +.styles_module_css_d9f7-local-composes { + color: blue; +} + +.styles_module_css_d9f7-local-composes { + color: blue; +} + + +.styles_module_css_d9f7-local-composes-with-reexport { + color: blue; +} + + + +.styles_module_css_d9f7-local-composes-with-reexport-and-value { + color: blue; +} + +.styles_module_css_d9f7-exportName73 { color: red; } +.styles_module_css_d9f7-exportName74 { color: green; } +.styles_module_css_d9f7-exportName75 { color: blue } +.styles_module_css_d9f7-exportName74 { color: white; } +.styles_module_css_d9f7-exportName74 { color: black; } + +.styles_module_css_d9f7-multiple-composes-with-simple { + color: red; +} + +.styles_module_css_d9f7-multiple-composes-with-composes { + color: blue; +} + +.styles_module_css_d9f7-the-same-classes-in-composes-but-different-modules { + } + +:root { + --styles_module_css_d9f7-color: red; +} + + + + +.styles_module_css_d9f7-custom-properties { + color: var(--styles_module_css_d9f7-color); + background-color: var(--shared-custom-properties_module_css-shared); + border-color: var(--shared-custom-properties_module_css-deep-shared); + outline-color: var(--styles_module_css_d9f7-color); + text-decoration-color: var(--vars_module_css-my-var-u1); +} + +.styles_module_css_d9f7-from { + color: var(--vars_module_css-my-var-u1); +} + + + +.styles_module_css_d9f7-button-with-color { + background-color: #3498db; + color: #2ecc71; +} + + + +.styles_module_css_d9f7-button-with-color-too { + color: red; +} + + + + +.styles_module_css_d9f7-button-rename-1 { + background-color: #3498db; +} + + + + +.styles_module_css_d9f7-button-rename-2 { + background-color: #e74c3c; +} + + + + +.styles_module_css_d9f7-button-rename-3 { + background-color: #e74c3c; +} + + + + +.styles_module_css_d9f7-button-rename-4 { + background-color: #c1c2c3; +} + +.styles_module_css_d9f7-button-export-5 { + content: \\"export3-value\\" +} + + +.styles_module_css_d9f7-my-selector-value { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.styles_module_css_d9f7-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.styles_module_css_d9f7-class-with-composes { + } + + +.styles_module_css_d9f7-class-local-my { color: red } + +.styles_module_css_d9f7-composes-from-import { + color: red; +} + + +.styles_module_css_d9f7-local-for-reexport { color: #3498db; } + +.styles_module_css_d9f7-deep-reexport-in-composes { + } + + +.styles_module_css_d9f7-deep-reexport-in-composes-other { + } + + +.styles_module_css_d9f7-only-reexport { + } + + +.styles_module_css_d9f7-class-from-pseudo-import { + color: classes_module_css-localName; +} + + + +.styles_module_css_d9f7-class { + color: __value_cyclical__; +} + + + + + +.styles_module_css_d9f7-local-for-reexport { color: #3498db; } + +.styles_module_css_d9f7-deep-reexport-in-composes-other-other { + } + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.styles_module_css_be02-button-color-red { + color: red; +} + +.styles_module_css_be02-u-1\\\\/2 { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.styles_module_css_be02-composes-here { + display: block; +} + +.styles_module_css_be02-composes-here { + background-color: black; +} + +.styles_module_css_be02-button-complex { + background: blue; +} + +.styles_module_css_be02-button-complex-1 { + } + +.styles_module_css_be02-button-complex-2 { + } + +.styles_module_css_be02-local-composes { + color: blue; +} + +.styles_module_css_be02-local-composes { + color: blue; +} + + +.styles_module_css_be02-local-composes-with-reexport { + color: blue; +} + + + +.styles_module_css_be02-local-composes-with-reexport-and-value { + color: blue; +} + +.styles_module_css_be02-exportName73 { color: red; } +.styles_module_css_be02-exportName74 { color: green; } +.styles_module_css_be02-exportName75 { color: blue } +.styles_module_css_be02-exportName74 { color: white; } +.styles_module_css_be02-exportName74 { color: black; } + +.styles_module_css_be02-multiple-composes-with-simple { + color: red; +} + +.styles_module_css_be02-multiple-composes-with-composes { + color: blue; +} + +.styles_module_css_be02-the-same-classes-in-composes-but-different-modules { + } + +:root { + --styles_module_css_be02-color: red; +} + + + + +.styles_module_css_be02-custom-properties { + color: var(--styles_module_css_be02-color); + background-color: var(--shared-custom-properties_module_css-shared); + border-color: var(--shared-custom-properties_module_css-deep-shared); + outline-color: var(--styles_module_css_be02-color); + text-decoration-color: var(--vars_module_css-my-var-u1); +} + +.styles_module_css_be02-from { + color: var(--vars_module_css-my-var-u1); +} + + + +.styles_module_css_be02-button-with-color { + background-color: #3498db; + color: #2ecc71; +} + + + +.styles_module_css_be02-button-with-color-too { + color: red; +} + + + + +.styles_module_css_be02-button-rename-1 { + background-color: #3498db; +} + + + + +.styles_module_css_be02-button-rename-2 { + background-color: #e74c3c; +} + + + + +.styles_module_css_be02-button-rename-3 { + background-color: #e74c3c; +} + + + + +.styles_module_css_be02-button-rename-4 { + background-color: #c1c2c3; +} + +.styles_module_css_be02-button-export-5 { + content: \\"export3-value\\" +} + + +.styles_module_css_be02-my-selector-value { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.styles_module_css_be02-local-class { + color: white; +} + +.global-class-other { + color: red; +} + +.styles_module_css_be02-class-with-composes { + } + + +.styles_module_css_be02-class-local-my { color: red } + +.styles_module_css_be02-composes-from-import { + color: red; +} + + +.styles_module_css_be02-local-for-reexport { color: #3498db; } + +.styles_module_css_be02-deep-reexport-in-composes { + } + + +.styles_module_css_be02-deep-reexport-in-composes-other { + } + + +.styles_module_css_be02-only-reexport { + } + + +.styles_module_css_be02-class-from-pseudo-import { + color: classes_module_css-localName; +} + + + +.styles_module_css_be02-class { + color: __value_cyclical__; +} + + + + + +.styles_module_css_be02-local-for-reexport { color: #3498db; } + +.styles_module_css_be02-deep-reexport-in-composes-other-other { + } + + +" +`; + +exports[`ConfigTestCases css reexport exported tests should work with asset modules 2`] = ` +Object { + "--my-custom-property-1": "--color", + "alias-other-selector": "other-selector-value", + "blue": "#3498db", + "button-color-red": "styles_module_css_be02-button-color-red", + "button-complex": "styles_module_css_be02-button-complex styles_module_css_be02-u-1/2 styles_module_css_be02-local-composes styles_module_css_be02-composes-here bar styles_module_css_be02-button-color-red button-global-font-size button_module_css-base atoms_module_css-display-flex atoms_module_css-align-center atoms_module_css-padding-box atoms_module_css-interactive atoms-extra_module_css-transition reset_module_css-reset-display atoms-extra_module_css-cursor", + "button-complex-1": "styles_module_css_be02-button-complex-1 button-reexport_module_css-base-reexport atoms_module_css-display-flex atoms_module_css-align-center atoms_module_css-padding-box atoms_module_css-interactive atoms-extra_module_css-transition reset_module_css-reset-display atoms-extra_module_css-cursor", + "button-complex-2": "styles_module_css_be02-button-complex-2 styles_module_css_be02-local-composes styles_module_css_be02-composes-here bar", + "button-export-5": "styles_module_css_be02-button-export-5", + "button-rename-1": "styles_module_css_be02-button-rename-1", + "button-rename-2": "styles_module_css_be02-button-rename-2", + "button-rename-3": "styles_module_css_be02-button-rename-3", + "button-rename-4": "styles_module_css_be02-button-rename-4", + "button-with-color": "styles_module_css_be02-button-with-color", + "button-with-color-too": "styles_module_css_be02-button-with-color-too", + "class": "styles_module_css_be02-class", + "class-from-pseudo-import": "styles_module_css_be02-class-from-pseudo-import", + "class-local-my": "styles_module_css_be02-class-local-my", + "class-with-composes": "styles_module_css_be02-class-with-composes styles_module_css_be02-local-class global-class global-class-other classes_module_css-localName", + "color": "--styles_module_css_be02-color", + "colors": "\\"./colors.module.css\\"", + "composes-from-import": "styles_module_css_be02-composes-from-import styles_module_css_be02-class-local-my abcd_modules_css-a abcd_modules_css-b abcd_modules_css-c d e f abcd_modules_css-d abcd_modules_css-f abcd_modules_css-e", + "composes-here": "styles_module_css_be02-composes-here", + "composes-test-here": "composes-here", + "custom-properties": "styles_module_css_be02-custom-properties", + "cyclical": "__value_cyclical__", + "danger": "#e74c3c", + "danger-alias": "#e74c3c", + "danger-alias-selector": "#e74c3c", + "deep-reexport-in-composes": "styles_module_css_be02-deep-reexport-in-composes styles_module_css_be02-local-for-reexport classes-deep_module_css-deep-selector", + "deep-reexport-in-composes-other": "styles_module_css_be02-deep-reexport-in-composes-other styles_module_css_be02-local-for-reexport classes-deep_module_css-deep-selector-with-composes classes-deep_module_css-deep-selector", + "deep-reexport-in-composes-other-other": "styles_module_css_be02-deep-reexport-in-composes-other-other styles_module_css_be02-local-for-reexport classes-deep_module_css-deep-selector", + "deep-shared": "--shared-custom-properties_module_css-deep-shared", + "export": "\\"export-value\\"", + "export1": "\\"export1-value\\"", + "export2": "\\"export2-value\\"", + "export3": "\\"export3-value\\"", + "exportName73": "styles_module_css_be02-exportName73 classes_module_css-bar classes_module_css-localName", + "exportName74": "styles_module_css_be02-exportName74 styles_module_css_be02-exportName73 classes_module_css-bar classes_module_css-localName styles_module_css_be02-exportName75 my-global", + "exportName75": "styles_module_css_be02-exportName75", + "foo": "red", + "from": "styles_module_css_be02-from", + "in-composes": "classes-deep_module_css-deep-selector", + "local-class": "styles_module_css_be02-local-class", + "local-composes": "styles_module_css_be02-local-composes styles_module_css_be02-composes-here bar styles_module_css_be02-composes-here", + "local-composes-with-reexport": "styles_module_css_be02-local-composes-with-reexport styles_module_css_be02-composes-here abcd_modules_css-f abcd_modules_css-e bar", + "local-composes-with-reexport-and-value": "styles_module_css_be02-local-composes-with-reexport-and-value styles_module_css_be02-composes-here abcd_modules_css-f abcd_modules_css-e bar", + "local-for-reexport": "styles_module_css_be02-local-for-reexport", + "multiple-composes-with-composes": "styles_module_css_be02-multiple-composes-with-composes classes_module_css-localName classes_module_css-bar classes_module_css-localName", + "multiple-composes-with-simple": "styles_module_css_be02-multiple-composes-with-simple classes_module_css-localName classes_module_css-localNameOther", + "my-custom-color": "#2ecc71", + "my-custom-property-1": "--styles_module_css_be02-color", + "my-var-u1": "--vars_module_css-my-var-u1", + "only-reexport": "styles_module_css_be02-only-reexport classes-deep_module_css-deep-nested-c", + "other-selector": "other-selector-value", + "primary": "#3498db", + "reexport": "classes_module_css-localName", + "reexport-my-var-u1": "--vars_module_css-my-var-u1", + "reexport-selector": "reexport-selector-value", + "reexport-selector-alias": "reexport-selector-value", + "rename": "#3498db", + "rename-2": "#e74c3c", + "rename-3": "#e74c3c", + "selector": "my-selector-value", + "shared": "--shared-custom-properties_module_css-shared", + "the-same-classes-in-composes-but-different-modules": "styles_module_css_be02-the-same-classes-in-composes-but-different-modules classes_module_css-localName classes-the-same_module_css-localName", + "third": "#c1c2c3", + "u-1/2": "styles_module_css_be02-u-1/2", +} +`; + +exports[`ConfigTestCases css reexport exported tests should work with asset modules 3`] = ` +"/*!************************************!*\\\\ + !*** css ./colors-more.module.css ***! + \\\\************************************/ + + + +/*!*******************************!*\\\\ + !*** css ./colors.module.css ***! + \\\\*******************************/ + + + + + +/*!******************************!*\\\\ + !*** css ./theme.module.css ***! + \\\\******************************/ + + + + + +/*!**************************************!*\\\\ + !*** css ./value-at-rule.module.css ***! + \\\\**************************************/ + + + + + + +.S3xPqZ { + color: #e74c3c +} + +.DSFgG0 { + background-color: #3498db; + color: white; +} + +.Rm7a_t { + background-color: #e74c3c; + border: 2px solid darkred; +} + +/*!*********************************!*\\\\ + !*** css ./cyclical.module.css ***! + \\\\*********************************/ + +._9gmTyg { + color: __value__; +} + +.Tm1Jev { + } + + +/*!***********************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep-more.module.css ***! + \\\\***********************************************************/ + +/*!******************************************************!*\\\\ + !*** css ./pseudo-import-and-export-deep.module.css ***! + \\\\******************************************************/ + + +/*!*************************************************!*\\\\ + !*** css ./pseudo-import-and-export.module.css ***! + \\\\*************************************************/ + + +/*!******************************!*\\\\ + !*** css ./reset.module.css ***! + \\\\******************************/ +.r7veIg { + display: unset; +} + +/*!************************************!*\\\\ + !*** css ./atoms-extra.module.css ***! + \\\\************************************/ +.uTFqYl { + transition: transform 0.2s ease; +} + +._G2W-m { + cursor: pointer; +} + +/*!******************************!*\\\\ + !*** css ./atoms.module.css ***! + \\\\******************************/ +._4hzrjS { + display: flex; +} + +._3N7KUJ { + align-items: center; +} + +.FOqO9N { + padding: 16px; +} + +.h1WMpX { + will-change: transform; +} + +.h1WMpX:hover { + transform: scale(1.02); +} + +/*!****************************************!*\\\\ + !*** css ./button-reexport.module.css ***! + \\\\****************************************/ +._3hkn5Z { + border: 1px solid #ccc; + border-radius: 8px; +} + +/*!*******************************!*\\\\ + !*** css ./button.module.css ***! + \\\\*******************************/ +.IRudRu { + border: 1px solid #ccc; + border-radius: 8px; +} + + + +/*!******************************!*\\\\ + !*** css ./abcd.modules.css ***! + \\\\******************************/ +._0bqD8c { + color: a; +} + +.JJtGTB { + color: b; +} + +.BNoXdB { + color: c; +} + +.xoOP4R { + color: d; +} + +._6NOMLC { + color: d; +} + +.L4uOGL { + } + +/*!*************************************!*\\\\ + !*** css ./classes-deep.module.css ***! + \\\\*************************************/ +._1U1vje { + color: red; +} + +.OPw9Jj { + color: red; +} + +.OPw9Jj { + } + +.h7hEph { + color: red; +} + +/*!********************************!*\\\\ + !*** css ./classes.module.css ***! + \\\\********************************/ + +.sQL78s { + background: red; +} + +.Cpujl1 { + color: blue; +} + +.pmxb7o { + } + + + + + + +/*!*****************************************!*\\\\ + !*** css ./classes-the-same.module.css ***! + \\\\*****************************************/ +.MClDz9 { + background: blue; +} + +/*!*****************************!*\\\\ + !*** css ./vars.module.css ***! + \\\\*****************************/ +:root { + --KP4m31: red; +} + +.KP4m31 { + color: red; +} + +/*!******************************************************!*\\\\ + !*** css ./shared-deep-custom-properties.module.css ***! + \\\\******************************************************/ +:root { + --_7xy4NT: black; +} + +/*!*************************************************!*\\\\ + !*** css ./shared-custom-properties.module.css ***! + \\\\*************************************************/ +:root { + --qX-CSb: blue; + --_TnMz_: var(--_7xy4NT) +} + +/*!***************************************!*\\\\ + !*** css ./selectors-more.module.css ***! + \\\\***************************************/ + + +/*!**********************************!*\\\\ + !*** css ./selectors.module.css ***! + \\\\**********************************/ + + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.Nk2MvV { + color: red; +} + +.FVlv2P { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.vTFlpN { + display: block; +} + +.vTFlpN { + background-color: black; +} + +.m8FtUN { + background: blue; +} + +.OG0OVF { + } + +.kp2wNS { + } + +.vupji7 { + color: blue; +} + +.vupji7 { + color: blue; +} + + +.VTgblp { + color: blue; +} + + + +.XeMa0a { + color: blue; +} + +.qgqd-J { color: red; } +.Ns9rmr { color: green; } +.hsOyo6 { color: blue } +.Ns9rmr { color: white; } +.Ns9rmr { color: black; } + +.s5T2tp { + color: red; +} + +.kAC3V_ { + color: blue; +} + +.u0iYW_ { + } + +:root { + --uGelqc: red; +} + + + + +.unbpP8 { + color: var(--uGelqc); + background-color: var(--qX-CSb); + border-color: var(--_TnMz_); + outline-color: var(--uGelqc); + text-decoration-color: var(--KP4m31); +} + +.MI7KS4 { + color: var(--KP4m31); +} + + + +.bAMUwp { + background-color: #3498db; + color: #2ecc71; +} + + + +.f2oaPF { + color: red; +} + + + + +.EwEwRz { + background-color: #3498db; +} + + + + +.tmQHLg { + background-color: #e74c3c; +} + + + + +.F5aPmd { + background-color: #e74c3c; +} + + + + +._T5aMe { + background-color: #c1c2c3; +} + +.nqaRG2 { + content: \\"export3-value\\" +} + + +.BBfiX6 { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.gAniDw { + color: white; +} + +.global-class-other { + color: red; +} + +.gRd4c8 { + } + + +.saX-62 { color: red } + +._2HzoTb { + color: red; +} + + +.-F4AOV { color: #3498db; } + +._0XYMUG { + } + + +.zB77X1 { + } + + +.CiSiqk { + } + + +.R3-Tbw { + color: sQL78s; +} + + + +.A7_UOA { + color: __value_cyclical__; +} + + + + + +.-F4AOV { color: #3498db; } + +.Hh8KGg { + } + + +/*!*******************************!*\\\\ + !*** css ./styles.module.css ***! + \\\\*******************************/ + + +.Nk2MvV { + color: red; +} + +.FVlv2P { + width: 50%; +} + +.button-global-font-size\\\\a1 { + font-size: 14px; +} + +.vTFlpN { + display: block; +} + +.vTFlpN { + background-color: black; +} + +.m8FtUN { + background: blue; +} + +.OG0OVF { + } + +.kp2wNS { + } + +.vupji7 { + color: blue; +} + +.vupji7 { + color: blue; +} + + +.VTgblp { + color: blue; +} + + + +.XeMa0a { + color: blue; +} + +.qgqd-J { color: red; } +.Ns9rmr { color: green; } +.hsOyo6 { color: blue } +.Ns9rmr { color: white; } +.Ns9rmr { color: black; } + +.s5T2tp { + color: red; +} + +.kAC3V_ { + color: blue; +} + +.u0iYW_ { + } + +:root { + --uGelqc: red; +} + + + + +.unbpP8 { + color: var(--uGelqc); + background-color: var(--qX-CSb); + border-color: var(--_TnMz_); + outline-color: var(--uGelqc); + text-decoration-color: var(--KP4m31); +} + +.MI7KS4 { + color: var(--KP4m31); +} + + + +.bAMUwp { + background-color: #3498db; + color: #2ecc71; +} + + + +.f2oaPF { + color: red; +} + + + + +.EwEwRz { + background-color: #3498db; +} + + + + +.tmQHLg { + background-color: #e74c3c; +} + + + + +.F5aPmd { + background-color: #e74c3c; +} + + + + +._T5aMe { + background-color: #c1c2c3; +} + +.nqaRG2 { + content: \\"export3-value\\" +} + + +.BBfiX6 { value: my-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.other-selector-value { value: other-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + +.reexport-selector-value { value: reexport-selector-value; } + + + +.#c1c2c3 { background-color: #c1c2c3; } + + + +.#e74c3c { background-color: #e74c3c; } + +.gAniDw { + color: white; +} + +.global-class-other { + color: red; +} + +.gRd4c8 { + } + + +.saX-62 { color: red } + +._2HzoTb { + color: red; +} + + +.-F4AOV { color: #3498db; } + +._0XYMUG { + } + + +.zB77X1 { + } + + +.CiSiqk { + } + + +.R3-Tbw { + color: sQL78s; +} + + + +.A7_UOA { + color: __value_cyclical__; +} + + + + + +.-F4AOV { color: #3498db; } + +.Hh8KGg { + } + + +" +`; + +exports[`ConfigTestCases css reexport exported tests should work with asset modules 4`] = ` +Object { + "--my-custom-property-1": "--color", + "alias-other-selector": "other-selector-value", + "blue": "#3498db", + "button-color-red": "Nk2MvV", + "button-complex": "m8FtUN FVlv2P vupji7 vTFlpN bar Nk2MvV button-global-font-size IRudRu _4hzrjS _3N7KUJ FOqO9N h1WMpX uTFqYl r7veIg _G2W-m", + "button-complex-1": "OG0OVF _3hkn5Z _4hzrjS _3N7KUJ FOqO9N h1WMpX uTFqYl r7veIg _G2W-m", + "button-complex-2": "kp2wNS vupji7 vTFlpN bar", + "button-export-5": "nqaRG2", + "button-rename-1": "EwEwRz", + "button-rename-2": "tmQHLg", + "button-rename-3": "F5aPmd", + "button-rename-4": "_T5aMe", + "button-with-color": "bAMUwp", + "button-with-color-too": "f2oaPF", + "class": "A7_UOA", + "class-from-pseudo-import": "R3-Tbw", + "class-local-my": "saX-62", + "class-with-composes": "gRd4c8 gAniDw global-class global-class-other sQL78s", + "color": "--uGelqc", + "colors": "\\"./colors.module.css\\"", + "composes-from-import": "_2HzoTb saX-62 _0bqD8c JJtGTB BNoXdB d e f xoOP4R L4uOGL _6NOMLC", + "composes-here": "vTFlpN", + "composes-test-here": "composes-here", + "custom-properties": "unbpP8", + "cyclical": "__value_cyclical__", + "danger": "#e74c3c", + "danger-alias": "#e74c3c", + "danger-alias-selector": "#e74c3c", + "deep-reexport-in-composes": "_0XYMUG -F4AOV _1U1vje", + "deep-reexport-in-composes-other": "zB77X1 -F4AOV OPw9Jj _1U1vje", + "deep-reexport-in-composes-other-other": "Hh8KGg -F4AOV _1U1vje", + "deep-shared": "--_TnMz_", + "export": "\\"export-value\\"", + "export1": "\\"export1-value\\"", + "export2": "\\"export2-value\\"", + "export3": "\\"export3-value\\"", + "exportName73": "qgqd-J pmxb7o sQL78s", + "exportName74": "Ns9rmr qgqd-J pmxb7o sQL78s hsOyo6 my-global", + "exportName75": "hsOyo6", + "foo": "red", + "from": "MI7KS4", + "in-composes": "_1U1vje", + "local-class": "gAniDw", + "local-composes": "vupji7 vTFlpN bar vTFlpN", + "local-composes-with-reexport": "VTgblp vTFlpN L4uOGL _6NOMLC bar", + "local-composes-with-reexport-and-value": "XeMa0a vTFlpN L4uOGL _6NOMLC bar", + "local-for-reexport": "-F4AOV", + "multiple-composes-with-composes": "kAC3V_ sQL78s pmxb7o sQL78s", + "multiple-composes-with-simple": "s5T2tp sQL78s Cpujl1", + "my-custom-color": "#2ecc71", + "my-custom-property-1": "--uGelqc", + "my-var-u1": "--KP4m31", + "only-reexport": "CiSiqk h7hEph", + "other-selector": "other-selector-value", + "primary": "#3498db", + "reexport": "sQL78s", + "reexport-my-var-u1": "--KP4m31", + "reexport-selector": "reexport-selector-value", + "reexport-selector-alias": "reexport-selector-value", + "rename": "#3498db", + "rename-2": "#e74c3c", + "rename-3": "#e74c3c", + "selector": "my-selector-value", + "shared": "--qX-CSb", + "the-same-classes-in-composes-but-different-modules": "u0iYW_ sQL78s MClDz9", + "third": "#c1c2c3", + "u-1/2": "FVlv2P", +} +`; diff --git a/test/configCases/css/reexport/abcd.modules.css b/test/configCases/css/reexport/abcd.modules.css new file mode 100644 index 00000000000..d3b149a5a5a --- /dev/null +++ b/test/configCases/css/reexport/abcd.modules.css @@ -0,0 +1,23 @@ +.a { + color: a; +} + +.b { + color: b; +} + +.c { + color: c; +} + +.d { + color: d; +} + +.e { + color: d; +} + +.f { + composes: e; +} diff --git a/test/configCases/css/reexport/atoms-extra.module.css b/test/configCases/css/reexport/atoms-extra.module.css new file mode 100644 index 00000000000..9e973e081b4 --- /dev/null +++ b/test/configCases/css/reexport/atoms-extra.module.css @@ -0,0 +1,8 @@ +.transition { + composes: reset-display from "./reset.module.css"; + transition: transform 0.2s ease; +} + +.cursor { + cursor: pointer; +} diff --git a/test/configCases/css/reexport/atoms.module.css b/test/configCases/css/reexport/atoms.module.css new file mode 100644 index 00000000000..ece4a7c8591 --- /dev/null +++ b/test/configCases/css/reexport/atoms.module.css @@ -0,0 +1,20 @@ +.display-flex { + display: flex; +} + +.align-center { + align-items: center; +} + +.padding-box { + padding: 16px; +} + +.interactive { + composes: transition cursor from "./atoms-extra.module.css"; + will-change: transform; +} + +.interactive:hover { + transform: scale(1.02); +} diff --git a/test/configCases/css/reexport/button-reexport.module.css b/test/configCases/css/reexport/button-reexport.module.css new file mode 100644 index 00000000000..16dec748a0e --- /dev/null +++ b/test/configCases/css/reexport/button-reexport.module.css @@ -0,0 +1,6 @@ +.base-reexport { + composes: display-flex align-center padding-box from "./atoms.module.css"; + composes: interactive from "./atoms.module.css"; + border: 1px solid #ccc; + border-radius: 8px; +} diff --git a/test/configCases/css/reexport/button.module.css b/test/configCases/css/reexport/button.module.css new file mode 100644 index 00000000000..8ca8ed33cff --- /dev/null +++ b/test/configCases/css/reexport/button.module.css @@ -0,0 +1,12 @@ +.base { + composes: display-flex align-center padding-box from "./atoms.module.css"; + composes: interactive from "./atoms.module.css"; + border: 1px solid #ccc; + border-radius: 8px; +} + +:import("./button-reexport.module.css") { + __local_base__: base-reexport; +} + +:export { base-reexport: __local_base__ } diff --git a/test/configCases/css/reexport/classes-deep.module.css b/test/configCases/css/reexport/classes-deep.module.css new file mode 100644 index 00000000000..281ee173536 --- /dev/null +++ b/test/configCases/css/reexport/classes-deep.module.css @@ -0,0 +1,15 @@ +.deep-selector { + color: red; +} + +.deep-selector-with-composes { + color: red; +} + +.deep-selector-with-composes { + composes: deep-selector; +} + +.deep-nested-c { + color: red; +} diff --git a/test/configCases/css/reexport/classes-the-same.module.css b/test/configCases/css/reexport/classes-the-same.module.css new file mode 100644 index 00000000000..1a49faf6ad2 --- /dev/null +++ b/test/configCases/css/reexport/classes-the-same.module.css @@ -0,0 +1,3 @@ +.localName { + background: blue; +} diff --git a/test/configCases/css/reexport/classes.module.css b/test/configCases/css/reexport/classes.module.css new file mode 100644 index 00000000000..49901dc0730 --- /dev/null +++ b/test/configCases/css/reexport/classes.module.css @@ -0,0 +1,30 @@ +:import("./classes-deep.module.css") { + my-selector: deep-selector; + my-selector-other: deep-selector-with-composes; +} + +.localName { + background: red; +} + +.localNameOther { + color: blue; +} + +.bar { + composes: localName; +} + +:import("./classes-deep.module.css") { + my-selector-other: deep-selector-with-composes; +} + +:export { dcba: my-selector-other } + +:export { abcd: my-selector; dcba: my-selector-other } + +:import("./classes-deep.module.css") { + __my_custom_import__: deep-nested-c; +} + +:export { my_custom_import: __my_custom_import__ } diff --git a/test/configCases/css/reexport/colors-more.module.css b/test/configCases/css/reexport/colors-more.module.css new file mode 100644 index 00000000000..5fd349c3dd2 --- /dev/null +++ b/test/configCases/css/reexport/colors-more.module.css @@ -0,0 +1,2 @@ +@value primary: #b1b2b3; +@value danger: #e74c3c; diff --git a/test/configCases/css/reexport/colors.module.css b/test/configCases/css/reexport/colors.module.css new file mode 100644 index 00000000000..65d583e7322 --- /dev/null +++ b/test/configCases/css/reexport/colors.module.css @@ -0,0 +1,4 @@ +@value primary: #3498db; +@value secondary: #2ecc71; +@value third: #c1c2c3; +@value danger from "./colors-more.module.css"; diff --git a/test/configCases/css/reexport/cyclical.module.css b/test/configCases/css/reexport/cyclical.module.css new file mode 100644 index 00000000000..3fb62f3ee31 --- /dev/null +++ b/test/configCases/css/reexport/cyclical.module.css @@ -0,0 +1,15 @@ +:import("./cyclical.module.css") { + __value__: value; +} + +.class { + color: __value__; +} + +.class-with-composes-nested { + composes: class-with-composes-nested from "./cyclical.module.css"; +} + +:export { + value: __value__; +} diff --git a/test/configCases/css/reexport/index.js b/test/configCases/css/reexport/index.js new file mode 100644 index 00000000000..bff2636f783 --- /dev/null +++ b/test/configCases/css/reexport/index.js @@ -0,0 +1,8 @@ +import * as styles from "./styles.module.css"; + +it("should work with asset modules", async () => { + const links = [...document.getElementsByTagName("link")]; + + expect(links.find((item) => /bundle/.test(item.href)).sheet.css).toMatchSnapshot(); + expect(styles).toMatchSnapshot(); +}); diff --git a/test/configCases/css/reexport/pseudo-import-and-export-deep-more.module.css b/test/configCases/css/reexport/pseudo-import-and-export-deep-more.module.css new file mode 100644 index 00000000000..2dee52a1310 --- /dev/null +++ b/test/configCases/css/reexport/pseudo-import-and-export-deep-more.module.css @@ -0,0 +1,3 @@ +:export { + export3: "export3-value"; +} diff --git a/test/configCases/css/reexport/pseudo-import-and-export-deep.module.css b/test/configCases/css/reexport/pseudo-import-and-export-deep.module.css new file mode 100644 index 00000000000..25fdfd1803b --- /dev/null +++ b/test/configCases/css/reexport/pseudo-import-and-export-deep.module.css @@ -0,0 +1,8 @@ +:import("./pseudo-import-and-export-deep-more.module.css") { + __REXPORT3__: export3; +} + +:export { + export2: "export2-value"; + export3: __REXPORT3__; +} diff --git a/test/configCases/css/reexport/pseudo-import-and-export.module.css b/test/configCases/css/reexport/pseudo-import-and-export.module.css new file mode 100644 index 00000000000..b6e8fb4189f --- /dev/null +++ b/test/configCases/css/reexport/pseudo-import-and-export.module.css @@ -0,0 +1,10 @@ +:import("./pseudo-import-and-export-deep.module.css") { + __REXPORT2__: export2; + __REXPORT3__: export3; +} + +:export { + export1: "export1-value"; + export2: __REXPORT2__; + export3: __REXPORT3__; +} diff --git a/test/configCases/css/reexport/reset.module.css b/test/configCases/css/reexport/reset.module.css new file mode 100644 index 00000000000..21172ce2098 --- /dev/null +++ b/test/configCases/css/reexport/reset.module.css @@ -0,0 +1,3 @@ +.reset-display { + display: unset; +} diff --git a/test/configCases/css/reexport/selectors-more.module.css b/test/configCases/css/reexport/selectors-more.module.css new file mode 100644 index 00000000000..979136eb1c2 --- /dev/null +++ b/test/configCases/css/reexport/selectors-more.module.css @@ -0,0 +1 @@ +@value reexport-selector: reexport-selector-value; diff --git a/test/configCases/css/reexport/selectors.module.css b/test/configCases/css/reexport/selectors.module.css new file mode 100644 index 00000000000..4783726f6e4 --- /dev/null +++ b/test/configCases/css/reexport/selectors.module.css @@ -0,0 +1,2 @@ +@value other-selector: other-selector-value; +@value reexport-selector from "./selectors-more.module.css"; diff --git a/test/configCases/css/reexport/shared-custom-properties.module.css b/test/configCases/css/reexport/shared-custom-properties.module.css new file mode 100644 index 00000000000..6e09dd1bbaf --- /dev/null +++ b/test/configCases/css/reexport/shared-custom-properties.module.css @@ -0,0 +1,4 @@ +:root { + --shared: blue; + --deep-shared: var(--deep-shared from "./shared-deep-custom-properties.module.css") +} diff --git a/test/configCases/css/reexport/shared-deep-custom-properties.module.css b/test/configCases/css/reexport/shared-deep-custom-properties.module.css new file mode 100644 index 00000000000..16c3a79b270 --- /dev/null +++ b/test/configCases/css/reexport/shared-deep-custom-properties.module.css @@ -0,0 +1,3 @@ +:root { + --deep-shared: black; +} diff --git a/test/configCases/css/reexport/styles.module.css b/test/configCases/css/reexport/styles.module.css new file mode 100644 index 00000000000..035b679417b --- /dev/null +++ b/test/configCases/css/reexport/styles.module.css @@ -0,0 +1,280 @@ +@import "./value-at-rule.module.css"; +@import "./cyclical.module.css"; + +:import("./pseudo-import-and-export.module.css") { + __REEXPORT1__: export1; + __REEXPORT2__: export2; + __REEXPORT3__: export3; +} + +.button-color-red { + color: red; +} + +.u-1\/2 { + width: 50%; +} + +:global(.button-global-font-size\a1) { + font-size: 14px; +} + +.composes-here { + display: block; +} + +.composes-here { + background-color: black; +} + +.button-complex { + composes: u-1\/2, local-composes, button-color-red, button-global-font-size from global, base from "./button.module.css"; + background: blue; +} + +.button-complex-1 { + composes: base-reexport from "./button-reexport.module.css"; +} + +.button-complex-2 { + composes: local-composes; +} + +.local-composes { + composes: composes-here, global(bar); + color: blue; +} + +.local-composes { + composes: composes-here; + color: blue; +} + +:import("abcd.modules.css") { + __import_f__: f; +} + +.local-composes-with-reexport { + composes: composes-here, __import_f__, global(bar); + color: blue; +} + +@value composes-test-here: composes-here; + +.local-composes-with-reexport-and-value { + composes: composes-test-here, __import_f__, global(bar); + color: blue; +} + +.exportName73 { composes: bar from "./classes.module.css"; color: red; } +.exportName74 { composes: exportName73; color: green; } +.exportName75 { color: blue } +.exportName74 { composes: exportName75; color: white; } +.exportName74 { composes: my-global from global; color: black; } + +:local(.multiple-composes-with-simple) { + composes: localName from "./classes.module.css"; + composes: localNameOther from "./classes.module.css"; + color: red; +} + +:local(.multiple-composes-with-composes) { + composes: localName from "./classes.module.css"; + composes: bar from "./classes.module.css"; + color: blue; +} + +.the-same-classes-in-composes-but-different-modules { + composes: localName from "./classes.module.css"; + composes: localName from "./classes-the-same.module.css"; +} + +:root { + --color: red; +} + +@value --my-custom-property-1: --color; + +:import("./vars.module.css") { + --reexport-my-var-u1: my-var-u1 +} + +.custom-properties { + color: var(--color); + background-color: var(--shared from "./shared-custom-properties.module.css"); + border-color: var(--deep-shared from "./shared-custom-properties.module.css"); + outline-color: var(--my-custom-property-1); + text-decoration-color: var(--reexport-my-var-u1); +} + +.from { + color: var(--my-var-u1 from "./vars.module.css"); +} + +@value primary, secondary as my-custom-color from "./colors.module.css"; + +.button-with-color { + background-color: primary; + color: my-custom-color; +} + +@value foo: red; + +.button-with-color-too { + color: foo; +} + +@value blue: #3498db; +@value rename: blue; + +.button-rename-1 { + background-color: rename; +} + +@value danger from "./colors.module.css"; +@value rename-2: danger; + +.button-rename-2 { + background-color: rename-2; +} + +@value danger as danger-alias from "./colors.module.css"; +@value rename-3: danger-alias; + +.button-rename-3 { + background-color: rename-3; +} + +@value colors: "./colors.module.css"; +@value third from colors; + +.button-rename-4 { + background-color: third; +} + +.button-export-5 { + content: __REEXPORT3__ +} + +@value selector: my-selector-value; +.selector { value: selector; } + +@value other-selector from "./selectors.module.css"; +.other-selector { value: other-selector; } + +@value other-selector as alias-other-selector from "./selectors.module.css"; +.alias-other-selector { value: alias-other-selector; } + +@value reexport-selector from "./selectors.module.css"; +.reexport-selector { value: reexport-selector; } + +@value reexport-selector as reexport-selector-alias from "./selectors.module.css"; +.reexport-selector-alias { value: reexport-selector-alias; } + +@value colors: "./colors.module.css"; +@value third from colors; +.third { background-color: third; } + +@value danger as danger-alias-selector from "./colors.module.css"; +@value rename-3: danger-alias-selector; +.rename-3 { background-color: rename-3; } + +.local-class { + color: white; +} + +:global(.global-class-other) { + color: red; +} + +.class-with-composes { + composes: + local-class, + global-class from global, + global-class-other from global, + localName from "./classes.module.css"; +} + +:import("abcd.modules.css") { + i__i_a_0: a; + i__i_b_0: b; + i__i_c_0: c; + i__i_d_0: d; + i__i_f_0: f; +} + +.class-local-my { color: red } + +.composes-from-import { + composes: class-local-my i__i_a_0 i__i_b_0, i__i_c_0, global(d) global(e), global(f), i__i_d_0 i__i_f_0; + color: red; +} + +:import("./classes.module.css") { + abc-from-def: abcd; +} + +.local-for-reexport { color: blue; } + +.deep-reexport-in-composes { + composes: + local-for-reexport + abc-from-def; +} + +:import("./classes.module.css") { + deep-selector-with-composes: dcba; +} + +.deep-reexport-in-composes-other { + composes: + local-for-reexport + deep-selector-with-composes; +} + +:import("./classes.module.css") { __my_custom_import__: my_custom_import } + +.only-reexport { + composes: __my_custom_import__; +} + +:import("./classes.module.css") { + __import_localName__: localName; +} + +.class-from-pseudo-import { + color: __import_localName__; +} + +:export { + reexport: __import_localName__ +} + +:import("./styles.module.css") { + __value_cyclical__: cyclical; +} + +.class { + color: __value_cyclical__; +} + +:export { cyclical: __value_cyclical__ } + +:import("./classes.module.css") { + abc-from-def_local: abcd; +} + +@value in-composes: abc-from-def_local; + +.local-for-reexport { color: blue; } + +.deep-reexport-in-composes-other-other { + composes: local-for-reexport in-composes; +} + +:export { + export: "export-value"; + export1: __REEXPORT1__; + export2: __REEXPORT2__; + export3: __REEXPORT3__; +} diff --git a/test/configCases/css/reexport/test.config.js b/test/configCases/css/reexport/test.config.js new file mode 100644 index 00000000000..f92ab578297 --- /dev/null +++ b/test/configCases/css/reexport/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope, options) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = options.output.filename.replace("js", "css"); + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/reexport/theme.module.css b/test/configCases/css/reexport/theme.module.css new file mode 100644 index 00000000000..3659b07d429 --- /dev/null +++ b/test/configCases/css/reexport/theme.module.css @@ -0,0 +1,4 @@ +@value colors: "./colors.module.css"; +@value primary, secondary from colors; + +@value danger as error from colors; diff --git a/test/configCases/css/reexport/value-at-rule.module.css b/test/configCases/css/reexport/value-at-rule.module.css new file mode 100644 index 00000000000..719530f089e --- /dev/null +++ b/test/configCases/css/reexport/value-at-rule.module.css @@ -0,0 +1,19 @@ +@value primary from "./theme.module.css"; +@value error from "./theme.module.css"; + +@value colors: "./theme.module.css"; +@value danger: error from colors; + +.color { + color: danger +} + +.button { + background-color: primary; + color: white; +} + +.button-error { + background-color: error; + border: 2px solid darkred; +} diff --git a/test/configCases/css/reexport/vars.module.css b/test/configCases/css/reexport/vars.module.css new file mode 100644 index 00000000000..32c66ad71d1 --- /dev/null +++ b/test/configCases/css/reexport/vars.module.css @@ -0,0 +1,7 @@ +:root { + --my-var-u1: red; +} + +.my-var-u1 { + color: red; +} diff --git a/test/configCases/css/reexport/webpack.config.js b/test/configCases/css/reexport/webpack.config.js new file mode 100644 index 00000000000..ced85db12bc --- /dev/null +++ b/test/configCases/css/reexport/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = ["development", "production"].map((mode, idx) => ({ + name: mode, + devtool: false, + entry: "./index.js", + mode, + target: "web", + output: { + filename: `bundle${idx}.js` + }, + optimization: { + minimize: false + }, + experiments: { + css: true + } +})); diff --git a/test/configCases/css/runtime-data-webpack/index.js b/test/configCases/css/runtime-data-webpack/index.js new file mode 100644 index 00000000000..46360d4fd0d --- /dev/null +++ b/test/configCases/css/runtime-data-webpack/index.js @@ -0,0 +1,7 @@ +import "./style.css"; + +it("should work", () => { + const computedStyle = getComputedStyle(document.body); + expect(computedStyle.getPropertyValue("color")).toBe(" red"); + expect(computedStyle.getPropertyValue("background")).toBe(" red"); +}); diff --git a/test/configCases/css/runtime-data-webpack/other-style.css b/test/configCases/css/runtime-data-webpack/other-style.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/css/runtime-data-webpack/other-style.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/css/runtime-data-webpack/style.css b/test/configCases/css/runtime-data-webpack/style.css new file mode 100644 index 00000000000..812c07c7f78 --- /dev/null +++ b/test/configCases/css/runtime-data-webpack/style.css @@ -0,0 +1,5 @@ +@import "other-style.css"; + +body { + background: red; +} diff --git a/test/configCases/css/runtime-data-webpack/test.config.js b/test/configCases/css/runtime-data-webpack/test.config.js new file mode 100644 index 00000000000..36c3327df6d --- /dev/null +++ b/test/configCases/css/runtime-data-webpack/test.config.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + link.setAttribute("data-webpack", "test:chunk-main"); + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/runtime-data-webpack/webpack.config.js b/test/configCases/css/runtime-data-webpack/webpack.config.js new file mode 100644 index 00000000000..b32aedd1531 --- /dev/null +++ b/test/configCases/css/runtime-data-webpack/webpack.config.js @@ -0,0 +1,42 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + output: { + uniqueName: "test" + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "Test", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE + }, + (assets) => { + const name = "bundle0.css"; + const code = /** @type {string} */ (assets[name].source()); + + compilation.updateAsset( + name, + new compiler.webpack.sources.RawSource( + `${code.replace( + "head{", + ".class, head, body{" + )}\n\n.after-head { color: red; }` + ) + ); + } + ); + }); + } + } + ], + experiments: { + css: true + } +}; diff --git a/test/configCases/css/runtime-document-head-get-computed-style/index.js b/test/configCases/css/runtime-document-head-get-computed-style/index.js new file mode 100644 index 00000000000..46360d4fd0d --- /dev/null +++ b/test/configCases/css/runtime-document-head-get-computed-style/index.js @@ -0,0 +1,7 @@ +import "./style.css"; + +it("should work", () => { + const computedStyle = getComputedStyle(document.body); + expect(computedStyle.getPropertyValue("color")).toBe(" red"); + expect(computedStyle.getPropertyValue("background")).toBe(" red"); +}); diff --git a/test/configCases/css/runtime-document-head-get-computed-style/other-style.css b/test/configCases/css/runtime-document-head-get-computed-style/other-style.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/css/runtime-document-head-get-computed-style/other-style.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/css/runtime-document-head-get-computed-style/style.css b/test/configCases/css/runtime-document-head-get-computed-style/style.css new file mode 100644 index 00000000000..812c07c7f78 --- /dev/null +++ b/test/configCases/css/runtime-document-head-get-computed-style/style.css @@ -0,0 +1,5 @@ +@import "other-style.css"; + +body { + background: red; +} diff --git a/test/configCases/css/runtime-document-head-get-computed-style/test.config.js b/test/configCases/css/runtime-document-head-get-computed-style/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/runtime-document-head-get-computed-style/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/runtime-document-head-get-computed-style/webpack.config.js b/test/configCases/css/runtime-document-head-get-computed-style/webpack.config.js new file mode 100644 index 00000000000..35e121e56a5 --- /dev/null +++ b/test/configCases/css/runtime-document-head-get-computed-style/webpack.config.js @@ -0,0 +1,39 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + output: { + uniqueName: "test" + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "Test", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE + }, + (assets) => { + const name = "bundle0.css"; + const code = assets[name].source(); + + compilation.updateAsset( + name, + new compiler.webpack.sources.RawSource( + `${code}\n\n.after-head { color: red; }` + ) + ); + } + ); + }); + } + } + ], + experiments: { + css: true + } +}; diff --git a/test/configCases/css/runtime-issue/asyncChunk.js b/test/configCases/css/runtime-issue/asyncChunk.js new file mode 100644 index 00000000000..7494648b883 --- /dev/null +++ b/test/configCases/css/runtime-issue/asyncChunk.js @@ -0,0 +1,2 @@ +import * as style from "./styles.js"; +export default style; \ No newline at end of file diff --git a/test/configCases/css/runtime-issue/asyncChunk2.js b/test/configCases/css/runtime-issue/asyncChunk2.js new file mode 100644 index 00000000000..7494648b883 --- /dev/null +++ b/test/configCases/css/runtime-issue/asyncChunk2.js @@ -0,0 +1,2 @@ +import * as style from "./styles.js"; +export default style; \ No newline at end of file diff --git a/test/configCases/css/runtime-issue/entry1.js b/test/configCases/css/runtime-issue/entry1.js new file mode 100644 index 00000000000..fb96793e70c --- /dev/null +++ b/test/configCases/css/runtime-issue/entry1.js @@ -0,0 +1,14 @@ +const img = new URL("./img.png", import.meta.url); + +it("should allow to create css modules", done => { + import("./asyncChunk").then(({ default: x }) => { + try { + expect(img.toString()).toBe("https://test.cases/path/img.png"); + expect(x.default.class).toEqual("test_module_css-class"); + } catch (e) { + return done(e); + } + + done(); + }, done); +}); diff --git a/test/configCases/css/runtime-issue/entry2.js b/test/configCases/css/runtime-issue/entry2.js new file mode 100644 index 00000000000..a834dd062be --- /dev/null +++ b/test/configCases/css/runtime-issue/entry2.js @@ -0,0 +1,14 @@ +const img = new URL("./img.png", import.meta.url); + +it("should allow to create css modules", done => { + import("./asyncChunk2").then(({ default: x }) => { + try { + expect(img.toString()).toBe("https://test.cases/path/img.png"); + expect(x.default.class).toEqual("test_module_css-class"); + } catch (e) { + return done(e); + } + + done(); + }, done); +}); diff --git a/test/configCases/css/runtime-issue/img.png b/test/configCases/css/runtime-issue/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/runtime-issue/img.png differ diff --git a/test/configCases/css/runtime-issue/share.js b/test/configCases/css/runtime-issue/share.js new file mode 100644 index 00000000000..9bb91edb2e3 --- /dev/null +++ b/test/configCases/css/runtime-issue/share.js @@ -0,0 +1 @@ +const foo = `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` diff --git a/test/configCases/css/runtime-issue/styles.js b/test/configCases/css/runtime-issue/styles.js new file mode 100644 index 00000000000..7034f505d08 --- /dev/null +++ b/test/configCases/css/runtime-issue/styles.js @@ -0,0 +1,2 @@ +import * as style from "./test.module.css"; +export default style; \ No newline at end of file diff --git a/test/configCases/css/runtime-issue/test.config.js b/test/configCases/css/runtime-issue/test.config.js new file mode 100644 index 00000000000..839bb36ff17 --- /dev/null +++ b/test/configCases/css/runtime-issue/test.config.js @@ -0,0 +1,23 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link1 = scope.window.document.createElement("link"); + link1.rel = "stylesheet"; + link1.href = "asyncChunk_js.css"; + scope.window.document.head.appendChild(link1); + const link2 = scope.window.document.createElement("link"); + link2.rel = "stylesheet"; + link2.href = "asyncChunk2_js.css"; + scope.window.document.head.appendChild(link2); + }, + findBundle() { + return [ + "./common-share_js-img_png.js", + "./asyncChunk_js.js", + "./main.js", + "./secondMain.js", + "./asyncChunk2_js.js" + ]; + } +}; diff --git a/test/configCases/css/runtime-issue/test.module.css b/test/configCases/css/runtime-issue/test.module.css new file mode 100644 index 00000000000..bfaebe6d7b7 --- /dev/null +++ b/test/configCases/css/runtime-issue/test.module.css @@ -0,0 +1,3 @@ +.class { + background-image: url('./img.png'); +} diff --git a/test/configCases/css/runtime-issue/webpack.config.js b/test/configCases/css/runtime-issue/webpack.config.js new file mode 100644 index 00000000000..ccd5e2dcca5 --- /dev/null +++ b/test/configCases/css/runtime-issue/webpack.config.js @@ -0,0 +1,36 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + }, + entry: { + main: { + import: ["./share.js", "./entry1.js"] + }, + secondMain: { + import: ["./share.js", "./entry2.js"] + } + }, + optimization: { + splitChunks: { + chunks: "all", + cacheGroups: { + common: { + name: false, + chunks: "all", + test() { + return true; + } + } + } + } + }, + output: { + filename: "[name].js", + assetModuleFilename: "[name][ext]" + } +}; diff --git a/test/configCases/css/universal/index.js b/test/configCases/css/universal/index.js new file mode 100644 index 00000000000..17d451b6ee7 --- /dev/null +++ b/test/configCases/css/universal/index.js @@ -0,0 +1,47 @@ +import * as pureStyle from "./style.css"; +import * as styles from "./style.modules.css"; + +it("should work", (done) => { + expect(pureStyle).toEqual({}); + + if (typeof document !== "undefined") { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("background")).toBe(" red"); + } + + expect(styles.foo).toBe("style_modules_css-foo"); + + import(/* webpackPrefetch: true */ "./style2.css").then((x) => { + expect(x).toEqual({}); + + if (typeof document !== "undefined") { + const style = getComputedStyle(document.body); + expect(style.getPropertyValue("color")).toBe(" blue"); + } + + import(/* webpackPrefetch: true */ "./style2.modules.css").then((x) => { + expect(x.bar).toBe("style2_modules_css-bar"); + done(); + }, done); + }, done); +}); + +it("should work in web worker", async () => { + if (typeof window !== "undefined") { + const worker = new Worker(new URL("./worker.js", import.meta.url), { + type: "module" + }); + worker.postMessage("ok"); + const result = await new Promise((resolve) => { + worker.onmessage = (event) => { + resolve(event.data); + }; + }); + expect(result).toBe( + "data: style_modules_css-foo style2_modules_css-bar style3_modules_css-baz, thanks" + ); + await worker.terminate(); + } else { + expect(true).toBe(true); + } +}); diff --git a/test/configCases/css/universal/style.css b/test/configCases/css/universal/style.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/test/configCases/css/universal/style.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/configCases/css/universal/style.modules.css b/test/configCases/css/universal/style.modules.css new file mode 100644 index 00000000000..cedf0a6d1f1 --- /dev/null +++ b/test/configCases/css/universal/style.modules.css @@ -0,0 +1,3 @@ +.foo { + color: red; +} diff --git a/test/configCases/css/universal/style2.css b/test/configCases/css/universal/style2.css new file mode 100644 index 00000000000..36505138bc9 --- /dev/null +++ b/test/configCases/css/universal/style2.css @@ -0,0 +1,3 @@ +body { + color: blue; +} diff --git a/test/configCases/css/universal/style2.modules.css b/test/configCases/css/universal/style2.modules.css new file mode 100644 index 00000000000..de51739f73d --- /dev/null +++ b/test/configCases/css/universal/style2.modules.css @@ -0,0 +1,3 @@ +.bar { + background: blue; +} diff --git a/test/configCases/css/universal/style3.modules.css b/test/configCases/css/universal/style3.modules.css new file mode 100644 index 00000000000..2e28374deb9 --- /dev/null +++ b/test/configCases/css/universal/style3.modules.css @@ -0,0 +1,3 @@ +.baz { + background: blue; +} diff --git a/test/configCases/css/universal/test.config.js b/test/configCases/css/universal/test.config.js new file mode 100644 index 00000000000..4585513b069 --- /dev/null +++ b/test/configCases/css/universal/test.config.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = { + moduleScope(scope, options, env) { + if (env !== "node") { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } + } +}; diff --git a/test/configCases/css/universal/test.filter.js b/test/configCases/css/universal/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/configCases/css/universal/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/configCases/css/universal/webpack.config.js b/test/configCases/css/universal/webpack.config.js new file mode 100644 index 00000000000..c894fd8f9a4 --- /dev/null +++ b/test/configCases/css/universal/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + name: "web", + target: ["web", "node"], + devtool: false, + mode: "development", + experiments: { + css: true, + outputModule: true + } + }, + { + name: "node", + target: ["web", "node"], + devtool: false, + mode: "development", + experiments: { + css: true, + outputModule: true + } + } +]; diff --git a/test/configCases/css/universal/worker.js b/test/configCases/css/universal/worker.js new file mode 100644 index 00000000000..cad22f2a187 --- /dev/null +++ b/test/configCases/css/universal/worker.js @@ -0,0 +1,7 @@ +self.onmessage = async event => { + const { foo } = await import("./style.modules.css"); + const { bar } = await import("./style2.modules.css"); + const { baz } = await import("./style3.modules.css"); + + postMessage(`data: ${foo} ${bar} ${baz}, thanks`); +}; diff --git a/test/configCases/css/url-and-asset-module-filename/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/url-and-asset-module-filename/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..0f19b26e49a --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,82 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 1`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(../../bundle0/assets/img2.png)", + "nested-nested-dir": " url(../../bundle0/assets/img3.png)", + "same-dir": " url(../../bundle0/assets/img1.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 2`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(../../bundle0/assets/img3.png)", + "outer-dir": " url(../../bundle0/assets/img1.png)", + "same-dir": " url(../../bundle0/assets/img2.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 3`] = ` +Object { + "getPropertyValue": [Function], + "outer-dir": " url(../../bundle0/assets/img2.png)", + "outer-outer-dir": " url(../../bundle0/assets/img1.png)", + "same-dir": " url(../../bundle0/assets/img3.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 4`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle1/assets/img2.png)", + "nested-nested-dir": " url(https://test.cases/path/bundle1/assets/img3.png)", + "same-dir": " url(https://test.cases/path/bundle1/assets/img1.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 5`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle1/assets/img3.png)", + "outer-dir": " url(https://test.cases/path/bundle1/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle1/assets/img2.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 6`] = ` +Object { + "getPropertyValue": [Function], + "outer-dir": " url(https://test.cases/path/bundle1/assets/img2.png)", + "outer-outer-dir": " url(https://test.cases/path/bundle1/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle1/assets/img3.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 7`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle2/assets/img2.png)", + "nested-nested-dir": " url(https://test.cases/path/bundle2/assets/img3.png)", + "same-dir": " url(https://test.cases/path/bundle2/assets/img1.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 8`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle2/assets/img3.png)", + "outer-dir": " url(https://test.cases/path/bundle2/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle2/assets/img2.png)", +} +`; + +exports[`ConfigCacheTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 9`] = ` +Object { + "getPropertyValue": [Function], + "outer-dir": " url(https://test.cases/path/bundle2/assets/img2.png)", + "outer-outer-dir": " url(https://test.cases/path/bundle2/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle2/assets/img3.png)", +} +`; diff --git a/test/configCases/css/url-and-asset-module-filename/__snapshots__/ConfigTest.snap b/test/configCases/css/url-and-asset-module-filename/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..70afed236eb --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/__snapshots__/ConfigTest.snap @@ -0,0 +1,82 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 1`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(../../bundle0/assets/img2.png)", + "nested-nested-dir": " url(../../bundle0/assets/img3.png)", + "same-dir": " url(../../bundle0/assets/img1.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 2`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(../../bundle0/assets/img3.png)", + "outer-dir": " url(../../bundle0/assets/img1.png)", + "same-dir": " url(../../bundle0/assets/img2.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 3`] = ` +Object { + "getPropertyValue": [Function], + "outer-dir": " url(../../bundle0/assets/img2.png)", + "outer-outer-dir": " url(../../bundle0/assets/img1.png)", + "same-dir": " url(../../bundle0/assets/img3.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 4`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle1/assets/img2.png)", + "nested-nested-dir": " url(https://test.cases/path/bundle1/assets/img3.png)", + "same-dir": " url(https://test.cases/path/bundle1/assets/img1.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 5`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle1/assets/img3.png)", + "outer-dir": " url(https://test.cases/path/bundle1/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle1/assets/img2.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 6`] = ` +Object { + "getPropertyValue": [Function], + "outer-dir": " url(https://test.cases/path/bundle1/assets/img2.png)", + "outer-outer-dir": " url(https://test.cases/path/bundle1/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle1/assets/img3.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 7`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle2/assets/img2.png)", + "nested-nested-dir": " url(https://test.cases/path/bundle2/assets/img3.png)", + "same-dir": " url(https://test.cases/path/bundle2/assets/img1.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 8`] = ` +Object { + "getPropertyValue": [Function], + "nested-dir": " url(https://test.cases/path/bundle2/assets/img3.png)", + "outer-dir": " url(https://test.cases/path/bundle2/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle2/assets/img2.png)", +} +`; + +exports[`ConfigTestCases css url-and-asset-module-filename exported tests should generate correct url public path with css filename 9`] = ` +Object { + "getPropertyValue": [Function], + "outer-dir": " url(https://test.cases/path/bundle2/assets/img2.png)", + "outer-outer-dir": " url(https://test.cases/path/bundle2/assets/img1.png)", + "same-dir": " url(https://test.cases/path/bundle2/assets/img3.png)", +} +`; diff --git a/test/configCases/css/url-and-asset-module-filename/img1.png b/test/configCases/css/url-and-asset-module-filename/img1.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url-and-asset-module-filename/img1.png differ diff --git a/test/configCases/css/url-and-asset-module-filename/index.css b/test/configCases/css/url-and-asset-module-filename/index.css new file mode 100644 index 00000000000..f6776450de8 --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/index.css @@ -0,0 +1,7 @@ +@import "./nested/index.css"; + +h1 { + same-dir: url('./img1.png'); + nested-dir: url('./nested/img2.png'); + nested-nested-dir: url('./nested/nested/img3.png'); +} diff --git a/test/configCases/css/url-and-asset-module-filename/index.js b/test/configCases/css/url-and-asset-module-filename/index.js new file mode 100644 index 00000000000..db8244a0d78 --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/index.js @@ -0,0 +1,22 @@ +it(`should generate correct url public path with css filename`, done => { + const h1 = document.createElement('h1'); + document.body.appendChild(h1); + const h2 = document.createElement('h2'); + document.body.appendChild(h1); + const h3 = document.createElement('h3'); + document.body.appendChild(h1); + import("./index.css").then(x => { + try { + expect(x).toEqual({}); + const style1 = getComputedStyle(h1); + expect(style1).toMatchSnapshot(); + const style2 = getComputedStyle(h2); + expect(style2).toMatchSnapshot(); + const style3 = getComputedStyle(h3); + expect(style3).toMatchSnapshot(); + done(); + } catch (e) { + done(e); + } + }, done); +}); diff --git a/test/configCases/css/url-and-asset-module-filename/nested/img2.png b/test/configCases/css/url-and-asset-module-filename/nested/img2.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url-and-asset-module-filename/nested/img2.png differ diff --git a/test/configCases/css/url-and-asset-module-filename/nested/index.css b/test/configCases/css/url-and-asset-module-filename/nested/index.css new file mode 100644 index 00000000000..e681e125745 --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/nested/index.css @@ -0,0 +1,7 @@ +@import "./nested/index.css"; + +h2 { + same-dir: url('./img2.png'); + nested-dir: url('./nested/img3.png'); + outer-dir: url('../img1.png'); +} diff --git a/test/configCases/css/url-and-asset-module-filename/nested/nested/img3.png b/test/configCases/css/url-and-asset-module-filename/nested/nested/img3.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url-and-asset-module-filename/nested/nested/img3.png differ diff --git a/test/configCases/css/url-and-asset-module-filename/nested/nested/index.css b/test/configCases/css/url-and-asset-module-filename/nested/nested/index.css new file mode 100644 index 00000000000..acdd96d9881 --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/nested/nested/index.css @@ -0,0 +1,5 @@ +h3 { + same-dir: url('./img3.png'); + outer-dir: url('../img2.png'); + outer-outer-dir: url('../../img1.png'); +} diff --git a/test/configCases/css/url-and-asset-module-filename/test.config.js b/test/configCases/css/url-and-asset-module-filename/test.config.js new file mode 100644 index 00000000000..d588de9f1e6 --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return [`index_css.bundle${i}.js`, `bundle${i}.js`]; + } +}; diff --git a/test/configCases/css/url-and-asset-module-filename/webpack.config.js b/test/configCases/css/url-and-asset-module-filename/webpack.config.js new file mode 100644 index 00000000000..a4ab9c1026f --- /dev/null +++ b/test/configCases/css/url-and-asset-module-filename/webpack.config.js @@ -0,0 +1,50 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +const common = { + target: "web", + mode: "development", + devtool: false, + experiments: { + css: true + } +}; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + ...common, + output: { + publicPath: "auto", + cssChunkFilename: "bundle0/css/[name].css", + assetModuleFilename: "bundle0/assets/[name][ext]" + } + }, + { + ...common, + output: { + publicPath: "https://test.cases/path/", + cssChunkFilename: "bundle1/css/[name].css", + assetModuleFilename: "bundle1/assets/[name][ext]" + } + }, + { + ...common, + output: { + cssChunkFilename: "bundle2/css/[name].css" + }, + module: { + rules: [ + { + test: /\.png$/i, + type: "asset/resource", + generator: { + filename: "[name][ext]", + outputPath: "bundle2/assets/", + publicPath: "https://test.cases/path/bundle2/assets/" + } + } + ] + } + } +]; diff --git a/test/configCases/css/url/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/url/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..b809ea31ea7 --- /dev/null +++ b/test/configCases/css/url/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,1310 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css url exported tests should work with URLs in CSS 1`] = ` +Array [ + "/*!************************!*\\\\ + !*** external \\"#test\\" ***! + \\\\************************/ +@import url(\\"#test\\"); +/*!************************!*\\\\ + !*** css ./nested.css ***! + \\\\************************/ + +.nested { + background: url(img.09a1a1112c577c279435.png); +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +div { + a: url(img.09a1a1112c577c279435.png); +} + +div { + b: url(img.09a1a1112c577c279435.png); +} + +div { + c: url(img.09a1a1112c577c279435.png); +} + +div { + d: url(img.09a1a1112c577c279435.png#hash); +} + +div { + e: url( + img.09a1a1112c577c279435.png + ); +} + +div { + f: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + g: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + h: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + i: green url(img.09a1a1112c577c279435.png) url(img.09a1a1112c577c279435.png) xyz; +} + +div { + j: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + k: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + l: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + m: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + n: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + --foo: url(img.09a1a1112c577c279435.png); +} + +div { + a1: url(img.09a1a1112c577c279435.png); +} + +div { + a2: url(img.09a1a1112c577c279435.png); +} + +div { + a3: url(img.09a1a1112c577c279435.png); +} + +div { + a4: url(img.09a1a1112c577c279435.png#hash); +} + +div { + a5: url( + img.09a1a1112c577c279435.png + ); +} + +div { + a6: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + a7: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + a8: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + a9: green url(img.09a1a1112c577c279435.png) url(other-img.09a1a1112c577c279435.png) xyz; +} + +div { + a10: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + a11: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + a12: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + a13: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz; +} + +div { + a14: url(\\"data:image/svg+xml;charset=utf-8,\\"); +} + +div { + a15: url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E); +} + +div { + a16: url('data:image/svg+xml;charset=utf-8,#filter'); +} + +div { + a17: url(\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter\\"); +} + +div { + a18: url(#highlight); +} + +div { + a19: url(#line-marker); +} + +@font-face { + a20: url(font.31d6cfe0d16ae931b73c.woff) format('woff'), + url(font.31d6cfe0d16ae931b73c.woff2) format('woff2'), + url(font.31d6cfe0d16ae931b73c.eot) format('eot'), + url(font.31d6cfe0d16ae931b73c.ttf) format('truetype'), + url(\\"font with spaces.31d6cfe0d16ae931b73c.eot\\") format(\\"embedded-opentype\\"), + url(font.31d6cfe0d16ae931b73c.svg#svgFontName) format('svg'), + url(font.31d6cfe0d16ae931b73c.woff2?foo=bar) format('woff2'), + url(font.31d6cfe0d16ae931b73c.eot?#iefix) format('embedded-opentype'), + url(\\"font with spaces.31d6cfe0d16ae931b73c.eot?#iefix\\") format('embedded-opentype'); +} + +@media (min-width: 500px) { + div { + a21: url(img.09a1a1112c577c279435.png); + } +} + +div { + a22: \\"do not use url(path)\\"; +} + +div { + a23: 'do not \\"use\\" url(path)'; +} + +div { + a24: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) +} + +div { + a25: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) +} + +div { + a26: green url() xyz; +} + +div { + a27: green url('') xyz; +} + +div { + a28: green url(\\"\\") xyz; +} + +div { + a29: green url(' ') xyz; +} + +div { + a30: green url( + ) xyz; +} + +div { + a40: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a41: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a42: url(img.09a1a1112c577c279435.png?foo); +} + +div { + a43: url(img.09a1a1112c577c279435.png?foo=bar); +} + +div { + a44: url(img.09a1a1112c577c279435.png?foo=bar#hash); +} + +div { + a45: url(img.09a1a1112c577c279435.png?foo=bar#hash); +} + +div { + a46: url(img.09a1a1112c577c279435.png?); +} + +div { + a47: url(img.09a1a1112c577c279435.png) url(\\"data:image/svg+xml;charset=utf-8,\\") url(img.09a1a1112c577c279435.png); +} + +div { + a48: __URL__(); +} + +div { + a49: url(img-simple.09a1a1112c577c279435.png); +} + +div { + a50: url(img-simple.09a1a1112c577c279435.png); +} + +div { + a51: url(img-simple.09a1a1112c577c279435.png); +} + +div { + a52: url(img.09a1a1112c577c279435.png); +} + +div { + a53: url(img.09a1a1112c577c279435.png); +} + +@font-face { + a54: url(//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot); +} + +div { + a55: -webkit-image-set(); + a56: -webkit-image-set(''); + a56: image-set(); + a58: image-set(''); + a59: image-set(\\"\\"); + a60: image-set(\\"\\" 1x); + a61: image-set(url()); + a62: image-set( + url() + ); + a63: image-set(URL()); + a64: image-set(url('')); + a65: image-set(url(\\"\\")); + a66: image-set(url('') 1x); + a67: image-set(1x); + a68: image-set( + 1x + ); + a69: image-set(calc(1rem + 1px) 1x); + + a70: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a71: image-set(url(img1x.09a1a1112c577c279435.png) 1x); + a72: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a73: image-set(url(img\\\\ img.09a1a1112c577c279435.png) 1x, url(img\\\\ img.09a1a1112c577c279435.png) 2x); + a74: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x), + image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a75: image-set( + url(img1x.09a1a1112c577c279435.png) 1x, + url(img2x.09a1a1112c577c279435.png) 2x, + url(img3x.09a1a1112c577c279435.png) 600dpi + ); + a76: image-set(url(img1x.09a1a1112c577c279435.png?foo=bar) 1x); + a77: image-set(url(img1x.09a1a1112c577c279435.png#hash) 1x); + a78: image-set(url(img1x.09a1a1112c577c279435.png?#iefix) 1x); + + a79: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a80: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x); + a81: -webkit-image-set( + url(img1x.09a1a1112c577c279435.png) 1x + ); + a82: image-set(url(img1x.09a1a1112c577c279435.png) 1x); + a83: image-set( + url(img1x.09a1a1112c577c279435.png) 1x + ); + a84: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a85: image-set( + url(img1x.09a1a1112c577c279435.png) 1x, + url(img2x.09a1a1112c577c279435.png) 2x, + url(img3x.09a1a1112c577c279435.png) 600dpi + ); + a86: image-set(url(img\\\\ img.09a1a1112c577c279435.png) 1x, url(img\\\\ img.09a1a1112c577c279435.png) 2x); + + a87: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); +} + +div { + a88: url(imgimg.09a1a1112c577c279435.png); + a89: url(img\\\\'img.09a1a1112c577c279435.png); + a90: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a91: url(img\\\\(img.09a1a1112c577c279435.png); + a92: url(img\\\\)img.09a1a1112c577c279435.png); + a93: url(img\\\\ img.09a1a1112c577c279435.png); + a94: url(\\"img'() img.09a1a1112c577c279435.png\\"); + + a95: image-set( + url(imgimg.09a1a1112c577c279435.png) 1x, + url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png) 2x, + url(img\\\\'img.09a1a1112c577c279435.png) 3x, + url(img\\\\(img.09a1a1112c577c279435.png) 4x, + url(img\\\\)img.09a1a1112c577c279435.png) 5x, + url(img\\\\ img.09a1a1112c577c279435.png) 6x, + url(\\"img'() img.09a1a1112c577c279435.png\\") 7x + ); +} + +div { + a96: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a97: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a98: url(img\\\\'img.09a1a1112c577c279435.png); + a99: url(img\\\\(img.09a1a1112c577c279435.png); + a100: url(img\\\\)img.09a1a1112c577c279435.png); + a101: url(img\\\\ img.09a1a1112c577c279435.png); + a102: url(img\\\\ img.09a1a1112c577c279435.png); +} + +div { + a103: url(img\\\\(img.09a1a1112c577c279435.png); + a104: url(img\\\\(img.09a1a1112c577c279435.png); + a105: url(img\\\\(img.09a1a1112c577c279435.png); + a106: url(img\\\\(img.09a1a1112c577c279435.png); +} + +div { + a107: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a108: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a109: url(img\\\\'img.09a1a1112c577c279435.png); + a110: url(img\\\\(img.09a1a1112c577c279435.png); + a111: url(img\\\\)img.09a1a1112c577c279435.png); + a112: url(img\\\\ img.09a1a1112c577c279435.png); + a113: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a114: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a115: url(img\\\\'img.09a1a1112c577c279435.png); + a116: url(img\\\\(img.09a1a1112c577c279435.png); + a117: url(img\\\\)img.09a1a1112c577c279435.png); + a118: url(img\\\\ img.09a1a1112c577c279435.png); +} + +div { + a119: url(img.09a1a1112c577c279435.png); +} + +div { + a120: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a121: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a122: url(img\\\\'img.09a1a1112c577c279435.png); + a123: url(img\\\\(img.09a1a1112c577c279435.png); + a124: url(img\\\\)img.09a1a1112c577c279435.png); + a125: url(img\\\\ img.09a1a1112c577c279435.png); + a126: url(img.09a1a1112c577c279435.png); + a127: url(img.09a1a1112c577c279435.png); + a128: url(img\\\\'img.09a1a1112c577c279435.png); + a129: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a130: url(\\"img'() img.09a1a1112c577c279435.png\\"); +} + +div { + a131: url(img.09a1a1112c577c279435.png); + a132: url(img.09a1a1112c577c279435.png); + + a133: url(img.09a1a1112c577c279435.png?foo=bar); + a134: url(img.09a1a1112c577c279435.png?foo=bar); + + a135: url(img.09a1a1112c577c279435.png?foo=bar#hash); + a136: url(img.09a1a1112c577c279435.png?foo=bar#hash); + + a137: url(img.09a1a1112c577c279435.png?foo=bar); + a138: url(img.09a1a1112c577c279435.png?bar=foo); + + a139: url(img.09a1a1112c577c279435.png?foo=bar#foo); + a140: url(img.09a1a1112c577c279435.png?bar=foo#bar); + + a141: url(img.09a1a1112c577c279435.png?foo=1&bar=2); + a142: url(img.09a1a1112c577c279435.png?foo=2&bar=1); +} + +div { + a143: url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20width%3D%22191px%22%20height%3D%22191px%22%20viewBox%3D%220%200%20191%20191%22%20enable-background%3D%22new%200%200%20191%20191%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M95.5%2C0C42.8%2C0%2C0%2C42.8%2C0%2C95.5S42.8%2C191%2C95.5%2C191S191%2C148.2%2C191%2C95.5S148.2%2C0%2C95.5%2C0z%20M95.5%2C187.6%0A%09c-50.848%2C0-92.1-41.25-92.1-92.1c0-50.848%2C41.252-92.1%2C92.1-92.1c50.85%2C0%2C92.1%2C41.252%2C92.1%2C92.1%0A%09C187.6%2C146.35%2C146.35%2C187.6%2C95.5%2C187.6z%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M92.9%2C10v8.6H91v-6.5c-0.1%2C0.1-0.2%2C0.2-0.4%2C0.3c-0.2%2C0.1-0.3%2C0.2-0.4%2C0.2c-0.1%2C0-0.3%2C0.1-0.5%2C0.2%0A%09%09c-0.2%2C0.1-0.3%2C0.1-0.5%2C0.1v-1.6c0.5-0.1%2C0.9-0.3%2C1.4-0.5c0.5-0.2%2C0.8-0.5%2C1.2-0.7h1.1V10z%22%2F%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M97.1%2C17.1h3.602v1.5h-5.6V18c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.6%2C0.5-0.9c0.2-0.3%2C0.5-0.5%2C0.7-0.7%0A%09%09c0.2-0.2%2C0.5-0.4%2C0.7-0.6c0.199-0.2%2C0.5-0.3%2C0.6-0.5c0.102-0.2%2C0.301-0.3%2C0.5-0.5c0.2-0.2%2C0.2-0.3%2C0.301-0.5%0A%09%09c0.101-0.2%2C0.101-0.3%2C0.101-0.5c0-0.4-0.101-0.6-0.3-0.8c-0.2-0.2-0.4-0.3-0.801-0.3c-0.699%2C0-1.399%2C0.3-2.101%2C0.9v-1.6%0A%09%09c0.7-0.5%2C1.5-0.7%2C2.5-0.7c0.399%2C0%2C0.8%2C0.1%2C1.101%2C0.2c0.301%2C0.1%2C0.601%2C0.3%2C0.899%2C0.5c0.3%2C0.2%2C0.399%2C0.5%2C0.5%2C0.8%0A%09%09c0.101%2C0.3%2C0.2%2C0.6%2C0.2%2C1s-0.102%2C0.7-0.2%2C1c-0.099%2C0.3-0.3%2C0.6-0.5%2C0.8c-0.2%2C0.2-0.399%2C0.5-0.7%2C0.7c-0.3%2C0.2-0.5%2C0.4-0.8%2C0.6%0A%09%09c-0.2%2C0.1-0.399%2C0.3-0.5%2C0.4s-0.3%2C0.3-0.5%2C0.4s-0.2%2C0.3-0.3%2C0.4C97.1%2C17%2C97.1%2C17%2C97.1%2C17.1z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M15%2C95.4c0%2C0.7-0.1%2C1.4-0.2%2C2c-0.1%2C0.6-0.4%2C1.1-0.7%2C1.5C13.8%2C99.3%2C13.4%2C99.6%2C12.9%2C99.8s-1%2C0.3-1.5%2C0.3%0A%09%09c-0.7%2C0-1.3-0.1-1.8-0.3v-1.5c0.4%2C0.3%2C1%2C0.4%2C1.6%2C0.4c0.6%2C0%2C1.1-0.2%2C1.5-0.7c0.4-0.5%2C0.5-1.1%2C0.5-1.9l0%2C0%0A%09%09C12.8%2C96.7%2C12.3%2C96.9%2C11.5%2C96.9c-0.3%2C0-0.7-0.102-1-0.2c-0.3-0.101-0.5-0.3-0.8-0.5c-0.3-0.2-0.4-0.5-0.5-0.8%0A%09%09c-0.1-0.3-0.2-0.7-0.2-1c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.7%2C0.6-0.9c0.3-0.2%2C0.6-0.5%2C0.9-0.6c0.3-0.1%2C0.8-0.2%2C1.2-0.2%0A%09%09c0.5%2C0%2C0.9%2C0.1%2C1.2%2C0.3c0.3%2C0.2%2C0.7%2C0.4%2C0.9%2C0.8s0.5%2C0.7%2C0.6%2C1.2S15%2C94.8%2C15%2C95.4z%20M13.1%2C94.4c0-0.2%2C0-0.4-0.1-0.6%0A%09%09c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2%2C0-0.3%2C0-0.4%2C0.1s-0.3%2C0.2-0.3%2C0.3%0A%09%09c0%2C0.1-0.2%2C0.3-0.2%2C0.4c0%2C0.1-0.1%2C0.4-0.1%2C0.6c0%2C0.2%2C0%2C0.4%2C0.1%2C0.6c0.1%2C0.2%2C0.1%2C0.3%2C0.2%2C0.4c0.1%2C0.1%2C0.2%2C0.2%2C0.4%2C0.3%0A%09%09c0.2%2C0.1%2C0.3%2C0.1%2C0.5%2C0.1c0.2%2C0%2C0.3%2C0%2C0.4-0.1s0.2-0.2%2C0.3-0.3c0.1-0.1%2C0.2-0.2%2C0.2-0.4C13%2C94.7%2C13.1%2C94.6%2C13.1%2C94.4z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M176%2C99.7V98.1c0.6%2C0.4%2C1.2%2C0.602%2C2%2C0.602c0.5%2C0%2C0.8-0.102%2C1.1-0.301c0.301-0.199%2C0.4-0.5%2C0.4-0.801%0A%09%09c0-0.398-0.2-0.699-0.5-0.898c-0.3-0.2-0.8-0.301-1.3-0.301h-0.802V95h0.701c1.101%2C0%2C1.601-0.4%2C1.601-1.1c0-0.7-0.4-1-1.302-1%0A%09%09c-0.6%2C0-1.1%2C0.2-1.6%2C0.5v-1.5c0.6-0.3%2C1.301-0.4%2C2.1-0.4c0.9%2C0%2C1.5%2C0.2%2C2%2C0.6s0.701%2C0.9%2C0.701%2C1.5c0%2C1.1-0.601%2C1.8-1.701%2C2.1l0%2C0%0A%09%09c0.602%2C0.1%2C1.102%2C0.3%2C1.4%2C0.6s0.5%2C0.8%2C0.5%2C1.3c0%2C0.801-0.3%2C1.4-0.9%2C1.9c-0.6%2C0.5-1.398%2C0.7-2.398%2C0.7%0A%09%09C177.2%2C100.1%2C176.5%2C100%2C176%2C99.7z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M98.5%2C179.102c0%2C0.398-0.1%2C0.799-0.2%2C1.199C98.2%2C180.7%2C98%2C181%2C97.7%2C181.2s-0.601%2C0.5-0.9%2C0.601%0A%09%09c-0.3%2C0.1-0.7%2C0.199-1.2%2C0.199c-0.5%2C0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.399-0.9-0.8c-0.2-0.4-0.5-0.7-0.6-1.2%0A%09%09c-0.1-0.5-0.2-1-0.2-1.601c0-0.699%2C0.1-1.399%2C0.3-2c0.2-0.601%2C0.4-1.101%2C0.8-1.5c0.4-0.399%2C0.7-0.699%2C1.2-1c0.5-0.3%2C1-0.3%2C1.6-0.3%0A%09%09c0.6%2C0%2C1.2%2C0.101%2C1.5%2C0.199v1.5c-0.4-0.199-0.9-0.399-1.4-0.399c-0.3%2C0-0.6%2C0.101-0.8%2C0.2c-0.2%2C0.101-0.5%2C0.3-0.7%2C0.5%0A%09%09c-0.2%2C0.199-0.3%2C0.5-0.4%2C0.8c-0.1%2C0.301-0.2%2C0.7-0.2%2C1.101l0%2C0c0.4-0.601%2C1-0.8%2C1.8-0.8c0.3%2C0%2C0.7%2C0.1%2C0.9%2C0.199%0A%09%09c0.2%2C0.101%2C0.5%2C0.301%2C0.7%2C0.5c0.199%2C0.2%2C0.398%2C0.5%2C0.5%2C0.801C98.5%2C178.2%2C98.5%2C178.7%2C98.5%2C179.102z%20M96.7%2C179.2%0A%09%09c0-0.899-0.4-1.399-1.1-1.399c-0.2%2C0-0.3%2C0-0.5%2C0.1c-0.2%2C0.101-0.3%2C0.201-0.4%2C0.301c-0.1%2C0.101-0.2%2C0.199-0.2%2C0.4%0A%09%09c0%2C0.199-0.1%2C0.299-0.1%2C0.5c0%2C0.199%2C0%2C0.398%2C0.1%2C0.6s0.1%2C0.3%2C0.2%2C0.5c0.1%2C0.199%2C0.2%2C0.199%2C0.4%2C0.3c0.2%2C0.101%2C0.3%2C0.101%2C0.5%2C0.101%0A%09%09c0.2%2C0%2C0.3%2C0%2C0.5-0.101c0.2-0.101%2C0.301-0.199%2C0.301-0.3c0-0.1%2C0.199-0.301%2C0.199-0.399C96.6%2C179.7%2C96.7%2C179.4%2C96.7%2C179.2z%22%2F%3E%0A%3C%2Fg%3E%0A%3Ccircle%20fill%3D%22%23636363%22%20cx%3D%2295%22%20cy%3D%2295%22%20r%3D%227%22%2F%3E%0A%3C%2Fsvg%3E%0A) 50% 50%/191px no-repeat; +} + +div { + a144: url(img.09a1a1112c577c279435.png); +} + +div { + a145: url(img.09a1a1112c577c279435.png); +} + +div { + /* TODO fix me */ + /*a146: url('./img.png', 'foo', './img.png', url('./img.png'));*/ + /*a147: image-set(url('./img.png', 'foo', './img.png', url('./img.png')) 1x, url(\\"./img2x.png\\") 2x);*/ +} + +div { + a148: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a149: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a150: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a151: url('data:image/svg+xml;utf8,'); + a152: url('data:image/svg+xml;utf8,'); +} + +div { + a152: url(img.09a1a1112c577c279435.png); +} + +div { + a153: url(img.09a1a1112c577c279435.png); +} + +div { + a154: url(other.09a1a1112c577c279435.png); +} + +div { + a155: url(img.09a1a1112c577c279435.png); +} + +div { + a156: url(\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\\"); +} + +div { + a157: url('data:image/svg+xml;utf8,'); +} + +div { + a158: src(http://www.example.com/pinkish.gif); + --foo-bar: \\"http://www.example.com/pinkish.gif\\"; + a159: src(var(--foo)); +} + +div { + a160: url(img.09a1a1112c577c279435.png param(--color var(--primary-color))); + a161: src(img.09a1a1112c577c279435.png param(--color var(--primary-color))); +} + +div { + a162: url(img\\\\ img.09a1a1112c577c279435.png); + +} + +div { + a163: url(img.09a1a1112c577c279435.png); +} + + +div { + a164: url( img.png bug); +} + +div { + a165: url(imgn.09a1a1112c577c279435.png); +} + +div { + a166: url('data:image/svg+xml;utf8,'); +} + +div { + a167: url(http://example.com/image.jpg); + a168: url(http://example.com/image.jpg); +} + +div { + a169: url(data:,); + a170: url(data:,); +} + +div { + a171: image(ltr 'img.png#xywh=0,0,16,16', red); + a172: cross-fade(20% url(img.09a1a1112c577c279435.png), url(img.09a1a1112c577c279435.png)) +} + +div { + a172: image-set( + linear-gradient(blue, white) 1x, + linear-gradient(blue, green) 2x + ); + a173: image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") + ); + a174: image-set( + url(img.09a1a1112c577c279435.png) 1x, + url(img.09a1a1112c577c279435.png) 2x + ); + a175: image-set( + url(img.09a1a1112c577c279435.png) 1x, + url(img.09a1a1112c577c279435.png) 2x, + url(img.09a1a1112c577c279435.png) 3x + ); + a176: image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") + ) \\"img.png\\"; + a177: image-set( + url(img.09a1a1112c577c279435.png) 1x type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) 2x type(\\"image/png\\") + ); + a178: image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") 1x, + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") 2x + ); + a179: -webkit-image-set( + url(img.09a1a1112c577c279435.png) 1x + ); + a180: -webkit-image-set( + url(img.09a1a1112c577c279435.png var(--foo, \\"test.png\\")) 1x + ); +} + +div { + a181: src(img.09a1a1112c577c279435.png); + a181: src( img.09a1a1112c577c279435.png ); + a182: src(img.09a1a1112c577c279435.png); + a183: src(img.09a1a1112c577c279435.png var(--foo, \\"test.png\\")); + a184: src(var(--foo, \\"test.png\\")); + a185: src(img.09a1a1112c577c279435.png); +} + +div { + a186: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a187: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a188: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a189: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a190: image-set(url(img.09a1a1112c577c279435.png)1x); + a191: image-set(url(img.09a1a1112c577c279435.png)1x/* test*/,/* test*/url(img.09a1a1112c577c279435.png)2x); +} + +@supports (background-image: image-set(url(unknown.09a1a1112c577c279435.png)1x,url(unknown.09a1a1112c577c279435.png)2x,url(unknown.09a1a1112c577c279435.png)3x)) { + div { + a192: url(img.09a1a1112c577c279435.png); + a193: image-set(url(img.09a1a1112c577c279435.png)1x); + } +} + +@supports (background-image: url(unknown.09a1a1112c577c279435.png param(--test))) { + div { + a194: url(img.09a1a1112c577c279435.png); + } +} + +@supports (background-image: url(unknown.09a1a1112c577c279435.png)) { + div { + a195: url(img.09a1a1112c577c279435.png); + } +} + +@supports (display: grid) { + @media (min-width: 100px) { + @layer special { + div { + a196: url(img.09a1a1112c577c279435.png); + } + } + } +} + +div { + a197: \\\\u\\\\r\\\\l(img.09a1a1112c577c279435.png); + a198: \\\\image-\\\\set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a199: \\\\-webk\\\\it-image-set(url(img.09a1a1112c577c279435.png)1x); + a200:-webkit-image-set(url(img.09a1a1112c577c279435.png)1x); +} + +div { + a201: src(http://www.example.com/pinkish.gif); + --foo: \\"http://www.example.com/pinkish.gif\\"; + a202: src(var(--foo)); + a203: src(img.09a1a1112c577c279435.png); + a204: src(img.09a1a1112c577c279435.png); +} + +div { + a205: url(img.09a1a1112c577c279435.png); + a206: url(data:,); + a208: url(./img.png); + a208: url(data:,); + a209: url(data:,); + a210: url(data:,); + a211: url(\\\\'img.png\\\\'); +} + +.filtered-element { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(filters.ea56db6eeb4418f4a090.svg#myFilter); /* Applying the SVG filter */ +} + +.filtered-element-old-url { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(filters.ea56db6eeb4418f4a090.svg#myFilter); /* Applying the SVG filter */ +} + + + +", +] +`; + +exports[`ConfigCacheTestCases css url exported tests should work with URLs in CSS 2`] = ` +Array [ + "/*!************************!*\\\\ + !*** external \\"#test\\" ***! + \\\\************************/ +@import url(\\"#test\\"); +/*!************************!*\\\\ + !*** css ./nested.css ***! + \\\\************************/ + +.nested { + background: url('./img.png'); +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +div { + a: url('./img.png'); +} + +div { + b: url(\\"./img.png\\"); +} + +div { + c: url(./img.png); +} + +div { + d: url(\\"./img.png#hash\\"); +} + +div { + e: url( + \\"./img.png\\" + ); +} + +div { + f: green url( './img.png' ) xyz; +} + +div { + g: green url( \\"./img.png\\" ) xyz; +} + +div { + h: green url( ./img.png ) xyz; +} + +div { + i: green url(package/img.png) url(./img.png) xyz; +} + +div { + j: green url( \\"./img img.png\\" ) xyz; +} + +div { + k: green url( './img img.png' ) xyz; +} + +div { + l: green url(/img.png) xyz; +} + +div { + m: green URL(/img.png) xyz; +} + +div { + n: green uRl(/img.png) xyz; +} + +div { + --foo: url('./img.png'); +} + +div { + a1: url('./img.png'); +} + +div { + a2: url(\\"./img.png\\"); +} + +div { + a3: url(./img.png); +} + +div { + a4: url(\\"./img.png#hash\\"); +} + +div { + a5: url( + \\"./img.png\\" + ); +} + +div { + a6: green url( './img.png' ) xyz; +} + +div { + a7: green url( \\"./img.png\\" ) xyz; +} + +div { + a8: green url( ./img.png ) xyz; +} + +div { + a9: green url(package/img.png) url(./other-img.png) xyz; +} + +div { + a10: green url( \\"./img img.png\\" ) xyz; +} + +div { + a11: green url( './img img.png' ) xyz; +} + +div { + a12: green url(/img.png) xyz; +} + +div { + a13: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz; +} + +div { + a14: url(\\"data:image/svg+xml;charset=utf-8,\\"); +} + +div { + a15: url(\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\"); +} + +div { + a16: url('data:image/svg+xml;charset=utf-8,#filter'); +} + +div { + a17: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter'); +} + +div { + a18: url(#highlight); +} + +div { + a19: url('#line-marker'); +} + +@font-face { + a20: url(./font.woff) format('woff'), + url('./font.woff2') format('woff2'), + url(\\"./font.eot\\") format('eot'), + url(./font.ttf) format('truetype'), + url(\\"./font with spaces.eot\\") format(\\"embedded-opentype\\"), + url('./font.svg#svgFontName') format('svg'), + url('./font.woff2?foo=bar') format('woff2'), + url(\\"./font.eot?#iefix\\") format('embedded-opentype'), + url(\\"./font with spaces.eot?#iefix\\") format('embedded-opentype'); +} + +@media (min-width: 500px) { + div { + a21: url(\\"./img.png\\"); + } +} + +div { + a22: \\"do not use url(path)\\"; +} + +div { + a23: 'do not \\"use\\" url(path)'; +} + +div { + a24: -webkit-image-set(url('./img1x.png') 1x, url('./img2x.png') 2x) +} + +div { + a25: image-set(url('./img1x.png') 1x, url('./img2x.png') 2x) +} + +div { + a26: green url() xyz; +} + +div { + a27: green url('') xyz; +} + +div { + a28: green url(\\"\\") xyz; +} + +div { + a29: green url(' ') xyz; +} + +div { + a30: green url( + ) xyz; +} + +div { + a40: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a41: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a42: url(\\"./img.png?foo\\"); +} + +div { + a43: url(\\"./img.png?foo=bar\\"); +} + +div { + a44: url(\\"./img.png?foo=bar#hash\\"); +} + +div { + a45: url(\\"./img.png?foo=bar#hash\\"); +} + +div { + a46: url(\\"./img.png?\\"); +} + +div { + a47: url('./img.png') url(\\"data:image/svg+xml;charset=utf-8,\\") url('./img.png'); +} + +div { + a48: __URL__(); +} + +div { + a49: url('./nested/../nested/img-simple.png'); +} + +div { + a50: url('/nested/img-simple.png'); +} + +div { + a51: url('../url/nested/img-simple.png'); +} + +div { + a52: url(./nested/img.png); +} + +div { + a53: url(nested/img.png); +} + +@font-face { + a54: url(\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\"); +} + +div { + a55: -webkit-image-set(); + a56: -webkit-image-set(''); + a56: image-set(); + a58: image-set(''); + a59: image-set(\\"\\"); + a60: image-set(\\"\\" 1x); + a61: image-set(url()); + a62: image-set( + url() + ); + a63: image-set(URL()); + a64: image-set(url('')); + a65: image-set(url(\\"\\")); + a66: image-set(url('') 1x); + a67: image-set(1x); + a68: image-set( + 1x + ); + a69: image-set(calc(1rem + 1px) 1x); + + a70: -webkit-image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x); + a71: image-set(\\"./img1x.png\\" 1x); + a72: image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x); + a73: image-set(\\"./img img.png\\" 1x, \\"./img img.png\\" 2x); + a74: image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x), + image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x); + a75: image-set( + \\"./img1x.png\\" 1x, + \\"./img2x.png\\" 2x, + \\"./img3x.png\\" 600dpi + ); + a76: image-set(\\"./img1x.png?foo=bar\\" 1x); + a77: image-set(\\"./img1x.png#hash\\" 1x); + a78: image-set(\\"./img1x.png?#iefix\\" 1x); + + a79: -webkit-image-set(url(\\"./img1x.png\\") 1x, url(\\"./img2x.png\\") 2x); + a80: -webkit-image-set(url(\\"./img1x.png\\") 1x); + a81: -webkit-image-set( + url(\\"./img1x.png\\") 1x + ); + a82: image-set(url(./img1x.png) 1x); + a83: image-set( + url(./img1x.png) 1x + ); + a84: image-set(url(\\"./img1x.png\\") 1x, url(\\"./img2x.png\\") 2x); + a85: image-set( + url(./img1x.png) 1x, + url(./img2x.png) 2x, + url(./img3x.png) 600dpi + ); + a86: image-set(url(\\"./img img.png\\") 1x, url(\\"./img img.png\\") 2x); + + a87: image-set(url(\\"./img1x.png\\") 1x, \\"./img2x.png\\" 2x); +} + +div { + a88: url(./img\\\\img.png); + a89: url(./img\\\\'img.png); + a90: url(./img\\\\'\\\\'\\\\'img.png); + a91: url(./img\\\\(img.png); + a92: url(./img\\\\)img.png); + a93: url(./img\\\\ img.png); + a94: url(./img\\\\'\\\\(\\\\)\\\\ img.png); + + a95: image-set( + url(./img\\\\img.png) 1x, + url(./img\\\\'\\\\'\\\\'img.png) 2x, + url(./img\\\\'img.png) 3x, + url(./img\\\\(img.png) 4x, + url(./img\\\\)img.png) 5x, + url(./img\\\\ img.png) 6x, + url(./img\\\\'\\\\(\\\\)\\\\ img.png) 7x + ); +} + +div { + a96: url(\\"./img'''img.png\\"); + a97: url(\\"./img'() img.png\\"); + a98: url(\\"./img'img.png\\"); + a99: url(\\"./img(img.png\\"); + a100: url(\\"./img)img.png\\"); + a101: url('./img img.png'); + a102: url(\\"./img img.png\\"); +} + +div { + a103: url('./img\\\\ +(img.png'); + a104: url('./img\\\\ +(img.png'); + a105: url('./img\\\\ +(img.png'); + a106: url('./img\\\\ +\\\\ +\\\\ +\\\\ +(img.png'); +} + +div { + a107: url(\\"./img%27%27%27img.png\\"); + a108: url(\\"./img%27%28%29%20img.png\\"); + a109: url(\\"./img%27img.png\\"); + a110: url(\\"./img%28img.png\\"); + a111: url(\\"./img%29img.png\\"); + a112: url(\\"./img%20img.png\\"); + a113: url(./img%27%27%27img.png); + a114: url(./img%27%28%29%20img.png); + a115: url(./img%27img.png); + a116: url(./img%28img.png); + a117: url(./img%29img.png); + a118: url(./img%20img.png); +} + +div { + a119: url('img.png'); +} + +div { + a120: url(\\"./img\\\\'\\\\'\\\\'img.png\\"); + a121: url(\\"./img\\\\'\\\\(\\\\)\\\\ img.png\\"); + a122: url(\\"./img\\\\'img.png\\"); + a123: url(\\"./img\\\\(img.png\\"); + a124: url(\\"./img\\\\)img.png\\"); + a125: url(\\"./img\\\\ img.png\\"); + a126: url(\\"./\\\\69\\\\6D\\\\67.png\\"); + a127: url(./\\\\69\\\\6D\\\\67.png); + a128: url(\\"./img\\\\27img.png\\"); + a129: url(\\"./img\\\\'\\\\28%29 img.png\\"); + a130: url(./img\\\\'\\\\28%29\\\\ img.png); +} + +div { + a131: url('./img.png'); + a132: url('./img.png'); + + a133: url('./img.png?foo=bar'); + a134: url('./img.png?foo=bar'); + + a135: url('./img.png?foo=bar#hash'); + a136: url('./img.png?foo=bar#hash'); + + a137: url('./img.png?foo=bar'); + a138: url('./img.png?bar=foo'); + + a139: url('./img.png?foo=bar#foo'); + a140: url('./img.png?bar=foo#bar'); + + a141: url('./img.png?foo=1&bar=2'); + a142: url('./img.png?foo=2&bar=1'); +} + +div { + a143: url(\\"data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20width%3D%22191px%22%20height%3D%22191px%22%20viewBox%3D%220%200%20191%20191%22%20enable-background%3D%22new%200%200%20191%20191%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M95.5%2C0C42.8%2C0%2C0%2C42.8%2C0%2C95.5S42.8%2C191%2C95.5%2C191S191%2C148.2%2C191%2C95.5S148.2%2C0%2C95.5%2C0z%20M95.5%2C187.6%0A%09c-50.848%2C0-92.1-41.25-92.1-92.1c0-50.848%2C41.252-92.1%2C92.1-92.1c50.85%2C0%2C92.1%2C41.252%2C92.1%2C92.1%0A%09C187.6%2C146.35%2C146.35%2C187.6%2C95.5%2C187.6z%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M92.9%2C10v8.6H91v-6.5c-0.1%2C0.1-0.2%2C0.2-0.4%2C0.3c-0.2%2C0.1-0.3%2C0.2-0.4%2C0.2c-0.1%2C0-0.3%2C0.1-0.5%2C0.2%0A%09%09c-0.2%2C0.1-0.3%2C0.1-0.5%2C0.1v-1.6c0.5-0.1%2C0.9-0.3%2C1.4-0.5c0.5-0.2%2C0.8-0.5%2C1.2-0.7h1.1V10z%22%2F%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M97.1%2C17.1h3.602v1.5h-5.6V18c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.6%2C0.5-0.9c0.2-0.3%2C0.5-0.5%2C0.7-0.7%0A%09%09c0.2-0.2%2C0.5-0.4%2C0.7-0.6c0.199-0.2%2C0.5-0.3%2C0.6-0.5c0.102-0.2%2C0.301-0.3%2C0.5-0.5c0.2-0.2%2C0.2-0.3%2C0.301-0.5%0A%09%09c0.101-0.2%2C0.101-0.3%2C0.101-0.5c0-0.4-0.101-0.6-0.3-0.8c-0.2-0.2-0.4-0.3-0.801-0.3c-0.699%2C0-1.399%2C0.3-2.101%2C0.9v-1.6%0A%09%09c0.7-0.5%2C1.5-0.7%2C2.5-0.7c0.399%2C0%2C0.8%2C0.1%2C1.101%2C0.2c0.301%2C0.1%2C0.601%2C0.3%2C0.899%2C0.5c0.3%2C0.2%2C0.399%2C0.5%2C0.5%2C0.8%0A%09%09c0.101%2C0.3%2C0.2%2C0.6%2C0.2%2C1s-0.102%2C0.7-0.2%2C1c-0.099%2C0.3-0.3%2C0.6-0.5%2C0.8c-0.2%2C0.2-0.399%2C0.5-0.7%2C0.7c-0.3%2C0.2-0.5%2C0.4-0.8%2C0.6%0A%09%09c-0.2%2C0.1-0.399%2C0.3-0.5%2C0.4s-0.3%2C0.3-0.5%2C0.4s-0.2%2C0.3-0.3%2C0.4C97.1%2C17%2C97.1%2C17%2C97.1%2C17.1z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M15%2C95.4c0%2C0.7-0.1%2C1.4-0.2%2C2c-0.1%2C0.6-0.4%2C1.1-0.7%2C1.5C13.8%2C99.3%2C13.4%2C99.6%2C12.9%2C99.8s-1%2C0.3-1.5%2C0.3%0A%09%09c-0.7%2C0-1.3-0.1-1.8-0.3v-1.5c0.4%2C0.3%2C1%2C0.4%2C1.6%2C0.4c0.6%2C0%2C1.1-0.2%2C1.5-0.7c0.4-0.5%2C0.5-1.1%2C0.5-1.9l0%2C0%0A%09%09C12.8%2C96.7%2C12.3%2C96.9%2C11.5%2C96.9c-0.3%2C0-0.7-0.102-1-0.2c-0.3-0.101-0.5-0.3-0.8-0.5c-0.3-0.2-0.4-0.5-0.5-0.8%0A%09%09c-0.1-0.3-0.2-0.7-0.2-1c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.7%2C0.6-0.9c0.3-0.2%2C0.6-0.5%2C0.9-0.6c0.3-0.1%2C0.8-0.2%2C1.2-0.2%0A%09%09c0.5%2C0%2C0.9%2C0.1%2C1.2%2C0.3c0.3%2C0.2%2C0.7%2C0.4%2C0.9%2C0.8s0.5%2C0.7%2C0.6%2C1.2S15%2C94.8%2C15%2C95.4z%20M13.1%2C94.4c0-0.2%2C0-0.4-0.1-0.6%0A%09%09c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2%2C0-0.3%2C0-0.4%2C0.1s-0.3%2C0.2-0.3%2C0.3%0A%09%09c0%2C0.1-0.2%2C0.3-0.2%2C0.4c0%2C0.1-0.1%2C0.4-0.1%2C0.6c0%2C0.2%2C0%2C0.4%2C0.1%2C0.6c0.1%2C0.2%2C0.1%2C0.3%2C0.2%2C0.4c0.1%2C0.1%2C0.2%2C0.2%2C0.4%2C0.3%0A%09%09c0.2%2C0.1%2C0.3%2C0.1%2C0.5%2C0.1c0.2%2C0%2C0.3%2C0%2C0.4-0.1s0.2-0.2%2C0.3-0.3c0.1-0.1%2C0.2-0.2%2C0.2-0.4C13%2C94.7%2C13.1%2C94.6%2C13.1%2C94.4z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M176%2C99.7V98.1c0.6%2C0.4%2C1.2%2C0.602%2C2%2C0.602c0.5%2C0%2C0.8-0.102%2C1.1-0.301c0.301-0.199%2C0.4-0.5%2C0.4-0.801%0A%09%09c0-0.398-0.2-0.699-0.5-0.898c-0.3-0.2-0.8-0.301-1.3-0.301h-0.802V95h0.701c1.101%2C0%2C1.601-0.4%2C1.601-1.1c0-0.7-0.4-1-1.302-1%0A%09%09c-0.6%2C0-1.1%2C0.2-1.6%2C0.5v-1.5c0.6-0.3%2C1.301-0.4%2C2.1-0.4c0.9%2C0%2C1.5%2C0.2%2C2%2C0.6s0.701%2C0.9%2C0.701%2C1.5c0%2C1.1-0.601%2C1.8-1.701%2C2.1l0%2C0%0A%09%09c0.602%2C0.1%2C1.102%2C0.3%2C1.4%2C0.6s0.5%2C0.8%2C0.5%2C1.3c0%2C0.801-0.3%2C1.4-0.9%2C1.9c-0.6%2C0.5-1.398%2C0.7-2.398%2C0.7%0A%09%09C177.2%2C100.1%2C176.5%2C100%2C176%2C99.7z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M98.5%2C179.102c0%2C0.398-0.1%2C0.799-0.2%2C1.199C98.2%2C180.7%2C98%2C181%2C97.7%2C181.2s-0.601%2C0.5-0.9%2C0.601%0A%09%09c-0.3%2C0.1-0.7%2C0.199-1.2%2C0.199c-0.5%2C0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.399-0.9-0.8c-0.2-0.4-0.5-0.7-0.6-1.2%0A%09%09c-0.1-0.5-0.2-1-0.2-1.601c0-0.699%2C0.1-1.399%2C0.3-2c0.2-0.601%2C0.4-1.101%2C0.8-1.5c0.4-0.399%2C0.7-0.699%2C1.2-1c0.5-0.3%2C1-0.3%2C1.6-0.3%0A%09%09c0.6%2C0%2C1.2%2C0.101%2C1.5%2C0.199v1.5c-0.4-0.199-0.9-0.399-1.4-0.399c-0.3%2C0-0.6%2C0.101-0.8%2C0.2c-0.2%2C0.101-0.5%2C0.3-0.7%2C0.5%0A%09%09c-0.2%2C0.199-0.3%2C0.5-0.4%2C0.8c-0.1%2C0.301-0.2%2C0.7-0.2%2C1.101l0%2C0c0.4-0.601%2C1-0.8%2C1.8-0.8c0.3%2C0%2C0.7%2C0.1%2C0.9%2C0.199%0A%09%09c0.2%2C0.101%2C0.5%2C0.301%2C0.7%2C0.5c0.199%2C0.2%2C0.398%2C0.5%2C0.5%2C0.801C98.5%2C178.2%2C98.5%2C178.7%2C98.5%2C179.102z%20M96.7%2C179.2%0A%09%09c0-0.899-0.4-1.399-1.1-1.399c-0.2%2C0-0.3%2C0-0.5%2C0.1c-0.2%2C0.101-0.3%2C0.201-0.4%2C0.301c-0.1%2C0.101-0.2%2C0.199-0.2%2C0.4%0A%09%09c0%2C0.199-0.1%2C0.299-0.1%2C0.5c0%2C0.199%2C0%2C0.398%2C0.1%2C0.6s0.1%2C0.3%2C0.2%2C0.5c0.1%2C0.199%2C0.2%2C0.199%2C0.4%2C0.3c0.2%2C0.101%2C0.3%2C0.101%2C0.5%2C0.101%0A%09%09c0.2%2C0%2C0.3%2C0%2C0.5-0.101c0.2-0.101%2C0.301-0.199%2C0.301-0.3c0-0.1%2C0.199-0.301%2C0.199-0.399C96.6%2C179.7%2C96.7%2C179.4%2C96.7%2C179.2z%22%2F%3E%0A%3C%2Fg%3E%0A%3Ccircle%20fill%3D%22%23636363%22%20cx%3D%2295%22%20cy%3D%2295%22%20r%3D%227%22%2F%3E%0A%3C%2Fsvg%3E%0A\\") 50% 50%/191px no-repeat; +} + +div { + a144: url('%2E/img.png'); +} + +div { + a145: url(\\"/img.png\\"); +} + +div { + /* TODO fix me */ + /*a146: url('./img.png', 'foo', './img.png', url('./img.png'));*/ + /*a147: image-set(url('./img.png', 'foo', './img.png', url('./img.png')) 1x, url(\\"./img2x.png\\") 2x);*/ +} + +div { + a148: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a149: url('DATA:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a150: url('DATA:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a151: url('data:image/svg+xml;utf8,'); + a152: url('DATA:image/svg+xml;utf8,'); +} + +div { + a152: url(\\"img.png\\"); +} + +div { + a153: url(\\"nested/img.png\\"); +} + +div { + a154: url(\\"nested/other.png\\"); +} + +div { + a155: url(\\"package/img.png\\"); +} + +div { + a156: url(\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\\"); +} + +div { + a157: url('data:image/svg+xml;utf8,'); +} + +div { + a158: src(\\"http://www.example.com/pinkish.gif\\"); + --foo-bar: \\"http://www.example.com/pinkish.gif\\"; + a159: src(var(--foo)); +} + +div { + a160: url(\\"img.png\\" param(--color var(--primary-color))); + a161: src(\\"img.png\\" param(--color var(--primary-color))); +} + +div { + a162: url('img\\\\ + i\\\\ +mg.png\\\\ + '); + +} + +div { + a163: url(\\" img.png \\"); +} + + +div { + a164: url( img.png bug); +} + +div { + a165: url(img\\\\n.png); +} + +div { + a166: url(' data:image/svg+xml;utf8, '); +} + +div { + a167: url(http://example.com/image.jpg); + a168: url(http://example.com/image.jpg); +} + +div { + a169: url('data:,'); + a170: url('data:,'); +} + +div { + a171: image(ltr 'img.png#xywh=0,0,16,16', red); + a172: cross-fade(20% url(img.png), url(img.png)) +} + +div { + a172: image-set( + linear-gradient(blue, white) 1x, + linear-gradient(blue, green) 2x + ); + a173: image-set( + url(\\"img.png\\") type(\\"image/png\\"), + url(\\"img.png\\") type(\\"image/png\\") + ); + a174: image-set( + \\"img.png\\" 1x, + \\"img.png\\" 2x + ); + a175: image-set( + url(\\"img.png\\") 1x, + url(\\"img.png\\") 2x, + url(\\"img.png\\") 3x + ); + a176: image-set( + \\"img.png\\" type(\\"image/png\\"), + \\"img.png\\" type(\\"image/png\\") + ) \\"img.png\\"; + a177: image-set( + \\"img.png\\" 1x type(\\"image/png\\"), + \\"img.png\\" 2x type(\\"image/png\\") + ); + a178: image-set( + \\"img.png\\" type(\\"image/png\\") 1x, + \\"img.png\\" type(\\"image/png\\") 2x + ); + a179: -webkit-image-set( + \\"img.png\\" 1x + ); + a180: -webkit-image-set( + url(\\"img.png\\" var(--foo, \\"test.png\\")) 1x + ); +} + +div { + a181: src(\\"img.png\\"); + a181: src( \\"img.png\\" ); + a182: src('img.png'); + a183: src('img.png' var(--foo, \\"test.png\\")); + a184: src(var(--foo, \\"test.png\\")); + a185: src(\\" img.png \\"); +} + +div { + a186: image-set(\\"img.png\\"1x,\\"img.png\\"2x,\\"img.png\\"3x); + a187: image-set(\\"img.png\\"1x,url(\\"img.png\\")2x,\\"img.png\\"3x); + a188: image-set(\\"img.png\\"1x,\\"img.png\\"2x,url(\\"img.png\\")3x); + a189: image-set(url(\\"img.png\\")1x,\\"img.png\\"2x,\\"img.png\\"3x); + a190: image-set(\\"img.png\\"1x); + a191: image-set(\\"img.png\\"1x/* test*/,/* test*/\\"img.png\\"2x); +} + +@supports (background-image: image-set(\\"unknown.png\\"1x,\\"unknown.png\\"2x,\\"unknown.png\\"3x)) { + div { + a192: url(\\"img.png\\"); + a193: image-set(\\"img.png\\"1x); + } +} + +@supports (background-image: url(\\"unknown.png\\" param(--test))) { + div { + a194: url(\\"img.png\\"); + } +} + +@supports (background-image: url(\\"unknown.png\\")) { + div { + a195: url(\\"img.png\\"); + } +} + +@supports (display: grid) { + @media (min-width: 100px) { + @layer special { + div { + a196: url(\\"img.png\\"); + } + } + } +} + +div { + a197: \\\\u\\\\r\\\\l(\\"img.png\\"); + a198: \\\\image-\\\\set(\\"img.png\\"1x,\\"img.png\\"2x,\\"img.png\\"3x); + a199: \\\\-webk\\\\it-image-set(\\"img.png\\"1x); + a200:-webkit-image-set(\\"img.png\\"1x); +} + +div { + a201: src(\\"http://www.example.com/pinkish.gif\\"); + --foo: \\"http://www.example.com/pinkish.gif\\"; + a202: src(var(--foo)); + a203: src(\\"./img.png\\"); + a204: src(\\"img.png\\"); +} + +div { + a205: url(alias-url.png); + a206: url(alias-url-1.png); + a208: url(external-url.png); + a208: url(external-url-2.png); + a209: url(unresolved.png); + a210: url(ignore.png); + a211: url(\\"schema:test\\"); +} + +.filtered-element { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(\\"./filters.svg#myFilter\\"); /* Applying the SVG filter */ +} + +.filtered-element-old-url { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(./filters.svg#myFilter); /* Applying the SVG filter */ +} + + + +", +] +`; diff --git a/test/configCases/css/url/__snapshots__/ConfigTest.snap b/test/configCases/css/url/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..3a9ce74bdd1 --- /dev/null +++ b/test/configCases/css/url/__snapshots__/ConfigTest.snap @@ -0,0 +1,1310 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css url exported tests should work with URLs in CSS 1`] = ` +Array [ + "/*!************************!*\\\\ + !*** external \\"#test\\" ***! + \\\\************************/ +@import url(\\"#test\\"); +/*!************************!*\\\\ + !*** css ./nested.css ***! + \\\\************************/ + +.nested { + background: url(img.09a1a1112c577c279435.png); +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +div { + a: url(img.09a1a1112c577c279435.png); +} + +div { + b: url(img.09a1a1112c577c279435.png); +} + +div { + c: url(img.09a1a1112c577c279435.png); +} + +div { + d: url(img.09a1a1112c577c279435.png#hash); +} + +div { + e: url( + img.09a1a1112c577c279435.png + ); +} + +div { + f: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + g: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + h: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + i: green url(img.09a1a1112c577c279435.png) url(img.09a1a1112c577c279435.png) xyz; +} + +div { + j: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + k: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + l: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + m: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + n: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + --foo: url(img.09a1a1112c577c279435.png); +} + +div { + a1: url(img.09a1a1112c577c279435.png); +} + +div { + a2: url(img.09a1a1112c577c279435.png); +} + +div { + a3: url(img.09a1a1112c577c279435.png); +} + +div { + a4: url(img.09a1a1112c577c279435.png#hash); +} + +div { + a5: url( + img.09a1a1112c577c279435.png + ); +} + +div { + a6: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + a7: green url( img.09a1a1112c577c279435.png ) xyz; +} + +div { + a8: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + a9: green url(img.09a1a1112c577c279435.png) url(other-img.09a1a1112c577c279435.png) xyz; +} + +div { + a10: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + a11: green url( img\\\\ img.09a1a1112c577c279435.png ) xyz; +} + +div { + a12: green url(img.09a1a1112c577c279435.png) xyz; +} + +div { + a13: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz; +} + +div { + a14: url(\\"data:image/svg+xml;charset=utf-8,\\"); +} + +div { + a15: url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E); +} + +div { + a16: url('data:image/svg+xml;charset=utf-8,#filter'); +} + +div { + a17: url(\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter\\"); +} + +div { + a18: url(#highlight); +} + +div { + a19: url(#line-marker); +} + +@font-face { + a20: url(font.31d6cfe0d16ae931b73c.woff) format('woff'), + url(font.31d6cfe0d16ae931b73c.woff2) format('woff2'), + url(font.31d6cfe0d16ae931b73c.eot) format('eot'), + url(font.31d6cfe0d16ae931b73c.ttf) format('truetype'), + url(\\"font with spaces.31d6cfe0d16ae931b73c.eot\\") format(\\"embedded-opentype\\"), + url(font.31d6cfe0d16ae931b73c.svg#svgFontName) format('svg'), + url(font.31d6cfe0d16ae931b73c.woff2?foo=bar) format('woff2'), + url(font.31d6cfe0d16ae931b73c.eot?#iefix) format('embedded-opentype'), + url(\\"font with spaces.31d6cfe0d16ae931b73c.eot?#iefix\\") format('embedded-opentype'); +} + +@media (min-width: 500px) { + div { + a21: url(img.09a1a1112c577c279435.png); + } +} + +div { + a22: \\"do not use url(path)\\"; +} + +div { + a23: 'do not \\"use\\" url(path)'; +} + +div { + a24: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) +} + +div { + a25: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x) +} + +div { + a26: green url() xyz; +} + +div { + a27: green url('') xyz; +} + +div { + a28: green url(\\"\\") xyz; +} + +div { + a29: green url(' ') xyz; +} + +div { + a30: green url( + ) xyz; +} + +div { + a40: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a41: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a42: url(img.09a1a1112c577c279435.png?foo); +} + +div { + a43: url(img.09a1a1112c577c279435.png?foo=bar); +} + +div { + a44: url(img.09a1a1112c577c279435.png?foo=bar#hash); +} + +div { + a45: url(img.09a1a1112c577c279435.png?foo=bar#hash); +} + +div { + a46: url(img.09a1a1112c577c279435.png?); +} + +div { + a47: url(img.09a1a1112c577c279435.png) url(\\"data:image/svg+xml;charset=utf-8,\\") url(img.09a1a1112c577c279435.png); +} + +div { + a48: __URL__(); +} + +div { + a49: url(img-simple.09a1a1112c577c279435.png); +} + +div { + a50: url(img-simple.09a1a1112c577c279435.png); +} + +div { + a51: url(img-simple.09a1a1112c577c279435.png); +} + +div { + a52: url(img.09a1a1112c577c279435.png); +} + +div { + a53: url(img.09a1a1112c577c279435.png); +} + +@font-face { + a54: url(//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot); +} + +div { + a55: -webkit-image-set(); + a56: -webkit-image-set(''); + a56: image-set(); + a58: image-set(''); + a59: image-set(\\"\\"); + a60: image-set(\\"\\" 1x); + a61: image-set(url()); + a62: image-set( + url() + ); + a63: image-set(URL()); + a64: image-set(url('')); + a65: image-set(url(\\"\\")); + a66: image-set(url('') 1x); + a67: image-set(1x); + a68: image-set( + 1x + ); + a69: image-set(calc(1rem + 1px) 1x); + + a70: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a71: image-set(url(img1x.09a1a1112c577c279435.png) 1x); + a72: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a73: image-set(url(img\\\\ img.09a1a1112c577c279435.png) 1x, url(img\\\\ img.09a1a1112c577c279435.png) 2x); + a74: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x), + image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a75: image-set( + url(img1x.09a1a1112c577c279435.png) 1x, + url(img2x.09a1a1112c577c279435.png) 2x, + url(img3x.09a1a1112c577c279435.png) 600dpi + ); + a76: image-set(url(img1x.09a1a1112c577c279435.png?foo=bar) 1x); + a77: image-set(url(img1x.09a1a1112c577c279435.png#hash) 1x); + a78: image-set(url(img1x.09a1a1112c577c279435.png?#iefix) 1x); + + a79: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a80: -webkit-image-set(url(img1x.09a1a1112c577c279435.png) 1x); + a81: -webkit-image-set( + url(img1x.09a1a1112c577c279435.png) 1x + ); + a82: image-set(url(img1x.09a1a1112c577c279435.png) 1x); + a83: image-set( + url(img1x.09a1a1112c577c279435.png) 1x + ); + a84: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); + a85: image-set( + url(img1x.09a1a1112c577c279435.png) 1x, + url(img2x.09a1a1112c577c279435.png) 2x, + url(img3x.09a1a1112c577c279435.png) 600dpi + ); + a86: image-set(url(img\\\\ img.09a1a1112c577c279435.png) 1x, url(img\\\\ img.09a1a1112c577c279435.png) 2x); + + a87: image-set(url(img1x.09a1a1112c577c279435.png) 1x, url(img2x.09a1a1112c577c279435.png) 2x); +} + +div { + a88: url(imgimg.09a1a1112c577c279435.png); + a89: url(img\\\\'img.09a1a1112c577c279435.png); + a90: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a91: url(img\\\\(img.09a1a1112c577c279435.png); + a92: url(img\\\\)img.09a1a1112c577c279435.png); + a93: url(img\\\\ img.09a1a1112c577c279435.png); + a94: url(\\"img'() img.09a1a1112c577c279435.png\\"); + + a95: image-set( + url(imgimg.09a1a1112c577c279435.png) 1x, + url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png) 2x, + url(img\\\\'img.09a1a1112c577c279435.png) 3x, + url(img\\\\(img.09a1a1112c577c279435.png) 4x, + url(img\\\\)img.09a1a1112c577c279435.png) 5x, + url(img\\\\ img.09a1a1112c577c279435.png) 6x, + url(\\"img'() img.09a1a1112c577c279435.png\\") 7x + ); +} + +div { + a96: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a97: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a98: url(img\\\\'img.09a1a1112c577c279435.png); + a99: url(img\\\\(img.09a1a1112c577c279435.png); + a100: url(img\\\\)img.09a1a1112c577c279435.png); + a101: url(img\\\\ img.09a1a1112c577c279435.png); + a102: url(img\\\\ img.09a1a1112c577c279435.png); +} + +div { + a103: url(img\\\\(img.09a1a1112c577c279435.png); + a104: url(img\\\\(img.09a1a1112c577c279435.png); + a105: url(img\\\\(img.09a1a1112c577c279435.png); + a106: url(img\\\\(img.09a1a1112c577c279435.png); +} + +div { + a107: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a108: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a109: url(img\\\\'img.09a1a1112c577c279435.png); + a110: url(img\\\\(img.09a1a1112c577c279435.png); + a111: url(img\\\\)img.09a1a1112c577c279435.png); + a112: url(img\\\\ img.09a1a1112c577c279435.png); + a113: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a114: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a115: url(img\\\\'img.09a1a1112c577c279435.png); + a116: url(img\\\\(img.09a1a1112c577c279435.png); + a117: url(img\\\\)img.09a1a1112c577c279435.png); + a118: url(img\\\\ img.09a1a1112c577c279435.png); +} + +div { + a119: url(img.09a1a1112c577c279435.png); +} + +div { + a120: url(img\\\\'\\\\'\\\\'img.09a1a1112c577c279435.png); + a121: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a122: url(img\\\\'img.09a1a1112c577c279435.png); + a123: url(img\\\\(img.09a1a1112c577c279435.png); + a124: url(img\\\\)img.09a1a1112c577c279435.png); + a125: url(img\\\\ img.09a1a1112c577c279435.png); + a126: url(img.09a1a1112c577c279435.png); + a127: url(img.09a1a1112c577c279435.png); + a128: url(img\\\\'img.09a1a1112c577c279435.png); + a129: url(\\"img'() img.09a1a1112c577c279435.png\\"); + a130: url(\\"img'() img.09a1a1112c577c279435.png\\"); +} + +div { + a131: url(img.09a1a1112c577c279435.png); + a132: url(img.09a1a1112c577c279435.png); + + a133: url(img.09a1a1112c577c279435.png?foo=bar); + a134: url(img.09a1a1112c577c279435.png?foo=bar); + + a135: url(img.09a1a1112c577c279435.png?foo=bar#hash); + a136: url(img.09a1a1112c577c279435.png?foo=bar#hash); + + a137: url(img.09a1a1112c577c279435.png?foo=bar); + a138: url(img.09a1a1112c577c279435.png?bar=foo); + + a139: url(img.09a1a1112c577c279435.png?foo=bar#foo); + a140: url(img.09a1a1112c577c279435.png?bar=foo#bar); + + a141: url(img.09a1a1112c577c279435.png?foo=1&bar=2); + a142: url(img.09a1a1112c577c279435.png?foo=2&bar=1); +} + +div { + a143: url(data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20width%3D%22191px%22%20height%3D%22191px%22%20viewBox%3D%220%200%20191%20191%22%20enable-background%3D%22new%200%200%20191%20191%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M95.5%2C0C42.8%2C0%2C0%2C42.8%2C0%2C95.5S42.8%2C191%2C95.5%2C191S191%2C148.2%2C191%2C95.5S148.2%2C0%2C95.5%2C0z%20M95.5%2C187.6%0A%09c-50.848%2C0-92.1-41.25-92.1-92.1c0-50.848%2C41.252-92.1%2C92.1-92.1c50.85%2C0%2C92.1%2C41.252%2C92.1%2C92.1%0A%09C187.6%2C146.35%2C146.35%2C187.6%2C95.5%2C187.6z%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M92.9%2C10v8.6H91v-6.5c-0.1%2C0.1-0.2%2C0.2-0.4%2C0.3c-0.2%2C0.1-0.3%2C0.2-0.4%2C0.2c-0.1%2C0-0.3%2C0.1-0.5%2C0.2%0A%09%09c-0.2%2C0.1-0.3%2C0.1-0.5%2C0.1v-1.6c0.5-0.1%2C0.9-0.3%2C1.4-0.5c0.5-0.2%2C0.8-0.5%2C1.2-0.7h1.1V10z%22%2F%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M97.1%2C17.1h3.602v1.5h-5.6V18c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.6%2C0.5-0.9c0.2-0.3%2C0.5-0.5%2C0.7-0.7%0A%09%09c0.2-0.2%2C0.5-0.4%2C0.7-0.6c0.199-0.2%2C0.5-0.3%2C0.6-0.5c0.102-0.2%2C0.301-0.3%2C0.5-0.5c0.2-0.2%2C0.2-0.3%2C0.301-0.5%0A%09%09c0.101-0.2%2C0.101-0.3%2C0.101-0.5c0-0.4-0.101-0.6-0.3-0.8c-0.2-0.2-0.4-0.3-0.801-0.3c-0.699%2C0-1.399%2C0.3-2.101%2C0.9v-1.6%0A%09%09c0.7-0.5%2C1.5-0.7%2C2.5-0.7c0.399%2C0%2C0.8%2C0.1%2C1.101%2C0.2c0.301%2C0.1%2C0.601%2C0.3%2C0.899%2C0.5c0.3%2C0.2%2C0.399%2C0.5%2C0.5%2C0.8%0A%09%09c0.101%2C0.3%2C0.2%2C0.6%2C0.2%2C1s-0.102%2C0.7-0.2%2C1c-0.099%2C0.3-0.3%2C0.6-0.5%2C0.8c-0.2%2C0.2-0.399%2C0.5-0.7%2C0.7c-0.3%2C0.2-0.5%2C0.4-0.8%2C0.6%0A%09%09c-0.2%2C0.1-0.399%2C0.3-0.5%2C0.4s-0.3%2C0.3-0.5%2C0.4s-0.2%2C0.3-0.3%2C0.4C97.1%2C17%2C97.1%2C17%2C97.1%2C17.1z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M15%2C95.4c0%2C0.7-0.1%2C1.4-0.2%2C2c-0.1%2C0.6-0.4%2C1.1-0.7%2C1.5C13.8%2C99.3%2C13.4%2C99.6%2C12.9%2C99.8s-1%2C0.3-1.5%2C0.3%0A%09%09c-0.7%2C0-1.3-0.1-1.8-0.3v-1.5c0.4%2C0.3%2C1%2C0.4%2C1.6%2C0.4c0.6%2C0%2C1.1-0.2%2C1.5-0.7c0.4-0.5%2C0.5-1.1%2C0.5-1.9l0%2C0%0A%09%09C12.8%2C96.7%2C12.3%2C96.9%2C11.5%2C96.9c-0.3%2C0-0.7-0.102-1-0.2c-0.3-0.101-0.5-0.3-0.8-0.5c-0.3-0.2-0.4-0.5-0.5-0.8%0A%09%09c-0.1-0.3-0.2-0.7-0.2-1c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.7%2C0.6-0.9c0.3-0.2%2C0.6-0.5%2C0.9-0.6c0.3-0.1%2C0.8-0.2%2C1.2-0.2%0A%09%09c0.5%2C0%2C0.9%2C0.1%2C1.2%2C0.3c0.3%2C0.2%2C0.7%2C0.4%2C0.9%2C0.8s0.5%2C0.7%2C0.6%2C1.2S15%2C94.8%2C15%2C95.4z%20M13.1%2C94.4c0-0.2%2C0-0.4-0.1-0.6%0A%09%09c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2%2C0-0.3%2C0-0.4%2C0.1s-0.3%2C0.2-0.3%2C0.3%0A%09%09c0%2C0.1-0.2%2C0.3-0.2%2C0.4c0%2C0.1-0.1%2C0.4-0.1%2C0.6c0%2C0.2%2C0%2C0.4%2C0.1%2C0.6c0.1%2C0.2%2C0.1%2C0.3%2C0.2%2C0.4c0.1%2C0.1%2C0.2%2C0.2%2C0.4%2C0.3%0A%09%09c0.2%2C0.1%2C0.3%2C0.1%2C0.5%2C0.1c0.2%2C0%2C0.3%2C0%2C0.4-0.1s0.2-0.2%2C0.3-0.3c0.1-0.1%2C0.2-0.2%2C0.2-0.4C13%2C94.7%2C13.1%2C94.6%2C13.1%2C94.4z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M176%2C99.7V98.1c0.6%2C0.4%2C1.2%2C0.602%2C2%2C0.602c0.5%2C0%2C0.8-0.102%2C1.1-0.301c0.301-0.199%2C0.4-0.5%2C0.4-0.801%0A%09%09c0-0.398-0.2-0.699-0.5-0.898c-0.3-0.2-0.8-0.301-1.3-0.301h-0.802V95h0.701c1.101%2C0%2C1.601-0.4%2C1.601-1.1c0-0.7-0.4-1-1.302-1%0A%09%09c-0.6%2C0-1.1%2C0.2-1.6%2C0.5v-1.5c0.6-0.3%2C1.301-0.4%2C2.1-0.4c0.9%2C0%2C1.5%2C0.2%2C2%2C0.6s0.701%2C0.9%2C0.701%2C1.5c0%2C1.1-0.601%2C1.8-1.701%2C2.1l0%2C0%0A%09%09c0.602%2C0.1%2C1.102%2C0.3%2C1.4%2C0.6s0.5%2C0.8%2C0.5%2C1.3c0%2C0.801-0.3%2C1.4-0.9%2C1.9c-0.6%2C0.5-1.398%2C0.7-2.398%2C0.7%0A%09%09C177.2%2C100.1%2C176.5%2C100%2C176%2C99.7z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M98.5%2C179.102c0%2C0.398-0.1%2C0.799-0.2%2C1.199C98.2%2C180.7%2C98%2C181%2C97.7%2C181.2s-0.601%2C0.5-0.9%2C0.601%0A%09%09c-0.3%2C0.1-0.7%2C0.199-1.2%2C0.199c-0.5%2C0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.399-0.9-0.8c-0.2-0.4-0.5-0.7-0.6-1.2%0A%09%09c-0.1-0.5-0.2-1-0.2-1.601c0-0.699%2C0.1-1.399%2C0.3-2c0.2-0.601%2C0.4-1.101%2C0.8-1.5c0.4-0.399%2C0.7-0.699%2C1.2-1c0.5-0.3%2C1-0.3%2C1.6-0.3%0A%09%09c0.6%2C0%2C1.2%2C0.101%2C1.5%2C0.199v1.5c-0.4-0.199-0.9-0.399-1.4-0.399c-0.3%2C0-0.6%2C0.101-0.8%2C0.2c-0.2%2C0.101-0.5%2C0.3-0.7%2C0.5%0A%09%09c-0.2%2C0.199-0.3%2C0.5-0.4%2C0.8c-0.1%2C0.301-0.2%2C0.7-0.2%2C1.101l0%2C0c0.4-0.601%2C1-0.8%2C1.8-0.8c0.3%2C0%2C0.7%2C0.1%2C0.9%2C0.199%0A%09%09c0.2%2C0.101%2C0.5%2C0.301%2C0.7%2C0.5c0.199%2C0.2%2C0.398%2C0.5%2C0.5%2C0.801C98.5%2C178.2%2C98.5%2C178.7%2C98.5%2C179.102z%20M96.7%2C179.2%0A%09%09c0-0.899-0.4-1.399-1.1-1.399c-0.2%2C0-0.3%2C0-0.5%2C0.1c-0.2%2C0.101-0.3%2C0.201-0.4%2C0.301c-0.1%2C0.101-0.2%2C0.199-0.2%2C0.4%0A%09%09c0%2C0.199-0.1%2C0.299-0.1%2C0.5c0%2C0.199%2C0%2C0.398%2C0.1%2C0.6s0.1%2C0.3%2C0.2%2C0.5c0.1%2C0.199%2C0.2%2C0.199%2C0.4%2C0.3c0.2%2C0.101%2C0.3%2C0.101%2C0.5%2C0.101%0A%09%09c0.2%2C0%2C0.3%2C0%2C0.5-0.101c0.2-0.101%2C0.301-0.199%2C0.301-0.3c0-0.1%2C0.199-0.301%2C0.199-0.399C96.6%2C179.7%2C96.7%2C179.4%2C96.7%2C179.2z%22%2F%3E%0A%3C%2Fg%3E%0A%3Ccircle%20fill%3D%22%23636363%22%20cx%3D%2295%22%20cy%3D%2295%22%20r%3D%227%22%2F%3E%0A%3C%2Fsvg%3E%0A) 50% 50%/191px no-repeat; +} + +div { + a144: url(img.09a1a1112c577c279435.png); +} + +div { + a145: url(img.09a1a1112c577c279435.png); +} + +div { + /* TODO fix me */ + /*a146: url('./img.png', 'foo', './img.png', url('./img.png'));*/ + /*a147: image-set(url('./img.png', 'foo', './img.png', url('./img.png')) 1x, url(\\"./img2x.png\\") 2x);*/ +} + +div { + a148: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a149: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a150: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a151: url('data:image/svg+xml;utf8,'); + a152: url('data:image/svg+xml;utf8,'); +} + +div { + a152: url(img.09a1a1112c577c279435.png); +} + +div { + a153: url(img.09a1a1112c577c279435.png); +} + +div { + a154: url(other.09a1a1112c577c279435.png); +} + +div { + a155: url(img.09a1a1112c577c279435.png); +} + +div { + a156: url(\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\\"); +} + +div { + a157: url('data:image/svg+xml;utf8,'); +} + +div { + a158: src(http://www.example.com/pinkish.gif); + --foo-bar: \\"http://www.example.com/pinkish.gif\\"; + a159: src(var(--foo)); +} + +div { + a160: url(img.09a1a1112c577c279435.png param(--color var(--primary-color))); + a161: src(img.09a1a1112c577c279435.png param(--color var(--primary-color))); +} + +div { + a162: url(img\\\\ img.09a1a1112c577c279435.png); + +} + +div { + a163: url(img.09a1a1112c577c279435.png); +} + + +div { + a164: url( img.png bug); +} + +div { + a165: url(imgn.09a1a1112c577c279435.png); +} + +div { + a166: url('data:image/svg+xml;utf8,'); +} + +div { + a167: url(http://example.com/image.jpg); + a168: url(http://example.com/image.jpg); +} + +div { + a169: url(data:,); + a170: url(data:,); +} + +div { + a171: image(ltr 'img.png#xywh=0,0,16,16', red); + a172: cross-fade(20% url(img.09a1a1112c577c279435.png), url(img.09a1a1112c577c279435.png)) +} + +div { + a172: image-set( + linear-gradient(blue, white) 1x, + linear-gradient(blue, green) 2x + ); + a173: image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") + ); + a174: image-set( + url(img.09a1a1112c577c279435.png) 1x, + url(img.09a1a1112c577c279435.png) 2x + ); + a175: image-set( + url(img.09a1a1112c577c279435.png) 1x, + url(img.09a1a1112c577c279435.png) 2x, + url(img.09a1a1112c577c279435.png) 3x + ); + a176: image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") + ) \\"img.png\\"; + a177: image-set( + url(img.09a1a1112c577c279435.png) 1x type(\\"image/png\\"), + url(img.09a1a1112c577c279435.png) 2x type(\\"image/png\\") + ); + a178: image-set( + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") 1x, + url(img.09a1a1112c577c279435.png) type(\\"image/png\\") 2x + ); + a179: -webkit-image-set( + url(img.09a1a1112c577c279435.png) 1x + ); + a180: -webkit-image-set( + url(img.09a1a1112c577c279435.png var(--foo, \\"test.png\\")) 1x + ); +} + +div { + a181: src(img.09a1a1112c577c279435.png); + a181: src( img.09a1a1112c577c279435.png ); + a182: src(img.09a1a1112c577c279435.png); + a183: src(img.09a1a1112c577c279435.png var(--foo, \\"test.png\\")); + a184: src(var(--foo, \\"test.png\\")); + a185: src(img.09a1a1112c577c279435.png); +} + +div { + a186: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a187: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a188: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a189: image-set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a190: image-set(url(img.09a1a1112c577c279435.png)1x); + a191: image-set(url(img.09a1a1112c577c279435.png)1x/* test*/,/* test*/url(img.09a1a1112c577c279435.png)2x); +} + +@supports (background-image: image-set(url(unknown.09a1a1112c577c279435.png)1x,url(unknown.09a1a1112c577c279435.png)2x,url(unknown.09a1a1112c577c279435.png)3x)) { + div { + a192: url(img.09a1a1112c577c279435.png); + a193: image-set(url(img.09a1a1112c577c279435.png)1x); + } +} + +@supports (background-image: url(unknown.09a1a1112c577c279435.png param(--test))) { + div { + a194: url(img.09a1a1112c577c279435.png); + } +} + +@supports (background-image: url(unknown.09a1a1112c577c279435.png)) { + div { + a195: url(img.09a1a1112c577c279435.png); + } +} + +@supports (display: grid) { + @media (min-width: 100px) { + @layer special { + div { + a196: url(img.09a1a1112c577c279435.png); + } + } + } +} + +div { + a197: \\\\u\\\\r\\\\l(img.09a1a1112c577c279435.png); + a198: \\\\image-\\\\set(url(img.09a1a1112c577c279435.png)1x,url(img.09a1a1112c577c279435.png)2x,url(img.09a1a1112c577c279435.png)3x); + a199: \\\\-webk\\\\it-image-set(url(img.09a1a1112c577c279435.png)1x); + a200:-webkit-image-set(url(img.09a1a1112c577c279435.png)1x); +} + +div { + a201: src(http://www.example.com/pinkish.gif); + --foo: \\"http://www.example.com/pinkish.gif\\"; + a202: src(var(--foo)); + a203: src(img.09a1a1112c577c279435.png); + a204: src(img.09a1a1112c577c279435.png); +} + +div { + a205: url(img.09a1a1112c577c279435.png); + a206: url(data:,); + a208: url(./img.png); + a208: url(data:,); + a209: url(data:,); + a210: url(data:,); + a211: url(\\\\'img.png\\\\'); +} + +.filtered-element { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(filters.ea56db6eeb4418f4a090.svg#myFilter); /* Applying the SVG filter */ +} + +.filtered-element-old-url { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(filters.ea56db6eeb4418f4a090.svg#myFilter); /* Applying the SVG filter */ +} + + + +", +] +`; + +exports[`ConfigTestCases css url exported tests should work with URLs in CSS 2`] = ` +Array [ + "/*!************************!*\\\\ + !*** external \\"#test\\" ***! + \\\\************************/ +@import url(\\"#test\\"); +/*!************************!*\\\\ + !*** css ./nested.css ***! + \\\\************************/ + +.nested { + background: url('./img.png'); +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ + +div { + a: url('./img.png'); +} + +div { + b: url(\\"./img.png\\"); +} + +div { + c: url(./img.png); +} + +div { + d: url(\\"./img.png#hash\\"); +} + +div { + e: url( + \\"./img.png\\" + ); +} + +div { + f: green url( './img.png' ) xyz; +} + +div { + g: green url( \\"./img.png\\" ) xyz; +} + +div { + h: green url( ./img.png ) xyz; +} + +div { + i: green url(package/img.png) url(./img.png) xyz; +} + +div { + j: green url( \\"./img img.png\\" ) xyz; +} + +div { + k: green url( './img img.png' ) xyz; +} + +div { + l: green url(/img.png) xyz; +} + +div { + m: green URL(/img.png) xyz; +} + +div { + n: green uRl(/img.png) xyz; +} + +div { + --foo: url('./img.png'); +} + +div { + a1: url('./img.png'); +} + +div { + a2: url(\\"./img.png\\"); +} + +div { + a3: url(./img.png); +} + +div { + a4: url(\\"./img.png#hash\\"); +} + +div { + a5: url( + \\"./img.png\\" + ); +} + +div { + a6: green url( './img.png' ) xyz; +} + +div { + a7: green url( \\"./img.png\\" ) xyz; +} + +div { + a8: green url( ./img.png ) xyz; +} + +div { + a9: green url(package/img.png) url(./other-img.png) xyz; +} + +div { + a10: green url( \\"./img img.png\\" ) xyz; +} + +div { + a11: green url( './img img.png' ) xyz; +} + +div { + a12: green url(/img.png) xyz; +} + +div { + a13: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz; +} + +div { + a14: url(\\"data:image/svg+xml;charset=utf-8,\\"); +} + +div { + a15: url(\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\\"); +} + +div { + a16: url('data:image/svg+xml;charset=utf-8,#filter'); +} + +div { + a17: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter'); +} + +div { + a18: url(#highlight); +} + +div { + a19: url('#line-marker'); +} + +@font-face { + a20: url(./font.woff) format('woff'), + url('./font.woff2') format('woff2'), + url(\\"./font.eot\\") format('eot'), + url(./font.ttf) format('truetype'), + url(\\"./font with spaces.eot\\") format(\\"embedded-opentype\\"), + url('./font.svg#svgFontName') format('svg'), + url('./font.woff2?foo=bar') format('woff2'), + url(\\"./font.eot?#iefix\\") format('embedded-opentype'), + url(\\"./font with spaces.eot?#iefix\\") format('embedded-opentype'); +} + +@media (min-width: 500px) { + div { + a21: url(\\"./img.png\\"); + } +} + +div { + a22: \\"do not use url(path)\\"; +} + +div { + a23: 'do not \\"use\\" url(path)'; +} + +div { + a24: -webkit-image-set(url('./img1x.png') 1x, url('./img2x.png') 2x) +} + +div { + a25: image-set(url('./img1x.png') 1x, url('./img2x.png') 2x) +} + +div { + a26: green url() xyz; +} + +div { + a27: green url('') xyz; +} + +div { + a28: green url(\\"\\") xyz; +} + +div { + a29: green url(' ') xyz; +} + +div { + a30: green url( + ) xyz; +} + +div { + a40: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a41: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a42: url(\\"./img.png?foo\\"); +} + +div { + a43: url(\\"./img.png?foo=bar\\"); +} + +div { + a44: url(\\"./img.png?foo=bar#hash\\"); +} + +div { + a45: url(\\"./img.png?foo=bar#hash\\"); +} + +div { + a46: url(\\"./img.png?\\"); +} + +div { + a47: url('./img.png') url(\\"data:image/svg+xml;charset=utf-8,\\") url('./img.png'); +} + +div { + a48: __URL__(); +} + +div { + a49: url('./nested/../nested/img-simple.png'); +} + +div { + a50: url('/nested/img-simple.png'); +} + +div { + a51: url('../url/nested/img-simple.png'); +} + +div { + a52: url(./nested/img.png); +} + +div { + a53: url(nested/img.png); +} + +@font-face { + a54: url(\\"//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot\\"); +} + +div { + a55: -webkit-image-set(); + a56: -webkit-image-set(''); + a56: image-set(); + a58: image-set(''); + a59: image-set(\\"\\"); + a60: image-set(\\"\\" 1x); + a61: image-set(url()); + a62: image-set( + url() + ); + a63: image-set(URL()); + a64: image-set(url('')); + a65: image-set(url(\\"\\")); + a66: image-set(url('') 1x); + a67: image-set(1x); + a68: image-set( + 1x + ); + a69: image-set(calc(1rem + 1px) 1x); + + a70: -webkit-image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x); + a71: image-set(\\"./img1x.png\\" 1x); + a72: image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x); + a73: image-set(\\"./img img.png\\" 1x, \\"./img img.png\\" 2x); + a74: image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x), + image-set(\\"./img1x.png\\" 1x, \\"./img2x.png\\" 2x); + a75: image-set( + \\"./img1x.png\\" 1x, + \\"./img2x.png\\" 2x, + \\"./img3x.png\\" 600dpi + ); + a76: image-set(\\"./img1x.png?foo=bar\\" 1x); + a77: image-set(\\"./img1x.png#hash\\" 1x); + a78: image-set(\\"./img1x.png?#iefix\\" 1x); + + a79: -webkit-image-set(url(\\"./img1x.png\\") 1x, url(\\"./img2x.png\\") 2x); + a80: -webkit-image-set(url(\\"./img1x.png\\") 1x); + a81: -webkit-image-set( + url(\\"./img1x.png\\") 1x + ); + a82: image-set(url(./img1x.png) 1x); + a83: image-set( + url(./img1x.png) 1x + ); + a84: image-set(url(\\"./img1x.png\\") 1x, url(\\"./img2x.png\\") 2x); + a85: image-set( + url(./img1x.png) 1x, + url(./img2x.png) 2x, + url(./img3x.png) 600dpi + ); + a86: image-set(url(\\"./img img.png\\") 1x, url(\\"./img img.png\\") 2x); + + a87: image-set(url(\\"./img1x.png\\") 1x, \\"./img2x.png\\" 2x); +} + +div { + a88: url(./img\\\\img.png); + a89: url(./img\\\\'img.png); + a90: url(./img\\\\'\\\\'\\\\'img.png); + a91: url(./img\\\\(img.png); + a92: url(./img\\\\)img.png); + a93: url(./img\\\\ img.png); + a94: url(./img\\\\'\\\\(\\\\)\\\\ img.png); + + a95: image-set( + url(./img\\\\img.png) 1x, + url(./img\\\\'\\\\'\\\\'img.png) 2x, + url(./img\\\\'img.png) 3x, + url(./img\\\\(img.png) 4x, + url(./img\\\\)img.png) 5x, + url(./img\\\\ img.png) 6x, + url(./img\\\\'\\\\(\\\\)\\\\ img.png) 7x + ); +} + +div { + a96: url(\\"./img'''img.png\\"); + a97: url(\\"./img'() img.png\\"); + a98: url(\\"./img'img.png\\"); + a99: url(\\"./img(img.png\\"); + a100: url(\\"./img)img.png\\"); + a101: url('./img img.png'); + a102: url(\\"./img img.png\\"); +} + +div { + a103: url('./img\\\\ +(img.png'); + a104: url('./img\\\\ +(img.png'); + a105: url('./img\\\\ +(img.png'); + a106: url('./img\\\\ +\\\\ +\\\\ +\\\\ +(img.png'); +} + +div { + a107: url(\\"./img%27%27%27img.png\\"); + a108: url(\\"./img%27%28%29%20img.png\\"); + a109: url(\\"./img%27img.png\\"); + a110: url(\\"./img%28img.png\\"); + a111: url(\\"./img%29img.png\\"); + a112: url(\\"./img%20img.png\\"); + a113: url(./img%27%27%27img.png); + a114: url(./img%27%28%29%20img.png); + a115: url(./img%27img.png); + a116: url(./img%28img.png); + a117: url(./img%29img.png); + a118: url(./img%20img.png); +} + +div { + a119: url('img.png'); +} + +div { + a120: url(\\"./img\\\\'\\\\'\\\\'img.png\\"); + a121: url(\\"./img\\\\'\\\\(\\\\)\\\\ img.png\\"); + a122: url(\\"./img\\\\'img.png\\"); + a123: url(\\"./img\\\\(img.png\\"); + a124: url(\\"./img\\\\)img.png\\"); + a125: url(\\"./img\\\\ img.png\\"); + a126: url(\\"./\\\\69\\\\6D\\\\67.png\\"); + a127: url(./\\\\69\\\\6D\\\\67.png); + a128: url(\\"./img\\\\27img.png\\"); + a129: url(\\"./img\\\\'\\\\28%29 img.png\\"); + a130: url(./img\\\\'\\\\28%29\\\\ img.png); +} + +div { + a131: url('./img.png'); + a132: url('./img.png'); + + a133: url('./img.png?foo=bar'); + a134: url('./img.png?foo=bar'); + + a135: url('./img.png?foo=bar#hash'); + a136: url('./img.png?foo=bar#hash'); + + a137: url('./img.png?foo=bar'); + a138: url('./img.png?bar=foo'); + + a139: url('./img.png?foo=bar#foo'); + a140: url('./img.png?bar=foo#bar'); + + a141: url('./img.png?foo=1&bar=2'); + a142: url('./img.png?foo=2&bar=1'); +} + +div { + a143: url(\\"data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20width%3D%22191px%22%20height%3D%22191px%22%20viewBox%3D%220%200%20191%20191%22%20enable-background%3D%22new%200%200%20191%20191%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M95.5%2C0C42.8%2C0%2C0%2C42.8%2C0%2C95.5S42.8%2C191%2C95.5%2C191S191%2C148.2%2C191%2C95.5S148.2%2C0%2C95.5%2C0z%20M95.5%2C187.6%0A%09c-50.848%2C0-92.1-41.25-92.1-92.1c0-50.848%2C41.252-92.1%2C92.1-92.1c50.85%2C0%2C92.1%2C41.252%2C92.1%2C92.1%0A%09C187.6%2C146.35%2C146.35%2C187.6%2C95.5%2C187.6z%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M92.9%2C10v8.6H91v-6.5c-0.1%2C0.1-0.2%2C0.2-0.4%2C0.3c-0.2%2C0.1-0.3%2C0.2-0.4%2C0.2c-0.1%2C0-0.3%2C0.1-0.5%2C0.2%0A%09%09c-0.2%2C0.1-0.3%2C0.1-0.5%2C0.1v-1.6c0.5-0.1%2C0.9-0.3%2C1.4-0.5c0.5-0.2%2C0.8-0.5%2C1.2-0.7h1.1V10z%22%2F%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M97.1%2C17.1h3.602v1.5h-5.6V18c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.6%2C0.5-0.9c0.2-0.3%2C0.5-0.5%2C0.7-0.7%0A%09%09c0.2-0.2%2C0.5-0.4%2C0.7-0.6c0.199-0.2%2C0.5-0.3%2C0.6-0.5c0.102-0.2%2C0.301-0.3%2C0.5-0.5c0.2-0.2%2C0.2-0.3%2C0.301-0.5%0A%09%09c0.101-0.2%2C0.101-0.3%2C0.101-0.5c0-0.4-0.101-0.6-0.3-0.8c-0.2-0.2-0.4-0.3-0.801-0.3c-0.699%2C0-1.399%2C0.3-2.101%2C0.9v-1.6%0A%09%09c0.7-0.5%2C1.5-0.7%2C2.5-0.7c0.399%2C0%2C0.8%2C0.1%2C1.101%2C0.2c0.301%2C0.1%2C0.601%2C0.3%2C0.899%2C0.5c0.3%2C0.2%2C0.399%2C0.5%2C0.5%2C0.8%0A%09%09c0.101%2C0.3%2C0.2%2C0.6%2C0.2%2C1s-0.102%2C0.7-0.2%2C1c-0.099%2C0.3-0.3%2C0.6-0.5%2C0.8c-0.2%2C0.2-0.399%2C0.5-0.7%2C0.7c-0.3%2C0.2-0.5%2C0.4-0.8%2C0.6%0A%09%09c-0.2%2C0.1-0.399%2C0.3-0.5%2C0.4s-0.3%2C0.3-0.5%2C0.4s-0.2%2C0.3-0.3%2C0.4C97.1%2C17%2C97.1%2C17%2C97.1%2C17.1z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M15%2C95.4c0%2C0.7-0.1%2C1.4-0.2%2C2c-0.1%2C0.6-0.4%2C1.1-0.7%2C1.5C13.8%2C99.3%2C13.4%2C99.6%2C12.9%2C99.8s-1%2C0.3-1.5%2C0.3%0A%09%09c-0.7%2C0-1.3-0.1-1.8-0.3v-1.5c0.4%2C0.3%2C1%2C0.4%2C1.6%2C0.4c0.6%2C0%2C1.1-0.2%2C1.5-0.7c0.4-0.5%2C0.5-1.1%2C0.5-1.9l0%2C0%0A%09%09C12.8%2C96.7%2C12.3%2C96.9%2C11.5%2C96.9c-0.3%2C0-0.7-0.102-1-0.2c-0.3-0.101-0.5-0.3-0.8-0.5c-0.3-0.2-0.4-0.5-0.5-0.8%0A%09%09c-0.1-0.3-0.2-0.7-0.2-1c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.7%2C0.6-0.9c0.3-0.2%2C0.6-0.5%2C0.9-0.6c0.3-0.1%2C0.8-0.2%2C1.2-0.2%0A%09%09c0.5%2C0%2C0.9%2C0.1%2C1.2%2C0.3c0.3%2C0.2%2C0.7%2C0.4%2C0.9%2C0.8s0.5%2C0.7%2C0.6%2C1.2S15%2C94.8%2C15%2C95.4z%20M13.1%2C94.4c0-0.2%2C0-0.4-0.1-0.6%0A%09%09c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2%2C0-0.3%2C0-0.4%2C0.1s-0.3%2C0.2-0.3%2C0.3%0A%09%09c0%2C0.1-0.2%2C0.3-0.2%2C0.4c0%2C0.1-0.1%2C0.4-0.1%2C0.6c0%2C0.2%2C0%2C0.4%2C0.1%2C0.6c0.1%2C0.2%2C0.1%2C0.3%2C0.2%2C0.4c0.1%2C0.1%2C0.2%2C0.2%2C0.4%2C0.3%0A%09%09c0.2%2C0.1%2C0.3%2C0.1%2C0.5%2C0.1c0.2%2C0%2C0.3%2C0%2C0.4-0.1s0.2-0.2%2C0.3-0.3c0.1-0.1%2C0.2-0.2%2C0.2-0.4C13%2C94.7%2C13.1%2C94.6%2C13.1%2C94.4z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M176%2C99.7V98.1c0.6%2C0.4%2C1.2%2C0.602%2C2%2C0.602c0.5%2C0%2C0.8-0.102%2C1.1-0.301c0.301-0.199%2C0.4-0.5%2C0.4-0.801%0A%09%09c0-0.398-0.2-0.699-0.5-0.898c-0.3-0.2-0.8-0.301-1.3-0.301h-0.802V95h0.701c1.101%2C0%2C1.601-0.4%2C1.601-1.1c0-0.7-0.4-1-1.302-1%0A%09%09c-0.6%2C0-1.1%2C0.2-1.6%2C0.5v-1.5c0.6-0.3%2C1.301-0.4%2C2.1-0.4c0.9%2C0%2C1.5%2C0.2%2C2%2C0.6s0.701%2C0.9%2C0.701%2C1.5c0%2C1.1-0.601%2C1.8-1.701%2C2.1l0%2C0%0A%09%09c0.602%2C0.1%2C1.102%2C0.3%2C1.4%2C0.6s0.5%2C0.8%2C0.5%2C1.3c0%2C0.801-0.3%2C1.4-0.9%2C1.9c-0.6%2C0.5-1.398%2C0.7-2.398%2C0.7%0A%09%09C177.2%2C100.1%2C176.5%2C100%2C176%2C99.7z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M98.5%2C179.102c0%2C0.398-0.1%2C0.799-0.2%2C1.199C98.2%2C180.7%2C98%2C181%2C97.7%2C181.2s-0.601%2C0.5-0.9%2C0.601%0A%09%09c-0.3%2C0.1-0.7%2C0.199-1.2%2C0.199c-0.5%2C0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.399-0.9-0.8c-0.2-0.4-0.5-0.7-0.6-1.2%0A%09%09c-0.1-0.5-0.2-1-0.2-1.601c0-0.699%2C0.1-1.399%2C0.3-2c0.2-0.601%2C0.4-1.101%2C0.8-1.5c0.4-0.399%2C0.7-0.699%2C1.2-1c0.5-0.3%2C1-0.3%2C1.6-0.3%0A%09%09c0.6%2C0%2C1.2%2C0.101%2C1.5%2C0.199v1.5c-0.4-0.199-0.9-0.399-1.4-0.399c-0.3%2C0-0.6%2C0.101-0.8%2C0.2c-0.2%2C0.101-0.5%2C0.3-0.7%2C0.5%0A%09%09c-0.2%2C0.199-0.3%2C0.5-0.4%2C0.8c-0.1%2C0.301-0.2%2C0.7-0.2%2C1.101l0%2C0c0.4-0.601%2C1-0.8%2C1.8-0.8c0.3%2C0%2C0.7%2C0.1%2C0.9%2C0.199%0A%09%09c0.2%2C0.101%2C0.5%2C0.301%2C0.7%2C0.5c0.199%2C0.2%2C0.398%2C0.5%2C0.5%2C0.801C98.5%2C178.2%2C98.5%2C178.7%2C98.5%2C179.102z%20M96.7%2C179.2%0A%09%09c0-0.899-0.4-1.399-1.1-1.399c-0.2%2C0-0.3%2C0-0.5%2C0.1c-0.2%2C0.101-0.3%2C0.201-0.4%2C0.301c-0.1%2C0.101-0.2%2C0.199-0.2%2C0.4%0A%09%09c0%2C0.199-0.1%2C0.299-0.1%2C0.5c0%2C0.199%2C0%2C0.398%2C0.1%2C0.6s0.1%2C0.3%2C0.2%2C0.5c0.1%2C0.199%2C0.2%2C0.199%2C0.4%2C0.3c0.2%2C0.101%2C0.3%2C0.101%2C0.5%2C0.101%0A%09%09c0.2%2C0%2C0.3%2C0%2C0.5-0.101c0.2-0.101%2C0.301-0.199%2C0.301-0.3c0-0.1%2C0.199-0.301%2C0.199-0.399C96.6%2C179.7%2C96.7%2C179.4%2C96.7%2C179.2z%22%2F%3E%0A%3C%2Fg%3E%0A%3Ccircle%20fill%3D%22%23636363%22%20cx%3D%2295%22%20cy%3D%2295%22%20r%3D%227%22%2F%3E%0A%3C%2Fsvg%3E%0A\\") 50% 50%/191px no-repeat; +} + +div { + a144: url('%2E/img.png'); +} + +div { + a145: url(\\"/img.png\\"); +} + +div { + /* TODO fix me */ + /*a146: url('./img.png', 'foo', './img.png', url('./img.png'));*/ + /*a147: image-set(url('./img.png', 'foo', './img.png', url('./img.png')) 1x, url(\\"./img2x.png\\") 2x);*/ +} + +div { + a148: url('data:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a149: url('DATA:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a150: url('DATA:image/svg+xml,%3Csvg xmlns=\\"http://www.w3.org/2000/svg\\"%3E%3Crect width=\\"100%25\\" height=\\"100%25\\" style=\\"stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px\\" /%3E%3C/svg%3E'); + a151: url('data:image/svg+xml;utf8,'); + a152: url('DATA:image/svg+xml;utf8,'); +} + +div { + a152: url(\\"img.png\\"); +} + +div { + a153: url(\\"nested/img.png\\"); +} + +div { + a154: url(\\"nested/other.png\\"); +} + +div { + a155: url(\\"package/img.png\\"); +} + +div { + a156: url(\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\\"); +} + +div { + a157: url('data:image/svg+xml;utf8,'); +} + +div { + a158: src(\\"http://www.example.com/pinkish.gif\\"); + --foo-bar: \\"http://www.example.com/pinkish.gif\\"; + a159: src(var(--foo)); +} + +div { + a160: url(\\"img.png\\" param(--color var(--primary-color))); + a161: src(\\"img.png\\" param(--color var(--primary-color))); +} + +div { + a162: url('img\\\\ + i\\\\ +mg.png\\\\ + '); + +} + +div { + a163: url(\\" img.png \\"); +} + + +div { + a164: url( img.png bug); +} + +div { + a165: url(img\\\\n.png); +} + +div { + a166: url(' data:image/svg+xml;utf8, '); +} + +div { + a167: url(http://example.com/image.jpg); + a168: url(http://example.com/image.jpg); +} + +div { + a169: url('data:,'); + a170: url('data:,'); +} + +div { + a171: image(ltr 'img.png#xywh=0,0,16,16', red); + a172: cross-fade(20% url(img.png), url(img.png)) +} + +div { + a172: image-set( + linear-gradient(blue, white) 1x, + linear-gradient(blue, green) 2x + ); + a173: image-set( + url(\\"img.png\\") type(\\"image/png\\"), + url(\\"img.png\\") type(\\"image/png\\") + ); + a174: image-set( + \\"img.png\\" 1x, + \\"img.png\\" 2x + ); + a175: image-set( + url(\\"img.png\\") 1x, + url(\\"img.png\\") 2x, + url(\\"img.png\\") 3x + ); + a176: image-set( + \\"img.png\\" type(\\"image/png\\"), + \\"img.png\\" type(\\"image/png\\") + ) \\"img.png\\"; + a177: image-set( + \\"img.png\\" 1x type(\\"image/png\\"), + \\"img.png\\" 2x type(\\"image/png\\") + ); + a178: image-set( + \\"img.png\\" type(\\"image/png\\") 1x, + \\"img.png\\" type(\\"image/png\\") 2x + ); + a179: -webkit-image-set( + \\"img.png\\" 1x + ); + a180: -webkit-image-set( + url(\\"img.png\\" var(--foo, \\"test.png\\")) 1x + ); +} + +div { + a181: src(\\"img.png\\"); + a181: src( \\"img.png\\" ); + a182: src('img.png'); + a183: src('img.png' var(--foo, \\"test.png\\")); + a184: src(var(--foo, \\"test.png\\")); + a185: src(\\" img.png \\"); +} + +div { + a186: image-set(\\"img.png\\"1x,\\"img.png\\"2x,\\"img.png\\"3x); + a187: image-set(\\"img.png\\"1x,url(\\"img.png\\")2x,\\"img.png\\"3x); + a188: image-set(\\"img.png\\"1x,\\"img.png\\"2x,url(\\"img.png\\")3x); + a189: image-set(url(\\"img.png\\")1x,\\"img.png\\"2x,\\"img.png\\"3x); + a190: image-set(\\"img.png\\"1x); + a191: image-set(\\"img.png\\"1x/* test*/,/* test*/\\"img.png\\"2x); +} + +@supports (background-image: image-set(\\"unknown.png\\"1x,\\"unknown.png\\"2x,\\"unknown.png\\"3x)) { + div { + a192: url(\\"img.png\\"); + a193: image-set(\\"img.png\\"1x); + } +} + +@supports (background-image: url(\\"unknown.png\\" param(--test))) { + div { + a194: url(\\"img.png\\"); + } +} + +@supports (background-image: url(\\"unknown.png\\")) { + div { + a195: url(\\"img.png\\"); + } +} + +@supports (display: grid) { + @media (min-width: 100px) { + @layer special { + div { + a196: url(\\"img.png\\"); + } + } + } +} + +div { + a197: \\\\u\\\\r\\\\l(\\"img.png\\"); + a198: \\\\image-\\\\set(\\"img.png\\"1x,\\"img.png\\"2x,\\"img.png\\"3x); + a199: \\\\-webk\\\\it-image-set(\\"img.png\\"1x); + a200:-webkit-image-set(\\"img.png\\"1x); +} + +div { + a201: src(\\"http://www.example.com/pinkish.gif\\"); + --foo: \\"http://www.example.com/pinkish.gif\\"; + a202: src(var(--foo)); + a203: src(\\"./img.png\\"); + a204: src(\\"img.png\\"); +} + +div { + a205: url(alias-url.png); + a206: url(alias-url-1.png); + a208: url(external-url.png); + a208: url(external-url-2.png); + a209: url(unresolved.png); + a210: url(ignore.png); + a211: url(\\"schema:test\\"); +} + +.filtered-element { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(\\"./filters.svg#myFilter\\"); /* Applying the SVG filter */ +} + +.filtered-element-old-url { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(./filters.svg#myFilter); /* Applying the SVG filter */ +} + + + +", +] +`; diff --git a/test/configCases/css/url/errors.js b/test/configCases/css/url/errors.js new file mode 100644 index 00000000000..29b195bd723 --- /dev/null +++ b/test/configCases/css/url/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [/Can't resolve 'unresolved.png'/]; diff --git a/test/configCases/css/url/filters.svg b/test/configCases/css/url/filters.svg new file mode 100644 index 00000000000..bdd9a89cf1c --- /dev/null +++ b/test/configCases/css/url/filters.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/test/configCases/css/url/font with spaces.eot b/test/configCases/css/url/font with spaces.eot new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/url/font.eot b/test/configCases/css/url/font.eot new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/url/font.svg b/test/configCases/css/url/font.svg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/url/font.ttf b/test/configCases/css/url/font.ttf new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/url/font.woff b/test/configCases/css/url/font.woff new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/url/font.woff2 b/test/configCases/css/url/font.woff2 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/css/url/img img.png b/test/configCases/css/url/img img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img img.png differ diff --git a/test/configCases/css/url/img'''img.png b/test/configCases/css/url/img'''img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img'''img.png differ diff --git a/test/configCases/css/url/img'() img.png b/test/configCases/css/url/img'() img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img'() img.png differ diff --git a/test/configCases/css/url/img'img.png b/test/configCases/css/url/img'img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img'img.png differ diff --git a/test/configCases/css/url/img(img.png b/test/configCases/css/url/img(img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img(img.png differ diff --git a/test/configCases/css/url/img)img.png b/test/configCases/css/url/img)img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img)img.png differ diff --git a/test/configCases/css/url/img.png b/test/configCases/css/url/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img.png differ diff --git a/test/configCases/css/url/img1x.png b/test/configCases/css/url/img1x.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img1x.png differ diff --git a/test/configCases/css/url/img2x.png b/test/configCases/css/url/img2x.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img2x.png differ diff --git a/test/configCases/css/url/img3x.png b/test/configCases/css/url/img3x.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/img3x.png differ diff --git a/test/configCases/css/url/imgimg.png b/test/configCases/css/url/imgimg.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/imgimg.png differ diff --git a/test/configCases/css/url/imgn.png b/test/configCases/css/url/imgn.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/imgn.png differ diff --git a/test/configCases/css/url/index.js b/test/configCases/css/url/index.js new file mode 100644 index 00000000000..9836c9e1859 --- /dev/null +++ b/test/configCases/css/url/index.js @@ -0,0 +1,13 @@ +import "./style.css"; + +it(`should work with URLs in CSS`, () => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); +}); diff --git a/test/configCases/css/url/nested.css b/test/configCases/css/url/nested.css new file mode 100644 index 00000000000..fcf3dab244c --- /dev/null +++ b/test/configCases/css/url/nested.css @@ -0,0 +1,5 @@ +@import url("#test"); + +.nested { + background: url('./img.png'); +} diff --git a/test/configCases/css/url/nested/img-simple.png b/test/configCases/css/url/nested/img-simple.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/nested/img-simple.png differ diff --git a/test/configCases/css/url/nested/img.png b/test/configCases/css/url/nested/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/nested/img.png differ diff --git a/test/configCases/css/url/nested/other.png b/test/configCases/css/url/nested/other.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/nested/other.png differ diff --git a/test/configCases/css/url/node_modules/package/img.png b/test/configCases/css/url/node_modules/package/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/node_modules/package/img.png differ diff --git a/test/configCases/css/url/node_modules/package/package.json b/test/configCases/css/url/node_modules/package/package.json new file mode 100644 index 00000000000..75b93e3b25a --- /dev/null +++ b/test/configCases/css/url/node_modules/package/package.json @@ -0,0 +1,4 @@ +{ + "name": "package", + "version": "1.0.0" +} diff --git a/test/configCases/css/url/other-img.png b/test/configCases/css/url/other-img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/other-img.png differ diff --git a/test/configCases/css/url/style.css b/test/configCases/css/url/style.css new file mode 100644 index 00000000000..8b5b376eb90 --- /dev/null +++ b/test/configCases/css/url/style.css @@ -0,0 +1,639 @@ +@import "./nested.css"; + +div { + a: url('./img.png'); +} + +div { + b: url("./img.png"); +} + +div { + c: url(./img.png); +} + +div { + d: url("./img.png#hash"); +} + +div { + e: url( + "./img.png" + ); +} + +div { + f: green url( './img.png' ) xyz; +} + +div { + g: green url( "./img.png" ) xyz; +} + +div { + h: green url( ./img.png ) xyz; +} + +div { + i: green url(package/img.png) url(./img.png) xyz; +} + +div { + j: green url( "./img img.png" ) xyz; +} + +div { + k: green url( './img img.png' ) xyz; +} + +div { + l: green url(/img.png) xyz; +} + +div { + m: green URL(/img.png) xyz; +} + +div { + n: green uRl(/img.png) xyz; +} + +div { + --foo: url('./img.png'); +} + +div { + a1: url('./img.png'); +} + +div { + a2: url("./img.png"); +} + +div { + a3: url(./img.png); +} + +div { + a4: url("./img.png#hash"); +} + +div { + a5: url( + "./img.png" + ); +} + +div { + a6: green url( './img.png' ) xyz; +} + +div { + a7: green url( "./img.png" ) xyz; +} + +div { + a8: green url( ./img.png ) xyz; +} + +div { + a9: green url(package/img.png) url(./other-img.png) xyz; +} + +div { + a10: green url( "./img img.png" ) xyz; +} + +div { + a11: green url( './img img.png' ) xyz; +} + +div { + a12: green url(/img.png) xyz; +} + +div { + a13: green url(data:image/png;base64,AAA) url(http://example.com/image.jpg) url(//example.com/image.png) xyz; +} + +div { + a14: url("data:image/svg+xml;charset=utf-8,"); +} + +div { + a15: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%2523007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E"); +} + +div { + a16: url('data:image/svg+xml;charset=utf-8,#filter'); +} + +div { + a17: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%5C%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%5C%22%3E%3Cfilter%20id%3D%5C%22filter%5C%22%3E%3CfeGaussianBlur%20in%3D%5C%22SourceAlpha%5C%22%20stdDeviation%3D%5C%220%5C%22%20%2F%3E%3CfeOffset%20dx%3D%5C%221%5C%22%20dy%3D%5C%222%5C%22%20result%3D%5C%22offsetblur%5C%22%20%2F%3E%3CfeFlood%20flood-color%3D%5C%22rgba(255%2C255%2C255%2C1)%5C%22%20%2F%3E%3CfeComposite%20in2%3D%5C%22offsetblur%5C%22%20operator%3D%5C%22in%5C%22%20%2F%3E%3CfeMerge%3E%3CfeMergeNode%20%2F%3E%3CfeMergeNode%20in%3D%5C%22SourceGraphic%5C%22%20%2F%3E%3C%2FfeMerge%3E%3C%2Ffilter%3E%3C%2Fsvg%3E%23filter'); +} + +div { + a18: url(#highlight); +} + +div { + a19: url('#line-marker'); +} + +@font-face { + a20: url(./font.woff) format('woff'), + url('./font.woff2') format('woff2'), + url("./font.eot") format('eot'), + url(./font.ttf) format('truetype'), + url("./font with spaces.eot") format("embedded-opentype"), + url('./font.svg#svgFontName') format('svg'), + url('./font.woff2?foo=bar') format('woff2'), + url("./font.eot?#iefix") format('embedded-opentype'), + url("./font with spaces.eot?#iefix") format('embedded-opentype'); +} + +@media (min-width: 500px) { + div { + a21: url("./img.png"); + } +} + +div { + a22: "do not use url(path)"; +} + +div { + a23: 'do not "use" url(path)'; +} + +div { + a24: -webkit-image-set(url('./img1x.png') 1x, url('./img2x.png') 2x) +} + +div { + a25: image-set(url('./img1x.png') 1x, url('./img2x.png') 2x) +} + +div { + a26: green url() xyz; +} + +div { + a27: green url('') xyz; +} + +div { + a28: green url("") xyz; +} + +div { + a29: green url(' ') xyz; +} + +div { + a30: green url( + ) xyz; +} + +div { + a40: green url(https://raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a41: green url(//raw.githubusercontent.com/webpack/media/master/logo/icon.png) xyz; +} + +div { + a42: url("./img.png?foo"); +} + +div { + a43: url("./img.png?foo=bar"); +} + +div { + a44: url("./img.png?foo=bar#hash"); +} + +div { + a45: url("./img.png?foo=bar#hash"); +} + +div { + a46: url("./img.png?"); +} + +div { + a47: url('./img.png') url("data:image/svg+xml;charset=utf-8,") url('./img.png'); +} + +div { + a48: __URL__(); +} + +div { + a49: url('./nested/../nested/img-simple.png'); +} + +div { + a50: url('/nested/img-simple.png'); +} + +div { + a51: url('../url/nested/img-simple.png'); +} + +div { + a52: url(./nested/img.png); +} + +div { + a53: url(nested/img.png); +} + +@font-face { + a54: url("//at.alicdn.com/t/font_515771_emcns5054x3whfr.eot"); +} + +div { + a55: -webkit-image-set(); + a56: -webkit-image-set(''); + a56: image-set(); + a58: image-set(''); + a59: image-set(""); + a60: image-set("" 1x); + a61: image-set(url()); + a62: image-set( + url() + ); + a63: image-set(URL()); + a64: image-set(url('')); + a65: image-set(url("")); + a66: image-set(url('') 1x); + a67: image-set(1x); + a68: image-set( + 1x + ); + a69: image-set(calc(1rem + 1px) 1x); + + a70: -webkit-image-set("./img1x.png" 1x, "./img2x.png" 2x); + a71: image-set("./img1x.png" 1x); + a72: image-set("./img1x.png" 1x, "./img2x.png" 2x); + a73: image-set("./img img.png" 1x, "./img img.png" 2x); + a74: image-set("./img1x.png" 1x, "./img2x.png" 2x), + image-set("./img1x.png" 1x, "./img2x.png" 2x); + a75: image-set( + "./img1x.png" 1x, + "./img2x.png" 2x, + "./img3x.png" 600dpi + ); + a76: image-set("./img1x.png?foo=bar" 1x); + a77: image-set("./img1x.png#hash" 1x); + a78: image-set("./img1x.png?#iefix" 1x); + + a79: -webkit-image-set(url("./img1x.png") 1x, url("./img2x.png") 2x); + a80: -webkit-image-set(url("./img1x.png") 1x); + a81: -webkit-image-set( + url("./img1x.png") 1x + ); + a82: image-set(url(./img1x.png) 1x); + a83: image-set( + url(./img1x.png) 1x + ); + a84: image-set(url("./img1x.png") 1x, url("./img2x.png") 2x); + a85: image-set( + url(./img1x.png) 1x, + url(./img2x.png) 2x, + url(./img3x.png) 600dpi + ); + a86: image-set(url("./img img.png") 1x, url("./img img.png") 2x); + + a87: image-set(url("./img1x.png") 1x, "./img2x.png" 2x); +} + +div { + a88: url(./img\img.png); + a89: url(./img\'img.png); + a90: url(./img\'\'\'img.png); + a91: url(./img\(img.png); + a92: url(./img\)img.png); + a93: url(./img\ img.png); + a94: url(./img\'\(\)\ img.png); + + a95: image-set( + url(./img\img.png) 1x, + url(./img\'\'\'img.png) 2x, + url(./img\'img.png) 3x, + url(./img\(img.png) 4x, + url(./img\)img.png) 5x, + url(./img\ img.png) 6x, + url(./img\'\(\)\ img.png) 7x + ); +} + +div { + a96: url("./img'''img.png"); + a97: url("./img'() img.png"); + a98: url("./img'img.png"); + a99: url("./img(img.png"); + a100: url("./img)img.png"); + a101: url('./img img.png'); + a102: url("./img img.png"); +} + +div { + a103: url('./img\ +(img.png'); + a104: url('./img\ +(img.png'); + a105: url('./img\ +(img.png'); + a106: url('./img\ +\ +\ +\ +(img.png'); +} + +div { + a107: url("./img%27%27%27img.png"); + a108: url("./img%27%28%29%20img.png"); + a109: url("./img%27img.png"); + a110: url("./img%28img.png"); + a111: url("./img%29img.png"); + a112: url("./img%20img.png"); + a113: url(./img%27%27%27img.png); + a114: url(./img%27%28%29%20img.png); + a115: url(./img%27img.png); + a116: url(./img%28img.png); + a117: url(./img%29img.png); + a118: url(./img%20img.png); +} + +div { + a119: url('img.png'); +} + +div { + a120: url("./img\'\'\'img.png"); + a121: url("./img\'\(\)\ img.png"); + a122: url("./img\'img.png"); + a123: url("./img\(img.png"); + a124: url("./img\)img.png"); + a125: url("./img\ img.png"); + a126: url("./\69\6D\67.png"); + a127: url(./\69\6D\67.png); + a128: url("./img\27img.png"); + a129: url("./img\'\28%29 img.png"); + a130: url(./img\'\28%29\ img.png); +} + +div { + a131: url('./img.png'); + a132: url('./img.png'); + + a133: url('./img.png?foo=bar'); + a134: url('./img.png?foo=bar'); + + a135: url('./img.png?foo=bar#hash'); + a136: url('./img.png?foo=bar#hash'); + + a137: url('./img.png?foo=bar'); + a138: url('./img.png?bar=foo'); + + a139: url('./img.png?foo=bar#foo'); + a140: url('./img.png?bar=foo#bar'); + + a141: url('./img.png?foo=1&bar=2'); + a142: url('./img.png?foo=2&bar=1'); +} + +div { + a143: url("data:image/svg+xml;charset=UTF-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0A%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20width%3D%22191px%22%20height%3D%22191px%22%20viewBox%3D%220%200%20191%20191%22%20enable-background%3D%22new%200%200%20191%20191%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M95.5%2C0C42.8%2C0%2C0%2C42.8%2C0%2C95.5S42.8%2C191%2C95.5%2C191S191%2C148.2%2C191%2C95.5S148.2%2C0%2C95.5%2C0z%20M95.5%2C187.6%0A%09c-50.848%2C0-92.1-41.25-92.1-92.1c0-50.848%2C41.252-92.1%2C92.1-92.1c50.85%2C0%2C92.1%2C41.252%2C92.1%2C92.1%0A%09C187.6%2C146.35%2C146.35%2C187.6%2C95.5%2C187.6z%22%2F%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M92.9%2C10v8.6H91v-6.5c-0.1%2C0.1-0.2%2C0.2-0.4%2C0.3c-0.2%2C0.1-0.3%2C0.2-0.4%2C0.2c-0.1%2C0-0.3%2C0.1-0.5%2C0.2%0A%09%09c-0.2%2C0.1-0.3%2C0.1-0.5%2C0.1v-1.6c0.5-0.1%2C0.9-0.3%2C1.4-0.5c0.5-0.2%2C0.8-0.5%2C1.2-0.7h1.1V10z%22%2F%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M97.1%2C17.1h3.602v1.5h-5.6V18c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.6%2C0.5-0.9c0.2-0.3%2C0.5-0.5%2C0.7-0.7%0A%09%09c0.2-0.2%2C0.5-0.4%2C0.7-0.6c0.199-0.2%2C0.5-0.3%2C0.6-0.5c0.102-0.2%2C0.301-0.3%2C0.5-0.5c0.2-0.2%2C0.2-0.3%2C0.301-0.5%0A%09%09c0.101-0.2%2C0.101-0.3%2C0.101-0.5c0-0.4-0.101-0.6-0.3-0.8c-0.2-0.2-0.4-0.3-0.801-0.3c-0.699%2C0-1.399%2C0.3-2.101%2C0.9v-1.6%0A%09%09c0.7-0.5%2C1.5-0.7%2C2.5-0.7c0.399%2C0%2C0.8%2C0.1%2C1.101%2C0.2c0.301%2C0.1%2C0.601%2C0.3%2C0.899%2C0.5c0.3%2C0.2%2C0.399%2C0.5%2C0.5%2C0.8%0A%09%09c0.101%2C0.3%2C0.2%2C0.6%2C0.2%2C1s-0.102%2C0.7-0.2%2C1c-0.099%2C0.3-0.3%2C0.6-0.5%2C0.8c-0.2%2C0.2-0.399%2C0.5-0.7%2C0.7c-0.3%2C0.2-0.5%2C0.4-0.8%2C0.6%0A%09%09c-0.2%2C0.1-0.399%2C0.3-0.5%2C0.4s-0.3%2C0.3-0.5%2C0.4s-0.2%2C0.3-0.3%2C0.4C97.1%2C17%2C97.1%2C17%2C97.1%2C17.1z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M15%2C95.4c0%2C0.7-0.1%2C1.4-0.2%2C2c-0.1%2C0.6-0.4%2C1.1-0.7%2C1.5C13.8%2C99.3%2C13.4%2C99.6%2C12.9%2C99.8s-1%2C0.3-1.5%2C0.3%0A%09%09c-0.7%2C0-1.3-0.1-1.8-0.3v-1.5c0.4%2C0.3%2C1%2C0.4%2C1.6%2C0.4c0.6%2C0%2C1.1-0.2%2C1.5-0.7c0.4-0.5%2C0.5-1.1%2C0.5-1.9l0%2C0%0A%09%09C12.8%2C96.7%2C12.3%2C96.9%2C11.5%2C96.9c-0.3%2C0-0.7-0.102-1-0.2c-0.3-0.101-0.5-0.3-0.8-0.5c-0.3-0.2-0.4-0.5-0.5-0.8%0A%09%09c-0.1-0.3-0.2-0.7-0.2-1c0-0.4%2C0.1-0.8%2C0.2-1.2c0.1-0.4%2C0.3-0.7%2C0.6-0.9c0.3-0.2%2C0.6-0.5%2C0.9-0.6c0.3-0.1%2C0.8-0.2%2C1.2-0.2%0A%09%09c0.5%2C0%2C0.9%2C0.1%2C1.2%2C0.3c0.3%2C0.2%2C0.7%2C0.4%2C0.9%2C0.8s0.5%2C0.7%2C0.6%2C1.2S15%2C94.8%2C15%2C95.4z%20M13.1%2C94.4c0-0.2%2C0-0.4-0.1-0.6%0A%09%09c-0.1-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.2-0.2-0.4-0.3c-0.2-0.1-0.3-0.1-0.5-0.1c-0.2%2C0-0.3%2C0-0.4%2C0.1s-0.3%2C0.2-0.3%2C0.3%0A%09%09c0%2C0.1-0.2%2C0.3-0.2%2C0.4c0%2C0.1-0.1%2C0.4-0.1%2C0.6c0%2C0.2%2C0%2C0.4%2C0.1%2C0.6c0.1%2C0.2%2C0.1%2C0.3%2C0.2%2C0.4c0.1%2C0.1%2C0.2%2C0.2%2C0.4%2C0.3%0A%09%09c0.2%2C0.1%2C0.3%2C0.1%2C0.5%2C0.1c0.2%2C0%2C0.3%2C0%2C0.4-0.1s0.2-0.2%2C0.3-0.3c0.1-0.1%2C0.2-0.2%2C0.2-0.4C13%2C94.7%2C13.1%2C94.6%2C13.1%2C94.4z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M176%2C99.7V98.1c0.6%2C0.4%2C1.2%2C0.602%2C2%2C0.602c0.5%2C0%2C0.8-0.102%2C1.1-0.301c0.301-0.199%2C0.4-0.5%2C0.4-0.801%0A%09%09c0-0.398-0.2-0.699-0.5-0.898c-0.3-0.2-0.8-0.301-1.3-0.301h-0.802V95h0.701c1.101%2C0%2C1.601-0.4%2C1.601-1.1c0-0.7-0.4-1-1.302-1%0A%09%09c-0.6%2C0-1.1%2C0.2-1.6%2C0.5v-1.5c0.6-0.3%2C1.301-0.4%2C2.1-0.4c0.9%2C0%2C1.5%2C0.2%2C2%2C0.6s0.701%2C0.9%2C0.701%2C1.5c0%2C1.1-0.601%2C1.8-1.701%2C2.1l0%2C0%0A%09%09c0.602%2C0.1%2C1.102%2C0.3%2C1.4%2C0.6s0.5%2C0.8%2C0.5%2C1.3c0%2C0.801-0.3%2C1.4-0.9%2C1.9c-0.6%2C0.5-1.398%2C0.7-2.398%2C0.7%0A%09%09C177.2%2C100.1%2C176.5%2C100%2C176%2C99.7z%22%2F%3E%0A%3C%2Fg%3E%0A%3Cg%3E%0A%09%3Cpath%20fill%3D%22%23636363%22%20d%3D%22M98.5%2C179.102c0%2C0.398-0.1%2C0.799-0.2%2C1.199C98.2%2C180.7%2C98%2C181%2C97.7%2C181.2s-0.601%2C0.5-0.9%2C0.601%0A%09%09c-0.3%2C0.1-0.7%2C0.199-1.2%2C0.199c-0.5%2C0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.399-0.9-0.8c-0.2-0.4-0.5-0.7-0.6-1.2%0A%09%09c-0.1-0.5-0.2-1-0.2-1.601c0-0.699%2C0.1-1.399%2C0.3-2c0.2-0.601%2C0.4-1.101%2C0.8-1.5c0.4-0.399%2C0.7-0.699%2C1.2-1c0.5-0.3%2C1-0.3%2C1.6-0.3%0A%09%09c0.6%2C0%2C1.2%2C0.101%2C1.5%2C0.199v1.5c-0.4-0.199-0.9-0.399-1.4-0.399c-0.3%2C0-0.6%2C0.101-0.8%2C0.2c-0.2%2C0.101-0.5%2C0.3-0.7%2C0.5%0A%09%09c-0.2%2C0.199-0.3%2C0.5-0.4%2C0.8c-0.1%2C0.301-0.2%2C0.7-0.2%2C1.101l0%2C0c0.4-0.601%2C1-0.8%2C1.8-0.8c0.3%2C0%2C0.7%2C0.1%2C0.9%2C0.199%0A%09%09c0.2%2C0.101%2C0.5%2C0.301%2C0.7%2C0.5c0.199%2C0.2%2C0.398%2C0.5%2C0.5%2C0.801C98.5%2C178.2%2C98.5%2C178.7%2C98.5%2C179.102z%20M96.7%2C179.2%0A%09%09c0-0.899-0.4-1.399-1.1-1.399c-0.2%2C0-0.3%2C0-0.5%2C0.1c-0.2%2C0.101-0.3%2C0.201-0.4%2C0.301c-0.1%2C0.101-0.2%2C0.199-0.2%2C0.4%0A%09%09c0%2C0.199-0.1%2C0.299-0.1%2C0.5c0%2C0.199%2C0%2C0.398%2C0.1%2C0.6s0.1%2C0.3%2C0.2%2C0.5c0.1%2C0.199%2C0.2%2C0.199%2C0.4%2C0.3c0.2%2C0.101%2C0.3%2C0.101%2C0.5%2C0.101%0A%09%09c0.2%2C0%2C0.3%2C0%2C0.5-0.101c0.2-0.101%2C0.301-0.199%2C0.301-0.3c0-0.1%2C0.199-0.301%2C0.199-0.399C96.6%2C179.7%2C96.7%2C179.4%2C96.7%2C179.2z%22%2F%3E%0A%3C%2Fg%3E%0A%3Ccircle%20fill%3D%22%23636363%22%20cx%3D%2295%22%20cy%3D%2295%22%20r%3D%227%22%2F%3E%0A%3C%2Fsvg%3E%0A") 50% 50%/191px no-repeat; +} + +div { + a144: url('%2E/img.png'); +} + +div { + a145: url("/img.png"); +} + +div { + /* TODO fix me */ + /*a146: url('./img.png', 'foo', './img.png', url('./img.png'));*/ + /*a147: image-set(url('./img.png', 'foo', './img.png', url('./img.png')) 1x, url("./img2x.png") 2x);*/ +} + +div { + a148: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg"%3E%3Crect width="100%25" height="100%25" style="stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px" /%3E%3C/svg%3E'); + a149: url('DATA:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg"%3E%3Crect width="100%25" height="100%25" style="stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px" /%3E%3C/svg%3E'); + a150: url('DATA:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg"%3E%3Crect width="100%25" height="100%25" style="stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px" /%3E%3C/svg%3E'); + a151: url('data:image/svg+xml;utf8,'); + a152: url('DATA:image/svg+xml;utf8,'); +} + +div { + a152: url("img.png"); +} + +div { + a153: url("nested/img.png"); +} + +div { + a154: url("nested/other.png"); +} + +div { + a155: url("package/img.png"); +} + +div { + a156: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); +} + +div { + a157: url('data:image/svg+xml;utf8,'); +} + +div { + a158: src("http://www.example.com/pinkish.gif"); + --foo-bar: "http://www.example.com/pinkish.gif"; + a159: src(var(--foo)); +} + +div { + a160: url("img.png" param(--color var(--primary-color))); + a161: src("img.png" param(--color var(--primary-color))); +} + +div { + a162: url('img\ + i\ +mg.png\ + '); + +} + +div { + a163: url(" img.png "); +} + + +div { + a164: url( img.png bug); +} + +div { + a165: url(img\n.png); +} + +div { + a166: url(' data:image/svg+xml;utf8, '); +} + +div { + a167: url(http://example.com/image.jpg); + a168: url(http://example.com/image.jpg); +} + +div { + a169: url('data:,'); + a170: url('data:,'); +} + +div { + a171: image(ltr 'img.png#xywh=0,0,16,16', red); + a172: cross-fade(20% url(img.png), url(img.png)) +} + +div { + a172: image-set( + linear-gradient(blue, white) 1x, + linear-gradient(blue, green) 2x + ); + a173: image-set( + url("img.png") type("image/png"), + url("img.png") type("image/png") + ); + a174: image-set( + "img.png" 1x, + "img.png" 2x + ); + a175: image-set( + url("img.png") 1x, + url("img.png") 2x, + url("img.png") 3x + ); + a176: image-set( + "img.png" type("image/png"), + "img.png" type("image/png") + ) "img.png"; + a177: image-set( + "img.png" 1x type("image/png"), + "img.png" 2x type("image/png") + ); + a178: image-set( + "img.png" type("image/png") 1x, + "img.png" type("image/png") 2x + ); + a179: -webkit-image-set( + "img.png" 1x + ); + a180: -webkit-image-set( + url("img.png" var(--foo, "test.png")) 1x + ); +} + +div { + a181: src("img.png"); + a181: src( "img.png" ); + a182: src('img.png'); + a183: src('img.png' var(--foo, "test.png")); + a184: src(var(--foo, "test.png")); + a185: src(" img.png "); +} + +div { + a186: image-set("img.png"1x,"img.png"2x,"img.png"3x); + a187: image-set("img.png"1x,url("img.png")2x,"img.png"3x); + a188: image-set("img.png"1x,"img.png"2x,url("img.png")3x); + a189: image-set(url("img.png")1x,"img.png"2x,"img.png"3x); + a190: image-set("img.png"1x); + a191: image-set("img.png"1x/* test*/,/* test*/"img.png"2x); +} + +@supports (background-image: image-set("unknown.png"1x,"unknown.png"2x,"unknown.png"3x)) { + div { + a192: url("img.png"); + a193: image-set("img.png"1x); + } +} + +@supports (background-image: url("unknown.png" param(--test))) { + div { + a194: url("img.png"); + } +} + +@supports (background-image: url("unknown.png")) { + div { + a195: url("img.png"); + } +} + +@supports (display: grid) { + @media (min-width: 100px) { + @layer special { + div { + a196: url("img.png"); + } + } + } +} + +div { + a197: \u\r\l("img.png"); + a198: \image-\set("img.png"1x,"img.png"2x,"img.png"3x); + a199: \-webk\it-image-set("img.png"1x); + a200:-webkit-image-set("img.png"1x); +} + +div { + a201: src("http://www.example.com/pinkish.gif"); + --foo: "http://www.example.com/pinkish.gif"; + a202: src(var(--foo)); + a203: src("./img.png"); + a204: src("img.png"); +} + +div { + a205: url(alias-url.png); + a206: url(alias-url-1.png); + a208: url(external-url.png); + a208: url(external-url-2.png); + a209: url(unresolved.png); + a210: url(ignore.png); + a211: url("schema:test"); +} + +.filtered-element { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url("./filters.svg#myFilter"); /* Applying the SVG filter */ +} + +.filtered-element-old-url { + width: 200px; + height: 100px; + background-color: lightblue; + margin: 50px; + filter: url(./filters.svg#myFilter); /* Applying the SVG filter */ +} + + diff --git a/test/configCases/css/url/test.config.js b/test/configCases/css/url/test.config.js new file mode 100644 index 00000000000..dbfd4316888 --- /dev/null +++ b/test/configCases/css/url/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = `bundle${scope.__STATS_I__}.css`; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/url/unknown.png b/test/configCases/css/url/unknown.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/url/unknown.png differ diff --git a/test/configCases/css/url/webpack.config.js b/test/configCases/css/url/webpack.config.js new file mode 100644 index 00000000000..b74f5f43ec6 --- /dev/null +++ b/test/configCases/css/url/webpack.config.js @@ -0,0 +1,49 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + target: "web", + mode: "development", + devtool: false, + experiments: { + css: true + }, + output: { + assetModuleFilename: "[name].[hash][ext][query][fragment]" + }, + resolve: { + alias: { + "alias-url.png": path.resolve(__dirname, "img.png"), + "alias-url-1.png": false + } + }, + externals: { + "external-url.png": "asset ./img.png", + "external-url-2.png": "test", + "schema:test": "asset 'img.png'" + }, + plugins: [new webpack.IgnorePlugin({ resourceRegExp: /ignore\.png/ })] + }, + { + target: "web", + mode: "development", + devtool: false, + experiments: { + css: true + }, + module: { + parser: { + css: { + url: false + } + } + }, + output: { + assetModuleFilename: "[name].[hash][ext][query][fragment]" + } + } +]; diff --git a/test/configCases/css/webpack-ignore/__snapshots__/ConfigCacheTest.snap b/test/configCases/css/webpack-ignore/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..1098054d070 --- /dev/null +++ b/test/configCases/css/webpack-ignore/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,325 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases css webpack-ignore exported tests should compile 1`] = ` +"/*!***********************!*\\\\ + !*** css ./basic.css ***! + \\\\***********************/ +.class { + color: red; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +@import/* webpackIgnore: true */url(./basic.css); +@import /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: false */ /* webpackIgnore: true */ url(./basic.css); + + +@import /* webpackIgnore: true */ url(./basic.css); + +/** Resolved **/ +/** Resolved **/ + +.class { + color: red; + background: /* webpackIgnore: true */ url(\\"./url/img.png\\"), url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background:/* webpackIgnore: true */url(\\"./url/img.png\\"), url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: + /* webpackIgnore: true */ + url(\\"./url/img.png\\"), + url(09a1a1112c577c279435.png); +} + + +.class { + color: red; + background: + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ + url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: /* webpackIgnore: true */ url(\\"./url/img.png\\"), /* webpackIgnore: false */ url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: false */ url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"), /* webpackIgnore: false */ url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: /* webpackIgnore: false */ url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: /* webpackIgnore: true */ /* webpackIgnore: false */ url(09a1a1112c577c279435.png), url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */ /* webpackIgnore: false */ url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: false */ /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + background: + url(09a1a1112c577c279435.png), + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ url(\\"./url/img.png\\"), + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ url(\\"./url/img.png\\"), + url(09a1a1112c577c279435.png), + url(09a1a1112c577c279435.png), + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ + url(\\"./url/img.png\\"); +} + +@font-face { + font-family: \\"Roboto\\"; + src: /* webpackIgnore: true */ url(\\"./fonts/Roboto-Regular.eot\\"); + src: + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.eot#iefix\\") format(\\"embedded-opentype\\"), + url(5edda27bb1aea976c9b5.woff2) format(\\"woff\\"), + url(6af79dbd35e55450b9a6.woff) format(\\"woff\\"), + url(0e1fae5a09bac1b8f8da.ttf) format(\\"truetype\\"), + url(5a6b5cdda16adcae27d1.svg#Roboto-Regular) format(\\"svg\\"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: \\"Roboto\\"; + src: /* webpackIgnore: true */ url(\\"./fonts/Roboto-Regular.eot\\"); + src: + url(19ce07bdb1cb5ba16ea8.eot#iefix) format(\\"embedded-opentype\\"), + url(5edda27bb1aea976c9b5.woff2) format(\\"woff\\"), + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.woff\\") + format(\\"woff\\"), + url(0e1fae5a09bac1b8f8da.ttf) format(\\"truetype\\"), + url(5a6b5cdda16adcae27d1.svg#Roboto-Regular) format(\\"svg\\"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: \\"Roboto\\"; + src: url(19ce07bdb1cb5ba16ea8.eot); + src: + url(19ce07bdb1cb5ba16ea8.eot#iefix) format(\\"embedded-opentype\\"), + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.woff2\\") format(\\"woff\\"), + url(6af79dbd35e55450b9a6.woff) format(\\"woff\\"), + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.ttf\\") format(\\"truetype\\"), + url(5a6b5cdda16adcae27d1.svg#Roboto-Regular) format(\\"svg\\"); + font-weight: 400; + font-style: normal; +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + + + url(./url/img.png) 2x, + url(09a1a1112c577c279435.png) 3x, + url(09a1a1112c577c279435.png) 4x + ); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(09a1a1112c577c279435.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ),/*webpackIgnore: true*/url('./url/img.png'); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(09a1a1112c577c279435.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ), + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png), + /*webpackIgnore: true*/ + url('./url/img.png'); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(09a1a1112c577c279435.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ), + url(09a1a1112c577c279435.png); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + url(./url/img.png) 2x, + url(09a1a1112c577c279435.png) 3x, + /*webpackIgnore: true*/ + url(./url/img.png) 5x + ); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + './url/img.png' 2x, + url(09a1a1112c577c279435.png) 3x, + /*webpackIgnore: true*/ + './url/img.png' 5x + ); +} + +.class { + background-image: image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 4x, + + + /*webpackIgnore: true*/ + + + url(./url/img.png) 5x + ); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png)/* webpackIgnore: true */, url(09a1a1112c577c279435.png); +} + +.class { + background-image: + image-set( + url(09a1a1112c577c279435.png) 2x /*webpackIgnore: true*/, + url(09a1a1112c577c279435.png) /*webpackIgnore: true*/ 3x, + url(09a1a1112c577c279435.png) 4x /*webpackIgnore: true*/, + /*webpackIgnore: true*/url(./url/img.png) 5x, + /*webpackIgnore: true*/ url(./url/img.png) 6x, + /*webpackIgnore: true*/ + url(./url/img.png) 7x, + url(09a1a1112c577c279435.png) 8x + ), + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png), + /*webpackIgnore: true*/ + url('./url/img.png'); +} + +@font-face { + font-family: \\"anticon\\"; + src: url(//at.alicdn.com/t/font_1434092639_4910953.eot?#iefix) format(\\"embedded-opentype\\"), + /* this comment is required */ + url(//at.alicdn.com/t/font_1434092639_4910953.woff) format(\\"woff\\"); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + url(\\"./url/img.png\\") 2x, + url(09a1a1112c577c279435.png) 3x, + /*webpackIgnore: true*/ + url(\\"./url/img.png\\") 4x + ); +} + +.class { + background-image: /* webpackIgnore: 1 */ url(09a1a1112c577c279435.png); + background-image: /* webpackIgnore: 1 */ url(09a1a1112c577c279435.png); + background-image: image-set(/* webpackIgnore: 1 */ url(09a1a1112c577c279435.png) 2x) +} + +.class { + background-image /*webpackIgnore: true*/ : url(09a1a1112c577c279435.png); + /*webpackIgnore: true*/ background-image: url(09a1a1112c577c279435.png); +} + +.class { + background-image:/*webpackIgnore: true*/ + + + + + + + + + + + url(./url/img.png); +} + +.class { + background-image: /***webpackIgnore: true***/ url(09a1a1112c577c279435.png); + background-image: /***webpackIgnore: true***/ url(09a1a1112c577c279435.png); + background-image: image-set(/***webpackIgnore: true***/ url(09a1a1112c577c279435.png) 2x) +} + + +/*# sourceMappingURL=bundle0.css.map*/" +`; diff --git a/test/configCases/css/webpack-ignore/__snapshots__/ConfigTest.snap b/test/configCases/css/webpack-ignore/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..57ba90f7da4 --- /dev/null +++ b/test/configCases/css/webpack-ignore/__snapshots__/ConfigTest.snap @@ -0,0 +1,325 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases css webpack-ignore exported tests should compile 1`] = ` +"/*!***********************!*\\\\ + !*** css ./basic.css ***! + \\\\***********************/ +.class { + color: red; +} + +/*!***********************!*\\\\ + !*** css ./style.css ***! + \\\\***********************/ +@import/* webpackIgnore: true */url(./basic.css); +@import /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: false */ /* webpackIgnore: true */ url(./basic.css); + + +@import /* webpackIgnore: true */ url(./basic.css); + +/** Resolved **/ +/** Resolved **/ + +.class { + color: red; + background: /* webpackIgnore: true */ url(\\"./url/img.png\\"), url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background:/* webpackIgnore: true */url(\\"./url/img.png\\"), url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: + /* webpackIgnore: true */ + url(\\"./url/img.png\\"), + url(09a1a1112c577c279435.png); +} + + +.class { + color: red; + background: + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ + url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: /* webpackIgnore: true */ url(\\"./url/img.png\\"), /* webpackIgnore: false */ url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: false */ url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"), /* webpackIgnore: false */ url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: /* webpackIgnore: false */ url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: /* webpackIgnore: true */ /* webpackIgnore: false */ url(09a1a1112c577c279435.png), url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */ /* webpackIgnore: false */ url(09a1a1112c577c279435.png); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: false */ /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + background: + url(09a1a1112c577c279435.png), + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ url(\\"./url/img.png\\"), + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ url(\\"./url/img.png\\"), + url(09a1a1112c577c279435.png), + url(09a1a1112c577c279435.png), + url(09a1a1112c577c279435.png), + /* webpackIgnore: true */ + url(\\"./url/img.png\\"); +} + +@font-face { + font-family: \\"Roboto\\"; + src: /* webpackIgnore: true */ url(\\"./fonts/Roboto-Regular.eot\\"); + src: + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.eot#iefix\\") format(\\"embedded-opentype\\"), + url(5edda27bb1aea976c9b5.woff2) format(\\"woff\\"), + url(6af79dbd35e55450b9a6.woff) format(\\"woff\\"), + url(0e1fae5a09bac1b8f8da.ttf) format(\\"truetype\\"), + url(5a6b5cdda16adcae27d1.svg#Roboto-Regular) format(\\"svg\\"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: \\"Roboto\\"; + src: /* webpackIgnore: true */ url(\\"./fonts/Roboto-Regular.eot\\"); + src: + url(19ce07bdb1cb5ba16ea8.eot#iefix) format(\\"embedded-opentype\\"), + url(5edda27bb1aea976c9b5.woff2) format(\\"woff\\"), + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.woff\\") + format(\\"woff\\"), + url(0e1fae5a09bac1b8f8da.ttf) format(\\"truetype\\"), + url(5a6b5cdda16adcae27d1.svg#Roboto-Regular) format(\\"svg\\"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: \\"Roboto\\"; + src: url(19ce07bdb1cb5ba16ea8.eot); + src: + url(19ce07bdb1cb5ba16ea8.eot#iefix) format(\\"embedded-opentype\\"), + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.woff2\\") format(\\"woff\\"), + url(6af79dbd35e55450b9a6.woff) format(\\"woff\\"), + /* webpackIgnore: true */ + url(\\"./fonts/Roboto-Regular.ttf\\") format(\\"truetype\\"), + url(5a6b5cdda16adcae27d1.svg#Roboto-Regular) format(\\"svg\\"); + font-weight: 400; + font-style: normal; +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + + + url(./url/img.png) 2x, + url(09a1a1112c577c279435.png) 3x, + url(09a1a1112c577c279435.png) 4x + ); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(09a1a1112c577c279435.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ),/*webpackIgnore: true*/url('./url/img.png'); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(09a1a1112c577c279435.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ), + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png), + /*webpackIgnore: true*/ + url('./url/img.png'); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(09a1a1112c577c279435.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ), + url(09a1a1112c577c279435.png); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + url(./url/img.png) 2x, + url(09a1a1112c577c279435.png) 3x, + /*webpackIgnore: true*/ + url(./url/img.png) 5x + ); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + './url/img.png' 2x, + url(09a1a1112c577c279435.png) 3x, + /*webpackIgnore: true*/ + './url/img.png' 5x + ); +} + +.class { + background-image: image-set( + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png) 4x, + + + /*webpackIgnore: true*/ + + + url(./url/img.png) 5x + ); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png), /* webpackIgnore: true */ url(\\"./url/img.png\\"); +} + +.class { + color: red; + background: url(09a1a1112c577c279435.png)/* webpackIgnore: true */, url(09a1a1112c577c279435.png); +} + +.class { + background-image: + image-set( + url(09a1a1112c577c279435.png) 2x /*webpackIgnore: true*/, + url(09a1a1112c577c279435.png) /*webpackIgnore: true*/ 3x, + url(09a1a1112c577c279435.png) 4x /*webpackIgnore: true*/, + /*webpackIgnore: true*/url(./url/img.png) 5x, + /*webpackIgnore: true*/ url(./url/img.png) 6x, + /*webpackIgnore: true*/ + url(./url/img.png) 7x, + url(09a1a1112c577c279435.png) 8x + ), + /*webpackIgnore: false*/ + url(09a1a1112c577c279435.png), + /*webpackIgnore: true*/ + url('./url/img.png'); +} + +@font-face { + font-family: \\"anticon\\"; + src: url(//at.alicdn.com/t/font_1434092639_4910953.eot?#iefix) format(\\"embedded-opentype\\"), + /* this comment is required */ + url(//at.alicdn.com/t/font_1434092639_4910953.woff) format(\\"woff\\"); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + url(\\"./url/img.png\\") 2x, + url(09a1a1112c577c279435.png) 3x, + /*webpackIgnore: true*/ + url(\\"./url/img.png\\") 4x + ); +} + +.class { + background-image: /* webpackIgnore: 1 */ url(09a1a1112c577c279435.png); + background-image: /* webpackIgnore: 1 */ url(09a1a1112c577c279435.png); + background-image: image-set(/* webpackIgnore: 1 */ url(09a1a1112c577c279435.png) 2x) +} + +.class { + background-image /*webpackIgnore: true*/ : url(09a1a1112c577c279435.png); + /*webpackIgnore: true*/ background-image: url(09a1a1112c577c279435.png); +} + +.class { + background-image:/*webpackIgnore: true*/ + + + + + + + + + + + url(./url/img.png); +} + +.class { + background-image: /***webpackIgnore: true***/ url(09a1a1112c577c279435.png); + background-image: /***webpackIgnore: true***/ url(09a1a1112c577c279435.png); + background-image: image-set(/***webpackIgnore: true***/ url(09a1a1112c577c279435.png) 2x) +} + + +/*# sourceMappingURL=bundle0.css.map*/" +`; diff --git a/test/configCases/css/webpack-ignore/basic.css b/test/configCases/css/webpack-ignore/basic.css new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/css/webpack-ignore/basic.css @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.eot b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.eot new file mode 100644 index 00000000000..5f4be13f2be Binary files /dev/null and b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.eot differ diff --git a/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.svg b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.svg new file mode 100644 index 00000000000..311d46d824f --- /dev/null +++ b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.svg @@ -0,0 +1,2606 @@ + + + + +Created by FontForge 20170731 at Wed Mar 29 15:03:00 2017 + By Aleksey,,, +Copyright 2011 Google Inc. All Rights Reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.ttf b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.ttf new file mode 100644 index 00000000000..2880e77f472 Binary files /dev/null and b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.ttf differ diff --git a/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.woff b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.woff new file mode 100644 index 00000000000..33c01a14747 Binary files /dev/null and b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.woff differ diff --git a/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.woff2 b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.woff2 new file mode 100644 index 00000000000..c5773af3825 Binary files /dev/null and b/test/configCases/css/webpack-ignore/fonts/Roboto-Regular.woff2 differ diff --git a/test/configCases/css/webpack-ignore/img.png b/test/configCases/css/webpack-ignore/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/webpack-ignore/img.png differ diff --git a/test/configCases/css/webpack-ignore/index.js b/test/configCases/css/webpack-ignore/index.js new file mode 100644 index 00000000000..f323ebfc4d7 --- /dev/null +++ b/test/configCases/css/webpack-ignore/index.js @@ -0,0 +1,9 @@ +import "./style.css"; + +it("should compile", done => { + const links = document.getElementsByTagName("link"); + const css = links[1].sheet.css; + + expect(css).toMatchSnapshot(); + done(); +}); diff --git a/test/configCases/css/webpack-ignore/style.css b/test/configCases/css/webpack-ignore/style.css new file mode 100644 index 00000000000..54d1fb42586 --- /dev/null +++ b/test/configCases/css/webpack-ignore/style.css @@ -0,0 +1,313 @@ +@import/* webpackIgnore: true */url(./basic.css); +@import /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ /* webpackIgnore: true */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: false */ /* webpackIgnore: true */ url(./basic.css); + + +@import /* webpackIgnore: true */ url(./basic.css); + +/** Resolved **/ +@import /* webpackIgnore: false */ url(./basic.css); +@import /****webpackIgnore: false***/ url(./basic.css); +@import /* * * * webpackIgnore: false * * */ url(./basic.css); +@import /* webpackIgnore: false */ /* webpackIgnore: true */ /* webpackIgnore: false */ url(./basic.css); +@import /* webpackIgnore: 1 */ url(./basic.css); +/** Resolved **/ + +.class { + color: red; + background: /* webpackIgnore: true */ url("./url/img.png"), url("./url/img.png"); +} + +.class { + color: red; + background:/* webpackIgnore: true */url("./url/img.png"), url("./url/img.png"); +} + +.class { + color: red; + background: url("./url/img.png"), /* webpackIgnore: true */ url("./url/img.png"); +} + +.class { + color: red; + background: + /* webpackIgnore: true */ + url("./url/img.png"), + url("./url/img.png"); +} + + +.class { + color: red; + background: + url("./url/img.png"), + /* webpackIgnore: true */ + url("./url/img.png"); +} + +.class { + color: red; + background: /* webpackIgnore: true */ url("./url/img.png"), /* webpackIgnore: false */ url("./url/img.png"); +} + +.class { + color: red; + background: url("./url/img.png"), /* webpackIgnore: false */ url("./url/img.png"), /* webpackIgnore: true */ url("./url/img.png"), /* webpackIgnore: false */ url("./url/img.png"); +} + +.class { + color: red; + background: /* webpackIgnore: false */ url("./url/img.png"), /* webpackIgnore: true */ url("./url/img.png"); +} + +.class { + color: red; + background: /* webpackIgnore: true */ /* webpackIgnore: false */ url("./url/img.png"), url("./url/img.png"); +} + +.class { + color: red; + background: url("./url/img.png"), /* webpackIgnore: true */ /* webpackIgnore: false */ url("./url/img.png"); +} + +.class { + color: red; + background: url("./url/img.png"), /* webpackIgnore: false */ /* webpackIgnore: true */ url("./url/img.png"); +} + +.class { + background: + url("./url/img.png"), + url("./url/img.png"), + /* webpackIgnore: true */ url("./url/img.png"), + url("./url/img.png"), + /* webpackIgnore: true */ url("./url/img.png"), + url("./url/img.png"), + url("./url/img.png"), + url("./url/img.png"), + /* webpackIgnore: true */ + url("./url/img.png"); +} + +@font-face { + font-family: "Roboto"; + src: /* webpackIgnore: true */ url("./fonts/Roboto-Regular.eot"); + src: + /* webpackIgnore: true */ + url("./fonts/Roboto-Regular.eot#iefix") format("embedded-opentype"), + url("./fonts/Roboto-Regular.woff2") format("woff"), + url("./fonts/Roboto-Regular.woff") format("woff"), + url("./fonts/Roboto-Regular.ttf") format("truetype"), + url("./fonts/Roboto-Regular.svg#Roboto-Regular") format("svg"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: "Roboto"; + src: /* webpackIgnore: true */ url("./fonts/Roboto-Regular.eot"); + src: + url("./fonts/Roboto-Regular.eot#iefix") format("embedded-opentype"), + url("./fonts/Roboto-Regular.woff2") format("woff"), + /* webpackIgnore: true */ + url("./fonts/Roboto-Regular.woff") + format("woff"), + url("./fonts/Roboto-Regular.ttf") format("truetype"), + url("./fonts/Roboto-Regular.svg#Roboto-Regular") format("svg"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: "Roboto"; + src: url("./fonts/Roboto-Regular.eot"); + src: + url("./fonts/Roboto-Regular.eot#iefix") format("embedded-opentype"), + /* webpackIgnore: true */ + url("./fonts/Roboto-Regular.woff2") format("woff"), + url("./fonts/Roboto-Regular.woff") format("woff"), + /* webpackIgnore: true */ + url("./fonts/Roboto-Regular.ttf") format("truetype"), + url("./fonts/Roboto-Regular.svg#Roboto-Regular") format("svg"); + font-weight: 400; + font-style: normal; +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + + + url(./url/img.png) 2x, + url(./url/img.png) 3x, + url(./url/img.png) 4x + ); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(./url/img.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(./url/img.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ),/*webpackIgnore: true*/url('./url/img.png'); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(./url/img.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(./url/img.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ), + /*webpackIgnore: false*/ + url('./url/img.png'), + /*webpackIgnore: true*/ + url('./url/img.png'); +} + +.class { + background-image: + image-set( + /*webpackIgnore: false*/ + url(./url/img.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + url(./url/img.png) 4x, + /*webpackIgnore: false */ + /*webpackIgnore: true */ + url(./url/img.png) 5x + ), + url('./url/img.png'); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + url(./url/img.png) 2x, + url(./url/img.png) 3x, + /*webpackIgnore: true*/ + url(./url/img.png) 5x + ); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + './url/img.png' 2x, + './url/img.png' 3x, + /*webpackIgnore: true*/ + './url/img.png' 5x + ); +} + +.class { + background-image: image-set( + /*webpackIgnore: false*/ + url(./url/img.png) 2x, + /*webpackIgnore: true*/ + url(./url/img.png) 3x, + /*webpackIgnore: false*/ + url(./url/img.png) 4x, + + + /*webpackIgnore: true*/ + + + url(./url/img.png) 5x + ); +} + +.class { + color: red; + background: url("./url/img.png"), /* webpackIgnore: true */url("./url/img.png"); +} + +.class { + color: red; + background: url("./url/img.png"), /* webpackIgnore: true */ url("./url/img.png"); +} + +.class { + color: red; + background: url("./url/img.png")/* webpackIgnore: true */, url("./url/img.png"); +} + +.class { + background-image: + image-set( + url(./url/img.png) 2x /*webpackIgnore: true*/, + url(./url/img.png) /*webpackIgnore: true*/ 3x, + url(./url/img.png) 4x /*webpackIgnore: true*/, + /*webpackIgnore: true*/url(./url/img.png) 5x, + /*webpackIgnore: true*/ url(./url/img.png) 6x, + /*webpackIgnore: true*/ + url(./url/img.png) 7x, + url(./url/img.png) 8x + ), + /*webpackIgnore: false*/ + url('./url/img.png'), + /*webpackIgnore: true*/ + url('./url/img.png'); +} + +@font-face { + font-family: "anticon"; + src: url("//at.alicdn.com/t/font_1434092639_4910953.eot?#iefix") format("embedded-opentype"), + /* this comment is required */ + url("//at.alicdn.com/t/font_1434092639_4910953.woff") format("woff"); +} + +.class { + background-image: image-set( + /*webpackIgnore: true*/ + url("./url/img.png") 2x, + url("./url/img.png") 3x, + /*webpackIgnore: true*/ + url("./url/img.png") 4x + ); +} + +.class { + background-image: /* webpackIgnore: 1 */ url("./url/img.png"); + background-image: /* webpackIgnore: 1 */ url(./url/img.png); + background-image: image-set(/* webpackIgnore: 1 */ url("./url/img.png") 2x) +} + +.class { + background-image /*webpackIgnore: true*/ : url(./url/img.png); + /*webpackIgnore: true*/ background-image: url('./url/img.png'); +} + +.class { + background-image:/*webpackIgnore: true*/ + + + + + + + + + + + url(./url/img.png); +} + +.class { + background-image: /***webpackIgnore: true***/ url(./url/img.png); + background-image: /***webpackIgnore: true***/ url("./url/img.png"); + background-image: image-set(/***webpackIgnore: true***/ url("./url/img.png") 2x) +} diff --git a/test/configCases/css/webpack-ignore/test.config.js b/test/configCases/css/webpack-ignore/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/css/webpack-ignore/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/css/webpack-ignore/url/img.png b/test/configCases/css/webpack-ignore/url/img.png new file mode 100644 index 00000000000..b74b839e2b8 Binary files /dev/null and b/test/configCases/css/webpack-ignore/url/img.png differ diff --git a/test/configCases/css/webpack-ignore/warnings.js b/test/configCases/css/webpack-ignore/warnings.js new file mode 100644 index 00000000000..41d91ac4814 --- /dev/null +++ b/test/configCases/css/webpack-ignore/warnings.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = [ + /Compilation error while processing magic comment\(-s\): \/\*\*\*\*webpackIgnore: false\*\*\*\//, + /Compilation error while processing magic comment\(-s\): \/\* {3}\* {3}\* {3}\* {3}webpackIgnore: {3}false {3}\* {3}\* {3}\*\//, + /`webpackIgnore` expected a boolean, but received: 1\./, + /`webpackIgnore` expected a boolean, but received: 1\./, + /`webpackIgnore` expected a boolean, but received: 1\./, + /`webpackIgnore` expected a boolean, but received: 1\./, + /Compilation error while processing magic comment\(-s\): \/\*\*\*webpackIgnore: {2}true\*\*\*\//, + /Compilation error while processing magic comment\(-s\): \/\*\*\*webpackIgnore: {2}true\*\*\*\//, + /Compilation error while processing magic comment\(-s\): \/\*\*\*webpackIgnore: {2}true\*\*\*\//, + /Compilation error while processing magic comment\(-s\): \/\*\*\*webpackIgnore: {2}true\*\*\*\// +]; diff --git a/test/configCases/css/webpack-ignore/webpack.config.js b/test/configCases/css/webpack-ignore/webpack.config.js new file mode 100644 index 00000000000..3cc31116df2 --- /dev/null +++ b/test/configCases/css/webpack-ignore/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + experiments: { + css: true + } +}; diff --git a/test/configCases/css/webworker/base.modules.css b/test/configCases/css/webworker/base.modules.css new file mode 100644 index 00000000000..3b398ec9b5a --- /dev/null +++ b/test/configCases/css/webworker/base.modules.css @@ -0,0 +1,3 @@ +.base { + display: block; +} diff --git a/test/configCases/css/webworker/index.js b/test/configCases/css/webworker/index.js new file mode 100644 index 00000000000..15e714486db --- /dev/null +++ b/test/configCases/css/webworker/index.js @@ -0,0 +1,6 @@ +import * as style from "./style.modules.css"; + +it("should allow to import a css module", () => { + expect(style.header).toContain("header"); + expect(style.header).toContain("base"); +}); diff --git a/test/configCases/css/webworker/style.modules.css b/test/configCases/css/webworker/style.modules.css new file mode 100644 index 00000000000..371dbbae0cd --- /dev/null +++ b/test/configCases/css/webworker/style.modules.css @@ -0,0 +1,4 @@ +.header { + composes: base from "./base.modules.css"; + color: red; +} diff --git a/test/configCases/css/webworker/webpack.config.js b/test/configCases/css/webworker/webpack.config.js new file mode 100644 index 00000000000..d468b277737 --- /dev/null +++ b/test/configCases/css/webworker/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "webworker", + mode: "development", + devtool: false, + experiments: { + css: true + } +}; diff --git a/test/configCases/custom-hash-function/xxhash/webpack.config.js b/test/configCases/custom-hash-function/xxhash/webpack.config.js deleted file mode 100644 index b2d734eaba4..00000000000 --- a/test/configCases/custom-hash-function/xxhash/webpack.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = [ - { - output: { - hashFunction: require("xxhashjs").h32 - } - } -]; diff --git a/test/configCases/custom-modules/_files/data.toml b/test/configCases/custom-modules/_files/data.toml new file mode 100644 index 00000000000..bf6c9dd3363 --- /dev/null +++ b/test/configCases/custom-modules/_files/data.toml @@ -0,0 +1,7 @@ +title = "TOML Example" + +[owner] +name = "Tom Preston-Werner" +organization = "GitHub" +bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." +dob = 1979-05-27T07:32:00Z diff --git a/test/configCases/custom-modules/json-custom/index.js b/test/configCases/custom-modules/json-custom/index.js new file mode 100644 index 00000000000..adad70f603c --- /dev/null +++ b/test/configCases/custom-modules/json-custom/index.js @@ -0,0 +1,13 @@ +import toml from "../_files/data.toml"; + +it("should transform toml to json", () => { + expect(toml).toMatchObject({ + title: "TOML Example", + owner: { + name: 'Tom Preston-Werner', + organization: 'GitHub', + bio: 'GitHub Cofounder & CEO\nLikes tater tots and beer.', + dob: '1979-05-27T07:32:00.000Z' + } + }); +}); diff --git a/test/configCases/custom-modules/json-custom/webpack.config.js b/test/configCases/custom-modules/json-custom/webpack.config.js new file mode 100644 index 00000000000..893ead92146 --- /dev/null +++ b/test/configCases/custom-modules/json-custom/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +const toml = require("toml"); + +/** @typedef {import("../../../../").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */ + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + mode: "development", + module: { + rules: [ + { + test: /\.toml$/, + type: "json", + /** @type {ParserOptionsByModuleTypeKnown['json']} */ + parser: { + parse(input) { + // eslint-disable-next-line prefer-rest-params + expect(arguments).toHaveLength(1); + return toml.parse(input); + } + } + } + ] + } + } +]; diff --git a/test/configCases/custom-source-type/localization/content.loc b/test/configCases/custom-source-type/localization/content.loc new file mode 100644 index 00000000000..c00bd06c6f8 --- /dev/null +++ b/test/configCases/custom-source-type/localization/content.loc @@ -0,0 +1,3 @@ +{ + "value": "Translated text" +} diff --git a/test/configCases/custom-source-type/localization/content2.loc b/test/configCases/custom-source-type/localization/content2.loc new file mode 100644 index 00000000000..6feebdf4b53 --- /dev/null +++ b/test/configCases/custom-source-type/localization/content2.loc @@ -0,0 +1,3 @@ +{ + "value": "Translated text 2" +} diff --git a/test/configCases/custom-source-type/localization/deprecations.js b/test/configCases/custom-source-type/localization/deprecations.js new file mode 100644 index 00000000000..854cc588ed2 --- /dev/null +++ b/test/configCases/custom-source-type/localization/deprecations.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [{ code: /DEP_WEBPACK_CHUNK_TEMPLATE_RENDER_MANIFEST/ }]; diff --git a/test/configCases/custom-source-type/localization/index.js b/test/configCases/custom-source-type/localization/index.js new file mode 100644 index 00000000000..36cde08e00e --- /dev/null +++ b/test/configCases/custom-source-type/localization/index.js @@ -0,0 +1,62 @@ +it("should generate the correct output files", () => { + // It should not generate a JS chunk file for the localization-only chunk + expect( + __STATS__.children[INDEX].assets.map(asset => asset.name).sort() + ).toEqual( + [ + NORMAL1 && `286.bundle${INDEX}.js`, + NORMAL2 && `678.bundle${INDEX}.js`, + `bundle${INDEX}.js`, + "localization-248.js", + NORMAL1 && "localization-286.js", + NORMAL2 && "localization-678.js", + CONTENT2 && "localization-702.js" + ].filter(Boolean) + ); +}); + +it("should load a chunk with only the custom source type", () => { + return import("./content.loc").then(({ default: content }) => { + expect(content).toEqual({ + value: "Translated text" + }); + }); +}); + +if (CONTENT2) { + it("should load a chunk with only the custom source type", () => { + return import("./content2.loc").then(({ default: content }) => { + expect(content).toEqual({ + value: "Translated text 2" + }); + }); + }); +} + +if (NORMAL1) { + it("should still load normal chunks", () => { + if (TARGET === "web") { + Promise.resolve().then(() => { + __non_webpack_require__(`./286.bundle${INDEX}.js`); + }); + } + + return import("./normal.js").then(({ default: value }) => { + expect(value).toBe(42); + }); + }); +} + +if (NORMAL2) { + it("should still another load normal chunks", () => { + if (TARGET === "web") { + Promise.resolve().then(() => { + __non_webpack_require__(`./678.bundle${INDEX}.js`); + }); + } + + return import("./normal2.js").then(({ default: value }) => { + expect(value).toBe(43); + }); + }); +} diff --git a/test/configCases/custom-source-type/localization/normal.js b/test/configCases/custom-source-type/localization/normal.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/custom-source-type/localization/normal.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/custom-source-type/localization/normal2.js b/test/configCases/custom-source-type/localization/normal2.js new file mode 100644 index 00000000000..8efc7299424 --- /dev/null +++ b/test/configCases/custom-source-type/localization/normal2.js @@ -0,0 +1 @@ +export default 43; diff --git a/test/configCases/custom-source-type/localization/webpack.config.js b/test/configCases/custom-source-type/localization/webpack.config.js new file mode 100644 index 00000000000..f5e1c48ee46 --- /dev/null +++ b/test/configCases/custom-source-type/localization/webpack.config.js @@ -0,0 +1,214 @@ +"use strict"; + +const { RawSource } = require("webpack-sources"); +const Generator = require("../../../../").Generator; +const RuntimeModule = require("../../../../").RuntimeModule; +const RuntimeGlobals = require("../../../../").RuntimeGlobals; +const Parser = require("../../../../").Parser; +const webpack = require("../../../../"); + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").ParserState} ParserState */ +/** @typedef {import("../../../../lib/Parser").PreparsedAst} PreparsedAst */ +/** @typedef {import("../../../../").Module} Module */ + +class LocalizationParser extends Parser { + /** + * @param {string | Buffer | PreparsedAst} source input source + * @param {ParserState} state state + * @returns {ParserState} state + */ + parse(source, state) { + if (typeof source !== "string") throw new Error("Unexpected input"); + const { module } = state; + /** @type {NonNullable} */ + (module.buildInfo).content = JSON.parse(source); + return state; + } +} + +const TYPES = new Set(["localization"]); + +/** + * @extends {Generator} + */ +class LocalizationGenerator extends Generator { + getTypes() { + return TYPES; + } + + /** @type {Generator["getSize"]} */ + getSize(module, type) { + return 42; + } + + /** @type {Generator["generate"]} */ + generate(module, { type }) { + return null; + } +} + +class LocalizationLoadingRuntimeModule extends RuntimeModule { + constructor() { + super("localization chunk loading", 10); + } + + /** + * @returns {string} runtime code + */ + generate() { + return ` +${RuntimeGlobals.ensureChunkHandlers}.localization = (chunkId, promises) => { + const data = require("./localization-" + chunkId + ".js"); + for(const moduleId of Object.keys(data)) { + ${RuntimeGlobals.moduleCache}[moduleId] = { + i: moduleId, + l: true, + exports: data[moduleId] + }; + } +}`; + } +} + +/** + * @type {{ TARGET: string, CONTENT2: boolean, NORMAL1: boolean, NORMAL2: boolean }[]} + */ +const definitions = ["node", "async-node", "web"].reduce( + (arr, target) => + // eslint-disable-next-line unicorn/prefer-spread + arr.concat([ + { + TARGET: JSON.stringify(target), + CONTENT2: false, + NORMAL1: true, + NORMAL2: false + }, + { + TARGET: JSON.stringify(target), + CONTENT2: true, + NORMAL1: true, + NORMAL2: false + }, + { + TARGET: JSON.stringify(target), + CONTENT2: false, + NORMAL1: true, + NORMAL2: true + }, + { + TARGET: JSON.stringify(target), + CONTENT2: true, + NORMAL1: true, + NORMAL2: true + }, + { + TARGET: JSON.stringify(target), + CONTENT2: true, + NORMAL1: false, + NORMAL2: false + }, + { + TARGET: JSON.stringify(target), + CONTENT2: false, + NORMAL1: false, + NORMAL2: false + } + ]), + /** @type {{ TARGET: string, CONTENT2: boolean, NORMAL1: boolean, NORMAL2: boolean }[]} */ + ([]) +); + +module.exports = definitions.map((defs, i) => ({ + module: { + rules: [ + { + test: /\.loc$/, + type: "localization" + } + ] + }, + target: JSON.parse(defs.TARGET), + plugins: [ + new webpack.DefinePlugin(defs), + new webpack.DefinePlugin({ INDEX: i }), + /** + * @param {Compiler} compiler the compiler + */ + (compiler) => { + compiler.hooks.thisCompilation.tap( + "LocalizationPlugin", + (compilation, { normalModuleFactory }) => { + normalModuleFactory.hooks.createParser + .for("localization") + .tap("LocalizationPlugin", () => new LocalizationParser()); + + normalModuleFactory.hooks.createGenerator + .for("localization") + .tap("LocalizationPlugin", () => new LocalizationGenerator()); + + compilation.chunkTemplate.hooks.renderManifest.tap( + "LocalizationPlugin", + (result, { chunk, chunkGraph }) => { + /** @type {Module[]} */ + const localizationModules = []; + for (const module of chunkGraph.getChunkModulesIterable(chunk)) { + if (module.getSourceTypes().has("localization")) { + localizationModules.push(module); + } + } + + result.push({ + render: () => { + /** @type {Record} */ + const data = {}; + for (const module of localizationModules) { + data[ + /** @type {number | string} */ + (chunkGraph.getModuleId(module)) + ] = + /** @type {NonNullable} */ + (module.buildInfo).content; + } + return new RawSource( + `module.exports = ${JSON.stringify(data)}` + ); + }, + filenameTemplate: "localization-[id].js", + pathOptions: { + chunk, + contentHashType: "localization" + }, + identifier: `localizationchunk${chunk.id}`, + hash: chunk.hash + }); + + return result; + } + ); + + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.ensureChunkHandlers) + .tap("LocalizationPlugin", (chunk, set) => { + const chunkGraph = compilation.chunkGraph; + if ( + !chunkGraph.hasModuleInGraph(chunk, (m) => + m.type.startsWith("localization") + ) + ) { + return; + } + set.add(RuntimeGlobals.moduleCache); + compilation.addRuntimeModule( + chunk, + new LocalizationLoadingRuntimeModule() + ); + }); + } + ); + } + ], + node: { + __dirname: false + } +})); diff --git a/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/index.js b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/index.js new file mode 100644 index 00000000000..be12281baf0 --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/index.js @@ -0,0 +1,9 @@ +import { test, unused } from "./module"; + +it("should run the test", () => { + expect(test()).toEqual({ + used: "used", + unused: undefined + }); + expect(unused).toEqual(undefined); +}); diff --git a/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/module.js b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/module.js new file mode 100644 index 00000000000..8d9ec8267b9 --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/module.js @@ -0,0 +1,10 @@ +import { used, unused } from "./reference"; + +export function test() { + return { + used, + unused + }; +} + +export { unused } diff --git a/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/reference.js b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/reference.js new file mode 100644 index 00000000000..725c814ac8f --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/reference.js @@ -0,0 +1,3 @@ +export var used = "used"; + +export var unused = "unused"; diff --git a/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/webpack.config.js b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/webpack.config.js new file mode 100644 index 00000000000..9ff9ba31e3b --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export-scope-hoisting/webpack.config.js @@ -0,0 +1,56 @@ +"use strict"; + +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + usedExports: true, + concatenateModules: true, + sideEffects: false + }, + plugins: [ + function apply() { + this.hooks.compilation.tap( + "Test", + /** + * @param {Compilation} compilation the compilation + * @returns {void} + */ + (compilation) => { + compilation.hooks.dependencyReferencedExports.tap( + "Test", + (referencedExports, dep) => { + const module = + /** @type {Module} */ + (compilation.moduleGraph.getParentModule(dep)); + if (!module.identifier().endsWith("module.js")) { + return referencedExports; + } + const refModule = compilation.moduleGraph.getModule(dep); + if ( + refModule && + refModule.identifier().endsWith("reference.js") && + referencedExports.some( + (names) => + Array.isArray(names) && + names.length === 1 && + names[0] === "unused" + ) + ) { + return referencedExports.filter( + (names) => + (Array.isArray(names) && names.length !== 1) || + /** @type {string[]} */ + (names)[0] !== "unused" + ); + } + return referencedExports; + } + ); + } + ); + } + ] +}; diff --git a/test/configCases/deep-scope-analysis/remove-export/index.js b/test/configCases/deep-scope-analysis/remove-export/index.js new file mode 100644 index 00000000000..be12281baf0 --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export/index.js @@ -0,0 +1,9 @@ +import { test, unused } from "./module"; + +it("should run the test", () => { + expect(test()).toEqual({ + used: "used", + unused: undefined + }); + expect(unused).toEqual(undefined); +}); diff --git a/test/configCases/deep-scope-analysis/remove-export/module.js b/test/configCases/deep-scope-analysis/remove-export/module.js new file mode 100644 index 00000000000..8d9ec8267b9 --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export/module.js @@ -0,0 +1,10 @@ +import { used, unused } from "./reference"; + +export function test() { + return { + used, + unused + }; +} + +export { unused } diff --git a/test/configCases/deep-scope-analysis/remove-export/reference.js b/test/configCases/deep-scope-analysis/remove-export/reference.js new file mode 100644 index 00000000000..725c814ac8f --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export/reference.js @@ -0,0 +1,3 @@ +export var used = "used"; + +export var unused = "unused"; diff --git a/test/configCases/deep-scope-analysis/remove-export/webpack.config.js b/test/configCases/deep-scope-analysis/remove-export/webpack.config.js new file mode 100644 index 00000000000..33ca6f79ad0 --- /dev/null +++ b/test/configCases/deep-scope-analysis/remove-export/webpack.config.js @@ -0,0 +1,49 @@ +"use strict"; + +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + usedExports: true, + concatenateModules: false, + sideEffects: false + }, + plugins: [ + function apply() { + this.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.dependencyReferencedExports.tap( + "Test", + (referencedExports, dep) => { + const module = + /** @type {Module} */ + (compilation.moduleGraph.getParentModule(dep)); + if (!module.identifier().endsWith("module.js")) { + return referencedExports; + } + const refModule = compilation.moduleGraph.getModule(dep); + if ( + refModule && + refModule.identifier().endsWith("reference.js") && + referencedExports.some( + (names) => + Array.isArray(names) && + names.length === 1 && + names[0] === "unused" + ) + ) { + return referencedExports.filter( + (names) => + (Array.isArray(names) && names.length !== 1) || + /** @type {string[]} */ + (names)[0] !== "unused" + ); + } + return referencedExports; + } + ); + }); + } + ] +}; diff --git a/test/configCases/defaulter/immutable-config/webpack.config.js b/test/configCases/defaulter/immutable-config/webpack.config.js index ede6057b069..d9f963a8c35 100644 --- a/test/configCases/defaulter/immutable-config/webpack.config.js +++ b/test/configCases/defaulter/immutable-config/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { resolve: Object.freeze({}) // this fails to compile when the object is not cloned diff --git a/test/configCases/defer-import/async-in-graph-dynamic-import-context/entry.js b/test/configCases/defer-import/async-in-graph-dynamic-import-context/entry.js new file mode 100644 index 00000000000..817775dadd8 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph-dynamic-import-context/entry.js @@ -0,0 +1,15 @@ +let file; +file = "full-sync.js"; +const fullSync = await import(/* webpackDefer: true */ "../async-in-graph/" + file); +file = "async-mod.js"; +const asyncMod = await import(/* webpackDefer: true */ "../async-in-graph/" + file); +file = "deep-async.js"; +const deepAsync = await import(/* webpackDefer: true */ "../async-in-graph/" + file); +file = "reexport-async.js"; +const reexportAsync = await import(/* webpackDefer: true */ "../async-in-graph/" + file); + +__configCases__deferImport__proposal.push("START entry.js"); + +export default { fullSync, asyncMod, deepAsync, reexportAsync }; + +__configCases__deferImport__proposal.push("END entry.js"); diff --git a/test/configCases/defer-import/async-in-graph-dynamic-import-context/index.js b/test/configCases/defer-import/async-in-graph-dynamic-import-context/index.js new file mode 100644 index 00000000000..1daf89ef837 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph-dynamic-import-context/index.js @@ -0,0 +1,60 @@ +it("should compile", async () => { + debugger; + const logs = global.__configCases__deferImport__proposal = []; + + let mod = import("./entry.js"); + expect(mod).toBeInstanceOf(Promise); + + let { default: namespaces } = await mod; + + expect(logs).toEqual([ + "START async-mod-dep.js", + "END async-mod-dep.js", + "START async-mod.js", + "END async-mod.js", + "START deep-async-dep.js", + "END deep-async-dep.js", + "START reexport-async-dep-inner.js", + "END reexport-async-dep-inner.js", + "START entry.js", + "END entry.js" + ]); + logs.length = 0; + + let fullSyncX = namespaces.fullSync.x; + expect(fullSyncX).toBe(1); + expect(logs).toEqual([ + "START full-sync-dep.js", + "END full-sync-dep.js", + "START full-sync.js", + "END full-sync.js" + ]); + logs.length = 0; + + let asyncModX = namespaces.asyncMod.x; + expect(asyncModX).toBe(2); + expect(logs).toEqual([]); + + let deepAsyncX = namespaces.deepAsync.x; + expect(deepAsyncX).toBe(3); + expect(logs).toEqual([ + "START deep-async.js", + "END deep-async.js" + ]); + logs.length = 0; + + let reexportAsync = namespaces.reexportAsync.dep; + expect(reexportAsync).not.toBeInstanceOf(Promise); + expect(logs).toEqual([ + "START reexport-async.js", + "END reexport-async.js", + ]); + + logs.length = 0; + let reexportAsyncX = reexportAsync.x; + expect(reexportAsyncX).toBe(4); + expect(logs).toEqual([ + "START reexport-async-dep.js", + "END reexport-async-dep.js", + ]); +}); diff --git a/test/configCases/defer-import/async-in-graph-dynamic-import-context/webpack.config.js b/test/configCases/defer-import/async-in-graph-dynamic-import-context/webpack.config.js new file mode 100644 index 00000000000..604b8b0e6a7 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph-dynamic-import-context/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + mode: "none", + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/async-in-graph-dynamic-import/entry.js b/test/configCases/defer-import/async-in-graph-dynamic-import/entry.js new file mode 100644 index 00000000000..6bd923f6372 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph-dynamic-import/entry.js @@ -0,0 +1,10 @@ +const fullSync = await import(/* webpackDefer: true */ "../async-in-graph/full-sync.js"); +const asyncMod = await import(/* webpackDefer: true */ "../async-in-graph/async-mod.js"); +const deepAsync = await import(/* webpackDefer: true */ "../async-in-graph/deep-async.js"); +const reexportAsync = await import(/* webpackDefer: true */ "../async-in-graph/reexport-async.js"); + +__configCases__deferImport__proposal.push("START entry.js"); + +export default { fullSync, asyncMod, deepAsync, reexportAsync }; + +__configCases__deferImport__proposal.push("END entry.js"); diff --git a/test/configCases/defer-import/async-in-graph-dynamic-import/index.js b/test/configCases/defer-import/async-in-graph-dynamic-import/index.js new file mode 100644 index 00000000000..948056d243d --- /dev/null +++ b/test/configCases/defer-import/async-in-graph-dynamic-import/index.js @@ -0,0 +1,59 @@ +it("should compile", async () => { + const logs = global.__configCases__deferImport__proposal = []; + + let mod = import("./entry.js"); + expect(mod).toBeInstanceOf(Promise); + + let { default: namespaces } = await mod; + + expect(logs).toEqual([ + "START async-mod-dep.js", + "END async-mod-dep.js", + "START async-mod.js", + "END async-mod.js", + "START deep-async-dep.js", + "END deep-async-dep.js", + "START reexport-async-dep-inner.js", + "END reexport-async-dep-inner.js", + "START entry.js", + "END entry.js" + ]); + logs.length = 0; + + let fullSyncX = namespaces.fullSync.x; + expect(fullSyncX).toBe(1); + expect(logs).toEqual([ + "START full-sync-dep.js", + "END full-sync-dep.js", + "START full-sync.js", + "END full-sync.js" + ]); + logs.length = 0; + + let asyncModX = namespaces.asyncMod.x; + expect(asyncModX).toBe(2); + expect(logs).toEqual([]); + + let deepAsyncX = namespaces.deepAsync.x; + expect(deepAsyncX).toBe(3); + expect(logs).toEqual([ + "START deep-async.js", + "END deep-async.js" + ]); + logs.length = 0; + + let reexportAsync = namespaces.reexportAsync.dep; + expect(reexportAsync).not.toBeInstanceOf(Promise); + expect(logs).toEqual([ + "START reexport-async.js", + "END reexport-async.js", + ]); + + logs.length = 0; + let reexportAsyncX = reexportAsync.x; + expect(reexportAsyncX).toBe(4); + expect(logs).toEqual([ + "START reexport-async-dep.js", + "END reexport-async-dep.js", + ]); +}); diff --git a/test/configCases/defer-import/async-in-graph-dynamic-import/webpack.config.js b/test/configCases/defer-import/async-in-graph-dynamic-import/webpack.config.js new file mode 100644 index 00000000000..604b8b0e6a7 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph-dynamic-import/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + mode: "none", + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/async-in-graph/async-mod-dep.js b/test/configCases/defer-import/async-in-graph/async-mod-dep.js new file mode 100644 index 00000000000..cf35c00126c --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/async-mod-dep.js @@ -0,0 +1,4 @@ +export {}; + +__configCases__deferImport__proposal.push("START async-mod-dep.js"); +__configCases__deferImport__proposal.push("END async-mod-dep.js"); diff --git a/test/configCases/defer-import/async-in-graph/async-mod.js b/test/configCases/defer-import/async-in-graph/async-mod.js new file mode 100644 index 00000000000..8272fdbc377 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/async-mod.js @@ -0,0 +1,8 @@ +import "./async-mod-dep.js"; + +__configCases__deferImport__proposal.push("START async-mod.js"); + +await 0; +export let x = 2; + +__configCases__deferImport__proposal.push("END async-mod.js"); diff --git a/test/configCases/defer-import/async-in-graph/deep-async-dep.js b/test/configCases/defer-import/async-in-graph/deep-async-dep.js new file mode 100644 index 00000000000..2b4be49cf6e --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/deep-async-dep.js @@ -0,0 +1,5 @@ +export {}; + +__configCases__deferImport__proposal.push("START deep-async-dep.js"); +await 0; +__configCases__deferImport__proposal.push("END deep-async-dep.js"); diff --git a/test/configCases/defer-import/async-in-graph/deep-async.js b/test/configCases/defer-import/async-in-graph/deep-async.js new file mode 100644 index 00000000000..93957141044 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/deep-async.js @@ -0,0 +1,7 @@ +import "./deep-async-dep.js"; + +__configCases__deferImport__proposal.push("START deep-async.js"); + +export let x = 3; + +__configCases__deferImport__proposal.push("END deep-async.js"); diff --git a/test/configCases/defer-import/async-in-graph/entry.js b/test/configCases/defer-import/async-in-graph/entry.js new file mode 100644 index 00000000000..8a79ea54f27 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/entry.js @@ -0,0 +1,10 @@ +import * as fullSync from /* webpackDefer: true */ "./full-sync.js"; +import * as asyncMod from /* webpackDefer: true */ "./async-mod.js"; +import * as deepAsync from /* webpackDefer: true */ "./deep-async.js"; +import * as reexportAsync from /* webpackDefer: true */ "./reexport-async.js"; + +__configCases__deferImport__proposal.push("START entry.js"); + +export default { fullSync, asyncMod, deepAsync, reexportAsync }; + +__configCases__deferImport__proposal.push("END entry.js"); diff --git a/test/configCases/defer-import/async-in-graph/full-sync-dep.js b/test/configCases/defer-import/async-in-graph/full-sync-dep.js new file mode 100644 index 00000000000..931de924f3b --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/full-sync-dep.js @@ -0,0 +1,4 @@ +export {}; + +__configCases__deferImport__proposal.push("START full-sync-dep.js"); +__configCases__deferImport__proposal.push("END full-sync-dep.js"); diff --git a/test/configCases/defer-import/async-in-graph/full-sync.js b/test/configCases/defer-import/async-in-graph/full-sync.js new file mode 100644 index 00000000000..5e9870f980f --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/full-sync.js @@ -0,0 +1,7 @@ +import "./full-sync-dep.js"; + +__configCases__deferImport__proposal.push("START full-sync.js"); + +export let x = 1; + +__configCases__deferImport__proposal.push("END full-sync.js"); diff --git a/test/configCases/defer-import/async-in-graph/index.js b/test/configCases/defer-import/async-in-graph/index.js new file mode 100644 index 00000000000..ca7d658696a --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/index.js @@ -0,0 +1,64 @@ +it("should compile", async () => { + const logs = global.__configCases__deferImport__proposal = []; + + // change to other way if webpack in the future rejects require a TLA esm. + let mod = require("./entry.js"); + expect(mod).toBeInstanceOf(Promise); + + expect(logs).toEqual([ + "START async-mod-dep.js", + "END async-mod-dep.js", + "START async-mod.js", + "START deep-async-dep.js", + "START reexport-async-dep-inner.js" + ]); + logs.length = 0; + + let { default: namespaces } = await mod; + + expect(logs).toEqual([ + "END async-mod.js", + "END deep-async-dep.js", + "END reexport-async-dep-inner.js", + "START entry.js", + "END entry.js" + ]); + logs.length = 0; + + let fullSyncX = namespaces.fullSync.x; + expect(fullSyncX).toBe(1); + expect(logs).toEqual([ + "START full-sync-dep.js", + "END full-sync-dep.js", + "START full-sync.js", + "END full-sync.js" + ]); + logs.length = 0; + + let asyncModX = namespaces.asyncMod.x; + expect(asyncModX).toBe(2); + expect(logs).toEqual([]); + + let deepAsyncX = namespaces.deepAsync.x; + expect(deepAsyncX).toBe(3); + expect(logs).toEqual([ + "START deep-async.js", + "END deep-async.js" + ]); + logs.length = 0; + + let reexportAsync = namespaces.reexportAsync.dep; + expect(reexportAsync).not.toBeInstanceOf(Promise); + expect(logs).toEqual([ + "START reexport-async.js", + "END reexport-async.js", + ]); + + logs.length = 0; + let reexportAsyncX = reexportAsync.x; + expect(reexportAsyncX).toBe(4); + expect(logs).toEqual([ + "START reexport-async-dep.js", + "END reexport-async-dep.js", + ]); +}); diff --git a/test/configCases/defer-import/async-in-graph/reexport-async-dep-inner.js b/test/configCases/defer-import/async-in-graph/reexport-async-dep-inner.js new file mode 100644 index 00000000000..39c41c12127 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/reexport-async-dep-inner.js @@ -0,0 +1,5 @@ +__configCases__deferImport__proposal.push("START reexport-async-dep-inner.js"); + +export const x = await 4; + +__configCases__deferImport__proposal.push("END reexport-async-dep-inner.js"); diff --git a/test/configCases/defer-import/async-in-graph/reexport-async-dep.js b/test/configCases/defer-import/async-in-graph/reexport-async-dep.js new file mode 100644 index 00000000000..cf6844d359a --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/reexport-async-dep.js @@ -0,0 +1,4 @@ +export * from "./reexport-async-dep-inner.js"; + +__configCases__deferImport__proposal.push("START reexport-async-dep.js"); +__configCases__deferImport__proposal.push("END reexport-async-dep.js"); diff --git a/test/configCases/defer-import/async-in-graph/reexport-async.js b/test/configCases/defer-import/async-in-graph/reexport-async.js new file mode 100644 index 00000000000..d2a65b59398 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/reexport-async.js @@ -0,0 +1,7 @@ +import * as dep from /* webpackDefer: true */ "./reexport-async-dep.js"; + +__configCases__deferImport__proposal.push("START reexport-async.js"); + +export { dep }; + +__configCases__deferImport__proposal.push("END reexport-async.js"); diff --git a/test/configCases/defer-import/async-in-graph/webpack.config.js b/test/configCases/defer-import/async-in-graph/webpack.config.js new file mode 100644 index 00000000000..604b8b0e6a7 --- /dev/null +++ b/test/configCases/defer-import/async-in-graph/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + mode: "none", + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/comment-error/errors.js b/test/configCases/defer-import/comment-error/errors.js new file mode 100644 index 00000000000..e8663e87c7a --- /dev/null +++ b/test/configCases/defer-import/comment-error/errors.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = [ + [/used with `import \* as namespace from '...'`/], + [/used with `import \* as namespace from '...'`/], + [/used with `import \* as namespace from '...'`/], + [/is not a part of the Import Defer proposal/], + [/is not a part of the Import Defer proposal/] +]; diff --git a/test/configCases/defer-import/comment-error/index.js b/test/configCases/defer-import/comment-error/index.js new file mode 100644 index 00000000000..416cb1233b0 --- /dev/null +++ b/test/configCases/defer-import/comment-error/index.js @@ -0,0 +1,11 @@ +import { f } from /* webpackDefer: true */ "./mod.js"; // error +import f2 from /* webpackDefer: true */ "./mod.js"; // error +import * as f3 from /* webpackDefer: true */ "./mod.js"; +import f4, { f as f5 } from /* webpackDefer: true */ "./mod.js"; // error + +export * as f4 from /* webpackDefer: true */ "./mod.js"; // error +export { f as f5 } from /* webpackDefer: true */ "./mod.js"; // error + +export default [f, f2, f3, f4, f5]; + +export { f3 } diff --git a/test/configCases/defer-import/comment-error/mod.js b/test/configCases/defer-import/comment-error/mod.js new file mode 100644 index 00000000000..1b1caff7ada --- /dev/null +++ b/test/configCases/defer-import/comment-error/mod.js @@ -0,0 +1,2 @@ +export function f() {} +export default function f2() {} diff --git a/test/configCases/defer-import/comment-error/webpack.config.js b/test/configCases/defer-import/comment-error/webpack.config.js new file mode 100644 index 00000000000..c3897eb5054 --- /dev/null +++ b/test/configCases/defer-import/comment-error/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/concatenated-1/a.js b/test/configCases/defer-import/concatenated-1/a.js new file mode 100644 index 00000000000..95272f9b9d1 --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/a.js @@ -0,0 +1,3 @@ +import { a } from 'mod' + +Object.keys(a).forEach(() => { }) diff --git a/test/configCases/defer-import/concatenated-1/b.js b/test/configCases/defer-import/concatenated-1/b.js new file mode 100644 index 00000000000..f24e83240ab --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/b.js @@ -0,0 +1,3 @@ +import defer * as m from 'mod' + +Object.keys(m).forEach(() => {}) diff --git a/test/configCases/defer-import/concatenated-1/index.js b/test/configCases/defer-import/concatenated-1/index.js new file mode 100644 index 00000000000..2d28ac5c564 --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/index.js @@ -0,0 +1,3 @@ +it('should compile and load', () => { + require('./main.js'); +}) diff --git a/test/configCases/defer-import/concatenated-1/main.js b/test/configCases/defer-import/concatenated-1/main.js new file mode 100644 index 00000000000..0cc74268d38 --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/main.js @@ -0,0 +1,2 @@ +import './a' +import './b' diff --git a/test/configCases/defer-import/concatenated-1/node_modules/mod/index.js b/test/configCases/defer-import/concatenated-1/node_modules/mod/index.js new file mode 100644 index 00000000000..db83a43b6c7 --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/node_modules/mod/index.js @@ -0,0 +1 @@ +export { a } from './re-export' diff --git a/test/configCases/defer-import/concatenated-1/node_modules/mod/package.json b/test/configCases/defer-import/concatenated-1/node_modules/mod/package.json new file mode 100644 index 00000000000..78addbdd66a --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/node_modules/mod/package.json @@ -0,0 +1,5 @@ +{ + "sideEffects": false, + "main": "./index.js", + "name": "mod" +} diff --git a/test/configCases/defer-import/concatenated-1/node_modules/mod/re-export.js b/test/configCases/defer-import/concatenated-1/node_modules/mod/re-export.js new file mode 100644 index 00000000000..6a3115689cb --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/node_modules/mod/re-export.js @@ -0,0 +1,3 @@ +export function a() { + +} diff --git a/test/configCases/defer-import/concatenated-1/webpack.config.js b/test/configCases/defer-import/concatenated-1/webpack.config.js new file mode 100644 index 00000000000..5d29f61d419 --- /dev/null +++ b/test/configCases/defer-import/concatenated-1/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: true + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/concatenated-2/a.js b/test/configCases/defer-import/concatenated-2/a.js new file mode 100644 index 00000000000..2ff6363c26a --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/a.js @@ -0,0 +1,5 @@ +import defer * as mod from 'mod' + +export function b() { + mod.fn() +} diff --git a/test/configCases/defer-import/concatenated-2/index.js b/test/configCases/defer-import/concatenated-2/index.js new file mode 100644 index 00000000000..2d28ac5c564 --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/index.js @@ -0,0 +1,3 @@ +it('should compile and load', () => { + require('./main.js'); +}) diff --git a/test/configCases/defer-import/concatenated-2/main.js b/test/configCases/defer-import/concatenated-2/main.js new file mode 100644 index 00000000000..8b5e6cbfef3 --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/main.js @@ -0,0 +1,5 @@ +import { fn } from 'mod' +import { b } from './a' + +fn() +b() diff --git a/test/configCases/defer-import/concatenated-2/node_modules/mod/index.js b/test/configCases/defer-import/concatenated-2/node_modules/mod/index.js new file mode 100644 index 00000000000..8c42e55b5cc --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/node_modules/mod/index.js @@ -0,0 +1 @@ +export { fn } from './re-export' diff --git a/test/configCases/defer-import/concatenated-2/node_modules/mod/package.json b/test/configCases/defer-import/concatenated-2/node_modules/mod/package.json new file mode 100644 index 00000000000..78addbdd66a --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/node_modules/mod/package.json @@ -0,0 +1,5 @@ +{ + "sideEffects": false, + "main": "./index.js", + "name": "mod" +} diff --git a/test/configCases/defer-import/concatenated-2/node_modules/mod/re-export.js b/test/configCases/defer-import/concatenated-2/node_modules/mod/re-export.js new file mode 100644 index 00000000000..da2e6137d39 --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/node_modules/mod/re-export.js @@ -0,0 +1 @@ +export function fn() {} diff --git a/test/configCases/defer-import/concatenated-2/webpack.config.js b/test/configCases/defer-import/concatenated-2/webpack.config.js new file mode 100644 index 00000000000..5d29f61d419 --- /dev/null +++ b/test/configCases/defer-import/concatenated-2/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: true + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-but-sync-order/0.js b/test/configCases/defer-import/defer-but-sync-order/0.js new file mode 100644 index 00000000000..7a2cf8c8bfa --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/0.js @@ -0,0 +1,5 @@ +import { data, setData } from "./side-effect-counter"; + +if (data !== undefined) + throw new Error("No module should be executed before this one."); +setData("0.js"); diff --git a/test/configCases/defer-import/defer-but-sync-order/1.js b/test/configCases/defer-import/defer-but-sync-order/1.js new file mode 100644 index 00000000000..6ed763cfb79 --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/1.js @@ -0,0 +1,3 @@ +import "./0.js"; +import * as ns from "./deferred.js"; +export const x = ns; diff --git a/test/configCases/defer-import/defer-but-sync-order/deferred.js b/test/configCases/defer-import/defer-but-sync-order/deferred.js new file mode 100644 index 00000000000..7c39025a60d --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/deferred.js @@ -0,0 +1,5 @@ +import { data, setData } from "./side-effect-counter"; + +if (data !== "0.js") throw new Error("Expected 0.js to be executed first."); +setData("deferred"); +export {}; diff --git a/test/configCases/defer-import/defer-but-sync-order/entry.js b/test/configCases/defer-import/defer-but-sync-order/entry.js new file mode 100644 index 00000000000..514367aa9da --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/entry.js @@ -0,0 +1,6 @@ +import * as ns from /* webpackDefer: true */ "./deferred.js"; +import "./1.js"; + +if (Math.random() > 1) { + console.log(ns); +} diff --git a/test/configCases/defer-import/defer-but-sync-order/index.js b/test/configCases/defer-import/defer-but-sync-order/index.js new file mode 100644 index 00000000000..ac5d9f147fa --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/index.js @@ -0,0 +1,3 @@ +it("execution order should be correct.", () => { + return import("./entry.js"); +}); diff --git a/test/configCases/defer-import/defer-but-sync-order/side-effect-counter.js b/test/configCases/defer-import/defer-but-sync-order/side-effect-counter.js new file mode 100644 index 00000000000..4824c2574f8 --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/side-effect-counter.js @@ -0,0 +1,4 @@ +export let data; +export function setData(d) { + data = d; +} diff --git a/test/configCases/defer-import/defer-but-sync-order/webpack.config.js b/test/configCases/defer-import/defer-but-sync-order/webpack.config.js new file mode 100644 index 00000000000..c3897eb5054 --- /dev/null +++ b/test/configCases/defer-import/defer-but-sync-order/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-concat-strict/webpack.config.js b/test/configCases/defer-import/defer-runtime-concat-strict/webpack.config.js new file mode 100644 index 00000000000..434326f43ec --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-concat-strict/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all.js"], + module: { + rules: [ + { + test: /index\.js/, + type: "javascript/esm" + } + ] + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-concat/webpack.config.js b/test/configCases/defer-import/defer-runtime-concat/webpack.config.js new file mode 100644 index 00000000000..bd136e3b40f --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-concat/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all.js"], + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-dynamic-import-context-native-syntax/webpack.config.js b/test/configCases/defer-import/defer-runtime-dynamic-import-context-native-syntax/webpack.config.js new file mode 100644 index 00000000000..c1fb1506315 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-dynamic-import-context-native-syntax/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all-dynamic-import-context-native-syntax.js"], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-dynamic-import-context/webpack.config.js b/test/configCases/defer-import/defer-runtime-dynamic-import-context/webpack.config.js new file mode 100644 index 00000000000..4c63d7e1450 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-dynamic-import-context/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all-dynamic-import-context.js"], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-dynamic-import-native-syntax/webpack.config.js b/test/configCases/defer-import/defer-runtime-dynamic-import-native-syntax/webpack.config.js new file mode 100644 index 00000000000..0505410f483 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-dynamic-import-native-syntax/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all-dynamic-import-native-syntax.js"], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-dynamic-import/webpack.config.js b/test/configCases/defer-import/defer-runtime-dynamic-import/webpack.config.js new file mode 100644 index 00000000000..564ddbf684f --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-dynamic-import/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all-dynamic-import.js"], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-native-syntax/webpack.config.js b/test/configCases/defer-import/defer-runtime-native-syntax/webpack.config.js new file mode 100644 index 00000000000..6c58151518f --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-native-syntax/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all-native-syntax.js"], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime-strict/webpack.config.js b/test/configCases/defer-import/defer-runtime-strict/webpack.config.js new file mode 100644 index 00000000000..668d2a3f214 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime-strict/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["../defer-runtime/all.js"], + optimization: { + concatenateModules: false + }, + module: { + rules: [ + { + test: /index\.js/, + type: "javascript/esm" + } + ] + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-runtime/all-dynamic-import-context-native-syntax.js b/test/configCases/defer-import/defer-runtime/all-dynamic-import-context-native-syntax.js new file mode 100644 index 00000000000..24c0b43560c --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/all-dynamic-import-context-native-syntax.js @@ -0,0 +1,228 @@ +import { + assertTouched as a, + assertUntouched as b, + reset as c +} from "./side-effect-counter.js"; +const [assertTouched, assertUntouched, reset] = [a, b, c]; + +it("should defer the module until first use", async () => { + let file; + file = "dynamic_default.cjs"; + const dynamic_default = await import.defer("./commonjs/" + file); + file = "dynamic_default_ns.cjs"; + const dynamic_default_ns = await import.defer("./commonjs/" + file); + file = "dynamic_named.cjs"; + const dynamic_named = await import.defer("./commonjs/" + file); + file = "dynamic_named_ns.cjs"; + const dynamic_named_ns = await import.defer("./commonjs/" + file); + file = "dynamic_both.cjs"; + const dynamic_both = await import.defer("./commonjs/" + file); + file = "dynamic_both_ns.cjs"; + const dynamic_both_ns = await import.defer("./commonjs/" + file); + + file = "flagged_default.js"; + const flagged_default = await import.defer("./commonjs/" + file); + file = "flagged_default_ns.js"; + const flagged_default_ns = await import.defer("./commonjs/" + file); + file = "flagged_named.js"; + const flagged_named = await import.defer("./commonjs/" + file); + file = "flagged_named_ns.js"; + const flagged_named_ns = await import.defer("./commonjs/" + file); + file = "flagged_both.js"; + const flagged_both = await import.defer("./commonjs/" + file); + file = "flagged_both_ns.js"; + const flagged_both_ns = await import.defer("./commonjs/" + file); + + file = "esm_default.mjs"; + const esm_default = await import.defer("./esm/" + file); + file = "esm_default_ns.mjs"; + const esm_default_ns = await import.defer("./esm/" + file); + file = "esm_named.mjs"; + const esm_named = await import.defer("./esm/" + file); + file = "esm_named_ns.mjs"; + const esm_named_ns = await import.defer("./esm/" + file); + file = "esm_both.mjs"; + const esm_both = await import.defer("./esm/" + file); + file = "esm_both_ns.mjs"; + const esm_both_ns = await import.defer("./esm/" + file); + + file = "reexport.mjs"; + const { reexport_ns, reexport_cjs_ns } = await import.defer("./esm/" + file); + + reset(); + dynamic_default.default; + assertTouched(); + expect(dynamic_default.default()).toBe("func"); + assertTouched(); + + reset(); + dynamic_named.f; + assertTouched(); + expect(dynamic_named.f()).toBe("func"); + expect(new dynamic_named.T().x).toBe(1); + assertTouched(); + + reset(); + dynamic_both.default; + assertTouched(); + expect(dynamic_both.default()).toBe("func"); + expect(dynamic_both.default.x).toBe(1); + expect(new dynamic_both.default.T().x).toBe(1); + assertTouched(); + + // then flagged, without namespace + reset(); + flagged_default.default; + assertTouched(); + expect(flagged_default.default()).toBe("func"); + assertTouched(); + + reset(); + flagged_named.f; + assertTouched(); + expect(flagged_named.f()).toBe("func"); + expect(new flagged_named.T().x).toBe(1); + assertTouched(); + + reset(); + flagged_both.default; + assertTouched(); + expect(flagged_both.default()).toBe("func"); + expect(flagged_both.x).toBe(1); + expect(new flagged_both.T().x).toBe(1); + assertTouched(); + + // then esm, without namespace + reset(); + esm_default.default; + assertTouched(); + expect(esm_default.default()).toBe("func"); + assertTouched(); + + reset(); + esm_named.f; + assertTouched(); + expect(esm_named.f()).toBe("func"); + expect(new esm_named.T().x).toBe(1); + assertTouched(); + + reset(); + esm_both.default; + assertTouched(); + expect(esm_both.default()).toBe("func"); + expect(esm_both.x).toBe(1); + expect(new esm_both.T().x).toBe(1); + assertTouched(); + + // then dynamic with namespace + reset(); + assertIsNamespaceObject(dynamic_default_ns); + assertUntouched(); + Reflect.get(dynamic_default_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_named_ns); + assertUntouched(); + Reflect.get(dynamic_named_ns, "f"); + assertTouched(); + expect(Reflect.get(dynamic_named_ns, "f")()).toBe("func"); + expect(new dynamic_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_both_ns); + assertUntouched(); + Reflect.get(dynamic_both_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_both_ns, "default")()).toBe("func"); + expect(Reflect.get(dynamic_both_ns, "x")).toBe(1); + expect(new dynamic_both_ns.T().x).toBe(1); + assertTouched(); + + // then flagged with namespace + reset(); + assertIsNamespaceObject(flagged_default_ns); + assertUntouched(); + Reflect.get(flagged_default_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_named_ns); + assertUntouched(); + Reflect.get(flagged_named_ns, "f"); + assertTouched(); + expect(Reflect.get(flagged_named_ns, "f")()).toBe("func"); + expect(new flagged_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_both_ns); + assertUntouched(); + Reflect.get(flagged_both_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_both_ns, "default")()).toBe("func"); + expect(Reflect.get(flagged_both_ns, "x")).toBe(1); + expect(new flagged_both_ns.T().x).toBe(1); + assertTouched(); + + // then esm with namespace + reset(); + assertIsNamespaceObject(esm_default_ns); + assertUntouched(); + Reflect.get(esm_default_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_named_ns); + assertUntouched(); + Reflect.get(esm_named_ns, "f"); + assertTouched(); + expect(Reflect.get(esm_named_ns, "f")()).toBe("func"); + expect(new esm_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_both_ns); + assertUntouched(); + Reflect.get(esm_both_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_both_ns, "default")()).toBe("func"); + expect(Reflect.get(esm_both_ns, "x")).toBe(1); + expect(new esm_both_ns.T().x).toBe(1); + assertTouched(); + + // then reexported with namespace + reset(); + assertIsNamespaceObject(reexport_ns); + assertUntouched(); + Reflect.get(reexport_ns, "f"); + assertTouched(); + expect(Reflect.get(reexport_ns, "f")()).toBe("func"); + expect(new reexport_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(reexport_cjs_ns); + assertUntouched(); + Reflect.get(reexport_cjs_ns, "default"); + Reflect.get(reexport_cjs_ns, "default").f; + assertTouched(); + expect(Reflect.get(reexport_cjs_ns, "default").f()).toBe("func"); + expect(new reexport_cjs_ns.T().x).toBe(1); + assertTouched(); +}); +function assertIsNamespaceObject(ns) { + if (typeof ns !== "object" || !ns) + throw new TypeError("namespace is not an object."); + if (!ns[Symbol.toStringTag]) + throw new Error( + "namespace object does not have a Symbol.toStringTag property." + ); +} diff --git a/test/configCases/defer-import/defer-runtime/all-dynamic-import-context.js b/test/configCases/defer-import/defer-runtime/all-dynamic-import-context.js new file mode 100644 index 00000000000..567b68d8b73 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/all-dynamic-import-context.js @@ -0,0 +1,228 @@ +import { + assertTouched as a, + assertUntouched as b, + reset as c +} from "./side-effect-counter.js"; +const [assertTouched, assertUntouched, reset] = [a, b, c]; + +it("should defer the module until first use", async () => { + let file; + file = "dynamic_default.cjs"; + const dynamic_default = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "dynamic_default_ns.cjs"; + const dynamic_default_ns = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "dynamic_named.cjs"; + const dynamic_named = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "dynamic_named_ns.cjs"; + const dynamic_named_ns = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "dynamic_both.cjs"; + const dynamic_both = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "dynamic_both_ns.cjs"; + const dynamic_both_ns = await import(/* webpackDefer: true */ "./commonjs/" + file); + + file = "flagged_default.js"; + const flagged_default = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "flagged_default_ns.js"; + const flagged_default_ns = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "flagged_named.js"; + const flagged_named = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "flagged_named_ns.js"; + const flagged_named_ns = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "flagged_both.js"; + const flagged_both = await import(/* webpackDefer: true */ "./commonjs/" + file); + file = "flagged_both_ns.js"; + const flagged_both_ns = await import(/* webpackDefer: true */ "./commonjs/" + file); + + file = "esm_default.mjs"; + const esm_default = await import(/* webpackDefer: true */ "./esm/" + file); + file = "esm_default_ns.mjs"; + const esm_default_ns = await import(/* webpackDefer: true */ "./esm/" + file); + file = "esm_named.mjs"; + const esm_named = await import(/* webpackDefer: true */ "./esm/" + file); + file = "esm_named_ns.mjs"; + const esm_named_ns = await import(/* webpackDefer: true */ "./esm/" + file); + file = "esm_both.mjs"; + const esm_both = await import(/* webpackDefer: true */ "./esm/" + file); + file = "esm_both_ns.mjs"; + const esm_both_ns = await import(/* webpackDefer: true */ "./esm/" + file); + + file = "reexport.mjs"; + const { reexport_ns, reexport_cjs_ns } = await import(/* webpackDefer: true */ "./esm/" + file); + + reset(); + dynamic_default.default; + assertTouched(); + expect(dynamic_default.default()).toBe("func"); + assertTouched(); + + reset(); + dynamic_named.f; + assertTouched(); + expect(dynamic_named.f()).toBe("func"); + expect(new dynamic_named.T().x).toBe(1); + assertTouched(); + + reset(); + dynamic_both.default; + assertTouched(); + expect(dynamic_both.default()).toBe("func"); + expect(dynamic_both.default.x).toBe(1); + expect(new dynamic_both.default.T().x).toBe(1); + assertTouched(); + + // then flagged, without namespace + reset(); + flagged_default.default; + assertTouched(); + expect(flagged_default.default()).toBe("func"); + assertTouched(); + + reset(); + flagged_named.f; + assertTouched(); + expect(flagged_named.f()).toBe("func"); + expect(new flagged_named.T().x).toBe(1); + assertTouched(); + + reset(); + flagged_both.default; + assertTouched(); + expect(flagged_both.default()).toBe("func"); + expect(flagged_both.x).toBe(1); + expect(new flagged_both.T().x).toBe(1); + assertTouched(); + + // then esm, without namespace + reset(); + esm_default.default; + assertTouched(); + expect(esm_default.default()).toBe("func"); + assertTouched(); + + reset(); + esm_named.f; + assertTouched(); + expect(esm_named.f()).toBe("func"); + expect(new esm_named.T().x).toBe(1); + assertTouched(); + + reset(); + esm_both.default; + assertTouched(); + expect(esm_both.default()).toBe("func"); + expect(esm_both.x).toBe(1); + expect(new esm_both.T().x).toBe(1); + assertTouched(); + + // then dynamic with namespace + reset(); + assertIsNamespaceObject(dynamic_default_ns); + assertUntouched(); + Reflect.get(dynamic_default_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_named_ns); + assertUntouched(); + Reflect.get(dynamic_named_ns, "f"); + assertTouched(); + expect(Reflect.get(dynamic_named_ns, "f")()).toBe("func"); + expect(new dynamic_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_both_ns); + assertUntouched(); + Reflect.get(dynamic_both_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_both_ns, "default")()).toBe("func"); + expect(Reflect.get(dynamic_both_ns, "x")).toBe(1); + expect(new dynamic_both_ns.T().x).toBe(1); + assertTouched(); + + // then flagged with namespace + reset(); + assertIsNamespaceObject(flagged_default_ns); + assertUntouched(); + Reflect.get(flagged_default_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_named_ns); + assertUntouched(); + Reflect.get(flagged_named_ns, "f"); + assertTouched(); + expect(Reflect.get(flagged_named_ns, "f")()).toBe("func"); + expect(new flagged_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_both_ns); + assertUntouched(); + Reflect.get(flagged_both_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_both_ns, "default")()).toBe("func"); + expect(Reflect.get(flagged_both_ns, "x")).toBe(1); + expect(new flagged_both_ns.T().x).toBe(1); + assertTouched(); + + // then esm with namespace + reset(); + assertIsNamespaceObject(esm_default_ns); + assertUntouched(); + Reflect.get(esm_default_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_named_ns); + assertUntouched(); + Reflect.get(esm_named_ns, "f"); + assertTouched(); + expect(Reflect.get(esm_named_ns, "f")()).toBe("func"); + expect(new esm_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_both_ns); + assertUntouched(); + Reflect.get(esm_both_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_both_ns, "default")()).toBe("func"); + expect(Reflect.get(esm_both_ns, "x")).toBe(1); + expect(new esm_both_ns.T().x).toBe(1); + assertTouched(); + + // then reexported with namespace + reset(); + assertIsNamespaceObject(reexport_ns); + assertUntouched(); + Reflect.get(reexport_ns, "f"); + assertTouched(); + expect(Reflect.get(reexport_ns, "f")()).toBe("func"); + expect(new reexport_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(reexport_cjs_ns); + assertUntouched(); + Reflect.get(reexport_cjs_ns, "default"); + Reflect.get(reexport_cjs_ns, "default").f; + assertTouched(); + expect(Reflect.get(reexport_cjs_ns, "default").f()).toBe("func"); + expect(new reexport_cjs_ns.T().x).toBe(1); + assertTouched(); +}); +function assertIsNamespaceObject(ns) { + if (typeof ns !== "object" || !ns) + throw new TypeError("namespace is not an object."); + if (!ns[Symbol.toStringTag]) + throw new Error( + "namespace object does not have a Symbol.toStringTag property." + ); +} diff --git a/test/configCases/defer-import/defer-runtime/all-dynamic-import-native-syntax.js b/test/configCases/defer-import/defer-runtime/all-dynamic-import-native-syntax.js new file mode 100644 index 00000000000..19982b55162 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/all-dynamic-import-native-syntax.js @@ -0,0 +1,208 @@ +import { + assertTouched as a, + assertUntouched as b, + reset as c +} from "./side-effect-counter.js"; +const [assertTouched, assertUntouched, reset] = [a, b, c]; + +it("should defer the module until first use", async () => { + const dynamic_default = await import.defer(/* webpackMode: "eager" */"./commonjs/dynamic_default.cjs"); + const dynamic_default_ns = await import.defer("./commonjs/dynamic_default_ns.cjs"); + const dynamic_named = await import.defer("./commonjs/dynamic_named.cjs"); + const dynamic_named_ns = await import.defer("./commonjs/dynamic_named_ns.cjs"); + const dynamic_both = await import.defer("./commonjs/dynamic_both.cjs"); + const dynamic_both_ns = await import.defer("./commonjs/dynamic_both_ns.cjs"); + + const flagged_default = await import.defer("./commonjs/flagged_default.js"); + const flagged_default_ns = await import.defer("./commonjs/flagged_default_ns.js"); + const flagged_named = await import.defer("./commonjs/flagged_named.js"); + const flagged_named_ns = await import.defer("./commonjs/flagged_named_ns.js"); + const flagged_both = await import.defer("./commonjs/flagged_both.js"); + const flagged_both_ns = await import.defer("./commonjs/flagged_both_ns.js"); + + const esm_default = await import.defer("./esm/esm_default.mjs"); + const esm_default_ns = await import.defer("./esm/esm_default_ns.mjs"); + const esm_named = await import.defer("./esm/esm_named.mjs"); + const esm_named_ns = await import.defer("./esm/esm_named_ns.mjs"); + const esm_both = await import.defer("./esm/esm_both.mjs"); + const esm_both_ns = await import.defer("./esm/esm_both_ns.mjs"); + + const { reexport_ns, reexport_cjs_ns } = await import.defer("./esm/reexport.mjs"); + + reset(); + dynamic_default.default; + assertTouched(); + expect(dynamic_default.default()).toBe("func"); + assertTouched(); + + reset(); + dynamic_named.f; + assertTouched(); + expect(dynamic_named.f()).toBe("func"); + expect(new dynamic_named.T().x).toBe(1); + assertTouched(); + + reset(); + dynamic_both.default; + assertTouched(); + expect(dynamic_both.default()).toBe("func"); + expect(dynamic_both.default.x).toBe(1); + expect(new dynamic_both.default.T().x).toBe(1); + assertTouched(); + + // then flagged, without namespace + reset(); + flagged_default.default; + assertTouched(); + expect(flagged_default.default()).toBe("func"); + assertTouched(); + + reset(); + flagged_named.f; + assertTouched(); + expect(flagged_named.f()).toBe("func"); + expect(new flagged_named.T().x).toBe(1); + assertTouched(); + + reset(); + flagged_both.default; + assertTouched(); + expect(flagged_both.default()).toBe("func"); + expect(flagged_both.x).toBe(1); + expect(new flagged_both.T().x).toBe(1); + assertTouched(); + + // then esm, without namespace + reset(); + esm_default.default; + assertTouched(); + expect(esm_default.default()).toBe("func"); + assertTouched(); + + reset(); + esm_named.f; + assertTouched(); + expect(esm_named.f()).toBe("func"); + expect(new esm_named.T().x).toBe(1); + assertTouched(); + + reset(); + esm_both.default; + assertTouched(); + expect(esm_both.default()).toBe("func"); + expect(esm_both.x).toBe(1); + expect(new esm_both.T().x).toBe(1); + assertTouched(); + + // then dynamic with namespace + reset(); + assertIsNamespaceObject(dynamic_default_ns); + assertUntouched(); + Reflect.get(dynamic_default_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_named_ns); + assertUntouched(); + Reflect.get(dynamic_named_ns, "f"); + assertTouched(); + expect(Reflect.get(dynamic_named_ns, "f")()).toBe("func"); + expect(new dynamic_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_both_ns); + assertUntouched(); + Reflect.get(dynamic_both_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_both_ns, "default")()).toBe("func"); + expect(Reflect.get(dynamic_both_ns, "x")).toBe(1); + expect(new dynamic_both_ns.T().x).toBe(1); + assertTouched(); + + // then flagged with namespace + reset(); + assertIsNamespaceObject(flagged_default_ns); + assertUntouched(); + Reflect.get(flagged_default_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_named_ns); + assertUntouched(); + Reflect.get(flagged_named_ns, "f"); + assertTouched(); + expect(Reflect.get(flagged_named_ns, "f")()).toBe("func"); + expect(new flagged_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_both_ns); + assertUntouched(); + Reflect.get(flagged_both_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_both_ns, "default")()).toBe("func"); + expect(Reflect.get(flagged_both_ns, "x")).toBe(1); + expect(new flagged_both_ns.T().x).toBe(1); + assertTouched(); + + // then esm with namespace + reset(); + assertIsNamespaceObject(esm_default_ns); + assertUntouched(); + Reflect.get(esm_default_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_named_ns); + assertUntouched(); + Reflect.get(esm_named_ns, "f"); + assertTouched(); + expect(Reflect.get(esm_named_ns, "f")()).toBe("func"); + expect(new esm_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_both_ns); + assertUntouched(); + Reflect.get(esm_both_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_both_ns, "default")()).toBe("func"); + expect(Reflect.get(esm_both_ns, "x")).toBe(1); + expect(new esm_both_ns.T().x).toBe(1); + assertTouched(); + + // then reexported with namespace + reset(); + assertIsNamespaceObject(reexport_ns); + assertUntouched(); + Reflect.get(reexport_ns, "f"); + assertTouched(); + expect(Reflect.get(reexport_ns, "f")()).toBe("func"); + expect(new reexport_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(reexport_cjs_ns); + assertUntouched(); + Reflect.get(reexport_cjs_ns, "default"); + Reflect.get(reexport_cjs_ns, "default").f; + assertTouched(); + expect(Reflect.get(reexport_cjs_ns, "default").f()).toBe("func"); + expect(new reexport_cjs_ns.T().x).toBe(1); + assertTouched(); +}); +function assertIsNamespaceObject(ns) { + if (typeof ns !== "object" || !ns) + throw new TypeError("namespace is not an object."); + if (!ns[Symbol.toStringTag]) + throw new Error( + "namespace object does not have a Symbol.toStringTag property." + ); +} diff --git a/test/configCases/defer-import/defer-runtime/all-dynamic-import.js b/test/configCases/defer-import/defer-runtime/all-dynamic-import.js new file mode 100644 index 00000000000..09e343d1fc7 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/all-dynamic-import.js @@ -0,0 +1,208 @@ +import { + assertTouched as a, + assertUntouched as b, + reset as c +} from "./side-effect-counter.js"; +const [assertTouched, assertUntouched, reset] = [a, b, c]; + +it("should defer the module until first use", async () => { + const dynamic_default = await import(/* webpackDefer: true */ "./commonjs/dynamic_default.cjs"); + const dynamic_default_ns = await import(/* webpackDefer: true */ "./commonjs/dynamic_default_ns.cjs"); + const dynamic_named = await import(/* webpackDefer: true */ "./commonjs/dynamic_named.cjs"); + const dynamic_named_ns = await import(/* webpackDefer: true */ "./commonjs/dynamic_named_ns.cjs"); + const dynamic_both = await import(/* webpackDefer: true */ "./commonjs/dynamic_both.cjs"); + const dynamic_both_ns = await import(/* webpackDefer: true */ "./commonjs/dynamic_both_ns.cjs"); + + const flagged_default = await import(/* webpackDefer: true */ "./commonjs/flagged_default.js"); + const flagged_default_ns = await import(/* webpackDefer: true */ "./commonjs/flagged_default_ns.js"); + const flagged_named = await import(/* webpackDefer: true */ "./commonjs/flagged_named.js"); + const flagged_named_ns = await import(/* webpackDefer: true */ "./commonjs/flagged_named_ns.js"); + const flagged_both = await import(/* webpackDefer: true */ "./commonjs/flagged_both.js"); + const flagged_both_ns = await import(/* webpackDefer: true */ "./commonjs/flagged_both_ns.js"); + + const esm_default = await import(/* webpackDefer: true */ "./esm/esm_default.mjs"); + const esm_default_ns = await import(/* webpackDefer: true */ "./esm/esm_default_ns.mjs"); + const esm_named = await import(/* webpackDefer: true */ "./esm/esm_named.mjs"); + const esm_named_ns = await import(/* webpackDefer: true */ "./esm/esm_named_ns.mjs"); + const esm_both = await import(/* webpackDefer: true */ "./esm/esm_both.mjs"); + const esm_both_ns = await import(/* webpackDefer: true */ "./esm/esm_both_ns.mjs"); + + const { reexport_ns, reexport_cjs_ns } = await import(/* webpackDefer: true */ "./esm/reexport.mjs"); + + reset(); + dynamic_default.default; + assertTouched(); + expect(dynamic_default.default()).toBe("func"); + assertTouched(); + + reset(); + dynamic_named.f; + assertTouched(); + expect(dynamic_named.f()).toBe("func"); + expect(new dynamic_named.T().x).toBe(1); + assertTouched(); + + reset(); + dynamic_both.default; + assertTouched(); + expect(dynamic_both.default()).toBe("func"); + expect(dynamic_both.default.x).toBe(1); + expect(new dynamic_both.default.T().x).toBe(1); + assertTouched(); + + // then flagged, without namespace + reset(); + flagged_default.default; + assertTouched(); + expect(flagged_default.default()).toBe("func"); + assertTouched(); + + reset(); + flagged_named.f; + assertTouched(); + expect(flagged_named.f()).toBe("func"); + expect(new flagged_named.T().x).toBe(1); + assertTouched(); + + reset(); + flagged_both.default; + assertTouched(); + expect(flagged_both.default()).toBe("func"); + expect(flagged_both.x).toBe(1); + expect(new flagged_both.T().x).toBe(1); + assertTouched(); + + // then esm, without namespace + reset(); + esm_default.default; + assertTouched(); + expect(esm_default.default()).toBe("func"); + assertTouched(); + + reset(); + esm_named.f; + assertTouched(); + expect(esm_named.f()).toBe("func"); + expect(new esm_named.T().x).toBe(1); + assertTouched(); + + reset(); + esm_both.default; + assertTouched(); + expect(esm_both.default()).toBe("func"); + expect(esm_both.x).toBe(1); + expect(new esm_both.T().x).toBe(1); + assertTouched(); + + // then dynamic with namespace + reset(); + assertIsNamespaceObject(dynamic_default_ns); + assertUntouched(); + Reflect.get(dynamic_default_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_named_ns); + assertUntouched(); + Reflect.get(dynamic_named_ns, "f"); + assertTouched(); + expect(Reflect.get(dynamic_named_ns, "f")()).toBe("func"); + expect(new dynamic_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_both_ns); + assertUntouched(); + Reflect.get(dynamic_both_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_both_ns, "default")()).toBe("func"); + expect(Reflect.get(dynamic_both_ns, "x")).toBe(1); + expect(new dynamic_both_ns.T().x).toBe(1); + assertTouched(); + + // then flagged with namespace + reset(); + assertIsNamespaceObject(flagged_default_ns); + assertUntouched(); + Reflect.get(flagged_default_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_named_ns); + assertUntouched(); + Reflect.get(flagged_named_ns, "f"); + assertTouched(); + expect(Reflect.get(flagged_named_ns, "f")()).toBe("func"); + expect(new flagged_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_both_ns); + assertUntouched(); + Reflect.get(flagged_both_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_both_ns, "default")()).toBe("func"); + expect(Reflect.get(flagged_both_ns, "x")).toBe(1); + expect(new flagged_both_ns.T().x).toBe(1); + assertTouched(); + + // then esm with namespace + reset(); + assertIsNamespaceObject(esm_default_ns); + assertUntouched(); + Reflect.get(esm_default_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_named_ns); + assertUntouched(); + Reflect.get(esm_named_ns, "f"); + assertTouched(); + expect(Reflect.get(esm_named_ns, "f")()).toBe("func"); + expect(new esm_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_both_ns); + assertUntouched(); + Reflect.get(esm_both_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_both_ns, "default")()).toBe("func"); + expect(Reflect.get(esm_both_ns, "x")).toBe(1); + expect(new esm_both_ns.T().x).toBe(1); + assertTouched(); + + // then reexported with namespace + reset(); + assertIsNamespaceObject(reexport_ns); + assertUntouched(); + Reflect.get(reexport_ns, "f"); + assertTouched(); + expect(Reflect.get(reexport_ns, "f")()).toBe("func"); + expect(new reexport_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(reexport_cjs_ns); + assertUntouched(); + Reflect.get(reexport_cjs_ns, "default"); + Reflect.get(reexport_cjs_ns, "default").f; + assertTouched(); + expect(Reflect.get(reexport_cjs_ns, "default").f()).toBe("func"); + expect(new reexport_cjs_ns.T().x).toBe(1); + assertTouched(); +}); +function assertIsNamespaceObject(ns) { + if (typeof ns !== "object" || !ns) + throw new TypeError("namespace is not an object."); + if (!ns[Symbol.toStringTag]) + throw new Error( + "namespace object does not have a Symbol.toStringTag property." + ); +} diff --git a/test/configCases/defer-import/defer-runtime/all-native-syntax.js b/test/configCases/defer-import/defer-runtime/all-native-syntax.js new file mode 100644 index 00000000000..03a5c7eafd9 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/all-native-syntax.js @@ -0,0 +1,207 @@ +import defer * as dynamic_default from "./commonjs/dynamic_default.cjs"; +import defer * as dynamic_default_ns from "./commonjs/dynamic_default_ns.cjs"; +import defer * as dynamic_named from "./commonjs/dynamic_named.cjs"; +import defer * as dynamic_named_ns from "./commonjs/dynamic_named_ns.cjs"; +import defer * as dynamic_both from "./commonjs/dynamic_both.cjs"; +import defer * as dynamic_both_ns from "./commonjs/dynamic_both_ns.cjs"; + +import defer * as flagged_default from "./commonjs/flagged_default.js"; +import defer * as flagged_default_ns from "./commonjs/flagged_default_ns.js"; +import defer * as flagged_named from "./commonjs/flagged_named.js"; +import defer * as flagged_named_ns from "./commonjs/flagged_named_ns.js"; +import defer * as flagged_both from "./commonjs/flagged_both.js"; +import defer * as flagged_both_ns from "./commonjs/flagged_both_ns.js"; + +import defer * as esm_default from "./esm/esm_default.mjs"; +import defer * as esm_default_ns from "./esm/esm_default_ns.mjs"; +import defer * as esm_named from "./esm/esm_named.mjs"; +import defer * as esm_named_ns from "./esm/esm_named_ns.mjs"; +import defer * as esm_both from "./esm/esm_both.mjs"; +import defer * as esm_both_ns from "./esm/esm_both_ns.mjs"; + +import { reexport_ns, reexport_cjs_ns } from "./esm/reexport.mjs"; +import { + assertTouched as a, + assertUntouched as b, + reset as c +} from "./side-effect-counter.js"; +const [assertTouched, assertUntouched, reset] = [a, b, c]; + +it("should defer the module until first use", () => { + reset(); + dynamic_default.default; + assertTouched(); + expect(dynamic_default.default()).toBe("func"); + assertTouched(); + + reset(); + dynamic_named.f; + assertTouched(); + expect(dynamic_named.f()).toBe("func"); + expect(new dynamic_named.T().x).toBe(1); + assertTouched(); + + reset(); + dynamic_both.default; + assertTouched(); + expect(dynamic_both.default()).toBe("func"); + expect(dynamic_both.default.x).toBe(1); + expect(new dynamic_both.default.T().x).toBe(1); + assertTouched(); + + // then flagged, without namespace + reset(); + flagged_default.default; + assertTouched(); + expect(flagged_default.default()).toBe("func"); + assertTouched(); + + reset(); + flagged_named.f; + assertTouched(); + expect(flagged_named.f()).toBe("func"); + expect(new flagged_named.T().x).toBe(1); + assertTouched(); + + reset(); + flagged_both.default; + assertTouched(); + expect(flagged_both.default()).toBe("func"); + expect(flagged_both.x).toBe(1); + expect(new flagged_both.T().x).toBe(1); + assertTouched(); + + // then esm, without namespace + reset(); + esm_default.default; + assertTouched(); + expect(esm_default.default()).toBe("func"); + assertTouched(); + + reset(); + esm_named.f; + assertTouched(); + expect(esm_named.f()).toBe("func"); + expect(new esm_named.T().x).toBe(1); + assertTouched(); + + reset(); + esm_both.default; + assertTouched(); + expect(esm_both.default()).toBe("func"); + expect(esm_both.x).toBe(1); + expect(new esm_both.T().x).toBe(1); + assertTouched(); + + // then dynamic with namespace + reset(); + assertIsNamespaceObject(dynamic_default_ns); + assertUntouched(); + Reflect.get(dynamic_default_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_named_ns); + assertUntouched(); + Reflect.get(dynamic_named_ns, "f"); + assertTouched(); + expect(Reflect.get(dynamic_named_ns, "f")()).toBe("func"); + expect(new dynamic_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_both_ns); + assertUntouched(); + Reflect.get(dynamic_both_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_both_ns, "default")()).toBe("func"); + expect(Reflect.get(dynamic_both_ns, "x")).toBe(1); + expect(new dynamic_both_ns.T().x).toBe(1); + assertTouched(); + + // then flagged with namespace + reset(); + assertIsNamespaceObject(flagged_default_ns); + assertUntouched(); + Reflect.get(flagged_default_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_named_ns); + assertUntouched(); + Reflect.get(flagged_named_ns, "f"); + assertTouched(); + expect(Reflect.get(flagged_named_ns, "f")()).toBe("func"); + expect(new flagged_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_both_ns); + assertUntouched(); + Reflect.get(flagged_both_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_both_ns, "default")()).toBe("func"); + expect(Reflect.get(flagged_both_ns, "x")).toBe(1); + expect(new flagged_both_ns.T().x).toBe(1); + assertTouched(); + + // then esm with namespace + reset(); + assertIsNamespaceObject(esm_default_ns); + assertUntouched(); + Reflect.get(esm_default_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_named_ns); + assertUntouched(); + Reflect.get(esm_named_ns, "f"); + assertTouched(); + expect(Reflect.get(esm_named_ns, "f")()).toBe("func"); + expect(new esm_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_both_ns); + assertUntouched(); + Reflect.get(esm_both_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_both_ns, "default")()).toBe("func"); + expect(Reflect.get(esm_both_ns, "x")).toBe(1); + expect(new esm_both_ns.T().x).toBe(1); + assertTouched(); + + // then reexported with namespace + reset(); + assertIsNamespaceObject(reexport_ns); + assertUntouched(); + Reflect.get(reexport_ns, "f"); + assertTouched(); + expect(Reflect.get(reexport_ns, "f")()).toBe("func"); + expect(new reexport_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(reexport_cjs_ns); + assertUntouched(); + Reflect.get(reexport_cjs_ns, "default"); + Reflect.get(reexport_cjs_ns, "default").f; + assertTouched(); + expect(Reflect.get(reexport_cjs_ns, "default").f()).toBe("func"); + expect(new reexport_cjs_ns.T().x).toBe(1); + assertTouched(); +}); +function assertIsNamespaceObject(ns) { + if (typeof ns !== "object" || !ns) + throw new TypeError("namespace is not an object."); + if (!ns[Symbol.toStringTag]) + throw new Error( + "namespace object does not have a Symbol.toStringTag property." + ); +} diff --git a/test/configCases/defer-import/defer-runtime/all.js b/test/configCases/defer-import/defer-runtime/all.js new file mode 100644 index 00000000000..b51eb2d369c --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/all.js @@ -0,0 +1,214 @@ +import * as dynamic_default from /* webpackDefer: true */ "./commonjs/dynamic_default.cjs"; +import * as dynamic_default_ns from /* webpackDefer: true */ "./commonjs/dynamic_default_ns.cjs"; +import * as dynamic_named from /* webpackDefer: true */ "./commonjs/dynamic_named.cjs"; +import * as dynamic_named_ns from /* webpackDefer: true */ "./commonjs/dynamic_named_ns.cjs"; +import * as dynamic_both from /* webpackDefer: true */ "./commonjs/dynamic_both.cjs"; +import * as dynamic_both_ns from /* webpackDefer: true */ "./commonjs/dynamic_both_ns.cjs"; + +import * as flagged_default from /* webpackDefer: true */ "./commonjs/flagged_default.js"; +import * as flagged_default_ns from /* webpackDefer: true */ "./commonjs/flagged_default_ns.js"; +import * as flagged_named from /* webpackDefer: true */ "./commonjs/flagged_named.js"; +import * as flagged_named_ns from /* webpackDefer: true */ "./commonjs/flagged_named_ns.js"; +import * as flagged_both from /* webpackDefer: true */ "./commonjs/flagged_both.js"; +import * as flagged_both_ns from /* webpackDefer: true */ "./commonjs/flagged_both_ns.js"; + +import * as esm_default from /* webpackDefer: true */ "./esm/esm_default.mjs"; +import * as esm_default_ns from /* webpackDefer: true */ "./esm/esm_default_ns.mjs"; +import * as esm_named from /* webpackDefer: true */ "./esm/esm_named.mjs"; +import * as esm_named_ns from /* webpackDefer: true */ "./esm/esm_named_ns.mjs"; +import * as esm_both from /* webpackDefer: true */ "./esm/esm_both.mjs"; +import * as esm_both_ns from /* webpackDefer: true */ "./esm/esm_both_ns.mjs"; + +import * as never from /* webpackDefer: true */ "./esm/esm_both_ns.mjs"; + +import { reexport_ns, reexport_cjs_ns } from "./esm/reexport.mjs"; +import { + assertTouched as a, + assertUntouched as b, + reset as c +} from "./side-effect-counter.js"; +const [assertTouched, assertUntouched, reset] = [a, b, c]; + +it("should defer the module until first use", () => { + assertUntouched(); + + dynamic_default.default; + assertTouched(); + expect(dynamic_default.default()).toBe("func"); + assertTouched(); + + reset(); + dynamic_named.f; + assertTouched(); + expect(dynamic_named.f()).toBe("func"); + expect(new dynamic_named.T().x).toBe(1); + assertTouched(); + + reset(); + dynamic_both.default; + assertTouched(); + expect(dynamic_both.default()).toBe("func"); + expect(dynamic_both.default.x).toBe(1); + expect(new dynamic_both.default.T().x).toBe(1); + assertTouched(); + + // then flagged, without namespace + reset(); + flagged_default.default; + assertTouched(); + expect(flagged_default.default()).toBe("func"); + assertTouched(); + + reset(); + flagged_named.f; + assertTouched(); + expect(flagged_named.f()).toBe("func"); + expect(new flagged_named.T().x).toBe(1); + assertTouched(); + + reset(); + flagged_both.default; + assertTouched(); + expect(flagged_both.default()).toBe("func"); + expect(flagged_both.x).toBe(1); + expect(new flagged_both.T().x).toBe(1); + assertTouched(); + + // then esm, without namespace + reset(); + esm_default.default; + assertTouched(); + expect(esm_default.default()).toBe("func"); + assertTouched(); + + reset(); + esm_named.f; + assertTouched(); + expect(esm_named.f()).toBe("func"); + expect(new esm_named.T().x).toBe(1); + assertTouched(); + + reset(); + esm_both.default; + assertTouched(); + expect(esm_both.default()).toBe("func"); + expect(esm_both.x).toBe(1); + expect(new esm_both.T().x).toBe(1); + assertTouched(); + + // then dynamic with namespace + reset(); + assertIsNamespaceObject(dynamic_default_ns); + assertUntouched(); + Reflect.get(dynamic_default_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_named_ns); + assertUntouched(); + Reflect.get(dynamic_named_ns, "f"); + assertTouched(); + expect(Reflect.get(dynamic_named_ns, "f")()).toBe("func"); + expect(new dynamic_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(dynamic_both_ns); + assertUntouched(); + Reflect.get(dynamic_both_ns, "default"); + assertTouched(); + expect(Reflect.get(dynamic_both_ns, "default")()).toBe("func"); + expect(Reflect.get(dynamic_both_ns, "x")).toBe(1); + expect(new dynamic_both_ns.T().x).toBe(1); + assertTouched(); + + // then flagged with namespace + reset(); + assertIsNamespaceObject(flagged_default_ns); + assertUntouched(); + Reflect.get(flagged_default_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_named_ns); + assertUntouched(); + Reflect.get(flagged_named_ns, "f"); + assertTouched(); + expect(Reflect.get(flagged_named_ns, "f")()).toBe("func"); + expect(new flagged_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(flagged_both_ns); + assertUntouched(); + Reflect.get(flagged_both_ns, "default"); + assertTouched(); + expect(Reflect.get(flagged_both_ns, "default")()).toBe("func"); + expect(Reflect.get(flagged_both_ns, "x")).toBe(1); + expect(new flagged_both_ns.T().x).toBe(1); + assertTouched(); + + // then esm with namespace + reset(); + assertIsNamespaceObject(esm_default_ns); + assertUntouched(); + Reflect.get(esm_default_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_default_ns, "default")()).toBe("func"); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_named_ns); + assertUntouched(); + Reflect.get(esm_named_ns, "f"); + assertTouched(); + expect(Reflect.get(esm_named_ns, "f")()).toBe("func"); + expect(new esm_named_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(esm_both_ns); + assertUntouched(); + Reflect.get(esm_both_ns, "default"); + assertTouched(); + expect(Reflect.get(esm_both_ns, "default")()).toBe("func"); + expect(Reflect.get(esm_both_ns, "x")).toBe(1); + expect(new esm_both_ns.T().x).toBe(1); + assertTouched(); + + // then reexported with namespace + reset(); + assertIsNamespaceObject(reexport_ns); + assertUntouched(); + Reflect.get(reexport_ns, "f"); + assertTouched(); + expect(Reflect.get(reexport_ns, "f")()).toBe("func"); + expect(new reexport_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(reexport_cjs_ns); + assertUntouched(); + Reflect.get(reexport_cjs_ns, "default"); + Reflect.get(reexport_cjs_ns, "default").f; + assertTouched(); + expect(Reflect.get(reexport_cjs_ns, "default").f()).toBe("func"); + expect(new reexport_cjs_ns.T().x).toBe(1); + assertTouched(); + + reset(); + assertIsNamespaceObject(never); + expect((mod => mod.then)(never)).toBeUndefined(); +}); +function assertIsNamespaceObject(ns) { + if (typeof ns !== "object" || !ns) + throw new TypeError("namespace is not an object."); + if (!ns[Symbol.toStringTag]) + throw new Error( + "namespace object does not have a Symbol.toStringTag property." + ); +} diff --git a/test/configCases/defer-import/defer-runtime/commonjs/dynamic_both.cjs b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_both.cjs new file mode 100644 index 00000000000..1012ee3d307 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_both.cjs @@ -0,0 +1,13 @@ +const { touch } = require("../side-effect-counter"); + +touch(); + +module.exports = function () { + return "func"; +}; +module.exports.x = 1; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/commonjs/dynamic_both_ns.cjs b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_both_ns.cjs new file mode 100644 index 00000000000..1012ee3d307 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_both_ns.cjs @@ -0,0 +1,13 @@ +const { touch } = require("../side-effect-counter"); + +touch(); + +module.exports = function () { + return "func"; +}; +module.exports.x = 1; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/commonjs/dynamic_default.cjs b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_default.cjs new file mode 100644 index 00000000000..e6c04da7c1b --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_default.cjs @@ -0,0 +1,7 @@ +const { touch } = require("../side-effect-counter"); + +touch(); + +module.exports = function () { + return "func"; +}; diff --git a/test/configCases/defer-import/defer-runtime/commonjs/dynamic_default_ns.cjs b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_default_ns.cjs new file mode 100644 index 00000000000..e6c04da7c1b --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_default_ns.cjs @@ -0,0 +1,7 @@ +const { touch } = require("../side-effect-counter"); + +touch(); + +module.exports = function () { + return "func"; +}; diff --git a/test/configCases/defer-import/defer-runtime/commonjs/dynamic_named.cjs b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_named.cjs new file mode 100644 index 00000000000..591c3c09335 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_named.cjs @@ -0,0 +1,12 @@ +const { touch } = require("../side-effect-counter"); + +touch(); + +module.exports.f = function () { + return "func"; +}; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/commonjs/dynamic_named_ns.cjs b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_named_ns.cjs new file mode 100644 index 00000000000..a8e16a9a5b2 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/dynamic_named_ns.cjs @@ -0,0 +1,12 @@ +const { touch } = require("../side-effect-counter"); + +touch(); + +module.exports.f = function () { + return "func"; +}; +module.exports.T = class { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/commonjs/flagged_both.js b/test/configCases/defer-import/defer-runtime/commonjs/flagged_both.js new file mode 100644 index 00000000000..4d6144e51ec --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/flagged_both.js @@ -0,0 +1,16 @@ +const { touch } = require("../side-effect-counter"); + +module.exports.__esModule = true; +module.exports.default = f; +module.exports.x = 1; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} + +function f() { + return "func"; +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/commonjs/flagged_both_ns.js b/test/configCases/defer-import/defer-runtime/commonjs/flagged_both_ns.js new file mode 100644 index 00000000000..4d6144e51ec --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/flagged_both_ns.js @@ -0,0 +1,16 @@ +const { touch } = require("../side-effect-counter"); + +module.exports.__esModule = true; +module.exports.default = f; +module.exports.x = 1; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} + +function f() { + return "func"; +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/commonjs/flagged_default.js b/test/configCases/defer-import/defer-runtime/commonjs/flagged_default.js new file mode 100644 index 00000000000..2eb7971a8f4 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/flagged_default.js @@ -0,0 +1,10 @@ +const { touch } = require("../side-effect-counter"); + +module.exports.__esModule = true; +module.exports.default = f; + +function f() { + return "func"; +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/commonjs/flagged_default_ns.js b/test/configCases/defer-import/defer-runtime/commonjs/flagged_default_ns.js new file mode 100644 index 00000000000..2eb7971a8f4 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/flagged_default_ns.js @@ -0,0 +1,10 @@ +const { touch } = require("../side-effect-counter"); + +module.exports.__esModule = true; +module.exports.default = f; + +function f() { + return "func"; +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/commonjs/flagged_named.js b/test/configCases/defer-import/defer-runtime/commonjs/flagged_named.js new file mode 100644 index 00000000000..c17f3c08f46 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/flagged_named.js @@ -0,0 +1,15 @@ +const { touch } = require("../side-effect-counter"); + +module.exports.__esModule = true; +module.exports.f = f; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} + +function f() { + return "func"; +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/commonjs/flagged_named_ns.js b/test/configCases/defer-import/defer-runtime/commonjs/flagged_named_ns.js new file mode 100644 index 00000000000..c17f3c08f46 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/commonjs/flagged_named_ns.js @@ -0,0 +1,15 @@ +const { touch } = require("../side-effect-counter"); + +module.exports.__esModule = true; +module.exports.f = f; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} + +function f() { + return "func"; +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/esm/esm_both.mjs b/test/configCases/defer-import/defer-runtime/esm/esm_both.mjs new file mode 100644 index 00000000000..6ad87ec445f --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/esm_both.mjs @@ -0,0 +1,12 @@ +import { touch } from "../side-effect-counter.js"; + +touch(); +export default function () { + return "func"; +} +export const x = 1; +export class T { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/esm/esm_both_ns.mjs b/test/configCases/defer-import/defer-runtime/esm/esm_both_ns.mjs new file mode 100644 index 00000000000..6ad87ec445f --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/esm_both_ns.mjs @@ -0,0 +1,12 @@ +import { touch } from "../side-effect-counter.js"; + +touch(); +export default function () { + return "func"; +} +export const x = 1; +export class T { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/esm/esm_default.mjs b/test/configCases/defer-import/defer-runtime/esm/esm_default.mjs new file mode 100644 index 00000000000..5070649e96c --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/esm_default.mjs @@ -0,0 +1,6 @@ +import { touch } from "../side-effect-counter.js"; + +touch(); +export default function () { + return "func"; +} diff --git a/test/configCases/defer-import/defer-runtime/esm/esm_default_ns.mjs b/test/configCases/defer-import/defer-runtime/esm/esm_default_ns.mjs new file mode 100644 index 00000000000..5070649e96c --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/esm_default_ns.mjs @@ -0,0 +1,6 @@ +import { touch } from "../side-effect-counter.js"; + +touch(); +export default function () { + return "func"; +} diff --git a/test/configCases/defer-import/defer-runtime/esm/esm_named.mjs b/test/configCases/defer-import/defer-runtime/esm/esm_named.mjs new file mode 100644 index 00000000000..c8b695967db --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/esm_named.mjs @@ -0,0 +1,12 @@ +import { touch } from "../side-effect-counter.js"; + +export function f() { + return "func"; +} +export class T { + constructor() { + this.x = 1; + } +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/esm/esm_named_ns.mjs b/test/configCases/defer-import/defer-runtime/esm/esm_named_ns.mjs new file mode 100644 index 00000000000..7a6caa73dd9 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/esm_named_ns.mjs @@ -0,0 +1,13 @@ +import { touch } from "../side-effect-counter.js"; + +export function f() { + return "func"; +} +export class T { + constructor() { + this.x = 1; + } +} + + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/esm/never.mjs b/test/configCases/defer-import/defer-runtime/esm/never.mjs new file mode 100644 index 00000000000..e5301505656 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/never.mjs @@ -0,0 +1 @@ +throw new Error('this file should never be evaluated.') diff --git a/test/configCases/defer-import/defer-runtime/esm/reexport-deep.cjs b/test/configCases/defer-import/defer-runtime/esm/reexport-deep.cjs new file mode 100644 index 00000000000..16eacfee82c --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/reexport-deep.cjs @@ -0,0 +1,13 @@ +const { touch } = require("../side-effect-counter"); + +function f() { + return "func"; +} + +touch(); +module.exports.f = f; +module.exports.T = class T { + constructor() { + this.x = 1; + } +} diff --git a/test/configCases/defer-import/defer-runtime/esm/reexport-deep.mjs b/test/configCases/defer-import/defer-runtime/esm/reexport-deep.mjs new file mode 100644 index 00000000000..631352c0490 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/reexport-deep.mjs @@ -0,0 +1,13 @@ +import { touch } from "../side-effect-counter.js"; + +export function f() { + return "func"; +} + +export class T { + constructor() { + this.x = 1; + } +} + +touch(); diff --git a/test/configCases/defer-import/defer-runtime/esm/reexport.mjs b/test/configCases/defer-import/defer-runtime/esm/reexport.mjs new file mode 100644 index 00000000000..8737a77896e --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/esm/reexport.mjs @@ -0,0 +1,4 @@ +import * as reexport_ns from /* webpackDefer: true */ "./reexport-deep.mjs"; +import * as reexport_cjs_ns from /* webpackDefer: true */ "./reexport-deep.cjs"; + +export { reexport_ns, reexport_cjs_ns }; diff --git a/test/configCases/defer-import/defer-runtime/side-effect-counter.js b/test/configCases/defer-import/defer-runtime/side-effect-counter.js new file mode 100644 index 00000000000..45a6f1cc7b6 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/side-effect-counter.js @@ -0,0 +1,14 @@ +let count = 0; +export function touch() { + count++; +} +export function reset() { + count = 0; +} +export function assertTouched() { + if (count === 0) throw new Error("Side effect not triggered."); + if (count > 1) throw new Error("Side effect triggered more than expected."); +} +export function assertUntouched() { + if (count !== 0) throw new Error("Side effect triggered."); +} diff --git a/test/configCases/defer-import/defer-runtime/webpack.config.js b/test/configCases/defer-import/defer-runtime/webpack.config.js new file mode 100644 index 00000000000..d7b3258a400 --- /dev/null +++ b/test/configCases/defer-import/defer-runtime/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + entry: ["./all.js"], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-then-non-defer/0.js b/test/configCases/defer-import/defer-then-non-defer/0.js new file mode 100644 index 00000000000..658b4a1fc17 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/0.js @@ -0,0 +1,3 @@ +import * as deferred from /* webpackDefer: true */ './deferred.js'; +import { order } from './order.js'; +order.push([0, deferred][0]); diff --git a/test/configCases/defer-import/defer-then-non-defer/1.js b/test/configCases/defer-import/defer-then-non-defer/1.js new file mode 100644 index 00000000000..8e27eb19f91 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/1.js @@ -0,0 +1,3 @@ +import './deferred.js'; +import { order } from './order.js'; +order.push(1); diff --git a/test/configCases/defer-import/defer-then-non-defer/a.js b/test/configCases/defer-import/defer-then-non-defer/a.js new file mode 100644 index 00000000000..79b2a68c787 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/a.js @@ -0,0 +1,12 @@ +import * as deferred from /* webpackDefer: true */ './deferred.1.js'; +import { order } from './order.js'; +order.push(['a', deferred][0]); + +export function next() { + if (typeof avoidAnalyze(deferred).then !== 'undefined') { + throw new Error('deferred should be a deferred namespace object.'); + } +} +function avoidAnalyze(params) { + return params; +} diff --git a/test/configCases/defer-import/defer-then-non-defer/b.js b/test/configCases/defer-import/defer-then-non-defer/b.js new file mode 100644 index 00000000000..5f9c1e32d3e --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/b.js @@ -0,0 +1,9 @@ +import * as ns from './deferred.1.js'; +import { order } from './order.js'; +order.push(['b', ns][0]); +if (typeof avoidAnalyze(ns).then === 'undefined') { + throw new Error('ns should not be a deferred namespace object.'); +} +function avoidAnalyze(params) { + return params; +} diff --git a/test/configCases/defer-import/defer-then-non-defer/deferred.1.js b/test/configCases/defer-import/defer-then-non-defer/deferred.1.js new file mode 100644 index 00000000000..8a7cc6ffe45 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/deferred.1.js @@ -0,0 +1,4 @@ +import { order } from "./order"; + +order.push("deferred.1"); +export function then() {} diff --git a/test/configCases/defer-import/defer-then-non-defer/deferred.js b/test/configCases/defer-import/defer-then-non-defer/deferred.js new file mode 100644 index 00000000000..ee896090310 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/deferred.js @@ -0,0 +1,3 @@ +import { order } from "./order"; + +order.push("deferred"); diff --git a/test/configCases/defer-import/defer-then-non-defer/entry.js b/test/configCases/defer-import/defer-then-non-defer/entry.js new file mode 100644 index 00000000000..e886f7d4788 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/entry.js @@ -0,0 +1,15 @@ +import { order } from "./order"; +import './0.js'; +import './1.js'; +import './a.js'; +import './b.js'; +import { next } from "./a.js"; + +const expected = "0 deferred 1 a deferred.1 b"; +if (order.join(' ') !== expected) { + throw new Error( + `Expected order to be "${expected}", but got "${order.join(' ')}"` + ); +} + +next(); diff --git a/test/configCases/defer-import/defer-then-non-defer/index.js b/test/configCases/defer-import/defer-then-non-defer/index.js new file mode 100644 index 00000000000..ac5d9f147fa --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/index.js @@ -0,0 +1,3 @@ +it("execution order should be correct.", () => { + return import("./entry.js"); +}); diff --git a/test/configCases/defer-import/defer-then-non-defer/order.js b/test/configCases/defer-import/defer-then-non-defer/order.js new file mode 100644 index 00000000000..5bb36829626 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/order.js @@ -0,0 +1 @@ +export const order = []; diff --git a/test/configCases/defer-import/defer-then-non-defer/webpack.config.js b/test/configCases/defer-import/defer-then-non-defer/webpack.config.js new file mode 100644 index 00000000000..981c84a29c4 --- /dev/null +++ b/test/configCases/defer-import/defer-then-non-defer/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: true + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/defer-used-in-async/deferred.js b/test/configCases/defer-import/defer-used-in-async/deferred.js new file mode 100644 index 00000000000..0b05a700193 --- /dev/null +++ b/test/configCases/defer-import/defer-used-in-async/deferred.js @@ -0,0 +1,6 @@ +import { data, setData } from "./side-effect-counter"; + +if (data !== "entry") + throw new Error("Expected entry.js to be executed first."); +setData("deferred"); +export {}; diff --git a/test/configCases/defer-import/defer-used-in-async/entry.js b/test/configCases/defer-import/defer-used-in-async/entry.js new file mode 100644 index 00000000000..6b4e680ce08 --- /dev/null +++ b/test/configCases/defer-import/defer-used-in-async/entry.js @@ -0,0 +1,11 @@ +import * as ns from /* webpackDefer: true */ "./deferred.js"; +import { data, setData } from "./side-effect-counter.js"; + +if (data !== undefined) + throw new Error("No side effect should be trigger before this."); +setData("entry"); +await import("./sync-access.js"); + +if (Math.random() > 1) { + console.log(ns); +} diff --git a/test/configCases/defer-import/defer-used-in-async/index.js b/test/configCases/defer-import/defer-used-in-async/index.js new file mode 100644 index 00000000000..ac5d9f147fa --- /dev/null +++ b/test/configCases/defer-import/defer-used-in-async/index.js @@ -0,0 +1,3 @@ +it("execution order should be correct.", () => { + return import("./entry.js"); +}); diff --git a/test/configCases/defer-import/defer-used-in-async/side-effect-counter.js b/test/configCases/defer-import/defer-used-in-async/side-effect-counter.js new file mode 100644 index 00000000000..4824c2574f8 --- /dev/null +++ b/test/configCases/defer-import/defer-used-in-async/side-effect-counter.js @@ -0,0 +1,4 @@ +export let data; +export function setData(d) { + data = d; +} diff --git a/test/configCases/defer-import/defer-used-in-async/sync-access.js b/test/configCases/defer-import/defer-used-in-async/sync-access.js new file mode 100644 index 00000000000..774ff9c4b35 --- /dev/null +++ b/test/configCases/defer-import/defer-used-in-async/sync-access.js @@ -0,0 +1,6 @@ +import * as ns from "./deferred.js"; +import { data } from "./side-effect-counter.js"; + +if (data !== "deferred") + throw new Error("Expected deferred.js to be executed first."); +Object.entries(ns); diff --git a/test/configCases/defer-import/defer-used-in-async/webpack.config.js b/test/configCases/defer-import/defer-used-in-async/webpack.config.js new file mode 100644 index 00000000000..c3897eb5054 --- /dev/null +++ b/test/configCases/defer-import/defer-used-in-async/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/dynamic-default-mixed/dynamic.cjs b/test/configCases/defer-import/dynamic-default-mixed/dynamic.cjs new file mode 100644 index 00000000000..350c228fec3 --- /dev/null +++ b/test/configCases/defer-import/dynamic-default-mixed/dynamic.cjs @@ -0,0 +1,2 @@ +exports.__esModule = Math.random() > 0.5; +exports.value = 42; diff --git a/test/configCases/defer-import/dynamic-default-mixed/index.js b/test/configCases/defer-import/dynamic-default-mixed/index.js new file mode 100644 index 00000000000..93b489be091 --- /dev/null +++ b/test/configCases/defer-import/dynamic-default-mixed/index.js @@ -0,0 +1,5 @@ +import { defaultValue, deferredValue } from "./reexport" + +it("should have correct default export with concatenation modules", () => { + expect(defaultValue).toBe(deferredValue); +}); diff --git a/test/configCases/defer-import/dynamic-default-mixed/reexport.js b/test/configCases/defer-import/dynamic-default-mixed/reexport.js new file mode 100644 index 00000000000..9ce8a374841 --- /dev/null +++ b/test/configCases/defer-import/dynamic-default-mixed/reexport.js @@ -0,0 +1,5 @@ +import defer * as n from "./dynamic.cjs"; +import nDef from "./dynamic.cjs"; + +export const deferredValue = n.value; +export const defaultValue = nDef.value; diff --git a/test/configCases/defer-import/dynamic-default-mixed/webpack.config.js b/test/configCases/defer-import/dynamic-default-mixed/webpack.config.js new file mode 100644 index 00000000000..5d29f61d419 --- /dev/null +++ b/test/configCases/defer-import/dynamic-default-mixed/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: true + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/harmony-import-mixed/async.js b/test/configCases/defer-import/harmony-import-mixed/async.js new file mode 100644 index 00000000000..aace6650554 --- /dev/null +++ b/test/configCases/defer-import/harmony-import-mixed/async.js @@ -0,0 +1 @@ +export const value = await "shared-value-async"; diff --git a/test/configCases/defer-import/harmony-import-mixed/index.js b/test/configCases/defer-import/harmony-import-mixed/index.js new file mode 100644 index 00000000000..b476eea5af2 --- /dev/null +++ b/test/configCases/defer-import/harmony-import-mixed/index.js @@ -0,0 +1,34 @@ +import { value as directValue } from "./shared.js"; // non-defer import +import * as deferredShared from /* webpackDefer: true */ "./shared.js"; // defer import + +import { value as directValueAsync } from "./shared-async.js"; // non-defer import +import * as deferredSharedAsync from /* webpackDefer: true */ "./shared-async.js"; // defer import + +it("should handle mixed defer/non-defer targets correctly", () => { + // Test direct non-defer access + expect(typeof directValue).toBe("string"); + expect(directValue).toBe("shared-value"); + + // Test deferred access + expect(typeof deferredShared).toBe("object"); + expect(deferredShared).not.toBe(null); + expect(deferredShared.value).toBe("shared-value"); + + // Both should access the same underlying value + expect(directValue).toBe(deferredShared.value); +}); + +it("should handle mixed defer/non-defer targets with async correctly", () => { + // Test direct non-defer access + expect(typeof directValueAsync).toBe("string"); + expect(directValueAsync).toBe("shared-value-async"); + + // Test deferred access + expect(deferredSharedAsync).not.toBeInstanceOf(Promise); + ((m) => { + expect(m.value).toBe("shared-value-async"); + })(deferredSharedAsync); + + // Both should access the same underlying value + expect(directValueAsync).toBe(deferredSharedAsync.value); +}); diff --git a/test/configCases/defer-import/harmony-import-mixed/shared-async.js b/test/configCases/defer-import/harmony-import-mixed/shared-async.js new file mode 100644 index 00000000000..74aa55cb5e0 --- /dev/null +++ b/test/configCases/defer-import/harmony-import-mixed/shared-async.js @@ -0,0 +1 @@ +export * from "./async"; diff --git a/test/configCases/defer-import/harmony-import-mixed/shared.js b/test/configCases/defer-import/harmony-import-mixed/shared.js new file mode 100644 index 00000000000..fa1f624691f --- /dev/null +++ b/test/configCases/defer-import/harmony-import-mixed/shared.js @@ -0,0 +1,2 @@ +// This module will be imported both as defer and non-defer +export const value = "shared-value"; \ No newline at end of file diff --git a/test/configCases/defer-import/harmony-import-mixed/test.filter.js b/test/configCases/defer-import/harmony-import-mixed/test.filter.js new file mode 100644 index 00000000000..4640395ae51 --- /dev/null +++ b/test/configCases/defer-import/harmony-import-mixed/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsAsync = require("../../../helpers/supportsAsync"); + +module.exports = () => supportsAsync(); diff --git a/test/configCases/defer-import/harmony-import-mixed/webpack.config.js b/test/configCases/defer-import/harmony-import-mixed/webpack.config.js new file mode 100644 index 00000000000..5d29f61d419 --- /dev/null +++ b/test/configCases/defer-import/harmony-import-mixed/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: true + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/import-attributes/file.ext b/test/configCases/defer-import/import-attributes/file.ext new file mode 100644 index 00000000000..879aeeaf4bf --- /dev/null +++ b/test/configCases/defer-import/import-attributes/file.ext @@ -0,0 +1,4 @@ +{ + "foo": "bar", + "nested": { "foo": "bar" } +} diff --git a/test/configCases/defer-import/import-attributes/index.js b/test/configCases/defer-import/import-attributes/index.js new file mode 100644 index 00000000000..60df4a38608 --- /dev/null +++ b/test/configCases/defer-import/import-attributes/index.js @@ -0,0 +1,18 @@ +import defer * as mod1 from "./file.ext" with { type: "bytes" }; +import defer * as mod2 from "./file.ext" with { type: "json" }; +import * as mod3 from "./file.ext" with { type: "bytes" }; +import * as mod4 from "./file.ext" with { type: "json" }; + +it("should work with defer and import attributes", () => { + const decoder = new TextDecoder('utf-8'); + const mod1Decoded = JSON.parse(decoder.decode(mod1.default)); + expect(mod1Decoded.foo).toBe("bar"); + expect(mod1Decoded.nested.foo).toBe("bar"); + expect(mod2.default.foo).toBe("bar"); + expect(mod2.default.nested.foo).toBe("bar"); + const mod2Decoded = JSON.parse(decoder.decode(mod3.default)); + expect(mod2Decoded.foo).toBe("bar"); + expect(mod2Decoded.nested.foo).toBe("bar"); + expect(mod4.default.foo).toBe("bar"); + expect(mod4.default.nested.foo).toBe("bar"); +}); diff --git a/test/configCases/defer-import/import-attributes/test.filter.js b/test/configCases/defer-import/import-attributes/test.filter.js new file mode 100644 index 00000000000..03c5581fcb2 --- /dev/null +++ b/test/configCases/defer-import/import-attributes/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsTextDecoder = require("../../../helpers/supportsTextDecoder"); + +module.exports = () => supportsTextDecoder(); diff --git a/test/configCases/defer-import/import-attributes/webpack.config.js b/test/configCases/defer-import/import-attributes/webpack.config.js new file mode 100644 index 00000000000..c3897eb5054 --- /dev/null +++ b/test/configCases/defer-import/import-attributes/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/defer-import/same-module/index.js b/test/configCases/defer-import/same-module/index.js new file mode 100644 index 00000000000..1a67b1a3092 --- /dev/null +++ b/test/configCases/defer-import/same-module/index.js @@ -0,0 +1,9 @@ +import * as mod1 from "./module.js"; +import defer * as mod2 from "./module.js"; + +it("should generate different runtime code for the same module", () => { + expect(mod1.default).toBe(mod2.default); + expect(mod1).toBe(mod2); + // Test itself + module + expect(Object.keys(__webpack_modules__).length).toBe(2); +}); diff --git a/test/configCases/defer-import/same-module/module.js b/test/configCases/defer-import/same-module/module.js new file mode 100644 index 00000000000..5c6b89abfc8 --- /dev/null +++ b/test/configCases/defer-import/same-module/module.js @@ -0,0 +1 @@ +export default "ok"; diff --git a/test/configCases/defer-import/same-module/webpack.config.js b/test/configCases/defer-import/same-module/webpack.config.js new file mode 100644 index 00000000000..5234222c9ad --- /dev/null +++ b/test/configCases/defer-import/same-module/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true + } +}; diff --git a/test/configCases/delegated-hash/simple/warnings.js b/test/configCases/delegated-hash/simple/warnings.js new file mode 100644 index 00000000000..fdcecb3be97 --- /dev/null +++ b/test/configCases/delegated-hash/simple/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/hashed/, /deprecated/]]; diff --git a/test/configCases/delegated-hash/simple/webpack.config.js b/test/configCases/delegated-hash/simple/webpack.config.js index ba5394c40db..8fa1ba8b3c7 100644 --- a/test/configCases/delegated-hash/simple/webpack.config.js +++ b/test/configCases/delegated-hash/simple/webpack.config.js @@ -1,8 +1,13 @@ -var DelegatedPlugin = require("../../../../lib/DelegatedPlugin"); -var HashedModuleIdsPlugin = require("../../../../lib/HashedModuleIdsPlugin"); +"use strict"; + +const DelegatedPlugin = require("../../../../").DelegatedPlugin; + +/** @type {import("../../../../").Configuration} */ module.exports = { + optimization: { + moduleIds: "hashed" + }, plugins: [ - new HashedModuleIdsPlugin(), new DelegatedPlugin({ source: "./bundle", type: "require", diff --git a/test/configCases/delegated/simple/webpack.config.js b/test/configCases/delegated/simple/webpack.config.js index d729444b38c..ae47bc66b49 100644 --- a/test/configCases/delegated/simple/webpack.config.js +++ b/test/configCases/delegated/simple/webpack.config.js @@ -1,4 +1,8 @@ -var DelegatedPlugin = require("../../../../lib/DelegatedPlugin"); +"use strict"; + +const DelegatedPlugin = require("../../../../").DelegatedPlugin; + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new DelegatedPlugin({ diff --git a/test/configCases/deprecations/chunk-and-module/deprecations.js b/test/configCases/deprecations/chunk-and-module/deprecations.js new file mode 100644 index 00000000000..8dff62679f0 --- /dev/null +++ b/test/configCases/deprecations/chunk-and-module/deprecations.js @@ -0,0 +1,35 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_CHUNK_ADD_MODULE/ }, + { code: /DEP_WEBPACK_CHUNK_CONTAINS_MODULE/ }, + { code: /DEP_WEBPACK_CHUNK_ENTRY_MODULE/ }, + { code: /DEP_WEBPACK_CHUNK_GET_CHUNK_MODULE_MAPS/ }, + { code: /DEP_WEBPACK_CHUNK_GET_MODULES/ }, + { code: /DEP_WEBPACK_CHUNK_GET_NUMBER_OF_MODULES/ }, + { code: /DEP_WEBPACK_CHUNK_HAS_ENTRY_MODULE/ }, + { code: /DEP_WEBPACK_CHUNK_HAS_MODULE_IN_GRAPH/ }, + { code: /DEP_WEBPACK_CHUNK_IS_EMPTY/ }, + { code: /DEP_WEBPACK_CHUNK_MODULES_ITERABLE/ }, + { code: /DEP_WEBPACK_CHUNK_MODULES_SIZE/ }, + { code: /DEP_WEBPACK_CHUNK_REMOVE_MODULE/ }, + { code: /DEP_WEBPACK_CHUNK_SIZE/ }, + { code: /DEP_WEBPACK_MODULE_ADD_CHUNK/ }, + { code: /DEP_WEBPACK_MODULE_CHUNKS_ITERABLE/ }, + { code: /DEP_WEBPACK_MODULE_DEPTH/ }, + { code: /DEP_WEBPACK_MODULE_GET_CHUNKS/ }, + { code: /DEP_WEBPACK_MODULE_GET_NUMBER_OF_CHUNKS/ }, + { code: /DEP_WEBPACK_MODULE_HASH/ }, + { code: /DEP_WEBPACK_MODULE_INDEX2/ }, + { code: /DEP_WEBPACK_MODULE_INDEX/ }, + { code: /DEP_WEBPACK_MODULE_ISSUER/ }, + { code: /DEP_WEBPACK_MODULE_IS_ENTRY_MODULE/ }, + { code: /DEP_WEBPACK_MODULE_IS_IN_CHUNK/ }, + { code: /DEP_WEBPACK_MODULE_OPTIMIZATION_BAILOUT/ }, + { code: /DEP_WEBPACK_MODULE_OPTIONAL/ }, + { code: /DEP_WEBPACK_MODULE_PROFILE/ }, + { code: /DEP_WEBPACK_MODULE_REMOVE_CHUNK/ }, + { code: /DEP_WEBPACK_MODULE_RENDERED_HASH/ }, + { code: /DEP_WEBPACK_MODULE_SOURCE/ }, + { code: /DEP_WEBPACK_MODULE_USED_EXPORTS/ } +]; diff --git a/test/configCases/deprecations/chunk-and-module/index.js b/test/configCases/deprecations/chunk-and-module/index.js new file mode 100644 index 00000000000..493d4ee534d --- /dev/null +++ b/test/configCases/deprecations/chunk-and-module/index.js @@ -0,0 +1,7 @@ +import { testExport as importedTestExport } from "./index"; + +export const testExport = 42; + +it("should compile with deprecations", () => { + expect(importedTestExport).toBe(42); +}); diff --git a/test/configCases/deprecations/chunk-and-module/webpack.config.js b/test/configCases/deprecations/chunk-and-module/webpack.config.js new file mode 100644 index 00000000000..8b22b0b0809 --- /dev/null +++ b/test/configCases/deprecations/chunk-and-module/webpack.config.js @@ -0,0 +1,82 @@ +"use strict"; + +const { ChunkGraph, ExternalModule } = require("../../../../"); + +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + (compiler) => { + compiler.hooks.done.tap("Test", ({ compilation }) => { + const { chunkGraph } = compilation; + for (const chunk of compilation.chunks) { + expect(chunk.entryModule).toBe( + [...chunkGraph.getChunkEntryModulesIterable(chunk)][0] + ); + expect(chunk.hasEntryModule()).toBe(true); + expect(chunk.getNumberOfModules()).toBe(3); + const module = new ExternalModule("external", "var", "external"); + ChunkGraph.setChunkGraphForModule(module, chunkGraph); + chunk.addModule(module); + module.addChunk(chunk); + expect(chunk.getNumberOfModules()).toBe(4); + expect(new Set(chunk.modulesIterable)).toContain(module); + expect(new Set(chunk.getModules())).toContain(chunk.entryModule); + expect(chunk.hasModuleInGraph((m) => m === module)).toBe(true); + expect(chunk.containsModule(module)).toBe(true); + chunk.removeModule(module); + module.removeChunk(chunk); + expect(chunk.getNumberOfModules()).toBe(3); + expect(chunk.containsModule(module)).toBe(false); + expect(chunk.isEmpty()).toBe(false); + expect(chunk.modulesSize()).toBeTypeOf("number"); + expect(chunk.size()).toBe(chunk.modulesSize() * 10 + 10000); + expect(chunk.getChunkModuleMaps(() => true)).toEqual({ + id: {}, + hash: {} + }); + + const m = chunk.entryModule; + expect( + m + .source( + compilation.dependencyTemplates, + compilation.runtimeTemplate + ) + .source() + ).toMatch(/should compile with deprecations/); + expect(m.hash).toMatch(/^[0-9a-f]{32}$/); + expect(m.renderedHash).toMatch(/^[0-9a-f]{20}$/); + expect(m.profile).toBeUndefined(); + expect(m.index).toBe(0); + m.index = 1000; + expect(m.index).toBe(1000); + expect(m.index2).toBe(0); + m.index2 = 1000; + expect(m.index2).toBe(1000); + expect(m.depth).toBe(0); + m.depth = 1000; + expect(m.depth).toBe(1000); + expect(m.issuer).toBeNull(); + m.issuer = module; + expect(m.issuer).toBe(module); + expect( + typeof m.usedExports === "boolean" + ? [] + : [.../** @type {Set} */ (m.usedExports)] + ).toEqual(["testExport"]); + expect(Array.isArray(m.optimizationBailout)).toBe(true); + expect(m.optional).toBe(false); + expect(m.isInChunk(chunk)).toBe(true); + expect(m.isEntryModule()).toBe(true); + expect(m.getChunks()).toEqual([chunk]); + expect(m.getNumberOfChunks()).toBe(1); + expect([...m.chunksIterable]).toEqual([chunk]); + expect(m.isProvided("testExport")).toBe(true); + expect(m.isProvided("otherExport")).toBe(false); + } + }); + } + ] +}; diff --git a/test/configCases/deprecations/chunk-files/deprecations.js b/test/configCases/deprecations/chunk-files/deprecations.js new file mode 100644 index 00000000000..f3e917a89a5 --- /dev/null +++ b/test/configCases/deprecations/chunk-files/deprecations.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_DEPRECATION_ARRAY_TO_SET/ }, + { code: /DEP_WEBPACK_DEPRECATION_ARRAY_TO_SET_INDEXER/ }, + { code: /DEP_WEBPACK_DEPRECATION_ARRAY_TO_SET_LENGTH/ }, + { code: /DEP_WEBPACK_DEPRECATION_ARRAY_TO_SET_PUSH/ } +]; diff --git a/test/configCases/deprecations/chunk-files/index.js b/test/configCases/deprecations/chunk-files/index.js new file mode 100644 index 00000000000..a2db56a057e --- /dev/null +++ b/test/configCases/deprecations/chunk-files/index.js @@ -0,0 +1 @@ +it("should compile with deprecations", () => {}); diff --git a/test/configCases/deprecations/chunk-files/webpack.config.js b/test/configCases/deprecations/chunk-files/webpack.config.js new file mode 100644 index 00000000000..23db54e0b16 --- /dev/null +++ b/test/configCases/deprecations/chunk-files/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + (compiler) => { + compiler.hooks.done.tap("Test", ({ compilation }) => { + for (const c of compilation.chunks) { + const chunk = + /** @type {{ files: string[] } & import("../../../../").Chunk} */ ( + c + ); + expect(chunk.files).toHaveLength(chunk.files.size); + expect(chunk.files[0]).toBe([...chunk.files][0]); + expect(chunk.files.join(",")).toBe([...chunk.files].join(",")); + expect(() => (chunk.files.length = 0)).toThrow( + /chunk\.files was changed from Array to Set \(writing to Array property 'length' is not possible\)/ + ); + expect(() => chunk.files.pop()).toThrow( + /chunk\.files was changed from Array to Set \(using Array method 'pop' is not possible\)/ + ); + chunk.files.push("test.js"); + expect(chunk.files).toContain("test.js"); + chunk.files.delete("test.js"); + } + }); + } + ] +}; diff --git a/test/configCases/deprecations/config/deprecations.js b/test/configCases/deprecations/config/deprecations.js new file mode 100644 index 00000000000..fe3b56bfc3a --- /dev/null +++ b/test/configCases/deprecations/config/deprecations.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_CONFIGURATION_OPTIMIZATION_NO_EMIT_ON_ERRORS/ } +]; diff --git a/test/configCases/deprecations/config/index.js b/test/configCases/deprecations/config/index.js new file mode 100644 index 00000000000..a2db56a057e --- /dev/null +++ b/test/configCases/deprecations/config/index.js @@ -0,0 +1 @@ +it("should compile with deprecations", () => {}); diff --git a/test/configCases/deprecations/config/webpack.config.js b/test/configCases/deprecations/config/webpack.config.js new file mode 100644 index 00000000000..493a1feda3e --- /dev/null +++ b/test/configCases/deprecations/config/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + noEmitOnErrors: true + } +}; diff --git a/test/configCases/deprecations/invalid-dependencies/index.js b/test/configCases/deprecations/invalid-dependencies/index.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/deprecations/invalid-dependencies/index.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/deprecations/invalid-dependencies/loader.js b/test/configCases/deprecations/invalid-dependencies/loader.js new file mode 100644 index 00000000000..71212ed09b8 --- /dev/null +++ b/test/configCases/deprecations/invalid-dependencies/loader.js @@ -0,0 +1,12 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + this.addDependency("loader.js"); + this.addDependency("../**/dir/*.js"); + this.addDependency("../**/file.js"); + this.addContextDependency("."); + this.addMissingDependency("./missing1.js"); + this.addMissingDependency("missing2.js"); + this.addMissingDependency("missing3.js"); + this.addMissingDependency("missing4.js"); + return source; +}; diff --git a/test/configCases/deprecations/invalid-dependencies/warnings.js b/test/configCases/deprecations/invalid-dependencies/warnings.js new file mode 100644 index 00000000000..137b91c0d56 --- /dev/null +++ b/test/configCases/deprecations/invalid-dependencies/warnings.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = [ + [ + { moduleName: /\.\/index\.js/ }, + /Invalid dependencies have been reported/, + /"\."/, + /"\.\.\/\*\*\/dir\/\*\.js"/, + { details: /"\.\/missing1\.js"/ }, + { details: /"loader\.js"/ }, + /and more/, + { details: /"missing3\.js"/ } + ] +]; diff --git a/test/configCases/deprecations/invalid-dependencies/webpack.config.js b/test/configCases/deprecations/invalid-dependencies/webpack.config.js new file mode 100644 index 00000000000..ad91963f42a --- /dev/null +++ b/test/configCases/deprecations/invalid-dependencies/webpack.config.js @@ -0,0 +1,52 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /index\.js$/, + loader: "./loader.js" + } + ] + }, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.succeedModule.tap("Test", (module) => { + const fileDeps = new webpack.util.LazySet(); + const contextDeps = new webpack.util.LazySet(); + const missingDeps = new webpack.util.LazySet(); + const buildDeps = new webpack.util.LazySet(); + module.addCacheDependencies( + fileDeps, + contextDeps, + missingDeps, + buildDeps + ); + expect([...fileDeps].sort()).toEqual([ + path.join(__dirname, "index.js"), + path.join(__dirname, "loader.js") + ]); + expect([...contextDeps].sort()).toEqual([ + path.join(__dirname, ".."), + __dirname + ]); + expect([...missingDeps].sort()).toEqual([ + path.join(__dirname, "missing1.js"), + path.join(__dirname, "missing2.js"), + path.join(__dirname, "missing3.js"), + path.join(__dirname, "missing4.js") + ]); + expect([...fileDeps].sort()).toEqual([ + path.join(__dirname, "index.js"), + path.join(__dirname, "loader.js") + ]); + }); + }); + } + ] +}; diff --git a/test/configCases/deprecations/non-unique-hash/a.js b/test/configCases/deprecations/non-unique-hash/a.js new file mode 100644 index 00000000000..1a4fb062cd4 --- /dev/null +++ b/test/configCases/deprecations/non-unique-hash/a.js @@ -0,0 +1,3 @@ +import { a } from "./module"; + +console.log(a); diff --git a/test/configCases/deprecations/non-unique-hash/b.js b/test/configCases/deprecations/non-unique-hash/b.js new file mode 100644 index 00000000000..1e82c8fd056 --- /dev/null +++ b/test/configCases/deprecations/non-unique-hash/b.js @@ -0,0 +1,3 @@ +import { b } from "./module"; + +console.log(b); diff --git a/test/configCases/deprecations/non-unique-hash/deprecations.js b/test/configCases/deprecations/non-unique-hash/deprecations.js new file mode 100644 index 00000000000..7b23f649521 --- /dev/null +++ b/test/configCases/deprecations/non-unique-hash/deprecations.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [{ code: /DEP_WEBPACK_MODULE_HASH/ }]; diff --git a/test/configCases/deprecations/non-unique-hash/index.js b/test/configCases/deprecations/non-unique-hash/index.js new file mode 100644 index 00000000000..37da9f04e2d --- /dev/null +++ b/test/configCases/deprecations/non-unique-hash/index.js @@ -0,0 +1 @@ +it("should compile fine", () => {}); diff --git a/test/configCases/deprecations/non-unique-hash/module.js b/test/configCases/deprecations/non-unique-hash/module.js new file mode 100644 index 00000000000..72ab60e17a2 --- /dev/null +++ b/test/configCases/deprecations/non-unique-hash/module.js @@ -0,0 +1,2 @@ +export const a = 1; +export const b = 2; diff --git a/test/configCases/deprecations/non-unique-hash/webpack.config.js b/test/configCases/deprecations/non-unique-hash/webpack.config.js new file mode 100644 index 00000000000..10d7d445c6b --- /dev/null +++ b/test/configCases/deprecations/non-unique-hash/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +/** @typedef {import("../../../../").Chunk} Chunk */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./index", + a: "./a", + b: "./b" + }, + output: { + filename: "[name].js" + }, + optimization: { + usedExports: true, + concatenateModules: false + }, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.afterModuleHash.tap("Test", () => { + const hashes = []; + expect(() => { + for (const module of compilation.chunkGraph.getChunkModulesIterable( + /** @type {Chunk} */ + (compilation.namedChunks.get("a")) + )) { + hashes.push(module.hash); + } + }).toThrow( + /No unique hash info entry for unspecified runtime .+ \(existing runtimes: a, b\)\.\n.+opt-out via optimization\.usedExports: "global"/ + ); + }); + }); + } + ] +}; diff --git a/test/configCases/devtools/harmony-eval-source-map/webpack.config.js b/test/configCases/devtools/harmony-eval-source-map/webpack.config.js deleted file mode 100644 index 21e4f13b47e..00000000000 --- a/test/configCases/devtools/harmony-eval-source-map/webpack.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - devtool: "eval-source-map" -}; diff --git a/test/configCases/devtools/harmony-eval/webpack.config.js b/test/configCases/devtools/harmony-eval/webpack.config.js deleted file mode 100644 index 8c6a61a3d54..00000000000 --- a/test/configCases/devtools/harmony-eval/webpack.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - devtool: "eval" -}; diff --git a/test/configCases/dll-plugin-entry/0-create-dll/test.config.js b/test/configCases/dll-plugin-entry/0-create-dll/test.config.js index 08ea6c319c8..67028ae7c8c 100644 --- a/test/configCases/dll-plugin-entry/0-create-dll/test.config.js +++ b/test/configCases/dll-plugin-entry/0-create-dll/test.config.js @@ -1 +1,3 @@ -exports.noTests = true; +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/dll-plugin-entry/0-create-dll/webpack.config.js b/test/configCases/dll-plugin-entry/0-create-dll/webpack.config.js index 6824e7f92bf..b9707095bfb 100644 --- a/test/configCases/dll-plugin-entry/0-create-dll/webpack.config.js +++ b/test/configCases/dll-plugin-entry/0-create-dll/webpack.config.js @@ -1,6 +1,9 @@ -var path = require("path"); -var webpack = require("../../../../"); +"use strict"; +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: ["."], output: { @@ -13,8 +16,7 @@ module.exports = { path: path.resolve( __dirname, "../../../js/config/dll-plugin-entry/manifest0.json" - ), - entryOnly: true + ) }) ] }; diff --git a/test/configCases/dll-plugin-entry/1-use-dll/index.js b/test/configCases/dll-plugin-entry/1-use-dll/index.js index ec66e9e5fd9..535df50edf1 100644 --- a/test/configCases/dll-plugin-entry/1-use-dll/index.js +++ b/test/configCases/dll-plugin-entry/1-use-dll/index.js @@ -1,7 +1,7 @@ import Answer, { bar } from "dll/index"; it("should load a module from dll", function() { - expect(require("dll/index")).toEqual({ bar: "bar", default: 42, [Symbol.toStringTag]: "Module" }); + expect(require("dll/index")).toEqual(nsObj({ bar: "bar", default: 42 })); }); it("should load an harmony module from dll (default export)", function() { @@ -13,7 +13,11 @@ it("should load an harmony module from dll (star export)", function() { }); it("should give modules the correct ids", function() { - expect(Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))).toEqual([ + expect( + Object.keys(__webpack_modules__) + .filter(m => !m.startsWith("../..")) + .sort() + ).toEqual([ "./index.js", "dll-reference ../0-create-dll/dll.js", "dll/index.js" diff --git a/test/configCases/dll-plugin-entry/1-use-dll/webpack.config.js b/test/configCases/dll-plugin-entry/1-use-dll/webpack.config.js index c708464f132..fb1096191f6 100644 --- a/test/configCases/dll-plugin-entry/1-use-dll/webpack.config.js +++ b/test/configCases/dll-plugin-entry/1-use-dll/webpack.config.js @@ -1,13 +1,18 @@ -var webpack = require("../../../../"); +"use strict"; +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { + optimization: { + moduleIds: "named" + }, plugins: [ new webpack.DllReferencePlugin({ - manifest: require("../../../js/config/dll-plugin-entry/manifest0.json"), // eslint-disable-line node/no-missing-require + manifest: require("../../../js/config/dll-plugin-entry/manifest0.json"), name: "../0-create-dll/dll.js", scope: "dll", sourceType: "commonjs2" - }), - new webpack.NamedModulesPlugin() + }) ] }; diff --git a/test/configCases/dll-plugin-entry/2-error-non-entry/errors.js b/test/configCases/dll-plugin-entry/2-error-non-entry/errors.js index 857282ec937..595149cef77 100644 --- a/test/configCases/dll-plugin-entry/2-error-non-entry/errors.js +++ b/test/configCases/dll-plugin-entry/2-error-non-entry/errors.js @@ -1 +1,3 @@ +"use strict"; + module.exports = [[/Can't resolve 'dll\/dep2'/]]; diff --git a/test/configCases/dll-plugin-entry/2-error-non-entry/webpack.config.js b/test/configCases/dll-plugin-entry/2-error-non-entry/webpack.config.js index c708464f132..fb1096191f6 100644 --- a/test/configCases/dll-plugin-entry/2-error-non-entry/webpack.config.js +++ b/test/configCases/dll-plugin-entry/2-error-non-entry/webpack.config.js @@ -1,13 +1,18 @@ -var webpack = require("../../../../"); +"use strict"; +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { + optimization: { + moduleIds: "named" + }, plugins: [ new webpack.DllReferencePlugin({ - manifest: require("../../../js/config/dll-plugin-entry/manifest0.json"), // eslint-disable-line node/no-missing-require + manifest: require("../../../js/config/dll-plugin-entry/manifest0.json"), name: "../0-create-dll/dll.js", scope: "dll", sourceType: "commonjs2" - }), - new webpack.NamedModulesPlugin() + }) ] }; diff --git a/test/configCases/dll-plugin-format/0-create-dll/dep.js b/test/configCases/dll-plugin-format/0-create-dll/dep.js new file mode 100644 index 00000000000..e7134e7006d --- /dev/null +++ b/test/configCases/dll-plugin-format/0-create-dll/dep.js @@ -0,0 +1 @@ +module.exports = "foo"; diff --git a/test/configCases/dll-plugin-format/0-create-dll/index.js b/test/configCases/dll-plugin-format/0-create-dll/index.js new file mode 100644 index 00000000000..59ef4a4cd38 --- /dev/null +++ b/test/configCases/dll-plugin-format/0-create-dll/index.js @@ -0,0 +1,4 @@ +export { add } from "./utility"; +export default "Format"; + +require("./dep"); diff --git a/test/configCases/dll-plugin-format/0-create-dll/test.config.js b/test/configCases/dll-plugin-format/0-create-dll/test.config.js new file mode 100644 index 00000000000..67028ae7c8c --- /dev/null +++ b/test/configCases/dll-plugin-format/0-create-dll/test.config.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/dll-plugin-format/0-create-dll/utility.js b/test/configCases/dll-plugin-format/0-create-dll/utility.js new file mode 100644 index 00000000000..cbed57e2c2d --- /dev/null +++ b/test/configCases/dll-plugin-format/0-create-dll/utility.js @@ -0,0 +1,7 @@ +export function add(a, b) { + return a + b; +} + +export function diff(a, b) { + return a - b; +} diff --git a/test/configCases/dll-plugin-format/0-create-dll/webpack.config.js b/test/configCases/dll-plugin-format/0-create-dll/webpack.config.js new file mode 100644 index 00000000000..2bf320ed1be --- /dev/null +++ b/test/configCases/dll-plugin-format/0-create-dll/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: ["."], + resolve: { + extensions: [".js"] + }, + output: { + filename: "dll.js", + chunkFilename: "[id].dll.js", + libraryTarget: "commonjs2" + }, + plugins: [ + new webpack.DllPlugin({ + path: path.resolve( + __dirname, + "../../../js/config/dll-plugin-format/manifest0.json" + ), + format: true + }) + ] +}; diff --git a/test/configCases/dll-plugin-side-effects/0-create-dll/dependency.js b/test/configCases/dll-plugin-side-effects/0-create-dll/dependency.js new file mode 100644 index 00000000000..1946cd07cb8 --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/0-create-dll/dependency.js @@ -0,0 +1,3 @@ +export default function createB() { + return "b"; +} diff --git a/test/configCases/dll-plugin-side-effects/0-create-dll/dependency2.js b/test/configCases/dll-plugin-side-effects/0-create-dll/dependency2.js new file mode 100644 index 00000000000..0809fdd0180 --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/0-create-dll/dependency2.js @@ -0,0 +1,3 @@ +export default function createC() { + return "c"; +} diff --git a/test/configCases/dll-plugin-side-effects/0-create-dll/index.js b/test/configCases/dll-plugin-side-effects/0-create-dll/index.js new file mode 100644 index 00000000000..3a02fe46bff --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/0-create-dll/index.js @@ -0,0 +1,3 @@ +import { a } from "./module"; + +export default a(); diff --git a/test/configCases/dll-plugin-side-effects/0-create-dll/module.js b/test/configCases/dll-plugin-side-effects/0-create-dll/module.js new file mode 100644 index 00000000000..257c5b97d93 --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/0-create-dll/module.js @@ -0,0 +1,12 @@ +import createB from "./dependency"; +import createC from "./dependency2"; + +export function a() { + return "a"; +} + +export { createB as b }; + +export function c() { + return createC(); +} diff --git a/test/configCases/dll-plugin-side-effects/0-create-dll/test.config.js b/test/configCases/dll-plugin-side-effects/0-create-dll/test.config.js new file mode 100644 index 00000000000..67028ae7c8c --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/0-create-dll/test.config.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/dll-plugin-side-effects/0-create-dll/webpack.config.js b/test/configCases/dll-plugin-side-effects/0-create-dll/webpack.config.js new file mode 100644 index 00000000000..01edc8de510 --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/0-create-dll/webpack.config.js @@ -0,0 +1,35 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: ["./index"], + output: { + filename: "dll.js", + chunkFilename: "[id].dll.js", + libraryTarget: "commonjs2" + }, + module: { + rules: [ + { + test: /0-create-dll.(module|dependency)/, + sideEffects: false + } + ] + }, + optimization: { + usedExports: true, + sideEffects: true + }, + plugins: [ + new webpack.DllPlugin({ + path: path.resolve( + __dirname, + "../../../js/config/dll-plugin-side-effects/manifest0.json" + ), + entryOnly: false + }) + ] +}; diff --git a/test/configCases/dll-plugin-side-effects/1-use-dll/index.js b/test/configCases/dll-plugin-side-effects/1-use-dll/index.js new file mode 100644 index 00000000000..db354f9f5d6 --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/1-use-dll/index.js @@ -0,0 +1,9 @@ +it("should include all exports and modules in the dll", function() { + const { a, b, c } = require("dll/module"); + expect(typeof a).toBe("function"); + expect(a()).toBe("a"); + expect(typeof b).toBe("function"); + expect(b()).toBe("b"); + expect(typeof c).toBe("function"); + expect(c()).toBe("c"); +}); diff --git a/test/configCases/dll-plugin-side-effects/1-use-dll/webpack.config.js b/test/configCases/dll-plugin-side-effects/1-use-dll/webpack.config.js new file mode 100644 index 00000000000..ecbc5423fa0 --- /dev/null +++ b/test/configCases/dll-plugin-side-effects/1-use-dll/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new webpack.DllReferencePlugin({ + manifest: require("../../../js/config/dll-plugin-side-effects/manifest0.json"), + name: "../0-create-dll/dll.js", + scope: "dll", + sourceType: "commonjs2" + }) + ] +}; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/_d.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/_d.js new file mode 100644 index 00000000000..d108c9a3722 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/_d.js @@ -0,0 +1 @@ +import "./d"; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/_e.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/_e.js new file mode 100644 index 00000000000..586eb3aa06b --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/_e.js @@ -0,0 +1,3 @@ +import "./e1"; +import "./e2"; +import "./e"; \ No newline at end of file diff --git a/test/configCases/commons-chunk-plugin/simple/a.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/a.js similarity index 100% rename from test/configCases/commons-chunk-plugin/simple/a.js rename to test/configCases/dll-plugin/0-create-dll-with-contenthash/a.js diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/b.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/b.js new file mode 100644 index 00000000000..58a90d8f841 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/b.js @@ -0,0 +1,3 @@ +module.exports = function() { + return import("./c"); +} diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/c.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/c.js new file mode 100644 index 00000000000..b2091de76d6 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/c.js @@ -0,0 +1 @@ +export default "c"; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/d.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/d.js new file mode 100644 index 00000000000..987d6d7e401 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/d.js @@ -0,0 +1 @@ +export default "d"; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/e.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/e.js new file mode 100644 index 00000000000..9fbe80f85cf --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/e.js @@ -0,0 +1,4 @@ +export * from "./e1"; +export * from "./ee2"; + +console.log.bind(console); // side effect to avoid removing module diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/e1.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/e1.js new file mode 100644 index 00000000000..23709cd95ff --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/e1.js @@ -0,0 +1,3 @@ +export * from "./ee1"; + +console.log.bind(console); // side effect to avoid removing module diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/e2.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/e2.js new file mode 100644 index 00000000000..25612746b57 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/e2.js @@ -0,0 +1,3 @@ +export * from "./ee2"; + +console.log.bind(console); // side effect to avoid removing module diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/ee1.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/ee1.js new file mode 100644 index 00000000000..359c69fe3e7 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/ee1.js @@ -0,0 +1,2 @@ +export var x1 = 123; +export var y1 = 456; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/ee2.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/ee2.js new file mode 100644 index 00000000000..634e1a91947 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/ee2.js @@ -0,0 +1,2 @@ +export var x2 = 123; +export var y2 = 456; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/f.jsx b/test/configCases/dll-plugin/0-create-dll-with-contenthash/f.jsx new file mode 100644 index 00000000000..61445975b07 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/f.jsx @@ -0,0 +1 @@ +module.exports = 'f'; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/g-loader.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/g-loader.js new file mode 100644 index 00000000000..c6d8a635121 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/g-loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return source; +}; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/g.abc.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/g.abc.js new file mode 100644 index 00000000000..483352ffbff --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/g.abc.js @@ -0,0 +1 @@ +module.exports = typeof module.id; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/h.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/h.js new file mode 100644 index 00000000000..1fa89a4fb1c --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/h.js @@ -0,0 +1 @@ +export { B } from "./h1.js"; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/h1.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/h1.js new file mode 100644 index 00000000000..a392743d956 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/h1.js @@ -0,0 +1,2 @@ +export { A } from "./ha.js"; +export { B } from "./hb.js"; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/ha.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/ha.js new file mode 100644 index 00000000000..6506d8d86b2 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/ha.js @@ -0,0 +1 @@ +export const A = "A"; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/hb.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/hb.js new file mode 100644 index 00000000000..f3c1f2c5d79 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/hb.js @@ -0,0 +1 @@ +export const B = "B"; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/test.config.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/test.config.js new file mode 100644 index 00000000000..67028ae7c8c --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/test.config.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/dll-plugin/0-create-dll-with-contenthash/webpack.config.js b/test/configCases/dll-plugin/0-create-dll-with-contenthash/webpack.config.js new file mode 100644 index 00000000000..8e28f6d8c2a --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll-with-contenthash/webpack.config.js @@ -0,0 +1,46 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: ["./a", "./b", "./_d", "./_e", "./f", "./g.abc", "./h"], + resolve: { + extensions: [".js", ".jsx"] + }, + output: { + filename: "dll.js", + chunkFilename: "[id].dll.js", + libraryTarget: "commonjs2" + }, + module: { + rules: [ + { + test: /\.abc\.js$/, + loader: "./g-loader.js", + options: { + test: 1 + } + }, + { + test: /0-create-dll.h/, + sideEffects: false + } + ] + }, + optimization: { + usedExports: true, + sideEffects: true + }, + plugins: [ + new webpack.DllPlugin({ + path: path.resolve( + __dirname, + "../../../js/config/dll-plugin/manifest0.json" + ), + name: "[name]_[contenthash]", + entryOnly: false + }) + ] +}; diff --git a/test/configCases/dll-plugin/0-create-dll/d.js b/test/configCases/dll-plugin/0-create-dll/d.js index 2911b30a88e..987d6d7e401 100644 --- a/test/configCases/dll-plugin/0-create-dll/d.js +++ b/test/configCases/dll-plugin/0-create-dll/d.js @@ -1 +1 @@ -export default "d"; \ No newline at end of file +export default "d"; diff --git a/test/configCases/dll-plugin/0-create-dll/e.js b/test/configCases/dll-plugin/0-create-dll/e.js index ab48149bfd3..9fbe80f85cf 100644 --- a/test/configCases/dll-plugin/0-create-dll/e.js +++ b/test/configCases/dll-plugin/0-create-dll/e.js @@ -1,2 +1,4 @@ export * from "./e1"; export * from "./ee2"; + +console.log.bind(console); // side effect to avoid removing module diff --git a/test/configCases/dll-plugin/0-create-dll/e1.js b/test/configCases/dll-plugin/0-create-dll/e1.js index 27a6a6af130..23709cd95ff 100644 --- a/test/configCases/dll-plugin/0-create-dll/e1.js +++ b/test/configCases/dll-plugin/0-create-dll/e1.js @@ -1 +1,3 @@ export * from "./ee1"; + +console.log.bind(console); // side effect to avoid removing module diff --git a/test/configCases/dll-plugin/0-create-dll/e2.js b/test/configCases/dll-plugin/0-create-dll/e2.js index 558ac28c2d5..25612746b57 100644 --- a/test/configCases/dll-plugin/0-create-dll/e2.js +++ b/test/configCases/dll-plugin/0-create-dll/e2.js @@ -1 +1,3 @@ export * from "./ee2"; + +console.log.bind(console); // side effect to avoid removing module diff --git a/test/configCases/dll-plugin/0-create-dll/g-loader.js b/test/configCases/dll-plugin/0-create-dll/g-loader.js index 6e64f4af6bb..c6d8a635121 100644 --- a/test/configCases/dll-plugin/0-create-dll/g-loader.js +++ b/test/configCases/dll-plugin/0-create-dll/g-loader.js @@ -1,3 +1,4 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { return source; }; diff --git a/test/configCases/dll-plugin/0-create-dll/h.js b/test/configCases/dll-plugin/0-create-dll/h.js new file mode 100644 index 00000000000..1fa89a4fb1c --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll/h.js @@ -0,0 +1 @@ +export { B } from "./h1.js"; diff --git a/test/configCases/dll-plugin/0-create-dll/h1.js b/test/configCases/dll-plugin/0-create-dll/h1.js new file mode 100644 index 00000000000..a392743d956 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll/h1.js @@ -0,0 +1,2 @@ +export { A } from "./ha.js"; +export { B } from "./hb.js"; diff --git a/test/configCases/dll-plugin/0-create-dll/ha.js b/test/configCases/dll-plugin/0-create-dll/ha.js new file mode 100644 index 00000000000..6506d8d86b2 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll/ha.js @@ -0,0 +1 @@ +export const A = "A"; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll/hb.js b/test/configCases/dll-plugin/0-create-dll/hb.js new file mode 100644 index 00000000000..f3c1f2c5d79 --- /dev/null +++ b/test/configCases/dll-plugin/0-create-dll/hb.js @@ -0,0 +1 @@ +export const B = "B"; \ No newline at end of file diff --git a/test/configCases/dll-plugin/0-create-dll/test.config.js b/test/configCases/dll-plugin/0-create-dll/test.config.js index 08ea6c319c8..67028ae7c8c 100644 --- a/test/configCases/dll-plugin/0-create-dll/test.config.js +++ b/test/configCases/dll-plugin/0-create-dll/test.config.js @@ -1 +1,3 @@ -exports.noTests = true; +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/dll-plugin/0-create-dll/webpack.config.js b/test/configCases/dll-plugin/0-create-dll/webpack.config.js index af773ff4f75..0f392cd35a0 100644 --- a/test/configCases/dll-plugin/0-create-dll/webpack.config.js +++ b/test/configCases/dll-plugin/0-create-dll/webpack.config.js @@ -1,8 +1,11 @@ -var path = require("path"); -var webpack = require("../../../../"); +"use strict"; +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { - entry: ["./a", "./b", "./_d", "./_e", "./f", "./g.abc"], + entry: ["./a", "./b", "./_d", "./_e", "./f", "./g.abc", "./h"], resolve: { extensions: [".js", ".jsx"] }, @@ -19,15 +22,24 @@ module.exports = { options: { test: 1 } + }, + { + test: /0-create-dll.h/, + sideEffects: false } ] }, + optimization: { + usedExports: true, + sideEffects: true + }, plugins: [ new webpack.DllPlugin({ path: path.resolve( __dirname, "../../../js/config/dll-plugin/manifest0.json" - ) + ), + entryOnly: false }) ] }; diff --git a/test/configCases/dll-plugin/0-issue-10475/index.js b/test/configCases/dll-plugin/0-issue-10475/index.js new file mode 100644 index 00000000000..e34a6754188 --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/index.js @@ -0,0 +1,3 @@ +import { constants } from "test-package"; + +var x = constants; diff --git a/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/constants.js b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/constants.js new file mode 100644 index 00000000000..84fc2484ce4 --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/constants.js @@ -0,0 +1,2 @@ +export const constant1 = 'constant1'; +export const constant2 = 'constant2'; diff --git a/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/index.js b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/index.js new file mode 100644 index 00000000000..89b290e87fa --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/index.js @@ -0,0 +1,5 @@ +import * as _constants from './constants'; +export var constants = _constants; +export { default as someFunction } from './someFunction'; + +if(Math.random() < 0) console.log(constants); diff --git a/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/package.json b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/package.json new file mode 100644 index 00000000000..ce5fa639dd0 --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/package.json @@ -0,0 +1,4 @@ +{ + "main": "index.js", + "sideEffects": false +} diff --git a/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/someFunction.js b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/someFunction.js new file mode 100644 index 00000000000..757d25c6ae7 --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/someFunction.js @@ -0,0 +1,3 @@ +export default function someFunction() { + console.log('This is some function'); +} diff --git a/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/working-constants.js b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/working-constants.js new file mode 100644 index 00000000000..cd433005d3a --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/node_modules/test-package/working-constants.js @@ -0,0 +1,7 @@ +export const constant1 = 'constant1'; +export const constant2 = 'constant2'; + +export default { + constant1, + constant2, +}; diff --git a/test/configCases/dll-plugin/0-issue-10475/test.config.js b/test/configCases/dll-plugin/0-issue-10475/test.config.js new file mode 100644 index 00000000000..67028ae7c8c --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/test.config.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/dll-plugin/0-issue-10475/webpack.config.js b/test/configCases/dll-plugin/0-issue-10475/webpack.config.js new file mode 100644 index 00000000000..6f492c1ab7d --- /dev/null +++ b/test/configCases/dll-plugin/0-issue-10475/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: ["./index.js"], + output: { + filename: "dll.js", + chunkFilename: "[id].dll.js", + libraryTarget: "commonjs2" + }, + plugins: [ + new webpack.DllPlugin({ + path: path.resolve( + __dirname, + "../../../js/config/dll-plugin/issue-10475.json" + ) + }) + ] +}; diff --git a/test/configCases/dll-plugin/1-issue-10475/index.js b/test/configCases/dll-plugin/1-issue-10475/index.js new file mode 100644 index 00000000000..ae5367529b1 --- /dev/null +++ b/test/configCases/dll-plugin/1-issue-10475/index.js @@ -0,0 +1,3 @@ +it("should have all modules", () => { + require("dll/index.js"); +}); diff --git a/test/configCases/dll-plugin/1-issue-10475/webpack.config.js b/test/configCases/dll-plugin/1-issue-10475/webpack.config.js new file mode 100644 index 00000000000..184ecd19b90 --- /dev/null +++ b/test/configCases/dll-plugin/1-issue-10475/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new webpack.DllReferencePlugin({ + manifest: require("../../../js/config/dll-plugin/issue-10475.json"), + name: "../0-issue-10475/dll.js", + scope: "dll", + sourceType: "commonjs2" + }) + ] +}; diff --git a/test/configCases/dll-plugin/1-use-dll/index.js b/test/configCases/dll-plugin/1-use-dll/index.js index 7f844261291..638fe966db9 100644 --- a/test/configCases/dll-plugin/1-use-dll/index.js +++ b/test/configCases/dll-plugin/1-use-dll/index.js @@ -1,6 +1,7 @@ import d from "dll/d"; import { x1, y2 } from "./e"; import { x2, y1 } from "dll/e"; +import { B } from "dll/h"; it("should load a module from dll", function() { expect(require("dll/a")).toBe("a"); @@ -11,10 +12,12 @@ it("should load a module of non-default type without extension from dll", functi }); it("should load an async module from dll", function(done) { - require("dll/b")().then(function(c) { - expect(c).toEqual({ default: "c", [Symbol.toStringTag]: "Module" }); - done(); - }).catch(done); + require("dll/b")() + .then(function(c) { + expect(c).toEqual(nsObj({ default: "c" })); + done(); + }) + .catch(done); }); it("should load an harmony module from dll (default export)", function() { @@ -33,7 +36,11 @@ it("should load a module with loader applied", function() { }); it("should give modules the correct ids", function() { - expect(Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))).toEqual([ + expect( + Object.keys(__webpack_modules__) + .filter(m => !m.startsWith("../..")) + .sort() + ).toEqual([ "./index.js", "dll-reference ../0-create-dll/dll.js", "dll/a.js", @@ -43,6 +50,11 @@ it("should give modules the correct ids", function() { "dll/e1.js", "dll/e2.js", "dll/f.jsx", - "dll/g.abc.js" - ]); + "dll/g.abc.js", + "dll/h.js" + ]); +}); + +it("should not crash on side-effect-free modules", function() { + expect(B).toBe("B"); }); diff --git a/test/configCases/dll-plugin/1-use-dll/webpack.config.js b/test/configCases/dll-plugin/1-use-dll/webpack.config.js index c6349c1e93b..a73ae3c59bd 100644 --- a/test/configCases/dll-plugin/1-use-dll/webpack.config.js +++ b/test/configCases/dll-plugin/1-use-dll/webpack.config.js @@ -1,14 +1,19 @@ -var webpack = require("../../../../"); +"use strict"; +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { + optimization: { + moduleIds: "named" + }, plugins: [ new webpack.DllReferencePlugin({ - manifest: require("../../../js/config/dll-plugin/manifest0.json"), // eslint-disable-line node/no-missing-require + manifest: require("../../../js/config/dll-plugin/manifest0.json"), name: "../0-create-dll/dll.js", scope: "dll", sourceType: "commonjs2", extensions: [".js", ".jsx"] - }), - new webpack.NamedModulesPlugin() + }) ] }; diff --git a/test/configCases/dll-plugin/2-use-dll-without-scope/index.js b/test/configCases/dll-plugin/2-use-dll-without-scope/index.js index 704f6b1589c..70482da8fdc 100644 --- a/test/configCases/dll-plugin/2-use-dll-without-scope/index.js +++ b/test/configCases/dll-plugin/2-use-dll-without-scope/index.js @@ -1,39 +1,47 @@ import d from "../0-create-dll/d"; import { x1, y2 } from "./e"; import { x2, y1 } from "../0-create-dll/e"; +import { B } from "../0-create-dll/h"; +import { A } from "../0-create-dll/h1"; -it("should load a module from dll", function() { +it("should load a module from dll", function () { expect(require("../0-create-dll/a")).toBe("a"); }); -it("should load a module of non-default type without extension from dll", function() { +it("should load a module of non-default type without extension from dll", function () { expect(require("../0-create-dll/f")).toBe("f"); }); -it("should load an async module from dll", function(done) { - require("../0-create-dll/b")().then(function(c) { - expect(c).toEqual({ default: "c", [Symbol.toStringTag]: "Module" }); - done(); - }).catch(done); +it("should load an async module from dll", function (done) { + require("../0-create-dll/b")() + .then(function (c) { + expect(c).toEqual(nsObj({ default: "c" })); + done(); + }) + .catch(done); }); -it("should load an harmony module from dll (default export)", function() { +it("should load an harmony module from dll (default export)", function () { expect(d).toBe("d"); }); -it("should load an harmony module from dll (star export)", function() { +it("should load an harmony module from dll (star export)", function () { expect(x1).toBe(123); expect(x2).toBe(123); expect(y1).toBe(456); expect(y2).toBe(456); }); -it("should load a module with loader applied", function() { +it("should load a module with loader applied", function () { expect(require("../0-create-dll/g.abc.js")).toBe("number"); }); -it("should give modules the correct ids", function() { - expect(Object.keys(__webpack_modules__).filter(m => !m.startsWith("../.."))).toEqual([ +it("should give modules the correct ids", function () { + expect( + Object.keys(__webpack_modules__) + .filter(m => !m.startsWith("../..")) + .sort() + ).toEqual([ "../0-create-dll/a.js", "../0-create-dll/b.js", "../0-create-dll/d.js", @@ -42,7 +50,17 @@ it("should give modules the correct ids", function() { "../0-create-dll/e2.js", "../0-create-dll/f.jsx", "../0-create-dll/g.abc.js", + "../0-create-dll/h.js", + "../0-create-dll/h1.js", "./index.js", "dll-reference ../0-create-dll/dll.js" ]); }); + +it("should not crash on side-effect-free modules", function () { + expect(B).toBe("B"); +}); + +it("should be able to reference side-effect-free reexport-only module", function () { + expect(A).toBe("A"); +}); diff --git a/test/configCases/dll-plugin/2-use-dll-without-scope/webpack.config.js b/test/configCases/dll-plugin/2-use-dll-without-scope/webpack.config.js index 4e5545d2de4..def6b4af768 100644 --- a/test/configCases/dll-plugin/2-use-dll-without-scope/webpack.config.js +++ b/test/configCases/dll-plugin/2-use-dll-without-scope/webpack.config.js @@ -1,6 +1,9 @@ -var path = require("path"); -var webpack = require("../../../../"); +"use strict"; +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -17,16 +20,18 @@ module.exports = { } ] }, + optimization: { + moduleIds: "named" + }, resolve: { extensions: [".js", ".jsx"] }, plugins: [ new webpack.DllReferencePlugin({ - manifest: require("../../../js/config/dll-plugin/manifest0.json"), // eslint-disable-line node/no-missing-require + manifest: require("../../../js/config/dll-plugin/manifest0.json"), name: "../0-create-dll/dll.js", context: path.resolve(__dirname, "../0-create-dll"), sourceType: "commonjs2" - }), - new webpack.NamedModulesPlugin() + }) ] }; diff --git a/test/configCases/dll-plugin/3-use-dll-with-hashid/index.js b/test/configCases/dll-plugin/3-use-dll-with-hashid/index.js index 0967a518eea..224bc015e73 100644 --- a/test/configCases/dll-plugin/3-use-dll-with-hashid/index.js +++ b/test/configCases/dll-plugin/3-use-dll-with-hashid/index.js @@ -8,7 +8,7 @@ it("should load a module from dll", function() { it("should load an async module from dll", function(done) { require("../0-create-dll/b")().then(function(c) { - expect(c).toEqual({ default: "c", [Symbol.toStringTag]: "Module" }); + expect(c).toEqual(nsObj({ default: "c" })); done(); }).catch(done); }); diff --git a/test/configCases/dll-plugin/3-use-dll-with-hashid/warnings.js b/test/configCases/dll-plugin/3-use-dll-with-hashid/warnings.js new file mode 100644 index 00000000000..fdcecb3be97 --- /dev/null +++ b/test/configCases/dll-plugin/3-use-dll-with-hashid/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/hashed/, /deprecated/]]; diff --git a/test/configCases/dll-plugin/3-use-dll-with-hashid/webpack.config.js b/test/configCases/dll-plugin/3-use-dll-with-hashid/webpack.config.js index 9b07dd08d75..8d0f2b8dab1 100644 --- a/test/configCases/dll-plugin/3-use-dll-with-hashid/webpack.config.js +++ b/test/configCases/dll-plugin/3-use-dll-with-hashid/webpack.config.js @@ -1,6 +1,9 @@ -var path = require("path"); -var webpack = require("../../../../"); +"use strict"; +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -17,13 +20,15 @@ module.exports = { } ] }, + optimization: { + moduleIds: "hashed" + }, plugins: [ new webpack.DllReferencePlugin({ - manifest: require("../../../js/config/dll-plugin/manifest0.json"), // eslint-disable-line node/no-missing-require + manifest: require("../../../js/config/dll-plugin/manifest0.json"), name: "../0-create-dll/dll.js", context: path.resolve(__dirname, "../0-create-dll"), sourceType: "commonjs2" - }), - new webpack.HashedModuleIdsPlugin() + }) ] }; diff --git a/test/configCases/dll-plugin/4-use-dll-with-contenthash/e.js b/test/configCases/dll-plugin/4-use-dll-with-contenthash/e.js new file mode 100644 index 00000000000..f490fc4645b --- /dev/null +++ b/test/configCases/dll-plugin/4-use-dll-with-contenthash/e.js @@ -0,0 +1,2 @@ +export * from "dll/e1"; +export * from "dll/e2"; diff --git a/test/configCases/dll-plugin/4-use-dll-with-contenthash/index.js b/test/configCases/dll-plugin/4-use-dll-with-contenthash/index.js new file mode 100644 index 00000000000..d771fcdc8c0 --- /dev/null +++ b/test/configCases/dll-plugin/4-use-dll-with-contenthash/index.js @@ -0,0 +1,60 @@ +import d from "dll/d"; +import { x1, y2 } from "./e"; +import { x2, y1 } from "dll/e"; +import { B } from "dll/h"; + +it("should load a module from dll", function() { + expect(require("dll/a")).toBe("a"); +}); + +it("should load a module of non-default type without extension from dll", function() { + expect(require("dll/f")).toBe("f"); +}); + +it("should load an async module from dll", function(done) { + require("dll/b")() + .then(function(c) { + expect(c).toEqual(nsObj({ default: "c" })); + done(); + }) + .catch(done); +}); + +it("should load an harmony module from dll (default export)", function() { + expect(d).toBe("d"); +}); + +it("should load an harmony module from dll (star export)", function() { + expect(x1).toBe(123); + expect(x2).toBe(123); + expect(y1).toBe(456); + expect(y2).toBe(456); +}); + +it("should load a module with loader applied", function() { + expect(require("dll/g.abc.js")).toBe("number"); +}); + +it("should give modules the correct ids", function() { + expect( + Object.keys(__webpack_modules__) + .filter(m => !m.startsWith("../..")) + .sort() + ).toEqual([ + "./index.js", + "dll-reference ../0-create-dll-with-contenthash/dll.js", + "dll/a.js", + "dll/b.js", + "dll/d.js", + "dll/e.js", + "dll/e1.js", + "dll/e2.js", + "dll/f.jsx", + "dll/g.abc.js", + "dll/h.js" + ]); +}); + +it("should not crash on side-effect-free modules", function() { + expect(B).toBe("B"); +}); diff --git a/test/configCases/dll-plugin/4-use-dll-with-contenthash/webpack.config.js b/test/configCases/dll-plugin/4-use-dll-with-contenthash/webpack.config.js new file mode 100644 index 00000000000..5aa52cf2572 --- /dev/null +++ b/test/configCases/dll-plugin/4-use-dll-with-contenthash/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + moduleIds: "named" + }, + plugins: [ + new webpack.DllReferencePlugin({ + manifest: require("../../../js/config/dll-plugin/manifest0.json"), + name: "../0-create-dll-with-contenthash/dll.js", + scope: "dll", + sourceType: "commonjs2", + extensions: [".js", ".jsx"] + }) + ] +}; diff --git a/test/configCases/context-replacement/c/modules/a.js b/test/configCases/dll-plugin/5-issue-18200/a.js similarity index 100% rename from test/configCases/context-replacement/c/modules/a.js rename to test/configCases/dll-plugin/5-issue-18200/a.js diff --git a/test/configCases/dll-plugin/5-issue-18200/b.js b/test/configCases/dll-plugin/5-issue-18200/b.js new file mode 100644 index 00000000000..dfbbeb621fa --- /dev/null +++ b/test/configCases/dll-plugin/5-issue-18200/b.js @@ -0,0 +1 @@ +module.exports = "b"; diff --git a/test/configCases/dll-plugin/5-issue-18200/errors.js b/test/configCases/dll-plugin/5-issue-18200/errors.js new file mode 100644 index 00000000000..69e6a6b0900 --- /dev/null +++ b/test/configCases/dll-plugin/5-issue-18200/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/each chunk must have a unique path/]]; diff --git a/test/configCases/dll-plugin/5-issue-18200/webpack.config.js b/test/configCases/dll-plugin/5-issue-18200/webpack.config.js new file mode 100644 index 00000000000..fc75e6d3b75 --- /dev/null +++ b/test/configCases/dll-plugin/5-issue-18200/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a", + b: "./b" + }, + output: { + filename: "MyDll.[name].js", + library: "[name]_[fullhash]" + }, + plugins: [ + new webpack.DllPlugin({ + path: path.resolve( + __dirname, + "../../../js/config/dll-plugin/manifest_without_string_template.json" + ) + }) + ] +}; diff --git a/test/configCases/dynamic-import/self-import/index.js b/test/configCases/dynamic-import/self-import/index.js new file mode 100644 index 00000000000..50111f0ab6a --- /dev/null +++ b/test/configCases/dynamic-import/self-import/index.js @@ -0,0 +1,16 @@ +it("should allow to import itself", async () => { + // Dynamic import with self-import (e.g., import(import.meta.url)) does not create duplicate ChunkGroups + // because the module is already in parent chunks, so it enters the skip logic at buildChunkGraph.js:734-738 + // (isOrdinalSetInMask check returns true). + const module = await import(import.meta.url); + expect(module).toBeDefined(); +}); + +it("should allow to import itself with new URL", async (done) => { + import(new URL(import.meta.url)).catch(e => { + // import with new URL will create a ContextModule with critical flag + // ContextModule will throw MODULE_NOT_FOUND + expect(e.code).toBe("MODULE_NOT_FOUND"); + done(); + }); +}); \ No newline at end of file diff --git a/test/configCases/dynamic-import/self-import/test.config.js b/test/configCases/dynamic-import/self-import/test.config.js new file mode 100644 index 00000000000..55df512ffe8 --- /dev/null +++ b/test/configCases/dynamic-import/self-import/test.config.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = { + findBundle(i) { + switch (i) { + case 0: + return [`bundle${i}.js`]; + case 1: + return [`runtime.bundle${i}.js`, `main.bundle${i}.js`]; + case 2: + return [`bundle${i}.mjs`]; + case 3: + return [`runtime.bundle${i}.mjs`, `main.bundle${i}.mjs`]; + } + } +}; diff --git a/test/configCases/dynamic-import/self-import/warnings.js b/test/configCases/dynamic-import/self-import/warnings.js new file mode 100644 index 00000000000..11f5c2f14e7 --- /dev/null +++ b/test/configCases/dynamic-import/self-import/warnings.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + /Critical dependency: the request of a dependency is an expression/, + /Critical dependency: the request of a dependency is an expression/, + /Critical dependency: the request of a dependency is an expression/, + /Critical dependency: the request of a dependency is an expression/ +]; diff --git a/test/configCases/dynamic-import/self-import/webpack.config.js b/test/configCases/dynamic-import/self-import/webpack.config.js new file mode 100644 index 00000000000..22bcc176ccd --- /dev/null +++ b/test/configCases/dynamic-import/self-import/webpack.config.js @@ -0,0 +1,35 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "web" + }, + { + output: { + filename: "[name].bundle1.js" + }, + target: "web", + optimization: { + runtimeChunk: "single" + } + }, + { + target: "web", + experiments: { + outputModule: true + } + }, + { + target: "web", + output: { + filename: "[name].bundle3.mjs" + }, + optimization: { + runtimeChunk: "single" + }, + experiments: { + outputModule: true + } + } +]; diff --git a/test/configCases/ecmaVersion/2015/index.js b/test/configCases/ecmaVersion/2015/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/2015/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/2015/webpack.config.js b/test/configCases/ecmaVersion/2015/webpack.config.js new file mode 100644 index 00000000000..5ca5c19de25 --- /dev/null +++ b/test/configCases/ecmaVersion/2015/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["node", "es2015"] +}; diff --git a/test/configCases/ecmaVersion/2020/index.js b/test/configCases/ecmaVersion/2020/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/2020/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/2020/webpack.config.js b/test/configCases/ecmaVersion/2020/webpack.config.js new file mode 100644 index 00000000000..bbc84148425 --- /dev/null +++ b/test/configCases/ecmaVersion/2020/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["node", "es2020"] +}; diff --git a/test/configCases/ecmaVersion/5/index.js b/test/configCases/ecmaVersion/5/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/5/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/5/webpack.config.js b/test/configCases/ecmaVersion/5/webpack.config.js new file mode 100644 index 00000000000..11351a0baa8 --- /dev/null +++ b/test/configCases/ecmaVersion/5/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["node", "es5"] +}; diff --git a/test/configCases/ecmaVersion/browserslist-config-env-extends/.browserslistrc b/test/configCases/ecmaVersion/browserslist-config-env-extends/.browserslistrc new file mode 100644 index 00000000000..4f63a5aa8b1 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env-extends/.browserslistrc @@ -0,0 +1 @@ +extends browserslist-config-mycompany diff --git a/test/configCases/ecmaVersion/browserslist-config-env-extends/index.js b/test/configCases/ecmaVersion/browserslist-config-env-extends/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env-extends/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-config-env-extends/test.config.js b/test/configCases/ecmaVersion/browserslist-config-env-extends/test.config.js new file mode 100644 index 00000000000..a8ce83cbb99 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env-extends/test.config.js @@ -0,0 +1,37 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const rootPath = path.resolve(__dirname, "../../../../"); +const rootNodeModules = path.resolve(rootPath, "./node_modules"); +const browserslistPackage = path.resolve( + rootNodeModules, + "browserslist-config-mycompany" +); +const content = ` +module.exports = { + development: [ + 'last 1 version' + ], + production: [ + 'ie 9', + ] +} +`; +const browserslistFile = path.resolve(browserslistPackage, "./index.js"); + +try { + fs.mkdirSync(browserslistPackage); +} catch (_err) { + // Nothing +} + +fs.writeFileSync(browserslistFile, content); + +module.exports = { + afterExecute() { + fs.unlinkSync(browserslistFile); + fs.rmdirSync(browserslistPackage); + } +}; diff --git a/test/configCases/ecmaVersion/browserslist-config-env-extends/webpack.config.js b/test/configCases/ecmaVersion/browserslist-config-env-extends/webpack.config.js new file mode 100644 index 00000000000..918e2a30656 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env-extends/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: `browserslist:${path.join(__dirname, ".browserslistrc")}:production`, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-config-env/.browserslistrc b/test/configCases/ecmaVersion/browserslist-config-env/.browserslistrc new file mode 100644 index 00000000000..68719cd9208 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env/.browserslistrc @@ -0,0 +1,4 @@ +maintained node versions + +[modern] +ie 9 diff --git a/test/configCases/ecmaVersion/browserslist-config-env/index.js b/test/configCases/ecmaVersion/browserslist-config-env/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-config-env/webpack.config.js b/test/configCases/ecmaVersion/browserslist-config-env/webpack.config.js new file mode 100644 index 00000000000..4632173e166 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-env/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: `browserslist:${path.join(__dirname, ".browserslistrc")}:modern`, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-config-extends/.browserslistrc b/test/configCases/ecmaVersion/browserslist-config-extends/.browserslistrc new file mode 100644 index 00000000000..7d26717a1a4 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-extends/.browserslistrc @@ -0,0 +1 @@ +extends browserslist-config-mycompany1 diff --git a/test/configCases/ecmaVersion/browserslist-config-extends/index.js b/test/configCases/ecmaVersion/browserslist-config-extends/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-extends/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-config-extends/test.config.js b/test/configCases/ecmaVersion/browserslist-config-extends/test.config.js new file mode 100644 index 00000000000..d481fbb4e30 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-extends/test.config.js @@ -0,0 +1,38 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const rootPath = path.resolve(__dirname, "../../../../"); +const rootNodeModules = path.resolve(rootPath, "./node_modules"); +const browserslistPackage = path.resolve( + rootNodeModules, + "browserslist-config-mycompany1" +); +const content = ` +module.exports = { + development: [ + 'last 1 version' + ], + // We are in tests, so 'process.env.NODE_ENV' has the 'test' value (browserslist respects the 'process.env.NODE_ENV' value) + test: [ + 'ie 9', + ] +} +`; +const browserslistFile = path.resolve(browserslistPackage, "./index.js"); + +try { + fs.mkdirSync(browserslistPackage); +} catch (_err) { + // Nothing +} + +fs.writeFileSync(browserslistFile, content); + +module.exports = { + afterExecute() { + fs.unlinkSync(browserslistFile); + fs.rmdirSync(browserslistPackage); + } +}; diff --git a/test/configCases/ecmaVersion/browserslist-config-extends/webpack.config.js b/test/configCases/ecmaVersion/browserslist-config-extends/webpack.config.js new file mode 100644 index 00000000000..5e9f72d510d --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config-extends/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: `browserslist:${path.join(__dirname, ".browserslistrc")}`, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-config/.browserslistrc b/test/configCases/ecmaVersion/browserslist-config/.browserslistrc new file mode 100644 index 00000000000..0b647179adc --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config/.browserslistrc @@ -0,0 +1 @@ +ie 9 diff --git a/test/configCases/ecmaVersion/browserslist-config/index.js b/test/configCases/ecmaVersion/browserslist-config/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-config/webpack.config.js b/test/configCases/ecmaVersion/browserslist-config/webpack.config.js new file mode 100644 index 00000000000..5e9f72d510d --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-config/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: `browserslist:${path.join(__dirname, ".browserslistrc")}`, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-env/index.js b/test/configCases/ecmaVersion/browserslist-env/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-env/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-env/package.json b/test/configCases/ecmaVersion/browserslist-env/package.json new file mode 100644 index 00000000000..b4dfe86f303 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-env/package.json @@ -0,0 +1,10 @@ +{ + "browserslist": { + "development": [ + "last 1 version" + ], + "production": [ + "ie 9" + ] + } +} diff --git a/test/configCases/ecmaVersion/browserslist-env/webpack.config.js b/test/configCases/ecmaVersion/browserslist-env/webpack.config.js new file mode 100644 index 00000000000..1f18f159665 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-env/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "browserslist:production", + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-extends/index.js b/test/configCases/ecmaVersion/browserslist-extends/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-extends/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-extends/package.json b/test/configCases/ecmaVersion/browserslist-extends/package.json new file mode 100644 index 00000000000..3670aa399ca --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-extends/package.json @@ -0,0 +1,5 @@ +{ + "browserslist": [ + "extends browserslist-config-mycompany2" + ] +} diff --git a/test/configCases/ecmaVersion/browserslist-extends/test.config.js b/test/configCases/ecmaVersion/browserslist-extends/test.config.js new file mode 100644 index 00000000000..53221f4f41b --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-extends/test.config.js @@ -0,0 +1,38 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +const rootPath = path.resolve(__dirname, "../../../../"); +const rootNodeModules = path.resolve(rootPath, "./node_modules"); +const browserslistPackage = path.resolve( + rootNodeModules, + "browserslist-config-mycompany2" +); +const content = ` +module.exports = { + development: [ + 'last 1 version' + ], + // We are in tests, so 'process.env.NODE_ENV' has the 'test' value (browserslist respects the 'process.env.NODE_ENV' value) + test: [ + 'ie 9', + ] +} +`; +const browserslistFile = path.resolve(browserslistPackage, "./index.js"); + +try { + fs.mkdirSync(browserslistPackage); +} catch (_err) { + // Nothing +} + +fs.writeFileSync(browserslistFile, content); + +module.exports = { + afterExecute() { + fs.unlinkSync(browserslistFile); + fs.rmdirSync(browserslistPackage); + } +}; diff --git a/test/configCases/ecmaVersion/browserslist-extends/webpack.config.js b/test/configCases/ecmaVersion/browserslist-extends/webpack.config.js new file mode 100644 index 00000000000..84b15c99aef --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-extends/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "browserslist", + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-missing/errors.js b/test/configCases/ecmaVersion/browserslist-missing/errors.js new file mode 100644 index 00000000000..fab8478ddf3 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-missing/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/No browserslist config found/]]; diff --git a/test/configCases/ecmaVersion/browserslist-missing/index.js b/test/configCases/ecmaVersion/browserslist-missing/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-missing/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-missing/package.json b/test/configCases/ecmaVersion/browserslist-missing/package.json new file mode 100644 index 00000000000..0db3279e44b --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-missing/package.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/test/configCases/ecmaVersion/browserslist-missing/test.filter.js b/test/configCases/ecmaVersion/browserslist-missing/test.filter.js new file mode 100644 index 00000000000..96ddb2717f2 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-missing/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => !config.cache; diff --git a/test/configCases/ecmaVersion/browserslist-missing/webpack.config.js b/test/configCases/ecmaVersion/browserslist-missing/webpack.config.js new file mode 100644 index 00000000000..6ceb9d1a798 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-missing/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["browserslist"] +}; diff --git a/test/configCases/ecmaVersion/browserslist-query-with-config-file/index.js b/test/configCases/ecmaVersion/browserslist-query-with-config-file/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-query-with-config-file/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-query-with-config-file/package.json b/test/configCases/ecmaVersion/browserslist-query-with-config-file/package.json new file mode 100644 index 00000000000..b4dfe86f303 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-query-with-config-file/package.json @@ -0,0 +1,10 @@ +{ + "browserslist": { + "development": [ + "last 1 version" + ], + "production": [ + "ie 9" + ] + } +} diff --git a/test/configCases/ecmaVersion/browserslist-query-with-config-file/webpack.config.js b/test/configCases/ecmaVersion/browserslist-query-with-config-file/webpack.config.js new file mode 100644 index 00000000000..f3981b12f33 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-query-with-config-file/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "browserslist:maintained node versions", + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": true, + "asyncFunction": true, + "bigIntLiteral": true, + "const": true, + "destructuring": true, + "document": false, + "dynamicImport": true, + "dynamicImportInWorker": true, + "forOf": true, + "globalThis": true, + "importMetaDirnameAndFilename": false, + "methodShorthand": true, + "module": true, + "nodePrefixForCoreModules": true, + "optionalChaining": true, + "templateLiteral": true, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": true, + "nwjs": false, + "web": false, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist-query/index.js b/test/configCases/ecmaVersion/browserslist-query/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-query/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist-query/webpack.config.js b/test/configCases/ecmaVersion/browserslist-query/webpack.config.js new file mode 100644 index 00000000000..233f052a82a --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist-query/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "browserslist: ie 9", + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": false, + "asyncFunction": false, + "bigIntLiteral": false, + "const": false, + "destructuring": false, + "document": true, + "dynamicImport": false, + "dynamicImportInWorker": false, + "forOf": false, + "globalThis": false, + "importMetaDirnameAndFilename": false, + "methodShorthand": false, + "module": false, + "nodePrefixForCoreModules": false, + "optionalChaining": false, + "templateLiteral": false, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": false, + "nwjs": false, + "web": true, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/browserslist/index.js b/test/configCases/ecmaVersion/browserslist/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/browserslist/package.json b/test/configCases/ecmaVersion/browserslist/package.json new file mode 100644 index 00000000000..58771cfd607 --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist/package.json @@ -0,0 +1,5 @@ +{ + "browserslist": [ + "maintained node versions" + ] +} diff --git a/test/configCases/ecmaVersion/browserslist/webpack.config.js b/test/configCases/ecmaVersion/browserslist/webpack.config.js new file mode 100644 index 00000000000..4af5a67e33b --- /dev/null +++ b/test/configCases/ecmaVersion/browserslist/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["browserslist"], + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap("Test", (compilation) => { + expect(compilation.outputOptions.environment).toMatchInlineSnapshot(` + Object { + "arrowFunction": true, + "asyncFunction": true, + "bigIntLiteral": true, + "const": true, + "destructuring": true, + "document": false, + "dynamicImport": true, + "dynamicImportInWorker": true, + "forOf": true, + "globalThis": true, + "importMetaDirnameAndFilename": false, + "methodShorthand": true, + "module": true, + "nodePrefixForCoreModules": true, + "optionalChaining": true, + "templateLiteral": true, + } + `); + expect(compilation.options.externalsPresets).toMatchInlineSnapshot(` + Object { + "electron": false, + "electronMain": false, + "electronPreload": false, + "electronRenderer": false, + "node": true, + "nwjs": false, + "web": false, + } + `); + }); + } + ] +}; diff --git a/test/configCases/ecmaVersion/custom/index.js b/test/configCases/ecmaVersion/custom/index.js new file mode 100644 index 00000000000..bbd9de4153f --- /dev/null +++ b/test/configCases/ecmaVersion/custom/index.js @@ -0,0 +1 @@ +it("should compile and run the test", function() {}); diff --git a/test/configCases/ecmaVersion/custom/webpack.config.js b/test/configCases/ecmaVersion/custom/webpack.config.js new file mode 100644 index 00000000000..4c66e4e396d --- /dev/null +++ b/test/configCases/ecmaVersion/custom/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + environment: { + arrowFunction: true, + bigIntLiteral: false, + const: false, + destructuring: false, + forOf: false, + dynamicImport: true, + module: false + } + } +}; diff --git a/test/configCases/ecmaVersion/loader-context/index.js b/test/configCases/ecmaVersion/loader-context/index.js new file mode 100644 index 00000000000..71b94e507ee --- /dev/null +++ b/test/configCases/ecmaVersion/loader-context/index.js @@ -0,0 +1,9 @@ +import mod from "./loader.js!./module"; + +it("should compile and export target and environment", function() { + expect(mod.target).toBe("node"); + expect(mod.environment.globalThis).toBe(false); + expect(mod.environment.optionalChaining).toBe(true); + expect(mod.environment.templateLiteral).toBe(true); + expect(mod.environment.dynamicImportInWorker).toBe(true); +}); diff --git a/test/configCases/ecmaVersion/loader-context/loader.js b/test/configCases/ecmaVersion/loader-context/loader.js new file mode 100644 index 00000000000..1a1f276bb41 --- /dev/null +++ b/test/configCases/ecmaVersion/loader-context/loader.js @@ -0,0 +1,7 @@ +/** @type {import("../../../../types").LoaderDefinition<{}>} */ +module.exports = function loader(content) { + const target = this.target; + const environment = this.environment; + + return `export default ${JSON.stringify({ target, environment})}`; +} diff --git a/test/configCases/ecmaVersion/loader-context/module.js b/test/configCases/ecmaVersion/loader-context/module.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/ecmaVersion/loader-context/module.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/ecmaVersion/loader-context/webpack.config.js b/test/configCases/ecmaVersion/loader-context/webpack.config.js new file mode 100644 index 00000000000..0f3785aac63 --- /dev/null +++ b/test/configCases/ecmaVersion/loader-context/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["node", "es2020"], + output: { + environment: { + // Our target supports `globalThis`, but for test purposes we set it to `false` + globalThis: false + } + } +}; diff --git a/test/configCases/emit-asset/different-source/errors.js b/test/configCases/emit-asset/different-source/errors.js new file mode 100644 index 00000000000..9f1227f09e3 --- /dev/null +++ b/test/configCases/emit-asset/different-source/errors.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = [ + [ + /Conflict/, + /Multiple assets emit different content to the same filename/, + /same-name\.txt/ + ] +]; diff --git a/test/configCases/emit-asset/different-source/index.js b/test/configCases/emit-asset/different-source/index.js new file mode 100644 index 00000000000..a03fbd7bd6c --- /dev/null +++ b/test/configCases/emit-asset/different-source/index.js @@ -0,0 +1,4 @@ +it("should compile without warnings", () => { + require("./test1.txt"); + require("./test2.txt"); +}); diff --git a/test/configCases/emit-asset/different-source/test1.txt b/test/configCases/emit-asset/different-source/test1.txt new file mode 100644 index 00000000000..557db03de99 --- /dev/null +++ b/test/configCases/emit-asset/different-source/test1.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/configCases/emit-asset/different-source/test2.txt b/test/configCases/emit-asset/different-source/test2.txt new file mode 100644 index 00000000000..299d09ff310 --- /dev/null +++ b/test/configCases/emit-asset/different-source/test2.txt @@ -0,0 +1 @@ +Something else diff --git a/test/configCases/emit-asset/different-source/webpack.config.js b/test/configCases/emit-asset/different-source/webpack.config.js new file mode 100644 index 00000000000..641c6b8bf6e --- /dev/null +++ b/test/configCases/emit-asset/different-source/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.txt$/, + use: { + loader: "file-loader", + options: { + name: "same-name.txt" + } + } + } + ] + } +}; diff --git a/test/configCases/emit-asset/equal-source/index.js b/test/configCases/emit-asset/equal-source/index.js new file mode 100644 index 00000000000..a03fbd7bd6c --- /dev/null +++ b/test/configCases/emit-asset/equal-source/index.js @@ -0,0 +1,4 @@ +it("should compile without warnings", () => { + require("./test1.txt"); + require("./test2.txt"); +}); diff --git a/test/configCases/emit-asset/equal-source/test1.txt b/test/configCases/emit-asset/equal-source/test1.txt new file mode 100644 index 00000000000..557db03de99 --- /dev/null +++ b/test/configCases/emit-asset/equal-source/test1.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/configCases/emit-asset/equal-source/test2.txt b/test/configCases/emit-asset/equal-source/test2.txt new file mode 100644 index 00000000000..557db03de99 --- /dev/null +++ b/test/configCases/emit-asset/equal-source/test2.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/configCases/emit-asset/equal-source/webpack.config.js b/test/configCases/emit-asset/equal-source/webpack.config.js new file mode 100644 index 00000000000..641c6b8bf6e --- /dev/null +++ b/test/configCases/emit-asset/equal-source/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.txt$/, + use: { + loader: "file-loader", + options: { + name: "same-name.txt" + } + } + } + ] + } +}; diff --git a/test/configCases/entry/adding-multiple-entry-points/fail.js b/test/configCases/entry/adding-multiple-entry-points/fail.js new file mode 100644 index 00000000000..e5f60bc2f7d --- /dev/null +++ b/test/configCases/entry/adding-multiple-entry-points/fail.js @@ -0,0 +1 @@ +// no test here, this will fail when only this entry is loaded diff --git a/test/configCases/entry/adding-multiple-entry-points/ok.js b/test/configCases/entry/adding-multiple-entry-points/ok.js new file mode 100644 index 00000000000..89e1169b2d5 --- /dev/null +++ b/test/configCases/entry/adding-multiple-entry-points/ok.js @@ -0,0 +1,3 @@ +it("should load correct entry", function() { + // ok +}); diff --git a/test/configCases/entry/adding-multiple-entry-points/test.config.js b/test/configCases/entry/adding-multiple-entry-points/test.config.js new file mode 100644 index 00000000000..a4d8d86ae86 --- /dev/null +++ b/test/configCases/entry/adding-multiple-entry-points/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime~main.js", "./main.js"]; + } +}; diff --git a/test/configCases/entry/adding-multiple-entry-points/webpack.config.js b/test/configCases/entry/adding-multiple-entry-points/webpack.config.js new file mode 100644 index 00000000000..8184f4b1967 --- /dev/null +++ b/test/configCases/entry/adding-multiple-entry-points/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +const EntryPlugin = require("../../../../").EntryPlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: () => ({}), + optimization: { + runtimeChunk: true + }, + output: { + filename: "[name].js", + chunkFilename: "[name].chunk.js" + }, + target: "web", + plugins: [ + new EntryPlugin(__dirname, "./fail", "main"), + new EntryPlugin(__dirname, "./ok", "main"), + new EntryPlugin(__dirname, "./fail", "main") + ] +}; diff --git a/test/configCases/entry/depend-on-advanced/app.js b/test/configCases/entry/depend-on-advanced/app.js new file mode 100644 index 00000000000..00d61511587 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/app.js @@ -0,0 +1,2 @@ +import isomorphicFetch from "isomorphic-fetch"; +import lodash from "lodash"; diff --git a/test/configCases/entry/depend-on-advanced/lazy.js b/test/configCases/entry/depend-on-advanced/lazy.js new file mode 100644 index 00000000000..63ef6b95d3c --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/lazy.js @@ -0,0 +1,7 @@ +import lodash from "lodash"; +import propTypes from "prop-types"; + +export default function() { + expect(lodash).toBe("lodash"); + expect(propTypes).toBe("prop-types"); +} diff --git a/test/configCases/entry/depend-on-advanced/node_modules/isomorphic-fetch.js b/test/configCases/entry/depend-on-advanced/node_modules/isomorphic-fetch.js new file mode 100644 index 00000000000..ce0c36b3158 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/node_modules/isomorphic-fetch.js @@ -0,0 +1 @@ +module.exports = "isomorphic-fetch"; diff --git a/test/configCases/entry/depend-on-advanced/node_modules/lodash.js b/test/configCases/entry/depend-on-advanced/node_modules/lodash.js new file mode 100644 index 00000000000..8cae1154e6b --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/node_modules/lodash.js @@ -0,0 +1 @@ +module.exports = 'lodash'; diff --git a/test/configCases/entry/depend-on-advanced/node_modules/prop-types.js b/test/configCases/entry/depend-on-advanced/node_modules/prop-types.js new file mode 100644 index 00000000000..9c6971329ce --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/node_modules/prop-types.js @@ -0,0 +1 @@ +module.exports = 'prop-types'; diff --git a/test/configCases/entry/depend-on-advanced/node_modules/react-dom.js b/test/configCases/entry/depend-on-advanced/node_modules/react-dom.js new file mode 100644 index 00000000000..d2f4c643e28 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/node_modules/react-dom.js @@ -0,0 +1 @@ +module.exports = 'react-dom'; diff --git a/test/configCases/entry/depend-on-advanced/node_modules/react.js b/test/configCases/entry/depend-on-advanced/node_modules/react.js new file mode 100644 index 00000000000..11c0b89c737 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/node_modules/react.js @@ -0,0 +1 @@ +module.exports = 'react'; diff --git a/test/configCases/entry/depend-on-advanced/node_modules/test.js b/test/configCases/entry/depend-on-advanced/node_modules/test.js new file mode 100644 index 00000000000..25b8e921775 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/node_modules/test.js @@ -0,0 +1,2 @@ +export let value = "fail"; +export function set(v) { value = v; } diff --git a/test/configCases/entry/depend-on-advanced/other-vendors.js b/test/configCases/entry/depend-on-advanced/other-vendors.js new file mode 100644 index 00000000000..8d844056e1a --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/other-vendors.js @@ -0,0 +1,4 @@ +import lodash from "lodash"; +import { set } from "test"; + +set("ok"); diff --git a/test/configCases/entry/depend-on-advanced/page1.js b/test/configCases/entry/depend-on-advanced/page1.js new file mode 100644 index 00000000000..71d11a2b2fc --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/page1.js @@ -0,0 +1,26 @@ +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +it("should be able to load the modules", () => { + expect(isomorphicFetch).toBe("isomorphic-fetch"); + expect(react).toBe("react"); + expect(reactDOM).toBe("react-dom"); +}); + +it("should have the correct modules in a lazy chunk", () => { + const promise = import(/* webpackChunkName: "lazy" */ "./lazy").then( + module => { + module.default(); + } + ); + __non_webpack_require__("./lazy.js"); + document.head._children[0].onload(); + return promise; +}); + +import { value } from "test"; + +it("other-vendors should run too", () => { + expect(value).toBe("ok"); +}); diff --git a/test/configCases/entry/depend-on-advanced/page2.js b/test/configCases/entry/depend-on-advanced/page2.js new file mode 100644 index 00000000000..32f96417bc7 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/page2.js @@ -0,0 +1,26 @@ +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +it("should be able to load the modules", () => { + expect(isomorphicFetch).toBe("isomorphic-fetch"); + expect(react).toBe("react"); + expect(reactDOM).toBe("react-dom"); +}); + +it("should have the correct modules in a lazy chunk", () => { + const promise = import(/* webpackChunkName: "lazy" */ "./lazy").then( + module => { + module.default(); + } + ); + __non_webpack_require__("./lazy.js"); + if (document.head._children[0]) document.head._children[0].onload(); + return promise; +}); + +import { value } from "test"; + +it("other-vendors should run too", () => { + expect(value).toBe("ok"); +}); diff --git a/test/configCases/entry/depend-on-advanced/page3.js b/test/configCases/entry/depend-on-advanced/page3.js new file mode 100644 index 00000000000..32f96417bc7 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/page3.js @@ -0,0 +1,26 @@ +import isomorphicFetch from "isomorphic-fetch"; +import react from "react"; +import reactDOM from "react-dom"; + +it("should be able to load the modules", () => { + expect(isomorphicFetch).toBe("isomorphic-fetch"); + expect(react).toBe("react"); + expect(reactDOM).toBe("react-dom"); +}); + +it("should have the correct modules in a lazy chunk", () => { + const promise = import(/* webpackChunkName: "lazy" */ "./lazy").then( + module => { + module.default(); + } + ); + __non_webpack_require__("./lazy.js"); + if (document.head._children[0]) document.head._children[0].onload(); + return promise; +}); + +import { value } from "test"; + +it("other-vendors should run too", () => { + expect(value).toBe("ok"); +}); diff --git a/test/configCases/entry/depend-on-advanced/test.config.js b/test/configCases/entry/depend-on-advanced/test.config.js new file mode 100644 index 00000000000..50a41ac8a57 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/test.config.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./app.js", + "./runtime.js", + "./page1.js", + "./react-vendors.js", + "./page2.js", + "./other-vendors.js", + "./page3.js" + ]; + } +}; diff --git a/test/configCases/entry/depend-on-advanced/webpack.config.js b/test/configCases/entry/depend-on-advanced/webpack.config.js new file mode 100644 index 00000000000..03d6b515e44 --- /dev/null +++ b/test/configCases/entry/depend-on-advanced/webpack.config.js @@ -0,0 +1,80 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Configuration} Configuration */ +/** @typedef {import("../../../../").Chunk} Chunk */ + +/** @type {Configuration} */ +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry() { + return Promise.resolve({ + app: { import: "./app.js", dependOn: ["other-vendors"] }, + page1: { import: "./page1.js", dependOn: ["app", "react-vendors"] }, + page2: { import: "./page2.js", dependOn: ["app", "react-vendors"] }, + page3: { import: "./page3.js", dependOn: ["app"] }, + "react-vendors": ["react", "react-dom", "prop-types"], + "other-vendors": "./other-vendors" + }); + }, + target: "web", + optimization: { + runtimeChunk: "single" + }, + output: { + filename: "[name].js" + }, + plugins: [ + /** + * @this {Compiler} compiler + */ + function apply() { + /** + * @param {Compilation} compilation compilation + * @returns {void} + */ + const handler = (compilation) => { + compilation.hooks.afterSeal.tap("testcase", () => { + const { chunkGraph } = compilation; + /** @type {Record>} */ + const chunkModules = {}; + for (const chunk of compilation.chunks) { + chunkModules[ + /** @type {NonNullable} */ + (chunk.name) + ] = new Set(); + + for (const module of chunkGraph.getChunkModulesIterable(chunk)) { + chunkModules[ + /** @type {NonNullable} */ + (chunk.name) + ].add(module.identifier()); + } + } + + for (const module of chunkModules["other-vendors"]) { + expect([...chunkModules.app]).not.toContain(module); + } + + for (const module of [ + ...chunkModules["other-vendors"], + ...chunkModules["react-vendors"], + ...chunkModules.app + ]) { + expect(chunkModules.page1).not.toContain(module); + expect(chunkModules.page2).not.toContain(module); + } + + for (const module of [ + ...chunkModules["other-vendors"], + ...chunkModules.app + ]) { + expect([...chunkModules.page3]).not.toContain(module); + } + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] +}; diff --git a/test/configCases/entry/depend-on-bug/app.js b/test/configCases/entry/depend-on-bug/app.js new file mode 100644 index 00000000000..b6eb6a3130b --- /dev/null +++ b/test/configCases/entry/depend-on-bug/app.js @@ -0,0 +1 @@ +import isomorphicFetch from "isomorphic-fetch"; diff --git a/test/configCases/entry/depend-on-bug/node_modules/isomorphic-fetch.js b/test/configCases/entry/depend-on-bug/node_modules/isomorphic-fetch.js new file mode 100644 index 00000000000..ce0c36b3158 --- /dev/null +++ b/test/configCases/entry/depend-on-bug/node_modules/isomorphic-fetch.js @@ -0,0 +1 @@ +module.exports = "isomorphic-fetch"; diff --git a/test/configCases/entry/depend-on-bug/other-vendors.js b/test/configCases/entry/depend-on-bug/other-vendors.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/entry/depend-on-bug/page1.js b/test/configCases/entry/depend-on-bug/page1.js new file mode 100644 index 00000000000..36a7db85bbe --- /dev/null +++ b/test/configCases/entry/depend-on-bug/page1.js @@ -0,0 +1,7 @@ +import isomorphicFetch from "isomorphic-fetch"; + +it("should run", () => { + expect( + __STATS__.modules.find(m => m.name.includes("isomorphic-fetch")).chunks + ).toHaveLength(1); +}); diff --git a/test/configCases/entry/depend-on-bug/test.config.js b/test/configCases/entry/depend-on-bug/test.config.js new file mode 100644 index 00000000000..49a5cbdac81 --- /dev/null +++ b/test/configCases/entry/depend-on-bug/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./other-vendors.js", "./page1.js", "./app.js"]; + } +}; diff --git a/test/configCases/entry/depend-on-bug/webpack.config.js b/test/configCases/entry/depend-on-bug/webpack.config.js new file mode 100644 index 00000000000..ada19ab53cf --- /dev/null +++ b/test/configCases/entry/depend-on-bug/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Configuration} Configuration */ + +/** @type {Configuration} */ +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry() { + return Promise.resolve({ + app: { import: "./app.js", dependOn: ["other-vendors"] }, + page1: { import: "./page1.js", dependOn: ["app"] }, + "other-vendors": "./other-vendors" + }); + }, + target: "web", + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/entry/depend-on-non-js/a.css b/test/configCases/entry/depend-on-non-js/a.css new file mode 100644 index 00000000000..58362a94448 --- /dev/null +++ b/test/configCases/entry/depend-on-non-js/a.css @@ -0,0 +1 @@ +module.exports = [[module.id, "body { background-color: green; }"]]; diff --git a/test/configCases/entry/depend-on-non-js/a.js b/test/configCases/entry/depend-on-non-js/a.js new file mode 100644 index 00000000000..bc7652000f3 --- /dev/null +++ b/test/configCases/entry/depend-on-non-js/a.js @@ -0,0 +1 @@ +if (Math.random() < 0) require("./a.css"); diff --git a/test/configCases/entry/depend-on-non-js/b.css b/test/configCases/entry/depend-on-non-js/b.css new file mode 100644 index 00000000000..867e7070dc8 --- /dev/null +++ b/test/configCases/entry/depend-on-non-js/b.css @@ -0,0 +1 @@ +module.exports = [[module.id, "body { color: red; }"]]; diff --git a/test/configCases/entry/depend-on-non-js/b.js b/test/configCases/entry/depend-on-non-js/b.js new file mode 100644 index 00000000000..7c96074e6e3 --- /dev/null +++ b/test/configCases/entry/depend-on-non-js/b.js @@ -0,0 +1,3 @@ +if (Math.random() < 0) require("./b.css"); + +it("should run the test", () => {}); diff --git a/test/configCases/entry/depend-on-non-js/test.config.js b/test/configCases/entry/depend-on-non-js/test.config.js new file mode 100644 index 00000000000..fb58244b65b --- /dev/null +++ b/test/configCases/entry/depend-on-non-js/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.js", "./a.js", "./b.js"]; + } +}; diff --git a/test/configCases/entry/depend-on-non-js/webpack.config.js b/test/configCases/entry/depend-on-non-js/webpack.config.js new file mode 100644 index 00000000000..07bc8a1e8f8 --- /dev/null +++ b/test/configCases/entry/depend-on-non-js/webpack.config.js @@ -0,0 +1,40 @@ +"use strict"; + +const MiniCssPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a.js", + b: { import: "./b.js", dependOn: "a" } + }, + module: { + rules: [ + { + test: /\.css$/, + loader: MiniCssPlugin.loader + } + ] + }, + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single", + splitChunks: { + chunks: "all", + cacheGroups: { + styles: { + type: "css/mini-extract", + enforce: true + } + } + } + }, + target: "web", + plugins: [ + new MiniCssPlugin({ + experimentalUseImportModule: true + }) + ] +}; diff --git a/test/configCases/entry/depend-on-simple/app.js b/test/configCases/entry/depend-on-simple/app.js new file mode 100644 index 00000000000..a43ae345ce5 --- /dev/null +++ b/test/configCases/entry/depend-on-simple/app.js @@ -0,0 +1,9 @@ +import react from "react"; +import reactDOM from "react-dom"; +import propTypes from "prop-types"; + +it("should load modules correctly", () => { + expect(react).toBe("react"); + expect(reactDOM).toBe("react-dom"); + expect(propTypes).toBe("prop-types"); +}); diff --git a/test/configCases/entry/depend-on-simple/node_modules/prop-types.js b/test/configCases/entry/depend-on-simple/node_modules/prop-types.js new file mode 100644 index 00000000000..9c6971329ce --- /dev/null +++ b/test/configCases/entry/depend-on-simple/node_modules/prop-types.js @@ -0,0 +1 @@ +module.exports = 'prop-types'; diff --git a/test/configCases/entry/depend-on-simple/node_modules/react-dom.js b/test/configCases/entry/depend-on-simple/node_modules/react-dom.js new file mode 100644 index 00000000000..d2f4c643e28 --- /dev/null +++ b/test/configCases/entry/depend-on-simple/node_modules/react-dom.js @@ -0,0 +1 @@ +module.exports = 'react-dom'; diff --git a/test/configCases/entry/depend-on-simple/node_modules/react.js b/test/configCases/entry/depend-on-simple/node_modules/react.js new file mode 100644 index 00000000000..11c0b89c737 --- /dev/null +++ b/test/configCases/entry/depend-on-simple/node_modules/react.js @@ -0,0 +1 @@ +module.exports = 'react'; diff --git a/test/configCases/entry/depend-on-simple/test.config.js b/test/configCases/entry/depend-on-simple/test.config.js new file mode 100644 index 00000000000..2288cff595f --- /dev/null +++ b/test/configCases/entry/depend-on-simple/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./app.js", "./react-vendors.js"]; + } +}; diff --git a/test/configCases/entry/depend-on-simple/webpack.config.js b/test/configCases/entry/depend-on-simple/webpack.config.js new file mode 100644 index 00000000000..4314a7d1d3a --- /dev/null +++ b/test/configCases/entry/depend-on-simple/webpack.config.js @@ -0,0 +1,54 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").Compilation} Compilation */ +/** @typedef {import("../../../../").Chunk} Chunk */ +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + app: { import: "./app.js", dependOn: "react-vendors" }, + "react-vendors": ["react", "react-dom", "prop-types"] + }, + target: "web", + output: { + filename: "[name].js" + }, + plugins: [ + /** + * @this {Compiler} compiler + */ + function apply() { + /** + * @param {Compilation} compilation compilation + * @returns {void} + */ + const handler = (compilation) => { + compilation.hooks.afterSeal.tap("testcase", () => { + const { chunkGraph } = compilation; + /** @type {Record>} */ + const chunkModules = {}; + for (const chunk of compilation.chunks) { + chunkModules[ + /** @type {NonNullable} */ + (chunk.name) + ] = new Set(); + + for (const module of chunkGraph.getChunkModulesIterable(chunk)) { + chunkModules[ + /** @type {NonNullable} */ + (chunk.name) + ].add(module); + } + } + + expect([...chunkModules.app]).toStrictEqual( + expect.not.arrayContaining([...chunkModules["react-vendors"]]) + ); + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] +}; diff --git a/test/configCases/entry/descriptor/a.js b/test/configCases/entry/descriptor/a.js new file mode 100644 index 00000000000..0041c02292d --- /dev/null +++ b/test/configCases/entry/descriptor/a.js @@ -0,0 +1,3 @@ +it("should compile", (done) => { + done() +}); diff --git a/test/configCases/entry/descriptor/b.js b/test/configCases/entry/descriptor/b.js new file mode 100644 index 00000000000..0041c02292d --- /dev/null +++ b/test/configCases/entry/descriptor/b.js @@ -0,0 +1,3 @@ +it("should compile", (done) => { + done() +}); diff --git a/test/configCases/entry/descriptor/test.config.js b/test/configCases/entry/descriptor/test.config.js new file mode 100644 index 00000000000..af2075ac84f --- /dev/null +++ b/test/configCases/entry/descriptor/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./b.js"]; + } +}; diff --git a/test/configCases/entry/descriptor/webpack.config.js b/test/configCases/entry/descriptor/webpack.config.js new file mode 100644 index 00000000000..b9c6363e17f --- /dev/null +++ b/test/configCases/entry/descriptor/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry() { + return { + a: { import: "./a" }, + b: { import: ["./b"] } + }; + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/entry/entry-base-uri/1.jpg b/test/configCases/entry/entry-base-uri/1.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/entry/entry-base-uri/index.js b/test/configCases/entry/entry-base-uri/index.js new file mode 100644 index 00000000000..7d00291f23b --- /dev/null +++ b/test/configCases/entry/entry-base-uri/index.js @@ -0,0 +1,5 @@ +const jpg = new URL("./1.jpg", import.meta.url); + +it("should provide custom base uri", () => { + expect(jpg.toString()).toBe("my-scheme://baseuri/1.jpg"); +}); diff --git a/test/configCases/entry/entry-base-uri/webpack.config.js b/test/configCases/entry/entry-base-uri/webpack.config.js new file mode 100644 index 00000000000..41979b90945 --- /dev/null +++ b/test/configCases/entry/entry-base-uri/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: { + import: "./index.js", + baseUri: "my-scheme://baseuri", + publicPath: "/" + } + }, + output: { + assetModuleFilename: "[name][ext]" + }, + target: "web" +}; diff --git a/test/configCases/entry/function-promise/test.config.js b/test/configCases/entry/function-promise/test.config.js index 8a5b96a8434..af2075ac84f 100644 --- a/test/configCases/entry/function-promise/test.config.js +++ b/test/configCases/entry/function-promise/test.config.js @@ -1,8 +1,7 @@ +"use strict"; + module.exports = { - findBundle: function() { - return [ - "./a.js", - "./b.js" - ] + findBundle() { + return ["./a.js", "./b.js"]; } }; diff --git a/test/configCases/entry/function-promise/webpack.config.js b/test/configCases/entry/function-promise/webpack.config.js index 51f96abb8ed..896edd15b81 100644 --- a/test/configCases/entry/function-promise/webpack.config.js +++ b/test/configCases/entry/function-promise/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry() { return Promise.resolve({ diff --git a/test/configCases/entry/function/test.config.js b/test/configCases/entry/function/test.config.js index 8a5b96a8434..af2075ac84f 100644 --- a/test/configCases/entry/function/test.config.js +++ b/test/configCases/entry/function/test.config.js @@ -1,8 +1,7 @@ +"use strict"; + module.exports = { - findBundle: function() { - return [ - "./a.js", - "./b.js" - ] + findBundle() { + return ["./a.js", "./b.js"]; } }; diff --git a/test/configCases/entry/function/webpack.config.js b/test/configCases/entry/function/webpack.config.js index aaeba7d0f45..a55d9325ff5 100644 --- a/test/configCases/entry/function/webpack.config.js +++ b/test/configCases/entry/function/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry() { return { diff --git a/test/configCases/entry/issue-1068/webpack.config.js b/test/configCases/entry/issue-1068/webpack.config.js index 9f42fbd69f1..db676c98c94 100644 --- a/test/configCases/entry/issue-1068/webpack.config.js +++ b/test/configCases/entry/issue-1068/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: [ "./a", diff --git a/test/configCases/entry/issue-12562/app.js b/test/configCases/entry/issue-12562/app.js new file mode 100644 index 00000000000..03392144212 --- /dev/null +++ b/test/configCases/entry/issue-12562/app.js @@ -0,0 +1 @@ +it("should load", () => import("./test.js")); diff --git a/test/configCases/entry/issue-12562/home.js b/test/configCases/entry/issue-12562/home.js new file mode 100644 index 00000000000..6a0525ff48f --- /dev/null +++ b/test/configCases/entry/issue-12562/home.js @@ -0,0 +1,4 @@ +import log from "./log"; +log("Hi"); + +it("should load", () => {}); diff --git a/test/configCases/entry/issue-12562/log.js b/test/configCases/entry/issue-12562/log.js new file mode 100644 index 00000000000..1dde663cf13 --- /dev/null +++ b/test/configCases/entry/issue-12562/log.js @@ -0,0 +1,3 @@ +export default function (msg) { + console.log.bind(console, msg); +} diff --git a/test/configCases/entry/issue-12562/test.config.js b/test/configCases/entry/issue-12562/test.config.js new file mode 100644 index 00000000000..3091b7d6f34 --- /dev/null +++ b/test/configCases/entry/issue-12562/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.js", "./app.js", "./home.js"]; + } +}; diff --git a/test/configCases/entry/issue-12562/test.js b/test/configCases/entry/issue-12562/test.js new file mode 100644 index 00000000000..d3cb28b6458 --- /dev/null +++ b/test/configCases/entry/issue-12562/test.js @@ -0,0 +1,2 @@ +import log from "./log"; +log("Hi"); diff --git a/test/configCases/entry/issue-12562/webpack.config.js b/test/configCases/entry/issue-12562/webpack.config.js new file mode 100644 index 00000000000..e96ea195529 --- /dev/null +++ b/test/configCases/entry/issue-12562/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + app: "./app.js", + home: { + import: "./home.js", + dependOn: "app" + } + }, + output: { + pathinfo: "verbose", + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single" + } +}; diff --git a/test/configCases/entry/issue-13637/index-system.js b/test/configCases/entry/issue-13637/index-system.js new file mode 100644 index 00000000000..ac93b355f7c --- /dev/null +++ b/test/configCases/entry/issue-13637/index-system.js @@ -0,0 +1,8 @@ +// This test verifies that the System.register context is made available to webpack bundles + +it("should be able to use the System.register context in entries where library.type is system", function() { + expect(__system_context__).toBeTruthy(); + expect(__system_context__.meta).toBeTruthy(); + expect(typeof __system_context__.import).toBe("function"); + expect(typeof __system_context__.meta.url).toBe("string"); +}); diff --git a/test/configCases/entry/issue-13637/index-umd.js b/test/configCases/entry/issue-13637/index-umd.js new file mode 100644 index 00000000000..73fb58795cc --- /dev/null +++ b/test/configCases/entry/issue-13637/index-umd.js @@ -0,0 +1,5 @@ +// This test verifies that the System.register context is not available for non-system entries + +it("should not be able to use the System.register context in entries where library.type is not system", function() { + expect(__system_context__).toBeUndefined(); +}); diff --git a/test/configCases/entry/issue-13637/test.config.js b/test/configCases/entry/issue-13637/test.config.js new file mode 100644 index 00000000000..e9077fd3e6b --- /dev/null +++ b/test/configCases/entry/issue-13637/test.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + scope.System = System; + }, + afterExecute: () => { + System.execute("(anonym)"); + }, + findBundle() { + return ["./main.system.js", "./main.umd.js"]; + } +}; diff --git a/test/configCases/entry/issue-13637/webpack.config.js b/test/configCases/entry/issue-13637/webpack.config.js new file mode 100644 index 00000000000..74410018ebc --- /dev/null +++ b/test/configCases/entry/issue-13637/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + "main-system": { + import: "./index-system.js", + library: { + type: "system" + }, + filename: "main.system.js" + }, + "main-umd": { + import: "./index-umd.js", + library: { + type: "umd" + }, + filename: "main.umd.js" + } + }, + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/entry/issue-8110/a.js b/test/configCases/entry/issue-8110/a.js new file mode 100644 index 00000000000..95aac3b5403 --- /dev/null +++ b/test/configCases/entry/issue-8110/a.js @@ -0,0 +1,8 @@ +import run from "./c"; +import "./d"; + +it("should not crash", () => { + return run().then(result => { + expect(result.default).toBe("ok"); + }); +}) diff --git a/test/configCases/entry/issue-8110/b.js b/test/configCases/entry/issue-8110/b.js new file mode 100644 index 00000000000..b4c710a8275 --- /dev/null +++ b/test/configCases/entry/issue-8110/b.js @@ -0,0 +1,3 @@ +import run from "./c"; + +run(); diff --git a/test/configCases/entry/issue-8110/c.js b/test/configCases/entry/issue-8110/c.js new file mode 100644 index 00000000000..c8bc53d949b --- /dev/null +++ b/test/configCases/entry/issue-8110/c.js @@ -0,0 +1,3 @@ +export default function run() { + return import("./d"); +} diff --git a/test/configCases/entry/issue-8110/d.js b/test/configCases/entry/issue-8110/d.js new file mode 100644 index 00000000000..5c6b89abfc8 --- /dev/null +++ b/test/configCases/entry/issue-8110/d.js @@ -0,0 +1 @@ +export default "ok"; diff --git a/test/configCases/entry/issue-8110/webpack.config.js b/test/configCases/entry/issue-8110/webpack.config.js new file mode 100644 index 00000000000..c86e6227800 --- /dev/null +++ b/test/configCases/entry/issue-8110/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./a", + other: "./b" + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/entry/no-chunking/a.js b/test/configCases/entry/no-chunking/a.js new file mode 100644 index 00000000000..b5c7af9a9a2 --- /dev/null +++ b/test/configCases/entry/no-chunking/a.js @@ -0,0 +1,12 @@ +import fs from "fs"; + +it("should load chunks on demand", async () => { + expect((await import("./async")).default).toEqual(42); + expect((await (await import("./async")).nested()).default).toEqual(43); + expect(fs.readFileSync(__filename, "utf-8")).not.toContain( + "This is the" + " async chunk" + ); + expect(fs.readFileSync(__filename, "utf-8")).not.toContain( + "This is the" + " nested async chunk" + ); +}); diff --git a/test/configCases/entry/no-chunking/async.js b/test/configCases/entry/no-chunking/async.js new file mode 100644 index 00000000000..5bb02b6aef8 --- /dev/null +++ b/test/configCases/entry/no-chunking/async.js @@ -0,0 +1,3 @@ +// This is the async chunk +export default 42; +export const nested = () => import("./nested"); diff --git a/test/configCases/entry/no-chunking/b.js b/test/configCases/entry/no-chunking/b.js new file mode 100644 index 00000000000..963cac2f617 --- /dev/null +++ b/test/configCases/entry/no-chunking/b.js @@ -0,0 +1,12 @@ +import fs from "fs"; + +it("should include all async imports in the main chunk", async () => { + expect((await import("./async")).default).toEqual(42); + expect((await (await import("./async")).nested()).default).toEqual(43); + expect(fs.readFileSync(__filename, "utf-8")).toContain( + "This is the async chunk" + ); + expect(fs.readFileSync(__filename, "utf-8")).toContain( + "This is the nested async chunk" + ); +}); diff --git a/test/configCases/entry/no-chunking/nested.js b/test/configCases/entry/no-chunking/nested.js new file mode 100644 index 00000000000..423e55b22e2 --- /dev/null +++ b/test/configCases/entry/no-chunking/nested.js @@ -0,0 +1,2 @@ +// This is the nested async chunk +export default 43; diff --git a/test/configCases/entry/no-chunking/test.config.js b/test/configCases/entry/no-chunking/test.config.js new file mode 100644 index 00000000000..cd9efc4d643 --- /dev/null +++ b/test/configCases/entry/no-chunking/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./b.js", "./c.js", "./runtime.js", "./d.js"]; + } +}; diff --git a/test/configCases/entry/no-chunking/webpack.config.js b/test/configCases/entry/no-chunking/webpack.config.js new file mode 100644 index 00000000000..523f76de456 --- /dev/null +++ b/test/configCases/entry/no-chunking/webpack.config.js @@ -0,0 +1,31 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a.js", + b: { + import: "./b.js", + chunkLoading: false + }, + c: { + import: "./b.js", + asyncChunks: false + }, + d: { + import: "./b.js", + asyncChunks: false, + runtime: "runtime" + } + }, + output: { + filename: "[name].js" + }, + target: "web", + externals: { + fs: "commonjs fs" + }, + node: { + __filename: false + } +}; diff --git a/test/configCases/entry/require-entry-point/webpack.config.js b/test/configCases/entry/require-entry-point/webpack.config.js index 54b25366f4f..915e708d565 100644 --- a/test/configCases/entry/require-entry-point/webpack.config.js +++ b/test/configCases/entry/require-entry-point/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: { bundle0: "./require-entry-point", diff --git a/test/configCases/entry/single-entry-point/webpack.config.js b/test/configCases/entry/single-entry-point/webpack.config.js index d663ad3c400..eb5e23c15a1 100644 --- a/test/configCases/entry/single-entry-point/webpack.config.js +++ b/test/configCases/entry/single-entry-point/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: "./single-entry-point" }; diff --git a/test/configCases/entry/usage-info-in-multiple-entry-points/a.js b/test/configCases/entry/usage-info-in-multiple-entry-points/a.js new file mode 100644 index 00000000000..54cbd8611e3 --- /dev/null +++ b/test/configCases/entry/usage-info-in-multiple-entry-points/a.js @@ -0,0 +1,5 @@ +import value from "./module"; + +it("should have usage info in this module", () => { + expect(value).toBe(42); +}) diff --git a/test/configCases/entry/usage-info-in-multiple-entry-points/b.js b/test/configCases/entry/usage-info-in-multiple-entry-points/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/entry/usage-info-in-multiple-entry-points/module.js b/test/configCases/entry/usage-info-in-multiple-entry-points/module.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/entry/usage-info-in-multiple-entry-points/module.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/entry/usage-info-in-multiple-entry-points/webpack.config.js b/test/configCases/entry/usage-info-in-multiple-entry-points/webpack.config.js new file mode 100644 index 00000000000..8dcbfa586b7 --- /dev/null +++ b/test/configCases/entry/usage-info-in-multiple-entry-points/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: ["./a", "./b"] +}; diff --git a/test/configCases/entry/weird-names/chunk.js b/test/configCases/entry/weird-names/chunk.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/entry/weird-names/chunk.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/entry/weird-names/index.js b/test/configCases/entry/weird-names/index.js new file mode 100644 index 00000000000..062fb7b2685 --- /dev/null +++ b/test/configCases/entry/weird-names/index.js @@ -0,0 +1,4 @@ +it("should load on demand", () => + import(/* webpackChunkName: "././../chunk/chunk/./../" */ "./chunk").then(r => + expect(r).toEqual(expect.objectContaining({ default: 42 })) + )); diff --git a/test/configCases/entry/weird-names/test.config.js b/test/configCases/entry/weird-names/test.config.js new file mode 100644 index 00000000000..e4cf41ca7e8 --- /dev/null +++ b/test/configCases/entry/weird-names/test.config.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + findBundle(i, options) { + return [ + `./${options.target}/folder/entry/-x/file.js`, + `./${options.target}/folder/x-/-x/file.js`, + `./${options.target}/folder/x-../entry-x/file.js` + ]; + } +}; diff --git a/test/configCases/entry/weird-names/webpack.config.js b/test/configCases/entry/weird-names/webpack.config.js new file mode 100644 index 00000000000..82da45ccd3e --- /dev/null +++ b/test/configCases/entry/weird-names/webpack.config.js @@ -0,0 +1,35 @@ +"use strict"; + +const entry = { + "././../entry/point/./../": "./index.js", + "/////": "./index.js", + "../entry": "./index.js" +}; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "async-node", + entry, + output: { + filename: "async-node/folder/x-[name]-x/file.js", + chunkFilename: "async-node/chunks/x-[name]-x/file.js" + } + }, + { + target: "node", + entry, + output: { + filename: "node/folder/x-[name]-x/file.js", + chunkFilename: "node/chunks/x-[name]-x/file.js" + } + }, + { + target: "webworker", + entry, + output: { + filename: "webworker/folder/x-[name]-x/file.js", + chunkFilename: "webworker/chunks/x-[name]-x/file.js" + } + } +]; diff --git a/test/configCases/entry/weird-names2/chunk.js b/test/configCases/entry/weird-names2/chunk.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/entry/weird-names2/chunk.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/entry/weird-names2/index.js b/test/configCases/entry/weird-names2/index.js new file mode 100644 index 00000000000..062fb7b2685 --- /dev/null +++ b/test/configCases/entry/weird-names2/index.js @@ -0,0 +1,4 @@ +it("should load on demand", () => + import(/* webpackChunkName: "././../chunk/chunk/./../" */ "./chunk").then(r => + expect(r).toEqual(expect.objectContaining({ default: 42 })) + )); diff --git a/test/configCases/entry/weird-names2/test.config.js b/test/configCases/entry/weird-names2/test.config.js new file mode 100644 index 00000000000..c5b6d32c1d1 --- /dev/null +++ b/test/configCases/entry/weird-names2/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + findBundle(i, options) { + return [ + `../weird-names2-out/entry/entry-${options.target}.js`, + `../weird-names2-out/entry-${options.target}.js` + ]; + } +}; diff --git a/test/configCases/entry/weird-names2/webpack.config.js b/test/configCases/entry/weird-names2/webpack.config.js new file mode 100644 index 00000000000..14afcd93b0d --- /dev/null +++ b/test/configCases/entry/weird-names2/webpack.config.js @@ -0,0 +1,34 @@ +"use strict"; + +const entry = { + "././../weird-names2-out/entry/point/./../entry": "./index.js", + "..//weird-names2-out////entry": "./index.js" +}; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "async-node", + entry, + output: { + filename: "[name]-async-node.js", + chunkFilename: "chunks/[name]-async-node.js" + } + }, + { + target: "node", + entry, + output: { + filename: "[name]-node.js", + chunkFilename: "chunks/[name]-node.js" + } + }, + { + target: "webworker", + entry, + output: { + filename: "[name]-webworker.js", + chunkFilename: "chunks/[name]-webworker.js" + } + } +]; diff --git a/test/configCases/errors/asset-options-validation/errors.js b/test/configCases/errors/asset-options-validation/errors.js new file mode 100644 index 00000000000..974dd6069aa --- /dev/null +++ b/test/configCases/errors/asset-options-validation/errors.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + [ + /Invalid generator object\. Asset Modules Plugin has been initialized using a generator object that does not match the API schema/, + /generator has an unknown property 'filename'/ + ] +]; diff --git a/test/configCases/errors/asset-options-validation/index.js b/test/configCases/errors/asset-options-validation/index.js new file mode 100644 index 00000000000..39765156136 --- /dev/null +++ b/test/configCases/errors/asset-options-validation/index.js @@ -0,0 +1 @@ +import url from "./text.txt"; diff --git a/test/configCases/errors/asset-options-validation/text.txt b/test/configCases/errors/asset-options-validation/text.txt new file mode 100644 index 00000000000..557db03de99 --- /dev/null +++ b/test/configCases/errors/asset-options-validation/text.txt @@ -0,0 +1 @@ +Hello World diff --git a/test/configCases/errors/asset-options-validation/webpack.config.js b/test/configCases/errors/asset-options-validation/webpack.config.js new file mode 100644 index 00000000000..db05dda25a7 --- /dev/null +++ b/test/configCases/errors/asset-options-validation/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.txt$/, + type: "asset/inline", + generator: { + filename: "[name].txt" + } + } + ] + } +}; diff --git a/test/configCases/errors/case-emit/errors.js b/test/configCases/errors/case-emit/errors.js new file mode 100644 index 00000000000..05131a63eeb --- /dev/null +++ b/test/configCases/errors/case-emit/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/only differs in casing/, /a\.js/, /A\.js/]]; diff --git a/test/configCases/errors/case-emit/index.js b/test/configCases/errors/case-emit/index.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/errors/case-emit/webpack.config.js b/test/configCases/errors/case-emit/webpack.config.js new file mode 100644 index 00000000000..811857876d7 --- /dev/null +++ b/test/configCases/errors/case-emit/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./index.js?1", + A: "./index.js?2" + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/errors/depend-on-and-runtime/a.js b/test/configCases/errors/depend-on-and-runtime/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/errors/depend-on-and-runtime/b.js b/test/configCases/errors/depend-on-and-runtime/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/errors/depend-on-and-runtime/errors.js b/test/configCases/errors/depend-on-and-runtime/errors.js new file mode 100644 index 00000000000..d7012cb9fcb --- /dev/null +++ b/test/configCases/errors/depend-on-and-runtime/errors.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = [ + [ + /Entrypoint 'b1' has a 'runtime' option which points to another entrypoint named 'a1'/ + ], + [/Entrypoint 'b2' has 'dependOn' and 'runtime' specified/], + [ + /Entrypoints 'b3' and 'a3' use 'dependOn' to depend on each other in a circular way/ + ] +]; diff --git a/test/configCases/errors/depend-on-and-runtime/webpack.config.js b/test/configCases/errors/depend-on-and-runtime/webpack.config.js new file mode 100644 index 00000000000..c4cdc14f457 --- /dev/null +++ b/test/configCases/errors/depend-on-and-runtime/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + filename: "runtime-to-entrypoint-[name].js" + }, + entry: { + a1: "./a", + b1: { + runtime: "a1", + import: "./b" + } + } + }, + { + output: { + filename: "dependOn-plus-runtime-[name].js" + }, + entry: { + a2: "./a", + b2: { + runtime: "x2", + dependOn: "a2", + import: "./b" + } + } + }, + { + output: { + filename: "circular-dependOn-[name].js" + }, + entry: { + a3: { + import: "./a", + dependOn: "b3" + }, + b3: { + import: "./b", + dependOn: "a3" + } + } + } +]; diff --git a/test/configCases/errors/depend-on-error/errors.js b/test/configCases/errors/depend-on-error/errors.js new file mode 100644 index 00000000000..cc54ee51a0b --- /dev/null +++ b/test/configCases/errors/depend-on-error/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/Can't resolve '\.\/file-does-not-exist\.js'/]]; diff --git a/test/configCases/errors/depend-on-error/index.js b/test/configCases/errors/depend-on-error/index.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/errors/depend-on-error/webpack.config.js b/test/configCases/errors/depend-on-error/webpack.config.js new file mode 100644 index 00000000000..b36e731c459 --- /dev/null +++ b/test/configCases/errors/depend-on-error/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + foo: "./file-does-not-exist.js", + bar: { + import: ["./index.js"], + dependOn: ["foo"] + } + }, + output: { + filename: "[name].js" + } +}; diff --git a/test/configCases/errors/entry-not-found/errors.js b/test/configCases/errors/entry-not-found/errors.js index 8529ae88883..fe6443acc8e 100644 --- a/test/configCases/errors/entry-not-found/errors.js +++ b/test/configCases/errors/entry-not-found/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/^Entry module not found/, /.\/index\.js/] -]; \ No newline at end of file +"use strict"; + +module.exports = [[/^Module not found/, /.\/index\.js/]]; diff --git a/test/configCases/errors/entry-not-found/webpack.config.js b/test/configCases/errors/entry-not-found/webpack.config.js index f053ebf7976..27313115dcd 100644 --- a/test/configCases/errors/entry-not-found/webpack.config.js +++ b/test/configCases/errors/entry-not-found/webpack.config.js @@ -1 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = {}; diff --git a/test/configCases/errors/exception-in-chunk-renderer/errors.js b/test/configCases/errors/exception-in-chunk-renderer/errors.js new file mode 100644 index 00000000000..0bc6c5af382 --- /dev/null +++ b/test/configCases/errors/exception-in-chunk-renderer/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/Test exception/]]; diff --git a/test/configCases/errors/exception-in-chunk-renderer/index.js b/test/configCases/errors/exception-in-chunk-renderer/index.js new file mode 100644 index 00000000000..d4f42bbdd05 --- /dev/null +++ b/test/configCases/errors/exception-in-chunk-renderer/index.js @@ -0,0 +1,3 @@ +it("should not crash when renderer throws exception", function(done) { + done(); +}); diff --git a/test/configCases/errors/exception-in-chunk-renderer/webpack.config.js b/test/configCases/errors/exception-in-chunk-renderer/webpack.config.js new file mode 100644 index 00000000000..ad222c1514d --- /dev/null +++ b/test/configCases/errors/exception-in-chunk-renderer/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ + +class ThrowsExceptionInRender { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.compilation.tap("ThrowsException", (compilation) => { + compilation.mainTemplate.hooks.requireExtensions.tap( + "ThrowsException", + () => { + throw new Error("Test exception"); + } + ); + }); + } +} + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new ThrowsExceptionInRender()] +}; diff --git a/test/configCases/errors/generator-generate-error/async-wasm.wat b/test/configCases/errors/generator-generate-error/async-wasm.wat new file mode 100644 index 00000000000..477902e7f3c --- /dev/null +++ b/test/configCases/errors/generator-generate-error/async-wasm.wat @@ -0,0 +1,10 @@ +(module + (type $t0 (func (param i32 i32) (result i32))) + (type $t1 (func (result i32))) + (func $add (export "add") (type $t0) (param $p0 i32) (param $p1 i32) (result i32) + (i32.add + (get_local $p0) + (get_local $p1))) + (func $getNumber (export "getNumber") (type $t1) (result i32) + (i32.const 40))) + diff --git a/test/configCases/errors/generator-generate-error/errors.js b/test/configCases/errors/generator-generate-error/errors.js new file mode 100644 index 00000000000..265073eab2b --- /dev/null +++ b/test/configCases/errors/generator-generate-error/errors.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = [ + /javascript\/auto error message/, + /asset\/inline error message/, + /asset\/resource error message/, + /asset\/resource other error message/, + /asset\/resource in css error message/, + /asset\/source error message/, + /asset\/source in css error message/, + /css\/auto error message/, + /css error message/, + /json error message/, + /json other error message/, + /webassembly\/async error message/ +]; diff --git a/test/configCases/errors/generator-generate-error/file.json b/test/configCases/errors/generator-generate-error/file.json new file mode 100644 index 00000000000..d0ae716dbe4 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/file.json @@ -0,0 +1,3 @@ +{ + "test": "test" +} diff --git a/test/configCases/errors/generator-generate-error/file.svg b/test/configCases/errors/generator-generate-error/file.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/file.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/errors/generator-generate-error/in-style-source.png b/test/configCases/errors/generator-generate-error/in-style-source.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/errors/generator-generate-error/in-style-source.png differ diff --git a/test/configCases/errors/generator-generate-error/in-style.png b/test/configCases/errors/generator-generate-error/in-style.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/errors/generator-generate-error/in-style.png differ diff --git a/test/configCases/errors/generator-generate-error/index.js b/test/configCases/errors/generator-generate-error/index.js new file mode 100644 index 00000000000..6b2ab4b1408 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/index.js @@ -0,0 +1,118 @@ +it("should generate a custom error content", async () => { + expect(__STATS__.modules.filter(m => m.moduleType !== "runtime").length).toEqual(14); + expect(__STATS__.assets.length).toEqual(19); + expect(__STATS__.chunks.length).toEqual(12); + + let errored; + + let json; + + try { + json = await import("./file.json"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/json error message/); + + let otherJson; + + try { + otherJson = await import("./other.json"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/json other error message/); + + let source; + + try { + source = await import("./source.txt"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/asset\/source error message/); + + let resource; + + try { + resource = await import("./file.svg"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/asset\/resource error message/); + + let otherResource; + + try { + otherResource = await import("./other.svg"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/asset\/resource other error message/); + + let inline; + + try { + inline = await import("./inline.txt"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/asset\/inline error message/); + + let style; + + try { + style = await import("./style.css"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/css error message/); + + let js; + + try { + js = await import("./module.js"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/javascript\/auto error message/); + + let otherStyle; + errored = undefined; + + try { + otherStyle = await import("./style-other.css"); + } catch (error) { + errored = error; + } + + expect(errored).toBeUndefined(); + + let cssModules; + + try { + cssModules = await import("./style.modules.css"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/css\/auto error message/); + + let asyncWasm; + + try { + asyncWasm = await import("./async-wasm.wat"); + } catch (error) { + errored = error; + } + + expect(errored.toString()).toMatch(/webassembly\/async error message/); +}); diff --git a/test/configCases/errors/generator-generate-error/infrastructure-log.js b/test/configCases/errors/generator-generate-error/infrastructure-log.js new file mode 100644 index 00000000000..951fafae256 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/infrastructure-log.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = (options) => { + if (options.cache && options.cache.type === "filesystem") { + return [/Pack got invalid because of write to/]; + } + + return []; +}; diff --git a/test/configCases/errors/generator-generate-error/inline.txt b/test/configCases/errors/generator-generate-error/inline.txt new file mode 100644 index 00000000000..aea48f26d4b --- /dev/null +++ b/test/configCases/errors/generator-generate-error/inline.txt @@ -0,0 +1 @@ +inline diff --git a/test/configCases/errors/generator-generate-error/loader.js b/test/configCases/errors/generator-generate-error/loader.js new file mode 100644 index 00000000000..fb9baec030e --- /dev/null +++ b/test/configCases/errors/generator-generate-error/loader.js @@ -0,0 +1,7 @@ +/** @type {import("../../../../").LoaderDefinition<{ message: string }>} */ +module.exports = function() { + const callback = this.async(); + const options = this.getOptions(); + + callback(new Error(options.message || 'Message')); +}; diff --git a/test/configCases/errors/generator-generate-error/module.js b/test/configCases/errors/generator-generate-error/module.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/module.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/errors/generator-generate-error/other.json b/test/configCases/errors/generator-generate-error/other.json new file mode 100644 index 00000000000..d0ae716dbe4 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/other.json @@ -0,0 +1,3 @@ +{ + "test": "test" +} diff --git a/test/configCases/errors/generator-generate-error/other.svg b/test/configCases/errors/generator-generate-error/other.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/other.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/errors/generator-generate-error/source.txt b/test/configCases/errors/generator-generate-error/source.txt new file mode 100644 index 00000000000..9daeafb9864 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/source.txt @@ -0,0 +1 @@ +test diff --git a/test/configCases/errors/generator-generate-error/style-other.css b/test/configCases/errors/generator-generate-error/style-other.css new file mode 100644 index 00000000000..b1617bcfceb --- /dev/null +++ b/test/configCases/errors/generator-generate-error/style-other.css @@ -0,0 +1,4 @@ +div { + background: url("./in-style.png"); + background: url("./in-style-source.png"); +} diff --git a/test/configCases/errors/generator-generate-error/style.css b/test/configCases/errors/generator-generate-error/style.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/style.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/errors/generator-generate-error/style.modules.css b/test/configCases/errors/generator-generate-error/style.modules.css new file mode 100644 index 00000000000..626e93720d0 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/style.modules.css @@ -0,0 +1,3 @@ +.class { + color: red; +} diff --git a/test/configCases/errors/generator-generate-error/sync-wasm.wat b/test/configCases/errors/generator-generate-error/sync-wasm.wat new file mode 100644 index 00000000000..477902e7f3c --- /dev/null +++ b/test/configCases/errors/generator-generate-error/sync-wasm.wat @@ -0,0 +1,10 @@ +(module + (type $t0 (func (param i32 i32) (result i32))) + (type $t1 (func (result i32))) + (func $add (export "add") (type $t0) (param $p0 i32) (param $p1 i32) (result i32) + (i32.add + (get_local $p0) + (get_local $p1))) + (func $getNumber (export "getNumber") (type $t1) (result i32) + (i32.const 40))) + diff --git a/test/configCases/errors/generator-generate-error/test.config.js b/test/configCases/errors/generator-generate-error/test.config.js new file mode 100644 index 00000000000..28c3d22f55d --- /dev/null +++ b/test/configCases/errors/generator-generate-error/test.config.js @@ -0,0 +1,11 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +module.exports = { + findBundle(i, options) { + const files = findOutputFiles(options, new RegExp(/\.js$/)); + + return files.sort((a, _b) => (a.startsWith("main") ? 1 : 0)); + } +}; diff --git a/test/configCases/errors/generator-generate-error/test.filter.js b/test/configCases/errors/generator-generate-error/test.filter.js new file mode 100644 index 00000000000..331c7995f89 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = () => supportsWebAssembly(); diff --git a/test/configCases/errors/generator-generate-error/webpack.config.js b/test/configCases/errors/generator-generate-error/webpack.config.js new file mode 100644 index 00000000000..85c772c3695 --- /dev/null +++ b/test/configCases/errors/generator-generate-error/webpack.config.js @@ -0,0 +1,145 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + output: { + filename: "[name].[chunkhash:8].[contenthash:8].js", + chunkFilename: "[name].[chunkhash:8].[contenthash:8].js" + }, + optimization: { + chunkIds: "named", + emitOnErrors: true + }, + experiments: { + css: true, + asyncWebAssembly: true + }, + module: { + rules: [ + { + type: "asset/source", + test: /source\.txt$/, + use: { + loader: "./loader.js", + options: { + message: "asset/source error message" + } + } + }, + { + type: "asset/resource", + test: /file\.svg$/, + use: { + loader: "./loader.js", + options: { + message: "asset/resource error message" + } + } + }, + { + type: "asset/resource", + test: /other\.svg$/, + use: { + loader: "./loader.js", + options: { + message: "asset/resource other error message" + } + } + }, + { + type: "asset/inline", + test: /inline\.txt$/, + use: { + loader: "./loader.js", + options: { + message: "asset/inline error message" + } + } + }, + { + type: "css", + test: /style\.css$/, + use: { + loader: "./loader.js", + options: { + message: "css error message" + } + } + }, + { + type: "asset/resource", + test: /in-style\.png$/, + use: { + loader: "./loader.js", + options: { + message: "asset/resource in css error message" + } + } + }, + { + type: "asset/source", + test: /in-style-source\.png$/, + use: { + loader: "./loader.js", + options: { + message: "asset/source in css error message" + } + } + }, + { + type: "javascript/auto", + test: /module\.js$/, + use: { + loader: "./loader.js", + options: { + message: "javascript/auto error message" + } + } + }, + { + type: "json", + test: /file\.json$/, + use: { + loader: "./loader.js", + options: { + message: "json error message" + } + } + }, + { + type: "json", + test: /other\.json$/, + use: { + loader: "./loader.js", + options: { + message: "json other error message" + } + } + }, + { + type: "css/auto", + generator: { + exportsOnly: true + }, + test: /style\.modules\.css$/, + use: { + loader: "./loader.js", + options: { + message: "css/auto error message" + } + } + }, + { + type: "webassembly/async", + test: /async-wasm\.wat$/, + use: { + loader: "./loader.js", + options: { + message: "webassembly/async error message" + } + } + } + ] + } +}; diff --git a/test/configCases/errors/hook-webpack-error/errors.js b/test/configCases/errors/hook-webpack-error/errors.js new file mode 100644 index 00000000000..d7813017201 --- /dev/null +++ b/test/configCases/errors/hook-webpack-error/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/Module build failed/]]; diff --git a/test/configCases/errors/hook-webpack-error/index.js b/test/configCases/errors/hook-webpack-error/index.js new file mode 100644 index 00000000000..50784061e48 --- /dev/null +++ b/test/configCases/errors/hook-webpack-error/index.js @@ -0,0 +1,5 @@ +import value from "./my-errored-module.js" + +it("should work and cache", function(done) { + done(); +}); diff --git a/test/configCases/errors/hook-webpack-error/infrastructure-log.js b/test/configCases/errors/hook-webpack-error/infrastructure-log.js new file mode 100644 index 00000000000..951fafae256 --- /dev/null +++ b/test/configCases/errors/hook-webpack-error/infrastructure-log.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = (options) => { + if (options.cache && options.cache.type === "filesystem") { + return [/Pack got invalid because of write to/]; + } + + return []; +}; diff --git a/test/configCases/errors/hook-webpack-error/loader.js b/test/configCases/errors/hook-webpack-error/loader.js new file mode 100644 index 00000000000..6226dc30c18 --- /dev/null +++ b/test/configCases/errors/hook-webpack-error/loader.js @@ -0,0 +1,9 @@ +const HookWebpackError = require('../../../../lib/HookWebpackError.js'); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader() { + const callback = this.async(); + + callback(new HookWebpackError(new Error("Error: test"), "hookName")); +}; + diff --git a/test/configCases/errors/hook-webpack-error/my-errored-module.js b/test/configCases/errors/hook-webpack-error/my-errored-module.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/errors/hook-webpack-error/webpack.config.js b/test/configCases/errors/hook-webpack-error/webpack.config.js new file mode 100644 index 00000000000..df59733be4c --- /dev/null +++ b/test/configCases/errors/hook-webpack-error/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /my-errored-module\.js$/i, + use: [ + { + loader: require.resolve("./loader.js") + } + ] + } + ] + } +}; diff --git a/test/configCases/errors/import-missing/errors.js b/test/configCases/errors/import-missing/errors.js index d4f7cb2e8cd..3c4e17e881e 100644 --- a/test/configCases/errors/import-missing/errors.js +++ b/test/configCases/errors/import-missing/errors.js @@ -1,3 +1,3 @@ -module.exports = [ - [/Module not found/] -]; +"use strict"; + +module.exports = [[/Module not found/]]; diff --git a/test/configCases/errors/import-missing/index.js b/test/configCases/errors/import-missing/index.js index 729804c4e4a..fa67170139e 100644 --- a/test/configCases/errors/import-missing/index.js +++ b/test/configCases/errors/import-missing/index.js @@ -1,16 +1,20 @@ +var never = false; + it("should not crash on missing requires", function() { - require.include("./a"); - require.include("./b"); - require.include("./c"); - require.include("./d"); - require.include("./e"); - require.include("./f"); - require.include("./h"); - require.include("./i"); - require.include("./j"); - require.include("./k"); - require.include("./l"); - require.include("./m"); - require.include("./n"); - require.include("./o"); + if (never) { + require("./a"); + require("./b"); + require("./c"); + require("./d"); + require("./e"); + require("./f"); + require("./h"); + require("./i"); + require("./j"); + require("./k"); + require("./l"); + require("./m"); + require("./n"); + require("./o"); + } }); diff --git a/test/configCases/errors/import-missing/webpack.config.js b/test/configCases/errors/import-missing/webpack.config.js index 51f1a5d59f8..ac887dc073d 100644 --- a/test/configCases/errors/import-missing/webpack.config.js +++ b/test/configCases/errors/import-missing/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { bail: true }; diff --git a/test/configCases/errors/multi-entry-missing-module/index.js b/test/configCases/errors/multi-entry-missing-module/index.js index e4dec7f2285..ac6a05d6c5c 100644 --- a/test/configCases/errors/multi-entry-missing-module/index.js +++ b/test/configCases/errors/multi-entry-missing-module/index.js @@ -1,10 +1,9 @@ -it("Should use WebpackMissingModule when module is missing with multiple entry setup", function() { - var fs = require("fs"); - var path = require("path"); - var source = fs.readFileSync(path.join(__dirname, "b.js"), "utf-8"); - expect(source).toMatch("!(function webpackMissingModule() { var e = new Error(\"Cannot find module './intentionally-missing-module.js'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());"); +it("should ignore missing modules as entries", function() { + // a.js and b.js should be evaluated correctly +}); +it("should use WebpackMissingModule when evaluating missing modules", function() { expect(function() { require("./intentionally-missing-module"); - }).toThrowError("Cannot find module './intentionally-missing-module'"); + }).toThrow("Cannot find module './intentionally-missing-module'"); }); diff --git a/test/configCases/errors/multi-entry-missing-module/test.config.js b/test/configCases/errors/multi-entry-missing-module/test.config.js new file mode 100644 index 00000000000..212ce63ec51 --- /dev/null +++ b/test/configCases/errors/multi-entry-missing-module/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./b.js", "./bundle0.js"]; + } +}; diff --git a/test/configCases/errors/multi-entry-missing-module/webpack.config.js b/test/configCases/errors/multi-entry-missing-module/webpack.config.js index 221fe4b45df..91e207bd55e 100644 --- a/test/configCases/errors/multi-entry-missing-module/webpack.config.js +++ b/test/configCases/errors/multi-entry-missing-module/webpack.config.js @@ -1,14 +1,20 @@ -const IgnorePlugin = require("../../../../lib/IgnorePlugin"); +"use strict"; + +const IgnorePlugin = require("../../../../").IgnorePlugin; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: { + a: "./intentionally-missing-module.js", b: ["./intentionally-missing-module.js"], bundle0: ["./index"] }, output: { filename: "[name].js" }, - plugins: [new IgnorePlugin(new RegExp(/intentionally-missing-module/))], - node: { - __dirname: false - } + plugins: [ + new IgnorePlugin({ + resourceRegExp: new RegExp(/intentionally-missing-module/) + }) + ] }; diff --git a/test/configCases/errors/self-reexport/errors.js b/test/configCases/errors/self-reexport/errors.js deleted file mode 100644 index 3d8a2be43ec..00000000000 --- a/test/configCases/errors/self-reexport/errors.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = [ - [/Circular reexports "\.\/a.js"\.something -\(circular\)-> "\.\/a.js"\.something/], - [/Circular reexports "\.\/b.js"\.other --> "\.\/b.js"\.something -\(circular\)-> "\.\/b.js"\.other/], - [/Circular reexports "\.\/c2.js"\.something --> "\.\/c1.js"\.something -\(circular\)-> "\.\/c2.js"\.something/] -]; diff --git a/test/configCases/errors/self-reexport/webpack.config.js b/test/configCases/errors/self-reexport/webpack.config.js index b913c78abb1..7389b128cd5 100644 --- a/test/configCases/errors/self-reexport/webpack.config.js +++ b/test/configCases/errors/self-reexport/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "production" }; diff --git a/test/configCases/externals/async-externals/index.js b/test/configCases/externals/async-externals/index.js new file mode 100644 index 00000000000..38edcffba58 --- /dev/null +++ b/test/configCases/externals/async-externals/index.js @@ -0,0 +1,43 @@ +import value from "promise-external"; +import value2 from "module-promise-external"; +import value3 from "object-promise-external"; +import request from "import-external"; +import request2 from "module-import-external"; +import "./module.mjs"; + +it("should allow async externals", () => { + expect(value).toBe(42); + expect(value2).toBe(42); + expect(value3).toEqual({ default: 42, named: true }); + expect(request).toBe("/hello/world.js"); + expect(request2).toBe("/hello/world.js"); +}); + +it("should allow to catch errors of async externals", () => { + return expect(() => import("failing-promise-external")).rejects.toEqual( + expect.objectContaining({ + message: "external reject" + }) + ); +}); + +it("should allow dynamic import promise externals", () => { + return import("promise-external").then(module => { + expect(module).toMatchObject({ default: 42 }); + }); +}); + +it("should allow dynamic import promise externals that are modules", () => { + return import("module-promise-external").then(module => { + expect(module).toMatchObject({ default: 42, named: true }); + }); +}); + +it("should allow dynamic import promise externals that are objects", () => { + return import("object-promise-external").then(module => { + expect(module).toMatchObject({ + default: { default: 42, named: true }, + named: true + }); + }); +}); diff --git a/test/configCases/externals/async-externals/module.mjs b/test/configCases/externals/async-externals/module.mjs new file mode 100644 index 00000000000..bd66572ccad --- /dev/null +++ b/test/configCases/externals/async-externals/module.mjs @@ -0,0 +1,41 @@ +import value from "promise-external"; +import value2 from "module-promise-external"; +import value3 from "object-promise-external"; +import request from "import-external"; + +it("should allow async externals (in strict esm)", () => { + expect(value).toBe(42); + expect(value2).toEqual({ __esModule: true, default: 42, named: true }); + expect(value3).toEqual({ default: 42, named: true }); + expect(request).toBe("/hello/world.js"); +}); + +it("should allow to catch errors of async externals (in strict esm)", () => { + return expect(() => import("failing-promise-external")).rejects.toEqual( + expect.objectContaining({ + message: "external reject" + }) + ); +}); + +it("should allow dynamic import promise externals (in strict esm)", () => { + return import("promise-external").then(module => { + expect(module).toMatchObject({ default: 42 }); + }); +}); + +it("should allow dynamic import promise externals that are modules (in strict esm)", () => { + return import("module-promise-external").then(module => { + expect(module).toMatchObject({ + default: { __esModule: true, default: 42, named: true } + }); + }); +}); + +it("should allow dynamic import promise externals that are objects (in strict esm)", () => { + return import("object-promise-external").then(module => { + expect(module).toMatchObject({ + default: { default: 42, named: true } + }); + }); +}); diff --git a/test/configCases/externals/async-externals/webpack.config.js b/test/configCases/externals/async-externals/webpack.config.js new file mode 100644 index 00000000000..03436263368 --- /dev/null +++ b/test/configCases/externals/async-externals/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +module.exports = { + target: ["web", "es2020"], + output: { + libraryTarget: "commonjs-module", + importFunctionName: "((name) => Promise.resolve({ request: name }))" + }, + externals: { + "promise-external": + "promise new Promise(resolve => setTimeout(() => resolve(42), 100))", + "module-promise-external": + "promise new Promise(resolve => setTimeout(() => resolve({ __esModule: true, default: 42, named: true }), 100))", + "object-promise-external": + "promise new Promise(resolve => setTimeout(() => resolve({ default: 42, named: true }), 100))", + "failing-promise-external": + "promise new Promise((resolve, reject) => setTimeout(() => reject(new Error('external reject')), 100))", + "import-external": ["import /hello/world.js", "request"], + "module-import-external": ["module-import /hello/world.js", "request"] + } +}; diff --git a/test/configCases/externals/concatenated-module/index.js b/test/configCases/externals/concatenated-module/index.js new file mode 100644 index 00000000000..57a7fcb129c --- /dev/null +++ b/test/configCases/externals/concatenated-module/index.js @@ -0,0 +1,15 @@ +import fs1 from "fs"; +import fs2 from "module-fs"; +import fsPromises1 from "fs-promises"; +import fsPromises2 from "module-fs-promises"; +import path1 from "path"; +import path2 from "module-path"; +import url1 from "url"; +import url2 from "module-import-url"; + +it("should be possible to import multiple module externals", () => { + expect(fs2).toBe(fs1); + expect(path2).toBe(path1); + expect(fsPromises2).toBe(fsPromises1); + expect(url1).toBe(url2); +}); diff --git a/test/configCases/externals/concatenated-module/test.filter.js b/test/configCases/externals/concatenated-module/test.filter.js new file mode 100644 index 00000000000..831073aef62 --- /dev/null +++ b/test/configCases/externals/concatenated-module/test.filter.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = () => + !process.version.startsWith("v10.") && !process.version.startsWith("v12."); diff --git a/test/configCases/externals/concatenated-module/webpack.config.js b/test/configCases/externals/concatenated-module/webpack.config.js new file mode 100644 index 00000000000..9ddd5aed398 --- /dev/null +++ b/test/configCases/externals/concatenated-module/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +/** @type {(variant: boolean) => import("../../../../").Configuration} */ +const config = (o) => ({ + externals: { + "module-fs": o ? "module fs" : "module fs/promises", + fs: o ? "node-commonjs fs" : "node-commonjs fs/promises", + "module-fs-promises": o ? ["module fs", "promises"] : "module fs/promises", + "fs-promises": o + ? ["node-commonjs fs", "promises"] + : "node-commonjs fs/promises", + "module-path": "module path", + path: "node-commonjs path", + "module-import-url": "module-import url", + url: "node-commonjs url" + }, + optimization: { + concatenateModules: true, + usedExports: true, + providedExports: true, + mangleExports: true + }, + target: "node14", + experiments: { + outputModule: true + } +}); + +module.exports = [config(false), config(true)]; diff --git a/test/configCases/externals/concatenated/index.js b/test/configCases/externals/concatenated/index.js new file mode 100644 index 00000000000..11c916233dc --- /dev/null +++ b/test/configCases/externals/concatenated/index.js @@ -0,0 +1,25 @@ +import externalValue, { named as externalValueNamed } from "externalValue"; + +it("should harmony import a external value", function () { + expect(externalValue).toBe("abc"); + expect(externalValueNamed).toBe(undefined); +}); + +import externalObject, { named as externalObjectNamed } from "externalObject"; + +it("should harmony import a external value", function () { + expect(externalObject).toMatchObject({ + named: "named", + default: "default" + }); + expect(externalObjectNamed).toBe("named"); +}); + +import externalEsModule, { + named as externalEsModuleNamed +} from "externalEsModule"; + +it("should harmony import a external value", function () { + expect(externalEsModule).toBe("default"); + expect(externalEsModuleNamed).toBe("named"); +}); diff --git a/test/configCases/externals/concatenated/webpack.config.js b/test/configCases/externals/concatenated/webpack.config.js new file mode 100644 index 00000000000..c247dd6a39b --- /dev/null +++ b/test/configCases/externals/concatenated/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + externals: { + externalValue: "var 'abc'", + externalObject: "var { default: 'default', named: 'named' }", + externalEsModule: + "var { __esModule: true, default: 'default', named: 'named' }" + }, + optimization: { + concatenateModules: true, + usedExports: true, + providedExports: true, + mangleExports: true + } +}; diff --git a/test/configCases/externals/devtool-eval-concatenate-modules/imported.js b/test/configCases/externals/devtool-eval-concatenate-modules/imported.js new file mode 100644 index 00000000000..aef22247d75 --- /dev/null +++ b/test/configCases/externals/devtool-eval-concatenate-modules/imported.js @@ -0,0 +1 @@ +export default 1; diff --git a/test/configCases/externals/devtool-eval-concatenate-modules/index.js b/test/configCases/externals/devtool-eval-concatenate-modules/index.js new file mode 100644 index 00000000000..69d26e2947c --- /dev/null +++ b/test/configCases/externals/devtool-eval-concatenate-modules/index.js @@ -0,0 +1,7 @@ +import imported from "./imported.mjs"; + +it("should allow to use externals in concatenated modules", () => { + expect(imported).toBe(1); +}); + +export { imported } \ No newline at end of file diff --git a/test/configCases/externals/devtool-eval-concatenate-modules/test.config.js b/test/configCases/externals/devtool-eval-concatenate-modules/test.config.js new file mode 100644 index 00000000000..04d5e6a4b35 --- /dev/null +++ b/test/configCases/externals/devtool-eval-concatenate-modules/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./main.mjs"; + } +}; diff --git a/test/configCases/externals/devtool-eval-concatenate-modules/webpack.config.js b/test/configCases/externals/devtool-eval-concatenate-modules/webpack.config.js new file mode 100644 index 00000000000..2b8f2064663 --- /dev/null +++ b/test/configCases/externals/devtool-eval-concatenate-modules/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + devtool: "eval", + module: { + parser: { + javascript: { + importMeta: false + } + } + }, + entry: { + main: "./index.js", + imported: { + import: "./imported.js", + library: { + type: "module" + } + } + }, + target: "node14", + output: { + filename: "[name].mjs", + module: true, + library: { + type: "module" + } + }, + externals: "./imported.mjs", + externalsType: "module", + experiments: { + outputModule: true + }, + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/externals/dynamic-reexports/index.js b/test/configCases/externals/dynamic-reexports/index.js new file mode 100644 index 00000000000..276c578b7a0 --- /dev/null +++ b/test/configCases/externals/dynamic-reexports/index.js @@ -0,0 +1,9 @@ +import * as ns from './lib' + +it('should have correect reexport', () => { + expect(ns).toHaveProperty('readFile'); + expect(ns).toHaveProperty('resolve'); + + + expect(typeof ns.sep).toBe('string'); +}) \ No newline at end of file diff --git a/test/configCases/externals/dynamic-reexports/lib.js b/test/configCases/externals/dynamic-reexports/lib.js new file mode 100644 index 00000000000..c830e9392df --- /dev/null +++ b/test/configCases/externals/dynamic-reexports/lib.js @@ -0,0 +1,5 @@ +// 2 external modules, the external module exportsType is unkown +// so the exports of current module can only be known at runtime +export * from 'path' + +export * from 'fs' \ No newline at end of file diff --git a/test/configCases/externals/dynamic-reexports/webpack.config.js b/test/configCases/externals/dynamic-reexports/webpack.config.js new file mode 100644 index 00000000000..1ef16b9ae48 --- /dev/null +++ b/test/configCases/externals/dynamic-reexports/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + target: ["node"], + output: { + environment: { + arrowFunction: true, + const: false + } + } +}; diff --git a/test/configCases/externals/export-fn-cjs/index.js b/test/configCases/externals/export-fn-cjs/index.js new file mode 100644 index 00000000000..c1726d62dd0 --- /dev/null +++ b/test/configCases/externals/export-fn-cjs/index.js @@ -0,0 +1,13 @@ +it("Should work with export a function", function(done) { + const myModule = require("module"); + expect(typeof myModule).toBe("function"); + expect(myModule.builtinModules).toBeDefined(); + done() +}); + +it("should work with export a object", function(done) { + const myFs = require("fs"); + expect(typeof myFs).toBe("object"); + expect(myFs.readFileSync).toBeDefined(); + done() +}); \ No newline at end of file diff --git a/test/configCases/externals/export-fn-cjs/webpack.config.js b/test/configCases/externals/export-fn-cjs/webpack.config.js new file mode 100644 index 00000000000..4484e6fe390 --- /dev/null +++ b/test/configCases/externals/export-fn-cjs/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + externals: { + module: "commonjs module", + fs: "commonjs fs" + } +}; diff --git a/test/configCases/externals/export-fn-esm/foo.mjs b/test/configCases/externals/export-fn-esm/foo.mjs new file mode 100644 index 00000000000..ff499a60ea7 --- /dev/null +++ b/test/configCases/externals/export-fn-esm/foo.mjs @@ -0,0 +1 @@ +export const foo = 'foo' \ No newline at end of file diff --git a/test/configCases/externals/export-fn-esm/index.js b/test/configCases/externals/export-fn-esm/index.js new file mode 100644 index 00000000000..7633ab781ee --- /dev/null +++ b/test/configCases/externals/export-fn-esm/index.js @@ -0,0 +1,17 @@ +import { foo } from "./foo.mjs" + +it("Should work with export a function when using CreateFakeNamespaceObjectRuntimeModule", async function(done) { + expect(foo).toBe("foo") + const myModule = await import("module"); + // namespace object + expect(typeof myModule).toBe("object"); + expect(myModule.builtinModules).toBeDefined(); + done() +}); + +it("Should work with export a object when using CreateFakeNamespaceObjectRuntimeModule", async function(done) { + const myFs = await import("fs"); + expect(typeof myFs).toBe("object"); + expect(myFs.readFileSync).toBeDefined(); + done() +}); \ No newline at end of file diff --git a/test/configCases/externals/export-fn-esm/webpack.config.js b/test/configCases/externals/export-fn-esm/webpack.config.js new file mode 100644 index 00000000000..4484e6fe390 --- /dev/null +++ b/test/configCases/externals/export-fn-esm/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + externals: { + module: "commonjs module", + fs: "commonjs fs" + } +}; diff --git a/test/configCases/externals/externals-array/index.js b/test/configCases/externals/externals-array/index.js new file mode 100644 index 00000000000..a7dedba652b --- /dev/null +++ b/test/configCases/externals/externals-array/index.js @@ -0,0 +1,4 @@ +it("should not fail on optional externals", function() { + const external = require("external"); + expect(external).toBe(EXPECTED); +}); diff --git a/test/configCases/externals/externals-array/webpack.config.js b/test/configCases/externals/externals-array/webpack.config.js new file mode 100644 index 00000000000..9d178995217 --- /dev/null +++ b/test/configCases/externals/externals-array/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../types").Configuration[]} */ +module.exports = [ + { + output: { + libraryTarget: "global" + }, + externals: { + external: ["process", "version"] + }, + plugins: [ + new webpack.DefinePlugin({ + EXPECTED: JSON.stringify(process.version) + }) + ] + }, + { + externals: { + external: ["Array", "isArray"] + }, + plugins: [ + new webpack.DefinePlugin({ + EXPECTED: "Array.isArray" + }) + ] + } +]; diff --git a/test/configCases/externals/externals-concatenated-logic/index.js b/test/configCases/externals/externals-concatenated-logic/index.js new file mode 100644 index 00000000000..1380c05e8b8 --- /dev/null +++ b/test/configCases/externals/externals-concatenated-logic/index.js @@ -0,0 +1,9 @@ +"use strict"; + +import { join, __WEBPACK_EXTERNAL_MODULE_path_join__ as collision } from "./nested"; +const nodePath = require("path"); + +it("should handle naming conflict and trigger ExternalsPlugin remapping", function () { + expect(join).toBe(nodePath.join); + expect(collision).toBe("collision"); +}); diff --git a/test/configCases/externals/externals-concatenated-logic/nested.js b/test/configCases/externals/externals-concatenated-logic/nested.js new file mode 100644 index 00000000000..2866ab881cb --- /dev/null +++ b/test/configCases/externals/externals-concatenated-logic/nested.js @@ -0,0 +1,5 @@ +"use strict"; + +import { join } from "path"; +export { join }; +export const __WEBPACK_EXTERNAL_MODULE_path_join__ = "collision"; diff --git a/test/configCases/externals/externals-concatenated-logic/test.filter.js b/test/configCases/externals/externals-concatenated-logic/test.filter.js new file mode 100644 index 00000000000..385e60a48d5 --- /dev/null +++ b/test/configCases/externals/externals-concatenated-logic/test.filter.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = () => { + const majorVersion = Number.parseInt(process.versions.node.split(".")[0], 10); + return majorVersion >= 14; +}; diff --git a/test/configCases/externals/externals-concatenated-logic/webpack.config.js b/test/configCases/externals/externals-concatenated-logic/webpack.config.js new file mode 100644 index 00000000000..8d617274285 --- /dev/null +++ b/test/configCases/externals/externals-concatenated-logic/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + target: "node", + optimization: { + minimize: false, + concatenateModules: true + }, + externals: { + path: "module path" + }, + externalsType: "module", + experiments: { + outputModule: true + }, + output: { + module: true, + library: { + type: "module" + } + } +}; diff --git a/test/configCases/externals/externals-in-chunk/webpack.config.js b/test/configCases/externals/externals-in-chunk/webpack.config.js index ee8d99ce3b5..85828e3132b 100644 --- a/test/configCases/externals/externals-in-chunk/webpack.config.js +++ b/test/configCases/externals/externals-in-chunk/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { externals: { external: "1+2", diff --git a/test/configCases/externals/externals-in-commons-chunk/test.config.js b/test/configCases/externals/externals-in-commons-chunk/test.config.js index 51faf2424ad..10f6e39f723 100644 --- a/test/configCases/externals/externals-in-commons-chunk/test.config.js +++ b/test/configCases/externals/externals-in-commons-chunk/test.config.js @@ -1,8 +1,7 @@ +"use strict"; + module.exports = { - findBundle: function(i, options) { - return [ - "./common.js", - "./main.js" - ] + findBundle() { + return ["./common.js", "./main.js"]; } }; diff --git a/test/configCases/externals/externals-in-commons-chunk/webpack.config.js b/test/configCases/externals/externals-in-commons-chunk/webpack.config.js index 6cb5b9d6a6b..0690856e069 100644 --- a/test/configCases/externals/externals-in-commons-chunk/webpack.config.js +++ b/test/configCases/externals/externals-in-commons-chunk/webpack.config.js @@ -1,10 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: { main: "./index", other: "./other" }, externals: { - fs: "commonjs fs", + fs: "node-commonjs fs", external: "1+2", external2: "3+4", external3: "5+6" diff --git a/test/configCases/externals/externals-system-custom/index.js b/test/configCases/externals/externals-system-custom/index.js new file mode 100644 index 00000000000..f9d4aa09a1c --- /dev/null +++ b/test/configCases/externals/externals-system-custom/index.js @@ -0,0 +1,7 @@ +// This test verifies that the System.register context is made available to webpack bundles + +it("should correctly handle externals of different type", function() { + expect(require("rootExt")).toEqual("works"); + expect(require("varExt")).toEqual("works"); + expect(require("windowExt")).toEqual("works"); +}); diff --git a/test/configCases/externals/externals-system-custom/test.config.js b/test/configCases/externals/externals-system-custom/test.config.js new file mode 100644 index 00000000000..e63e63adecf --- /dev/null +++ b/test/configCases/externals/externals-system-custom/test.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + target: "web", + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + scope.window.windowExt = "works"; + scope.rootExt = "works"; + scope.varExt = "works"; + scope.System = System; + }, + afterExecute: () => { + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/externals/externals-system-custom/webpack.config.js b/test/configCases/externals/externals-system-custom/webpack.config.js new file mode 100644 index 00000000000..c8a1aca055f --- /dev/null +++ b/test/configCases/externals/externals-system-custom/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + output: { + libraryTarget: "system" + }, + target: "web", + node: { + __dirname: false, + __filename: false + }, + externals: { + rootExt: "root rootExt", + varExt: "var varExt", + windowExt: "window windowExt" + } +}; diff --git a/test/configCases/externals/externals-system/index.js b/test/configCases/externals/externals-system/index.js new file mode 100644 index 00000000000..cddcb2700e8 --- /dev/null +++ b/test/configCases/externals/externals-system/index.js @@ -0,0 +1,21 @@ +import external3Default, { namedThing } from "external3"; +import "external4"; + +/* This test verifies that webpack externals are properly indicated as dependencies to System. + * Also that when System provides the external variables to webpack that the variables get plumbed + * through correctly and are usable by the webpack bundle. + */ +it("should get an external from System", function () { + const external1 = require("external1"); + expect(external1.default).toBe("the external1 value"); + + const external2 = require("external2"); + expect(external2.default).toBe("the external2 value"); + + expect(external3Default).toBe("the external3 default export"); + expect(namedThing).toBe("the external3 named export"); + + const external5 = require("./reexport-external.js"); + expect(external5.default).toBe("the external5 default export"); + expect(external5.namedThing).toBe("the external5 named export"); +}); diff --git a/test/configCases/externals/externals-system/reexport-external.js b/test/configCases/externals/externals-system/reexport-external.js new file mode 100644 index 00000000000..07c36966c58 --- /dev/null +++ b/test/configCases/externals/externals-system/reexport-external.js @@ -0,0 +1,2 @@ +export * from "external5"; +export { default } from "external5"; diff --git a/test/configCases/externals/externals-system/test.config.js b/test/configCases/externals/externals-system/test.config.js new file mode 100644 index 00000000000..39826c30785 --- /dev/null +++ b/test/configCases/externals/externals-system/test.config.js @@ -0,0 +1,34 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init({ + external1: { + default: "the external1 value" + }, + external2: { + default: "the external2 value" + }, + external3: { + default: "the external3 default export", + namedThing: "the external3 named export" + }, + external4: { + default: "the external4 default export", + namedThing: "the external4 named export" + }, + external5: { + default: "the external5 default export", + namedThing: "the external5 named export" + } + }); + }, + moduleScope(scope) { + scope.System = System; + }, + afterExecute: () => { + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/externals/externals-system/webpack.config.js b/test/configCases/externals/externals-system/webpack.config.js new file mode 100644 index 00000000000..0744e8a80ce --- /dev/null +++ b/test/configCases/externals/externals-system/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + libraryTarget: "system" + }, + externals: { + external1: "external1", + external2: "external2", + external3: "external3", + external4: "external4", + external5: "external5" + } +}; diff --git a/test/configCases/externals/global/index.js b/test/configCases/externals/global/index.js new file mode 100644 index 00000000000..b8a5d8b0009 --- /dev/null +++ b/test/configCases/externals/global/index.js @@ -0,0 +1,11 @@ +afterEach(done => { + delete global.EXTERNAL_TEST_GLOBAL; + done(); +}); + +it("should move externals in chunks into entry chunk", function() { + global.EXTERNAL_TEST_GLOBAL = 42; + // eslint-disable-next-line n/no-missing-require + const result = require("external"); + expect(result).toBe(42); +}); diff --git a/test/configCases/externals/global/webpack.config.js b/test/configCases/externals/global/webpack.config.js new file mode 100644 index 00000000000..d44abc7189c --- /dev/null +++ b/test/configCases/externals/global/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + externals: { + external: "global EXTERNAL_TEST_GLOBAL" + } +}; diff --git a/test/configCases/externals/harmony/webpack.config.js b/test/configCases/externals/harmony/webpack.config.js index 77dccfd43c8..6333facfd65 100644 --- a/test/configCases/externals/harmony/webpack.config.js +++ b/test/configCases/externals/harmony/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { externals: { external: "var 'abc'" diff --git a/test/configCases/externals/import-assertion/dynamic-package-str.json b/test/configCases/externals/import-assertion/dynamic-package-str.json new file mode 100644 index 00000000000..96c392e16d3 --- /dev/null +++ b/test/configCases/externals/import-assertion/dynamic-package-str.json @@ -0,0 +1,3 @@ +{ + "foo": "dynamic-str" +} diff --git a/test/configCases/externals/import-assertion/dynamic-package.json b/test/configCases/externals/import-assertion/dynamic-package.json new file mode 100644 index 00000000000..9c17f1e2263 --- /dev/null +++ b/test/configCases/externals/import-assertion/dynamic-package.json @@ -0,0 +1,3 @@ +{ + "foo": "dynamic" +} diff --git a/test/configCases/externals/import-assertion/eager.json b/test/configCases/externals/import-assertion/eager.json new file mode 100644 index 00000000000..c5c5865c41c --- /dev/null +++ b/test/configCases/externals/import-assertion/eager.json @@ -0,0 +1,3 @@ +{ + "foo": "eager" +} diff --git a/test/configCases/externals/import-assertion/index.js b/test/configCases/externals/import-assertion/index.js new file mode 100644 index 00000000000..623fb7a96f2 --- /dev/null +++ b/test/configCases/externals/import-assertion/index.js @@ -0,0 +1,55 @@ +import * as staticPkg from "./static-package.json" assert { type: "json" }; +import * as staticPkgStr from "./static-package-str.json" assert { "type": "json" }; +import * as staticPkgModuleImport from "./static-package-module-import.json" assert { type: "json" }; + +it("should allow async externals", async () => { + expect(staticPkg.default.foo).toBe("static"); + expect(staticPkgStr.default.foo).toBe("static-str"); + expect(staticPkgModuleImport.default.foo).toBe("static"); + + const dynamicPkg = await import("./dynamic-package.json", { + assert: { type: "json" } + }) + + expect(dynamicPkg.default.foo).toBe("dynamic"); + + const dynamicPkgStr = await import("./dynamic-package-str.json", { + "assert": { "type": "json" } + }) + + expect(dynamicPkgStr.default.foo).toBe("dynamic-str"); + + const eagerPkg = await import(/* webpackMode: "eager" */ "./eager.json", { + assert: { type: "json" } + }); + + expect(eagerPkg.default.foo).toBe("eager"); + + await import("./weak.json", { + assert: { type: "json" } + }); + const weakPkg = await import(/* webpackMode: "weak" */ "./weak.json", { + assert: { type: "json" } + }); + + expect(weakPkg.default.foo).toBe("weak"); + + const pkg = "pkg.json"; + const nested = await import(`./nested/${pkg}`, { + assert: { type: "json" } + }); + + expect(nested.default.foo).toBe("context-dependency"); + + const reExportPkg = await import("./re-export.js"); + + expect(reExportPkg.foo).toBe("re-export"); + + const dynamicPkgModuleImport = await import("./dynamic-package-module-import.json", { + assert: { type: "json" } + }) + + expect(dynamicPkgModuleImport.default.foo).toBe("dynamic"); +}); + +export * from "./re-export-directly.json" assert { type: "json" } diff --git a/test/configCases/externals/import-assertion/nested/pkg.json b/test/configCases/externals/import-assertion/nested/pkg.json new file mode 100644 index 00000000000..592f678a321 --- /dev/null +++ b/test/configCases/externals/import-assertion/nested/pkg.json @@ -0,0 +1,3 @@ +{ + "foo": "context-dependency" +} diff --git a/test/configCases/externals/import-assertion/re-export-directly.json b/test/configCases/externals/import-assertion/re-export-directly.json new file mode 100644 index 00000000000..726743c2781 --- /dev/null +++ b/test/configCases/externals/import-assertion/re-export-directly.json @@ -0,0 +1,3 @@ +{ + "foo": "re-export" +} diff --git a/test/configCases/externals/import-assertion/re-export.js b/test/configCases/externals/import-assertion/re-export.js new file mode 100644 index 00000000000..1983630d4d4 --- /dev/null +++ b/test/configCases/externals/import-assertion/re-export.js @@ -0,0 +1 @@ +export * from "./re-export.json" assert { type: "json" }; diff --git a/test/configCases/externals/import-assertion/re-export.json b/test/configCases/externals/import-assertion/re-export.json new file mode 100644 index 00000000000..726743c2781 --- /dev/null +++ b/test/configCases/externals/import-assertion/re-export.json @@ -0,0 +1,3 @@ +{ + "foo": "re-export" +} diff --git a/test/configCases/externals/import-assertion/static-package-str.json b/test/configCases/externals/import-assertion/static-package-str.json new file mode 100644 index 00000000000..2fdfedc73c1 --- /dev/null +++ b/test/configCases/externals/import-assertion/static-package-str.json @@ -0,0 +1,3 @@ +{ + "foo": "static-str" +} diff --git a/test/configCases/externals/import-assertion/static-package.json b/test/configCases/externals/import-assertion/static-package.json new file mode 100644 index 00000000000..5a8609f8f77 --- /dev/null +++ b/test/configCases/externals/import-assertion/static-package.json @@ -0,0 +1,3 @@ +{ + "foo": "static" +} diff --git a/test/configCases/externals/import-assertion/test.filter.js b/test/configCases/externals/import-assertion/test.filter.js new file mode 100644 index 00000000000..85a1532d5bb --- /dev/null +++ b/test/configCases/externals/import-assertion/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = () => /^v(?:1[6-9]|21)/.test(process.version); diff --git a/test/configCases/externals/import-assertion/weak.json b/test/configCases/externals/import-assertion/weak.json new file mode 100644 index 00000000000..a2bf7635487 --- /dev/null +++ b/test/configCases/externals/import-assertion/weak.json @@ -0,0 +1,3 @@ +{ + "foo": "weak" +} diff --git a/test/configCases/externals/import-assertion/webpack.config.js b/test/configCases/externals/import-assertion/webpack.config.js new file mode 100644 index 00000000000..0da4f83595f --- /dev/null +++ b/test/configCases/externals/import-assertion/webpack.config.js @@ -0,0 +1,71 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { + Compilation, + sources: { RawSource } +} = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("html-plugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-plugin", + stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + for (const filename of [ + "static-package.json", + "static-package-str.json", + "dynamic-package.json", + "dynamic-package-str.json", + "eager.json", + "weak.json", + "./nested/pkg.json", + "re-export.json", + "re-export-directly.json" + ]) { + const resolvedFilename = path.resolve(__dirname, filename); + const content = fs.readFileSync(resolvedFilename); + compilation.emitAsset( + filename.replace(/\.\/nested\//, ""), + new RawSource(content) + ); + } + } + ); + }); + } + } + ], + externals: { + "./static-package.json": "module ./static-package.json", + "./static-package-str.json": "module ./static-package-str.json", + "./dynamic-package.json": "import ./dynamic-package.json", + "./dynamic-package-str.json": "import ./dynamic-package-str.json", + "./eager.json": "import ./eager.json", + "./weak.json": "import ./weak.json", + "./pkg.json": "import ./pkg.json", + "./pkg": "import ./pkg.json", + "./re-export.json": "module ./re-export.json", + "./re-export-directly.json": "module ./re-export-directly.json", + "./static-package-module-import.json": + "module-import ./static-package.json", + "./dynamic-package-module-import.json": + "module-import ./dynamic-package.json" + } +}; diff --git a/test/configCases/externals/import-attributes/dynamic-package-str.json b/test/configCases/externals/import-attributes/dynamic-package-str.json new file mode 100644 index 00000000000..96c392e16d3 --- /dev/null +++ b/test/configCases/externals/import-attributes/dynamic-package-str.json @@ -0,0 +1,3 @@ +{ + "foo": "dynamic-str" +} diff --git a/test/configCases/externals/import-attributes/dynamic-package.json b/test/configCases/externals/import-attributes/dynamic-package.json new file mode 100644 index 00000000000..9c17f1e2263 --- /dev/null +++ b/test/configCases/externals/import-attributes/dynamic-package.json @@ -0,0 +1,3 @@ +{ + "foo": "dynamic" +} diff --git a/test/configCases/externals/import-attributes/eager.json b/test/configCases/externals/import-attributes/eager.json new file mode 100644 index 00000000000..c5c5865c41c --- /dev/null +++ b/test/configCases/externals/import-attributes/eager.json @@ -0,0 +1,3 @@ +{ + "foo": "eager" +} diff --git a/test/configCases/externals/import-attributes/index.js b/test/configCases/externals/import-attributes/index.js new file mode 100644 index 00000000000..6b83a8b2a52 --- /dev/null +++ b/test/configCases/externals/import-attributes/index.js @@ -0,0 +1,55 @@ +import * as staticPkg from "./static-package.json" with { type: "json" }; +import * as staticPkgStr from "./static-package-str.json" with { "type": "json" }; +import * as staticPkgModuleImport from "./static-package-module-import.json" with { "type": "json" }; + +it("should allow async externals", async () => { + expect(staticPkg.default.foo).toBe("static"); + expect(staticPkgStr.default.foo).toBe("static-str"); + expect(staticPkgModuleImport.default.foo).toBe("static"); + + const dynamicPkg = await import("./dynamic-package.json", { + with: { type: "json" } + }) + + expect(dynamicPkg.default.foo).toBe("dynamic"); + + const dynamicPkgStr = await import("./dynamic-package-str.json", { + "with": { "type": "json" } + }) + + expect(dynamicPkgStr.default.foo).toBe("dynamic-str"); + + const eagerPkg = await import(/* webpackMode: "eager" */ "./eager.json", { + with: { type: "json" } + }); + + expect(eagerPkg.default.foo).toBe("eager"); + + await import("./weak.json", { + with: { type: "json" } + }); + const weakPkg = await import(/* webpackMode: "weak" */ "./weak.json", { + with: { type: "json" } + }); + + expect(weakPkg.default.foo).toBe("weak"); + + const pkg = "pkg.json"; + const nested = await import(`./nested/${pkg}`, { + with: { type: "json" } + }); + + expect(nested.default.foo).toBe("context-dependency"); + + const reExportPkg = await import("./re-export.js"); + + expect(reExportPkg.foo).toBe("re-export"); + + const dynamicPkgModuleImport = await import("./dynamic-package-module-import.json", { + with: { type: "json" } + }) + + expect(dynamicPkgModuleImport.default.foo).toBe("dynamic"); +}); + +export * from "./re-export-directly.json" with { type: "json" } diff --git a/test/configCases/externals/import-attributes/nested/pkg.json b/test/configCases/externals/import-attributes/nested/pkg.json new file mode 100644 index 00000000000..592f678a321 --- /dev/null +++ b/test/configCases/externals/import-attributes/nested/pkg.json @@ -0,0 +1,3 @@ +{ + "foo": "context-dependency" +} diff --git a/test/configCases/externals/import-attributes/re-export-directly.json b/test/configCases/externals/import-attributes/re-export-directly.json new file mode 100644 index 00000000000..726743c2781 --- /dev/null +++ b/test/configCases/externals/import-attributes/re-export-directly.json @@ -0,0 +1,3 @@ +{ + "foo": "re-export" +} diff --git a/test/configCases/externals/import-attributes/re-export.js b/test/configCases/externals/import-attributes/re-export.js new file mode 100644 index 00000000000..4d59479a185 --- /dev/null +++ b/test/configCases/externals/import-attributes/re-export.js @@ -0,0 +1 @@ +export * from "./re-export.json" with { type: "json" }; diff --git a/test/configCases/externals/import-attributes/re-export.json b/test/configCases/externals/import-attributes/re-export.json new file mode 100644 index 00000000000..726743c2781 --- /dev/null +++ b/test/configCases/externals/import-attributes/re-export.json @@ -0,0 +1,3 @@ +{ + "foo": "re-export" +} diff --git a/test/configCases/externals/import-attributes/static-package-str.json b/test/configCases/externals/import-attributes/static-package-str.json new file mode 100644 index 00000000000..2fdfedc73c1 --- /dev/null +++ b/test/configCases/externals/import-attributes/static-package-str.json @@ -0,0 +1,3 @@ +{ + "foo": "static-str" +} diff --git a/test/configCases/externals/import-attributes/static-package.json b/test/configCases/externals/import-attributes/static-package.json new file mode 100644 index 00000000000..5a8609f8f77 --- /dev/null +++ b/test/configCases/externals/import-attributes/static-package.json @@ -0,0 +1,3 @@ +{ + "foo": "static" +} diff --git a/test/configCases/externals/import-attributes/test.filter.js b/test/configCases/externals/import-attributes/test.filter.js new file mode 100644 index 00000000000..172b8855c8d --- /dev/null +++ b/test/configCases/externals/import-attributes/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = () => /^v2[2-9]/.test(process.version); diff --git a/test/configCases/externals/import-attributes/weak.json b/test/configCases/externals/import-attributes/weak.json new file mode 100644 index 00000000000..a2bf7635487 --- /dev/null +++ b/test/configCases/externals/import-attributes/weak.json @@ -0,0 +1,3 @@ +{ + "foo": "weak" +} diff --git a/test/configCases/externals/import-attributes/webpack.config.js b/test/configCases/externals/import-attributes/webpack.config.js new file mode 100644 index 00000000000..0da4f83595f --- /dev/null +++ b/test/configCases/externals/import-attributes/webpack.config.js @@ -0,0 +1,71 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { + Compilation, + sources: { RawSource } +} = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("html-plugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-plugin", + stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + for (const filename of [ + "static-package.json", + "static-package-str.json", + "dynamic-package.json", + "dynamic-package-str.json", + "eager.json", + "weak.json", + "./nested/pkg.json", + "re-export.json", + "re-export-directly.json" + ]) { + const resolvedFilename = path.resolve(__dirname, filename); + const content = fs.readFileSync(resolvedFilename); + compilation.emitAsset( + filename.replace(/\.\/nested\//, ""), + new RawSource(content) + ); + } + } + ); + }); + } + } + ], + externals: { + "./static-package.json": "module ./static-package.json", + "./static-package-str.json": "module ./static-package-str.json", + "./dynamic-package.json": "import ./dynamic-package.json", + "./dynamic-package-str.json": "import ./dynamic-package-str.json", + "./eager.json": "import ./eager.json", + "./weak.json": "import ./weak.json", + "./pkg.json": "import ./pkg.json", + "./pkg": "import ./pkg.json", + "./re-export.json": "module ./re-export.json", + "./re-export-directly.json": "module ./re-export-directly.json", + "./static-package-module-import.json": + "module-import ./static-package.json", + "./dynamic-package-module-import.json": + "module-import ./dynamic-package.json" + } +}; diff --git a/test/configCases/externals/module-externals-in-async-chunk/chunk.js b/test/configCases/externals/module-externals-in-async-chunk/chunk.js new file mode 100644 index 00000000000..84963bcbb0a --- /dev/null +++ b/test/configCases/externals/module-externals-in-async-chunk/chunk.js @@ -0,0 +1,5 @@ +import external from "external"; +import external2 from "external2"; + +export const readFile = external.readFile; +export const readFileSync = external2.readFileSync; diff --git a/test/configCases/externals/module-externals-in-async-chunk/index.js b/test/configCases/externals/module-externals-in-async-chunk/index.js new file mode 100644 index 00000000000..285f56d9b92 --- /dev/null +++ b/test/configCases/externals/module-externals-in-async-chunk/index.js @@ -0,0 +1,20 @@ +it("Should place externals into its own chunks when externalsType is module", function (done) { + var fs = require("fs"); + + expect(__webpack_modules__["external"]).toBeUndefined(); + expect(__webpack_modules__["external2"]).toBeUndefined(); + expect(__webpack_modules__["external3"]).toBeDefined(); + + import(/* webpackChunkName: 'async' */ "./chunk").then((ns) => { + expect(__webpack_modules__["external"]).toBeDefined(); + expect(__webpack_modules__["external2"]).toBeDefined(); + expect(ns.readFileSync).toBe(fs.readFileSync); + expect(ns.readFile).toBe(fs.readFile); + + import("external3").then((ns) => { + expect(ns.writeFile).toBe(fs.writeFile); + + done(); + }); + }); +}); diff --git a/test/configCases/externals/module-externals-in-async-chunk/test.filter.js b/test/configCases/externals/module-externals-in-async-chunk/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/externals/module-externals-in-async-chunk/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/externals/module-externals-in-async-chunk/webpack.config.js b/test/configCases/externals/module-externals-in-async-chunk/webpack.config.js new file mode 100644 index 00000000000..dd8940ed0ef --- /dev/null +++ b/test/configCases/externals/module-externals-in-async-chunk/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + externals: { + external: "fs", + external2: "node:fs", + external3: "fs" + }, + externalsType: "module-import", + experiments: { + outputModule: true + }, + output: { chunkFilename: "[name].mjs" }, + optimization: { + moduleIds: "named", + concatenateModules: false + } +}; diff --git a/test/configCases/externals/module-import/a.js b/test/configCases/externals/module-import/a.js new file mode 100644 index 00000000000..1440a3c5c9b --- /dev/null +++ b/test/configCases/externals/module-import/a.js @@ -0,0 +1,14 @@ +import external0 from "external0"; // module +const external1 = require("external1"); // module +const external2 = require("external2"); // node-commonjs +import external3_1 from "external3"; // module +const external3_2 = import("external3"); // import + +// Trigger concatenation +import { internalHelper, internalConstant } from "./lib-to-concat"; + +console.log(external0, external1, external3_1, external3_2); +console.log(internalHelper(), internalConstant); + +// ESM export ensures module concatenation +export { external0, internalHelper }; diff --git a/test/configCases/externals/module-import/index.js b/test/configCases/externals/module-import/index.js new file mode 100644 index 00000000000..231776c6c46 --- /dev/null +++ b/test/configCases/externals/module-import/index.js @@ -0,0 +1,12 @@ +const fs = require("fs"); +const path = require("path"); + +it("module-import should correctly get fallback type", function() { + const content = fs.readFileSync(path.resolve(__dirname, "a.js"), "utf-8"); + expect(content).toContain(`import { default as __WEBPACK_EXTERNAL_MODULE_external0_default__ } from "external0";`); // module + expect(content).toContain(`const __WEBPACK_EXTERNAL_createRequire_require = __WEBPACK_EXTERNAL_createRequire(import.meta.url);`); // module + expect(content).toContain(`import * as __WEBPACK_EXTERNAL_MODULE_external1__ from "external1"`); // module + expect(content).toContain(`module.exports = __WEBPACK_EXTERNAL_createRequire_require("external2")`); // node-commonjs + expect(content).toContain(`import * as __WEBPACK_EXTERNAL_MODULE_external3__ from "external3"`); // module + expect(content).toContain(`const external3_2 = Promise.resolve(/*! import() */).then`); // import +}); diff --git a/test/configCases/externals/module-import/lib-to-concat.js b/test/configCases/externals/module-import/lib-to-concat.js new file mode 100644 index 00000000000..ab5a2e2fcdf --- /dev/null +++ b/test/configCases/externals/module-import/lib-to-concat.js @@ -0,0 +1,6 @@ +// Trigger concatenation with a.js +export function internalHelper() { + return "internal"; +} + +export const internalConstant = 100; \ No newline at end of file diff --git a/test/configCases/externals/module-import/test.config.js b/test/configCases/externals/module-import/test.config.js new file mode 100644 index 00000000000..8fd6a346cd4 --- /dev/null +++ b/test/configCases/externals/module-import/test.config.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + findBundle: () => ["main.js"] +}; diff --git a/test/configCases/externals/module-import/webpack.config.js b/test/configCases/externals/module-import/webpack.config.js new file mode 100644 index 00000000000..941efedc194 --- /dev/null +++ b/test/configCases/externals/module-import/webpack.config.js @@ -0,0 +1,41 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: ["web", "es2020"], + node: { + __dirname: false, + __filename: false + }, + output: { + module: true, + filename: "[name].js" + }, + entry: { + a: "./a", + main: "./index" + }, + optimization: { + concatenateModules: true, + usedExports: true + }, + experiments: { + outputModule: true + }, + externalsType: "module-import", + externals: [ + function externals({ request }, callback) { + if (request === "external2") { + return callback(null, "node-commonjs external2"); + } + callback(); + }, + { + external0: "external0", + external1: "external1", + external3: "external3", + fs: "commonjs fs", + path: "commonjs path" + } + ] +}; diff --git a/test/configCases/externals/node-require/index.js b/test/configCases/externals/node-require/index.js new file mode 100644 index 00000000000..e14c4ce0578 --- /dev/null +++ b/test/configCases/externals/node-require/index.js @@ -0,0 +1,22 @@ +function getMajorVersion(versionStr) { + const match = versionStr.match(/^v?(\d+)\./); + if (match) { + return parseInt(match[1], 10); + } + return null; +} + +it("should not fail on optional externals", function() { + if (getMajorVersion(NODE_VERSION) <= 12) { + const external = require("external"); + // The behavior of jest mock's require is different from that of node require, so it works fine here. + expect(external).toBe(EXPECTED); + } else { + try { + require("external"); + } catch (e) { + // Since there is no webpack in node_modules, node require will report an error here. + expect(e.message).toContain("Cannot find module 'webpack'"); + } + } +}); diff --git a/test/configCases/externals/node-require/webpack.config.js b/test/configCases/externals/node-require/webpack.config.js new file mode 100644 index 00000000000..5559bacdcfd --- /dev/null +++ b/test/configCases/externals/node-require/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + output: { + libraryTarget: "commonjs2" + }, + externals: { + external: ["webpack", "version"] + }, + plugins: [ + new webpack.DefinePlugin({ + NODE_VERSION: JSON.stringify(process.version), + EXPECTED: JSON.stringify(webpack.version) + }) + ] +}; diff --git a/test/configCases/externals/non-amd-externals-amd/index.js b/test/configCases/externals/non-amd-externals-amd/index.js new file mode 100644 index 00000000000..dda9ae39696 --- /dev/null +++ b/test/configCases/externals/non-amd-externals-amd/index.js @@ -0,0 +1,33 @@ +var fs = require("fs"); +var path = require("path"); + +var dependencyArrayRegex = /define\((\[[^\]]*\]), (function)?\(/; +var source = fs.readFileSync(path.join(__dirname, "bundle0.js"), "utf-8"); +var [, deps] = dependencyArrayRegex.exec(source); + +it("should correctly import a AMD external", function() { + var external = require("external0"); + expect(external).toBe("module 0"); +}); + +it("should contain the AMD external in the dependency array", function() { + expect(deps).toContain("\"external0\""); +}); + +it("should correctly import a non-AMD external", function() { + var external = require("external1"); + expect(external).toBe("abc"); +}); + +it("should not contain the non-AMD external in the dependency array", function() { + expect(deps).not.toContain("\"external1\""); +}); + +it("should correctly import a asset external", function() { + var asset = new URL("#hash", import.meta.url); + expect(asset.href).toBe(__webpack_base_uri__ + "#hash"); +}); + +it("should not contain asset external in the dependency array", function() { + expect(deps).not.toContain("\"#hash\""); +}); diff --git a/test/configCases/externals/non-amd-externals-amd/test.config.js b/test/configCases/externals/non-amd-externals-amd/test.config.js new file mode 100644 index 00000000000..25b040f0d9e --- /dev/null +++ b/test/configCases/externals/non-amd-externals-amd/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + modules: { + external0: "module 0" + } +}; diff --git a/test/configCases/externals/non-amd-externals-amd/webpack.config.js b/test/configCases/externals/non-amd-externals-amd/webpack.config.js new file mode 100644 index 00000000000..ed60900c24b --- /dev/null +++ b/test/configCases/externals/non-amd-externals-amd/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + libraryTarget: "amd" + }, + externals: { + external0: "external0", + external1: "var 'abc'" + }, + node: { + __dirname: false, + __filename: false + }, + target: "web", + externalsPresets: { + node: true + }, + plugins: [ + new webpack.BannerPlugin({ + raw: true, + banner: + "function define(deps, fn) { fn(...deps.map(dep => require(dep))); }\n" + }) + ] +}; diff --git a/test/configCases/externals/non-umd-externals-umd/test.config.js b/test/configCases/externals/non-umd-externals-umd/test.config.js index 680a119a5a8..25b040f0d9e 100644 --- a/test/configCases/externals/non-umd-externals-umd/test.config.js +++ b/test/configCases/externals/non-umd-externals-umd/test.config.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = { modules: { external0: "module 0" diff --git a/test/configCases/externals/non-umd-externals-umd/webpack.config.js b/test/configCases/externals/non-umd-externals-umd/webpack.config.js index acbfaa925e2..8a6266b37f5 100644 --- a/test/configCases/externals/non-umd-externals-umd/webpack.config.js +++ b/test/configCases/externals/non-umd-externals-umd/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd" diff --git a/test/configCases/externals/non-umd-externals-umd2/test.config.js b/test/configCases/externals/non-umd-externals-umd2/test.config.js index 680a119a5a8..25b040f0d9e 100644 --- a/test/configCases/externals/non-umd-externals-umd2/test.config.js +++ b/test/configCases/externals/non-umd-externals-umd2/test.config.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = { modules: { external0: "module 0" diff --git a/test/configCases/externals/non-umd-externals-umd2/webpack.config.js b/test/configCases/externals/non-umd-externals-umd2/webpack.config.js index edca25ee983..736d61e6d63 100644 --- a/test/configCases/externals/non-umd-externals-umd2/webpack.config.js +++ b/test/configCases/externals/non-umd-externals-umd2/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd2" diff --git a/test/configCases/externals/optional-externals-cjs/webpack.config.js b/test/configCases/externals/optional-externals-cjs/webpack.config.js index 6cffaf1c609..a508493e9fb 100644 --- a/test/configCases/externals/optional-externals-cjs/webpack.config.js +++ b/test/configCases/externals/optional-externals-cjs/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "commonjs2" diff --git a/test/configCases/externals/optional-externals-root/webpack.config.js b/test/configCases/externals/optional-externals-root/webpack.config.js index 51175908da2..50962ea6d0d 100644 --- a/test/configCases/externals/optional-externals-root/webpack.config.js +++ b/test/configCases/externals/optional-externals-root/webpack.config.js @@ -1,7 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { - output: { - libraryTarget: "var" - }, + externalsType: "var", externals: { external: "external" } diff --git a/test/configCases/externals/optional-externals-umd/webpack.config.js b/test/configCases/externals/optional-externals-umd/webpack.config.js index fe8423e0593..f7debc17dbe 100644 --- a/test/configCases/externals/optional-externals-umd/webpack.config.js +++ b/test/configCases/externals/optional-externals-umd/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd" diff --git a/test/configCases/externals/optional-externals-umd2-mixed/webpack.config.js b/test/configCases/externals/optional-externals-umd2-mixed/webpack.config.js index 1c34a176bcd..6e640555b00 100644 --- a/test/configCases/externals/optional-externals-umd2-mixed/webpack.config.js +++ b/test/configCases/externals/optional-externals-umd2-mixed/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd2" diff --git a/test/configCases/externals/optional-externals-umd2/webpack.config.js b/test/configCases/externals/optional-externals-umd2/webpack.config.js index a89a36f3c60..823a9992370 100644 --- a/test/configCases/externals/optional-externals-umd2/webpack.config.js +++ b/test/configCases/externals/optional-externals-umd2/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd2" diff --git a/test/configCases/externals/prefer-provided-over-built-in/index.js b/test/configCases/externals/prefer-provided-over-built-in/index.js new file mode 100644 index 00000000000..79c9742c384 --- /dev/null +++ b/test/configCases/externals/prefer-provided-over-built-in/index.js @@ -0,0 +1,5 @@ +import http from "http"; + +it("prefer provided over built-in", () => { + expect(http).toBe(3); +}); diff --git a/test/configCases/externals/prefer-provided-over-built-in/webpack.config.js b/test/configCases/externals/prefer-provided-over-built-in/webpack.config.js new file mode 100644 index 00000000000..40d38782c25 --- /dev/null +++ b/test/configCases/externals/prefer-provided-over-built-in/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + target: "node", + externals: { + http: "1+2" + } +}; diff --git a/test/configCases/externals/resolve-callback/index.js b/test/configCases/externals/resolve-callback/index.js new file mode 100644 index 00000000000..94596ebbd36 --- /dev/null +++ b/test/configCases/externals/resolve-callback/index.js @@ -0,0 +1,7 @@ +it("should allow functions as externals with promise and resolver", function () { + const result = require("external"); + expect(result).toMatch(/^[a-z]:\\|\//i); + expect(result).toMatch(/resolve-callback.node_modules.external\.js$/); + const result1 = require("external-false"); + expect(JSON.stringify(result1)).toBe('{}'); +}); diff --git a/test/configCases/externals/resolve-callback/node_modules/external-false.js b/test/configCases/externals/resolve-callback/node_modules/external-false.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/externals/resolve-callback/node_modules/external.js b/test/configCases/externals/resolve-callback/node_modules/external.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/externals/resolve-callback/webpack.config.js b/test/configCases/externals/resolve-callback/webpack.config.js new file mode 100644 index 00000000000..697ce23511f --- /dev/null +++ b/test/configCases/externals/resolve-callback/webpack.config.js @@ -0,0 +1,46 @@ +"use strict"; + +/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */ +/** @typedef {import("../../../../").ExternalItemFunctionData} ExternalItemFunctionData */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + }, + externals: [ + ({ context: _context, request, getResolve }, callback) => { + if (request !== "external" && request !== "external-false") { + return callback(null, false); + } + + const context = /** @type {string} */ (_context); + + const resolve = + /** @type {ReturnType>} */ ( + /** @type {NonNullable} */ + (getResolve)({ + alias: { + "external-false": false + } + }) + ); + + if (request === "external-false") { + resolve(context, request, callback); + } else { + resolve(context, request, (err, resolved, resolveRequest) => { + if (err) { + callback(err); + } else if ( + resolved !== /** @type {ResolveRequest} */ (resolveRequest).path + ) { + callback(new Error("Error")); + } else { + callback(null, `var ${JSON.stringify(resolved)}`); + } + }); + } + } + ] +}; diff --git a/test/configCases/externals/resolve/index.js b/test/configCases/externals/resolve/index.js new file mode 100644 index 00000000000..2b43aa03ea7 --- /dev/null +++ b/test/configCases/externals/resolve/index.js @@ -0,0 +1,8 @@ +it("should allow functions as externals with promise and resolver", function () { + const result = require("external"); + expect(result).toMatch(/^[a-z]:\\|\//i); + expect(result).toMatch(/resolve.node_modules.external\.js$/); + const result2 = require("external-promise"); + expect(result2).toMatch(/^[a-z]:\\|\//i); + expect(result2).toMatch(/resolve.node_modules.external-promise\.js$/); +}); diff --git a/test/configCases/externals/resolve/node_modules/external-promise.js b/test/configCases/externals/resolve/node_modules/external-promise.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/externals/resolve/node_modules/external.js b/test/configCases/externals/resolve/node_modules/external.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/externals/resolve/webpack.config.js b/test/configCases/externals/resolve/webpack.config.js new file mode 100644 index 00000000000..d2d8497e836 --- /dev/null +++ b/test/configCases/externals/resolve/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +/** @typedef {import("../../../../").ExternalItemFunctionData} ExternalItemFunctionData */ +/** @typedef {import("../../../../").ExternalItemFunctionPromise} ExternalItemFunctionPromise */ +/** @typedef {import("../../../../").ExternalItemFunctionDataGetResolve} ExternalItemFunctionDataGetResolve */ +/** @typedef {import("../../../../").ExternalItemFunctionDataGetResolveResult} ExternalItemFunctionDataGetResolveResult */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + }, + externals: [ + /** @type {ExternalItemFunctionPromise} */ + async ({ context, request, getResolve }) => { + if (request !== "external" && request !== "external-promise") { + return false; + } + + const resolve = + /** @type {ExternalItemFunctionDataGetResolveResult} */ + ( + /** @type {ExternalItemFunctionDataGetResolve} */ + (getResolve)() + ); + const resolved = await resolve(/** @type {string} */ (context), request); + return `var ${JSON.stringify(resolved)}`; + } + ] +}; diff --git a/test/configCases/externals/this/index.js b/test/configCases/externals/this/index.js new file mode 100644 index 00000000000..f121aac4629 --- /dev/null +++ b/test/configCases/externals/this/index.js @@ -0,0 +1,11 @@ +afterEach(done => { + (function() { delete this.EXTERNAL_TEST_GLOBAL; })(); + done(); +}); + +it("should import an external value assigned to global this", function() { + (function() { this.EXTERNAL_TEST_GLOBAL = 42; })(); + // eslint-disable-next-line n/no-missing-require + const result = require("external"); + expect(result).toBe(42); +}); diff --git a/test/configCases/externals/this/webpack.config.js b/test/configCases/externals/this/webpack.config.js new file mode 100644 index 00000000000..bbd810cdfc4 --- /dev/null +++ b/test/configCases/externals/this/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + }, + externals: { + external: "this EXTERNAL_TEST_GLOBAL" + } +}; diff --git a/test/configCases/filename-template/filename-function/a.js b/test/configCases/filename-template/filename-function/a.js new file mode 100644 index 00000000000..94d6da29137 --- /dev/null +++ b/test/configCases/filename-template/filename-function/a.js @@ -0,0 +1,5 @@ +it("should be able to load a chunk", async () => { + await expect( + import(/* webpackChunkName: "1" */ "./chunk1") + ).resolves.toMatchObject({ default: 1 }); +}); diff --git a/test/configCases/filename-template/filename-function/b.js b/test/configCases/filename-template/filename-function/b.js new file mode 100644 index 00000000000..7eecd6dfd82 --- /dev/null +++ b/test/configCases/filename-template/filename-function/b.js @@ -0,0 +1,5 @@ +it("should be able to load a chunk", async () => { + await expect( + import(/* webpackChunkName: "2" */ "./chunk2") + ).resolves.toMatchObject({ default: 2 }); +}); diff --git a/test/configCases/filename-template/filename-function/chunk1.js b/test/configCases/filename-template/filename-function/chunk1.js new file mode 100644 index 00000000000..aef22247d75 --- /dev/null +++ b/test/configCases/filename-template/filename-function/chunk1.js @@ -0,0 +1 @@ +export default 1; diff --git a/test/configCases/filename-template/filename-function/chunk2.js b/test/configCases/filename-template/filename-function/chunk2.js new file mode 100644 index 00000000000..842e368a0a2 --- /dev/null +++ b/test/configCases/filename-template/filename-function/chunk2.js @@ -0,0 +1 @@ +export default 2; diff --git a/test/configCases/filename-template/filename-function/test.config.js b/test/configCases/filename-template/filename-function/test.config.js new file mode 100644 index 00000000000..cdc829f688b --- /dev/null +++ b/test/configCases/filename-template/filename-function/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["11.js", "22.js", "aa.js", "bbb.js"]; + } +}; diff --git a/test/configCases/filename-template/filename-function/webpack.config.js b/test/configCases/filename-template/filename-function/webpack.config.js new file mode 100644 index 00000000000..eac0922a86a --- /dev/null +++ b/test/configCases/filename-template/filename-function/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +/** @typedef {import("../../../../").Chunk & { name: string }} Chunk */ +/** @typedef {import("../../../../").PathData & { chunk: Chunk }} PathData */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + entry: { + a: "./a", + b: { + import: "./b", + /** + * @param {PathData} data data + * @returns {string} filename + */ + filename: (data) => + `${data.chunk.name + data.chunk.name + data.chunk.name}.js` + } + }, + output: { + /** + * @param {PathData} data data + * @returns {string} filename + */ + filename: (data) => `${data.chunk.name + data.chunk.name}.js`, + /** + * @param {PathData} data data + * @returns {string} filename + */ + chunkFilename: (data) => `${data.chunk.name + data.chunk.name}.js` + } +}; diff --git a/test/configCases/filename-template/module-filename-template/index.js b/test/configCases/filename-template/module-filename-template/index.js index a8a8e6fa5e1..d3e9c745b17 100644 --- a/test/configCases/filename-template/module-filename-template/index.js +++ b/test/configCases/filename-template/module-filename-template/index.js @@ -5,5 +5,4 @@ it("should include test.js in SourceMap", function() { expect(map.sources).toContain("dummy:///./test.js"); }); -require.include("./test.js"); - +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/filename-template/module-filename-template/webpack.config.js b/test/configCases/filename-template/module-filename-template/webpack.config.js index a5e99ca66fb..0b12464218f 100644 --- a/test/configCases/filename-template/module-filename-template/webpack.config.js +++ b/test/configCases/filename-template/module-filename-template/webpack.config.js @@ -1,9 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "development", output: { - devtoolLineToLine: true, - devtoolModuleFilenameTemplate: function(info) { - return "dummy:///" + info.resourcePath; + devtoolModuleFilenameTemplate(info) { + return `dummy:///${info.resourcePath}`; } }, node: { diff --git a/test/configCases/filename-template/script-src-filename/index.js b/test/configCases/filename-template/script-src-filename/index.js new file mode 100644 index 00000000000..8bd9e15c0b1 --- /dev/null +++ b/test/configCases/filename-template/script-src-filename/index.js @@ -0,0 +1,17 @@ +it("should allow to access __webpack_get_script_filename__ ", done => { + const oldFn = __webpack_get_script_filename__; + __webpack_get_script_filename__ = chunk => { + const filename = oldFn(chunk); + return filename + ".changed"; + }; + import("./test.js").then( + () => { + done.fail("Loading chunk should fail"); + }, + err => { + expect(err.code).toBe("ENOENT"); + expect(err.path).toMatch(/\.js\.changed$/); + done(); + } + ); +}); diff --git a/test/configCases/filename-template/script-src-filename/test.js b/test/configCases/filename-template/script-src-filename/test.js new file mode 100644 index 00000000000..8b1a393741c --- /dev/null +++ b/test/configCases/filename-template/script-src-filename/test.js @@ -0,0 +1 @@ +// empty diff --git a/test/configCases/filename-template/script-src-filename/webpack.config.js b/test/configCases/filename-template/script-src-filename/webpack.config.js new file mode 100644 index 00000000000..c19d15e8f12 --- /dev/null +++ b/test/configCases/filename-template/script-src-filename/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development" +}; diff --git a/test/configCases/filename-template/split-chunks-filename/index.js b/test/configCases/filename-template/split-chunks-filename/index.js index 66eba381f47..8e2faec2707 100644 --- a/test/configCases/filename-template/split-chunks-filename/index.js +++ b/test/configCases/filename-template/split-chunks-filename/index.js @@ -5,5 +5,7 @@ it("should create a vendor file", function() { throw new Error("vendor.js file was not created"); }); -require.include("test"); +it("should be able to load the vendor module", function() { + require("test"); +}); diff --git a/test/configCases/filename-template/split-chunks-filename/webpack.config.js b/test/configCases/filename-template/split-chunks-filename/webpack.config.js index 580604fe096..2558fd11f84 100644 --- a/test/configCases/filename-template/split-chunks-filename/webpack.config.js +++ b/test/configCases/filename-template/split-chunks-filename/webpack.config.js @@ -1,9 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "development", node: { __dirname: false, __filename: false }, + output: { + libraryTarget: "commonjs2" + }, optimization: { splitChunks: { cacheGroups: { diff --git a/test/configCases/finish-modules/simple/index.js b/test/configCases/finish-modules/simple/index.js new file mode 100644 index 00000000000..7a0686e3052 --- /dev/null +++ b/test/configCases/finish-modules/simple/index.js @@ -0,0 +1,3 @@ +it("should compile", function(done) { + done(); +}); diff --git a/test/configCases/finish-modules/simple/webpack.config.js b/test/configCases/finish-modules/simple/webpack.config.js new file mode 100644 index 00000000000..0b4b1decf6b --- /dev/null +++ b/test/configCases/finish-modules/simple/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** + * @this {import("../../../../").Compiler} the compiler + */ +function testPlugin() { + this.hooks.compilation.tap("TestPlugin", (compilation) => { + compilation.hooks.finishModules.tapAsync( + "TestPlugin", + (_modules, callback) => { + callback(); + } + ); + }); +} + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [testPlugin] +}; diff --git a/test/configCases/graph/conditional-ensure/a.js b/test/configCases/graph/conditional-ensure/a.js new file mode 100644 index 00000000000..1ea9fcfdc8c --- /dev/null +++ b/test/configCases/graph/conditional-ensure/a.js @@ -0,0 +1,7 @@ +import c1 from "./c1"; + +it("should allow to import an conditionally unneeded chunk", async () => { + const c2 = await c1(); + const c1_ = await c2.default(); + expect(c1_.value).toBe(1); +}); diff --git a/test/configCases/graph/conditional-ensure/b.js b/test/configCases/graph/conditional-ensure/b.js new file mode 100644 index 00000000000..32f01332367 --- /dev/null +++ b/test/configCases/graph/conditional-ensure/b.js @@ -0,0 +1,7 @@ +import c2 from "./c2"; + +it("should allow to import an conditionally unneeded chunk", async () => { + const c1 = await c2(); + const c2_ = await c1.default(); + expect(c2_.value).toBe(2); +}); diff --git a/test/configCases/graph/conditional-ensure/c1.js b/test/configCases/graph/conditional-ensure/c1.js new file mode 100644 index 00000000000..bfd7d369c96 --- /dev/null +++ b/test/configCases/graph/conditional-ensure/c1.js @@ -0,0 +1,2 @@ +export default () => import("./c2"); +export const value = 1; diff --git a/test/configCases/graph/conditional-ensure/c2.js b/test/configCases/graph/conditional-ensure/c2.js new file mode 100644 index 00000000000..d04edb2a3dc --- /dev/null +++ b/test/configCases/graph/conditional-ensure/c2.js @@ -0,0 +1,2 @@ +export default () => import("./c1"); +export const value = 2; diff --git a/test/configCases/graph/conditional-ensure/webpack.config.js b/test/configCases/graph/conditional-ensure/webpack.config.js new file mode 100644 index 00000000000..0ba7441fa46 --- /dev/null +++ b/test/configCases/graph/conditional-ensure/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./a", + bundle1: "./b" + }, + optimization: { + flagIncludedChunks: false, + chunkIds: "named" + }, + output: { + filename: "[name].js", + chunkFilename: "[id].[chunkhash].js" + } +}; diff --git a/test/configCases/graph/conditional-reexport/a.js b/test/configCases/graph/conditional-reexport/a.js new file mode 100644 index 00000000000..1733779a359 --- /dev/null +++ b/test/configCases/graph/conditional-reexport/a.js @@ -0,0 +1,5 @@ +import { utilA } from "./lib" + +it("should not emit error when running a.js (runtime a)", () => { + expect(utilA()).toBe("a"); +}) diff --git a/test/configCases/graph/conditional-reexport/b.js b/test/configCases/graph/conditional-reexport/b.js new file mode 100644 index 00000000000..dc027b6cedb --- /dev/null +++ b/test/configCases/graph/conditional-reexport/b.js @@ -0,0 +1,5 @@ +import { utilB } from "./lib" + +it("should not emit error when running b.js (runtime b)", () => { + expect(utilB()).toBe("[object Object] common"); +}) diff --git a/test/configCases/graph/conditional-reexport/lib/common/common.js b/test/configCases/graph/conditional-reexport/lib/common/common.js new file mode 100644 index 00000000000..074ca1b0a6a --- /dev/null +++ b/test/configCases/graph/conditional-reexport/lib/common/common.js @@ -0,0 +1 @@ +export const common = 'common' diff --git a/test/configCases/graph/conditional-reexport/lib/common/empty.js b/test/configCases/graph/conditional-reexport/lib/common/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/graph/conditional-reexport/lib/common/index.js b/test/configCases/graph/conditional-reexport/lib/common/index.js new file mode 100644 index 00000000000..cbff10e4c2c --- /dev/null +++ b/test/configCases/graph/conditional-reexport/lib/common/index.js @@ -0,0 +1,2 @@ +export * from "./common" +export * from "./empty" \ No newline at end of file diff --git a/test/configCases/graph/conditional-reexport/lib/index.js b/test/configCases/graph/conditional-reexport/lib/index.js new file mode 100644 index 00000000000..076a9172f79 --- /dev/null +++ b/test/configCases/graph/conditional-reexport/lib/index.js @@ -0,0 +1,3 @@ +export * from "./util-a" +export * from "./common" +export * from "./util-b" diff --git a/test/configCases/graph/conditional-reexport/lib/util-a.js b/test/configCases/graph/conditional-reexport/lib/util-a.js new file mode 100644 index 00000000000..84de8612dba --- /dev/null +++ b/test/configCases/graph/conditional-reexport/lib/util-a.js @@ -0,0 +1,3 @@ +export function utilA() { + return 'a'; +} diff --git a/test/configCases/graph/conditional-reexport/lib/util-b.js b/test/configCases/graph/conditional-reexport/lib/util-b.js new file mode 100644 index 00000000000..dda8e9fcd46 --- /dev/null +++ b/test/configCases/graph/conditional-reexport/lib/util-b.js @@ -0,0 +1,5 @@ +import { common } from "./common" +var b = ({}).toString(); // side effect, this will keep lib/index.js exist in the output, bailout the optimization from SideEffectsFlagPlugin +export function utilB() { + return b + ' ' + common; +} diff --git a/test/configCases/graph/conditional-reexport/test.config.js b/test/configCases/graph/conditional-reexport/test.config.js new file mode 100644 index 00000000000..bb94480055a --- /dev/null +++ b/test/configCases/graph/conditional-reexport/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./lib.js", "./a.js", "./b.js"]; + } +}; diff --git a/test/configCases/graph/conditional-reexport/webpack.config.js b/test/configCases/graph/conditional-reexport/webpack.config.js new file mode 100644 index 00000000000..ab46ede46b3 --- /dev/null +++ b/test/configCases/graph/conditional-reexport/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("webpack").Configuration} */ +module.exports = { + entry: { + a: "./a.js", + b: "./b.js" + }, + output: { + filename: "[name].js" + }, + target: "web", + mode: "production", + optimization: { + concatenateModules: false, + splitChunks: { + cacheGroups: { + lib: { + name: "lib", + test: /lib/, + chunks: "all", + minSize: 0 + } + } + } + } +}; diff --git a/test/configCases/graph/issue-11770/a.js b/test/configCases/graph/issue-11770/a.js new file mode 100644 index 00000000000..91e639dac9a --- /dev/null +++ b/test/configCases/graph/issue-11770/a.js @@ -0,0 +1,6 @@ +import { val, val2b } from "./shared"; + +it("should have the correct value", () => { + expect(val).toBe(84); + expect(val2b).toBe(42); +}); diff --git a/test/configCases/graph/issue-11770/ax.js b/test/configCases/graph/issue-11770/ax.js new file mode 100644 index 00000000000..3738eadfb67 --- /dev/null +++ b/test/configCases/graph/issue-11770/ax.js @@ -0,0 +1,6 @@ +import { val, val2b } from "./concatenated-shared"; + +it("should have the correct value", () => { + expect(val).toBe(84); + expect(val2b).toBe(42); +}); diff --git a/test/configCases/graph/issue-11770/b.js b/test/configCases/graph/issue-11770/b.js new file mode 100644 index 00000000000..def6b6eef2b --- /dev/null +++ b/test/configCases/graph/issue-11770/b.js @@ -0,0 +1,8 @@ +import { other, val2c, Test } from "./shared"; + +it("should have the correct value", () => { + expect(other).toBe("other"); + expect(val2c).toBe(42); + expect(Test).toBeTypeOf("function"); + expect(new Test()).toBeInstanceOf(Test); +}); diff --git a/test/configCases/graph/issue-11770/bx.js b/test/configCases/graph/issue-11770/bx.js new file mode 100644 index 00000000000..1d24b378858 --- /dev/null +++ b/test/configCases/graph/issue-11770/bx.js @@ -0,0 +1,8 @@ +import { other, val2c, Test } from "./concatenated-shared"; + +it("should have the correct value", () => { + expect(other).toBe("other"); + expect(val2c).toBe(42); + expect(Test).toBeTypeOf("function"); + expect(new Test()).toBeInstanceOf(Test); +}); diff --git a/test/configCases/graph/issue-11770/c.js b/test/configCases/graph/issue-11770/c.js new file mode 100644 index 00000000000..eb652f42cb3 --- /dev/null +++ b/test/configCases/graph/issue-11770/c.js @@ -0,0 +1,5 @@ +import { other } from "./shared"; + +it("should have the correct value", () => { + expect(other).toBe("other"); +}); diff --git a/test/configCases/graph/issue-11770/concatenated-shared.js b/test/configCases/graph/issue-11770/concatenated-shared.js new file mode 100644 index 00000000000..42feac2d697 --- /dev/null +++ b/test/configCases/graph/issue-11770/concatenated-shared.js @@ -0,0 +1 @@ +export * from "./shared?1"; diff --git a/test/configCases/graph/issue-11770/cx.js b/test/configCases/graph/issue-11770/cx.js new file mode 100644 index 00000000000..55048979a17 --- /dev/null +++ b/test/configCases/graph/issue-11770/cx.js @@ -0,0 +1,5 @@ +import { other } from "./concatenated-shared"; + +it("should have the correct value", () => { + expect(other).toBe("other"); +}); diff --git a/test/configCases/graph/issue-11770/d1.js b/test/configCases/graph/issue-11770/d1.js new file mode 100644 index 00000000000..1da3d9db3f8 --- /dev/null +++ b/test/configCases/graph/issue-11770/d1.js @@ -0,0 +1,6 @@ +import { value2, value3 } from "./shared2"; + +it("should have the correct value", () => { + expect(value2).toBe(42); + expect(value3).toBe(42); +}); diff --git a/test/configCases/graph/issue-11770/d2.js b/test/configCases/graph/issue-11770/d2.js new file mode 100644 index 00000000000..b32578cb79f --- /dev/null +++ b/test/configCases/graph/issue-11770/d2.js @@ -0,0 +1,6 @@ +import { other2, value3 } from "./shared2"; + +it("should have the correct value", () => { + expect(other2).toBe("other"); + expect(value3).toBe(42); +}); diff --git a/test/configCases/graph/issue-11770/dep-shared3.js b/test/configCases/graph/issue-11770/dep-shared3.js new file mode 100644 index 00000000000..272819e9b2b --- /dev/null +++ b/test/configCases/graph/issue-11770/dep-shared3.js @@ -0,0 +1,4 @@ +import { setOther2 } from "./shared2"; + +export default 42; +setOther2("wrong"); diff --git a/test/configCases/graph/issue-11770/dep-shared4.js b/test/configCases/graph/issue-11770/dep-shared4.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/graph/issue-11770/dep-shared4.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/graph/issue-11770/dep.js b/test/configCases/graph/issue-11770/dep.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/graph/issue-11770/dep.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/graph/issue-11770/dep2.js b/test/configCases/graph/issue-11770/dep2.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/configCases/graph/issue-11770/dep2.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/configCases/graph/issue-11770/shared.js b/test/configCases/graph/issue-11770/shared.js new file mode 100644 index 00000000000..b621dff945c --- /dev/null +++ b/test/configCases/graph/issue-11770/shared.js @@ -0,0 +1,16 @@ +import value from "./dep"; +import value2 from "./dep2"; +import * as dep2 from "./dep2"; +import Super from "./super"; + +const derived = value; + +export const val = /*#__PURE__*/ (() => value + derived)(); + +export const val2a = value2; +export const val2b = value2; +export const val2c = value2; + +export const other = "other"; + +export class Test extends Super {} diff --git a/test/configCases/graph/issue-11770/shared2.js b/test/configCases/graph/issue-11770/shared2.js new file mode 100644 index 00000000000..dc98ce98132 --- /dev/null +++ b/test/configCases/graph/issue-11770/shared2.js @@ -0,0 +1,12 @@ +import value from "./dep-shared3"; +import value4 from "./dep-shared4"; + +export function setOther2(value) { + other2 = value; +} + +export const value2 = value; +export const value3 = value4; +export var other2; + +if (other2 === undefined) other2 = "other"; diff --git a/test/configCases/graph/issue-11770/super.js b/test/configCases/graph/issue-11770/super.js new file mode 100644 index 00000000000..d470a77c21a --- /dev/null +++ b/test/configCases/graph/issue-11770/super.js @@ -0,0 +1 @@ +export default class Super {} diff --git a/test/configCases/graph/issue-11770/test.config.js b/test/configCases/graph/issue-11770/test.config.js new file mode 100644 index 00000000000..b23385953ef --- /dev/null +++ b/test/configCases/graph/issue-11770/test.config.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "shared.js", + "a.js", + "b.js", + "c1.js", + "c2.js", + "ax.js", + "bx.js", + "cx1.js", + "cx2.js", + "d1.js", + "d2.js" + ]; + } +}; diff --git a/test/configCases/graph/issue-11770/webpack.config.js b/test/configCases/graph/issue-11770/webpack.config.js new file mode 100644 index 00000000000..9c401e3bb7f --- /dev/null +++ b/test/configCases/graph/issue-11770/webpack.config.js @@ -0,0 +1,44 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a", + b: "./b", + c1: "./c", + c2: "./c", + ax: "./ax", + bx: "./bx", + cx1: "./cx", + cx2: "./cx", + d1: "./d1", + d2: "./d2" + }, + target: "web", + output: { + filename: "[name].js", + library: { type: "commonjs-module" } + }, + optimization: { + usedExports: true, + concatenateModules: true, + splitChunks: { + cacheGroups: { + forceMerge: { + test: /shared/, + enforce: true, + name: "shared", + chunks: "all" + } + } + } + }, + module: { + rules: [ + { + test: /dep/, + sideEffects: false + } + ] + } +}; diff --git a/test/configCases/graph/issue-11856.2/a.js b/test/configCases/graph/issue-11856.2/a.js new file mode 100644 index 00000000000..244516d4db6 --- /dev/null +++ b/test/configCases/graph/issue-11856.2/a.js @@ -0,0 +1,5 @@ +import { value } from "./shared-c"; + +it("should have to correct value", () => { + expect(value).toBe(42); +}); diff --git a/test/configCases/graph/issue-11856.2/b.js b/test/configCases/graph/issue-11856.2/b.js new file mode 100644 index 00000000000..7666bd7a094 --- /dev/null +++ b/test/configCases/graph/issue-11856.2/b.js @@ -0,0 +1,5 @@ +import { value } from "./b2"; + +it("should have to correct value", () => { + expect(value).toBe(42); +}); diff --git a/test/configCases/graph/issue-11856.2/b2.js b/test/configCases/graph/issue-11856.2/b2.js new file mode 100644 index 00000000000..ff5c6ca1544 --- /dev/null +++ b/test/configCases/graph/issue-11856.2/b2.js @@ -0,0 +1 @@ +export * from "./shared-e"; diff --git a/test/configCases/graph/issue-11856.2/shared-c.js b/test/configCases/graph/issue-11856.2/shared-c.js new file mode 100644 index 00000000000..2e0539bdf29 --- /dev/null +++ b/test/configCases/graph/issue-11856.2/shared-c.js @@ -0,0 +1 @@ +export * from "./shared-d"; diff --git a/test/configCases/graph/issue-11856.2/shared-d.js b/test/configCases/graph/issue-11856.2/shared-d.js new file mode 100644 index 00000000000..ff5c6ca1544 --- /dev/null +++ b/test/configCases/graph/issue-11856.2/shared-d.js @@ -0,0 +1 @@ +export * from "./shared-e"; diff --git a/test/configCases/graph/issue-11856.2/shared-e.js b/test/configCases/graph/issue-11856.2/shared-e.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/configCases/graph/issue-11856.2/shared-e.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/configCases/graph/issue-11856.2/test.config.js b/test/configCases/graph/issue-11856.2/test.config.js new file mode 100644 index 00000000000..f5d3f02d8f9 --- /dev/null +++ b/test/configCases/graph/issue-11856.2/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle: function (i, options) { + return ["shared.js", "a.js", "b.js"]; + } +}; diff --git a/test/configCases/graph/issue-11856.2/webpack.config.js b/test/configCases/graph/issue-11856.2/webpack.config.js new file mode 100644 index 00000000000..059dc0d2d9b --- /dev/null +++ b/test/configCases/graph/issue-11856.2/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a", + b: "./b" + }, + target: "web", + output: { + filename: "[name].js", + library: { type: "commonjs-module" } + }, + optimization: { + usedExports: true, + concatenateModules: true, + splitChunks: { + cacheGroups: { + forceMerge: { + test: /shared/, + enforce: true, + name: "shared", + chunks: "all" + } + } + } + } +}; diff --git a/test/configCases/graph/issue-11856/a.js b/test/configCases/graph/issue-11856/a.js new file mode 100644 index 00000000000..244516d4db6 --- /dev/null +++ b/test/configCases/graph/issue-11856/a.js @@ -0,0 +1,5 @@ +import { value } from "./shared-c"; + +it("should have to correct value", () => { + expect(value).toBe(42); +}); diff --git a/test/configCases/graph/issue-11856/b.js b/test/configCases/graph/issue-11856/b.js new file mode 100644 index 00000000000..69313beede6 --- /dev/null +++ b/test/configCases/graph/issue-11856/b.js @@ -0,0 +1,5 @@ +import { value } from "./shared-d"; + +it("should have to correct value", () => { + expect(value).toBe(42); +}); diff --git a/test/configCases/graph/issue-11856/shared-c.js b/test/configCases/graph/issue-11856/shared-c.js new file mode 100644 index 00000000000..2e0539bdf29 --- /dev/null +++ b/test/configCases/graph/issue-11856/shared-c.js @@ -0,0 +1 @@ +export * from "./shared-d"; diff --git a/test/configCases/graph/issue-11856/shared-d.js b/test/configCases/graph/issue-11856/shared-d.js new file mode 100644 index 00000000000..46d3ca8c61f --- /dev/null +++ b/test/configCases/graph/issue-11856/shared-d.js @@ -0,0 +1 @@ +export const value = 42; diff --git a/test/configCases/graph/issue-11856/test.config.js b/test/configCases/graph/issue-11856/test.config.js new file mode 100644 index 00000000000..346f1fb1be7 --- /dev/null +++ b/test/configCases/graph/issue-11856/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["shared.js", "a.js", "b.js"]; + } +}; diff --git a/test/configCases/graph/issue-11856/webpack.config.js b/test/configCases/graph/issue-11856/webpack.config.js new file mode 100644 index 00000000000..059dc0d2d9b --- /dev/null +++ b/test/configCases/graph/issue-11856/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a", + b: "./b" + }, + target: "web", + output: { + filename: "[name].js", + library: { type: "commonjs-module" } + }, + optimization: { + usedExports: true, + concatenateModules: true, + splitChunks: { + cacheGroups: { + forceMerge: { + test: /shared/, + enforce: true, + name: "shared", + chunks: "all" + } + } + } + } +}; diff --git a/test/configCases/graph/issue-11863/a.js b/test/configCases/graph/issue-11863/a.js new file mode 100644 index 00000000000..f30aa092588 --- /dev/null +++ b/test/configCases/graph/issue-11863/a.js @@ -0,0 +1,5 @@ +import { value1 } from "./shared"; + +it("should have to correct value", () => { + expect(value1).toBe(42); +}); diff --git a/test/configCases/graph/issue-11863/b.js b/test/configCases/graph/issue-11863/b.js new file mode 100644 index 00000000000..04a21d85eb7 --- /dev/null +++ b/test/configCases/graph/issue-11863/b.js @@ -0,0 +1,5 @@ +import { value2 } from "./shared"; + +it("should have to correct value", () => { + expect(value2).toBe(42); +}); diff --git a/test/configCases/graph/issue-11863/c.js b/test/configCases/graph/issue-11863/c.js new file mode 100644 index 00000000000..90cfa268b77 --- /dev/null +++ b/test/configCases/graph/issue-11863/c.js @@ -0,0 +1,5 @@ +import { value3 } from "./shared"; + +it("should have to correct value", () => { + expect(value3).toBe(42); +}); diff --git a/test/configCases/graph/issue-11863/shared-x.js b/test/configCases/graph/issue-11863/shared-x.js new file mode 100644 index 00000000000..4bc1fc56323 --- /dev/null +++ b/test/configCases/graph/issue-11863/shared-x.js @@ -0,0 +1,3 @@ +export const value1 = 42; +export const value2 = 42; +export const value3 = 42; diff --git a/test/configCases/graph/issue-11863/shared-y.js b/test/configCases/graph/issue-11863/shared-y.js new file mode 100644 index 00000000000..5390ec68ae6 --- /dev/null +++ b/test/configCases/graph/issue-11863/shared-y.js @@ -0,0 +1 @@ +export { value3 } from "./shared-x"; diff --git a/test/configCases/graph/issue-11863/shared-z.js b/test/configCases/graph/issue-11863/shared-z.js new file mode 100644 index 00000000000..ed9f0588a47 --- /dev/null +++ b/test/configCases/graph/issue-11863/shared-z.js @@ -0,0 +1 @@ +export { value1 } from "./shared-x"; diff --git a/test/configCases/graph/issue-11863/shared.js b/test/configCases/graph/issue-11863/shared.js new file mode 100644 index 00000000000..3a13d552331 --- /dev/null +++ b/test/configCases/graph/issue-11863/shared.js @@ -0,0 +1,3 @@ +export { value1 } from "./shared-z"; +export { value2 } from "./shared-x"; +export * from "./shared-y"; diff --git a/test/configCases/graph/issue-11863/test.config.js b/test/configCases/graph/issue-11863/test.config.js new file mode 100644 index 00000000000..fb30d2a64b6 --- /dev/null +++ b/test/configCases/graph/issue-11863/test.config.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "shared.js", + "a.js", + "b.js", + "c.js", + "ab.js", + "ac.js", + "bc.js", + "abc.js" + ]; + } +}; diff --git a/test/configCases/graph/issue-11863/webpack.config.js b/test/configCases/graph/issue-11863/webpack.config.js new file mode 100644 index 00000000000..8d5e7475a21 --- /dev/null +++ b/test/configCases/graph/issue-11863/webpack.config.js @@ -0,0 +1,42 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + a: "./a", + b: "./b", + c: "./c", + ab: ["./a", "./b"], + ac: ["./a", "./c"], + bc: ["./b", "./c"], + abc: ["./a", "./b", "./c"] + }, + target: "web", + output: { + filename: "[name].js", + library: { type: "commonjs-module" } + }, + optimization: { + chunkIds: "named", + usedExports: true, + concatenateModules: true, + splitChunks: { + cacheGroups: { + forceMerge: { + test: /shared/, + enforce: true, + name: "shared", + chunks: "all" + } + } + } + }, + module: { + rules: [ + { + test: /shared/ + // sideEffects: false + } + ] + } +}; diff --git a/test/configCases/custom-hash-function/xxhash/files/file1.js b/test/configCases/hash-length/deterministic-module-ids/files/file1.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file1.js rename to test/configCases/hash-length/deterministic-module-ids/files/file1.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file10.js b/test/configCases/hash-length/deterministic-module-ids/files/file10.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file10.js rename to test/configCases/hash-length/deterministic-module-ids/files/file10.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file11.js b/test/configCases/hash-length/deterministic-module-ids/files/file11.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file11.js rename to test/configCases/hash-length/deterministic-module-ids/files/file11.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file12.js b/test/configCases/hash-length/deterministic-module-ids/files/file12.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file12.js rename to test/configCases/hash-length/deterministic-module-ids/files/file12.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file13.js b/test/configCases/hash-length/deterministic-module-ids/files/file13.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file13.js rename to test/configCases/hash-length/deterministic-module-ids/files/file13.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file14.js b/test/configCases/hash-length/deterministic-module-ids/files/file14.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file14.js rename to test/configCases/hash-length/deterministic-module-ids/files/file14.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file15.js b/test/configCases/hash-length/deterministic-module-ids/files/file15.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file15.js rename to test/configCases/hash-length/deterministic-module-ids/files/file15.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file2.js b/test/configCases/hash-length/deterministic-module-ids/files/file2.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file2.js rename to test/configCases/hash-length/deterministic-module-ids/files/file2.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file3.js b/test/configCases/hash-length/deterministic-module-ids/files/file3.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file3.js rename to test/configCases/hash-length/deterministic-module-ids/files/file3.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file4.js b/test/configCases/hash-length/deterministic-module-ids/files/file4.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file4.js rename to test/configCases/hash-length/deterministic-module-ids/files/file4.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file5.js b/test/configCases/hash-length/deterministic-module-ids/files/file5.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file5.js rename to test/configCases/hash-length/deterministic-module-ids/files/file5.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file6.js b/test/configCases/hash-length/deterministic-module-ids/files/file6.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file6.js rename to test/configCases/hash-length/deterministic-module-ids/files/file6.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file7.js b/test/configCases/hash-length/deterministic-module-ids/files/file7.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file7.js rename to test/configCases/hash-length/deterministic-module-ids/files/file7.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file8.js b/test/configCases/hash-length/deterministic-module-ids/files/file8.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file8.js rename to test/configCases/hash-length/deterministic-module-ids/files/file8.js diff --git a/test/configCases/custom-hash-function/xxhash/files/file9.js b/test/configCases/hash-length/deterministic-module-ids/files/file9.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/files/file9.js rename to test/configCases/hash-length/deterministic-module-ids/files/file9.js diff --git a/test/configCases/custom-hash-function/xxhash/index.js b/test/configCases/hash-length/deterministic-module-ids/index.js similarity index 100% rename from test/configCases/custom-hash-function/xxhash/index.js rename to test/configCases/hash-length/deterministic-module-ids/index.js diff --git a/test/configCases/hash-length/deterministic-module-ids/webpack.config.js b/test/configCases/hash-length/deterministic-module-ids/webpack.config.js new file mode 100644 index 00000000000..4ae15614625 --- /dev/null +++ b/test/configCases/hash-length/deterministic-module-ids/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + optimization: { + moduleIds: "deterministic" + } + }, + { + optimization: { + moduleIds: false + }, + plugins: [ + new webpack.ids.DeterministicModuleIdsPlugin({ + maxLength: 0 + }) + ] + }, + { + optimization: { + moduleIds: false + }, + plugins: [ + new webpack.ids.DeterministicModuleIdsPlugin({ + maxLength: 100 + }) + ] + } +]; diff --git a/test/configCases/hash-length/hashed-module-ids/webpack.config.js b/test/configCases/hash-length/hashed-module-ids/webpack.config.js index a0d8521291b..5f5eea96a32 100644 --- a/test/configCases/hash-length/hashed-module-ids/webpack.config.js +++ b/test/configCases/hash-length/hashed-module-ids/webpack.config.js @@ -1,23 +1,36 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ module.exports = [ { + optimization: { + moduleIds: false + }, plugins: [ - new webpack.HashedModuleIdsPlugin({ + new webpack.ids.HashedModuleIdsPlugin({ hashDigestLength: 2 }) ] }, { + optimization: { + moduleIds: false + }, plugins: [ - new webpack.HashedModuleIdsPlugin({ + new webpack.ids.HashedModuleIdsPlugin({ hashDigest: "hex", hashDigestLength: 2 }) ] }, { + optimization: { + moduleIds: false + }, plugins: [ - new webpack.HashedModuleIdsPlugin({ + new webpack.ids.HashedModuleIdsPlugin({ hashFunction: "sha1", hashDigestLength: 3 }) diff --git a/test/configCases/hash-length/output-filename/test.config.js b/test/configCases/hash-length/output-filename/test.config.js index c378cab5525..5b50bd0700a 100644 --- a/test/configCases/hash-length/output-filename/test.config.js +++ b/test/configCases/hash-length/output-filename/test.config.js @@ -1,34 +1,36 @@ -var fs = require("fs"); +"use strict"; -var findFile = function(files, regex) { - return files.find(function(file) { +const fs = require("fs"); + +const findFile = (files, regex) => + files.find((file) => { if (regex.test(file)) { return true; } + + return false; }); -}; -var verifyFilenameLength = function(filename, expectedNameLength) { - expect(filename).toMatch(new RegExp("^.{" + expectedNameLength + "}$")); +const verifyFilenameLength = (filename, expectedNameLength) => { + expect(filename).toMatch(new RegExp(`^.{${expectedNameLength}}$`)); }; module.exports = { - findBundle: function(i, options) { - var files = fs.readdirSync(options.output.path); - - var bundleDetects = [ + findBundle(i, options) { + const files = fs.readdirSync(options.output.path); + const bundleDetects = [ options.amd.expectedChunkFilenameLength && { - regex: new RegExp("^0.bundle" + i, "i"), + regex: new RegExp(`^\\d+.bundle${i}`, "i"), expectedNameLength: options.amd.expectedChunkFilenameLength }, { - regex: new RegExp("^bundle" + i, "i"), + regex: new RegExp(`^bundle${i}`, "i"), expectedNameLength: options.amd.expectedFilenameLength } ].filter(Boolean); - var bundleDetect; - var filename; + let bundleDetect; + let filename; for (bundleDetect of bundleDetects) { filename = findFile(files, bundleDetect.regex); @@ -39,13 +41,15 @@ module.exports = { }, files: ${files.join(", ")})` ); } - verifyFilenameLength(filename, bundleDetect.expectedNameLength); + verifyFilenameLength( + filename.replace(/^\d+\./, "X."), + bundleDetect.expectedNameLength + ); } - return "./" + filename; + return `./${filename}`; }, afterExecute: () => { - delete global.webpackJsonp; delete global.webpackChunk; } }; diff --git a/test/configCases/hash-length/output-filename/webpack.config.js b/test/configCases/hash-length/output-filename/webpack.config.js index ca75582b24b..ecc76472ee1 100644 --- a/test/configCases/hash-length/output-filename/webpack.config.js +++ b/test/configCases/hash-length/output-filename/webpack.config.js @@ -1,11 +1,15 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ module.exports = [ { name: "hash with length in publicPath", output: { - publicPath: "/[hash:6]/", - filename: "bundle0.[hash:6].js", - chunkFilename: "[id].bundle0.[hash:6].js" + publicPath: "/[fullhash:6]/", + filename: "bundle0.[fullhash:6].js", + chunkFilename: "[id].bundle0.[fullhash:6].js" }, amd: { expectedFilenameLength: 17, @@ -15,9 +19,9 @@ module.exports = [ { name: "hash in publicPath", output: { - publicPath: "/[hash]/", - filename: "bundle1.[hash].js", - chunkFilename: "[id].bundle1.[hash].js" + publicPath: "/[fullhash]/", + filename: "bundle1.[fullhash].js", + chunkFilename: "[id].bundle1.[fullhash].js" }, amd: { expectedFilenameLength: 31, @@ -49,8 +53,8 @@ module.exports = [ { name: "hash with and without length", output: { - filename: "bundle4.[hash].js", - chunkFilename: "[id].bundle4.[hash:8].js" + filename: "bundle4.[fullhash].js", + chunkFilename: "[id].bundle4.[fullhash:8].js" }, amd: { expectedFilenameLength: 31, @@ -60,8 +64,8 @@ module.exports = [ { name: "hash with length", output: { - filename: "bundle5.[hash:6].js", - chunkFilename: "[id].bundle5.[hash:8].js" + filename: "bundle5.[fullhash:6].js", + chunkFilename: "[id].bundle5.[fullhash:8].js" }, amd: { expectedFilenameLength: 17, @@ -71,7 +75,7 @@ module.exports = [ { name: "chunkhash in chunkFilename ", output: { - filename: "bundle6.[hash].js", + filename: "bundle6.[fullhash].js", chunkFilename: "[id].bundle6.[chunkhash:7].js" }, amd: { @@ -83,7 +87,7 @@ module.exports = [ { name: "hash with length and chunkhash with length", output: { - filename: "bundle7.[hash:7].js", + filename: "bundle7.[fullhash:7].js", chunkFilename: "[id].bundle7.[chunkhash:7].js" }, target: "node", @@ -95,8 +99,8 @@ module.exports = [ { name: "hash with length in chunkFilename", output: { - filename: "bundle8.[hash].js", - chunkFilename: "[id].bundle8.[hash:7].js" + filename: "bundle8.[fullhash].js", + chunkFilename: "[id].bundle8.[fullhash:7].js" }, target: "node", amd: { @@ -107,7 +111,7 @@ module.exports = [ { name: "chunkhash with length in chunkFilename", output: { - filename: "bundle9.[hash].js", + filename: "bundle9.[fullhash].js", chunkFilename: "[id].bundle9.[chunkhash:7].js" }, target: "node", @@ -170,7 +174,7 @@ module.exports = [ output: { filename: "bundle14.[contenthash].js", chunkFilename: "[id].bundle14.[contenthash].js", - globalObject: "this" + globalObject: "window" }, target: "web", amd: { @@ -184,7 +188,7 @@ module.exports = [ output: { filename: "bundle15.[contenthash:7].js", chunkFilename: "[id].bundle15.[contenthash:7].js", - globalObject: "this" + globalObject: "window" }, target: "web", amd: { @@ -198,7 +202,7 @@ module.exports = [ output: { filename: "bundle16.[contenthash].js", chunkFilename: "[id].bundle16.[contenthash].js", - globalObject: "this" + globalObject: "self" }, target: "webworker", amd: { @@ -212,7 +216,7 @@ module.exports = [ output: { filename: "bundle17.[contenthash:7].js", chunkFilename: "[id].bundle17.[contenthash:7].js", - globalObject: "this" + globalObject: "self" }, target: "webworker", amd: { @@ -222,11 +226,11 @@ module.exports = [ } ]; -module.exports.forEach(function(options) { +for (const options of module.exports) { options.plugins = options.plugins || []; options.plugins.push( new webpack.DefinePlugin({ NAME: JSON.stringify(options.name) }) ); -}); +} diff --git a/test/configCases/hash/debug-hash/files/file1.js b/test/configCases/hash/debug-hash/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file10.js b/test/configCases/hash/debug-hash/files/file10.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file10.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file11.js b/test/configCases/hash/debug-hash/files/file11.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file11.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file12.js b/test/configCases/hash/debug-hash/files/file12.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file12.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file13.js b/test/configCases/hash/debug-hash/files/file13.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file13.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file14.js b/test/configCases/hash/debug-hash/files/file14.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file14.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file15.js b/test/configCases/hash/debug-hash/files/file15.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file15.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file2.js b/test/configCases/hash/debug-hash/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file3.js b/test/configCases/hash/debug-hash/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file4.js b/test/configCases/hash/debug-hash/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file5.js b/test/configCases/hash/debug-hash/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file6.js b/test/configCases/hash/debug-hash/files/file6.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file6.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file7.js b/test/configCases/hash/debug-hash/files/file7.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file7.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file8.js b/test/configCases/hash/debug-hash/files/file8.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file8.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/files/file9.js b/test/configCases/hash/debug-hash/files/file9.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/debug-hash/files/file9.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/debug-hash/index.js b/test/configCases/hash/debug-hash/index.js new file mode 100644 index 00000000000..7b74a5a384f --- /dev/null +++ b/test/configCases/hash/debug-hash/index.js @@ -0,0 +1,8 @@ +it("debug hash should works", function () { + var ids = []; + for(var i = 1; i <= 15; i++) { + var id = require("./files/file" + i + ".js"); + expect(ids.indexOf(id)).toBe(-1); + ids.push(id); + } +}); diff --git a/test/configCases/hash/debug-hash/webpack.config.js b/test/configCases/hash/debug-hash/webpack.config.js new file mode 100644 index 00000000000..b79e6c19a90 --- /dev/null +++ b/test/configCases/hash/debug-hash/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + hashFunction: "debug" + } + } +]; diff --git a/test/configCases/hash/digest/files/file1.js b/test/configCases/hash/digest/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file10.js b/test/configCases/hash/digest/files/file10.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file10.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file11.js b/test/configCases/hash/digest/files/file11.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file11.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file12.js b/test/configCases/hash/digest/files/file12.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file12.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file13.js b/test/configCases/hash/digest/files/file13.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file13.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file14.js b/test/configCases/hash/digest/files/file14.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file14.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file15.js b/test/configCases/hash/digest/files/file15.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file15.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file2.js b/test/configCases/hash/digest/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file3.js b/test/configCases/hash/digest/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file4.js b/test/configCases/hash/digest/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file5.js b/test/configCases/hash/digest/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file6.js b/test/configCases/hash/digest/files/file6.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file6.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file7.js b/test/configCases/hash/digest/files/file7.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file7.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file8.js b/test/configCases/hash/digest/files/file8.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file8.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/files/file9.js b/test/configCases/hash/digest/files/file9.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/digest/files/file9.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/digest/index.js b/test/configCases/hash/digest/index.js new file mode 100644 index 00000000000..9a989c6c4c6 --- /dev/null +++ b/test/configCases/hash/digest/index.js @@ -0,0 +1,8 @@ +it("should have unique ids", function () { + var ids = []; + for(var i = 1; i <= 15; i++) { + var id = require("./files/file" + i + ".js"); + expect(ids.indexOf(id)).toBe(-1); + ids.push(id); + } +}); diff --git a/test/configCases/hash/digest/webpack.config.js b/test/configCases/hash/digest/webpack.config.js new file mode 100644 index 00000000000..b321363cd31 --- /dev/null +++ b/test/configCases/hash/digest/webpack.config.js @@ -0,0 +1,123 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + // Default hash function and all hash digests + { + output: { + hashDigest: "base64url" + } + }, + { + output: { + hashDigest: "base26" + } + }, + { + output: { + hashDigest: "base32" + } + }, + { + output: { + hashDigest: "base36" + } + }, + { + output: { + hashDigest: "base49" + } + }, + { + output: { + hashDigest: "base52" + } + }, + { + output: { + hashDigest: "base58" + } + }, + { + output: { + hashDigest: "base62" + } + }, + { + output: { + hashDigest: "hex" + } + }, + // xxhash64 + { + output: { + hashFunction: "xxhash64" + } + }, + { + output: { + hashFunction: "xxhash64", + hashDigest: "base64url" + } + }, + { + output: { + hashFunction: "xxhash64", + hashDigest: "base32" + } + }, + { + output: { + hashFunction: "xxhash64", + hashDigest: "hex" + } + }, + // md4 + { + output: { + hashFunction: "md4" + } + }, + { + output: { + hashFunction: "md4", + hashDigest: "base64url" + } + }, + { + output: { + hashFunction: "md4", + hashDigest: "base32" + } + }, + { + output: { + hashFunction: "md4", + hashDigest: "hex" + } + }, + // sha512 + { + output: { + hashFunction: "sha512" + } + }, + { + output: { + hashFunction: "sha512", + hashDigest: "base64url" + } + }, + { + output: { + hashFunction: "sha512", + hashDigest: "base32" + } + }, + { + output: { + hashFunction: "sha512", + hashDigest: "hex" + } + } +]; diff --git a/test/configCases/hash/xxhash/files/file1.js b/test/configCases/hash/xxhash/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file10.js b/test/configCases/hash/xxhash/files/file10.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file10.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file11.js b/test/configCases/hash/xxhash/files/file11.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file11.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file12.js b/test/configCases/hash/xxhash/files/file12.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file12.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file13.js b/test/configCases/hash/xxhash/files/file13.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file13.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file14.js b/test/configCases/hash/xxhash/files/file14.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file14.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file15.js b/test/configCases/hash/xxhash/files/file15.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file15.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file2.js b/test/configCases/hash/xxhash/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file3.js b/test/configCases/hash/xxhash/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file4.js b/test/configCases/hash/xxhash/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file5.js b/test/configCases/hash/xxhash/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file6.js b/test/configCases/hash/xxhash/files/file6.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file6.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file7.js b/test/configCases/hash/xxhash/files/file7.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file7.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file8.js b/test/configCases/hash/xxhash/files/file8.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file8.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/files/file9.js b/test/configCases/hash/xxhash/files/file9.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/hash/xxhash/files/file9.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/hash/xxhash/index.js b/test/configCases/hash/xxhash/index.js new file mode 100644 index 00000000000..9a989c6c4c6 --- /dev/null +++ b/test/configCases/hash/xxhash/index.js @@ -0,0 +1,8 @@ +it("should have unique ids", function () { + var ids = []; + for(var i = 1; i <= 15; i++) { + var id = require("./files/file" + i + ".js"); + expect(ids.indexOf(id)).toBe(-1); + ids.push(id); + } +}); diff --git a/test/configCases/hash/xxhash/webpack.config.js b/test/configCases/hash/xxhash/webpack.config.js new file mode 100644 index 00000000000..c2125611429 --- /dev/null +++ b/test/configCases/hash/xxhash/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + hashFunction: require("xxhashjs").h32, + hashDigest: "hex" + } + }, + { + output: { + hashFunction: require("xxhashjs").h32, + hashDigest: "base64url" + } + }, + { + output: { + hashFunction: require("xxhashjs").h32, + hashDigest: "base32" + } + }, + { + output: { + hashFunction: require("xxhashjs").h32, + hashDigest: "hex" + } + } +]; diff --git a/test/configCases/ignore/checkContext/folder-a/ignored-module.js b/test/configCases/ignore/checkContext/folder-a/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/checkContext/folder-a/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/checkContext/folder-a/normal-module.js b/test/configCases/ignore/checkContext/folder-a/normal-module.js new file mode 100644 index 00000000000..fbd72556b4f --- /dev/null +++ b/test/configCases/ignore/checkContext/folder-a/normal-module.js @@ -0,0 +1 @@ +module.exports = require("./normal-module"); diff --git a/test/configCases/ignore/checkContext/folder-b/ignored-module.js b/test/configCases/ignore/checkContext/folder-b/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/checkContext/folder-b/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/checkContext/folder-b/normal-module.js b/test/configCases/ignore/checkContext/folder-b/normal-module.js new file mode 100644 index 00000000000..83268eff2a0 --- /dev/null +++ b/test/configCases/ignore/checkContext/folder-b/normal-module.js @@ -0,0 +1 @@ +module.exports = require("./ignored-module"); diff --git a/test/configCases/ignore/checkContext/folder-b/only-context-match-require.js b/test/configCases/ignore/checkContext/folder-b/only-context-match-require.js new file mode 100644 index 00000000000..29d7ef3b3dd --- /dev/null +++ b/test/configCases/ignore/checkContext/folder-b/only-context-match-require.js @@ -0,0 +1 @@ +module.exports = "should be fine"; diff --git a/test/configCases/ignore/checkContext/folder-b/only-context-match.js b/test/configCases/ignore/checkContext/folder-b/only-context-match.js new file mode 100644 index 00000000000..3625236da61 --- /dev/null +++ b/test/configCases/ignore/checkContext/folder-b/only-context-match.js @@ -0,0 +1 @@ +module.exports = require("./only-context-match-require"); diff --git a/test/configCases/ignore/checkContext/test.js b/test/configCases/ignore/checkContext/test.js new file mode 100644 index 00000000000..14e1c3be363 --- /dev/null +++ b/test/configCases/ignore/checkContext/test.js @@ -0,0 +1,20 @@ +/* globals it */ +"use strict"; + +it("should ignore resources that match resource regex and context", function() { + expect(function() { + require("./folder-b/normal-module"); + }).toThrow(); +}); + +it("should not ignore resources that match resource but not context", function() { + expect(function() { + require("./folder-a/normal-module"); + }).not.toThrow(); +}); + +it("should not ignore resources that do not match resource but do match context", function() { + expect(function() { + require("./folder-b/only-context-match"); + }).not.toThrow(); +}); diff --git a/test/configCases/ignore/checkContext/webpack.config.js b/test/configCases/ignore/checkContext/webpack.config.js new file mode 100644 index 00000000000..e7481af6cff --- /dev/null +++ b/test/configCases/ignore/checkContext/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const IgnorePlugin = require("../../../../").IgnorePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./test.js", + plugins: [ + new IgnorePlugin({ + checkResource(resource, context) { + return /ignored-module/.test(resource) && /folder-b/.test(context); + } + }) + ] +}; diff --git a/test/configCases/ignore/checkResource-one-argument/ignored-module.js b/test/configCases/ignore/checkResource-one-argument/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/checkResource-one-argument/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/checkResource-one-argument/normal-module.js b/test/configCases/ignore/checkResource-one-argument/normal-module.js new file mode 100644 index 00000000000..f5f8a087f72 --- /dev/null +++ b/test/configCases/ignore/checkResource-one-argument/normal-module.js @@ -0,0 +1 @@ +module.exports = "normal"; diff --git a/test/configCases/ignore/checkResource-one-argument/test.js b/test/configCases/ignore/checkResource-one-argument/test.js new file mode 100644 index 00000000000..e08631dfa2e --- /dev/null +++ b/test/configCases/ignore/checkResource-one-argument/test.js @@ -0,0 +1,13 @@ +/* globals it */ +"use strict"; + +it("should ignore ignored resources", function() { + expect(function() { + require("./ignored-module"); + }).toThrow(); +}); +it("should not ignore resources that do not match", function() { + expect(function() { + require("./normal-module"); + }).not.toThrow(); +}); diff --git a/test/configCases/ignore/checkResource-one-argument/webpack.config.js b/test/configCases/ignore/checkResource-one-argument/webpack.config.js new file mode 100644 index 00000000000..557cdc49c5f --- /dev/null +++ b/test/configCases/ignore/checkResource-one-argument/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const IgnorePlugin = require("../../../../").IgnorePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./test.js", + plugins: [ + new IgnorePlugin({ + checkResource(resource) { + return /ignored-module/.test(resource); + } + }) + ] +}; diff --git a/test/configCases/ignore/checkResource-two-arguments/folder-a/ignored-module.js b/test/configCases/ignore/checkResource-two-arguments/folder-a/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/folder-a/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/checkResource-two-arguments/folder-a/normal-module.js b/test/configCases/ignore/checkResource-two-arguments/folder-a/normal-module.js new file mode 100644 index 00000000000..fbd72556b4f --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/folder-a/normal-module.js @@ -0,0 +1 @@ +module.exports = require("./normal-module"); diff --git a/test/configCases/ignore/checkResource-two-arguments/folder-b/ignored-module.js b/test/configCases/ignore/checkResource-two-arguments/folder-b/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/folder-b/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/checkResource-two-arguments/folder-b/normal-module.js b/test/configCases/ignore/checkResource-two-arguments/folder-b/normal-module.js new file mode 100644 index 00000000000..83268eff2a0 --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/folder-b/normal-module.js @@ -0,0 +1 @@ +module.exports = require("./ignored-module"); diff --git a/test/configCases/ignore/checkResource-two-arguments/folder-b/only-context-match-require.js b/test/configCases/ignore/checkResource-two-arguments/folder-b/only-context-match-require.js new file mode 100644 index 00000000000..29d7ef3b3dd --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/folder-b/only-context-match-require.js @@ -0,0 +1 @@ +module.exports = "should be fine"; diff --git a/test/configCases/ignore/checkResource-two-arguments/folder-b/only-context-match.js b/test/configCases/ignore/checkResource-two-arguments/folder-b/only-context-match.js new file mode 100644 index 00000000000..3625236da61 --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/folder-b/only-context-match.js @@ -0,0 +1 @@ +module.exports = require("./only-context-match-require"); diff --git a/test/configCases/ignore/checkResource-two-arguments/test.js b/test/configCases/ignore/checkResource-two-arguments/test.js new file mode 100644 index 00000000000..14e1c3be363 --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/test.js @@ -0,0 +1,20 @@ +/* globals it */ +"use strict"; + +it("should ignore resources that match resource regex and context", function() { + expect(function() { + require("./folder-b/normal-module"); + }).toThrow(); +}); + +it("should not ignore resources that match resource but not context", function() { + expect(function() { + require("./folder-a/normal-module"); + }).not.toThrow(); +}); + +it("should not ignore resources that do not match resource but do match context", function() { + expect(function() { + require("./folder-b/only-context-match"); + }).not.toThrow(); +}); diff --git a/test/configCases/ignore/checkResource-two-arguments/webpack.config.js b/test/configCases/ignore/checkResource-two-arguments/webpack.config.js new file mode 100644 index 00000000000..e7481af6cff --- /dev/null +++ b/test/configCases/ignore/checkResource-two-arguments/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const IgnorePlugin = require("../../../../").IgnorePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./test.js", + plugins: [ + new IgnorePlugin({ + checkResource(resource, context) { + return /ignored-module/.test(resource) && /folder-b/.test(context); + } + }) + ] +}; diff --git a/test/configCases/ignore/false-alias/ignored-module.js b/test/configCases/ignore/false-alias/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/false-alias/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/false-alias/normal-module.js b/test/configCases/ignore/false-alias/normal-module.js new file mode 100644 index 00000000000..f5f8a087f72 --- /dev/null +++ b/test/configCases/ignore/false-alias/normal-module.js @@ -0,0 +1 @@ +module.exports = "normal"; diff --git a/test/configCases/ignore/false-alias/test.js b/test/configCases/ignore/false-alias/test.js new file mode 100644 index 00000000000..9f4df4abad9 --- /dev/null +++ b/test/configCases/ignore/false-alias/test.js @@ -0,0 +1,14 @@ +/* globals it */ +"use strict"; + +it("should ignore ignored resources", function() { + expect(require("./ignored-module")).toEqual({}); +}); + +it("should ignore ignored resources", function() { + expect(require("ignored-module")).toEqual({}); +}); + +it("should not ignore resources that do not match", function() { + expect(require("./normal-module")).toBe("normal"); +}); diff --git a/test/configCases/ignore/false-alias/webpack.config.js b/test/configCases/ignore/false-alias/webpack.config.js new file mode 100644 index 00000000000..2ab026773a0 --- /dev/null +++ b/test/configCases/ignore/false-alias/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./test.js", + resolve: { + alias: { + "ignored-module": false, + "./ignored-module": false + } + } +}; diff --git a/test/configCases/ignore/multiple-with-externals/ignored-module1.js b/test/configCases/ignore/multiple-with-externals/ignored-module1.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/multiple-with-externals/ignored-module1.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/multiple-with-externals/ignored-module2.js b/test/configCases/ignore/multiple-with-externals/ignored-module2.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/multiple-with-externals/ignored-module2.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/multiple-with-externals/normal-module.js b/test/configCases/ignore/multiple-with-externals/normal-module.js new file mode 100644 index 00000000000..f5f8a087f72 --- /dev/null +++ b/test/configCases/ignore/multiple-with-externals/normal-module.js @@ -0,0 +1 @@ +module.exports = "normal"; diff --git a/test/configCases/ignore/multiple-with-externals/test.js b/test/configCases/ignore/multiple-with-externals/test.js new file mode 100644 index 00000000000..05abfecc6d2 --- /dev/null +++ b/test/configCases/ignore/multiple-with-externals/test.js @@ -0,0 +1,18 @@ +/* globals it */ +"use strict"; + +it("should ignore ignored resources 1", function() { + expect(function() { + require("./ignored-module1"); + }).toThrow(); +}); +it("should ignore ignored resources 2", function() { + expect(function() { + require("./ignored-module2"); + }).toThrow(); +}); +it("should not ignore resources that do not match", function() { + expect(function() { + require("./normal-module"); + }).not.toThrow(); +}); diff --git a/test/configCases/ignore/multiple-with-externals/webpack.config.js b/test/configCases/ignore/multiple-with-externals/webpack.config.js new file mode 100644 index 00000000000..b8a3a734351 --- /dev/null +++ b/test/configCases/ignore/multiple-with-externals/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const IgnorePlugin = require("../../../../").IgnorePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./test.js", + externals: { + "./normal-module": "{}" + }, + plugins: [ + new IgnorePlugin({ + resourceRegExp: /ignored-module1/ + }), + new IgnorePlugin({ + resourceRegExp: /ignored-module2/ + }) + ] +}; diff --git a/test/configCases/ignore/only-resource-context/test.js b/test/configCases/ignore/only-resource-context/test.js index 9fd0c934b91..075ec107f32 100644 --- a/test/configCases/ignore/only-resource-context/test.js +++ b/test/configCases/ignore/only-resource-context/test.js @@ -8,7 +8,7 @@ it("should ignore ignored resources", function() { expect(function() { folderBContext("ignored-module"); - }).toThrowError(); + }).toThrow(); }); it("should not ignore resources that do not match", function() { const folderBContext = function(mod) { @@ -17,5 +17,5 @@ it("should not ignore resources that do not match", function() { expect(function() { folderBContext("normal-module"); - }).not.toThrowError(); + }).not.toThrow(); }); diff --git a/test/configCases/ignore/only-resource-context/webpack.config.js b/test/configCases/ignore/only-resource-context/webpack.config.js index d766ec02490..d0210ba1683 100644 --- a/test/configCases/ignore/only-resource-context/webpack.config.js +++ b/test/configCases/ignore/only-resource-context/webpack.config.js @@ -1,8 +1,13 @@ "use strict"; -const IgnorePlugin = require("../../../../lib/IgnorePlugin"); +const IgnorePlugin = require("../../../../").IgnorePlugin; +/** @type {import("../../../../").Configuration} */ module.exports = { entry: "./test.js", - plugins: [new IgnorePlugin(/ignored-module/)] + plugins: [ + new IgnorePlugin({ + resourceRegExp: /ignored-module/ + }) + ] }; diff --git a/test/configCases/ignore/only-resource/test.js b/test/configCases/ignore/only-resource/test.js index 93ce8146bd8..e08631dfa2e 100644 --- a/test/configCases/ignore/only-resource/test.js +++ b/test/configCases/ignore/only-resource/test.js @@ -4,10 +4,10 @@ it("should ignore ignored resources", function() { expect(function() { require("./ignored-module"); - }).toThrowError(); + }).toThrow(); }); it("should not ignore resources that do not match", function() { expect(function() { require("./normal-module"); - }).not.toThrowError(); + }).not.toThrow(); }); diff --git a/test/configCases/ignore/only-resource/webpack.config.js b/test/configCases/ignore/only-resource/webpack.config.js index d766ec02490..d0210ba1683 100644 --- a/test/configCases/ignore/only-resource/webpack.config.js +++ b/test/configCases/ignore/only-resource/webpack.config.js @@ -1,8 +1,13 @@ "use strict"; -const IgnorePlugin = require("../../../../lib/IgnorePlugin"); +const IgnorePlugin = require("../../../../").IgnorePlugin; +/** @type {import("../../../../").Configuration} */ module.exports = { entry: "./test.js", - plugins: [new IgnorePlugin(/ignored-module/)] + plugins: [ + new IgnorePlugin({ + resourceRegExp: /ignored-module/ + }) + ] }; diff --git a/test/configCases/ignore/resource-and-context-contextmodule/test.js b/test/configCases/ignore/resource-and-context-contextmodule/test.js index 150d2d127e2..7b6c5c55109 100644 --- a/test/configCases/ignore/resource-and-context-contextmodule/test.js +++ b/test/configCases/ignore/resource-and-context-contextmodule/test.js @@ -8,28 +8,28 @@ it("should ignore context modules that match resource regex and context", functi expect(function() { folderBContext("normal-module"); - }).toThrowError(); + }).toThrow(); }); -it("should not ignore context modules that dont match the resource", function() { +it("should not ignore context modules that do not match the resource", function() { const folderBContext = function(mod) { require("./folder-b/" + mod); }; expect(function() { folderBContext("only-context-match"); - }).not.toThrowError(); + }).not.toThrow(); }); -it("should not ignore context modules that dont match the context", function() { +it("should not ignore context modules that do not match the context", function() { const folderBContext = function(mod) { require("./folder-a/" + mod); }; expect(function() { folderBContext("normal-module"); - }).not.toThrowError(); + }).not.toThrow(); expect(function() { folderBContext("ignored-module"); - }).not.toThrowError(); + }).not.toThrow(); }); diff --git a/test/configCases/ignore/resource-and-context-contextmodule/webpack.config.js b/test/configCases/ignore/resource-and-context-contextmodule/webpack.config.js index 7151dfc88a2..5c9f6cbe2cc 100644 --- a/test/configCases/ignore/resource-and-context-contextmodule/webpack.config.js +++ b/test/configCases/ignore/resource-and-context-contextmodule/webpack.config.js @@ -1,8 +1,14 @@ "use strict"; -const IgnorePlugin = require("../../../../lib/IgnorePlugin"); +const IgnorePlugin = require("../../../../").IgnorePlugin; +/** @type {import("../../../../").Configuration} */ module.exports = { entry: "./test.js", - plugins: [new IgnorePlugin(/ignored-module/, /folder-b/)] + plugins: [ + new IgnorePlugin({ + resourceRegExp: /ignored-module/, + contextRegExp: /folder-b/ + }) + ] }; diff --git a/test/configCases/ignore/resource-and-context/test.js b/test/configCases/ignore/resource-and-context/test.js index ae4f1ae2c67..14e1c3be363 100644 --- a/test/configCases/ignore/resource-and-context/test.js +++ b/test/configCases/ignore/resource-and-context/test.js @@ -4,17 +4,17 @@ it("should ignore resources that match resource regex and context", function() { expect(function() { require("./folder-b/normal-module"); - }).toThrowError(); + }).toThrow(); }); it("should not ignore resources that match resource but not context", function() { expect(function() { require("./folder-a/normal-module"); - }).not.toThrowError(); + }).not.toThrow(); }); it("should not ignore resources that do not match resource but do match context", function() { expect(function() { require("./folder-b/only-context-match"); - }).not.toThrowError(); + }).not.toThrow(); }); diff --git a/test/configCases/ignore/resource-and-context/webpack.config.js b/test/configCases/ignore/resource-and-context/webpack.config.js index 7151dfc88a2..5c9f6cbe2cc 100644 --- a/test/configCases/ignore/resource-and-context/webpack.config.js +++ b/test/configCases/ignore/resource-and-context/webpack.config.js @@ -1,8 +1,14 @@ "use strict"; -const IgnorePlugin = require("../../../../lib/IgnorePlugin"); +const IgnorePlugin = require("../../../../").IgnorePlugin; +/** @type {import("../../../../").Configuration} */ module.exports = { entry: "./test.js", - plugins: [new IgnorePlugin(/ignored-module/, /folder-b/)] + plugins: [ + new IgnorePlugin({ + resourceRegExp: /ignored-module/, + contextRegExp: /folder-b/ + }) + ] }; diff --git a/test/configCases/ignore/side-effects/ignored-module.js b/test/configCases/ignore/side-effects/ignored-module.js new file mode 100644 index 00000000000..4e015a52c59 --- /dev/null +++ b/test/configCases/ignore/side-effects/ignored-module.js @@ -0,0 +1 @@ +module.exports = "ignored"; diff --git a/test/configCases/ignore/side-effects/locales/a.js b/test/configCases/ignore/side-effects/locales/a.js new file mode 100644 index 00000000000..e94fef18587 --- /dev/null +++ b/test/configCases/ignore/side-effects/locales/a.js @@ -0,0 +1 @@ +export default "a"; diff --git a/test/configCases/ignore/side-effects/locales/b.js b/test/configCases/ignore/side-effects/locales/b.js new file mode 100644 index 00000000000..eff703ff465 --- /dev/null +++ b/test/configCases/ignore/side-effects/locales/b.js @@ -0,0 +1 @@ +export default "b"; diff --git a/test/configCases/ignore/side-effects/test.js b/test/configCases/ignore/side-effects/test.js new file mode 100644 index 00000000000..7975f3e1438 --- /dev/null +++ b/test/configCases/ignore/side-effects/test.js @@ -0,0 +1,15 @@ +"use strict"; + +import "ignored-module"; +import "./ignored-module"; + +it("should remove all ignored modules", async function() { + // Current module + module with runtime code to load context modules + expect(Object.keys(__webpack_modules__)).toHaveLength(2); + + const x = "a"; + const locale = (await import("./locales/" + x)).default; + + expect(locale).toBe("a"); + expect(Object.keys(__webpack_modules__)).toHaveLength(3); +}); diff --git a/test/configCases/ignore/side-effects/webpack.config.js b/test/configCases/ignore/side-effects/webpack.config.js new file mode 100644 index 00000000000..2e81f187a3f --- /dev/null +++ b/test/configCases/ignore/side-effects/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./test.js", + resolve: { + alias: { + "ignored-module": false, + "./ignored-module": false + } + }, + plugins: [new webpack.IgnorePlugin({ resourceRegExp: /(b\.js|b)$/ })], + optimization: { + sideEffects: true + } +}; diff --git a/test/configCases/inner-graph/_helpers/createTestCases.js b/test/configCases/inner-graph/_helpers/createTestCases.js new file mode 100644 index 00000000000..25ba2ed7cc2 --- /dev/null +++ b/test/configCases/inner-graph/_helpers/createTestCases.js @@ -0,0 +1,39 @@ +/** @typedef {import("../../../../").Configuration} Configuration */ + +/** + * @param {Record }>} testCases + * @returns {Configuration[]} configurations + */ +module.exports = testCases => { + /** @type {Configuration[]} */ + const configs = []; + for (const name of Object.keys(testCases)) { + const testCase = testCases[name]; + testCase.name = name; + const entry = `../_helpers/entryLoader.js?${JSON.stringify(testCase)}!`; + /** @type {{ alias: Record }} */ + const resolve = { + alias: {} + }; + let i = 0; + for (const file of Object.keys(testCase.expect)) { + resolve.alias[file] = require.resolve("./inner-file") + "?" + i++; + } + configs.push({ + name: `${name} without module concatenation`, + mode: "production", + entry, + resolve, + optimization: { + concatenateModules: false + } + }); + configs.push({ + name: `${name} with module concatenation`, + mode: "production", + entry, + resolve + }); + } + return configs; +}; diff --git a/test/configCases/inner-graph/_helpers/entryLoader.js b/test/configCases/inner-graph/_helpers/entryLoader.js new file mode 100644 index 00000000000..7e129b81030 --- /dev/null +++ b/test/configCases/inner-graph/_helpers/entryLoader.js @@ -0,0 +1,25 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const { name, expect, usedExports } = JSON.parse(this.query.slice(1)); + return [ + `if (Math.random() < 0) require(${JSON.stringify( + `../_helpers/testModuleLoader?${JSON.stringify(usedExports)}!` + )});`, + "", + ...Object.keys(expect).map((source, i) => + [ + `import { __usedExports as usedExports_${i} } from ${JSON.stringify( + source + )};`, + `it("${name} should have the correct exports used for ${source}", () => {`, + `expect(usedExports_${i}).toEqual(${JSON.stringify( + Array.isArray(expect[source]) + ? expect[source].concat(["__usedExports"]).sort() + : expect[source] + )});`, + `});`, + "" + ].join("\n") + ) + ].join("\n"); +}; diff --git a/test/configCases/inner-graph/_helpers/inner-file.js b/test/configCases/inner-graph/_helpers/inner-file.js new file mode 100644 index 00000000000..717f4e7caee --- /dev/null +++ b/test/configCases/inner-graph/_helpers/inner-file.js @@ -0,0 +1,3 @@ +export { default } from "./unknown"; +export * from "./unknown"; +export const __usedExports = __webpack_exports_info__.usedExports; diff --git a/test/configCases/inner-graph/_helpers/loader.js b/test/configCases/inner-graph/_helpers/loader.js new file mode 100644 index 00000000000..ba5913610ff --- /dev/null +++ b/test/configCases/inner-graph/_helpers/loader.js @@ -0,0 +1,7 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = source => { + return [ + source, + `export const __usedExports = __webpack_exports_info__.usedExports;` + ].join("\n"); +}; diff --git a/test/configCases/inner-graph/_helpers/testModuleLoader.js b/test/configCases/inner-graph/_helpers/testModuleLoader.js new file mode 100644 index 00000000000..7f3a64f7ac6 --- /dev/null +++ b/test/configCases/inner-graph/_helpers/testModuleLoader.js @@ -0,0 +1,10 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const usedExports = JSON.parse(this.query.slice(1)); + return [ + `import { ${usedExports + .map((/** @type {string} */ x) => `${x} as export_${x}`) + .join(", ")} } from "./module";`, + `export default [${usedExports.map((/** @type {string} */ x) => `export_${x}`).join(", ")}];` + ].join("\n"); +}; diff --git a/test/configCases/inner-graph/_helpers/unknown.js b/test/configCases/inner-graph/_helpers/unknown.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/inner-graph/altaskitButton/module.js b/test/configCases/inner-graph/altaskitButton/module.js new file mode 100644 index 00000000000..567753011d2 --- /dev/null +++ b/test/configCases/inner-graph/altaskitButton/module.js @@ -0,0 +1,227 @@ +/** + * Copy from @atlaskit/button + */ + +import _extends from 'babel-runtime/helpers/extends'; +import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of'; +import _classCallCheck from 'babel-runtime/helpers/classCallCheck'; +import _createClass from 'babel-runtime/helpers/createClass'; +import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn'; +import _inherits from 'babel-runtime/helpers/inherits'; +import _taggedTemplateLiteral from 'babel-runtime/helpers/taggedTemplateLiteral'; + +var _templateObject = _taggedTemplateLiteral(['\n ', ';\n'], ['\n ', ';\n']), + _templateObject2 = _taggedTemplateLiteral(['\n a& {\n ', ';\n }\n'], ['\n a& {\n ', ';\n }\n']), + _templateObject3 = _taggedTemplateLiteral(['&,a&,&:hover,&:active,&:focus{', '}'], ['&,a&,&:hover,&:active,&:focus{', '}']); + +import React, { Component } from 'react'; +import styled from 'styled-components'; +import { withAnalyticsEvents, withAnalyticsContext } from '@atlaskit/analytics-next'; + +import { name, version } from '../../package.json'; +import withDeprecationWarnings from './withDeprecationWarnings'; +import getButtonProps from './getButtonProps'; +import CustomComponentProxy from './CustomComponentProxy'; +import getButtonStyles from '../styled/getButtonStyles'; +import ButtonContent from '../styled/ButtonContent'; +import ButtonWrapper from '../styled/ButtonWrapper'; +import IconWrapper from '../styled/IconWrapper'; +import LoadingSpinner from '../styled/LoadingSpinner'; + +var StyledButton = styled.button(_templateObject, getButtonStyles); +StyledButton.displayName = 'StyledButton'; + +// Target the here to override a:hover specificity. +var StyledLink = styled.a(_templateObject2, getButtonStyles); +StyledLink.displayName = 'StyledLink'; + +var StyledSpan = styled.span(_templateObject, getButtonStyles); +StyledSpan.displayName = 'StyledSpan'; + +var createStyledComponent = function createStyledComponent() { + // Override pseudo-state specificity. + // This is necessary because we don't know what DOM element the custom component will render. + var component = styled( + //CustomComponentProxy is absolutely valid here, so this seems a + // problem with styled-components flow definitions + // $FlowFixMe + CustomComponentProxy)(_templateObject3, getButtonStyles); + component.displayName = 'StyledCustomComponent'; + return component; +}; + +var Button = function (_Component) { + _inherits(Button, _Component); + + function Button() { + var _ref; + + var _temp, _this, _ret; + + _classCallCheck(this, Button); + + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Button.__proto__ || _Object$getPrototypeOf(Button)).call.apply(_ref, [this].concat(args))), _this), _this.state = { + isActive: false, + isFocus: false, + isHover: false + }, _this.customComponent = null, _this.onMouseEnter = function () { + return _this.setState({ isHover: true }); + }, _this.onMouseLeave = function () { + return _this.setState({ isHover: false, isActive: false }); + }, _this.onMouseDown = function (e) { + e.preventDefault(); + _this.setState({ isActive: true }); + }, _this.onMouseUp = function () { + return _this.setState({ isActive: false }); + }, _this.onFocus = function (event) { + _this.setState({ isFocus: true }); + if (_this.props.onFocus) { + _this.props.onFocus(event); + } + }, _this.onBlur = function (event) { + _this.setState({ isFocus: false }); + if (_this.props.onBlur) { + _this.props.onBlur(event); + } + }, _this.onInnerClick = function (e) { + if (_this.props.isDisabled) { + e.stopPropagation(); + } + return true; + }, _this.getInnerRef = function (ref) { + _this.button = ref; + + if (_this.props.innerRef) _this.props.innerRef(ref); + }, _temp), _possibleConstructorReturn(_this, _ret); + } + + _createClass(Button, [{ + key: 'componentWillReceiveProps', + value: function componentWillReceiveProps(nextProps) { + if (this.props.component !== nextProps.component) { + delete this.customComponent; + } + } + }, { + key: 'componentDidMount', + value: function componentDidMount() { + if (this.props.autoFocus && this.button) { + this.button.focus(); + } + } + + /* Swallow click events when the button is disabled to prevent inner child clicks bubbling up */ + + }, { + key: 'getStyledComponent', + value: function getStyledComponent() { + if (this.props.component) { + if (!this.customComponent) { + this.customComponent = createStyledComponent(); + } + return this.customComponent; + } + + if (this.props.href) { + return this.props.isDisabled ? StyledSpan : StyledLink; + } + + return StyledButton; + } + }, { + key: 'render', + value: function render() { + var _props = this.props, + children = _props.children, + iconBefore = _props.iconBefore, + iconAfter = _props.iconAfter, + isLoading = _props.isLoading, + shouldFitContainer = _props.shouldFitContainer, + spacing = _props.spacing, + appearance = _props.appearance, + isSelected = _props.isSelected, + isDisabled = _props.isDisabled; + + + var buttonProps = getButtonProps(this); + var StyledComponent = this.getStyledComponent(); + + var iconIsOnlyChild = !!(iconBefore && !iconAfter && !children || iconAfter && !iconBefore && !children); + + return React.createElement( + StyledComponent, + _extends({ innerRef: this.getInnerRef }, buttonProps), + React.createElement( + ButtonWrapper, + { onClick: this.onInnerClick, fit: !!shouldFitContainer }, + isLoading ? React.createElement(LoadingSpinner, { + spacing: spacing, + appearance: appearance, + isSelected: isSelected, + isDisabled: isDisabled + }) : null, + iconBefore ? React.createElement( + IconWrapper, + { + isLoading: isLoading, + spacing: buttonProps.spacing, + isOnlyChild: iconIsOnlyChild + }, + iconBefore + ) : null, + children ? React.createElement( + ButtonContent, + { + isLoading: isLoading, + followsIcon: !!iconBefore, + spacing: buttonProps.spacing + }, + children + ) : null, + iconAfter ? React.createElement( + IconWrapper, + { + isLoading: isLoading, + spacing: buttonProps.spacing, + isOnlyChild: iconIsOnlyChild + }, + iconAfter + ) : null + ) + ); + } + }]); + + return Button; +}(Component); + +Button.defaultProps = { + appearance: 'default', + isDisabled: false, + isSelected: false, + isLoading: false, + spacing: 'default', + type: 'button', + shouldFitContainer: false +}; + +export var ButtonBase = Button; + +export default withAnalyticsContext({ + component: 'button', + package: name, + version: version +})(withAnalyticsEvents({ + onClick: function onClick(createAnalyticsEvent) { + var consumerEvent = createAnalyticsEvent({ + action: 'click' + }); + consumerEvent.clone().fire('atlaskit'); + + return consumerEvent; + } +})(withDeprecationWarnings(Button))); \ No newline at end of file diff --git a/test/configCases/inner-graph/altaskitButton/webpack.config.js b/test/configCases/inner-graph/altaskitButton/webpack.config.js new file mode 100644 index 00000000000..7d491ffc8b5 --- /dev/null +++ b/test/configCases/inner-graph/altaskitButton/webpack.config.js @@ -0,0 +1,60 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "babel-runtime/helpers/extends": ["default"], + "babel-runtime/core-js/object/get-prototype-of": ["default"], + "babel-runtime/helpers/classCallCheck": ["default"], + "babel-runtime/helpers/createClass": ["default"], + "babel-runtime/helpers/possibleConstructorReturn": ["default"], + "babel-runtime/helpers/inherits": ["default"], + "babel-runtime/helpers/taggedTemplateLiteral": ["default"], + react: ["Component", "default"], + "styled-components": ["default"], + "@atlaskit/analytics-next": [ + "withAnalyticsContext", + "withAnalyticsEvents" + ], + "../../package.json": ["name", "version"], + "./withDeprecationWarnings": ["default"], + "./getButtonProps": ["default"], + "../styled/getButtonStyles": ["default"], + "../styled/ButtonContent": ["default"], + "../styled/ButtonWrapper": ["default"], + "../styled/IconWrapper": ["default"], + "../styled/LoadingSpinner": ["default"], + "./CustomComponentProxy": ["default"] + } + }, + all: { + usedExports: ["default", "ButtonBase"], + expect: { + "babel-runtime/helpers/extends": ["default"], + "babel-runtime/core-js/object/get-prototype-of": ["default"], + "babel-runtime/helpers/classCallCheck": ["default"], + "babel-runtime/helpers/createClass": ["default"], + "babel-runtime/helpers/possibleConstructorReturn": ["default"], + "babel-runtime/helpers/inherits": ["default"], + "babel-runtime/helpers/taggedTemplateLiteral": ["default"], + react: ["Component", "default"], + "styled-components": ["default"], + "@atlaskit/analytics-next": [ + "withAnalyticsContext", + "withAnalyticsEvents" + ], + "../../package.json": ["name", "version"], + "./withDeprecationWarnings": ["default"], + "./getButtonProps": ["default"], + "../styled/getButtonStyles": ["default"], + "../styled/ButtonContent": ["default"], + "../styled/ButtonWrapper": ["default"], + "../styled/IconWrapper": ["default"], + "../styled/LoadingSpinner": ["default"], + "./CustomComponentProxy": ["default"] + } + } +}); diff --git a/test/configCases/inner-graph/basic/module.js b/test/configCases/inner-graph/basic/module.js new file mode 100644 index 00000000000..98a351b171b --- /dev/null +++ b/test/configCases/inner-graph/basic/module.js @@ -0,0 +1,11 @@ +import { equal as eq, deepEqual } from "./assert"; + +export function myFunction() { + function it() { + eq(1, arguments[0]); + } + deepEqual(1, 1); + it(); +} + +const bb = eq(); diff --git a/test/configCases/inner-graph/basic/webpack.config.js b/test/configCases/inner-graph/basic/webpack.config.js new file mode 100644 index 00000000000..3246abfbd34 --- /dev/null +++ b/test/configCases/inner-graph/basic/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./assert": ["equal"] + } + }, + myFunction: { + usedExports: ["myFunction"], + expect: { + "./assert": ["deepEqual", "equal"] + } + } +}); diff --git a/test/configCases/inner-graph/blockScopes/module.js b/test/configCases/inner-graph/blockScopes/module.js new file mode 100644 index 00000000000..613b551ca77 --- /dev/null +++ b/test/configCases/inner-graph/blockScopes/module.js @@ -0,0 +1,47 @@ +import { A, B, C1, C2, D1, D2, E1, E2, E3, F, G } from "./test"; + +export { a, b, c, d }; + +if (Math.random() > 0.5) { + var a = () => A; + let b = () => B; +} + +let b; + +var c = () => C1; +couldCallExportC(); +var c = () => C2; +couldCallExportC(); + +while (Math.random() > 0.5) { + let d = () => D1; +} + +while (Math.random() > 0.5) { + var d = () => D2; +} + +while (Math.random() > 0.5) { + let d = () => D1; +} + +if (false) { + E1(); +} + +export var e = true ? E2 : E3; + +export { f, g }; + +if (true) { + let inner = () => F; + + var f = () => inner(); +} + +if (true) { + const inner = () => G; + + var g = () => inner(); +} diff --git a/test/configCases/inner-graph/blockScopes/webpack.config.js b/test/configCases/inner-graph/blockScopes/webpack.config.js new file mode 100644 index 00000000000..8e5dc3f2a7e --- /dev/null +++ b/test/configCases/inner-graph/blockScopes/webpack.config.js @@ -0,0 +1,54 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./test": [] + } + }, + a: { + usedExports: ["a"], + expect: { + "./test": ["A"] + } + }, + b: { + usedExports: ["b"], + expect: { + "./test": [] + } + }, + c: { + usedExports: ["c"], + expect: { + "./test": ["C1", "C2"] + } + }, + d: { + usedExports: ["d"], + expect: { + "./test": ["D2"] + } + }, + e: { + usedExports: ["e"], + expect: { + "./test": ["E2"] + } + }, + f: { + usedExports: ["f"], + expect: { + "./test": ["F"] + } + }, + g: { + usedExports: ["g"], + expect: { + "./test": ["G"] + } + } +}); diff --git a/test/configCases/inner-graph/class/module.js b/test/configCases/inner-graph/class/module.js new file mode 100644 index 00000000000..244e9ee77e2 --- /dev/null +++ b/test/configCases/inner-graph/class/module.js @@ -0,0 +1,66 @@ +import { + deepEqual, + equal, + strictEqual, + notEqual, + maybeEqual, + definiteEqual, + getNameA, + getNameB +} from "./assert"; + +function fun1() { + deepEqual(1, 1); +} + +function fun2() { + fun1(); +} + +function fun3() { + fun2(); +} + +function fun4() { + fun3(); +} + +export class ExportCls1 { + constructor() { + fun4(); + } +} + +export class ExportCls2 { + add() { + this.name = equal; + } +} + +export class ExportCls3 { + static add = () => { + strictEqual(); + }; +} + +export class ExportCls4 { + static name = notEqual; +} + +export class ExportCls5a { + static name = getNameA(); +} + +export class ExportCls5b { + static [getNameB()] = "name"; +} + +export class ExportCls6 { + add = () => { + maybeEqual(); + }; +} + +export class ExportCls7 { + add = definiteEqual(); +} diff --git a/test/configCases/inner-graph/class/test.filter.js b/test/configCases/inner-graph/class/test.filter.js new file mode 100644 index 00000000000..aa94ec7b474 --- /dev/null +++ b/test/configCases/inner-graph/class/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = () => supportsClassFields(); diff --git a/test/configCases/inner-graph/class/webpack.config.js b/test/configCases/inner-graph/class/webpack.config.js new file mode 100644 index 00000000000..954d50511f8 --- /dev/null +++ b/test/configCases/inner-graph/class/webpack.config.js @@ -0,0 +1,79 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +const base = ["getNameA", "getNameB"]; + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./assert": [...base] + } + }, + ExportCls1: { + usedExports: ["ExportCls1"], + expect: { + "./assert": [...base, "deepEqual"] + } + }, + ExportCls2: { + usedExports: ["ExportCls2"], + expect: { + "./assert": [...base, "equal"] + } + }, + ExportCls3: { + usedExports: ["ExportCls3"], + expect: { + "./assert": [...base, "strictEqual"] + } + }, + ExportCls4: { + usedExports: ["ExportCls4"], + expect: { + "./assert": [...base, "notEqual"] + } + }, + ExportCls6: { + usedExports: ["ExportCls6"], + expect: { + "./assert": [...base, "maybeEqual"] + } + }, + ExportCls7: { + usedExports: ["ExportCls7"], + expect: { + "./assert": [...base, "definiteEqual"] + } + }, + ExportCls1_2: { + usedExports: ["ExportCls1", "ExportCls2"], + expect: { + "./assert": [...base, "deepEqual", "equal"] + } + }, + all: { + usedExports: [ + "ExportCls1", + "ExportCls2", + "ExportCls3", + "ExportCls4", + "ExportCls5a", + "ExportCls5b", + "ExportCls6", + "ExportCls7" + ], + expect: { + "./assert": [ + ...base, + "deepEqual", + "equal", + "strictEqual", + "notEqual", + "maybeEqual", + "definiteEqual" + ] + } + } +}); diff --git a/test/configCases/inner-graph/const/module.js b/test/configCases/inner-graph/const/module.js new file mode 100644 index 00000000000..e3c28697549 --- /dev/null +++ b/test/configCases/inner-graph/const/module.js @@ -0,0 +1,21 @@ +import { im1, im2 } from "any"; + +const exp1 = function() { + console.log(im1); +}; + +const exp2 = () => { + console.log(im2); +}; + +export const exp4 = () => { + exp2(); +}; + +export const expCls = class { + constructor() { + exp1(); + } +}; + +export { exp1, exp2 }; diff --git a/test/configCases/inner-graph/const/webpack.config.js b/test/configCases/inner-graph/const/webpack.config.js new file mode 100644 index 00000000000..711ba875a08 --- /dev/null +++ b/test/configCases/inner-graph/const/webpack.config.js @@ -0,0 +1,42 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + exp1: { + usedExports: ["exp1"], + expect: { + any: ["im1"] + } + }, + exp2: { + usedExports: ["exp2"], + expect: { + any: ["im2"] + } + }, + expCls: { + usedExports: ["expCls"], + expect: { + any: ["im1"] + } + }, + exp4: { + usedExports: ["exp4"], + expect: { + any: ["im2"] + } + }, + all: { + usedExports: ["exp1", "exp2", "exp4", "expCls"], + expect: { + any: ["im1", "im2"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultArrow/module.js b/test/configCases/inner-graph/defaultArrow/module.js new file mode 100644 index 00000000000..53142481fe4 --- /dev/null +++ b/test/configCases/inner-graph/defaultArrow/module.js @@ -0,0 +1,5 @@ +import { fun1, fun2 } from "any"; + +export default () => { + fun1(); +}; diff --git a/test/configCases/inner-graph/defaultArrow/webpack.config.js b/test/configCases/inner-graph/defaultArrow/webpack.config.js new file mode 100644 index 00000000000..8cf708c7bf7 --- /dev/null +++ b/test/configCases/inner-graph/defaultArrow/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + exp1: { + usedExports: ["default"], + expect: { + any: ["fun1"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultClass/module.js b/test/configCases/inner-graph/defaultClass/module.js new file mode 100644 index 00000000000..87f3755c4bd --- /dev/null +++ b/test/configCases/inner-graph/defaultClass/module.js @@ -0,0 +1,11 @@ +import { uniq } from "lodash-es"; + +export default class SomeClass { + message(...args) { + console.log(...args); + } + + unusedUniq(array) { + uniq(array); + } +} diff --git a/test/configCases/inner-graph/defaultClass/webpack.config.js b/test/configCases/inner-graph/defaultClass/webpack.config.js new file mode 100644 index 00000000000..f7cc24d1422 --- /dev/null +++ b/test/configCases/inner-graph/defaultClass/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "lodash-es": [] + } + }, + all: { + usedExports: ["default"], + expect: { + "lodash-es": ["uniq"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultExpression/module.js b/test/configCases/inner-graph/defaultExpression/module.js new file mode 100644 index 00000000000..32a818afc75 --- /dev/null +++ b/test/configCases/inner-graph/defaultExpression/module.js @@ -0,0 +1,3 @@ +import { var1, fun2 } from "any"; + +export default var1 + fun2(); diff --git a/test/configCases/inner-graph/defaultExpression/webpack.config.js b/test/configCases/inner-graph/defaultExpression/webpack.config.js new file mode 100644 index 00000000000..670a8371590 --- /dev/null +++ b/test/configCases/inner-graph/defaultExpression/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: ["fun2", "var1"] + } + }, + all: { + usedExports: ["default"], + expect: { + any: ["fun2", "var1"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultFunction/module.js b/test/configCases/inner-graph/defaultFunction/module.js new file mode 100644 index 00000000000..71ce87520dc --- /dev/null +++ b/test/configCases/inner-graph/defaultFunction/module.js @@ -0,0 +1,5 @@ +import { fun1, fun2 } from "any"; + +export default function() { + fun1(); +} diff --git a/test/configCases/inner-graph/defaultFunction/webpack.config.js b/test/configCases/inner-graph/defaultFunction/webpack.config.js new file mode 100644 index 00000000000..52b9cdd8656 --- /dev/null +++ b/test/configCases/inner-graph/defaultFunction/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + default: { + usedExports: ["default"], + expect: { + any: ["fun1"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultFunctionExpression/module.js b/test/configCases/inner-graph/defaultFunctionExpression/module.js new file mode 100644 index 00000000000..cb4988d7cfa --- /dev/null +++ b/test/configCases/inner-graph/defaultFunctionExpression/module.js @@ -0,0 +1,5 @@ +import { fun1, fun2 } from "any"; + +export default (function() { + fun1(); +}); diff --git a/test/configCases/inner-graph/defaultFunctionExpression/webpack.config.js b/test/configCases/inner-graph/defaultFunctionExpression/webpack.config.js new file mode 100644 index 00000000000..52b9cdd8656 --- /dev/null +++ b/test/configCases/inner-graph/defaultFunctionExpression/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + default: { + usedExports: ["default"], + expect: { + any: ["fun1"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultId/module.js b/test/configCases/inner-graph/defaultId/module.js new file mode 100644 index 00000000000..59d70ff3a84 --- /dev/null +++ b/test/configCases/inner-graph/defaultId/module.js @@ -0,0 +1,7 @@ +import { fun1, fun2 } from "any"; + +function fun3() { + fun1(); +} + +export default fun3; diff --git a/test/configCases/inner-graph/defaultId/webpack.config.js b/test/configCases/inner-graph/defaultId/webpack.config.js new file mode 100644 index 00000000000..52b9cdd8656 --- /dev/null +++ b/test/configCases/inner-graph/defaultId/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + default: { + usedExports: ["default"], + expect: { + any: ["fun1"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultNamedFunction/module.js b/test/configCases/inner-graph/defaultNamedFunction/module.js new file mode 100644 index 00000000000..cf0401ee216 --- /dev/null +++ b/test/configCases/inner-graph/defaultNamedFunction/module.js @@ -0,0 +1,5 @@ +import { fun1, fun2 } from "any"; + +export default function withName() { + fun1(); +} diff --git a/test/configCases/inner-graph/defaultNamedFunction/webpack.config.js b/test/configCases/inner-graph/defaultNamedFunction/webpack.config.js new file mode 100644 index 00000000000..52b9cdd8656 --- /dev/null +++ b/test/configCases/inner-graph/defaultNamedFunction/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + default: { + usedExports: ["default"], + expect: { + any: ["fun1"] + } + } +}); diff --git a/test/configCases/inner-graph/defaultNamedFunctionExpression/module.js b/test/configCases/inner-graph/defaultNamedFunctionExpression/module.js new file mode 100644 index 00000000000..59a0406ac66 --- /dev/null +++ b/test/configCases/inner-graph/defaultNamedFunctionExpression/module.js @@ -0,0 +1,5 @@ +import { fun1, fun2 } from "any"; + +export default (function withName() { + fun1(); +}); diff --git a/test/configCases/inner-graph/defaultNamedFunctionExpression/webpack.config.js b/test/configCases/inner-graph/defaultNamedFunctionExpression/webpack.config.js new file mode 100644 index 00000000000..52b9cdd8656 --- /dev/null +++ b/test/configCases/inner-graph/defaultNamedFunctionExpression/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + default: { + usedExports: ["default"], + expect: { + any: ["fun1"] + } + } +}); diff --git a/test/configCases/inner-graph/eval-bailout/module.js b/test/configCases/inner-graph/eval-bailout/module.js new file mode 100644 index 00000000000..ce9787c2da5 --- /dev/null +++ b/test/configCases/inner-graph/eval-bailout/module.js @@ -0,0 +1,15 @@ +import { a, b, c } from "./test"; + +export function x() { + a(); +} + +export function y() { + b(); + eval("x()"); +} + +export function z() { + c(); + y(); +} diff --git a/test/configCases/inner-graph/eval-bailout/webpack.config.js b/test/configCases/inner-graph/eval-bailout/webpack.config.js new file mode 100644 index 00000000000..f140b4f06b0 --- /dev/null +++ b/test/configCases/inner-graph/eval-bailout/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./test": [] + } + }, + nonEval: { + usedExports: ["x"], + expect: { + "./test": ["a"] + } + }, + directEval: { + usedExports: ["y"], + expect: { + "./test": ["a", "b", "c"] + } + }, + indirectEval: { + usedExports: ["z"], + expect: { + "./test": ["a", "b", "c"] + } + } +}); diff --git a/test/configCases/inner-graph/export/module.js b/test/configCases/inner-graph/export/module.js new file mode 100644 index 00000000000..0de8b986b80 --- /dev/null +++ b/test/configCases/inner-graph/export/module.js @@ -0,0 +1,3 @@ +export { default } from "./components/Button"; +export { default as ButtonGroup } from "./components/ButtonGroup"; +export { themeNamespace } from "./theme"; diff --git a/test/configCases/inner-graph/export/webpack.config.js b/test/configCases/inner-graph/export/webpack.config.js new file mode 100644 index 00000000000..9b3f370495a --- /dev/null +++ b/test/configCases/inner-graph/export/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./components/Button": [], + "./components/ButtonGroup": [], + "./theme": [] + } + }, + all: { + usedExports: ["default", "ButtonGroup", "themeNamespace"], + expect: { + "./components/Button": ["default"], + "./components/ButtonGroup": ["default"], + "./theme": ["themeNamespace"] + } + } +}); diff --git a/test/configCases/inner-graph/importAll/module.js b/test/configCases/inner-graph/importAll/module.js new file mode 100644 index 00000000000..81dad698c44 --- /dev/null +++ b/test/configCases/inner-graph/importAll/module.js @@ -0,0 +1,16 @@ +/** + * @fileoverview This file was generated by the Angular template compiler. Do not edit. + * + * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes} + * tslint:disable + */ +import * as i0 from "@angular/core"; +import * as i1 from "./app.component"; +var styles_AppComponent = []; +var RenderType_AppComponent = i0.ɵcrt({ encapsulation: 2, styles: styles_AppComponent, data: {} }); +export { RenderType_AppComponent as RenderType_AppComponent }; +export function View_AppComponent_0(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 1, "h1", [], null, null, null, null, null)), (_l()(), i0.ɵted(-1, null, ["Hello World"]))], null, null); } +export function View_AppComponent_Host_0(_l) { return i0.ɵvid(0, [(_l()(), i0.ɵeld(0, 0, null, null, 1, "app-root", [], null, null, null, View_AppComponent_0, RenderType_AppComponent)), i0.ɵdid(1, 49152, null, 0, i1.AppComponent, [], null, null)], null, null); } +var AppComponentNgFactory = i0.ɵccf("app-root", i1.AppComponent, View_AppComponent_Host_0, {}, {}, []); +export { AppComponentNgFactory as AppComponentNgFactory }; +//# sourceMappingURL=app.component.ngfactory.js.map \ No newline at end of file diff --git a/test/configCases/inner-graph/importAll/webpack.config.js b/test/configCases/inner-graph/importAll/webpack.config.js new file mode 100644 index 00000000000..b3275c0fe55 --- /dev/null +++ b/test/configCases/inner-graph/importAll/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "@angular/core": ["ɵccf", "ɵcrt", "ɵdid", "ɵeld", "ɵted", "ɵvid"], + "./app.component": ["AppComponent"] + } + }, + AppComponentNgFactory: { + usedExports: ["AppComponentNgFactory"], + expect: { + "@angular/core": ["ɵccf", "ɵcrt", "ɵdid", "ɵeld", "ɵted", "ɵvid"], + "./app.component": ["AppComponent"] + } + } +}); diff --git a/test/configCases/inner-graph/issue-11678/module.js b/test/configCases/inner-graph/issue-11678/module.js new file mode 100644 index 00000000000..aef4899802b --- /dev/null +++ b/test/configCases/inner-graph/issue-11678/module.js @@ -0,0 +1,3105 @@ +import { ResizeObserver as RO } from "resize-observer"; +import * as employeeData from "Source_Data/employee"; +import * as servicesData from "Source_Data/services"; +import * as SplitViewPage from "Source_Framework/splitview/page"; +import * as SplitViewMenu from "Source_Framework/splitview/menu"; +import { + TC as pageTC, + getDeleteDialogText +} from "Source_Framework/splitview/text"; +import * as UiListPicker from "Source_Framework/uilistpicker/UiListPicker"; +import { CookieStorage } from "Source_ODS/cookiestorage"; +import { removeTextEditor } from "Source_Framework/uirichtextedit"; +import { UiElementCheckbox, UiElementRadio } from "Source_Framework/uielement"; +import { switchButtonIcon } from "Source_ODS/UiButton/icon"; +import { setButtonText } from "Source_ODS/UiButton/text"; +import { replacePage } from "Source_Framework/pagelinks"; +import { getSession } from "Source_ODS/ods"; +import { UiButton, UiSelectButton } from "Source_ODS/UiButton"; +import { buttonClasses } from "Source_Framework/defaultButtons"; +import { UiForm } from "Source_Framework/uiform"; +import * as Breadcrumb from "Source_Framework/breadcrumb"; +import * as _ from "Source_ODS/lodash"; +import { DomElement } from "Source_ODS/DomElement"; +import { getUrlParameter, setUrlParameter } from "Source_ODS/url"; +import { addFixedTooltip } from "Source_ODS/tooltip"; +import { showLoadingWarning, showWarningDialog } from "Source_ODS/ui"; +import { checkIsNonemptyObject, isString, isUndefined } from "Source_ODS/types"; +import { UiDialog, confirmDialog } from "Source_ODS/UiDialog"; +import { ModuleNameEnum } from "Source_Framework/common/moduleDispatcher"; +import { showEmployeeAssignDialog } from "Source_Framework/common/employeeassignment"; +import { buttonPdfPreview } from "Source_Framework/common/pdf_preview"; +import { createTaskProgress } from "Source_Framework/common/taskprogress"; +import { CALLBACK_EVENTS } from "Source_Framework/uitable"; +import { + getFilterPara, + saveUniversalTableLayout, + loadDefaultLayout, + saveDefaultLayoutForAgency +} from "Source_Framework/backend/universalData"; +import { selectColumns } from "Source_Framework/common/columnsDialog"; +import { STATUS } from "Source_Framework/backend/jsonData"; +import { + buttonStatusChange, + HeaderDataEnum +} from "Source_Framework/common/statuschange"; +import { genericJobSelectionDialog } from "Source_Framework/common/las_mod_jobselection"; +import { TC } from "./text"; +import { BEC } from "./bec"; +import { POSITIONTYPES } from "./positionTypes"; +import { SETTINGS } from "./settings"; +import * as preferences from "./preferences"; +import * as privileges from "./privileges"; +import * as buttons from "./buttons"; +import * as form from "./form"; +import * as formHelper from "./formHelper"; +import { createTableWidget, createTableWidgetForManualSort } from "./table"; +import { setTechnicalTextButton } from "./techText"; +import { openDialogForNewPositionSi } from "./addPositionToSi"; +import { buttonInsertService, insertServiceDialog } from "./ciPosFromJob"; +import { shiftPosition } from "./shiftPosition"; +import { autoSumsDialog } from "./autoSums"; +import { defineLayoutDialog } from "./defineLayout"; +import { buttonInsertFromTemplate, setInsertData } from "./insertFromTemplate"; +import { buttonMove, movePosition } from "./movePosition"; +import { + buttonCopySelect, + duplicatePosition, + copyPosition, + buttonCopyFromOrderToJob, + copyFromOrderToJob +} from "./copy"; +import { convertData } from "./save"; +import { buttonCreateOrder, onCreateOrder } from "./createOrder"; +import { + buttonConnectOrderPos, + buttonCopyJobToOrderPos, + jobToOrderPos +} from "./orderPosFromJobPos"; +import { showNchInfoDialog } from "./nchInfoDialog"; +import { urlGotoSiFromJobService } from "Source_Modules/las_mod_siheader/url"; +import { TITLE as SITITLE } from "Source_Modules/las_mod_siheader/bec"; +import { TITLE as CETITLE } from "Source_Modules/las_mod_ceheader/bec"; +import { TITLE as ORDERTITLE } from "Source_Modules/las_mod_order/bec"; +import { TITLE as CITITLE } from "Source_Modules/las_mod_ciheader/bec"; + +const _positionSettings = { + parent: { + settings: {}, + headerStatus: "" + }, + settings: { + [SETTINGS.CREATABLE]: false, + [SETTINGS.DELETABLE]: false + } + }, + _tableOverlayClass = ".tableintableoverlay", + _tableOverlayOffsetLeft = 7, + _showTableInElement = ".tablecont", + _pluginObj = {}; +const resizeObserverInstance = new RO(entries => { + entries.forEach(entry => { + const parentWidth = entry.contentRect.width; + const parentheight = entry.contentRect.height; + const newWidth = parentWidth - _tableOverlayOffsetLeft + 6; + const newHeight = parentheight; + const overlayElement = $(_tableOverlayClass); + overlayElement.css({ width: newWidth, height: newHeight }); + overlayElement.find("#positiontable").css({ + width: newWidth - 2, + height: + parentheight - + overlayElement.find(".title").getHeight() - + _tableOverlayOffsetLeft + }); + }); +}); +let _options; +let _parentModuleSettings, + _parentTableSelection, + _parentTableDataId; +let _isFormInDialog = false, + _isFormInDialogSelector = null, + _isFormInDialogJobPK = null; +let _staticData, + _generalDataEmplLists, + _tableObject, + _tableData, + _tableSelectionPosNo = null, + _tableSelectionJobNo = null, + _tableContainerId = "", + _previousTableTitle = "", + _formIdName, + _formObject, + _formData, + _formEvent, + _isNewDataset = false, + progressbar, + addedBreadcrumbId; +let _tableLayoutInfo = { + moduleName: "", + privAllAgencies: false, + privSaveGlobally: false +}; +let _reloadTable; +let prevRows = null; +let triggerSelectionChangeEvent = true; +async function onReloadTable() { + await _updateTableContent(); +} +async function onExport() { + await _tableObject.toExcel(); +} +async function onConnectPosition() { + const hPk = getPKfromModule(); + const ok = await openDialogForNewPositionSi( + { siBookId: hPk.idSiBook, siHeaderId: hPk.siHeaderId }, + _staticData + ); + if (ok) { + await _updateTableContent(); + } +} +async function onSortPosition() { + await getSortDialog(); +} +async function onSortManual() { + const isManualSort = _tableObject.isSortColumnAvailable(); + const { canBeModified = true } = _positionSettings.parent.settings; + const configuration = _tableObject.getConfiguration(); + const { columns } = configuration; + if (isManualSort) { + _tableObject.clearFilter(); + } + await doCreateAndShowTableWidget( + columns, + _getModuleName(), + canBeModified, + !isManualSort + ); +} +function showSortManualButtonState() { + const isManualSort = _tableObject.isSortColumnAvailable(); + const className = "." + buttons.CLASSNAME.sortManual; + if (isManualSort) { + switchButtonIcon(className, "btn-img-sortManual", "btn-img-sortPrint"); + setButtonText(className, TC.printSort); + } else { + switchButtonIcon(className, "btn-img-sortPrint", "btn-img-sortManual"); + setButtonText(className, TC.manualSort); + } +} +function onGoToSi() { + const selection = _tableObject.getSelection(); + if (selection.length > 0) { + const hPk = getPKfromModule(); + replacePage( + urlGotoSiFromJobService({ + jobId: hPk.jobid, + posNos: _getListofSelectedRow() + }) + ); + } else { + showLoadingWarning(TC.selectionEmpty); + } +} +async function onShiftPosition(state) { + const pk = getPKFromSelection(); + if (pk !== null) { + const ok = await shiftPosition(state, pk); + if (ok) { + await _updateTableContent(); + } + } else { + showLoadingWarning(TC.selectionEmpty); + } +} +async function onInsertFromTemplateDialog() { + if (_parentTableSelection) { + await setInsertData(_getModuleName(), _parentTableSelection); + await _updateTableContent(); + } +} +async function onCopy(toTargetModule = null) { + if (_parentTableSelection) { + const refresh = await copyPosition( + _getModuleName(), + _parentTableSelection, + _staticData, + _getListofSelectedRow(), + toTargetModule + ); + if (refresh) { + await _updateTableContent(); + } + } +} +async function onCopyToJob() { + await onCopy(ModuleNameEnum.JOB); +} +async function onCopyToCe() { + await onCopy(ModuleNameEnum.CEHEADER); +} +async function onDuplicate() { + if (_parentTableSelection) { + const refresh = duplicatePosition( + _getModuleName(), + _parentTableSelection, + _getListofSelectedRow() + ); + if (refresh) { + await _updateTableContent(); + } + } +} +function onCopyList() { + return [ + ...(_getModuleName() === ModuleNameEnum.JOB + ? [ + { + rowId: "duplicateInJob", + rowText: TC.duplicateInJob, + rowListener: onDuplicate + } + ] + : []), + { + rowId: "copyToOtherJob", + rowText: TC.copyToOtherJob, + rowListener: onCopyToJob + }, + { rowId: "copyToCe", rowText: TC.copyToCe, rowListener: onCopyToCe } + ]; +} +async function onCopyFromOrderToJob() { + if (_parentTableSelection) { + const id = _parentTableSelection.orde_orderid; + await copyFromOrderToJob(id, _staticData, _getListofSelectedRow()); + await _updateTableContent(); + } +} +async function onMove() { + if (_parentTableSelection) { + const id = _parentTableSelection.job_jobid; + const ok = await movePosition( + _getModuleName(), + id, + 1, + 1, + _parentTableSelection, + _getListofSelectedRow(), + _staticData + ); + if (ok) { + await _updateTableContent(); + } + } +} +async function onDefineLayout() { + const pk = getPKFromSelection(); + if (pk !== null) { + const ok = await defineLayoutDialog(pk); + if (ok) { + await _updateTableContent(); + } + } +} +async function onJobToOrderPos(withMultipleSelection) { + const hPk = getPKfromModule(); + await jobToOrderPos( + hPk.orderId, + _tableObject.getSelection(), + withMultipleSelection + ); + await _updateTableContent(); +} +function onStatusChange() { + const selection = _tableObject.getSelection(); + const hPk = getPKfromModule(); + return { + idSiBook: hPk.idSiBook, + siHeaderId: hPk.siHeaderId, + theJobID: selection.map(obj => obj.jpos_jobid), + thePosNo: selection.map(obj => obj.jpos_posno), + theHeaderType: selection.map(obj => obj.jpos_headertype), + theSubPosNo: selection.map(obj => obj.jpos_subposno), + multiple: selection.length > 1 + }; +} +async function onAutoSums() { + if (_parentTableSelection) { + await autoSumsDialog( + _getModuleName(), + _parentTableSelection, + _staticData.lists.listPosTypesAutoSum + ); + await _updateTableContent(); + } +} +async function onInsertService() { + const hPk = getPKfromModule(); + const data = { + ciBookId: hPk.ciBookId, + ciHeaderId: hPk.ciHeaderId + }; + const ok = await insertServiceDialog(data); + if (ok) { + await _updateTableContent(); + } +} +function _buttonConnectPosition(callback) { + return new UiButton( + TC.connectSIPosButtonText, + buttons.CLASSNAME.siConnectPosition, + callback, + "btn-img-connectSIPos" + ); +} +function _buttonSortPosition(callback) { + return new UiButton( + TC.automaticSort, + buttons.CLASSNAME.sortPosition, + callback, + "btn-img-sortPos" + ); +} +function _buttonSortManual(callback) { + return new UiButton( + TC.manualSort, + buttons.CLASSNAME.sortManual, + callback, + "btn-img-sortManual" + ); +} +function gotoList() { + return [{ rowId: "gotoSi", rowText: SITITLE, rowListener: onGoToSi }]; +} +function _buttonShiftUpPosition(callback) { + return new UiButton( + TC.hierarchyUp, + buttons.CLASSNAME.shiftUpPosition, + callback, + "btn-img-shiftUpPos" + ); +} +function _buttonShiftDownPosition(callback) { + return new UiButton( + TC.hierarchyDown, + buttons.CLASSNAME.shiftDownPosition, + callback, + "btn-img-shiftDownPos" + ); +} +function _buttonDefineLayout(callback) { + return new UiButton( + TC.setLayout, + buttons.CLASSNAME.defineLayout, + callback, + "btn-img-defineLayoutPos" + ); +} +function _buttonAutoSums(callback) { + return new UiButton( + TC.generateTotals, + buttons.CLASSNAME.autoSums, + callback, + "btn-img-createsubtotals" + ); +} +async function markPositions(data) { + _tableObject.clearRowAttributes(); + if (data !== null && data.jpos_postype === POSITIONTYPES.SUBTOTAL) { + const para = { + theJobID: data.jpos_jobid, + theHeaderType: data.jpos_headertype, + thePosNo: data.jpos_posno, + theSubPosNo: data.jpos_subposno + }; + const subtotals = await servicesData.getPositionsInSubtotal(para); + if (subtotals !== null) { + const filter = subtotals.map(posno => ({ jpos_posno: posno })); + _tableObject.setRowAttributes(filter, { backgroundColor: "aquamarine" }); + } + } +} +function markPositionsTypeText(data) { + _tableObject.clearRowSelectionColor(); + if (data !== null && data.jpos_postype === POSITIONTYPES.TEXT) { + const filter = [ + { + jpos_posno: data.jpos_posno + } + ]; + _tableObject.setRowSelectionColor(filter, "lavender"); + } +} +async function _createToolbarTable(setEvent) { + const data = _getDataFromSelectedEntry(); + const toolbar = new SplitViewMenu.Toolbar("table"); + console.log("_createToolbarTable(", setEvent, ")"); + switch (setEvent) { + + case buttons.STATE.initialize: + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + toolbar.add(_buttonSortPosition(onSortPosition)); + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CREATEFROMTEMPL + ) + ) { + toolbar.add(buttonInsertFromTemplate(onInsertFromTemplateDialog)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) && + getSelectionCount() > 0 + ) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + case ModuleNameEnum.SIHEADER: + + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.SICONNECTPOSITION + ) && + _positionSettings.settings[SETTINGS.CREATABLE] + ) { + toolbar.add(_buttonConnectPosition(onConnectPosition)); + } + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + case ModuleNameEnum.CEHEADER: + toolbar.add(_buttonSortPosition(onSortPosition)); + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) && + getSelectionCount() > 0 + ) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CREATEFROMTEMPL + ) + ) { + toolbar.add(buttonInsertFromTemplate(onInsertFromTemplateDialog)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.AUTOSUMS) + ) { + toolbar.add(_buttonAutoSums(onAutoSums)); + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.CEHEADER, { + cehe_ceid: getPKfromModule().ceId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + case ModuleNameEnum.ORDER: + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.COPYORDERPOS + ) && + _positionSettings.settings[SETTINGS.CREATABLE] + ) { + toolbar.add( + buttonCopyJobToOrderPos(onJobToOrderPos.bind(this, true)) + ); + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.ORDER, { + orde_orderid: getPKfromModule().orderId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + case ModuleNameEnum.CIHEADER: + { + const s = { + canBeCreated: + _positionSettings.settings[SETTINGS.CREATABLE] || false + }; + if (s.canBeCreated) { + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.MODIFY + ) + ) { + toolbar.add(_buttonSortPosition(onSortPosition)); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CREATE + ) + ) { + toolbar.add(buttonInsertService(onInsertService)); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.MODIFY + ) + ) { + toolbar.add(_buttonAutoSums(onAutoSums)); + } + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.CIHEADER, { + cihe_bookid: getPKfromModule().ciBookId, + cihe_ciheaderid: getPKfromModule().ciHeaderId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + } + break; + default: + break; + } + break; + + case buttons.STATE.jobPositionTableMenu: + toolbar.add(_buttonSortPosition(onSortPosition)); + toolbar.add(_buttonShiftUpPosition(onShiftPosition.bind(this, 0))); + toolbar.add(_buttonShiftDownPosition(onShiftPosition.bind(this, 1))); + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CREATEFROMTEMPL + ) + ) { + toolbar.add(buttonInsertFromTemplate(onInsertFromTemplateDialog)); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.COPYPOS)) { + toolbar.add(buttonCopySelect(onCopyList())); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MOVEPOS)) { + toolbar.add(buttonMove(onMove)); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY)) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.CREATEORDER) + ) { + const selectedIds = _.map(_tableObject.getSelection(), "jpos_postype"); + + if ( + _.includes(selectedIds, POSITIONTYPES.EXTERNAL) || + _.includes(selectedIds, POSITIONTYPES.MEDIA) + ) { + const hPk = getPKfromModule(); + toolbar.add( + buttonCreateOrder( + onCreateOrder.bind(this, _getListofSelectedRow(), [hPk.jobid]) + ) + ); + } + } + + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.SIMODULE)) { + + if (_tableObject.getOptions().multipleSelection) { + const selectedIds = _.map( + _tableObject.getSelection(), + "jpos_postype" + ); + + if ( + _.includes(selectedIds, POSITIONTYPES.EXTERNAL) || + _.includes(selectedIds, POSITIONTYPES.MEDIA) + ) { + toolbar.addDefaultGoto(gotoList()); + } + } else { + if ( + data !== null && + (data.jpos_postype === POSITIONTYPES.EXTERNAL || + data.jpos_postype === POSITIONTYPES.MEDIA) + ) { + toolbar.addDefaultGoto(gotoList()); + } + } + } + toolbar.add(_buttonSortManual(onSortManual), "right"); + await markPositions(data); + markPositionsTypeText(data); + break; + case buttons.STATE.jobPositionTableMenuMultiple: + toolbar.add(_buttonSortPosition(onSortPosition)); + toolbar.add(_buttonShiftUpPosition(onShiftPosition.bind(this, 0))); + toolbar.add(_buttonShiftDownPosition(onShiftPosition.bind(this, 1))); + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CREATEFROMTEMPL + ) + ) { + toolbar.add(buttonInsertFromTemplate(onInsertFromTemplateDialog)); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.COPYPOS)) { + toolbar.add(buttonCopySelect(onCopyList())); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MOVEPOS)) { + toolbar.add(buttonMove(onMove)); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY)) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.CREATEORDER) + ) { + const selectedIds = _.map(_tableObject.getSelection(), "jpos_postype"); + if ( + _.includes(selectedIds, POSITIONTYPES.EXTERNAL) || + _.includes(selectedIds, POSITIONTYPES.MEDIA) + ) { + const hPk = getPKfromModule(); + toolbar.add( + buttonCreateOrder( + onCreateOrder.bind(this, _getListofSelectedRow(), [hPk.jobid]) + ) + ); + } + } + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + + case buttons.STATE.siPositionTableMenu: + toolbar.add( + buttonStatusChange(HeaderDataEnum.SIPOS, onStatusChange, onReloadTable) + ); + + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.SICONNECTPOSITION + ) && + _positionSettings.settings[SETTINGS.CREATABLE] + ) { + toolbar.add(_buttonConnectPosition(onConnectPosition)); + } + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + case buttons.STATE.siPositionTableMenuMultiple: + toolbar.add( + buttonStatusChange(HeaderDataEnum.SIPOS, onStatusChange, onReloadTable) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + + case buttons.STATE.cePositionTableMenu: + case buttons.STATE.cePositionTableMenuMultiple: + toolbar.add(_buttonSortPosition(onSortPosition)); + toolbar.add(_buttonShiftUpPosition(onShiftPosition.bind(this, 0))); + toolbar.add(_buttonShiftDownPosition(onShiftPosition.bind(this, 1))); + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CREATEFROMTEMPL + ) + ) { + toolbar.add(buttonInsertFromTemplate(onInsertFromTemplateDialog)); + } + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.COPYPOS)) { + + toolbar.add(buttonCopySelect(onCopyList())); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) && + getSelectionCount() > 0 + ) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.AUTOSUMS) && + getSelectionCount() > 0 + ) { + toolbar.add(_buttonAutoSums(onAutoSums)); + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.CEHEADER, { + cehe_ceid: getPKfromModule().ceId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + await markPositions(data); + markPositionsTypeText(data); + break; + + case buttons.STATE.orderPositionTableMenu: + toolbar.add(_buttonShiftUpPosition(onShiftPosition.bind(this, 0))); + toolbar.add(_buttonShiftDownPosition(onShiftPosition.bind(this, 1))); + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY)) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.ORDERCOPYTOJOB + ) + ) { + toolbar.add(buttonCopyFromOrderToJob(onCopyFromOrderToJob)); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.CONNECTORDERPOS + ) + ) { + toolbar.add(buttonConnectOrderPos(onJobToOrderPos.bind(this, false))); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.COPYORDERPOS + ) && + _positionSettings.settings[SETTINGS.CREATABLE] + ) { + toolbar.add(buttonCopyJobToOrderPos(onJobToOrderPos.bind(this, true))); + } + + + + + + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.ORDER, { + orde_orderid: getPKfromModule().orderId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + case buttons.STATE.orderPositionTableMenuMultiple: + if (privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY)) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + } + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.ORDERCOPYTOJOB + ) + ) { + toolbar.add(buttonCopyFromOrderToJob(onCopyFromOrderToJob)); + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.ORDER, { + orde_orderid: getPKfromModule().orderId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + break; + + case buttons.STATE.ciPositionTableMenu: + { + const s = { + canBeCreated: _positionSettings.settings[SETTINGS.CREATABLE] || false + }; + if (s.canBeCreated) { + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) + ) { + toolbar.add(_buttonSortPosition(onSortPosition)); + toolbar.add(_buttonShiftUpPosition(onShiftPosition.bind(this, 0))); + toolbar.add( + _buttonShiftDownPosition(onShiftPosition.bind(this, 1)) + ); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.CREATE) + ) { + toolbar.add(buttonInsertService(onInsertService)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) + ) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + toolbar.add(_buttonAutoSums(onAutoSums)); + } + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.CIHEADER, { + cihe_bookid: getPKfromModule().ciBookId, + cihe_ciheaderid: getPKfromModule().ciHeaderId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + } + break; + case buttons.STATE.ciPositionTableMenuMultiple: + { + const s = { + canBeCreated: _positionSettings.settings[SETTINGS.CREATABLE] || false + }; + if (s.canBeCreated) { + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) + ) { + toolbar.add(_buttonSortPosition(onSortPosition)); + toolbar.add(_buttonShiftUpPosition(onShiftPosition.bind(this, 0))); + toolbar.add( + _buttonShiftDownPosition(onShiftPosition.bind(this, 1)) + ); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.CREATE) + ) { + toolbar.add(buttonInsertService(onInsertService)); + } + if ( + privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY) + ) { + toolbar.add(_buttonDefineLayout(onDefineLayout)); + toolbar.add(_buttonAutoSums(onAutoSums)); + } + } + toolbar.addSpacer(); + toolbar.add( + buttonPdfPreview(ModuleNameEnum.CIHEADER, { + cihe_bookid: getPKfromModule().ciBookId, + cihe_ciheaderid: getPKfromModule().ciHeaderId + }) + ); + toolbar.add(_buttonSortManual(onSortManual), "right"); + } + break; + default: + throw new Error('Invalid event "' + setEvent + '"'); + } + const multipleSelection = _tableObject.getOptions().multipleSelection; + const hasFilter = _tableObject.options.hasFilter; + toolbar.addDefaultTableOptions( + { + selectAll: multipleSelection + ? () => { + _tableObject.selectAll(); + if (_tableObject.eventHandler[CALLBACK_EVENTS.SELECTIONCHANGED]) { + _tableObject.eventHandler[CALLBACK_EVENTS.SELECTIONCHANGED]( + _tableObject.getSelection() + ); + } + } + : null, + clearAllFilters: hasFilter + ? () => { + _tableObject.clearFilter(); + } + : null, + selectColumns: async () => { + if (_tableLayoutInfo.moduleName !== "") { + const ok = await selectColumns( + _tableLayoutInfo.moduleName, + _tableObject + ); + if (ok) { + await onReloadTable(); + } + } + }, + adjustColumnSize: _tableObject.adjustColumnSize.bind(_tableObject), + loadDefaultLayout: async () => { + if (_tableLayoutInfo.moduleName !== "") { + const ok = await loadDefaultLayout(_tableLayoutInfo.moduleName); + if (ok) { + await onReloadTable(); + } + } + }, + saveDefaultLayout: _tableLayoutInfo.privSaveGlobally + ? async () => { + if (_tableLayoutInfo.moduleName !== "") { + await saveDefaultLayoutForAgency( + _tableLayoutInfo.moduleName, + _tableObject.getConfiguration() + ); + } + } + : null, + exportTable: onExport + }, + "right" + ); + toolbar.addDefaultReload(onReloadTable, "right"); + toolbar.render(); + showSortManualButtonState(); +} +export async function getDataAndShowTable( + name, + parentTableSelection, + parentSettings, + reloadTable, + serviceID +) { + let getListPK; + _reloadTable = reloadTable; + _parentTableSelection = parentTableSelection; + if (parentTableSelection === null) { + throw new Error("No row selected"); + } + setPKfromModule(parentTableSelection); + removeTextEditor(); + switch (name) { + case ModuleNameEnum.SIHEADER: + { + const hPk = getPKfromModule(); + getListPK = { + theSIBookID: hPk.idSiBook, + theSIHeaderID: hPk.siHeaderId + }; + } + break; + case ModuleNameEnum.CEHEADER: + { + const hPk = getPKfromModule(); + getListPK = { theCEID: hPk.ceId }; + } + break; + case ModuleNameEnum.JOB: + { + const hPk = getPKfromModule(); + getListPK = { theJobID: hPk.jobid }; + } + break; + case ModuleNameEnum.ORDER: + { + const hPk = getPKfromModule(); + getListPK = { theOrderID: hPk.orderId }; + } + break; + case ModuleNameEnum.CIHEADER: + { + const hPk = getPKfromModule(); + getListPK = { ciBookId: hPk.ciBookId, ciHeaderId: hPk.ciHeaderId }; + } + break; + default: + throw new Error(`Invalid name "${name}`); + } + let settingsData = { + canBeCreated: true, + canBeDeleted: true, + headerStatus: "", + showButtonDeleteAndMoveNCH: false + }; + switch (name) { + case ModuleNameEnum.SIHEADER: + case ModuleNameEnum.JOB: + case ModuleNameEnum.CEHEADER: + case ModuleNameEnum.ORDER: + settingsData = { + ...settingsData, + ...(await servicesData.getActionInfo( + getPKfromModule(), + _getModuleType() + )) + }; + break; + case ModuleNameEnum.CIHEADER: + settingsData = await servicesData.getActionInfo( + getPKfromModule(), + _getModuleType() + ); + break; + default: + break; + } + _positionSettings.settings[SETTINGS.CREATABLE] = settingsData.canBeCreated; + _positionSettings.settings[SETTINGS.DELETABLE] = settingsData.canBeDeleted; + _positionSettings.settings[SETTINGS.MULTIPLEDELETE] = + settingsData.showButtonDeleteAndMoveNCH; + const tableData = await servicesData.getListOfPos( + getListPK, + _getModuleType(), + 1, + 1 + ); + if (tableData === null) { + _showParentTable(false); + return; + } + _tableData = { + cols: tableData.cols, + rows: tableData.rows + }; + _tableLayoutInfo = tableData.info; + _positionSettings.parent.headerStatus = settingsData.headerStatus; + _positionSettings.parent.settings = parentSettings; + const { canBeModified = true } = parentSettings; + await doCreateAndShowTableWidget(tableData.head.columns, name, canBeModified); + if (_isShowFormOnly()) { + $(".overview").removeClass("notable"); + $(".menutableindetails").hide(); + } + if (name === ModuleNameEnum.JOB) { + + const hPk = getPKfromModule(); + const serviceIDForLink = serviceID ? String(serviceID) : ""; + addedBreadcrumbId = await Breadcrumb.add( + _staticData.settings.moduleTitle, + `LAS_MOD_JOB_DLG.page?jobID=${hPk.jobid}&serviceID=${serviceIDForLink}` + ); + if (serviceID) { + + _tableObject.setCurrentRow({ + jpos_posno: serviceID, + jpos_jobid: hPk.jobid + }); + + const selectionLength = getSelectionCount(); + if (selectionLength === 1) { + await _createToolbarTable(buttons.STATE.jobPositionTableMenu); + } else if (selectionLength > 1) { + await _createToolbarTable(buttons.STATE.jobPositionTableMenuMultiple); + } + + await _showForm(buttons.STATE.show, _getDataFromSelectedEntry()); + } + } +} +async function doCreateAndShowTableWidget( + columns, + name, + canBeModified, + isManualSort = false +) { + if (_tableObject) { + _tableObject.destructor(); + $(_tableOverlayClass) + .find(".positiontablecontent") + .html(`

`); + } + if (isManualSort) { + _tableObject = createTableWidgetForManualSort( + columns, + _tableContainerId, + name + ); + } else { + _tableObject = createTableWidget( + columns, + _tableContainerId, + name, + canBeModified || true + ); + } + await _showTableInTable(); + await _removeDetails(); +} +function _addDOMElements() { + let buttonTitle = TC.closeOverlayTableDefault; + if (isString(_previousTableTitle)) { + buttonTitle = TC.closeOverlayTable + _previousTableTitle; + } + $(_showTableInElement).append(` +
+
+
+ +
+
+
+
+
+
+ +
+ `); +} +function _isShowFormOnly() { + return Number(getUrlParameter("theShowFormOnly")) === 1; +} +function _bindClickEvents() { + $(document).on( + "click", + _tableOverlayClass + " button.close", + async function () { + const parent = $(this).closest(_showTableInElement), + parentWidth = parent.width(); + + if (_isShowFormOnly()) { + $(".overview").addClass("notable"); + $(".menutableindetails").show(); + } + $(document) + .find(_tableOverlayClass) + .animate({ left: "-" + parentWidth }, 200, function () { + $(this).css({ visibility: "hidden" }); + $(this).removeAttr("style"); + }); + + if (!isUndefined(addedBreadcrumbId)) { + await Breadcrumb.remove(addedBreadcrumbId); + } + + removeTextEditor(); + + _showParentTable(); + } + ); + const positionTableContainer = new DomElement(_showTableInElement, false); + if (positionTableContainer.size() > 0) { + resizeObserverInstance.observe(positionTableContainer.getDomElement()); + } +} +function _getParentDescription(name) { + let text = ""; + if (_parentTableSelection) { + switch (name) { + case ModuleNameEnum.SIHEADER: + { + const hPk = getPKfromModule(); + text += + SITITLE + + " " + + hPk.idSiBook + + ' / ' + + hPk.siHeaderId + + ""; + } + break; + case ModuleNameEnum.JOB: + text += + _parentTableSelection.job_matchcode + + ' (' + + _parentTableSelection.job_intno + + ")"; + break; + case ModuleNameEnum.CEHEADER: + text += + CETITLE + + " " + + _parentTableSelection.cehe_bookid + + "/" + + _parentTableSelection.cehe_headerid + + " - Var. " + + _parentTableSelection.cehe_variantid; + break; + case ModuleNameEnum.ORDER: + text += + ORDERTITLE + + " " + + _parentTableSelection.orde_orderbookid + + "/" + + _parentTableSelection.orde_orderheaderid; + break; + case ModuleNameEnum.CIHEADER: + text += + CITITLE + + " " + + _parentTableSelection.cihe_bookid + + "/" + + _parentTableSelection.cihe_ciheaderid; + break; + default: + throw new Error('Invalid event "' + name + '"'); + } + } + return text; +} +async function onClickTable(selection, formState) { + const selectionLength = selection.length; + if (selectionLength === 0) { + await _removeDetails(); + } else if (selectionLength === 1) { + + switch (_getModuleName()) { + case ModuleNameEnum.SIHEADER: + await _createToolbarTable(buttons.STATE.siPositionTableMenu); + break; + case ModuleNameEnum.JOB: + await _createToolbarTable(buttons.STATE.jobPositionTableMenu); + break; + case ModuleNameEnum.CEHEADER: + await _createToolbarTable(buttons.STATE.cePositionTableMenu); + break; + case ModuleNameEnum.ORDER: + await _createToolbarTable(buttons.STATE.orderPositionTableMenu); + break; + case ModuleNameEnum.CIHEADER: + await _createToolbarTable(buttons.STATE.ciPositionTableMenu); + break; + default: + throw new Error('Invalid name "' + _getModuleName() + '"'); + } + await _showForm(formState, _getDataFromSelectedEntry()); + } else if (selectionLength > 1) { + switch (_getModuleName()) { + case ModuleNameEnum.SIHEADER: + await _removeDetails(); + _showFormButtons(buttons.STATE.multipleInitialize); + await _createToolbarTable(buttons.STATE.siPositionTableMenuMultiple); + break; + case ModuleNameEnum.JOB: + await _removeDetails(); + _showFormButtons(buttons.STATE.multipleInitialize); + await _createToolbarTable(buttons.STATE.jobPositionTableMenuMultiple); + break; + case ModuleNameEnum.CEHEADER: + await _removeDetails(); + _showFormButtons(buttons.STATE.multipleInitialize); + await _createToolbarTable(buttons.STATE.cePositionTableMenuMultiple); + break; + case ModuleNameEnum.ORDER: + await _removeDetails(); + _showFormButtons(buttons.STATE.multipleInitialize); + await _createToolbarTable(buttons.STATE.orderPositionTableMenuMultiple); + break; + case ModuleNameEnum.CIHEADER: + await _removeDetails(); + _showFormButtons(buttons.STATE.multipleInitialize); + await _createToolbarTable(buttons.STATE.ciPositionTableMenuMultiple); + break; + default: + throw new Error('Invalid name "' + _getModuleName() + '"'); + } + } +} +async function _showTableInTable() { + const tableOverlay = $(_tableOverlayClass); + $(".form_wrapper").addClass("serviceslist"); + const parentTableWidth = $(_showTableInElement).getWidth(); + const parentTableHeight = $(_showTableInElement).getHeight(); + tableOverlay.css({ width: parentTableWidth, height: parentTableHeight }); + tableOverlay + .find(".title span.label1") + .html(_getParentDescription(_getModuleName())); + if (_positionSettings.parent.headerStatus !== "") { + tableOverlay + .find(".title .headerstatus") + .html( + `
${TC.status}: ${_positionSettings.parent.headerStatus}
` + ); + } + tableOverlay.find(_tableContainerId).css({ + width: parentTableWidth - 2, + height: + parentTableHeight - + tableOverlay.find(".title").getHeight() - + _tableOverlayOffsetLeft + }); + tableOverlay.css({ visibility: "visible" }); + await _createToolbarTable(buttons.STATE.initialize); + _rerenderTable(); + _tableObject.on(CALLBACK_EVENTS.SELECTIONCHANGED, async currentRows => { + + console.log("currentRows", currentRows); + + const btnCancel = buttonClasses.cancel; + if ( + !triggerSelectionChangeEvent && + prevRows !== null && + currentRows[0].jpos_posno === prevRows[0].jpos_posno + ) { + return false; + } + + if (_isButtonPresent(btnCancel)) { + _getButtonSelectorObject(btnCancel).trigger("click"); + } else { + prevRows = currentRows; + await onClickTable(currentRows, buttons.STATE.show); + } + return false; + }); + _tableObject.on(CALLBACK_EVENTS.LAYOUTCHANGED, tableConfig => + saveUniversalTableLayout(_tableLayoutInfo.moduleName, tableConfig) + ); + _tableObject.on(CALLBACK_EVENTS.DRAG, (sourceRows, targetRows) => + moveTableRow(sourceRows, targetRows) + ); + _tableObject.on(CALLBACK_EVENTS.FILTERCHANGED, async tableConfig => { + + console.log("FILTERCHANGED", tableConfig, _tableObject.getFilter()); + + await onReloadTable(); + }); +} +async function moveTableRow(sourceRows, targetRows) { + const { canBeModified = true } = _positionSettings.parent.settings; + if (canBeModified) { + const para = { + jobIds: sourceRows.map(el => el.jpos_jobid), + posNos: sourceRows.map(el => el.jpos_posno), + headerTypes: sourceRows.map(el => el.jpos_headertype), + subPosNos: sourceRows.map(el => el.jpos_subposno), + insertAfterPosNo: targetRows[0].jpos_posno, + insertAfterJobId: targetRows[0].jpos_jobid, + insertAfterHeaderType: targetRows[0].jpos_headertype, + insertAfterSubPosNo: targetRows[0].jpos_subposno + }; + const data = await servicesData.setReorderPos(para); + if (data !== null) { + await onReloadTable(); + } + } +} +async function _updateTableContent() { + const moduleName = _getModuleName(); + const filter = _tableObject.getFilter(); + const para = { + ...getFilterPara(filter) + }; + switch (moduleName) { + case ModuleNameEnum.SIHEADER: + { + const hPk = getPKfromModule(); + para.theSIBookID = hPk.idSiBook; + para.theSIHeaderID = hPk.siHeaderId; + } + break; + case ModuleNameEnum.JOB: + { + const hPk = getPKfromModule(); + para.theJobID = hPk.jobid; + } + break; + case ModuleNameEnum.CEHEADER: + { + const hPk = getPKfromModule(); + para.theCEID = hPk.ceId; + } + break; + case ModuleNameEnum.ORDER: + { + const hPk = getPKfromModule(); + para.theOrderID = hPk.orderId; + } + break; + case ModuleNameEnum.CIHEADER: + { + const hPk = getPKfromModule(); + para.ciBookId = hPk.ciBookId; + para.ciHeaderId = hPk.ciHeaderId; + } + break; + default: + throw new Error(`Invalid moduleName "${moduleName}"`); + } + para.theType = _getModuleType(); + const data = await servicesData.getListOfPos(para, _getModuleType(), 1, 1); + if (data !== null) { + + _tableObject.setConfiguration({ + ..._tableObject.getConfiguration(), + columns: data.head.columns + }); + + _setTableData(data); + + _rerenderTable(); + + if (_tableSelectionPosNo) { + _tableObject.setSelection([{ jpos_posno: _tableSelectionPosNo }]); + _tableObject.makeVisible(); + } else { + await _removeDetails(); + } + } +} +function _setTableData(obj) { + _tableData.cols = obj.cols; + _tableData.rows = obj.rows; +} +function _rerenderTable() { + _tableObject.show(_tableData); + if (getSession().userPreferences.autoAdjustColWidth) { + _tableObject.adjustColumnSize(); + } + SplitViewPage.setTableRowCounter(_tableData.rows.length); +} +async function _createFormWidget(positionTypeId, headerPK, contentId = null) { + console.log( + 'Init form for module "' + + _getModuleName() + + '", positiontype ID: ' + + positionTypeId + ); + _formObject = new UiForm( + form.getFormConfig( + _getModuleName(), + positionTypeId, + _formIdName, + _formData, + _staticData, + _isNewDataset + ) + ); + const renderFormInContainer = contentId ? contentId : _getFormSelector(); + await form.initForm( + _getModuleName(), + positionTypeId, + _formEvent, + _formObject, + _formData, + _staticData, + _isNewDataset, + renderFormInContainer, + headerPK + ); +} +function _bindUiListPickerEmployees( + elementName, + defaultTabId, + availableList, + assignedList +) { + const element = _formObject.getElementByName(elementName); + const configuration = {}; + configuration.listOutputElement = "#" + element.getId(); + if (elementName === BEC.LISTEMPLS) { + configuration[BEC.LISTEMPLS] = true; + configuration.Id = "#" + defaultTabId + " dd"; + } + if (!configuration[elementName]) { + throw new Error( + 'function _bindUiListPickerEmployees() only works with elementId: "listEmpls"' + ); + } + if (isUndefined(assignedList)) { + assignedList = []; + } + const $selector = $(configuration.Id); + if ($selector.length === 1) { + UiListPicker.initialize({ + container: configuration.Id, + availableList: { + title: TC.available, + content: _.clone(availableList) + }, + assignedList: { + title: TC.assigned, + content: _.clone(assignedList) + }, + filter: { + lru: "", + onEvent: "keyup blur" + }, + outputElementId: configuration.listOutputElement, + searchParameterArray: ["name", "code"], + textParameterArray: ["name", "code"], + onChange: selection => { + element.__DEPRECATED__setValue(selection.join()); + } + }); + } else { + throw new Error("function _bindUiListPickerEmployees() selector not found"); + } + $selector.find("ul").sortable("disable"); + const taskElementValue = _formObject.__DEPRECATED__getValueStringOpt( + BEC.ISTASK + ); + const setAsNoTask = taskElementValue === BEC.ISTASK + "_false"; + if (taskElementValue === null) { + return; + } + if (!setAsNoTask) { + + if (_formEvent === buttons.STATE.edit || _formEvent === buttons.STATE.new) { + + $selector.find("ul").sortable("enable"); + } else { + + $selector.find("ul").sortable("disable"); + } + + + + if (elementName === BEC.LISTEMPLS && _formEvent === buttons.STATE.edit) { + _showEmployeesDialogButton(configuration.Id); + } + } +} +function _bindUiListPickerPositions( + elementName, + defaultTabId, + availableList, + assignedList +) { + const element = _formObject.getElementByName(elementName); + const configuration = { + listOutputElement: "#" + element.getId(), + id: defaultTabId + }; + const $selector = $("#" + configuration.id); + if ($selector.length === 1) { + UiListPicker.initialize({ + container: "#" + configuration.id, + availableList: { + title: TC.available, + content: _.clone(availableList) + }, + assignedList: { + title: TC.assigned, + content: _.clone(assignedList) + }, + filter: { + lru: "", + onEvent: "keyup blur" + }, + outputElementId: configuration.listOutputElement, + searchParameterArray: ["name"], + textParameterArray: ["name"], + onChange: selection => { + element.__DEPRECATED__setValue(selection.join()); + } + }); + } else { + throw new Error("function _bindUiListPickerPositions() selector not found"); + } + if (_formEvent === buttons.STATE.edit || _formEvent === buttons.STATE.new) { + + $selector.find("ul").sortable("enable"); + } else { + + $selector.find("ul").sortable("disable"); + } +} +function bindTaskProgress(data) { + const elem = _formObject.getElementByName(BEC.PERCCOMPLETED); + let obj; + if (data.basic.isTask) { + obj = { + element: $("#" + elem.getId()), + showpercent: Number(_staticData.settings.taskShowPerc), + prefreopen: Number(_staticData.settings.privTaskReopen), + taskid: data.task.taskID, + status: data.task.taskStatus, + percent: data.task.percCompleted, + decisionResult: false + }; + } else { + + obj = { + element: $("#" + elem.getId()), + showpercent: Number(_staticData.settings.taskShowPerc), + prefreopen: Number(_staticData.settings.privTaskReopen), + taskid: null, + status: 1, + percent: 0, + decisionResult: false + }; + } + _pluginObj[BEC.PERCCOMPLETED] = obj; + progressbar = createTaskProgress( + obj.element, + obj.taskid, + obj.showpercent, + obj.prefreopen, + obj.status, + obj.percent + ); + progressbar.on("change", function (values) { + + progressbar.setStatusOnSuccess(); + + + _pluginObj[BEC.PERCCOMPLETED] = values; + formHelper.setCompleteDate(values.status, _formObject, _staticData); + }); + if (_formEvent !== buttons.STATE.edit && _formEvent !== buttons.STATE.new) { + progressbar.setDisabled(); + } + if (!data.basic.isTask) { + progressbar.setDisabled(); + } +} +function _bindPluginsAfterFormRender(positionTypeId) { + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + if ( + _.includes( + [ + POSITIONTYPES.EXTERNAL, + POSITIONTYPES.SERVICE, + POSITIONTYPES.MEDIA, + POSITIONTYPES.HOURS, + POSITIONTYPES.INTCOSTS, + POSITIONTYPES.ACONTOSPECIAL, + POSITIONTYPES.ACONTO + ], + positionTypeId + ) + ) { + if ( + preferences.isPreferenceTrue( + _staticData, + preferences.PREFERENCE.HASPROJECTTASKS + ) + ) { + + const elem = _formObject.getElementByName(BEC.LINKCOMM); + addFixedTooltip($("#" + elem.getId()).find("a")); + + _bindUiListPickerEmployees( + BEC.LISTEMPLS, + _formObject.getRowIdOfElementName(BEC.LISTEMPLS), + _generalDataEmplLists.listEmpls, + _formData.task.listEmpls + ); + + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.TASKDEPENDENCIES + ) + ) { + + _formObject.__DEPRECATED__setValue( + BEC.LISTTASKS, + formHelper.getDependentTasksList( + _formEvent, + _formObject, + _formData + ) + ); + } + + bindTaskProgress(_formData); + } + } else if (_.includes([POSITIONTYPES.TEXT], positionTypeId)) { + if ( + preferences.isPreferenceTrue( + _staticData, + preferences.PREFERENCE.HASPROJECTTASKS + ) + ) { + + const elem = _formObject.getElementByName(BEC.LINKCOMM); + addFixedTooltip($("#" + elem.getId()).find("a")); + + _bindUiListPickerEmployees( + BEC.LISTEMPLS, + _formObject.getRowIdOfElementName(BEC.LISTEMPLS), + _generalDataEmplLists.listEmpls, + _formData.task.listEmpls + ); + + if ( + privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.TASKDEPENDENCIES + ) + ) { + + _formObject.__DEPRECATED__setValue( + BEC.LISTTASKS, + formHelper.getDependentTasksList( + _formEvent, + _formObject, + _formData + ) + ); + } + + bindTaskProgress(_formData); + } + } else if (_.includes([POSITIONTYPES.SUBTOTAL], positionTypeId)) { + _bindUiListPickerPositions( + BEC.LISTPOS, + _formObject.getRowIdOfElementName(BEC.LISTPOS), + _formData.basic.listPos, + _formData.basic.listPosConnected + ); + } + break; + case ModuleNameEnum.CEHEADER: + if (_.includes([POSITIONTYPES.SUBTOTAL], positionTypeId)) { + _bindUiListPickerPositions( + BEC.LISTPOS, + _formObject.getRowIdOfElementName(BEC.LISTPOS), + _formData.basic.listPos, + _formData.basic.listPosConnected + ); + } + break; + case ModuleNameEnum.CIHEADER: + if (_.includes([POSITIONTYPES.SUBTOTAL], positionTypeId)) { + _bindUiListPickerPositions( + BEC.LISTPOS, + _formObject.getRowIdOfElementName(BEC.LISTPOS), + _formData.basic.listPos, + _formData.basic.listPosConnected + ); + } + break; + default: + break; + } +} +async function _resetDetails() { + setTableOverlayPanel(""); + const isAddTask = + typeof _options !== "undefined" && _options.hasOwnProperty("addTask") + ? _options.addTask === 1 + : false; + if (_tableObject.getCurrentRow() === null || isAddTask) { + + await _removeDetails(); + } else { + + await _showForm(buttons.STATE.show, _getDataFromSelectedEntry()); + } +} +async function _removeDetails() { + _hideTheForm(); + await _createToolbarTable(buttons.STATE.initialize); + _showFormButtons(buttons.STATE.initialize); +} +function urlParameterAvailable(name = "") { + return window.location.href.indexOf(name) !== -1; +} +function setIdToUrl(id) { + if (urlParameterAvailable("serviceID")) { + setUrlParameter("serviceID", id.toString()); + } +} +async function _showForm(setEvent, selection, contentId = null) { + _isNewDataset = false; + triggerSelectionChangeEvent = true; + _formEvent = setEvent; + if (selection) { + _tableSelectionPosNo = selection.jpos_posno; + _tableSelectionJobNo = selection.jpos_jobid; + + const para = { + theJobID: selection.jpos_jobid, + thePosNo: selection.jpos_posno, + theHeaderType: selection.jpos_headertype, + theSubPosNo: selection.jpos_subposno + }; + + const data = await servicesData.getPosData(para); + if (data !== null) { + + if ( + _.includes( + [ + POSITIONTYPES.EXTERNAL, + POSITIONTYPES.MEDIA, + POSITIONTYPES.SERVICE, + POSITIONTYPES.HOURS, + POSITIONTYPES.INTCOSTS, + POSITIONTYPES.TEXT, + POSITIONTYPES.ACONTOSPECIAL, + POSITIONTYPES.ACONTO, + POSITIONTYPES.SUBTOTAL + ], + data.basic.idPosType + ) + ) { + + _formData = data; + + await _createFormWidget( + data.basic.idPosType, + getPKfromModule(), + contentId + ); + + _setCalculationButton(data.basic.idPosType); + + _setEnhanceButton(data.basic.idPosType); + + if ( + preferences.isPreferenceTrue( + _staticData, + preferences.PREFERENCE.HASPROJECTTASKS + ) + ) { + reOpenTaskButton(data.basic.idPosType, setEvent); + } + + _setDefaultLayoutButton(data.basic.idPosType, setEvent); + + setTechnicalTextButton(_formObject, data.basic.idPosType); + + _setCostsButton(data.basic.idPosType, setEvent); + + _bindPluginsAfterFormRender(data.basic.idPosType); + + _showTheForm(); + if (!_isFormInDialog) { + setTableOverlayPanel(setEvent); + + _showFormButtons(setEvent); + + setIdToUrl(selection.jpos_posno); + } else { + _showFormButtons(setEvent); + + } + } else { + showLoadingWarning("form not defined"); + await _removeDetails(); + } + } else { + await _removeDetails(); + } + } else { + + await _removeDetails(); + } +} +async function _showFormNewPosition(setEvent, postypeID, serverData) { + _isNewDataset = true; + _formEvent = setEvent; + if (!_isFormInDialog) { + setTableOverlayPanel(setEvent); + + _tableSelectionPosNo = null; + + _tableObject.setCurrentRow(null); + } + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + { + const hPk = getPKfromModule(); + const data = await servicesData.getDefaultsForNewPos( + { + theJobID: hPk.jobid, + thePostype: postypeID + }, + servicesData.ServiceHeaderType.JOB + ); + await _showFormNewPositionExtended(setEvent, data, getPKfromModule()); + } + break; + case ModuleNameEnum.SIHEADER: + if (!serverData) { + throw new Error(); + } + await _showFormNewPositionExtended( + setEvent, + serverData, + getPKfromModule() + ); + break; + case ModuleNameEnum.CEHEADER: + { + const hPk = getPKfromModule(); + const data = await servicesData.getDefaultsForNewPos( + { + theJobID: hPk.ceId, + thePostype: postypeID + }, + servicesData.ServiceHeaderType.CE + ); + await _showFormNewPositionExtended(setEvent, data, getPKfromModule()); + } + break; + case ModuleNameEnum.ORDER: + { + const hPk = getPKfromModule(); + const data = await servicesData.getDefaultsForNewPos( + { + theJobID: hPk.orderId, + thePostype: postypeID + }, + servicesData.ServiceHeaderType.ORDER + ); + await _showFormNewPositionExtended(setEvent, data, getPKfromModule()); + } + break; + case ModuleNameEnum.CIHEADER: + { + const hPk = getPKfromModule(); + const data = await servicesData.getDefaultsForNewCIPos({ + ciBookId: hPk.ciBookId, + ciHeaderId: hPk.ciHeaderId, + posType: postypeID + }); + await _showFormNewPositionExtended(setEvent, data, getPKfromModule()); + } + break; + default: + throw new Error('Invalid type "_getModuleName()"'); + } +} +async function _showFormNewPositionExtended(setEvent, data, headerPK) { + _formData = data; + await _createFormWidget( + data.basic.idPosType, + headerPK, + _isFormInDialogSelector + ); + _setCalculationButton(data.basic.idPosType); + _setEnhanceButton(data.basic.idPosType); + _setDefaultLayoutButton(data.basic.idPosType, setEvent); + setTechnicalTextButton(_formObject, data.basic.idPosType); + _setCostsButton(data.basic.idPosType, setEvent); + _bindPluginsAfterFormRender(data.basic.idPosType); + _showTheForm(); + _showFormButtons(setEvent); +} +function setTableOverlayPanel(setEvent) { + switch (setEvent) { + case buttons.STATE.edit: + case buttons.STATE.new: + SplitViewPage.disableOverviewPage(); + break; + default: + SplitViewPage.enableOverviewPage(); + break; + } +} +async function _saveForm(removeShowWarning, successWithInfoOptions) { + if (_formObject.validate()) { + const hPk = getPKfromModule(); + const saveData = convertData( + hPk, + _formObject.__DEPRECATED__getValues(), + _formData, + _getModuleName(), + _pluginObj, + _isNewDataset, + removeShowWarning, + successWithInfoOptions + ); + + const json = await servicesData.setSavedPos(saveData, _isNewDataset); + if (json.stat.status === STATUS.SUCCESS) { + + if (_isNewDataset) { + _tableSelectionPosNo = json.data.posNo; + } + await _saveCompleted(_tableSelectionPosNo); + return true; + } else if (json.stat.status === STATUS.INFO) { + + + if ( + _.includes(Object.keys(json.data), "askSplitPos") || + _.includes(Object.keys(json.data), "askHowToChange") + ) { + await showSISaveDialog(json.data); + return true; + } + } else if (json.stat.status === STATUS.VALIDATE) { + await showWarningDialog(json.stat.message); + } else if (json.stat.status === STATUS.WARNING) { + + await showSISaveConfirmDialog(json.data.warnings); + } + } else { + showLoadingWarning(pageTC.requiredInformation); + } + return false; +} +async function _saveCompleted(newPosNo) { + _formObject.setActive(false); + _formObject.memorizeCurrentValues(); + if (_isFormInDialog && _isFormInDialogJobPK !== null) { + _isFormInDialogJobPK.jpos_posno = newPosNo; + + await _showForm( + buttons.STATE.show, + _isFormInDialogJobPK, + _isFormInDialogSelector + ); + } else { + + await _updateTableContent(); + } +} +async function showSISaveConfirmDialog(message) { + const ok = await confirmDialog(message); + if (ok) { + await _saveForm(true); + } +} +async function showSISaveDialog(data) { + const defaultSetting = { + doSplitPos: true, + chargeType: 10 + }, + elements = { + chbox: new UiElementCheckbox({ + name: "splitPos", + value: defaultSetting.doSplitPos + }), + radio: new UiElementRadio({ + name: "howToCharge", + value: defaultSetting.chargeType, + selectOptions: _.map(_staticData.lists.listChargeTypes, function (obj) { + return { id: obj.id, name: obj.name }; + }) + }) + }; + let askSplitPosText, + asHowToChargeText, + html = ""; + html += ''; + if (data.askSplitPos) { + if (_formData.settings.ciExists) { + askSplitPosText = TC.askSplitPosCiExists; + } else { + askSplitPosText = TC.askSplitPos; + } + html += ""; + html += ""; + } + if (data.askHowToCharge) { + asHowToChargeText = TC.howToCharge; + html += '"; + html += + '"; + } + html += "
" + elements.chbox.getHTML() + "" + askSplitPosText + "



' + asHowToChargeText + "
' + + elements.radio.getHTML() + + "
"; + const dialog = new UiDialog({ + autoClose: true, + html, + title: pageTC.confirmation, + async onClose(ok) { + return ok ? _saveForm(true, defaultSetting) : true; + } + }); + elements.chbox.onChange(element => { + defaultSetting.doSplitPos = element.getValueBoolean(); + }); + elements.radio.onChange(element => { + defaultSetting.chargeType = element.getValueAsNumber(); + }); + if (data.askSplitPos) { + elements.chbox.bindEvents(); + } + if (data.askHowToCharge) { + elements.radio.bindEvents(); + } + await dialog.open(); +} +async function getSortDialog() { + let sortOrder = 1; + const NAME = "sortPosition"; + const elements = { + radio: new UiElementRadio({ + name: "sortOrder", + value: sortOrder, + selectOptions: [ + { + id: "1", + name: TC.sortByCategory + }, + { + id: "2", + name: TC.sortByGroup + } + ] + }) + }; + const html = `
+ + + + +
${elements.radio.getHTML()}
+
`; + if (_parentTableSelection === null) { + throw new Error("No row selected"); + } + const dialog = new UiDialog({ + autoClose: true, + html, + title: pageTC.confirmation, + onClose(ok) { + if (ok) { + return sendSortCommandToBE(_parentTableSelection, sortOrder); + } + return Promise.resolve(true); + } + }); + elements.radio.onChange(element => { + sortOrder = element.getValueAsNumber(); + }); + elements.radio.bindEvents(); + $("." + NAME + " table").attr("style", "width: 100%"); + $("." + NAME + " table td").attr("style", "text-align: center"); + const isClosed = await dialog.open(); + if (isClosed) { + await _updateTableContent(); + } +} +async function sendSortCommandToBE(currentRow, sortOrder) { + const moduleName = _getModuleName(); + switch (moduleName) { + case ModuleNameEnum.JOB: + return servicesData.setJobSortType(currentRow.job_jobid, sortOrder); + case ModuleNameEnum.CEHEADER: + return servicesData.setCeSortType(currentRow.cehe_ceid, sortOrder); + case ModuleNameEnum.CIHEADER: + return servicesData.setCiSortType( + { + ciBookId: currentRow.cihe_bookid, + ciHeaderId: currentRow.cihe_ciheaderid + }, + sortOrder + ); + default: + throw new Error('Invalid name "' + moduleName + '"'); + } +} +async function deleteEntryJob(para) { + const result = await servicesData.setDeletePosList(para); + if (result) { + if (_isFormInDialog && _isFormInDialogSelector !== null) { + $(_isFormInDialogSelector).html(""); + + _showFormButtons(buttons.STATE.initialize); + } else { + _tableSelectionPosNo = null; + await _updateTableContent(); + + + + + + + + + + + + + + + + + } + } +} +async function deleteEntrySiCheck() { + const selectedListPosNo = _tableObject + .getSelection() + .map(el => el.jpos_posno); + const hPk = getPKfromModule(); + const data = await servicesData.setSiCheckDeletePos({ + idSiBook: hPk.idSiBook, + siHeaderId: hPk.siHeaderId, + listPosNos: selectedListPosNo + }); + if (data.askSupplRemains) { + + const ok = await confirmDialog(TC.askJobservicesStayAssigned); + if (ok) { + await deleteEntrySi(true); + } else { + await deleteEntrySi(false); + } + } else { + + await deleteEntrySi(true); + } +} +async function deleteEntrySi(supplRemains) { + const selectedListPosNo = _tableObject + .getSelection() + .map(el => el.jpos_posno); + const hPk = getPKfromModule(); + const para = { + idSiBook: hPk.idSiBook, + siHeaderId: hPk.siHeaderId, + supplRemains: supplRemains, + lockTimestamp: _formData.settings.lockTimestamp, + listPosNos: selectedListPosNo + }; + await servicesData.setSiDeletePos(para); + _tableSelectionPosNo = null; + await _updateTableContent(); +} +async function setDeletePosList(para) { + const result = await servicesData.setDeletePosList(para); + if (result) { + + _tableSelectionPosNo = null; + await _updateTableContent(); + } +} +async function _deleteEntry(disableWarnings = false) { + let pk = null; + if (_isFormInDialog && _isFormInDialogJobPK !== null) { + pk = { + jobId: _isFormInDialogJobPK.jpos_jobid, + headerType: _isFormInDialogJobPK.jpos_headertype, + listPosNos: _isFormInDialogJobPK.jpos_posno + ? [_isFormInDialogJobPK.jpos_posno] + : [], + subPosNo: _isFormInDialogJobPK.jpos_subposno + }; + } else { + pk = getPKFromSelection(); + } + if (pk === null) { + return; + } + const data = { + jobID: pk.jobId, + headerType: pk.headerType, + listPosNos: pk.listPosNos, + subPosNo: pk.subPosNo, + lockTimestamp: _formData.settings.lockTimestamp, + showWarnings: !disableWarnings + }; + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + await deleteEntryJob(data); + break; + case ModuleNameEnum.SIHEADER: + await deleteEntrySiCheck(); + break; + case ModuleNameEnum.CEHEADER: + await setDeletePosList(data); + break; + case ModuleNameEnum.ORDER: + await setDeletePosList(data); + break; + case ModuleNameEnum.CIHEADER: + await setDeletePosList(data); + break; + default: + throw new Error( + 'Invalid name "' + _getModuleName() + '" in _deleteEntry()' + ); + } +} +function showEnhanceEffect($selector, hiddenClassName, type = "slideandfade") { + switch (type) { + + case "show": + $selector.removeClass(hiddenClassName); + break; + case "fold": + + $selector.hide().removeClass(hiddenClassName).slideDown(500).show(); + break; + case "fade": + + $selector + .css({ opacity: 0 }) + .removeClass(hiddenClassName) + .animate({ opacity: 1 }, 600); + break; + case "slideandfade": + + $selector + .css({ opacity: 0 }) + .hide() + .removeClass(hiddenClassName) + .slideDown(300) + .animate({ opacity: 1 }, 250); + break; + default: + throw new Error('Invalid type "' + type + '" in showEnhanceEffect()'); + } +} +function _setCalculationButton(positionTypeId) { + let showButton = true, + showButtonInTab = 1; + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + + showButtonInTab = 1; + break; + case ModuleNameEnum.SIHEADER: + + showButtonInTab = 1; + break; + case ModuleNameEnum.CEHEADER: + + showButtonInTab = 1; + break; + default: + break; + } + switch (positionTypeId) { + case POSITIONTYPES.TEXT: + showButton = false; + break; + case POSITIONTYPES.SUBTOTAL: + showButton = false; + break; + default: + + break; + } + if (showButton) { + + new UiButton( + TC.showCalculation, + "showCalcBtn", + async function () { + + await _showCalculationDialog(); + }, + "calculator" + ).appendHTML("#" + _formObject.getPageId(showButtonInTab)); + } +} +function _setEnhanceButton(positionTypeId) { + let showButton = true, + showButtonInTab = 1; + switch (_getModuleName()) { + + case ModuleNameEnum.JOB: + showButtonInTab = 1; + break; + case ModuleNameEnum.SIHEADER: + + showButtonInTab = 1; + break; + case ModuleNameEnum.CEHEADER: + + showButtonInTab = 1; + break; + default: + break; + } + switch (positionTypeId) { + case POSITIONTYPES.TEXT: + showButton = false; + break; + case POSITIONTYPES.SUBTOTAL: + showButton = false; + break; + default: + + break; + } + if (showButton) { + const COOKIE = new CookieStorage( + "services_price_enhanced_" + _getModuleName() + ); + + new UiButton( + TC.enhanced, + "enhancedBtn", + function (e) { + const btnIcon = e.currentTarget; + const $enhancedElements = $("#" + _formObject.getFormId()).find( + ".enhanced" + ); + + if (COOKIE.get() === "true") { + + $enhancedElements.addClass("enhanced_hidden"); + switchButtonIcon(btnIcon, "caret-1-n", "caret-1-s"); + COOKIE.set("false"); + } else { + + showEnhanceEffect($enhancedElements, "enhanced_hidden"); + switchButtonIcon(btnIcon, "caret-1-s", "caret-1-n"); + COOKIE.set("true"); + } + }, + "caret-1-s" + ).appendHTML("#" + _formObject.getPageId(showButtonInTab)); + + if (COOKIE.get() === "true") { + switchButtonIcon("#" + _formObject.getFormId(), "caret-1-s", "caret-1-n"); + $("#" + _formObject.getFormId()) + .find(".enhanced") + .removeClass("enhanced_hidden"); + } + } +} +function _setDefaultLayoutButton(positionTypeId, setEvent) { + const $selector = $(".showDefaultBtn"); + const showButtonInTab = _formObject.getPageIndexWithElementName( + BEC.POSITIONPRINT + ); + console.log(_formObject.getPageIdWithElementName(BEC.POSITIONPRINT)); + switch (setEvent) { + + case buttons.STATE.edit: + + if ( + _getModuleName() === ModuleNameEnum.SIHEADER && + _formData.settings[SETTINGS.CIEXISTS] + ) { + break; + } + + if ($selector.length === 0) { + + new UiButton( + TC.defaultSettings, + "showDefaultBtn", + async function () { + + if (_tableSelectionJobNo === null) { + throw new Error( + 'In edit mode the variable "_tableSelectionJobNo" must have a number' + ); + } + await formHelper.setLayoutElementsDefaultRoutine( + _formObject, + _formData, + _tableSelectionJobNo + ); + }, + "gear", + undefined, + false + ).appendHTML("#" + _formObject.getPageId(showButtonInTab)); + } + break; + + default: + + if ($selector.length === 1) { + $selector.remove(); + } + break; + } +} +function _showEmployeesDialogButton(appendTo) { + const className = "changeEmplSelectionInfoBtn"; + const button = new UiButton( + TC.enhancedSelection, + className, + async () => { + await showAssignResourcesDialog(appendTo); + }, + "btn-img-emplAssign" + ); + button.appendHTML(appendTo); + new DomElement(`.${className}`).setCssObject({ + float: "right", + marginTop: 10, + marginRight: 5 + }); +} +async function showAssignResourcesDialog(appendTo) { + const { taskID } = _formData.task; + const ok = await showEmployeeAssignDialog(taskID); + if (ok) { + const formDataPointerCopy = _formData; + const data = await servicesData.getTaskEmpl(taskID); + + formDataPointerCopy.task.listEmpls = data; + _formObject.__DEPRECATED__setValue(BEC.LISTEMPLS, data.join(",")); + + $(appendTo).html(_formObject.getElementByName(BEC.LISTEMPLS).getHTML()); + + _bindPluginsAfterFormRender(formDataPointerCopy.basic.idPosType); + } +} +function _setCostsButton(positionTypeId, event) { + switch (event) { + + case buttons.STATE.initialize: + break; + + case buttons.STATE.show: + break; + + case buttons.STATE.reset: + break; + + case buttons.STATE.edit: + case buttons.STATE.new: + switch (_getModuleName()) { + case ModuleNameEnum.SIHEADER: + if ( + _.includes( + [POSITIONTYPES.EXTERNAL, POSITIONTYPES.MEDIA], + positionTypeId + ) + ) { + formHelper.addButtonFormPageCosts( + _staticData, + _formObject, + BEC.NCHCOSTCENTRE + ); + } + break; + case ModuleNameEnum.CIHEADER: + if (_.includes([POSITIONTYPES.INTCOSTS], positionTypeId)) { + formHelper.addButtonFormPageCosts( + _staticData, + _formObject, + BEC.NCHCOSTCENTRE + ); + } + break; + case ModuleNameEnum.JOB: + case ModuleNameEnum.CEHEADER: + case ModuleNameEnum.ORDER: + break; + default: + throw new Error('Invalid type "_getModuleName()"'); + } + break; + default: + throw new Error('Invalid event _setCostsButton("' + event + '")'); + } +} +function reOpenTaskButton(positionTypeId, event) { + switch (_getModuleName()) { + + case ModuleNameEnum.JOB: + + if (positionTypeId !== POSITIONTYPES.SUBTOTAL) { + formHelper.addButtonReOpenTask( + _getModuleName(), + _staticData, + _formObject, + _formData.task.taskID, + event + ); + } + break; + default: + break; + } +} +function _buttonNewPositions() { + const serviceTypes = _staticData.lists.listPosTypes.filter(e => e.isUsed); + const btnArray = serviceTypes.map((obj, i) => { + return { + rowId: "addPosition" + i, + rowText: obj.name, + rowListener: async function () { + await _getNewPositionForm(obj.id); + } + }; + }); + return new UiSelectButton(TC.new, "newPosition", btnArray, "caret-1-s"); +} +export async function onEdit() { + if (_isFormInDialog) { + await _showForm( + buttons.STATE.edit, + _isFormInDialogJobPK, + _isFormInDialogSelector + ); + } else { + await _showForm(buttons.STATE.edit, _getDataFromSelectedEntry()); + } +} +async function onDelete() { + let selectionCount = 0; + if (_isFormInDialog) { + selectionCount = 1; + } else { + selectionCount = _tableObject.getSelectionCount(); + } + const ok = await confirmDialog(getDeleteDialogText(selectionCount)); + if (ok) { + await _deleteEntry(); + } +} +async function onDeleteAndMoveNCH() { + const pk = getPKFromSelection(); + if (pk === null) { + return; + } + const ok = await confirmDialog(TC.confirmationDeleteAndMoveNCH); + if (ok) { + const data = { + jobID: pk.jobId, + headerType: pk.headerType, + listPosNos: pk.listPosNos, + subPosNo: pk.subPosNo + }; + let setNchData = {}; + const infoForDelete = await servicesData.getInfoForDeleteCiPosList(data); + if (infoForDelete.doShowNCHInfo) { + const { nchAccount, nchCostCentre } = infoForDelete; + setNchData = await showNchInfoDialog( + { nchAccount, nchCostCentre }, + _staticData + ); + } + if (setNchData !== null) { + const setDeleteData = { + ...data, + ...setNchData, + lockTimestamp: _formData.settings.lockTimestamp, + showWarnings: true + }; + const result = await servicesData.setDeleteCiPosList(setDeleteData); + if (result) { + + _tableSelectionPosNo = null; + await _updateTableContent(); + } + } + } +} +function _buttonDeleteCiPositions() { + return new UiSelectButton( + TC.buttonDelete, + "deleteCiPosition", + [ + { rowId: "deleteCI", rowText: TC.buttonDelete, rowListener: onDelete }, + { + rowId: "deleteCIAndMoveNCH", + rowText: TC.buttonDeleteAndMoveNCH, + rowListener: onDeleteAndMoveNCH + } + ], + "trash" + ); +} +async function onCancel() { + triggerSelectionChangeEvent = true; + if ( + !_formObject.valuesAreEqualWithMemorizedValues() && + getSession().userPreferences.notifyCancelChanges + ) { + const ok = await confirmDialog(pageTC.dialogTextConfirmCancel); + if (ok) { + if (_isFormInDialog) { + await onCancelInDialog(); + } else { + await _resetDetails(); + } + } else { + if (prevRows !== null) { + triggerSelectionChangeEvent = false; + _tableObject.setSelection(prevRows); + } + } + } else { + if (_isFormInDialog) { + await onCancelInDialog(); + } else { + await _resetDetails(); + } + } +} +async function onCancelInDialog() { + if (_isNewDataset && _isFormInDialogSelector !== null) { + + $(_isFormInDialogSelector).html(""); + + _showFormButtons(buttons.STATE.initialize); + } else { + await _showForm( + buttons.STATE.show, + _isFormInDialogJobPK, + _isFormInDialogSelector + ); + } +} +async function onSave() { + await _saveForm(false); +} +function _showFormButtons(manualSetEvent) { + const p = { + create: privileges.getPrivilege(_staticData, privileges.PRIVILEGE.CREATE), + modify: privileges.getPrivilege(_staticData, privileges.PRIVILEGE.MODIFY), + delete: privileges.getPrivilege(_staticData, privileges.PRIVILEGE.DELETE) + }; + if (_getModuleName() === ModuleNameEnum.SIHEADER) { + p.create = privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.SIPOSNEW + ); + } + const s = { + canBeCreated: false, + editable: false, + canBeDeleted: false + }; + if (manualSetEvent) { + _formEvent = manualSetEvent; + } + s.canBeCreated = _positionSettings.settings[SETTINGS.CREATABLE]; + s.canBeDeleted = _positionSettings.settings[SETTINGS.DELETABLE]; + if ( + _formData && + _formEvent !== buttons.STATE.new && + _formEvent !== buttons.STATE.initialize && + _formEvent !== buttons.STATE.multipleInitialize && + _formEvent !== buttons.STATE.delete + ) { + s.editable = _formData.settings[SETTINGS.MODIFIABLE]; + + + if (!s.editable) { + + console.log( + "entry not editable: set _formEvent from", + _formEvent, + "to", + buttons.STATE.show + ); + + _formEvent = buttons.STATE.show; + } + } + console.log("_showFormButtons: ", _formEvent); + console.log("privileges", p); + console.log("settings", s); + let toolbar; + if (_isFormInDialog) { + toolbar = new SplitViewMenu.Toolbar("showFormOnly"); + } else { + toolbar = new SplitViewMenu.Toolbar("form"); + } + switch (_formEvent) { + + case buttons.STATE.initialize: + if (p.create && s.canBeCreated) { + toolbar.add(_buttonNewPositions()); + } + break; + + case buttons.STATE.multipleInitialize: + if (p.create && s.canBeCreated) { + toolbar.add(_buttonNewPositions()); + } + if (p.delete && s.canBeDeleted) { + if ( + _getModuleName() === ModuleNameEnum.CIHEADER && + _positionSettings.settings[SETTINGS.MULTIPLEDELETE] + ) { + toolbar.add(_buttonDeleteCiPositions(), "right"); + } else { + toolbar.addDefaultDelete(onDelete, "right"); + } + } + break; + + case buttons.STATE.edit: + case buttons.STATE.new: + toolbar.addDefaultCancel(onCancel); + toolbar.addDefaultSave(onSave); + break; + + case buttons.STATE.show: + if (p.create && s.canBeCreated) { + toolbar.add(_buttonNewPositions()); + } + if (p.modify && s.editable) { + toolbar.addDefaultEdit(onEdit); + } + if (p.delete && s.canBeDeleted) { + if ( + _getModuleName() === ModuleNameEnum.CIHEADER && + _positionSettings.settings[SETTINGS.MULTIPLEDELETE] + ) { + toolbar.add(_buttonDeleteCiPositions(), "right"); + } else { + toolbar.addDefaultDelete(onDelete, "right"); + } + } + break; + + case buttons.STATE.reset: + if (p.create && s.canBeCreated) { + + toolbar.add(_buttonNewPositions()); + } + break; + + case buttons.STATE.delete: + if (p.delete && s.canBeDeleted) { + if ( + _getModuleName() === ModuleNameEnum.CIHEADER && + _positionSettings.settings[SETTINGS.MULTIPLEDELETE] + ) { + toolbar.add(_buttonDeleteCiPositions(), "right"); + } else { + toolbar.addDefaultDelete(onDelete, "right"); + } + } + break; + default: + throw new Error('Invalid event "' + _formEvent + '"'); + } + toolbar.render(); +} +async function _showCalculationDialog() { + await form.showCalculationDialog( + _getModuleName(), + TC.calculation, + getPKfromModule() + ); +} +function setPKfromModule(parentTableSelection) { + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + _parentTableDataId = { + jobid: parentTableSelection.job_jobid + }; + break; + case ModuleNameEnum.SIHEADER: + _parentTableDataId = { + siHeaderId: parentTableSelection.sihd_siheaderid, + idSiBook: parentTableSelection.sihd_bookid + }; + break; + case ModuleNameEnum.CEHEADER: + _parentTableDataId = { + ceId: parentTableSelection.cehe_ceid + }; + break; + case ModuleNameEnum.ORDER: + _parentTableDataId = { + orderId: parentTableSelection.orde_orderid + }; + break; + case ModuleNameEnum.CIHEADER: + _parentTableDataId = { + ciHeaderId: parentTableSelection.cihe_ciheaderid, + ciBookId: parentTableSelection.cihe_bookid + }; + break; + default: + throw new Error('Invalid type "_getModuleName()"'); + } +} +function getPKfromModule() { + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + return _parentTableDataId; + case ModuleNameEnum.SIHEADER: + return _parentTableDataId; + case ModuleNameEnum.CEHEADER: + return _parentTableDataId; + case ModuleNameEnum.ORDER: + return _parentTableDataId; + case ModuleNameEnum.CIHEADER: + return _parentTableDataId; + default: + throw new Error('Invalid type "_getModuleName()"'); + } +} +function _getDataFromSelectedEntry() { + return _tableObject.getCurrentRow(); +} +async function _getNewPositionForm(postypeID) { + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + await _showFormNewPosition(buttons.STATE.new, postypeID); + break; + case ModuleNameEnum.SIHEADER: + + await _showNewJobFromTemplateDialog(postypeID); + break; + case ModuleNameEnum.CEHEADER: + await _showFormNewPosition(buttons.STATE.new, postypeID); + break; + case ModuleNameEnum.ORDER: + await _showFormNewPosition(buttons.STATE.new, postypeID); + break; + case ModuleNameEnum.CIHEADER: + await _showFormNewPosition(buttons.STATE.new, postypeID); + break; + default: + throw new Error('Invalid type "_getModuleName()"'); + } +} +async function _showNewJobFromTemplateDialog(postypeID) { + const options = { + title: TC.selectJobFromTemplateDialogTitle, + showCheckbox: privileges.getPrivilege( + _staticData, + privileges.PRIVILEGE.SHOWALLJOBS + ), + includeJob: true + }; + const result = await genericJobSelectionDialog( + options, + ".newJobFromTemplate_div" + ); + if (result !== null && result.data.jobRequest.theJobID) { + const hPk = getPKfromModule(); + const para = { + theSIBookID: hPk.idSiBook, + theSIHeaderID: hPk.siHeaderId, + thePostype: postypeID ? postypeID : 1, + theJobID: result.data.jobRequest.theJobID + }; + const data = await servicesData.getDefaultsForNewSIPos(para); + await _showFormNewPosition(buttons.STATE.new, 0, data); + } +} +function _isButtonPresent(buttonName) { + return SplitViewMenu.isButtonPresent(buttonName); +} +function _getButtonSelectorObject(buttonName) { + return SplitViewMenu.getButtonSelectorObject(buttonName); +} +function _showTheForm() { + SplitViewPage.showForm(); +} +function _hideTheForm() { + SplitViewPage.hideForm(); +} +function _getFormSelector() { + return "." + SplitViewPage.getDetailsFormClass(); +} +function _getListofSelectedRow() { + const CURRENT_ROW = _tableObject.getCurrentRow(); + return CURRENT_ROW === null + ? [] + : _.compact(_.map(_tableObject.getSelection(), "jpos_posno")); +} +function getSelectionCount() { + const selection = _tableObject.getSelection(); + return selection.length; +} +function getPKFromSelection() { + const selection = _tableObject.getSelection(); + if (selection.length === 0) { + return null; + } + return { + jobId: Number(selection[0].jpos_jobid), + headerType: Number(selection[0].jpos_headertype), + listPosNos: selection.map(obj => Number(obj.jpos_posno)), + subPosNo: Number(selection[0].jpos_subposno) + }; +} +function _showParentTable(forceReload = true) { + $(".form_wrapper").removeClass("serviceslist"); + if (forceReload) { + switch (_getModuleName()) { + case ModuleNameEnum.JOB: + if (_reloadTable !== null) { + _reloadTable(); + } + break; + case ModuleNameEnum.SIHEADER: + if (_reloadTable !== null) { + _reloadTable(); + } + break; + case ModuleNameEnum.CEHEADER: + if (_reloadTable !== null) { + _reloadTable(); + } + break; + case ModuleNameEnum.ORDER: + if (_reloadTable !== null) { + _reloadTable(); + } + break; + case ModuleNameEnum.CIHEADER: + if (_reloadTable !== null) { + _reloadTable(); + } + break; + default: + break; + } + } +} +function _setParentModuleSettings(moduleName) { + switch (moduleName) { + case ModuleNameEnum.JOB: + _parentModuleSettings = { + type: "job", + moduleName: moduleName + }; + break; + case ModuleNameEnum.CEHEADER: + _parentModuleSettings = { + type: "ce", + moduleName: moduleName + }; + break; + case ModuleNameEnum.SIHEADER: + _parentModuleSettings = { + type: "si", + moduleName: moduleName + }; + break; + case ModuleNameEnum.ORDER: + _parentModuleSettings = { + type: "order", + moduleName: moduleName + }; + break; + case ModuleNameEnum.CIHEADER: + _parentModuleSettings = { + type: "ci", + moduleName: moduleName + }; + break; + default: + throw new TypeError("Invalid moduleName: " + moduleName); + } +} +function _getModuleType() { + return _parentModuleSettings.type; +} +function _getModuleName() { + return _parentModuleSettings.moduleName; +} +export async function initialize( + generalDataEmplLists, + newContainerId, + moduleName, + previousTableTitle +) { + _setParentModuleSettings(moduleName); + _tableContainerId = "#" + newContainerId; + _formIdName = moduleName + "_" + newContainerId + "-form"; + _previousTableTitle = previousTableTitle; + _addDOMElements(); + _bindClickEvents(); + _staticData = await servicesData.getGeneralData(_getModuleType()); + if (generalDataEmplLists !== null) { + _generalDataEmplLists = generalDataEmplLists; + } else { + _generalDataEmplLists = { + listEmpls: _staticData.lists.listEmpls + }; + } + return _staticData; +} +export async function renderFormInDialog(contentId, data, addTask = false) { + const moduleName = ModuleNameEnum.SERVICES; + const pkForJobService = { + jpos_jobid: data.jobId, + jpos_posno: data.posNo, + jpos_headertype: 1, + jpos_subposno: 1 + }; + _setParentModuleSettings(ModuleNameEnum.JOB); + _isFormInDialog = true; + _isFormInDialogSelector = contentId; + _isFormInDialogJobPK = pkForJobService; + _parentTableDataId = { + jobid: data.jobId + }; + _formIdName = moduleName + "_form"; + _staticData = await servicesData.getGeneralData("job"); + checkIsNonemptyObject(_staticData, "staticData in " + moduleName); + const settings = await servicesData.getActionInfo( + getPKfromModule(), + _getModuleType() + ); + _positionSettings.settings[SETTINGS.CREATABLE] = settings.canBeCreated; + _positionSettings.settings[SETTINGS.DELETABLE] = settings.canBeDeleted; + const emailOfCurrentUser = await employeeData.getEmplList(); + _generalDataEmplLists = { + listEmpls: emailOfCurrentUser + }; + if (addTask) { + + _showFormButtons(buttons.STATE.initialize); + $("#newPosition button").trigger("click"); + } else { + await _showForm(buttons.STATE.show, pkForJobService, contentId); + } +} diff --git a/test/configCases/inner-graph/issue-11678/webpack.config.js b/test/configCases/inner-graph/issue-11678/webpack.config.js new file mode 100644 index 00000000000..1f6ca505c99 --- /dev/null +++ b/test/configCases/inner-graph/issue-11678/webpack.config.js @@ -0,0 +1,74 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "resize-observer": ["ResizeObserver"], + "Source_Data/employee": [], + "Source_Data/services": [], + "Source_Framework/splitview/page": [], + "Source_Framework/splitview/menu": [], + "Source_Framework/splitview/text": [], + "Source_Framework/uilistpicker/UiListPicker": [], + "Source_ODS/cookiestorage": [], + "Source_Framework/uirichtextedit": [], + "Source_Framework/uielement": [], + "Source_ODS/UiButton/icon": [], + "Source_ODS/UiButton/text": [], + "Source_Framework/pagelinks": [], + "Source_ODS/ods": [], + "Source_ODS/UiButton": [], + "Source_Framework/defaultButtons": [], + "Source_Framework/uiform": [], + "Source_Framework/breadcrumb": [], + "Source_ODS/lodash": [], + "Source_ODS/DomElement": [], + "Source_ODS/url": [], + "Source_ODS/tooltip": [], + "Source_ODS/ui": [], + "Source_ODS/types": [], + "Source_ODS/UiDialog": [], + "Source_Framework/common/moduleDispatcher": [], + "Source_Framework/common/employeeassignment": [], + "Source_Framework/common/pdf_preview": [], + "Source_Framework/common/taskprogress": [], + "Source_Framework/uitable": [], + "Source_Framework/backend/universalData": [], + "Source_Framework/common/columnsDialog": [], + "Source_Framework/backend/jsonData": [], + "Source_Framework/common/statuschange": [], + "Source_Framework/common/las_mod_jobselection": [], + "./text": [], + "./bec": [], + "./positionTypes": [], + "./settings": ["SETTINGS"], + "./preferences": [], + "./privileges": [], + "./buttons": [], + "./form": [], + "./formHelper": [], + "./table": [], + "./techText": [], + "./addPositionToSi": [], + "./ciPosFromJob": [], + "./shiftPosition": [], + "./autoSums": [], + "./defineLayout": [], + "./insertFromTemplate": [], + "./movePosition": [], + "./copy": [], + "./save": [], + "./createOrder": [], + "./orderPosFromJobPos": [], + "./nchInfoDialog": [], + "Source_Modules/las_mod_siheader/url": [], + "Source_Modules/las_mod_siheader/bec": [], + "Source_Modules/las_mod_ceheader/bec": [], + "Source_Modules/las_mod_order/bec": [], + "Source_Modules/las_mod_ciheader/bec": [] + } + } +}); diff --git a/test/configCases/inner-graph/issue-12669-mini/module.js b/test/configCases/inner-graph/issue-12669-mini/module.js new file mode 100644 index 00000000000..e75a8b80e82 --- /dev/null +++ b/test/configCases/inner-graph/issue-12669-mini/module.js @@ -0,0 +1,5 @@ +import { x, y } from "./dependency"; + +export { a }; +const a = /*#__PURE__*/ x(); +// export const b = /*#__PURE__*/ y(); diff --git a/test/configCases/inner-graph/issue-12669-mini/webpack.config.js b/test/configCases/inner-graph/issue-12669-mini/webpack.config.js new file mode 100644 index 00000000000..0760c5635a9 --- /dev/null +++ b/test/configCases/inner-graph/issue-12669-mini/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + // nothing: { + // usedExports: [], + // expect: { + // "./dependency": [] + // } + // }, + a: { + usedExports: ["a"], + expect: { + "./dependency": ["x"] + } + } + // b: { + // usedExports: ["b"], + // expect: { + // "./dependency": ["y"] + // } + // } +}); diff --git a/test/configCases/inner-graph/issue-12669/module.js b/test/configCases/inner-graph/issue-12669/module.js new file mode 100644 index 00000000000..6a05f296dac --- /dev/null +++ b/test/configCases/inner-graph/issue-12669/module.js @@ -0,0 +1,309 @@ +import * as tracing_1 from "@effect-ts/tracing-utils"; +const fileName_1 = "(@effect-ts/core): _src/Option/operations.ts"; +import * as O from "@effect-ts/system/Option"; +import { makeAssociative } from "../Associative"; +import { left, right } from "../Either"; +import { pipe } from "../Function"; +import { fold, fromAssociative, makeIdentity } from "../Identity"; +import { makeOrd } from "../Ord"; +import * as P from "../Prelude"; +export function getEqual(E) { + return { + equals: y => x => + x === y || + (O.isNone(x) + ? O.isNone(y) + : O.isNone(y) + ? false + : E.equals(y.value)(x.value)) + }; +} +export function getShow(S) { + return { + show: ma => (O.isNone(ma) ? "none" : `some(${S.show(ma.value)})`) + }; +} +export const AssociativeEither = /*#__PURE__*/ P.instance({ + orElseEither: fb => fa => + fa._tag === "Some" ? O.some(left(fa.value)) : O.map_(fb(), right) +}); +export const Covariant = /*#__PURE__*/ P.instance({ + map: O.map +}); +export const Any = /*#__PURE__*/ P.instance({ + any: () => O.some({}) +}); +export const AssociativeFlatten = /*#__PURE__*/ P.instance({ + flatten: O.flatten +}); +export const IdentityFlatten = /*#__PURE__*/ P.instance( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Any), + AssociativeFlatten + ) +); +export const Monad = /*#__PURE__*/ P.instance( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Covariant), + IdentityFlatten + ) +); +export const AssociativeBoth = /*#__PURE__*/ P.instance({ + both: O.zip +}); +export const IdentityBoth = /*#__PURE__*/ P.instance( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Any), + AssociativeBoth + ) +); +export const Applicative = /*#__PURE__*/ P.instance( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Covariant), + IdentityBoth + ) +); +export const Extend = /*#__PURE__*/ P.instance({ + extend: O.extend +}); +export const Foldable = /*#__PURE__*/ P.instance({ + reduce: (b, f) => fa => (O.isNone(fa) ? b : f(b, fa.value)), + reduceRight: (b, f) => fa => (O.isNone(fa) ? b : f(fa.value, b)), + foldMap: M => f => fa => (O.isNone(fa) ? M.identity : f(fa.value)) +}); +export const forEachF = /*#__PURE__*/ P.implementForEachF()( + () => G => f => fa => + O.isNone(fa) ? P.succeedF(G)(O.none) : G.map(O.some)(f(fa.value)) +); +export const ForEach = /*#__PURE__*/ P.instance( + /*#__PURE__*/ Object.assign(/*#__PURE__*/ Object.assign({}, Covariant), { + forEachF + }) +); +export const Fail = /*#__PURE__*/ P.instance({ + fail: () => O.none +}); +/** + * Returns `true` if `ma` contains `a` + */ + +export function elem(E) { + const el = elem_(E); + return a => ma => el(ma, a); +} +/** + * Returns `true` if `ma` contains `a` + */ + +export function elem_(E) { + return (ma, a) => (O.isNone(ma) ? false : E.equals(ma.value)(a)); +} +/** + * `Apply` Identity + * + * | x | y | combine(y)(x) | + * | ------- | ------- | ------------------ | + * | none | none | none | + * | some(a) | none | none | + * | none | some(a) | none | + * | some(a) | some(b) | some(concat(a, b)) | + */ + +export function getApplyIdentity(M) { + return fromAssociative(getApplyAssociative(M))(O.none); +} +/** + * `Apply` Associative + * + * | x | y | combine(y)(x) | + * | ------- | ------- | ------------------ | + * | none | none | none | + * | some(a) | none | none | + * | none | some(a) | none | + * | some(a) | some(b) | some(concat(a, b)) | + */ + +export function getApplyAssociative(S) { + return makeAssociative(y => x => + O.isSome(x) && O.isSome(y) ? O.some(S.combine(y.value)(x.value)) : O.none + ); +} +/** + * `Identity` returning the left-most non-`None` value + * + * | x | y | combine(y)(x) | + * | ------- | ------- | ------------- | + * | none | none | none | + * | some(a) | none | some(a) | + * | none | some(a) | some(a) | + * | some(a) | some(b) | some(a) | + */ + +export function getLastIdentity() { + return fromAssociative(getLastAssociative())(O.none); +} +/** + * `Associative` returning the left-most non-`None` value + * + * | x | y | combine(y)(x) | + * | ------- | ------- | ------------- | + * | none | none | none | + * | some(a) | none | some(a) | + * | none | some(a) | some(a) | + * | some(a) | some(b) | some(a) | + */ + +export function getLastAssociative() { + return makeAssociative(y => x => (O.isNone(x) ? x : y)); +} +/** + * `Associative` returning the left-most non-`None` value + * + * | x | y | combine(y)(x) | + * | ------- | ------- | ------------- | + * | none | none | none | + * | some(a) | none | some(a) | + * | none | some(a) | some(a) | + * | some(a) | some(b) | some(a) | + */ + +export function getFirstAssociative() { + return makeAssociative(y => x => (O.isNone(x) ? y : x)); +} +/** + * `Identity` returning the left-most non-`None` value + * + * | x | y | combine(y)(x) | + * | ------- | ------- | ------------- | + * | none | none | none | + * | some(a) | none | some(a) | + * | none | some(a) | some(a) | + * | some(a) | some(b) | some(a) | + */ + +export function getFirstIdentity() { + return fromAssociative(getFirstAssociative())(O.none); +} +export const getFirst = (...items) => fold(getFirstIdentity())(items); +export const getLast = (...items) => fold(getLastIdentity())(items); +/** + * The `Ord` instance allows `Option` values to be compared with + * `compare`, whenever there is an `Ord` instance for + * the type the `Option` contains. + * + * `None` is considered to be less than any `Some` value. + */ + +export function getOrd(_) { + return makeOrd(getEqual(_).equals, y => x => + x === y + ? 0 + : O.isSome(x) + ? O.isSome(y) + ? _.compare(y.value)(x.value) + : 1 + : -1 + ); +} +export const filter = predicate => fa => + O.isNone(fa) ? O.none : predicate(fa.value) ? fa : O.none; +export const filterMap = f => ma => (O.isNone(ma) ? O.none : f(ma.value)); +const defaultSeparate = { + left: O.none, + right: O.none +}; +export function separate(ma) { + const o = O.map_(ma, e => ({ + left: O.getLeft(e), + right: O.getRight(e) + })); + return O.isNone(o) ? defaultSeparate : o.value; +} +export const partition = predicate => fa => ({ + left: filter(a => !predicate(a))(fa), + right: filter(predicate)(fa) +}); +export const partitionMap = f => fa => separate(O.map_(fa, f)); +export const Filterable = /*#__PURE__*/ P.instance({ + filter, + filterMap, + partition, + partitionMap +}); +export const sequence = /*#__PURE__*/ P.sequenceF(ForEach); +export const separateF = /*#__PURE__*/ P.implementSeparateF()( + _ => F => f => fa => { + const o = O.map_(fa, a => + F.map(e => ({ + left: O.getLeft(e), + right: O.getRight(e) + }))(f(a)) + ); + return O.isNone(o) + ? P.succeedF(F)({ + left: O.none, + right: O.none + }) + : o.value; + } +); +export const compactF = /*#__PURE__*/ P.implementCompactF()( + _ => F => f => fa => { + return O.isNone(fa) ? P.succeedF(F)(O.none) : f(fa.value); + } +); +export const Wiltable = /*#__PURE__*/ P.instance({ + separateF +}); +export const Witherable = /*#__PURE__*/ P.instance({ + compactF +}); +export const Compactable = /*#__PURE__*/ P.instance({ + compact: O.flatten, + separate +}); +export function getIdentity(A) { + return makeIdentity(O.none, y => x => + O.isNone(x) ? y : O.isNone(y) ? x : O.some(A.combine(y.value)(x.value)) + ); +} +export const alt = /*#__PURE__*/ P.orElseF( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Covariant), + AssociativeEither + ) +); +export const gen = /*#__PURE__*/ P.genF(Monad); +export const bind = /*#__PURE__*/ P.bindF(Monad); +const do_ = /*#__PURE__*/ P.doF(Monad); +export { do_ as do }; +export { branch as if, branch_ as if_ }; +export const struct = /*#__PURE__*/ P.structF( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Monad), + Applicative + ) +); +export const tuple = /*#__PURE__*/ P.tupleF( + /*#__PURE__*/ Object.assign( + /*#__PURE__*/ Object.assign({}, Monad), + Applicative + ) +); +/** + * Matchers + */ + +export const { + match, + matchIn, + matchMorph, + matchTag, + matchTagIn +} = /*#__PURE__*/ P.matchers(Covariant); +/** + * Conditionals + */ + +const branch = /*#__PURE__*/ P.conditionalF(Covariant); +const branch_ = /*#__PURE__*/ P.conditionalF_(Covariant); diff --git a/test/configCases/inner-graph/issue-12669/webpack.config.js b/test/configCases/inner-graph/issue-12669/webpack.config.js new file mode 100644 index 00000000000..d837bb975f1 --- /dev/null +++ b/test/configCases/inner-graph/issue-12669/webpack.config.js @@ -0,0 +1,75 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "@effect-ts/tracing-utils": [], + "@effect-ts/system/Option": [ + "extend", + "flatten", + "getLeft", + "getRight", + "isNone", + "map", + "map_", + "none", + "some", + "zip" + ], + "../Associative": [], + "../Either": ["left", "right"], + "../Function": [], + "../Identity": [], + "../Ord": [], + "../Prelude": [ + "implementCompactF", + "implementForEachF", + "implementSeparateF", + "instance", + "matchers", + "orElseF", + "structF", + "succeedF", + "tupleF" + ] + } + }, + if: { + usedExports: ["if"], + expect: { + "@effect-ts/tracing-utils": [], + "@effect-ts/system/Option": [ + "extend", + "flatten", + "getLeft", + "getRight", + "isNone", + "map", + "map_", + "none", + "some", + "zip" + ], + "../Associative": [], + "../Either": ["left", "right"], + "../Function": [], + "../Identity": [], + "../Ord": [], + "../Prelude": [ + "implementCompactF", + "implementForEachF", + "implementSeparateF", + "instance", + "matchers", + "orElseF", + "structF", + "succeedF", + "tupleF", + "conditionalF" + ] + } + } +}); diff --git a/test/configCases/inner-graph/issue-17565/module.js b/test/configCases/inner-graph/issue-17565/module.js new file mode 100644 index 00000000000..c98eb025b40 --- /dev/null +++ b/test/configCases/inner-graph/issue-17565/module.js @@ -0,0 +1,60 @@ +import { A, B, C1, C2, C3, Err } from "./test"; + +var arr1 = A, + cls = class extends Error {}, + cls1 = class { + constructor(t) { + if (!arr1.includes(t.version)) throw "invalid parquet version"; + } + async *[Symbol.asyncIterator]() { + yield ""; + } + }; + +var arr2 = B; +var cls2 = class extends Error {}, + cls3 = class { + constructor(t) { + if (!arr2.includes(t.version)) throw "invalid parquet version"; + } + async *[Symbol.asyncIterator]() { + yield ""; + } + }; + +var arr3 = C1; +var cls4 = class { + constructor() {} + }, + cls5 = class { + constructor(t) { + if (!arr3.includes(t.version)) throw "invalid parquet version"; + } + async *[Symbol.asyncIterator]() { + yield ""; + } + }; + +var arr4 = C2; +var cls6 = class { + foo = [1, 2]; + }, + cls7 = class { + constructor(t) { + if (!arr4.includes(t.version)) throw "invalid parquet version"; + } + async *[Symbol.asyncIterator]() { + yield ""; + } + }; + +var arr5 = C3; +var cls8 = class extends Err {}, + cls9 = class { + constructor(t) {} + async *[Symbol.asyncIterator]() { + yield ""; + } + }; + +export { cls1, cls3, cls5, cls7, cls9 } diff --git a/test/configCases/inner-graph/issue-17565/test.filter.js b/test/configCases/inner-graph/issue-17565/test.filter.js new file mode 100644 index 00000000000..aa94ec7b474 --- /dev/null +++ b/test/configCases/inner-graph/issue-17565/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsClassFields = require("../../../helpers/supportsClassFields"); + +module.exports = () => supportsClassFields(); diff --git a/test/configCases/inner-graph/issue-17565/webpack.config.js b/test/configCases/inner-graph/issue-17565/webpack.config.js new file mode 100644 index 00000000000..3c8fed58bf2 --- /dev/null +++ b/test/configCases/inner-graph/issue-17565/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./test": ["A", "B", "C1", "C2"] + } + }, + all: { + usedExports: ["cls1", "cls3", "cls5", "cls7", "cls9"], + expect: { + "./test": ["A", "B", "C1", "C2"] + } + } +}); diff --git a/test/configCases/inner-graph/issue-20151/i18n.js b/test/configCases/inner-graph/issue-20151/i18n.js new file mode 100644 index 00000000000..98c3d323f78 --- /dev/null +++ b/test/configCases/inner-graph/issue-20151/i18n.js @@ -0,0 +1,9 @@ +const doSomething = () => {}; + +export function __( v ) { + doSomething( v ); +} + +export default { + __, +}; diff --git a/test/configCases/inner-graph/issue-20151/index.js b/test/configCases/inner-graph/issue-20151/index.js new file mode 100644 index 00000000000..3a8fde00c7b --- /dev/null +++ b/test/configCases/inner-graph/issue-20151/index.js @@ -0,0 +1,32 @@ +import i18n from "./i18n.js"; +import { used } from "./wtf.js"; +import { parse } from "acorn"; +import fs from "fs"; + +const __ = i18n.__; + +function xyz() { + used(); + __("abc"); +} +xyz(); + +it("Should keep top-level `__` variable name in the entry module", () => { + const bundle = fs.readFileSync(__filename, "utf-8"); + + const ast = parse(bundle, { + sourceType: "module", + ecmaVersion: "latest" + }); + + expect( + ast.body.some( + (node) => + node.type === "VariableDeclaration" && + node.declarations.some( + (declaration) => + declaration.id.type === "Identifier" && declaration.id.name === "__" + ) + ) + ).toBe(true); +}); diff --git a/test/configCases/inner-graph/issue-20151/test.filter.js b/test/configCases/inner-graph/issue-20151/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/inner-graph/issue-20151/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/inner-graph/issue-20151/webpack.config.js b/test/configCases/inner-graph/issue-20151/webpack.config.js new file mode 100644 index 00000000000..bf159094f43 --- /dev/null +++ b/test/configCases/inner-graph/issue-20151/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + target: "node14", + optimization: { + minimize: false, + mangleExports: false, + concatenateModules: false, + emitOnErrors: true + }, + output: { + module: true + }, + experiments: { + outputModule: true + }, + externals: ["acorn"] +}; diff --git a/test/configCases/inner-graph/issue-20151/wtf.js b/test/configCases/inner-graph/issue-20151/wtf.js new file mode 100644 index 00000000000..af20dbc303c --- /dev/null +++ b/test/configCases/inner-graph/issue-20151/wtf.js @@ -0,0 +1,9 @@ +import { __ } from './i18n.js'; + +export function unused() { + return __( "wtf" ); +} + +export function used() { + return __( "ok" ); +} diff --git a/test/configCases/inner-graph/localReference/module.js b/test/configCases/inner-graph/localReference/module.js new file mode 100644 index 00000000000..c46254fcf97 --- /dev/null +++ b/test/configCases/inner-graph/localReference/module.js @@ -0,0 +1,19 @@ +import { deepEqual, equal } from "./assert"; + +function fun1() { + deepEqual(1, 1); +} + +function fun2() { + fun1(); +} + +function fun3() { + fun2(); +} + +function notExport() { + fun3(); +} + +notExport(); diff --git a/test/configCases/inner-graph/localReference/webpack.config.js b/test/configCases/inner-graph/localReference/webpack.config.js new file mode 100644 index 00000000000..a29fd1edf51 --- /dev/null +++ b/test/configCases/inner-graph/localReference/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./assert": ["deepEqual"] + } + } +}); diff --git a/test/configCases/inner-graph/nested/module.js b/test/configCases/inner-graph/nested/module.js new file mode 100644 index 00000000000..14b19291325 --- /dev/null +++ b/test/configCases/inner-graph/nested/module.js @@ -0,0 +1,25 @@ +import { deepEqual, equal } from "./assert"; + +function fun1() { + deepEqual(1, 1); +} + +function fun2() { + fun1(); +} + +function fun3() { + fun2(); +} + +function fun4() { + fun3(); +} + +export function fun5() { + fun4(); +} + +export function fun6() { + equal(1, 1); +} diff --git a/test/configCases/inner-graph/nested/webpack.config.js b/test/configCases/inner-graph/nested/webpack.config.js new file mode 100644 index 00000000000..f7b22af99f0 --- /dev/null +++ b/test/configCases/inner-graph/nested/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./assert": [] + } + }, + fun5: { + usedExports: ["fun5"], + expect: { + "./assert": ["deepEqual"] + } + }, + fun6: { + usedExports: ["fun6"], + expect: { + "./assert": ["equal"] + } + }, + all: { + usedExports: ["fun5", "fun6"], + expect: { + "./assert": ["deepEqual", "equal"] + } + } +}); diff --git a/test/configCases/inner-graph/pr-18342/common/index.js b/test/configCases/inner-graph/pr-18342/common/index.js new file mode 100644 index 00000000000..f402294b264 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/common/index.js @@ -0,0 +1,5 @@ +import pure from './pure' + +export default () => { + pure() +} diff --git a/test/configCases/inner-graph/pr-18342/common/pure.js b/test/configCases/inner-graph/pr-18342/common/pure.js new file mode 100644 index 00000000000..a28916593c1 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/common/pure.js @@ -0,0 +1,5 @@ +function pure() { + 1; +} + +export default pure diff --git a/test/configCases/inner-graph/pr-18342/entry1/index.js b/test/configCases/inner-graph/pr-18342/entry1/index.js new file mode 100644 index 00000000000..d514bdea667 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/entry1/index.js @@ -0,0 +1,6 @@ +import common from "../common"; + +it("entry1 should compile and run", () => { + common(); + expect(true).toBe(true) +}); diff --git a/test/configCases/inner-graph/pr-18342/entry2/index.js b/test/configCases/inner-graph/pr-18342/entry2/index.js new file mode 100644 index 00000000000..63df6e2511a --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/entry2/index.js @@ -0,0 +1,6 @@ +it("entry2 should compile and run", () => { + import(/* webpackChunkName: "chunk-reason-webpackChunkName" */'../common').then(common => { + common.default(); + expect(true).toBe(true) + }) +}); diff --git a/test/configCases/inner-graph/pr-18342/entry3/a.js b/test/configCases/inner-graph/pr-18342/entry3/a.js new file mode 100644 index 00000000000..90bd54cd7f2 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/entry3/a.js @@ -0,0 +1 @@ +export default 'a' diff --git a/test/configCases/inner-graph/pr-18342/entry3/index.js b/test/configCases/inner-graph/pr-18342/entry3/index.js new file mode 100644 index 00000000000..8ee2345ccd8 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/entry3/index.js @@ -0,0 +1,8 @@ +function nothing() {} + +it("entry3 should compile and run", () => { + import(/* webpackChunkName: "chunk-reason-webpackChunkName" */'./a.js').then(a => { + nothing(a.default); + expect(true).toBe(true) + }) +}); diff --git a/test/configCases/inner-graph/pr-18342/test.config.js b/test/configCases/inner-graph/pr-18342/test.config.js new file mode 100644 index 00000000000..ffa7d375ed6 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +const findOutputFiles = require("../../../helpers/findOutputFiles"); + +module.exports = { + findBundle(_, options) { + const files = findOutputFiles(options, /^entry/); + return files; + } +}; diff --git a/test/configCases/inner-graph/pr-18342/webpack.config.js b/test/configCases/inner-graph/pr-18342/webpack.config.js new file mode 100644 index 00000000000..13e42680b35 --- /dev/null +++ b/test/configCases/inner-graph/pr-18342/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +module.exports = { + target: ["node"], + entry: { + entry1: ["./entry1/index.js"], + entry2: ["./entry2/index.js"], + entry3: ["./entry3/index.js"] + }, + output: { + filename: "[name].js", + chunkFilename: "[name].chunk.js" + }, + optimization: { + minimize: false, + runtimeChunk: true, + splitChunks: { + chunks: "initial", + cacheGroups: { + pureFn: { + test: /pure/, + enforce: true, + name: "chunk-reason-split-chunks" + } + } + } + } +}; diff --git a/test/configCases/inner-graph/pure-template-literal/module.js b/test/configCases/inner-graph/pure-template-literal/module.js new file mode 100644 index 00000000000..a56a8122c86 --- /dev/null +++ b/test/configCases/inner-graph/pure-template-literal/module.js @@ -0,0 +1,5 @@ +import { im1, fn } from "any"; + +export const pureTpl = `${im1}`; + +export const impureTpl = `${fn()}`; diff --git a/test/configCases/inner-graph/pure-template-literal/webpack.config.js b/test/configCases/inner-graph/pure-template-literal/webpack.config.js new file mode 100644 index 00000000000..613cf81a70c --- /dev/null +++ b/test/configCases/inner-graph/pure-template-literal/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: ["fn"] + } + }, + pureTpl: { + usedExports: ["pureTpl"], + expect: { + any: ["fn", "im1"] + } + }, + impureTpl: { + usedExports: ["impureTpl"], + expect: { + any: ["fn"] + } + } +}); diff --git a/test/configCases/inner-graph/pure/module.js b/test/configCases/inner-graph/pure/module.js new file mode 100644 index 00000000000..200b95c6b01 --- /dev/null +++ b/test/configCases/inner-graph/pure/module.js @@ -0,0 +1,46 @@ +// copy from rambda/es/allPass.js +import _curry1 from "./internal/_curry1"; +import curryN from "./curryN"; +import max from "./max"; +import pluck from "./pluck"; +import reduce from "./reduce"; + +/** + * Takes a list of predicates and returns a predicate that returns true for a + * given list of arguments if every one of the provided predicates is satisfied + * by those arguments. + * + * The function returned is a curried function whose arity matches that of the + * highest-arity predicate. + * + * @func + * @memberOf R + * @since v0.9.0 + * @category Logic + * @sig [(*... -> Boolean)] -> (*... -> Boolean) + * @param {Array} predicates An array of predicates to check + * @return {Function} The combined predicate + * @see R.anyPass + * @example + * + * var isQueen = R.propEq('rank', 'Q'); + * var isSpade = R.propEq('suit', '♠︎'); + * var isQueenOfSpades = R.allPass([isQueen, isSpade]); + * + * isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false + * isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true + */ +var allPass = /*#__PURE__*/ _curry1(function allPass(preds) { + return curryN(reduce(max, 0, pluck("length", preds)), function() { + var idx = 0; + var len = preds.length; + while (idx < len) { + if (!preds[idx].apply(this, arguments)) { + return false; + } + idx += 1; + } + return true; + }); +}); +export default allPass; diff --git a/test/configCases/inner-graph/pure/webpack.config.js b/test/configCases/inner-graph/pure/webpack.config.js new file mode 100644 index 00000000000..cde8d1c7938 --- /dev/null +++ b/test/configCases/inner-graph/pure/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./internal/_curry1": [], + "./curryN": [], + "./reduce": [], + "./max": [], + "./pluck": [] + } + }, + all: { + usedExports: ["default"], + expect: { + "./internal/_curry1": ["default"], + "./curryN": ["default"], + "./reduce": ["default"], + "./max": ["default"], + "./pluck": ["default"] + } + } +}); diff --git a/test/configCases/inner-graph/ramdaIdentical/module.js b/test/configCases/inner-graph/ramdaIdentical/module.js new file mode 100644 index 00000000000..873aae2394c --- /dev/null +++ b/test/configCases/inner-graph/ramdaIdentical/module.js @@ -0,0 +1,40 @@ +// source code from library ramda +// https://github.com/Ramda/ramda/blob/master/source/identical.js + +import _curry2 from "./internal/_curry2"; + +/** + * Returns true if its arguments are identical, false otherwise. Values are + * identical if they reference the same memory. `NaN` is identical to `NaN`; + * `0` and `-0` are not identical. + * + * @func + * @memberOf R + * @since v0.15.0 + * @category Relation + * @sig a -> a -> Boolean + * @param {*} a + * @param {*} b + * @return {Boolean} + * @example + * + * var o = {}; + * R.identical(o, o); //=> true + * R.identical(1, 1); //=> true + * R.identical(1, '1'); //=> false + * R.identical([], []); //=> false + * R.identical(0, -0); //=> false + * R.identical(NaN, NaN); //=> true + */ +var identical = /*#__PURE__*/ _curry2(function identical(a, b) { + // SameValue algorithm + if (a === b) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return a !== 0 || 1 / a === 1 / b; + } else { + // Step 6.a: NaN == NaN + return a !== a && b !== b; + } +}); +export default identical; diff --git a/test/configCases/inner-graph/ramdaIdentical/webpack.config.js b/test/configCases/inner-graph/ramdaIdentical/webpack.config.js new file mode 100644 index 00000000000..19d73ddb16c --- /dev/null +++ b/test/configCases/inner-graph/ramdaIdentical/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./internal/_curry2": [] + } + }, + all: { + usedExports: ["default"], + expect: { + "./internal/_curry2": ["default"] + } + } +}); diff --git a/test/configCases/inner-graph/specifier/module.js b/test/configCases/inner-graph/specifier/module.js new file mode 100644 index 00000000000..42215ef22ef --- /dev/null +++ b/test/configCases/inner-graph/specifier/module.js @@ -0,0 +1,15 @@ +import { equal as eq, deepEqual } from "./assert"; + +function myFunction() { + function it() { + eq(1, arguments[0]); + } + deepEqual(1, 1); + it(); +} + +function fun2() { + deepEqual(1, 1); +} + +export { myFunction as fun1, fun2 }; diff --git a/test/configCases/inner-graph/specifier/webpack.config.js b/test/configCases/inner-graph/specifier/webpack.config.js new file mode 100644 index 00000000000..1a1c78b404f --- /dev/null +++ b/test/configCases/inner-graph/specifier/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + "./assert": [] + } + }, + fun1: { + usedExports: ["fun1"], + expect: { + "./assert": ["deepEqual", "equal"] + } + }, + fun2: { + usedExports: ["fun2"], + expect: { + "./assert": ["deepEqual"] + } + }, + all: { + usedExports: ["fun1", "fun2"], + expect: { + "./assert": ["deepEqual", "equal"] + } + } +}); diff --git a/test/configCases/inner-graph/varNotWritten/module.js b/test/configCases/inner-graph/varNotWritten/module.js new file mode 100644 index 00000000000..0a126886507 --- /dev/null +++ b/test/configCases/inner-graph/varNotWritten/module.js @@ -0,0 +1,25 @@ +import { im1, im2, im3 } from "any"; + +var exp1 = function() { + console.log(im1); +}; + +var exp2 = () => { + console.log(im2); +}; + +var exp3 = function() { + console.log(im3); +}; + +export var exp4 = () => { + exp2(); +}; + +export var expCls = class { + constructor() { + exp1(); + } +}; + +export { exp1, exp2, exp3 }; diff --git a/test/configCases/inner-graph/varNotWritten/webpack.config.js b/test/configCases/inner-graph/varNotWritten/webpack.config.js new file mode 100644 index 00000000000..98947282627 --- /dev/null +++ b/test/configCases/inner-graph/varNotWritten/webpack.config.js @@ -0,0 +1,48 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + exp1: { + usedExports: ["exp1"], + expect: { + any: ["im1"] + } + }, + exp2: { + usedExports: ["exp2"], + expect: { + any: ["im2"] + } + }, + exp3: { + usedExports: ["exp3"], + expect: { + any: ["im3"] + } + }, + exp4: { + usedExports: ["exp4"], + expect: { + any: ["im2"] + } + }, + expCls: { + usedExports: ["expCls"], + expect: { + any: ["im1"] + } + }, + all: { + usedExports: ["exp1", "exp2", "exp3", "exp4", "expCls"], + expect: { + any: ["im1", "im2", "im3"] + } + } +}); diff --git a/test/configCases/inner-graph/varWritten/module.js b/test/configCases/inner-graph/varWritten/module.js new file mode 100644 index 00000000000..d4fb8bcf2a2 --- /dev/null +++ b/test/configCases/inner-graph/varWritten/module.js @@ -0,0 +1,26 @@ +import { im1, im2, im3 } from "any"; + +var exp1 = function() { + console.log(im1); +}; + +var exp2 = () => { + console.log(im2); + exp1 = 3; +}; + +var exp3 = function() { + console.log(im3); +}; + +export var exp4 = () => { + exp2(); +}; + +export var expCls = class { + constructor() { + exp1(); + } +}; + +export { exp1, exp2, exp3 }; diff --git a/test/configCases/inner-graph/varWritten/webpack.config.js b/test/configCases/inner-graph/varWritten/webpack.config.js new file mode 100644 index 00000000000..98947282627 --- /dev/null +++ b/test/configCases/inner-graph/varWritten/webpack.config.js @@ -0,0 +1,48 @@ +"use strict"; + +const createTestCases = require("../_helpers/createTestCases"); + +module.exports = createTestCases({ + nothing: { + usedExports: [], + expect: { + any: [] + } + }, + exp1: { + usedExports: ["exp1"], + expect: { + any: ["im1"] + } + }, + exp2: { + usedExports: ["exp2"], + expect: { + any: ["im2"] + } + }, + exp3: { + usedExports: ["exp3"], + expect: { + any: ["im3"] + } + }, + exp4: { + usedExports: ["exp4"], + expect: { + any: ["im2"] + } + }, + expCls: { + usedExports: ["expCls"], + expect: { + any: ["im1"] + } + }, + all: { + usedExports: ["exp1", "exp2", "exp3", "exp4", "expCls"], + expect: { + any: ["im1", "im2", "im3"] + } + } +}); diff --git a/test/configCases/issues/issue-11871-imports-order/a.js b/test/configCases/issues/issue-11871-imports-order/a.js new file mode 100644 index 00000000000..0f46328a84a --- /dev/null +++ b/test/configCases/issues/issue-11871-imports-order/a.js @@ -0,0 +1,4 @@ +export const W = "w"; +export const A = "a"; +export const a = "a"; +export const _12 = "12"; diff --git a/test/configCases/issues/issue-11871-imports-order/index.js b/test/configCases/issues/issue-11871-imports-order/index.js new file mode 100644 index 00000000000..9d47d73d9db --- /dev/null +++ b/test/configCases/issues/issue-11871-imports-order/index.js @@ -0,0 +1,5 @@ +import * as values from "./a.js"; + +it("imports should have correct order", () => { + expect(Object.keys(values)).toEqual(["A", "W", "_12", "a"]) +}); diff --git a/test/configCases/issues/issue-11871-imports-order/webpack.config.js b/test/configCases/issues/issue-11871-imports-order/webpack.config.js new file mode 100644 index 00000000000..1fc5ef0a294 --- /dev/null +++ b/test/configCases/issues/issue-11871-imports-order/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + mode: "development" + }, + { + mode: "production" + }, + { + mode: "production", + optimization: { + concatenateModules: false + } + }, + { + mode: "development", + optimization: { + concatenateModules: true + } + } +]; diff --git a/test/configCases/issues/issue-12924/index.js b/test/configCases/issues/issue-12924/index.js new file mode 100644 index 00000000000..9e0bf87e832 --- /dev/null +++ b/test/configCases/issues/issue-12924/index.js @@ -0,0 +1,3 @@ +it("should compile without error", function() { + return import(/* webpackChunkName: "one" */ "./one"); +}); diff --git a/test/configCases/issues/issue-12924/one.js b/test/configCases/issues/issue-12924/one.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/issues/issue-12924/one.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/issues/issue-12924/webpack.config.js b/test/configCases/issues/issue-12924/webpack.config.js new file mode 100644 index 00000000000..dab4dd4425a --- /dev/null +++ b/test/configCases/issues/issue-12924/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + globalObject: "null || new Function('return this')()" + } + }, + { + output: { + globalObject: "(new Function('return this'))()" + } + }, + { + output: { + globalObject: "1 > 2 ? null : new Function('return this')()" + } + } +]; diff --git a/test/configCases/issues/issue-12993/dynamic.js b/test/configCases/issues/issue-12993/dynamic.js new file mode 100644 index 00000000000..6c40343ed97 --- /dev/null +++ b/test/configCases/issues/issue-12993/dynamic.js @@ -0,0 +1 @@ +export default "dynamic"; diff --git a/test/configCases/issues/issue-12993/index.js b/test/configCases/issues/issue-12993/index.js new file mode 100644 index 00000000000..b490bb515af --- /dev/null +++ b/test/configCases/issues/issue-12993/index.js @@ -0,0 +1,6 @@ +export const main = "main"; + +it("library output should be accurate value", async () => { + expect(global.lib).toEqual(nsObj({ main: "main" })); + await import(/* webpackPrefetch: true */ "./dynamic.js"); +}); diff --git a/test/configCases/issues/issue-12993/test.config.js b/test/configCases/issues/issue-12993/test.config.js new file mode 100644 index 00000000000..41ca01361b2 --- /dev/null +++ b/test/configCases/issues/issue-12993/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + afterExecute() { + delete global.lib; + } +}; diff --git a/test/configCases/issues/issue-12993/webpack.config.js b/test/configCases/issues/issue-12993/webpack.config.js new file mode 100644 index 00000000000..8819fe80079 --- /dev/null +++ b/test/configCases/issues/issue-12993/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = [ + { + mode: "development", + output: { + library: "lib", + libraryTarget: "global" + } + }, + { + mode: "development", + devtool: false, + output: { + library: "lib", + libraryTarget: "global" + } + } +]; diff --git a/test/configCases/issues/issue-14974/defer.js b/test/configCases/issues/issue-14974/defer.js new file mode 100644 index 00000000000..7e8bc9f7808 --- /dev/null +++ b/test/configCases/issues/issue-14974/defer.js @@ -0,0 +1,2 @@ +import log from "./tla.js" +log(); diff --git a/test/configCases/issues/issue-14974/index.js b/test/configCases/issues/issue-14974/index.js new file mode 100644 index 00000000000..fa5f87c45a0 --- /dev/null +++ b/test/configCases/issues/issue-14974/index.js @@ -0,0 +1,6 @@ +import "./tla.js" +const a = import("./defer.js") +import.meta.webpackHot.accept(["./defer.js"], () => {}) +it("should compile", async () => { + expect(await a).toBeTruthy(); +}); diff --git a/test/configCases/issues/issue-14974/test.filter.js b/test/configCases/issues/issue-14974/test.filter.js new file mode 100644 index 00000000000..b88fedb740b --- /dev/null +++ b/test/configCases/issues/issue-14974/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = () => process.version.slice(0, 4) !== "v10."; diff --git a/test/configCases/issues/issue-14974/tla.js b/test/configCases/issues/issue-14974/tla.js new file mode 100644 index 00000000000..e9a204b4331 --- /dev/null +++ b/test/configCases/issues/issue-14974/tla.js @@ -0,0 +1,4 @@ +await Promise.resolve(); +export default function log() { + return 1; +} diff --git a/test/configCases/issues/issue-14974/webpack.config.js b/test/configCases/issues/issue-14974/webpack.config.js new file mode 100644 index 00000000000..faab98e10d9 --- /dev/null +++ b/test/configCases/issues/issue-14974/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +const { HotModuleReplacementPlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + optimization: { usedExports: false, sideEffects: false }, + plugins: [new HotModuleReplacementPlugin()] +}; diff --git a/test/configCases/issues/issue-17459/bar.js b/test/configCases/issues/issue-17459/bar.js new file mode 100644 index 00000000000..801821e109c --- /dev/null +++ b/test/configCases/issues/issue-17459/bar.js @@ -0,0 +1 @@ +export default "bar"; diff --git a/test/configCases/issues/issue-17459/index.js b/test/configCases/issues/issue-17459/index.js new file mode 100644 index 00000000000..e570a856242 --- /dev/null +++ b/test/configCases/issues/issue-17459/index.js @@ -0,0 +1,21 @@ +import bar_string from './bar'; + +let other; + +function foo(value) { + other = value; +} + +var my_class = class { + constructor() { + this.bar = bar_string; + foo(bar_string); + } +}, my_instance = (new my_class()) + + +it("should mangle imports in class constructors", function() { + expect(bar_string).toBe("bar"); + expect(my_instance.bar).toBe(bar_string); + expect(other).toBe(bar_string); +}); diff --git a/test/configCases/issues/issue-17459/webpack.config.js b/test/configCases/issues/issue-17459/webpack.config.js new file mode 100644 index 00000000000..7389b128cd5 --- /dev/null +++ b/test/configCases/issues/issue-17459/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production" +}; diff --git a/test/configCases/issues/issue-3596/webpack.config.js b/test/configCases/issues/issue-3596/webpack.config.js index 366a4736a77..6f82711b34b 100644 --- a/test/configCases/issues/issue-3596/webpack.config.js +++ b/test/configCases/issues/issue-3596/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: { bundle0: "./index", @@ -7,9 +10,11 @@ module.exports = { filename: "[name].js" }, plugins: [ - function() { - this.hooks.emit.tap("TestPlugin", function(compilation) { - delete compilation.assets["b.js"]; + function apply() { + this.hooks.compilation.tap("TestPlugin", (compilation) => { + compilation.hooks.processAssets.tap("TestPlugin", () => { + delete compilation.assets["b.js"]; + }); }); } ] diff --git a/test/configCases/issues/issue-7470/index.js b/test/configCases/issues/issue-7470/index.js index 6267ef7b114..d47b80b19c5 100644 --- a/test/configCases/issues/issue-7470/index.js +++ b/test/configCases/issues/issue-7470/index.js @@ -1,3 +1,7 @@ it("should set NODE_ENV according to mode", () => { - expect(process.env.NODE_ENV).toBe(__MODE__); + if (__MODE__ === "none") { + expect(process.env.NODE_ENV).toBe("test"); + } else { + expect(process.env.NODE_ENV).toBe(__MODE__); + } }); diff --git a/test/configCases/issues/issue-7470/webpack.config.js b/test/configCases/issues/issue-7470/webpack.config.js index 4d4a87ba768..3c4f1fae80f 100644 --- a/test/configCases/issues/issue-7470/webpack.config.js +++ b/test/configCases/issues/issue-7470/webpack.config.js @@ -1,21 +1,22 @@ "use strict"; -const DefinePlugin = require("../../../../lib/DefinePlugin"); +const DefinePlugin = require("../../../../").DefinePlugin; +/** @type {import("../../../../").Configuration[]} */ module.exports = [ { name: "development", mode: "development", - plugins: [new DefinePlugin({ __MODE__: `"development"` })] + plugins: [new DefinePlugin({ __MODE__: '"development"' })] }, { name: "production", mode: "production", - plugins: [new DefinePlugin({ __MODE__: `"production"` })] + plugins: [new DefinePlugin({ __MODE__: '"production"' })] }, { name: "none", mode: "none", - plugins: [new DefinePlugin({ __MODE__: `"none"` })] + plugins: [new DefinePlugin({ __MODE__: '"none"' })] } ]; diff --git a/test/configCases/issues/issue-7563/test.config.js b/test/configCases/issues/issue-7563/test.config.js index dee26555271..b8044de7cd6 100644 --- a/test/configCases/issues/issue-7563/test.config.js +++ b/test/configCases/issues/issue-7563/test.config.js @@ -1,13 +1,13 @@ -var fs = require('fs'); +"use strict"; + +const fs = require("fs"); module.exports = { noTests: true, - findBundle: function(i, options) { - var regex = new RegExp("^bundle\." + options.name, "i"); - var files = fs.readdirSync(options.output.path); - var bundle = files.find(function (file) { - return regex.test(file); - }); + findBundle(i, options) { + const regex = new RegExp(`^bundle.${options.name}`, "i"); + const files = fs.readdirSync(options.output.path); + const bundle = files.find((file) => regex.test(file)); if (!bundle) { throw new Error( @@ -17,6 +17,6 @@ module.exports = { ); } - return "./" + bundle; + return `./${bundle}`; } }; diff --git a/test/configCases/issues/issue-7563/webpack.config.js b/test/configCases/issues/issue-7563/webpack.config.js index 09164011712..a58f54f7657 100644 --- a/test/configCases/issues/issue-7563/webpack.config.js +++ b/test/configCases/issues/issue-7563/webpack.config.js @@ -1,65 +1,65 @@ "use strict"; -// Have to test [hash] and [chunkhash] separately to avoid -// "Cannot use [chunkhash] or [contenthash] for chunk in 'bundle1.[hash].[hash:16].[chunkhash].[chunkhash:16].[name].[id].[query].js' (use [hash] instead)" -var testAllButHash = "[chunkhash].[chunkhash:16].[name].[id].[query]"; -var testHash = "[hash].[hash:16]"; +// [fullhash] and [chunkhash] must be used separately +const testAllButHash = "[chunkhash].[chunkhash:16].[name].[id].[query]"; +const testHash = "[fullhash].[fullhash:16]"; +/** @type {import("../../../../").Configuration[]} */ module.exports = [ { name: "webworker-all", target: "webworker", output: { - filename: "bundle.webworker-all." + testAllButHash + ".js" + filename: `bundle.webworker-all.${testAllButHash}.js` } }, { name: "webworker-hash", target: "webworker", output: { - filename: "bundle.webworker-hash." + testHash + ".js" + filename: `bundle.webworker-hash.${testHash}.js` } }, { name: "node-all", target: "node", output: { - filename: "bundle.node-all." + testAllButHash + ".js" + filename: `bundle.node-all.${testAllButHash}.js` } }, { name: "node", target: "node", output: { - filename: "bundle.node-hash." + testHash + ".js" + filename: `bundle.node-hash.${testHash}.js` } }, { name: "async-node-all", target: "async-node", output: { - filename: "bundle.async-node-all." + testAllButHash + ".js" + filename: `bundle.async-node-all.${testAllButHash}.js` } }, { name: "async-node-hash", target: "async-node", output: { - filename: "bundle.async-node-hash." + testHash + ".js" + filename: `bundle.async-node-hash.${testHash}.js` } }, { name: "web-all", target: "web", output: { - filename: "bundle.web-all." + testAllButHash + ".js" + filename: `bundle.web-all.${testAllButHash}.js` } }, { name: "web-hash", target: "web", output: { - filename: "bundle.web-hash." + testHash + ".js" + filename: `bundle.web-hash.${testHash}.js` } } ]; diff --git a/test/configCases/json/bailout-flag-dep-export-perf/data.json b/test/configCases/json/bailout-flag-dep-export-perf/data.json new file mode 100644 index 00000000000..bee9f9b8d88 --- /dev/null +++ b/test/configCases/json/bailout-flag-dep-export-perf/data.json @@ -0,0 +1,27 @@ +{ + "depth_1": { + "depth_2": { + "depth_3": { + "depth_4": { + "depth_5": { + "depth_6": "depth_6" + } + } + } + } + }, + "_depth_1": { + "_depth_2": { + "_depth_3": { + "_depth_4": { + "_depth_5": { + "_depth_6": "_depth_6" + } + } + } + } + }, + "__depth_1": [ + { "__depth_3": [{ "__depth_5": [{ "__depth_7": ["__depth_8"] }] }] } + ] +} diff --git a/test/configCases/json/bailout-flag-dep-export-perf/index.js b/test/configCases/json/bailout-flag-dep-export-perf/index.js new file mode 100644 index 00000000000..df6ffa8072b --- /dev/null +++ b/test/configCases/json/bailout-flag-dep-export-perf/index.js @@ -0,0 +1,11 @@ +export * from './data.json'; + +it("should compile and run", () => { + expect(__webpack_exports_info__.depth_1.provideInfo).toBe(true) + expect(__webpack_exports_info__._depth_1.provideInfo).toBe(true) + expect(__webpack_exports_info__.__depth_1.provideInfo).toBe(true) + + expect(__webpack_exports_info__.depth_1.depth_2.provideInfo).toBe(true) + expect(__webpack_exports_info__._depth_1._depth_2._depth_3._depth_4.provideInfo).toBe(true) + expect(__webpack_exports_info__.__depth_1[0].__depth_3[0].__depth_5.provideInfo).toBe(true) +}); diff --git a/test/configCases/json/bailout-flag-dep-export-perf/webpack.config.js b/test/configCases/json/bailout-flag-dep-export-perf/webpack.config.js new file mode 100644 index 00000000000..ea739dd445d --- /dev/null +++ b/test/configCases/json/bailout-flag-dep-export-perf/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + parser: { + json: { + exportsDepth: Infinity + } + } + } +}; diff --git a/test/configCases/json/flag-dep-export-perf/data.json b/test/configCases/json/flag-dep-export-perf/data.json new file mode 100644 index 00000000000..bee9f9b8d88 --- /dev/null +++ b/test/configCases/json/flag-dep-export-perf/data.json @@ -0,0 +1,27 @@ +{ + "depth_1": { + "depth_2": { + "depth_3": { + "depth_4": { + "depth_5": { + "depth_6": "depth_6" + } + } + } + } + }, + "_depth_1": { + "_depth_2": { + "_depth_3": { + "_depth_4": { + "_depth_5": { + "_depth_6": "_depth_6" + } + } + } + } + }, + "__depth_1": [ + { "__depth_3": [{ "__depth_5": [{ "__depth_7": ["__depth_8"] }] }] } + ] +} diff --git a/test/configCases/json/flag-dep-export-perf/index.js b/test/configCases/json/flag-dep-export-perf/index.js new file mode 100644 index 00000000000..6ecc00cfec0 --- /dev/null +++ b/test/configCases/json/flag-dep-export-perf/index.js @@ -0,0 +1,11 @@ +export * from './data.json'; + +it("should compile and run", () => { + expect(__webpack_exports_info__.depth_1.provideInfo).toBe(true) + expect(__webpack_exports_info__._depth_1.provideInfo).toBe(true) + expect(__webpack_exports_info__.__depth_1.provideInfo).toBe(true) + + expect(__webpack_exports_info__.depth_1.depth_2.provideInfo).toBe(undefined) + expect(__webpack_exports_info__._depth_1._depth_2._depth_3._depth_4.provideInfo).toBe(undefined) + expect(__webpack_exports_info__.__depth_1[0].__depth_3[0].__depth_5.provideInfo).toBe(undefined) +}); diff --git a/test/configCases/json/flag-dep-export-perf/webpack.config.js b/test/configCases/json/flag-dep-export-perf/webpack.config.js new file mode 100644 index 00000000000..c19d15e8f12 --- /dev/null +++ b/test/configCases/json/flag-dep-export-perf/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development" +}; diff --git a/test/configCases/json/generator-json-parse-false/data.json b/test/configCases/json/generator-json-parse-false/data.json new file mode 100644 index 00000000000..843593ba1b7 --- /dev/null +++ b/test/configCases/json/generator-json-parse-false/data.json @@ -0,0 +1 @@ +{"this is a large JSON object": "that should be converted to JSON.parse by default"} diff --git a/test/configCases/json/generator-json-parse-false/data1.json b/test/configCases/json/generator-json-parse-false/data1.json new file mode 100644 index 00000000000..58fc637957a --- /dev/null +++ b/test/configCases/json/generator-json-parse-false/data1.json @@ -0,0 +1,5 @@ +[ + { + "this is a large JSON object": "that should be converted to JSON.parse by default" + } +] diff --git a/test/configCases/json/generator-json-parse-false/index.js b/test/configCases/json/generator-json-parse-false/index.js new file mode 100644 index 00000000000..56c8fbfa29a --- /dev/null +++ b/test/configCases/json/generator-json-parse-false/index.js @@ -0,0 +1,24 @@ +it("should avoid JSON.parse", () => { + const JSONParse = jest.spyOn(JSON, 'parse'); + JSONParse.mockClear(); + + const data = require('./data.json'); + const data2 = require('data:application/json,{"this is a large JSON object": "that should be converted to JSON.parse by default"}'); + const data3 = require('./data1.json'); + + expect(data).toMatchObject({["this is a large JSON object"]: "that should be converted to JSON.parse by default"}); + expect(data2).toMatchObject({["this is a large JSON object"]: "that should be converted to JSON.parse by default"}); + expect(data3).toMatchObject([{"this is a large JSON object": "that should be converted to JSON.parse by default"}]); + + expect(JSONParse).not.toHaveBeenCalled(); +}); + +it("should JSON.parse when resourceQuery is JSONParse=true", () => { + const JSONParse = jest.spyOn(JSON, 'parse'); + JSONParse.mockClear(); + + const data = require('./data.json?JSONParse=true'); + + expect(data).toMatchObject({["this is a large JSON object"]: "that should be converted to JSON.parse by default"}); + expect(JSONParse).toHaveBeenCalledTimes(1); +}); \ No newline at end of file diff --git a/test/configCases/json/generator-json-parse-false/webpack.config.js b/test/configCases/json/generator-json-parse-false/webpack.config.js new file mode 100644 index 00000000000..67388be4319 --- /dev/null +++ b/test/configCases/json/generator-json-parse-false/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + mode: "development", + module: { + rules: [ + { + test: /\.json$/, + resourceQuery: /JSONParse=true/, + type: "json", + generator: { JSONParse: true } + } + ], + generator: { json: { JSONParse: false } } + } +}; diff --git a/test/configCases/json/generator-json-parse-true/data.json b/test/configCases/json/generator-json-parse-true/data.json new file mode 100644 index 00000000000..914dc282694 --- /dev/null +++ b/test/configCases/json/generator-json-parse-true/data.json @@ -0,0 +1 @@ +{"123this is a large JSON object": "that should be converted to JSON.parse by default"} diff --git a/test/configCases/json/generator-json-parse-true/data1.json b/test/configCases/json/generator-json-parse-true/data1.json new file mode 100644 index 00000000000..58fc637957a --- /dev/null +++ b/test/configCases/json/generator-json-parse-true/data1.json @@ -0,0 +1,5 @@ +[ + { + "this is a large JSON object": "that should be converted to JSON.parse by default" + } +] diff --git a/test/configCases/json/generator-json-parse-true/index.js b/test/configCases/json/generator-json-parse-true/index.js new file mode 100644 index 00000000000..ab4efe631bb --- /dev/null +++ b/test/configCases/json/generator-json-parse-true/index.js @@ -0,0 +1,24 @@ +it("should use JSON.parse", () => { + const JSONParse = jest.spyOn(JSON, 'parse'); + JSONParse.mockClear(); + + const data = require('./data.json'); + const data2 = require('data:application/json,{"this is a large JSON object": "that should be converted to JSON.parse by default"}'); + const data3 = require('./data1.json'); + + expect(data).toMatchObject({["123this is a large JSON object"]: "that should be converted to JSON.parse by default"}); + expect(data2).toMatchObject({["this is a large JSON object"]: "that should be converted to JSON.parse by default"}); + expect(data3).toMatchObject([{"this is a large JSON object": "that should be converted to JSON.parse by default"}]); + + expect(JSONParse).toHaveBeenCalledTimes(3); +}); + +it("should not call JSON.parse when resourceQuery is JSONParse=false", () => { + const JSONParse = jest.spyOn(JSON, 'parse'); + JSONParse.mockClear(); + + const data = require('./data.json?JSONParse=false'); + + expect(data).toMatchObject({["123this is a large JSON object"]: "that should be converted to JSON.parse by default"}); + expect(JSONParse).not.toHaveBeenCalled(); +}); \ No newline at end of file diff --git a/test/configCases/json/generator-json-parse-true/webpack.config.js b/test/configCases/json/generator-json-parse-true/webpack.config.js new file mode 100644 index 00000000000..20bea40d291 --- /dev/null +++ b/test/configCases/json/generator-json-parse-true/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + mode: "development", + module: { + rules: [ + { + test: /\.json$/, + resourceQuery: /JSONParse=false/, + type: "json", + generator: { JSONParse: false } + } + ], + generator: { json: { JSONParse: true } } + } +}; diff --git a/test/configCases/json/named-exports/data.json b/test/configCases/json/named-exports/data.json new file mode 100644 index 00000000000..d086709f676 --- /dev/null +++ b/test/configCases/json/named-exports/data.json @@ -0,0 +1,3 @@ +{ + "value": 42 +} diff --git a/test/configCases/json/named-exports/index.js b/test/configCases/json/named-exports/index.js new file mode 100644 index 00000000000..a128c56f49b --- /dev/null +++ b/test/configCases/json/named-exports/index.js @@ -0,0 +1,5 @@ +import { value } from './data.json'; + +it('should allow to use named export', () => { + expect(value).toBe(42); +}); diff --git a/test/configCases/json/named-exports/webpack.config.js b/test/configCases/json/named-exports/webpack.config.js new file mode 100644 index 00000000000..6c137574b87 --- /dev/null +++ b/test/configCases/json/named-exports/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + module: { + parser: { + json: { + namedExports: true + } + } + } +}; diff --git a/test/configCases/json/only-null/data.json b/test/configCases/json/only-null/data.json new file mode 100644 index 00000000000..19765bd501b --- /dev/null +++ b/test/configCases/json/only-null/data.json @@ -0,0 +1 @@ +null diff --git a/test/configCases/json/only-null/index.js b/test/configCases/json/only-null/index.js new file mode 100644 index 00000000000..58c9a439415 --- /dev/null +++ b/test/configCases/json/only-null/index.js @@ -0,0 +1,5 @@ +it("should work", () => { + const data = require('./data.json'); + + expect(data).toBe(null); +}); diff --git a/test/configCases/json/only-null/webpack.config.js b/test/configCases/json/only-null/webpack.config.js new file mode 100644 index 00000000000..7389b128cd5 --- /dev/null +++ b/test/configCases/json/only-null/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production" +}; diff --git a/test/configCases/json/only-string/data.json b/test/configCases/json/only-string/data.json new file mode 100644 index 00000000000..ace2d72d9d3 --- /dev/null +++ b/test/configCases/json/only-string/data.json @@ -0,0 +1 @@ +"string" diff --git a/test/configCases/json/only-string/index.js b/test/configCases/json/only-string/index.js new file mode 100644 index 00000000000..85962a8bf3a --- /dev/null +++ b/test/configCases/json/only-string/index.js @@ -0,0 +1,5 @@ +it("should work", () => { + const data = require('./data.json'); + + expect(data).toBe("string"); +}); diff --git a/test/configCases/json/only-string/webpack.config.js b/test/configCases/json/only-string/webpack.config.js new file mode 100644 index 00000000000..7389b128cd5 --- /dev/null +++ b/test/configCases/json/only-string/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production" +}; diff --git a/test/configCases/json/proto/data.json b/test/configCases/json/proto/data.json new file mode 100644 index 00000000000..861e272dfe3 --- /dev/null +++ b/test/configCases/json/proto/data.json @@ -0,0 +1 @@ +{"__proto__":{}} diff --git a/test/configCases/json/proto/data1.json b/test/configCases/json/proto/data1.json new file mode 100644 index 00000000000..5b5c28795c2 --- /dev/null +++ b/test/configCases/json/proto/data1.json @@ -0,0 +1,5 @@ +{ + "__proto__": { + "fail": true + } +} diff --git a/test/configCases/json/proto/index.js b/test/configCases/json/proto/index.js new file mode 100644 index 00000000000..f3211ad6da9 --- /dev/null +++ b/test/configCases/json/proto/index.js @@ -0,0 +1,15 @@ +import data from './data.json'; +import data2 from 'data:application/json,{"__proto__":{}}'; +import data3 from './data1.json'; +import data4 from 'data:application/json,{"a":"__proto__"}'; + +it("should preserves `__proto__` properties", () => { + expect(Object.getPrototypeOf(data) === Object.getPrototypeOf({})).toBe(true); + expect(Object.getPrototypeOf(data2) === Object.getPrototypeOf({})).toBe(true); + expect(Object.getPrototypeOf(data3) === Object.getPrototypeOf({})).toBe(true); + expect(Object.getPrototypeOf(data4) === Object.getPrototypeOf({})).toBe(true); + expect(data).toMatchObject({["__proto__"]: {}}); + expect(data2).toMatchObject({["__proto__"]: {}}); + expect(data3.__proto__.fail).toBe(true); + expect(data4.a).toBe("__proto__"); +}); diff --git a/test/configCases/json/proto/webpack.config.js b/test/configCases/json/proto/webpack.config.js new file mode 100644 index 00000000000..9b5e111fde7 --- /dev/null +++ b/test/configCases/json/proto/webpack.config.js @@ -0,0 +1,7 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + mode: "development" +}; diff --git a/test/configCases/json/top-level-json-parser/data.toml b/test/configCases/json/top-level-json-parser/data.toml new file mode 100644 index 00000000000..bf6c9dd3363 --- /dev/null +++ b/test/configCases/json/top-level-json-parser/data.toml @@ -0,0 +1,7 @@ +title = "TOML Example" + +[owner] +name = "Tom Preston-Werner" +organization = "GitHub" +bio = "GitHub Cofounder & CEO\nLikes tater tots and beer." +dob = 1979-05-27T07:32:00Z diff --git a/test/configCases/json/top-level-json-parser/index.js b/test/configCases/json/top-level-json-parser/index.js new file mode 100644 index 00000000000..1cd82db4849 --- /dev/null +++ b/test/configCases/json/top-level-json-parser/index.js @@ -0,0 +1,13 @@ +import toml from "./data.toml"; + +it("should transform toml to json", () => { + expect(toml).toMatchObject({ + title: "TOML Example", + owner: { + name: 'Tom Preston-Werner', + organization: 'GitHub', + bio: 'GitHub Cofounder & CEO\nLikes tater tots and beer.', + dob: '1979-05-27T07:32:00.000Z' + } + }); +}); diff --git a/test/configCases/json/top-level-json-parser/webpack.config.js b/test/configCases/json/top-level-json-parser/webpack.config.js new file mode 100644 index 00000000000..e550c66a2ad --- /dev/null +++ b/test/configCases/json/top-level-json-parser/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +const toml = require("toml"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + mode: "development", + module: { + parser: { + json: { + parse(input) { + // eslint-disable-next-line prefer-rest-params + expect(arguments).toHaveLength(1); + return toml.parse(input); + } + } + }, + rules: [ + { + test: /\.toml$/, + type: "json" + } + ] + } + } +]; diff --git a/test/configCases/json/tree-shaking-default/data.json b/test/configCases/json/tree-shaking-default/data.json new file mode 100644 index 00000000000..3156019977c --- /dev/null +++ b/test/configCases/json/tree-shaking-default/data.json @@ -0,0 +1,85 @@ +{ + "UNUSEDKEY": "UNUSEDVALUE", + "nested": { + "UNUSEDKEY": "UNUSEDVALUE", + "key": "value", + "key2": "value2", + "array": [1, 2, 3], + "array2": [1, 2, 3], + "array3": ["UNUSEDVALUE", "ok", "UNUSEDVALUE"], + "array4": [ + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "ok" + ], + "array5": [ + "ok", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE" + ], + "array6": ["UNUSEDVALUE", "ok", "UNUSEDVALUE"], + "array7": [ + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "ok" + ], + "array8": [ + "ok", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE", + "UNUSEDVALUE" + ], + "object": { + "test": "TESTVALUE" + }, + "object2": {}, + "object3": {}, + "number": 42 + }, + "nestedArray": [ + "UNUSEDVALUE", + [ + "UNUSEDVALUE", + { + "UNUSEDKEY": "UNUSEDVALUE", + "deep": { + "UNUSEDKEY": "UNUSEDVALUE", + "deep": "ok" + } + }, + "UNUSEDVALUE" + ], + "UNUSEDVALUE" + ] +} diff --git a/test/configCases/json/tree-shaking-default/index.js b/test/configCases/json/tree-shaking-default/index.js new file mode 100644 index 00000000000..40bc62d227a --- /dev/null +++ b/test/configCases/json/tree-shaking-default/index.js @@ -0,0 +1,65 @@ +import data, { nestedArray } from "./data"; +import packageJson from "../../../../package.json"; + +it("should have to correct values", () => { + expect(data.nested.key).toBe("value"); +}); + +it("should be able to write properties", () => { + // known key + data.nested.key2 = "new value"; + expect(data.nested.key2).toBe("new value"); + // unknown key + data.nested.key3 = "value3"; + expect(data.nested.key3).toBe("value3"); + // array methods and prototype properties + data.nested.array.push(4); + expect(data.nested.array.length).toEqual(4); + // direct and nested access + const a = data.nested.array2; + data.nested.array2[1] = 42; + expect(a[1]).toEqual(42); + expect(a.length).toEqual(3); + // only nested access + expect(data.nested.array3[1]).toBe("ok"); + expect(data.nested.array4[10]).toBe("ok"); + expect(data.nested.array5[0]).toBe("ok"); + // nested access and length + expect(data.nested.array6[1]).toBe("ok"); + expect(data.nested.array6.length).toBe(3); + expect(data.nested.array7[10]).toBe("ok"); + expect(data.nested.array7.length).toBe(11); + expect(data.nested.array8[0]).toBe("ok"); + expect(data.nested.array8.length).toBe(11); + // object methods + expect(data.nested.object.hasOwnProperty("test")).toBe(true); + // unknown object property + data.nested.object2.unknownProperty = 42; + expect(data.nested.object2.unknownProperty).toBe(42); + data.nested.object3.unknownProperty = { deep: "deep" }; + expect(data.nested.object3.unknownProperty.deep).toBe("deep"); + // number methods + expect(data.nested.number.toFixed(1)).toBe("42.0"); + // nested in array + expect(nestedArray[1][1].deep.deep).toBe("ok"); +}); + +it("should not have unused keys in bundle", () => { + const fs = require("fs"); + const content = fs.readFileSync(__filename, "utf-8"); + expect(content).toMatch(/\\?"TESTVALUE\\?"/); + expect(content).not.toMatch(/\\?"UNUSEDKEY\\?"/); + expect(content).not.toMatch(/\\?"UNUSEDVALUE\\?"/); + expect(content).not.toMatch(/\\?"nested\\?"/); + expect(content).toMatch(/\.unknownProperty\s*=/); + expect(content).toMatch(/\.unknownProperty\.deep\)/); + expect(content).not.toMatch(/\\?"dependencies\\?"/); + expect(content).not.toMatch(/\\?"scripts\\?"/); +}); + +it("should tree-shake package.json too", () => { + expect(packageJson.name).toBe("webpack"); + expect(packageJson.repository.url).toBe( + "https://github.com/webpack/webpack.git" + ); +}); diff --git a/test/configCases/json/tree-shaking-default/warnings.js b/test/configCases/json/tree-shaking-default/warnings.js new file mode 100644 index 00000000000..7835012931b --- /dev/null +++ b/test/configCases/json/tree-shaking-default/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/Should not import the named export/]]; diff --git a/test/configCases/json/tree-shaking-default/webpack.config.js b/test/configCases/json/tree-shaking-default/webpack.config.js new file mode 100644 index 00000000000..6dd5d4e3eec --- /dev/null +++ b/test/configCases/json/tree-shaking-default/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + node: { + __dirname: false, + __filename: false + } +}; diff --git a/test/configCases/json/with-type-json/data.json b/test/configCases/json/with-type-json/data.json new file mode 100644 index 00000000000..d086709f676 --- /dev/null +++ b/test/configCases/json/with-type-json/data.json @@ -0,0 +1,3 @@ +{ + "value": 42 +} diff --git a/test/configCases/json/with-type-json/index.js b/test/configCases/json/with-type-json/index.js new file mode 100644 index 00000000000..f705bcc6117 --- /dev/null +++ b/test/configCases/json/with-type-json/index.js @@ -0,0 +1,6 @@ +import def, { value } from './data.json' with { type: 'json' } + +it('should not import named json using import attributes', () => { + expect(def.value).toBe(42); + expect(value).toBe(undefined); +}); diff --git a/test/configCases/json/with-type-json/warnings.js b/test/configCases/json/with-type-json/warnings.js new file mode 100644 index 00000000000..006fea24995 --- /dev/null +++ b/test/configCases/json/with-type-json/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [/Can't import the named export/]; diff --git a/test/configCases/json/with-type-json/webpack.config.js b/test/configCases/json/with-type-json/webpack.config.js new file mode 100644 index 00000000000..7389b128cd5 --- /dev/null +++ b/test/configCases/json/with-type-json/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production" +}; diff --git a/test/configCases/layer/context-and-css/dark.js b/test/configCases/layer/context-and-css/dark.js new file mode 100644 index 00000000000..fa2ef56f2c3 --- /dev/null +++ b/test/configCases/layer/context-and-css/dark.js @@ -0,0 +1,9 @@ +require.context('./test1', true, /\.less$/); +require('./test2/shared.less'); + +it("should contain only black", function() { + const style = getComputedStyle(document.body); + + expect(style["color-dark"]).toBe(" black"); + expect(style["background-dark"]).toBe(" black"); +}); diff --git a/test/configCases/layer/context-and-css/light.js b/test/configCases/layer/context-and-css/light.js new file mode 100644 index 00000000000..2f10430cf7d --- /dev/null +++ b/test/configCases/layer/context-and-css/light.js @@ -0,0 +1,9 @@ +require.context('./test1', true, /\.less$/); +require('./test2/shared.less'); + +it("should contain only white", function() { + const style = getComputedStyle(document.body); + + expect(style["color-light"]).toBe(" white"); + expect(style["background-light"]).toBe(" white"); +}); diff --git a/test/configCases/layer/context-and-css/test.config.js b/test/configCases/layer/context-and-css/test.config.js new file mode 100644 index 00000000000..f9d83d5fd16 --- /dev/null +++ b/test/configCases/layer/context-and-css/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const light = scope.window.document.createElement("link"); + light.rel = "stylesheet"; + light.href = "light.css"; + scope.window.document.head.appendChild(light); + const dark = scope.window.document.createElement("link"); + dark.rel = "stylesheet"; + dark.href = "dark.css"; + scope.window.document.head.appendChild(dark); + }, + findBundle() { + return ["./runtime.js", "./light.js", "./dark.js"]; + } +}; diff --git a/test/configCases/layer/context-and-css/test1/shared.less b/test/configCases/layer/context-and-css/test1/shared.less new file mode 100644 index 00000000000..c1e0175c929 --- /dev/null +++ b/test/configCases/layer/context-and-css/test1/shared.less @@ -0,0 +1,3 @@ +body { + @{property-color}: @color; +} diff --git a/test/configCases/layer/context-and-css/test2/shared.less b/test/configCases/layer/context-and-css/test2/shared.less new file mode 100644 index 00000000000..4c32372804b --- /dev/null +++ b/test/configCases/layer/context-and-css/test2/shared.less @@ -0,0 +1,3 @@ +body { + @{property-background}: @color; +} diff --git a/test/configCases/layer/context-and-css/webpack.config.js b/test/configCases/layer/context-and-css/webpack.config.js new file mode 100644 index 00000000000..e2477ca4b59 --- /dev/null +++ b/test/configCases/layer/context-and-css/webpack.config.js @@ -0,0 +1,53 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + entry: { + light: { import: "./light.js", layer: "light" }, + dark: { import: "./dark.js", layer: "dark" } + }, + experiments: { + css: true + }, + optimization: { + runtimeChunk: "single" + }, + output: { + filename: "[name].js" + }, + module: { + rules: [ + { + test: /\.less$/i, + type: "css/auto", + oneOf: [ + { + issuerLayer: "light", + use: [ + { + loader: "less-loader", + options: { + additionalData: + "@color: white; @property-color: color-light; @property-background: background-light;" + } + } + ] + }, + { + issuerLayer: "dark", + use: [ + { + loader: "less-loader", + options: { + additionalData: + "@color: black; @property-color: color-dark; @property-background: background-dark;" + } + } + ] + } + ] + } + ] + } +}; diff --git a/test/configCases/layer/context/dark.js b/test/configCases/layer/context/dark.js new file mode 100644 index 00000000000..f2975a25f24 --- /dev/null +++ b/test/configCases/layer/context/dark.js @@ -0,0 +1,12 @@ +require.context('./test1', true, /\.less$/); +require('./test2/shared.less'); + +it("should contain only black", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync(path.join(__dirname, "dark.css"), "utf-8"); + + expect(source.match(/black/g)).toHaveLength(2); + expect(source).not.toContain("white"); +}); diff --git a/test/configCases/layer/context/light.js b/test/configCases/layer/context/light.js new file mode 100644 index 00000000000..e3c9335a95b --- /dev/null +++ b/test/configCases/layer/context/light.js @@ -0,0 +1,12 @@ +require.context('./test1', true, /\.less$/); +require('./test2/shared.less'); + +it("should contain only white", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync(path.join(__dirname, "light.css"), "utf-8"); + + expect(source.match(/white/g)).toHaveLength(2); + expect(source).not.toContain("black"); +}); diff --git a/test/configCases/layer/context/test.config.js b/test/configCases/layer/context/test.config.js new file mode 100644 index 00000000000..48a298849e1 --- /dev/null +++ b/test/configCases/layer/context/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./light.js", "./dark.js"]; + } +}; diff --git a/test/configCases/layer/context/test1/shared.less b/test/configCases/layer/context/test1/shared.less new file mode 100644 index 00000000000..aeef901bc65 --- /dev/null +++ b/test/configCases/layer/context/test1/shared.less @@ -0,0 +1,3 @@ +.test1 { + color: @color; +} diff --git a/test/configCases/layer/context/test2/shared.less b/test/configCases/layer/context/test2/shared.less new file mode 100644 index 00000000000..2cbc230e5a1 --- /dev/null +++ b/test/configCases/layer/context/test2/shared.less @@ -0,0 +1,3 @@ +.test2 { + color: @color; +} diff --git a/test/configCases/layer/context/webpack.config.js b/test/configCases/layer/context/webpack.config.js new file mode 100644 index 00000000000..fd16444cc76 --- /dev/null +++ b/test/configCases/layer/context/webpack.config.js @@ -0,0 +1,54 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + light: { import: "./light.js", layer: "light" }, + dark: { import: "./dark.js", layer: "dark" } + }, + output: { + filename: "[name].js" + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "[name].css" + }) + ], + module: { + rules: [ + { + test: /\.less$/i, + oneOf: [ + { + issuerLayer: "light", + use: [ + MiniCssExtractPlugin.loader, + "css-loader", + { + loader: "less-loader", + options: { + additionalData: "@color: white;" + } + } + ] + }, + { + issuerLayer: "dark", + use: [ + MiniCssExtractPlugin.loader, + "css-loader", + { + loader: "less-loader", + options: { + additionalData: "@color: black;" + } + } + ] + } + ] + } + ] + } +}; diff --git a/test/configCases/layer/define-multiple-entries/common.js b/test/configCases/layer/define-multiple-entries/common.js new file mode 100644 index 00000000000..8545652d443 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/common.js @@ -0,0 +1,14 @@ +import * as module from "./modules/common.js"; +import getGlobalThis from "./utils/get-global-this.js"; + +it("should contain a valid value", async function() { + expect(module.default).toBe("common"); + + const dyn = await import("./modules/common-dyn.js"); + + expect(dyn.default).toBe("common-dyn"); +}); + +getGlobalThis()._COMMON = true; + +export default "common"; diff --git a/test/configCases/layer/define-multiple-entries/free.js b/test/configCases/layer/define-multiple-entries/free.js new file mode 100644 index 00000000000..9ce70b3d4f1 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/free.js @@ -0,0 +1,15 @@ +import * as module from "./modules/module.js"; +import getGlobalThis from "./utils/get-global-this.js"; + +it("should contain a valid value", async function() { + expect(getGlobalThis()._COMMON).toBe(true); + expect(module.default).toBe("free"); + + const dyn = await import("./modules/dyn.js"); + + expect(dyn.default).toBe("dyn"); + + const dynDefine = await import("./modules/dyn-define.js"); + + expect(dynDefine.default).toBe("free"); +}); diff --git a/test/configCases/layer/define-multiple-entries/modules/common-dyn.js b/test/configCases/layer/define-multiple-entries/modules/common-dyn.js new file mode 100644 index 00000000000..0ef67d2733d --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/modules/common-dyn.js @@ -0,0 +1 @@ +export default "common-dyn"; diff --git a/test/configCases/layer/define-multiple-entries/modules/common.js b/test/configCases/layer/define-multiple-entries/modules/common.js new file mode 100644 index 00000000000..c735fc8c892 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/modules/common.js @@ -0,0 +1 @@ +export default "common"; diff --git a/test/configCases/layer/define-multiple-entries/modules/dyn-define.js b/test/configCases/layer/define-multiple-entries/modules/dyn-define.js new file mode 100644 index 00000000000..3f8d4b1dc37 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/modules/dyn-define.js @@ -0,0 +1 @@ +export default FREE_VERSION ? "free" : "paid" diff --git a/test/configCases/layer/define-multiple-entries/modules/dyn.js b/test/configCases/layer/define-multiple-entries/modules/dyn.js new file mode 100644 index 00000000000..ca56363f0a2 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/modules/dyn.js @@ -0,0 +1 @@ +export default "dyn"; diff --git a/test/configCases/layer/define-multiple-entries/modules/extra-dyn.js b/test/configCases/layer/define-multiple-entries/modules/extra-dyn.js new file mode 100644 index 00000000000..0ef5556e1b0 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/modules/extra-dyn.js @@ -0,0 +1 @@ +export default "extra-dyn"; diff --git a/test/configCases/layer/define-multiple-entries/modules/module.js b/test/configCases/layer/define-multiple-entries/modules/module.js new file mode 100644 index 00000000000..ed0e36aa1f7 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/modules/module.js @@ -0,0 +1,3 @@ +const value = FREE_VERSION ? "free" : "paid"; + +export default value; diff --git a/test/configCases/layer/define-multiple-entries/paid.js b/test/configCases/layer/define-multiple-entries/paid.js new file mode 100644 index 00000000000..978fd03379a --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/paid.js @@ -0,0 +1,19 @@ +import * as module from "./modules/module.js"; +import getGlobalThis from "./utils/get-global-this.js"; + +it("should contain a valid value", async function() { + expect(getGlobalThis()._COMMON).toBe(true); + expect(module.default).toBe("paid"); + + const dyn = await import("./modules/dyn.js"); + + expect(dyn.default).toBe("dyn"); + + const extraDyn = await import("./modules/extra-dyn.js"); + + expect(extraDyn.default).toBe("extra-dyn"); + + const dynDefine = await import("./modules/dyn-define.js"); + + expect(dynDefine.default).toBe("paid"); +}); diff --git a/test/configCases/layer/define-multiple-entries/test.config.js b/test/configCases/layer/define-multiple-entries/test.config.js new file mode 100644 index 00000000000..36330ba44f5 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./common.js", "./free.js", "./paid.js"]; + } +}; diff --git a/test/configCases/layer/define-multiple-entries/utils/get-global-this.js b/test/configCases/layer/define-multiple-entries/utils/get-global-this.js new file mode 100644 index 00000000000..a5a0036272c --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/utils/get-global-this.js @@ -0,0 +1,8 @@ +export default function getGlobalThis() { + if (typeof globalThis === 'object') return globalThis; + try { + return this || new Function('return this')(); + } catch (e) { + if (typeof window === 'object') return window; + } +} diff --git a/test/configCases/layer/define-multiple-entries/webpack.config.js b/test/configCases/layer/define-multiple-entries/webpack.config.js new file mode 100644 index 00000000000..a609acadcd7 --- /dev/null +++ b/test/configCases/layer/define-multiple-entries/webpack.config.js @@ -0,0 +1,39 @@ +"use strict"; + +const { DefinePlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + common: { import: "./common.js", filename: "common.js" }, + + paid: { dependOn: "common", import: "./paid.js", layer: "paid" }, + free: { dependOn: "common", import: "./free.js", layer: "free" } + }, + experiments: { + layers: true + }, + optimization: { + splitChunks: { + cacheGroups: { + layerPaidCommon: { + name: "layer-paid-common", + layer: "paid", + chunks: "async", + enforce: true, + reuseExistingChunk: true + } + } + } + }, + output: { + filename: "[name].js" + }, + plugins: [ + new DefinePlugin({ + FREE_VERSION: DefinePlugin.runtimeValue( + (ctx) => ctx.module.layer === "free" + ) + }) + ] +}; diff --git a/test/configCases/layer/define-single-entry/main.js b/test/configCases/layer/define-single-entry/main.js new file mode 100644 index 00000000000..9409e378ad4 --- /dev/null +++ b/test/configCases/layer/define-single-entry/main.js @@ -0,0 +1,13 @@ +import * as module from "./modules/module.js"; + +it("should contain a valid value", async function() { + expect(module.default).toBe(FREE_VERSION ? "free" : "paid"); + + const dyn = await import("./modules/dyn.js"); + + expect(dyn.default).toBe("dyn"); + + const dynDefine = await import("./modules/dyn-define.js"); + + expect(dynDefine.default).toBe(FREE_VERSION ? "free" : "paid"); +}); diff --git a/test/configCases/layer/define-single-entry/modules/dyn-define.js b/test/configCases/layer/define-single-entry/modules/dyn-define.js new file mode 100644 index 00000000000..3f8d4b1dc37 --- /dev/null +++ b/test/configCases/layer/define-single-entry/modules/dyn-define.js @@ -0,0 +1 @@ +export default FREE_VERSION ? "free" : "paid" diff --git a/test/configCases/layer/define-single-entry/modules/dyn.js b/test/configCases/layer/define-single-entry/modules/dyn.js new file mode 100644 index 00000000000..ca56363f0a2 --- /dev/null +++ b/test/configCases/layer/define-single-entry/modules/dyn.js @@ -0,0 +1 @@ +export default "dyn"; diff --git a/test/configCases/layer/define-single-entry/modules/module.js b/test/configCases/layer/define-single-entry/modules/module.js new file mode 100644 index 00000000000..ed0e36aa1f7 --- /dev/null +++ b/test/configCases/layer/define-single-entry/modules/module.js @@ -0,0 +1,3 @@ +const value = FREE_VERSION ? "free" : "paid"; + +export default value; diff --git a/test/configCases/layer/define-single-entry/test.config.js b/test/configCases/layer/define-single-entry/test.config.js new file mode 100644 index 00000000000..57eceaa943e --- /dev/null +++ b/test/configCases/layer/define-single-entry/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./free.js", "./paid.js"]; + } +}; diff --git a/test/configCases/layer/define-single-entry/webpack.config.js b/test/configCases/layer/define-single-entry/webpack.config.js new file mode 100644 index 00000000000..6d7f8802a53 --- /dev/null +++ b/test/configCases/layer/define-single-entry/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +const { DefinePlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + paid: { import: "./main.js", layer: "paid" }, + free: { import: "./main.js", layer: "free" } + }, + experiments: { + layers: true + }, + optimization: { + splitChunks: { + cacheGroups: { + layerPaidCommon: { + name: "layer-paid-common", + layer: "paid", + chunks: "async", + enforce: true, + reuseExistingChunk: true + } + } + } + }, + output: { + filename: "[name].js" + }, + plugins: [ + new DefinePlugin({ + FREE_VERSION: DefinePlugin.runtimeValue( + (ctx) => ctx.module.layer === "free" + ) + }) + ] +}; diff --git a/test/configCases/layer/rules/dynamic-module-layer.js b/test/configCases/layer/rules/dynamic-module-layer.js new file mode 100644 index 00000000000..4c082635268 --- /dev/null +++ b/test/configCases/layer/rules/dynamic-module-layer.js @@ -0,0 +1,13 @@ +async function main(name) { + const { object: dynamicModuleObject } = await import(`./dynamic/${name}`); + return dynamicModuleObject; +} + +export const object = { + name: 'module entry', + layer: __webpack_layer__, + modules: [ + main('module1'), + main('module2'), + ] +}; \ No newline at end of file diff --git a/test/configCases/layer/rules/dynamic/module1.js b/test/configCases/layer/rules/dynamic/module1.js new file mode 100644 index 00000000000..2ee153c0c42 --- /dev/null +++ b/test/configCases/layer/rules/dynamic/module1.js @@ -0,0 +1,4 @@ +export const object = { + name: 'module1', + layer: __webpack_layer__, +}; \ No newline at end of file diff --git a/test/configCases/layer/rules/dynamic/module2.js b/test/configCases/layer/rules/dynamic/module2.js new file mode 100644 index 00000000000..1a9d4536add --- /dev/null +++ b/test/configCases/layer/rules/dynamic/module2.js @@ -0,0 +1,4 @@ +export const object = { + name: 'module2', + layer: __webpack_layer__ +}; \ No newline at end of file diff --git a/test/configCases/layer/rules/index.js b/test/configCases/layer/rules/index.js new file mode 100644 index 00000000000..f41c8b5ab27 --- /dev/null +++ b/test/configCases/layer/rules/index.js @@ -0,0 +1,47 @@ +import { object as direct } from "./module"; +import { object as reexported } from "./reexport"; +import { __loaderValue as entryLayerValue } from "./module"; +import { external1 as entryLayerExternal1 } from "./module"; +import { external2 as entryLayerExternal2 } from "./module"; + +import { direct as layerDirect } from "./module-layer-change"; +import { reexported as layerReexported } from "./module-layer-change"; +import { __loaderValue as layerValue } from "./module-layer-change"; +import { external1 as layerExternal1 } from "./module-layer-change"; +import { external2 as layerExternal2 } from "./module-layer-change"; + +import { direct as otherLayerDirect } from "./module-other-layer-change"; +import { reexported as otherLayerReexported } from "./module-other-layer-change"; +import { __loaderValue as otherLayerValue } from "./module-other-layer-change"; + +import { object as dynamicModules } from "./dynamic-module-layer" + +it("should allow to duplicate modules with layers", () => { + expect(direct).toBe(reexported); + expect(layerDirect).toBe(layerReexported); + expect(otherLayerDirect).toBe(otherLayerReexported); + + expect(layerDirect).not.toBe(direct); + expect(otherLayerDirect).not.toBe(direct); + expect(otherLayerDirect).not.toBe(layerDirect); +}); + +it("apply rules based on layer", () => { + expect(layerValue).toBe("ok"); + expect(otherLayerValue).toBe("other"); + expect(entryLayerValue).toBe("entry"); +}); + +it("apply externals based on layer", () => { + expect(entryLayerExternal1).toBe(42); + expect(entryLayerExternal2).toBe(42); + expect(layerExternal1).toBe(43); + expect(layerExternal2).toBe(43); +}); + +it("apply layer for dynamic imports with dynamic resources", async () => { + const mods = await Promise.all(dynamicModules.modules) + expect(dynamicModules.layer).toBe('dynamic-layer') + expect(mods[0]).toMatchObject({ layer: 'dynamic-layer', name: 'module1' }) + expect(mods[1]).toMatchObject({ layer: 'dynamic-layer', name: 'module2' }) +}) diff --git a/test/configCases/layer/rules/loader.js b/test/configCases/layer/rules/loader.js new file mode 100644 index 00000000000..7e5acde631c --- /dev/null +++ b/test/configCases/layer/rules/loader.js @@ -0,0 +1,7 @@ +/** @type {import("../../../../").LoaderDefinition<{ value: any }>} */ +module.exports = function (source) { + const options = this.getOptions(); + return `${source} +; +export const __loaderValue = ${JSON.stringify(options.value)};`; +}; diff --git a/test/configCases/layer/rules/module-layer-change.js b/test/configCases/layer/rules/module-layer-change.js new file mode 100644 index 00000000000..601aa230bb8 --- /dev/null +++ b/test/configCases/layer/rules/module-layer-change.js @@ -0,0 +1,3 @@ +export { object as direct } from "./module"; +export { object as reexported } from "./reexport"; +export * from "./module"; diff --git a/test/configCases/layer/rules/module-other-layer-change.js b/test/configCases/layer/rules/module-other-layer-change.js new file mode 100644 index 00000000000..601aa230bb8 --- /dev/null +++ b/test/configCases/layer/rules/module-other-layer-change.js @@ -0,0 +1,3 @@ +export { object as direct } from "./module"; +export { object as reexported } from "./reexport"; +export * from "./module"; diff --git a/test/configCases/layer/rules/module.js b/test/configCases/layer/rules/module.js new file mode 100644 index 00000000000..21a2ceba24d --- /dev/null +++ b/test/configCases/layer/rules/module.js @@ -0,0 +1,5 @@ +export const object = { + layer: __webpack_layer__ +}; +export { default as external1 } from "external1"; +export { default as external2 } from "external2"; diff --git a/test/configCases/layer/rules/reexport.js b/test/configCases/layer/rules/reexport.js new file mode 100644 index 00000000000..b999044ad5c --- /dev/null +++ b/test/configCases/layer/rules/reexport.js @@ -0,0 +1 @@ +export * from "./module"; diff --git a/test/configCases/layer/rules/webpack.config.js b/test/configCases/layer/rules/webpack.config.js new file mode 100644 index 00000000000..b35a637a8a3 --- /dev/null +++ b/test/configCases/layer/rules/webpack.config.js @@ -0,0 +1,74 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: { + import: "./index.js", + layer: "entry-layer" + } + }, + output: { + pathinfo: "verbose" + }, + module: { + rules: [ + { + test: /module-layer-change/, + layer: "layer" + }, + { + test: /module-other-layer-change/, + layer: "other-layer" + }, + { + test: /module\.js$/, + issuerLayer: "other-layer", + loader: "./loader.js", + options: { + value: "other" + } + }, + { + test: /module\.js$/, + issuerLayer: "layer", + loader: "./loader.js", + options: { + value: "ok" + } + }, + { + test: /module\.js$/, + issuerLayer: "entry-layer", + loader: "./loader.js", + options: { + value: "entry" + } + }, + { + test: /dynamic-module-layer/, + layer: "dynamic-layer" + } + ] + }, + externals: [ + { + external1: "var 42", + byLayer: { + layer: { + external1: "var 43" + } + } + }, + { + external2: "var 42", + byLayer: (layer) => { + if (layer === "layer") { + return { + external2: "var 43" + }; + } + } + } + ] +}; diff --git a/test/configCases/library/0-create-library/adding-exports-cjs.js b/test/configCases/library/0-create-library/adding-exports-cjs.js new file mode 100644 index 00000000000..d0f172b3320 --- /dev/null +++ b/test/configCases/library/0-create-library/adding-exports-cjs.js @@ -0,0 +1,5 @@ +module.exports = { + name: "adding-exports-cjs" +}; + +module.exports.foo = "foo"; \ No newline at end of file diff --git a/test/configCases/library/0-create-library/class-commonjs.js b/test/configCases/library/0-create-library/class-commonjs.js new file mode 100644 index 00000000000..fbc4f806ca1 --- /dev/null +++ b/test/configCases/library/0-create-library/class-commonjs.js @@ -0,0 +1,6 @@ +module.exports = class MyClass { + getNumber() { + return 1; + } +}; + diff --git a/test/configCases/library/0-create-library/class-esm.js b/test/configCases/library/0-create-library/class-esm.js new file mode 100644 index 00000000000..3d49b87ac43 --- /dev/null +++ b/test/configCases/library/0-create-library/class-esm.js @@ -0,0 +1,5 @@ +export default class MyClass { + getNumber() { + return 2; + } +} diff --git a/test/configCases/library/0-create-library/commonjs.js b/test/configCases/library/0-create-library/commonjs.js new file mode 100644 index 00000000000..5fa79ca50b9 --- /dev/null +++ b/test/configCases/library/0-create-library/commonjs.js @@ -0,0 +1,12 @@ +const a = 10; +const b = 20; + +class MyClass { + getValue() { + return "my-class"; + } +} + +module.exports = MyClass; +module.exports.a = a; +module.exports.b = b; diff --git a/test/configCases/library/0-create-library/define-module-property-cjs.js b/test/configCases/library/0-create-library/define-module-property-cjs.js new file mode 100644 index 00000000000..b20e5e990e3 --- /dev/null +++ b/test/configCases/library/0-create-library/define-module-property-cjs.js @@ -0,0 +1,6 @@ +exports.foo = "foo"; + +Object.defineProperty(exports, "name", { + value: "define-module-property-cjs", + writable: true +}); diff --git a/test/configCases/library/0-create-library/define-this-exports-cjs.js b/test/configCases/library/0-create-library/define-this-exports-cjs.js new file mode 100644 index 00000000000..19eaa29fc38 --- /dev/null +++ b/test/configCases/library/0-create-library/define-this-exports-cjs.js @@ -0,0 +1,5 @@ +this.foo = "foo"; + +Object.defineProperty(this, "name", { + value: "define-this-exports-cjs" +}); diff --git a/test/configCases/library/0-create-library/esm-star-reexport-and-external/bar.js b/test/configCases/library/0-create-library/esm-star-reexport-and-external/bar.js new file mode 100644 index 00000000000..c81d10b3439 --- /dev/null +++ b/test/configCases/library/0-create-library/esm-star-reexport-and-external/bar.js @@ -0,0 +1,2 @@ +export const foo = 3; +export const bar = 3; diff --git a/test/configCases/library/0-create-library/esm-star-reexport-and-external/foo.js b/test/configCases/library/0-create-library/esm-star-reexport-and-external/foo.js new file mode 100644 index 00000000000..589d11cb19a --- /dev/null +++ b/test/configCases/library/0-create-library/esm-star-reexport-and-external/foo.js @@ -0,0 +1,2 @@ +export const foo = 2; +export const bar = 2; diff --git a/test/configCases/library/0-create-library/esm-star-reexport-and-external/index.js b/test/configCases/library/0-create-library/esm-star-reexport-and-external/index.js new file mode 100644 index 00000000000..484f5e9d28d --- /dev/null +++ b/test/configCases/library/0-create-library/esm-star-reexport-and-external/index.js @@ -0,0 +1,6 @@ +export * from "fs"; +export * from "./reexport-foo"; +export * from "./reexport-bar"; + +export const foo = 1; +export const bar = 1; diff --git a/test/configCases/library/0-create-library/esm-star-reexport-and-external/reexport-bar.js b/test/configCases/library/0-create-library/esm-star-reexport-and-external/reexport-bar.js new file mode 100644 index 00000000000..9a191d68c95 --- /dev/null +++ b/test/configCases/library/0-create-library/esm-star-reexport-and-external/reexport-bar.js @@ -0,0 +1,2 @@ +export * from "path"; +export * from "./bar"; diff --git a/test/configCases/library/0-create-library/esm-star-reexport-and-external/reexport-foo.js b/test/configCases/library/0-create-library/esm-star-reexport-and-external/reexport-foo.js new file mode 100644 index 00000000000..5567e8d73a1 --- /dev/null +++ b/test/configCases/library/0-create-library/esm-star-reexport-and-external/reexport-foo.js @@ -0,0 +1 @@ +export * from "./foo"; diff --git a/test/configCases/library/0-create-library/esm-with-commonjs.js b/test/configCases/library/0-create-library/esm-with-commonjs.js new file mode 100644 index 00000000000..cb247437f81 --- /dev/null +++ b/test/configCases/library/0-create-library/esm-with-commonjs.js @@ -0,0 +1,16 @@ +export * from "./a"; +export default "default-value"; +export var b = "b"; +export { default as external } from "external"; +export * from "external-named"; +export { default as MyClass1 } from './class-commonjs'; +export { default as MyClass2 } from './class-esm'; +export { default as func1 } from './function-commonjs'; +export { default as func2 } from './function-esm'; + +var module = "should not conflict", + define = "should not conflict", + require = "should not conflict", + exports = "should not conflict", + globalName = "should not conflict"; +console.log.bind(console, module, define, require, exports, globalName); diff --git a/test/configCases/library/0-create-library/esm.js b/test/configCases/library/0-create-library/esm.js new file mode 100644 index 00000000000..934368585fb --- /dev/null +++ b/test/configCases/library/0-create-library/esm.js @@ -0,0 +1,11 @@ +const a = 10; +const b = 20; + +class MyClass { + getValue() { + return "my-class"; + } +} + +export default MyClass; +export { a, b }; diff --git a/test/configCases/library/0-create-library/exports-shortcut-cjs.js b/test/configCases/library/0-create-library/exports-shortcut-cjs.js new file mode 100644 index 00000000000..f7a500e00c8 --- /dev/null +++ b/test/configCases/library/0-create-library/exports-shortcut-cjs.js @@ -0,0 +1,3 @@ +exports = { + name: "exports-shortcut-cjs" +}; diff --git a/test/configCases/library/0-create-library/foo.js b/test/configCases/library/0-create-library/foo.js new file mode 100644 index 00000000000..d407b060289 --- /dev/null +++ b/test/configCases/library/0-create-library/foo.js @@ -0,0 +1 @@ +export const foo = "bar"; diff --git a/test/configCases/library/0-create-library/function-commonjs.js b/test/configCases/library/0-create-library/function-commonjs.js new file mode 100644 index 00000000000..3c031ce201e --- /dev/null +++ b/test/configCases/library/0-create-library/function-commonjs.js @@ -0,0 +1,3 @@ +module.exports = function test() { + return 3; +} diff --git a/test/configCases/library/0-create-library/function-esm.js b/test/configCases/library/0-create-library/function-esm.js new file mode 100644 index 00000000000..dc9b015047d --- /dev/null +++ b/test/configCases/library/0-create-library/function-esm.js @@ -0,0 +1,3 @@ +export default function test() { + return 4; +} diff --git a/test/configCases/library/0-create-library/index-async.js b/test/configCases/library/0-create-library/index-async.js new file mode 100644 index 00000000000..a0e48d70ee1 --- /dev/null +++ b/test/configCases/library/0-create-library/index-async.js @@ -0,0 +1,14 @@ +export * from "./a"; +export default "default-value"; +export var b = "b"; +export { default as external } from "external"; +export * from "external-named"; + +const test = await 1; + +var module = "should not conflict", + define = "should not conflict", + require = "should not conflict", + exports = "should not conflict", + globalName = "should not conflict"; +console.log.bind(console, module, define, require, exports, globalName); diff --git a/test/configCases/library/0-create-library/index.js b/test/configCases/library/0-create-library/index.js index c4ad22e5ae0..8f7dba45735 100644 --- a/test/configCases/library/0-create-library/index.js +++ b/test/configCases/library/0-create-library/index.js @@ -2,3 +2,11 @@ export * from "./a"; export default "default-value"; export var b = "b"; export { default as external } from "external"; +export * from "external-named"; + +var module = "should not conflict", + define = "should not conflict", + require = "should not conflict", + exports = "should not conflict", + globalName = "should not conflict"; +console.log.bind(console, module, define, require, exports, globalName); diff --git a/test/configCases/library/0-create-library/nested.js b/test/configCases/library/0-create-library/nested.js new file mode 100644 index 00000000000..65e80f3309a --- /dev/null +++ b/test/configCases/library/0-create-library/nested.js @@ -0,0 +1,8 @@ +export * as NS from "./index.js"; + +var module = "should not conflict", + define = "should not conflict", + require = "should not conflict", + exports = "should not conflict", + globalName = "should not conflict"; +console.log.bind(console, module, define, require, exports, globalName); diff --git a/test/configCases/library/0-create-library/non-external-named.js b/test/configCases/library/0-create-library/non-external-named.js new file mode 100644 index 00000000000..7646000d958 --- /dev/null +++ b/test/configCases/library/0-create-library/non-external-named.js @@ -0,0 +1 @@ +export const nonExternalA = "non-external-a"; diff --git a/test/configCases/library/0-create-library/overrides-exports-cjs.js b/test/configCases/library/0-create-library/overrides-exports-cjs.js new file mode 100644 index 00000000000..955861606fb --- /dev/null +++ b/test/configCases/library/0-create-library/overrides-exports-cjs.js @@ -0,0 +1,5 @@ +module.exports.foo = "foo"; + +module.exports = { + name: "overrides-exports-cjs" +}; diff --git a/test/configCases/library/0-create-library/reexport-define-module-property-cjs.js b/test/configCases/library/0-create-library/reexport-define-module-property-cjs.js new file mode 100644 index 00000000000..bef44a64606 --- /dev/null +++ b/test/configCases/library/0-create-library/reexport-define-module-property-cjs.js @@ -0,0 +1,3 @@ +module.exports = require("./define-module-property-cjs"); + +module.exports.name = "reexport-define-module-property-cjs"; diff --git a/test/configCases/library/0-create-library/self-reference-cjs.js b/test/configCases/library/0-create-library/self-reference-cjs.js new file mode 100644 index 00000000000..3105b3d32fb --- /dev/null +++ b/test/configCases/library/0-create-library/self-reference-cjs.js @@ -0,0 +1,3 @@ +exports.name +module.name +this.name \ No newline at end of file diff --git a/test/configCases/library/0-create-library/test.config.js b/test/configCases/library/0-create-library/test.config.js index 08ea6c319c8..67028ae7c8c 100644 --- a/test/configCases/library/0-create-library/test.config.js +++ b/test/configCases/library/0-create-library/test.config.js @@ -1 +1,3 @@ -exports.noTests = true; +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/library/0-create-library/webpack.config.js b/test/configCases/library/0-create-library/webpack.config.js index a2e2007698d..15e603705c7 100644 --- a/test/configCases/library/0-create-library/webpack.config.js +++ b/test/configCases/library/0-create-library/webpack.config.js @@ -1,65 +1,953 @@ -module.exports = [ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); +const supportsAsync = require("../../../helpers/supportsAsync"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ { output: { + uniqueName: "modern-module", + filename: "modern-module.js", + library: { + type: "modern-module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "esm", + filename: "esm.js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./esm-with-commonjs.js", + output: { + uniqueName: "esm-with-commonjs", + filename: "esm-with-commonjs.js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./esm-with-commonjs.js", + output: { + uniqueName: "esm-with-commonjs", + filename: "esm-with-commonjs-avoid-entry-iife.js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + avoidEntryIife: false + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "esm-export", + filename: "esm-export.js", + library: { + type: "module", + export: ["a"] + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + ...(supportsAsync() + ? [ + { + entry: "./index-async.js", + output: { + uniqueName: "esm-async", + filename: "esm-async.js", + library: { + type: "module" + } + }, + optimization: { + concatenateModules: true + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./index-async.js", + output: { + uniqueName: "esm-async-no-concatenate-modules", + filename: "esm-async-no-concatenate-modules.js", + library: { + type: "module" + } + }, + optimization: { + concatenateModules: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + } + ] + : []), + { + output: { + uniqueName: "esm-export-no-concatenate-modules", + filename: "esm-export-no-concatenate-modules.js", + library: { + type: "module", + export: ["a"] + } + }, + target: "node14", + optimization: { + concatenateModules: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "esm-runtimeChunk", + filename: "esm-runtimeChunk/[name].js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "esm-runtimeChunk-concatenateModules", + filename: "esm-runtimeChunk-concatenateModules/[name].js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single", + concatenateModules: true + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "esm-runtimeChunk-no-concatenateModules", + filename: "esm-runtimeChunk-no-concatenateModules/[name].js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single", + concatenateModules: false + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "esm-runtimeChunk-concatenateModules-splitChunks", + filename: "esm-runtimeChunk-concatenateModules-splitChunks/[name].js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single", + concatenateModules: true, + splitChunks: { + cacheGroups: { + module: { + test: /a\.js$/, + chunks: "all", + enforce: true, + reuseExistingChunk: true + } + } + } + }, + experiments: { + outputModule: true + } + }, + { + entry: ["./foo.js", "./index.js"], + output: { + uniqueName: "esm-multiple-entry-modules", + filename: "esm-multiple-entry-modules.js", + library: { + type: "module" + } + }, + target: "node14", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + experiments: { + outputModule: true + } + }, + { + output: { + uniqueName: "commonjs", filename: "commonjs.js", - libraryTarget: "commonjs-module" + library: { + type: "commonjs" + }, + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + output: { + uniqueName: "commonjs-iife", + filename: "commonjs-iife.js", + library: { + type: "commonjs" + }, + iife: true + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + output: { + uniqueName: "amd", + filename: "amd.js", + library: { + type: "amd" + }, + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + output: { + uniqueName: "amd-iife", + filename: "amd-iife.js", + library: { + type: "amd" + }, + iife: true }, resolve: { alias: { - external: "./non-external" + external: "./non-external", + "external-named": "./non-external-named" } } }, { output: { + uniqueName: "amd-runtimeChunk", + filename: "amd-runtimeChunk/[name].js", + library: { + type: "amd" + }, + globalObject: "global", + iife: false + }, + target: "web", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + } + }, + { + output: { + uniqueName: "amd-iife-runtimeChunk", + filename: "amd-iife-runtimeChunk/[name].js", + library: { + type: "amd" + }, + globalObject: "global", + iife: true + }, + target: "web", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + } + }, + { + output: { + uniqueName: "umd", filename: "umd.js", - libraryTarget: "umd" + library: { + type: "umd" + } }, resolve: { alias: { - external: "./non-external" + external: "./non-external", + "external-named": "./non-external-named" } } }, { output: { + uniqueName: "true-iife-umd", + filename: "true-iife-umd.js", + library: { + type: "umd" + }, + iife: true + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + output: { + uniqueName: "false-iife-umd", + filename: "false-iife-umd.js", + library: { + type: "umd" + }, + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + ignoreWarnings: [(error) => error.name === "FalseIIFEUmdWarning"] + }, + { + output: { + uniqueName: "false-iife-umd2", + filename: "false-iife-umd2.js", + library: { + type: "umd2" + }, + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + ignoreWarnings: [(error) => error.name === "FalseIIFEUmdWarning"] + }, + { + output: { + uniqueName: "umd-default", filename: "umd-default.js", - libraryTarget: "umd", - libraryExport: "default" + library: { + type: "umd", + export: "default" + } }, resolve: { alias: { - external: "./non-external" + external: "./non-external", + "external-named": "./non-external-named" } } }, { output: { + uniqueName: "this", filename: "this.js", - libraryTarget: "this" + library: { + type: "this" + }, + iife: false }, resolve: { alias: { - external: "./non-external" + external: "./non-external", + "external-named": "./non-external-named" } } }, { output: { - filename: "global.js", - library: "globalName" + uniqueName: "this-iife", + filename: "this-iife.js", + library: { + type: "this" + }, + iife: true }, resolve: { alias: { - external: "./non-external" + external: "./non-external", + "external-named": "./non-external-named" } } }, { output: { + uniqueName: "var", + filename: "var.js", + library: ["globalName", "x", "y"], + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + plugins: [ + new webpack.BannerPlugin({ + raw: true, + banner: "module.exports = () => globalName;\n" + }) + ] + }, + { + output: { + uniqueName: "var-iife", + filename: "var-iife.js", + library: ["globalName", "x", "y"], + iife: true + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + plugins: [ + new webpack.BannerPlugin({ + raw: true, + banner: "module.exports = () => globalName;\n" + }) + ] + }, + { + entry: "./nested.js", + output: { + uniqueName: "commonjs-nested", + filename: "commonjs-nested.js", + library: { + type: "commonjs", + export: "NS" + }, + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + entry: "./nested.js", + output: { + uniqueName: "commonjs-nested-iife", + filename: "commonjs-nested-iife.js", + library: { + type: "commonjs", + export: "NS" + }, + iife: true + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + output: { + uniqueName: "commonjs2-external", filename: "commonjs2-external.js", - libraryTarget: "commonjs2" + library: { + type: "commonjs2" + }, + iife: false + }, + externals: ["external", "external-named"] + }, + { + output: { + uniqueName: "commonjs2-external-no-concat", + filename: "commonjs2-external-no-concat.js", + library: { + type: "commonjs2" + }, + iife: false + }, + optimization: { + concatenateModules: false + }, + externals: ["external", "external-named"] + }, + { + output: { + uniqueName: "commonjs2-iife-external", + filename: "commonjs2-iife-external.js", + library: { + type: "commonjs2" + }, + iife: true + }, + externals: ["external", "external-named"] + }, + { + mode: "development", + output: { + uniqueName: "commonjs2-external-eval", + filename: "commonjs2-external-eval.js", + library: { + type: "commonjs2" + } + }, + externals: ["external", "external-named"] + }, + { + mode: "development", + output: { + uniqueName: "commonjs2-external-eval-source-map", + filename: "commonjs2-external-eval-source-map.js", + library: { + type: "commonjs2" + } + }, + devtool: "eval-source-map", + externals: ["external", "external-named"] + }, + { + output: { + uniqueName: "commonjs-static-external", + filename: "commonjs-static-external.js", + library: { + type: "commonjs-static" + }, + iife: false + }, + externals: ["external", "external-named"] + }, + { + output: { + uniqueName: "index", + filename: "index.js", + path: path.resolve(testPath, "commonjs2-split-chunks"), + library: { + type: "commonjs2" + } + }, + target: "node", + optimization: { + splitChunks: { + cacheGroups: { + test: { + enforce: true, + chunks: "all", + test: /a\.js$/, + filename: "part.js" + } + } + } + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + output: { + uniqueName: "commonjs2-runtimeChunk", + filename: "commonjs2-runtimeChunk/[name].js", + library: { + type: "commonjs2" + }, + iife: false + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + } + }, + { + output: { + uniqueName: "commonjs2-iife-runtimeChunk", + filename: "commonjs2-iife-runtimeChunk/[name].js", + library: { + type: "commonjs2" + }, + iife: true + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + } + }, + { + output: { + uniqueName: "global-runtimeChunk", + filename: "global-runtimeChunk/[name].js", + library: ["globalName", "x", "y"], + libraryTarget: "global", + iife: false + }, + target: "web", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + } + }, + { + output: { + uniqueName: "global-iife-runtimeChunk", + filename: "global-iife-runtimeChunk/[name].js", + library: ["globalName", "x", "y"], + libraryTarget: "global", + iife: true + }, + target: "web", + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + }, + optimization: { + runtimeChunk: "single" + } + }, + { + entry: { + entryA: { + import: "./index" + }, + entryB: { + import: "./index", + library: { + type: "umd", + name: "umd" + } + }, + entryC: { + import: "./index", + library: { + type: "amd" + } + } + }, + output: { + library: { + type: "commonjs-module" + }, + uniqueName: "commonjs-module", + filename: "[name].js" + }, + resolve: { + alias: { + external: "./non-external", + "external-named": "./non-external-named" + } + } + }, + { + entry: "./class-commonjs", + output: { + uniqueName: "class-commonjs", + filename: "commonjs-bundle-to-esm-1.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./exports-shortcut-cjs", + output: { + uniqueName: "exports-shortcut-cjs", + filename: "commonjs-bundle-to-esm-2.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./overrides-exports-cjs", + output: { + uniqueName: "overrides-exports-cjs", + filename: "commonjs-bundle-to-esm-3.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./self-reference-cjs", + output: { + uniqueName: "self-reference-cjs", + filename: "commonjs-bundle-to-esm-4.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./adding-exports-cjs", + output: { + uniqueName: "adding-exports-cjs", + filename: "commonjs-bundle-to-esm-5.mjs", + module: true, + library: { + type: "module" + } }, - externals: ["external"] + experiments: { + outputModule: true + } + }, + { + entry: "./define-module-property-cjs", + output: { + uniqueName: "define-module-property-cjs", + filename: "commonjs-bundle-to-esm-6.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./reexport-define-module-property-cjs", + output: { + uniqueName: "reexport-define-module-property-cjs", + filename: "commonjs-bundle-to-esm-7.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./define-this-exports-cjs", + output: { + uniqueName: "define-this-exports-cjs", + filename: "commonjs-bundle-to-esm-8.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./esm.js", + output: { + uniqueName: "system-esm", + filename: "system-esm.js", + library: { + type: "system" + } + } + }, + { + entry: "./commonjs.js", + output: { + uniqueName: "system-commonjs", + filename: "system-commonjs.js", + library: { + type: "system" + } + } + }, + { + entry: "./esm-star-reexport-and-external", + target: "node14", + output: { + uniqueName: "esm-star-reexport-and-external", + filename: "esm-star-reexport-and-external.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + } } ]; diff --git a/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/system-external-commonjs.js b/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/system-external-commonjs.js new file mode 100644 index 00000000000..df775641c30 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/system-external-commonjs.js @@ -0,0 +1,7 @@ +import MyClass, {a, b} from "library-commonjs"; + +it("should get exports from systemjs library (" + NAME + ")", function() { + expect(new MyClass().getValue()).toBe("my-class") + expect(a).toBe(10); + expect(b).toBe(20); +}); diff --git a/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/test.config.js b/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/test.config.js new file mode 100644 index 00000000000..32ad512533a --- /dev/null +++ b/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + scope.System = System; + scope.System.setRequire(scope.require); + }, + afterExecute() { + delete global.webpackChunk; + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/webpack.config.js b/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/webpack.config.js new file mode 100644 index 00000000000..06e2e69ae21 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-commonjs-used-exports-false/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + entry: "./system-external-commonjs.js", + output: { + library: { + type: "system" + } + }, + externals: { + "library-commonjs": path.resolve( + testPath, + "../0-create-library/system-commonjs.js" + ) + }, + optimization: { + usedExports: false + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("systemjs with external from commonjs format") + }) + ] + } +]; diff --git a/test/configCases/library/1-systemjs-external-commonjs/system-external-commonjs.js b/test/configCases/library/1-systemjs-external-commonjs/system-external-commonjs.js new file mode 100644 index 00000000000..df775641c30 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-commonjs/system-external-commonjs.js @@ -0,0 +1,7 @@ +import MyClass, {a, b} from "library-commonjs"; + +it("should get exports from systemjs library (" + NAME + ")", function() { + expect(new MyClass().getValue()).toBe("my-class") + expect(a).toBe(10); + expect(b).toBe(20); +}); diff --git a/test/configCases/library/1-systemjs-external-commonjs/test.config.js b/test/configCases/library/1-systemjs-external-commonjs/test.config.js new file mode 100644 index 00000000000..32ad512533a --- /dev/null +++ b/test/configCases/library/1-systemjs-external-commonjs/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + scope.System = System; + scope.System.setRequire(scope.require); + }, + afterExecute() { + delete global.webpackChunk; + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/library/1-systemjs-external-commonjs/webpack.config.js b/test/configCases/library/1-systemjs-external-commonjs/webpack.config.js new file mode 100644 index 00000000000..8056dfd1277 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-commonjs/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + entry: "./system-external-commonjs.js", + output: { + library: { + type: "system" + } + }, + externals: { + "library-commonjs": path.resolve( + testPath, + "../0-create-library/system-commonjs.js" + ) + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("systemjs with external from commonjs format") + }) + ] + } +]; diff --git a/test/configCases/library/1-systemjs-external-esm-used-exports-false/system-external-esm.js b/test/configCases/library/1-systemjs-external-esm-used-exports-false/system-external-esm.js new file mode 100644 index 00000000000..16ab5673b12 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-esm-used-exports-false/system-external-esm.js @@ -0,0 +1,7 @@ +import MyClass, {a, b} from "library-esm"; + +it("should get exports from systemjs library (" + NAME + ")", function() { + expect(new MyClass().getValue()).toBe("my-class") + expect(a).toBe(10); + expect(b).toBe(20); +}); diff --git a/test/configCases/library/1-systemjs-external-esm-used-exports-false/test.config.js b/test/configCases/library/1-systemjs-external-esm-used-exports-false/test.config.js new file mode 100644 index 00000000000..32ad512533a --- /dev/null +++ b/test/configCases/library/1-systemjs-external-esm-used-exports-false/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + scope.System = System; + scope.System.setRequire(scope.require); + }, + afterExecute() { + delete global.webpackChunk; + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/library/1-systemjs-external-esm-used-exports-false/webpack.config.js b/test/configCases/library/1-systemjs-external-esm-used-exports-false/webpack.config.js new file mode 100644 index 00000000000..e0e1f633ef3 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-esm-used-exports-false/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + entry: "./system-external-esm.js", + output: { + library: { + type: "system" + } + }, + externals: { + "library-esm": path.resolve(testPath, "../0-create-library/system-esm.js") + }, + optimization: { + usedExports: false + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("systemjs with external from ES module format") + }) + ] + } +]; diff --git a/test/configCases/library/1-systemjs-external-esm/system-external-esm.js b/test/configCases/library/1-systemjs-external-esm/system-external-esm.js new file mode 100644 index 00000000000..16ab5673b12 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-esm/system-external-esm.js @@ -0,0 +1,7 @@ +import MyClass, {a, b} from "library-esm"; + +it("should get exports from systemjs library (" + NAME + ")", function() { + expect(new MyClass().getValue()).toBe("my-class") + expect(a).toBe(10); + expect(b).toBe(20); +}); diff --git a/test/configCases/library/1-systemjs-external-esm/test.config.js b/test/configCases/library/1-systemjs-external-esm/test.config.js new file mode 100644 index 00000000000..32ad512533a --- /dev/null +++ b/test/configCases/library/1-systemjs-external-esm/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const System = require("../../../helpers/fakeSystem"); + +module.exports = { + beforeExecute: () => { + System.init(); + }, + moduleScope(scope) { + scope.System = System; + scope.System.setRequire(scope.require); + }, + afterExecute() { + delete global.webpackChunk; + System.execute("(anonym)"); + } +}; diff --git a/test/configCases/library/1-systemjs-external-esm/webpack.config.js b/test/configCases/library/1-systemjs-external-esm/webpack.config.js new file mode 100644 index 00000000000..89c4f88cd85 --- /dev/null +++ b/test/configCases/library/1-systemjs-external-esm/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + entry: "./system-external-esm.js", + output: { + library: { + type: "system" + } + }, + externals: { + "library-esm": path.resolve(testPath, "../0-create-library/system-esm.js") + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("systemjs with external from ES module format") + }) + ] + } +]; diff --git a/test/configCases/library/1-use-library/default-test-modern-module.js b/test/configCases/library/1-use-library/default-test-modern-module.js new file mode 100644 index 00000000000..13f92f0fa20 --- /dev/null +++ b/test/configCases/library/1-use-library/default-test-modern-module.js @@ -0,0 +1,5 @@ +import d from "library"; + +it("should tree-shake other exports from library (" + NAME + ")", function() { + expect(d).toBe("default-value"); +}); diff --git a/test/configCases/library/1-use-library/esm-star-reexport-and-external.js b/test/configCases/library/1-use-library/esm-star-reexport-and-external.js new file mode 100644 index 00000000000..a95e449b20f --- /dev/null +++ b/test/configCases/library/1-use-library/esm-star-reexport-and-external.js @@ -0,0 +1,13 @@ +import { readFile, foo, bar, resolve } from "library"; +import fs from "fs" +import path from "path" + +it("should handle external module correctly with star reexports", () => { + // `foo` and `bar` are reexported by `reexport-foo` module and `reexport-bar` module, + // but the entry module's exports take precedence. + expect(foo).toBe(1); + expect(bar).toBe(1); + + expect(readFile).toBe(fs.readFile); + expect(resolve).toBe(path.resolve); +}); diff --git a/test/configCases/library/1-use-library/esm-with-bundled-commonjs.js b/test/configCases/library/1-use-library/esm-with-bundled-commonjs.js new file mode 100644 index 00000000000..ce762fe004d --- /dev/null +++ b/test/configCases/library/1-use-library/esm-with-bundled-commonjs.js @@ -0,0 +1,54 @@ +// class-commonjs +import lib1 from "lib1"; +// exports-shortcut-cjs +import lib2 from "lib2"; +// overrides-exports-cjs +import lib3 from "lib3"; +// self-reference-cjs +import lib4 from "lib4"; +// adding-exports-cjs +import lib5 from "lib5"; +// define-module-property-cjs +import lib6, { name as lib6_name, foo as lib6_foo } from "lib6"; +// reexport-define-module-property-cjs +import lib7, { name as lib7_name, foo as lib7_foo } from "lib7"; +// define-this-exports-cjs +import lib8, { foo as lib8_foo, name as lib8_name } from "lib8"; + +it( + "should be able to import harmony exports from library (" + NAME + ")", + function () { + expect(new lib1().getNumber()).toBe(1); + + expect(lib2).toEqual({}); + + expect(lib3.name).toBe("overrides-exports-cjs"); + expect(lib3.foo).toBe(undefined); + + expect(lib4).toEqual({}); + + expect(lib5.name).toBe("adding-exports-cjs"); + expect(lib5.foo).toBe("foo"); + + expect(lib6).toMatchObject({ + foo: "foo", + name: "define-module-property-cjs" + }); + expect(lib6_name).toBe("define-module-property-cjs"); + expect(lib6_foo).toBe("foo"); + + expect(lib7).toMatchObject({ + foo: "foo", + name: "reexport-define-module-property-cjs" + }); + expect(lib7_name).toBe("reexport-define-module-property-cjs"); + expect(lib7_foo).toBe("foo"); + + expect(lib8).toMatchObject({ + foo: "foo", + name: "define-this-exports-cjs" + }); + expect(lib8_foo).toBe("foo"); + expect(lib8_name).toBe("define-this-exports-cjs"); + } +); diff --git a/test/configCases/library/1-use-library/esm-with-commonjs.js b/test/configCases/library/1-use-library/esm-with-commonjs.js new file mode 100644 index 00000000000..d53b8d23844 --- /dev/null +++ b/test/configCases/library/1-use-library/esm-with-commonjs.js @@ -0,0 +1,26 @@ +import d from "library"; +import { a, b, external, MyClass1, MyClass2, func1, func2 } from "library"; +import * as imoprtStar from "library"; + +it( + "should be able to import harmony exports from library (" + NAME + ")", + function () { + expect(d).toBe("default-value"); + expect(a).toBe("a"); + expect(b).toBe("b"); + expect(new MyClass1().getNumber()).toBe(1); + expect(new MyClass2().getNumber()).toBe(2); + expect(func1()).toBe(3); + expect(func2()).toBe(4); + if (typeof TEST_EXTERNAL !== "undefined" && TEST_EXTERNAL) { + expect(external).toEqual(["external"]); + expect(external).toBe(require("external")); + const { externalA } = imoprtStar + expect(externalA).toEqual(["external-a"]); + } else { + expect(external).toBe("non-external"); + const { nonExternalA } = imoprtStar; + expect(nonExternalA).toBe("non-external-a"); + } + } +); diff --git a/test/configCases/library/1-use-library/index.js b/test/configCases/library/1-use-library/index.js index 726072db8f0..f4975cce23e 100644 --- a/test/configCases/library/1-use-library/index.js +++ b/test/configCases/library/1-use-library/index.js @@ -1,14 +1,22 @@ import d from "library"; import { a, b, external } from "library"; +import * as imoprtStar from "library"; -it("should be able to import harmony exports from library (" + NAME + ")", function() { - expect(d).toBe("default-value"); - expect(a).toBe("a"); - expect(b).toBe("b"); - if(typeof TEST_EXTERNAL !== "undefined" && TEST_EXTERNAL) { - expect(external).toEqual(["external"]); - expect(external).toBe(require("external")); - } else { - expect(external).toBe("non-external"); +it( + "should be able to import harmony exports from library (" + NAME + ")", + function () { + expect(d).toBe("default-value"); + expect(a).toBe("a"); + expect(b).toBe("b"); + if (typeof TEST_EXTERNAL !== "undefined" && TEST_EXTERNAL) { + expect(external).toEqual(["external"]); + expect(external).toBe(require("external")); + const { externalA } = imoprtStar + expect(externalA).toEqual(["external-a"]); + } else { + expect(external).toBe("non-external"); + const { nonExternalA } = imoprtStar; + expect(nonExternalA).toBe("non-external-a"); + } } -}); +); diff --git a/test/configCases/library/1-use-library/module-export-test.js b/test/configCases/library/1-use-library/module-export-test.js new file mode 100644 index 00000000000..0f1e4cb4d27 --- /dev/null +++ b/test/configCases/library/1-use-library/module-export-test.js @@ -0,0 +1,5 @@ +import * as mod from "library"; + +it("should tree-shake other exports from library (" + NAME + ") and export only 'a'", function() { + expect(mod).toMatchObject({ a: "a" }); +}); diff --git a/test/configCases/library/1-use-library/node_modules/external-named.js b/test/configCases/library/1-use-library/node_modules/external-named.js new file mode 100644 index 00000000000..ca3fa757c31 --- /dev/null +++ b/test/configCases/library/1-use-library/node_modules/external-named.js @@ -0,0 +1 @@ +module.exports['externalA'] = ["external-a"]; diff --git a/test/configCases/library/1-use-library/test.config.js b/test/configCases/library/1-use-library/test.config.js new file mode 100644 index 00000000000..a24102c43a8 --- /dev/null +++ b/test/configCases/library/1-use-library/test.config.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + scope.define = (factory) => { + scope.module.exports = factory(); + }; + }, + afterExecute() { + delete global.webpackChunk; + } +}; diff --git a/test/configCases/library/1-use-library/global-test.js b/test/configCases/library/1-use-library/this-test.js similarity index 100% rename from test/configCases/library/1-use-library/global-test.js rename to test/configCases/library/1-use-library/this-test.js diff --git a/test/configCases/library/1-use-library/var-test.js b/test/configCases/library/1-use-library/var-test.js new file mode 100644 index 00000000000..5e990818fc4 --- /dev/null +++ b/test/configCases/library/1-use-library/var-test.js @@ -0,0 +1,11 @@ +var getData = require("library"); + +it("should be able get items from library (" + NAME + ")", function() { + const d = getData(); + expect(d).toHaveProperty("x"); + expect(d.x).toHaveProperty("y"); + const data = d.x.y; + expect(data).toHaveProperty("default", "default-value"); + expect(data).toHaveProperty("a", "a"); + expect(data).toHaveProperty("b", "b"); +}); diff --git a/test/configCases/library/1-use-library/webpack.config.js b/test/configCases/library/1-use-library/webpack.config.js index 05624691fa1..505e72067f4 100644 --- a/test/configCases/library/1-use-library/webpack.config.js +++ b/test/configCases/library/1-use-library/webpack.config.js @@ -1,49 +1,489 @@ -var webpack = require("../../../../"); -var path = require("path"); -module.exports = [ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").Compilation} Compilation */ + +const path = require("path"); +const webpack = require("../../../../"); +const supportsAsync = require("../../../helpers/supportsAsync"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ { + entry: "./default-test-modern-module.js", + optimization: { + minimize: true + }, + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/modern-module.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("modern-module-tree-shakable") + }), + /** + * @this {Compiler} compiler + */ + function apply() { + /** + * @param {Compilation} compilation compilation + * @returns {void} + */ + const handler = (compilation) => { + compilation.hooks.afterProcessAssets.tap("testcase", (assets) => { + for (const asset of Object.keys(assets)) { + const source = assets[asset].source(); + expect(source).not.toContain('"a"'); + expect(source).not.toContain('"b"'); + expect(source).not.toContain('"non-external"'); + // expect pure ESM export without webpack runtime + expect(source).not.toContain('"__webpack_exports__"'); + expect(source).not.toContain(".exports="); + } + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/esm.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm") + }) + ] + }, + { + entry: "./esm-with-commonjs", resolve: { alias: { library: path.resolve( - __dirname, - "../../../js/config/library/0-create-library/commonjs.js" + testPath, + "../0-create-library/esm-with-commonjs.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-with-commonjs") + }) + ] + }, + { + entry: "./esm-with-commonjs", + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-with-commonjs-avoid-entry-iife.js" ) } }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-with-commonjs") + }) + ] + }, + { + entry: "./module-export-test.js", + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/esm-export.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-export") + }) + ] + }, + { + entry: "./module-export-test.js", + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-export-no-concatenate-modules.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-export-no-concatenate-modules.js") + }) + ] + }, + ...(supportsAsync() + ? [ + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-async.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-async") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-async-no-concatenate-modules.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-async-no-concatenate-modules") + }) + ] + } + ] + : []), + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-runtimeChunk/main.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-runtimeChunk") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-runtimeChunk-concatenateModules/main.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-runtimeChunk-concatenateModules") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-runtimeChunk-no-concatenateModules/main.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-runtimeChunk-no-concatenateModules") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-runtimeChunk-concatenateModules-splitChunks/main.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-runtimeChunk-concatenateModules-splitChunks") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-multiple-entry-modules.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("esm-multiple-entry-modules") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/commonjs.js") + } + }, plugins: [ new webpack.DefinePlugin({ NAME: JSON.stringify("commonjs") }) ] }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/commonjs-iife.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs-iife") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/amd.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("amd") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/amd-iife.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("amd-iife") + }) + ] + }, + { + externals: { + library: `promise (require(${JSON.stringify( + "../0-create-library/amd-runtimeChunk/runtime.js" + )}), require(${JSON.stringify( + "../0-create-library/amd-runtimeChunk/main.js" + )}))` + }, + output: { + library: { type: "commonjs-module" } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("amd-runtimeChunk") + }) + ] + }, + { + externals: { + library: `promise (require(${JSON.stringify( + "../0-create-library/amd-iife-runtimeChunk/runtime.js" + )}), require(${JSON.stringify( + "../0-create-library/amd-iife-runtimeChunk/main.js" + )}))` + }, + output: { + library: { type: "commonjs-module" } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("amd-iife-runtimeChunk") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/umd.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("umd") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/true-iife-umd.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("true-iife-umd") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/false-iife-umd.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("false-iife-umd") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/false-iife-umd2.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("false-iife-umd2") + }) + ] + }, + { + entry: "./this-test.js", + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/this.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("this") + }) + ] + }, + { + entry: "./this-test.js", + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/this-iife.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("this-iife") + }) + ] + }, + { + entry: "./var-test.js", + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/var.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("var") + }) + ] + }, + { + entry: "./var-test.js", + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/var-iife.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("var-iife") + }) + ] + }, { resolve: { alias: { library: path.resolve( + testPath, + "../0-create-library/commonjs-nested.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs-nested") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/commonjs-nested-iife.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs-nested-iife") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/commonjs2-external.js" + ), + external: path.resolve(__dirname, "node_modules/external.js"), + "external-named": path.resolve( __dirname, - "../../../js/config/library/0-create-library/umd.js" + "node_modules/external-named.js" ) } }, plugins: [ new webpack.DefinePlugin({ - NAME: JSON.stringify("umd") + NAME: JSON.stringify("commonjs2 with external"), + TEST_EXTERNAL: true }) ] }, { - entry: "./global-test.js", resolve: { alias: { library: path.resolve( + testPath, + "../0-create-library/commonjs2-iife-external.js" + ), + external: path.resolve(__dirname, "node_modules/external.js"), + "external-named": path.resolve( __dirname, - "../../../js/config/library/0-create-library/this.js" + "node_modules/external-named.js" ) } }, plugins: [ new webpack.DefinePlugin({ - NAME: JSON.stringify("this") + NAME: JSON.stringify("commonjs2-iife with external"), + TEST_EXTERNAL: true }) ] }, @@ -51,33 +491,259 @@ module.exports = [ resolve: { alias: { library: path.resolve( + testPath, + "../0-create-library/commonjs2-external-eval.js" + ), + external: path.resolve(__dirname, "node_modules/external.js"), + "external-named": path.resolve( __dirname, - "../../../js/config/library/0-create-library/commonjs2-external.js" + "node_modules/external-named.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs2 with external and eval devtool"), + TEST_EXTERNAL: true + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/commonjs2-external-eval-source-map.js" ), - external: path.resolve(__dirname, "node_modules/external.js") + external: path.resolve(__dirname, "node_modules/external.js"), + "external-named": path.resolve( + __dirname, + "node_modules/external-named.js" + ) } }, plugins: [ new webpack.DefinePlugin({ - NAME: JSON.stringify("commonjs2 with external"), + NAME: JSON.stringify( + "commonjs2 with external and eval-source-map devtool" + ), TEST_EXTERNAL: true }) ] }, { - entry: "./default-test.js", resolve: { alias: { library: path.resolve( + testPath, + "../0-create-library/commonjs-static-external.js" + ), + external: path.resolve(__dirname, "node_modules/external.js"), + "external-named": path.resolve( __dirname, - "../../../js/config/library/0-create-library/umd-default.js" + "node_modules/external-named.js" ) } }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs-static with external"), + TEST_EXTERNAL: true + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/commonjs2-split-chunks/" + ), + external: path.resolve(__dirname, "node_modules/external.js"), + "external-named": path.resolve( + __dirname, + "node_modules/external-named.js" + ) + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs2 with splitChunks") + }) + ] + }, + { + entry: "./default-test.js", + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/umd-default.js") + } + }, plugins: [ new webpack.DefinePlugin({ NAME: JSON.stringify("default") }) ] + }, + { + externals: { + library: `promise require(${JSON.stringify( + path.resolve( + testPath, + "../0-create-library/commonjs2-runtimeChunk/main.js" + ) + )})` + }, + output: { + library: { type: "commonjs-module" } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs2-runtimeChunk") + }) + ] + }, + { + externals: { + library: `promise require(${JSON.stringify( + path.resolve( + testPath, + "../0-create-library/commonjs2-iife-runtimeChunk/main.js" + ) + )})` + }, + output: { + library: { type: "commonjs-module" } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs2-iife-runtimeChunk") + }) + ] + }, + { + externals: { + library: `var (require(${JSON.stringify( + "../0-create-library/global-runtimeChunk/runtime.js" + )}), require(${JSON.stringify( + "../0-create-library/global-runtimeChunk/main.js" + )}), globalName.x.y)` + }, + target: "web", + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("global-runtimeChunk") + }) + ] + }, + { + externals: { + library: `var (require(${JSON.stringify( + "../0-create-library/global-iife-runtimeChunk/runtime.js" + )}), require(${JSON.stringify( + "../0-create-library/global-iife-runtimeChunk/main.js" + )}), globalName.x.y)` + }, + target: "web", + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("global-iife-runtimeChunk") + }) + ] + }, + + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/entryA.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("entryA") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/entryB.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("entryB") + }) + ] + }, + { + resolve: { + alias: { + library: path.resolve(testPath, "../0-create-library/entryC.js") + } + }, + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("entryC") + }) + ] + }, + { + entry: "./esm-with-bundled-commonjs", + output: { + module: true + }, + experiments: { outputModule: true }, + externals: { + lib1: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-1.mjs" + ), + lib2: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-2.mjs" + ), + lib3: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-3.mjs" + ), + lib4: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-4.mjs" + ), + lib5: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-5.mjs" + ), + lib6: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-6.mjs" + ), + lib7: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-7.mjs" + ), + lib8: path.resolve( + testPath, + "../0-create-library/commonjs-bundle-to-esm-8.mjs" + ) + }, + externalsType: "module-import", + plugins: [ + new webpack.DefinePlugin({ + NAME: JSON.stringify("commonjs-bundle-to-esm") + }) + ] + }, + { + entry: "./esm-star-reexport-and-external", + resolve: { + alias: { + library: path.resolve( + testPath, + "../0-create-library/esm-star-reexport-and-external.mjs" + ) + } + } } ]; diff --git a/test/configCases/library/a/webpack.config.js b/test/configCases/library/a/webpack.config.js index bcd111fb14e..0fd9032f997 100644 --- a/test/configCases/library/a/webpack.config.js +++ b/test/configCases/library/a/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "this" diff --git a/test/configCases/library/array-global/index.js b/test/configCases/library/array-global/index.js new file mode 100644 index 00000000000..274e87f90a3 --- /dev/null +++ b/test/configCases/library/array-global/index.js @@ -0,0 +1,3 @@ +it("should define global object with property", function() { + expect(a["b"]).toBeDefined(); +}); diff --git a/test/configCases/library/array-global/webpack.config.js b/test/configCases/library/array-global/webpack.config.js new file mode 100644 index 00000000000..3f21390e81e --- /dev/null +++ b/test/configCases/library/array-global/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: ["a", "b"] + } +}; diff --git a/test/configCases/library/array-window/index.js b/test/configCases/library/array-window/index.js new file mode 100644 index 00000000000..6c539d7a342 --- /dev/null +++ b/test/configCases/library/array-window/index.js @@ -0,0 +1,3 @@ +it("should define property in 'window' object", function() { + expect(window["a"]["b"]).toBeDefined(); +}); diff --git a/test/configCases/library/array-window/webpack.config.js b/test/configCases/library/array-window/webpack.config.js new file mode 100644 index 00000000000..477deeeb3fe --- /dev/null +++ b/test/configCases/library/array-window/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + output: { + library: ["a", "b"], + libraryTarget: "window" + } +}; diff --git a/test/configCases/library/assign-properties/index.js b/test/configCases/library/assign-properties/index.js new file mode 100644 index 00000000000..0fd13844838 --- /dev/null +++ b/test/configCases/library/assign-properties/index.js @@ -0,0 +1,9 @@ +it("should define global object with property", function() { + expect(process.env["assign_properties_env"]).toEqual("1"); + + expect(Object.keys(process.env).length).toBeGreaterThan(1); +}); + +module.exports = { + assign_properties_env: "1" +} diff --git a/test/configCases/library/assign-properties/webpack.config.js b/test/configCases/library/assign-properties/webpack.config.js new file mode 100644 index 00000000000..ab95a11d282 --- /dev/null +++ b/test/configCases/library/assign-properties/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: ["process", "env"], + libraryTarget: "assign-properties" + } +}; diff --git a/test/configCases/library/b/webpack.config.js b/test/configCases/library/b/webpack.config.js index 92f8b666bda..d48766fa5aa 100644 --- a/test/configCases/library/b/webpack.config.js +++ b/test/configCases/library/b/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "global" diff --git a/test/configCases/library/cjs-static/index.js b/test/configCases/library/cjs-static/index.js new file mode 100644 index 00000000000..069aa76ae7b --- /dev/null +++ b/test/configCases/library/cjs-static/index.js @@ -0,0 +1,10 @@ +const fs = require("fs") +export const foo1 = () => {} +export const foo2 = () => {} +const bar = "bar"; +export default bar + +it("should success compile and work",()=>{ + const output = fs.readFileSync(__filename).toString(); + expect(output.match(/exports(\[|\.)/g).length).toBe(4) +}) diff --git a/test/configCases/library/cjs-static/webpack.config.js b/test/configCases/library/cjs-static/webpack.config.js new file mode 100644 index 00000000000..4bcfff4a2dd --- /dev/null +++ b/test/configCases/library/cjs-static/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + output: { + library: { type: "commonjs-static" } + } +}; diff --git a/test/configCases/library/concatenate-modules-named-import-externals/__snapshots__/ConfigCacheTest.snap b/test/configCases/library/concatenate-modules-named-import-externals/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..e5dfe5004b4 --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,385 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases library concatenate-modules-named-import-externals concatenate-modules-named-import-externals should compile 1`] = ` +"import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals0_a__ } from \\"externals0\\"; +import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals1_a__ } from \\"externals1\\"; +import { default as __WEBPACK_EXTERNAL_MODULE_externals2_default__ } from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import \\"externals4\\"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/*!*****************************!*\\\\ + !*** ./test.js + 6 modules ***! + \\\\*****************************/ + +;// external \\"externals0\\" + +;// external \\"externals1\\" + +;// external \\"externals2\\" + +;// external \\"externals3\\" +const external_externals3_namespaceObject = __WEBPACK_EXTERNAL_MODULE_externals3__; +;// external \\"externals4\\" + +;// ./lib.js + + +const { HomeLayout = 123 } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + +;// ./test.js +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +__WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__; +__WEBPACK_EXTERNAL_MODULE_externals0_a__; +__WEBPACK_EXTERNAL_MODULE_externals1_a__; +__WEBPACK_EXTERNAL_MODULE_externals2_default__; +external_externals3_namespaceObject; +export { HomeLayout, __WEBPACK_EXTERNAL_MODULE_externals0_a__ as a }; +" +`; + +exports[`ConfigCacheTestCases library concatenate-modules-named-import-externals concatenate-modules-named-import-externals should compile 2`] = ` +"import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals0_a__ } from \\"externals0\\"; +import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals1_a__ } from \\"externals1\\"; +import { default as __WEBPACK_EXTERNAL_MODULE_externals2_default__ } from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import \\"externals4\\"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/*!*****************************!*\\\\ + !*** ./test.js + 6 modules ***! + \\\\*****************************/ + +;// external \\"externals0\\" + +;// external \\"externals1\\" + +;// external \\"externals2\\" + +;// external \\"externals3\\" +const external_externals3_namespaceObject = __WEBPACK_EXTERNAL_MODULE_externals3__; +;// external \\"externals4\\" + +;// ./lib.js + + +const { HomeLayout = 123 } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + +;// ./test.js +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +__WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__; +__WEBPACK_EXTERNAL_MODULE_externals0_a__; +__WEBPACK_EXTERNAL_MODULE_externals1_a__; +__WEBPACK_EXTERNAL_MODULE_externals2_default__; +external_externals3_namespaceObject; +export { HomeLayout, __WEBPACK_EXTERNAL_MODULE_externals0_a__ as a }; +" +`; + +exports[`ConfigCacheTestCases library concatenate-modules-named-import-externals concatenate-modules-named-import-externals should pre-compile to fill disk cache (1st) 1`] = ` +"import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals0_a__ } from \\"externals0\\"; +import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals1_a__ } from \\"externals1\\"; +import { default as __WEBPACK_EXTERNAL_MODULE_externals2_default__ } from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import \\"externals4\\"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/*!*****************************!*\\\\ + !*** ./test.js + 6 modules ***! + \\\\*****************************/ + +;// external \\"externals0\\" + +;// external \\"externals1\\" + +;// external \\"externals2\\" + +;// external \\"externals3\\" +const external_externals3_namespaceObject = __WEBPACK_EXTERNAL_MODULE_externals3__; +;// external \\"externals4\\" + +;// ./lib.js + + +const { HomeLayout = 123 } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + +;// ./test.js +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +__WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__; +__WEBPACK_EXTERNAL_MODULE_externals0_a__; +__WEBPACK_EXTERNAL_MODULE_externals1_a__; +__WEBPACK_EXTERNAL_MODULE_externals2_default__; +external_externals3_namespaceObject; +export { HomeLayout, __WEBPACK_EXTERNAL_MODULE_externals0_a__ as a }; +" +`; + +exports[`ConfigCacheTestCases library concatenate-modules-named-import-externals concatenate-modules-named-import-externals should pre-compile to fill disk cache (2nd) 1`] = ` +"import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals0_a__ } from \\"externals0\\"; +import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals1_a__ } from \\"externals1\\"; +import { default as __WEBPACK_EXTERNAL_MODULE_externals2_default__ } from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import \\"externals4\\"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/*!*****************************!*\\\\ + !*** ./test.js + 6 modules ***! + \\\\*****************************/ + +;// external \\"externals0\\" + +;// external \\"externals1\\" + +;// external \\"externals2\\" + +;// external \\"externals3\\" +const external_externals3_namespaceObject = __WEBPACK_EXTERNAL_MODULE_externals3__; +;// external \\"externals4\\" + +;// ./lib.js + + +const { HomeLayout = 123 } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + +;// ./test.js +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +__WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__; +__WEBPACK_EXTERNAL_MODULE_externals0_a__; +__WEBPACK_EXTERNAL_MODULE_externals1_a__; +__WEBPACK_EXTERNAL_MODULE_externals2_default__; +external_externals3_namespaceObject; +export { HomeLayout, __WEBPACK_EXTERNAL_MODULE_externals0_a__ as a }; +" +`; diff --git a/test/configCases/library/concatenate-modules-named-import-externals/__snapshots__/ConfigTest.snap b/test/configCases/library/concatenate-modules-named-import-externals/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..7f5cbb4284c --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/__snapshots__/ConfigTest.snap @@ -0,0 +1,97 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases library concatenate-modules-named-import-externals concatenate-modules-named-import-externals should compile 1`] = ` +"import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals0_a__ } from \\"externals0\\"; +import { HomeLayout as __WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__, a as __WEBPACK_EXTERNAL_MODULE_externals1_a__ } from \\"externals1\\"; +import { default as __WEBPACK_EXTERNAL_MODULE_externals2_default__ } from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import \\"externals4\\"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +/*!*****************************!*\\\\ + !*** ./test.js + 6 modules ***! + \\\\*****************************/ + +;// external \\"externals0\\" + +;// external \\"externals1\\" + +;// external \\"externals2\\" + +;// external \\"externals3\\" +const external_externals3_namespaceObject = __WEBPACK_EXTERNAL_MODULE_externals3__; +;// external \\"externals4\\" + +;// ./lib.js + + +const { HomeLayout = 123 } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = __WEBPACK_EXTERNAL_MODULE_externals0_HomeLayout__ } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + +;// ./test.js +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +__WEBPACK_EXTERNAL_MODULE_externals1_HomeLayout__; +__WEBPACK_EXTERNAL_MODULE_externals0_a__; +__WEBPACK_EXTERNAL_MODULE_externals1_a__; +__WEBPACK_EXTERNAL_MODULE_externals2_default__; +external_externals3_namespaceObject; +export { HomeLayout, __WEBPACK_EXTERNAL_MODULE_externals0_a__ as a }; +" +`; diff --git a/test/configCases/library/concatenate-modules-named-import-externals/index.js b/test/configCases/library/concatenate-modules-named-import-externals/index.js new file mode 100644 index 00000000000..f6e48fad94d --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/index.js @@ -0,0 +1,7 @@ + +it('should compile', () => {}); + +it('should handle external modules with concatenation and caching', () => { + // This test ensures serialization works with caching enabled + expect(true).toBe(true); +}); diff --git a/test/configCases/library/concatenate-modules-named-import-externals/lib.js b/test/configCases/library/concatenate-modules-named-import-externals/lib.js new file mode 100644 index 00000000000..d484730bb89 --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/lib.js @@ -0,0 +1,21 @@ +import { HomeLayout as aaa } from 'externals0'; + +const { HomeLayout = 123 } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = aaa } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = aaa } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = "111" } = {} + console.log({ external_externals3_namespaceObject }); +} + +export { HomeLayout } \ No newline at end of file diff --git a/test/configCases/library/concatenate-modules-named-import-externals/test.config.js b/test/configCases/library/concatenate-modules-named-import-externals/test.config.js new file mode 100644 index 00000000000..a8755bed92f --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.js"]; + } +}; diff --git a/test/configCases/library/concatenate-modules-named-import-externals/test.js b/test/configCases/library/concatenate-modules-named-import-externals/test.js new file mode 100644 index 00000000000..eddb63f953d --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/test.js @@ -0,0 +1,27 @@ +// re export +export { a } from 'externals0' + +// named import +import { a as a_2, HomeLayout as aaa } from 'externals1' +import { a as a_0 } from 'externals0' + +// default import +import defaultValue from 'externals2' + +// namespace import +import * as namespace from 'externals3' + +// side effect only import +import 'externals4' + +export { HomeLayout } from './lib' + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +aaa; +a_0; +a_2; +defaultValue; +namespace; \ No newline at end of file diff --git a/test/configCases/library/concatenate-modules-named-import-externals/webpack.config.js b/test/configCases/library/concatenate-modules-named-import-externals/webpack.config.js new file mode 100644 index 00000000000..af204eb0536 --- /dev/null +++ b/test/configCases/library/concatenate-modules-named-import-externals/webpack.config.js @@ -0,0 +1,56 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + cache: { + type: "memory" // Enable memory cache to test serialization + }, + mode: "none", + entry: { main: "./index.js", test: "./test.js" }, + output: { + module: true, + library: { + type: "modern-module" + }, + filename: "[name].js", + chunkFormat: "module" + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: [".js"] + }, + externalsType: "module", + externals: [ + "externals0", + "externals1", + "externals2", + "externals3", + "externals4" + ], + optimization: { + concatenateModules: true, + usedExports: true + }, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap( + "testcase", + ( + /** @type {import("../../../../types").Compilation} */ compilation + ) => { + compilation.hooks.afterProcessAssets.tap( + "testcase", + ( + /** @type {Record} */ assets + ) => { + const source = assets["test.js"].source(); + expect(source).toMatchSnapshot(); + } + ); + } + ); + } + ] +}; diff --git a/test/configCases/library/disable-provided-export/commonjs-static.js b/test/configCases/library/disable-provided-export/commonjs-static.js new file mode 100644 index 00000000000..72b15205e9a --- /dev/null +++ b/test/configCases/library/disable-provided-export/commonjs-static.js @@ -0,0 +1,2 @@ +export const lib3 = 'commonjs-static' + diff --git a/test/configCases/library/disable-provided-export/modern-module.js b/test/configCases/library/disable-provided-export/modern-module.js new file mode 100644 index 00000000000..8914545ca5f --- /dev/null +++ b/test/configCases/library/disable-provided-export/modern-module.js @@ -0,0 +1,8 @@ +export const lib2 = 'modern-module' + +export default "null" + +it("should compile and run", () => { + // avoid `No tests exported by test case` + expect(true).toBe(true) +}); \ No newline at end of file diff --git a/test/configCases/library/disable-provided-export/module.js b/test/configCases/library/disable-provided-export/module.js new file mode 100644 index 00000000000..731411836f8 --- /dev/null +++ b/test/configCases/library/disable-provided-export/module.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const foo = "module" + +export default 'module' +export { React, foo } + +it("should compile and run", () => { + // avoid `No tests exported by test case` + expect(true).toBe(true) +}); diff --git a/test/configCases/library/disable-provided-export/run.js b/test/configCases/library/disable-provided-export/run.js new file mode 100644 index 00000000000..8a13eda7c0c --- /dev/null +++ b/test/configCases/library/disable-provided-export/run.js @@ -0,0 +1,11 @@ +it("should compile and run", () => { + expect(libModule.default).toBe("module"); + expect(libModule.foo).toBe("module"); + expect(Boolean(libModule.React.version)).toBe(true); + + expect(libModernModule.default).toBe("modern-module"); + + expect(libCommonjsStatic.default).toBe("commonjs-static"); +}); + + diff --git a/test/configCases/library/disable-provided-export/test.filter.js b/test/configCases/library/disable-provided-export/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/library/disable-provided-export/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/library/disable-provided-export/webpack.config.js b/test/configCases/library/disable-provided-export/webpack.config.js new file mode 100644 index 00000000000..1575a333762 --- /dev/null +++ b/test/configCases/library/disable-provided-export/webpack.config.js @@ -0,0 +1,99 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: "./module.js", + optimization: { + providedExports: false + }, + output: { + library: { + type: "module" + } + }, + experiments: { + outputModule: true + }, + externals: ["react"], + externalsType: "module" + }, + { + entry: "./modern-module.js", + optimization: { + providedExports: false + }, + output: { + library: { + type: "modern-module", + export: ["lib2"] + } + }, + experiments: { + outputModule: true + } + }, + { + entry: "./commonjs-static.js", + optimization: { + providedExports: false + }, + output: { + library: { + type: "commonjs-static" + } + } + }, + { + entry: "./run.js", + plugins: [ + new webpack.BannerPlugin({ + raw: true, + banner: ` + import lib1Default, { foo, React } from './bundle0.mjs'; + import { lib2 } from './bundle1.mjs'; + + import { createRequire } from 'module'; + const require = createRequire(import.meta.url); + + const { lib3 } = require("./bundle2.js"); + + let libModule = { default: lib1Default, foo, React }; + let libModernModule = { default: lib2}; + let libCommonjsStatic = { default: lib3 }; + ` + }), + { + apply(compiler) { + compiler.hooks.done.tap( + { + name: "disable-provided-export", + stage: 100 + }, + () => { + expect( + compiler.hooks.compilation.taps.filter( + (tap) => tap.name === "FlagDependencyExportsPlugin" + ) + ).toHaveLength(1); + } + ); + } + } + ], + output: { + enabledLibraryTypes: ["module", "modern-module"], + library: { + type: "module" + } + }, + optimization: { + providedExports: false + }, + experiments: { + outputModule: true + } + } +]; diff --git a/test/configCases/library/invalid-name/errors.js b/test/configCases/library/invalid-name/errors.js new file mode 100644 index 00000000000..4251390f5a2 --- /dev/null +++ b/test/configCases/library/invalid-name/errors.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + [ + /Library name base \(123-hello world\) must be a valid identifier/, + /use a valid identifier \(e\. g\. _123_hello_world\)/ + ] +]; diff --git a/test/configCases/library/invalid-name/index.js b/test/configCases/library/invalid-name/index.js new file mode 100644 index 00000000000..bf37d884cd6 --- /dev/null +++ b/test/configCases/library/invalid-name/index.js @@ -0,0 +1,3 @@ +it("should error", function () { + throw new Error("should not be executed"); +}); diff --git a/test/configCases/library/invalid-name/webpack.config.js b/test/configCases/library/invalid-name/webpack.config.js new file mode 100644 index 00000000000..679c16f5629 --- /dev/null +++ b/test/configCases/library/invalid-name/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: ["123-hello world", "hello world"] + } +}; diff --git a/test/configCases/library/issue-18932/index.js b/test/configCases/library/issue-18932/index.js new file mode 100644 index 00000000000..78b38524c93 --- /dev/null +++ b/test/configCases/library/issue-18932/index.js @@ -0,0 +1,7 @@ +it("should don't have variable name conflict", function() { + expect(true).toBe(true); +}); + +const i = 1; + +export default "test"; diff --git a/test/configCases/library/issue-18932/webpack.config.js b/test/configCases/library/issue-18932/webpack.config.js new file mode 100644 index 00000000000..ec48483499f --- /dev/null +++ b/test/configCases/library/issue-18932/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + output: { + library: { + type: "commonjs" + } + } +}; diff --git a/test/configCases/library/issue-18951/index.js b/test/configCases/library/issue-18951/index.js new file mode 100644 index 00000000000..47dcec3506b --- /dev/null +++ b/test/configCases/library/issue-18951/index.js @@ -0,0 +1,7 @@ +it("should don't have variable name conflict", function() { + expect(true).toBe(true); +}); + +export const id = "collision"; +export const ids = ["collision"]; +export const modules = { "collision": true }; diff --git a/test/configCases/library/issue-18951/test.config.js b/test/configCases/library/issue-18951/test.config.js new file mode 100644 index 00000000000..9100dc59963 --- /dev/null +++ b/test/configCases/library/issue-18951/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.mjs"]; + } +}; diff --git a/test/configCases/library/issue-18951/webpack.config.js b/test/configCases/library/issue-18951/webpack.config.js new file mode 100644 index 00000000000..de048029342 --- /dev/null +++ b/test/configCases/library/issue-18951/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + experiments: { outputModule: true }, + output: { + filename: "[name].mjs", + library: { type: "module" } + }, + optimization: { + runtimeChunk: "single" // any value other than `false` + } +}; diff --git a/test/configCases/library/issue-19664/index.js b/test/configCases/library/issue-19664/index.js new file mode 100644 index 00000000000..b80e597cb32 --- /dev/null +++ b/test/configCases/library/issue-19664/index.js @@ -0,0 +1,10 @@ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.main = main; +function main() {} + +// commonjs bailout +if(this){} + +it("Should work when exports are unprovided", function() { + expect(true).toBe(true); +}); diff --git a/test/configCases/library/issue-19664/webpack.config.js b/test/configCases/library/issue-19664/webpack.config.js new file mode 100644 index 00000000000..93c8cc12c7b --- /dev/null +++ b/test/configCases/library/issue-19664/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: { + type: "commonjs-static" + } + } +}; diff --git a/test/configCases/library/modern-module-named-import-externals/__snapshots__/ConfigCacheTest.snap b/test/configCases/library/modern-module-named-import-externals/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..4c7f16e03a8 --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,821 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases library modern-module-named-import-externals modern-module-named-import-externals should compile 1`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE_externals0__ from \\"externals0\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals1__ from \\"externals1\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals2__ from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals4__ from \\"externals4\\"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */, +/* 2 */ +/*!*****************************!*\\\\ + !*** external \\"externals0\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.a) }); + +/***/ }), +/* 3 */ +/*!*****************************!*\\\\ + !*** external \\"externals1\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.a) }); + +/***/ }), +/* 4 */ +/*!*****************************!*\\\\ + !*** external \\"externals2\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"default\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals2__[\\"default\\"]) }); + +/***/ }), +/* 5 */ +/*!*****************************!*\\\\ + !*** external \\"externals3\\" ***! + \\\\*****************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_externals3__; + +/***/ }), +/* 6 */ +/*!*****************************!*\\\\ + !*** external \\"externals4\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ }); + +/***/ }), +/* 7 */ +/*!****************!*\\\\ + !*** ./lib.js ***! + \\\\****************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* binding */ HomeLayout) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); + + +const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!*****************!*\\\\ + !*** ./test.js ***! + \\\\*****************/ +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_5__.HomeLayout), +/* harmony export */ a: () => (/* reexport safe */ externals0__WEBPACK_IMPORTED_MODULE_0__.a) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); +/* harmony import */ var externals1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! externals1 */ 3); +/* harmony import */ var externals2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! externals2 */ 4); +/* harmony import */ var externals3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! externals3 */ 5); +/* harmony import */ var externals4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! externals4 */ 6); +/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib */ 7); +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +externals1__WEBPACK_IMPORTED_MODULE_1__.HomeLayout; +externals0__WEBPACK_IMPORTED_MODULE_0__.a; +externals1__WEBPACK_IMPORTED_MODULE_1__.a; +externals2__WEBPACK_IMPORTED_MODULE_2__[\\"default\\"]; +externals3__WEBPACK_IMPORTED_MODULE_3__; +})(); + +const __webpack_exports__HomeLayout = __webpack_exports__.HomeLayout; +const __webpack_exports__a = __webpack_exports__.a; +export { __webpack_exports__HomeLayout as HomeLayout, __webpack_exports__a as a }; +" +`; + +exports[`ConfigCacheTestCases library modern-module-named-import-externals modern-module-named-import-externals should compile 2`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE_externals0__ from \\"externals0\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals1__ from \\"externals1\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals2__ from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals4__ from \\"externals4\\"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */, +/* 2 */ +/*!*****************************!*\\\\ + !*** external \\"externals0\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.a) }); + +/***/ }), +/* 3 */ +/*!*****************************!*\\\\ + !*** external \\"externals1\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.a) }); + +/***/ }), +/* 4 */ +/*!*****************************!*\\\\ + !*** external \\"externals2\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"default\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals2__[\\"default\\"]) }); + +/***/ }), +/* 5 */ +/*!*****************************!*\\\\ + !*** external \\"externals3\\" ***! + \\\\*****************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_externals3__; + +/***/ }), +/* 6 */ +/*!*****************************!*\\\\ + !*** external \\"externals4\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ }); + +/***/ }), +/* 7 */ +/*!****************!*\\\\ + !*** ./lib.js ***! + \\\\****************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* binding */ HomeLayout) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); + + +const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!*****************!*\\\\ + !*** ./test.js ***! + \\\\*****************/ +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_5__.HomeLayout), +/* harmony export */ a: () => (/* reexport safe */ externals0__WEBPACK_IMPORTED_MODULE_0__.a) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); +/* harmony import */ var externals1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! externals1 */ 3); +/* harmony import */ var externals2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! externals2 */ 4); +/* harmony import */ var externals3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! externals3 */ 5); +/* harmony import */ var externals4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! externals4 */ 6); +/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib */ 7); +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +externals1__WEBPACK_IMPORTED_MODULE_1__.HomeLayout; +externals0__WEBPACK_IMPORTED_MODULE_0__.a; +externals1__WEBPACK_IMPORTED_MODULE_1__.a; +externals2__WEBPACK_IMPORTED_MODULE_2__[\\"default\\"]; +externals3__WEBPACK_IMPORTED_MODULE_3__; +})(); + +const __webpack_exports__HomeLayout = __webpack_exports__.HomeLayout; +const __webpack_exports__a = __webpack_exports__.a; +export { __webpack_exports__HomeLayout as HomeLayout, __webpack_exports__a as a }; +" +`; + +exports[`ConfigCacheTestCases library modern-module-named-import-externals modern-module-named-import-externals should pre-compile to fill disk cache (1st) 1`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE_externals0__ from \\"externals0\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals1__ from \\"externals1\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals2__ from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals4__ from \\"externals4\\"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */, +/* 2 */ +/*!*****************************!*\\\\ + !*** external \\"externals0\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.a) }); + +/***/ }), +/* 3 */ +/*!*****************************!*\\\\ + !*** external \\"externals1\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.a) }); + +/***/ }), +/* 4 */ +/*!*****************************!*\\\\ + !*** external \\"externals2\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"default\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals2__[\\"default\\"]) }); + +/***/ }), +/* 5 */ +/*!*****************************!*\\\\ + !*** external \\"externals3\\" ***! + \\\\*****************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_externals3__; + +/***/ }), +/* 6 */ +/*!*****************************!*\\\\ + !*** external \\"externals4\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ }); + +/***/ }), +/* 7 */ +/*!****************!*\\\\ + !*** ./lib.js ***! + \\\\****************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* binding */ HomeLayout) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); + + +const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!*****************!*\\\\ + !*** ./test.js ***! + \\\\*****************/ +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_5__.HomeLayout), +/* harmony export */ a: () => (/* reexport safe */ externals0__WEBPACK_IMPORTED_MODULE_0__.a) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); +/* harmony import */ var externals1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! externals1 */ 3); +/* harmony import */ var externals2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! externals2 */ 4); +/* harmony import */ var externals3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! externals3 */ 5); +/* harmony import */ var externals4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! externals4 */ 6); +/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib */ 7); +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +externals1__WEBPACK_IMPORTED_MODULE_1__.HomeLayout; +externals0__WEBPACK_IMPORTED_MODULE_0__.a; +externals1__WEBPACK_IMPORTED_MODULE_1__.a; +externals2__WEBPACK_IMPORTED_MODULE_2__[\\"default\\"]; +externals3__WEBPACK_IMPORTED_MODULE_3__; +})(); + +const __webpack_exports__HomeLayout = __webpack_exports__.HomeLayout; +const __webpack_exports__a = __webpack_exports__.a; +export { __webpack_exports__HomeLayout as HomeLayout, __webpack_exports__a as a }; +" +`; + +exports[`ConfigCacheTestCases library modern-module-named-import-externals modern-module-named-import-externals should pre-compile to fill disk cache (2nd) 1`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE_externals0__ from \\"externals0\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals1__ from \\"externals1\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals2__ from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals4__ from \\"externals4\\"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */, +/* 2 */ +/*!*****************************!*\\\\ + !*** external \\"externals0\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.a) }); + +/***/ }), +/* 3 */ +/*!*****************************!*\\\\ + !*** external \\"externals1\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.a) }); + +/***/ }), +/* 4 */ +/*!*****************************!*\\\\ + !*** external \\"externals2\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"default\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals2__[\\"default\\"]) }); + +/***/ }), +/* 5 */ +/*!*****************************!*\\\\ + !*** external \\"externals3\\" ***! + \\\\*****************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_externals3__; + +/***/ }), +/* 6 */ +/*!*****************************!*\\\\ + !*** external \\"externals4\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ }); + +/***/ }), +/* 7 */ +/*!****************!*\\\\ + !*** ./lib.js ***! + \\\\****************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* binding */ HomeLayout) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); + + +const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!*****************!*\\\\ + !*** ./test.js ***! + \\\\*****************/ +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_5__.HomeLayout), +/* harmony export */ a: () => (/* reexport safe */ externals0__WEBPACK_IMPORTED_MODULE_0__.a) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); +/* harmony import */ var externals1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! externals1 */ 3); +/* harmony import */ var externals2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! externals2 */ 4); +/* harmony import */ var externals3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! externals3 */ 5); +/* harmony import */ var externals4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! externals4 */ 6); +/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib */ 7); +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +externals1__WEBPACK_IMPORTED_MODULE_1__.HomeLayout; +externals0__WEBPACK_IMPORTED_MODULE_0__.a; +externals1__WEBPACK_IMPORTED_MODULE_1__.a; +externals2__WEBPACK_IMPORTED_MODULE_2__[\\"default\\"]; +externals3__WEBPACK_IMPORTED_MODULE_3__; +})(); + +const __webpack_exports__HomeLayout = __webpack_exports__.HomeLayout; +const __webpack_exports__a = __webpack_exports__.a; +export { __webpack_exports__HomeLayout as HomeLayout, __webpack_exports__a as a }; +" +`; diff --git a/test/configCases/library/modern-module-named-import-externals/__snapshots__/ConfigTest.snap b/test/configCases/library/modern-module-named-import-externals/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..1aba2ede05f --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/__snapshots__/ConfigTest.snap @@ -0,0 +1,206 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases library modern-module-named-import-externals modern-module-named-import-externals should compile 1`] = ` +"import * as __WEBPACK_EXTERNAL_MODULE_externals0__ from \\"externals0\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals1__ from \\"externals1\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals2__ from \\"externals2\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals3__ from \\"externals3\\"; +import * as __WEBPACK_EXTERNAL_MODULE_externals4__ from \\"externals4\\"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */, +/* 2 */ +/*!*****************************!*\\\\ + !*** external \\"externals0\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals0__.a) }); + +/***/ }), +/* 3 */ +/*!*****************************!*\\\\ + !*** external \\"externals1\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"HomeLayout\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.HomeLayout), [\\"a\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals1__.a) }); + +/***/ }), +/* 4 */ +/*!*****************************!*\\\\ + !*** external \\"externals2\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ [\\"default\\"]: () => (__WEBPACK_EXTERNAL_MODULE_externals2__[\\"default\\"]) }); + +/***/ }), +/* 5 */ +/*!*****************************!*\\\\ + !*** external \\"externals3\\" ***! + \\\\*****************************/ +/***/ ((module) => { + +module.exports = __WEBPACK_EXTERNAL_MODULE_externals3__; + +/***/ }), +/* 6 */ +/*!*****************************!*\\\\ + !*** external \\"externals4\\" ***! + \\\\*****************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var x = (y) => { + var x = {}; __webpack_require__.d(x, y); return x +} +var y = (x) => (() => (x)) +module.exports = x({ }); + +/***/ }), +/* 7 */ +/*!****************!*\\\\ + !*** ./lib.js ***! + \\\\****************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* binding */ HomeLayout) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); + + +const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = externals0__WEBPACK_IMPORTED_MODULE_0__.HomeLayout } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = \\"111\\" } = {} + console.log({ external_externals3_namespaceObject }); +} + + + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +/*!*****************!*\\\\ + !*** ./test.js ***! + \\\\*****************/ +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HomeLayout: () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_5__.HomeLayout), +/* harmony export */ a: () => (/* reexport safe */ externals0__WEBPACK_IMPORTED_MODULE_0__.a) +/* harmony export */ }); +/* harmony import */ var externals0__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! externals0 */ 2); +/* harmony import */ var externals1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! externals1 */ 3); +/* harmony import */ var externals2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! externals2 */ 4); +/* harmony import */ var externals3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! externals3 */ 5); +/* harmony import */ var externals4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! externals4 */ 6); +/* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib */ 7); +// re export + + +// named import +; + + +// default import + + +// namespace import + + +// side effect only import + + + + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +externals1__WEBPACK_IMPORTED_MODULE_1__.HomeLayout; +externals0__WEBPACK_IMPORTED_MODULE_0__.a; +externals1__WEBPACK_IMPORTED_MODULE_1__.a; +externals2__WEBPACK_IMPORTED_MODULE_2__[\\"default\\"]; +externals3__WEBPACK_IMPORTED_MODULE_3__; +})(); + +const __webpack_exports__HomeLayout = __webpack_exports__.HomeLayout; +const __webpack_exports__a = __webpack_exports__.a; +export { __webpack_exports__HomeLayout as HomeLayout, __webpack_exports__a as a }; +" +`; diff --git a/test/configCases/library/modern-module-named-import-externals/index.js b/test/configCases/library/modern-module-named-import-externals/index.js new file mode 100644 index 00000000000..f6e48fad94d --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/index.js @@ -0,0 +1,7 @@ + +it('should compile', () => {}); + +it('should handle external modules with concatenation and caching', () => { + // This test ensures serialization works with caching enabled + expect(true).toBe(true); +}); diff --git a/test/configCases/library/modern-module-named-import-externals/lib.js b/test/configCases/library/modern-module-named-import-externals/lib.js new file mode 100644 index 00000000000..650825e2bc7 --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/lib.js @@ -0,0 +1,21 @@ +import { HomeLayout as aaa } from 'externals0'; + +const { HomeLayout = aaa } = {}; +console.log({ HomeLayout }); +{ + const { HomeLayout = aaa } = {}; + console.log({ HomeLayout }); +} +(() => { + { + const { HomeLayout = aaa } = {}; + console.log({ HomeLayout }); + } +})() + +{ + const { external_externals3_namespaceObject = "111" } = {} + console.log({ external_externals3_namespaceObject }); +} + +export { HomeLayout } \ No newline at end of file diff --git a/test/configCases/library/modern-module-named-import-externals/test.config.js b/test/configCases/library/modern-module-named-import-externals/test.config.js new file mode 100644 index 00000000000..a8755bed92f --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.js"]; + } +}; diff --git a/test/configCases/library/modern-module-named-import-externals/test.js b/test/configCases/library/modern-module-named-import-externals/test.js new file mode 100644 index 00000000000..eddb63f953d --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/test.js @@ -0,0 +1,27 @@ +// re export +export { a } from 'externals0' + +// named import +import { a as a_2, HomeLayout as aaa } from 'externals1' +import { a as a_0 } from 'externals0' + +// default import +import defaultValue from 'externals2' + +// namespace import +import * as namespace from 'externals3' + +// side effect only import +import 'externals4' + +export { HomeLayout } from './lib' + +{ + const HomeLayout_0 = 'HomeLayout_0'; + HomeLayout_0; +} +aaa; +a_0; +a_2; +defaultValue; +namespace; \ No newline at end of file diff --git a/test/configCases/library/modern-module-named-import-externals/webpack.config.js b/test/configCases/library/modern-module-named-import-externals/webpack.config.js new file mode 100644 index 00000000000..5b088d90a24 --- /dev/null +++ b/test/configCases/library/modern-module-named-import-externals/webpack.config.js @@ -0,0 +1,56 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + cache: { + type: "memory" // Enable memory cache to test serialization + }, + mode: "none", + entry: { main: "./index.js", test: "./test.js" }, + output: { + module: true, + library: { + type: "modern-module" + }, + filename: "[name].js", + chunkFormat: "module" + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: [".js"] + }, + externalsType: "module", + externals: [ + "externals0", + "externals1", + "externals2", + "externals3", + "externals4" + ], + optimization: { + concatenateModules: false, + usedExports: true + }, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap( + "testcase", + ( + /** @type {import("../../../../types").Compilation} */ compilation + ) => { + compilation.hooks.afterProcessAssets.tap( + "testcase", + ( + /** @type {Record} */ assets + ) => { + const source = assets["test.js"].source(); + expect(source).toMatchSnapshot(); + } + ); + } + ); + } + ] +}; diff --git a/test/configCases/library/module-and-child-compilation/index.js b/test/configCases/library/module-and-child-compilation/index.js new file mode 100644 index 00000000000..5eb9146c960 --- /dev/null +++ b/test/configCases/library/module-and-child-compilation/index.js @@ -0,0 +1,5 @@ +import { myClass } from "./style.custom"; + +it("should work", function() { + expect(myClass).toBe("my-class"); +}); diff --git a/test/configCases/library/module-and-child-compilation/loader.js b/test/configCases/library/module-and-child-compilation/loader.js new file mode 100644 index 00000000000..7c8be71ef17 --- /dev/null +++ b/test/configCases/library/module-and-child-compilation/loader.js @@ -0,0 +1,97 @@ +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").Compilation} Compilation */ + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = async function loader() { + const callback = this.async(); + const loader = this; + const compilerName = `extract:${loader.resourcePath}`; + const compiler = /** @type {Compiler} */ (loader._compiler); + const compilation = /** @type {Compilation} */ (loader._compilation); + const filename = "*"; + const childCompiler = compilation.createChildCompiler( + compilerName, + { + filename, + }, + [] + ); + + const NodeTemplatePlugin = compiler.webpack.node.NodeTemplatePlugin; + new NodeTemplatePlugin().apply(childCompiler); + + const NodeTargetPlugin = compiler.webpack.node.NodeTargetPlugin; + new NodeTargetPlugin().apply(childCompiler); + + const { + EntryOptionPlugin, + library: { + EnableLibraryPlugin + } + } = compiler.webpack; + + new EnableLibraryPlugin('commonjs2').apply(childCompiler); + + EntryOptionPlugin.applyEntryOption(childCompiler, loader.context, { + child: { + library: { + type: 'commonjs2' + }, + import: [`!!${loader.resourcePath}`] + } + }); + + const LimitChunkCountPlugin = compiler.webpack.optimize.LimitChunkCountPlugin; + + new LimitChunkCountPlugin({ + maxChunks: 1 + }).apply(childCompiler); + + let source; + + childCompiler.hooks.compilation.tap(compilerName, compilation => { + compilation.hooks.processAssets.tap(compilerName, () => { + source = compilation.assets[filename] && compilation.assets[filename].source(); + + // Remove all chunk assets + compilation.chunks.forEach(chunk => { + chunk.files.forEach(file => { + compilation.deleteAsset(file); + }); + }); + }); + }); + + try { + await new Promise( + /** + * @param {(value?: void) => void} resolve resolve + * @param {(reason?: Error) => void} reject + */ + (resolve, reject) => { + childCompiler.runAsChild((err, _entries, _compilation) => { + if (err) { + return reject(err); + } + + const compilation = /** @type {Compilation} */ (_compilation); + + if (compilation.errors.length > 0) { + return reject(compilation.errors[0]); + } + + resolve(); + }); + }) + } catch (e) { + callback(/** @type {Error} */ (e)); + return; + } + + if (!source) { + callback(new Error("Didn't get a result from child compiler")); + return; + } + + callback(null, source); +} diff --git a/test/configCases/library/module-and-child-compilation/style.custom b/test/configCases/library/module-and-child-compilation/style.custom new file mode 100644 index 00000000000..158ac9adb4a --- /dev/null +++ b/test/configCases/library/module-and-child-compilation/style.custom @@ -0,0 +1,2 @@ +import style from "./test.mjs"; +export const myClass = style("my-class"); diff --git a/test/configCases/library/module-and-child-compilation/test.mjs b/test/configCases/library/module-and-child-compilation/test.mjs new file mode 100644 index 00000000000..f322128552c --- /dev/null +++ b/test/configCases/library/module-and-child-compilation/test.mjs @@ -0,0 +1,3 @@ +export default function(name) { + return name; +} diff --git a/test/configCases/library/module-and-child-compilation/webpack.config.js b/test/configCases/library/module-and-child-compilation/webpack.config.js new file mode 100644 index 00000000000..b431c353a22 --- /dev/null +++ b/test/configCases/library/module-and-child-compilation/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + target: "web", + output: { + module: true, + library: { + type: "module" + } + }, + module: { + strictExportPresence: true, + rules: [ + { + test: /\.custom$/i, + loader: require.resolve("./loader") + } + ] + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/library/module-external-array-request/external.mjs b/test/configCases/library/module-external-array-request/external.mjs new file mode 100644 index 00000000000..397fba07069 --- /dev/null +++ b/test/configCases/library/module-external-array-request/external.mjs @@ -0,0 +1,4 @@ +export const inner = { + foo: "foo", + bar: "bar" +}; diff --git a/test/configCases/library/module-external-array-request/index.js b/test/configCases/library/module-external-array-request/index.js new file mode 100644 index 00000000000..6c77c3713d2 --- /dev/null +++ b/test/configCases/library/module-external-array-request/index.js @@ -0,0 +1,6 @@ +import { foo, bar } from "external"; + +it("should have the correct export for array-style external request (e.g. external: ['./external.mjs', 'inner'])", function () { + expect(foo).toBe("foo"); + expect(bar).toBe("bar"); +}); diff --git a/test/configCases/library/module-external-array-request/webpack.config.js b/test/configCases/library/module-external-array-request/webpack.config.js new file mode 100644 index 00000000000..f7f8ceb6155 --- /dev/null +++ b/test/configCases/library/module-external-array-request/webpack.config.js @@ -0,0 +1,48 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {webpack.Configuration} */ +module.exports = { + mode: "production", + entry: "./index.js", + output: { + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + }, + externals: { + external: ["./external.mjs", "inner"] + }, + externalsType: "module", + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const data = fs.readFileSync( + path.resolve(__dirname, "./external.mjs") + ); + compilation.emitAsset( + "external.mjs", + new webpack.sources.RawSource(data) + ); + } + ); + }); + } + } + ] +}; diff --git a/test/configCases/library/module-external-multi-entry/cjs-concat.js b/test/configCases/library/module-external-multi-entry/cjs-concat.js new file mode 100644 index 00000000000..21d9a573715 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/cjs-concat.js @@ -0,0 +1 @@ +module.exports = require("./foo1").foo; diff --git a/test/configCases/library/module-external-multi-entry/concat1.js b/test/configCases/library/module-external-multi-entry/concat1.js new file mode 100644 index 00000000000..1e8e82efbb9 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/concat1.js @@ -0,0 +1,5 @@ +import { a as concat2_a, b as concat2_b, c as concat2_c } from "./concat2"; + +export const a = "concat1~" + concat2_a; +export const b = "concat1~" + concat2_b; +export const c = "concat1~" + concat2_c; diff --git a/test/configCases/library/module-external-multi-entry/concat2.js b/test/configCases/library/module-external-multi-entry/concat2.js new file mode 100644 index 00000000000..6fbc3bf2071 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/concat2.js @@ -0,0 +1,5 @@ +import { a as external_a, b as external_b, c as external_c } from "external"; + +export const a = "concat2~" + external_a; +export const b = "concat2~" + external_b; +export const c = "concat2~" + external_c; diff --git a/test/configCases/library/module-external-multi-entry/entry1.js b/test/configCases/library/module-external-multi-entry/entry1.js new file mode 100644 index 00000000000..26840335b43 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/entry1.js @@ -0,0 +1,12 @@ +// This concat module has size `4` +import { a, b, c } from "./concat1"; + +// Create one shared concat module that exist in multiple chunks +import cjs from "./cjs-concat"; + +it("should generate correct specifier pointed to import binding / 1", function () { + expect(a).toBe("concat1~concat2~external-a"); + expect(b).toBe("concat1~concat2~external-b"); + expect(c).toBe("concat1~concat2~external-c"); + expect(cjs).toBe("foo1~foo2~foo3~foo4"); +}); diff --git a/test/configCases/library/module-external-multi-entry/entry2.js b/test/configCases/library/module-external-multi-entry/entry2.js new file mode 100644 index 00000000000..17aface5479 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/entry2.js @@ -0,0 +1,12 @@ +// This concat module has size `3` +import { a, b, c } from "./concat2"; + +// Create one shared concat module that exist in multiple chunks +import cjs from "./cjs-concat"; + +it("should generate correct specifier pointed to import binding / 2", function () { + expect(a).toBe("concat2~external-a"); + expect(b).toBe("concat2~external-b"); + expect(c).toBe("concat2~external-c"); + expect(cjs).toBe("foo1~foo2~foo3~foo4"); +}); diff --git a/test/configCases/library/module-external-multi-entry/external.mjs b/test/configCases/library/module-external-multi-entry/external.mjs new file mode 100644 index 00000000000..aa2a1ba3bce --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/external.mjs @@ -0,0 +1,3 @@ +export const a = "external-a" +export const b = "external-b" +export const c = "external-c" diff --git a/test/configCases/library/module-external-multi-entry/foo1.js b/test/configCases/library/module-external-multi-entry/foo1.js new file mode 100644 index 00000000000..40030d782f2 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/foo1.js @@ -0,0 +1,4 @@ +// This concat module has size `4` +import foo2 from "./foo2"; + +export const foo = "foo1~" + foo2; diff --git a/test/configCases/library/module-external-multi-entry/foo2.js b/test/configCases/library/module-external-multi-entry/foo2.js new file mode 100644 index 00000000000..a5bde838296 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/foo2.js @@ -0,0 +1,3 @@ +import foo3 from "./foo3"; + +export default "foo2~" + foo3; diff --git a/test/configCases/library/module-external-multi-entry/foo3.js b/test/configCases/library/module-external-multi-entry/foo3.js new file mode 100644 index 00000000000..45493542898 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/foo3.js @@ -0,0 +1,3 @@ +import foo4 from "./foo4"; + +export default "foo3~" + foo4; diff --git a/test/configCases/library/module-external-multi-entry/foo4.js b/test/configCases/library/module-external-multi-entry/foo4.js new file mode 100644 index 00000000000..312851883b1 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/foo4.js @@ -0,0 +1 @@ +export default "foo4" diff --git a/test/configCases/library/module-external-multi-entry/test.config.js b/test/configCases/library/module-external-multi-entry/test.config.js new file mode 100644 index 00000000000..a8cad9f51b9 --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry1.mjs", "entry2.mjs"]; + } +}; diff --git a/test/configCases/library/module-external-multi-entry/webpack.config.js b/test/configCases/library/module-external-multi-entry/webpack.config.js new file mode 100644 index 00000000000..77d240a3eab --- /dev/null +++ b/test/configCases/library/module-external-multi-entry/webpack.config.js @@ -0,0 +1,53 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {webpack.Configuration} */ +module.exports = { + mode: "production", + entry: { entry1: "./entry1.js", entry2: "./entry2.js" }, + output: { + module: true, + library: { + type: "module" + }, + filename: "[name].mjs" + }, + experiments: { + outputModule: true + }, + externals: { + external: "./external.mjs" + }, + externalsType: "module", + optimization: { + concatenateModules: true, + usedExports: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const data = fs.readFileSync( + path.resolve(__dirname, "./external.mjs") + ); + compilation.emitAsset( + "external.mjs", + new webpack.sources.RawSource(data) + ); + } + ); + }); + } + } + ] +}; diff --git a/test/configCases/library/module-multi-runtime/bar.js b/test/configCases/library/module-multi-runtime/bar.js new file mode 100644 index 00000000000..5883f9f25fa --- /dev/null +++ b/test/configCases/library/module-multi-runtime/bar.js @@ -0,0 +1,3 @@ +export * from "./baz" + +export const bar = "bar" diff --git a/test/configCases/library/module-multi-runtime/baz.js b/test/configCases/library/module-multi-runtime/baz.js new file mode 100644 index 00000000000..7752edac3e3 --- /dev/null +++ b/test/configCases/library/module-multi-runtime/baz.js @@ -0,0 +1 @@ +export const baz = "baz" diff --git a/test/configCases/library/module-multi-runtime/cjs-concat.js b/test/configCases/library/module-multi-runtime/cjs-concat.js new file mode 100644 index 00000000000..f3deb31e633 --- /dev/null +++ b/test/configCases/library/module-multi-runtime/cjs-concat.js @@ -0,0 +1 @@ +module.exports = require("./concat"); diff --git a/test/configCases/library/module-multi-runtime/concat.js b/test/configCases/library/module-multi-runtime/concat.js new file mode 100644 index 00000000000..aa975045659 --- /dev/null +++ b/test/configCases/library/module-multi-runtime/concat.js @@ -0,0 +1,6 @@ +import concat2 from "./concat2"; + +export const baz = "baz"; +export const foo = "foo"; +export const bar = "bar"; +export const concat = "concat~" + concat2; diff --git a/test/configCases/library/module-multi-runtime/concat2.js b/test/configCases/library/module-multi-runtime/concat2.js new file mode 100644 index 00000000000..2866ae9cfeb --- /dev/null +++ b/test/configCases/library/module-multi-runtime/concat2.js @@ -0,0 +1 @@ +export default "concat2"; diff --git a/test/configCases/library/module-multi-runtime/entry1.js b/test/configCases/library/module-multi-runtime/entry1.js new file mode 100644 index 00000000000..c3632395d89 --- /dev/null +++ b/test/configCases/library/module-multi-runtime/entry1.js @@ -0,0 +1,5 @@ +import { foo } from "./cjs-concat"; + +it("should generate correct export definition / 1", function () { + expect(foo).toBe("foo") +}); diff --git a/test/configCases/library/module-multi-runtime/entry2.js b/test/configCases/library/module-multi-runtime/entry2.js new file mode 100644 index 00000000000..64fc0957edf --- /dev/null +++ b/test/configCases/library/module-multi-runtime/entry2.js @@ -0,0 +1,5 @@ +import { bar } from "./cjs-concat"; + +it("should generate correct export definition / 2", function () { + expect(bar).toBe("bar") +}); diff --git a/test/configCases/library/module-multi-runtime/entry3.js b/test/configCases/library/module-multi-runtime/entry3.js new file mode 100644 index 00000000000..f79dd0ee3fa --- /dev/null +++ b/test/configCases/library/module-multi-runtime/entry3.js @@ -0,0 +1,6 @@ +import { baz, concat } from "./cjs-concat"; + +it("should generate correct export definition / 3", function () { + expect(baz).toBe("baz"); + expect(concat).toBe("concat~concat2"); +}); diff --git a/test/configCases/library/module-multi-runtime/test.config.js b/test/configCases/library/module-multi-runtime/test.config.js new file mode 100644 index 00000000000..ce71380a0ac --- /dev/null +++ b/test/configCases/library/module-multi-runtime/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry1.mjs", "entry2.mjs", "entry3.mjs"]; + } +}; diff --git a/test/configCases/library/module-multi-runtime/webpack.config.js b/test/configCases/library/module-multi-runtime/webpack.config.js new file mode 100644 index 00000000000..dcf54506242 --- /dev/null +++ b/test/configCases/library/module-multi-runtime/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + entry: { + entry1: "./entry1.js", + entry2: "./entry2.js", + entry3: "./entry3.js" + }, + output: { + module: true, + library: { + type: "module" + }, + filename: "[name].mjs" + }, + experiments: { + outputModule: true + }, + externalsType: "module", + optimization: { + concatenateModules: true, + usedExports: true + } +}; diff --git a/test/configCases/library/module-named-import-externals/index.js b/test/configCases/library/module-named-import-externals/index.js new file mode 100644 index 00000000000..1591321edf2 --- /dev/null +++ b/test/configCases/library/module-named-import-externals/index.js @@ -0,0 +1,23 @@ +import { readFileSync, writeFileSync as aaa } from 'fs' +import * as path from 'path' +import * as fs from 'fs' + +function doNothing(obj) {} + +const { writeFileSync = aaa } = {} +doNothing({ writeFileSync }); + + +{ + const { writeFileSync = aaa } = {} + doNothing({ writeFileSync }); +} + +it('should handle external modules with concatenation and caching', () => { + expect(typeof readFileSync).toBe('function'); + const { writeFileSync = aaa } = {} + expect(typeof writeFileSync).toBe('function'); + expect(typeof path.join).toBe('function'); +}); + +export { readFileSync, writeFileSync, path, fs } diff --git a/test/configCases/library/module-named-import-externals/test.config.js b/test/configCases/library/module-named-import-externals/test.config.js new file mode 100644 index 00000000000..9100dc59963 --- /dev/null +++ b/test/configCases/library/module-named-import-externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.mjs"]; + } +}; diff --git a/test/configCases/library/module-named-import-externals/webpack.config.js b/test/configCases/library/module-named-import-externals/webpack.config.js new file mode 100644 index 00000000000..78ca1e13e7a --- /dev/null +++ b/test/configCases/library/module-named-import-externals/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + entry: { main: "./index.js" }, + output: { + module: true, + library: { + type: "module" + }, + filename: "[name].mjs", + chunkFormat: "module" + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: [".js"] + }, + externals: ["fs", "path"], + externalsType: "module", + optimization: { + concatenateModules: true, + usedExports: true + } +}; diff --git a/test/configCases/library/module-reexport-external/index.js b/test/configCases/library/module-reexport-external/index.js new file mode 100644 index 00000000000..234539f635d --- /dev/null +++ b/test/configCases/library/module-reexport-external/index.js @@ -0,0 +1 @@ +it('should compile', () => {}) diff --git a/test/configCases/library/module-reexport-external/test.config.js b/test/configCases/library/module-reexport-external/test.config.js new file mode 100644 index 00000000000..a8755bed92f --- /dev/null +++ b/test/configCases/library/module-reexport-external/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.js"]; + } +}; diff --git a/test/configCases/library/module-reexport-external/test.js b/test/configCases/library/module-reexport-external/test.js new file mode 100644 index 00000000000..6a23056a3eb --- /dev/null +++ b/test/configCases/library/module-reexport-external/test.js @@ -0,0 +1 @@ +export { value } from 'external0' diff --git a/test/configCases/library/module-reexport-external/webpack.config.js b/test/configCases/library/module-reexport-external/webpack.config.js new file mode 100644 index 00000000000..80bef527495 --- /dev/null +++ b/test/configCases/library/module-reexport-external/webpack.config.js @@ -0,0 +1,42 @@ +"use strict"; + +/** @typedef {import("../../../../").Compilation} Compilation */ + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + mode: "none", + entry: { main: "./index.js", test: "./test" }, + output: { + module: true, + library: { + type: "module" + }, + filename: "[name].js", + chunkFormat: "module" + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: [".js"] + }, + externalsType: "module", + externals: ["external0"], + optimization: { + concatenateModules: true + }, + plugins: [ + function apply() { + /** + * @param {Compilation} compilation compilation + */ + const handler = (compilation) => { + compilation.hooks.afterProcessAssets.tap("testcase", (assets) => { + const source = assets["test.js"].source(); + expect(source).toContain("export const value"); + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] +}; diff --git a/test/configCases/library/module-reexport-type/export.ts b/test/configCases/library/module-reexport-type/export.ts new file mode 100644 index 00000000000..cf4f7c76069 --- /dev/null +++ b/test/configCases/library/module-reexport-type/export.ts @@ -0,0 +1,2 @@ +export type T = unknown +export const value = 1 diff --git a/test/configCases/library/module-reexport-type/file.png b/test/configCases/library/module-reexport-type/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/library/module-reexport-type/file.png differ diff --git a/test/configCases/library/module-reexport-type/global.d.ts b/test/configCases/library/module-reexport-type/global.d.ts new file mode 100644 index 00000000000..a6ec0b37e54 --- /dev/null +++ b/test/configCases/library/module-reexport-type/global.d.ts @@ -0,0 +1,4 @@ +declare module "*.png" { + const value: string; + export default value; +} diff --git a/test/configCases/library/module-reexport-type/index.ts b/test/configCases/library/module-reexport-type/index.ts new file mode 100644 index 00000000000..455367e0775 --- /dev/null +++ b/test/configCases/library/module-reexport-type/index.ts @@ -0,0 +1,15 @@ +import { value, T } from './re-export' +import logo from './file.png'; + +type MyType = string; + +export { logo, value, T, MyType } + +it("should not reexport type", function () { + expect(value).toBe(1) +}); + +type OtherMyType = string; + +export type { OtherMyType } +export default MyType; diff --git a/test/configCases/library/module-reexport-type/re-export.ts b/test/configCases/library/module-reexport-type/re-export.ts new file mode 100644 index 00000000000..dfbc7a6a69a --- /dev/null +++ b/test/configCases/library/module-reexport-type/re-export.ts @@ -0,0 +1 @@ +export * from './export' diff --git a/test/configCases/library/module-reexport-type/test.filter.js b/test/configCases/library/module-reexport-type/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/configCases/library/module-reexport-type/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/configCases/library/module-reexport-type/tsconfig.json b/test/configCases/library/module-reexport-type/tsconfig.json new file mode 100644 index 00000000000..c2bf04fb9f3 --- /dev/null +++ b/test/configCases/library/module-reexport-type/tsconfig.json @@ -0,0 +1,6 @@ +// emit to esm module +{ + "compilerOptions": { + "target": "ES2015", + } +} diff --git a/test/configCases/library/module-reexport-type/webpack.config.js b/test/configCases/library/module-reexport-type/webpack.config.js new file mode 100644 index 00000000000..3d1d555d30d --- /dev/null +++ b/test/configCases/library/module-reexport-type/webpack.config.js @@ -0,0 +1,65 @@ +"use strict"; + +/** @typedef {import("../../../../").Compilation} Compilation */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + entry: { main: "./index.ts" }, + ignoreWarnings: [ + (warning) => { + // when using swc-loader or `transpileOnly: true` with ts-loader, the warning is expected + expect(warning.message).toContain( + "export 'T' (reexported as 'T') was not found in './re-export' (possible exports: value)" + ); + return true; + } + ], + output: { + module: true, + library: { + type: "module" + }, + chunkFormat: "module" + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: [".ts"] + }, + optimization: { + concatenateModules: true + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { + transpileOnly: true + } + }, + { + type: "asset/inline", + test: /\.png$/ + } + ] + }, + plugins: [ + function apply() { + /** + * @param {Compilation} compilation compilation + */ + const handler = (compilation) => { + compilation.hooks.afterProcessAssets.tap("testcase", (assets) => { + const source = assets["bundle0.mjs"].source(); + expect(source).toContain( + "export { file_namespaceObject as logo, value };" + ); + }); + }; + this.hooks.compilation.tap("testcase", handler); + } + ] +}; diff --git a/test/configCases/library/module-terminal-binding/async-module.js b/test/configCases/library/module-terminal-binding/async-module.js new file mode 100644 index 00000000000..e1f714cff9e --- /dev/null +++ b/test/configCases/library/module-terminal-binding/async-module.js @@ -0,0 +1,10 @@ +import { FluentProvider } from './module.js'; + +function test(value) { + return value; +} + +test(FluentProvider); + +export const value = "value"; +export { FluentProvider }; diff --git a/test/configCases/library/module-terminal-binding/index.js b/test/configCases/library/module-terminal-binding/index.js new file mode 100644 index 00000000000..2b4296e1600 --- /dev/null +++ b/test/configCases/library/module-terminal-binding/index.js @@ -0,0 +1,23 @@ +import { FluentProvider } from './module.js'; + +export { + FluentProvider, + myFunction, +} from './module.js'; + + +export async function component() { + const { value } = await import(/* webpackChunkName: "async-module" */ './async-module.js'); + + return value; +} + +const qT = "qT"; + +it("should work", async function() { + const value = await component(); + + expect(qT).toBe("qT"); + expect(value).toBe("value"); + expect(FluentProvider()).toBe("FluentProvider"); +}); diff --git a/test/configCases/library/module-terminal-binding/module.js b/test/configCases/library/module-terminal-binding/module.js new file mode 100644 index 00000000000..0c4804d4cc0 --- /dev/null +++ b/test/configCases/library/module-terminal-binding/module.js @@ -0,0 +1,3 @@ +export { FluentProvider } from './other.module2.js'; + +export const myFunction = function () {}; diff --git a/test/configCases/library/module-terminal-binding/node_modules/my-pkg/components/FluentProvider/index.js b/test/configCases/library/module-terminal-binding/node_modules/my-pkg/components/FluentProvider/index.js new file mode 100644 index 00000000000..ecee617e303 --- /dev/null +++ b/test/configCases/library/module-terminal-binding/node_modules/my-pkg/components/FluentProvider/index.js @@ -0,0 +1,5 @@ +export const FluentProvider = function FluentProvider() { + return "FluentProvider" +}; + +FluentProvider.displayName = 'FluentProvider'; diff --git a/test/configCases/library/module-terminal-binding/node_modules/my-pkg/index.js b/test/configCases/library/module-terminal-binding/node_modules/my-pkg/index.js new file mode 100644 index 00000000000..66431c1a1ec --- /dev/null +++ b/test/configCases/library/module-terminal-binding/node_modules/my-pkg/index.js @@ -0,0 +1 @@ +export { FluentProvider } from './components/FluentProvider/index.js'; diff --git a/test/configCases/library/module-terminal-binding/node_modules/my-pkg/package.json b/test/configCases/library/module-terminal-binding/node_modules/my-pkg/package.json new file mode 100644 index 00000000000..67a48be6457 --- /dev/null +++ b/test/configCases/library/module-terminal-binding/node_modules/my-pkg/package.json @@ -0,0 +1,16 @@ +{ + "name": "my-pkg", + "version": "1.0.0", + "description": "Description", + "main": "./index.js", + "module": "./index.js", + "sideEffects": false, + "license": "MIT", + "exports": { + ".": { + "import": "./index.js", + "default": "./index.js" + }, + "./package.json": "./package.json" + } +} diff --git a/test/configCases/library/module-terminal-binding/other.module2.js b/test/configCases/library/module-terminal-binding/other.module2.js new file mode 100644 index 00000000000..f26044b7132 --- /dev/null +++ b/test/configCases/library/module-terminal-binding/other.module2.js @@ -0,0 +1 @@ +export { FluentProvider } from 'my-pkg'; diff --git a/test/configCases/library/module-terminal-binding/webpack.config.js b/test/configCases/library/module-terminal-binding/webpack.config.js new file mode 100644 index 00000000000..464be000415 --- /dev/null +++ b/test/configCases/library/module-terminal-binding/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +module.exports = { + mode: "production", + target: "web", + optimization: { + minimize: false + }, + experiments: { + outputModule: true + }, + output: { + library: { + type: "module" + }, + module: true + } +}; diff --git a/test/configCases/library/module-useless-export-requirement/concat.js b/test/configCases/library/module-useless-export-requirement/concat.js new file mode 100644 index 00000000000..528d28478f4 --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/concat.js @@ -0,0 +1 @@ +export default "concat" diff --git a/test/configCases/library/module-useless-export-requirement/entry1.js b/test/configCases/library/module-useless-export-requirement/entry1.js new file mode 100644 index 00000000000..2b3bb3d3694 --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/entry1.js @@ -0,0 +1,18 @@ +const getFile = () => { + const fs = __non_webpack_require__("fs"); + return fs.readFileSync(__filename, "utf-8"); +}; + +const RuntimeGlobals_Exports = "__webpack_exports__"; +const reg = new RegExp("var\\s" + RuntimeGlobals_Exports + "\\s="); + +it("should compile and run", () => { + const content = getFile(); + // When CJS (self reference) bundle to esm, entry module won't be inlined, + // also `__webpack_exports__` should be rendered because we will generate default export of `__webpack_exports__` + expect(content).toMatch(reg); +}); + +module.exports = { + name: "foo" +}; diff --git a/test/configCases/library/module-useless-export-requirement/entry2.js b/test/configCases/library/module-useless-export-requirement/entry2.js new file mode 100644 index 00000000000..5947849a312 --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/entry2.js @@ -0,0 +1,24 @@ +import concat from "./concat"; + +const getFile = () => { + const fs = __non_webpack_require__("fs"); + return fs.readFileSync(__filename, "utf-8"); +}; + +const RuntimeGlobals_Exports = "__webpack_exports__"; +const reg = new RegExp("var\\s" + RuntimeGlobals_Exports + "\\s="); +const isNoConcat = /-no-concat\.mjs$/.test(__filename); + +it("should compile and run", () => { + const content = getFile(); + expect(concat).toBe("concat"); + + if (isNoConcat) { + expect(content).toMatch(reg); + } else { + expect(content).not.toMatch(reg); + } +}); + +export { concat }; +export default "foo"; diff --git a/test/configCases/library/module-useless-export-requirement/entry3.js b/test/configCases/library/module-useless-export-requirement/entry3.js new file mode 100644 index 00000000000..5947849a312 --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/entry3.js @@ -0,0 +1,24 @@ +import concat from "./concat"; + +const getFile = () => { + const fs = __non_webpack_require__("fs"); + return fs.readFileSync(__filename, "utf-8"); +}; + +const RuntimeGlobals_Exports = "__webpack_exports__"; +const reg = new RegExp("var\\s" + RuntimeGlobals_Exports + "\\s="); +const isNoConcat = /-no-concat\.mjs$/.test(__filename); + +it("should compile and run", () => { + const content = getFile(); + expect(concat).toBe("concat"); + + if (isNoConcat) { + expect(content).toMatch(reg); + } else { + expect(content).not.toMatch(reg); + } +}); + +export { concat }; +export default "foo"; diff --git a/test/configCases/library/module-useless-export-requirement/test.config.js b/test/configCases/library/module-useless-export-requirement/test.config.js new file mode 100644 index 00000000000..a8a4477fb0d --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(_i, options) { + return `./${Object.keys(options.entry)[0]}.mjs`; + } +}; diff --git a/test/configCases/library/module-useless-export-requirement/test.filter.js b/test/configCases/library/module-useless-export-requirement/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/library/module-useless-export-requirement/webpack.config.js b/test/configCases/library/module-useless-export-requirement/webpack.config.js new file mode 100644 index 00000000000..6989f987fa4 --- /dev/null +++ b/test/configCases/library/module-useless-export-requirement/webpack.config.js @@ -0,0 +1,68 @@ +"use strict"; + +/** @typedef {import("../../../../").Configuration} Configuration */ + +/** @type {Configuration} */ +const common = { + mode: "production", + output: { + module: true, + filename: "[name].mjs", + library: { + type: "module" + }, + chunkFormat: "module" + }, + experiments: { + outputModule: true + } +}; + +/** @type {Configuration[]} */ +const configs = [ + { + name: "entry1", + entry: "./entry1.js" + }, + { + name: "entry2", + entry: "./entry2.js" + }, + { + name: "entry3", + entry: "./entry3.js", + optimization: { + avoidEntryIife: false + } + } +]; + +module.exports = configs.reduce( + /** @type {(result: EXPECTED_ANY, config: EXPECTED_ANY) => Configuration[]} */ ( + result, + { name, entry, optimization } + ) => { + result.push({ + ...common, + optimization: { + ...optimization, + concatenateModules: true + }, + entry: { + [`${name}-concat`]: entry + } + }); + result.push({ + ...common, + optimization: { + ...optimization, + concatenateModules: false + }, + entry: { + [`${name}-no-concat`]: entry + } + }); + return result; + }, + [] +); diff --git a/test/configCases/library/multi-concatenate-modules-named-import-externals/cjs.js b/test/configCases/library/multi-concatenate-modules-named-import-externals/cjs.js new file mode 100644 index 00000000000..6488abdb81c --- /dev/null +++ b/test/configCases/library/multi-concatenate-modules-named-import-externals/cjs.js @@ -0,0 +1,2 @@ +require('./other-entry.js') + diff --git a/test/configCases/library/multi-concatenate-modules-named-import-externals/index.js b/test/configCases/library/multi-concatenate-modules-named-import-externals/index.js new file mode 100644 index 00000000000..52d5ddc9e37 --- /dev/null +++ b/test/configCases/library/multi-concatenate-modules-named-import-externals/index.js @@ -0,0 +1,6 @@ +import { readFile } from 'externals-1/foo' +import './cjs' + +it('should not optimize external modules in different concatenation scope', () => { + expect(readFile).toBeDefined() +}) \ No newline at end of file diff --git a/test/configCases/library/multi-concatenate-modules-named-import-externals/other-entry.js b/test/configCases/library/multi-concatenate-modules-named-import-externals/other-entry.js new file mode 100644 index 00000000000..f953f8cd771 --- /dev/null +++ b/test/configCases/library/multi-concatenate-modules-named-import-externals/other-entry.js @@ -0,0 +1,5 @@ +import { readFile } from 'externals-2/foo' + +it('should not optimize external modules in different concatenation scope', () => { + expect(readFile).toBeDefined() +}) \ No newline at end of file diff --git a/test/configCases/library/multi-concatenate-modules-named-import-externals/test.config.js b/test/configCases/library/multi-concatenate-modules-named-import-externals/test.config.js new file mode 100644 index 00000000000..9100dc59963 --- /dev/null +++ b/test/configCases/library/multi-concatenate-modules-named-import-externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.mjs"]; + } +}; diff --git a/test/configCases/library/multi-concatenate-modules-named-import-externals/webpack.config.js b/test/configCases/library/multi-concatenate-modules-named-import-externals/webpack.config.js new file mode 100644 index 00000000000..71e2c350e34 --- /dev/null +++ b/test/configCases/library/multi-concatenate-modules-named-import-externals/webpack.config.js @@ -0,0 +1,34 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + cache: { + type: "memory" // Enable memory cache to test serialization + }, + target: "node", + mode: "none", + entry: { main: "./index.js", test: "./other-entry.js" }, + output: { + module: true, + library: { + type: "modern-module" + }, + filename: "[name].mjs", + chunkFormat: "module" + }, + experiments: { + outputModule: true + }, + resolve: { + extensions: [".js"] + }, + externalsType: "module", + externals: { + "externals-1/foo": "fs", + "externals-2/foo": "fs-extra" + }, + optimization: { + concatenateModules: true, + usedExports: true + } +}; diff --git a/test/configCases/library/render-order-issue/__snapshots__/ConfigCacheTest.snap b/test/configCases/library/render-order-issue/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..2eda4b8e7cc --- /dev/null +++ b/test/configCases/library/render-order-issue/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,453 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases library render-order-issue render-order-issue should compile 1`] = ` +"import { v as __WEBPACK_EXTERNAL_MODULE_externals0_v__ } from \\"externals0\\"; +import { v as __WEBPACK_EXTERNAL_MODULE_externals1_v__ } from \\"externals1\\"; +/******/ var __webpack_modules__ = ({ + +/***/ \\"./bar.js\\" +/*!****************************!*\\\\ + !*** ./bar.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals0\\" + +;// ./bar.js + +__WEBPACK_EXTERNAL_MODULE_externals0_v__; + +/***/ }, + +/***/ \\"./entry.js\\" +/*!******************!*\\\\ + !*** ./entry.js ***! + \\\\******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports.entry1 = __webpack_require__(/*! ./entry1.js */ \\"./entry1.js\\") +module.exports.entry2 = __webpack_require__(/*! ./entry2.js */ \\"./entry2.js\\") + +/***/ }, + +/***/ \\"./entry1.js\\" +/*!*******************!*\\\\ + !*** ./entry1.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./foo */ \\"./foo.js\\") +module.exports.name = \\"entry1\\" + +/***/ }, + +/***/ \\"./entry2.js\\" +/*!*******************!*\\\\ + !*** ./entry2.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./bar */ \\"./bar.js\\") +module.exports.name = \\"entry2\\" + +/***/ }, + +/***/ \\"./foo.js\\" +/*!****************************!*\\\\ + !*** ./foo.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals1\\" + +;// ./foo.js + +__WEBPACK_EXTERNAL_MODULE_externals1_v__; + +/***/ } + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(\\"./entry.js\\"); +/******/ const __webpack_exports__entry1 = __webpack_exports__.entry1; +/******/ const __webpack_exports__entry2 = __webpack_exports__.entry2; +/******/ export { __webpack_exports__entry1 as entry1, __webpack_exports__entry2 as entry2, __webpack_exports__ as default }; +/******/ +" +`; + +exports[`ConfigCacheTestCases library render-order-issue render-order-issue should compile 2`] = ` +"import { v as __WEBPACK_EXTERNAL_MODULE_externals0_v__ } from \\"externals0\\"; +import { v as __WEBPACK_EXTERNAL_MODULE_externals1_v__ } from \\"externals1\\"; +/******/ var __webpack_modules__ = ({ + +/***/ \\"./bar.js\\" +/*!****************************!*\\\\ + !*** ./bar.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals0\\" + +;// ./bar.js + +__WEBPACK_EXTERNAL_MODULE_externals0_v__; + +/***/ }, + +/***/ \\"./entry.js\\" +/*!******************!*\\\\ + !*** ./entry.js ***! + \\\\******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports.entry1 = __webpack_require__(/*! ./entry1.js */ \\"./entry1.js\\") +module.exports.entry2 = __webpack_require__(/*! ./entry2.js */ \\"./entry2.js\\") + +/***/ }, + +/***/ \\"./entry1.js\\" +/*!*******************!*\\\\ + !*** ./entry1.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./foo */ \\"./foo.js\\") +module.exports.name = \\"entry1\\" + +/***/ }, + +/***/ \\"./entry2.js\\" +/*!*******************!*\\\\ + !*** ./entry2.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./bar */ \\"./bar.js\\") +module.exports.name = \\"entry2\\" + +/***/ }, + +/***/ \\"./foo.js\\" +/*!****************************!*\\\\ + !*** ./foo.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals1\\" + +;// ./foo.js + +__WEBPACK_EXTERNAL_MODULE_externals1_v__; + +/***/ } + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(\\"./entry.js\\"); +/******/ const __webpack_exports__entry1 = __webpack_exports__.entry1; +/******/ const __webpack_exports__entry2 = __webpack_exports__.entry2; +/******/ export { __webpack_exports__entry1 as entry1, __webpack_exports__entry2 as entry2, __webpack_exports__ as default }; +/******/ +" +`; + +exports[`ConfigCacheTestCases library render-order-issue render-order-issue should pre-compile to fill disk cache (1st) 1`] = ` +"import { v as __WEBPACK_EXTERNAL_MODULE_externals0_v__ } from \\"externals0\\"; +import { v as __WEBPACK_EXTERNAL_MODULE_externals1_v__ } from \\"externals1\\"; +/******/ var __webpack_modules__ = ({ + +/***/ \\"./bar.js\\" +/*!****************************!*\\\\ + !*** ./bar.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals0\\" + +;// ./bar.js + +__WEBPACK_EXTERNAL_MODULE_externals0_v__; + +/***/ }, + +/***/ \\"./entry.js\\" +/*!******************!*\\\\ + !*** ./entry.js ***! + \\\\******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports.entry1 = __webpack_require__(/*! ./entry1.js */ \\"./entry1.js\\") +module.exports.entry2 = __webpack_require__(/*! ./entry2.js */ \\"./entry2.js\\") + +/***/ }, + +/***/ \\"./entry1.js\\" +/*!*******************!*\\\\ + !*** ./entry1.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./foo */ \\"./foo.js\\") +module.exports.name = \\"entry1\\" + +/***/ }, + +/***/ \\"./entry2.js\\" +/*!*******************!*\\\\ + !*** ./entry2.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./bar */ \\"./bar.js\\") +module.exports.name = \\"entry2\\" + +/***/ }, + +/***/ \\"./foo.js\\" +/*!****************************!*\\\\ + !*** ./foo.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals1\\" + +;// ./foo.js + +__WEBPACK_EXTERNAL_MODULE_externals1_v__; + +/***/ } + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(\\"./entry.js\\"); +/******/ const __webpack_exports__entry1 = __webpack_exports__.entry1; +/******/ const __webpack_exports__entry2 = __webpack_exports__.entry2; +/******/ export { __webpack_exports__entry1 as entry1, __webpack_exports__entry2 as entry2, __webpack_exports__ as default }; +/******/ +" +`; + +exports[`ConfigCacheTestCases library render-order-issue render-order-issue should pre-compile to fill disk cache (2nd) 1`] = ` +"import { v as __WEBPACK_EXTERNAL_MODULE_externals0_v__ } from \\"externals0\\"; +import { v as __WEBPACK_EXTERNAL_MODULE_externals1_v__ } from \\"externals1\\"; +/******/ var __webpack_modules__ = ({ + +/***/ \\"./bar.js\\" +/*!****************************!*\\\\ + !*** ./bar.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals0\\" + +;// ./bar.js + +__WEBPACK_EXTERNAL_MODULE_externals0_v__; + +/***/ }, + +/***/ \\"./entry.js\\" +/*!******************!*\\\\ + !*** ./entry.js ***! + \\\\******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports.entry1 = __webpack_require__(/*! ./entry1.js */ \\"./entry1.js\\") +module.exports.entry2 = __webpack_require__(/*! ./entry2.js */ \\"./entry2.js\\") + +/***/ }, + +/***/ \\"./entry1.js\\" +/*!*******************!*\\\\ + !*** ./entry1.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./foo */ \\"./foo.js\\") +module.exports.name = \\"entry1\\" + +/***/ }, + +/***/ \\"./entry2.js\\" +/*!*******************!*\\\\ + !*** ./entry2.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./bar */ \\"./bar.js\\") +module.exports.name = \\"entry2\\" + +/***/ }, + +/***/ \\"./foo.js\\" +/*!****************************!*\\\\ + !*** ./foo.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals1\\" + +;// ./foo.js + +__WEBPACK_EXTERNAL_MODULE_externals1_v__; + +/***/ } + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(\\"./entry.js\\"); +/******/ const __webpack_exports__entry1 = __webpack_exports__.entry1; +/******/ const __webpack_exports__entry2 = __webpack_exports__.entry2; +/******/ export { __webpack_exports__entry1 as entry1, __webpack_exports__entry2 as entry2, __webpack_exports__ as default }; +/******/ +" +`; diff --git a/test/configCases/library/render-order-issue/__snapshots__/ConfigTest.snap b/test/configCases/library/render-order-issue/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..d40e6b24051 --- /dev/null +++ b/test/configCases/library/render-order-issue/__snapshots__/ConfigTest.snap @@ -0,0 +1,114 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases library render-order-issue render-order-issue should compile 1`] = ` +"import { v as __WEBPACK_EXTERNAL_MODULE_externals0_v__ } from \\"externals0\\"; +import { v as __WEBPACK_EXTERNAL_MODULE_externals1_v__ } from \\"externals1\\"; +/******/ var __webpack_modules__ = ({ + +/***/ \\"./bar.js\\" +/*!****************************!*\\\\ + !*** ./bar.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals0\\" + +;// ./bar.js + +__WEBPACK_EXTERNAL_MODULE_externals0_v__; + +/***/ }, + +/***/ \\"./entry.js\\" +/*!******************!*\\\\ + !*** ./entry.js ***! + \\\\******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports.entry1 = __webpack_require__(/*! ./entry1.js */ \\"./entry1.js\\") +module.exports.entry2 = __webpack_require__(/*! ./entry2.js */ \\"./entry2.js\\") + +/***/ }, + +/***/ \\"./entry1.js\\" +/*!*******************!*\\\\ + !*** ./entry1.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./foo */ \\"./foo.js\\") +module.exports.name = \\"entry1\\" + +/***/ }, + +/***/ \\"./entry2.js\\" +/*!*******************!*\\\\ + !*** ./entry2.js ***! + \\\\*******************/ +(module, __unused_webpack_exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! ./bar */ \\"./bar.js\\") +module.exports.name = \\"entry2\\" + +/***/ }, + +/***/ \\"./foo.js\\" +/*!****************************!*\\\\ + !*** ./foo.js + 1 modules ***! + \\\\****************************/ +() { + + +;// external \\"externals1\\" + +;// ./foo.js + +__WEBPACK_EXTERNAL_MODULE_externals1_v__; + +/***/ } + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ if (!(moduleId in __webpack_modules__)) { +/******/ delete __webpack_module_cache__[moduleId]; +/******/ var e = new Error(\\"Cannot find module '\\" + moduleId + \\"'\\"); +/******/ e.code = 'MODULE_NOT_FOUND'; +/******/ throw e; +/******/ } +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module used 'module' so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(\\"./entry.js\\"); +/******/ const __webpack_exports__entry1 = __webpack_exports__.entry1; +/******/ const __webpack_exports__entry2 = __webpack_exports__.entry2; +/******/ export { __webpack_exports__entry1 as entry1, __webpack_exports__entry2 as entry2, __webpack_exports__ as default }; +/******/ +" +`; diff --git a/test/configCases/library/render-order-issue/bar.js b/test/configCases/library/render-order-issue/bar.js new file mode 100644 index 00000000000..1e05808307c --- /dev/null +++ b/test/configCases/library/render-order-issue/bar.js @@ -0,0 +1,2 @@ +import { v } from "externals0"; +v; \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/entry.js b/test/configCases/library/render-order-issue/entry.js new file mode 100644 index 00000000000..b15f9ad3c19 --- /dev/null +++ b/test/configCases/library/render-order-issue/entry.js @@ -0,0 +1,2 @@ +module.exports.entry1 = require('./entry1.js') +module.exports.entry2 = require('./entry2.js') \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/entry1.js b/test/configCases/library/render-order-issue/entry1.js new file mode 100644 index 00000000000..7f9697bc4d6 --- /dev/null +++ b/test/configCases/library/render-order-issue/entry1.js @@ -0,0 +1,2 @@ +module.exports = require('./foo') +module.exports.name = "entry1" \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/entry2.js b/test/configCases/library/render-order-issue/entry2.js new file mode 100644 index 00000000000..7232e051630 --- /dev/null +++ b/test/configCases/library/render-order-issue/entry2.js @@ -0,0 +1,2 @@ +module.exports = require('./bar') +module.exports.name = "entry2" \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/foo.js b/test/configCases/library/render-order-issue/foo.js new file mode 100644 index 00000000000..d8dcbf74225 --- /dev/null +++ b/test/configCases/library/render-order-issue/foo.js @@ -0,0 +1,2 @@ +import { v } from "externals1"; +v; \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/index.js b/test/configCases/library/render-order-issue/index.js new file mode 100644 index 00000000000..5ee095b92df --- /dev/null +++ b/test/configCases/library/render-order-issue/index.js @@ -0,0 +1,3 @@ +it('should work', () => { + expect(true).toBe(true); +}); \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/loader.js b/test/configCases/library/render-order-issue/loader.js new file mode 100644 index 00000000000..80f631ae38f --- /dev/null +++ b/test/configCases/library/render-order-issue/loader.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @typedef {import("../../../../types").LoaderDefinition} LoaderDefinition */ + +/** + * @type {LoaderDefinition} + */ +module.exports = function loader(code) { + const request = this.resourcePath; + const callback = this.async(); + + // You can simulate an unstable async operation by switching the waiting module + // uncomment this 👇 and run again + // if (request.includes("entry1")) { + if (request.includes("entry2")) { + setTimeout(() => { + callback(null, code); + }, 2000); + } else { + callback(null, code); + } +}; \ No newline at end of file diff --git a/test/configCases/library/render-order-issue/test.config.js b/test/configCases/library/render-order-issue/test.config.js new file mode 100644 index 00000000000..9100dc59963 --- /dev/null +++ b/test/configCases/library/render-order-issue/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.mjs"]; + } +}; diff --git a/test/configCases/library/render-order-issue/webpack.config.js b/test/configCases/library/render-order-issue/webpack.config.js new file mode 100644 index 00000000000..6c53f1c6078 --- /dev/null +++ b/test/configCases/library/render-order-issue/webpack.config.js @@ -0,0 +1,58 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + mode: "production", + devtool: false, + optimization: { + minimize: false, + moduleIds: "named", + concatenateModules: true, + usedExports: true + }, + entry: { + main: "./index.js", + entry: "./entry.js" + }, + output: { + clean: true, + filename: "[name].mjs", + library: { + type: "module" + } + }, + externalsType: "module", + externals: ["externals0", "externals1"], + experiments: { + outputModule: true + }, + module: { + rules: [ + { + test: /\.js$/, + loader: "./loader", + sideEffects: true + } + ] + }, + plugins: [ + (compiler) => { + compiler.hooks.compilation.tap( + "testcase", + ( + /** @type {import("../../../../types").Compilation} */ compilation + ) => { + compilation.hooks.afterProcessAssets.tap( + "testcase", + ( + /** @type {Record} */ assets + ) => { + const source = assets["entry.mjs"].source(); + expect(source).toMatchSnapshot(); + } + ); + } + ); + } + ] +}; diff --git a/test/configCases/library/type-assign-properties/index.js b/test/configCases/library/type-assign-properties/index.js new file mode 100644 index 00000000000..553264f2bbf --- /dev/null +++ b/test/configCases/library/type-assign-properties/index.js @@ -0,0 +1,4 @@ +it("should define global object with property", function () { + expect(MyLibraryProperties["answer"]).toEqual(42); +}); +export const answer = 42; diff --git a/test/configCases/library/type-assign-properties/test.config.js b/test/configCases/library/type-assign-properties/test.config.js new file mode 100644 index 00000000000..3e565191226 --- /dev/null +++ b/test/configCases/library/type-assign-properties/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + afterExecute() { + delete global.MyLibraryProperties; + } +}; diff --git a/test/configCases/library/type-assign-properties/webpack.config.js b/test/configCases/library/type-assign-properties/webpack.config.js new file mode 100644 index 00000000000..70df544150a --- /dev/null +++ b/test/configCases/library/type-assign-properties/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: { + name: "MyLibraryProperties", + type: "assign-properties" + } + } +}; diff --git a/test/configCases/library/type-assign-runtime-chunk/index.js b/test/configCases/library/type-assign-runtime-chunk/index.js new file mode 100644 index 00000000000..24e5189227d --- /dev/null +++ b/test/configCases/library/type-assign-runtime-chunk/index.js @@ -0,0 +1,5 @@ +it("should define global object with property", function () { + expect(MyLibraryRuntimeChunk["answer"]).toEqual(42); +}); + +export const answer = 42; diff --git a/test/configCases/library/type-assign-runtime-chunk/test.config.js b/test/configCases/library/type-assign-runtime-chunk/test.config.js new file mode 100644 index 00000000000..a4d8d86ae86 --- /dev/null +++ b/test/configCases/library/type-assign-runtime-chunk/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime~main.js", "./main.js"]; + } +}; diff --git a/test/configCases/library/type-assign-runtime-chunk/webpack.config.js b/test/configCases/library/type-assign-runtime-chunk/webpack.config.js new file mode 100644 index 00000000000..96160a748b1 --- /dev/null +++ b/test/configCases/library/type-assign-runtime-chunk/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js", + library: { + name: "MyLibraryRuntimeChunk", + type: "assign" + } + }, + target: "web", + optimization: { + runtimeChunk: true + } +}; diff --git a/test/configCases/library/type-assign/index.js b/test/configCases/library/type-assign/index.js new file mode 100644 index 00000000000..b91b42407c8 --- /dev/null +++ b/test/configCases/library/type-assign/index.js @@ -0,0 +1,6 @@ +it("should define global object with property", function () { + require("./module"); + expect(MyLibrary["answer"]).toEqual(42); +}); + +export const answer = 42; diff --git a/test/configCases/library/type-assign/module.js b/test/configCases/library/type-assign/module.js new file mode 100644 index 00000000000..3918c74e446 --- /dev/null +++ b/test/configCases/library/type-assign/module.js @@ -0,0 +1 @@ +"use strict"; diff --git a/test/configCases/library/type-assign/test.config.js b/test/configCases/library/type-assign/test.config.js new file mode 100644 index 00000000000..501be908dfe --- /dev/null +++ b/test/configCases/library/type-assign/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + afterExecute() { + delete global.MyLibrary; + } +}; diff --git a/test/configCases/library/type-assign/webpack.config.js b/test/configCases/library/type-assign/webpack.config.js new file mode 100644 index 00000000000..35dc0209d37 --- /dev/null +++ b/test/configCases/library/type-assign/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + library: { + name: "MyLibrary", + type: "assign" + } + } +}; diff --git a/test/configCases/library/umd-array/webpack.config.js b/test/configCases/library/umd-array/webpack.config.js index fba3d5e17a1..0b7a695aba6 100644 --- a/test/configCases/library/umd-array/webpack.config.js +++ b/test/configCases/library/umd-array/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd", diff --git a/test/configCases/library/umd/webpack.config.js b/test/configCases/library/umd/webpack.config.js index 4ce89d69c0a..e0c2d832da9 100644 --- a/test/configCases/library/umd/webpack.config.js +++ b/test/configCases/library/umd/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { libraryTarget: "umd", diff --git a/test/configCases/loader-import-module/css/colors.js b/test/configCases/loader-import-module/css/colors.js new file mode 100644 index 00000000000..d3da74ec7a1 --- /dev/null +++ b/test/configCases/loader-import-module/css/colors.js @@ -0,0 +1,2 @@ +export const red = "#f00"; +export const green = "#0f0"; diff --git a/test/configCases/loader-import-module/css/file.jpg b/test/configCases/loader-import-module/css/file.jpg new file mode 100644 index 00000000000..fe5c6eefa79 Binary files /dev/null and b/test/configCases/loader-import-module/css/file.jpg differ diff --git a/test/configCases/loader-import-module/css/file.png b/test/configCases/loader-import-module/css/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/loader-import-module/css/file.png differ diff --git a/test/configCases/loader-import-module/css/index.js b/test/configCases/loader-import-module/css/index.js new file mode 100644 index 00000000000..9d5739c3972 --- /dev/null +++ b/test/configCases/loader-import-module/css/index.js @@ -0,0 +1,15 @@ +import stylesheet from "./stylesheet"; +import stylesheet1 from "./stylesheet?1"; +import otherStylesheet from "./other-stylesheet"; + +it("should be able to use build-time code", () => { + expect(stylesheet).toBe( + 'body { background: url("/public/assets/file.png"); color: #f00; }' + ); + expect(stylesheet1).toBe( + 'body { background: url("/public/assets/file.png?1"); color: #f00; }' + ); + expect(otherStylesheet).toBe( + 'body { background: url("/other/assets/file.jpg"); color: #0f0; }' + ); +}); diff --git a/test/configCases/loader-import-module/css/loader.js b/test/configCases/loader-import-module/css/loader.js new file mode 100644 index 00000000000..2dae62a4065 --- /dev/null +++ b/test/configCases/loader-import-module/css/loader.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +exports.pitch = async function (remaining) { + const result = await this.importModule( + this.resourcePath + ".webpack[javascript/auto]" + "!=!" + remaining, + this.getOptions() + ); + return result.default || result; +}; diff --git a/test/configCases/loader-import-module/css/other-stylesheet.js b/test/configCases/loader-import-module/css/other-stylesheet.js new file mode 100644 index 00000000000..d3be25b7f28 --- /dev/null +++ b/test/configCases/loader-import-module/css/other-stylesheet.js @@ -0,0 +1,3 @@ +import { green } from "./colors.js"; +import file from "./file.jpg"; +export default `body { background: url("${file}"); color: ${green}; }`; diff --git a/test/configCases/loader-import-module/css/stylesheet.js b/test/configCases/loader-import-module/css/stylesheet.js new file mode 100644 index 00000000000..7d542e93be0 --- /dev/null +++ b/test/configCases/loader-import-module/css/stylesheet.js @@ -0,0 +1,4 @@ +import { red } from "./colors.js"; +export default `body { background: url("${ + new URL("./file.png" + __resourceQuery, import.meta.url).href +}"); color: ${red}; }`; diff --git a/test/configCases/loader-import-module/css/webpack.config.js b/test/configCases/loader-import-module/css/webpack.config.js new file mode 100644 index 00000000000..896a19a6f57 --- /dev/null +++ b/test/configCases/loader-import-module/css/webpack.config.js @@ -0,0 +1,75 @@ +"use strict"; + +/** @typedef {import("../../../../").Chunk} Chunk */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + publicPath: "/public/" + }, + module: { + parser: { + javascript: { + url: "relative" + } + }, + rules: [ + { + dependency: "url", + issuer: /stylesheet\.js$/, + type: "asset/resource", + generator: { + filename: "assets/[name][ext][query]" + } + }, + { + oneOf: [ + { + test: /other-stylesheet\.js$/, + loader: "./loader", + options: { + publicPath: "/other/" + }, + type: "asset/source" + }, + { + test: /stylesheet\.js$/, + use: "./loader", + type: "asset/source" + } + ] + }, + { + test: /\.jpg$/, + loader: "file-loader", + options: { + name: "assets/[name].[ext]" + } + } + ] + }, + plugins: [ + (compiler) => + compiler.hooks.done.tap("test case", (stats) => { + try { + expect(stats.compilation.getAsset("assets/file.png")).toHaveProperty( + "info", + expect.objectContaining({ sourceFilename: "file.png" }) + ); + expect(stats.compilation.getAsset("assets/file.jpg")).toHaveProperty( + "info", + expect.objectContaining({ sourceFilename: "file.jpg" }) + ); + const { auxiliaryFiles } = + /** @type {Chunk} */ + (stats.compilation.namedChunks.get("main")); + expect(auxiliaryFiles).toContain("assets/file.png"); + expect(auxiliaryFiles).toContain("assets/file.png?1"); + expect(auxiliaryFiles).toContain("assets/file.jpg"); + } catch (err) { + console.log(stats.toString({ colors: true, orphanModules: true })); + throw err; + } + }) + ] +}; diff --git a/test/configCases/loaders-and-plugins-falsy/basic/bar.js b/test/configCases/loaders-and-plugins-falsy/basic/bar.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/bar.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/loaders-and-plugins-falsy/basic/baz.js b/test/configCases/loaders-and-plugins-falsy/basic/baz.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/baz.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/loaders-and-plugins-falsy/basic/foo.js b/test/configCases/loaders-and-plugins-falsy/basic/foo.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/foo.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/loaders-and-plugins-falsy/basic/index.js b/test/configCases/loaders-and-plugins-falsy/basic/index.js new file mode 100644 index 00000000000..d71e4dc1d29 --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/index.js @@ -0,0 +1,12 @@ +import foo from "./foo.js?external"; +import bar from "./bar.js"; +import baz from "./baz.js?custom-use"; +import other from "./other.js"; + +it("should work with falsy plugins and loaders", function() { + expect(ONE).toBe("ONE"); + expect(foo.endsWith("?external")).toBe(true); + expect(bar).toBe("test"); + expect(baz).toBe("test"); + expect(other).toBe("NEW"); +}); diff --git a/test/configCases/loaders-and-plugins-falsy/basic/loader.js b/test/configCases/loaders-and-plugins-falsy/basic/loader.js new file mode 100644 index 00000000000..6c5f48f747e --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition<{ value: any }>} */ +module.exports = function loader(content) { + return content.replace(/test/, "NEW"); +}; diff --git a/test/configCases/loaders-and-plugins-falsy/basic/other.js b/test/configCases/loaders-and-plugins-falsy/basic/other.js new file mode 100644 index 00000000000..58c57157d36 --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/other.js @@ -0,0 +1 @@ +export default "test"; diff --git a/test/configCases/loaders-and-plugins-falsy/basic/webpack.config.js b/test/configCases/loaders-and-plugins-falsy/basic/webpack.config.js new file mode 100644 index 00000000000..eb78579df2a --- /dev/null +++ b/test/configCases/loaders-and-plugins-falsy/basic/webpack.config.js @@ -0,0 +1,120 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ + +const DefinePlugin = require("../../../../").DefinePlugin; + +const nullValue = null; +const undefinedValue = undefined; +const falseValue = false; +const zeroValue = 0; +const emptyStringValue = ""; + +class FailPlugin { + apply() { + throw new Error("FailedPlugin"); + } +} + +class TestChildCompilationPlugin { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.make.tapAsync( + "TestChildCompilationFailurePlugin", + (compilation, cb) => { + const child = compilation.createChildCompiler( + "name", + compilation.outputOptions, + [ + undefinedValue && new FailPlugin(), + nullValue && new FailPlugin(), + falseValue && new FailPlugin(), + zeroValue && new FailPlugin(), + emptyStringValue && new FailPlugin() + ] + ); + + child.runAsChild((err) => { + cb(err); + }); + } + ); + } +} + +/** @type {import("../../../../").Configuration} */ +module.exports = { + // Will failed because we don't have unknown-loader + module: { + defaultRules: [ + nullValue && { + test: /\.js$/, + loader: "unknown-loader" + }, + "..." + ], + rules: [ + nullValue && { + test: /\.js$/, + loader: "unknown-loader" + }, + { + test: /foo\.js$/, + oneOf: [ + nullValue && { + resourceQuery: /inline/, + loader: "unknown-loader" + }, + { + resourceQuery: /external/, + type: "asset/resource" + } + ] + }, + { + test: /bar\.js$/, + use: [nullValue && "unknown-loader"] + }, + { + test: /baz\.js$/, + resourceQuery: /custom-use/, + use: () => [ + nullValue && { + loader: "unknown-loader" + } + ] + }, + { + test: /other\.js$/, + rules: [ + nullValue && { + loader: "unknown-loader" + }, + { + loader: "./loader.js" + } + ] + } + ] + }, + resolve: { + plugins: [undefinedValue && new FailPlugin()] + }, + plugins: [ + new DefinePlugin({ + ONE: JSON.stringify("ONE") + }), + new TestChildCompilationPlugin(), + undefinedValue && new FailPlugin(), + nullValue && new FailPlugin(), + falseValue && new FailPlugin(), + zeroValue && new FailPlugin(), + emptyStringValue && new FailPlugin() + ], + optimization: { + minimize: true, + minimizer: [nullValue && new FailPlugin()] + } +}; diff --git a/test/configCases/loaders/#-issue-14755-#/#.my b/test/configCases/loaders/#-issue-14755-#/#.my new file mode 100644 index 00000000000..19dd091730f --- /dev/null +++ b/test/configCases/loaders/#-issue-14755-#/#.my @@ -0,0 +1 @@ +[a-z] diff --git a/test/configCases/loaders/#-issue-14755-#/index.js b/test/configCases/loaders/#-issue-14755-#/index.js new file mode 100644 index 00000000000..092ef0aab48 --- /dev/null +++ b/test/configCases/loaders/#-issue-14755-#/index.js @@ -0,0 +1,6 @@ +import regexp from './#.my'; + +it("should load regexp correctly", () => { + expect(regexp.test("1")).toBe(false); + expect(regexp.test("a")).toBe(true); +}); diff --git a/test/configCases/loaders/#-issue-14755-#/node_modules/regexp-#-loader/index.js b/test/configCases/loaders/#-issue-14755-#/node_modules/regexp-#-loader/index.js new file mode 100644 index 00000000000..d7410984ab4 --- /dev/null +++ b/test/configCases/loaders/#-issue-14755-#/node_modules/regexp-#-loader/index.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = function loader(data) { + return `export default new RegExp(${JSON.stringify(data.trim())})` +} diff --git a/test/configCases/loaders/#-issue-14755-#/node_modules/regexp-#-loader/package.json b/test/configCases/loaders/#-issue-14755-#/node_modules/regexp-#-loader/package.json new file mode 100644 index 00000000000..aa8a1ecf19e --- /dev/null +++ b/test/configCases/loaders/#-issue-14755-#/node_modules/regexp-#-loader/package.json @@ -0,0 +1,6 @@ +{ + "name": "regexp-#-loader", + "version": "1.0.0", + "dependencies": { + } +} diff --git a/test/configCases/loaders/#-issue-14755-#/webpack.config.js b/test/configCases/loaders/#-issue-14755-#/webpack.config.js new file mode 100644 index 00000000000..64a40d1d92f --- /dev/null +++ b/test/configCases/loaders/#-issue-14755-#/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.my$/, + loader: "regexp-#-loader" + } + ] + } +}; diff --git a/test/configCases/loaders/async-loader/a.js b/test/configCases/loaders/async-loader/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/async-loader/b.js b/test/configCases/loaders/async-loader/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/async-loader/c.js b/test/configCases/loaders/async-loader/c.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/async-loader/index.js b/test/configCases/loaders/async-loader/index.js new file mode 100644 index 00000000000..72cb5d31185 --- /dev/null +++ b/test/configCases/loaders/async-loader/index.js @@ -0,0 +1,12 @@ +it("should work when loader is async", function() { + expect(require("./a")).toBe("a"); +}); + +it("should work when loader is async #2", function() { + expect(require("./b")).toBe("b"); +}); + +it("should work when loader is async #3", function() { + expect(require("./c")).toBe("c"); +}); + diff --git a/test/configCases/loaders/async-loader/loader-1.js b/test/configCases/loaders/async-loader/loader-1.js new file mode 100644 index 00000000000..dca800cec5b --- /dev/null +++ b/test/configCases/loaders/async-loader/loader-1.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = async function () { + return `module.exports = 'a';`; +}; diff --git a/test/configCases/loaders/async-loader/loader-2.js b/test/configCases/loaders/async-loader/loader-2.js new file mode 100644 index 00000000000..ce09f33359e --- /dev/null +++ b/test/configCases/loaders/async-loader/loader-2.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + return Promise.resolve(`module.exports = 'b';`); +}; diff --git a/test/configCases/loaders/async-loader/loader-3.js b/test/configCases/loaders/async-loader/loader-3.js new file mode 100644 index 00000000000..02bdc4efd54 --- /dev/null +++ b/test/configCases/loaders/async-loader/loader-3.js @@ -0,0 +1,6 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const callback = this.async(); + + callback(null, `module.exports = 'c';`); +}; diff --git a/test/configCases/loaders/async-loader/webpack.config.js b/test/configCases/loaders/async-loader/webpack.config.js new file mode 100644 index 00000000000..1894d855199 --- /dev/null +++ b/test/configCases/loaders/async-loader/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /a\.js$/, + use: "./loader-1" + }, + { + test: /b\.js$/, + use: "./loader-2" + }, + { + test: /c\.js$/, + use: "./loader-3" + } + ] + } +}; diff --git a/test/configCases/loaders/file-protocol/a.js b/test/configCases/loaders/file-protocol/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/file-protocol/b.js b/test/configCases/loaders/file-protocol/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/file-protocol/index.js b/test/configCases/loaders/file-protocol/index.js new file mode 100644 index 00000000000..064ec098f2d --- /dev/null +++ b/test/configCases/loaders/file-protocol/index.js @@ -0,0 +1,7 @@ +it("should work with file protocol in loader", function() { + expect(require("./a")).toBe("production"); +}); + +it("should work with file protocol in use", function() { + expect(require("./b")).toBe("production"); +}); diff --git a/test/configCases/loaders/file-protocol/loader.js b/test/configCases/loaders/file-protocol/loader.js new file mode 100644 index 00000000000..b9c10626bc4 --- /dev/null +++ b/test/configCases/loaders/file-protocol/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return `module.exports = "${this.mode}";`; +}; diff --git a/test/configCases/loaders/file-protocol/webpack.config.js b/test/configCases/loaders/file-protocol/webpack.config.js new file mode 100644 index 00000000000..e6e04cdf102 --- /dev/null +++ b/test/configCases/loaders/file-protocol/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const path = require("path"); +const url = require("url"); + +const pathToLoader = url + .pathToFileURL(path.resolve(__dirname, "./loader.js")) + .toString(); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /a\.js$/, + loader: pathToLoader + }, + { + test: /b\.js$/, + use: pathToLoader + } + ] + } +}; diff --git a/test/configCases/loaders/generate-ident/loader1.js b/test/configCases/loaders/generate-ident/loader1.js index 42fea46336a..0d2fcc8b593 100644 --- a/test/configCases/loaders/generate-ident/loader1.js +++ b/test/configCases/loaders/generate-ident/loader1.js @@ -1,3 +1,6 @@ -module.exports.pitch = function(remainingRequest) { - return "module.exports = require(" + JSON.stringify("!!" + remainingRequest) + ");"; +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +module.exports.pitch = function (remainingRequest) { + return ( + "module.exports = require(" + JSON.stringify("!!" + remainingRequest) + ");" + ); }; diff --git a/test/configCases/loaders/generate-ident/loader2.js b/test/configCases/loaders/generate-ident/loader2.js index b5b133a9208..40788042801 100644 --- a/test/configCases/loaders/generate-ident/loader2.js +++ b/test/configCases/loaders/generate-ident/loader2.js @@ -1,3 +1,6 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ f(): any }>} */ +module.exports = function (source) { + if (typeof this.query === "string") + throw new Error("query must be an object"); return "module.exports = " + JSON.stringify(this.query.f()); }; diff --git a/test/configCases/loaders/generate-ident/webpack.config.js b/test/configCases/loaders/generate-ident/webpack.config.js index b52f63dabf3..56699c191cb 100644 --- a/test/configCases/loaders/generate-ident/webpack.config.js +++ b/test/configCases/loaders/generate-ident/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -8,7 +11,7 @@ module.exports = { { loader: "./loader2", options: { - f: function() { + f() { return "ok"; } } @@ -24,7 +27,7 @@ module.exports = { use: { loader: "./loader2", options: { - f: function() { + f() { return "maybe"; } } @@ -35,7 +38,7 @@ module.exports = { use: { loader: "./loader2", options: { - f: function() { + f() { return "yes"; } } @@ -50,7 +53,7 @@ module.exports = { { loader: "./loader2", options: { - f: function() { + f() { return "ok"; } } diff --git a/test/configCases/loaders/hash-in-context/index.js b/test/configCases/loaders/hash-in-context/index.js new file mode 100644 index 00000000000..d8065991440 --- /dev/null +++ b/test/configCases/loaders/hash-in-context/index.js @@ -0,0 +1,10 @@ +it("should have hmr flag in loader context", function() { + expect(require("./loader!")).toMatchObject({ + digest: "a0fdc3d2f3863f64d95950fc06af72f7", + digestWithLength: "a0fdc3d2f3863f64d959", + hashFunction: "md4", + hashDigest: "hex", + hashDigestLength: 20, + hashSalt: "salt", + }); +}); diff --git a/test/configCases/loaders/hash-in-context/loader.js b/test/configCases/loaders/hash-in-context/loader.js new file mode 100644 index 00000000000..a2d84007eab --- /dev/null +++ b/test/configCases/loaders/hash-in-context/loader.js @@ -0,0 +1,18 @@ +/** @type {import("../../../../").LoaderDefinition}} */ +module.exports = function () { + const hashValue = this.utils.createHash(this.hashFunction); + if (this.hashSalt) { + hashValue.update(this.hashSalt); + } + hashValue.update("test"); + const digest = hashValue.digest(this.hashDigest); + + return `module.exports = ${JSON.stringify({ + digest, + digestWithLength: digest.slice(0, this.hashDigestLength), + hashFunction: this.hashFunction, + hashDigest: this.hashDigest, + hashDigestLength: this.hashDigestLength, + hashSalt: this.hashSalt + })};`; +}; diff --git a/test/configCases/loaders/hash-in-context/webpack.config.js b/test/configCases/loaders/hash-in-context/webpack.config.js new file mode 100644 index 00000000000..afd84802e18 --- /dev/null +++ b/test/configCases/loaders/hash-in-context/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = { + output: { + hashSalt: "salt" + } +}; diff --git a/test/configCases/loaders/hot-in-context/loader.js b/test/configCases/loaders/hot-in-context/loader.js index b497b8bc45e..608faaddb21 100644 --- a/test/configCases/loaders/hot-in-context/loader.js +++ b/test/configCases/loaders/hot-in-context/loader.js @@ -1,3 +1,4 @@ -module.exports = function() { +/** @type {import("../../../../").LoaderDefinition}} */ +module.exports = function () { return `module.exports = ${JSON.stringify(!!this.hot)};`; -} +}; diff --git a/test/configCases/loaders/hot-in-context/webpack.config.js b/test/configCases/loaders/hot-in-context/webpack.config.js index 925a31824c0..8cafeb0aa73 100644 --- a/test/configCases/loaders/hot-in-context/webpack.config.js +++ b/test/configCases/loaders/hot-in-context/webpack.config.js @@ -1,4 +1,8 @@ +"use strict"; + const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ module.exports = [ { // no hmr diff --git a/test/configCases/loaders/import-attributes-and-assertion/index.js b/test/configCases/loaders/import-attributes-and-assertion/index.js new file mode 100644 index 00000000000..606b31f5d46 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/index.js @@ -0,0 +1,12 @@ +import one from "./pkg-1.json" assert { type: "json" }; +import two from "./pkg-2.json" with { type: "json" }; +import three from "./pkg-3.json" assert { type: "json" }; +import four from "./pkg-4.json" with { type: "json" }; + +it("import attributes and assertion should work", function() { + expect(one.type).toEqual("assert"); + expect(two.type).toEqual("with"); + expect(three.type).toEqual("assert"); + expect(four.type).toEqual("with"); +}); + diff --git a/test/configCases/loaders/import-attributes-and-assertion/loader-assert.js b/test/configCases/loaders/import-attributes-and-assertion/loader-assert.js new file mode 100644 index 00000000000..0906f985e70 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/loader-assert.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return JSON.stringify({ type: "assert" }); +}; diff --git a/test/configCases/loaders/import-attributes-and-assertion/loader-with.js b/test/configCases/loaders/import-attributes-and-assertion/loader-with.js new file mode 100644 index 00000000000..7209f804dbd --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/loader-with.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return JSON.stringify({ type: "with" }); +}; diff --git a/test/configCases/loaders/import-attributes-and-assertion/pkg-1.json b/test/configCases/loaders/import-attributes-and-assertion/pkg-1.json new file mode 100644 index 00000000000..90eae66140a --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/pkg-1.json @@ -0,0 +1,3 @@ +{ + "type": "none" +} diff --git a/test/configCases/loaders/import-attributes-and-assertion/pkg-2.json b/test/configCases/loaders/import-attributes-and-assertion/pkg-2.json new file mode 100644 index 00000000000..90eae66140a --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/pkg-2.json @@ -0,0 +1,3 @@ +{ + "type": "none" +} diff --git a/test/configCases/loaders/import-attributes-and-assertion/pkg-3.json b/test/configCases/loaders/import-attributes-and-assertion/pkg-3.json new file mode 100644 index 00000000000..186e2ba4afd --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/pkg-3.json @@ -0,0 +1,3 @@ +{ + "type": "assert" +} diff --git a/test/configCases/loaders/import-attributes-and-assertion/pkg-4.json b/test/configCases/loaders/import-attributes-and-assertion/pkg-4.json new file mode 100644 index 00000000000..88301984e31 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/pkg-4.json @@ -0,0 +1,3 @@ +{ + "type": "with" +} diff --git a/test/configCases/loaders/import-attributes-and-assertion/webpack.config.js b/test/configCases/loaders/import-attributes-and-assertion/webpack.config.js new file mode 100644 index 00000000000..b13566831a6 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-assertion/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + assert: { type: "json" }, + loader: require.resolve("./loader-assert.js") + }, + { + with: { type: "json" }, + loader: require.resolve("./loader-with.js") + } + ] + } +}; diff --git a/test/configCases/loaders/import-attributes-and-reexport/a.js b/test/configCases/loaders/import-attributes-and-reexport/a.js new file mode 100644 index 00000000000..5093d0f0b46 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-reexport/a.js @@ -0,0 +1 @@ +export {b} from "./b" with {type: "RANDOM"} \ No newline at end of file diff --git a/test/configCases/loaders/import-attributes-and-reexport/b.js b/test/configCases/loaders/import-attributes-and-reexport/b.js new file mode 100644 index 00000000000..25d07233690 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-reexport/b.js @@ -0,0 +1,5 @@ +import { c } from "./c.js"; + +export function b() { + return "b" + c(); +} diff --git a/test/configCases/loaders/import-attributes-and-reexport/c.js b/test/configCases/loaders/import-attributes-and-reexport/c.js new file mode 100644 index 00000000000..d511013e979 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-reexport/c.js @@ -0,0 +1,3 @@ +export function c() { + return "c"; +} diff --git a/test/configCases/loaders/import-attributes-and-reexport/index.js b/test/configCases/loaders/import-attributes-and-reexport/index.js new file mode 100644 index 00000000000..a0750e32c63 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-reexport/index.js @@ -0,0 +1,9 @@ +import { b } from "./a.js"; + +function foo() { + return "a" + b(); +} + +it("should not duplicate modules", function() { + expect(foo()).toEqual("ab"); +}); diff --git a/test/configCases/loaders/import-attributes-and-reexport/test-loader.js b/test/configCases/loaders/import-attributes-and-reexport/test-loader.js new file mode 100644 index 00000000000..28a43d4c099 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-reexport/test-loader.js @@ -0,0 +1,3 @@ +module.exports = function loader() { + return "export function b() { return 'b'; }"; +}; diff --git a/test/configCases/loaders/import-attributes-and-reexport/webpack.config.js b/test/configCases/loaders/import-attributes-and-reexport/webpack.config.js new file mode 100644 index 00000000000..c35c4f48160 --- /dev/null +++ b/test/configCases/loaders/import-attributes-and-reexport/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + with: { type: "RANDOM" }, + use: require.resolve("./test-loader") + } + ] + } +}; diff --git a/test/configCases/loaders/issue-3320/deprecations.js b/test/configCases/loaders/issue-3320/deprecations.js new file mode 100644 index 00000000000..417adc900d6 --- /dev/null +++ b/test/configCases/loaders/issue-3320/deprecations.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = [ + { + code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, + message: + /Using a string as loader options is deprecated \(ruleSet\[1\]\.rules\[2\]\.options\)/ + }, + { + code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, + message: + /Using a string as loader options is deprecated \(ruleSet\[1\]\.rules\[3\]\.use\[0\]\.options\)/ + } +]; diff --git a/test/configCases/loaders/issue-3320/webpack.config.js b/test/configCases/loaders/issue-3320/webpack.config.js index 8617ad4176e..c6b2c88bf1d 100644 --- a/test/configCases/loaders/issue-3320/webpack.config.js +++ b/test/configCases/loaders/issue-3320/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { resolveLoader: { alias: { @@ -27,11 +30,17 @@ module.exports = { }, { test: /b2\.js$/, - loader: "some-loader?foo=someOtherMessage" + loader: "some-loader", + options: "foo=someOtherMessage" }, { test: /b3\.js$/, - use: ["some-loader?foo=someOtherMessage"] + use: [ + { + loader: "some-loader", + options: "foo=someOtherMessage" + } + ] } ] } diff --git a/test/configCases/loaders/issue-9053/b.js b/test/configCases/loaders/issue-9053/b.js new file mode 100644 index 00000000000..af9f2fcd0e6 --- /dev/null +++ b/test/configCases/loaders/issue-9053/b.js @@ -0,0 +1 @@ +module.exports = ["b"]; diff --git a/test/configCases/loaders/issue-9053/c.js b/test/configCases/loaders/issue-9053/c.js new file mode 100644 index 00000000000..da8dc0c1aa3 --- /dev/null +++ b/test/configCases/loaders/issue-9053/c.js @@ -0,0 +1 @@ +module.exports = ["c"]; diff --git a/test/configCases/loaders/issue-9053/index.js b/test/configCases/loaders/issue-9053/index.js new file mode 100644 index 00000000000..0ab03f53784 --- /dev/null +++ b/test/configCases/loaders/issue-9053/index.js @@ -0,0 +1,17 @@ +it("should apply inline loaders before matchResource", function() { + var foo = require("c.js!=!loader1!./b.js"); + + expect(foo).toEqual(["b", "1", "2"]); +}); + +it("should apply config loaders before inline loaders", function() { + var foo = require("loader1!./c.js"); + + expect(foo).toEqual(["c", "2", "1"]); +}); + +it("should not apply config loaders when matchResource is used", function() { + var foo = require("d.js!=!loader1!./c.js"); + + expect(foo).toEqual(["c", "1", "3"]); +}); diff --git a/test/configCases/loaders/issue-9053/node_modules/loader1.js b/test/configCases/loaders/issue-9053/node_modules/loader1.js new file mode 100644 index 00000000000..ff626a75267 --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader1.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + return source + '\nmodule.exports.push("1");'; +}; diff --git a/test/configCases/loaders/issue-9053/node_modules/loader2.js b/test/configCases/loaders/issue-9053/node_modules/loader2.js new file mode 100644 index 00000000000..4529e002f8b --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader2.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + return source + '\nmodule.exports.push("2");'; +}; diff --git a/test/configCases/loaders/issue-9053/node_modules/loader3.js b/test/configCases/loaders/issue-9053/node_modules/loader3.js new file mode 100644 index 00000000000..824c6620d3f --- /dev/null +++ b/test/configCases/loaders/issue-9053/node_modules/loader3.js @@ -0,0 +1,3 @@ +module.exports = function(source) { + return source + '\nmodule.exports.push("3");'; +}; diff --git a/test/configCases/loaders/issue-9053/webpack.config.js b/test/configCases/loaders/issue-9053/webpack.config.js new file mode 100644 index 00000000000..288f819bdc9 --- /dev/null +++ b/test/configCases/loaders/issue-9053/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /c\.js$/, + use: ["loader2"] + }, + { + test: /d\.js$/, + use: ["loader3"] + } + ] + } +}; diff --git a/test/configCases/loaders/mode-default/a.js b/test/configCases/loaders/mode-default/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/mode-default/index.js b/test/configCases/loaders/mode-default/index.js new file mode 100644 index 00000000000..d0a4e106af4 --- /dev/null +++ b/test/configCases/loaders/mode-default/index.js @@ -0,0 +1,3 @@ +it("provides mode to loaders when the option is omitted", function() { + expect(require("./a")).toBe("production"); +}); diff --git a/test/configCases/loaders/mode-default/loader.js b/test/configCases/loaders/mode-default/loader.js new file mode 100644 index 00000000000..b9c10626bc4 --- /dev/null +++ b/test/configCases/loaders/mode-default/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return `module.exports = "${this.mode}";`; +}; diff --git a/test/configCases/loaders/mode-default/webpack.config.js b/test/configCases/loaders/mode-default/webpack.config.js new file mode 100644 index 00000000000..490c18b76df --- /dev/null +++ b/test/configCases/loaders/mode-default/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /a\.js$/, + use: "./loader" + } + ] + } +}; diff --git a/test/configCases/loaders/mode-development/a.js b/test/configCases/loaders/mode-development/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/mode-development/index.js b/test/configCases/loaders/mode-development/index.js new file mode 100644 index 00000000000..6fd77efcc1c --- /dev/null +++ b/test/configCases/loaders/mode-development/index.js @@ -0,0 +1,3 @@ +it("provides mode to loaders when the option is 'development'", function() { + expect(require("./a")).toBe("development"); +}); diff --git a/test/configCases/loaders/mode-development/loader.js b/test/configCases/loaders/mode-development/loader.js new file mode 100644 index 00000000000..b9c10626bc4 --- /dev/null +++ b/test/configCases/loaders/mode-development/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return `module.exports = "${this.mode}";`; +}; diff --git a/test/configCases/loaders/mode-development/webpack.config.js b/test/configCases/loaders/mode-development/webpack.config.js new file mode 100644 index 00000000000..190d66904bd --- /dev/null +++ b/test/configCases/loaders/mode-development/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + module: { + rules: [ + { + test: /a\.js$/, + use: "./loader" + } + ] + } +}; diff --git a/test/configCases/loaders/mode-none/a.js b/test/configCases/loaders/mode-none/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/mode-none/index.js b/test/configCases/loaders/mode-none/index.js new file mode 100644 index 00000000000..ffecdce0b49 --- /dev/null +++ b/test/configCases/loaders/mode-none/index.js @@ -0,0 +1,3 @@ +it("provides mode to loaders when the option is 'none'", function() { + expect(require("./a")).toBe("none"); +}); diff --git a/test/configCases/loaders/mode-none/loader.js b/test/configCases/loaders/mode-none/loader.js new file mode 100644 index 00000000000..b9c10626bc4 --- /dev/null +++ b/test/configCases/loaders/mode-none/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return `module.exports = "${this.mode}";`; +}; diff --git a/test/configCases/loaders/mode-none/webpack.config.js b/test/configCases/loaders/mode-none/webpack.config.js new file mode 100644 index 00000000000..09a281fe590 --- /dev/null +++ b/test/configCases/loaders/mode-none/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + module: { + rules: [ + { + test: /a\.js$/, + use: "./loader" + } + ] + } +}; diff --git a/test/configCases/loaders/mode-production/a.js b/test/configCases/loaders/mode-production/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/mode-production/index.js b/test/configCases/loaders/mode-production/index.js new file mode 100644 index 00000000000..c6ccd5be92e --- /dev/null +++ b/test/configCases/loaders/mode-production/index.js @@ -0,0 +1,3 @@ +it("provides mode to loaders when the option is 'production'", function() { + expect(require("./a")).toBe("production"); +}); diff --git a/test/configCases/loaders/mode-production/loader.js b/test/configCases/loaders/mode-production/loader.js new file mode 100644 index 00000000000..b9c10626bc4 --- /dev/null +++ b/test/configCases/loaders/mode-production/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return `module.exports = "${this.mode}";`; +}; diff --git a/test/configCases/loaders/mode-production/webpack.config.js b/test/configCases/loaders/mode-production/webpack.config.js new file mode 100644 index 00000000000..4d7975ce1fd --- /dev/null +++ b/test/configCases/loaders/mode-production/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + module: { + rules: [ + { + test: /a\.js$/, + use: "./loader" + } + ] + } +}; diff --git a/test/configCases/loaders/options/a.js b/test/configCases/loaders/options/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/b.js b/test/configCases/loaders/options/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/c.js b/test/configCases/loaders/options/c.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/d.js b/test/configCases/loaders/options/d.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/deprecations.js b/test/configCases/loaders/options/deprecations.js new file mode 100644 index 00000000000..f7e3114b5ef --- /dev/null +++ b/test/configCases/loaders/options/deprecations.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/ } +]; diff --git a/test/configCases/loaders/options/e.js b/test/configCases/loaders/options/e.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/error1.js b/test/configCases/loaders/options/error1.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/error2.js b/test/configCases/loaders/options/error2.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/errors.js b/test/configCases/loaders/options/errors.js new file mode 100644 index 00000000000..a602f644c8c --- /dev/null +++ b/test/configCases/loaders/options/errors.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = [ + [ + /\.\/loader-1\.js/, + /Loader has been/, + /options\.arg6\.bar\.baz should be a string/ + ], + [ + /\.\/loader-2\.js/, + /Custom Loader Name has been/, + /configuration\.arg should be true/ + ] +]; diff --git a/test/configCases/loaders/options/f.js b/test/configCases/loaders/options/f.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/g.js b/test/configCases/loaders/options/g.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/h.js b/test/configCases/loaders/options/h.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/i.js b/test/configCases/loaders/options/i.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/options/index.js b/test/configCases/loaders/options/index.js new file mode 100644 index 00000000000..56896b7c2ef --- /dev/null +++ b/test/configCases/loaders/options/index.js @@ -0,0 +1,51 @@ +it("should get options", function() { + expect(require("./a")).toStrictEqual({ + arg: true, + arg1: null, + arg3: 1234567890, + arg4: "string", + arg5: [1, 2, 3], + arg6: { foo: "value", bar: { baz: "other-value" } } + }); + expect(require("./b")).toStrictEqual({ + arg: true, + arg1: null, + arg3: 1234567890, + arg4: "string", + arg5: [1, 2, 3], + arg6: { foo: "value", bar: { baz: "other-value" } } + }); + expect(require("./c")).toStrictEqual({ + arg: true, + arg1: null, + arg3: 1234567890, + arg4: "string", + arg5: [1, 2, 3], + arg6: { foo: "value", bar: { baz: "other-value" } } + }); + expect(require("./d")).toStrictEqual({ + arg4: "text" + }); + expect(require("./e")).toStrictEqual({}); + expect(require("./f")).toStrictEqual({ + delicious: "", + name: "cheesecake", + slices: "8", + warm: "false" + }); + expect(require("./g")).toStrictEqual({ + "=": "=" + }); + expect(require("./h")).toStrictEqual({ + foo: "bar" + }); + expect(require("./i")).toStrictEqual({ + foo: "bar" + }); +}); + +const never = false; +if (never) { + require("./error1"); + require("./error2"); +} diff --git a/test/configCases/loaders/options/infrastructure-log.js b/test/configCases/loaders/options/infrastructure-log.js new file mode 100644 index 00000000000..93b1b75dedb --- /dev/null +++ b/test/configCases/loaders/options/infrastructure-log.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + // We use (1|2), because both contain the problems, but due asynchronous nature the first module can be `error1` or `error2` + /^Pack got invalid because of write to: Compilation\/modules.+loaders[/\\]options[/\\]error(1|2)\.js$/ +]; diff --git a/test/configCases/loaders/options/loader-1.js b/test/configCases/loaders/options/loader-1.js new file mode 100644 index 00000000000..18e183cbbb0 --- /dev/null +++ b/test/configCases/loaders/options/loader-1.js @@ -0,0 +1,12 @@ +const schema = require("./loader-1.options.json"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const options = this.getOptions(schema); + + const json = JSON.stringify(options) + .replace(/\u2028/g, "\\u2028") + .replace(/\u2029/g, "\\u2029"); + + return `module.exports = ${json}`; +}; diff --git a/test/configCases/loaders/options/loader-1.options.json b/test/configCases/loaders/options/loader-1.options.json new file mode 100644 index 00000000000..3c86ba01025 --- /dev/null +++ b/test/configCases/loaders/options/loader-1.options.json @@ -0,0 +1,43 @@ +{ + "additionalProperties": false, + "properties": { + "arg": { + "type": "boolean" + }, + "arg1": { + "type": "null" + }, + "arg2": {}, + "arg3": { + "type": "number" + }, + "arg4": { + "type": "string" + }, + "arg5": { + "type": "array", + "items": { + "type": "number" + } + }, + "arg6": { + "type": "object", + "properties": { + "foo": { + "type": "string" + }, + "bar": { + "type": "object", + "properties": { + "baz": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "type": "object" +} diff --git a/test/configCases/loaders/options/loader-2.js b/test/configCases/loaders/options/loader-2.js new file mode 100644 index 00000000000..faea214da83 --- /dev/null +++ b/test/configCases/loaders/options/loader-2.js @@ -0,0 +1,12 @@ +const schema = require("./loader-2.options.json"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const options = this.getOptions(schema); + + const json = JSON.stringify(options) + .replace(/\u2028/g, "\\u2028") + .replace(/\u2029/g, "\\u2029"); + + return `module.exports = ${json}`; +}; diff --git a/test/configCases/loaders/options/loader-2.options.json b/test/configCases/loaders/options/loader-2.options.json new file mode 100644 index 00000000000..d17814f5fcf --- /dev/null +++ b/test/configCases/loaders/options/loader-2.options.json @@ -0,0 +1,10 @@ +{ + "title": "Custom Loader Name configuration", + "additionalProperties": false, + "properties": { + "arg": { + "enum": [true] + } + }, + "type": "object" +} diff --git a/test/configCases/loaders/options/loader.js b/test/configCases/loaders/options/loader.js new file mode 100644 index 00000000000..d1bc02fcd3c --- /dev/null +++ b/test/configCases/loaders/options/loader.js @@ -0,0 +1,10 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const options = this.getOptions(); + + const json = JSON.stringify(options) + .replace(/\u2028/g, "\\u2028") + .replace(/\u2029/g, "\\u2029"); + + return `module.exports = ${json}`; +}; diff --git a/test/configCases/loaders/options/webpack.config.js b/test/configCases/loaders/options/webpack.config.js new file mode 100644 index 00000000000..f61b8961643 --- /dev/null +++ b/test/configCases/loaders/options/webpack.config.js @@ -0,0 +1,95 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + module: { + rules: [ + { + test: /a\.js$/, + loader: "./loader", + options: { + arg: true, + arg1: null, + arg2: undefined, + arg3: 1234567890, + arg4: "string", + arg5: [1, 2, 3], + arg6: { foo: "value", bar: { baz: "other-value" } } + } + }, + { + test: /b\.js$/, + loader: "./loader-1", + options: { + arg: true, + arg1: null, + arg2: undefined, + arg3: 1234567890, + arg4: "string", + arg5: [1, 2, 3], + arg6: { foo: "value", bar: { baz: "other-value" } } + } + }, + { + test: /c\.js$/, + loader: "./loader-1", + options: JSON.stringify({ + arg: true, + arg1: null, + arg2: undefined, + arg3: 1234567890, + arg4: "string", + arg5: [1, 2, 3], + arg6: { foo: "value", bar: { baz: "other-value" } } + }) + }, + { + test: /d\.js$/, + loader: "./loader-1", + options: "arg4=text" + }, + { + test: /d\.js$/, + loader: "./loader", + options: "" + }, + { + test: /f\.js$/, + loader: "./loader", + options: "name=cheesecake&slices=8&delicious&warm=false" + }, + { + test: /g\.js$/, + loader: "./loader", + options: "%3d=%3D" + }, + { + test: /h\.js$/, + loader: "./loader", + options: "foo=bar" + }, + { + test: /i\.js$/, + loader: "./loader", + options: `${JSON.stringify({ + foo: "bar" + })}` + }, + { + test: /error1\.js$/, + loader: "./loader-1", + options: { + arg6: { foo: "value", bar: { baz: 42 } } + } + }, + { + test: /error2\.js$/, + loader: "./loader-2", + options: { + arg: false + } + } + ] + } +}; diff --git a/test/configCases/loaders/pr-14384/PluginWithLoader.js b/test/configCases/loaders/pr-14384/PluginWithLoader.js new file mode 100644 index 00000000000..d62f193e4c7 --- /dev/null +++ b/test/configCases/loaders/pr-14384/PluginWithLoader.js @@ -0,0 +1,31 @@ +const { NormalModule } = require("webpack"); + +const PLUGIN_NAME = "PluginWithLoader"; +const loaderPath = require.resolve("./loader.js"); + +/** @typedef {import("../../../../").Compiler} Compiler */ + +class PluginWithLoader { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => { + NormalModule.getCompilationHooks(compilation).beforeLoaders.tap( + PLUGIN_NAME, + (loaders, normalModule) => { + if (normalModule.userRequest.indexOf("a.js") !== -1) { + loaders.push({ + loader: loaderPath, + options: {}, + ident: null, + type: null + }); + } + } + ); + }); + } +} + +module.exports = PluginWithLoader; diff --git a/test/configCases/loaders/pr-14384/a.js b/test/configCases/loaders/pr-14384/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/pr-14384/index.js b/test/configCases/loaders/pr-14384/index.js new file mode 100644 index 00000000000..7d6a89b89ad --- /dev/null +++ b/test/configCases/loaders/pr-14384/index.js @@ -0,0 +1,3 @@ +it("successfully loads a file that gets its only loader from a plugins beforeLoaders hook", function() { + expect(require("./a")).toBe("success"); +}); diff --git a/test/configCases/loaders/pr-14384/loader.js b/test/configCases/loaders/pr-14384/loader.js new file mode 100644 index 00000000000..27d54132d70 --- /dev/null +++ b/test/configCases/loaders/pr-14384/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + return `module.exports = "success";`; +}; diff --git a/test/configCases/loaders/pr-14384/webpack.config.js b/test/configCases/loaders/pr-14384/webpack.config.js new file mode 100644 index 00000000000..66130f9b7b7 --- /dev/null +++ b/test/configCases/loaders/pr-14384/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +const PluginWithLoader = require("./PluginWithLoader"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [new PluginWithLoader()] +}; diff --git a/test/configCases/loaders/pre-post-loader/loader1.js b/test/configCases/loaders/pre-post-loader/loader1.js index 71df71135dd..bf6d1335221 100644 --- a/test/configCases/loaders/pre-post-loader/loader1.js +++ b/test/configCases/loaders/pre-post-loader/loader1.js @@ -1,3 +1,4 @@ -module.exports = function(source) { - return source + "module.exports += \" loader1\";\n"; +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return source + 'module.exports += " loader1";\n'; }; diff --git a/test/configCases/loaders/pre-post-loader/loader2.js b/test/configCases/loaders/pre-post-loader/loader2.js index 91497b0978b..b611c84f62b 100644 --- a/test/configCases/loaders/pre-post-loader/loader2.js +++ b/test/configCases/loaders/pre-post-loader/loader2.js @@ -1,3 +1,4 @@ -module.exports = function(source) { - return source + "module.exports += \" loader2\";\n"; +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return source + 'module.exports += " loader2";\n'; }; diff --git a/test/configCases/loaders/pre-post-loader/loader3.js b/test/configCases/loaders/pre-post-loader/loader3.js index 32f164287a0..ec526cbac53 100644 --- a/test/configCases/loaders/pre-post-loader/loader3.js +++ b/test/configCases/loaders/pre-post-loader/loader3.js @@ -1,3 +1,4 @@ -module.exports = function(source) { - return source + "module.exports += \" loader3\";\n"; +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { + return source + 'module.exports += " loader3";\n'; }; diff --git a/test/configCases/loaders/pre-post-loader/webpack.config.js b/test/configCases/loaders/pre-post-loader/webpack.config.js index 5a229d44a8d..2ad00d8a5e2 100644 --- a/test/configCases/loaders/pre-post-loader/webpack.config.js +++ b/test/configCases/loaders/pre-post-loader/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ diff --git a/test/configCases/loaders/remaining-request/b.js b/test/configCases/loaders/remaining-request/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/remaining-request/c.js b/test/configCases/loaders/remaining-request/c.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/remaining-request/index.js b/test/configCases/loaders/remaining-request/index.js index 53247f52994..d3c3672be06 100644 --- a/test/configCases/loaders/remaining-request/index.js +++ b/test/configCases/loaders/remaining-request/index.js @@ -1,3 +1,11 @@ -it("should correctly pass complex query object with remaining request", function() { +it("should correctly pass complex query object with remaining request (with custom ident)", function() { expect(require("./a")).toBe("ok"); }); + +it("should correctly pass complex query object with remaining request (with default ident)", function() { + expect(require("./b")).toBe("ok"); +}); + +it("should correctly pass complex query object with remaining request (with shorthand syntax and default ident)", function() { + expect(require("./c")).toBe("ok"); +}); diff --git a/test/configCases/loaders/remaining-request/loader1.js b/test/configCases/loaders/remaining-request/loader1.js index 42fea46336a..0d2fcc8b593 100644 --- a/test/configCases/loaders/remaining-request/loader1.js +++ b/test/configCases/loaders/remaining-request/loader1.js @@ -1,3 +1,6 @@ -module.exports.pitch = function(remainingRequest) { - return "module.exports = require(" + JSON.stringify("!!" + remainingRequest) + ");"; +/** @type {import("../../../../").PitchLoaderDefinitionFunction} */ +module.exports.pitch = function (remainingRequest) { + return ( + "module.exports = require(" + JSON.stringify("!!" + remainingRequest) + ");" + ); }; diff --git a/test/configCases/loaders/remaining-request/loader2.js b/test/configCases/loaders/remaining-request/loader2.js index b5b133a9208..40788042801 100644 --- a/test/configCases/loaders/remaining-request/loader2.js +++ b/test/configCases/loaders/remaining-request/loader2.js @@ -1,3 +1,6 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ f(): any }>} */ +module.exports = function (source) { + if (typeof this.query === "string") + throw new Error("query must be an object"); return "module.exports = " + JSON.stringify(this.query.f()); }; diff --git a/test/configCases/loaders/remaining-request/webpack.config.js b/test/configCases/loaders/remaining-request/webpack.config.js index 9119ae9401f..65e416b36f2 100644 --- a/test/configCases/loaders/remaining-request/webpack.config.js +++ b/test/configCases/loaders/remaining-request/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -9,12 +12,39 @@ module.exports = { loader: "./loader2", ident: "loader2", options: { - f: function() { + f() { return "ok"; } } } ] + }, + { + test: /b\.js$/, + use: [ + "./loader1", + { + loader: "./loader2", + options: { + f() { + return "ok"; + } + } + } + ] + }, + { + test: /c\.js$/, + use: "./loader1" + }, + { + test: /c\.js$/, + loader: "./loader2", + options: { + f() { + return "ok"; + } + } } ] } diff --git a/test/configCases/loaders/resolve/a.js b/test/configCases/loaders/resolve/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/resolve/b.js b/test/configCases/loaders/resolve/b.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/loaders/resolve/index.js b/test/configCases/loaders/resolve/index.js new file mode 100644 index 00000000000..5c63c80c4d3 --- /dev/null +++ b/test/configCases/loaders/resolve/index.js @@ -0,0 +1,3 @@ +it("resolve should work in loader context", function() { + expect(require("./a")).toBe("b.js"); +}); diff --git a/test/configCases/loaders/resolve/loader.js b/test/configCases/loaders/resolve/loader.js new file mode 100644 index 00000000000..36d89e8c312 --- /dev/null +++ b/test/configCases/loaders/resolve/loader.js @@ -0,0 +1,10 @@ +const path = require("path"); + +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + const callback = this.async(); + + this.resolve(this.context, "./b.js", (err, result) => { + callback(err, `module.exports = ${JSON.stringify(path.basename(/** @type {string} */ (result)))};`) + }); +}; diff --git a/test/configCases/loaders/resolve/webpack.config.js b/test/configCases/loaders/resolve/webpack.config.js new file mode 100644 index 00000000000..09a281fe590 --- /dev/null +++ b/test/configCases/loaders/resolve/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + module: { + rules: [ + { + test: /a\.js$/, + use: "./loader" + } + ] + } +}; diff --git a/test/configCases/managedPaths/futureDefaults/index.js b/test/configCases/managedPaths/futureDefaults/index.js new file mode 100644 index 00000000000..f191f157474 --- /dev/null +++ b/test/configCases/managedPaths/futureDefaults/index.js @@ -0,0 +1,5 @@ +import value from "package"; + +it("should work", () => { + expect(value).toBe(42); +}); diff --git a/test/configCases/managedPaths/futureDefaults/node_modules/package/index.js b/test/configCases/managedPaths/futureDefaults/node_modules/package/index.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/managedPaths/futureDefaults/node_modules/package/index.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/managedPaths/futureDefaults/node_modules/package/package.json b/test/configCases/managedPaths/futureDefaults/node_modules/package/package.json new file mode 100644 index 00000000000..75b93e3b25a --- /dev/null +++ b/test/configCases/managedPaths/futureDefaults/node_modules/package/package.json @@ -0,0 +1,4 @@ +{ + "name": "package", + "version": "1.0.0" +} diff --git a/test/configCases/managedPaths/futureDefaults/webpack.config.js b/test/configCases/managedPaths/futureDefaults/webpack.config.js new file mode 100644 index 00000000000..b37a749727c --- /dev/null +++ b/test/configCases/managedPaths/futureDefaults/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + experiments: { + futureDefaults: true + } +}; diff --git a/test/configCases/mangle/exports-info-can-mangle/a.js b/test/configCases/mangle/exports-info-can-mangle/a.js new file mode 100644 index 00000000000..25540f9cda1 --- /dev/null +++ b/test/configCases/mangle/exports-info-can-mangle/a.js @@ -0,0 +1,2 @@ +export const aaa = "aaa"; +export const aaaCanMangle = __webpack_exports_info__.aaa.canMangle; diff --git a/test/configCases/mangle/exports-info-can-mangle/b.js b/test/configCases/mangle/exports-info-can-mangle/b.js new file mode 100644 index 00000000000..126daf82d9a --- /dev/null +++ b/test/configCases/mangle/exports-info-can-mangle/b.js @@ -0,0 +1,2 @@ +export const bbb = "bbb"; +export const bbbCanMangle = __webpack_exports_info__.bbb.canMangle; diff --git a/test/configCases/mangle/exports-info-can-mangle/c.js b/test/configCases/mangle/exports-info-can-mangle/c.js new file mode 100644 index 00000000000..68bbacdbe2b --- /dev/null +++ b/test/configCases/mangle/exports-info-can-mangle/c.js @@ -0,0 +1,6 @@ +export * as ca from "./a"; +export * as cb from "./b"; +export const caCanMangle = __webpack_exports_info__.ca.canMangle; +export const cbCanMangle = __webpack_exports_info__.cb.canMangle; +export const ca_aaaCanMangle = __webpack_exports_info__.ca.aaa.canMangle; +export const cb_bbbCanMangle = __webpack_exports_info__.cb.bbb.canMangle; \ No newline at end of file diff --git a/test/configCases/mangle/exports-info-can-mangle/index.js b/test/configCases/mangle/exports-info-can-mangle/index.js new file mode 100644 index 00000000000..69f2d5099a7 --- /dev/null +++ b/test/configCases/mangle/exports-info-can-mangle/index.js @@ -0,0 +1,23 @@ +import { aaa, aaaCanMangle } from "./a"; +import * as b from "./b" +import { ca, cb, caCanMangle, cbCanMangle, ca_aaaCanMangle, cb_bbbCanMangle } from "./c"; + +it("__webpack_exports_info__.xxx.canMangle should be correct", () => { + expect(aaa).toBe("aaa"); + expect(aaaCanMangle).toBe(true); + + const { bbb, bbbCanMangle } = b; + expect(bbb).toBe("bbb"); + expect(bbbCanMangle).toBe(true); + + expect(caCanMangle).toBe(true); + expect(cbCanMangle).toBe(true); +}); + +it("__webpack_exports_info__.xxx.yyy.canMangle should be correct", () => { + expect(ca.aaa).toBe("aaa"); + expect(ca_aaaCanMangle).toBe(aaaCanMangle); + + expect(cb.bbb).toBe("bbb"); + expect(cb_bbbCanMangle).toBe(b.bbbCanMangle); +}); diff --git a/test/configCases/mangle/exports-info-can-mangle/webpack.config.js b/test/configCases/mangle/exports-info-can-mangle/webpack.config.js new file mode 100644 index 00000000000..a31a5193b3a --- /dev/null +++ b/test/configCases/mangle/exports-info-can-mangle/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + mangleExports: true, + usedExports: true, + providedExports: true + } +}; diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/data.json b/test/configCases/mangle/mangle-with-destructuring-assignment/data.json new file mode 100644 index 00000000000..3248ec2c36d --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/data.json @@ -0,0 +1,19 @@ +{ + "obj": { + "arr": [ + { + "prop1": 1, + "prop2": 2 + }, + { + "prop3": 3, + "prop4": 4 + }, + { + "prop5": 5, + "prop6": 6 + } + ] + }, + "foo": "foo" +} diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/index.js b/test/configCases/mangle/mangle-with-destructuring-assignment/index.js new file mode 100644 index 00000000000..a1db0b0b807 --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/index.js @@ -0,0 +1,94 @@ +import path from "path"; +import * as module from "./module"; +import { obj3, obj3CanMangle, obj4, obj4CanMangle } from "./reexport?side-effects" // enable side effects to ensure reexport is not skipped +import data from "./data.json"; +import data2 from "./data.json?2"; + +it("should mangle export when destructuring module", () => { + const { obj: { a, b }, objCanMangle } = module + expect(a).toBe("a"); + expect(b).toBe("b"); + expect(objCanMangle).toBe(true) +}); + +it("should mangle export when destructuring module's property", () => { + const { a, b } = module.obj2 + const { obj2CanMangle } = module + expect(a).toBe("a"); + expect(b).toBe("b"); + expect(obj2CanMangle).toBe(true) +}); + +it("should mangle export when using module dot property", () => { + expect(module.aaa).toBe("aaa"); + expect(module.aaaCanMangle).toBe(true) +}); + +it("should mangle export when destructuring module's property is a module", () => { + const { aaa, bbb } = obj3; + expect(aaa).toBe("a"); + expect(bbb).toBe("b"); + expect(obj3CanMangle).toBe(true) +}); + +it("should not mangle export when destructuring module's nested property is a module (used in unknown way)", () => { + const { nested: { obj5, obj5CanMangle } } = obj4; + expect(obj5.aaa).toBe("a"); + expect(obj5.bbb).toBe("b"); + expect(obj4CanMangle).toBe(true); + expect(obj5CanMangle).toBe(false); // obj5 is used in unknown way +}); + +it("should mangle default in namespace import", async () => { + const { default: foo, defaultCanMangle } = module; + expect(foo).toBe("default"); + expect(defaultCanMangle).toBe(true); +}); + +it("should mangle when destructuring json", async () => { + const { obj: { + "arr": [ + { prop1: p1 = 0 } + ] + } } = data; + expect(p1).toBe(1); + + const values = []; + ({ + foo: values[0], + obj: { + ["a" + "r" + "r"]: { + length: values[1], + } + } + } = data); + expect(values[0]).toBe("foo"); + expect(values[1]).toBe(3); + + const generatedJson = __non_webpack_require__(path.resolve(__dirname, "data.json.js")); + expect(generatedJson).toEqual({ + "W": { + "Q": [ + { "X": 1 }, + 0, + 0, + ] + }, + "p": "foo" + }); +}); + +it("should mangle when destructuring json 2", async () => { + const { prop1, prop2 } = data2.obj.arr[0]; + expect(prop1).toBe(1); + expect(prop2).toBe(2); + + const generatedJson = __non_webpack_require__(path.resolve(__dirname, "data.json_2.js")); + expect(generatedJson).toEqual({ + "W": { + "Q": [ + { "X": 1, "Q": 2 }, + ], + } + }); +}); diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/module.js b/test/configCases/mangle/mangle-with-destructuring-assignment/module.js new file mode 100644 index 00000000000..d3b887767ad --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/module.js @@ -0,0 +1,11 @@ +export const aaa = "aaa"; +export const aaaCanMangle = __webpack_exports_info__.aaa.canMangle; + +export const obj = { a: "a", b: "b" } +export const objCanMangle = __webpack_exports_info__.obj.canMangle; + +export const obj2 = { a: "a", b: "b" } +export const obj2CanMangle = __webpack_exports_info__.obj2.canMangle; + +export default "default"; +export const defaultCanMangle = __webpack_exports_info__.default.canMangle; diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/module2.js b/test/configCases/mangle/mangle-with-destructuring-assignment/module2.js new file mode 100644 index 00000000000..e6951b14093 --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/module2.js @@ -0,0 +1,2 @@ +export const aaa = "a"; +export const bbb = "b"; diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/module3.js b/test/configCases/mangle/mangle-with-destructuring-assignment/module3.js new file mode 100644 index 00000000000..e6951b14093 --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/module3.js @@ -0,0 +1,2 @@ +export const aaa = "a"; +export const bbb = "b"; diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/reexport.js b/test/configCases/mangle/mangle-with-destructuring-assignment/reexport.js new file mode 100644 index 00000000000..a5ab8d9c607 --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/reexport.js @@ -0,0 +1,6 @@ +export * as obj3 from "./module2" +export const obj3CanMangle = __webpack_exports_info__.obj3.canMangle; + +import * as reexport2 from "./reexport2?side-effects" +export const obj4 = { nested: reexport2 } +export const obj4CanMangle = __webpack_exports_info__.reexport2.canMangle; diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/reexport2.js b/test/configCases/mangle/mangle-with-destructuring-assignment/reexport2.js new file mode 100644 index 00000000000..da9c4eb705a --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/reexport2.js @@ -0,0 +1,2 @@ +export * as obj5 from "./module3" +export const obj5CanMangle = __webpack_exports_info__.obj5.canMangle; diff --git a/test/configCases/mangle/mangle-with-destructuring-assignment/webpack.config.js b/test/configCases/mangle/mangle-with-destructuring-assignment/webpack.config.js new file mode 100644 index 00000000000..9ac566372e4 --- /dev/null +++ b/test/configCases/mangle/mangle-with-destructuring-assignment/webpack.config.js @@ -0,0 +1,52 @@ +"use strict"; + +/** @typedef {import("webpack").CodeGenerationResults} CodeGenerationResults */ +/** @typedef {import("webpack-sources").Source} Source */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + resourceQuery: /side-effects/, + sideEffects: true + } + ] + }, + optimization: { + mangleExports: true, + usedExports: true, + providedExports: true, + concatenateModules: false + }, + plugins: [ + function getJsonCodeGeneratedSource(compiler) { + compiler.hooks.compilation.tap( + getJsonCodeGeneratedSource.name, + (compilation) => { + compilation.hooks.processAssets.tap( + getJsonCodeGeneratedSource.name, + () => { + for (const module of compilation.modules) { + if (module.type === "json") { + const { sources } = + /** @type {CodeGenerationResults} */ + (compilation.codeGenerationResults).get(module, "main"); + const source = + /** @type {Source} */ + (sources.get("javascript")); + const file = compilation.getAssetPath("[name].js", { + filename: `${module + .readableIdentifier(compilation.requestShortener) + .replace(/[?#]/g, "_")}.js` + }); + compilation.emitAsset(file, source); + } + } + } + ); + } + ); + } + ] +}; diff --git a/test/configCases/mangle/mangle-with-object-prop/commonjs.js b/test/configCases/mangle/mangle-with-object-prop/commonjs.js new file mode 100644 index 00000000000..fd733318b13 --- /dev/null +++ b/test/configCases/mangle/mangle-with-object-prop/commonjs.js @@ -0,0 +1,10 @@ +exports.abc = "abc"; +exports.def = "def"; +exports.setToString = () => { + exports.toString = () => "toString"; +}; +exports.moduleId = module.id; +exports.a = "single char"; +exports["="] = "single char non-identifier"; +exports.$1 = "double char"; +exports.__1 = "3 chars"; diff --git a/test/configCases/mangle/mangle-with-object-prop/index.js b/test/configCases/mangle/mangle-with-object-prop/index.js new file mode 100644 index 00000000000..a1b4cbf45b0 --- /dev/null +++ b/test/configCases/mangle/mangle-with-object-prop/index.js @@ -0,0 +1,49 @@ +import { moduleId, setToString, toString, abc, a, $1, __1 } from "./module"; +const moduleId2 = require("./commonjs").moduleId; +const toString2 = require("./commonjs").toString; +const setToString2 = require("./commonjs").setToString; +const abc2 = require("./commonjs").abc; +const a2 = require("./commonjs").a; +const equals2 = require("./commonjs")["="]; +const $12 = require("./commonjs").$1; +const __12 = require("./commonjs").__1; + +it("should mangle names and remove exports even with toString named export (ESM)", () => { + expect(abc).toBe("abc"); + expect(toString).toBe(undefined); + setToString(); + expect(toString()).toBe("toString"); + expect(a).toBe("single char"); + expect($1).toBe("double char"); + expect(__1).toBe("3 chars"); + expect( + Object.keys(require.cache[moduleId].exports) + .map(p => p.length) + .sort() + ).toEqual( + OPTIMIZATION === "deterministic" + ? [1, 2, 2, 2, 2, 2, 2] + : [1, 1, 1, 1, 1, 1, 1] + ); +}); + +it("should mangle names and remove exports even with toString named export (CJS)", () => { + expect(abc2).toBe("abc"); + expect(toString2).toBe(Object.prototype.toString); + setToString2(); + const toString3 = require("./commonjs").toString; + expect(toString3()).toBe("toString"); + expect(a2).toBe("single char"); + expect(equals2).toBe("single char non-identifier"); + expect($12).toBe("double char"); + expect(__12).toBe("3 chars"); + expect( + Object.keys(require.cache[moduleId2].exports) + .map(p => p.length) + .sort() + ).toEqual( + OPTIMIZATION === "deterministic" + ? [1, 2, 2, 2, 2, 2, 2, 8] + : [1, 1, 1, 1, 1, 1, 1, 8] + ); +}); diff --git a/test/configCases/mangle/mangle-with-object-prop/module.js b/test/configCases/mangle/mangle-with-object-prop/module.js new file mode 100644 index 00000000000..3c72b8d2c5c --- /dev/null +++ b/test/configCases/mangle/mangle-with-object-prop/module.js @@ -0,0 +1,10 @@ +export const abc = "abc"; +export const def = "def"; +export let toString; +export const setToString = () => { + toString = () => "toString"; +}; +export const moduleId = module.id; +export const a = "single char"; +export const $1 = "double char"; +export const __1 = "3 chars"; diff --git a/test/configCases/mangle/mangle-with-object-prop/test.config.js b/test/configCases/mangle/mangle-with-object-prop/test.config.js new file mode 100644 index 00000000000..a8f47aaf1e3 --- /dev/null +++ b/test/configCases/mangle/mangle-with-object-prop/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./deterministic.js", "./size.js"]; + } +}; diff --git a/test/configCases/mangle/mangle-with-object-prop/webpack.config.js b/test/configCases/mangle/mangle-with-object-prop/webpack.config.js new file mode 100644 index 00000000000..f74290543cf --- /dev/null +++ b/test/configCases/mangle/mangle-with-object-prop/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +const { DefinePlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + output: { + filename: "deterministic.js" + }, + optimization: { + mangleExports: true, + usedExports: true, + providedExports: true + }, + plugins: [ + new DefinePlugin({ + OPTIMIZATION: JSON.stringify("deterministic") + }) + ] + }, + { + output: { + filename: "size.js" + }, + optimization: { + mangleExports: "size", + usedExports: true, + providedExports: true + }, + plugins: [ + new DefinePlugin({ + OPTIMIZATION: JSON.stringify("size") + }) + ] + } +]; diff --git a/test/configCases/mangle/mangle-with-re-export-as-default/index.js b/test/configCases/mangle/mangle-with-re-export-as-default/index.js new file mode 100644 index 00000000000..3101663c81a --- /dev/null +++ b/test/configCases/mangle/mangle-with-re-export-as-default/index.js @@ -0,0 +1,6 @@ +import namespace from "./re-exports"; + +it("should mangle exports imported", () => { + const { foo } = namespace; + expect(foo).toBe('foo') +}); diff --git a/test/configCases/mangle/mangle-with-re-export-as-default/module.js b/test/configCases/mangle/mangle-with-re-export-as-default/module.js new file mode 100644 index 00000000000..3329a7d972f --- /dev/null +++ b/test/configCases/mangle/mangle-with-re-export-as-default/module.js @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/test/configCases/mangle/mangle-with-re-export-as-default/re-exports.js b/test/configCases/mangle/mangle-with-re-export-as-default/re-exports.js new file mode 100644 index 00000000000..a29514f469b --- /dev/null +++ b/test/configCases/mangle/mangle-with-re-export-as-default/re-exports.js @@ -0,0 +1,3 @@ +import * as namespace from './module'; + +export { namespace as default }; diff --git a/test/configCases/mangle/mangle-with-re-export-as-default/webpack.config.js b/test/configCases/mangle/mangle-with-re-export-as-default/webpack.config.js new file mode 100644 index 00000000000..8f8b84b5769 --- /dev/null +++ b/test/configCases/mangle/mangle-with-re-export-as-default/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + mangleExports: true, + usedExports: true, + providedExports: true, + sideEffects: false // disable reexports optimization + } +}; diff --git a/test/configCases/module-name/different-issuers-for-same-module/loader-a.js b/test/configCases/module-name/different-issuers-for-same-module/loader-a.js index bd8581ca4a4..4e8352ee90e 100644 --- a/test/configCases/module-name/different-issuers-for-same-module/loader-a.js +++ b/test/configCases/module-name/different-issuers-for-same-module/loader-a.js @@ -1,3 +1,4 @@ -module.exports = function(src) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (src) { return `module.exports = "loader-a" + module.id`; }; diff --git a/test/configCases/module-name/different-issuers-for-same-module/loader-b.js b/test/configCases/module-name/different-issuers-for-same-module/loader-b.js index 5365e2fd355..7fa193f020f 100644 --- a/test/configCases/module-name/different-issuers-for-same-module/loader-b.js +++ b/test/configCases/module-name/different-issuers-for-same-module/loader-b.js @@ -1,3 +1,4 @@ -module.exports = function(src) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (src) { return `module.exports = "loader-b" + module.id`; }; diff --git a/test/configCases/module-name/different-issuers-for-same-module/webpack.config.js b/test/configCases/module-name/different-issuers-for-same-module/webpack.config.js index 6527d721c87..c3d1a4c12aa 100644 --- a/test/configCases/module-name/different-issuers-for-same-module/webpack.config.js +++ b/test/configCases/module-name/different-issuers-for-same-module/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "development", entry: ["./a", "./b", "./test"], diff --git a/test/configCases/module/check-defaults/errors.js b/test/configCases/module/check-defaults/errors.js new file mode 100644 index 00000000000..db651f87158 --- /dev/null +++ b/test/configCases/module/check-defaults/errors.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + [/For the selected environment is no default ESM chunk format available/] +]; diff --git a/test/configCases/module/check-defaults/index.js b/test/configCases/module/check-defaults/index.js new file mode 100644 index 00000000000..3cd08c4fc92 --- /dev/null +++ b/test/configCases/module/check-defaults/index.js @@ -0,0 +1,3 @@ +it("should compile and run", () => { + expect(import.meta.url).toBe(import.meta.url); +}); diff --git a/test/configCases/module/check-defaults/test.filter.js b/test/configCases/module/check-defaults/test.filter.js new file mode 100644 index 00000000000..96ddb2717f2 --- /dev/null +++ b/test/configCases/module/check-defaults/test.filter.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = (config) => !config.cache; diff --git a/test/configCases/module/check-defaults/webpack.config.js b/test/configCases/module/check-defaults/webpack.config.js new file mode 100644 index 00000000000..b40afb54543 --- /dev/null +++ b/test/configCases/module/check-defaults/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + experiments: { + outputModule: true + }, + devtool: false, + target: "web" + }, + { + experiments: { + outputModule: true + }, + devtool: false, + target: "node10" + } +]; diff --git a/test/configCases/module/chunk-format-fallback/dep.js b/test/configCases/module/chunk-format-fallback/dep.js new file mode 100644 index 00000000000..6120538c7f3 --- /dev/null +++ b/test/configCases/module/chunk-format-fallback/dep.js @@ -0,0 +1 @@ +export const main = 'MAIN'; diff --git a/test/configCases/module/chunk-format-fallback/index.js b/test/configCases/module/chunk-format-fallback/index.js new file mode 100644 index 00000000000..4017169c6ea --- /dev/null +++ b/test/configCases/module/chunk-format-fallback/index.js @@ -0,0 +1,5 @@ +import { main } from "./dep.js"; + +it("should work by default", () => { + expect(main).toBe("MAIN"); +}); diff --git a/test/configCases/module/chunk-format-fallback/test.config.js b/test/configCases/module/chunk-format-fallback/test.config.js new file mode 100644 index 00000000000..75989e21626 --- /dev/null +++ b/test/configCases/module/chunk-format-fallback/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["runtime.mjs", "./main.mjs"]; + } +}; diff --git a/test/configCases/module/chunk-format-fallback/webpack.config.js b/test/configCases/module/chunk-format-fallback/webpack.config.js new file mode 100644 index 00000000000..fb84665e2ef --- /dev/null +++ b/test/configCases/module/chunk-format-fallback/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + main: { + import: "./index.js", + library: { type: "module" } + } + }, + output: { + filename: "[name].mjs" + }, + optimization: { + runtimeChunk: "single" + }, + experiments: { + outputModule: true + }, + mode: "development", + devtool: false +}; diff --git a/test/configCases/module/circular-externals/external-a.mjs b/test/configCases/module/circular-externals/external-a.mjs new file mode 100644 index 00000000000..2785f5f3eed --- /dev/null +++ b/test/configCases/module/circular-externals/external-a.mjs @@ -0,0 +1,10 @@ +import { externalValue as valueB, getOtherExternal as getB } from "./external-b.mjs"; + +export const externalValue = "external-A"; + +export function getOtherExternal() { + return valueB; +} + +// Re-export to test circular re-exports +export { getB as getOtherValue }; diff --git a/test/configCases/module/circular-externals/external-b.mjs b/test/configCases/module/circular-externals/external-b.mjs new file mode 100644 index 00000000000..06ad1a9c103 --- /dev/null +++ b/test/configCases/module/circular-externals/external-b.mjs @@ -0,0 +1,10 @@ +import { externalValue as valueA, getOtherExternal as getA } from "./external-a.mjs"; + +export const externalValue = "external-B"; + +export function getOtherExternal() { + return valueA; +} + +// Re-export to test circular re-exports +export { getA as getOtherValue }; diff --git a/test/configCases/module/circular-externals/index.js b/test/configCases/module/circular-externals/index.js new file mode 100644 index 00000000000..cf77fd392c0 --- /dev/null +++ b/test/configCases/module/circular-externals/index.js @@ -0,0 +1,51 @@ +import { valueA, getFromExternalA, callB } from "./module-a.js"; +import { valueB, getFromExternalB, callA } from "./module-b.js"; +import { externalValue as directExternalA } from "external-module-a"; +import { externalValue as directExternalB } from "external-module-b"; + +it("should handle circular dependencies between internal modules", () => { + expect(valueA).toBe("module-A"); + expect(valueB).toBe("module-B"); + expect(callB()).toBe("module-B"); + expect(callA()).toBe("module-A"); +}); + +it("should handle imports from external modules", () => { + expect(getFromExternalA()).toBe("external-A"); + expect(getFromExternalB()).toBe("external-B"); +}); + +it("should handle direct imports from external modules", () => { + expect(directExternalA).toBe("external-A"); + expect(directExternalB).toBe("external-B"); +}); + +// ESM external modules with circular dependencies +it("should maintain live bindings for ESM external modules", async () => { + // Import external modules that have circular dependencies + const moduleA = await import("external-module-a"); + const moduleB = await import("external-module-b"); + + // Verify that circular dependencies are resolved correctly + expect(moduleA.externalValue).toBe("external-A"); + expect(moduleB.externalValue).toBe("external-B"); + + // Verify that re-exports work correctly in circular scenarios + expect(moduleA.getOtherValue).toBeDefined(); + expect(moduleB.getOtherValue).toBeDefined(); + + // Test that the modules maintain their identity (live bindings) + expect(await import("external-module-a")).toBe(moduleA); + expect(await import("external-module-b")).toBe(moduleB); +}); + +// Edge case: Multiple imports of the same external module +it("should handle multiple imports of circular external modules", () => { + // This tests that the runtime module correctly caches external modules + const firstImportA = directExternalA; + const secondImportA = getFromExternalA(); + + // Both should reference the same value + expect(firstImportA).toBe(secondImportA); + expect(firstImportA).toBe("external-A"); +}); diff --git a/test/configCases/module/circular-externals/module-a.js b/test/configCases/module/circular-externals/module-a.js new file mode 100644 index 00000000000..3d62411234e --- /dev/null +++ b/test/configCases/module/circular-externals/module-a.js @@ -0,0 +1,12 @@ +import { valueB } from "./module-b.js"; +import { externalValue } from "external-module-a"; + +export const valueA = "module-A"; + +export function getFromExternalA() { + return externalValue; +} + +export function callB() { + return valueB; +} diff --git a/test/configCases/module/circular-externals/module-b.js b/test/configCases/module/circular-externals/module-b.js new file mode 100644 index 00000000000..8e68f59655a --- /dev/null +++ b/test/configCases/module/circular-externals/module-b.js @@ -0,0 +1,12 @@ +import { valueA } from "./module-a.js"; +import { externalValue } from "external-module-b"; + +export const valueB = "module-B"; + +export function getFromExternalB() { + return externalValue; +} + +export function callA() { + return valueA; +} diff --git a/test/configCases/module/circular-externals/test.config.js b/test/configCases/module/circular-externals/test.config.js new file mode 100644 index 00000000000..04d5e6a4b35 --- /dev/null +++ b/test/configCases/module/circular-externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./main.mjs"; + } +}; diff --git a/test/configCases/module/circular-externals/webpack.config.js b/test/configCases/module/circular-externals/webpack.config.js new file mode 100644 index 00000000000..beb34577a43 --- /dev/null +++ b/test/configCases/module/circular-externals/webpack.config.js @@ -0,0 +1,67 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + entry: "./index.js", + experiments: { + outputModule: true + }, + output: { + module: true, + library: { + type: "module" + }, + filename: "[name].mjs", + chunkFormat: "module" + }, + externals: { + "external-module-a": "module ./external-a.mjs", + "external-module-b": "module ./external-b.mjs" + }, + externalsType: "module", + optimization: { + concatenateModules: false + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "copy-external-files", + (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-external-files", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + // Read the external module files + const externalA = fs.readFileSync( + path.join(__dirname, "external-a.mjs"), + "utf8" + ); + const externalB = fs.readFileSync( + path.join(__dirname, "external-b.mjs"), + "utf8" + ); + + // Emit them as assets + compilation.emitAsset( + "external-a.mjs", + new compiler.webpack.sources.RawSource(externalA) + ); + compilation.emitAsset( + "external-b.mjs", + new compiler.webpack.sources.RawSource(externalB) + ); + } + ); + } + ); + } + } + ] +}; diff --git a/test/configCases/module/consume-webpack-runtime/index.js b/test/configCases/module/consume-webpack-runtime/index.js new file mode 100644 index 00000000000..d659f0b7f4c --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/index.js @@ -0,0 +1,65 @@ +import { __webpack_require__ as namedUse } from './runtime-export-named' +import defaultUse from './runtime-export-default' +import { __webpack_require__ as namedDeclUse } from './runtime-export-decl' +import { __webpack_require__ as objectRequire, __webpack_exports__ as objectExport } from './runtime-single-require-and-export' +import defaultUseNested from './runtime-multiple-nested' +import "./runtime-arrow-scope"; + +it("should compile and run", () => { + expect(namedUse()).toBe(42); + expect(defaultUse()).toBe(42); + expect(namedDeclUse()).toBe(42); + expect(objectRequire.foo).toBe(42); + expect(objectExport.foo).toBe(42); + expect(defaultUseNested().foo).toBe(42); + + const path = __non_webpack_require__('path') + const fs = __non_webpack_require__('fs') + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle0.js'), 'utf-8'); + const NESTED_RE = /__nested_webpack_require_([^_]+)__/g; + expect(content.match(NESTED_RE).length).toBe(17); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle0.js'), 'utf-8'); + const NESTED_RE = /__[n]ested_webpack_exports__/g; + expect(content.match(NESTED_RE).length).toBe(2); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle1.js'), 'utf-8'); + const NESTED_RE = /__nested_webpack_require_([^_]+)__/g; + expect(content.match(NESTED_RE).length).toBe(19); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle1.js'), 'utf-8'); + const NESTED_RE = /__[n]ested_webpack_exports__/g; + expect(content.match(NESTED_RE).length).toBe(2); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle2.js'), 'utf-8'); + const NESTED_RE = /__nested_webpack_require_([^_]+)__/g; + expect(content.match(NESTED_RE).length).toBe(17); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle2.js'), 'utf-8'); + const NESTED_RE = /__[n]ested_webpack_exports__/g; + expect(content.match(NESTED_RE).length).toBe(2); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle3.js'), 'utf-8'); + const NESTED_RE = /__nested_webpack_require_([^_]+)__/g; + expect(content.match(NESTED_RE).length).toBe(19); + } + + { + const content = fs.readFileSync(path.resolve(__dirname, './bundle3.js'), 'utf-8'); + const NESTED_RE = /__[n]ested_webpack_exports__/g; + expect(content.match(NESTED_RE).length).toBe(2); + } +}); diff --git a/test/configCases/module/consume-webpack-runtime/runtime-arrow-scope.js b/test/configCases/module/consume-webpack-runtime/runtime-arrow-scope.js new file mode 100644 index 00000000000..5019d0188e0 --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/runtime-arrow-scope.js @@ -0,0 +1,16 @@ +function __webpack_require__() { + throw new Error("Should be unreached"); +} + +const modules = [ + // `__webpack_require__` as arrow fn params should be replaced + ((__webpack_require__) => { + require("./shared"); + try{ + __webpack_require__() + } catch {} + + }) +]; + +modules[0](__webpack_require__); diff --git a/test/configCases/module/consume-webpack-runtime/runtime-export-decl.js b/test/configCases/module/consume-webpack-runtime/runtime-export-decl.js new file mode 100644 index 00000000000..fc4ae63702f --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/runtime-export-decl.js @@ -0,0 +1,3 @@ +export function __webpack_require__() { return 42} +__webpack_require__.m = () => {} + diff --git a/test/configCases/module/consume-webpack-runtime/runtime-export-default.js b/test/configCases/module/consume-webpack-runtime/runtime-export-default.js new file mode 100644 index 00000000000..099b4ca5d14 --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/runtime-export-default.js @@ -0,0 +1,3 @@ +function __webpack_require__() {return 42} +__webpack_require__.m = () => {} +export default __webpack_require__ diff --git a/test/configCases/module/consume-webpack-runtime/runtime-export-named.js b/test/configCases/module/consume-webpack-runtime/runtime-export-named.js new file mode 100644 index 00000000000..39dcccc8c03 --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/runtime-export-named.js @@ -0,0 +1,4 @@ + +function __webpack_require__() {return 42} +__webpack_require__.m = () => {} +export {__webpack_require__} diff --git a/test/configCases/module/consume-webpack-runtime/runtime-multiple-nested.js b/test/configCases/module/consume-webpack-runtime/runtime-multiple-nested.js new file mode 100644 index 00000000000..a0397c4ce24 --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/runtime-multiple-nested.js @@ -0,0 +1,6 @@ +function __webpack_require__() { + var __webpack_require__ = { foo: 42 }; + return __webpack_require__; +} + +export default __webpack_require__; diff --git a/test/configCases/module/consume-webpack-runtime/runtime-single-require-and-export.js b/test/configCases/module/consume-webpack-runtime/runtime-single-require-and-export.js new file mode 100644 index 00000000000..e699ee718e2 --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/runtime-single-require-and-export.js @@ -0,0 +1,6 @@ +var __webpack_require__ = { foo: 42 }; +var __webpack_exports__ = { foo: 42 }; + +class Foo {} + +export { __webpack_require__, __webpack_exports__ }; diff --git a/test/configCases/module/consume-webpack-runtime/shared.js b/test/configCases/module/consume-webpack-runtime/shared.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/module/consume-webpack-runtime/webpack.config.js b/test/configCases/module/consume-webpack-runtime/webpack.config.js new file mode 100644 index 00000000000..f2d71e196f8 --- /dev/null +++ b/test/configCases/module/consume-webpack-runtime/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = [ + { + node: false, + mode: "production", + devtool: false, + optimization: { + concatenateModules: true + } + }, + { + node: false, + mode: "production", + devtool: false, + optimization: { + concatenateModules: false + } + }, + { + node: false, + mode: "production", + devtool: "eval", + optimization: { + concatenateModules: true + } + }, + { + node: false, + mode: "production", + devtool: "eval", + optimization: { + concatenateModules: false + } + } +]; diff --git a/test/configCases/module/custom-javascript-parser/index.js b/test/configCases/module/custom-javascript-parser/index.js new file mode 100644 index 00000000000..f046f5e3cbe --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/index.js @@ -0,0 +1,25 @@ +import { value as value1 } from './module1' +const value2 = require('./module2') +const value3 = require('./module3') +const value4 = require('./module4') + +let value = 42 +let src_value = 43 +let src_src_value = 44 +let Symbol = 'Symbol' + +it('inlined module should not leak to non-inlined modules', () => { + // The two variables are in nested scope and could be the candidate names for inline module during renaming. + // The renaming logic should detect them and bypass to avoid the collisions. + const index_src_value = -1 + const index_src_value_0 = -1 + + expect(value1).toBe(undefined) + expect(value).toBe(42) + expect(src_value).toBe(43) + expect(src_src_value).toBe(44) + expect(Symbol).toBe('Symbol') + expect(value2).toBe("undefined") // Should not touch `value` variable in inline module. + expect(value3).toBe("undefined") // Should not touch src_value` in inline module. + expect(value4).toBe("function") // Module variables in inline module should not shadowling global variables. +}) diff --git a/test/configCases/module/custom-javascript-parser/module1.js b/test/configCases/module/custom-javascript-parser/module1.js new file mode 100644 index 00000000000..96539a70735 --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/module1.js @@ -0,0 +1,3 @@ +let value + +export { value } diff --git a/test/configCases/module/custom-javascript-parser/module2.js b/test/configCases/module/custom-javascript-parser/module2.js new file mode 100644 index 00000000000..28cbf2cc962 --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/module2.js @@ -0,0 +1 @@ +module.exports = typeof value diff --git a/test/configCases/module/custom-javascript-parser/module3.js b/test/configCases/module/custom-javascript-parser/module3.js new file mode 100644 index 00000000000..bb38a0e4ad7 --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/module3.js @@ -0,0 +1 @@ +module.exports = typeof src_value diff --git a/test/configCases/module/custom-javascript-parser/module4.js b/test/configCases/module/custom-javascript-parser/module4.js new file mode 100644 index 00000000000..2d1c8a798ac --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/module4.js @@ -0,0 +1 @@ +module.exports = typeof Symbol diff --git a/test/configCases/module/custom-javascript-parser/test.filter.js b/test/configCases/module/custom-javascript-parser/test.filter.js new file mode 100644 index 00000000000..432ffc6131f --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/test.filter.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = () => { + const [major] = process.versions.node.split(".").map(Number); + + return major >= 20; +}; diff --git a/test/configCases/module/custom-javascript-parser/test.js b/test/configCases/module/custom-javascript-parser/test.js new file mode 100644 index 00000000000..2c46d236fd5 --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/test.js @@ -0,0 +1,6 @@ +const fs = require("fs"); +const path = require("path"); + +it("IIFE should present when `avoidEntryIife` is disabled, and avoided when true", () => { + // Should work +}); diff --git a/test/configCases/module/custom-javascript-parser/webpack.config.js b/test/configCases/module/custom-javascript-parser/webpack.config.js new file mode 100644 index 00000000000..71b37416c49 --- /dev/null +++ b/test/configCases/module/custom-javascript-parser/webpack.config.js @@ -0,0 +1,82 @@ +"use strict"; + +const meriyah = require("meriyah"); + +let counter = 0; + +/** @typedef {import("estree").SourceLocation} SourceLocation */ +/** @typedef {import("estree").Program & { start: number, end: number, loc: SourceLocation }} Program */ +/** @typedef {import("estree").Comment & { start: number, end: number, loc: SourceLocation }} Comment */ + +/** + * @param {string} sourceCode source code + * @param {{ sourceType: "module", comments: boolean, locations: boolean, semicolons: boolean }} options options + * @returns {{ ast: Program, comments: Comment[], semicolons: Set }} parsed source code + */ +const parse = (sourceCode, options) => { + /** @type {Comment[]} */ + const comments = []; + const semicolons = new Set(); + /** + * @param {number} pos pos + */ + const addSemicolons = (pos) => { + semicolons.add(pos); + }; + const parseOptions = { + ...options, + module: options.sourceType === "module", + loc: options.locations, + onComment: options.comments ? comments : undefined, + onInsertedSemicolon: options.semicolons ? addSemicolons : undefined + }; + // @ts-expect-error meriyah types for comments are not align with estree + const ast = meriyah.parse(sourceCode, parseOptions); + + counter++; + + // @ts-expect-error meriyah types for ClassExpression is not align with estree + return { ast, comments, semicolons }; +}; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: ["es2020", "node"], + output: { + module: true + }, + module: { + parser: { + javascript: { + parse + } + }, + rules: [ + { + test: /module1\.js$/, + parser: { + parse + } + } + ] + }, + experiments: { + outputModule: true + }, + optimization: { + concatenateModules: true, + avoidEntryIife: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.shutdown.tap("TestPlugin", () => { + // 5 - parse module + // 2 - concatenate module + // 4 - inline + expect(counter).toBe(11); + }); + } + } + ] +}; diff --git a/test/configCases/module/dependOn-entries/common.js b/test/configCases/module/dependOn-entries/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/module/dependOn-entries/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/module/dependOn-entries/index.js b/test/configCases/module/dependOn-entries/index.js new file mode 100644 index 00000000000..2b78af62e60 --- /dev/null +++ b/test/configCases/module/dependOn-entries/index.js @@ -0,0 +1,6 @@ +import common from "./common"; + +it("should compile", () => { + expect(common).toBe("common"); +}); +export default "main"; diff --git a/test/configCases/module/dependOn-entries/separate.js b/test/configCases/module/dependOn-entries/separate.js new file mode 100644 index 00000000000..4b7b9dcb7dd --- /dev/null +++ b/test/configCases/module/dependOn-entries/separate.js @@ -0,0 +1 @@ +export default "separate"; diff --git a/test/configCases/module/dependOn-entries/test.config.js b/test/configCases/module/dependOn-entries/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/dependOn-entries/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/dependOn-entries/webpack.config.js b/test/configCases/module/dependOn-entries/webpack.config.js new file mode 100644 index 00000000000..6f7f6de28ee --- /dev/null +++ b/test/configCases/module/dependOn-entries/webpack.config.js @@ -0,0 +1,41 @@ +"use strict"; + +const EntryPlugin = require("../../../../").EntryPlugin; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js", + dependOn: "shared" + }, + shared: "./common.js" + }, + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: false, + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + } + } + } + }, + plugins: [new EntryPlugin(__dirname, "./separate.js", "main")] +}); diff --git a/test/configCases/module/dependOn-runtime-false/common.js b/test/configCases/module/dependOn-runtime-false/common.js new file mode 100644 index 00000000000..36c81402d01 --- /dev/null +++ b/test/configCases/module/dependOn-runtime-false/common.js @@ -0,0 +1,2 @@ +import separate from "./separate"; +export default separate; \ No newline at end of file diff --git a/test/configCases/module/dependOn-runtime-false/index.js b/test/configCases/module/dependOn-runtime-false/index.js new file mode 100644 index 00000000000..be75161d83a --- /dev/null +++ b/test/configCases/module/dependOn-runtime-false/index.js @@ -0,0 +1,7 @@ +import separate from "./separate"; +import common from "./common"; +it("should compile", () => { + expect(separate).toBe("separate"); + expect(common).toBe("separate"); +}); +export default "main"; diff --git a/test/configCases/module/dependOn-runtime-false/separate.js b/test/configCases/module/dependOn-runtime-false/separate.js new file mode 100644 index 00000000000..4b7b9dcb7dd --- /dev/null +++ b/test/configCases/module/dependOn-runtime-false/separate.js @@ -0,0 +1 @@ +export default "separate"; diff --git a/test/configCases/module/dependOn-runtime-false/test.config.js b/test/configCases/module/dependOn-runtime-false/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/dependOn-runtime-false/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/dependOn-runtime-false/webpack.config.js b/test/configCases/module/dependOn-runtime-false/webpack.config.js new file mode 100644 index 00000000000..2279bdea325 --- /dev/null +++ b/test/configCases/module/dependOn-runtime-false/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js", + dependOn: "shared" + }, + shared: "./common.js" + }, + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: false, + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + } + } + } + } +}); diff --git a/test/configCases/module/dependOn-runtime-single/common.js b/test/configCases/module/dependOn-runtime-single/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/module/dependOn-runtime-single/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/module/dependOn-runtime-single/index.js b/test/configCases/module/dependOn-runtime-single/index.js new file mode 100644 index 00000000000..0f7372a1927 --- /dev/null +++ b/test/configCases/module/dependOn-runtime-single/index.js @@ -0,0 +1,8 @@ +import common from "./common"; +import separate from "./separate"; + +it("should compile", () => { + expect(common).toBe("common"); + expect(separate).toBe("separate"); +}); +export default "main"; diff --git a/test/configCases/module/dependOn-runtime-single/separate.js b/test/configCases/module/dependOn-runtime-single/separate.js new file mode 100644 index 00000000000..4b7b9dcb7dd --- /dev/null +++ b/test/configCases/module/dependOn-runtime-single/separate.js @@ -0,0 +1 @@ +export default "separate"; diff --git a/test/configCases/module/dependOn-runtime-single/test.config.js b/test/configCases/module/dependOn-runtime-single/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/dependOn-runtime-single/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/dependOn-runtime-single/webpack.config.js b/test/configCases/module/dependOn-runtime-single/webpack.config.js new file mode 100644 index 00000000000..3897e8754bc --- /dev/null +++ b/test/configCases/module/dependOn-runtime-single/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js", + dependOn: "shared" + }, + shared: "./common.js" + }, + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + } + } + } + } +}); diff --git a/test/configCases/module/duplicate-export/index.js b/test/configCases/module/duplicate-export/index.js new file mode 100644 index 00000000000..6c4b0d2e15d --- /dev/null +++ b/test/configCases/module/duplicate-export/index.js @@ -0,0 +1,7 @@ +import value from "./separate"; + +it("should compile", () => { + expect(value).toBeDefined(); +}); + +export default "main"; diff --git a/test/configCases/module/duplicate-export/separate.js b/test/configCases/module/duplicate-export/separate.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/module/duplicate-export/separate.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/module/duplicate-export/test.config.js b/test/configCases/module/duplicate-export/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/duplicate-export/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/duplicate-export/webpack.config.js b/test/configCases/module/duplicate-export/webpack.config.js new file mode 100644 index 00000000000..ab636c6d22f --- /dev/null +++ b/test/configCases/module/duplicate-export/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: true, + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + } + } + } + } +}; diff --git a/test/configCases/module/entries-runtime-false/common.js b/test/configCases/module/entries-runtime-false/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/module/entries-runtime-false/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/module/entries-runtime-false/index.js b/test/configCases/module/entries-runtime-false/index.js new file mode 100644 index 00000000000..d83d5527bb3 --- /dev/null +++ b/test/configCases/module/entries-runtime-false/index.js @@ -0,0 +1,4 @@ +it("should compile", () => { + expect("common").toBe("common"); +}); +export default "main"; diff --git a/test/configCases/module/entries-runtime-false/separate.js b/test/configCases/module/entries-runtime-false/separate.js new file mode 100644 index 00000000000..212b13380bb --- /dev/null +++ b/test/configCases/module/entries-runtime-false/separate.js @@ -0,0 +1,2 @@ +import common from "./common"; +export default common; diff --git a/test/configCases/module/entries-runtime-false/test.config.js b/test/configCases/module/entries-runtime-false/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/entries-runtime-false/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/entries-runtime-false/webpack.config.js b/test/configCases/module/entries-runtime-false/webpack.config.js new file mode 100644 index 00000000000..abaa4f59fc8 --- /dev/null +++ b/test/configCases/module/entries-runtime-false/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const EntryPlugin = require("../../../../").EntryPlugin; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js" + } + }, + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: false, + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + }, + common: { + test: /common/, + chunks: "all", + filename: "common.mjs", + enforce: true + } + } + } + }, + plugins: [new EntryPlugin(__dirname, "./separate.js", "main")] +}); diff --git a/test/configCases/module/entries-runtime-single/common.js b/test/configCases/module/entries-runtime-single/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/module/entries-runtime-single/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/module/entries-runtime-single/index.js b/test/configCases/module/entries-runtime-single/index.js new file mode 100644 index 00000000000..d83d5527bb3 --- /dev/null +++ b/test/configCases/module/entries-runtime-single/index.js @@ -0,0 +1,4 @@ +it("should compile", () => { + expect("common").toBe("common"); +}); +export default "main"; diff --git a/test/configCases/module/entries-runtime-single/separate.js b/test/configCases/module/entries-runtime-single/separate.js new file mode 100644 index 00000000000..212b13380bb --- /dev/null +++ b/test/configCases/module/entries-runtime-single/separate.js @@ -0,0 +1,2 @@ +import common from "./common"; +export default common; diff --git a/test/configCases/module/entries-runtime-single/test.config.js b/test/configCases/module/entries-runtime-single/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/entries-runtime-single/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/entries-runtime-single/webpack.config.js b/test/configCases/module/entries-runtime-single/webpack.config.js new file mode 100644 index 00000000000..12eb47911d0 --- /dev/null +++ b/test/configCases/module/entries-runtime-single/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const EntryPlugin = require("../../../../").EntryPlugin; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js" + } + }, + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + }, + common: { + test: /common/, + chunks: "all", + filename: "common.mjs", + enforce: true + } + } + } + }, + plugins: [new EntryPlugin(__dirname, "./separate.js", "main")] +}); diff --git a/test/configCases/module/externals/imported.js b/test/configCases/module/externals/imported.js new file mode 100644 index 00000000000..f0c663f58c6 --- /dev/null +++ b/test/configCases/module/externals/imported.js @@ -0,0 +1,3 @@ +import value from "./module"; + +export default value + 2; diff --git a/test/configCases/module/externals/index.js b/test/configCases/module/externals/index.js new file mode 100644 index 00000000000..ddf9dade569 --- /dev/null +++ b/test/configCases/module/externals/index.js @@ -0,0 +1,13 @@ +import imported from "./imported.mjs"; +import value from "./module"; +import { metaUrl } from "./meta"; +const localMetaUrl = import.meta.url; + +it("should allow to use externals in concatenated modules", () => { + expect(imported).toBe(42); + expect(value).toBe(40); +}); + +it("all bundled files should have same url, when parser.javascript.importMeta === false", () => { + expect(localMetaUrl).toBe(metaUrl) +}); diff --git a/test/configCases/module/externals/meta.js b/test/configCases/module/externals/meta.js new file mode 100644 index 00000000000..eb60388df50 --- /dev/null +++ b/test/configCases/module/externals/meta.js @@ -0,0 +1 @@ +export const metaUrl = import.meta.url; \ No newline at end of file diff --git a/test/configCases/module/externals/module.js b/test/configCases/module/externals/module.js new file mode 100644 index 00000000000..03c2e17df3f --- /dev/null +++ b/test/configCases/module/externals/module.js @@ -0,0 +1 @@ +export default 40; diff --git a/test/configCases/module/externals/test.config.js b/test/configCases/module/externals/test.config.js new file mode 100644 index 00000000000..04d5e6a4b35 --- /dev/null +++ b/test/configCases/module/externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./main.mjs"; + } +}; diff --git a/test/configCases/module/externals/webpack.config.js b/test/configCases/module/externals/webpack.config.js new file mode 100644 index 00000000000..3ae7981db23 --- /dev/null +++ b/test/configCases/module/externals/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + parser: { + javascript: { + importMeta: false + } + } + }, + entry: { + main: "./index.js", + imported: { + import: "./imported.js", + library: { + type: "module" + } + } + }, + target: "node14", + output: { + filename: "[name].mjs" + }, + externals: "./imported.mjs", + experiments: { + outputModule: true + }, + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/module/iife-entry-module-with-others/index.js b/test/configCases/module/iife-entry-module-with-others/index.js new file mode 100644 index 00000000000..f046f5e3cbe --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/index.js @@ -0,0 +1,25 @@ +import { value as value1 } from './module1' +const value2 = require('./module2') +const value3 = require('./module3') +const value4 = require('./module4') + +let value = 42 +let src_value = 43 +let src_src_value = 44 +let Symbol = 'Symbol' + +it('inlined module should not leak to non-inlined modules', () => { + // The two variables are in nested scope and could be the candidate names for inline module during renaming. + // The renaming logic should detect them and bypass to avoid the collisions. + const index_src_value = -1 + const index_src_value_0 = -1 + + expect(value1).toBe(undefined) + expect(value).toBe(42) + expect(src_value).toBe(43) + expect(src_src_value).toBe(44) + expect(Symbol).toBe('Symbol') + expect(value2).toBe("undefined") // Should not touch `value` variable in inline module. + expect(value3).toBe("undefined") // Should not touch src_value` in inline module. + expect(value4).toBe("function") // Module variables in inline module should not shadowling global variables. +}) diff --git a/test/configCases/module/iife-entry-module-with-others/module1.js b/test/configCases/module/iife-entry-module-with-others/module1.js new file mode 100644 index 00000000000..96539a70735 --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/module1.js @@ -0,0 +1,3 @@ +let value + +export { value } diff --git a/test/configCases/module/iife-entry-module-with-others/module2.js b/test/configCases/module/iife-entry-module-with-others/module2.js new file mode 100644 index 00000000000..28cbf2cc962 --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/module2.js @@ -0,0 +1 @@ +module.exports = typeof value diff --git a/test/configCases/module/iife-entry-module-with-others/module3.js b/test/configCases/module/iife-entry-module-with-others/module3.js new file mode 100644 index 00000000000..bb38a0e4ad7 --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/module3.js @@ -0,0 +1 @@ +module.exports = typeof src_value diff --git a/test/configCases/module/iife-entry-module-with-others/module4.js b/test/configCases/module/iife-entry-module-with-others/module4.js new file mode 100644 index 00000000000..2d1c8a798ac --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/module4.js @@ -0,0 +1 @@ +module.exports = typeof Symbol diff --git a/test/configCases/module/iife-entry-module-with-others/test.config.js b/test/configCases/module/iife-entry-module-with-others/test.config.js new file mode 100644 index 00000000000..07e6d9b8d11 --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/test.config.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "module-avoidEntryIife-false.mjs", + "module-avoidEntryIife-true.mjs", + "test.js" + ]; + } +}; diff --git a/test/configCases/module/iife-entry-module-with-others/test.js b/test/configCases/module/iife-entry-module-with-others/test.js new file mode 100644 index 00000000000..1bcf1bb48d2 --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/test.js @@ -0,0 +1,9 @@ +const fs = require("fs"); +const path = require("path"); + +it("IIFE should present when `avoidEntryIife` is disabled, and avoided when true", () => { + const trueSource = fs.readFileSync(path.join(__dirname, "module-avoidEntryIife-true.mjs"), "utf-8"); + const falseSource = fs.readFileSync(path.join(__dirname, "module-avoidEntryIife-false.mjs"), "utf-8"); + expect(trueSource).not.toContain('This entry needs to be wrapped in an IIFE'); + expect(falseSource).toContain('This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.'); +}); diff --git a/test/configCases/module/iife-entry-module-with-others/webpack.config.js b/test/configCases/module/iife-entry-module-with-others/webpack.config.js new file mode 100644 index 00000000000..e0582f00f83 --- /dev/null +++ b/test/configCases/module/iife-entry-module-with-others/webpack.config.js @@ -0,0 +1,48 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +const base = { + output: { + module: true + }, + optimization: { + concatenateModules: true + }, + experiments: { + outputModule: true + }, + target: "es2020" +}; + +/** @type {import("../../../../types").Configuration[]} */ +module.exports = [ + { + ...base, + name: "module-avoidEntryIife-false", + output: { + filename: "module-avoidEntryIife-false.mjs" + }, + optimization: { + ...base.optimization, + avoidEntryIife: false + } + }, + { + ...base, + name: "module-avoidEntryIife-true", + output: { + filename: "module-avoidEntryIife-true.mjs" + }, + optimization: { + ...base.optimization, + avoidEntryIife: true + } + }, + { + name: "test-output", + entry: "./test.js", + output: { + filename: "test.js" + } + } +]; diff --git a/test/configCases/module/iife-inner-strict/foo.cjs b/test/configCases/module/iife-inner-strict/foo.cjs new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/configCases/module/iife-inner-strict/foo.cjs @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/configCases/module/iife-inner-strict/index.mjs b/test/configCases/module/iife-inner-strict/index.mjs new file mode 100644 index 00000000000..f297ceac9b3 --- /dev/null +++ b/test/configCases/module/iife-inner-strict/index.mjs @@ -0,0 +1,14 @@ +import foo from './foo.cjs'; + +let answer + +try { + delete Object.prototype; // will throw error in strict mode + answer = 'no'; + } catch { + answer = 'yes'; +} + +it("multiple inlined modules should be wrapped in IIFE to isolate from other inlined modules and chunk modules", () => { + expect(answer).toBe("yes"); // the code should throw in strict mode +}); diff --git a/test/configCases/module/iife-inner-strict/test.config.js b/test/configCases/module/iife-inner-strict/test.config.js new file mode 100644 index 00000000000..6f661b3d1eb --- /dev/null +++ b/test/configCases/module/iife-inner-strict/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["test.js"]; + } +}; diff --git a/test/configCases/module/iife-inner-strict/test.js b/test/configCases/module/iife-inner-strict/test.js new file mode 100644 index 00000000000..b438ba926ff --- /dev/null +++ b/test/configCases/module/iife-inner-strict/test.js @@ -0,0 +1,7 @@ +const fs = require("fs"); +const path = require("path"); + +it("IIFE should present for inner strict", () => { + const source = fs.readFileSync(path.join(__dirname, "bundle0.js"), "utf-8"); + expect(source).toContain(`This entry needs to be wrapped in an IIFE because it needs to be in strict mode.`); +}); diff --git a/test/configCases/module/iife-inner-strict/webpack.config.js b/test/configCases/module/iife-inner-strict/webpack.config.js new file mode 100644 index 00000000000..61255739b84 --- /dev/null +++ b/test/configCases/module/iife-inner-strict/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: ["./index.mjs"], + output: { + module: false + } + }, + { + name: "test-output", + entry: "./test.js", + output: { + filename: "test.js" + } + } +]; diff --git a/test/configCases/module/iife-multiple-entry-modules/index1.js b/test/configCases/module/iife-multiple-entry-modules/index1.js new file mode 100644 index 00000000000..44439901e78 --- /dev/null +++ b/test/configCases/module/iife-multiple-entry-modules/index1.js @@ -0,0 +1,4 @@ + + it("multiple inlined modules should be wrapped in IIFE to isolate from other inlined modules and chunk modules", () => { + expect(typeof value).toBe("undefined"); // `value` in index2 should not leak to index1 +}); diff --git a/test/configCases/module/iife-multiple-entry-modules/index2.js b/test/configCases/module/iife-multiple-entry-modules/index2.js new file mode 100644 index 00000000000..e43b1bb2309 --- /dev/null +++ b/test/configCases/module/iife-multiple-entry-modules/index2.js @@ -0,0 +1 @@ +var value = 42 diff --git a/test/configCases/module/iife-multiple-entry-modules/test.config.js b/test/configCases/module/iife-multiple-entry-modules/test.config.js new file mode 100644 index 00000000000..af8b742874c --- /dev/null +++ b/test/configCases/module/iife-multiple-entry-modules/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["bundle0.mjs", "test.js"]; + } +}; diff --git a/test/configCases/module/iife-multiple-entry-modules/test.js b/test/configCases/module/iife-multiple-entry-modules/test.js new file mode 100644 index 00000000000..0ad5d2d5de0 --- /dev/null +++ b/test/configCases/module/iife-multiple-entry-modules/test.js @@ -0,0 +1,7 @@ +const fs = require("fs"); +const path = require("path"); + +it("IIFE should present for multiple entries", () => { + const source = fs.readFileSync(path.join(__dirname, "bundle0.mjs"), "utf-8"); + expect(source).toContain(`This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.`); +}); diff --git a/test/configCases/module/iife-multiple-entry-modules/webpack.config.js b/test/configCases/module/iife-multiple-entry-modules/webpack.config.js new file mode 100644 index 00000000000..c469337b02a --- /dev/null +++ b/test/configCases/module/iife-multiple-entry-modules/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: ["./index1.js", "./index2.js"], + output: { + module: true + }, + optimization: { + concatenateModules: true + }, + experiments: { + outputModule: true + }, + target: "es2020" + }, + { + name: "test-output", + entry: "./test.js", + output: { + filename: "test.js" + } + } +]; diff --git a/test/configCases/module/import-meta-env/.env b/test/configCases/module/import-meta-env/.env new file mode 100644 index 00000000000..491950728c3 --- /dev/null +++ b/test/configCases/module/import-meta-env/.env @@ -0,0 +1 @@ +WEBPACK_API_URL=https://api.example.com diff --git a/test/configCases/module/import-meta-env/__snapshots__/ConfigCacheTest.snap b/test/configCases/module/import-meta-env/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..3fd68a8ca79 --- /dev/null +++ b/test/configCases/module/import-meta-env/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,40 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases module import-meta-env exported tests import.meta.env behaves like process.env 1`] = ` +"import {fileURLToPath as __webpack_fileURLToPath__} from \\"url\\"; +var __webpack_filename__ = __webpack_fileURLToPath__(import.meta.url); +/*!******************!*\\\\ + !*** ./index.js ***! + \\\\******************/ +it(\\"should work import.meta.env with EnvironmentPlugin\\", () => { + expect(\\"aaa\\").toBe(\\"aaa\\"); +}); + +it(\\"should work import.meta.env with DotenvPlugin\\", () => { + expect(\\"https://api.example.com\\").toBe(\\"https://api.example.com\\"); +}); + +it(\\"import.meta.env behaves like process.env\\", async (done) => { + try { + const importMetaEnv = {\\"AAA\\":\\"aaa\\",\\"WEBPACK_API_URL\\":\\"https://api.example.com\\",\\"NODE_ENV\\":\\"production\\"}; + importMetaEnv; + const processEnv = process.env; + processEnv; + const UNKNOWN_PROPERTY = undefined; + UNKNOWN_PROPERTY; + const UNKNOWN_PROPERTY_2 = process.env.UNKNOWN_PROPERTY_2; + UNKNOWN_PROPERTY_2; + \\"object\\"; + typeof process.env; + + const { env } = ({env: {\\"AAA\\":\\"aaa\\",\\"WEBPACK_API_URL\\":\\"https://api.example.com\\",\\"NODE_ENV\\":\\"production\\"},}); + env; + } catch (_e) { + // ignore + } + const fs = await eval(\\"import('fs')\\"); + expect(fs.readFileSync(__webpack_filename__, \\"utf-8\\")).toMatchSnapshot(); + done(); +}); +" +`; diff --git a/test/configCases/module/import-meta-env/__snapshots__/ConfigTest.snap b/test/configCases/module/import-meta-env/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..b92775cfa77 --- /dev/null +++ b/test/configCases/module/import-meta-env/__snapshots__/ConfigTest.snap @@ -0,0 +1,40 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases module import-meta-env exported tests import.meta.env behaves like process.env 1`] = ` +"import {fileURLToPath as __webpack_fileURLToPath__} from \\"url\\"; +var __webpack_filename__ = __webpack_fileURLToPath__(import.meta.url); +/*!******************!*\\\\ + !*** ./index.js ***! + \\\\******************/ +it(\\"should work import.meta.env with EnvironmentPlugin\\", () => { + expect(\\"aaa\\").toBe(\\"aaa\\"); +}); + +it(\\"should work import.meta.env with DotenvPlugin\\", () => { + expect(\\"https://api.example.com\\").toBe(\\"https://api.example.com\\"); +}); + +it(\\"import.meta.env behaves like process.env\\", async (done) => { + try { + const importMetaEnv = {\\"AAA\\":\\"aaa\\",\\"WEBPACK_API_URL\\":\\"https://api.example.com\\",\\"NODE_ENV\\":\\"production\\"}; + importMetaEnv; + const processEnv = process.env; + processEnv; + const UNKNOWN_PROPERTY = undefined; + UNKNOWN_PROPERTY; + const UNKNOWN_PROPERTY_2 = process.env.UNKNOWN_PROPERTY_2; + UNKNOWN_PROPERTY_2; + \\"object\\"; + typeof process.env; + + const { env } = ({env: {\\"AAA\\":\\"aaa\\",\\"WEBPACK_API_URL\\":\\"https://api.example.com\\",\\"NODE_ENV\\":\\"production\\"},}); + env; + } catch (_e) { + // ignore + } + const fs = await eval(\\"import('fs')\\"); + expect(fs.readFileSync(__webpack_filename__, \\"utf-8\\")).toMatchSnapshot(); + done(); +}); +" +`; diff --git a/test/configCases/module/import-meta-env/index.js b/test/configCases/module/import-meta-env/index.js new file mode 100644 index 00000000000..2675457336d --- /dev/null +++ b/test/configCases/module/import-meta-env/index.js @@ -0,0 +1,30 @@ +it("should work import.meta.env with EnvironmentPlugin", () => { + expect(import.meta.env.AAA).toBe(process.env.AAA); +}); + +it("should work import.meta.env with DotenvPlugin", () => { + expect(import.meta.env.WEBPACK_API_URL).toBe(process.env.WEBPACK_API_URL); +}); + +it("import.meta.env behaves like process.env", async (done) => { + try { + const importMetaEnv = import.meta.env; + importMetaEnv; + const processEnv = process.env; + processEnv; + const UNKNOWN_PROPERTY = import.meta.env.UNKNOWN_PROPERTY; + UNKNOWN_PROPERTY; + const UNKNOWN_PROPERTY_2 = process.env.UNKNOWN_PROPERTY_2; + UNKNOWN_PROPERTY_2; + typeof import.meta.env; + typeof process.env; + + const { env } = import.meta; + env; + } catch (_e) { + // ignore + } + const fs = await eval("import('fs')"); + expect(fs.readFileSync(__filename, "utf-8")).toMatchSnapshot(); + done(); +}); \ No newline at end of file diff --git a/test/configCases/module/import-meta-env/webpack.config.js b/test/configCases/module/import-meta-env/webpack.config.js new file mode 100644 index 00000000000..2addc0c1b40 --- /dev/null +++ b/test/configCases/module/import-meta-env/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +const EnvironmentPlugin = require("../../../../").EnvironmentPlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node12.18", + dotenv: true, + plugins: [ + new EnvironmentPlugin({ + AAA: "aaa" + }) + ], + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + }, + externals: { + fs: "commonjs fs" + } +}; diff --git a/test/configCases/module/import-meta/index.js b/test/configCases/module/import-meta/index.js new file mode 100644 index 00000000000..be44ff8ee56 --- /dev/null +++ b/test/configCases/module/import-meta/index.js @@ -0,0 +1,60 @@ +if (!import.meta.UNKNOWN_PROPERTY) { + // runtime assignment + import.meta.UNKNOWN_PROPERTY = "HELLO"; +} + +import { pathToFileURL } from "url"; +import path from "path"; + +const url = pathToFileURL( + path.resolve("./test/configCases/module/import-meta/index.js") +).toString(); + +it("should keep import.meta.UNKNOWN_PROPERTY", () => { + try { + const UNKNOWN_PROPERTY = import.meta.UNKNOWN_PROPERTY; + expect(UNKNOWN_PROPERTY).toBe("HELLO"); + expect(typeof import.meta.UNKNOWN_PROPERTY).toBe("string"); + + expect(typeof import.meta.webpack).toBe("number"); + + const { + UNKNOWN_PROPERTY: UNKNOWN_PROPERTY_2, + webpack: WEBPACK_PROPERTY_2 + } = import.meta; + expect(UNKNOWN_PROPERTY_2).toBe("HELLO"); + expect(typeof WEBPACK_PROPERTY_2).toBe("number"); + } catch (_e) { + // ignore + } +}); + +it("should preserve runtime properties when import.meta is used as standalone expression", () => { + const meta = (() => import.meta)(); + expect(meta.UNKNOWN_PROPERTY).toBe("HELLO"); + expect(meta.url).toBeTypeOf("string"); + expect(meta.webpack).toBeTypeOf("number"); +}); + +it("should support destructuring assignment", async () => { + let version, url2, c, unknown; + ({ webpack: version } = + { url: url2 } = + { c } = + { UNKNOWN_PROPERTY: unknown } = + import.meta); + expect(version).toBeTypeOf("number"); + expect(url2).toBe(url); + expect(c).toBe(undefined); + expect(unknown).toBe("HELLO"); + + let version2, url3, d, unknown2; + ({ webpack: version2 } = await ({ url: url3 } = + { d } = + { UNKNOWN_PROPERTY: unknown2 } = + await import.meta)); + expect(version2).toBeTypeOf("number"); + expect(url3).toBe(url); + expect(d).toBe(undefined); + expect(unknown2).toBe("HELLO"); +}); diff --git a/test/configCases/module/import-meta/webpack.config.js b/test/configCases/module/import-meta/webpack.config.js new file mode 100644 index 00000000000..79496c38db6 --- /dev/null +++ b/test/configCases/module/import-meta/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } +}; diff --git a/test/configCases/module/import-phase/index.js b/test/configCases/module/import-phase/index.js new file mode 100644 index 00000000000..2ffdc07b15c --- /dev/null +++ b/test/configCases/module/import-phase/index.js @@ -0,0 +1,9 @@ +it("should allow to match rules by import phase", async () => { + const evaluation = await import("./module.js"); + const deferred = await import.defer("./module.js"); + const source = await import.source("./module.js"); + + expect(evaluation.default).toBe("evaluation"); + expect(deferred.default).toBe("defer"); + expect(source).toBe("source"); +}); diff --git a/test/configCases/module/import-phase/module.js b/test/configCases/module/import-phase/module.js new file mode 100644 index 00000000000..44d44847d02 --- /dev/null +++ b/test/configCases/module/import-phase/module.js @@ -0,0 +1 @@ +export const value = "ok"; diff --git a/test/configCases/module/import-phase/phase-loader.js b/test/configCases/module/import-phase/phase-loader.js new file mode 100644 index 00000000000..59be4517d8a --- /dev/null +++ b/test/configCases/module/import-phase/phase-loader.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @typedef {import("../../../../types").LoaderDefinition<{ phase: string }>} LoaderDefinition */ + +/** @type {LoaderDefinition} */ +module.exports = function (source) { + const options = this.getOptions(); + return `${source}\nexport default ${JSON.stringify( + options.phase + )};\n`; +}; + diff --git a/test/configCases/module/import-phase/webpack.config.js b/test/configCases/module/import-phase/webpack.config.js new file mode 100644 index 00000000000..b7dd38913b2 --- /dev/null +++ b/test/configCases/module/import-phase/webpack.config.js @@ -0,0 +1,41 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: [`async-node${process.versions.node.split(".").map(Number)[0]}`], + optimization: { + concatenateModules: false + }, + experiments: { + deferImport: true, + sourceImport: true + }, + module: { + rules: [ + { + test: /module\.js$/, + phase: "defer", + loader: "./phase-loader.js", + options: { + phase: "defer" + } + }, + { + test: /module\.js$/, + phase: "source", + loader: "./phase-loader.js", + options: { + phase: "source" + } + }, + { + test: /module\.js$/, + phase: "evaluation", + loader: "./phase-loader.js", + options: { + phase: "evaluation" + } + } + ] + } +}; diff --git a/test/configCases/module/issue-16040/bar.css b/test/configCases/module/issue-16040/bar.css new file mode 100644 index 00000000000..66d9575715c --- /dev/null +++ b/test/configCases/module/issue-16040/bar.css @@ -0,0 +1,3 @@ +.bar { + color: #fff; +} diff --git a/test/configCases/module/issue-16040/bar.js b/test/configCases/module/issue-16040/bar.js new file mode 100644 index 00000000000..cce1f49a437 --- /dev/null +++ b/test/configCases/module/issue-16040/bar.js @@ -0,0 +1,7 @@ +import { countBy } from "lodash-es"; + +import "./bar.css"; + +const result = countBy([6.1, 4.2, 6.3], Math.floor); + +export default result["6"]; diff --git a/test/configCases/module/issue-16040/foo.css b/test/configCases/module/issue-16040/foo.css new file mode 100644 index 00000000000..33a418a59a8 --- /dev/null +++ b/test/configCases/module/issue-16040/foo.css @@ -0,0 +1,3 @@ +.foo { + color: #fff; +} diff --git a/test/configCases/module/issue-16040/foo.js b/test/configCases/module/issue-16040/foo.js new file mode 100644 index 00000000000..dd96b964c76 --- /dev/null +++ b/test/configCases/module/issue-16040/foo.js @@ -0,0 +1,7 @@ +import { dropRight } from "lodash-es"; + +import "./foo.css"; + +const result = dropRight([10, 20, 30], 2); + +export default result[0]; diff --git a/test/configCases/module/issue-16040/index.js b/test/configCases/module/issue-16040/index.js new file mode 100644 index 00000000000..da656cdd0f0 --- /dev/null +++ b/test/configCases/module/issue-16040/index.js @@ -0,0 +1,14 @@ +import foo from "./foo.js"; +import bar from "./bar.js"; + +it("should not contain non javascript chunk in the main bundle", () => { + const fs = require("fs"); + const source = fs.readFileSync(__STATS__.outputPath + "/main.mjs", "utf-8"); + + expect(__STATS__.chunks.some(c => c.names.includes("style"))).toBe(true); + // Should not import "./style.mjs";` + expect(source).not.toMatch( + /import\s\*\sas+\s__webpack_chunk_[0-9]+__\sfrom\s"\.\/style\.mjs"/g + ); + expect(foo + bar).toBe(12); +}); diff --git a/test/configCases/module/issue-16040/test.config.js b/test/configCases/module/issue-16040/test.config.js new file mode 100644 index 00000000000..120246cdaf8 --- /dev/null +++ b/test/configCases/module/issue-16040/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.mjs", "vendor.mjs", "runtime.mjs"]; + } +}; diff --git a/test/configCases/module/issue-16040/test.filter.js b/test/configCases/module/issue-16040/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/module/issue-16040/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/module/issue-16040/webpack.config.js b/test/configCases/module/issue-16040/webpack.config.js new file mode 100644 index 00000000000..08e20f5250e --- /dev/null +++ b/test/configCases/module/issue-16040/webpack.config.js @@ -0,0 +1,79 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +module.exports = { + mode: "production", + devtool: false, + experiments: { + outputModule: true + }, + output: { + publicPath: "/", + filename: "[name].mjs", + chunkFilename: "[name].chunk.js", + assetModuleFilename: "[hash][ext][query]", + module: true, + libraryTarget: "module", + chunkFormat: "module", + chunkLoading: "import", + environment: { + dynamicImport: true, + module: true + } + }, + + module: { + rules: [ + { + test: /\.css$/i, + use: [MiniCssExtractPlugin.loader, "css-loader"] + } + ] + }, + + plugins: [ + new MiniCssExtractPlugin({ + filename: "style.css", + chunkFilename: "[id].css" + }) + ], + + optimization: { + splitChunks: { + chunks: "all", + + cacheGroups: { + style: { + name: "style", + type: "css/mini-extract", + chunks: "all", + enforce: true + }, + + defaultVendors: { + name: "vendor", + test: /[\\/]node_modules[\\/]/, + priority: -10, + chunks: "initial", + reuseExistingChunk: true + }, + + default: { + minChunks: 2, + priority: -20, + reuseExistingChunk: true + } + } + }, + + runtimeChunk: { + name: "runtime" + }, + + // currently Webpack has bugs when setting concatenateModules to true while produce ES Module output. + // concatenateModules: false, + + minimize: false + } +}; diff --git a/test/configCases/module/issue-17014-split-chunks/common.js b/test/configCases/module/issue-17014-split-chunks/common.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/module/issue-17014-split-chunks/common.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/module/issue-17014-split-chunks/index.js b/test/configCases/module/issue-17014-split-chunks/index.js new file mode 100644 index 00000000000..5bf957bfc00 --- /dev/null +++ b/test/configCases/module/issue-17014-split-chunks/index.js @@ -0,0 +1,5 @@ +import common from './common.js' + +it("should work", () => { + expect(common).toBe(42); +}); diff --git a/test/configCases/module/issue-17014-split-chunks/test.config.js b/test/configCases/module/issue-17014-split-chunks/test.config.js new file mode 100644 index 00000000000..e9186c677ed --- /dev/null +++ b/test/configCases/module/issue-17014-split-chunks/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./common.mjs", "./bundle0.mjs"]; + } +}; diff --git a/test/configCases/module/issue-17014-split-chunks/webpack.config.js b/test/configCases/module/issue-17014-split-chunks/webpack.config.js new file mode 100644 index 00000000000..49162fd3930 --- /dev/null +++ b/test/configCases/module/issue-17014-split-chunks/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + module: true + }, + experiments: { + outputModule: true + }, + target: "es2020", + optimization: { + splitChunks: { + cacheGroups: { + common: { + test: /common\.js/, + minSize: 0, + chunks: "all", + filename: "common.mjs" + } + } + } + } +}; diff --git a/test/configCases/module/issue-17014-webworker/index.js b/test/configCases/module/issue-17014-webworker/index.js new file mode 100644 index 00000000000..0f53a08e561 --- /dev/null +++ b/test/configCases/module/issue-17014-webworker/index.js @@ -0,0 +1,13 @@ +it("should work", async () => { + const worker = new Worker(new URL("./worker.js", import.meta.url), { + type: "module" + }); + worker.postMessage("ok"); + const result = await new Promise(resolve => { + worker.onmessage = event => { + resolve(event.data); + }; + }); + expect(result).toBe("data: OK, thanks"); + await worker.terminate(); +}); diff --git a/test/configCases/module/issue-17014-webworker/module.js b/test/configCases/module/issue-17014-webworker/module.js new file mode 100644 index 00000000000..bbba56c3885 --- /dev/null +++ b/test/configCases/module/issue-17014-webworker/module.js @@ -0,0 +1,3 @@ +export default function upper(str) { + return str.toUpperCase(); +} diff --git a/test/configCases/module/issue-17014-webworker/test.config.js b/test/configCases/module/issue-17014-webworker/test.config.js new file mode 100644 index 00000000000..9b6cacaa4d1 --- /dev/null +++ b/test/configCases/module/issue-17014-webworker/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + // findBundle() { + // return ["./common.mjs", "./bundle0.mjs"]; + // } +}; diff --git a/test/configCases/module/issue-17014-webworker/test.filter.js b/test/configCases/module/issue-17014-webworker/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/configCases/module/issue-17014-webworker/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/configCases/module/issue-17014-webworker/webpack.config.js b/test/configCases/module/issue-17014-webworker/webpack.config.js new file mode 100644 index 00000000000..c277942a2c3 --- /dev/null +++ b/test/configCases/module/issue-17014-webworker/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + module: true + }, + experiments: { + outputModule: true + }, + target: ["web", "es2020"], + optimization: { + splitChunks: { + minSize: 1, + maxSize: 1 + } + } +}; diff --git a/test/configCases/module/issue-17014-webworker/worker.js b/test/configCases/module/issue-17014-webworker/worker.js new file mode 100644 index 00000000000..4af5b2b1b54 --- /dev/null +++ b/test/configCases/module/issue-17014-webworker/worker.js @@ -0,0 +1,6 @@ +import upper from "./module.js"; + +self.onmessage = async event => { + + postMessage(`data: ${upper(event.data)}, thanks`); +}; diff --git a/test/configCases/module/issue-17971/common.js b/test/configCases/module/issue-17971/common.js new file mode 100644 index 00000000000..0a40f3d476d --- /dev/null +++ b/test/configCases/module/issue-17971/common.js @@ -0,0 +1,3 @@ +const pathModule = __non_webpack_require__('path'); + +export default pathModule; diff --git a/test/configCases/module/issue-17971/index.js b/test/configCases/module/issue-17971/index.js new file mode 100644 index 00000000000..4f78decae01 --- /dev/null +++ b/test/configCases/module/issue-17971/index.js @@ -0,0 +1,5 @@ +import pathModule from "./common.js"; + +it("should work", () => { + expect(typeof pathModule.dirname).toBe("function"); +}); diff --git a/test/configCases/module/issue-17971/test.filter.js b/test/configCases/module/issue-17971/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/module/issue-17971/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/module/issue-17971/webpack.config.js b/test/configCases/module/issue-17971/webpack.config.js new file mode 100644 index 00000000000..86caf99af49 --- /dev/null +++ b/test/configCases/module/issue-17971/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: "eval-source-map", + target: "node", + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/module/issue-19767/common.js b/test/configCases/module/issue-19767/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/module/issue-19767/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/module/issue-19767/index.js b/test/configCases/module/issue-19767/index.js new file mode 100644 index 00000000000..2b78af62e60 --- /dev/null +++ b/test/configCases/module/issue-19767/index.js @@ -0,0 +1,6 @@ +import common from "./common"; + +it("should compile", () => { + expect(common).toBe("common"); +}); +export default "main"; diff --git a/test/configCases/module/issue-19767/test.config.js b/test/configCases/module/issue-19767/test.config.js new file mode 100644 index 00000000000..07b84041615 --- /dev/null +++ b/test/configCases/module/issue-19767/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.mjs"]; + } +}; diff --git a/test/configCases/module/issue-19767/webpack.config.js b/test/configCases/module/issue-19767/webpack.config.js new file mode 100644 index 00000000000..c54868ea5ba --- /dev/null +++ b/test/configCases/module/issue-19767/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js", + dependOn: "shared" + }, + shared: "./common.js" + }, + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: false, + runtimeChunk: false, + concatenateModules: true + } +}); diff --git a/test/configCases/module/issue-19799/foo.js b/test/configCases/module/issue-19799/foo.js new file mode 100644 index 00000000000..0877aa85af2 --- /dev/null +++ b/test/configCases/module/issue-19799/foo.js @@ -0,0 +1 @@ +export default "foo" diff --git a/test/configCases/module/issue-19799/index.js b/test/configCases/module/issue-19799/index.js new file mode 100644 index 00000000000..c364eb40e64 --- /dev/null +++ b/test/configCases/module/issue-19799/index.js @@ -0,0 +1,2 @@ +import foo from './foo' +export default foo; //# sourceMappingURL=Subscriber.js.map \ No newline at end of file diff --git a/test/configCases/module/issue-19799/test.config.js b/test/configCases/module/issue-19799/test.config.js new file mode 100644 index 00000000000..c5f1878b29a --- /dev/null +++ b/test/configCases/module/issue-19799/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./test.mjs"]; + } +}; diff --git a/test/configCases/module/issue-19799/test.js b/test/configCases/module/issue-19799/test.js new file mode 100644 index 00000000000..8e8183e5bea --- /dev/null +++ b/test/configCases/module/issue-19799/test.js @@ -0,0 +1,5 @@ +import lib from "lib"; + +it("should run correctly", () => { + expect(lib).toBe("foo"); +}); diff --git a/test/configCases/module/issue-19799/webpack.config.js b/test/configCases/module/issue-19799/webpack.config.js new file mode 100644 index 00000000000..b63c18a2837 --- /dev/null +++ b/test/configCases/module/issue-19799/webpack.config.js @@ -0,0 +1,46 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + output: { + filename: "lib.mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("MyPlugin", (compilation) => { + const hooks = + webpack.javascript.JavascriptModulesPlugin.getCompilationHooks( + compilation + ); + hooks.inlineInRuntimeBailout.tap("test", () => "test bailout"); + }); + } + } + ] + }, + { + name: "test-output", + entry: "./test.js", + output: { + filename: "test.mjs", + module: true + }, + experiments: { outputModule: true }, + externals: { + lib: path.resolve(testPath, "./lib.mjs") + }, + externalsType: "module-import" + } +]; diff --git a/test/configCases/module/node-globals/cjs/file.js b/test/configCases/module/node-globals/cjs/file.js new file mode 100644 index 00000000000..be625d98678 --- /dev/null +++ b/test/configCases/module/node-globals/cjs/file.js @@ -0,0 +1,6 @@ +const fileURLToPath = ""; +const file = __filename; +const dir = __dirname; +const dir2 = `${__dirname}/`; + +module.exports = { file, dir, dir2 }; diff --git a/test/configCases/module/node-globals/cjs/package.json b/test/configCases/module/node-globals/cjs/package.json new file mode 100644 index 00000000000..ea5acf78f52 --- /dev/null +++ b/test/configCases/module/node-globals/cjs/package.json @@ -0,0 +1,4 @@ +{ + "name": "cjs", + "type": "commonjs" +} diff --git a/test/configCases/module/node-globals/index.js b/test/configCases/module/node-globals/index.js new file mode 100644 index 00000000000..350b3ba69bd --- /dev/null +++ b/test/configCases/module/node-globals/index.js @@ -0,0 +1,10 @@ +import { dir, dir2, file } from './cjs/file.js' + +it("should generate correct __dirname", () => { + expect(dir).toMatch(/[\\/]node-globals$/); + expect(dir2).toMatch(/[\\/]node-globals\/$/); +}); + +it("should generate correct __filename", () => { + expect(file).toMatch(/[\\/]main.mjs$/); +}); diff --git a/test/configCases/module/node-globals/test.config.js b/test/configCases/module/node-globals/test.config.js new file mode 100644 index 00000000000..04d5e6a4b35 --- /dev/null +++ b/test/configCases/module/node-globals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./main.mjs"; + } +}; diff --git a/test/configCases/module/node-globals/webpack.config.js b/test/configCases/module/node-globals/webpack.config.js new file mode 100644 index 00000000000..69d1c13370d --- /dev/null +++ b/test/configCases/module/node-globals/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + main: "./index.js" + }, + output: { + filename: "[name].mjs", + module: true + }, + experiments: { + outputModule: true + }, + target: "node14" +}; diff --git a/test/configCases/module/non-webpack-require-warning/foo.js b/test/configCases/module/non-webpack-require-warning/foo.js new file mode 100644 index 00000000000..d64de8ca87c --- /dev/null +++ b/test/configCases/module/non-webpack-require-warning/foo.js @@ -0,0 +1 @@ +export default __non_webpack_require__("./bar"); diff --git a/test/configCases/module/non-webpack-require-warning/index.js b/test/configCases/module/non-webpack-require-warning/index.js new file mode 100644 index 00000000000..495db691c2d --- /dev/null +++ b/test/configCases/module/non-webpack-require-warning/index.js @@ -0,0 +1,5 @@ +import foo from "./foo"; + +it("should generate createRequire in concatenated modules", function () { + expect(foo).toBe(1); +}); diff --git a/test/configCases/module/non-webpack-require-warning/test.filter.js b/test/configCases/module/non-webpack-require-warning/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/module/non-webpack-require-warning/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/module/non-webpack-require-warning/warnings.js b/test/configCases/module/non-webpack-require-warning/warnings.js new file mode 100644 index 00000000000..ed72f7dc549 --- /dev/null +++ b/test/configCases/module/non-webpack-require-warning/warnings.js @@ -0,0 +1,16 @@ +"use strict"; + +const inCacheTest = (options) => { + if (Array.isArray(options)) { + return options.some((o) => o.cache); + } + return options.cache; +}; + +module.exports = (options) => { + if (inCacheTest(options)) { + // We will pre-compile twice, and the module cache will result in no warnings in the stats during the third compilation + return []; + } + return [[/__non_webpack_require__ is only allowed in target node/]]; +}; diff --git a/test/configCases/module/non-webpack-require-warning/webpack.config.js b/test/configCases/module/non-webpack-require-warning/webpack.config.js new file mode 100644 index 00000000000..1d80af91766 --- /dev/null +++ b/test/configCases/module/non-webpack-require-warning/webpack.config.js @@ -0,0 +1,53 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + output: { + module: true + }, + target: ["node"], + experiments: { + outputModule: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + compilation.emitAsset( + "bar.js", + new webpack.sources.RawSource("module.exports = 1;") + ); + } + ); + }); + } + } + ] + }, + { + output: { + module: true + }, + target: "web", + experiments: { + outputModule: true + }, + plugins: [ + new webpack.BannerPlugin({ + raw: true, + banner: + 'import { createRequire } from "module"; const require = createRequire(import.meta.url)' + }) + ] + } +]; diff --git a/test/configCases/module/non-webpack-require/baz.js b/test/configCases/module/non-webpack-require/baz.js new file mode 100644 index 00000000000..ab1913ce984 --- /dev/null +++ b/test/configCases/module/non-webpack-require/baz.js @@ -0,0 +1 @@ +export default "baz module text"; diff --git a/test/configCases/module/non-webpack-require/index.js b/test/configCases/module/non-webpack-require/index.js new file mode 100644 index 00000000000..79e36df4e9f --- /dev/null +++ b/test/configCases/module/non-webpack-require/index.js @@ -0,0 +1,16 @@ +import { createRequire as func_create_require, builtinModules as builtin } from "module"; +import external from "external-module"; +import externalOther from "external-other-module"; +import baz from "./baz.js"; + +it("should work with __non_webpack_require__ and ES modules", function () { + const foo = __non_webpack_require__("./mod.js"); + + expect(foo).toBe("module text"); + expect(external).toBe("external module text"); + expect(externalOther).toBe("external module text"); + expect(baz).toBe("baz module text"); + expect(typeof func_create_require).toBe("function"); + expect(func_create_require(import.meta.url)("./mod.js")).toBe("module text"); + expect(typeof builtin).toBe("object") +}); diff --git a/test/configCases/module/non-webpack-require/mod.js b/test/configCases/module/non-webpack-require/mod.js new file mode 100644 index 00000000000..af5c7eea34c --- /dev/null +++ b/test/configCases/module/non-webpack-require/mod.js @@ -0,0 +1 @@ +module.exports = "module text"; diff --git a/test/configCases/module/non-webpack-require/test.filter.js b/test/configCases/module/non-webpack-require/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/module/non-webpack-require/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/module/non-webpack-require/webpack.config.js b/test/configCases/module/non-webpack-require/webpack.config.js new file mode 100644 index 00000000000..715f62d9850 --- /dev/null +++ b/test/configCases/module/non-webpack-require/webpack.config.js @@ -0,0 +1,60 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["node", "es2020"], + experiments: { + outputModule: true + }, + output: { + module: true, + iife: true + }, + externals: { + "external-module": "node-commonjs external-module", + "external-other-module": ["node-commonjs external-module"] + }, + optimization: { + concatenateModules: false + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + compilation.emitAsset( + "mod.js", + new webpack.sources.RawSource( + "module.exports = 'module text';\n" + ) + ); + } + ); + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + compilation.emitAsset( + "node_modules/external-module/index.js", + new webpack.sources.RawSource( + "module.exports = 'external module text';\n" + ) + ); + } + ); + }); + } + } + ] +}; diff --git a/test/configCases/module/public-path-global-runtime/file.text b/test/configCases/module/public-path-global-runtime/file.text new file mode 100644 index 00000000000..8e27be7d615 --- /dev/null +++ b/test/configCases/module/public-path-global-runtime/file.text @@ -0,0 +1 @@ +text diff --git a/test/configCases/module/public-path-global-runtime/index.js b/test/configCases/module/public-path-global-runtime/index.js new file mode 100644 index 00000000000..075e45309ba --- /dev/null +++ b/test/configCases/module/public-path-global-runtime/index.js @@ -0,0 +1,7 @@ +it("should use/not use globalThis", () => { + expect(new URL("./file.text", import.meta.url)).toBeDefined(); + + const stats = __STATS__.children[__STATS_I__]; + + expect(stats.modules.length).toBe(__STATS_I__ === 0 ? 6 : 5); +}); diff --git a/test/configCases/module/public-path-global-runtime/test.filter.js b/test/configCases/module/public-path-global-runtime/test.filter.js new file mode 100644 index 00000000000..8686fce3458 --- /dev/null +++ b/test/configCases/module/public-path-global-runtime/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsGlobalThis = require("../../../helpers/supportsGlobalThis"); + +module.exports = () => supportsGlobalThis(); diff --git a/test/configCases/module/public-path-global-runtime/webpack.config.js b/test/configCases/module/public-path-global-runtime/webpack.config.js new file mode 100644 index 00000000000..78aabc0093f --- /dev/null +++ b/test/configCases/module/public-path-global-runtime/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "web", + output: { + environment: { globalThis: false } + }, + stats: { + runtimeModules: true + } + }, + { + target: "web", + output: { + environment: { globalThis: true } + }, + stats: { + runtimeModules: true + } + } +]; diff --git a/test/configCases/module/public-path/chunk.js b/test/configCases/module/public-path/chunk.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/module/public-path/chunk.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/module/public-path/chunk1.js b/test/configCases/module/public-path/chunk1.js new file mode 100644 index 00000000000..8efc7299424 --- /dev/null +++ b/test/configCases/module/public-path/chunk1.js @@ -0,0 +1 @@ +export default 43; diff --git a/test/configCases/module/public-path/index.js b/test/configCases/module/public-path/index.js new file mode 100644 index 00000000000..8be83c5235e --- /dev/null +++ b/test/configCases/module/public-path/index.js @@ -0,0 +1,29 @@ +// This config need to be set on initial evaluation to be effective +__webpack_nonce__ = "nonce"; + +it("should be able to load a chunk", async () => { + const module = await import("./chunk"); + expect(module.default).toBe(42); + + if (typeof document !== "undefined") { + expect(document.head._children).toHaveLength(1); + + // Test prefetch from entry chunk + const link = document.head._children[0]; + expect(link._type).toBe("link"); + expect(link.rel).toBe("prefetch"); + + switch (__STATS_I__) { + case 8: + case 9: + case 10: + case 11: { + expect(link.href.startsWith("https://example.com/public/path/")).toBe(true); + } + } + + } + + const module1 = await import(/* webpackPrefetch: true */ "./chunk1"); + expect(module1.default).toBe(43); +}); diff --git a/test/configCases/module/public-path/test.config.js b/test/configCases/module/public-path/test.config.js new file mode 100644 index 00000000000..dca19db0eef --- /dev/null +++ b/test/configCases/module/public-path/test.config.js @@ -0,0 +1,50 @@ +"use strict"; + +const path = require("path"); + +module.exports = { + resolveModule(module, i) { + if (/^\.\/bundle/.test(module)) { + return module; + } + + if (i === 4 || i === 5) { + return `./${module}`; + } + + if (i === 6 || i === 7 || i === 10 || i === 11) { + if (/async/.test(module)) { + return `../${module}`; + } + + return `./${module}`; + } + + if (i === 15) { + return `./${path.basename(module)}`; + } + + return module; + }, + findBundle(i, options) { + switch (i) { + case 2: + case 6: + case 10: { + return `./${options.output.filename}`; + } + case 3: + case 7: + case 11: + case 12: + case 13: + case 14: + case 15: { + return `./bundle${i}/${options.output.filename}`; + } + default: { + return `./${options.output.filename}`; + } + } + } +}; diff --git a/test/configCases/module/public-path/webpack.config.js b/test/configCases/module/public-path/webpack.config.js new file mode 100644 index 00000000000..42fb32384c8 --- /dev/null +++ b/test/configCases/module/public-path/webpack.config.js @@ -0,0 +1,212 @@ +"use strict"; + +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration[]} */ +module.exports = (env, { testPath }) => [ + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "auto" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "auto", + chunkFilename: "async/[id].bundle1.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "auto", + filename: "initial/bundle2.mjs", + chunkFilename: "async/[id].bundle2.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + path: path.resolve(testPath, "./bundle3"), + module: true, + publicPath: "auto", + filename: "initial/bundle3.mjs", + chunkFilename: "async/[id].bundle3.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "", + chunkFilename: "async/[id].bundle5.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "", + filename: "initial/bundle6.mjs", + chunkFilename: "async/[id].bundle6.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + path: path.resolve(testPath, "./bundle7"), + module: true, + publicPath: "", + filename: "initial/bundle7.mjs", + chunkFilename: "async/[id].bundle7.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "https://example.com/public/path/" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "https://example.com/public/path/", + chunkFilename: "async/[id].bundle9.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + module: true, + publicPath: "https://example.com/public/path/", + filename: "initial/bundle10.mjs", + chunkFilename: "async/[id].bundle10.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + path: path.resolve(testPath, "./bundle11"), + module: true, + publicPath: "https://example.com/public/path/", + filename: "initial/bundle11.mjs", + chunkFilename: "async/[id].bundle11.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "node", + output: { + path: path.resolve(testPath, "./bundle12"), + module: true, + publicPath: "auto", + filename: "initial/bundle12.mjs", + chunkFilename: "async/[id].bundle12.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: ["node", "web"], + output: { + path: path.resolve(testPath, "./bundle13"), + module: true, + publicPath: "auto", + filename: "initial/bundle13.mjs", + chunkFilename: "async/[id].bundle13.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + path: path.resolve(testPath, "./bundle14"), + module: true, + filename: "js/bundle14.mjs", + chunkFilename: "js/[id].bundle14.mjs" + }, + experiments: { + outputModule: true + } + }, + { + devtool: false, + target: "web", + output: { + publicPath: "https://example.com/public/path/", + path: path.resolve(testPath, "./bundle15"), + module: true, + filename: "js/bundle15.mjs", + chunkFilename: "js/[id].bundle15.mjs" + }, + experiments: { + outputModule: true + } + } +]; diff --git a/test/configCases/module/reuse-webpack-esm-library/index.js b/test/configCases/module/reuse-webpack-esm-library/index.js new file mode 100644 index 00000000000..d62ae0367e2 --- /dev/null +++ b/test/configCases/module/reuse-webpack-esm-library/index.js @@ -0,0 +1,5 @@ +import { useCall } from "./lib"; + +it("should compile and run", () => { + expect(useCall()).toBe(1); +}); diff --git a/test/configCases/module/reuse-webpack-esm-library/lib.js b/test/configCases/module/reuse-webpack-esm-library/lib.js new file mode 100644 index 00000000000..b219515d77d --- /dev/null +++ b/test/configCases/module/reuse-webpack-esm-library/lib.js @@ -0,0 +1,95 @@ +import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react"; +/******/ var __webpack_modules__ = ({ + + /***/ "react": + /*!************************!*\ + !*** external "react" ***! + \************************/ + /***/ ((module) => { + + var x = y => { var x = {}; __webpack_require__.d(x, y); return x; } + var y = x => () => x + module.exports = __WEBPACK_EXTERNAL_MODULE_react__; + + /***/ }) + + /******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + /******/ // Check if module is in cache + /******/ var cachedModule = __webpack_module_cache__[moduleId]; + /******/ if (cachedModule !== undefined) { + /******/ return cachedModule.exports; + /******/ } + /******/ // Create a new module (and put it into the cache) + /******/ var module = __webpack_module_cache__[moduleId] = { + /******/ // no module.id needed + /******/ // no module.loaded needed + /******/ exports: {} + /******/ }; + /******/ + /******/ // Execute the module function + /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { + /******/ // define getter functions for harmony exports + /******/ __webpack_require__.d = (exports, definition) => { + /******/ for(var key in definition) { + /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { + /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); + /******/ } + /******/ } + /******/ }; + /******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { + /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) + /******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { + /******/ // define __esModule on exports + /******/ __webpack_require__.r = (exports) => { + /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { + /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); + /******/ } + /******/ Object.defineProperty(exports, '__esModule', { value: true }); + /******/ }; + /******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { + /*!***************************!*\ + !*** ./src/store/call.ts ***! + \***************************/ + __webpack_require__.r(__webpack_exports__); + /* harmony export */ __webpack_require__.d(__webpack_exports__, { + /* harmony export */ useCall: () => (/* binding */ useCall), + /* harmony export */ withCallManager: () => (/* binding */ withCallManager) + /* harmony export */ }); + /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); + + function withCallManager() { + return react__WEBPACK_IMPORTED_MODULE_0__.createElement(1); + } + function useCall() { + return withCallManager(); + } +})(); + +var __webpack_exports__useCall = __webpack_exports__.useCall; +var __webpack_exports__withCallManager = __webpack_exports__.withCallManager; +export { __webpack_exports__useCall as useCall, __webpack_exports__withCallManager as withCallManager }; diff --git a/test/configCases/module/reuse-webpack-esm-library/react.js b/test/configCases/module/reuse-webpack-esm-library/react.js new file mode 100644 index 00000000000..10a7ad78896 --- /dev/null +++ b/test/configCases/module/reuse-webpack-esm-library/react.js @@ -0,0 +1 @@ +export function createElement(a) { return a; } diff --git a/test/configCases/module/reuse-webpack-esm-library/webpack.config.js b/test/configCases/module/reuse-webpack-esm-library/webpack.config.js new file mode 100644 index 00000000000..6a81a7a2f93 --- /dev/null +++ b/test/configCases/module/reuse-webpack-esm-library/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: "eval", + optimization: { + concatenateModules: false + }, + resolve: { + alias: { + react: path.resolve(__dirname, "react") + } + } +}; diff --git a/test/configCases/module/runtime-chunk/index.js b/test/configCases/module/runtime-chunk/index.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/module/runtime-chunk/index.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/module/runtime-chunk/test.config.js b/test/configCases/module/runtime-chunk/test.config.js new file mode 100644 index 00000000000..8437090156f --- /dev/null +++ b/test/configCases/module/runtime-chunk/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.mjs", "./main.mjs"]; + } +}; diff --git a/test/configCases/module/runtime-chunk/webpack.config.js b/test/configCases/module/runtime-chunk/webpack.config.js new file mode 100644 index 00000000000..eacfbbc5fe4 --- /dev/null +++ b/test/configCases/module/runtime-chunk/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].mjs" + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: true, + runtimeChunk: "single" + } +}; diff --git a/test/configCases/module/simple/chunk.js b/test/configCases/module/simple/chunk.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/module/simple/chunk.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/module/simple/index.js b/test/configCases/module/simple/index.js new file mode 100644 index 00000000000..bdf68397f44 --- /dev/null +++ b/test/configCases/module/simple/index.js @@ -0,0 +1,12 @@ +it("should execute as module", () => { + expect( + (function () { + return !this; + })() + ).toBe(true); +}); + +it("should be able to load a chunk", async () => { + const module = await import("./chunk"); + expect(module.default).toBe(42); +}); diff --git a/test/configCases/module/simple/webpack.config.js b/test/configCases/module/simple/webpack.config.js new file mode 100644 index 00000000000..7c22e9021a1 --- /dev/null +++ b/test/configCases/module/simple/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + experiments: { + outputModule: true + }, + target: "node14" +}; diff --git a/test/configCases/module/split-chunks-issue-19657/index.js b/test/configCases/module/split-chunks-issue-19657/index.js new file mode 100644 index 00000000000..ad1acea94ec --- /dev/null +++ b/test/configCases/module/split-chunks-issue-19657/index.js @@ -0,0 +1,8 @@ +import m2 from "./testModule2.js" + +it("should compile and evaluate fine", (done) => { + expect(m2()).toBe("m11111111"); + done() +}); + +export default "index"; \ No newline at end of file diff --git a/test/configCases/module/split-chunks-issue-19657/test.config.js b/test/configCases/module/split-chunks-issue-19657/test.config.js new file mode 100644 index 00000000000..c49de5dd016 --- /dev/null +++ b/test/configCases/module/split-chunks-issue-19657/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i, options) { + return ["main.mjs"]; + } +}; diff --git a/test/configCases/module/split-chunks-issue-19657/testModule1.js b/test/configCases/module/split-chunks-issue-19657/testModule1.js new file mode 100644 index 00000000000..78fbf447153 --- /dev/null +++ b/test/configCases/module/split-chunks-issue-19657/testModule1.js @@ -0,0 +1 @@ +export const m1 = "m11111111"; diff --git a/test/configCases/module/split-chunks-issue-19657/testModule2.js b/test/configCases/module/split-chunks-issue-19657/testModule2.js new file mode 100644 index 00000000000..e6091bba12b --- /dev/null +++ b/test/configCases/module/split-chunks-issue-19657/testModule2.js @@ -0,0 +1,5 @@ +import { m1 } from "./testModule1"; + +export default function m2() { + return m1; +} \ No newline at end of file diff --git a/test/configCases/module/split-chunks-issue-19657/webpack.config.js b/test/configCases/module/split-chunks-issue-19657/webpack.config.js new file mode 100644 index 00000000000..c51aad53688 --- /dev/null +++ b/test/configCases/module/split-chunks-issue-19657/webpack.config.js @@ -0,0 +1,36 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + mode: "development", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module", + filename: "[name].mjs", + chunkFilename: "[name].chunk.mjs" + }, + devtool: false, + optimization: { + minimize: false, + splitChunks: { + chunks: "all", + minSize: 0, + cacheGroups: { + testModule1: { + test: /testModule1/, + name: "testModule1", + priority: 10, + enforce: true + }, + testModule2: { + test: /testModule2/, + name: "testModule2", + priority: 20 + } + } + } + } +}; diff --git a/test/configCases/module/split-chunks-without-externals/index.js b/test/configCases/module/split-chunks-without-externals/index.js new file mode 100644 index 00000000000..5faf1b78927 --- /dev/null +++ b/test/configCases/module/split-chunks-without-externals/index.js @@ -0,0 +1,8 @@ +import { m1 } from "./testModule1.js" +import { m2 } from "./testModule2.js" + +it("should compile and evaluate fine", (done) => { + expect(m1).toBeDefined(); + expect(m2).toBeDefined(); + done() +}); diff --git a/test/configCases/module/split-chunks-without-externals/test.config.js b/test/configCases/module/split-chunks-without-externals/test.config.js new file mode 100644 index 00000000000..a9d0af8cdf5 --- /dev/null +++ b/test/configCases/module/split-chunks-without-externals/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.mjs", "testModule1.mjs", "testModule2.mjs"]; + } +}; diff --git a/test/configCases/module/split-chunks-without-externals/testModule1.js b/test/configCases/module/split-chunks-without-externals/testModule1.js new file mode 100644 index 00000000000..78fbf447153 --- /dev/null +++ b/test/configCases/module/split-chunks-without-externals/testModule1.js @@ -0,0 +1 @@ +export const m1 = "m11111111"; diff --git a/test/configCases/module/split-chunks-without-externals/testModule2.js b/test/configCases/module/split-chunks-without-externals/testModule2.js new file mode 100644 index 00000000000..1c580944c31 --- /dev/null +++ b/test/configCases/module/split-chunks-without-externals/testModule2.js @@ -0,0 +1 @@ +export const m2 = "m2222222"; diff --git a/test/configCases/module/split-chunks-without-externals/webpack.config.js b/test/configCases/module/split-chunks-without-externals/webpack.config.js new file mode 100644 index 00000000000..c51aad53688 --- /dev/null +++ b/test/configCases/module/split-chunks-without-externals/webpack.config.js @@ -0,0 +1,36 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + mode: "development", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module", + filename: "[name].mjs", + chunkFilename: "[name].chunk.mjs" + }, + devtool: false, + optimization: { + minimize: false, + splitChunks: { + chunks: "all", + minSize: 0, + cacheGroups: { + testModule1: { + test: /testModule1/, + name: "testModule1", + priority: 10, + enforce: true + }, + testModule2: { + test: /testModule2/, + name: "testModule2", + priority: 20 + } + } + } + } +}; diff --git a/test/configCases/module/split-chunks/index.js b/test/configCases/module/split-chunks/index.js new file mode 100644 index 00000000000..d5753c14d6b --- /dev/null +++ b/test/configCases/module/split-chunks/index.js @@ -0,0 +1,16 @@ +import value from "./separate"; +import { test as t } from "external-self"; + +it("should compile", () => { + expect(value).toBe(42); +}); +it("should circular depend on itself external", () => { + expect(test()).toBe(42); + expect(t()).toBe(42); +}); + +function test() { + return 42; +} + +export { test }; diff --git a/test/configCases/module/split-chunks/separate.js b/test/configCases/module/split-chunks/separate.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/module/split-chunks/separate.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/module/split-chunks/test.config.js b/test/configCases/module/split-chunks/test.config.js new file mode 100644 index 00000000000..ed5826c539f --- /dev/null +++ b/test/configCases/module/split-chunks/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.mjs", "./separate.mjs", "./main.mjs"]; + } +}; diff --git a/test/configCases/module/split-chunks/webpack.config.js b/test/configCases/module/split-chunks/webpack.config.js new file mode 100644 index 00000000000..458ab504618 --- /dev/null +++ b/test/configCases/module/split-chunks/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].mjs", + library: { + type: "module" + } + }, + target: ["web", "es2020"], + experiments: { + outputModule: true + }, + optimization: { + minimize: true, + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + filename: "separate.mjs", + enforce: true + } + } + } + }, + externals: { + "external-self": "./main.mjs" + } +}; diff --git a/test/configCases/no-parse/module.exports/webpack.config.js b/test/configCases/no-parse/module.exports/webpack.config.js index 5588dd0a1f7..72d119f9362 100644 --- a/test/configCases/no-parse/module.exports/webpack.config.js +++ b/test/configCases/no-parse/module.exports/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { noParse: /not-parsed/ diff --git a/test/configCases/no-parse/no-parse-function/webpack.config.js b/test/configCases/no-parse/no-parse-function/webpack.config.js index b31b5cc2959..07408be3ce4 100644 --- a/test/configCases/no-parse/no-parse-function/webpack.config.js +++ b/test/configCases/no-parse/no-parse-function/webpack.config.js @@ -1,6 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { - noParse: function(content) { + noParse(content) { return /not-parsed/.test(content); } } diff --git a/test/configCases/node/filename-and-dirname-eval-only/cjs.js b/test/configCases/node/filename-and-dirname-eval-only/cjs.js new file mode 100644 index 00000000000..00e22eee055 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-eval-only/cjs.js @@ -0,0 +1,4 @@ +const dirname = __dirname; +const filename = __filename; + +module.exports = { dirname, filename }; diff --git a/test/configCases/node/filename-and-dirname-eval-only/esm.js b/test/configCases/node/filename-and-dirname-eval-only/esm.js new file mode 100644 index 00000000000..a71d7a921bc --- /dev/null +++ b/test/configCases/node/filename-and-dirname-eval-only/esm.js @@ -0,0 +1,4 @@ +const dirname = import.meta.dirname; +const filename = import.meta.filename; + +export { dirname, filename }; diff --git a/test/configCases/node/filename-and-dirname-eval-only/index.js b/test/configCases/node/filename-and-dirname-eval-only/index.js new file mode 100644 index 00000000000..3ce78acf985 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-eval-only/index.js @@ -0,0 +1,19 @@ +import path from "path"; +import { dirname as dirnameCjs, filename as filenameCjs } from "./cjs.js"; +import { dirname as dirnameEsm, filename as filenameEsm } from "./esm.js"; + +it("should use custom name", () => { + const stats = __STATS__.children[__STATS_I__]; + + if (typeof globalThis.document === "undefined") { + expect(dirnameCjs).toBe(stats.outputPath); + expect(filenameCjs).toBe(path.join(stats.outputPath, `./bundle${__STATS_I__}.${__STATS_I__ === 0 ? "js" : "mjs"}`)); + expect(dirnameEsm).toBe(stats.outputPath); + expect(filenameEsm).toBe(path.join(stats.outputPath, `./bundle${__STATS_I__}.${__STATS_I__ === 0 ? "js" : "mjs"}`)); + } else { + expect(dirnameCjs).toBe(stats.outputPath); + expect(filenameCjs.endsWith(`bundle${__STATS_I__}.${__STATS_I__ === 3 ? "js" : "mjs"}`)).toBe(true) + expect(dirnameEsm).toBe(stats.outputPath); + expect(filenameEsm.endsWith(`bundle${__STATS_I__}.${__STATS_I__ === 3 ? "js" : "mjs"}`)).toBe(true); + } +}); diff --git a/test/configCases/node/filename-and-dirname-eval-only/test.filter.js b/test/configCases/node/filename-and-dirname-eval-only/test.filter.js new file mode 100644 index 00000000000..03c7ecb753f --- /dev/null +++ b/test/configCases/node/filename-and-dirname-eval-only/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNodePrefix = require("../../../helpers/supportsNodePrefix"); + +module.exports = () => supportsNodePrefix(); diff --git a/test/configCases/node/filename-and-dirname-eval-only/webpack.config.js b/test/configCases/node/filename-and-dirname-eval-only/webpack.config.js new file mode 100644 index 00000000000..93483453538 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-eval-only/webpack.config.js @@ -0,0 +1,68 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "node", + node: { + __filename: "eval-only", + __dirname: "eval-only" + } + }, + { + target: "node", + node: { + __filename: "eval-only", + __dirname: "eval-only" + }, + output: { + module: true + }, + experiments: { + outputModule: true + } + }, + { + target: "node24", + node: { + __filename: "eval-only", + __dirname: "eval-only" + }, + output: { + module: true + }, + experiments: { + outputModule: true + } + }, + { + target: "web", + node: { + __filename: "eval-only", + __dirname: "eval-only" + }, + resolve: { + fallback: { + path: false + } + } + }, + { + target: "web", + node: { + __filename: "eval-only", + __dirname: "eval-only" + }, + output: { + module: true + }, + experiments: { + outputModule: true + }, + resolve: { + fallback: { + path: false + } + } + } +]; diff --git a/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/index.js b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/index.js new file mode 100644 index 00000000000..0efc24ace34 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/index.js @@ -0,0 +1,15 @@ +import path from "path"; +import fs from "fs"; + +it("should use custom name", () => { + expect(__dirname).toBe(__STATS__.outputPath); + + const bundleFile = path.join(__STATS__.outputPath, "./bundle0.mjs"); + + expect(__filename).toBe(bundleFile); + + const content = fs.readFileSync(bundleFile, "utf8"); + + expect(content.includes("custom.dirname")).toBe(true); + expect(content.includes("custom.filename")).toBe(true); +}); diff --git a/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/test.config.js b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/test.config.js new file mode 100644 index 00000000000..a5581928a1e --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/test.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const path = require("path"); +const { pathToFileURL } = require("url"); + +let counter = 0; + +module.exports = { + moduleScope(scope, options) { + const bundleFilename = path.join( + options.output.path, + `bundle${counter++}.mjs` + ); + scope.custom = { + url: pathToFileURL(bundleFilename).toString(), + dirname: path.dirname(bundleFilename), + filename: bundleFilename + }; + } +}; diff --git a/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/test.filter.js b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/test.filter.js new file mode 100644 index 00000000000..03c7ecb753f --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNodePrefix = require("../../../helpers/supportsNodePrefix"); + +module.exports = () => supportsNodePrefix(); diff --git a/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/webpack.config.js b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/webpack.config.js new file mode 100644 index 00000000000..48516e288ee --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module-meta-dirname-and-filename/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + experiments: { + outputModule: true + }, + output: { + module: true, + importMetaName: "custom", + environment: { + importMetaDirnameAndFilename: true + } + }, + node: { + __filename: "node-module", + __dirname: "node-module" + } +}; diff --git a/test/configCases/node/filename-and-dirname-node-module/index.js b/test/configCases/node/filename-and-dirname-node-module/index.js new file mode 100644 index 00000000000..00adc327ada --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module/index.js @@ -0,0 +1,6 @@ +import path from "path"; + +it("should use custom name", () => { + expect(__dirname).toBe(__STATS__.outputPath); + expect(__filename).toBe(path.join(__STATS__.outputPath, "./bundle0.mjs")); +}); diff --git a/test/configCases/node/filename-and-dirname-node-module/test.config.js b/test/configCases/node/filename-and-dirname-node-module/test.config.js new file mode 100644 index 00000000000..3d4a72f1411 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module/test.config.js @@ -0,0 +1,14 @@ +"use strict"; + +const path = require("path"); +const { pathToFileURL } = require("url"); + +module.exports = { + moduleScope(scope, options) { + scope.custom = { + url: pathToFileURL( + path.join(options.output.path, "bundle0.mjs") + ).toString() + }; + } +}; diff --git a/test/configCases/node/filename-and-dirname-node-module/test.filter.js b/test/configCases/node/filename-and-dirname-node-module/test.filter.js new file mode 100644 index 00000000000..03c7ecb753f --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNodePrefix = require("../../../helpers/supportsNodePrefix"); + +module.exports = () => supportsNodePrefix(); diff --git a/test/configCases/node/filename-and-dirname-node-module/webpack.config.js b/test/configCases/node/filename-and-dirname-node-module/webpack.config.js new file mode 100644 index 00000000000..aa469f23126 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-node-module/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + experiments: { + outputModule: true + }, + output: { + module: true, + importMetaName: "custom" + }, + node: { + __filename: "node-module", + __dirname: "node-module" + } +}; diff --git a/test/configCases/node/filename-and-dirname-universal/index.js b/test/configCases/node/filename-and-dirname-universal/index.js new file mode 100644 index 00000000000..59060d35b24 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-universal/index.js @@ -0,0 +1,16 @@ +const isBrowser = typeof window !== "undefined" + +it(`should work ${isBrowser ? "in browser env" : "in node env"}`, () => { + if (isBrowser) { + expect(true).toBe(true); + } else { + // We can't handle `parser.hooks.typeof` and `parser.hooks.evaluateTypeof` for `import.meta.dirname` and `import.meta.filename` + // because they may not exist when code is running + expect(import.meta.dirname).toBe( + __STATS__.children[__STATS_I__].outputPath + ); + expect(typeof import.meta.dirname).toBe("string"); + expect(/bundle[0-3].mjs/.test(import.meta.filename)).toBe(true); + expect(typeof import.meta.filename).toBe("string"); + } +}); diff --git a/test/configCases/node/filename-and-dirname-universal/test.filter.js b/test/configCases/node/filename-and-dirname-universal/test.filter.js new file mode 100644 index 00000000000..03c7ecb753f --- /dev/null +++ b/test/configCases/node/filename-and-dirname-universal/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNodePrefix = require("../../../helpers/supportsNodePrefix"); + +module.exports = () => supportsNodePrefix(); diff --git a/test/configCases/node/filename-and-dirname-universal/webpack.config.js b/test/configCases/node/filename-and-dirname-universal/webpack.config.js new file mode 100644 index 00000000000..7d0ed5bf268 --- /dev/null +++ b/test/configCases/node/filename-and-dirname-universal/webpack.config.js @@ -0,0 +1,47 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + name: "web", + target: ["node", "web"], + output: { + module: true + }, + experiments: { + outputModule: true + } + }, + { + name: "node", + target: ["node", "web"], + output: { + module: true + }, + experiments: { + outputModule: true + } + }, + { + name: "web", + devtool: "eval", + target: ["node", "web"], + output: { + module: true + }, + experiments: { + outputModule: true + } + }, + { + name: "node", + devtool: "eval", + target: ["node", "web"], + output: { + module: true + }, + experiments: { + outputModule: true + } + } +]; diff --git a/test/configCases/node/filename-and-dirname/cjs-false.js b/test/configCases/node/filename-and-dirname/cjs-false.js new file mode 100644 index 00000000000..4bf95fd7d59 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/cjs-false.js @@ -0,0 +1,10 @@ +const path = require("path"); +const { dirname, filename } = require("./commonjs.js"); + +it("should bundle", async () => { + const __dirname = __STATS__.children[__STATS_I__].outputPath; + const __filename = path.join(__STATS__.children[__STATS_I__].outputPath, `./bundle${__STATS_I__}.js`); + + expect(dirname).toBe(__dirname); + expect(filename).toBe(__filename); +}); diff --git a/test/configCases/node/filename-and-dirname/commonjs.js b/test/configCases/node/filename-and-dirname/commonjs.js new file mode 100644 index 00000000000..f29924cf378 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/commonjs.js @@ -0,0 +1,4 @@ +const dirname = __dirname; +const filename = __filename; + +module.exports = { dirname, filename } diff --git a/test/configCases/node/filename-and-dirname/destructuring.js b/test/configCases/node/filename-and-dirname/destructuring.js new file mode 100644 index 00000000000..45680da3b31 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/destructuring.js @@ -0,0 +1,3 @@ +const { dirname, filename } = import.meta; + +export { dirname, filename }; diff --git a/test/configCases/node/filename-and-dirname/esm-false.js b/test/configCases/node/filename-and-dirname/esm-false.js new file mode 100644 index 00000000000..ffe600d0490 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/esm-false.js @@ -0,0 +1,13 @@ +import path from "path"; +import { dirname, filename } from "./esm.js" +import { dirname as otherDirname, filename as otherFilename } from "./destructuring.js" + +it("should bundle", async () => { + const __dirname = __STATS__.children[__STATS_I__].outputPath; + const __filename = path.join(__STATS__.children[__STATS_I__].outputPath, `./bundle${__STATS_I__}.mjs`); + + expect(dirname).toBe(__dirname); + expect(filename).toBe(__filename); + expect(otherDirname).toBe(__dirname); + expect(otherFilename).toBe(__filename); +}); diff --git a/test/configCases/node/filename-and-dirname/esm.js b/test/configCases/node/filename-and-dirname/esm.js new file mode 100644 index 00000000000..d2cbf808de7 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/esm.js @@ -0,0 +1,4 @@ +const dirname = import.meta.dirname; +const filename = import.meta.filename; + +export { dirname, filename } diff --git a/test/configCases/node/filename-and-dirname/index.js b/test/configCases/node/filename-and-dirname/index.js new file mode 100644 index 00000000000..118ab621be2 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/index.js @@ -0,0 +1,57 @@ +import path from "path"; +import { dirname as dirnameCommonJS, filename as filenameCommonJS } from "./commonjs.js" +import { dirname as dirnameESM, filename as filenameESM } from "./esm.js" +import { dirname as otherDirnameESM, filename as otherFilenameESM } from "./destructuring.js" + +const __dirname = "dirname"; +const __filename = "filename"; + +it("should bundle", () => { + switch (NODE_VALUE) { + case true: + expect(dirnameCommonJS).toBe(""); + expect(filenameCommonJS).toBe("commonjs.js"); + expect(dirnameESM).toBe(""); + expect(filenameESM).toBe("esm.js"); + expect(otherDirnameESM).toBe(""); + expect(otherFilenameESM).toBe("destructuring.js"); + break; + case "mock": + case "warn-mock": + expect(dirnameCommonJS).toBe("/"); + expect(filenameCommonJS).toBe("/index.js"); + expect(dirnameESM).toBe("/"); + expect(filenameESM).toBe("/index.js"); + expect(otherDirnameESM).toBe("/"); + expect(otherFilenameESM).toBe("/index.js"); + break; + case "node-module": { + const dirname = __STATS__.children[__STATS_I__].outputPath; + const filename = path.join(__STATS__.children[__STATS_I__].outputPath, `./bundle${__STATS_I__}.mjs`); + + expect(dirnameCommonJS).toBe(dirname); + expect(filenameCommonJS).toBe(filename); + expect(dirnameESM).toBe(dirname); + expect(filenameESM).toBe(filename); + expect(otherDirnameESM).toBe(dirname); + expect(otherFilenameESM).toBe(filename); + break; + } + case false: + case "eval-only": { + const dirname = __STATS__.children[__STATS_I__].outputPath; + const filename = path.join( + __STATS__.children[__STATS_I__].outputPath, + FORMAT === "esm" ? `./bundle${__STATS_I__}.mjs` : `./bundle${__STATS_I__}.js` + ); + + expect(dirnameCommonJS).toBe(dirname); + expect(filenameCommonJS).toBe(filename); + expect(dirnameESM).toBe(dirname); + expect(filenameESM).toBe(filename); + expect(otherDirnameESM).toBe(dirname); + expect(otherFilenameESM).toBe(filename); + break; + } + } +}); diff --git a/test/configCases/node/filename-and-dirname/test.filter.js b/test/configCases/node/filename-and-dirname/test.filter.js new file mode 100644 index 00000000000..03c7ecb753f --- /dev/null +++ b/test/configCases/node/filename-and-dirname/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNodePrefix = require("../../../helpers/supportsNodePrefix"); + +module.exports = () => supportsNodePrefix(); diff --git a/test/configCases/node/filename-and-dirname/warnings.js b/test/configCases/node/filename-and-dirname/warnings.js new file mode 100644 index 00000000000..dded116309c --- /dev/null +++ b/test/configCases/node/filename-and-dirname/warnings.js @@ -0,0 +1,34 @@ +"use strict"; + +module.exports = [ + /"__dirname" has been used/, + /"__filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"__dirname" has been used/, + /"__filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"__dirname" has been used/, + /"__filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"__dirname" has been used/, + /"__filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"__dirname" has been used/, + /"__filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/, + /"import.meta.dirname" has been used/, + /"import.meta.filename" has been used/ +]; diff --git a/test/configCases/node/filename-and-dirname/webpack.config.js b/test/configCases/node/filename-and-dirname/webpack.config.js new file mode 100644 index 00000000000..e51a8792ec0 --- /dev/null +++ b/test/configCases/node/filename-and-dirname/webpack.config.js @@ -0,0 +1,201 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {(boolean | "warn-mock" | "mock" | "node-module" | "eval-only")[]} */ +const values = [true, "warn-mock", "mock", "node-module", "eval-only"]; + +/** @type {import("../../../../").Configuration[]} */ +const config = []; + +// CommonJS +config.push( + ...values + .filter((item) => item !== "node-module") + .map((value) => ({ + target: "node", + node: { + __filename: value, + __dirname: value + }, + plugins: [ + new webpack.DefinePlugin({ + NODE_VALUE: + typeof value === "boolean" ? value : JSON.stringify(value), + FORMAT: JSON.stringify("cjs") + }) + ] + })) +); + +// // ES modules +config.push( + ...values.map((value) => ({ + target: "node", + node: { + __filename: value, + __dirname: value + }, + output: { + module: true + }, + experiments: { + outputModule: true + }, + plugins: [ + new webpack.DefinePlugin({ + NODE_VALUE: typeof value === "boolean" ? value : JSON.stringify(value), + FORMAT: JSON.stringify("esm") + }) + ] + })) +); + +config.push( + ...values.map((value) => ({ + target: "node", + devtool: "eval", + node: { + __filename: value, + __dirname: value + }, + output: { + module: true + }, + experiments: { + outputModule: true + }, + plugins: [ + new webpack.DefinePlugin({ + NODE_VALUE: typeof value === "boolean" ? value : JSON.stringify(value), + FORMAT: JSON.stringify("esm") + }) + ] + })) +); + +// ES modules with support `import.meta.dirname` and `import.meta.filename` +config.push( + ...values.map((value) => ({ + target: "node", + node: { + __filename: value, + __dirname: value + }, + output: { + module: true, + environment: { + importMetaDirnameAndFilename: true + } + }, + experiments: { + outputModule: true + }, + plugins: [ + new webpack.DefinePlugin({ + NODE_VALUE: typeof value === "boolean" ? value : JSON.stringify(value), + FORMAT: JSON.stringify("esm") + }) + ] + })) +); + +config.push( + ...values.map((value) => ({ + devtool: "eval", + target: "node", + node: { + __filename: value, + __dirname: value + }, + output: { + module: true, + environment: { + importMetaDirnameAndFilename: true + } + }, + experiments: { + outputModule: true + }, + plugins: [ + new webpack.DefinePlugin({ + NODE_VALUE: typeof value === "boolean" ? value : JSON.stringify(value), + FORMAT: JSON.stringify("esm") + }) + ] + })) +); + +config.push({ + entry: "./cjs-false.js", + target: "node", + node: { + __filename: false, + __dirname: false + } +}); + +config.push({ + entry: "./esm-false.js", + target: "node", + node: { + __filename: false, + __dirname: false + }, + output: { + module: true + }, + experiments: { + outputModule: true + } +}); + +config.push({ + entry: "./esm-false.js", + target: "node", + output: { + module: true + }, + module: { + parser: { + javascript: { + importMeta: false + } + } + }, + experiments: { + outputModule: true + } +}); + +config.push({ + entry: "./esm-false.js", + target: "node", + node: false, + output: { + module: true + }, + experiments: { + outputModule: true + } +}); + +config.push({ + entry: "./esm-false.js", + target: "node", + module: { + parser: { + javascript: { + node: false + } + } + }, + output: { + module: true + }, + experiments: { + outputModule: true + } +}); + +module.exports = config; diff --git a/test/configCases/node/issue-18409-2/common.js b/test/configCases/node/issue-18409-2/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/node/issue-18409-2/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/node/issue-18409-2/index.js b/test/configCases/node/issue-18409-2/index.js new file mode 100644 index 00000000000..0f7372a1927 --- /dev/null +++ b/test/configCases/node/issue-18409-2/index.js @@ -0,0 +1,8 @@ +import common from "./common"; +import separate from "./separate"; + +it("should compile", () => { + expect(common).toBe("common"); + expect(separate).toBe("separate"); +}); +export default "main"; diff --git a/test/configCases/node/issue-18409-2/separate.js b/test/configCases/node/issue-18409-2/separate.js new file mode 100644 index 00000000000..4b7b9dcb7dd --- /dev/null +++ b/test/configCases/node/issue-18409-2/separate.js @@ -0,0 +1 @@ +export default "separate"; diff --git a/test/configCases/node/issue-18409-2/test.config.js b/test/configCases/node/issue-18409-2/test.config.js new file mode 100644 index 00000000000..2059a3f8977 --- /dev/null +++ b/test/configCases/node/issue-18409-2/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.js"]; + } +}; diff --git a/test/configCases/node/issue-18409-2/webpack.config.js b/test/configCases/node/issue-18409-2/webpack.config.js new file mode 100644 index 00000000000..32398d5d0e9 --- /dev/null +++ b/test/configCases/node/issue-18409-2/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js", + dependOn: "shared" + }, + shared: "./common.js" + }, + output: { + filename: "[name].js" + }, + target: ["node"], + optimization: { + minimize: false, + runtimeChunk: false, + + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + enforce: true, + filename: "[name].[contenthash].js" + } + } + } + } +}); diff --git a/test/configCases/node/issue-18409/common.js b/test/configCases/node/issue-18409/common.js new file mode 100644 index 00000000000..bfae8d8735f --- /dev/null +++ b/test/configCases/node/issue-18409/common.js @@ -0,0 +1 @@ +export default "common"; \ No newline at end of file diff --git a/test/configCases/node/issue-18409/index.js b/test/configCases/node/issue-18409/index.js new file mode 100644 index 00000000000..0f7372a1927 --- /dev/null +++ b/test/configCases/node/issue-18409/index.js @@ -0,0 +1,8 @@ +import common from "./common"; +import separate from "./separate"; + +it("should compile", () => { + expect(common).toBe("common"); + expect(separate).toBe("separate"); +}); +export default "main"; diff --git a/test/configCases/node/issue-18409/separate.js b/test/configCases/node/issue-18409/separate.js new file mode 100644 index 00000000000..4b7b9dcb7dd --- /dev/null +++ b/test/configCases/node/issue-18409/separate.js @@ -0,0 +1 @@ +export default "separate"; diff --git a/test/configCases/node/issue-18409/test.config.js b/test/configCases/node/issue-18409/test.config.js new file mode 100644 index 00000000000..2059a3f8977 --- /dev/null +++ b/test/configCases/node/issue-18409/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.js"]; + } +}; diff --git a/test/configCases/node/issue-18409/webpack.config.js b/test/configCases/node/issue-18409/webpack.config.js new file mode 100644 index 00000000000..d9e3c7db859 --- /dev/null +++ b/test/configCases/node/issue-18409/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = () => ({ + devtool: false, + mode: "development", + entry: { + main: { + import: "./index.js", + dependOn: "shared" + }, + shared: "./common.js" + }, + output: { + filename: "[name].js" + }, + target: ["node"], + optimization: { + minimize: false, + runtimeChunk: "single", + + splitChunks: { + cacheGroups: { + separate: { + test: /separate/, + chunks: "all", + enforce: true, + filename: "[name].[contenthash].js" + } + } + } + } +}); diff --git a/test/configCases/node/node-prefix/index.js b/test/configCases/node/node-prefix/index.js new file mode 100644 index 00000000000..84aa3bd98fd --- /dev/null +++ b/test/configCases/node/node-prefix/index.js @@ -0,0 +1,8 @@ +import vm1 from "vm"; +import vm2 from "node:vm"; + +it("should allow importing node builtin modules with the node: prefix", () => { + expect(require("node:fs")).toBe(require("fs")); + expect(require("node:path")).toBe(require("path")); + expect(vm2).toBe(vm1); +}); diff --git a/test/configCases/node/node-prefix/webpack.config.js b/test/configCases/node/node-prefix/webpack.config.js new file mode 100644 index 00000000000..b82488942a5 --- /dev/null +++ b/test/configCases/node/node-prefix/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node" +}; diff --git a/test/configCases/node/output-module-external/import.js b/test/configCases/node/output-module-external/import.js new file mode 100644 index 00000000000..d2556701494 --- /dev/null +++ b/test/configCases/node/output-module-external/import.js @@ -0,0 +1,320 @@ +const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + +it("should load node builtins via dynamic import", async () => { + const load = async (modulePromise) => { + const imported = await modulePromise; + return imported.default || imported; + }; + const expectIfAvailable = (imported, fn) => { + if (imported) fn(imported); + }; + + const assertBuiltin = await load(import("assert")); + const asyncHooks = await load(import("async_hooks")); + const buffer = await load(import("buffer")); + const childProcess = await load(import("child_process")); + const cluster = await load(import("cluster")); + const consoleBuiltin = await load(import("console")); + const constants = await load(import("constants")); + const crypto = await load(import("crypto")); + const dgram = await load(import("dgram")); + const dns = await load(import("dns")); + const domain = await load(import("domain")); + const events = await load(import("events")); + const fs = await load(import("fs")); + const http = await load(import("http")); + const http2 = await load(import("http2")); + const https = await load(import("https")); + const inspector = await load(import("inspector")); + const moduleBuiltin = await load(import("module")); + const net = await load(import("net")); + const os = await load(import("os")); + const path = await load(import("path")); + const perfHooks = await load(import("perf_hooks")); + const processBuiltin = await load(import("process")); + const punycode = await load(import("punycode")); + const querystring = await load(import("querystring")); + const readline = await load(import("readline")); + const repl = await load(import("repl")); + const stream = await load(import("stream")); + const stringDecoder = await load(import("string_decoder")); + const sys = await load(import("sys")); + const timers = await load(import("timers")); + const tls = await load(import("tls")); + const traceEvents = await load(import("trace_events")); + const tty = await load(import("tty")); + const url = await load(import("url")); + const util = await load(import("util")); + const v8 = await load(import("v8")); + const vm = await load(import("vm")); + const zlib = await load(import("zlib")); + + const builtinImports = { + assert: assertBuiltin, + async_hooks: asyncHooks, + buffer, + child_process: childProcess, + cluster, + console: consoleBuiltin, + constants, + crypto, + dgram, + dns, + domain, + events, + fs, + http, + http2, + https, + inspector, + module: moduleBuiltin, + net, + os, + path, + perf_hooks: perfHooks, + process: processBuiltin, + punycode, + querystring, + readline, + repl, + stream, + string_decoder: stringDecoder, + sys, + timers, + tls, + trace_events: traceEvents, + tty, + url, + util, + v8, + vm, + zlib + }; + + const baseBuiltinCount = Object.keys(builtinImports).length; + + const diagnosticsChannel = + NODE_VERSION >= 14 ? await load(import("diagnostics_channel")) : undefined; + const wasi = NODE_VERSION >= 18 ? await load(import("wasi")) : undefined; + const workerThreads = + NODE_VERSION >= 12 ? await load(import("worker_threads")) : undefined; + + const pathPosix = + NODE_VERSION >= 15 ? await load(import("path/posix")) : undefined; + const pathWin32 = + NODE_VERSION >= 15 ? await load(import("path/win32")) : undefined; + const dnsPromises = + NODE_VERSION >= 15 ? await load(import("dns/promises")) : undefined; + const inspectorPromises = + NODE_VERSION >= 19 ? await load(import("inspector/promises")) : undefined; + const streamConsumers = + NODE_VERSION >= 16 ? await load(import("stream/consumers")) : undefined; + const streamPromises = + NODE_VERSION >= 15 ? await load(import("stream/promises")) : undefined; + + const utilTypes = + NODE_VERSION >= 15 ? await load(import("util/types")) : undefined; + const streamWeb = + NODE_VERSION >= 16 ? await load(import("stream/web")) : undefined; + const readlinePromises = + NODE_VERSION >= 17 ? await load(import("readline/promises")) : undefined; + const timersPromises = + NODE_VERSION >= 15 ? await load(import("timers/promises")) : undefined; + + const assertStrict = + NODE_VERSION >= 15 ? await load(import("assert/strict")) : undefined; + const fsPromises = + NODE_VERSION >= 14 ? await load(import("fs/promises")) : undefined; + + const optionalBuiltins = [ + ["diagnostics_channel", diagnosticsChannel], + ["readline/promises", readlinePromises], + ["stream/consumers", streamConsumers], + ["stream/promises", streamPromises], + ["stream/web", streamWeb], + ["timers/promises", timersPromises], + ["wasi", wasi], + ["worker_threads", workerThreads], + ["inspector/promises", inspectorPromises], + ["dns/promises", dnsPromises], + ["path/posix", pathPosix], + ["path/win32", pathWin32], + ["util/types", utilTypes], + ["assert/strict", assertStrict], + ["fs/promises", fsPromises] + ]; + + for (const [request, imported] of optionalBuiltins) { + if (imported) builtinImports[request] = imported; + } + + const content = fs.readFileSync(__filename, "utf-8"); + + expect(Object.keys(builtinImports)).toHaveLength( + baseBuiltinCount + + optionalBuiltins.filter(([, imported]) => Boolean(imported)).length + ); + + for (const [request, imported] of Object.entries(builtinImports)) { + expect(imported).toBeDefined(); + expect(content).toMatch( + new RegExp(`import\\(\\s*["']${escapeRegExp(request)}["']\\s*\\)`) + ); + } + + expect(() => assertBuiltin.strictEqual(1, 1)).not.toThrow(); + + expectIfAvailable(assertStrict, (assertStrict) => { + expect(() => + assertStrict.deepStrictEqual({ a: 1 }, { a: 1 }) + ).not.toThrow(); + }); + + const hook = asyncHooks.createHook({}); + expect(hook).toBeDefined(); + + const buf = buffer.Buffer.from("hello"); + expect(buf.toString()).toBe("hello"); + + expect(typeof childProcess.spawn).toBe("function"); + expect(typeof cluster.isMaster).toBe("boolean"); + + const customConsole = new consoleBuiltin.Console(process.stdout); + expect(customConsole).toBeDefined(); + + expect(constants).toBeDefined(); + + const hash = crypto.createHash("sha256").update("test").digest("hex"); + expect(hash).toBeDefined(); + + const socket = dgram.createSocket("udp4"); + expect(socket).toBeDefined(); + socket.close(); + + expectIfAvailable(diagnosticsChannel, (channel) => { + const diagnostics = channel.channel("test"); + expect(diagnostics).toBeDefined(); + }); + + expect(typeof dns.lookup).toBe("function"); + + expectIfAvailable(dnsPromises, (dnsPromises) => { + expect(typeof dnsPromises.lookup).toBe("function"); + }); + + const d = domain.create(); + expect(d).toBeDefined(); + + const emitter = new events.EventEmitter(); + const emitter2 = new events(); + expect(emitter).toBeDefined(); + expect(emitter2).toBeDefined(); + expect(events.EventEmitter).toBe(events); + + expect(typeof fs.existsSync).toBe("function"); + + expectIfAvailable(fsPromises, (fsPromises) => { + expect(typeof fsPromises.readFile).toBe("function"); + }); + + const httpServer = http.createServer(); + expect(httpServer).toBeDefined(); + httpServer.close(); + + expect(typeof http2.createSecureServer).toBe("function"); + expect(typeof https.createServer).toBe("function"); + expect(typeof inspector.url).toBe("function"); + + expectIfAvailable(inspectorPromises, (inspectorPromises) => { + expect(typeof inspectorPromises.Session).toBe("function"); + }); + + expect(Array.isArray(moduleBuiltin.builtinModules)).toBe(true); + + const netServer = net.createServer(); + expect(netServer).toBeDefined(); + netServer.close(); + + expect(typeof os.platform()).toBe("string"); + expect(path.extname("foo.js")).toBe(".js"); + + expectIfAvailable(pathPosix, (pathPosix) => { + expect(pathPosix.join("/foo", "bar")).toBe("/foo/bar"); + }); + + expectIfAvailable(pathWin32, (pathWin32) => { + expect(pathWin32.join("C:\\foo", "bar")).toBe("C:\\foo\\bar"); + }); + + expect(perfHooks.performance).toBeDefined(); + expect(typeof processBuiltin.platform).toBe("string"); + expect(punycode.encode("mañana")).toBe("maana-pta"); + + expect(querystring.parse("foo=bar&baz=qux")).toEqual({ + foo: "bar", + baz: "qux" + }); + + expect(typeof readline.createInterface).toBe("function"); + + expectIfAvailable(readlinePromises, (readlinePromises) => { + expect(typeof readlinePromises.createInterface).toBe("function"); + }); + + expect(typeof repl.start).toBe("function"); + + const readable = new stream.Readable(); + expect(readable).toBeDefined(); + + expectIfAvailable(streamConsumers, (streamConsumers) => { + expect(typeof streamConsumers.text).toBe("function"); + }); + + expectIfAvailable(streamPromises, (streamPromises) => { + expect(typeof streamPromises.pipeline).toBe("function"); + }); + + expectIfAvailable(streamWeb, (streamWeb) => { + expect(typeof streamWeb.ReadableStream).toBe("function"); + }); + + const decoder = new stringDecoder.StringDecoder("utf8"); + expect(decoder.write(Buffer.from("hello"))).toBe("hello"); + + expect(sys).toEqual(util); + expect(typeof timers.setTimeout).toBe("function"); + + expectIfAvailable(timersPromises, (timersPromises) => { + expect(typeof timersPromises.setTimeout).toBe("function"); + }); + + expect(typeof tls.createServer).toBe("function"); + expect(typeof traceEvents.getEnabledCategories).toBe("function"); + expect(typeof tty.isatty).toBe("function"); + + const parsed = url.parse("http://example.com/path"); + expect(parsed.hostname).toBe("example.com"); + + expect(util.format("Hello %s", "World")).toBe("Hello World"); + + expectIfAvailable(utilTypes, (utilTypes) => { + expect(utilTypes.isPromise(Promise.resolve())).toBe(true); + }); + + const stats = v8.getHeapStatistics(); + expect(stats).toBeDefined(); + + const result = vm.runInNewContext("1 + 1"); + expect(result).toBe(2); + + expectIfAvailable(wasi, (wasi) => { + expect(typeof wasi.WASI).toBe("function"); + }); + + expectIfAvailable(workerThreads, (workerThreads) => { + expect(typeof workerThreads.isMainThread).toBe("boolean"); + }); + + const compressed = zlib.gzipSync("test data"); + expect(Buffer.isBuffer(compressed)).toBe(true); +}); diff --git a/test/configCases/node/output-module-external/require.js b/test/configCases/node/output-module-external/require.js new file mode 100644 index 00000000000..16533e726d5 --- /dev/null +++ b/test/configCases/node/output-module-external/require.js @@ -0,0 +1,368 @@ +const assertBuiltin = require("assert"); +const asyncHooks = require("async_hooks"); +const buffer = require("buffer"); +const childProcess = require("child_process"); +const cluster = require("cluster"); +const consoleBuiltin = require("console"); +const constants = require("constants"); +const crypto = require("crypto"); +const dgram = require("dgram"); +const dns = require("dns"); +const domain = require("domain"); +const events = require("events"); +const fs = require("fs"); +const http = require("http"); +const http2 = require("http2"); +const https = require("https"); +const inspector = require("inspector"); +const moduleBuiltin = require("module"); +const net = require("net"); +const os = require("os"); +const path = require("path"); +const perfHooks = require("perf_hooks"); +const processBuiltin = require("process"); +const punycode = require("punycode"); +const querystring = require("querystring"); +const readline = require("readline"); +const repl = require("repl"); +const stream = require("stream"); +const stringDecoder = require("string_decoder"); +const sys = require("sys"); +const timers = require("timers"); +const tls = require("tls"); +const traceEvents = require("trace_events"); +const tty = require("tty"); +const url = require("url"); +const util = require("util"); +const v8 = require("v8"); +const vm = require("vm"); +const zlib = require("zlib"); +const stream2 = require("./stream"); + +// diagnostics_channel was backported to Node.js v14.17.0 and ships in v15.1.0+ +const diagnosticsChannel = + NODE_VERSION >= 14 ? require("diagnostics_channel") : undefined; + +// It's hidden on Node <=16 unless `--experimental-wasi-unstable-preview1` is provided +const wasi = NODE_VERSION >= 18 ? require("wasi") : undefined; +const workerThreads = + NODE_VERSION >= 12 ? require("worker_threads") : undefined; + +// https://github.com/nodejs/node/pull/34962 +const pathPosix = NODE_VERSION >= 15 ? require("path/posix") : undefined; +// https://github.com/nodejs/node/pull/34962 +const pathWin32 = NODE_VERSION >= 15 ? require("path/win32") : undefined; +const dnsPromises = NODE_VERSION >= 15 ? require("dns/promises") : undefined; +const inspectorPromises = + NODE_VERSION >= 19 ? require("inspector/promises") : undefined; +const streamConsumers = + NODE_VERSION >= 16 ? require("stream/consumers") : undefined; +const streamPromises = + NODE_VERSION >= 15 ? require("stream/promises") : undefined; + +// https://github.com/nodejs/node/pull/34055 +const utilTypes = NODE_VERSION >= 15 ? require("util/types") : undefined; +const streamWeb = NODE_VERSION >= 16 ? require("stream/web") : undefined; +const readlinePromises = + NODE_VERSION >= 17 ? require("readline/promises") : undefined; +const timersPromises = + NODE_VERSION >= 15 ? require("timers/promises") : undefined; + +const assertStrict = NODE_VERSION >= 15 ? require("assert/strict") : undefined; +const fsPromises = NODE_VERSION >= 14 ? require("fs/promises") : undefined; + +const itIfAvailable = (imported) => + imported + ? (desc, fn) => + it(desc, () => { + fn(imported); + }) + : () => { + // skip + }; + +it("should assert equality", () => { + expect(() => assertBuiltin.strictEqual(1, 1)).not.toThrow(); +}); + +itIfAvailable(assertStrict)( + "should assert deep equality (assert/strict)", + (assertStrict) => { + expect(() => + assertStrict.deepStrictEqual({ a: 1 }, { a: 1 }) + ).not.toThrow(); + } +); + +it("should create async hook (async_hooks)", () => { + const hook = asyncHooks.createHook({}); + expect(hook).toBeDefined(); +}); + +it("should create buffer from string (buffer)", () => { + const buf = buffer.Buffer.from("hello"); + expect(buf.toString()).toBe("hello"); +}); + +it("should have spawn method (child_process)", () => { + expect(typeof childProcess.spawn).toBe("function"); +}); + +it("should identify master process (cluster)", () => { + expect(typeof cluster.isMaster).toBe("boolean"); +}); + +it("should create console instance (console)", () => { + const customConsole = new consoleBuiltin.Console(process.stdout); + expect(customConsole).toBeDefined(); +}); + +it("should have errno constants (constants)", () => { + expect(constants).toBeDefined(); +}); + +it("should create hash (crypto)", () => { + const hash = crypto.createHash("sha256").update("test").digest("hex"); + expect(hash).toBeDefined(); +}); + +it("should create UDP socket (dgram)", () => { + const socket = dgram.createSocket("udp4"); + expect(socket).toBeDefined(); + socket.close(); +}); + +itIfAvailable(diagnosticsChannel)( + "should create channel (diagnostics_channel)", + (channel) => { + const diagnostics = channel.channel("test"); + expect(diagnostics).toBeDefined(); + } +); + +it("should have lookup method (dns)", () => { + expect(typeof dns.lookup).toBe("function"); +}); + +itIfAvailable(dnsPromises)( + "should have lookup method (dns/promises)", + (dnsPromises) => { + expect(typeof dnsPromises.lookup).toBe("function"); + } +); + +it("should create domain (domain)", () => { + const d = domain.create(); + expect(d).toBeDefined(); +}); + +it("should create event emitter (events)", () => { + const emitter = new events.EventEmitter(); + const emitter2 = new events(); + expect(emitter).toBeDefined(); + expect(emitter2).toBeDefined(); + expect(events.EventEmitter).toBe(events) +}); + +it("should check if file exists (fs)", () => { + expect(typeof fs.existsSync).toBe("function"); +}); + +itIfAvailable(fsPromises)( + "should have readFile method (fs/promises)", + (fsPromises) => { + expect(typeof fsPromises.readFile).toBe("function"); + } +); + +it("should create server (http)", () => { + const server = http.createServer(); + expect(server).toBeDefined(); + server.close(); +}); + +it("should create secure server (http2)", () => { + expect(typeof http2.createSecureServer).toBe("function"); +}); + +it("should create server (https)", () => { + expect(typeof https.createServer).toBe("function"); +}); + +it("should have url method (inspector)", () => { + expect(typeof inspector.url).toBe("function"); +}); + +itIfAvailable(inspectorPromises)( + "should have Session constructor (inspector/promises)", + (inspectorPromises) => { + expect(typeof inspectorPromises.Session).toBe("function"); + } +); + +it("should have builtinModules (module)", () => { + expect(Array.isArray(moduleBuiltin.builtinModules)).toBe(true); +}); + +it("should create server (net)", () => { + const server = net.createServer(); + expect(server).toBeDefined(); + server.close(); +}); + +it("should get platform (os)", () => { + expect(typeof os.platform()).toBe("string"); +}); + +it("should correctly join paths (path)", () => { + expect(path.extname("foo.js")).toBe(".js"); +}); + +itIfAvailable(pathPosix)( + "should join paths with posix style (path/posix)", + (pathPosix) => { + expect(pathPosix.join("/foo", "bar")).toBe("/foo/bar"); + } +); + +itIfAvailable(pathWin32)( + "should join paths with win32 style (path/win32)", + (pathWin32) => { + expect(pathWin32.join("C:\\foo", "bar")).toBe("C:\\foo\\bar"); + } +); + +it("should get performance (perf_hooks)", () => { + expect(perfHooks.performance).toBeDefined(); +}); + +it("should get platform (process)", () => { + expect(typeof processBuiltin.platform).toBe("string"); +}); + +it("should encode unicode (punycode)", () => { + expect(punycode.encode("mañana")).toBe("maana-pta"); +}); + +it("should parse query string (querystring)", () => { + expect(querystring.parse("foo=bar&baz=qux")).toEqual({ + foo: "bar", + baz: "qux" + }); +}); + +it("should create interface (readline)", () => { + expect(typeof readline.createInterface).toBe("function"); +}); + +itIfAvailable(readlinePromises)( + "should create interface (readline/promises)", + (readlinePromises) => { + expect(typeof readlinePromises.createInterface).toBe("function"); + } +); + +it("should start repl (repl)", () => { + expect(typeof repl.start).toBe("function"); +}); + +it("should create readable stream (stream)", () => { + const readable = new stream.Readable(); + expect(stream2).toBe(stream) + expect(readable).toBeDefined(); +}); + +itIfAvailable(streamConsumers)( + "should have text method (stream/consumers)", + (streamConsumers) => { + expect(typeof streamConsumers.text).toBe("function"); + } +); + +itIfAvailable(streamPromises)( + "should have pipeline method (stream/promises)", + (streamPromises) => { + expect(typeof streamPromises.pipeline).toBe("function"); + } +); + +itIfAvailable(streamWeb)( + "should have ReadableStream (stream/web)", + (streamWeb) => { + expect(typeof streamWeb.ReadableStream).toBe("function"); + } +); + +it("should decode buffer (string_decoder)", () => { + const decoder = new stringDecoder.StringDecoder("utf8"); + expect(decoder.write(Buffer.from("hello"))).toBe("hello"); +}); + +it("should be util alias (sys)", () => { + expect(sys).toEqual(util); +}); + +it("should have setTimeout (timers)", () => { + expect(typeof timers.setTimeout).toBe("function"); +}); + +itIfAvailable(timersPromises)( + "should have setTimeout (timers/promises)", + (timersPromises) => { + expect(typeof timersPromises.setTimeout).toBe("function"); + } +); + +it("should create server (tls)", () => { + expect(typeof tls.createServer).toBe("function"); +}); + +it("should get traced objects (trace_events)", () => { + expect(typeof traceEvents.getEnabledCategories).toBe("function"); +}); + +it("should check if terminal (tty)", () => { + expect(typeof tty.isatty).toBe("function"); +}); + +it("should parse URL (url)", () => { + const parsed = url.parse("http://example.com/path"); + expect(parsed.hostname).toBe("example.com"); +}); + +it("should format string (util)", () => { + expect(util.format("Hello %s", "World")).toBe("Hello World"); +}); + +itIfAvailable(utilTypes)( + "should check if promise (util/types)", + (utilTypes) => { + expect(utilTypes.isPromise(Promise.resolve())).toBe(true); + } +); + +it("should get heap statistics (v8)", () => { + const stats = v8.getHeapStatistics(); + expect(stats).toBeDefined(); +}); + +it("should run in context (vm)", () => { + const result = vm.runInNewContext("1 + 1"); + expect(result).toBe(2); +}); + +itIfAvailable(wasi)("should have WASI constructor (wasi)", (wasi) => { + expect(typeof wasi.WASI).toBe("function"); +}); + +itIfAvailable(workerThreads)( + "should check if main thread (worker_threads)", + (workerThreads) => { + expect(typeof workerThreads.isMainThread).toBe("boolean"); + } +); + +it("should compress data (zlib)", () => { + const compressed = zlib.gzipSync("test data"); + expect(Buffer.isBuffer(compressed)).toBe(true); +}); diff --git a/test/configCases/node/output-module-external/stream.js b/test/configCases/node/output-module-external/stream.js new file mode 100644 index 00000000000..bc2160092e5 --- /dev/null +++ b/test/configCases/node/output-module-external/stream.js @@ -0,0 +1 @@ +module.exports = require("stream") diff --git a/test/configCases/node/output-module-external/test.config.js b/test/configCases/node/output-module-external/test.config.js new file mode 100644 index 00000000000..6fa2cc0c615 --- /dev/null +++ b/test/configCases/node/output-module-external/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["require.mjs", "import.mjs"]; + } +}; diff --git a/test/configCases/node/output-module-external/test.filter.js b/test/configCases/node/output-module-external/test.filter.js new file mode 100644 index 00000000000..3185ff623c6 --- /dev/null +++ b/test/configCases/node/output-module-external/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsRequireInModule = require("../../../helpers/supportsRequireInModule"); + +module.exports = () => supportsRequireInModule(); diff --git a/test/configCases/node/output-module-external/webpack.config.js b/test/configCases/node/output-module-external/webpack.config.js new file mode 100644 index 00000000000..d104517d6a6 --- /dev/null +++ b/test/configCases/node/output-module-external/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +const { DefinePlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + entry: { + require: "./require.js", + import: "./import.js" + }, + experiments: { + outputModule: true + }, + output: { + module: true, + filename: "[name].mjs" + }, + plugins: [ + new DefinePlugin({ + NODE_VERSION: JSON.stringify( + process.versions.node.split(".").map(Number)[0] + ) + }) + ] +}; diff --git a/test/configCases/node/prefix-in-runtime/index.js b/test/configCases/node/prefix-in-runtime/index.js new file mode 100644 index 00000000000..7b178368cb4 --- /dev/null +++ b/test/configCases/node/prefix-in-runtime/index.js @@ -0,0 +1,14 @@ +import fs from "fs"; + +it(`should have/have not 'node:' prefix ${__filename}`, () => { + const content = fs.readFileSync(__filename, "utf-8"); + + if (/bundle7\.js$/.test(__filename)) { + expect(content).toContain("require(\"fs\");"); + } else if (/(bundle1\.mjs|bundle3\.mjs|bundle6\.mjs)$/.test(__filename)) { + expect(content).toContain("from \"url\""); + } else { + expect(content).toContain("from \"node:url\""); + } +}); + diff --git a/test/configCases/node/prefix-in-runtime/test.filter.js b/test/configCases/node/prefix-in-runtime/test.filter.js new file mode 100644 index 00000000000..03c7ecb753f --- /dev/null +++ b/test/configCases/node/prefix-in-runtime/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsNodePrefix = require("../../../helpers/supportsNodePrefix"); + +module.exports = () => supportsNodePrefix(); diff --git a/test/configCases/node/prefix-in-runtime/webpack.config.js b/test/configCases/node/prefix-in-runtime/webpack.config.js new file mode 100644 index 00000000000..c2725de2dea --- /dev/null +++ b/test/configCases/node/prefix-in-runtime/webpack.config.js @@ -0,0 +1,78 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + target: "node", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "node14.17", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "node14.18", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "node15", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "node16", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "browserslist:node 14.18.0, node 16.0.0", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "browserslist:node 14.18.0, node 15.0.0, node 16.0.0", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } + }, + { + target: "node" + } +]; diff --git a/test/configCases/node/web-global/index.js b/test/configCases/node/web-global/index.js new file mode 100644 index 00000000000..0e0b306ab08 --- /dev/null +++ b/test/configCases/node/web-global/index.js @@ -0,0 +1,7 @@ +it("should use/not use globalThis", () => { + expect(global).toBeDefined(); + + const stats = __STATS__.children[__STATS_I__]; + + expect(stats.modules.length).toBe(__STATS_I__ === 0 ? 2 : 1); +}); diff --git a/test/configCases/node/web-global/test.filter.js b/test/configCases/node/web-global/test.filter.js new file mode 100644 index 00000000000..8686fce3458 --- /dev/null +++ b/test/configCases/node/web-global/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsGlobalThis = require("../../../helpers/supportsGlobalThis"); + +module.exports = () => supportsGlobalThis(); diff --git a/test/configCases/node/web-global/webpack.config.js b/test/configCases/node/web-global/webpack.config.js new file mode 100644 index 00000000000..78aabc0093f --- /dev/null +++ b/test/configCases/node/web-global/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + target: "web", + output: { + environment: { globalThis: false } + }, + stats: { + runtimeModules: true + } + }, + { + target: "web", + output: { + environment: { globalThis: true } + }, + stats: { + runtimeModules: true + } + } +]; diff --git a/test/configCases/optimization/chunk/files/file1.js b/test/configCases/optimization/chunk/files/file1.js new file mode 100644 index 00000000000..80e295b9644 --- /dev/null +++ b/test/configCases/optimization/chunk/files/file1.js @@ -0,0 +1 @@ +module.exports = "hello"; diff --git a/test/configCases/optimization/chunk/index.js b/test/configCases/optimization/chunk/index.js new file mode 100644 index 00000000000..732bebffb7d --- /dev/null +++ b/test/configCases/optimization/chunk/index.js @@ -0,0 +1 @@ +it("should run with deterministic chunkIds", () => {}); diff --git a/test/configCases/optimization/chunk/webpack.config.js b/test/configCases/optimization/chunk/webpack.config.js new file mode 100644 index 00000000000..544c81340d3 --- /dev/null +++ b/test/configCases/optimization/chunk/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + chunkIds: false + }, + plugins: [new webpack.ids.DeterministicChunkIdsPlugin()] +}; diff --git a/test/configCases/optimization/depend-on-runtimes/a-or-b.js b/test/configCases/optimization/depend-on-runtimes/a-or-b.js new file mode 100644 index 00000000000..b63c6d182a1 --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/a-or-b.js @@ -0,0 +1,25 @@ +import { w, used } from "./module"; + +export default it => + it("should have the correct exports", () => { + expect(w).toBe("w"); + if (__webpack_runtime_id__ === "a") { + expect(used).toEqual({ + w: true, + v: false, + x: true, + y: false, + z: false + }); + } else if (__webpack_runtime_id__ === "b") { + expect(used).toEqual({ + w: true, + v: true, + x: false, + y: true, + z: false + }); + } else { + expect(__webpack_runtime_id__).toBe("a or b"); + } + }); diff --git a/test/configCases/optimization/depend-on-runtimes/a.js b/test/configCases/optimization/depend-on-runtimes/a.js new file mode 100644 index 00000000000..768f7cb16cc --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/a.js @@ -0,0 +1,14 @@ +import { x, used } from "./module"; + +it("should have the correct exports", () => { + expect(x).toBe("x"); + expect(used).toEqual({ + w: true, + v: false, + x: true, + y: false, + z: false + }); + + return import("./a-or-b").then(m => m.default(it)); +}); diff --git a/test/configCases/optimization/depend-on-runtimes/b-or-c.js b/test/configCases/optimization/depend-on-runtimes/b-or-c.js new file mode 100644 index 00000000000..1364b1b53c5 --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/b-or-c.js @@ -0,0 +1,6 @@ +import { v } from "./module"; + +export default it => + it("should have the correct exports", () => { + expect(v).toBe("v"); + }); diff --git a/test/configCases/optimization/depend-on-runtimes/b.js b/test/configCases/optimization/depend-on-runtimes/b.js new file mode 100644 index 00000000000..2d82241ca6e --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/b.js @@ -0,0 +1,17 @@ +import { y, used } from "./module"; + +it("should have the correct exports", () => { + expect(y).toBe("y"); + expect(used).toEqual({ + w: true, + v: true, + x: false, + y: true, + z: false + }); + + return Promise.all([ + import("./a-or-b").then(m => m.default(it)), + import("./b-or-c").then(m => m.default(it)) + ]); +}); diff --git a/test/configCases/optimization/depend-on-runtimes/c.js b/test/configCases/optimization/depend-on-runtimes/c.js new file mode 100644 index 00000000000..0232e88655f --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/c.js @@ -0,0 +1,14 @@ +import { z, used } from "./module"; + +it("should have the correct exports", () => { + expect(z).toBe("z"); + expect(used).toEqual({ + w: false, + v: true, + x: false, + y: false, + z: true + }); + + return import("./b-or-c").then(m => m.default(it)); +}); diff --git a/test/configCases/optimization/depend-on-runtimes/module.js b/test/configCases/optimization/depend-on-runtimes/module.js new file mode 100644 index 00000000000..90d6fb81bf4 --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/module.js @@ -0,0 +1,12 @@ +export const v = "v"; +export const w = "w"; +export const x = "x"; +export const y = "y"; +export const z = "z"; +export const used = { + w: __webpack_exports_info__.w.used, + v: __webpack_exports_info__.v.used, + x: __webpack_exports_info__.x.used, + y: __webpack_exports_info__.y.used, + z: __webpack_exports_info__.z.used +}; diff --git a/test/configCases/optimization/depend-on-runtimes/test.config.js b/test/configCases/optimization/depend-on-runtimes/test.config.js new file mode 100644 index 00000000000..b4e7057cd03 --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./b.js", "./runtime-c.js", "./c.js"]; + } +}; diff --git a/test/configCases/optimization/depend-on-runtimes/webpack.config.js b/test/configCases/optimization/depend-on-runtimes/webpack.config.js new file mode 100644 index 00000000000..7929fe6f3bd --- /dev/null +++ b/test/configCases/optimization/depend-on-runtimes/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + optimization: { + chunkIds: "named" + }, + entry: { + a: "./a", + b: "./b", + c: { + import: "./c", + runtime: "runtime-c" + } + } +}; diff --git a/test/configCases/optimization/hashed-module-ids/files/file1.js b/test/configCases/optimization/hashed-module-ids/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file2.js b/test/configCases/optimization/hashed-module-ids/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file3.js b/test/configCases/optimization/hashed-module-ids/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file4.js b/test/configCases/optimization/hashed-module-ids/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/files/file5.js b/test/configCases/optimization/hashed-module-ids/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/hashed-module-ids/index.js b/test/configCases/optimization/hashed-module-ids/index.js new file mode 100644 index 00000000000..93aeb5474b8 --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/index.js @@ -0,0 +1,7 @@ +it("should have named modules ids", function() { + for (var i = 1; i <= 5; i++) { + var moduleId = require("./files/file" + i + ".js"); + + expect(moduleId).toMatch(/^[/=a-zA-Z0-9]{4,5}$/); + } +}); diff --git a/test/configCases/optimization/hashed-module-ids/warnings.js b/test/configCases/optimization/hashed-module-ids/warnings.js new file mode 100644 index 00000000000..fdcecb3be97 --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/hashed/, /deprecated/]]; diff --git a/test/configCases/optimization/hashed-module-ids/webpack.config.js b/test/configCases/optimization/hashed-module-ids/webpack.config.js new file mode 100644 index 00000000000..ecd9cf88c1f --- /dev/null +++ b/test/configCases/optimization/hashed-module-ids/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + moduleIds: "hashed" + } +}; diff --git a/test/configCases/optimization/issue-19184/files/file1.js b/test/configCases/optimization/issue-19184/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/issue-19184/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/issue-19184/files/file2.js b/test/configCases/optimization/issue-19184/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/issue-19184/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/issue-19184/files/file3.js b/test/configCases/optimization/issue-19184/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/issue-19184/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/issue-19184/files/file4.js b/test/configCases/optimization/issue-19184/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/issue-19184/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/issue-19184/files/file5.js b/test/configCases/optimization/issue-19184/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/issue-19184/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/issue-19184/index.js b/test/configCases/optimization/issue-19184/index.js new file mode 100644 index 00000000000..d7815908c53 --- /dev/null +++ b/test/configCases/optimization/issue-19184/index.js @@ -0,0 +1,14 @@ +it("should have module ids defined in sorted order", function () { + const ids = []; + for (var i = 1; i <= 5; i++) { + var moduleId = require("./files/file" + i + ".js"); + ids[i - 1] = moduleId; + } + + const expectedIds = new Set(ids); + + const moduleIds = Object.keys(__webpack_modules__).filter((id) => + expectedIds.has(id) + ); + expect(moduleIds).toEqual(ids); +}); diff --git a/test/configCases/optimization/issue-19184/warnings.js b/test/configCases/optimization/issue-19184/warnings.js new file mode 100644 index 00000000000..fdcecb3be97 --- /dev/null +++ b/test/configCases/optimization/issue-19184/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/hashed/, /deprecated/]]; diff --git a/test/configCases/optimization/issue-19184/webpack.config.js b/test/configCases/optimization/issue-19184/webpack.config.js new file mode 100644 index 00000000000..2b822a3d9c8 --- /dev/null +++ b/test/configCases/optimization/issue-19184/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + optimization: { + moduleIds: "hashed" + } +}; diff --git a/test/configCases/optimization/minimizer/index.js b/test/configCases/optimization/minimizer/index.js new file mode 100644 index 00000000000..3fd1f22eeba --- /dev/null +++ b/test/configCases/optimization/minimizer/index.js @@ -0,0 +1 @@ +it("should compile", () => {}) diff --git a/test/configCases/optimization/minimizer/webpack.config.js b/test/configCases/optimization/minimizer/webpack.config.js new file mode 100644 index 00000000000..ade134bdd3a --- /dev/null +++ b/test/configCases/optimization/minimizer/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +const Compiler = require("../../../../").Compiler; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + minimize: true, + minimizer: [ + { + /** + * @param {Compiler} compiler the compiler + */ + apply(compiler) { + expect(compiler).toBeInstanceOf(Compiler); + } + }, + /** + * @this {Compiler} the compiler + * @param {Compiler} compiler the compiler + */ + function apply(compiler) { + expect(compiler).toBe(this); + expect(compiler).toBeInstanceOf(Compiler); + } + ] + } +}; diff --git a/test/configCases/optimization/named-modules/files/file1.js b/test/configCases/optimization/named-modules/files/file1.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file1.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file2.js b/test/configCases/optimization/named-modules/files/file2.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file2.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file3.js b/test/configCases/optimization/named-modules/files/file3.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file3.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file4.js b/test/configCases/optimization/named-modules/files/file4.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file4.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/files/file5.js b/test/configCases/optimization/named-modules/files/file5.js new file mode 100644 index 00000000000..3cec1b77aad --- /dev/null +++ b/test/configCases/optimization/named-modules/files/file5.js @@ -0,0 +1 @@ +module.exports = module.id; diff --git a/test/configCases/optimization/named-modules/index.js b/test/configCases/optimization/named-modules/index.js new file mode 100644 index 00000000000..082bc1bda00 --- /dev/null +++ b/test/configCases/optimization/named-modules/index.js @@ -0,0 +1,10 @@ +var path = require("path"); + +it("should have named modules ids", function() { + for (var i = 1; i <= 5; i++) { + var expectedModuleId = "file" + i + ".js"; + var moduleId = require("./files/file" + i + ".js"); + + expect(path.basename(moduleId)).toBe(expectedModuleId); + } +}); diff --git a/test/configCases/optimization/named-modules/webpack.config.js b/test/configCases/optimization/named-modules/webpack.config.js new file mode 100644 index 00000000000..e14acb1a1ed --- /dev/null +++ b/test/configCases/optimization/named-modules/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + moduleIds: "named" + } +}; diff --git a/test/configCases/optimization/runtime-specific-used-exports/a.js b/test/configCases/optimization/runtime-specific-used-exports/a.js new file mode 100644 index 00000000000..ea6b7912318 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/a.js @@ -0,0 +1,53 @@ +import { x, xUsed, yUsed } from "./module"; +import { x as xRe, xUsed as xUsedRe, yUsed as yUsedRe } from "./reexport"; +import importDx from "./dx-importer"; + +it("should use only one export", () => { + expect(x).toBe("x"); + expect(xUsed).toBe(true); + expect(yUsed).toBe(false); +}); + +it("should use only one export when reexported", () => { + expect(xRe).toBe("x"); + expect(xUsedRe).toBe(true); + expect(yUsedRe).toBe(false); +}); + +it("should optimize shared chunks correctly", async () => { + const dx = await importDx(); // this will contain module with all exports + const dy = await import("./dy"); // this will contain module only with w, x and y exports + const dw = await import("./dw"); // this will contain module only with w, x and y exports + // As dx was loaded first, we get the module will all exports + const identity = dx.identity; + expect(dx).toEqual( + nsObj({ + x: "x", + wUsed: true, + xUsed: true, + yUsed: true, + zUsed: true, + identity + }) + ); + expect(dy).toEqual( + nsObj({ + y: "y", + wUsed: true, + xUsed: true, + yUsed: true, + zUsed: true, + identity + }) + ); + expect(dw).toEqual( + nsObj({ + w: "w", + wUsed: true, + xUsed: true, + yUsed: true, + zUsed: true, + identity + }) + ); +}); diff --git a/test/configCases/optimization/runtime-specific-used-exports/b.js b/test/configCases/optimization/runtime-specific-used-exports/b.js new file mode 100644 index 00000000000..cb9804cc131 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/b.js @@ -0,0 +1,53 @@ +import { y, xUsed, yUsed } from "./module"; +import { y as yRe, xUsed as xUsedRe, yUsed as yUsedRe } from "./reexport"; +import importDx from "./dx-importer"; + +it("should use only one export", () => { + expect(y).toBe("y"); + expect(yUsed).toBe(true); + expect(xUsed).toBe(false); +}); + +it("should use only one export when reexported", () => { + expect(yRe).toBe("y"); + expect(yUsedRe).toBe(true); + expect(xUsedRe).toBe(false); +}); + +it("should optimize shared chunks correctly", async () => { + const dz = await import("./dz"); // this will contain module only with w, x and z exports + const dx = await importDx(); // this will contain module with all exports + const dw = await import("./dw"); // this will contain module only with w, x and z exports + // As dz was loaded first, we get the module will only w, x and z exports + const identity = dx.identity; + expect(dx).toEqual( + nsObj({ + x: "x", + wUsed: true, + xUsed: true, + yUsed: false, + zUsed: true, + identity + }) + ); + expect(dz).toEqual( + nsObj({ + z: "z", + wUsed: true, + xUsed: true, + yUsed: false, + zUsed: true, + identity + }) + ); + expect(dw).toEqual( + nsObj({ + w: "w", + wUsed: true, + xUsed: true, + yUsed: false, + zUsed: true, + identity + }) + ); +}); diff --git a/test/configCases/optimization/runtime-specific-used-exports/c.js b/test/configCases/optimization/runtime-specific-used-exports/c.js new file mode 100644 index 00000000000..c19b06964ee --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/c.js @@ -0,0 +1 @@ +it("should also be here", () => {}); diff --git a/test/configCases/optimization/runtime-specific-used-exports/dw.js b/test/configCases/optimization/runtime-specific-used-exports/dw.js new file mode 100644 index 00000000000..cb05a0125ef --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/dw.js @@ -0,0 +1 @@ +export { w, wUsed, xUsed, yUsed, zUsed, identity } from "./module?chunk"; diff --git a/test/configCases/optimization/runtime-specific-used-exports/dx-importer.js b/test/configCases/optimization/runtime-specific-used-exports/dx-importer.js new file mode 100644 index 00000000000..4efca616142 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/dx-importer.js @@ -0,0 +1,3 @@ +export default function importDx() { + return import("./dx"); +} diff --git a/test/configCases/optimization/runtime-specific-used-exports/dx.js b/test/configCases/optimization/runtime-specific-used-exports/dx.js new file mode 100644 index 00000000000..c3abdf0fd79 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/dx.js @@ -0,0 +1 @@ +export { x, wUsed, xUsed, yUsed, zUsed, identity } from "./module?chunk"; diff --git a/test/configCases/optimization/runtime-specific-used-exports/dy.js b/test/configCases/optimization/runtime-specific-used-exports/dy.js new file mode 100644 index 00000000000..096fea65553 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/dy.js @@ -0,0 +1 @@ +export { y, wUsed, xUsed, yUsed, zUsed, identity } from "./module?chunk"; diff --git a/test/configCases/optimization/runtime-specific-used-exports/dz.js b/test/configCases/optimization/runtime-specific-used-exports/dz.js new file mode 100644 index 00000000000..63e65be0f58 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/dz.js @@ -0,0 +1 @@ +export { z, wUsed, xUsed, yUsed, zUsed, identity } from "./module?chunk"; diff --git a/test/configCases/optimization/runtime-specific-used-exports/module.js b/test/configCases/optimization/runtime-specific-used-exports/module.js new file mode 100644 index 00000000000..d3c2767a853 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/module.js @@ -0,0 +1,9 @@ +export const w = "w"; +export const x = "x"; +export const y = "y"; +export const z = "z"; +export const wUsed = __webpack_exports_info__.w.used; +export const xUsed = __webpack_exports_info__.x.used; +export const yUsed = __webpack_exports_info__.y.used; +export const zUsed = __webpack_exports_info__.z.used; +export const identity = Symbol(); diff --git a/test/configCases/optimization/runtime-specific-used-exports/reexport.js b/test/configCases/optimization/runtime-specific-used-exports/reexport.js new file mode 100644 index 00000000000..c497efb280f --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/reexport.js @@ -0,0 +1 @@ +export * from "./module?reexported"; diff --git a/test/configCases/optimization/runtime-specific-used-exports/test.config.js b/test/configCases/optimization/runtime-specific-used-exports/test.config.js new file mode 100644 index 00000000000..af2075ac84f --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./b.js"]; + } +}; diff --git a/test/configCases/optimization/runtime-specific-used-exports/webpack.config.js b/test/configCases/optimization/runtime-specific-used-exports/webpack.config.js new file mode 100644 index 00000000000..11ec9666d90 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + optimization: { + chunkIds: "named" + }, + entry: { + a: "./a", + b: "./b", + c: "./c" + } +}; diff --git a/test/configCases/optimization/runtime-specific-used-exports2/1.js b/test/configCases/optimization/runtime-specific-used-exports2/1.js new file mode 100644 index 00000000000..49b9fffd894 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/1.js @@ -0,0 +1,26 @@ +import { + e, + _1 +} from "./path1"; +import { + aUsed, + bUsed, + cUsed +} from "root1"; +import { + dUsed, + eUsed, + fUsed +} from "root2"; + +it("should use only current entrypoint exports", () => { + expect(e).toBe("e"); + expect(_1.a).toBe("a"); + expect(_1.c).toBe("c"); + expect(aUsed).toBe(true); + expect(bUsed).toBe(false); + expect(cUsed).toBe(true); + expect(dUsed).toBe(false); + expect(eUsed).toBe(true); + expect(fUsed).toBe(false); +}); diff --git a/test/configCases/optimization/runtime-specific-used-exports2/2.js b/test/configCases/optimization/runtime-specific-used-exports2/2.js new file mode 100644 index 00000000000..2c2d207303e --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/2.js @@ -0,0 +1,40 @@ +import { + b, + _2 +} from "./path2"; +import { + aUsed, + bUsed, + cUsed +} from "root1"; +import { + dUsed, + eUsed, + fUsed +} from "root2"; +import {addFiles, isSame} from "./helper"; + +// should be the same as 3.js and reuse defaultVendors +it("should use only current entrypoint exports", () => { + expect(b).toBe("b"); + expect(_2.f).toBe("f"); + expect(aUsed).toBe(false); + expect(bUsed).toBe(true); + expect(cUsed).toBe(false); + expect(dUsed).toBe(false); + expect(eUsed).toBe(false); + expect(fUsed).toBe(true); + + const files = new Set(); + + addFiles( + files, + __STATS__.chunks.filter(ch => isSame(ch.runtime, ["b"])) + ); + addFiles( + files, + __STATS__.chunks.filter(ch => isSame(ch.runtime, ["b", "c"])) + ); + + expect(files.size).toBe(2); +}); diff --git a/test/configCases/optimization/runtime-specific-used-exports2/3.js b/test/configCases/optimization/runtime-specific-used-exports2/3.js new file mode 100644 index 00000000000..04c6871b6fa --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/3.js @@ -0,0 +1,40 @@ +import { + b, + _2 +} from "./path2"; +import { + aUsed, + bUsed, + cUsed +} from "root1"; +import { + dUsed, + eUsed, + fUsed +} from "root2"; +import { addFiles, isSame } from "./helper"; + +// should be the same as 2.js and reuse defaultVendors +it("should use only current entrypoint exports", () => { + expect(b).toBe("b"); + expect(_2.f).toBe("f"); + expect(aUsed).toBe(false); + expect(bUsed).toBe(true); + expect(cUsed).toBe(false); + expect(dUsed).toBe(false); + expect(eUsed).toBe(false); + expect(fUsed).toBe(true); + + const files = new Set(); + + addFiles( + files, + __STATS__.chunks.filter(ch => isSame(ch.runtime, ["c"])) + ); + addFiles( + files, + __STATS__.chunks.filter(ch => isSame(ch.runtime, ["b", "c"])) + ); + + expect(files.size).toBe(2); +}); diff --git a/test/configCases/optimization/runtime-specific-used-exports2/helper.js b/test/configCases/optimization/runtime-specific-used-exports2/helper.js new file mode 100644 index 00000000000..0263269dfa5 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/helper.js @@ -0,0 +1,18 @@ +/** + * @template T + * @param {T[]} arr arr + * @param {T[]} expected expected + * @returns {boolean} is same + */ +export function isSame(arr, expected) { + const set = new Set(arr); + return expected.every(i => set.has(i)); +} + +/** + * @param {Set} files + * @param {{files: string[]}[]} chunks + */ +export function addFiles(files, chunks) { + chunks.forEach(ch => ch.files.forEach(f => files.add(f))); +} diff --git a/test/configCases/optimization/runtime-specific-used-exports2/node_modules/root1/index.js b/test/configCases/optimization/runtime-specific-used-exports2/node_modules/root1/index.js new file mode 100644 index 00000000000..7d4533e46be --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/node_modules/root1/index.js @@ -0,0 +1,6 @@ +export const a = "a"; +export const b = "b"; +export const c = "c"; +export const aUsed = __webpack_exports_info__.a.used; +export const bUsed = __webpack_exports_info__.b.used; +export const cUsed = __webpack_exports_info__.c.used; diff --git a/test/configCases/optimization/runtime-specific-used-exports2/node_modules/root2/index.js b/test/configCases/optimization/runtime-specific-used-exports2/node_modules/root2/index.js new file mode 100644 index 00000000000..524350cd31b --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/node_modules/root2/index.js @@ -0,0 +1,6 @@ +export const d = "d"; +export const e = "e"; +export const f = "f"; +export const dUsed = __webpack_exports_info__.d.used; +export const eUsed = __webpack_exports_info__.e.used; +export const fUsed = __webpack_exports_info__.f.used; diff --git a/test/configCases/optimization/runtime-specific-used-exports2/path1.js b/test/configCases/optimization/runtime-specific-used-exports2/path1.js new file mode 100644 index 00000000000..9ba7bd7c36e --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/path1.js @@ -0,0 +1,4 @@ +import { _1, _2 } from "./reexport-all"; +import { e, d } from "root2"; + +export { _1, e }; diff --git a/test/configCases/optimization/runtime-specific-used-exports2/path2.js b/test/configCases/optimization/runtime-specific-used-exports2/path2.js new file mode 100644 index 00000000000..37dcfbbddf0 --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/path2.js @@ -0,0 +1,6 @@ +import { _1 } from "./path1"; +import { _2 } from "./reexport-all"; + +const b = _1.b; + +export { b, _2 } diff --git a/test/configCases/optimization/runtime-specific-used-exports2/reexport-all.js b/test/configCases/optimization/runtime-specific-used-exports2/reexport-all.js new file mode 100644 index 00000000000..4ef0128938e --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/reexport-all.js @@ -0,0 +1,2 @@ +export * as _1 from "root1"; +export * as _2 from "root2"; diff --git a/test/configCases/optimization/runtime-specific-used-exports2/test.config.js b/test/configCases/optimization/runtime-specific-used-exports2/test.config.js new file mode 100644 index 00000000000..0b07c625c8d --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./b.js", "./c.js"]; + } +}; diff --git a/test/configCases/optimization/runtime-specific-used-exports2/webpack.config.js b/test/configCases/optimization/runtime-specific-used-exports2/webpack.config.js new file mode 100644 index 00000000000..166cf8c6b7e --- /dev/null +++ b/test/configCases/optimization/runtime-specific-used-exports2/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + target: "node", + optimization: { + chunkIds: "named", + splitChunks: { + chunks: "all", + cacheGroups: { + defaultVendors: { + test: /[\\/]node_modules[\\/]/, + enforce: true + } + } + } + }, + entry: { + a: "./1", + b: "./2", + c: "./3" + } +}; diff --git a/test/configCases/output/charset/chunk1.css b/test/configCases/output/charset/chunk1.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/output/charset/chunk1.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/output/charset/chunk1.js b/test/configCases/output/charset/chunk1.js new file mode 100644 index 00000000000..ea9b101e1c2 --- /dev/null +++ b/test/configCases/output/charset/chunk1.js @@ -0,0 +1 @@ +export default function () {} diff --git a/test/configCases/output/charset/index.js b/test/configCases/output/charset/index.js new file mode 100644 index 00000000000..4f383a623ff --- /dev/null +++ b/test/configCases/output/charset/index.js @@ -0,0 +1,27 @@ +__webpack_public_path__ = "https://test.cases/path/"; + +const doJsImport = () => import(/* webpackChunkName: "chunk1" */ "./chunk1.js"); +const doCssImport = () => import( /* webpackChunkName: "chunk1" */ "./chunk1.css" ); + +it("should not add charset attribute", async () => { + const promise = doJsImport(); + expect(document.head._children).toHaveLength(3); + + const link = document.head._children[0]; + + expect(link._type).toBe("link"); + expect(link.href).toBe("https://test.cases/path/chunk1.css"); + expect(link.rel).toBe("stylesheet"); + expect(link.getAttribute("charset")).toBeUndefined(); + + const script = document.head._children[document.head._children.length - 1]; + + __non_webpack_require__("./chunk1.js"); + script.onload(); + + expect(script._type).toBe("script"); + expect(script.src).toBe("https://test.cases/path/chunk1.js"); + expect(script.getAttribute("charset")).toBeUndefined(); + + return promise.then(() => doCssImport); +}); diff --git a/test/configCases/output/charset/test.config.js b/test/configCases/output/charset/test.config.js new file mode 100644 index 00000000000..f17cba79fed --- /dev/null +++ b/test/configCases/output/charset/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "chunk1.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/output/charset/webpack.config.js b/test/configCases/output/charset/webpack.config.js new file mode 100644 index 00000000000..73a38a828ab --- /dev/null +++ b/test/configCases/output/charset/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: "web", + output: { + chunkFilename: "[name].js", + charset: false + }, + performance: { + hints: false + }, + experiments: { + css: true + }, + optimization: { + chunkIds: "named", + minimize: false + } +}; diff --git a/test/configCases/output/chunk-format-with-runtimeChunk/index.js b/test/configCases/output/chunk-format-with-runtimeChunk/index.js new file mode 100644 index 00000000000..0acee55e319 --- /dev/null +++ b/test/configCases/output/chunk-format-with-runtimeChunk/index.js @@ -0,0 +1,3 @@ +it("should compile and run", () => { + expect(true).toBe(true) +}); diff --git a/test/configCases/output/chunk-format-with-runtimeChunk/test.config.js b/test/configCases/output/chunk-format-with-runtimeChunk/test.config.js new file mode 100644 index 00000000000..2147b0a0b96 --- /dev/null +++ b/test/configCases/output/chunk-format-with-runtimeChunk/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["runtime.mjs", "main.mjs"]; + } +}; diff --git a/test/configCases/output/chunk-format-with-runtimeChunk/webpack.config.js b/test/configCases/output/chunk-format-with-runtimeChunk/webpack.config.js new file mode 100644 index 00000000000..bfef95fa8ee --- /dev/null +++ b/test/configCases/output/chunk-format-with-runtimeChunk/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +module.exports = { + mode: "production", + entry: { + main: "./index.js" + }, + optimization: { + runtimeChunk: "single" + }, + output: { + filename: "[name].mjs", + module: true, + chunkFormat: "module" + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/output/function/test.config.js b/test/configCases/output/function/test.config.js index 4754b6482e8..af2075ac84f 100644 --- a/test/configCases/output/function/test.config.js +++ b/test/configCases/output/function/test.config.js @@ -1,8 +1,7 @@ +"use strict"; + module.exports = { - findBundle: function() { - return [ - "./a.js", - "./b.js" - ]; + findBundle() { + return ["./a.js", "./b.js"]; } }; diff --git a/test/configCases/output/function/webpack.config.js b/test/configCases/output/function/webpack.config.js index 2cfbedfe1a9..c1b6ec86a5c 100644 --- a/test/configCases/output/function/webpack.config.js +++ b/test/configCases/output/function/webpack.config.js @@ -1,3 +1,8 @@ +"use strict"; + +/** @typedef {import("../../../../").Chunk} Chunk */ + +/** @type {import("../../../../").Configuration} */ module.exports = { entry() { return { @@ -6,8 +11,10 @@ module.exports = { }; }, output: { - filename: data => { - return data.chunk.name === "a" ? `${data.chunk.name}.js` : "[name].js"; - } + filename: (data) => + /** @type {Chunk} */ + (data.chunk).name === "a" + ? `${/** @type {Chunk} */ (data.chunk).name}.js` + : "[name].js" } }; diff --git a/test/configCases/output/hash-function/index.js b/test/configCases/output/hash-function/index.js new file mode 100644 index 00000000000..a685874e87c --- /dev/null +++ b/test/configCases/output/hash-function/index.js @@ -0,0 +1,6 @@ +import mod from "./module.js"; + +it("should work", () => { + expect(mod(1, 2)).toBe(3); + expect(__STATS__.hash).toHaveLength(25); +}); diff --git a/test/configCases/output/hash-function/module.js b/test/configCases/output/hash-function/module.js new file mode 100644 index 00000000000..66933a96221 --- /dev/null +++ b/test/configCases/output/hash-function/module.js @@ -0,0 +1,3 @@ +export default function sum(a, b) { + return a + b; +} diff --git a/test/configCases/output/hash-function/webpack.config.js b/test/configCases/output/hash-function/webpack.config.js new file mode 100644 index 00000000000..69661aa0f07 --- /dev/null +++ b/test/configCases/output/hash-function/webpack.config.js @@ -0,0 +1,50 @@ +"use strict"; + +const { createHash } = require("crypto"); + +/** @typedef {import("crypto").Encoding} Encoding */ +/** @typedef {import("crypto").BinaryToTextEncoding} BinaryToTextEncoding */ + +class SHA256Hash { + constructor() { + this._hash = createHash("sha256"); + } + + /** + * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding} + * @abstract + * @param {string | Buffer} data data + * @param {Encoding=} inputEncoding data encoding + * @returns {this} updated hash + */ + update(data, inputEncoding) { + this._hash.update( + /** @type {string} */ + (data), + /** @type {Encoding} */ + (inputEncoding) + ); + + return this; + } + + /** + * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding} + * @abstract + * @param {BinaryToTextEncoding=} encoding encoding of the return value + * @returns {string | Buffer} digest + */ + digest(encoding) { + return this._hash.digest(/** @type {BinaryToTextEncoding} */ (encoding)); + } +} + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + hashDigest: "base64", + hashDigestLength: 25, + hashFunction: SHA256Hash, + hashSalt: "salt" + } +}; diff --git a/test/configCases/output/import-meta-name/a.js b/test/configCases/output/import-meta-name/a.js new file mode 100644 index 00000000000..bdeb009362b --- /dev/null +++ b/test/configCases/output/import-meta-name/a.js @@ -0,0 +1 @@ +export const url = import.meta.url; diff --git a/test/configCases/output/import-meta-name/index.js b/test/configCases/output/import-meta-name/index.js new file mode 100644 index 00000000000..347bb1f5575 --- /dev/null +++ b/test/configCases/output/import-meta-name/index.js @@ -0,0 +1,9 @@ +import { url } from "./a"; + +it("should evaluate import.meta to pseudoImport.meta", () => { + expect(url).toBe("http://test.co/path/index.js"); +}); + +it("should evaluate import.meta in runtime", () => { + expect(url).toBe(import.meta.url); +}); diff --git a/test/configCases/output/import-meta-name/test.config.js b/test/configCases/output/import-meta-name/test.config.js new file mode 100644 index 00000000000..68de5d74ac4 --- /dev/null +++ b/test/configCases/output/import-meta-name/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + scope.pseudoImport = { meta: { url: "http://test.co/path/index.js" } }; + } +}; diff --git a/test/configCases/output/import-meta-name/webpack.config.js b/test/configCases/output/import-meta-name/webpack.config.js new file mode 100644 index 00000000000..45061f52e9e --- /dev/null +++ b/test/configCases/output/import-meta-name/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + importMetaName: "pseudoImport.meta" + }, + module: { + parser: { + javascript: { + importMeta: false + } + } + } +}; diff --git a/test/configCases/output/inner-dirs-entries/a.js b/test/configCases/output/inner-dirs-entries/a.js new file mode 100644 index 00000000000..e7c6897a7f0 --- /dev/null +++ b/test/configCases/output/inner-dirs-entries/a.js @@ -0,0 +1,8 @@ +import dummy from "dummy_module"; + +it("should load", () => { + expect(dummy()).toBe("this is just a dummy function"); + return import("./inner-dir/b").then(importedModule => { + expect(importedModule.dummy()).toBe("this is just a dummy function"); + }); +}); diff --git a/test/configCases/output/inner-dirs-entries/inner-dir/b.js b/test/configCases/output/inner-dirs-entries/inner-dir/b.js new file mode 100644 index 00000000000..af09a1f6e15 --- /dev/null +++ b/test/configCases/output/inner-dirs-entries/inner-dir/b.js @@ -0,0 +1,10 @@ +import dummy from "dummy_module"; + +it("should load", () => { + expect(dummy()).toBe("this is just a dummy function"); + return import("./some-module").then(importedModule => { + expect(importedModule.dummy()).toBe("this is just a dummy function"); + }); +}); + +export { dummy }; diff --git a/test/configCases/output/inner-dirs-entries/inner-dir/some-module.js b/test/configCases/output/inner-dirs-entries/inner-dir/some-module.js new file mode 100644 index 00000000000..69917283c40 --- /dev/null +++ b/test/configCases/output/inner-dirs-entries/inner-dir/some-module.js @@ -0,0 +1,2 @@ +import dummy from "dummy_module"; +export { dummy }; diff --git a/test/configCases/output/inner-dirs-entries/node_modules/dummy_module/index.js b/test/configCases/output/inner-dirs-entries/node_modules/dummy_module/index.js new file mode 100644 index 00000000000..bb16bd21190 --- /dev/null +++ b/test/configCases/output/inner-dirs-entries/node_modules/dummy_module/index.js @@ -0,0 +1,3 @@ +export default function someDummyFunction() { + return "this is just a dummy function"; +} diff --git a/test/configCases/output/inner-dirs-entries/test.config.js b/test/configCases/output/inner-dirs-entries/test.config.js new file mode 100644 index 00000000000..7309eedcf7a --- /dev/null +++ b/test/configCases/output/inner-dirs-entries/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./a.js", "./inner-dir/b.js", "./inner-dir/deep/deep/c.js"]; + } +}; diff --git a/test/configCases/output/inner-dirs-entries/webpack.config.js b/test/configCases/output/inner-dirs-entries/webpack.config.js new file mode 100644 index 00000000000..c016f2ea778 --- /dev/null +++ b/test/configCases/output/inner-dirs-entries/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + entry: { + a: "./a?1", + "inner-dir/b": "./inner-dir/b", + "inner-dir/deep/deep/c": "./a?2" + }, + target: "node", + output: { + libraryTarget: "commonjs2", + pathinfo: true, + filename: "[name].js", + chunkFilename: "[name].chunk.min.js" + }, + optimization: { + minimize: false, + concatenateModules: false, + splitChunks: { + chunks: "all", + minSize: 0 + } + } +}; diff --git a/test/configCases/output/publicPath-node/asset.jpg b/test/configCases/output/publicPath-node/asset.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/output/publicPath-node/index.js b/test/configCases/output/publicPath-node/index.js new file mode 100644 index 00000000000..9c6c55518f3 --- /dev/null +++ b/test/configCases/output/publicPath-node/index.js @@ -0,0 +1,5 @@ +import asset from "./asset.jpg"; + +it("should define public path", () => { + expect(asset).toBe("asset.jpg"); +}); diff --git a/test/configCases/output/publicPath-node/webpack.config.js b/test/configCases/output/publicPath-node/webpack.config.js new file mode 100644 index 00000000000..489e0036811 --- /dev/null +++ b/test/configCases/output/publicPath-node/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + target: "node", + output: { + assetModuleFilename: "[name][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/output/publicPath-scriptType-module/asset.jpg b/test/configCases/output/publicPath-scriptType-module/asset.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/output/publicPath-scriptType-module/index.js b/test/configCases/output/publicPath-scriptType-module/index.js new file mode 100644 index 00000000000..b6ab6abf147 --- /dev/null +++ b/test/configCases/output/publicPath-scriptType-module/index.js @@ -0,0 +1,5 @@ +import asset from "./asset.jpg"; + +it("should define public path", () => { + expect(asset).toBe("http://test.co/path/asset.jpg"); +}); diff --git a/test/configCases/output/publicPath-scriptType-module/test.config.js b/test/configCases/output/publicPath-scriptType-module/test.config.js new file mode 100644 index 00000000000..46e07d929fd --- /dev/null +++ b/test/configCases/output/publicPath-scriptType-module/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./index.mjs"]; + }, + moduleScope(scope) { + scope.pseudoImport = { meta: { url: "http://test.co/path/index.js" } }; + } +}; diff --git a/test/configCases/output/publicPath-scriptType-module/webpack.config.js b/test/configCases/output/publicPath-scriptType-module/webpack.config.js new file mode 100644 index 00000000000..0f6cc194844 --- /dev/null +++ b/test/configCases/output/publicPath-scriptType-module/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + target: "electron-renderer", + output: { + assetModuleFilename: "[name][ext]", + importMetaName: "pseudoImport.meta", + scriptType: "module", + filename: "index.mjs" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/output/publicPath-web/a.js b/test/configCases/output/publicPath-web/a.js new file mode 100644 index 00000000000..c85a615db4e --- /dev/null +++ b/test/configCases/output/publicPath-web/a.js @@ -0,0 +1,5 @@ +import asset from "./asset.jpg"; + +it("should define public path", () => { + expect(asset).toBe("https://test.cases/path/inner1/inner2/../../asset.jpg"); +}); diff --git a/test/configCases/output/publicPath-web/asset.jpg b/test/configCases/output/publicPath-web/asset.jpg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/output/publicPath-web/b.js b/test/configCases/output/publicPath-web/b.js new file mode 100644 index 00000000000..3ccabac4d92 --- /dev/null +++ b/test/configCases/output/publicPath-web/b.js @@ -0,0 +1,5 @@ +import asset from "./asset.jpg"; + +it("should define public path", () => { + expect(asset).toBe("https://test.cases/path/asset.jpg"); +}); diff --git a/test/configCases/output/publicPath-web/c.js b/test/configCases/output/publicPath-web/c.js new file mode 100644 index 00000000000..d5f008e717d --- /dev/null +++ b/test/configCases/output/publicPath-web/c.js @@ -0,0 +1,5 @@ +import asset from "./asset.jpg"; + +it("should define public path", () => { + expect(asset).toBe("/other/inner1/inner2/../../asset.jpg"); +}); diff --git a/test/configCases/output/publicPath-web/d.js b/test/configCases/output/publicPath-web/d.js new file mode 100644 index 00000000000..1dc151ff189 --- /dev/null +++ b/test/configCases/output/publicPath-web/d.js @@ -0,0 +1,5 @@ +import asset from "./asset.jpg"; + +it("should define public path", () => { + expect(asset).toBe("/other/asset.jpg"); +}); diff --git a/test/configCases/output/publicPath-web/test.config.js b/test/configCases/output/publicPath-web/test.config.js new file mode 100644 index 00000000000..7c4830cda12 --- /dev/null +++ b/test/configCases/output/publicPath-web/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./inner1/inner2/a.js", "./b.js"]; + } +}; diff --git a/test/configCases/output/publicPath-web/webpack.config.js b/test/configCases/output/publicPath-web/webpack.config.js new file mode 100644 index 00000000000..ef6e2ab0bff --- /dev/null +++ b/test/configCases/output/publicPath-web/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @typedef {import("../../../../").Chunk} Chunk */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + target: "web", + entry() { + return { + a: "./a", + b: "./b", + c: { + import: "./c", + publicPath: "/other/" + }, + d: { + import: "./d", + publicPath: "/other/" + } + }; + }, + output: { + filename: (data) => + /^[ac]$/.test( + /** @type {string} */ ( + /** @type {Chunk} */ + (data.chunk).name + ) + ) + ? "inner1/inner2/[name].js" + : "[name].js", + assetModuleFilename: "[name][ext]" + }, + module: { + rules: [ + { + test: /\.jpg$/, + type: "asset/resource" + } + ] + } +}; diff --git a/test/configCases/output/string/test.config.js b/test/configCases/output/string/test.config.js index 9af369705a3..32b91675978 100644 --- a/test/configCases/output/string/test.config.js +++ b/test/configCases/output/string/test.config.js @@ -1,7 +1,7 @@ +"use strict"; + module.exports = { - findBundle: function() { - return [ - "./a.js" - ]; + findBundle() { + return ["./a.js"]; } }; diff --git a/test/configCases/output/string/webpack.config.js b/test/configCases/output/string/webpack.config.js index 113bc42824d..c9461bd2326 100644 --- a/test/configCases/output/string/webpack.config.js +++ b/test/configCases/output/string/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry() { return { diff --git a/test/configCases/output/worker-public-path/index.js b/test/configCases/output/worker-public-path/index.js new file mode 100644 index 00000000000..fa82f46bc29 --- /dev/null +++ b/test/configCases/output/worker-public-path/index.js @@ -0,0 +1,14 @@ +import { Worker } from "worker_threads"; + +it("should define public path", async () => { + const worker = new Worker(new URL("./worker.js", import.meta.url), { + type: "module" + }); + worker.postMessage("ok"); + + var fs = require("fs"), + path = require("path"); + var source = fs.readFileSync(path.join(__dirname, "main.js"), "utf-8"); + expect(source).toMatch("workerPublicPath2"); + await worker.terminate() +}); diff --git a/test/configCases/output/worker-public-path/test.config.js b/test/configCases/output/worker-public-path/test.config.js new file mode 100644 index 00000000000..2059a3f8977 --- /dev/null +++ b/test/configCases/output/worker-public-path/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./main.js"]; + } +}; diff --git a/test/configCases/output/worker-public-path/test.filter.js b/test/configCases/output/worker-public-path/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/configCases/output/worker-public-path/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/configCases/output/worker-public-path/webpack.config.js b/test/configCases/output/worker-public-path/webpack.config.js new file mode 100644 index 00000000000..7a31865c007 --- /dev/null +++ b/test/configCases/output/worker-public-path/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "none", + target: "node", + node: { + __dirname: false, + __filename: false + }, + output: { + filename: "[name].js", + workerPublicPath: "/workerPublicPath2/" + } +}; diff --git a/test/configCases/output/worker-public-path/worker.js b/test/configCases/output/worker-public-path/worker.js new file mode 100644 index 00000000000..939319f6379 --- /dev/null +++ b/test/configCases/output/worker-public-path/worker.js @@ -0,0 +1,6 @@ +function upper(str) { + return str.toUpperCase(); +} +onmessage = async event => { + postMessage(`data: ${upper(event.data)}, thanks`); +}; diff --git a/test/configCases/parsing/bom/dir/module.js b/test/configCases/parsing/bom/dir/module.js new file mode 100644 index 00000000000..f29098a9643 --- /dev/null +++ b/test/configCases/parsing/bom/dir/module.js @@ -0,0 +1,3 @@ +export default function test() { + return 1; +} diff --git a/test/configCases/parsing/bom/index.js b/test/configCases/parsing/bom/index.js new file mode 100644 index 00000000000..c4d5e3af852 --- /dev/null +++ b/test/configCases/parsing/bom/index.js @@ -0,0 +1,19 @@ +import * as mod from "./module.js"; +import * as style from "./style.css"; +import * as text1 from "./text-with-bom.txt"; +import * as text2 from "./test-without-bom.text"; + +it("should remove BOM", async function() { + const url = new URL("./resource-with-bom.ext", import.meta.url); + + expect(mod).toBeDefined(); + expect(style).toBeDefined(); + expect(text1).toBeDefined(); + expect(text2).toBeDefined(); + expect(url).toBeDefined(); + + const module = "module.js" + const modules = await import("./dir/" + module); + + expect(modules).toBeDefined(); +}); diff --git a/test/configCases/parsing/bom/loader.js b/test/configCases/parsing/bom/loader.js new file mode 100644 index 00000000000..cffe014d433 --- /dev/null +++ b/test/configCases/parsing/bom/loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function loader(content) { + return `module.exports = ${JSON.stringify(content)}`; +}; diff --git a/test/configCases/parsing/bom/module.js b/test/configCases/parsing/bom/module.js new file mode 100644 index 00000000000..f29098a9643 --- /dev/null +++ b/test/configCases/parsing/bom/module.js @@ -0,0 +1,3 @@ +export default function test() { + return 1; +} diff --git a/test/configCases/parsing/bom/resource-with-bom.ext b/test/configCases/parsing/bom/resource-with-bom.ext new file mode 100644 index 00000000000..dc58dad5b23 --- /dev/null +++ b/test/configCases/parsing/bom/resource-with-bom.ext @@ -0,0 +1 @@ +asset diff --git a/test/configCases/parsing/bom/style.css b/test/configCases/parsing/bom/style.css new file mode 100644 index 00000000000..8317012f260 --- /dev/null +++ b/test/configCases/parsing/bom/style.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/parsing/bom/test-without-bom.text b/test/configCases/parsing/bom/test-without-bom.text new file mode 100644 index 00000000000..8e27be7d615 --- /dev/null +++ b/test/configCases/parsing/bom/test-without-bom.text @@ -0,0 +1 @@ +text diff --git a/test/configCases/parsing/bom/test.config.js b/test/configCases/parsing/bom/test.config.js new file mode 100644 index 00000000000..80a6f757346 --- /dev/null +++ b/test/configCases/parsing/bom/test.config.js @@ -0,0 +1,33 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +module.exports = { + findBundle() { + return ["dir_module_js.bundle0.js", "bundle0.js"]; + }, + afterExecute(options) { + const outputPath = options.output.path; + const files = fs.readdirSync(outputPath); + + for (const file of files) { + const filename = path.resolve(outputPath, file); + const source = fs.readFileSync(filename, "utf8"); + + switch (file) { + case "resource-with-bom.ext": { + if (!/\uFEFF/.test(source)) { + throw new Error(`Not found BOM in ${filename}.`); + } + break; + } + default: { + if (/\uFEFF/.test(source)) { + throw new Error(`Found BOM in ${filename}.`); + } + } + } + } + } +}; diff --git a/test/configCases/parsing/bom/text-with-bom.txt b/test/configCases/parsing/bom/text-with-bom.txt new file mode 100644 index 00000000000..ac3d614ab58 --- /dev/null +++ b/test/configCases/parsing/bom/text-with-bom.txt @@ -0,0 +1 @@ +text1 diff --git a/test/configCases/parsing/bom/webpack.config.js b/test/configCases/parsing/bom/webpack.config.js new file mode 100644 index 00000000000..19db9ae75a0 --- /dev/null +++ b/test/configCases/parsing/bom/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + output: { + assetModuleFilename: "[name][ext]" + }, + optimization: { + chunkIds: "named" + }, + module: { + rules: [ + { + test: /\.txt$/, + loader: require.resolve("./loader") + }, + { + test: /\.text$/, + type: "asset/source" + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/parsing/context/errors.js b/test/configCases/parsing/context/errors.js new file mode 100644 index 00000000000..779f16992ad --- /dev/null +++ b/test/configCases/parsing/context/errors.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = [ + [ + /Module parse failed/, + { moduleName: /dump-file\.txt/ }, + { moduleTrace: /templates\/ sync/ } + ] +]; diff --git a/test/configCases/parsing/context/infrastructure-log.js b/test/configCases/parsing/context/infrastructure-log.js new file mode 100644 index 00000000000..fe6c3fa6e94 --- /dev/null +++ b/test/configCases/parsing/context/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules|.+dump-file\.txt/ +]; diff --git a/test/configCases/parsing/context/warnings.js b/test/configCases/parsing/context/warnings.js deleted file mode 100644 index b141a3bbcbe..00000000000 --- a/test/configCases/parsing/context/warnings.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = [ - [/Module parse failed/, /dump-file\.txt/, /templates sync \^\\\.\\\//] -]; diff --git a/test/configCases/parsing/context/webpack.config.js b/test/configCases/parsing/context/webpack.config.js index cac06dfd027..497cd1228c0 100644 --- a/test/configCases/parsing/context/webpack.config.js +++ b/test/configCases/parsing/context/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { unknownContextRegExp: /^\.\//, diff --git a/test/configCases/parsing/dead-code-elimination-require-ensure/foo.js b/test/configCases/parsing/dead-code-elimination-require-ensure/foo.js new file mode 100644 index 00000000000..442b898d8a6 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination-require-ensure/foo.js @@ -0,0 +1 @@ +export default "foo" \ No newline at end of file diff --git a/test/configCases/parsing/dead-code-elimination-require-ensure/index.js b/test/configCases/parsing/dead-code-elimination-require-ensure/index.js new file mode 100644 index 00000000000..dcf22e04465 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination-require-ensure/index.js @@ -0,0 +1,14 @@ +it("should compile and work", done => { + require.ensure( + ["./foo"], + () => { + throw new Error("error"); + }, + () => { + import("./foo").then(m => { + expect(m.default).toBe("foo"); + done(); + }); + } + ); +}); diff --git a/test/configCases/parsing/dead-code-elimination-require-ensure/webpack.config.js b/test/configCases/parsing/dead-code-elimination-require-ensure/webpack.config.js new file mode 100644 index 00000000000..504d6edc347 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination-require-ensure/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + minimize: false + } +}; diff --git a/test/configCases/parsing/dead-code-elimination/esm1.js b/test/configCases/parsing/dead-code-elimination/esm1.js new file mode 100644 index 00000000000..a87670f790b --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination/esm1.js @@ -0,0 +1,18 @@ +it("Should eliminate hoisted function in ESM because of default strict mode", () => { + expect(() => { + fnDecl; + }).toThrow(); + try { + throw new Error(); + } catch (e) { + return; + } + { + function fnDecl() { + expect(true).toBe(true); + } + } + expect(true).toBe(false); +}); + +export default "esm1"; diff --git a/test/configCases/parsing/dead-code-elimination/esm2.js b/test/configCases/parsing/dead-code-elimination/esm2.js new file mode 100644 index 00000000000..dbc337f05b8 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination/esm2.js @@ -0,0 +1 @@ +export default "esm2"; diff --git a/test/configCases/parsing/dead-code-elimination/index.js b/test/configCases/parsing/dead-code-elimination/index.js new file mode 100644 index 00000000000..e08ff1ae5bd --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination/index.js @@ -0,0 +1,118 @@ +const esm1 = require("./esm1"); + +expect(esm1.default).toBe("esm1"); + +it("Shouldn't eliminate hoisted function in current block scope", () => { + expect(() => { + funcDecl; + }).not.toThrow(); + + funcDecl(); + if (true) return; + function funcDecl() {} + import("./esm3").then(() => { + expect(true).toBe(false); + }); +}); + +it("Shouldn't eliminate hoisted variable", () => { + expect(() => { + varDecl; + }).not.toThrow(); + try { + throw new Error(); + } catch (e) { + return; + } + var varDecl = "foo"; + expect(true).toBe(false); + import("./esm3").then(() => { + expect(true).toBe(false); + }); +}); + +it("Shouldn't eliminate hoisted variable (more complex). From test/configCases/parsing/issue-4857/index.js", () => { + expect(() => { + a; + b; + c; + d; + e; + f; + g; + h; + i; + j; + k; + l; + m; + n; + o; + }).not.toThrow(); + expect(() => { + withVar; + }).toThrow(); + try { + } finally { + return; + } + expect(true).toBe(false); + var a, + [, , b] = [], + { c, D: d, ["E"]: e = 2 } = {}; + var [{ ["_"]: f }, ...g] = []; + do { + switch (g) { + default: + var h; + break; + } + loop: for (var i; ; ) for (var j in {}) for (var k of {}) break; + try { + var l; + } catch (e) { + var m; + } finally { + var n; + } + { + var o; + } + } while (true); + with (o) { + var withVar; + } + import("./esm3").then(() => { + expect(true).toBe(false); + }); +}); + +it("Should eliminate hoisted function in strict mode", () => { + "use strict"; + expect(() => { + funcDecl; + }).toThrow(); + + if (true) return; + + { + function funcDecl() {} + expect(true).toBe(false); + } +}); + +it("Shouldn't eliminate hoisted function in sloppy mode", () => { + expect(() => { + funcDecl; + }).not.toThrow(); + if (true) return; + { + function funcDecl() {} + expect(true).toBe(false); + } +}); +if (true) { + return; +} +// We won't terminate in top level scope although it won't run. +require("./esm2"); diff --git a/test/configCases/parsing/dead-code-elimination/test.config.js b/test/configCases/parsing/dead-code-elimination/test.config.js new file mode 100644 index 00000000000..58a0ac314a1 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["test.js", "bundle0.js"]; + } +}; diff --git a/test/configCases/parsing/dead-code-elimination/test.js b/test/configCases/parsing/dead-code-elimination/test.js new file mode 100644 index 00000000000..0e368560062 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination/test.js @@ -0,0 +1,6 @@ +it("should work", () => { + const stats = __STATS__.children[__STATS_I__]; + expect( + stats.modules.filter(m => m.name.startsWith("./esm")).length === 2 + ).toBe(true); +}); diff --git a/test/configCases/parsing/dead-code-elimination/webpack.config.js b/test/configCases/parsing/dead-code-elimination/webpack.config.js new file mode 100644 index 00000000000..213510c47e0 --- /dev/null +++ b/test/configCases/parsing/dead-code-elimination/webpack.config.js @@ -0,0 +1,51 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + optimization: { + minimize: false + }, + module: { + rules: [ + { + test: /index.js$/, + type: "javascript/dynamic" + }, + { + test: /esm/, + type: "javascript/esm" + } + ] + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap("Test", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "copy-webpack-plugin", + stage: + compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const data = fs.readFileSync( + path.resolve(__dirname, "./test.js") + ); + + compilation.emitAsset( + "test.js", + new webpack.sources.RawSource(data) + ); + } + ); + }); + } + } + ] + } +]; diff --git a/test/configCases/parsing/destructuring-computed-property/index.js b/test/configCases/parsing/destructuring-computed-property/index.js new file mode 100644 index 00000000000..8cebedbd130 --- /dev/null +++ b/test/configCases/parsing/destructuring-computed-property/index.js @@ -0,0 +1,18 @@ +import * as namespace from "../destructuring-namespace-import/module"; + +it("should work with destructuring", function() { + const key = "fo" + "o"; + const { + [key]: a = "foo", + ["fo" + "o"]: a1 = "foo", + [PROPERTY]: a2 = "foo", + ["unkn" + "own"]: unknown = "foo", + unknown1 = "foo", + } = namespace; + + expect(a).toBe("bar"); + expect(a1).toBe("bar"); + expect(a2).toBe("bar"); + expect(unknown).toBe("foo"); + expect(unknown1).toBe("foo"); +}); diff --git a/test/configCases/parsing/destructuring-computed-property/module.js b/test/configCases/parsing/destructuring-computed-property/module.js new file mode 100644 index 00000000000..c155820bf77 --- /dev/null +++ b/test/configCases/parsing/destructuring-computed-property/module.js @@ -0,0 +1 @@ +export const foo = 'bar'; diff --git a/test/configCases/parsing/destructuring-computed-property/webpack.config.js b/test/configCases/parsing/destructuring-computed-property/webpack.config.js new file mode 100644 index 00000000000..ac8e5f982de --- /dev/null +++ b/test/configCases/parsing/destructuring-computed-property/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + }, + plugins: [ + new webpack.DefinePlugin({ + PROPERTY: JSON.stringify("foo") + }) + ] +}; diff --git a/test/configCases/parsing/destructuring-namespace-import/index.js b/test/configCases/parsing/destructuring-namespace-import/index.js new file mode 100644 index 00000000000..159132b85bb --- /dev/null +++ b/test/configCases/parsing/destructuring-namespace-import/index.js @@ -0,0 +1,41 @@ +import * as namespace from "./module.js"; + +it("should work with destructuring", function() { + { + const { foo } = namespace; + expect(foo).toBe("bar"); + } + + { + let foo; + ({ foo } = namespace); + expect(foo).toBe("bar"); + } + + { + let foo; + ({ foo = 'foo' } = namespace); + expect(foo).toBe("bar"); + } + + { + const { foo = 'foo' } = namespace; + expect(foo).toBe("bar"); + } + + { + const strings = []; + ({ foo : strings[0] } = namespace); + expect(strings[0]).toBe("bar"); + } + + { + const { foo: otherFoo = 'foo' } = namespace; + expect(otherFoo).toBe("bar"); + } + + { + const { bar = 'foo' } = namespace; + expect(bar).toBe("foo"); + } +}); diff --git a/test/configCases/parsing/destructuring-namespace-import/module.js b/test/configCases/parsing/destructuring-namespace-import/module.js new file mode 100644 index 00000000000..c155820bf77 --- /dev/null +++ b/test/configCases/parsing/destructuring-namespace-import/module.js @@ -0,0 +1 @@ +export const foo = 'bar'; diff --git a/test/configCases/parsing/destructuring-namespace-import/webpack.config.js b/test/configCases/parsing/destructuring-namespace-import/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/parsing/destructuring-namespace-import/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/parsing/destructuring-rest/index.js b/test/configCases/parsing/destructuring-rest/index.js new file mode 100644 index 00000000000..ba38e9dc45a --- /dev/null +++ b/test/configCases/parsing/destructuring-rest/index.js @@ -0,0 +1,8 @@ +import * as namespace from "../destructuring-namespace-import/module"; + +it("should work with destructuring", function() { + const key = "fo" + "o"; + const { ...rest } = namespace; + + expect(rest[key]).toBe("bar"); +}); diff --git a/test/configCases/parsing/destructuring-rest/module.js b/test/configCases/parsing/destructuring-rest/module.js new file mode 100644 index 00000000000..c155820bf77 --- /dev/null +++ b/test/configCases/parsing/destructuring-rest/module.js @@ -0,0 +1 @@ +export const foo = 'bar'; diff --git a/test/configCases/parsing/destructuring-rest/webpack.config.js b/test/configCases/parsing/destructuring-rest/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/parsing/destructuring-rest/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/parsing/extended-api/chunk.js b/test/configCases/parsing/extended-api/chunk.js new file mode 100644 index 00000000000..c0d3c51a9e8 --- /dev/null +++ b/test/configCases/parsing/extended-api/chunk.js @@ -0,0 +1,2 @@ +export const hash = __webpack_hash__; +export const chunkName = __webpack_chunkname__; diff --git a/test/configCases/parsing/extended-api/index.js b/test/configCases/parsing/extended-api/index.js index 6b10bd1e430..561ef08b8fc 100644 --- a/test/configCases/parsing/extended-api/index.js +++ b/test/configCases/parsing/extended-api/index.js @@ -1,8 +1,14 @@ it("should have __webpack_hash__", function() { expect(__webpack_hash__).toBeTypeOf("string"); expect(__webpack_hash__).toMatch(/^[0-9a-f]{20}$/); + return import("./chunk").then(({ hash }) => { + expect(hash).toBe(__webpack_hash__); + }); }); it("should have __webpack_chunkname__", function() { expect(__webpack_chunkname__).toBeTypeOf("string"); expect(__webpack_chunkname__).toBe("other"); + return import("./chunk").then(({ chunkName }) => { + expect(chunkName).toBe(__webpack_chunkname__); + }); }); diff --git a/test/configCases/parsing/extended-api/webpack.config.js b/test/configCases/parsing/extended-api/webpack.config.js index 3eeca328d17..111b9e76b11 100644 --- a/test/configCases/parsing/extended-api/webpack.config.js +++ b/test/configCases/parsing/extended-api/webpack.config.js @@ -1,9 +1,8 @@ "use strict"; -const webpack = require("../../../../"); +/** @type {import("../../../../").Configuration} */ module.exports = { entry: { other: "./index" - }, - plugins: [new webpack.ExtendedAPIPlugin()] + } }; diff --git a/test/configCases/parsing/harmony-global/webpack.config.js b/test/configCases/parsing/harmony-global/webpack.config.js index a65179e2b46..6718d29b4e7 100644 --- a/test/configCases/parsing/harmony-global/webpack.config.js +++ b/test/configCases/parsing/harmony-global/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { target: "web", performance: { diff --git a/test/configCases/parsing/harmony-this-concat/abc.js b/test/configCases/parsing/harmony-this-concat/abc.js index f9d8733a270..567c19da69d 100644 --- a/test/configCases/parsing/harmony-this-concat/abc.js +++ b/test/configCases/parsing/harmony-this-concat/abc.js @@ -1,14 +1,63 @@ function returnThis() { - if(typeof this === "undefined") return "undefined"; + if (typeof this === "undefined") return "undefined"; return this; } var a = returnThis; var b = returnThis; -export { - a, - b +export { a, b }; + +export const that = this; +export const returnThisArrow = () => this; +export const returnThisMember = () => this.a; + +export class C { + constructor() { + this.x = "bar"; + } + foo() { + return this.x; + } + bar(x = this.x) { + return x; + } +} + +export const extendThisClass = () => { + return class extends this.Buffer {}; +}; + +export function D() { + this.prop = () => "ok"; +} + +// See https://github.com/webpack/webpack/issues/6379 +export const E = { + x: "bar", + foo(x = this.x) { + return x; + } +}; + +// See https://github.com/webpack/webpack/issues/6967 +export const F = function() { + return this; +}.call("ok"); + +export function f1(x = this.x) { + return x; +} + +export const f2 = function(x = this.x) { + return x; +}; + +export const f3 = (x = this) => x; + +export function G(x) { + this.x = x; + this.getX = (y = this.x) => y; } export default returnThis; diff --git a/test/configCases/parsing/harmony-this-concat/index.js b/test/configCases/parsing/harmony-this-concat/index.js index e2b94f2eb89..cf3acc6af9a 100644 --- a/test/configCases/parsing/harmony-this-concat/index.js +++ b/test/configCases/parsing/harmony-this-concat/index.js @@ -1,33 +1,73 @@ "use strict"; -import d, {a, b as B} from "./abc"; +import {extendThisClass, returnThisArrow, returnThisMember, that} from "./abc"; +import d, {a, b as B, C as _C, D as _D, E, F, f1, f2, f3, G} from "./abc"; +import {bindThis, callThis, applyThis} from "./issue-7213"; import * as abc from "./abc"; -function x() { throw new Error("should not be executed"); } -it("should have this = undefined on imported non-strict functions", function() { +it("should have this = undefined on harmony modules", () => { + expect((typeof that)).toBe("undefined"); + expect((typeof abc.that)).toBe("undefined"); + expect((typeof returnThisArrow())).toBe("undefined"); + expect((typeof abc.returnThisArrow())).toBe("undefined"); + expect(function() { + returnThisMember(); + }).toThrow(); + expect(function() { + abc.returnThisMember(); + }).toThrow(); + expect(function() { + extendThisClass(); + }).toThrow(); +}); + +it("should not break classes and functions", () => { + expect((new _C).foo()).toBe("bar"); + expect((new _C).bar()).toBe("bar"); + expect((new _D).prop()).toBe("ok"); + expect(E.foo()).toBe("bar"); + expect(F).toBe("ok"); + expect(f1.call({x: "f1"})).toBe("f1"); + expect(f2.call({x: "f2"})).toBe("f2"); + expect(f3.call("f3")).toBe(undefined); + expect(f3()).toBe(undefined); + expect((new G("ok")).getX()).toBe("ok"); +}); + +function x() { + throw new Error("should not be executed"); +} + +it("should have this = undefined on imported non-strict functions", () => { + x + d x + d() expect(d()).toBe("undefined"); x - expect(a()).toBe("undefined"); + a x + a() + expect(a()).toBe("undefined"); expect(B()).toBe("undefined"); - x - expect(abc.a()).toMatchObject({}); - x + expect(abc.a()).toBeTypeOf("object"); var thing = abc.a(); - expect(Object.keys(thing)).toEqual(["a", "b", "default"]); + expect(Object.keys(thing)).toEqual(Object.keys(abc)); }); import C2, { C } from "./new"; import * as New from "./new"; -it("should be possible to use new correctly", function() { - x +it("should be possible to use new correctly", () => { expect(new C()).toEqual({ok: true}); - x expect(new C2()).toEqual({ok: true}); - x expect(new New.C()).toEqual({ok: true}); }); + +it("should not break Babel arrow function transform", () => { + expect(bindThis()).toBe(undefined); + expect(callThis).toBe(undefined); + expect(applyThis).toBe(undefined); +}); diff --git a/test/configCases/parsing/harmony-this-concat/issue-7213.js b/test/configCases/parsing/harmony-this-concat/issue-7213.js new file mode 100644 index 00000000000..0e3a36512b7 --- /dev/null +++ b/test/configCases/parsing/harmony-this-concat/issue-7213.js @@ -0,0 +1,20 @@ +// This helper is taken from Babel +function _newArrowCheck(innerThis, boundThis) { + if (innerThis !== boundThis) { + throw new TypeError("Cannot instantiate an arrow function"); + } +} + +let _this = this; +export let bindThis = function() { + _newArrowCheck(this, _this); + return this +}.bind(this); + +export let callThis = function() { + return this +}.call(this) + +export let applyThis = function() { + return this +}.apply(this) diff --git a/test/configCases/parsing/harmony-this-concat/webpack.config.js b/test/configCases/parsing/harmony-this-concat/webpack.config.js index 9cd2bdf568e..0310d544882 100644 --- a/test/configCases/parsing/harmony-this-concat/webpack.config.js +++ b/test/configCases/parsing/harmony-this-concat/webpack.config.js @@ -1,7 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { strictThisContextOnImports: true - }, - plugins: [new webpack.optimize.ModuleConcatenationPlugin()] + } }; diff --git a/test/configCases/parsing/harmony-this/index.js b/test/configCases/parsing/harmony-this/index.js index a8af2750006..605d21c00de 100644 --- a/test/configCases/parsing/harmony-this/index.js +++ b/test/configCases/parsing/harmony-this/index.js @@ -13,13 +13,13 @@ it("should have this = undefined on harmony modules", () => { expect((typeof abc.returnThisArrow())).toBe("undefined"); expect(function() { returnThisMember(); - }).toThrowError(); + }).toThrow(); expect(function() { abc.returnThisMember(); - }).toThrowError(); + }).toThrow(); expect(function() { extendThisClass(); - }).toThrowError(); + }).toThrow(); }); it("should not break classes and functions", () => { @@ -41,14 +41,25 @@ function x() { it("should have this = undefined on imported non-strict functions", () => { x + d + x + d() expect(d()).toBe("undefined"); x + a + x + a() expect(a()).toBe("undefined"); x + B + x + B() expect(B()).toBe("undefined"); x - expect(abc.a()).toBeTypeOf("object"); + abc.a x + abc.a() + expect(abc.a()).toBeTypeOf("object"); var thing = abc.a(); expect(Object.keys(thing)).toEqual(Object.keys(abc)); }); @@ -58,11 +69,8 @@ import C2, { C } from "./new"; import * as New from "./new"; it("should be possible to use new correctly", () => { - x expect(new C()).toEqual({ok: true}); - x expect(new C2()).toEqual({ok: true}); - x expect(new New.C()).toEqual({ok: true}); }); diff --git a/test/configCases/parsing/harmony-this/webpack.config.js b/test/configCases/parsing/harmony-this/webpack.config.js index dfb1984cf21..4983396e4a3 100644 --- a/test/configCases/parsing/harmony-this/webpack.config.js +++ b/test/configCases/parsing/harmony-this/webpack.config.js @@ -1,5 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { strictThisContextOnImports: true + }, + optimization: { + concatenateModules: false } }; diff --git a/test/configCases/parsing/import-ignore/webpack.config.js b/test/configCases/parsing/import-ignore/webpack.config.js index 4fcaf47ef7d..61f7c859bae 100644 --- a/test/configCases/parsing/import-ignore/webpack.config.js +++ b/test/configCases/parsing/import-ignore/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: { bundle0: "./index.js", diff --git a/test/configCases/parsing/import-meta-main/boolean.js b/test/configCases/parsing/import-meta-main/boolean.js new file mode 100644 index 00000000000..508074e2ae0 --- /dev/null +++ b/test/configCases/parsing/import-meta-main/boolean.js @@ -0,0 +1 @@ +export default "1"; diff --git a/test/configCases/parsing/import-meta-main/index.js b/test/configCases/parsing/import-meta-main/index.js new file mode 100644 index 00000000000..f1751198e6c --- /dev/null +++ b/test/configCases/parsing/import-meta-main/index.js @@ -0,0 +1,14 @@ +import { main } from "./module.js"; + +it("should handle import.meta.main", async () => { + expect(import.meta.main).toBe(true); + expect(typeof import.meta.main).toBe("boolean"); + + // Just for test, nobody uses this in real code + await import(`./${typeof import.meta.main}.js`); + + const { main: myMain } = import.meta; + expect(myMain).toBe(true); + + expect(main).toBe(false); +}); diff --git a/test/configCases/parsing/import-meta-main/module.js b/test/configCases/parsing/import-meta-main/module.js new file mode 100644 index 00000000000..0c71e21200a --- /dev/null +++ b/test/configCases/parsing/import-meta-main/module.js @@ -0,0 +1,3 @@ +const main = import.meta.main; + +export { main }; diff --git a/test/configCases/parsing/import-meta-main/webpack.config.js b/test/configCases/parsing/import-meta-main/webpack.config.js new file mode 100644 index 00000000000..270b2df2bf2 --- /dev/null +++ b/test/configCases/parsing/import-meta-main/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + optimization: { + concatenateModules: false + } +}; diff --git a/test/configCases/parsing/import-meta-standalone/index.js b/test/configCases/parsing/import-meta-standalone/index.js new file mode 100644 index 00000000000..4a3df35265a --- /dev/null +++ b/test/configCases/parsing/import-meta-standalone/index.js @@ -0,0 +1,49 @@ +import { pathToFileURL } from "url"; +import path from "path"; + +const url = pathToFileURL( + path.resolve("./test/configCases/parsing/import-meta-standalone/index.js") +).toString(); +const webpackVersion = parseInt( + // eslint-disable-next-line n/no-missing-require + require("../../../../package.json").version, + 10 +); + +it("should preserve properties when import.meta is assigned to a variable", () => { + const meta = import.meta; + expect(meta.url).toBe(url); + expect(meta.webpack).toBe(webpackVersion); + expect(typeof meta.main).toBe("boolean"); + expect(typeof meta.env).toBe("object"); +}); + +it("should preserve properties when import.meta is returned from a function", () => { + function getMeta() { + return import.meta; + } + const meta = getMeta(); + expect(meta.url).toBe(url); + expect(meta.webpack).toBe(webpackVersion); +}); + +it("should preserve properties when import.meta is passed as an argument", () => { + function readUrl(meta) { + return meta.url; + } + expect(readUrl(import.meta)).toBe(url); +}); + +it("should return the same object for import.meta", () => { + expect(import.meta).toBe(import.meta); + const a = import.meta; + const b = import.meta; + expect(a).toBe(b); +}); + +it("should preserve runtime properties via Object.assign", () => { + import.meta.CUSTOM_PROP = "custom"; + const meta = import.meta; + expect(meta.CUSTOM_PROP).toBe("custom"); + expect(meta.url).toBe(url); +}); diff --git a/test/configCases/parsing/import-meta-standalone/webpack.config.js b/test/configCases/parsing/import-meta-standalone/webpack.config.js new file mode 100644 index 00000000000..851f70cf62d --- /dev/null +++ b/test/configCases/parsing/import-meta-standalone/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: "node", + experiments: { + outputModule: true + }, + output: { + module: true, + chunkFormat: "module" + } +}; diff --git a/test/configCases/parsing/issue-11619/index.js b/test/configCases/parsing/issue-11619/index.js new file mode 100644 index 00000000000..bac1af59036 --- /dev/null +++ b/test/configCases/parsing/issue-11619/index.js @@ -0,0 +1,4 @@ +it("should provide a module to a called free var", function () { + var x = xxx.yyy(xxx.yyy, xxx.yyy); + expect(x).toBe("ok"); +}); diff --git a/test/configCases/parsing/issue-11619/node_modules/aaa.js b/test/configCases/parsing/issue-11619/node_modules/aaa.js new file mode 100644 index 00000000000..61804145a72 --- /dev/null +++ b/test/configCases/parsing/issue-11619/node_modules/aaa.js @@ -0,0 +1,5 @@ +const fn = (a, b) => { + if(a === fn && b === fn) return "ok"; + return "fail"; +}; +module.exports = fn; diff --git a/test/configCases/parsing/issue-11619/webpack.config.js b/test/configCases/parsing/issue-11619/webpack.config.js new file mode 100644 index 00000000000..5d05f5f38af --- /dev/null +++ b/test/configCases/parsing/issue-11619/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const ProvidePlugin = require("../../../../").ProvidePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ProvidePlugin({ + "xxx.yyy": "aaa" + }) + ] +}; diff --git a/test/configCases/parsing/issue-14545/index.js b/test/configCases/parsing/issue-14545/index.js new file mode 100644 index 00000000000..afaf9c0ba3e --- /dev/null +++ b/test/configCases/parsing/issue-14545/index.js @@ -0,0 +1,4 @@ +it("should generate valid code when 'require' encounters object shorthand syntax", function() { + expect(require("./module").obj.require).toEqual(require("./module").obj.r); + expect(require("./module").obj.require).toBeTypeOf("function"); +}); diff --git a/test/configCases/parsing/issue-14545/module.js b/test/configCases/parsing/issue-14545/module.js new file mode 100644 index 00000000000..0b7649cbf29 --- /dev/null +++ b/test/configCases/parsing/issue-14545/module.js @@ -0,0 +1 @@ +export const obj = {require, r: require} diff --git a/test/configCases/parsing/issue-14545/webpack.config.js b/test/configCases/parsing/issue-14545/webpack.config.js new file mode 100644 index 00000000000..497cd1228c0 --- /dev/null +++ b/test/configCases/parsing/issue-14545/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + unknownContextRegExp: /^\.\//, + unknownContextCritical: false, + exprContextRegExp: /^\.\//, + exprContextCritical: false + } +}; diff --git a/test/configCases/parsing/issue-14720/index.js b/test/configCases/parsing/issue-14720/index.js new file mode 100644 index 00000000000..0445694f69d --- /dev/null +++ b/test/configCases/parsing/issue-14720/index.js @@ -0,0 +1,7 @@ +it("should generate a chunk for a full require dependencies in require.ensure", done => { + require.ensure([], () => { + expect(require("./module").property).toBe(42); + expect(__STATS__.chunks.length).toBe(2); + done(); + }); +}); diff --git a/test/configCases/parsing/issue-14720/module.js b/test/configCases/parsing/issue-14720/module.js new file mode 100644 index 00000000000..5999374264e --- /dev/null +++ b/test/configCases/parsing/issue-14720/module.js @@ -0,0 +1 @@ +exports.property = 42; diff --git a/test/configCases/parsing/issue-14720/webpack.config.js b/test/configCases/parsing/issue-14720/webpack.config.js new file mode 100644 index 00000000000..7389b128cd5 --- /dev/null +++ b/test/configCases/parsing/issue-14720/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production" +}; diff --git a/test/configCases/parsing/issue-19514/index.js b/test/configCases/parsing/issue-19514/index.js new file mode 100644 index 00000000000..3e35f41b84d --- /dev/null +++ b/test/configCases/parsing/issue-19514/index.js @@ -0,0 +1,12 @@ +it("should compile and work", done => { + function main() { + if (!import.meta.webpackHot) { + return; + } + if (import.meta.webpackHot.status() !== "idle") { + console.log("idle"); + } + } + main(); + done(); +}); diff --git a/test/configCases/parsing/issue-19514/webpack.config.js b/test/configCases/parsing/issue-19514/webpack.config.js new file mode 100644 index 00000000000..ec51b60af3d --- /dev/null +++ b/test/configCases/parsing/issue-19514/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + output: { + library: { + type: "commonjs" + } + }, + optimization: { + minimize: false + } +}; diff --git a/test/cases/parsing/issue-2942/index.js b/test/configCases/parsing/issue-2942/index.js similarity index 100% rename from test/cases/parsing/issue-2942/index.js rename to test/configCases/parsing/issue-2942/index.js diff --git a/test/configCases/parsing/issue-2942/warnings.js b/test/configCases/parsing/issue-2942/warnings.js new file mode 100644 index 00000000000..f28c5900d66 --- /dev/null +++ b/test/configCases/parsing/issue-2942/warnings.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + [/System.register is not supported by webpack/], + [/System.get is not supported by webpack/], + [/System.set is not supported by webpack/] +]; diff --git a/test/configCases/parsing/issue-2942/webpack.config.js b/test/configCases/parsing/issue-2942/webpack.config.js new file mode 100644 index 00000000000..a0d3feb7ce7 --- /dev/null +++ b/test/configCases/parsing/issue-2942/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.js$/, + parser: { + system: true + } + } + ] + } +}; diff --git a/test/configCases/parsing/issue-336/webpack.config.js b/test/configCases/parsing/issue-336/webpack.config.js index 6d8e76be95b..b29facb8459 100644 --- a/test/configCases/parsing/issue-336/webpack.config.js +++ b/test/configCases/parsing/issue-336/webpack.config.js @@ -1,4 +1,8 @@ -var ProvidePlugin = require("../../../../lib/ProvidePlugin"); +"use strict"; + +const ProvidePlugin = require("../../../../").ProvidePlugin; + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new ProvidePlugin({ diff --git a/test/configCases/parsing/issue-4857/index.js b/test/configCases/parsing/issue-4857/index.js index a1d24f3ae88..0d917281c99 100644 --- a/test/configCases/parsing/issue-4857/index.js +++ b/test/configCases/parsing/issue-4857/index.js @@ -2,21 +2,21 @@ it("should transpile unreachable branches", () => { let count = 0; // BlockStatement - if(true) { + if (true) { count++; } else { import("NOT_REACHABLE"); } - if(false) { + if (false) { import("NOT_REACHABLE"); } else { count++; } // ExpressionStatement - if(true) count++; + if (true) count++; else import("NOT_REACHABLE"); - if(false) import("NOT_REACHABLE"); + if (false) import("NOT_REACHABLE"); else count++; // ConditionalExpression @@ -27,22 +27,21 @@ it("should transpile unreachable branches", () => { }); it("should not remove hoisted variable declarations", () => { - if(false) { - var a, [,,b,] = [], {c, D: d, ["E"]: e = 2} = {}; - var [{["_"]: f}, ...g] = []; + if (false) { + var a, + [, , b] = [], + { c, D: d, ["E"]: e = 2 } = {}; + var [{ ["_"]: f }, ...g] = []; do { - switch(g) { + switch (g) { default: var h; break; } - loop: for(var i;;) - for(var j in {}) - for(var k of {}) - break; + loop: for (var i; ; ) for (var j in {}) for (var k of {}) break; try { var l; - } catch(e) { + } catch (e) { var m; } finally { var n; @@ -50,7 +49,7 @@ it("should not remove hoisted variable declarations", () => { { var o; } - } while(true); + } while (true); with (o) { var withVar; } @@ -71,27 +70,27 @@ it("should not remove hoisted variable declarations", () => { m; n; o; - }).not.toThrowError(); + }).not.toThrow(); expect(() => { withVar; - }).toThrowError(); + }).toThrow(); }); it("should not remove hoisted function declarations in loose mode", () => { - if(false) { + if (false) { function funcDecl() {} } expect(() => { funcDecl; - }).not.toThrowError(); + }).not.toThrow(); }); it("should remove hoisted function declarations in strict mode", () => { "use strict"; - if(false) { + if (false) { function funcDecl() {} } expect(() => { funcDecl; - }).toThrowError(); + }).toThrow(); }); diff --git a/test/configCases/parsing/issue-4857/webpack.config.js b/test/configCases/parsing/issue-4857/webpack.config.js index 61e31872c6e..504d6edc347 100644 --- a/test/configCases/parsing/issue-4857/webpack.config.js +++ b/test/configCases/parsing/issue-4857/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { minimize: false diff --git a/test/configCases/parsing/issue-5624/webpack.config.js b/test/configCases/parsing/issue-5624/webpack.config.js index dfb1984cf21..0310d544882 100644 --- a/test/configCases/parsing/issue-5624/webpack.config.js +++ b/test/configCases/parsing/issue-5624/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { strictThisContextOnImports: true diff --git a/test/configCases/parsing/issue-8293/amd-define.js b/test/configCases/parsing/issue-8293/amd-define.js new file mode 100644 index 00000000000..d499d97165b --- /dev/null +++ b/test/configCases/parsing/issue-8293/amd-define.js @@ -0,0 +1,9 @@ +define([ + `./${CONST_PREFIX0}/${DEFINED_EXPRESSION}/${CONST_SUFFIX0}`, + window.baz + ? `./${CONST_PREFIX1}/${DEFINED_EXPRESSION}/${CONST_SUFFIX1}` + : `./${CONST_PREFIX2}/${DEFINED_EXPRESSION}/${CONST_SUFFIX2}`, + typeof require === "function" + ? `./${CONST_PREFIX3}/${DEFINED_EXPRESSION}/${CONST_SUFFIX3}` + : `./${CONST_PREFIX4}/${DEFINED_EXPRESSION}/${CONST_SUFFIX4}` +], () => {}); diff --git a/test/configCases/parsing/issue-8293/amd-require.js b/test/configCases/parsing/issue-8293/amd-require.js new file mode 100644 index 00000000000..d3007c3c1e8 --- /dev/null +++ b/test/configCases/parsing/issue-8293/amd-require.js @@ -0,0 +1,9 @@ +require([ + `./${CONST_PREFIX0}/${DEFINED_EXPRESSION}/${CONST_SUFFIX0}`, + window.baz + ? `./${CONST_PREFIX1}/${DEFINED_EXPRESSION}/${CONST_SUFFIX1}` + : `./${CONST_PREFIX2}/${DEFINED_EXPRESSION}/${CONST_SUFFIX2}`, + typeof require === "function" + ? `./${CONST_PREFIX3}/${DEFINED_EXPRESSION}/${CONST_SUFFIX3}` + : `./${CONST_PREFIX4}/${DEFINED_EXPRESSION}/${CONST_SUFFIX4}` +], () => {}); diff --git a/test/configCases/parsing/issue-8293/commonjs.js b/test/configCases/parsing/issue-8293/commonjs.js new file mode 100644 index 00000000000..4e0cbe38ecd --- /dev/null +++ b/test/configCases/parsing/issue-8293/commonjs.js @@ -0,0 +1,7 @@ +require(`./${CONST_PREFIX0}/${DEFINED_EXPRESSION}/${CONST_SUFFIX0}`); +require(window.baz + ? `./${CONST_PREFIX1}/${DEFINED_EXPRESSION}/${CONST_SUFFIX1}` + : `./${CONST_PREFIX2}/${DEFINED_EXPRESSION}/${CONST_SUFFIX2}`); +require(typeof require === "function" + ? `./${CONST_PREFIX3}/${DEFINED_EXPRESSION}/${CONST_SUFFIX3}` + : `./${CONST_PREFIX4}/${DEFINED_EXPRESSION}/${CONST_SUFFIX4}`); diff --git a/test/configCases/parsing/issue-8293/import.js b/test/configCases/parsing/issue-8293/import.js new file mode 100644 index 00000000000..632a98aff33 --- /dev/null +++ b/test/configCases/parsing/issue-8293/import.js @@ -0,0 +1,7 @@ +import(`./${CONST_PREFIX0}/${DEFINED_EXPRESSION}/${CONST_SUFFIX0}`); +import(window.baz + ? `./${CONST_PREFIX1}/${DEFINED_EXPRESSION}/${CONST_SUFFIX1}` + : `./${CONST_PREFIX2}/${DEFINED_EXPRESSION}/${CONST_SUFFIX2}`); +import(typeof require === "function" + ? `./${CONST_PREFIX3}/${DEFINED_EXPRESSION}/${CONST_SUFFIX3}` + : `./${CONST_PREFIX4}/${DEFINED_EXPRESSION}/${CONST_SUFFIX4}`); diff --git a/test/configCases/parsing/issue-8293/index.js b/test/configCases/parsing/issue-8293/index.js new file mode 100644 index 00000000000..bb60bef0efa --- /dev/null +++ b/test/configCases/parsing/issue-8293/index.js @@ -0,0 +1,40 @@ +const fs = require("fs"); +const path = require("path"); + +["import", "amd-require", "amd-define", "commonjs", "require.resolve"].forEach( + method => { + it(`should be able to replace ${method} param in DefinePlugin`, function() { + const source = fs.readFileSync( + path.join(__dirname, `bundle-${method}.js`), + "utf-8" + ); + expect(source).toContain(`\`./\${foobar}/suffix0`); + expect(source).toContain(`\`./\${foobar}/suffix3`); + expect(source).not.toContain(`\`./\${foobar}/suffix4`); + expect(source).not.toContain(`\`./\${DEFINED_EXPRESSION}/\${CONST_SUFFIX4}`); + expect(source).not.toContain(`typeof require ===`); + }); + } +); + +["import", "commonjs"].forEach(method => { + it(`should be able to replace ${method} param in DefinePlugin for conditional expression`, function() { + const source = fs.readFileSync( + path.join(__dirname, `bundle-${method}.js`), + "utf-8" + ); + expect(source).toContain(`\`./\${"prefix1"}/\${foobar}/\${"suffix1"}`); + expect(source).toContain(`\`./\${"prefix2"}/\${foobar}/\${"suffix2"}`); + }); +}); + +["amd-require", "amd-define", "require.resolve"].forEach(method => { + it(`should be able to replace ${method} param in DefinePlugin for conditional expression`, function() { + const source = fs.readFileSync( + path.join(__dirname, `bundle-${method}.js`), + "utf-8" + ); + expect(source).toContain(`\`./\${foobar}/suffix1`); + expect(source).toContain(`\`./\${foobar}/suffix2`); + }); +}); diff --git a/test/configCases/parsing/issue-8293/prefix0/folder/suffix0.js b/test/configCases/parsing/issue-8293/prefix0/folder/suffix0.js new file mode 100644 index 00000000000..9004e941be7 --- /dev/null +++ b/test/configCases/parsing/issue-8293/prefix0/folder/suffix0.js @@ -0,0 +1 @@ +export const test = 'test code 0'; diff --git a/test/configCases/parsing/issue-8293/prefix1/folder/suffix1.js b/test/configCases/parsing/issue-8293/prefix1/folder/suffix1.js new file mode 100644 index 00000000000..41a18990840 --- /dev/null +++ b/test/configCases/parsing/issue-8293/prefix1/folder/suffix1.js @@ -0,0 +1 @@ +export const test = 'test code 1'; diff --git a/test/configCases/parsing/issue-8293/prefix2/folder/suffix2.js b/test/configCases/parsing/issue-8293/prefix2/folder/suffix2.js new file mode 100644 index 00000000000..c4c6df02b59 --- /dev/null +++ b/test/configCases/parsing/issue-8293/prefix2/folder/suffix2.js @@ -0,0 +1 @@ +export const test = 'test code 2'; diff --git a/test/configCases/parsing/issue-8293/prefix3/folder/suffix3.js b/test/configCases/parsing/issue-8293/prefix3/folder/suffix3.js new file mode 100644 index 00000000000..454521432be --- /dev/null +++ b/test/configCases/parsing/issue-8293/prefix3/folder/suffix3.js @@ -0,0 +1 @@ +export const test = 'test code 3'; diff --git a/test/configCases/parsing/issue-8293/prefix4/folder/suffix4.js b/test/configCases/parsing/issue-8293/prefix4/folder/suffix4.js new file mode 100644 index 00000000000..130fcfbc881 --- /dev/null +++ b/test/configCases/parsing/issue-8293/prefix4/folder/suffix4.js @@ -0,0 +1 @@ +export const test = 'test code 4'; diff --git a/test/configCases/parsing/issue-8293/require.resolve.js b/test/configCases/parsing/issue-8293/require.resolve.js new file mode 100644 index 00000000000..2940a9535ac --- /dev/null +++ b/test/configCases/parsing/issue-8293/require.resolve.js @@ -0,0 +1,11 @@ +require.resolve(`./${CONST_PREFIX0}/${DEFINED_EXPRESSION}/${CONST_SUFFIX0}`); +require.resolve( + window.baz + ? `./${CONST_PREFIX1}/${DEFINED_EXPRESSION}/${CONST_SUFFIX1}` + : `./${CONST_PREFIX2}/${DEFINED_EXPRESSION}/${CONST_SUFFIX2}` +); +require.resolve( + typeof require === "function" + ? `./${CONST_PREFIX3}/${DEFINED_EXPRESSION}/${CONST_SUFFIX3}` + : `./${CONST_PREFIX4}/${DEFINED_EXPRESSION}/${CONST_SUFFIX4}` +); diff --git a/test/configCases/parsing/issue-8293/webpack.config.js b/test/configCases/parsing/issue-8293/webpack.config.js new file mode 100644 index 00000000000..00e58d61b05 --- /dev/null +++ b/test/configCases/parsing/issue-8293/webpack.config.js @@ -0,0 +1,39 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./index.js", + "bundle-import": "./import.js", + "bundle-amd-require": "./amd-define.js", + "bundle-amd-define": "./amd-require.js", + "bundle-commonjs": "./commonjs.js", + "bundle-require.resolve": "./require.resolve.js" + }, + output: { + filename: "[name].js" + }, + module: { + exprContextCritical: false + }, + node: { + __dirname: false + }, + plugins: [ + new webpack.DefinePlugin({ + CONST_PREFIX0: JSON.stringify("prefix0"), + CONST_SUFFIX0: JSON.stringify("suffix0"), + CONST_PREFIX1: JSON.stringify("prefix1"), + CONST_SUFFIX1: JSON.stringify("suffix1"), + CONST_PREFIX2: JSON.stringify("prefix2"), + CONST_SUFFIX2: JSON.stringify("suffix2"), + CONST_PREFIX3: JSON.stringify("prefix3"), + CONST_SUFFIX3: JSON.stringify("suffix3"), + CONST_PREFIX4: JSON.stringify("prefix4"), + CONST_SUFFIX4: JSON.stringify("suffix4"), + DEFINED_EXPRESSION: "foobar" + }) + ] +}; diff --git a/test/configCases/parsing/issue-9042/index.js b/test/configCases/parsing/issue-9042/index.js new file mode 100644 index 00000000000..e535e4ad1b8 --- /dev/null +++ b/test/configCases/parsing/issue-9042/index.js @@ -0,0 +1,9 @@ +it("should not evaluate __dirname or __filename when set to false", function(done) { + if (typeof __dirname !== "undefined") { + done.fail(); + } + if (typeof __filename !== "undefined") { + done.fail(); + } + done(); +}); diff --git a/test/configCases/parsing/issue-9042/test.config.js b/test/configCases/parsing/issue-9042/test.config.js new file mode 100644 index 00000000000..c0a2708abdc --- /dev/null +++ b/test/configCases/parsing/issue-9042/test.config.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + delete scope.__dirname; + delete scope.__filename; + } +}; diff --git a/test/configCases/parsing/issue-9042/webpack.config.js b/test/configCases/parsing/issue-9042/webpack.config.js new file mode 100644 index 00000000000..0f4a52eef2e --- /dev/null +++ b/test/configCases/parsing/issue-9042/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + node: { + __filename: false, + __dirname: false + } +}; diff --git a/test/configCases/parsing/issue-9156/index.js b/test/configCases/parsing/issue-9156/index.js new file mode 100644 index 00000000000..16a3dd252db --- /dev/null +++ b/test/configCases/parsing/issue-9156/index.js @@ -0,0 +1,7 @@ +it("should allow to access module.id when node option is set to false", function() { + expect(module.id).toBeDefined(); +}); + +it("should allow to access module.loaded when node option is set to false", function() { + expect(module.loaded).toBeDefined(); +}); diff --git a/test/configCases/parsing/issue-9156/webpack.config.js b/test/configCases/parsing/issue-9156/webpack.config.js new file mode 100644 index 00000000000..6b280875008 --- /dev/null +++ b/test/configCases/parsing/issue-9156/webpack.config.js @@ -0,0 +1,7 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + node: false +}; diff --git a/test/configCases/parsing/node-source-plugin-off/index.js b/test/configCases/parsing/node-source-plugin-off/index.js index 322337ef345..84dd8b9d10e 100644 --- a/test/configCases/parsing/node-source-plugin-off/index.js +++ b/test/configCases/parsing/node-source-plugin-off/index.js @@ -1,3 +1,3 @@ -it("should not load node-libs-browser when node option is false", function() { - expect((typeof process)).toBe("undefined"); +it("should not load node bindings when node option is false", function() { + expect((typeof global)).toBe("undefined"); }); diff --git a/test/configCases/parsing/node-source-plugin-off/webpack.config.js b/test/configCases/parsing/node-source-plugin-off/webpack.config.js index 9f1a00b5596..6b280875008 100644 --- a/test/configCases/parsing/node-source-plugin-off/webpack.config.js +++ b/test/configCases/parsing/node-source-plugin-off/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { target: "web", node: false diff --git a/test/configCases/parsing/node-source-plugin/index.js b/test/configCases/parsing/node-source-plugin/index.js deleted file mode 100644 index c1671f16f0b..00000000000 --- a/test/configCases/parsing/node-source-plugin/index.js +++ /dev/null @@ -1,3 +0,0 @@ -it("should add node-libs-browser to target web by default", function() { - expect(process.browser).toBe(true); -}); diff --git a/test/configCases/parsing/node-source-plugin/webpack.config.js b/test/configCases/parsing/node-source-plugin/webpack.config.js deleted file mode 100644 index 3ff4222eaf0..00000000000 --- a/test/configCases/parsing/node-source-plugin/webpack.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - target: "web", - node: { - process: true - } -}; diff --git a/test/configCases/parsing/node-stuff-plugin-off/index.js b/test/configCases/parsing/node-stuff-plugin-off/index.js new file mode 100644 index 00000000000..97e3ca5792c --- /dev/null +++ b/test/configCases/parsing/node-stuff-plugin-off/index.js @@ -0,0 +1,9 @@ +it("should not evaluate __dirname or __filename when node option is false", function(done) { + if (typeof __dirname !== "undefined") { + done.fail(); + } + if (typeof __filename !== "undefined") { + done.fail(); + } + done(); +}); diff --git a/test/configCases/parsing/node-stuff-plugin-off/test.config.js b/test/configCases/parsing/node-stuff-plugin-off/test.config.js new file mode 100644 index 00000000000..c0a2708abdc --- /dev/null +++ b/test/configCases/parsing/node-stuff-plugin-off/test.config.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + delete scope.__dirname; + delete scope.__filename; + } +}; diff --git a/test/configCases/parsing/node-stuff-plugin-off/webpack.config.js b/test/configCases/parsing/node-stuff-plugin-off/webpack.config.js new file mode 100644 index 00000000000..6b280875008 --- /dev/null +++ b/test/configCases/parsing/node-stuff-plugin-off/webpack.config.js @@ -0,0 +1,7 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + node: false +}; diff --git a/test/configCases/parsing/optional-chaining/index.js b/test/configCases/parsing/optional-chaining/index.js new file mode 100644 index 00000000000..17d45b973be --- /dev/null +++ b/test/configCases/parsing/optional-chaining/index.js @@ -0,0 +1,28 @@ +it("should correctly render defined data #1", () => { + expect(_VALUE_?._DEFINED_).toBe(1); +}); + +it("should correctly render defined data #2", () => { + const val1 = _VALUE_?._PROP_?._DEFINED_; + const val2 = _VALUE_?._PROP_?._UNDEFINED_; + const val3 = typeof _VALUE_?._PROP_?._DEFINED_; + const val4 = typeof _VALUE_?._PROP_?._UNDEFINED_; + const val5 = _VALUE_?._PROP_; + const val6 = typeof _VALUE_?._PROP_; + expect(val1).toBe(2); + expect(val2).toBeUndefined(); + expect(val3).toBe("number"); + expect(val4).toBe("undefined"); + expect(val5).toEqual({ _DEFINED_: 2 }); + expect(val6).toBe("object"); + expect((() => typeof _VALUE_?._PROP_?._DEFINED_).toString()).toContain( + "number" + ); + expect((() => typeof _VALUE_?._PROP_).toString()).toContain("object"); + if (_VALUE_._PROP_._DEFINED_ !== 2) require("fail"); + if (_VALUE_?._PROP_?._DEFINED_ !== 2) require("fail"); + if (typeof _VALUE_._PROP_._DEFINED_ !== "number") require("fail"); + if (typeof _VALUE_?._PROP_?._DEFINED_ !== "number") require("fail"); + if (typeof _VALUE_._PROP_ !== "object") require("fail"); + if (typeof _VALUE_?._PROP_ !== "object") require("fail"); +}); diff --git a/test/configCases/parsing/optional-chaining/test.filter.js b/test/configCases/parsing/optional-chaining/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/configCases/parsing/optional-chaining/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/configCases/parsing/optional-chaining/webpack.config.js b/test/configCases/parsing/optional-chaining/webpack.config.js new file mode 100644 index 00000000000..74f48566408 --- /dev/null +++ b/test/configCases/parsing/optional-chaining/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const { DefinePlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + target: "web", + plugins: [ + new DefinePlugin({ + _VALUE_: { + _DEFINED_: 1, + _PROP_: { + _DEFINED_: 2 + } + } + }) + ] +}; diff --git a/test/configCases/parsing/optional/index.js b/test/configCases/parsing/optional/index.js new file mode 100644 index 00000000000..aac2a938aa2 --- /dev/null +++ b/test/configCases/parsing/optional/index.js @@ -0,0 +1,11 @@ +it("should not fail for optional modules with bail", () => { + let error; + try { + require("./not-existing"); + } catch (e) { + error = e; + } + expect(() => { + throw error; + }).toThrow(); +}); diff --git a/test/configCases/parsing/optional/warnings.js b/test/configCases/parsing/optional/warnings.js new file mode 100644 index 00000000000..b7d814d8cff --- /dev/null +++ b/test/configCases/parsing/optional/warnings.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = [ + [ + /Module not found/, + /Can't resolve '\.\/not-existing' /, + { details: /not-existing\.js/ } + ] +]; diff --git a/test/configCases/parsing/optional/webpack.config.js b/test/configCases/parsing/optional/webpack.config.js new file mode 100644 index 00000000000..ac887dc073d --- /dev/null +++ b/test/configCases/parsing/optional/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + bail: true +}; diff --git a/test/configCases/parsing/override-strict/non-strict.js b/test/configCases/parsing/override-strict/non-strict.js new file mode 100644 index 00000000000..f8d75f943c1 --- /dev/null +++ b/test/configCases/parsing/override-strict/non-strict.js @@ -0,0 +1,2 @@ +var a = 1; +a.toString(); diff --git a/test/configCases/parsing/override-strict/strict.js b/test/configCases/parsing/override-strict/strict.js new file mode 100644 index 00000000000..0efa8a04fbf --- /dev/null +++ b/test/configCases/parsing/override-strict/strict.js @@ -0,0 +1,8 @@ +import "./non-strict" +import fs from "fs"; + +it("should not have iife for entry module when modules strict is different", () => { + const code = fs.readFileSync(__filename, 'utf-8'); + const iifeComment = ["This entry needs to be wrapped in an IIFE", "because it needs to be in strict mode."].join(' '); + expect(code).not.toMatch(iifeComment); +}); diff --git a/test/configCases/parsing/override-strict/webpack.config.js b/test/configCases/parsing/override-strict/webpack.config.js new file mode 100644 index 00000000000..246bef7b320 --- /dev/null +++ b/test/configCases/parsing/override-strict/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = [ + { + mode: "production", + entry: ["./strict"], + module: { + parser: { + javascript: { + overrideStrict: "strict" + } + } + } + }, + { + mode: "production", + entry: ["./strict"], + module: { + parser: { + javascript: { + overrideStrict: "non-strict" + } + } + } + } +]; diff --git a/test/configCases/parsing/relative-filedirname/webpack.config.js b/test/configCases/parsing/relative-filedirname/webpack.config.js index 3381b779e15..993501a19f3 100644 --- a/test/configCases/parsing/relative-filedirname/webpack.config.js +++ b/test/configCases/parsing/relative-filedirname/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { node: { __filename: true, diff --git a/test/configCases/parsing/require-ignore/index.js b/test/configCases/parsing/require-ignore/index.js new file mode 100644 index 00000000000..f4a08cb8e5d --- /dev/null +++ b/test/configCases/parsing/require-ignore/index.js @@ -0,0 +1,8 @@ +const fs = require("fs"); +const path = require("path"); + +it("should be able to ignore require()", () => { + const source = fs.readFileSync(path.join(__dirname, "bundle1.js"), "utf-8"); + expect(source).toMatch(`require(/* webpackIgnore: true */ "./other2.js")`); + expect(source).not.toMatch(`require(/* webpackIgnore: false */ "./other3.js")`); +}); diff --git a/test/configCases/parsing/require-ignore/other.js b/test/configCases/parsing/require-ignore/other.js new file mode 100644 index 00000000000..5fcdcd5bc96 --- /dev/null +++ b/test/configCases/parsing/require-ignore/other.js @@ -0,0 +1,2 @@ +require(/* webpackIgnore: true */ "./other2.js"); +require(/* webpackIgnore: false */ "./other3.js"); diff --git a/test/configCases/parsing/require-ignore/other2.js b/test/configCases/parsing/require-ignore/other2.js new file mode 100644 index 00000000000..5d999f67246 --- /dev/null +++ b/test/configCases/parsing/require-ignore/other2.js @@ -0,0 +1 @@ +export default "other2"; diff --git a/test/configCases/parsing/require-ignore/other3.js b/test/configCases/parsing/require-ignore/other3.js new file mode 100644 index 00000000000..f5e8052628f --- /dev/null +++ b/test/configCases/parsing/require-ignore/other3.js @@ -0,0 +1 @@ +export default "other3"; diff --git a/test/configCases/parsing/require-ignore/webpack.config.js b/test/configCases/parsing/require-ignore/webpack.config.js new file mode 100644 index 00000000000..cfce94604ba --- /dev/null +++ b/test/configCases/parsing/require-ignore/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./index.js", + bundle1: "./other.js" + }, + module: { + parser: { + javascript: { + commonjsMagicComments: true + } + } + }, + output: { + filename: "[name].js" + }, + node: { + __dirname: false + } +}; diff --git a/test/configCases/parsing/require-main/index.js b/test/configCases/parsing/require-main/index.js new file mode 100644 index 00000000000..317c0b96ece --- /dev/null +++ b/test/configCases/parsing/require-main/index.js @@ -0,0 +1,7 @@ +const { main } = require("./module"); + +it("should handle require.main", async () => { + expect(require.main === module).toBe(true); + + expect(main).toBe(false); +}); diff --git a/test/configCases/parsing/require-main/module.js b/test/configCases/parsing/require-main/module.js new file mode 100644 index 00000000000..1bd071b1217 --- /dev/null +++ b/test/configCases/parsing/require-main/module.js @@ -0,0 +1,3 @@ +const main = require.main === module; + +module.exports = { main }; diff --git a/test/configCases/parsing/require-main/webpack.config.js b/test/configCases/parsing/require-main/webpack.config.js new file mode 100644 index 00000000000..270b2df2bf2 --- /dev/null +++ b/test/configCases/parsing/require-main/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + optimization: { + concatenateModules: false + } +}; diff --git a/test/configCases/parsing/require-resolve-ignore/index.js b/test/configCases/parsing/require-resolve-ignore/index.js new file mode 100644 index 00000000000..7511c4570ca --- /dev/null +++ b/test/configCases/parsing/require-resolve-ignore/index.js @@ -0,0 +1,9 @@ +const fs = require("fs"); +const path = require("path"); + +it("should be able to ignore require.resolve()", () => { + const source = fs.readFileSync(path.join(__dirname, "bundle1.js"), "utf-8"); + expect(source).toMatch(`require.resolve(/* webpackIgnore: true */ "./non-exists")`); + expect(source).toMatch(`createRequire(import.meta.url).resolve(/* webpackIgnore: true */ "./non-exists")`); + expect(source).toMatch(`require.resolve(/* webpackIgnore: true */ "./non-exists")`); +}); diff --git a/test/configCases/parsing/require-resolve-ignore/other.js b/test/configCases/parsing/require-resolve-ignore/other.js new file mode 100644 index 00000000000..a8c4d14ea19 --- /dev/null +++ b/test/configCases/parsing/require-resolve-ignore/other.js @@ -0,0 +1,8 @@ +import { createRequire } from 'node:module'; + +const resolve = require.resolve(/* webpackIgnore: true */ "./non-exists"); +const createRequireResolve1 = createRequire(import.meta.url).resolve(/* webpackIgnore: true */ "./non-exists"); +const require = createRequire(import.meta.url); +const createRequireResolve2 = require.resolve(/* webpackIgnore: true */ "./non-exists"); + +export { resolve, createRequireResolve1, createRequireResolve2 } diff --git a/test/configCases/parsing/require-resolve-ignore/webpack.config.js b/test/configCases/parsing/require-resolve-ignore/webpack.config.js new file mode 100644 index 00000000000..cfce94604ba --- /dev/null +++ b/test/configCases/parsing/require-resolve-ignore/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./index.js", + bundle1: "./other.js" + }, + module: { + parser: { + javascript: { + commonjsMagicComments: true + } + } + }, + output: { + filename: "[name].js" + }, + node: { + __dirname: false + } +}; diff --git a/test/configCases/parsing/require.main/webpack.config.js b/test/configCases/parsing/require.main/webpack.config.js index f053ebf7976..27313115dcd 100644 --- a/test/configCases/parsing/require.main/webpack.config.js +++ b/test/configCases/parsing/require.main/webpack.config.js @@ -1 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = {}; diff --git a/test/configCases/parsing/requirejs/file.js b/test/configCases/parsing/requirejs/file.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/parsing/requirejs/index.js b/test/configCases/parsing/requirejs/index.js new file mode 100644 index 00000000000..6d38fad8e66 --- /dev/null +++ b/test/configCases/parsing/requirejs/index.js @@ -0,0 +1,20 @@ +it("should ignore require.config", function() { + require.config({ + + }); + requirejs.config({ + + }); +}); +it("should have a require.version", function() { + expect(require.version).toBeTypeOf("string"); +}); +it("should have a requirejs.onError function", function(done) { + function f(){} + expect(requirejs.onError).toBeTypeOf("undefined"); // has no default handler + var org = requirejs.onError; + requirejs.onError = f; + expect(requirejs.onError).toBe(f); + requirejs.onError = org; + require(["./file.js"], function() { done() }); +}); diff --git a/test/configCases/parsing/requirejs/webpack.config.js b/test/configCases/parsing/requirejs/webpack.config.js new file mode 100644 index 00000000000..7edee3f73f3 --- /dev/null +++ b/test/configCases/parsing/requirejs/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /\.js$/, + parser: { + requireJs: true + } + } + ] + } +}; diff --git a/test/configCases/parsing/statical-dynamic-import-this/dir4/a.js b/test/configCases/parsing/statical-dynamic-import-this/dir4/a.js new file mode 100644 index 00000000000..593fac19afd --- /dev/null +++ b/test/configCases/parsing/statical-dynamic-import-this/dir4/a.js @@ -0,0 +1,5 @@ +export const a = 1; +export function f() { + return this.a; +} +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/a.js b/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/a.js new file mode 100644 index 00000000000..7761ba96824 --- /dev/null +++ b/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/a.js @@ -0,0 +1,2 @@ +export const a = 1; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/b.js b/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/b.js new file mode 100644 index 00000000000..a298658c672 --- /dev/null +++ b/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/b.js @@ -0,0 +1,5 @@ +export function f() { + return 1; +} +export const b = 2; +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/index.js b/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/index.js new file mode 100644 index 00000000000..2d57f3a8e34 --- /dev/null +++ b/test/configCases/parsing/statical-dynamic-import-this/dir4/lib/index.js @@ -0,0 +1,4 @@ +export * as a from "./a"; +export * as b from "./b"; + +export const usedExports = __webpack_exports_info__.usedExports; diff --git a/test/configCases/parsing/statical-dynamic-import-this/index.js b/test/configCases/parsing/statical-dynamic-import-this/index.js new file mode 100644 index 00000000000..29850b25550 --- /dev/null +++ b/test/configCases/parsing/statical-dynamic-import-this/index.js @@ -0,0 +1,21 @@ +it("should respect strictThisContextOnImports for member call", async () => { + let m = await import("./dir4/a"); + expect(m.f()).toBe(1); + expect(m.usedExports).toBe(true); + let m2 = await import("./dir4/lib"); + expect(m2.b.f()).toBe(1); + expect(m2.b.usedExports).toBe(true); + expect(m2.usedExports).toEqual(["b", "usedExports"]); +}) + +it("should respect strictThisContextOnImports for member call in then", async () => { + await import("./dir4/a").then(m => { + expect(m.f()).toBe(1); + expect(m.usedExports).toBe(true); + }); + await import("./dir4/lib").then(m2 => { + expect(m2.b.f()).toBe(1); + expect(m2.b.usedExports).toBe(true); + expect(m2.usedExports).toEqual(["b", "usedExports"]); + }); +}) diff --git a/test/configCases/parsing/statical-dynamic-import-this/webpack.config.js b/test/configCases/parsing/statical-dynamic-import-this/webpack.config.js new file mode 100644 index 00000000000..0310d544882 --- /dev/null +++ b/test/configCases/parsing/statical-dynamic-import-this/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + strictThisContextOnImports: true + } +}; diff --git a/test/configCases/parsing/system.import/index.js b/test/configCases/parsing/system.import/index.js index 754a325d9f3..d906997798b 100644 --- a/test/configCases/parsing/system.import/index.js +++ b/test/configCases/parsing/system.import/index.js @@ -1,36 +1,38 @@ it("should answer typeof System correctly", () => { - if(__SYSTEM__ === false) { - expect((typeof System)).toBe("undefined"); - } else { + if(__SYSTEM__) { expect((typeof System)).toBe("object"); + } else { + expect((typeof System)).toBe("undefined"); } }); it("should answer typeof System.import correctly", () => { - if(__SYSTEM__ === false) { + if(__SYSTEM__) { + expect((typeof System.import)).toBe("function"); + } else { expect(() => { typeof System.import; - }).toThrowError(); - } else { - expect((typeof System.import)).toBe("function"); + }).toThrow(); } }); it("should be able to use System.import()", done => { try { System.import("./module").then(mod => { - if(__SYSTEM__ === false) { - done(new Error("System.import should not be parsed")); - } else { - expect(mod).toEqual({ default: "ok", [Symbol.toStringTag]: "Module" }); + if(__SYSTEM__) { + expect(mod).toEqual(nsObj({ + default: "ok" + })); done(); + } else { + done(new Error("System.import should not be parsed")); } }); } catch(e) { - if(__SYSTEM__ === false) { - done(); - } else { + if(__SYSTEM__) { done(e); + } else { + done(); } } }); diff --git a/test/configCases/parsing/system.import/warnings.js b/test/configCases/parsing/system.import/warnings.js index 3d4e4ec2714..d27a39dc0d0 100644 --- a/test/configCases/parsing/system.import/warnings.js +++ b/test/configCases/parsing/system.import/warnings.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = [ - [/system_undef/, /System\.import\(\) is deprecated/] + [{compilerPath: /system_true/}, /System\.import\(\) is deprecated/] ]; diff --git a/test/configCases/parsing/system.import/webpack.config.js b/test/configCases/parsing/system.import/webpack.config.js index ae747d61108..9bebce7addf 100644 --- a/test/configCases/parsing/system.import/webpack.config.js +++ b/test/configCases/parsing/system.import/webpack.config.js @@ -1,5 +1,11 @@ +"use strict"; + const webpack = require("../../../../"); +/** + * @param {boolean | undefined} system system + * @returns {import("../../../../").Configuration} configuration + */ function createConfig(system) { const systemString = "" + system; return { @@ -22,6 +28,7 @@ function createConfig(system) { }; } +/** @type {import("../../../../").Configuration[]} */ module.exports = [ createConfig(undefined), createConfig(true), diff --git a/test/configCases/parsing/top-level-declarations/a.js b/test/configCases/parsing/top-level-declarations/a.js new file mode 100644 index 00000000000..cc798ff50da --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/a.js @@ -0,0 +1 @@ +export const a = 1; diff --git a/test/configCases/parsing/top-level-declarations/b.js b/test/configCases/parsing/top-level-declarations/b.js new file mode 100644 index 00000000000..a8f13bb4f41 --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/b.js @@ -0,0 +1 @@ +exports.b = 2; diff --git a/test/configCases/parsing/top-level-declarations/c.js b/test/configCases/parsing/top-level-declarations/c.js new file mode 100644 index 00000000000..5f0cabef84f --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/c.js @@ -0,0 +1 @@ +export const c = 3; diff --git a/test/configCases/parsing/top-level-declarations/d.js b/test/configCases/parsing/top-level-declarations/d.js new file mode 100644 index 00000000000..88dcd403a0a --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/d.js @@ -0,0 +1 @@ +export const d = 4; diff --git a/test/configCases/parsing/top-level-declarations/index.js b/test/configCases/parsing/top-level-declarations/index.js new file mode 100644 index 00000000000..a445240db6f --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/index.js @@ -0,0 +1,15 @@ +import { a } from "./a"; +import { createRequire } from "module"; + +const myRequire = createRequire(import.meta.url); +const { b } = myRequire("./b"); +const c = new URL("./c.js", import.meta.url); +const audioContext = new AudioContext(); +const d = audioContext.audioWorklet.addModule(new URL("./d.js", import.meta.url)); + +it("should have correct top level declarations", async () => { + await d; + expect(a).toBe(1); + expect(b).toBe(2); + expect(c.pathname.endsWith(".js")).toBe(true); +}) \ No newline at end of file diff --git a/test/configCases/parsing/top-level-declarations/test.config.js b/test/configCases/parsing/top-level-declarations/test.config.js new file mode 100644 index 00000000000..3f5997f5daf --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/test.config.js @@ -0,0 +1,23 @@ +"use strict"; + +let outputDirectory; + +module.exports = { + moduleScope(scope) { + const FakeWorker = require("../../../helpers/createFakeWorker")({ + outputDirectory + }); + + scope.AudioContext = class AudioContext { + constructor() { + this.audioWorklet = { + addModule: (url) => Promise.resolve(FakeWorker.bind(null, url)) + }; + } + }; + }, + findBundle(i, options) { + outputDirectory = options.output.path; + return ["main.js"]; + } +}; diff --git a/test/configCases/parsing/top-level-declarations/test.filter.js b/test/configCases/parsing/top-level-declarations/test.filter.js new file mode 100644 index 00000000000..fc9b5e2ce0d --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsWorker = require("../../../helpers/supportsWorker"); + +module.exports = () => supportsWorker(); diff --git a/test/configCases/parsing/top-level-declarations/webpack.config.js b/test/configCases/parsing/top-level-declarations/webpack.config.js new file mode 100644 index 00000000000..4323879f8ef --- /dev/null +++ b/test/configCases/parsing/top-level-declarations/webpack.config.js @@ -0,0 +1,44 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + output: { + filename: "[name].js" + }, + module: { + parser: { + javascript: { + createRequire: true, + worker: ["*audioContext.audioWorklet.addModule()"] + } + } + }, + plugins: [ + function testPlugin(compiler) { + compiler.hooks.finishMake.tap("test", (compilation) => { + for (const module of compilation.modules) { + const name = module.nameForCondition(); + const topLevelDeclarations = + module.buildInfo && module.buildInfo.topLevelDeclarations; + if ( + name && + name.includes("top-level-declarations/index.js") && + topLevelDeclarations + ) { + const expectedTopLevelDeclarations = new Set([ + "a", + "createRequire", + "myRequire", + "b", + "c", + "audioContext", + "d" + ]); + expect(topLevelDeclarations).toEqual(expectedTopLevelDeclarations); + } + } + }); + } + ] +}; diff --git a/test/configCases/parsing/url-ignore/file2.css b/test/configCases/parsing/url-ignore/file2.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/parsing/url-ignore/file2.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/parsing/url-ignore/file4.css b/test/configCases/parsing/url-ignore/file4.css new file mode 100644 index 00000000000..195b6bcf6d2 --- /dev/null +++ b/test/configCases/parsing/url-ignore/file4.css @@ -0,0 +1,3 @@ +a { + color: red; +} diff --git a/test/configCases/parsing/url-ignore/index.js b/test/configCases/parsing/url-ignore/index.js new file mode 100644 index 00000000000..9c23e948bfc --- /dev/null +++ b/test/configCases/parsing/url-ignore/index.js @@ -0,0 +1,27 @@ +it("should ignore", function() { + const url = new URL(/* webpackIgnore: true */ "file1.css", import.meta.url); + expect(url.pathname.endsWith("file1.css")).toBe(true); + expect(url.pathname.includes("/public/")).toBe(false); + const url2 = new URL(/* webpackIgnore: false */ "file2.css", import.meta.url); + expect(/\/public\/.+\.css/.test(url2.pathname)).toBe(true); + const url3 = new URL(/* webpackIgnore: true */ "fil" + "e3.css", import.meta.url); + expect(url3.pathname.endsWith("file3.css")).toBe(true); + const url4 = new URL(/* webpackIgnore: false */ "fil" + "e4.css", import.meta.url); + expect(/\/public\/.+\.css/.test(url4.pathname)).toBe(true); + const url5 = new URL(/* webpackIgnore: "test" */ "file5.css", import.meta.url); + expect(url5.pathname.endsWith("file5.css")).toBe(true); + const value = "file5.css"; + const url6 = new URL(/* webpackIgnore: true */ "/dir/" + value, import.meta.url); + expect(url6.pathname.endsWith("file5.css")).toBe(true); + const args = ["file3.css", document.baseURI || self.location.href]; + const url7 = new URL(...args); + expect(url7.pathname.endsWith("file3.css")).toBe(true); + const url8 = new URL(document.baseURI || self.location.href); + expect(url8.toString()).toBe(document.baseURI || self.location.href); + const url9 = new URL(self.location.href); + expect(url9.toString()).toBe(self.location.href); + const url10 = new URL(/* webpackIgnore: true */ self.location.href); + expect(url10.toString()).toBe(self.location.href); + const url11 = new URL(/* webpackIgnore: true */ ...args); + expect(url11.pathname.endsWith("file3.css")).toBe(true); +}); diff --git a/test/configCases/parsing/url-ignore/warnings.js b/test/configCases/parsing/url-ignore/warnings.js new file mode 100644 index 00000000000..4730466a4b8 --- /dev/null +++ b/test/configCases/parsing/url-ignore/warnings.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [/`webpackIgnore` expected a boolean, but received: test./]; diff --git a/test/configCases/parsing/url-ignore/webpack.config.js b/test/configCases/parsing/url-ignore/webpack.config.js new file mode 100644 index 00000000000..a5b3cb94cdf --- /dev/null +++ b/test/configCases/parsing/url-ignore/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + publicPath: "/public/" + }, + experiments: { + outputModule: true + }, + target: ["web", "es2020"] +}; diff --git a/test/configCases/performance/many-async-imports/reexport.loader.js b/test/configCases/performance/many-async-imports/reexport.loader.js index f44ceced67a..3105e517fef 100644 --- a/test/configCases/performance/many-async-imports/reexport.loader.js +++ b/test/configCases/performance/many-async-imports/reexport.loader.js @@ -1,7 +1,8 @@ -module.exports = function() { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { var str = "export default Promise.all([\n"; - for(var i = 0; i < 6; i++) { - for(var j = 0; j < 2; j++) { + for (var i = 0; i < 6; i++) { + for (var j = 0; j < 2; j++) { str += `import("./reexport.loader.js!?${i}"),\n`; } } diff --git a/test/configCases/performance/many-async-imports/test.config.js b/test/configCases/performance/many-async-imports/test.config.js index 3f84fd04e2f..cef84ace50f 100644 --- a/test/configCases/performance/many-async-imports/test.config.js +++ b/test/configCases/performance/many-async-imports/test.config.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = { timeout: 10000 }; diff --git a/test/configCases/performance/many-async-imports/test.filter.js b/test/configCases/performance/many-async-imports/test.filter.js deleted file mode 100644 index 8b7e505b1bf..00000000000 --- a/test/configCases/performance/many-async-imports/test.filter.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(config) { - return !/^v(4|6)/.test(process.version); -}; diff --git a/test/configCases/performance/many-async-imports/webpack.config.js b/test/configCases/performance/many-async-imports/webpack.config.js index 61e31872c6e..504d6edc347 100644 --- a/test/configCases/performance/many-async-imports/webpack.config.js +++ b/test/configCases/performance/many-async-imports/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { minimize: false diff --git a/test/configCases/performance/many-exports/file.loader.js b/test/configCases/performance/many-exports/file.loader.js index 6ec2268c91d..1dd13c65f5c 100644 --- a/test/configCases/performance/many-exports/file.loader.js +++ b/test/configCases/performance/many-exports/file.loader.js @@ -1,7 +1,8 @@ -module.exports = function() { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { var str = ""; - for(var i = 0; i < 1000; i++) { + for (var i = 0; i < 1000; i++) { str += `export var a${i} = ${i};\n`; } return str; -} +}; diff --git a/test/configCases/performance/many-exports/reexport.loader.js b/test/configCases/performance/many-exports/reexport.loader.js index af755e8686a..e4a2a31352a 100644 --- a/test/configCases/performance/many-exports/reexport.loader.js +++ b/test/configCases/performance/many-exports/reexport.loader.js @@ -1,9 +1,10 @@ -module.exports = function() { - var str = "import * as i from \"./file.loader.js!\";\n"; +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { + var str = 'import * as i from "./file.loader.js!";\n'; str += "var sum = 0;\n"; - for(var i = 0; i < 1000; i++) { + for (var i = 0; i < 1000; i++) { str += `sum += i.a${i};\n`; } str += "export default sum;\n"; return str; -} +}; diff --git a/test/configCases/performance/many-exports/test.config.js b/test/configCases/performance/many-exports/test.config.js index 3f84fd04e2f..cef84ace50f 100644 --- a/test/configCases/performance/many-exports/test.config.js +++ b/test/configCases/performance/many-exports/test.config.js @@ -1,3 +1,5 @@ +"use strict"; + module.exports = { timeout: 10000 }; diff --git a/test/configCases/performance/many-exports/test.filter.js b/test/configCases/performance/many-exports/test.filter.js deleted file mode 100644 index 8b7e505b1bf..00000000000 --- a/test/configCases/performance/many-exports/test.filter.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = function(config) { - return !/^v(4|6)/.test(process.version); -}; diff --git a/test/configCases/performance/many-exports/webpack.config.js b/test/configCases/performance/many-exports/webpack.config.js index 61e31872c6e..504d6edc347 100644 --- a/test/configCases/performance/many-exports/webpack.config.js +++ b/test/configCases/performance/many-exports/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { minimize: false diff --git a/test/configCases/plugins/banner-plugin-hashing/index.js b/test/configCases/plugins/banner-plugin-hashing/index.js index 166837a7aeb..1fc9696013f 100644 --- a/test/configCases/plugins/banner-plugin-hashing/index.js +++ b/test/configCases/plugins/banner-plugin-hashing/index.js @@ -1,6 +1,6 @@ -const parseBanner = (banner) => { +const parseBanner = banner => { return banner - .slice(4,-3) + .slice(4, -3) .split(", ") .map(n => n.split(":")) .reduce((acc, val) => { @@ -12,13 +12,13 @@ const parseBanner = (banner) => { var source = require("fs") .readFileSync(__filename, "utf-8") .split("\n") - .slice(0,1)[0]; + .slice(0, 1)[0]; -const banner = parseBanner(source) -const REGEXP_HASH = /^[A-Za-z0-9]{20}$/ +const banner = parseBanner(source); +const REGEXP_HASH = /^[A-Za-z0-9]{20}$/; it("should interpolate file hash in chunk banner", () => { - expect(REGEXP_HASH.test(banner["hash"])).toBe(true); + expect(REGEXP_HASH.test(banner["fullhash"])).toBe(true); }); it("should interpolate chunkHash in chunk banner", () => { @@ -34,19 +34,27 @@ it("should interpolate name in chunk banner", () => { }); it("should interpolate basename in chunk banner", () => { - expect(banner["filebase"]).toBe("banner.js"); + expect(banner["base"]).toBe("banner.js"); }); it("should interpolate query in chunk banner", () => { expect(banner["query"]).toBe("?value"); }); +it("should interpolate path in chunk banner", () => { + expect(banner["path"]).toBe("dist/"); +}); + +it("should interpolate ext in chunk banner", () => { + expect(banner["ext"]).toBe(".js"); +}); + it("should parse entry into file in chunk banner", () => { - expect(banner["file"]).not.toBe(banner["filebase"]); + expect(banner["file"]).not.toBe(banner["base"]); }); it("should parse entry into name in chunk banner", () => { - expect(banner["filebase"]).not.toBe(banner["name"]); + expect(banner["base"]).not.toBe(banner["name"]); }); -require.include("./test.js"); +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/plugins/banner-plugin-hashing/test.config.js b/test/configCases/plugins/banner-plugin-hashing/test.config.js index 2d283508eea..afa4e17c955 100644 --- a/test/configCases/plugins/banner-plugin-hashing/test.config.js +++ b/test/configCases/plugins/banner-plugin-hashing/test.config.js @@ -1,7 +1,7 @@ -var fs = require("fs"); +"use strict"; module.exports = { - findBundle: function(i, options) { + findBundle() { return "./dist/banner.js"; } }; diff --git a/test/configCases/plugins/banner-plugin-hashing/webpack.config.js b/test/configCases/plugins/banner-plugin-hashing/webpack.config.js index 5c51d328b66..5d62b4121ff 100644 --- a/test/configCases/plugins/banner-plugin-hashing/webpack.config.js +++ b/test/configCases/plugins/banner-plugin-hashing/webpack.config.js @@ -2,6 +2,7 @@ const webpack = require("../../../../"); +/** @type {import("../../../../").Configuration} */ module.exports = { node: { __dirname: false, @@ -17,7 +18,7 @@ module.exports = { plugins: [ new webpack.BannerPlugin({ banner: - "hash:[hash], chunkhash:[chunkhash], name:[name], filebase:[filebase], query:[query], file:[file]" + "fullhash:[fullhash], chunkhash:[chunkhash], name:[name], base:[base], query:[query], file:[file], path:[path], ext:[ext]" }) ] }; diff --git a/test/configCases/plugins/banner-plugin/index.js b/test/configCases/plugins/banner-plugin/index.js index 105a1f91b12..e25486c1af1 100644 --- a/test/configCases/plugins/banner-plugin/index.js +++ b/test/configCases/plugins/banner-plugin/index.js @@ -6,12 +6,22 @@ it("should contain banner in bundle0 chunk", () => { expect(source).toMatch("A test value"); expect(source).toMatch("banner is a string"); expect(source).toMatch("banner is a function"); - expect(source).toMatch("/*!\n * multiline\n * banner\n * 1\n */"); + expect(source).toMatch("/*!\n * multiline\n * banner\n * bundle0\n */"); + expect(source).toMatch( + "/*!\n * trim trailing whitespace\n *\n * trailing whitespace\n */" + ); + expect(source).toMatch( + "/*!\n * trim trailing whitespace\n *\n * no trailing whitespace\n */" + ); + expect(source).not.toMatch(new RegExp("^/*! A test value in single file */$")); + expect(source).not.toMatch(new RegExp("^/*! Match test file */$")); }); it("should not contain banner in vendors chunk", () => { const source = fs.readFileSync(path.join(__dirname, "vendors.js"), "utf-8"); - expect(source).not.toMatch("A test value"); + expect(source).not.toMatch("/*! A test value */"); + expect(source).toMatch("/*! A test value in single file */"); + expect(source).toMatch("/*! Match test file */"); }); -require.include("./test.js"); +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/plugins/banner-plugin/webpack.config.js b/test/configCases/plugins/banner-plugin/webpack.config.js index fcaaee27a46..037636476bf 100644 --- a/test/configCases/plugins/banner-plugin/webpack.config.js +++ b/test/configCases/plugins/banner-plugin/webpack.config.js @@ -1,4 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { node: { __dirname: false, @@ -19,7 +23,21 @@ module.exports = { exclude: ["vendors.js"] }), new webpack.BannerPlugin({ - banner: ({ chunk }) => `multiline\nbanner\n${chunk.id}` - }) + banner: "A test value in single file", + include: ["vendors.js"] + }), + new webpack.BannerPlugin({ + banner: "Match test file", + test: /vendors\.js$/ + }), + new webpack.BannerPlugin({ + banner: ({ chunk }) => `multiline\nbanner\n${chunk.name}` + }), + new webpack.BannerPlugin( + "trim trailing whitespace\t \n\ntrailing whitespace " + ), + new webpack.BannerPlugin( + "trim trailing whitespace\t \n\nno trailing whitespace" + ) ] }; diff --git a/test/configCases/plugins/define-plugin-bigint/index.js b/test/configCases/plugins/define-plugin-bigint/index.js new file mode 100644 index 00000000000..b7d9c09f888 --- /dev/null +++ b/test/configCases/plugins/define-plugin-bigint/index.js @@ -0,0 +1,13 @@ +it("should define BIGINT", function() { + expect(BIGINT).toBe(9007199254740993n); + expect(typeof BIGINT).toBe("bigint"); + if (BIGINT !== 9007199254740993n) require("fail"); + if (typeof BIGINT !== "bigint") require("fail"); +}); +it("should define ZERO_BIGINT", function() { + expect(ZERO_BIGINT).toBe(0n); + expect(typeof ZERO_BIGINT).toBe("bigint"); + if (ZERO_BIGINT) require("fail"); + if (ZERO_BIGINT !== 0n) require("fail"); + if (typeof ZERO_BIGINT !== "bigint") require("fail"); +}); diff --git a/test/configCases/plugins/define-plugin-bigint/webpack.config.js b/test/configCases/plugins/define-plugin-bigint/webpack.config.js new file mode 100644 index 00000000000..b2593599aea --- /dev/null +++ b/test/configCases/plugins/define-plugin-bigint/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const DefinePlugin = require("../../../../").DefinePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + environment: { + bigIntLiteral: true + } + }, + plugins: [ + new DefinePlugin({ + BIGINT: BigInt("9007199254740993"), + ZERO_BIGINT: BigInt(0) + }) + ] +}; diff --git a/test/configCases/plugins/define-plugin-process-env/index.js b/test/configCases/plugins/define-plugin-process-env/index.js new file mode 100644 index 00000000000..c7c4ce1ef99 --- /dev/null +++ b/test/configCases/plugins/define-plugin-process-env/index.js @@ -0,0 +1,25 @@ +it("destructuring should work with 'process.env'", function () { + expect(process.env.NODE_ENV).toBe("production"); + + const { NODE_ENV } = process.env; + expect(NODE_ENV).toBe("production"); + + const { NODE_ENV: RENAME_NODE_ENV } = process.env; + expect(RENAME_NODE_ENV).toBe("production"); + + const { NODE_ENV: OTHER_RENAME_NODE_ENV, UNKNOWN } = process.env; + expect(OTHER_RENAME_NODE_ENV).not.toBe("production"); + expect(UNKNOWN).toBeUndefined(); + + expect(process.env.ENVIRONMENT).toBe("node"); + + const { ENVIRONMENT } = process.env; + expect(ENVIRONMENT).toBe("node"); + + const { ENVIRONMENT: RENAME_ENVIRONMENT } = process.env; + expect(RENAME_ENVIRONMENT).toBe("node"); + + const { ENVIRONMENT: OTHER_RENAME_ENVIRONMENT, OTHER_UNKNOWN } = process.env; + expect(OTHER_RENAME_ENVIRONMENT).toBeUndefined(); + expect(OTHER_UNKNOWN).toBeUndefined(); +}); diff --git a/test/configCases/plugins/define-plugin-process-env/webpack.config.js b/test/configCases/plugins/define-plugin-process-env/webpack.config.js new file mode 100644 index 00000000000..9e6995d132a --- /dev/null +++ b/test/configCases/plugins/define-plugin-process-env/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +const DefinePlugin = require("../../../../").DefinePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + mode: "production", + plugins: [ + new DefinePlugin({ + "process.env.ENVIRONMENT": JSON.stringify("node") + }) + ] +}; diff --git a/test/configCases/plugins/define-plugin-sub-key/foo.js b/test/configCases/plugins/define-plugin-sub-key/foo.js new file mode 100644 index 00000000000..ccda36f048c --- /dev/null +++ b/test/configCases/plugins/define-plugin-sub-key/foo.js @@ -0,0 +1,4 @@ + +export default { + bar: "test" +} diff --git a/test/configCases/plugins/define-plugin-sub-key/index.js b/test/configCases/plugins/define-plugin-sub-key/index.js new file mode 100644 index 00000000000..5b131670c04 --- /dev/null +++ b/test/configCases/plugins/define-plugin-sub-key/index.js @@ -0,0 +1,22 @@ + +import foo from './foo.js'; + +function works1() { + return foo.bar; +} + +function works2() { + const v = foo.bar; + return v; +} + +function works3() { + const v = foo.bar.baz; + return v; +} + +it("should compile and run", () => { + expect(works1()).toBe("test"); + expect(works2()).toBe("test"); + expect(works3()).toBe("test"); +}); diff --git a/test/configCases/plugins/define-plugin-sub-key/webpack.config.js b/test/configCases/plugins/define-plugin-sub-key/webpack.config.js new file mode 100644 index 00000000000..f2d5952d8b3 --- /dev/null +++ b/test/configCases/plugins/define-plugin-sub-key/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const DefinePlugin = require("../../../../").DefinePlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new DefinePlugin({ + "foo.bar.baz": '"test"' + }) + ] +}; diff --git a/test/configCases/plugins/define-plugin/dir/a.js b/test/configCases/plugins/define-plugin/dir/a.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/plugins/define-plugin/index.js b/test/configCases/plugins/define-plugin/index.js index 8d08c201499..7f1d60af97f 100644 --- a/test/configCases/plugins/define-plugin/index.js +++ b/test/configCases/plugins/define-plugin/index.js @@ -1,81 +1,197 @@ -/* globals it, should */ -it("should define FALSE", function() { +function donotcallme() { + expect("asi unsafe call happened").toBe(false); +} + +it("should define FALSE", function () { expect(FALSE).toBe(false); - expect((typeof TRUE)).toBe("boolean"); - var x = require(FALSE ? "fail" : "./a"); - var y = FALSE ? require("fail") : require("./a"); + expect(typeof FALSE).toBe("boolean"); + var x = require(FALSE ? "fail" : "./dir/a"); + var y = FALSE ? require("fail") : require("./dir/a"); }); - -it("should define CODE", function() { +it("should define TRUE", function () { + expect(TRUE).toBe(true); + expect(typeof TRUE).toBe("boolean"); + var x = require(TRUE ? "./dir/a" : "fail"); + var y = TRUE ? require("./dir/a") : require("fail"); +}); +it("should define CODE", function () { expect(CODE).toBe(3); - expect((typeof CODE)).toBe("number"); - if(CODE !== 3) require("fail"); - if(typeof CODE !== "number") require("fail"); + expect(typeof CODE).toBe("number"); + if (CODE !== 3) require("fail"); + if (typeof CODE !== "number") require("fail"); +}); +it("should define FUNCTION", function () { + expect(FUNCTION(5)).toBe(6); + expect(typeof FUNCTION).toBe("function"); + if (typeof FUNCTION !== "function") require("fail"); +}); +it("should define NULL", function () { + expect(NULL).toBeNull(); + if (NULL) require("fail"); + if (NULL !== null) require("fail"); + if (typeof NULL !== "object") require("fail"); +}); +it("should define UNDEFINED", function () { + expect(typeof UNDEFINED).toBe("undefined"); + if (typeof UNDEFINED !== "undefined") require("fail"); +}); +it("should define NUMBER", function () { + expect(NUMBER).toBe(100.05); + expect(typeof NUMBER).toBe("number"); + if (NUMBER !== 100.05) require("fail"); + if (typeof NUMBER !== "number") require("fail"); +}); +it("should define ZERO", function () { + expect(ZERO).toBe(0); + expect(typeof ZERO).toBe("number"); + if (ZERO !== 0) require("fail"); + if (typeof ZERO !== "number") require("fail"); +}); +it("should define ONE", function () { + expect(ONE).toBe(1); + expect(typeof ONE).toBe("number"); + expect(42 / ONE).toBe(42); + if (ONE !== 1) require("fail"); + if (typeof ONE !== "number") require("fail"); +}); +it("should define BIGINT", function () { + expect(BIGINT).toBe(9007199254740993n); + expect(typeof BIGINT).toBe("bigint"); }); -it("should define FUNCTION", function() { - expect((FUNCTION(5))).toBe(6); - expect((typeof FUNCTION)).toBe("function"); - if(typeof FUNCTION !== "function") require("fail"); +it("should define ZERO_BIGINT", function () { + expect(ZERO_BIGINT).toBe(0n); + expect(typeof BIGINT).toBe("bigint"); }); -it("should define UNDEFINED", function() { - expect((typeof UNDEFINED)).toBe("undefined"); - if(typeof UNDEFINED !== "undefined") require("fail"); +it("should define POSITIVE_ZERO", function () { + expect(POSITIVE_ZERO).toBe(+0); + expect(POSITIVE_ZERO).toBe(0); + expect(typeof POSITIVE_ZERO).toBe("number"); + expect(Object.is(POSITIVE_ZERO, 0)).toBe(true); + expect(Object.is(POSITIVE_ZERO, +0)).toBe(true); + expect(Object.is(POSITIVE_ZERO, -0)).toBe(false); + if (POSITIVE_ZERO) require("fail"); + if (typeof POSITIVE_ZERO !== "number") require("fail"); + if (POSITIVE_ZERO !== +0) require("fail"); + if (POSITIVE_ZERO != +0) require("fail"); + if (POSITIVE_ZERO !== 0) require("fail"); + if (POSITIVE_ZERO != 0) require("fail"); }); -it("should define REGEXP", function() { +it("should define NEGATIVE_ZER0", function () { + expect(NEGATIVE_ZER0).toBe(-0); + expect(typeof NEGATIVE_ZER0).toBe("number"); + expect(Object.is(NEGATIVE_ZER0, 0)).toBe(false); + expect(Object.is(NEGATIVE_ZER0, +0)).toBe(false); + expect(Object.is(NEGATIVE_ZER0, -0)).toBe(true); + if (NEGATIVE_ZER0) require("fail"); + if (typeof NEGATIVE_ZER0 !== "number") require("fail"); + if (NEGATIVE_ZER0 !== +0) require("fail"); + if (NEGATIVE_ZER0 != +0) require("fail"); + if (NEGATIVE_ZER0 !== 0) require("fail"); + if (NEGATIVE_ZER0 != 0) require("fail"); +}); +it("should define NEGATIVE_NUMBER", function () { + expect(NEGATIVE_NUMBER).toBe(-100.25); + expect(typeof NEGATIVE_NUMBER).toBe("number"); + expect(100.25 / NEGATIVE_NUMBER).toBe(-1); + if (!NEGATIVE_NUMBER) require("fail"); + if (typeof NEGATIVE_NUMBER !== "number") require("fail"); +}); +it("should define POSITIVE_NUMBER", function () { + expect(POSITIVE_NUMBER).toBe(+100.25); + expect(typeof POSITIVE_NUMBER).toBe("number"); + expect(POSITIVE_NUMBER / 100.25).toBe(1); + if (!POSITIVE_NUMBER) require("fail"); + if (typeof POSITIVE_NUMBER !== "number") require("fail"); +}); +it("should define STRING", function () { + expect(STRING).toBe("string"); + expect(typeof STRING).toBe("string"); + if (!STRING) require("fail"); + if (typeof STRING !== "string") require("fail"); + if (STRING === "") require("fail"); + if (STRING == "") require("fail"); +}); +it("should define EMPTY_STRING", function () { + expect(EMPTY_STRING).toBe(""); + expect(typeof EMPTY_STRING).toBe("string"); + if (EMPTY_STRING) require("fail"); + if (typeof EMPTY_STRING !== "string") require("fail"); + if (EMPTY_STRING !== "") require("fail"); + if (EMPTY_STRING != "") require("fail"); +}); +it("should define REGEXP", function () { expect(REGEXP.toString()).toBe("/abc/i"); - expect((typeof REGEXP)).toBe("object"); - if(typeof REGEXP !== "object") require("fail"); + expect(typeof REGEXP).toBe("object"); + if (typeof REGEXP !== "object") require("fail"); }); -it("should define OBJECT", function() { +it("should define OBJECT", function () { var o = OBJECT; expect(o.SUB.FUNCTION(10)).toBe(11); }); -it("should define OBJECT.SUB.CODE", function() { - expect((typeof OBJECT.SUB.CODE)).toBe("number"); +it("should define OBJECT.SUB.CODE", function () { + (donotcallme) + OBJECT; + (donotcallme) + OBJECT.SUB; + expect(typeof OBJECT.SUB.CODE).toBe("number"); expect(OBJECT.SUB.CODE).toBe(3); - if(OBJECT.SUB.CODE !== 3) require("fail"); - if(typeof OBJECT.SUB.CODE !== "number") require("fail"); + if (OBJECT.SUB.CODE !== 3) require("fail"); + if (typeof OBJECT.SUB.CODE !== "number") require("fail"); - (function(sub) { + (function (sub) { // should not crash expect(sub.CODE).toBe(3); - }(OBJECT.SUB)); + })(OBJECT.SUB); }); -it("should define OBJECT.SUB.STRING", function() { - expect((typeof OBJECT.SUB.STRING)).toBe("string"); +it("should define OBJECT.SUB.STRING", function () { + expect(typeof OBJECT.SUB.STRING).toBe("string"); expect(OBJECT.SUB.STRING).toBe("string"); - if(OBJECT.SUB.STRING !== "string") require("fail"); - if(typeof OBJECT.SUB.STRING !== "string") require("fail"); + if (OBJECT.SUB.STRING !== "string") require("fail"); + if (typeof OBJECT.SUB.STRING !== "string") require("fail"); - (function(sub) { + (function (sub) { // should not crash expect(sub.STRING).toBe("string"); - }(OBJECT.SUB)); + })(OBJECT.SUB); +}); +it("should define ARRAY", function () { + (donotcallme) + ARRAY; + expect(Array.isArray(ARRAY)).toBeTruthy(); + expect(ARRAY).toHaveLength(2); +}); +it("should define ARRAY[0]", function () { + expect(ARRAY[0]).toBe(2); +}); +it("should define ARRAY[1][0]", function () { + expect(Array.isArray(ARRAY[1])).toBeTruthy(); + expect(ARRAY[1]).toHaveLength(1); + expect(ARRAY[1][0]).toBe("six"); }); -it("should define process.env.DEFINED_NESTED_KEY", function() { - expect((process.env.DEFINED_NESTED_KEY)).toBe(5); - expect((typeof process.env.DEFINED_NESTED_KEY)).toBe("number"); - if(process.env.DEFINED_NESTED_KEY !== 5) require("fail"); - if(typeof process.env.DEFINED_NESTED_KEY !== "number") require("fail"); +it("should define process.env.DEFINED_NESTED_KEY", function () { + expect(process.env.DEFINED_NESTED_KEY).toBe(5); + expect(typeof process.env.DEFINED_NESTED_KEY).toBe("number"); + if (process.env.DEFINED_NESTED_KEY !== 5) require("fail"); + if (typeof process.env.DEFINED_NESTED_KEY !== "number") require("fail"); var x = process.env.DEFINED_NESTED_KEY; expect(x).toBe(5); var indirect = process.env; - expect((indirect.DEFINED_NESTED_KEY)).toBe(5); + expect(indirect.DEFINED_NESTED_KEY).toBe(5); - (function(env) { - expect((env.DEFINED_NESTED_KEY)).toBe(5); - expect((typeof env.DEFINED_NESTED_KEY)).toBe("number"); - if(env.DEFINED_NESTED_KEY !== 5) require("fail"); - if(typeof env.DEFINED_NESTED_KEY !== "number") require("fail"); + (function (env) { + expect(env.DEFINED_NESTED_KEY).toBe(5); + expect(typeof env.DEFINED_NESTED_KEY).toBe("number"); + if (env.DEFINED_NESTED_KEY !== 5) require("fail"); + if (typeof env.DEFINED_NESTED_KEY !== "number") require("fail"); var x = env.DEFINED_NESTED_KEY; expect(x).toBe(5); - }(process.env)); + })(process.env); }); it("should define process.env.DEFINED_NESTED_KEY_STRING", function() { - if(process.env.DEFINED_NESTED_KEY_STRING !== "string") require("fail"); + if (process.env.DEFINED_NESTED_KEY_STRING !== "string") require("fail"); }); it("should assign to process.env", function() { process.env.TEST = "test"; @@ -85,7 +201,7 @@ it("should not have brackets on start", function() { function f() { throw new Error("should not be called"); } - f // <- no semicolon here + f; // <- no semicolon here OBJECT; }); @@ -96,11 +212,11 @@ it("should not explode on recursive typeof calls", function() { it("should not explode on recursive statements", function() { expect(function() { wurst; // <- is recursively defined in config - }).toThrowError("suppe is not defined"); + }).toThrow("suppe is not defined"); }); it("should evaluate composed expressions (issue 5100)", function() { - if(!module.hot && process.env.DEFINED_NESTED_KEY_STRING === "string") { + if (!module.hot && process.env.DEFINED_NESTED_KEY_STRING === "string") { // ok } else { require("fail"); @@ -114,3 +230,77 @@ it("should follow renamings in var (issue 5215)", function() { expect(TEST).toBe("test"); expect(DEFINED_NESTED_KEY).toBe(5); }); + +it("should check that runtimeValue callback argument is a module", function () { + expect(RUNTIMEVALUE_CALLBACK_ARGUMENT_IS_A_MODULE).toEqual(true); +}); + +it("should expand properly", function() { + const a = require("./dir/a"); + var tmp = ""; + expect(require("./dir/" + A_DOT_J + tmp + "s")).toBe(a); + expect(require("./dir/" + tmp + A_DOT_J + "s")).toBe(a); + expect(require("./dir/" + tmp + A_DOT_J + tmp + "s")).toBe(a); + expect(require("./dir/" + tmp + A_DOT_J + (tmp + "s"))).toBe(a); + expect(require("./dir/" + tmp + (A_DOT_J + tmp + "s"))).toBe(a); + expect(require("./dir/" + tmp + (A_DOT_J + tmp) + "s")).toBe(a); + expect(require("./dir/" + (tmp + A_DOT_J + tmp + "s"))).toBe(a); + expect(require("./dir/" + (tmp + A_DOT_J + tmp) + "s")).toBe(a); + expect(require("./dir/" + (tmp + A_DOT_J) + tmp + "s")).toBe(a); +}); + +it("destructuring assignment", () => { + const { used } = OBJECT2; + const { ["used"]: used2, used: used3 } = OBJECT2.sub; + expect(used).toBe(used2); + expect(used).toBe(used3); + + const { DEFINED_NESTED_KEY, DEFINED_NESTED_KEY_STRING } = process.env; + expect(DEFINED_NESTED_KEY).toBe(process.env.DEFINED_NESTED_KEY); + expect(DEFINED_NESTED_KEY_STRING).toBe(process.env.DEFINED_NESTED_KEY_STRING); + + const { BAZ, BAZZ } = FOO.BAR; + expect(BAZ).toBe(FOO.BAR.BAZ); + expect(BAZZ).toBe(FOO.BAR.BAZZ); + + const { BAZ: BAZ2 } = X.Y; + expect(BAZ2).toBe(X.Y.BAZ); +}); + +it("should allow shorthand property (issue #16764)", () => { + const simple = { ONE, TRUE, NULL, STRING, BIGINT, NEGATIVE_NUMBER }; + expect(simple).toStrictEqual({ + ONE: 1, + TRUE: true, + NULL: null, + STRING: "string", + BIGINT: BigInt("9007199254740993"), + NEGATIVE_NUMBER: -100.25 + }); + + const func = { FUNCTION }; + expect(func.FUNCTION(3)).toBe(4); + expect(typeof func.FUNCTION).toBe("function"); + + const code = { CODE }; + expect(code.CODE).toBe(3); + expect(typeof code.CODE).toBe("number"); + + const regex = { REGEXP }; + expect(regex.REGEXP.toString()).toBe("/abc/i"); + expect(typeof regex.REGEXP).toBe("object"); + + const nested = { OBJECT }; + expect(nested.OBJECT.SUB.FUNCTION(7)).toBe(8); + expect(nested.OBJECT.SUB.CODE).toBe(3); + expect(nested.OBJECT.SUB.UNDEFINED).toBeUndefined(); + expect(nested.OBJECT.SUB.REGEXP.toString()).toBe("/abc/i"); + expect(nested.OBJECT.SUB.STRING).toBe("string"); + + const array = { ARRAY }; + expect(array).toStrictEqual({ ARRAY: [2, ["six"]] }); +}); + +it("fails for unknown property", () => { + expect(() => ({ UNKNOWN })).toThrow("UNKNOWN is not defined"); +}); diff --git a/test/configCases/plugins/define-plugin/webpack.config.js b/test/configCases/plugins/define-plugin/webpack.config.js index 74a140740e3..0307a01e31a 100644 --- a/test/configCases/plugins/define-plugin/webpack.config.js +++ b/test/configCases/plugins/define-plugin/webpack.config.js @@ -1,11 +1,33 @@ -var DefinePlugin = require("../../../../lib/DefinePlugin"); +"use strict"; + +const DefinePlugin = require("../../../../").DefinePlugin; +const Module = require("../../../../").Module; + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new DefinePlugin({ TRUE: true, FALSE: false, + NULL: null, UNDEFINED: undefined, - FUNCTION: /* istanbul ignore next */ function(a) { + NUMBER: 100.05, + ZERO: 0, + ONE: 1, + STRING: '"string"', + EMPTY_STRING: '""', + BIGINT: BigInt("9007199254740993"), + ZERO_BIGINT: BigInt(0), + POSITIVE_ZERO: +0, + NEGATIVE_ZER0: -0, + NEGATIVE_NUMBER: -100.25, + POSITIVE_NUMBER: +100.25, + /** + * @param {number} a a + * @returns {number} result + */ + // eslint-disable-next-line object-shorthand + FUNCTION: /* istanbul ignore next */ function (a) { return a + 1; }, CODE: "(1+2)", @@ -13,7 +35,12 @@ module.exports = { OBJECT: { SUB: { UNDEFINED: undefined, - FUNCTION: /* istanbul ignore next */ function(a) { + /** + * @param {number} a a + * @returns {number} result + */ + // eslint-disable-next-line object-shorthand + FUNCTION: /* istanbul ignore next */ function (a) { return a + 1; }, CODE: "(1+2)", @@ -21,12 +48,28 @@ module.exports = { STRING: JSON.stringify("string") } }, + ARRAY: [2, [JSON.stringify("six")]], "process.env.DEFINED_NESTED_KEY": 5, "process.env.DEFINED_NESTED_KEY_STRING": '"string"', "typeof wurst": "typeof suppe", "typeof suppe": "typeof wurst", wurst: "suppe", - suppe: "wurst" + suppe: "wurst", + RUNTIMEVALUE_CALLBACK_ARGUMENT_IS_A_MODULE: DefinePlugin.runtimeValue( + ({ module }) => module instanceof Module + ), + A_DOT_J: '"a.j"', + OBJECT2: { + used: 1, + unused: "(() => throw new Error('unused property was rendered'))()", + sub: { + used: 1, + unused: "(() => throw new Error('unused property was rendered'))()" + } + }, + "FOO.BAR.BAZ": 1, + "FOO.BAR.BAZZ": 2, + "X.Y.BAZ": 3 }) ] }; diff --git a/test/configCases/plugins/dotenv-plugin/.env b/test/configCases/plugins/dotenv-plugin/.env new file mode 100644 index 00000000000..36c50065cd7 --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/.env @@ -0,0 +1,16 @@ +# Basic test +WEBPACK_API_URL=https://api.example.com +WEBPACK_MODE=test +SECRET_KEY=should-not-be-exposed +PRIVATE_VAR=also-hidden + +# Expand test +WEBPACK_BASE=example.com +WEBPACK_FULL_URL=${WEBPACK_API_URL}/v1 +WEBPACK_PORT=${PORT:-3000} + +# Mode-specific base value +WEBPACK_ENV=development + +# Custom template test - base value +WEBPACK_OVERRIDE_VAR=base-value diff --git a/test/configCases/plugins/dotenv-plugin/.env.myLocal b/test/configCases/plugins/dotenv-plugin/.env.myLocal new file mode 100644 index 00000000000..53dcda8580c --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/.env.myLocal @@ -0,0 +1,3 @@ +# Custom template test - myLocal file +WEBPACK_CUSTOM_VAR=from-myLocal +WEBPACK_OVERRIDE_VAR=myLocal-value diff --git a/test/configCases/plugins/dotenv-plugin/.env.production b/test/configCases/plugins/dotenv-plugin/.env.production new file mode 100644 index 00000000000..5caf5bea34a --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/.env.production @@ -0,0 +1,3 @@ +# Production overrides +WEBPACK_API_URL=https://prod-api.example.com +WEBPACK_ENV=production diff --git a/test/configCases/plugins/dotenv-plugin/.env.production.myLocal b/test/configCases/plugins/dotenv-plugin/.env.production.myLocal new file mode 100644 index 00000000000..70ea7e29a9b --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/.env.production.myLocal @@ -0,0 +1,2 @@ +# Custom template test - production.myLocal file +WEBPACK_PROD_CUSTOM=from-production-myLocal diff --git a/test/configCases/plugins/dotenv-plugin/basic.js b/test/configCases/plugins/dotenv-plugin/basic.js new file mode 100644 index 00000000000..d955c10411e --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/basic.js @@ -0,0 +1,10 @@ +"use strict"; + +it("should expose only WEBPACK_ prefixed env vars", () => { + expect(process.env.WEBPACK_API_URL).toBe("https://api.example.com"); + expect(process.env.WEBPACK_MODE).toBe("test"); + + // Non-prefixed vars should not be exposed + expect(typeof process.env.SECRET_KEY).toBe("undefined"); + expect(typeof process.env.PRIVATE_VAR).toBe("undefined"); +}); diff --git a/test/configCases/plugins/dotenv-plugin/custom-envdir.js b/test/configCases/plugins/dotenv-plugin/custom-envdir.js new file mode 100644 index 00000000000..b9d963b95ed --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/custom-envdir.js @@ -0,0 +1,7 @@ +"use strict"; + +it("should load from custom dir", () => { + expect(process.env.WEBPACK_FROM_ENVS).toBe("loaded-from-envs-dir"); + expect(process.env.WEBPACK_API_URL).toBe("https://custom.example.com"); +}); + diff --git a/test/configCases/plugins/dotenv-plugin/custom-prefixes.js b/test/configCases/plugins/dotenv-plugin/custom-prefixes.js new file mode 100644 index 00000000000..6e909ff16c4 --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/custom-prefixes.js @@ -0,0 +1,22 @@ +"use strict"; + +it("should expose only APP_ and CONFIG_ prefixed vars and built-in properties", () => { + expect(process.env.APP_NAME).toBe("MyApp"); + expect(process.env.CONFIG_TIMEOUT).toBe("5000"); + + // WEBPACK_ prefixed should not be exposed + expect(typeof process.env.WEBPACK_API_URL).toBe("undefined"); + + // Non-prefixed should not be exposed + expect(typeof process.env.SECRET_KEY).toBe("undefined"); + + expect(process.env.constructor).toBe("test"); + expect(process.env.__proto__).toBe("test"); + + const { __proto__ } = process.env; + expect(__proto__).toBe("test"); + + const { constructor } = process.env; + expect(constructor).toBe("test"); +}); + diff --git a/test/configCases/plugins/dotenv-plugin/custom-template.js b/test/configCases/plugins/dotenv-plugin/custom-template.js new file mode 100644 index 00000000000..eff16aed4b5 --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/custom-template.js @@ -0,0 +1,16 @@ +"use strict"; + +it("should load env files based on custom template", () => { + // Should load from .env.myLocal (custom template) + expect(process.env.WEBPACK_CUSTOM_VAR).toBe("from-myLocal"); + + // Should load from .env.production.myLocal (custom mode-specific template) + expect(process.env.WEBPACK_PROD_CUSTOM).toBe("from-production-myLocal"); + + // Should also load from standard .env + expect(process.env.WEBPACK_API_URL).toBe("https://prod-api.example.com"); + + // Custom template files should override .env values + expect(process.env.WEBPACK_OVERRIDE_VAR).toBe("myLocal-value"); +}); + diff --git a/test/configCases/plugins/dotenv-plugin/disabled-dir.js b/test/configCases/plugins/dotenv-plugin/disabled-dir.js new file mode 100644 index 00000000000..9b9e99e96ae --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/disabled-dir.js @@ -0,0 +1,16 @@ +"use strict"; + +it("should not load any .env files when dir is false", () => { + // When dir: false, no .env files should be loaded + // Only environment variables that were already set in process.env should be available + // and only those with WEBPACK_ prefix should be exposed + + // These should be undefined since no .env files are loaded + expect(typeof process.env.WEBPACK_API_URL).toBe("undefined"); + expect(typeof process.env.WEBPACK_MODE).toBe("undefined"); + expect(typeof process.env.SECRET_KEY).toBe("undefined"); + expect(typeof process.env.PRIVATE_VAR).toBe("undefined"); + + // Only pre-existing process.env variables with WEBPACK_ prefix should be available + // (if any were set before webpack runs) +}); diff --git a/test/configCases/plugins/dotenv-plugin/envs/.env b/test/configCases/plugins/dotenv-plugin/envs/.env new file mode 100644 index 00000000000..e88aeb188cc --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/envs/.env @@ -0,0 +1,2 @@ +WEBPACK_FROM_ENVS=loaded-from-envs-dir +WEBPACK_API_URL=https://custom.example.com diff --git a/test/configCases/plugins/dotenv-plugin/expand.js b/test/configCases/plugins/dotenv-plugin/expand.js new file mode 100644 index 00000000000..86461afd7ce --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/expand.js @@ -0,0 +1,10 @@ +"use strict"; + +it("should expand variables by default", () => { + expect(process.env.WEBPACK_BASE).toBe("example.com"); + expect(process.env.WEBPACK_API_URL).toBe("https://api.example.com"); + expect(process.env.WEBPACK_FULL_URL).toBe("https://api.example.com/v1"); + + // Test default value operator + expect(process.env.WEBPACK_PORT).toBe("3000"); +}); diff --git a/test/configCases/plugins/dotenv-plugin/mode-specific.js b/test/configCases/plugins/dotenv-plugin/mode-specific.js new file mode 100644 index 00000000000..36710a14af2 --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/mode-specific.js @@ -0,0 +1,11 @@ +"use strict"; + +it("should load .env.production and override .env values", () => { + // Value from .env.production should override .env + expect(process.env.WEBPACK_API_URL).toBe("https://prod-api.example.com"); + expect(process.env.WEBPACK_ENV).toBe("production"); + + // Value only in .env + expect(process.env.WEBPACK_MODE).toBe("test"); +}); + diff --git a/test/configCases/plugins/dotenv-plugin/prefixes-env/.env b/test/configCases/plugins/dotenv-plugin/prefixes-env/.env new file mode 100644 index 00000000000..9b29dc5734a --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/prefixes-env/.env @@ -0,0 +1,6 @@ +APP_NAME=MyApp +CONFIG_TIMEOUT=5000 +WEBPACK_API_URL=should-not-be-exposed +SECRET_KEY=also-hidden +__proto__=test +constructor=test diff --git a/test/configCases/plugins/dotenv-plugin/webpack.config.js b/test/configCases/plugins/dotenv-plugin/webpack.config.js new file mode 100644 index 00000000000..d01fe8077f6 --- /dev/null +++ b/test/configCases/plugins/dotenv-plugin/webpack.config.js @@ -0,0 +1,65 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + // Test 1: Basic - default behavior with WEBPACK_ prefix + { + name: "basic", + mode: "development", + entry: "./basic.js", + dotenv: true + }, + // Test 2: Expand - variables are always expanded + { + name: "expand", + mode: "development", + entry: "./expand.js", + dotenv: true + }, + // Test 3: Custom dir - load from different directory + { + name: "custom-dir", + mode: "development", + entry: "./custom-envdir.js", + dotenv: { + dir: path.resolve(__dirname, "./envs") + } + }, + // Test 4: Custom prefixes - multiple prefixes + { + name: "custom-prefixes", + mode: "development", + entry: "./custom-prefixes.js", + dotenv: { + dir: path.resolve(__dirname, "./prefixes-env"), + prefix: ["APP_", "CONFIG_", "__proto__", "constructor"] + } + }, + // Test 5: Mode-specific - .env.[mode] overrides + { + name: "mode-specific", + mode: "production", + entry: "./mode-specific.js", + dotenv: true + }, + // Test 6: Disabled dir - dir: false disables .env file loading + { + name: "disabled-dir", + mode: "development", + entry: "./disabled-dir.js", + dotenv: { + dir: false + } + }, + // Test 7: Custom template - load files based on custom template patterns + { + name: "custom-template", + mode: "production", + entry: "./custom-template.js", + dotenv: { + template: [".env", ".env.myLocal", ".env.[mode]", ".env.[mode].myLocal"] + } + } +]; diff --git a/test/configCases/plugins/environment-plugin/errors.js b/test/configCases/plugins/environment-plugin/errors.js index 3f39721426b..bd5671bdd78 100644 --- a/test/configCases/plugins/environment-plugin/errors.js +++ b/test/configCases/plugins/environment-plugin/errors.js @@ -1,36 +1,62 @@ -const variables = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh', 'iii']; -const modules = [{ - name: 'aaa', - variables: ['aaa'] -}, { - name: 'bbbccc', - variables: ['bbb', 'ccc'] -}, { - name: 'ddd', - variables: [] -}, { - name: 'eeefff', - variables: ['eee', 'fff'] -}, { - name: 'ggghhh', - variables: ['ggg', 'hhh'] -}, { - name: 'iii', - variables: ['iii'] -}]; +"use strict"; + +const variables = [ + "aaa", + "bbb", + "ccc", + "ddd", + "eee", + "fff", + "ggg", + "hhh", + "iii" +]; +const modules = [ + { + name: "aaa", + variables: ["aaa"] + }, + { + name: "bbbccc", + variables: ["bbb", "ccc"] + }, + { + name: "ddd", + variables: [], + allowedErrors: [ + [{ compilerPath: /ddd/ }, /DDD environment variable is undefined./] + ] + }, + { + name: "eeefff", + variables: ["eee", "fff"] + }, + { + name: "ggghhh", + variables: ["ggg", "hhh"] + }, + { + name: "iii", + variables: ["iii"] + } +]; // build an array of regular expressions of expected errors const regex = []; -modules.forEach(module => { - variables.forEach(variable => { - if (module.variables.indexOf(variable) === -1) { +for (const module of modules) { + for (const variable of variables) { + if (!module.variables.includes(variable)) { // the module doesn't include the env variable, an error is expected when requiring the variable regex.push([ - new RegExp(`(${module.name})`), - new RegExp(`Can't resolve '${variable}'`), + { compilerPath: new RegExp(`${module.name}`) }, + new RegExp(`Can't resolve '${variable}'`) ]); } - }); -}); + } + + if (module.allowedErrors) { + regex.push(...module.allowedErrors); + } +} module.exports = regex; diff --git a/test/configCases/plugins/environment-plugin/index.js b/test/configCases/plugins/environment-plugin/index.js index 9075e898316..e6627990895 100644 --- a/test/configCases/plugins/environment-plugin/index.js +++ b/test/configCases/plugins/environment-plugin/index.js @@ -1,35 +1,28 @@ +var never = false; + it("should import a single process.env var", () => { - if(process.env.AAA !== "aaa") - require.include("aaa"); + if (process.env.AAA !== "aaa") if (never) require("aaa"); }); it("should import multiple process.env vars", () => { - if(process.env.BBB !== "bbb") - require.include("bbb"); - if(process.env.CCC !== "ccc") - require.include("ccc"); + if (process.env.BBB !== "bbb") if (never) require("bbb"); + if (process.env.CCC !== "ccc") if (never) require("ccc"); }); -it("should warn when a process.env variable is undefined", () => { - if(process.env.DDD !== "ddd") - require.include("ddd"); +it("should error when a process.env variable is undefined", () => { + if (process.env.DDD !== "ddd") if (never) require("ddd"); }); it("should import an array of process.env vars", () => { - if(process.env.EEE !== "eee") - require.include("eee"); - if(process.env.FFF !== "fff") - require.include("fff"); + if (process.env.EEE !== "eee") if (never) require("eee"); + if (process.env.FFF !== "fff") if (never) require("fff"); }); it("should import multiple process.env var with default values", () => { - if(process.env.GGG !== "ggg") - require.include("ggg"); - if(process.env.HHH !== "hhh") - require.include("hhh"); + if (process.env.GGG !== "ggg") if (never) require("ggg"); + if (process.env.HHH !== "hhh") if (never) require("hhh"); }); it("should import process.env var with empty value", () => { - if(process.env.III !== "") - require.include("iii"); + if (process.env.III !== "") if (never) require("iii"); }); diff --git a/test/configCases/plugins/environment-plugin/warnings.js b/test/configCases/plugins/environment-plugin/warnings.js deleted file mode 100644 index 8f738709c57..00000000000 --- a/test/configCases/plugins/environment-plugin/warnings.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = [ - [/(ddd)/, /DDD environment variable is undefined./] -]; diff --git a/test/configCases/plugins/environment-plugin/webpack.config.js b/test/configCases/plugins/environment-plugin/webpack.config.js index aee27dae30e..132ce72aa8c 100644 --- a/test/configCases/plugins/environment-plugin/webpack.config.js +++ b/test/configCases/plugins/environment-plugin/webpack.config.js @@ -1,6 +1,6 @@ "use strict"; -const EnvironmentPlugin = require("../../../../lib/EnvironmentPlugin"); +const EnvironmentPlugin = require("../../../../").EnvironmentPlugin; process.env.AAA = "aaa"; process.env.BBB = "bbb"; @@ -10,6 +10,7 @@ process.env.FFF = "fff"; process.env.GGG = "ggg"; process.env.III = ""; +/** @type {import("../../../../").Configuration[]} */ module.exports = [ { name: "aaa", diff --git a/test/configCases/plugins/import-meta-env/.env.test b/test/configCases/plugins/import-meta-env/.env.test new file mode 100644 index 00000000000..e7b3e16139b --- /dev/null +++ b/test/configCases/plugins/import-meta-env/.env.test @@ -0,0 +1 @@ +WEBPACK_DOTENV_VAR=from_dotenv diff --git a/test/configCases/plugins/import-meta-env/index.js b/test/configCases/plugins/import-meta-env/index.js new file mode 100644 index 00000000000..187d76138ab --- /dev/null +++ b/test/configCases/plugins/import-meta-env/index.js @@ -0,0 +1,54 @@ +it("should expose NODE_ENV from mode (WebpackOptionsApply)", () => { + const env = import.meta.env; + expect(env.NODE_ENV).toBe("production"); +}); + +it("should expose variables from EnvironmentPlugin", () => { + const env = import.meta.env; + expect(env.ENV_VAR_FROM_ENV).toBe("from_environment_plugin"); +}); + +it("should expose variables from DotenvPlugin", () => { + const env = import.meta.env; + expect(env.WEBPACK_DOTENV_VAR).toBe("from_dotenv"); +}); + +it("should expose variables from DefinePlugin", () => { + const env = import.meta.env; + expect(env.CUSTOM_VAR).toBe("custom_value"); +}); + +it("should support typeof import.meta.env", () => { + expect(typeof import.meta.env).toBe("object"); +}); + +it("should evaluate typeof import.meta.env as 'object'", () => { + const typeofEnv = typeof import.meta.env; + expect(typeofEnv).toBe("object"); +}); + +it("should treat import.meta.env as truthy", () => { + if (import.meta.env) { + expect(true).toBe(true); + } else { + throw new Error("import.meta.env should be truthy"); + } +}); + + +it("should treat import.meta.env.NOT_EXIST as falsy", () => { + if (import.meta.env.NOT_EXIST) { + throw new Error("import.meta.env should be falsy"); + } else { + expect(true).toBe(true); + } +}); + +it("should treat import.meta.env.NOT_EXIST as falsy", () => { + const NOT_EXIST = import.meta.env.NOT_EXIST; + if (NOT_EXIST) { + throw new Error("import.meta.env should be falsy"); + } else { + expect(true).toBe(true); + } +}); \ No newline at end of file diff --git a/test/configCases/plugins/import-meta-env/webpack.config.js b/test/configCases/plugins/import-meta-env/webpack.config.js new file mode 100644 index 00000000000..08ff039311a --- /dev/null +++ b/test/configCases/plugins/import-meta-env/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +const { DefinePlugin, EnvironmentPlugin } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + // Test 1: NODE_ENV from mode (WebpackOptionsApply) + mode: "production", + // Test 3: DotenvPlugin from .env.test file + dotenv: { + template: [".env.test"] + }, + plugins: [ + // Test 2: EnvironmentPlugin + new EnvironmentPlugin({ + ENV_VAR_FROM_ENV: "from_environment_plugin" + }), + // Test 4: DefinePlugin + new DefinePlugin({ + "import.meta.env.CUSTOM_VAR": JSON.stringify("custom_value") + }) + ] +}; diff --git a/test/configCases/plugins/lib-manifest-plugin/webpack.config.js b/test/configCases/plugins/lib-manifest-plugin/webpack.config.js index 2b9b7fc2b52..5bcf77805bd 100644 --- a/test/configCases/plugins/lib-manifest-plugin/webpack.config.js +++ b/test/configCases/plugins/lib-manifest-plugin/webpack.config.js @@ -1,20 +1,20 @@ -var path = require("path"); -var LibManifestPlugin = require("../../../../lib/LibManifestPlugin"); +"use strict"; -module.exports = { +const path = require("path"); +const LibManifestPlugin = require("../../../../").LibManifestPlugin; + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration} */ +module.exports = (env, { testPath }) => ({ entry: { bundle0: ["./"] }, plugins: [ new LibManifestPlugin({ - path: path.resolve( - __dirname, - "../../../js/config/plugins/lib-manifest-plugin/[name]-manifest.json" - ), - name: "[name]_[hash]" + path: path.resolve(testPath, "[name]-manifest.json"), + name: "[name]_[fullhash]" }) ], node: { __dirname: false } -}; +}); diff --git a/test/configCases/plugins/limit-chunk-count-plugin/a.js b/test/configCases/plugins/limit-chunk-count-plugin/a.js new file mode 100644 index 00000000000..42ca9ffa910 --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/a.js @@ -0,0 +1,3 @@ +const value = (await import("./b")).default; + +export { value }; diff --git a/test/configCases/plugins/limit-chunk-count-plugin/b.js b/test/configCases/plugins/limit-chunk-count-plugin/b.js new file mode 100644 index 00000000000..d0cf1e996dd --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/b.js @@ -0,0 +1,3 @@ +const value = (await import("./c")).default; + +export default value; diff --git a/test/configCases/plugins/limit-chunk-count-plugin/c.js b/test/configCases/plugins/limit-chunk-count-plugin/c.js new file mode 100644 index 00000000000..bebcb58a8ea --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/c.js @@ -0,0 +1 @@ +export default "fine"; diff --git a/test/configCases/plugins/limit-chunk-count-plugin/index.js b/test/configCases/plugins/limit-chunk-count-plugin/index.js new file mode 100644 index 00000000000..35134a0b495 --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/index.js @@ -0,0 +1,5 @@ +it("should merge chunks", async () => { + const { value } = await import("./a"); + expect(value).toBe("fine") +}); + diff --git a/test/configCases/plugins/limit-chunk-count-plugin/test.config.js b/test/configCases/plugins/limit-chunk-count-plugin/test.config.js new file mode 100644 index 00000000000..a8755bed92f --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["main.js"]; + } +}; diff --git a/test/configCases/plugins/limit-chunk-count-plugin/test.js b/test/configCases/plugins/limit-chunk-count-plugin/test.js new file mode 100644 index 00000000000..c9d8865844b --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/test.js @@ -0,0 +1,3 @@ +var foo = {}; + +module.exports = foo; diff --git a/test/configCases/plugins/limit-chunk-count-plugin/vendors.js b/test/configCases/plugins/limit-chunk-count-plugin/vendors.js new file mode 100644 index 00000000000..39ad0d4e1e0 --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/vendors.js @@ -0,0 +1,3 @@ +var bar = {}; + +module.exports = bar; diff --git a/test/configCases/plugins/limit-chunk-count-plugin/webpack.config.js b/test/configCases/plugins/limit-chunk-count-plugin/webpack.config.js new file mode 100644 index 00000000000..b994327223e --- /dev/null +++ b/test/configCases/plugins/limit-chunk-count-plugin/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + entry: "./index.js", + output: { + filename: "[name].js" + }, + plugins: [new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 })] +}; diff --git a/test/configCases/plugins/loader-options-plugin/loader.js b/test/configCases/plugins/loader-options-plugin/loader.js index 7374ef2b557..8fcf0774460 100644 --- a/test/configCases/plugins/loader-options-plugin/loader.js +++ b/test/configCases/plugins/loader-options-plugin/loader.js @@ -1,6 +1,10 @@ -module.exports = function() { - return "module.exports = " + JSON.stringify({ - minimize: this.minimize, - jsfile: this.jsfile - }); +/** @type {import("../../../../").LoaderDefinition<{}, { minimize: boolean, jsfile: boolean }>} */ +module.exports = function () { + return ( + "module.exports = " + + JSON.stringify({ + minimize: this.minimize, + jsfile: this.jsfile + }) + ); }; diff --git a/test/configCases/plugins/loader-options-plugin/webpack.config.js b/test/configCases/plugins/loader-options-plugin/webpack.config.js index 57efbcfad56..d274e65fd02 100644 --- a/test/configCases/plugins/loader-options-plugin/webpack.config.js +++ b/test/configCases/plugins/loader-options-plugin/webpack.config.js @@ -1,5 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new webpack.LoaderOptionsPlugin({ diff --git a/test/configCases/plugins/manifest-plugin/dependency.js b/test/configCases/plugins/manifest-plugin/dependency.js new file mode 100644 index 00000000000..ad5c2f8c8e8 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/dependency.js @@ -0,0 +1,3 @@ +function doSomething() {} + +doSomething(); diff --git a/test/configCases/plugins/manifest-plugin/file.txt b/test/configCases/plugins/manifest-plugin/file.txt new file mode 100644 index 00000000000..f73f3093ff8 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/file.txt @@ -0,0 +1 @@ +file diff --git a/test/configCases/plugins/manifest-plugin/index-1.js b/test/configCases/plugins/manifest-plugin/index-1.js new file mode 100644 index 00000000000..928b5788b0f --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/index-1.js @@ -0,0 +1,32 @@ +import fs from "fs"; +import path from "path"; +import url from "../../asset-modules/_images/file.png"; + +it("should emit manifest with expected entries and paths with string publicPath", async () => { + await import(/* webpackChunkName: 'file' */ "./file.txt?foo"); + await import("./module.js"); + + const manifest = JSON.parse( + fs.readFileSync(path.resolve(__dirname, "foo.json"), "utf-8") + ); + const { entrypoints, assets } = manifest; + + expect(entrypoints).toStrictEqual({ main: { imports: ["main.js"] } }); + expect(Object.keys(assets).sort()).toEqual( + [ + "main.js", + "module_js.js", + "file.js", + "file.txt?foo", + "third.party.js", + "../../asset-modules/_images/file.png" + ].sort() + ); + expect(assets["main.js"].file).toBe("/app/bundle0.js"); + expect(assets["module_js.js"].file).toMatch(/\/app\/module_js\.[a-f0-9]+\.js/); + expect(assets["third.party.js"].file).toBe("/app/third.party.js"); + expect(assets["../../asset-modules/_images/file.png"].file).toBe("/app/file-loader.png"); + expect(assets["../../asset-modules/_images/file.png"].src).toBeDefined(); + expect(assets["file.txt?foo"].file).toMatch(/\/app\/file\.[a-f0-9]+\.txt\?foo/); + expect(assets["file.txt?foo"].src).toBeDefined(); +}); diff --git a/test/configCases/plugins/manifest-plugin/index-2.js b/test/configCases/plugins/manifest-plugin/index-2.js new file mode 100644 index 00000000000..bb0f3567f91 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/index-2.js @@ -0,0 +1,115 @@ +import "./style.css"; +import "./dependency.js"; +import url from "../../asset-modules/_images/file.png"; + +import(/* webpackChunkName: 'file' */ "./file.txt?foo"); + +new URL("./file.txt", import.meta.url); +new URL("./public/other.txt", import.meta.url); + +function importEntrypoints(manifest, name) { + const seen = new Set(); + + function getImportedChunks(entrypoint) { + const scripts = []; + const styles = []; + + for (const item of entrypoint.imports) { + const importee = manifest.assets[item]; + + if (seen.has(item)) { + continue; + } + + seen.add(item); + + for (const parent of entrypoint.parents || []) { + const [parentStyles, parentScripts] = getImportedChunks(manifest.entrypoints[parent]) + styles.push(...parentStyles); + scripts.push(...parentScripts); + } + + if (/\.css$/.test(importee.file)) { + styles.push(importee.file); + } else { + scripts.push(importee.file); + } + } + + return [styles, scripts]; + } + + return getImportedChunks(manifest.entrypoints[name]); +} + +it("should emit manifest with expected entries and paths with function publicPath", async () => { + // await import(/* webpackName: "my-name" */ "./nested/module.js?foo=bar#hash"); + + const manifest = __non_webpack_require__("./other.json"); + const { custom, entrypoints, assets } = manifest; + + expect(custom).toBe("value"); + expect(entrypoints).toEqual({ + "nested-shared": { + "imports": [ + "runtime~nested-shared.js", + "nested-shared.js" + ] + }, + "shared": { + "imports": [ + "shared.js", + "shared.css" + ], + "parents": [ + "nested-shared" + ] + }, + "foo": { + "imports": [ + "commons-dependency_js.js", + "foo.js", + "foo.css" + ], + "parents": [ + "shared" + ] + } + }); + expect(importEntrypoints(manifest, "foo")).toEqual([ + ["/nested/shared.css", "/nested/foo.css"], + [ + "/nested/runtime~nested-shared.js", + "/nested/nested-shared.js", + "/nested/shared.js", + "/nested/commons-dependency_js.js", + "/nested/foo.js" + ], + ]); + expect(Object.keys(assets).sort()).toEqual( + [ + "commons-dependency_js.js", + "commons-dependency_js.js.map", + "file.txt", + "foo.js", + "foo.js.map", + "file.js", + "file.txt?foo", + "nested-shared.js", + "nested-shared.js.map", + "runtime~nested-shared.js", + "runtime~nested-shared.js.map", + "shared.css", + "shared.css.map", + "foo.css", + "foo.css.map", + "shared.js", + "shared.js.map", + "public/other.txt", + "third.party.js" + ].sort() + ); + expect(assets["foo.js"].file).toBe("/nested/foo.js"); + expect(assets["file.txt?foo"].file).toMatch(/\/nested\/file\.[a-f0-9]+\.txt\?foo/); + expect(assets["file.txt?foo"].src).toBeDefined(); +}); diff --git a/test/configCases/plugins/manifest-plugin/infrastructure-log.js b/test/configCases/plugins/manifest-plugin/infrastructure-log.js new file mode 100644 index 00000000000..3ed655eb257 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/infrastructure-log.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = [ + // each time returns different OriginalSource in webpack.config.js:33 + // this prevents hit in inmemory cache + /^Pack got invalid because of write to: RealContentHashPlugin|analyse|third.party.js$/, + /^Pack got invalid because of write to: RealContentHashPlugin|analyse|third.party.js$/ +]; diff --git a/test/configCases/plugins/manifest-plugin/module.js b/test/configCases/plugins/manifest-plugin/module.js new file mode 100644 index 00000000000..ca56363f0a2 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/module.js @@ -0,0 +1 @@ +export default "dyn"; diff --git a/test/configCases/plugins/manifest-plugin/nested-shared.js b/test/configCases/plugins/manifest-plugin/nested-shared.js new file mode 100644 index 00000000000..ad5c2f8c8e8 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/nested-shared.js @@ -0,0 +1,3 @@ +function doSomething() {} + +doSomething(); diff --git a/test/configCases/plugins/manifest-plugin/nested/module.js b/test/configCases/plugins/manifest-plugin/nested/module.js new file mode 100644 index 00000000000..188b8d40a94 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/nested/module.js @@ -0,0 +1,3 @@ +function doNothing() {} + +doNothing(); diff --git a/test/configCases/plugins/manifest-plugin/public/other.txt b/test/configCases/plugins/manifest-plugin/public/other.txt new file mode 100644 index 00000000000..f73f3093ff8 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/public/other.txt @@ -0,0 +1 @@ +file diff --git a/test/configCases/plugins/manifest-plugin/shared.css b/test/configCases/plugins/manifest-plugin/shared.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/shared.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/plugins/manifest-plugin/shared.js b/test/configCases/plugins/manifest-plugin/shared.js new file mode 100644 index 00000000000..41e76705890 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/shared.js @@ -0,0 +1,5 @@ +import "./shared.css"; + +function doSomething() {} + +doSomething(); diff --git a/test/configCases/plugins/manifest-plugin/style.css b/test/configCases/plugins/manifest-plugin/style.css new file mode 100644 index 00000000000..f0d5b13bffd --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/style.css @@ -0,0 +1,3 @@ +body { + background: red; +} diff --git a/test/configCases/plugins/manifest-plugin/test.config.js b/test/configCases/plugins/manifest-plugin/test.config.js new file mode 100644 index 00000000000..e2c63b367d3 --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/test.config.js @@ -0,0 +1,17 @@ +"use strict"; + +module.exports = { + findBundle(i) { + if (i === 0) { + return ["bundle0.js"]; + } + + return [ + "runtime~nested-shared.js", + "nested-shared.js", + "shared.js", + "commons-dependency_js.js", + "foo.js" + ]; + } +}; diff --git a/test/configCases/plugins/manifest-plugin/webpack.config.js b/test/configCases/plugins/manifest-plugin/webpack.config.js new file mode 100644 index 00000000000..b8cb150e66c --- /dev/null +++ b/test/configCases/plugins/manifest-plugin/webpack.config.js @@ -0,0 +1,137 @@ +"use strict"; + +const { RawSource } = require("webpack-sources"); +const webpack = require("../../../../"); + +/** @typedef {import("../../../../lib/Compiler")} Compiler */ + +class CopyPlugin { + /** + * Apply the plugin + * @param {Compiler} compiler the compiler instance + * @returns {void} + */ + apply(compiler) { + const hookOptions = { + name: "MockCopyPlugin", + stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS + }; + + compiler.hooks.thisCompilation.tap(hookOptions, (compilation) => { + compilation.hooks.processAssets.tap(hookOptions, () => { + const output = "// some compilation result\n"; + compilation.emitAsset("third.party.js", new RawSource(output)); + }); + }); + } +} + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + entry: "./index-1.js", + output: { + publicPath: () => "/app/", + chunkFilename: "[name].[contenthash].js", + assetModuleFilename: "[name].[contenthash][ext][query]" + }, + optimization: { + chunkIds: "named" + }, + plugins: [ + new CopyPlugin(), + new webpack.ManifestPlugin({ + filename: "foo.json" + }) + ], + module: { + rules: [ + { + test: /\.txt$/, + type: "asset/resource" + }, + { + test: /\.png$/, + loader: "file-loader", + options: { + name: "file-loader.[ext]" + } + } + ] + } + }, + { + target: "web", + entry: { + "nested-shared": { + import: "./nested-shared.js" + }, + shared: { + dependOn: "nested-shared", + import: "./shared.js?foo=bar" + }, + foo: { + dependOn: "shared", + import: "./index-2.js" + } + }, + output: { + publicPath: "auto", + filename: "[name].js", + chunkFilename: "[name].[contenthash].js", + cssChunkFilename: "[name].[contenthash].css", + assetModuleFilename: "[name].[contenthash][ext][query]" + }, + devtool: "source-map", + module: { + rules: [ + { + test: /\.txt$/, + type: "asset/resource" + }, + { + test: /\.png$/, + loader: "file-loader", + options: { + name: "file-loader.[ext]" + } + } + ] + }, + plugins: [ + new CopyPlugin(), + new webpack.ManifestPlugin({ + filename: "other.json", + filter(item) { + if (/file-loader.png/.test(item.file)) { + return false; + } + + return true; + }, + generate: (manifest) => { + manifest.custom = "value"; + return manifest; + }, + prefix: "/nested[publicpath]", + serialize: (manifest) => JSON.stringify(manifest) + }) + ], + experiments: { + css: true + }, + optimization: { + chunkIds: "named", + splitChunks: { + cacheGroups: { + commons: { + enforce: true, + test: /dependency\.js$/, + chunks: "initial" + } + } + }, + runtimeChunk: { name: (entrypoint) => `runtime~${entrypoint.name}` } + } + } +]; diff --git a/test/configCases/plugins/min-chunk-size/webpack.config.js b/test/configCases/plugins/min-chunk-size/webpack.config.js index 9ab2871e46a..3c472ac98ac 100644 --- a/test/configCases/plugins/min-chunk-size/webpack.config.js +++ b/test/configCases/plugins/min-chunk-size/webpack.config.js @@ -1,5 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new webpack.optimize.MinChunkSizePlugin({ diff --git a/test/configCases/plugins/mini-css-extract-plugin/a.css b/test/configCases/plugins/mini-css-extract-plugin/a.css new file mode 100644 index 00000000000..8cbf1faa6cd --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/a.css @@ -0,0 +1,5 @@ +@import "./dependency.css"; + +.a { + color: red; +} diff --git a/test/configCases/plugins/mini-css-extract-plugin/a.js b/test/configCases/plugins/mini-css-extract-plugin/a.js new file mode 100644 index 00000000000..db6c130531a --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/a.js @@ -0,0 +1,63 @@ +import "./a.css"; + +const fs = __non_webpack_require__("fs"); +const path = __non_webpack_require__("path"); + +it("a should load a chunk with css", () => { + const linkStart = document.getElementsByTagName("link").length; + const scriptStart = document.getElementsByTagName("script").length; + const promise = import("./chunk"); + + const links = document.getElementsByTagName("link").slice(linkStart); + const scripts = document.getElementsByTagName("script").slice(scriptStart); + + expect(links.length).toBe(1); + expect(scripts.length).toBe(1); + links[0].onload({ type: "load" }); + __non_webpack_require__( + scripts[0].src.replace("https://test.cases/path", ".") + ); + + const css = fs + .readFileSync( + path.resolve( + __dirname, + links[0].href.replace("https://test.cases/path", ".") + ), + "utf-8" + ) + .trim(); + expect(css).toMatchInlineSnapshot(` + ".chunk { + color: red; + }" + `); + + return promise; +}); + +it("a should generate correct css", () => { + const css = fs.readFileSync(path.resolve(__dirname, "a.css"), "utf-8").trim(); + expect(css).toMatchInlineSnapshot(` + ".dependency { + color: red; + } + + .a { + color: red; + }" + `); +}); + +it("c should generate correct css", () => { + const css = fs.readFileSync(path.resolve(__dirname, "c.css"), "utf-8").trim(); + expect(css).toMatchInlineSnapshot(` + ".dependency { + color: red; + } + + .c { + color: red; + }" + `); +}); diff --git a/test/configCases/plugins/mini-css-extract-plugin/b.css b/test/configCases/plugins/mini-css-extract-plugin/b.css new file mode 100644 index 00000000000..869690c300d --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/b.css @@ -0,0 +1,3 @@ +.b { + color: red; +} diff --git a/test/configCases/plugins/mini-css-extract-plugin/b.js b/test/configCases/plugins/mini-css-extract-plugin/b.js new file mode 100644 index 00000000000..2ab6e639d10 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/b.js @@ -0,0 +1,68 @@ +import "./b.css"; + +const fs = __non_webpack_require__("fs"); +const path = __non_webpack_require__("path"); + +it("b should load a chunk with css", () => { + const linkStart = document.getElementsByTagName("link").length; + const scriptStart = document.getElementsByTagName("script").length; + const promise = import("./chunk"); + + const links = document.getElementsByTagName("link").slice(linkStart); + const scripts = document.getElementsByTagName("script").slice(scriptStart); + + expect(links.length).toBe(1); + expect(scripts.length).toBe(1); + links[0].onload({ type: "load" }); + __non_webpack_require__( + scripts[0].src.replace("https://test.cases/path", ".") + ); + + return promise; +}); + +it("b should load a css chunk", () => { + const linkStart = document.getElementsByTagName("link").length; + const scriptStart = document.getElementsByTagName("script").length; + const promise = import("./d.css"); + + const links = document.getElementsByTagName("link").slice(linkStart); + const scripts = document.getElementsByTagName("script").slice(scriptStart); + + expect(links.length).toBe(1); + expect(scripts.length).toBe(1); + links[0].onload({ type: "load" }); + __non_webpack_require__( + scripts[0].src.replace("https://test.cases/path", ".") + ); + + const css = fs + .readFileSync( + path.resolve( + __dirname, + links[0].href.replace("https://test.cases/path", ".") + ), + "utf-8" + ) + .trim(); + expect(css).toMatchInlineSnapshot(` + ".dependency { + color: red; + } + + .d { + color: red; + }" + `); + + return promise; +}); + +it("b should generate correct css", () => { + const css = fs.readFileSync(path.resolve(__dirname, "b.css"), "utf-8").trim(); + expect(css).toMatchInlineSnapshot(` + ".b { + color: red; + }" + `); +}); diff --git a/test/configCases/plugins/mini-css-extract-plugin/c.css b/test/configCases/plugins/mini-css-extract-plugin/c.css new file mode 100644 index 00000000000..3ade9e17e23 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/c.css @@ -0,0 +1,5 @@ +@import "./dependency.css"; + +.c { + color: red; +} diff --git a/test/configCases/plugins/mini-css-extract-plugin/chunk.css b/test/configCases/plugins/mini-css-extract-plugin/chunk.css new file mode 100644 index 00000000000..aad283b7bca --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/chunk.css @@ -0,0 +1,5 @@ +@import "./dependency.css"; + +.chunk { + color: red; +} diff --git a/test/configCases/plugins/mini-css-extract-plugin/chunk.js b/test/configCases/plugins/mini-css-extract-plugin/chunk.js new file mode 100644 index 00000000000..a39adf003eb --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/chunk.js @@ -0,0 +1,3 @@ +import "./chunk.css"; + +export default 42; diff --git a/test/configCases/plugins/mini-css-extract-plugin/d.css b/test/configCases/plugins/mini-css-extract-plugin/d.css new file mode 100644 index 00000000000..67923eda268 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/d.css @@ -0,0 +1,5 @@ +@import "./dependency.css"; + +.d { + color: red; +} diff --git a/test/configCases/plugins/mini-css-extract-plugin/dependency.css b/test/configCases/plugins/mini-css-extract-plugin/dependency.css new file mode 100644 index 00000000000..9e006e4b0c5 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/dependency.css @@ -0,0 +1,3 @@ +.dependency { + color: red; +} diff --git a/test/configCases/plugins/mini-css-extract-plugin/test.config.js b/test/configCases/plugins/mini-css-extract-plugin/test.config.js new file mode 100644 index 00000000000..c0e2d2dc705 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle(i) { + return [`${i}_a.js`, `${i}_b.js`, `${i}_c.js`]; + } +}; diff --git a/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js b/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js new file mode 100644 index 00000000000..b4b704c222b --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js @@ -0,0 +1,69 @@ +"use strict"; + +const MCEP = require("mini-css-extract-plugin"); + +/** @typedef {import("../../../../").StatsCompilation} StatsCompilation */ + +/** @type {(i: number, options?: import("mini-css-extract-plugin").PluginOptions) => import("../../../../").Configuration} */ +const config = (i, options) => ({ + entry: { + a: "./a", + b: "./b", + c: "./c.css", + x: "./x" // also imports chunk but with different exports + }, + output: { + filename: `${i}_[name].js`, + pathinfo: false + }, + module: { + rules: [ + { + oneOf: [ + { + test: /\.css$/, + use: [MCEP.loader, "css-loader"] + }, + { test: /\.js$/ }, + { type: "asset" } + ] + } + ] + }, + optimization: { + chunkIds: "named" + }, + target: "web", + node: { + __dirname: false + }, + plugins: [ + new MCEP(options), + (compiler) => { + compiler.hooks.done.tap("Test", (stats) => { + const chunkIds = + /** @type {NonNullable} */ + (stats.toJson({ all: false, chunks: true, ids: true }).chunks) + .map((c) => c.id) + .sort(); + expect(chunkIds).toEqual([ + "a", + "b", + "c", + "chunk_js-_43b60", + "chunk_js-_43b61", + "chunk_js-_43b62", + "d_css", + "x" + ]); + }); + } + ] +}); + +module.exports = [ + config(0), + config(1, { + experimentalUseImportModule: true + }) +]; diff --git a/test/configCases/plugins/mini-css-extract-plugin/x.js b/test/configCases/plugins/mini-css-extract-plugin/x.js new file mode 100644 index 00000000000..0c441475d80 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/x.js @@ -0,0 +1 @@ +import(/* webpackExports: [] */ "./chunk"); diff --git a/test/configCases/plugins/normal-module-replacement-plugin/a.js b/test/configCases/plugins/normal-module-replacement-plugin/a.js new file mode 100644 index 00000000000..cd7aca4bf6f --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/a.js @@ -0,0 +1 @@ +module.exports = "original-a"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/after-function.js b/test/configCases/plugins/normal-module-replacement-plugin/after-function.js new file mode 100644 index 00000000000..b7fdb575faa --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/after-function.js @@ -0,0 +1 @@ +module.exports = "FAIL: after-function.js should have been replaced"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/after-relative.js b/test/configCases/plugins/normal-module-replacement-plugin/after-relative.js new file mode 100644 index 00000000000..f82fa5c8224 --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/after-relative.js @@ -0,0 +1 @@ +module.exports = "FAIL: after-relative.js should have been replaced"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/after.js b/test/configCases/plugins/normal-module-replacement-plugin/after.js new file mode 100644 index 00000000000..4c6bde4b9db --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/after.js @@ -0,0 +1 @@ +module.exports = "replaced-after-resolve"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/b.js b/test/configCases/plugins/normal-module-replacement-plugin/b.js new file mode 100644 index 00000000000..7d612567152 --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/b.js @@ -0,0 +1 @@ +module.exports = "replaced-by-string"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/before-function.js b/test/configCases/plugins/normal-module-replacement-plugin/before-function.js new file mode 100644 index 00000000000..83e5f8734bf --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/before-function.js @@ -0,0 +1 @@ +module.exports = "FAIL: before-function.js should have been replaced"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/before-string.js b/test/configCases/plugins/normal-module-replacement-plugin/before-string.js new file mode 100644 index 00000000000..c155f764c20 --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/before-string.js @@ -0,0 +1 @@ +module.exports = "FAIL: before-string.js should have been replaced"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/c.js b/test/configCases/plugins/normal-module-replacement-plugin/c.js new file mode 100644 index 00000000000..4e1bff8315d --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/c.js @@ -0,0 +1 @@ +module.exports = "replaced-by-function"; diff --git a/test/configCases/plugins/normal-module-replacement-plugin/index.js b/test/configCases/plugins/normal-module-replacement-plugin/index.js new file mode 100644 index 00000000000..8e6c54e24fd --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/index.js @@ -0,0 +1,21 @@ +"use strict"; + +it("should use NormalModuleReplacementPlugin for string replacement", function () { + const result = require("./before-string.js"); + expect(result).toBe("replaced-by-string"); +}); + +it("should use NormalModuleReplacementPlugin for function replacement", function () { + const result = require("./before-function.js"); + expect(result).toBe("replaced-by-function"); +}); + +it("should use NormalModuleReplacementPlugin for function replacement (afterResolve)", function () { + const result = require("./after-function.js"); + expect(result).toBe("replaced-after-resolve"); +}); + +it("should use NormalModuleReplacementPlugin for relative path replacement (afterResolve)", function () { + const result = require("./after-relative.js"); + expect(result).toBe("replaced-after-resolve"); +}); diff --git a/test/configCases/plugins/normal-module-replacement-plugin/webpack.config.js b/test/configCases/plugins/normal-module-replacement-plugin/webpack.config.js new file mode 100644 index 00000000000..a54cdde4529 --- /dev/null +++ b/test/configCases/plugins/normal-module-replacement-plugin/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +const path = require("path"); +const NormalModuleReplacementPlugin = + require("../../../../").NormalModuleReplacementPlugin; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + plugins: [ + new NormalModuleReplacementPlugin(/before-string\.js/, "./b.js"), + new NormalModuleReplacementPlugin(/before-function\.js/, (result) => { + result.request = "./c.js"; + }), + new NormalModuleReplacementPlugin(/[/\\]after-function\.js$/, (result) => { + if (result.createData && result.createData.resource) { + const dir = path.dirname(result.createData.resource); + result.createData.resource = path.join(dir, "after.js"); + } + }), + new NormalModuleReplacementPlugin(/[/\\]after-relative\.js$/, "./after.js") + ] +}; diff --git a/test/configCases/plugins/profiling-plugin/deprecations.js b/test/configCases/plugins/profiling-plugin/deprecations.js new file mode 100644 index 00000000000..368f9474dce --- /dev/null +++ b/test/configCases/plugins/profiling-plugin/deprecations.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_COMPILATION_NORMAL_MODULE_LOADER_HOOK/ } +]; diff --git a/test/configCases/plugins/profiling-plugin/index.js b/test/configCases/plugins/profiling-plugin/index.js index c7b9eae8332..1ffa3aa96c5 100644 --- a/test/configCases/plugins/profiling-plugin/index.js +++ b/test/configCases/plugins/profiling-plugin/index.js @@ -1,19 +1,20 @@ import "./test.json"; it("should generate a events.json file", () => { - var fs = require("fs"), - path = require("path"), - os = require("os"); + var fs = require("fs"); + var path = require("path"); - expect(fs.existsSync(path.join(__dirname, "events.json"))).toBe(true); + expect(fs.existsSync(path.join(__dirname, "in/directory/events.json"))).toBe( + true + ); }); it("should have proper setup record inside of the json stream", () => { - var fs = require("fs"), - path = require("path"), - os = require("os"); + var fs = require("fs"); + var path = require("path"); - // convert json stream to valid - var source = JSON.parse(fs.readFileSync(path.join(__dirname, "events.json"), "utf-8").toString() + "{}]"); + var source = JSON.parse( + fs.readFileSync(path.join(__dirname, "in/directory/events.json"), "utf-8") + ); expect(source[0].id).toEqual(1); }); diff --git a/test/configCases/plugins/profiling-plugin/test.config.js b/test/configCases/plugins/profiling-plugin/test.config.js new file mode 100644 index 00000000000..55bea19ac62 --- /dev/null +++ b/test/configCases/plugins/profiling-plugin/test.config.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + timeout: 60000 +}; diff --git a/test/configCases/plugins/profiling-plugin/test.filter.js b/test/configCases/plugins/profiling-plugin/test.filter.js index b36fb8fa768..f1925767d11 100644 --- a/test/configCases/plugins/profiling-plugin/test.filter.js +++ b/test/configCases/plugins/profiling-plugin/test.filter.js @@ -1,3 +1,3 @@ -module.exports = function(config) { - return !process.env.CI; -}; +"use strict"; + +module.exports = () => !process.env.CI; diff --git a/test/configCases/plugins/profiling-plugin/webpack.config.js b/test/configCases/plugins/profiling-plugin/webpack.config.js index 1d0eb54fb95..cf446e39d64 100644 --- a/test/configCases/plugins/profiling-plugin/webpack.config.js +++ b/test/configCases/plugins/profiling-plugin/webpack.config.js @@ -1,11 +1,15 @@ -var rootPath = "../../../../"; -var webpack = require(rootPath); -var path = require("path"); +"use strict"; +const rootPath = "../../../../"; + +const webpack = require(rootPath); +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration} */ module.exports = (env, { testPath }) => ({ plugins: [ new webpack.debug.ProfilingPlugin({ - outputPath: path.join(testPath, "events.json") + outputPath: path.join(testPath, "in/directory/events.json") }) ], node: { diff --git a/test/configCases/plugins/progress-plugin/data.js b/test/configCases/plugins/progress-plugin/data.js index e0a30c5dfa3..747c818b0b1 100644 --- a/test/configCases/plugins/progress-plugin/data.js +++ b/test/configCases/plugins/progress-plugin/data.js @@ -1 +1 @@ -module.exports = []; +module.exports = /** @type {string[]} */ ([]); diff --git a/test/configCases/plugins/progress-plugin/index.js b/test/configCases/plugins/progress-plugin/index.js index d91f53a9c13..0469c5f43d0 100644 --- a/test/configCases/plugins/progress-plugin/index.js +++ b/test/configCases/plugins/progress-plugin/index.js @@ -1,6 +1,8 @@ -it("should contain the custom progress messages", function() { - var data = require(__dirname + "/data"); - expect(data).toContain("optimizing"); - expect(data).toContain("optimizing|CustomPlugin"); - expect(data).toContain("optimizing|CustomPlugin|custom category|custom message"); +it("should contain the custom progress messages", function () { + var data = require("data"); + expect(data).toContain("sealing|optimizing"); + expect(data).toContain("sealing|optimizing|CustomPlugin"); + expect(data).toContain( + "sealing|optimizing|CustomPlugin|custom category|custom message" + ); }); diff --git a/test/configCases/plugins/progress-plugin/test.config.js b/test/configCases/plugins/progress-plugin/test.config.js new file mode 100644 index 00000000000..f6ef5272c58 --- /dev/null +++ b/test/configCases/plugins/progress-plugin/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +const path = require("path"); + +module.exports = { + // sharing global require cache between webpack.config.js and testing file + modules: { + [path.resolve(__dirname, "data.js")]: require("./data") + } +}; diff --git a/test/configCases/plugins/progress-plugin/webpack.config.js b/test/configCases/plugins/progress-plugin/webpack.config.js index baeba197127..0f0633cf559 100644 --- a/test/configCases/plugins/progress-plugin/webpack.config.js +++ b/test/configCases/plugins/progress-plugin/webpack.config.js @@ -1,25 +1,29 @@ -var webpack = require("../../../../"); -var data = require("./data"); +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); +const data = require("./data"); + +/** @typedef {import("../../../../").ProgressPlugin} ProgressPlugin */ + +/** @type {import("../../../../").Configuration} */ module.exports = { externals: { - [__dirname + "/data"]: "commonjs " + __dirname + "/data" + data: `commonjs ${path.resolve(__dirname, "data.js")}` }, plugins: [ new webpack.ProgressPlugin((value, ...messages) => { data.push(messages.join("|")); }), { - apply: compiler => { - compiler.hooks.compilation.tap("CustomPlugin", compilation => { - compilation.hooks.optimize.tap( - { - name: "CustomPlugin", - context: true - }, - context => { - context.reportProgress(0, "custom category", "custom message"); - } - ); + apply: (compiler) => { + compiler.hooks.compilation.tap("CustomPlugin", (compilation) => { + compilation.hooks.optimize.tap("CustomPlugin", () => { + const reportProgress = + /** @type {NonNullable>} */ + (webpack.ProgressPlugin.getReporter(compiler)); + reportProgress(0, "custom category", "custom message"); + }); }); } } diff --git a/test/configCases/plugins/provide-plugin/a.js b/test/configCases/plugins/provide-plugin/a.js new file mode 100644 index 00000000000..f8297ed707d --- /dev/null +++ b/test/configCases/plugins/provide-plugin/a.js @@ -0,0 +1,2 @@ +export * as c from "./b"; +export * as c2 from "./harmony2"; diff --git a/test/configCases/plugins/provide-plugin/b.js b/test/configCases/plugins/provide-plugin/b.js new file mode 100644 index 00000000000..64bcdcfb6b8 --- /dev/null +++ b/test/configCases/plugins/provide-plugin/b.js @@ -0,0 +1,7 @@ +export function square(x) { + return x * x; +} + +export function cube(x) { + return x * x * x; +} diff --git a/test/configCases/plugins/provide-plugin/esm.js b/test/configCases/plugins/provide-plugin/esm.js new file mode 100644 index 00000000000..bb68ba954de --- /dev/null +++ b/test/configCases/plugins/provide-plugin/esm.js @@ -0,0 +1 @@ +module.exports = "esm"; diff --git a/test/configCases/plugins/provide-plugin/foo.mjs b/test/configCases/plugins/provide-plugin/foo.mjs new file mode 100644 index 00000000000..9502478d5bb --- /dev/null +++ b/test/configCases/plugins/provide-plugin/foo.mjs @@ -0,0 +1,3 @@ +export default function foo() { + return esm; +} diff --git a/test/configCases/plugins/provide-plugin/harmony2.js b/test/configCases/plugins/provide-plugin/harmony2.js new file mode 100644 index 00000000000..cabd2fbbb5f --- /dev/null +++ b/test/configCases/plugins/provide-plugin/harmony2.js @@ -0,0 +1,2 @@ +export const a = 1; +export const aUsed = __webpack_exports_info__.a.used; diff --git a/test/configCases/plugins/provide-plugin/index.js b/test/configCases/plugins/provide-plugin/index.js index 00d4fe5c700..989d9ff0692 100644 --- a/test/configCases/plugins/provide-plugin/index.js +++ b/test/configCases/plugins/provide-plugin/index.js @@ -48,6 +48,11 @@ it("should provide a module for a property request", function() { expect(x).toBe("fff"); }); +it("should tree-shake unused exports", function() { + expect(aa1(2)).toBe(8); + expect(es2015_aUsed).toBe(false); +}); + it("should provide ES2015 modules", function() { expect((es2015.default)).toBe("ECMAScript 2015"); expect((es2015.alias)).toBe("ECMAScript Harmony"); @@ -56,3 +61,8 @@ it("should provide ES2015 modules", function() { expect((es2015_alias)).toBe("ECMAScript Harmony"); expect((es2015_year)).toBe(2015); }); + +it("should not provide for mjs", function(){ + var foo = require("./foo.mjs").default; + expect(foo()).toBe("esm"); +}); diff --git a/test/configCases/plugins/provide-plugin/webpack.config.js b/test/configCases/plugins/provide-plugin/webpack.config.js index 05b97a8af87..2b3e669e334 100644 --- a/test/configCases/plugins/provide-plugin/webpack.config.js +++ b/test/configCases/plugins/provide-plugin/webpack.config.js @@ -1,16 +1,23 @@ -var ProvidePlugin = require("../../../../lib/ProvidePlugin"); +"use strict"; + +const ProvidePlugin = require("../../../../").ProvidePlugin; + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new ProvidePlugin({ aaa: "./aaa", "bbb.ccc": "./bbbccc", dddeeefff: ["./ddd", "eee", "3-f"], + aa1: ["./a", "c", "cube"], + es2015_aUsed: ["./harmony2", "aUsed"], "process.env.NODE_ENV": "./env", es2015: "./harmony", es2015_name: ["./harmony", "default"], es2015_alias: ["./harmony", "alias"], es2015_year: ["./harmony", "year"], - "this.aaa": "./aaa" + "this.aaa": "./aaa", + esm: "./esm.js" }) ] }; diff --git a/test/configCases/plugins/source-map-dev-tool-plugin-append-function/index.js b/test/configCases/plugins/source-map-dev-tool-plugin-append-function/index.js new file mode 100644 index 00000000000..464fe983765 --- /dev/null +++ b/test/configCases/plugins/source-map-dev-tool-plugin-append-function/index.js @@ -0,0 +1,6 @@ +it("should have [file] replaced with chunk filename in append", function() { + const fs = require("fs"), + path = require("path"); + const source = fs.readFileSync(path.join(__dirname, "some-test.js"), "utf-8"); + expect(source).toMatch("//# sourceMappingURL=http://localhost:50505/some-test.js.map"); +}); diff --git a/test/configCases/plugins/source-map-dev-tool-plugin-append-function/test.js b/test/configCases/plugins/source-map-dev-tool-plugin-append-function/test.js new file mode 100644 index 00000000000..a6b9cb13401 --- /dev/null +++ b/test/configCases/plugins/source-map-dev-tool-plugin-append-function/test.js @@ -0,0 +1,5 @@ +const testObject = { + a: 1 +}; + +module.exports = testObject; diff --git a/test/configCases/plugins/source-map-dev-tool-plugin-append-function/webpack.config.js b/test/configCases/plugins/source-map-dev-tool-plugin-append-function/webpack.config.js new file mode 100644 index 00000000000..2fc1f3a57f2 --- /dev/null +++ b/test/configCases/plugins/source-map-dev-tool-plugin-append-function/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +const TerserPlugin = require("terser-webpack-plugin"); +const webpack = require("../../../../"); + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + entry: { + bundle0: ["./index.js"], + "some-test": ["./test.js"] + }, + output: { + filename: "[name].js" + }, + optimization: { + minimizer: [new TerserPlugin()] + }, + plugins: [ + new webpack.SourceMapDevToolPlugin({ + filename: "sourcemaps/[file].map", + append: () => "\n//# sourceMappingURL=http://localhost:50505/[file].map" + }) + ] +}; diff --git a/test/configCases/plugins/source-map-dev-tool-plugin/index.js b/test/configCases/plugins/source-map-dev-tool-plugin/index.js index 53b37f635a1..30bc39f5040 100644 --- a/test/configCases/plugins/source-map-dev-tool-plugin/index.js +++ b/test/configCases/plugins/source-map-dev-tool-plugin/index.js @@ -5,7 +5,7 @@ it("should contain publicPath prefix in [url] and resolve relatively to fileCont expect(source).toMatch("//# sourceMappingURL=https://10.10.10.10/project/sourcemaps/test.js.map"); }); -it("should write sourcemap file relative fo fileContext", function() { +it("should write sourcemap file relative to fileContext", function() { var fs = require("fs"), path = require("path"); expect(fs.existsSync(path.join(__dirname, "sourcemaps/test.js.map"))).toBe(true); diff --git a/test/configCases/plugins/source-map-dev-tool-plugin/webpack.config.js b/test/configCases/plugins/source-map-dev-tool-plugin/webpack.config.js index 1943817ed59..82961a1eac8 100644 --- a/test/configCases/plugins/source-map-dev-tool-plugin/webpack.config.js +++ b/test/configCases/plugins/source-map-dev-tool-plugin/webpack.config.js @@ -1,5 +1,9 @@ -var webpack = require("../../../../"); -var UglifyJsPlugin = require("uglifyjs-webpack-plugin"); +"use strict"; + +const TerserPlugin = require("terser-webpack-plugin"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { node: { __dirname: false, @@ -13,11 +17,7 @@ module.exports = { filename: "[name].js" }, optimization: { - minimizer: [ - new UglifyJsPlugin({ - sourceMap: true - }) - ] + minimizer: [new TerserPlugin()] }, plugins: [ new webpack.SourceMapDevToolPlugin({ diff --git a/test/configCases/plugins/source-map-dev-tool-plugin~append/index.js b/test/configCases/plugins/source-map-dev-tool-plugin~append/index.js new file mode 100644 index 00000000000..845a13bc4d0 --- /dev/null +++ b/test/configCases/plugins/source-map-dev-tool-plugin~append/index.js @@ -0,0 +1,6 @@ +it("should have [file] replaced with chunk filename in append", function() { + var fs = require("fs"), + path = require("path"); + var source = fs.readFileSync(path.join(__dirname, "some-test.js"), "utf-8"); + expect(source).toMatch("//# sourceMappingURL=http://localhost:50505/some-test.js.map"); +}); diff --git a/test/configCases/plugins/source-map-dev-tool-plugin~append/test.js b/test/configCases/plugins/source-map-dev-tool-plugin~append/test.js new file mode 100644 index 00000000000..1739577368e --- /dev/null +++ b/test/configCases/plugins/source-map-dev-tool-plugin~append/test.js @@ -0,0 +1,5 @@ +var testObject = { + a: 1 +}; + +module.exports = testObject; diff --git a/test/configCases/plugins/source-map-dev-tool-plugin~append/webpack.config.js b/test/configCases/plugins/source-map-dev-tool-plugin~append/webpack.config.js new file mode 100644 index 00000000000..d82b41fcb0b --- /dev/null +++ b/test/configCases/plugins/source-map-dev-tool-plugin~append/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +const TerserPlugin = require("terser-webpack-plugin"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + entry: { + bundle0: ["./index.js"], + "some-test": ["./test.js"] + }, + output: { + filename: "[name].js" + }, + optimization: { + minimizer: [new TerserPlugin()] + }, + plugins: [ + new webpack.SourceMapDevToolPlugin({ + filename: "sourcemaps/[file].map", + append: "\n//# sourceMappingURL=http://localhost:50505/[file].map" + }) + ] +}; diff --git a/test/configCases/plugins/uglifyjs-plugin/compress.js b/test/configCases/plugins/terser-plugin/compress.js similarity index 100% rename from test/configCases/plugins/uglifyjs-plugin/compress.js rename to test/configCases/plugins/terser-plugin/compress.js diff --git a/test/configCases/plugins/uglifyjs-plugin/extract.js b/test/configCases/plugins/terser-plugin/extract.js similarity index 100% rename from test/configCases/plugins/uglifyjs-plugin/extract.js rename to test/configCases/plugins/terser-plugin/extract.js diff --git a/test/configCases/plugins/uglifyjs-plugin/ie8.js b/test/configCases/plugins/terser-plugin/ie8.js similarity index 100% rename from test/configCases/plugins/uglifyjs-plugin/ie8.js rename to test/configCases/plugins/terser-plugin/ie8.js diff --git a/test/configCases/plugins/terser-plugin/index.js b/test/configCases/plugins/terser-plugin/index.js new file mode 100644 index 00000000000..4f841ca4637 --- /dev/null +++ b/test/configCases/plugins/terser-plugin/index.js @@ -0,0 +1,74 @@ +it("should contain no comments in out chunk", () => { + const fs = require("fs"); + + const source = fs.readFileSync(__filename, "utf-8"); + + expect(source).not.toMatch(/[^\"]comment should be stripped test\.1[^\"]/); + expect(source).not.toMatch(/[^\"]comment should be stripped test\.2[^\"]/); + expect(source).not.toMatch(/[^\"]comment should be stripped test\.3[^\"]/); +}); + +it("should contain comments in vendors chunk", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync(path.join(__dirname, "vendors.js"), "utf-8"); + + expect(source).toMatch("comment should not be stripped vendors.1"); + expect(source).toMatch("// comment should not be stripped vendors.2"); + expect(source).toMatch(" * comment should not be stripped vendors.3"); +}); + +it("should extract comments to separate file", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync( + path.join(__dirname, "extract.js.LICENSE.txt"), + "utf-8" + ); + + expect(source).toMatch("comment should be extracted extract-test.1"); + expect(source).not.toMatch("comment should be stripped extract-test.2"); + expect(source).toMatch("comment should be extracted extract-test.3"); + expect(source).not.toMatch("comment should be stripped extract-test.4"); +}); + +it("should remove extracted comments and insert a banner", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync(path.join(__dirname, "extract.js"), "utf-8"); + + expect(source).not.toMatch("comment should be extracted extract-test.1"); + expect(source).not.toMatch("comment should be stripped extract-test.2"); + expect(source).not.toMatch("comment should be extracted extract-test.3"); + expect(source).not.toMatch("comment should be stripped extract-test.4"); + expect(source).toMatch( + "/*! For license information please see extract.js.LICENSE.txt */" + ); +}); + +it("should pass mangle options", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync(path.join(__dirname, "ie8.js"), "utf-8"); + + expect(source).toMatch( + /\.exports=function\((\w)\)\{return function\((\w)\)\{try\{\1\(\)\}catch\(\1\)\{\2\(\1\)\}\}\}/ + ); +}); + +it("should pass compress options", function() { + const fs = require("fs"); + const path = require("path"); + + const source = fs.readFileSync(path.join(__dirname, "compress.js"), "utf-8"); + + expect(source).toMatch( + ".exports=function(){console.log(4),console.log(6),console.log(4),console.log(7)}" + ); +}); + +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/plugins/uglifyjs-plugin/test.js b/test/configCases/plugins/terser-plugin/test.js similarity index 100% rename from test/configCases/plugins/uglifyjs-plugin/test.js rename to test/configCases/plugins/terser-plugin/test.js diff --git a/test/configCases/plugins/uglifyjs-plugin/vendors.js b/test/configCases/plugins/terser-plugin/vendors.js similarity index 100% rename from test/configCases/plugins/uglifyjs-plugin/vendors.js rename to test/configCases/plugins/terser-plugin/vendors.js diff --git a/test/configCases/plugins/terser-plugin/webpack.config.js b/test/configCases/plugins/terser-plugin/webpack.config.js new file mode 100644 index 00000000000..89cf4ec7927 --- /dev/null +++ b/test/configCases/plugins/terser-plugin/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const TerserPlugin = require("terser-webpack-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + node: { + __dirname: false, + __filename: false + }, + entry: { + ie8: ["./ie8.js"], + bundle0: ["./index.js"], + vendors: ["./vendors.js"], + extract: ["./extract.js"], + compress: ["./compress.js"] + }, + output: { + filename: "[name].js" + }, + optimization: { + minimize: true, + minimizer: [ + new TerserPlugin({ + parallel: false, + extractComments: false, + exclude: ["vendors.js", "compress.js", "extract.js"] + }), + new TerserPlugin({ + parallel: false, + include: ["extract.js"] + }), + new TerserPlugin({ + parallel: false, + terserOptions: { + compress: { + passes: 2 + } + }, + extractComments: false, + include: ["compress.js"] + }) + ] + } +}; diff --git a/test/configCases/plugins/uglifyjs-plugin/index.js b/test/configCases/plugins/uglifyjs-plugin/index.js deleted file mode 100644 index 55279a25663..00000000000 --- a/test/configCases/plugins/uglifyjs-plugin/index.js +++ /dev/null @@ -1,65 +0,0 @@ -it("should contain no comments in out chunk", () => { - const fs = require("fs"); - - const source = fs.readFileSync(__filename, "utf-8"); - - expect(source).not.toMatch(/[^\"]comment should be stripped test\.1[^\"]/); - expect(source).not.toMatch(/[^\"]comment should be stripped test\.2[^\"]/); - expect(source).not.toMatch(/[^\"]comment should be stripped test\.3[^\"]/); -}); - -it("should contain comments in vendors chunk", function() { - const fs = require("fs"); - const path = require("path"); - - const source = fs.readFileSync(path.join(__dirname, "vendors.js"), "utf-8"); - - expect(source).toMatch("comment should not be stripped vendors.1"); - expect(source).toMatch("// comment should not be stripped vendors.2"); - expect(source).toMatch(" * comment should not be stripped vendors.3"); -}); - -it("should extract comments to separate file", function() { - const fs = require("fs"); - const path = require("path"); - - const source = fs.readFileSync(path.join(__dirname, "extract.js.LICENSE"), "utf-8"); - - expect(source).toMatch("comment should be extracted extract-test.1"); - expect(source).not.toMatch("comment should be stripped extract-test.2"); - expect(source).toMatch("comment should be extracted extract-test.3"); - expect(source).not.toMatch("comment should be stripped extract-test.4"); -}); - -it("should remove extracted comments and insert a banner", function() { - const fs = require("fs"); - const path = require("path"); - - const source = fs.readFileSync(path.join(__dirname, "extract.js"), "utf-8"); - - expect(source).not.toMatch("comment should be extracted extract-test.1"); - expect(source).not.toMatch("comment should be stripped extract-test.2"); - expect(source).not.toMatch("comment should be extracted extract-test.3"); - expect(source).not.toMatch("comment should be stripped extract-test.4"); - expect(source).toMatch("/*! For license information please see extract.js.LICENSE */"); -}); - -it("should pass mangle options", function() { - const fs = require("fs"); - const path = require("path"); - - const source = fs.readFileSync(path.join(__dirname, "ie8.js"), "utf-8"); - - expect(source).toMatch(".exports=function(e){return function(t){try{e()}catch(e){t(e)}}}"); -}); - -it("should pass compress options", function() { - const fs = require("fs"); - const path = require("path"); - - const source = fs.readFileSync(path.join(__dirname, "compress.js"), "utf-8"); - - expect(source).toMatch(".exports=function(){console.log(4),console.log(6),console.log(4),console.log(7)}"); -}); - -require.include("./test.js"); diff --git a/test/configCases/plugins/uglifyjs-plugin/webpack.config.js b/test/configCases/plugins/uglifyjs-plugin/webpack.config.js deleted file mode 100644 index bc737f8e767..00000000000 --- a/test/configCases/plugins/uglifyjs-plugin/webpack.config.js +++ /dev/null @@ -1,43 +0,0 @@ -const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); -module.exports = { - node: { - __dirname: false, - __filename: false - }, - entry: { - ie8: ["./ie8.js"], - bundle0: ["./index.js"], - vendors: ["./vendors.js"], - extract: ["./extract.js"], - compress: ["./compress.js"] - }, - output: { - filename: "[name].js" - }, - optimization: { - minimize: true, - minimizer: [ - new UglifyJsPlugin({ - cache: false, - parallel: false, - exclude: ["vendors.js", "extract.js"] - }), - new UglifyJsPlugin({ - cache: false, - parallel: false, - extractComments: true, - include: ["extract.js"] - }), - new UglifyJsPlugin({ - cache: false, - parallel: false, - uglifyOptions: { - compress: { - passes: 2 - } - }, - include: ["compress.js"] - }) - ] - } -}; diff --git a/test/configCases/plugins/virtual-url-plugin-absolute-context/helper.js b/test/configCases/plugins/virtual-url-plugin-absolute-context/helper.js new file mode 100644 index 00000000000..dbdf2e918e2 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin-absolute-context/helper.js @@ -0,0 +1 @@ +export const value = "helper-value"; diff --git a/test/configCases/plugins/virtual-url-plugin-absolute-context/webpack.config.js b/test/configCases/plugins/virtual-url-plugin-absolute-context/webpack.config.js new file mode 100644 index 00000000000..b9b3d675908 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin-absolute-context/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +const path = require("path"); +const webpack = require("../../../../"); + +const { VirtualUrlPlugin } = webpack.experiments.schemes; + +// The virtual module ID is an absolute path. +// When context is "auto", the plugin should derive the context from that +// absolute path directly, not concatenate it with compiler.context. +const virtualModulePath = path.join(__dirname, "virtual-entry.js"); + +/** @type {import("webpack").Configuration} */ +const config = { + entry: `virtual:${virtualModulePath}`, + plugins: [ + new VirtualUrlPlugin({ + [virtualModulePath]: { + context: "auto", + source() { + return "import { value } from './helper.js'; it('should resolve relative imports from absolute-path virtual modules', (done) => { expect(value).toBe('helper-value'); done(); });"; + } + } + }) + ], + validate: true +}; + +module.exports = config; diff --git a/test/configCases/plugins/virtual-url-plugin-mf/index.js b/test/configCases/plugins/virtual-url-plugin-mf/index.js new file mode 100644 index 00000000000..ff902418d6c --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin-mf/index.js @@ -0,0 +1,5 @@ +import routes from "virtual:routes"; + +it("should correctly load virtual modules with the js type.", () => { + expect(routes[0]).toBe("react"); +}); diff --git a/test/configCases/plugins/virtual-url-plugin-mf/node_modules/package.json b/test/configCases/plugins/virtual-url-plugin-mf/node_modules/package.json new file mode 100644 index 00000000000..87032da008a --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin-mf/node_modules/package.json @@ -0,0 +1,3 @@ +{ + "version": "2.1.0" +} diff --git a/test/configCases/plugins/virtual-url-plugin-mf/node_modules/react.js b/test/configCases/plugins/virtual-url-plugin-mf/node_modules/react.js new file mode 100644 index 00000000000..6227d6dd55a --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin-mf/node_modules/react.js @@ -0,0 +1 @@ +export default "react"; diff --git a/test/configCases/plugins/virtual-url-plugin-mf/webpack.config.js b/test/configCases/plugins/virtual-url-plugin-mf/webpack.config.js new file mode 100644 index 00000000000..8ae510fce1d --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin-mf/webpack.config.js @@ -0,0 +1,32 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("webpack").Configuration} */ +const config = { + plugins: [ + new webpack.container.ModuleFederationPlugin({ + name: "host", + shared: { + react: { + import: "react", + eager: true, + singleton: false + } + } + }), + new webpack.experiments.schemes.VirtualUrlPlugin({ + type: ".js", + routes: { + source() { + return ` + import React from 'react'; + export default [React]; + `; + } + } + }) + ] +}; + +module.exports = config; diff --git a/test/configCases/plugins/virtual-url-plugin/babel-loader.js b/test/configCases/plugins/virtual-url-plugin/babel-loader.js new file mode 100644 index 00000000000..c1b53a7013c --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/babel-loader.js @@ -0,0 +1,19 @@ +/** @typedef {import("webpack").LoaderContext} LoaderContext */ + +/** + * @this {LoaderContext} + * @param {string} source The source code to process + * @returns {void} + */ +module.exports = function(source) { + const callback = this.async(); + + try { + const withoutConst = source.replace(/const/g, "var"); + + callback(null, withoutConst); + } catch (err) { + callback(/** @type {Error} */ (err)); + } +}; + \ No newline at end of file diff --git a/test/configCases/plugins/virtual-url-plugin/file.svg b/test/configCases/plugins/virtual-url-plugin/file.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/file.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/plugins/virtual-url-plugin/index.js b/test/configCases/plugins/virtual-url-plugin/index.js new file mode 100644 index 00000000000..b658959a235 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/index.js @@ -0,0 +1,63 @@ +import { routes } from "virtual:routes" +import { app } from "virtual:app" +import json from "virtual:config" +import { ts } from "virtual:ts" +import txt from "virtual:txt" +import { hello } from 'virtual:hello.ts'; +import Hammer from 'virtual:hammer.svg'; +import { button } from 'virtual:src/components/button.js'; +import { table } from 'virtual:src/components/table.js'; +import { icon } from 'virtual:src/components/icon.js'; + +it("should correctly load virtual modules with the js type.", (done) => { + expect(typeof routes.bar).toBe("function"); + expect(typeof routes.foo).toBe("function"); + expect(app).toBe("app"); + Promise.all([ + routes.bar(), + routes.foo() + ]).then(([{bar}, {foo}]) => { + expect(bar).toBe("bar"); + expect(foo).toBe("foo"); + done(); + }).catch(done); +}); + +it("should correctly load virtual modules with the json type.", (done) => { + expect(json.name).toBe("virtual-url-plugin"); + done() +}); + +it("should correctly load virtual modules with the css type.", (done) => { + import("virtual:style").then(() => done()).catch(done) +}); + +it("should correctly load virtual modules with the asset/source type.", (done) => { + expect(txt).toBe("Hello world"); + done(); +}); + +it("should correctly load virtual modules without explicit type when virtual id has file extension.", (done) => { + expect(hello).toBe("hello"); + done(); +}); + +it("should correctly load virtual modules with custom loader.", (done) => { + expect(ts).toBe("var"); + done() +}); + +it("should correctly load virtual modules with the asset/resource type.", (done) => { + const fs = __non_webpack_require__("fs"); + // windows doesn't allow : in file names + expect(Hammer).not.toContain(":"); + expect(fs.readFileSync(__dirname + "/" + Hammer, "utf-8")).toContain(""); + done(); +}); + +it("should correctly load virtual modules with the js type and custom loader.", (done) => { + expect(button).toBe("button"); + expect(table).toBe("table"); + expect(icon).toBe("icon"); + done(); +}); \ No newline at end of file diff --git a/test/configCases/plugins/virtual-url-plugin/routes/bar.js b/test/configCases/plugins/virtual-url-plugin/routes/bar.js new file mode 100644 index 00000000000..20d220b9e76 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/routes/bar.js @@ -0,0 +1 @@ +export const bar = "bar"; \ No newline at end of file diff --git a/test/configCases/plugins/virtual-url-plugin/routes/foo.js b/test/configCases/plugins/virtual-url-plugin/routes/foo.js new file mode 100644 index 00000000000..ca6bb3bd505 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/routes/foo.js @@ -0,0 +1 @@ +export const foo = "foo"; \ No newline at end of file diff --git a/test/configCases/plugins/virtual-url-plugin/src/components/utils.js b/test/configCases/plugins/virtual-url-plugin/src/components/utils.js new file mode 100644 index 00000000000..e70faecf6ce --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/src/components/utils.js @@ -0,0 +1 @@ +export const trim = (str) => str.trim(); \ No newline at end of file diff --git a/test/configCases/plugins/virtual-url-plugin/ts-loader.js b/test/configCases/plugins/virtual-url-plugin/ts-loader.js new file mode 100644 index 00000000000..4aa65190847 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/ts-loader.js @@ -0,0 +1,8 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function(source) { + const callback = this.async(); + + const withoutInterfaces = source.replace(/interface\s+\w+(\s*extends\s+\w+)?\s*\{[^}]*\}/g, ''); + + callback(null, withoutInterfaces); +}; diff --git a/test/configCases/plugins/virtual-url-plugin/webpack.config.js b/test/configCases/plugins/virtual-url-plugin/webpack.config.js new file mode 100644 index 00000000000..4dc879de1e1 --- /dev/null +++ b/test/configCases/plugins/virtual-url-plugin/webpack.config.js @@ -0,0 +1,110 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const webpack = require("../../../../"); + +const { VirtualUrlPlugin } = webpack.experiments.schemes; + +const watchDir = path.join(__dirname, "./routes"); + +/** @type {import("webpack").Configuration} */ +const config = { + plugins: [ + new VirtualUrlPlugin({ + routes() { + const files = fs.readdirSync(watchDir); + return ` + export const routes = { + ${files.map((key) => `${key.split(".")[0]}: () => import('./routes/${key}')`).join(",\n")} + } + `; + }, + app: "export const app = 'app'", + config: { + type: ".json", + source() { + return '{"name": "virtual-url-plugin"}'; + } + }, + ts: { + type: ".ts", + source() { + return `interface Info { + name: string; + } + export const ts = 'const';`; + } + }, + "hello.ts": "export const hello = 'hello';", + style: { + type: ".css", + source() { + return "body{background-color: powderblue;}"; + } + }, + txt: { + type: ".txt", + source() { + return "Hello world"; + } + }, + "hammer.svg": { + context: "", + type: ".svg", + source() { + return fs.readFileSync(path.join(__dirname, "./file.svg")); + } + }, + "src/components/button.js": + "import { trim } from './utils';export const button = trim('button ');", + "src/components/table.js": { + context: path.join(__dirname, "./src/components"), + source() { + return "import { trim } from './utils';export const table = trim('table ');"; + } + }, + "src/components/icon.js": { + context: "auto", + source() { + return "import { trim } from './utils';export const icon = trim('icon ');"; + } + } + }) + ], + experiments: { + css: true + }, + module: { + rules: [ + { + test: /\.ts/, + use: [ + { + loader: require.resolve("./ts-loader.js") + }, + { + loader: require.resolve("./babel-loader.js") + } + ] + }, + { + test: /\.txt/, + type: "asset/source" + }, + { + test: /\.svg/, + type: "asset/resource" + } + ] + }, + output: { + assetModuleFilename: ({ filename: _filename }) => { + const filename = /** @type {string} */ (_filename); + return filename.replace("virtual:", ""); + } + }, + validate: true +}; + +module.exports = config; diff --git a/test/configCases/process-assets/additional-assets/index.js b/test/configCases/process-assets/additional-assets/index.js new file mode 100644 index 00000000000..a209bdf86e5 --- /dev/null +++ b/test/configCases/process-assets/additional-assets/index.js @@ -0,0 +1,10 @@ +it("should `additionalAssets` work", () => { + const { info } = __STATS__.assets.find(item => item.name === "file.txt"); + expect(info.new).toBe(true); + expect(info.additional).toBe(true); + expect(info.additionalAgain).toBe(true); + + const { info: info1 } = __STATS__.assets.find(item => item.name === "file1.txt"); + expect(info1.new).toBe(true); + expect(info1.additional).toBeUndefined(); +}); diff --git a/test/configCases/process-assets/additional-assets/webpack.config.js b/test/configCases/process-assets/additional-assets/webpack.config.js new file mode 100644 index 00000000000..18e41b21dd3 --- /dev/null +++ b/test/configCases/process-assets/additional-assets/webpack.config.js @@ -0,0 +1,86 @@ +"use strict"; + +const newName = "file.txt"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + assetModuleFilename: "images/[name][ext]" + }, + plugins: [ + { + apply: (compiler) => { + const PLUGIN_NAME = "TestPlugin"; + + compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => { + compilation.hooks.processAssets.tap( + { + name: PLUGIN_NAME, + additionalAssets: (assets) => { + for (const name of Object.keys(assets)) { + if (newName !== name) { + continue; + } + compilation.updateAsset(name, assets[name], { + additional: true + }); + } + } + }, + () => { + compilation.emitAsset( + newName, + new compiler.webpack.sources.RawSource("text"), + { + new: true + } + ); + } + ); + }); + } + }, + { + apply: (compiler) => { + const PLUGIN_NAME = "TestPlugin1"; + + compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => { + compilation.hooks.processAssets.tap( + { + name: PLUGIN_NAME, + additionalAssets: false + }, + () => { + compilation.emitAsset( + "file1.txt", + new compiler.webpack.sources.RawSource("text"), + { + new: true + } + ); + } + ); + }); + } + }, + { + apply: (compiler) => { + const PLUGIN_NAME = "TestPlugin2"; + + compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => { + compilation.hooks.processAssets.tap( + { + name: PLUGIN_NAME, + additionalAssets: true + }, + (assets) => { + compilation.updateAsset(newName, assets[newName], { + additionalAgain: true + }); + } + ); + }); + } + } + ] +}; diff --git a/test/configCases/process-assets/html-plugin/index.js b/test/configCases/process-assets/html-plugin/index.js new file mode 100644 index 00000000000..057cb6a0576 --- /dev/null +++ b/test/configCases/process-assets/html-plugin/index.js @@ -0,0 +1,28 @@ +const crypto = require("crypto"); +const fs = require("fs"); +const path = require("path"); + +it("should result in the correct HTML", () => { + const content = fs.readFileSync( + path.resolve(__dirname, "index.html"), + "utf-8" + ); + + // check minimized + expect(content).toMatch(/<\/script> `; + }; + compilation.emitAsset( + "index.html", + new OriginalSource( + ` + +${files.map((file) => ` ${toScriptTag(file)}`).join("\n")} + +`, + "index.html" + ) + ); + } + ); + }); + } +} + +class HtmlInlinePlugin { + /** + * @param {RegExp} inline inline + */ + constructor(inline) { + this.inline = inline; + } + + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.compilation.tap("html-inline-plugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "html-inline-plugin", + stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE, + additionalAssets: true + }, + (assets) => { + const publicPath = + /** @type {string} */ + (compilation.outputOptions.publicPath); + for (const name of Object.keys(assets)) { + if (/\.html$/.test(name)) { + const asset = /** @type {Asset} */ (compilation.getAsset(name)); + const content = /** @type {string} */ (asset.source.source()); + /** @type {{ start: number, length: number, asset: Asset }[]} */ + const matches = []; + const regExp = + /<\/script>/g; + let match = regExp.exec(content); + while (match) { + let url = match[1]; + if (url.startsWith(publicPath)) { + url = url.slice(publicPath.length); + } + if (this.inline.test(url)) { + const asset = /** @type {Asset} */ ( + compilation.getAsset(url) + ); + matches.push({ + start: match.index, + length: match[0].length, + asset + }); + } + match = regExp.exec(content); + } + if (matches.length > 0) { + const newSource = new ReplaceSource(asset.source, name); + for (const { start, length, asset } of matches) { + newSource.replace( + start, + start + length - 1, + `` + ); + } + compilation.updateAsset(name, newSource); + } + } + } + } + ); + }); + } +} + +class SriHashSupportPlugin { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.compilation.tap("sri-hash-support-plugin", (compilation) => { + RealContentHashPlugin.getCompilationHooks(compilation).updateHash.tap( + "sri-hash-support-plugin", + (input, oldHash) => { + if (/^sha512-.{88}$/.test(oldHash) && input.length === 1) { + const hash = createHash("sha512"); + hash.update(input[0]); + return `sha512-${hash.digest("base64")}`; + } + } + ); + }); + } +} + +class HtmlMinimizePlugin { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.compilation.tap("html-minimize-plugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "html-minimize-plugin", + stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE, + additionalAssets: true + }, + (assets) => { + for (const name of Object.keys(assets)) { + if (/\.html$/.test(name)) { + compilation.updateAsset( + name, + (source) => + new RawSource( + /** @type {string} */ + (source.source()).replace(/\s+/g, " ") + ), + (assetInfo) => ({ + ...assetInfo, + minimized: true + }) + ); + } + } + } + ); + }); + } +} + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + entry: { + test: { import: "./index.js", filename: "test.js" }, + inline: "./inline.js", + normal: "./normal.js" + }, + output: { + filename: "[name]-[contenthash].js" + }, + optimization: { + minimize: true, + minimizer: ["...", new HtmlMinimizePlugin()] + }, + node: { + __dirname: false, + __filename: false + }, + plugins: [ + new VerifyAdditionalAssetsPlugin( + Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL - 1 + ), + // new VerifyAdditionalAssetsPlugin(Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE), + // new VerifyAdditionalAssetsPlugin(Compilation.PROCESS_ASSETS_STAGE_REPORT), + new HtmlPlugin(["inline", "normal"]), + new HtmlInlinePlugin(/inline/), + new SriHashSupportPlugin() + ] +}; diff --git a/test/configCases/process-assets/update-info/file.svg b/test/configCases/process-assets/update-info/file.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/process-assets/update-info/file.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/process-assets/update-info/file1.svg b/test/configCases/process-assets/update-info/file1.svg new file mode 100644 index 00000000000..d7b7e40b4f8 --- /dev/null +++ b/test/configCases/process-assets/update-info/file1.svg @@ -0,0 +1 @@ +icon-square-small diff --git a/test/configCases/process-assets/update-info/index.js b/test/configCases/process-assets/update-info/index.js new file mode 100644 index 00000000000..61420f560f7 --- /dev/null +++ b/test/configCases/process-assets/update-info/index.js @@ -0,0 +1,13 @@ +it("should update info", () => { + const file = new URL("./file.svg", import.meta.url); + expect(/file\.svg$/.test(file)).toBe(true); + const { info } = __STATS__.assets.find(item => item.name === "images/file.svg"); + expect(info.custom).toBe(true); + expect(info.related).toEqual({"first": ["first"], "second": ["second"]}); + expect(info.customFn).toBe(true); + + const file1 = new URL("./file1.svg", import.meta.url); + expect(/file1\.svg$/.test(file1)).toBe(true); + const { info: info1 } = __STATS__.assets.find(item => item.name === "images/file1.svg"); + expect(info1.custom).toBeUndefined(); +}); diff --git a/test/configCases/process-assets/update-info/webpack.config.js b/test/configCases/process-assets/update-info/webpack.config.js new file mode 100644 index 00000000000..8704cf67573 --- /dev/null +++ b/test/configCases/process-assets/update-info/webpack.config.js @@ -0,0 +1,58 @@ +"use strict"; + +/** @typedef {import("../../../../").AssetInfo} AssetInfo */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + assetModuleFilename: "images/[name][ext]" + }, + plugins: [ + { + apply: (compiler) => { + compiler.hooks.compilation.tap("TestPlugin", (compilation) => { + compilation.hooks.processAssets.tap( + { + name: "TestPlugin", + additionalAssets: true + }, + (assets) => { + for (const asset of Object.keys(assets)) { + switch (asset) { + case "images/file.svg": { + compilation.updateAsset(asset, assets[asset], { + custom: true, + related: { first: ["first"] } + }); + compilation.updateAsset(asset, assets[asset], (info) => ({ + ...info, + related: { + .../** @type {{ related: Record }} */ ( + info + ).related, + second: ["second"] + }, + customFn: true + })); + break; + } + case "images/file1.svg": { + compilation.updateAsset(asset, assets[asset], { + custom: true + }); + compilation.updateAsset( + asset, + assets[asset], + () => undefined + ); + break; + } + } + } + } + ); + }); + } + } + ] +}; diff --git a/test/configCases/race-conditions/import-module/index.js b/test/configCases/race-conditions/import-module/index.js new file mode 100644 index 00000000000..1fd2434a896 --- /dev/null +++ b/test/configCases/race-conditions/import-module/index.js @@ -0,0 +1,7 @@ +import * as styles from './style.module.css'; +import * as styles1 from './module.js'; + +it("should not deadlock when using importModule", () => { + expect(styles.someBottom).toBe("8px"); + expect(styles1.someBottom).toBe("8px"); +}); diff --git a/test/configCases/race-conditions/import-module/inner.module.css b/test/configCases/race-conditions/import-module/inner.module.css new file mode 100644 index 00000000000..42f213360c8 --- /dev/null +++ b/test/configCases/race-conditions/import-module/inner.module.css @@ -0,0 +1 @@ +@value someBottom from "./vars.module.css"; diff --git a/test/configCases/race-conditions/import-module/loader.js b/test/configCases/race-conditions/import-module/loader.js new file mode 100644 index 00000000000..0e77913406f --- /dev/null +++ b/test/configCases/race-conditions/import-module/loader.js @@ -0,0 +1,21 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports.pitch = function (request) { + const callback = this.async(); + let finished = false; + + this.importModule( + `${this.resourcePath}.webpack[javascript/auto]!=!!!${request}`, + {}, + (err, result) => { + if (err) return callback(err); + if (finished) return; + finished = true; + callback(null, `module.exports = ${JSON.stringify(result)};`); + } + ); + setTimeout(() => { + if (finished) return; + finished = true; + callback(new Error("importModule is hanging")); + }, 2000); +}; diff --git a/test/configCases/race-conditions/import-module/module.js b/test/configCases/race-conditions/import-module/module.js new file mode 100644 index 00000000000..88d79cafca0 --- /dev/null +++ b/test/configCases/race-conditions/import-module/module.js @@ -0,0 +1 @@ +export * from './style1.module.css' diff --git a/test/configCases/race-conditions/import-module/style.module.css b/test/configCases/race-conditions/import-module/style.module.css new file mode 100644 index 00000000000..4c8cab8aea2 --- /dev/null +++ b/test/configCases/race-conditions/import-module/style.module.css @@ -0,0 +1,5 @@ +@value someBottom from "./inner.module.css"; + +.cold { + bottom: someBottom; +} diff --git a/test/configCases/race-conditions/import-module/style1.module.css b/test/configCases/race-conditions/import-module/style1.module.css new file mode 100644 index 00000000000..4c8cab8aea2 --- /dev/null +++ b/test/configCases/race-conditions/import-module/style1.module.css @@ -0,0 +1,5 @@ +@value someBottom from "./inner.module.css"; + +.cold { + bottom: someBottom; +} diff --git a/test/configCases/race-conditions/import-module/test.filter.js b/test/configCases/race-conditions/import-module/test.filter.js new file mode 100644 index 00000000000..6c0c15c2e74 --- /dev/null +++ b/test/configCases/race-conditions/import-module/test.filter.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = () => { + const [major] = process.versions.node.split(".").map(Number); + + return major >= 18; +}; diff --git a/test/configCases/race-conditions/import-module/vars.module.css b/test/configCases/race-conditions/import-module/vars.module.css new file mode 100644 index 00000000000..3d1538209d3 --- /dev/null +++ b/test/configCases/race-conditions/import-module/vars.module.css @@ -0,0 +1,2 @@ +@value someBottom: 8px; +@value someBottom1: 8px; diff --git a/test/configCases/race-conditions/import-module/webpack.config.js b/test/configCases/race-conditions/import-module/webpack.config.js new file mode 100644 index 00000000000..296579050cc --- /dev/null +++ b/test/configCases/race-conditions/import-module/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + parallelism: 1, + mode: "development", + module: { + rules: [ + { + test: /\.css$/i, + use: [require.resolve("./loader"), "css-loader"] + } + ] + } +}; diff --git a/test/configCases/race-conditions/load-module/loader.js b/test/configCases/race-conditions/load-module/loader.js index 444c2c9dad3..b741c194e99 100644 --- a/test/configCases/race-conditions/load-module/loader.js +++ b/test/configCases/race-conditions/load-module/loader.js @@ -1,4 +1,5 @@ -module.exports = function() { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function () { const callback = this.async(); let finished = false; this.loadModule("./module.js", (err, result) => { diff --git a/test/configCases/race-conditions/load-module/webpack.config.js b/test/configCases/race-conditions/load-module/webpack.config.js index e39f5010812..09f63feb12d 100644 --- a/test/configCases/race-conditions/load-module/webpack.config.js +++ b/test/configCases/race-conditions/load-module/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { parallelism: 1 }; diff --git a/test/configCases/rebuild/finishModules/a.js b/test/configCases/rebuild/finishModules/a.js new file mode 100644 index 00000000000..9b7f372296c --- /dev/null +++ b/test/configCases/rebuild/finishModules/a.js @@ -0,0 +1,5 @@ +import { doThings, foo } from "./other-file"; + +export { doThings, foo }; + +export const valueFromA = "A"; diff --git a/test/configCases/rebuild/finishModules/chunk.js b/test/configCases/rebuild/finishModules/chunk.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/rebuild/finishModules/index.js b/test/configCases/rebuild/finishModules/index.js new file mode 100644 index 00000000000..2f119994f6d --- /dev/null +++ b/test/configCases/rebuild/finishModules/index.js @@ -0,0 +1,20 @@ +import { doThings, foo, valueFromA } from "./a"; +it("should compile", function (done) { + expect(doThings("ok")).toBe("ok"); + + // Should be replaced by the code in the config. + expect(foo.foo).toBe("bar"); + expect(valueFromA).toBe("A"); + + done(); +}); + +it("should not reference the chunk", () => { + expect(__STATS__.chunks.length).toEqual(1); + expect( + __STATS__.modules + .filter(m => m.moduleType !== "runtime") + .map(m => m.name) + .sort() + ).toEqual(["./a.js", "./index.js", "./other-file.js"]); +}); diff --git a/test/configCases/rebuild/finishModules/loader.js b/test/configCases/rebuild/finishModules/loader.js new file mode 100644 index 00000000000..2280da8573f --- /dev/null +++ b/test/configCases/rebuild/finishModules/loader.js @@ -0,0 +1,14 @@ +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").LoaderDefinition<{}, { shouldReplace: boolean }>} */ +module.exports = function (source) { + if (this.shouldReplace) { + /** @type {NonNullable} */ + ( + /** @type {Module} */ + (this._module).buildInfo + )._isReplaced = true; + return "module.exports = { foo: { foo: 'bar' }, doThings: (v) => v}"; + } + return source; +}; diff --git a/test/configCases/rebuild/finishModules/module.js b/test/configCases/rebuild/finishModules/module.js new file mode 100644 index 00000000000..60c6c8d8b04 --- /dev/null +++ b/test/configCases/rebuild/finishModules/module.js @@ -0,0 +1 @@ +export default "foo"; diff --git a/test/configCases/rebuild/finishModules/other-file.js b/test/configCases/rebuild/finishModules/other-file.js new file mode 100644 index 00000000000..7d49a120b59 --- /dev/null +++ b/test/configCases/rebuild/finishModules/other-file.js @@ -0,0 +1,9 @@ +import foo from "./module"; + +export function doThings(stuff) { + return import("./chunk"); +} + +export const foo = { + foo +}; diff --git a/test/configCases/rebuild/finishModules/webpack.config.js b/test/configCases/rebuild/finishModules/webpack.config.js new file mode 100644 index 00000000000..fd5c0834460 --- /dev/null +++ b/test/configCases/rebuild/finishModules/webpack.config.js @@ -0,0 +1,78 @@ +"use strict"; + +const { join, resolve } = require("path"); +const { NormalModule } = require("../../../../"); + +/** + * @typedef {import("../../../../").Module} Module + */ + +/** + * @param {import("../../../../").Compiler} compiler the compiler + */ +const testPlugin = (compiler) => { + compiler.hooks.compilation.tap("TestPlugin", (compilation) => { + let shouldReplace = false; + NormalModule.getCompilationHooks(compilation).loader.tap( + "TestPlugin", + (loaderContext) => { + /** @type {EXPECTED_ANY} */ + (loaderContext).shouldReplace = shouldReplace; + } + ); + compilation.hooks.finishModules.tapAsync( + "TestPlugin", + (modules, callback) => { + const src = resolve(join(__dirname, "other-file.js")); + + /** + * @param {Module} m test + * @returns {boolean | string} test + */ + function matcher(m) { + return ( + /** @type {NormalModule} */ (m).resource && + /** @type {NormalModule} */ (m).resource === src + ); + } + + const module = [...modules].find(matcher); + + if (!module) { + throw new Error("something went wrong"); + } + + // Check if already build the updated version + // this will happen when using caching + if ( + /** @type {NonNullable} */ + (module.buildInfo)._isReplaced + ) { + return callback(); + } + + shouldReplace = true; + compilation.rebuildModule(module, (err) => { + shouldReplace = false; + callback(err); + }); + } + ); + }); +}; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /other-file/, + use: "./loader" + } + ] + }, + optimization: { + concatenateModules: false + }, + plugins: [testPlugin] +}; diff --git a/test/configCases/rebuild/rebuildWithNewDependencies/a.js b/test/configCases/rebuild/rebuildWithNewDependencies/a.js new file mode 100644 index 00000000000..b95d9adb367 --- /dev/null +++ b/test/configCases/rebuild/rebuildWithNewDependencies/a.js @@ -0,0 +1 @@ +export default "a.js"; diff --git a/test/configCases/rebuild/rebuildWithNewDependencies/index.js b/test/configCases/rebuild/rebuildWithNewDependencies/index.js new file mode 100644 index 00000000000..dc0e2858289 --- /dev/null +++ b/test/configCases/rebuild/rebuildWithNewDependencies/index.js @@ -0,0 +1,7 @@ +import A from "./a"; + +it("should compile", function (done) { + expect(A).toBe("other-file.js"); + + done(); +}); diff --git a/test/configCases/rebuild/rebuildWithNewDependencies/loader.js b/test/configCases/rebuild/rebuildWithNewDependencies/loader.js new file mode 100644 index 00000000000..28fe4edb3c6 --- /dev/null +++ b/test/configCases/rebuild/rebuildWithNewDependencies/loader.js @@ -0,0 +1,16 @@ +/** @typedef {import("../../../../").Module} Module */ + +/** @type {import("../../../../").LoaderDefinition<{}, { shouldReplace: boolean }>} */ +module.exports = function (source) { + if (this.shouldReplace) { + /** @type {NonNullable} */ + ( + /** @type {Module} */ + (this._module).buildInfo + )._isReplaced = true; + return `import otherFile from './other-file.js'; + export default otherFile; + `; + } + return source; +}; diff --git a/test/configCases/rebuild/rebuildWithNewDependencies/other-file.js b/test/configCases/rebuild/rebuildWithNewDependencies/other-file.js new file mode 100644 index 00000000000..bf03b45cceb --- /dev/null +++ b/test/configCases/rebuild/rebuildWithNewDependencies/other-file.js @@ -0,0 +1 @@ +export default "other-file.js"; diff --git a/test/configCases/rebuild/rebuildWithNewDependencies/webpack.config.js b/test/configCases/rebuild/rebuildWithNewDependencies/webpack.config.js new file mode 100644 index 00000000000..bf634454391 --- /dev/null +++ b/test/configCases/rebuild/rebuildWithNewDependencies/webpack.config.js @@ -0,0 +1,76 @@ +"use strict"; + +const { join, resolve } = require("path"); +const { NormalModule } = require("../../../../"); + +/** @typedef {import("../../../../").Module} Module */ + +/** + * @param {import("../../../../").Compiler} compiler the compiler + */ +const testPlugin = (compiler) => { + compiler.hooks.compilation.tap("TestPlugin", (compilation) => { + let shouldReplace = false; + NormalModule.getCompilationHooks(compilation).loader.tap( + "TestPlugin", + (loaderContext) => { + /** @type {EXPECTED_ANY} */ + (loaderContext).shouldReplace = shouldReplace; + } + ); + compilation.hooks.finishModules.tapAsync( + "TestPlugin", + (modules, callback) => { + const src = resolve(join(__dirname, "a.js")); + + /** + * @param {Module} m test + * @returns {boolean | string} test + */ + function matcher(m) { + return ( + /** @type {NormalModule} */ (m).resource && + /** @type {NormalModule} */ (m).resource === src + ); + } + + const module = [...modules].find(matcher); + + if (!module) { + throw new Error("something went wrong"); + } + + // Check if already build the updated version + // this will happen when using caching + if ( + /** @type {NonNullable} */ + (module.buildInfo)._isReplaced + ) { + return callback(); + } + + shouldReplace = true; + compilation.rebuildModule(module, (err) => { + shouldReplace = false; + callback(err); + }); + } + ); + }); +}; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: /a.js/, + use: "./loader" + } + ] + }, + optimization: { + concatenateModules: false + }, + plugins: [testPlugin] +}; diff --git a/test/configCases/records/issue-295/loader.js b/test/configCases/records/issue-295/loader.js index 6e64f4af6bb..c6d8a635121 100644 --- a/test/configCases/records/issue-295/loader.js +++ b/test/configCases/records/issue-295/loader.js @@ -1,3 +1,4 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { return source; }; diff --git a/test/configCases/records/issue-295/webpack.config.js b/test/configCases/records/issue-295/webpack.config.js index 987f3640bb9..f65ee6b2b7e 100644 --- a/test/configCases/records/issue-295/webpack.config.js +++ b/test/configCases/records/issue-295/webpack.config.js @@ -1,13 +1,13 @@ -var path = require("path"); +"use strict"; -module.exports = { +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration} */ +module.exports = (env, { testPath }) => ({ entry: "./test", - recordsPath: path.resolve( - __dirname, - "../../../js/config/records/issue-295/records.json" - ), + recordsPath: path.resolve(testPath, "records.json"), target: "node", node: { __dirname: false } -}; +}); diff --git a/test/configCases/records/issue-2991/test.js b/test/configCases/records/issue-2991/test.js index 81673a393b9..bef4f443a46 100644 --- a/test/configCases/records/issue-2991/test.js +++ b/test/configCases/records/issue-2991/test.js @@ -6,5 +6,25 @@ it("should write relative paths to records", function() { var fs = require("fs"); var path = require("path"); var content = fs.readFileSync(path.join(__dirname, "records.json"), "utf-8"); - expect(content).toMatchSnapshot(); + + expect(JSON.parse(content)).toMatchObject({ + chunks: { + byName: { + main: 792 + }, + bySource: { + "0 main": 792 + }, + usedIds: [792] + }, + modules: { + byIdentifier: { + "./test.js": 329, + 'external node-commonjs "fs"': 896, + 'external node-commonjs "path"': 928, + "ignored|./.|pkgs/somepackage/foo": 835 + }, + usedIds: [329, 835, 896, 928] + } + }); }); diff --git a/test/configCases/records/issue-2991/webpack.config.js b/test/configCases/records/issue-2991/webpack.config.js index 3d017931f12..a1179fc8a57 100644 --- a/test/configCases/records/issue-2991/webpack.config.js +++ b/test/configCases/records/issue-2991/webpack.config.js @@ -1,11 +1,11 @@ -var path = require("path"); +"use strict"; -module.exports = { +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration} */ +module.exports = (env, { testPath }) => ({ entry: "./test", - recordsOutputPath: path.resolve( - __dirname, - "../../../js/config/records/issue-2991/records.json" - ), + recordsOutputPath: path.resolve(testPath, "records.json"), target: "node", node: { __dirname: false @@ -16,4 +16,4 @@ module.exports = { pkgs: path.resolve(__dirname, "pkgs") } } -}; +}); diff --git a/test/configCases/records/issue-7339/test.js b/test/configCases/records/issue-7339/test.js index 98081ef1c8a..2c238d398b2 100644 --- a/test/configCases/records/issue-7339/test.js +++ b/test/configCases/records/issue-7339/test.js @@ -6,5 +6,27 @@ it("should write relative dynamic-require paths to records", function() { var fs = require("fs"); var path = require("path"); var content = fs.readFileSync(path.join(__dirname, "records.json"), "utf-8"); - expect(content).toMatchSnapshot(); + + expect(JSON.parse(content)).toMatchObject({ + chunks: { + byName: { + main: 792 + }, + bySource: { + "0 main": 792 + }, + usedIds: [792] + }, + modules: { + byIdentifier: { + "./dependencies/bar.js": 666, + "./dependencies/foo.js": 147, + './dependencies|sync|/^\\.\\/.*$/': 239, + "./test.js": 329, + 'external node-commonjs "fs"': 896, + 'external node-commonjs "path"': 928 + }, + usedIds: [147, 239, 329, 666, 896, 928] + } + }); }); diff --git a/test/configCases/records/issue-7339/webpack.config.js b/test/configCases/records/issue-7339/webpack.config.js index 0d7b9410f4f..255e8e121a8 100644 --- a/test/configCases/records/issue-7339/webpack.config.js +++ b/test/configCases/records/issue-7339/webpack.config.js @@ -1,13 +1,13 @@ -var path = require("path"); +"use strict"; -module.exports = { +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration} */ +module.exports = (env, { testPath }) => ({ entry: "./test", - recordsOutputPath: path.resolve( - __dirname, - "../../../js/config/records/issue-7339/records.json" - ), + recordsOutputPath: path.resolve(testPath, "records.json"), target: "node", node: { __dirname: false } -}; +}); diff --git a/test/configCases/records/issue-7492/webpack.config.js b/test/configCases/records/issue-7492/webpack.config.js index 32bbc5f696e..66927c9b9ec 100644 --- a/test/configCases/records/issue-7492/webpack.config.js +++ b/test/configCases/records/issue-7492/webpack.config.js @@ -1,5 +1,8 @@ -var path = require("path"); +"use strict"; +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: "./index", recordsInputPath: path.resolve(__dirname, "records.json"), diff --git a/test/configCases/records/stable-sort/webpack.config.js b/test/configCases/records/stable-sort/webpack.config.js index 56c58a64209..d5b47234bbc 100644 --- a/test/configCases/records/stable-sort/webpack.config.js +++ b/test/configCases/records/stable-sort/webpack.config.js @@ -1,17 +1,17 @@ -var path = require("path"); +"use strict"; -module.exports = { +const path = require("path"); + +/** @type {(env: Env, options: TestOptions) => import("../../../../").Configuration} */ +module.exports = (env, { testPath }) => ({ mode: "development", entry: "./test", - recordsOutputPath: path.resolve( - __dirname, - "../../../js/config/records/stable-sort/records.json" - ), + recordsOutputPath: path.resolve(testPath, "records.json"), optimization: { - namedChunks: false + chunkIds: "size" }, target: "node", node: { __dirname: false } -}; +}); diff --git a/test/configCases/records/with-readRecords-hook/ReadRecordsPlugin.js b/test/configCases/records/with-readRecords-hook/ReadRecordsPlugin.js new file mode 100644 index 00000000000..6ce7633e708 --- /dev/null +++ b/test/configCases/records/with-readRecords-hook/ReadRecordsPlugin.js @@ -0,0 +1,16 @@ +/** @typedef {import("../../../../").Compiler} Compiler */ + +class ReadRecordsPlugin { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.readRecords.tapAsync("ReadRecordsPlugin", callback => { + setTimeout(() => { + callback(); + }, 1000); + }); + } +} + +module.exports = ReadRecordsPlugin; diff --git a/test/configCases/records/with-readRecords-hook/async.js b/test/configCases/records/with-readRecords-hook/async.js new file mode 100644 index 00000000000..e08a1b185c2 --- /dev/null +++ b/test/configCases/records/with-readRecords-hook/async.js @@ -0,0 +1 @@ +import "vendor"; diff --git a/test/configCases/records/with-readRecords-hook/index.js b/test/configCases/records/with-readRecords-hook/index.js new file mode 100644 index 00000000000..15c49532184 --- /dev/null +++ b/test/configCases/records/with-readRecords-hook/index.js @@ -0,0 +1,3 @@ +it("should load fine", () => { + return import(/* webpackChunkName: "async" */"./async"); +}); diff --git a/test/configCases/records/with-readRecords-hook/node_modules/vendor.js b/test/configCases/records/with-readRecords-hook/node_modules/vendor.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/records/with-readRecords-hook/records.json b/test/configCases/records/with-readRecords-hook/records.json new file mode 100644 index 00000000000..dcca409b109 --- /dev/null +++ b/test/configCases/records/with-readRecords-hook/records.json @@ -0,0 +1,10 @@ +{ + "chunks": { + "byName": { + "vendors~async": 123 + }, + "bySource": { + "1 index.js ./async": 123 + } + } +} diff --git a/test/configCases/records/with-readRecords-hook/webpack.config.js b/test/configCases/records/with-readRecords-hook/webpack.config.js new file mode 100644 index 00000000000..5f22cc0e5fa --- /dev/null +++ b/test/configCases/records/with-readRecords-hook/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const path = require("path"); +const ReadRecordsPlugin = require("./ReadRecordsPlugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: "./index", + recordsInputPath: path.resolve(__dirname, "records.json"), + output: { + chunkFilename: "[name]-[chunkhash].js" + }, + plugins: [new ReadRecordsPlugin()], + optimization: { + splitChunks: { + minSize: 0 + } + } +}; diff --git a/test/configCases/require/cjs-and-mjs/dynamic.js b/test/configCases/require/cjs-and-mjs/dynamic.js new file mode 100644 index 00000000000..0ddbca84deb --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/dynamic.js @@ -0,0 +1,7 @@ +import { createRequire } from 'node:module'; + +const require = createRequire ? createRequire(import.meta.url) : undefined; + +it("should work", () => { + expect(typeof require).toBe("undefined"); +}); diff --git a/test/configCases/require/cjs-and-mjs/foo.cts b/test/configCases/require/cjs-and-mjs/foo.cts new file mode 100644 index 00000000000..bb1843d113a --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/foo.cts @@ -0,0 +1 @@ +export const foo = 1; diff --git a/test/configCases/require/cjs-and-mjs/js.mjs b/test/configCases/require/cjs-and-mjs/js.mjs new file mode 100644 index 00000000000..7c34bcaf345 --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/js.mjs @@ -0,0 +1,7 @@ +import { createRequire } from 'module'; +const require = createRequire(import.meta.url); +const { foo } = require('./foo.cjs'); + +it("should work", () => { + expect(foo).toBe(1); +}); diff --git a/test/configCases/require/cjs-and-mjs/test.config.js b/test/configCases/require/cjs-and-mjs/test.config.js new file mode 100644 index 00000000000..4884040c231 --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./js.js", "./ts.js", "./dynamic.js"]; + } +}; diff --git a/test/configCases/require/cjs-and-mjs/test.filter.js b/test/configCases/require/cjs-and-mjs/test.filter.js new file mode 100644 index 00000000000..6a9f21b11cb --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const [major] = process.versions.node.split(".").map(Number); + +module.exports = () => major >= 14; diff --git a/test/configCases/require/cjs-and-mjs/ts.mts b/test/configCases/require/cjs-and-mjs/ts.mts new file mode 100644 index 00000000000..7c34bcaf345 --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/ts.mts @@ -0,0 +1,7 @@ +import { createRequire } from 'module'; +const require = createRequire(import.meta.url); +const { foo } = require('./foo.cjs'); + +it("should work", () => { + expect(foo).toBe(1); +}); diff --git a/test/configCases/require/cjs-and-mjs/tsconfig.json b/test/configCases/require/cjs-and-mjs/tsconfig.json new file mode 100644 index 00000000000..40563159f8a --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "declaration": false, + "module": "nodenext", + "moduleResolution": "nodenext", + "noEmitOnError": true, + "rootDir": "./", + "strict": true + }, + "includes": ["./**/*.mts", "./**/*.cts"] +} diff --git a/test/configCases/require/cjs-and-mjs/webpack.config.js b/test/configCases/require/cjs-and-mjs/webpack.config.js new file mode 100644 index 00000000000..39dfd629360 --- /dev/null +++ b/test/configCases/require/cjs-and-mjs/webpack.config.js @@ -0,0 +1,33 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + js: "./js.mjs", + ts: "./ts.mts", + dynamic: "./dynamic.js" + }, + output: { + filename: "[name].js" + }, + target: "node", + module: { + parser: { + javascript: { + createRequire: true + } + }, + rules: [ + { + test: /\.[mc]?tsx?$/, + use: "ts-loader" + } + ] + }, + resolve: { + extensionAlias: { + ".mjs": [".mts", ".mjs"], + ".cjs": [".cts", ".cjs"] + } + } +}; diff --git a/test/configCases/require/create-require-pure-esm/a.cjs b/test/configCases/require/create-require-pure-esm/a.cjs new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/require/create-require-pure-esm/a.cjs @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/require/create-require-pure-esm/b.cjs b/test/configCases/require/create-require-pure-esm/b.cjs new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/configCases/require/create-require-pure-esm/b.cjs @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/configCases/require/create-require-pure-esm/index.mjs b/test/configCases/require/create-require-pure-esm/index.mjs new file mode 100644 index 00000000000..3b6b6457360 --- /dev/null +++ b/test/configCases/require/create-require-pure-esm/index.mjs @@ -0,0 +1,14 @@ +import { createRequire } from "module"; +import { createRequire as createRequireNode } from "node:module"; + +const require = createRequire(import.meta.url); + +it("should create require in pure ESM file when commonjs is disabled", () => { + expect(require("./a.cjs")).toBe(1); + expect(createRequireNode(import.meta.url)("./b.cjs")).toBe(2); +}); + +it("should resolve using created require in pure ESM file when commonjs is disabled", () => { + expect(require.resolve("./a.cjs")).toBe("./a.cjs"); + expect(createRequireNode(import.meta.url).resolve("./b.cjs")).toBe("./b.cjs"); +}); diff --git a/test/configCases/require/create-require-pure-esm/webpack.config.js b/test/configCases/require/create-require-pure-esm/webpack.config.js new file mode 100644 index 00000000000..7f121568e91 --- /dev/null +++ b/test/configCases/require/create-require-pure-esm/webpack.config.js @@ -0,0 +1,21 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + entry: "./index.mjs", + optimization: { + moduleIds: "named" + }, + module: { + parser: { + javascript: { + createRequire: true + }, + "javascript/esm": { + commonjs: false, + createRequire: true + } + } + } +}; diff --git a/test/configCases/require/module-require/a.js b/test/configCases/require/module-require/a.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/require/module-require/a.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/require/module-require/b.js b/test/configCases/require/module-require/b.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/configCases/require/module-require/b.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/configCases/require/module-require/c.js b/test/configCases/require/module-require/c.js new file mode 100644 index 00000000000..690aad34a46 --- /dev/null +++ b/test/configCases/require/module-require/c.js @@ -0,0 +1 @@ +module.exports = 3; diff --git a/test/configCases/require/module-require/d.js b/test/configCases/require/module-require/d.js new file mode 100644 index 00000000000..a9bbdd80578 --- /dev/null +++ b/test/configCases/require/module-require/d.js @@ -0,0 +1 @@ +module.exports = 4; diff --git a/test/configCases/require/module-require/foo/a.js b/test/configCases/require/module-require/foo/a.js new file mode 100644 index 00000000000..a9bbdd80578 --- /dev/null +++ b/test/configCases/require/module-require/foo/a.js @@ -0,0 +1 @@ +module.exports = 4; diff --git a/test/configCases/require/module-require/foo/c.js b/test/configCases/require/module-require/foo/c.js new file mode 100644 index 00000000000..f4e8d9d29a5 --- /dev/null +++ b/test/configCases/require/module-require/foo/c.js @@ -0,0 +1 @@ +module.exports = 5; diff --git a/test/configCases/require/module-require/index.js b/test/configCases/require/module-require/index.js new file mode 100644 index 00000000000..342ade9139d --- /dev/null +++ b/test/configCases/require/module-require/index.js @@ -0,0 +1,86 @@ +import { createRequire as _createRequire } from "module"; +import { createRequire as __createRequire, builtinModules } from "module"; +import { createRequire as ___createRequire } from "node:module"; + +let topLetRequire = _createRequireForVar(import.meta.url); +var topVarRequire = _createRequireForVar(import.meta.url); +import { createRequire as _createRequireForVar } from "node:module"; + +it("should evaluate require/createRequire", () => { + expect( + (function() { return typeof _createRequire; }).toString() + ).toBe('function() { return "function"; }'); + expect( + (function() { if (typeof _createRequire); }).toString() + ).toBe('function() { if (true); }'); + const require = __createRequire(import.meta.url); + expect( + (function() { return typeof require; }).toString() + ).toBe('function() { return "function"; }'); + expect( + (function() { if (typeof require); }).toString() + ).toBe('function() { if (true); }'); + expect( + (function() { return typeof ___createRequire; }).toString() + ).toBe('function() { return "function"; }'); + expect( + (function() { if (typeof ___createRequire); }).toString() + ).toBe('function() { if (true); }'); +}); + +it("should create require", () => { + const require = _createRequire(import.meta.url); + expect(require("./a")).toBe(1); + expect(_createRequire(import.meta.url)("./c")).toBe(3); + expect(__createRequire(import.meta.url)("./b")).toBe(2); + expect(___createRequire(import.meta.url)("./d")).toBe(4); + const requireNodePrefix = __createRequire(import.meta.url); + expect(requireNodePrefix("./a")).toBe(1); +}); + +it("should resolve using created require", () => { + const require = _createRequire(import.meta.url); + expect(require.resolve("./b")).toBe("./b.js"); + expect(_createRequire(import.meta.url).resolve("./b")).toBe("./b.js"); + expect(__createRequire(import.meta.url).resolve("./b")).toBe("./b.js"); + expect(___createRequire(import.meta.url).resolve("./b")).toBe("./b.js"); +}); + +it("should provide require.cache", () => { + const _require = _createRequire(import.meta.url); + expect(require.cache).toBe(_require.cache); + expect(require.cache).toBe(_createRequire(import.meta.url).cache); + expect(require.cache).toBe(__createRequire(import.meta.url).cache); + expect(require.cache).toBe(___createRequire(import.meta.url).cache); +}); + +it("should provide dependency context", () => { + const _require = _createRequire(new URL("./foo/c.js", import.meta.url)); + expect(_require("./a")).toBe(4); + const _require1 = _createRequire(new URL("./foo/", import.meta.url)); + expect(_require1("./c")).toBe(5); + const _require2 = ___createRequire(new URL("./foo/", import.meta.url)); + expect(_require2("./c")).toBe(5); +}); + +it("should add warning on using as expression", () => { + let _require = _createRequire(new URL("./foo/c.js", import.meta.url)); + const a = _require; + expect(typeof a).toBe("function"); +}); + +it("should add warning on using require.main", () => { + let _require = _createRequire(new URL("./foo/c.js", import.meta.url)); + expect(_require.main).toBe(undefined); +}); + +it("should import Node.js module", () => { + expect(Array.isArray(builtinModules)).toBe(true); +}); + +var varRequire = _createRequireForVar(import.meta.url); +it("should works with top-level var declarations", () => { + expect(varRequire("./a")).toBe(1); + expect(topVarRequire("./b")).toBe(2); + expect(topLetRequire("./c")).toBe(3); +}); diff --git a/test/configCases/require/module-require/warnings.js b/test/configCases/require/module-require/warnings.js new file mode 100644 index 00000000000..7a68faffd4c --- /dev/null +++ b/test/configCases/require/module-require/warnings.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + /require function is used in a way in which dependencies cannot be statically extracted/, + /createRequire\(\)\.main is not supported by webpack/ +]; diff --git a/test/configCases/require/module-require/webpack.config.js b/test/configCases/require/module-require/webpack.config.js new file mode 100644 index 00000000000..b14c3325724 --- /dev/null +++ b/test/configCases/require/module-require/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "node", + optimization: { + moduleIds: "named" + } +}; diff --git a/test/configCases/resolve-merging/imports-fields/index.js b/test/configCases/resolve-merging/imports-fields/index.js new file mode 100644 index 00000000000..616dbc039b9 --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/index.js @@ -0,0 +1,8 @@ +import d1 from "./pkg.mjs"; +import d2 from "#internal"; +import { d3, d4 } from "lib"; + +it("imports field to resolve to the same", () => { + expect(d2).toBe(d1); + expect(d4).toBe(d3); +}); diff --git a/test/configCases/resolve-merging/imports-fields/node_modules/lib/index.js b/test/configCases/resolve-merging/imports-fields/node_modules/lib/index.js new file mode 100644 index 00000000000..1953c3537f5 --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/node_modules/lib/index.js @@ -0,0 +1,2 @@ +export { default as d3 } from "./lib.mjs"; +export { default as d4 } from "#internal"; diff --git a/test/configCases/resolve-merging/imports-fields/node_modules/lib/lib.mjs b/test/configCases/resolve-merging/imports-fields/node_modules/lib/lib.mjs new file mode 100644 index 00000000000..71c401bf2aa --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/node_modules/lib/lib.mjs @@ -0,0 +1 @@ +export default 'lib'; diff --git a/test/configCases/resolve-merging/imports-fields/node_modules/lib/package.json b/test/configCases/resolve-merging/imports-fields/node_modules/lib/package.json new file mode 100644 index 00000000000..a085977002b --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/node_modules/lib/package.json @@ -0,0 +1,6 @@ +{ + "name": "lib", + "hash-start": { + "#internal": "./lib.mjs" + } +} \ No newline at end of file diff --git a/test/configCases/resolve-merging/imports-fields/package.json b/test/configCases/resolve-merging/imports-fields/package.json new file mode 100644 index 00000000000..1843391bb5a --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/package.json @@ -0,0 +1,6 @@ +{ + "name": "pkg", + "imports": { + "#internal": "./pkg.mjs" + } +} \ No newline at end of file diff --git a/test/configCases/resolve-merging/imports-fields/pkg.mjs b/test/configCases/resolve-merging/imports-fields/pkg.mjs new file mode 100644 index 00000000000..3fa44fe7fa6 --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/pkg.mjs @@ -0,0 +1 @@ +export default 'pkg'; diff --git a/test/configCases/resolve-merging/imports-fields/webpack.config.js b/test/configCases/resolve-merging/imports-fields/webpack.config.js new file mode 100644 index 00000000000..7332c1abd65 --- /dev/null +++ b/test/configCases/resolve-merging/imports-fields/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +module.exports = { + entry: "./index.js", + resolve: { + importsFields: ["hash-start", "..."] + } +}; diff --git a/test/configCases/resolve-merging/override/aaa.js b/test/configCases/resolve-merging/override/aaa.js new file mode 100644 index 00000000000..87f04f7b886 --- /dev/null +++ b/test/configCases/resolve-merging/override/aaa.js @@ -0,0 +1 @@ +export { default } from "./package"; diff --git a/test/configCases/resolve-merging/override/bbb.js b/test/configCases/resolve-merging/override/bbb.js new file mode 100644 index 00000000000..87f04f7b886 --- /dev/null +++ b/test/configCases/resolve-merging/override/bbb.js @@ -0,0 +1 @@ +export { default } from "./package"; diff --git a/test/configCases/resolve-merging/override/ccc.js b/test/configCases/resolve-merging/override/ccc.js new file mode 100644 index 00000000000..87f04f7b886 --- /dev/null +++ b/test/configCases/resolve-merging/override/ccc.js @@ -0,0 +1 @@ +export { default } from "./package"; diff --git a/test/configCases/resolve-merging/override/ddd.js b/test/configCases/resolve-merging/override/ddd.js new file mode 100644 index 00000000000..87f04f7b886 --- /dev/null +++ b/test/configCases/resolve-merging/override/ddd.js @@ -0,0 +1 @@ +export { default } from "./package"; diff --git a/test/configCases/resolve-merging/override/index.js b/test/configCases/resolve-merging/override/index.js new file mode 100644 index 00000000000..37d572dfaed --- /dev/null +++ b/test/configCases/resolve-merging/override/index.js @@ -0,0 +1,44 @@ +import value from "./package"; +import aaa from "./aaa"; +import bbb from "./bbb"; +import ccc from "./ccc"; +import ddd from "./ddd"; +import { a, b, c, d, e } from "./loader!./loader"; + +it("should use byDependency defaults", () => { + expect(value).toBe("module"); +}); + +it("should override byDependency defaults", () => { + expect(aaa).toBe("index"); +}); + +it("should merge in the correct order", () => { + expect(bbb).toBe("other"); +}); + +it("should keep byDependency intact", () => { + expect(ccc).toBe("module"); +}); + +it("should allow to change byDependency", () => { + expect(ddd).toBe("other"); +}); + +it("should use backward-compat resolve by default in loader", () => { + expect(a).toBe("require"); + expect(b).toBe("require"); +}); + +it("should allow to override in loader", () => { + expect(c).toBe("index"); +}); + +it("should allow to use custom dependencyType", () => { + expect(d).toBe("style"); + expect(e).toBe("default"); +}); + +it("should allow to alias 'byDependency'", () => { + expect(require("byDependency")).toBe("ok"); +}); diff --git a/test/configCases/resolve-merging/override/loader.js b/test/configCases/resolve-merging/override/loader.js new file mode 100644 index 00000000000..3bfe7dfee11 --- /dev/null +++ b/test/configCases/resolve-merging/override/loader.js @@ -0,0 +1,35 @@ +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = async function () { + const defaultResolve = this.getResolve({}); + const overrideResolve = this.getResolve({ + mainFields: [] + }); + const customKnownResolve = this.getResolve({ + dependencyType: "stylesheet" + }); + const customUnknownResolve = this.getResolve({ + dependencyType: "fizz" + }); + const resolved1 = await this.getResolve()(this.context, "package2"); + const resolved2 = await defaultResolve(this.context, "package2"); + const resolved3 = await overrideResolve(this.context, "./package"); + const resolved4 = await customKnownResolve(this.context, "package2"); + const resolved5 = await customUnknownResolve(this.context, "package2"); + // @ts-expect-error undefined should not be a valid type + expect(await defaultResolve(this.context, undefined).catch(e => "ok")).toBe( + "ok" + ); + // @ts-expect-error undefined should not be a valid type + expect(await defaultResolve(undefined, "package2").catch(e => "ok")).toBe( + "ok" + ); + // @ts-expect-error undefined should not be a valid type + expect(await defaultResolve(undefined).catch(e => "ok")).toBe("ok"); + return ` +export { default as a } from ${JSON.stringify(resolved1)}; +export { default as b } from ${JSON.stringify(resolved2)}; +export { default as c } from ${JSON.stringify(resolved3)}; +export { default as d } from ${JSON.stringify(resolved4)}; +export { default as e } from ${JSON.stringify(resolved5)}; +`; +}; diff --git a/test/configCases/resolve-merging/override/node_modules/byDependency.js b/test/configCases/resolve-merging/override/node_modules/byDependency.js new file mode 100644 index 00000000000..7748209324d --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/byDependency.js @@ -0,0 +1 @@ +module.exports = "wrong"; diff --git a/test/configCases/resolve-merging/override/node_modules/ok.js b/test/configCases/resolve-merging/override/node_modules/ok.js new file mode 100644 index 00000000000..f74a2f2b564 --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/ok.js @@ -0,0 +1 @@ +module.exports = "ok"; diff --git a/test/configCases/resolve-merging/override/node_modules/package2/default.js b/test/configCases/resolve-merging/override/node_modules/package2/default.js new file mode 100644 index 00000000000..17e060e96f9 --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/package2/default.js @@ -0,0 +1 @@ +export default "default"; diff --git a/test/configCases/resolve-merging/override/node_modules/package2/import.js b/test/configCases/resolve-merging/override/node_modules/package2/import.js new file mode 100644 index 00000000000..7d3341883b8 --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/package2/import.js @@ -0,0 +1 @@ +export default "import"; diff --git a/test/configCases/resolve-merging/override/node_modules/package2/index.js b/test/configCases/resolve-merging/override/node_modules/package2/index.js new file mode 100644 index 00000000000..95ec6bb65ed --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/package2/index.js @@ -0,0 +1 @@ +export default "index"; diff --git a/test/configCases/resolve-merging/override/node_modules/package2/package.json b/test/configCases/resolve-merging/override/node_modules/package2/package.json new file mode 100644 index 00000000000..906c77fb620 --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/package2/package.json @@ -0,0 +1,8 @@ +{ + "exports": { + "import": "./import.js", + "require": "./require.js", + "style": "./style.js", + "default": "./default.js" + } +} diff --git a/test/configCases/resolve-merging/override/node_modules/package2/require.js b/test/configCases/resolve-merging/override/node_modules/package2/require.js new file mode 100644 index 00000000000..c4159597fff --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/package2/require.js @@ -0,0 +1 @@ +export default "require"; diff --git a/test/configCases/resolve-merging/override/node_modules/package2/style.js b/test/configCases/resolve-merging/override/node_modules/package2/style.js new file mode 100644 index 00000000000..21a648dd2ac --- /dev/null +++ b/test/configCases/resolve-merging/override/node_modules/package2/style.js @@ -0,0 +1 @@ +export default "style"; diff --git a/test/configCases/resolve-merging/override/package/index.js b/test/configCases/resolve-merging/override/package/index.js new file mode 100644 index 00000000000..95ec6bb65ed --- /dev/null +++ b/test/configCases/resolve-merging/override/package/index.js @@ -0,0 +1 @@ +export default "index"; diff --git a/test/configCases/resolve-merging/override/package/main.js b/test/configCases/resolve-merging/override/package/main.js new file mode 100644 index 00000000000..b515913d5d9 --- /dev/null +++ b/test/configCases/resolve-merging/override/package/main.js @@ -0,0 +1 @@ +export default "main"; diff --git a/test/configCases/resolve-merging/override/package/module.js b/test/configCases/resolve-merging/override/package/module.js new file mode 100644 index 00000000000..503bca78c72 --- /dev/null +++ b/test/configCases/resolve-merging/override/package/module.js @@ -0,0 +1 @@ +export default "module"; diff --git a/test/configCases/resolve-merging/override/package/other.js b/test/configCases/resolve-merging/override/package/other.js new file mode 100644 index 00000000000..6f1c564263f --- /dev/null +++ b/test/configCases/resolve-merging/override/package/other.js @@ -0,0 +1 @@ +export default "other"; diff --git a/test/configCases/resolve-merging/override/package/package.json b/test/configCases/resolve-merging/override/package/package.json new file mode 100644 index 00000000000..a7ac72171e3 --- /dev/null +++ b/test/configCases/resolve-merging/override/package/package.json @@ -0,0 +1,5 @@ +{ + "main": "./main", + "module": "./module", + "other": "./other" +} diff --git a/test/configCases/resolve-merging/override/webpack.config.js b/test/configCases/resolve-merging/override/webpack.config.js new file mode 100644 index 00000000000..029400f95b9 --- /dev/null +++ b/test/configCases/resolve-merging/override/webpack.config.js @@ -0,0 +1,46 @@ +"use strict"; + +module.exports = { + resolve: { + alias: { + byDependency: "ok" + }, + byDependency: { + stylesheet: { + conditionNames: ["style", "..."] + } + } + }, + module: { + rules: [ + { + test: /aaa/, + resolve: { + mainFields: [] + } + }, + { + test: /bbb/, + resolve: { + mainFields: ["other", "..."] + } + }, + { + test: /ccc/, + resolve: { + mainFields: ["xyz", "..."] + } + }, + { + test: /ddd/, + resolve: { + byDependency: { + esm: { + mainFields: ["other", "..."] + } + } + } + } + ] + } +}; diff --git a/test/configCases/resolve/context-resolve-with-ignore/a/foo/a.js b/test/configCases/resolve/context-resolve-with-ignore/a/foo/a.js new file mode 100644 index 00000000000..e94fef18587 --- /dev/null +++ b/test/configCases/resolve/context-resolve-with-ignore/a/foo/a.js @@ -0,0 +1 @@ +export default "a"; diff --git a/test/configCases/resolve/context-resolve-with-ignore/a/foo/package.json b/test/configCases/resolve/context-resolve-with-ignore/a/foo/package.json new file mode 100644 index 00000000000..2f5d9e49074 --- /dev/null +++ b/test/configCases/resolve/context-resolve-with-ignore/a/foo/package.json @@ -0,0 +1,5 @@ +{ + "name": "foo", + "version": "1.0.0", + "module": "./a.js" +} diff --git a/test/configCases/resolve/context-resolve-with-ignore/b/foo/b.js b/test/configCases/resolve/context-resolve-with-ignore/b/foo/b.js new file mode 100644 index 00000000000..eff703ff465 --- /dev/null +++ b/test/configCases/resolve/context-resolve-with-ignore/b/foo/b.js @@ -0,0 +1 @@ +export default "b"; diff --git a/test/configCases/resolve/context-resolve-with-ignore/b/foo/package.json b/test/configCases/resolve/context-resolve-with-ignore/b/foo/package.json new file mode 100644 index 00000000000..3a389fbe8dc --- /dev/null +++ b/test/configCases/resolve/context-resolve-with-ignore/b/foo/package.json @@ -0,0 +1,5 @@ +{ + "name": "foo", + "version": "1.0.0", + "module": "./b.js" +} diff --git a/test/configCases/resolve/context-resolve-with-ignore/index.js b/test/configCases/resolve/context-resolve-with-ignore/index.js new file mode 100644 index 00000000000..11b5574fbdd --- /dev/null +++ b/test/configCases/resolve/context-resolve-with-ignore/index.js @@ -0,0 +1,7 @@ +const a = String.fromCharCode("a".charCodeAt(0)); +const b = String.fromCharCode("b".charCodeAt(0)); + +it("should compile correctly", async () => { + expect((await /* webpackMode: "lazy" */ import(`foo/${a}`)).default).toEqual({}); + expect((await /* webpackMode: "lazy" */ import(`foo/${b}`)).default).toBe("b"); +}); diff --git a/test/configCases/resolve/context-resolve-with-ignore/webpack.config.js b/test/configCases/resolve/context-resolve-with-ignore/webpack.config.js new file mode 100644 index 00000000000..69fde2acfe3 --- /dev/null +++ b/test/configCases/resolve/context-resolve-with-ignore/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + modules: [path.resolve(__dirname, "a"), path.resolve(__dirname, "b")], + alias: { + [path.resolve(__dirname, "a", "foo")]: false + } + } +}; diff --git a/test/configCases/resolve/empty-context-module/index.js b/test/configCases/resolve/empty-context-module/index.js new file mode 100644 index 00000000000..289942993cb --- /dev/null +++ b/test/configCases/resolve/empty-context-module/index.js @@ -0,0 +1,7 @@ +const id = () => Math.random(); + +it("should compile", async () => { + await expect(/* webpackMode: "lazy" */ import(`foo/${id()}`)).rejects.toBeTruthy(); + await expect(/* webpackMode: "lazy" */ import(`foo/${id()}`)).rejects.toBeTruthy(); + await expect(/* webpackMode: "lazy" */ import(`foo/${id()}`)).rejects.toBeTruthy(); +}); diff --git a/test/configCases/resolve/empty-context-module/webpack.config.js b/test/configCases/resolve/empty-context-module/webpack.config.js new file mode 100644 index 00000000000..abf9bf4e19a --- /dev/null +++ b/test/configCases/resolve/empty-context-module/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + cache: true, + resolve: { + alias: { + foo: false + }, + unsafeCache: true + } + }, + { + resolve: { + alias: { + foo: false + }, + unsafeCache: true + } + } +]; diff --git a/test/configCases/resolve/fallback/#/a.js b/test/configCases/resolve/fallback/#/a.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/resolve/fallback/#/a.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/resolve/fallback/a/1.js b/test/configCases/resolve/fallback/a/1.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/resolve/fallback/a/1.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/resolve/fallback/a/2.js b/test/configCases/resolve/fallback/a/2.js new file mode 100644 index 00000000000..f7377f82003 --- /dev/null +++ b/test/configCases/resolve/fallback/a/2.js @@ -0,0 +1 @@ +module.exports = 'not 2'; diff --git a/test/configCases/resolve/fallback/b/2.js b/test/configCases/resolve/fallback/b/2.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/configCases/resolve/fallback/b/2.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/configCases/resolve/fallback/index.js b/test/configCases/resolve/fallback/index.js new file mode 100644 index 00000000000..846ed16deb8 --- /dev/null +++ b/test/configCases/resolve/fallback/index.js @@ -0,0 +1,14 @@ +it("ignores the fallback if an existing module is present", () => { + const two = require("./b/2"); + expect(two).toBe(2); +}); + +it("can fallback if the module does not exist", () => { + const one = require("./b/1"); + expect(one).toBe(1); +}); + +it("# alias should work", () => { + const one = require("#/a"); + expect(one).toBe(1); +}); diff --git a/test/configCases/resolve/fallback/webpack.config.js b/test/configCases/resolve/fallback/webpack.config.js new file mode 100644 index 00000000000..1bf74bd3276 --- /dev/null +++ b/test/configCases/resolve/fallback/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + alias: { + "#": path.resolve(__dirname, "#") + }, + fallback: { + "./b": path.resolve(__dirname, "a") + } + } +}; diff --git a/test/configCases/resolve/function-plugins/foo.js b/test/configCases/resolve/function-plugins/foo.js new file mode 100644 index 00000000000..aef22247d75 --- /dev/null +++ b/test/configCases/resolve/function-plugins/foo.js @@ -0,0 +1 @@ +export default 1; diff --git a/test/configCases/resolve/function-plugins/index.js b/test/configCases/resolve/function-plugins/index.js new file mode 100644 index 00000000000..d967c5d0575 --- /dev/null +++ b/test/configCases/resolve/function-plugins/index.js @@ -0,0 +1,3 @@ +it("should compile", async () => { + expect(1).toBe(1); +}); diff --git a/test/configCases/resolve/function-plugins/webpack.config.js b/test/configCases/resolve/function-plugins/webpack.config.js new file mode 100644 index 00000000000..0a1d74f5d90 --- /dev/null +++ b/test/configCases/resolve/function-plugins/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +let pluginExecutionCounter = 0; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + { + apply(compiler) { + compiler.hooks.done.tap("TestPlugin", () => { + expect(pluginExecutionCounter).toBeGreaterThan(0); + }); + } + } + ], + resolve: { + plugins: [ + { + apply() { + pluginExecutionCounter += 1; + } + }, + () => { + pluginExecutionCounter += 1; + } + ] + } +}; diff --git a/test/configCases/resolve/issue-11335-context-module/index.js b/test/configCases/resolve/issue-11335-context-module/index.js new file mode 100644 index 00000000000..d4784570ea4 --- /dev/null +++ b/test/configCases/resolve/issue-11335-context-module/index.js @@ -0,0 +1,18 @@ +import a from "app/widgets/a"; +import b from "app/widgets/b"; +import c from "app/widgets/c"; + + +it("static imports order", () => { + expect(a).toBe("main/widgets/a"); + expect(b).toBe("main/widgets/b"); + expect(c).toBe("foo/widgets/c"); +}); + +const load = id => import(/* webpackMode: "eager" */ `app/widgets/${id}?query#hash`); + +it("dynamic imports order", async () => { + expect((await load("a")).default).toBe("main/widgets/a"); + expect((await load("b")).default).toBe("main/widgets/b"); + expect((await load("c")).default).toBe("foo/widgets/c"); +}); diff --git a/test/configCases/resolve/issue-11335-context-module/src/foo/widgets/b.js b/test/configCases/resolve/issue-11335-context-module/src/foo/widgets/b.js new file mode 100644 index 00000000000..9b6f2974934 --- /dev/null +++ b/test/configCases/resolve/issue-11335-context-module/src/foo/widgets/b.js @@ -0,0 +1 @@ +export default "foo/widgets/b"; diff --git a/test/configCases/resolve/issue-11335-context-module/src/foo/widgets/c.js b/test/configCases/resolve/issue-11335-context-module/src/foo/widgets/c.js new file mode 100644 index 00000000000..0de4d4fb702 --- /dev/null +++ b/test/configCases/resolve/issue-11335-context-module/src/foo/widgets/c.js @@ -0,0 +1 @@ +export default "foo/widgets/c"; diff --git a/test/configCases/resolve/issue-11335-context-module/src/main/widgets/a.js b/test/configCases/resolve/issue-11335-context-module/src/main/widgets/a.js new file mode 100644 index 00000000000..b6d0dbb4492 --- /dev/null +++ b/test/configCases/resolve/issue-11335-context-module/src/main/widgets/a.js @@ -0,0 +1 @@ +export default "main/widgets/a"; diff --git a/test/configCases/resolve/issue-11335-context-module/src/main/widgets/b.js b/test/configCases/resolve/issue-11335-context-module/src/main/widgets/b.js new file mode 100644 index 00000000000..0b8fa8212af --- /dev/null +++ b/test/configCases/resolve/issue-11335-context-module/src/main/widgets/b.js @@ -0,0 +1 @@ +export default "main/widgets/b"; diff --git a/test/configCases/resolve/issue-11335-context-module/webpack.config.js b/test/configCases/resolve/issue-11335-context-module/webpack.config.js new file mode 100644 index 00000000000..efa5b5a33a2 --- /dev/null +++ b/test/configCases/resolve/issue-11335-context-module/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + alias: { + app: [path.join(__dirname, "src/main"), path.join(__dirname, "src/foo")] + } + } +}; diff --git a/test/configCases/resolve/issue-15580/index.js b/test/configCases/resolve/issue-15580/index.js new file mode 100644 index 00000000000..6b17761ce31 --- /dev/null +++ b/test/configCases/resolve/issue-15580/index.js @@ -0,0 +1,19 @@ +const locales = import.meta.webpackContext('./locales', { + recursive: false, + regExp: /(en|hu)\.json$/i, +}); +const vuetify = import.meta.webpackContext('vuetify/lib/locale', { + recursive: false, + regExp: /(en|hu)\.json$/i, +}); + +it('should resolve "./locales"', () => { + expect(locales("./en.json")).toEqual({}); + expect(() => locales("./hu.json")).toThrow(); +}); + +it('should resolve "vuetify"', () => { + expect(vuetify("./en.json")).toEqual({}); + expect(vuetify("./hu.json")).toEqual({}); + expect(() => vuetify("./ru.json")).toThrow(); +}); diff --git a/test/configCases/resolve/issue-15580/locales/en.json b/test/configCases/resolve/issue-15580/locales/en.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/configCases/resolve/issue-15580/locales/en.json @@ -0,0 +1 @@ +{} diff --git a/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/en.json b/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/en.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/en.json @@ -0,0 +1 @@ +{} diff --git a/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/hu.json b/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/hu.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/hu.json @@ -0,0 +1 @@ +{} diff --git a/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/ru.json b/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/ru.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/test/configCases/resolve/issue-15580/node_modules/vuetify/lib/locale/ru.json @@ -0,0 +1 @@ +{} diff --git a/test/configCases/resolve/issue-15580/node_modules/vuetify/package.json b/test/configCases/resolve/issue-15580/node_modules/vuetify/package.json new file mode 100644 index 00000000000..91189b88e1d --- /dev/null +++ b/test/configCases/resolve/issue-15580/node_modules/vuetify/package.json @@ -0,0 +1,4 @@ +{ + "name": "vuetify", + "version": "1.0.0" +} diff --git a/test/configCases/resolve/issue-15580/webpack.config.js b/test/configCases/resolve/issue-15580/webpack.config.js new file mode 100644 index 00000000000..4879145be0d --- /dev/null +++ b/test/configCases/resolve/issue-15580/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + modules: ["node_modules", path.resolve(__dirname, "./node_modules")] + } +}; diff --git a/test/configCases/resolve/multi-alias/a/1.js b/test/configCases/resolve/multi-alias/a/1.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/resolve/multi-alias/a/1.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/resolve/multi-alias/b/2.js b/test/configCases/resolve/multi-alias/b/2.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/configCases/resolve/multi-alias/b/2.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/configCases/resolve/multi-alias/index.js b/test/configCases/resolve/multi-alias/index.js new file mode 100644 index 00000000000..b64161dbec4 --- /dev/null +++ b/test/configCases/resolve/multi-alias/index.js @@ -0,0 +1,6 @@ +it("should resolve both alternatives", () => { + const one = require("_/1"); + const two = require("_/2"); + expect(one).toBe(1); + expect(two).toBe(2); +}); diff --git a/test/configCases/resolve/multi-alias/webpack.config.js b/test/configCases/resolve/multi-alias/webpack.config.js new file mode 100644 index 00000000000..9aafc4545fa --- /dev/null +++ b/test/configCases/resolve/multi-alias/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + alias: { + _: [path.resolve(__dirname, "a"), path.resolve(__dirname, "b")] + } + } +}; diff --git a/test/configCases/resolve/only-module/a/1.js b/test/configCases/resolve/only-module/a/1.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/resolve/only-module/a/1.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/resolve/only-module/b/2.js b/test/configCases/resolve/only-module/b/2.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/configCases/resolve/only-module/b/2.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/configCases/resolve/only-module/index.js b/test/configCases/resolve/only-module/index.js new file mode 100644 index 00000000000..07a3d469126 --- /dev/null +++ b/test/configCases/resolve/only-module/index.js @@ -0,0 +1,6 @@ +it("should resolve both alternatives", () => { + const one = require("./b"); + const two = require("./b/2"); + expect(one).toBe(1); + expect(two).toBe(2); +}); diff --git a/test/configCases/resolve/only-module/webpack.config.js b/test/configCases/resolve/only-module/webpack.config.js new file mode 100644 index 00000000000..adf3d1a7440 --- /dev/null +++ b/test/configCases/resolve/only-module/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + alias: [ + { + alias: path.resolve(__dirname, "a/1.js"), + name: "./b", + onlyModule: true + } + ] + } +}; diff --git a/test/configCases/resolve/unsafe-cache-proxy/a/1.js b/test/configCases/resolve/unsafe-cache-proxy/a/1.js new file mode 100644 index 00000000000..bd816eaba4c --- /dev/null +++ b/test/configCases/resolve/unsafe-cache-proxy/a/1.js @@ -0,0 +1 @@ +module.exports = 1; diff --git a/test/configCases/resolve/unsafe-cache-proxy/b/2.js b/test/configCases/resolve/unsafe-cache-proxy/b/2.js new file mode 100644 index 00000000000..4bbffde1044 --- /dev/null +++ b/test/configCases/resolve/unsafe-cache-proxy/b/2.js @@ -0,0 +1 @@ +module.exports = 2; diff --git a/test/configCases/resolve/unsafe-cache-proxy/index.js b/test/configCases/resolve/unsafe-cache-proxy/index.js new file mode 100644 index 00000000000..b64161dbec4 --- /dev/null +++ b/test/configCases/resolve/unsafe-cache-proxy/index.js @@ -0,0 +1,6 @@ +it("should resolve both alternatives", () => { + const one = require("_/1"); + const two = require("_/2"); + expect(one).toBe(1); + expect(two).toBe(2); +}); diff --git a/test/configCases/resolve/unsafe-cache-proxy/webpack.config.js b/test/configCases/resolve/unsafe-cache-proxy/webpack.config.js new file mode 100644 index 00000000000..75fedeb2ce9 --- /dev/null +++ b/test/configCases/resolve/unsafe-cache-proxy/webpack.config.js @@ -0,0 +1,45 @@ +"use strict"; + +const path = require("path"); + +let getCounter = 0; +let setConter = 0; + +const unsafeCache = new Proxy( + {}, + { + get(target, key, receiver) { + getCounter += 1; + + return Reflect.get(target, key, receiver); + }, + set(target, key, value, receiver) { + setConter += 1; + + return Reflect.set(target, key, value, receiver); + } + } +); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + { + apply(compiler) { + compiler.hooks.done.tap("TestPlugin", () => { + if (getCounter === 0 || setConter === 0) { + throw new Error( + "resolve.unsafeCache doesn't work with the `Proxy`" + ); + } + }); + } + } + ], + resolve: { + alias: { + _: [path.resolve(__dirname, "a"), path.resolve(__dirname, "b")] + }, + unsafeCache + } +}; diff --git a/test/configCases/resolving/extensions-order/a b/test/configCases/resolving/extensions-order/a new file mode 100644 index 00000000000..ba0e0f3e141 --- /dev/null +++ b/test/configCases/resolving/extensions-order/a @@ -0,0 +1 @@ +module.exports = "1"; diff --git a/test/configCases/resolving/extensions-order/a.js b/test/configCases/resolving/extensions-order/a.js new file mode 100644 index 00000000000..c202b851341 --- /dev/null +++ b/test/configCases/resolving/extensions-order/a.js @@ -0,0 +1 @@ +module.exports = "2"; diff --git a/test/configCases/resolving/extensions-order/b b/test/configCases/resolving/extensions-order/b new file mode 100644 index 00000000000..d7feebaefa8 --- /dev/null +++ b/test/configCases/resolving/extensions-order/b @@ -0,0 +1 @@ +module.exports = "1" diff --git a/test/configCases/resolving/extensions-order/b.json b/test/configCases/resolving/extensions-order/b.json new file mode 100644 index 00000000000..f549b14af74 --- /dev/null +++ b/test/configCases/resolving/extensions-order/b.json @@ -0,0 +1 @@ +{ "b": "2" } diff --git a/test/configCases/resolving/extensions-order/index.js b/test/configCases/resolving/extensions-order/index.js new file mode 100644 index 00000000000..d927e9f145c --- /dev/null +++ b/test/configCases/resolving/extensions-order/index.js @@ -0,0 +1,4 @@ +it("should resolve respecting resolve.extensions order when enforceExtension: true", () => { + expect(require("./a")).toBe("2"); + expect(require("./b")).toBe("1"); +}); diff --git a/test/configCases/resolving/extensions-order/webpack.config.js b/test/configCases/resolving/extensions-order/webpack.config.js new file mode 100644 index 00000000000..2facaa1b0a2 --- /dev/null +++ b/test/configCases/resolving/extensions-order/webpack.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + resolve: { + extensions: [".js", "", ".json"] + } +}; diff --git a/test/configCases/resolving/prefer-absolute/index.js b/test/configCases/resolving/prefer-absolute/index.js new file mode 100644 index 00000000000..d4596060154 --- /dev/null +++ b/test/configCases/resolving/prefer-absolute/index.js @@ -0,0 +1,3 @@ +it("should be possible to import an absolute path", () => { + require(__filename); +}); diff --git a/test/configCases/resolving/prefer-absolute/webpack.config.js b/test/configCases/resolving/prefer-absolute/webpack.config.js new file mode 100644 index 00000000000..53fd232349d --- /dev/null +++ b/test/configCases/resolving/prefer-absolute/webpack.config.js @@ -0,0 +1,37 @@ +"use strict"; + +/** @typedef {import("enhanced-resolve").Resolver} Resolver */ +/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */ +/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */ + +/** + * @template T, R + * @typedef {import("tapable").SyncBailHook} SyncBailHook + */ + +/** @type {import("../../../../").Configuration} */ + +module.exports = { + resolve: { + preferAbsolute: true, + plugins: [ + { + /** + * @param {Resolver & { hooks: { file: SyncBailHook<[ResolveRequest, ResolveContext], void> } }} resolver resolver + */ + apply(resolver) { + resolver.hooks.file.tap("Test", (request) => { + if ( + /test.configCases.*test.configCases/.test( + /** @type {string} */ + (request.path) + ) + ) { + throw new Error("Trying to resolve as root path"); + } + }); + } + } + ] + } +}; diff --git a/test/configCases/resolving/prefer-root/index.js b/test/configCases/resolving/prefer-root/index.js new file mode 100644 index 00000000000..6affd3f1444 --- /dev/null +++ b/test/configCases/resolving/prefer-root/index.js @@ -0,0 +1,3 @@ +it("should be possible to import an root path", () => { + require("/index.js"); +}); diff --git a/test/configCases/resolving/prefer-root/webpack.config.js b/test/configCases/resolving/prefer-root/webpack.config.js new file mode 100644 index 00000000000..363f998c549 --- /dev/null +++ b/test/configCases/resolving/prefer-root/webpack.config.js @@ -0,0 +1,30 @@ +"use strict"; + +/** @typedef {import("enhanced-resolve").Resolver} Resolver */ +/** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */ +/** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */ + +/** + * @template T, R + * @typedef {import("tapable").SyncBailHook} SyncBailHook + */ + +/** @type {import("../../../../").Configuration} */ +module.exports = { + resolve: { + plugins: [ + { + /** + * @param {Resolver & { hooks: { file: SyncBailHook<[ResolveRequest, ResolveContext], void> } }} resolver resolver + */ + apply(resolver) { + resolver.hooks.file.tap("Test", (request) => { + if (request.path === "/index.js") { + throw new Error("Trying to resolve as absolute path"); + } + }); + } + } + ] + } +}; diff --git a/test/configCases/rule-set/chaining/deprecations.js b/test/configCases/rule-set/chaining/deprecations.js new file mode 100644 index 00000000000..aaf2f310def --- /dev/null +++ b/test/configCases/rule-set/chaining/deprecations.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = [ + { + code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, + message: /rules\[0\].use\[0\]/ + }, + { + code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, + message: /rules\[0\].use\[1\]/ + }, + { + code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, + message: /rules\[1\].use\[0\]/ + }, + { + code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, + message: /rules\[1\].use\[1\]/ + } +]; diff --git a/test/configCases/rule-set/chaining/loader.js b/test/configCases/rule-set/chaining/loader.js index f78d43c0b78..84836e5dae5 100644 --- a/test/configCases/rule-set/chaining/loader.js +++ b/test/configCases/rule-set/chaining/loader.js @@ -1,8 +1,8 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { var query = this.query; - if(typeof query === "object" && typeof query.get === "function") { + if (typeof query === "object" && typeof query.get === "function") { query = query.get(); } return source + "\nmodule.exports.push(" + JSON.stringify(query) + ");"; }; - diff --git a/test/configCases/rule-set/chaining/webpack.config.js b/test/configCases/rule-set/chaining/webpack.config.js index 65b6f40e563..db99c5717b6 100644 --- a/test/configCases/rule-set/chaining/webpack.config.js +++ b/test/configCases/rule-set/chaining/webpack.config.js @@ -1,13 +1,34 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ { resource: /abc\.js$/, - loader: "./loader?a!./loader?b" + use: [ + { + loader: "./loader", + options: "a" + }, + { + loader: "./loader", + options: "b" + } + ] }, { resource: /def\.js$/, - loaders: "./loader?c!./loader?d" + use: [ + { + loader: "./loader", + options: "c" + }, + { + loader: "./loader", + options: "d" + } + ] } ] } diff --git a/test/configCases/rule-set/compiler/loader.js b/test/configCases/rule-set/compiler/loader.js index 196d1ef49db..b57f18e5dae 100644 --- a/test/configCases/rule-set/compiler/loader.js +++ b/test/configCases/rule-set/compiler/loader.js @@ -1,4 +1,4 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition} */ +module.exports = function (source) { return "module.exports = " + JSON.stringify("loader matched"); }; - diff --git a/test/configCases/rule-set/compiler/webpack.config.js b/test/configCases/rule-set/compiler/webpack.config.js index 3b42db9b0b2..0cb2f868ce2 100644 --- a/test/configCases/rule-set/compiler/webpack.config.js +++ b/test/configCases/rule-set/compiler/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { name: "compiler-name", module: { diff --git a/test/configCases/rule-set/custom/loader.js b/test/configCases/rule-set/custom/loader.js index f78d43c0b78..84836e5dae5 100644 --- a/test/configCases/rule-set/custom/loader.js +++ b/test/configCases/rule-set/custom/loader.js @@ -1,8 +1,8 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { var query = this.query; - if(typeof query === "object" && typeof query.get === "function") { + if (typeof query === "object" && typeof query.get === "function") { query = query.get(); } return source + "\nmodule.exports.push(" + JSON.stringify(query) + ");"; }; - diff --git a/test/configCases/rule-set/custom/webpack.config.js b/test/configCases/rule-set/custom/webpack.config.js index 91600897164..c5e42835394 100644 --- a/test/configCases/rule-set/custom/webpack.config.js +++ b/test/configCases/rule-set/custom/webpack.config.js @@ -1,17 +1,26 @@ +"use strict"; + +/** @typedef {import("../../../../").RuleSetUseFunction} RuleSetUseFunction */ +/** @typedef {import("../../../../").RuleSetUseItem} RuleSetUseItem */ + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ { test: /[ab]\.js$/, - use: function(data) { - return { + /** @type {RuleSetUseFunction} */ + use(data) { + return /** @type {RuleSetUseItem} */ ({ loader: "./loader", options: { - resource: data.resource.replace(/^.*[\\/]/g, ""), + resource: + /** @type {string} */ + (data.resource).replace(/^.*[\\/]/g, ""), resourceQuery: data.resourceQuery, issuer: data.issuer.replace(/^.*[\\/]/g, "") } - }; + }); } } ] diff --git a/test/configCases/rule-set/oneOf/css-loader.js b/test/configCases/rule-set/oneOf/css-loader.js new file mode 100644 index 00000000000..d315e602993 --- /dev/null +++ b/test/configCases/rule-set/oneOf/css-loader.js @@ -0,0 +1,4 @@ +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { + return "module.exports='__css__'" +} \ No newline at end of file diff --git a/test/configCases/rule-set/oneOf/index.css b/test/configCases/rule-set/oneOf/index.css new file mode 100644 index 00000000000..3cf023e854b --- /dev/null +++ b/test/configCases/rule-set/oneOf/index.css @@ -0,0 +1,3 @@ +body { + color: red; +} \ No newline at end of file diff --git a/test/configCases/rule-set/oneOf/index.js b/test/configCases/rule-set/oneOf/index.js new file mode 100644 index 00000000000..8b362b5374e --- /dev/null +++ b/test/configCases/rule-set/oneOf/index.js @@ -0,0 +1,4 @@ +it("should return the content processed by css-loader instead of asset/resource", function () { + var a1 = require("./index.css"); + expect(a1).toEqual("__css__"); +}); diff --git a/test/configCases/rule-set/oneOf/style-loader.js b/test/configCases/rule-set/oneOf/style-loader.js new file mode 100644 index 00000000000..e27e1337cfb --- /dev/null +++ b/test/configCases/rule-set/oneOf/style-loader.js @@ -0,0 +1,26 @@ +/** @typedef {import("../../../../types").LoaderDefinition} LoaderDefinition */ +/** @typedef {import("../../../../types").LoaderContext<{}>} LoaderContext */ + +/** + * @type {LoaderDefinition} + */ +module.exports.pitch = function (request) { + return ` + var content = require(${stringifyRequest(this, `!!${request}`)}); + module.exports = content; + ` +}; + +/** + * @param {LoaderContext} loaderContext loaderContext + * @param {string} request request + * @returns {string} stringified request + */ +function stringifyRequest(loaderContext, request) { + return JSON.stringify( + loaderContext.utils.contextify( + loaderContext.context || loaderContext.rootContext, + request + ) + ) +} diff --git a/test/configCases/rule-set/oneOf/webpack.config.js b/test/configCases/rule-set/oneOf/webpack.config.js new file mode 100644 index 00000000000..745fe508b67 --- /dev/null +++ b/test/configCases/rule-set/oneOf/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + assetModuleFilename: "[name][ext]" + }, + module: { + rules: [ + { + test: /\.css$/, + oneOf: [ + { + use: ["./style-loader", "./css-loader"], + issuer: /\.(js)$/ + }, + { + type: "asset/resource", + issuer: /\.(css|scss|sass)$/ + } + ] + } + ] + } +}; diff --git a/test/configCases/rule-set/query/index.js b/test/configCases/rule-set/query/index.js index 7114b977882..ea461d53b7f 100644 --- a/test/configCases/rule-set/query/index.js +++ b/test/configCases/rule-set/query/index.js @@ -1,15 +1,10 @@ -it("should match rule with resource query", function() { +it("should match rule with resource query", function () { var a1 = require("./a"); - expect(a1).toEqual([ - "a" - ]); + expect(a1).toEqual(["a"]); var a2 = require("./a?loader"); - expect(a2).toEqual([ - "a", - "?query" - ]); + expect(a2).toEqual(["a", "?query"]); var a3 = require("./a?other"); - expect(a3).toEqual([ - "a" - ]); + expect(a3).toEqual(["a"]); + var a4 = require('data:application/node,module.exports = ["a"];'); + expect(a4).toEqual(["a"]); }); diff --git a/test/configCases/rule-set/query/loader.js b/test/configCases/rule-set/query/loader.js index f78d43c0b78..84836e5dae5 100644 --- a/test/configCases/rule-set/query/loader.js +++ b/test/configCases/rule-set/query/loader.js @@ -1,8 +1,8 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { var query = this.query; - if(typeof query === "object" && typeof query.get === "function") { + if (typeof query === "object" && typeof query.get === "function") { query = query.get(); } return source + "\nmodule.exports.push(" + JSON.stringify(query) + ");"; }; - diff --git a/test/configCases/rule-set/query/webpack.config.js b/test/configCases/rule-set/query/webpack.config.js index cfa3e696e5f..09afe74be2e 100644 --- a/test/configCases/rule-set/query/webpack.config.js +++ b/test/configCases/rule-set/query/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ diff --git a/test/configCases/rule-set/resolve-options/a.js b/test/configCases/rule-set/resolve-options/a.js index f7293f306a0..79895f97110 100644 --- a/test/configCases/rule-set/resolve-options/a.js +++ b/test/configCases/rule-set/resolve-options/a.js @@ -1 +1 @@ -module.exports = require("./wrong"); +module.exports = require("./wrong") + require("./normal") + require("./wrong2"); diff --git a/test/configCases/rule-set/resolve-options/b.js b/test/configCases/rule-set/resolve-options/b.js index f7293f306a0..79895f97110 100644 --- a/test/configCases/rule-set/resolve-options/b.js +++ b/test/configCases/rule-set/resolve-options/b.js @@ -1 +1 @@ -module.exports = require("./wrong"); +module.exports = require("./wrong") + require("./normal") + require("./wrong2"); diff --git a/test/configCases/rule-set/resolve-options/c.js b/test/configCases/rule-set/resolve-options/c.js new file mode 100644 index 00000000000..79895f97110 --- /dev/null +++ b/test/configCases/rule-set/resolve-options/c.js @@ -0,0 +1 @@ +module.exports = require("./wrong") + require("./normal") + require("./wrong2"); diff --git a/test/configCases/rule-set/resolve-options/index.js b/test/configCases/rule-set/resolve-options/index.js index 5baf4c239f1..1e4104ab439 100644 --- a/test/configCases/rule-set/resolve-options/index.js +++ b/test/configCases/rule-set/resolve-options/index.js @@ -1,6 +1,8 @@ it("should allow to set custom resolving rules", function() { var a = require("./a"); - expect(a).toBe("ok"); + expect(a).toBe("ok-normal-ok2"); var b = require("./b"); - expect(b).toBe("wrong"); + expect(b).toBe("ok-normal-ok2-yes"); + var c = require("./c"); + expect(c).toBe("wrong-normal-ok2"); }); diff --git a/test/configCases/rule-set/resolve-options/normal.js b/test/configCases/rule-set/resolve-options/normal.js new file mode 100644 index 00000000000..f5f0f4cc525 --- /dev/null +++ b/test/configCases/rule-set/resolve-options/normal.js @@ -0,0 +1 @@ +module.exports = "-normal-"; diff --git a/test/configCases/rule-set/resolve-options/ok.ok.js b/test/configCases/rule-set/resolve-options/ok.ok.js new file mode 100644 index 00000000000..11132c14387 --- /dev/null +++ b/test/configCases/rule-set/resolve-options/ok.ok.js @@ -0,0 +1 @@ +module.exports = "ok-ok"; diff --git a/test/configCases/rule-set/resolve-options/ok2.js b/test/configCases/rule-set/resolve-options/ok2.js new file mode 100644 index 00000000000..c0c585d76a9 --- /dev/null +++ b/test/configCases/rule-set/resolve-options/ok2.js @@ -0,0 +1 @@ +module.exports = "ok2"; diff --git a/test/configCases/rule-set/resolve-options/ok2.yes.js b/test/configCases/rule-set/resolve-options/ok2.yes.js new file mode 100644 index 00000000000..46778e20f8b --- /dev/null +++ b/test/configCases/rule-set/resolve-options/ok2.yes.js @@ -0,0 +1 @@ +module.exports = "ok2-yes"; diff --git a/test/configCases/rule-set/resolve-options/webpack.config.js b/test/configCases/rule-set/resolve-options/webpack.config.js index 9ce4b7957e1..5a03332174f 100644 --- a/test/configCases/rule-set/resolve-options/webpack.config.js +++ b/test/configCases/rule-set/resolve-options/webpack.config.js @@ -1,4 +1,12 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { + resolve: { + alias: { + "./wrong2": "./ok2" + } + }, module: { rules: [ { @@ -6,7 +14,23 @@ module.exports = { resolve: { alias: { "./wrong": "./ok" - } + }, + extensions: [".js", ".ok.js"] + } + }, + { + test: require.resolve("./b"), + resolve: { + alias: { + "./wrong": "./ok" + }, + extensions: ["...", ".ok.js"] + } + }, + { + test: require.resolve("./b"), + resolve: { + extensions: [".yes.js", "..."] } } ] diff --git a/test/configCases/rule-set/resolve-options/wrong2.js b/test/configCases/rule-set/resolve-options/wrong2.js new file mode 100644 index 00000000000..62f3d2d8dc9 --- /dev/null +++ b/test/configCases/rule-set/resolve-options/wrong2.js @@ -0,0 +1 @@ +module.exports = "wrong2"; diff --git a/test/configCases/rule-set/resolve-options/wrong2.yes.js b/test/configCases/rule-set/resolve-options/wrong2.yes.js new file mode 100644 index 00000000000..cbe1bee99f8 --- /dev/null +++ b/test/configCases/rule-set/resolve-options/wrong2.yes.js @@ -0,0 +1 @@ +module.exports = "wrong2-yes"; diff --git a/test/configCases/rule-set/simple-use-array-fn/deprecations.js b/test/configCases/rule-set/simple-use-array-fn/deprecations.js new file mode 100644 index 00000000000..f2b357d311b --- /dev/null +++ b/test/configCases/rule-set/simple-use-array-fn/deprecations.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[0\]/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[1\]/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[2\]/ } +]; diff --git a/test/configCases/rule-set/simple-use-array-fn/index.js b/test/configCases/rule-set/simple-use-array-fn/index.js index 64637f8ab82..d00943f9a2b 100644 --- a/test/configCases/rule-set/simple-use-array-fn/index.js +++ b/test/configCases/rule-set/simple-use-array-fn/index.js @@ -1,21 +1,10 @@ it("should match only one rule in a oneOf block", function() { var ab = require("./ab"); - expect(ab).toEqual([ - "ab", - "?first" - ]); + expect(ab).toEqual(["ab", "?first"]); }); it("should match with issuer and any option value", function() { var a = require("./a"); var b = require("./b"); - expect(a).toEqual([ - "a", - "?third", - ]); - expect(b).toEqual([[ - "a", - "second-3", - "?second-2", - "?second-1", - ]]); + expect(a).toEqual(["a", "?third"]); + expect(b).toEqual([["a", "second-3", "?second-2", ""]]); }); diff --git a/test/configCases/rule-set/simple-use-array-fn/loader.js b/test/configCases/rule-set/simple-use-array-fn/loader.js index f78d43c0b78..84836e5dae5 100644 --- a/test/configCases/rule-set/simple-use-array-fn/loader.js +++ b/test/configCases/rule-set/simple-use-array-fn/loader.js @@ -1,8 +1,8 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { var query = this.query; - if(typeof query === "object" && typeof query.get === "function") { + if (typeof query === "object" && typeof query.get === "function") { query = query.get(); } return source + "\nmodule.exports.push(" + JSON.stringify(query) + ");"; }; - diff --git a/test/configCases/rule-set/simple-use-array-fn/webpack.config.js b/test/configCases/rule-set/simple-use-array-fn/webpack.config.js index f16f3585dfb..0ac1aff5568 100644 --- a/test/configCases/rule-set/simple-use-array-fn/webpack.config.js +++ b/test/configCases/rule-set/simple-use-array-fn/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -7,13 +10,14 @@ module.exports = { test: { and: [/a.\.js$/, /b\.js$/] }, - loader: "./loader?first" + loader: "./loader", + options: "first" }, { test: [require.resolve("./a"), require.resolve("./c")], issuer: require.resolve("./b"), - use: data => [ - "./loader?second-1", + use: () => [ + "./loader", { loader: "./loader", options: "second-2" @@ -21,7 +25,7 @@ module.exports = { { loader: "./loader", options: { - get: function() { + get() { return "second-3"; } } diff --git a/test/configCases/rule-set/simple-use-fn-array/deprecations.js b/test/configCases/rule-set/simple-use-fn-array/deprecations.js new file mode 100644 index 00000000000..f2b357d311b --- /dev/null +++ b/test/configCases/rule-set/simple-use-fn-array/deprecations.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[0\]/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[1\]/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[2\]/ } +]; diff --git a/test/configCases/rule-set/simple-use-fn-array/index.js b/test/configCases/rule-set/simple-use-fn-array/index.js index 64637f8ab82..d00943f9a2b 100644 --- a/test/configCases/rule-set/simple-use-fn-array/index.js +++ b/test/configCases/rule-set/simple-use-fn-array/index.js @@ -1,21 +1,10 @@ it("should match only one rule in a oneOf block", function() { var ab = require("./ab"); - expect(ab).toEqual([ - "ab", - "?first" - ]); + expect(ab).toEqual(["ab", "?first"]); }); it("should match with issuer and any option value", function() { var a = require("./a"); var b = require("./b"); - expect(a).toEqual([ - "a", - "?third", - ]); - expect(b).toEqual([[ - "a", - "second-3", - "?second-2", - "?second-1", - ]]); + expect(a).toEqual(["a", "?third"]); + expect(b).toEqual([["a", "second-3", "?second-2", ""]]); }); diff --git a/test/configCases/rule-set/simple-use-fn-array/loader.js b/test/configCases/rule-set/simple-use-fn-array/loader.js index f78d43c0b78..84836e5dae5 100644 --- a/test/configCases/rule-set/simple-use-fn-array/loader.js +++ b/test/configCases/rule-set/simple-use-fn-array/loader.js @@ -1,8 +1,8 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { var query = this.query; - if(typeof query === "object" && typeof query.get === "function") { + if (typeof query === "object" && typeof query.get === "function") { query = query.get(); } return source + "\nmodule.exports.push(" + JSON.stringify(query) + ");"; }; - diff --git a/test/configCases/rule-set/simple-use-fn-array/webpack.config.js b/test/configCases/rule-set/simple-use-fn-array/webpack.config.js index 15d939bfb71..6713b5dbe36 100644 --- a/test/configCases/rule-set/simple-use-fn-array/webpack.config.js +++ b/test/configCases/rule-set/simple-use-fn-array/webpack.config.js @@ -1,13 +1,20 @@ +"use strict"; + +/** + * @param {EXPECTED_ANY[]} useArray use array + * @returns {EXPECTED_FUNCTION[]} functions + */ function createFunctionArrayFromUseArray(useArray) { - return useArray.map(function(useItem) { - return function(data) { - return useItem; - }; - }); + return useArray.map( + (useItem) => + function fn() { + return useItem; + } + ); } -var useArray = createFunctionArrayFromUseArray([ - "./loader?second-1", +const useArray = createFunctionArrayFromUseArray([ + "./loader", { loader: "./loader", options: "second-2" @@ -15,13 +22,14 @@ var useArray = createFunctionArrayFromUseArray([ { loader: "./loader", options: { - get: function() { + get() { return "second-3"; } } } ]); +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -31,7 +39,8 @@ module.exports = { test: { and: [/a.\.js$/, /b\.js$/] }, - loader: "./loader?first" + loader: "./loader", + options: "first" }, { test: [require.resolve("./a"), require.resolve("./c")], diff --git a/test/configCases/rule-set/simple/deprecations.js b/test/configCases/rule-set/simple/deprecations.js new file mode 100644 index 00000000000..f2b357d311b --- /dev/null +++ b/test/configCases/rule-set/simple/deprecations.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = [ + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[0\]/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[1\]/ }, + { code: /DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING/, message: /oneOf\[2\]/ } +]; diff --git a/test/configCases/rule-set/simple/index.js b/test/configCases/rule-set/simple/index.js index 64637f8ab82..b28830fd24a 100644 --- a/test/configCases/rule-set/simple/index.js +++ b/test/configCases/rule-set/simple/index.js @@ -1,21 +1,21 @@ -it("should match only one rule in a oneOf block", function() { +it("should match only one rule in a oneOf block", function () { var ab = require("./ab"); - expect(ab).toEqual([ - "ab", - "?first" - ]); + expect(ab).toEqual(["ab", "?first"]); }); -it("should match with issuer and any option value", function() { + +it("should not match not condition (absolute)", function () { + var ab = require("./not-ab"); + expect(ab).toEqual(["not-ab"]); +}); + +it("should not match not condition (not absolute)", function () { + var ab = require("./ab?not"); + expect(ab).toEqual(["ab"]); +}); + +it("should match with issuer and any option value", function () { var a = require("./a"); var b = require("./b"); - expect(a).toEqual([ - "a", - "?third", - ]); - expect(b).toEqual([[ - "a", - "second-3", - "?second-2", - "?second-1", - ]]); + expect(a).toEqual(["a", "?third"]); + expect(b).toEqual([["a", "second-3", "?second-2", ""]]); }); diff --git a/test/configCases/rule-set/simple/loader.js b/test/configCases/rule-set/simple/loader.js index f78d43c0b78..84836e5dae5 100644 --- a/test/configCases/rule-set/simple/loader.js +++ b/test/configCases/rule-set/simple/loader.js @@ -1,8 +1,8 @@ -module.exports = function(source) { +/** @type {import("../../../../").LoaderDefinition<{ get(): string }>} */ +module.exports = function (source) { var query = this.query; - if(typeof query === "object" && typeof query.get === "function") { + if (typeof query === "object" && typeof query.get === "function") { query = query.get(); } return source + "\nmodule.exports.push(" + JSON.stringify(query) + ");"; }; - diff --git a/test/configCases/rule-set/simple/not-ab.js b/test/configCases/rule-set/simple/not-ab.js new file mode 100644 index 00000000000..a479ee362d0 --- /dev/null +++ b/test/configCases/rule-set/simple/not-ab.js @@ -0,0 +1 @@ +module.exports = ["not-ab"]; diff --git a/test/configCases/rule-set/simple/webpack.config.js b/test/configCases/rule-set/simple/webpack.config.js index b981f42a01a..154e5325de2 100644 --- a/test/configCases/rule-set/simple/webpack.config.js +++ b/test/configCases/rule-set/simple/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { rules: [ @@ -5,15 +8,17 @@ module.exports = { oneOf: [ { test: { - and: [/a.\.js$/, /b\.js$/] + and: [/a.\.js$/, /b\.js$/, { not: /not-/ }] }, - loader: "./loader?first" + resourceQuery: { not: /not/ }, + loader: "./loader", + options: "first" }, { test: [require.resolve("./a"), require.resolve("./c")], issuer: require.resolve("./b"), use: [ - "./loader?second-1", + "./loader", { loader: "./loader", options: "second-2" @@ -21,7 +26,7 @@ module.exports = { { loader: "./loader", options: { - get: function() { + get() { return "second-3"; } } diff --git a/test/configCases/rule-set/undefined-values/index.js b/test/configCases/rule-set/undefined-values/index.js new file mode 100644 index 00000000000..242376f4280 --- /dev/null +++ b/test/configCases/rule-set/undefined-values/index.js @@ -0,0 +1 @@ +it("compile fine", () => {}); diff --git a/test/configCases/rule-set/undefined-values/webpack.config.js b/test/configCases/rule-set/undefined-values/webpack.config.js new file mode 100644 index 00000000000..04c0e7854b1 --- /dev/null +++ b/test/configCases/rule-set/undefined-values/webpack.config.js @@ -0,0 +1,16 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + module: { + rules: [ + { + test: undefined, + loader: undefined, + use: undefined, + options: undefined, + resource: undefined + } + ] + } +}; diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/five.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/five.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/five.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/four.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/four.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/four.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/one.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/one.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/one.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/six.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/six.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/six.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/test.config.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/test.config.js new file mode 100644 index 00000000000..99f8e1637f9 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/test.config.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./dir5/dir6/runtime~one.js", + "./one.js", + "./dir5/dir6/runtime~two.js", + "./dir2/two.js", + "./dir5/dir6/runtime~three.js", + "./three.js", + "./dir5/dir6/runtime~four.js", + "./dir4/four.js", + "./dir5/dir6/runtime~five.js", + "./dir5/dir6/five.js", + "./dir5/dir6/runtime~six.js", + "./dir5/dir6/six.js" + ]; + } +}; diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/three.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/three.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/three.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/two.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/two.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/two.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/webpack.config.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/webpack.config.js new file mode 100644 index 00000000000..57e2eeb16f5 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-commonjs/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + target: ["es2022", "async-node"], + entry: { + one: "./one", + "dir2/two": "./two", + "/three": "./three", + "/dir4/four": "./four", + "/dir5/dir6/five": "./five", + "/dir5/dir6/six": "./six" + }, + optimization: { + runtimeChunk: { + name: (entrypoint) => + `dir5/dir6/runtime~${entrypoint.name.split("/").pop()}` + } + } +}; diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/five.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/five.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/five.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/four.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/four.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/four.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/one.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/one.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/one.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/six.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/six.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/six.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/test.config.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/test.config.js new file mode 100644 index 00000000000..60f3ac7abbf --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/test.config.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./dir5/dir6/runtime~one.mjs", + "./one.mjs", + "./dir5/dir6/runtime~two.mjs", + "./dir2/two.mjs", + "./dir5/dir6/runtime~three.mjs", + "./three.mjs", + "./dir5/dir6/runtime~four.mjs", + "./dir4/four.mjs", + "./dir5/dir6/runtime~five.mjs", + "./dir5/dir6/five.mjs", + "./dir5/dir6/runtime~six.mjs", + "./dir5/dir6/six.mjs" + ]; + } +}; diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/three.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/three.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/three.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/two.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/two.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/two.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/webpack.config.js b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/webpack.config.js new file mode 100644 index 00000000000..95b14621d23 --- /dev/null +++ b/test/configCases/runtime/dynamic-nested-with-deep-entries-esm/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].mjs", + module: true + }, + target: ["es2022", "async-node"], + entry: { + one: "./one", + "dir2/two": "./two", + "/three": "./three", + "/dir4/four": "./four", + "/dir5/dir6/five": "./five", + "/dir5/dir6/six": "./six" + }, + optimization: { + runtimeChunk: { + name: (entrypoint) => + `dir5/dir6/runtime~${entrypoint.name.split("/").pop()}` + } + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/five.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/five.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/five.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/four.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/four.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/four.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/one.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/one.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/one.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/six.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/six.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/six.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/test.config.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/test.config.js new file mode 100644 index 00000000000..6a3519d439c --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/test.config.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./runtime/one.js", + "./one.js", + "./runtime/dir2/two.js", + "./dir2/two.js", + "./runtime/three.js", + "./three.js", + "./runtime/dir4/four.js", + "./dir4/four.js", + "./runtime/dir5/dir6/five.js", + "./dir5/dir6/five.js", + "./runtime/dir5/dir6/six.js", + "./dir5/dir6/six.js" + ]; + } +}; diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/three.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/three.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/three.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/two.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/two.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/two.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-commonjs/webpack.config.js b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/webpack.config.js new file mode 100644 index 00000000000..415ab9ef70e --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-commonjs/webpack.config.js @@ -0,0 +1,22 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + target: ["es2022", "async-node"], + entry: { + one: "./one", + "dir2/two": "./two", + "/three": "./three", + "/dir4/four": "./four", + "/dir5/dir6/five": "./five", + "/dir5/dir6/six": "./six" + }, + optimization: { + runtimeChunk: { + name: (entrypoint) => `runtime/${entrypoint.name.replace(/^\/+/g, "")}` + } + } +}; diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/five.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/five.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/five.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/four.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/four.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/four.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/one.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/one.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/one.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/six.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/six.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/six.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/test.config.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/test.config.js new file mode 100644 index 00000000000..4e7d583c9cb --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/test.config.js @@ -0,0 +1,20 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./runtime/one.mjs", + "./one.mjs", + "./runtime/dir2/two.mjs", + "./dir2/two.mjs", + "./runtime/three.mjs", + "./three.mjs", + "./runtime/dir4/four.mjs", + "./dir4/four.mjs", + "./runtime/dir5/dir6/five.mjs", + "./dir5/dir6/five.mjs", + "./runtime/dir5/dir6/six.mjs", + "./dir5/dir6/six.mjs" + ]; + } +}; diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/three.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/three.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/three.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/two.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/two.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/two.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/dynamic-with-deep-entries-esm/webpack.config.js b/test/configCases/runtime/dynamic-with-deep-entries-esm/webpack.config.js new file mode 100644 index 00000000000..4e6a39a8b41 --- /dev/null +++ b/test/configCases/runtime/dynamic-with-deep-entries-esm/webpack.config.js @@ -0,0 +1,26 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].mjs", + module: true + }, + target: ["es2022", "async-node"], + entry: { + one: "./one", + "dir2/two": "./two", + "/three": "./three", + "/dir4/four": "./four", + "/dir5/dir6/five": "./five", + "/dir5/dir6/six": "./six" + }, + optimization: { + runtimeChunk: { + name: (entrypoint) => `runtime/${entrypoint.name.replace(/^\/+/g, "")}` + } + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/runtime/entries-in-runtime/async.js b/test/configCases/runtime/entries-in-runtime/async.js new file mode 100644 index 00000000000..7461f8f346d --- /dev/null +++ b/test/configCases/runtime/entries-in-runtime/async.js @@ -0,0 +1 @@ +console.log("split"); diff --git a/test/configCases/runtime/entries-in-runtime/index.js b/test/configCases/runtime/entries-in-runtime/index.js new file mode 100644 index 00000000000..d595b906601 --- /dev/null +++ b/test/configCases/runtime/entries-in-runtime/index.js @@ -0,0 +1,11 @@ +import path from "path"; +import fs from "fs"; + +it("should not have references to chunks of unrelated entrypoints in runtime", () => { + const content = fs.readFileSync( + path.resolve(__dirname, "runtime.js"), + "utf-8" + ); + expect(content).not.toContain("other-entry"); + expect(content).not.toContain("split"); +}); diff --git a/test/configCases/runtime/entries-in-runtime/main.js b/test/configCases/runtime/entries-in-runtime/main.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/runtime/entries-in-runtime/other-entry.js b/test/configCases/runtime/entries-in-runtime/other-entry.js new file mode 100644 index 00000000000..0a829ac01ff --- /dev/null +++ b/test/configCases/runtime/entries-in-runtime/other-entry.js @@ -0,0 +1,2 @@ +import "./split"; +import("./async"); diff --git a/test/configCases/runtime/entries-in-runtime/split.js b/test/configCases/runtime/entries-in-runtime/split.js new file mode 100644 index 00000000000..7461f8f346d --- /dev/null +++ b/test/configCases/runtime/entries-in-runtime/split.js @@ -0,0 +1 @@ +console.log("split"); diff --git a/test/configCases/runtime/entries-in-runtime/test.config.js b/test/configCases/runtime/entries-in-runtime/test.config.js new file mode 100644 index 00000000000..b037c503597 --- /dev/null +++ b/test/configCases/runtime/entries-in-runtime/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.js", "./main.js", "./first-entry.js"]; + } +}; diff --git a/test/configCases/runtime/entries-in-runtime/webpack.config.js b/test/configCases/runtime/entries-in-runtime/webpack.config.js new file mode 100644 index 00000000000..8e78c0e713e --- /dev/null +++ b/test/configCases/runtime/entries-in-runtime/webpack.config.js @@ -0,0 +1,41 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + entry: { + main: "./main", + "first-entry": { + dependOn: "main", + import: "./index" + }, + "other-entry": { + dependOn: "main", + import: "./other-entry" + } + }, + target: "web", + node: { + __dirname: false, + __filename: false + }, + externalsPresets: { + node: true + }, + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + split: { + chunks: "all", + name: "split", + test: /split\.js$/, + enforce: true + } + } + } + } +}; diff --git a/test/configCases/runtime/invalid-esm-export/esm-export.js b/test/configCases/runtime/invalid-esm-export/esm-export.js new file mode 100644 index 00000000000..61d366eb252 --- /dev/null +++ b/test/configCases/runtime/invalid-esm-export/esm-export.js @@ -0,0 +1 @@ +export const foo = "foo"; diff --git a/test/configCases/runtime/invalid-esm-export/esm-import-cjs-export.js b/test/configCases/runtime/invalid-esm-export/esm-import-cjs-export.js new file mode 100644 index 00000000000..23b45091543 --- /dev/null +++ b/test/configCases/runtime/invalid-esm-export/esm-import-cjs-export.js @@ -0,0 +1,2 @@ +import { foo } from "./esm-export"; +module.exports = foo + "bar"; diff --git a/test/configCases/runtime/invalid-esm-export/index.js b/test/configCases/runtime/invalid-esm-export/index.js new file mode 100644 index 00000000000..3f4958b21c6 --- /dev/null +++ b/test/configCases/runtime/invalid-esm-export/index.js @@ -0,0 +1,7 @@ +it("should throw exception when module.exports is assigned in es module", function() { + expect(function() { + require("./esm-import-cjs-export"); + }).toThrow( + 'ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ./esm-import-cjs-export.js' + ); +}); diff --git a/test/configCases/runtime/invalid-esm-export/webpack.config.js b/test/configCases/runtime/invalid-esm-export/webpack.config.js new file mode 100644 index 00000000000..c19d15e8f12 --- /dev/null +++ b/test/configCases/runtime/invalid-esm-export/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development" +}; diff --git a/test/configCases/runtime/module-not-found-error-with-interception/helper.js b/test/configCases/runtime/module-not-found-error-with-interception/helper.js new file mode 100644 index 00000000000..4f51f7bfa98 --- /dev/null +++ b/test/configCases/runtime/module-not-found-error-with-interception/helper.js @@ -0,0 +1 @@ +module.exports = "helper"; diff --git a/test/configCases/runtime/module-not-found-error-with-interception/index.js b/test/configCases/runtime/module-not-found-error-with-interception/index.js new file mode 100644 index 00000000000..ce12fdf77c2 --- /dev/null +++ b/test/configCases/runtime/module-not-found-error-with-interception/index.js @@ -0,0 +1,22 @@ +it("should throw helpful error when module is not found at runtime", function () { + const helper = require("./helper"); + expect(helper).toBe("helper"); + + const moduleId = Object.keys(__webpack_modules__).find((id) => + id.includes("helper") + ); + expect(moduleId).toBeDefined(); + delete __webpack_module_cache__[moduleId]; + delete __webpack_modules__[moduleId]; + + let thrownError; + try { + require("./helper"); + } catch (e) { + thrownError = e; + } + + expect(thrownError).toBeDefined(); + expect(thrownError.message).toMatch(/Cannot find module/); + expect(thrownError.code).toBe("TEST"); +}); diff --git a/test/configCases/runtime/module-not-found-error-with-interception/webpack.config.js b/test/configCases/runtime/module-not-found-error-with-interception/webpack.config.js new file mode 100644 index 00000000000..67cbba43b1b --- /dev/null +++ b/test/configCases/runtime/module-not-found-error-with-interception/webpack.config.js @@ -0,0 +1,71 @@ +"use strict"; + +const { RuntimeGlobals, RuntimeModule, Template } = require("../../../../"); + +/** @typedef {import("../../../../").Compilation} Compilation */ + +class ReactRefreshRuntimeModule extends RuntimeModule { + constructor() { + super("react refresh", 5); + } + + generate() { + const compilation = /** @type {Compilation} */ (this.compilation); + const { runtimeTemplate } = compilation; + return Template.asString([ + `if (${RuntimeGlobals.interceptModuleExecution}) {`, + Template.indent([ + `${ + RuntimeGlobals.interceptModuleExecution + }.push(${runtimeTemplate.basicFunction("options", [ + "var originalFactory = options.factory;", + `options.factory = ${runtimeTemplate.basicFunction( + "moduleObject, moduleExports, webpackRequire", + [ + "if (!originalFactory) {", + Template.indent([ + 'var e = new Error("Cannot find module");', + "e.code = 'TEST'", + "throw e" + ]), + "}", + Template.indent( + "originalFactory.call(this, moduleObject, moduleExports, webpackRequire);" + ) + ] + )}` + ])})` + ]), + "}" + ]); + } +} + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + pathinfo: true + }, + plugins: [ + { + apply(compiler) { + compiler.hooks.compilation.tap( + "ReactFreshWebpackPlugin", + (compilation) => { + compilation.hooks.additionalTreeRuntimeRequirements.tap( + "ReactFreshWebpackPlugin", + (chunk, set) => { + set.add(RuntimeGlobals.interceptModuleExecution); + compilation.addRuntimeModule( + chunk, + new ReactRefreshRuntimeModule() + ); + } + ); + } + ); + } + } + ] +}; diff --git a/test/configCases/runtime/module-not-found-error/helper.js b/test/configCases/runtime/module-not-found-error/helper.js new file mode 100644 index 00000000000..4f51f7bfa98 --- /dev/null +++ b/test/configCases/runtime/module-not-found-error/helper.js @@ -0,0 +1 @@ +module.exports = "helper"; diff --git a/test/configCases/runtime/module-not-found-error/index.js b/test/configCases/runtime/module-not-found-error/index.js new file mode 100644 index 00000000000..5fd0d8a49bf --- /dev/null +++ b/test/configCases/runtime/module-not-found-error/index.js @@ -0,0 +1,39 @@ +it("should throw helpful error when module is not found at runtime", function () { + // First, require the helper module to get its id + const helper = require("./helper"); + expect(helper).toBe("helper"); + + // Find the module id for helper.js + const moduleId = Object.keys(__webpack_modules__).find((id) => + id.includes("helper") + ); + expect(moduleId).toBeDefined(); + + // Delete the module from cache and modules to simulate a corrupted state + delete __webpack_module_cache__[moduleId]; + delete __webpack_modules__[moduleId]; + + // Now trying to require the module should throw a helpful error matching Node.js format + let thrownError; + try { + require("./helper"); + } catch (e) { + thrownError = e; + } + + expect(thrownError).toBeDefined(); + expect(thrownError.message).toMatch(/Cannot find module/); + expect(thrownError.code).toBe("MODULE_NOT_FOUND"); + + // Ensure the module cache is cleared + let thrownError2; + try { + require("./helper"); + } catch (e) { + thrownError2 = e; + } + + expect(thrownError2).toBeDefined(); + expect(thrownError2.message).toMatch(/Cannot find module/); + expect(thrownError2.code).toBe("MODULE_NOT_FOUND"); +}); diff --git a/test/configCases/runtime/module-not-found-error/webpack.config.js b/test/configCases/runtime/module-not-found-error/webpack.config.js new file mode 100644 index 00000000000..a70d52455a7 --- /dev/null +++ b/test/configCases/runtime/module-not-found-error/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + pathinfo: true, + strictModuleErrorHandling: false + } +}; diff --git a/test/configCases/runtime/no-runtime-per-entry/index.js b/test/configCases/runtime/no-runtime-per-entry/index.js new file mode 100644 index 00000000000..82855ecd8e9 --- /dev/null +++ b/test/configCases/runtime/no-runtime-per-entry/index.js @@ -0,0 +1 @@ +it("should load without runtime", () => {}); diff --git a/test/configCases/runtime/no-runtime-per-entry/test.config.js b/test/configCases/runtime/no-runtime-per-entry/test.config.js new file mode 100644 index 00000000000..d9a38d25b63 --- /dev/null +++ b/test/configCases/runtime/no-runtime-per-entry/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return "./main.js"; + } +}; diff --git a/test/configCases/runtime/no-runtime-per-entry/webpack.config.js b/test/configCases/runtime/no-runtime-per-entry/webpack.config.js new file mode 100644 index 00000000000..c0e60c4a397 --- /dev/null +++ b/test/configCases/runtime/no-runtime-per-entry/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + main: { + import: "./index", + runtime: false + } + }, + target: "web", + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single" + } +}; diff --git a/test/configCases/runtime/opt-in-finally/index.js b/test/configCases/runtime/opt-in-finally/index.js index 5d0bac929f9..576d2e21499 100644 --- a/test/configCases/runtime/opt-in-finally/index.js +++ b/test/configCases/runtime/opt-in-finally/index.js @@ -1,8 +1,8 @@ it("should throw exception on every try to load a module", function() { expect(function() { require("./exception"); - }).toThrowError(); + }).toThrow(); expect(function() { require("./exception"); - }).toThrowError(); + }).toThrow(); }); diff --git a/test/configCases/runtime/opt-in-finally/webpack.config.js b/test/configCases/runtime/opt-in-finally/webpack.config.js index 15a47b1f6e4..ca77f588c2b 100644 --- a/test/configCases/runtime/opt-in-finally/webpack.config.js +++ b/test/configCases/runtime/opt-in-finally/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { output: { strictModuleExceptionHandling: true diff --git a/test/configCases/runtime/opt-in-finally2/exception.js b/test/configCases/runtime/opt-in-finally2/exception.js new file mode 100644 index 00000000000..74f5ab436d5 --- /dev/null +++ b/test/configCases/runtime/opt-in-finally2/exception.js @@ -0,0 +1 @@ +throw new Error("Exception"); diff --git a/test/configCases/runtime/opt-in-finally2/index.js b/test/configCases/runtime/opt-in-finally2/index.js new file mode 100644 index 00000000000..576d2e21499 --- /dev/null +++ b/test/configCases/runtime/opt-in-finally2/index.js @@ -0,0 +1,8 @@ +it("should throw exception on every try to load a module", function() { + expect(function() { + require("./exception"); + }).toThrow(); + expect(function() { + require("./exception"); + }).toThrow(); +}); diff --git a/test/configCases/runtime/opt-in-finally2/webpack.config.js b/test/configCases/runtime/opt-in-finally2/webpack.config.js new file mode 100644 index 00000000000..5a7310dea04 --- /dev/null +++ b/test/configCases/runtime/opt-in-finally2/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + strictModuleErrorHandling: true + } +}; diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/five.js b/test/configCases/runtime/single-with-deep-entries-commonjs/five.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/five.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/four.js b/test/configCases/runtime/single-with-deep-entries-commonjs/four.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/four.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/one.js b/test/configCases/runtime/single-with-deep-entries-commonjs/one.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/one.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/six.js b/test/configCases/runtime/single-with-deep-entries-commonjs/six.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/six.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/test.config.js b/test/configCases/runtime/single-with-deep-entries-commonjs/test.config.js new file mode 100644 index 00000000000..e203772ca75 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/test.config.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./runtime.js", + "./one.js", + "./dir2/two.js", + "./three.js", + "./dir4/four.js", + "./dir5/dir6/five.js", + "./dir5/dir6/six.js" + ]; + } +}; diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/three.js b/test/configCases/runtime/single-with-deep-entries-commonjs/three.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/three.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/two.js b/test/configCases/runtime/single-with-deep-entries-commonjs/two.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/two.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-commonjs/webpack.config.js b/test/configCases/runtime/single-with-deep-entries-commonjs/webpack.config.js new file mode 100644 index 00000000000..200a0299e89 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-commonjs/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + target: ["es2022", "async-node"], + entry: { + one: "./one", + "dir2/two": "./two", + "/three": "./three", + "/dir4/four": "./four", + "/dir5/dir6/five": "./five", + "/dir5/dir6/six": "./six" + }, + optimization: { + runtimeChunk: "single" + } +}; diff --git a/test/configCases/runtime/single-with-deep-entries-esm/five.js b/test/configCases/runtime/single-with-deep-entries-esm/five.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/five.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-esm/four.js b/test/configCases/runtime/single-with-deep-entries-esm/four.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/four.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-esm/one.js b/test/configCases/runtime/single-with-deep-entries-esm/one.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/one.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-esm/six.js b/test/configCases/runtime/single-with-deep-entries-esm/six.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/six.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-esm/test.config.js b/test/configCases/runtime/single-with-deep-entries-esm/test.config.js new file mode 100644 index 00000000000..76b809e740d --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/test.config.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = { + findBundle() { + return [ + "./runtime.mjs", + "./one.mjs", + "./dir2/two.mjs", + "./three.mjs", + "./dir4/four.mjs", + "./dir5/dir6/five.mjs", + "./dir5/dir6/six.mjs" + ]; + } +}; diff --git a/test/configCases/runtime/single-with-deep-entries-esm/three.js b/test/configCases/runtime/single-with-deep-entries-esm/three.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/three.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-esm/two.js b/test/configCases/runtime/single-with-deep-entries-esm/two.js new file mode 100644 index 00000000000..ba421732e06 --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/two.js @@ -0,0 +1 @@ +it("should compile", () => {}); diff --git a/test/configCases/runtime/single-with-deep-entries-esm/webpack.config.js b/test/configCases/runtime/single-with-deep-entries-esm/webpack.config.js new file mode 100644 index 00000000000..e9b39ac50ca --- /dev/null +++ b/test/configCases/runtime/single-with-deep-entries-esm/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].mjs", + module: true + }, + target: ["es2022", "async-node"], + entry: { + one: "./one", + "dir2/two": "./two", + "/three": "./three", + "/dir4/four": "./four", + "/dir5/dir6/five": "./five", + "/dir5/dir6/six": "./six" + }, + optimization: { + runtimeChunk: "single" + }, + experiments: { + outputModule: true + } +}; diff --git a/test/configCases/runtime/target-webworker-with-dynamic/async.js b/test/configCases/runtime/target-webworker-with-dynamic/async.js new file mode 100644 index 00000000000..f65ad42a678 --- /dev/null +++ b/test/configCases/runtime/target-webworker-with-dynamic/async.js @@ -0,0 +1 @@ +export default "async"; diff --git a/test/configCases/runtime/target-webworker-with-dynamic/index.js b/test/configCases/runtime/target-webworker-with-dynamic/index.js new file mode 100644 index 00000000000..92623852cde --- /dev/null +++ b/test/configCases/runtime/target-webworker-with-dynamic/index.js @@ -0,0 +1,7 @@ +it("should compile and run", done => { + expect(true).toBe(true); + import("./async").then(module => { + expect(module.default).toBe("async"); + done(); + }, done); +}); diff --git a/test/configCases/runtime/target-webworker-with-dynamic/test.config.js b/test/configCases/runtime/target-webworker-with-dynamic/test.config.js new file mode 100644 index 00000000000..5760e2030f0 --- /dev/null +++ b/test/configCases/runtime/target-webworker-with-dynamic/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.js", "./main.js"]; + } +}; diff --git a/test/configCases/runtime/target-webworker-with-dynamic/webpack.config.js b/test/configCases/runtime/target-webworker-with-dynamic/webpack.config.js new file mode 100644 index 00000000000..0b3f260eae9 --- /dev/null +++ b/test/configCases/runtime/target-webworker-with-dynamic/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: "webworker", + devtool: false, + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single" + } +}; diff --git a/test/configCases/runtime/target-webworker/index.js b/test/configCases/runtime/target-webworker/index.js new file mode 100644 index 00000000000..0acee55e319 --- /dev/null +++ b/test/configCases/runtime/target-webworker/index.js @@ -0,0 +1,3 @@ +it("should compile and run", () => { + expect(true).toBe(true) +}); diff --git a/test/configCases/runtime/target-webworker/test.config.js b/test/configCases/runtime/target-webworker/test.config.js new file mode 100644 index 00000000000..5760e2030f0 --- /dev/null +++ b/test/configCases/runtime/target-webworker/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.js", "./main.js"]; + } +}; diff --git a/test/configCases/runtime/target-webworker/webpack.config.js b/test/configCases/runtime/target-webworker/webpack.config.js new file mode 100644 index 00000000000..0b3f260eae9 --- /dev/null +++ b/test/configCases/runtime/target-webworker/webpack.config.js @@ -0,0 +1,13 @@ +"use strict"; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + target: "webworker", + devtool: false, + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single" + } +}; diff --git a/test/configCases/scope-hoisting/class-naming/webpack.config.js b/test/configCases/scope-hoisting/class-naming/webpack.config.js index 59e948b1212..40cc8810a1e 100644 --- a/test/configCases/scope-hoisting/class-naming/webpack.config.js +++ b/test/configCases/scope-hoisting/class-naming/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { optimization: { concatenateModules: true diff --git a/test/configCases/scope-hoisting/create-dll-plugin/test.config.js b/test/configCases/scope-hoisting/create-dll-plugin/test.config.js index 08ea6c319c8..67028ae7c8c 100644 --- a/test/configCases/scope-hoisting/create-dll-plugin/test.config.js +++ b/test/configCases/scope-hoisting/create-dll-plugin/test.config.js @@ -1 +1,3 @@ -exports.noTests = true; +"use strict"; + +module.exports.noTests = true; diff --git a/test/configCases/scope-hoisting/create-dll-plugin/webpack.config.js b/test/configCases/scope-hoisting/create-dll-plugin/webpack.config.js index f169ea12e25..6f9cdcfc0ab 100644 --- a/test/configCases/scope-hoisting/create-dll-plugin/webpack.config.js +++ b/test/configCases/scope-hoisting/create-dll-plugin/webpack.config.js @@ -1,5 +1,9 @@ +"use strict"; + const path = require("path"); -var webpack = require("../../../../"); +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { entry: ["./index.js"], plugins: [ diff --git a/test/configCases/scope-hoisting/dll-plugin/webpack.config.js b/test/configCases/scope-hoisting/dll-plugin/webpack.config.js index 14a6d08ccfe..7a6adaad6f6 100644 --- a/test/configCases/scope-hoisting/dll-plugin/webpack.config.js +++ b/test/configCases/scope-hoisting/dll-plugin/webpack.config.js @@ -1,4 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { plugins: [ new webpack.DllReferencePlugin({ @@ -8,9 +12,9 @@ module.exports = { "./module": { id: 1, buildMeta: { - exportsType: "namespace", - providedExports: ["default"] - } + exportsType: "namespace" + }, + exports: ["default"] } } }), diff --git a/test/configCases/scope-hoisting/esModule/index.js b/test/configCases/scope-hoisting/esModule/index.js new file mode 100644 index 00000000000..769d4eeba44 --- /dev/null +++ b/test/configCases/scope-hoisting/esModule/index.js @@ -0,0 +1,6 @@ +it("should have the __esModule flag", () => { + return import("./module").then(mod => { + expect(mod.__esModule).toBe(true); + expect(mod.default).toBe(84); + }) +}) diff --git a/test/configCases/scope-hoisting/esModule/module.js b/test/configCases/scope-hoisting/esModule/module.js new file mode 100644 index 00000000000..a6fa9eb3dd6 --- /dev/null +++ b/test/configCases/scope-hoisting/esModule/module.js @@ -0,0 +1,3 @@ +import other from "./other"; + +export default other * 2; diff --git a/test/configCases/scope-hoisting/esModule/other.js b/test/configCases/scope-hoisting/esModule/other.js new file mode 100644 index 00000000000..7a4e8a723a4 --- /dev/null +++ b/test/configCases/scope-hoisting/esModule/other.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/configCases/scope-hoisting/esModule/webpack.config.js b/test/configCases/scope-hoisting/esModule/webpack.config.js new file mode 100644 index 00000000000..c7e33f096d8 --- /dev/null +++ b/test/configCases/scope-hoisting/esModule/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/scope-hoisting/export-global/index.js b/test/configCases/scope-hoisting/export-global/index.js new file mode 100644 index 00000000000..54650d45fd3 --- /dev/null +++ b/test/configCases/scope-hoisting/export-global/index.js @@ -0,0 +1,7 @@ +import { process as p } from "./module"; +import { process as p2 } from "./module2"; + +it("should export globals correctly", () => { + expect(p).toBe(42); + expect(p2).toBe(process); +}); diff --git a/test/configCases/scope-hoisting/export-global/module.js b/test/configCases/scope-hoisting/export-global/module.js new file mode 100644 index 00000000000..f57b982f308 --- /dev/null +++ b/test/configCases/scope-hoisting/export-global/module.js @@ -0,0 +1,2 @@ +const process = 42; +export { process }; diff --git a/test/configCases/scope-hoisting/export-global/module2.js b/test/configCases/scope-hoisting/export-global/module2.js new file mode 100644 index 00000000000..c62638de01a --- /dev/null +++ b/test/configCases/scope-hoisting/export-global/module2.js @@ -0,0 +1,2 @@ +const p = process; +export { p as process }; diff --git a/test/configCases/scope-hoisting/export-global/webpack.config.js b/test/configCases/scope-hoisting/export-global/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/scope-hoisting/export-global/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/scope-hoisting/harmony-pure-default/index.js b/test/configCases/scope-hoisting/harmony-pure-default/index.js new file mode 100644 index 00000000000..9aa10c3e9fb --- /dev/null +++ b/test/configCases/scope-hoisting/harmony-pure-default/index.js @@ -0,0 +1,15 @@ +import x1, { value as v1 } from "./module1"; +import x2, { value as v2 } from "./module2"; +import { value as v3 } from "./module3"; +import x4, { value as v4 } from "./module4"; + +it("should not execute exports when annotated with pure comment", () => { + expect(v1).toBe(42); + expect(v2).toBe(42); + expect(v3).toBe(42); + expect(v4).toBe(42); +}); + +var x = /*#__PURE__*/(function() { + return x1 + x2 + x4; +}); diff --git a/test/configCases/scope-hoisting/harmony-pure-default/module1.js b/test/configCases/scope-hoisting/harmony-pure-default/module1.js new file mode 100644 index 00000000000..ff5746bdac4 --- /dev/null +++ b/test/configCases/scope-hoisting/harmony-pure-default/module1.js @@ -0,0 +1,9 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export default /*#__PURE__*/inc(); + +export { value }; diff --git a/test/configCases/scope-hoisting/harmony-pure-default/module2.js b/test/configCases/scope-hoisting/harmony-pure-default/module2.js new file mode 100644 index 00000000000..cf69c28f83d --- /dev/null +++ b/test/configCases/scope-hoisting/harmony-pure-default/module2.js @@ -0,0 +1,9 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export default (/*#__PURE__*/inc()); + +export { value }; diff --git a/test/configCases/scope-hoisting/harmony-pure-default/module3.js b/test/configCases/scope-hoisting/harmony-pure-default/module3.js new file mode 100644 index 00000000000..e7e874cd6d3 --- /dev/null +++ b/test/configCases/scope-hoisting/harmony-pure-default/module3.js @@ -0,0 +1,9 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export default /*#__PURE__*/(inc()); + +export { value }; diff --git a/test/configCases/scope-hoisting/harmony-pure-default/module4.js b/test/configCases/scope-hoisting/harmony-pure-default/module4.js new file mode 100644 index 00000000000..c312ca1772a --- /dev/null +++ b/test/configCases/scope-hoisting/harmony-pure-default/module4.js @@ -0,0 +1,15 @@ +let value = 42; + +const inc = () => { + value++; +}; + +export +// hello +default +// world +/*#__PURE__*/ +inc() +; + +export { value }; diff --git a/test/configCases/scope-hoisting/harmony-pure-default/webpack.config.js b/test/configCases/scope-hoisting/harmony-pure-default/webpack.config.js new file mode 100644 index 00000000000..5f8adbc6af9 --- /dev/null +++ b/test/configCases/scope-hoisting/harmony-pure-default/webpack.config.js @@ -0,0 +1,10 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + optimization: { + minimize: true, + concatenateModules: true + } +}; diff --git a/test/configCases/scope-hoisting/issue-11897/cjs.js b/test/configCases/scope-hoisting/issue-11897/cjs.js new file mode 100644 index 00000000000..4b1b961abd6 --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/cjs.js @@ -0,0 +1 @@ +module.exports = { flag: true }; diff --git a/test/configCases/scope-hoisting/issue-11897/iife.js b/test/configCases/scope-hoisting/issue-11897/iife.js new file mode 100644 index 00000000000..6ea4603aa4e --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/iife.js @@ -0,0 +1,4 @@ +(function () {})(); + +// prettier-ignore +export const value = true diff --git a/test/configCases/scope-hoisting/issue-11897/index.js b/test/configCases/scope-hoisting/issue-11897/index.js new file mode 100644 index 00000000000..0da1213e66a --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/index.js @@ -0,0 +1,22 @@ +import obj from "./cjs"; +// prettier-ignore +obj.flag = true +import { value } from "./module"; +import { value as value2 } from "./iife"; +import { value as value3 } from "./module?2"; +import { value as value4 } from "./module2"; +import { value as value5 } from "./module3"; +import { value as value6 } from "./module4"; +import { value as value7 } from "./module5"; +obj.flag = true; + +it("should not break on ASI-code", () => { + expect(obj.flag).toBe(true); + expect(value).toBe(true); + expect(value2).toBe(true); + expect(value3).toBe(true); + expect(value4).toBe(true); + expect(value5).toBe(true); + expect(value6).toBe(true); + expect(value7).toBe(true); +}); diff --git a/test/configCases/scope-hoisting/issue-11897/module.js b/test/configCases/scope-hoisting/issue-11897/module.js new file mode 100644 index 00000000000..e76db3f11e7 --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/module.js @@ -0,0 +1,4 @@ +obj.flag++; +import obj from "./cjs"; +// prettier-ignore +export const value = true diff --git a/test/configCases/scope-hoisting/issue-11897/module2.js b/test/configCases/scope-hoisting/issue-11897/module2.js new file mode 100644 index 00000000000..d948c4a4cc4 --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/module2.js @@ -0,0 +1,3 @@ +[].forEach(()=> {}) + +export let value = true diff --git a/test/configCases/scope-hoisting/issue-11897/module3.js b/test/configCases/scope-hoisting/issue-11897/module3.js new file mode 100644 index 00000000000..12849315e6d --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/module3.js @@ -0,0 +1,4 @@ + // comment +/d+/ + +export let value = true diff --git a/test/configCases/scope-hoisting/issue-11897/module4.js b/test/configCases/scope-hoisting/issue-11897/module4.js new file mode 100644 index 00000000000..40e3c641da9 --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/module4.js @@ -0,0 +1,5 @@ + /** comment */ ++x; + +var x = 1; + +export let value = true diff --git a/test/configCases/scope-hoisting/issue-11897/module5.js b/test/configCases/scope-hoisting/issue-11897/module5.js new file mode 100644 index 00000000000..d97cbd83d56 --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/module5.js @@ -0,0 +1,5 @@ +/** comment */--x; + +var x = 1; + +export let value = true diff --git a/test/configCases/scope-hoisting/issue-11897/webpack.config.js b/test/configCases/scope-hoisting/issue-11897/webpack.config.js new file mode 100644 index 00000000000..40cc8810a1e --- /dev/null +++ b/test/configCases/scope-hoisting/issue-11897/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + concatenateModules: true + } +}; diff --git a/test/configCases/scope-hoisting/named-modules/webpack.config.js b/test/configCases/scope-hoisting/named-modules/webpack.config.js index ef65c17d702..0d76e646262 100644 --- a/test/configCases/scope-hoisting/named-modules/webpack.config.js +++ b/test/configCases/scope-hoisting/named-modules/webpack.config.js @@ -1,7 +1,11 @@ -var webpack = require("../../../../"); +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { - plugins: [ - new webpack.NamedModulesPlugin(), - new webpack.optimize.ModuleConcatenationPlugin() - ] + optimization: { + moduleIds: "named", + usedExports: true, + providedExports: true, + concatenateModules: true + } }; diff --git a/test/configCases/scope-hoisting/strictThisContextOnImports/webpack.config.js b/test/configCases/scope-hoisting/strictThisContextOnImports/webpack.config.js index 9cd2bdf568e..7a3a1f8b0a2 100644 --- a/test/configCases/scope-hoisting/strictThisContextOnImports/webpack.config.js +++ b/test/configCases/scope-hoisting/strictThisContextOnImports/webpack.config.js @@ -1,4 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { module: { strictThisContextOnImports: true diff --git a/test/configCases/sharing/consume-module-export-interop/index.js b/test/configCases/sharing/consume-module-export-interop/index.js new file mode 100644 index 00000000000..a98a43ae3e6 --- /dev/null +++ b/test/configCases/sharing/consume-module-export-interop/index.js @@ -0,0 +1,7 @@ +it("should correctly handle export interop", async () => { + await __webpack_init_sharing__("default"); + const { something } = await import("./strict.mjs"); + + expect(typeof something).toBe("function"); + expect(something()).toBe("something"); +}); diff --git a/test/configCases/sharing/consume-module-export-interop/node_modules/cjs/index.js b/test/configCases/sharing/consume-module-export-interop/node_modules/cjs/index.js new file mode 100644 index 00000000000..3378b9002a8 --- /dev/null +++ b/test/configCases/sharing/consume-module-export-interop/node_modules/cjs/index.js @@ -0,0 +1,4 @@ +module.exports.__esModule = true; +module.exports.default = () => { + return "something"; +}; diff --git a/test/configCases/sharing/consume-module-export-interop/node_modules/cjs/package.json b/test/configCases/sharing/consume-module-export-interop/node_modules/cjs/package.json new file mode 100644 index 00000000000..e5560359a93 --- /dev/null +++ b/test/configCases/sharing/consume-module-export-interop/node_modules/cjs/package.json @@ -0,0 +1,7 @@ + +{ + "name": "cjs", + "version": "0.0.0", + "main": "./index.js" +} + diff --git a/test/configCases/sharing/consume-module-export-interop/strict.mjs b/test/configCases/sharing/consume-module-export-interop/strict.mjs new file mode 100644 index 00000000000..7963e9c4aff --- /dev/null +++ b/test/configCases/sharing/consume-module-export-interop/strict.mjs @@ -0,0 +1,3 @@ +import ns from "cjs"; + +export const something = ns.default; diff --git a/test/configCases/sharing/consume-module-export-interop/webpack.config.js b/test/configCases/sharing/consume-module-export-interop/webpack.config.js new file mode 100644 index 00000000000..1f6c16858fb --- /dev/null +++ b/test/configCases/sharing/consume-module-export-interop/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +const { ConsumeSharedPlugin, ProvideSharedPlugin } = + require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + plugins: [ + new ProvideSharedPlugin({ + provides: { + cjs: { + version: "0.0.0" + } + } + }), + new ConsumeSharedPlugin({ + consumes: { + cjs: { + requiredVersion: "0.0.0" + } + } + }) + ] +}; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/errors.js b/test/configCases/sharing/consume-module-ignore-warnings/errors.js new file mode 100644 index 00000000000..cc8949a9c72 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/prefix\/deep\/c/]]; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/index.js b/test/configCases/sharing/consume-module-ignore-warnings/index.js new file mode 100644 index 00000000000..8a299ca5d8c --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/index.js @@ -0,0 +1,258 @@ +let warnings = []; +let oldWarn; + +beforeEach(done => { + oldWarn = console.warn; + console.warn = m => warnings.push(m); + done(); +}); + +afterEach(done => { + expectWarning(); + console.warn = oldWarn; + done(); +}); + +const expectWarning = regexp => { + if (!regexp) { + expect(warnings).toEqual([]); + } else { + expect(warnings).toHaveLength(1); + expect(warnings[0]).toMatch(regexp); + } + warnings.length = 0; +}; + +it("should load the shared modules with ignored warnings", async () => { + __webpack_share_scopes__["test-scope"] = { + package: { + "0": { + get: () => () => "shared package" + } + }, + "@scoped/package": { + "0": { + get: () => Promise.resolve(() => "shared @scoped/package") + } + }, + "prefix/a": { + "0": { + get: () => () => "shared prefix/a" + } + }, + "prefix/deep/c": { + "0": { + get: () => () => "shared prefix/deep/c" + } + }, + "./relative1": { + "0": { + get: () => () => "shared relative1" + } + } + }; + __webpack_share_scopes__["other-scope"] = { + "advanced/123": { + "1.2.beta.1": { + get: () => () => "123" + } + }, + "advanced/error1": { + "1.2.3": { + get: () => { + throw new Error("error1"); + } + } + }, + "advanced/error2": { + "1.2.3": { + get: () => + Promise.resolve().then(() => { + throw new Error("error2"); + }) + } + }, + "advanced/error3": { + "1.2.3": { + get: () => + Promise.resolve().then(() => () => { + throw new Error("error3"); + }) + } + }, + "advanced/error4": { + "1.0.0": { + get: () => () => "wrong" + } + } + }; + { + const result = await import("package"); + expect(result.default).toBe("shared package"); + } + { + const result = await import("@scoped/package"); + expect(result.default).toBe("shared @scoped/package"); + } + { + const result = await import("prefix/a"); + expect(result.default).toBe("shared prefix/a"); + } + { + const result = await import("prefix/deep/b"); + expect(result.default).toBe("b"); + } + { + const result = await import("prefix/deep/c"); + expect(result.default).toBe("shared prefix/deep/c"); + } + { + const result = await import("./relative1"); + expect(result.default).toBe("shared relative1"); + } + { + const result = await import("./relative2"); + expect(result.default).toBe("relative2"); + } + { + const result = await import("advanced/123"); + expect(result.default).toBe("123"); + } + { + await expect(() => import("advanced/error0")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("advanced/error0") + }) + ); + } + { + await expect(() => import("advanced/error1")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("error1") + }) + ); + } + { + await expect(() => import("advanced/error2")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("error2") + }) + ); + } + { + await expect(() => import("advanced/error3")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("error3") + }) + ); + } + { + await expect(() => import("advanced/error4")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("1.2.3") + }) + ); + } +}); + +it("should handle version matching correctly in strict and singleton mode", async () => { + __webpack_share_scopes__["default"] = { + strict0: { + "1.1.1": { + get: () => () => "shared strict0" + } + }, + strict1: { + "1.1.1": { + get: () => () => "shared strict1" + } + }, + strict2: { + "1.1.1": { + get: () => () => "shared strict2" + } + }, + strict3: { + "1.1.1": { + get: () => () => "shared strict3" + } + }, + strict4: { + "1.1.1": { + get: () => () => "shared strict4" + } + }, + strict5: { + "1.1.1": { + get: () => () => "shared strict5" + } + }, + singleton: { + "1.1.1": { + get: () => () => "shared singleton", + from: 'container-a' + } + }, + singletonWithoutVersion: { + "1.0.0": { + get: () => () => "shared singleton v1.0.0", + loaded: true + }, + "2.0.0": { + get: () => () => "shared singleton v2.0.0" + } + } + }; + { + const result = await import("strict0"); + expect(result.default).toBe("shared strict0"); + expectWarning(); + } + { + const result = await import("strict1"); + expect(result.default).toBe("strict"); + } + { + const result = await import("strict2"); + expect(result.default).toBe("strict"); + } + { + const result = await import("strict3"); + expect(result.default).toBe("strict"); + } + { + const result = await import("strict4"); + expect(result.default).toBe("strict"); + } + { + await expect(() => import("strict5")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("strict5") + }) + ); + expectWarning(); + } + { + const result = await import("singleton"); + expect(result.default).toBe("shared singleton"); + expectWarning(); + } +}); + +it("should not instantiate multiple singletons even if a higher version exists", async () => { + __webpack_share_scopes__["default"] = { + singletonWithoutVersion: { + "1.0.0": { + get: () => () => "shared singleton v1.0.0", + loaded: true + }, + "2.0.0": { + get: () => () => "shared singleton v2.0.0" + } + } + }; + { + const result = await import("singletonWithoutVersion"); + expect(result.default).toBe("shared singleton v1.0.0"); + } +}); diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/@scoped/package/index.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/@scoped/package/index.js new file mode 100644 index 00000000000..8678386a6f2 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/@scoped/package/index.js @@ -0,0 +1 @@ +module.exports = "@scoped/package"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/package.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/package.js new file mode 100644 index 00000000000..7c1dac1c302 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/package.js @@ -0,0 +1 @@ +module.exports = "package"; diff --git a/test/configCases/context-replacement/d/modules/a.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/a.js similarity index 100% rename from test/configCases/context-replacement/d/modules/a.js rename to test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/a.js diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/deep/b.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/deep/b.js new file mode 100644 index 00000000000..dfbbeb621fa --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/deep/b.js @@ -0,0 +1 @@ +module.exports = "b"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/singleton.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/singleton.js new file mode 100644 index 00000000000..ec0140e27d2 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/singleton.js @@ -0,0 +1 @@ +module.exports = "singleton"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/singletonWithoutVersion.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/singletonWithoutVersion.js new file mode 100644 index 00000000000..eb02ddc0628 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/singletonWithoutVersion.js @@ -0,0 +1 @@ +module.exports = "singleton without version"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict0.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict0.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict0.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict1.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict1.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict1.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict2.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict2.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict2.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict3.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict3.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict3.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict4.js b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict4.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict4.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/package.json b/test/configCases/sharing/consume-module-ignore-warnings/package.json new file mode 100644 index 00000000000..e0c4fa8cb6d --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "package": "*", + "@scoped/package": "*", + "prefix": "*" + } +} diff --git a/test/configCases/sharing/consume-module-ignore-warnings/relative1.js b/test/configCases/sharing/consume-module-ignore-warnings/relative1.js new file mode 100644 index 00000000000..ce7c23d165c --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/relative1.js @@ -0,0 +1 @@ +module.exports = "relative1"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/relative2.js b/test/configCases/sharing/consume-module-ignore-warnings/relative2.js new file mode 100644 index 00000000000..7097875c2df --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/relative2.js @@ -0,0 +1 @@ +module.exports = "relative2"; diff --git a/test/configCases/sharing/consume-module-ignore-warnings/webpack.config.js b/test/configCases/sharing/consume-module-ignore-warnings/webpack.config.js new file mode 100644 index 00000000000..17d84ffa637 --- /dev/null +++ b/test/configCases/sharing/consume-module-ignore-warnings/webpack.config.js @@ -0,0 +1,69 @@ +"use strict"; + +const { ConsumeSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + ignoreBrowserWarnings: true + }, + plugins: [ + new ConsumeSharedPlugin({ + shareScope: "test-scope", + consumes: [ + "package", + "@scoped/package", + "prefix/", + "./relative1", + "./relative2", + { + "advanced/": { + import: false, + requiredVersion: "^1.2.3", + shareScope: "other-scope", + strictVersion: true + } + } + ] + }), + new ConsumeSharedPlugin({ + consumes: { + strict0: { + requiredVersion: "^1.0.0", + strictVersion: true + }, + strict1: { + requiredVersion: ">=1.2.0", + strictVersion: true + }, + strict2: { + requiredVersion: "1.1.0", + strictVersion: true + }, + strict3: { + requiredVersion: "~1.0.0", + strictVersion: true + }, + strict4: { + requiredVersion: "^2.2.3", + strictVersion: true + }, + strict5: { + import: false, + requiredVersion: "alpha", + strictVersion: true + }, + singleton: { + requiredVersion: "1.1.0", + singleton: true, + strictVersion: false + }, + singletonWithoutVersion: { + requiredVersion: false, + singleton: true + } + } + }) + ] +}; diff --git a/test/configCases/sharing/consume-module-mjs-default-export/index.js b/test/configCases/sharing/consume-module-mjs-default-export/index.js new file mode 100644 index 00000000000..d1ec424e1ff --- /dev/null +++ b/test/configCases/sharing/consume-module-mjs-default-export/index.js @@ -0,0 +1,10 @@ +it("should correctly handle default imports in .mjs files from shared modules", async () => { + await __webpack_init_sharing__("default"); + + const { testDefaultImport } = await import("./pure-esm-consumer.mjs"); + const result = testDefaultImport(); + + expect(result.defaultType).toBe("function"); + expect(result.defaultValue).toBe("shared default export"); + expect(result.namedExportValue).toBe("shared named export"); +}); diff --git a/test/configCases/sharing/consume-module-mjs-default-export/node_modules/shared-esm-pkg/index.js b/test/configCases/sharing/consume-module-mjs-default-export/node_modules/shared-esm-pkg/index.js new file mode 100644 index 00000000000..abb505976e1 --- /dev/null +++ b/test/configCases/sharing/consume-module-mjs-default-export/node_modules/shared-esm-pkg/index.js @@ -0,0 +1,5 @@ +export default function sharedFunction() { + return "shared default export"; +} + +export const namedExport = "shared named export"; diff --git a/test/configCases/sharing/consume-module-mjs-default-export/node_modules/shared-esm-pkg/package.json b/test/configCases/sharing/consume-module-mjs-default-export/node_modules/shared-esm-pkg/package.json new file mode 100644 index 00000000000..5fd777d4c4a --- /dev/null +++ b/test/configCases/sharing/consume-module-mjs-default-export/node_modules/shared-esm-pkg/package.json @@ -0,0 +1,5 @@ +{ + "name": "shared-esm-pkg", + "version": "1.0.0", + "type": "module" +} diff --git a/test/configCases/sharing/consume-module-mjs-default-export/pure-esm-consumer.mjs b/test/configCases/sharing/consume-module-mjs-default-export/pure-esm-consumer.mjs new file mode 100644 index 00000000000..90916f6182f --- /dev/null +++ b/test/configCases/sharing/consume-module-mjs-default-export/pure-esm-consumer.mjs @@ -0,0 +1,10 @@ +import something from "shared-esm-pkg"; +import { namedExport } from "shared-esm-pkg"; + +export function testDefaultImport() { + return { + defaultType: typeof something, + defaultValue: typeof something === "function" ? something() : something, + namedExportValue: namedExport + }; +} diff --git a/test/configCases/sharing/consume-module-mjs-default-export/webpack.config.js b/test/configCases/sharing/consume-module-mjs-default-export/webpack.config.js new file mode 100644 index 00000000000..a479c9ba22d --- /dev/null +++ b/test/configCases/sharing/consume-module-mjs-default-export/webpack.config.js @@ -0,0 +1,25 @@ +"use strict"; + +const { ConsumeSharedPlugin, ProvideSharedPlugin } = + require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + plugins: [ + new ProvideSharedPlugin({ + provides: { + "shared-esm-pkg": { + version: "1.0.0" + } + } + }), + new ConsumeSharedPlugin({ + consumes: { + "shared-esm-pkg": { + requiredVersion: "^1.0.0" + } + } + }) + ] +}; diff --git a/test/configCases/sharing/consume-module/errors.js b/test/configCases/sharing/consume-module/errors.js new file mode 100644 index 00000000000..cc8949a9c72 --- /dev/null +++ b/test/configCases/sharing/consume-module/errors.js @@ -0,0 +1,3 @@ +"use strict"; + +module.exports = [[/prefix\/deep\/c/]]; diff --git a/test/configCases/sharing/consume-module/index.js b/test/configCases/sharing/consume-module/index.js new file mode 100644 index 00000000000..6761fe7c9d5 --- /dev/null +++ b/test/configCases/sharing/consume-module/index.js @@ -0,0 +1,260 @@ +let warnings = []; +let oldWarn; + +beforeEach(done => { + oldWarn = console.warn; + console.warn = m => warnings.push(m); + done(); +}); + +afterEach(done => { + expectWarning(); + console.warn = oldWarn; + done(); +}); + +const expectWarning = regexp => { + if (!regexp) { + expect(warnings).toEqual([]); + } else { + expect(warnings).toHaveLength(1); + expect(warnings[0]).toMatch(regexp); + } + warnings.length = 0; +}; + +it("should load the shared modules", async () => { + __webpack_share_scopes__["test-scope"] = { + package: { + "0": { + get: () => () => "shared package" + } + }, + "@scoped/package": { + "0": { + get: () => Promise.resolve(() => "shared @scoped/package") + } + }, + "prefix/a": { + "0": { + get: () => () => "shared prefix/a" + } + }, + "prefix/deep/c": { + "0": { + get: () => () => "shared prefix/deep/c" + } + }, + "./relative1": { + "0": { + get: () => () => "shared relative1" + } + } + }; + __webpack_share_scopes__["other-scope"] = { + "advanced/123": { + "1.2.beta.1": { + get: () => () => "123" + } + }, + "advanced/error1": { + "1.2.3": { + get: () => { + throw new Error("error1"); + } + } + }, + "advanced/error2": { + "1.2.3": { + get: () => + Promise.resolve().then(() => { + throw new Error("error2"); + }) + } + }, + "advanced/error3": { + "1.2.3": { + get: () => + Promise.resolve().then(() => () => { + throw new Error("error3"); + }) + } + }, + "advanced/error4": { + "1.0.0": { + get: () => () => "wrong" + } + } + }; + { + const result = await import("package"); + expect(result.default).toBe("shared package"); + } + { + const result = await import("@scoped/package"); + expect(result.default).toBe("shared @scoped/package"); + } + { + const result = await import("prefix/a"); + expect(result.default).toBe("shared prefix/a"); + } + { + const result = await import("prefix/deep/b"); + expect(result.default).toBe("b"); + } + { + const result = await import("prefix/deep/c"); + expect(result.default).toBe("shared prefix/deep/c"); + } + { + const result = await import("./relative1"); + expect(result.default).toBe("shared relative1"); + } + { + const result = await import("./relative2"); + expect(result.default).toBe("relative2"); + } + { + const result = await import("advanced/123"); + expect(result.default).toBe("123"); + } + { + await expect(() => import("advanced/error0")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("advanced/error0") + }) + ); + } + { + await expect(() => import("advanced/error1")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("error1") + }) + ); + } + { + await expect(() => import("advanced/error2")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("error2") + }) + ); + } + { + await expect(() => import("advanced/error3")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("error3") + }) + ); + } + { + await expect(() => import("advanced/error4")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("1.2.3") + }) + ); + } +}); + +it("should handle version matching correctly in strict and singleton mode", async () => { + __webpack_share_scopes__["default"] = { + strict0: { + "1.1.1": { + get: () => () => "shared strict0" + } + }, + strict1: { + "1.1.1": { + get: () => () => "shared strict1" + } + }, + strict2: { + "1.1.1": { + get: () => () => "shared strict2" + } + }, + strict3: { + "1.1.1": { + get: () => () => "shared strict3" + } + }, + strict4: { + "1.1.1": { + get: () => () => "shared strict4" + } + }, + strict5: { + "1.1.1": { + get: () => () => "shared strict5" + } + }, + singleton: { + "1.1.1": { + get: () => () => "shared singleton", + from: 'container-a' + } + }, + singletonWithoutVersion: { + "1.0.0": { + get: () => () => "shared singleton v1.0.0", + loaded: true + }, + "2.0.0": { + get: () => () => "shared singleton v2.0.0" + } + } + }; + { + const result = await import("strict0"); + expect(result.default).toBe("shared strict0"); + expectWarning(); + } + { + const result = await import("strict1"); + expect(result.default).toBe("strict"); + } + { + const result = await import("strict2"); + expect(result.default).toBe("strict"); + } + { + const result = await import("strict3"); + expect(result.default).toBe("strict"); + } + { + const result = await import("strict4"); + expect(result.default).toBe("strict"); + } + { + await expect(() => import("strict5")).rejects.toEqual( + expect.objectContaining({ + message: expect.stringContaining("strict5") + }) + ); + expectWarning(); + } + { + const result = await import("singleton"); + expect(result.default).toBe("shared singleton"); + expectWarning( + /Unsatisfied version 1\.1\.1 from container-a of shared singleton module singleton \(required =1\.1\.0\)/ + ); + } +}); + +it("should not instantiate multiple singletons even if a higher version exists", async () => { + __webpack_share_scopes__["default"] = { + singletonWithoutVersion: { + "1.0.0": { + get: () => () => "shared singleton v1.0.0", + loaded: true + }, + "2.0.0": { + get: () => () => "shared singleton v2.0.0" + } + } + }; + { + const result = await import("singletonWithoutVersion"); + expect(result.default).toBe("shared singleton v1.0.0"); + } +}); diff --git a/test/configCases/sharing/consume-module/node_modules/@scoped/package/index.js b/test/configCases/sharing/consume-module/node_modules/@scoped/package/index.js new file mode 100644 index 00000000000..8678386a6f2 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/@scoped/package/index.js @@ -0,0 +1 @@ +module.exports = "@scoped/package"; diff --git a/test/configCases/sharing/consume-module/node_modules/package.js b/test/configCases/sharing/consume-module/node_modules/package.js new file mode 100644 index 00000000000..7c1dac1c302 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/package.js @@ -0,0 +1 @@ +module.exports = "package"; diff --git a/test/configCases/sharing/consume-module/node_modules/prefix/a.js b/test/configCases/sharing/consume-module/node_modules/prefix/a.js new file mode 100644 index 00000000000..6cd1d0075d4 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/prefix/a.js @@ -0,0 +1 @@ +module.exports = "a"; diff --git a/test/configCases/sharing/consume-module/node_modules/prefix/deep/b.js b/test/configCases/sharing/consume-module/node_modules/prefix/deep/b.js new file mode 100644 index 00000000000..dfbbeb621fa --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/prefix/deep/b.js @@ -0,0 +1 @@ +module.exports = "b"; diff --git a/test/configCases/sharing/consume-module/node_modules/singleton.js b/test/configCases/sharing/consume-module/node_modules/singleton.js new file mode 100644 index 00000000000..ec0140e27d2 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/singleton.js @@ -0,0 +1 @@ +module.exports = "singleton"; diff --git a/test/configCases/sharing/consume-module/node_modules/singletonWithoutVersion.js b/test/configCases/sharing/consume-module/node_modules/singletonWithoutVersion.js new file mode 100644 index 00000000000..eb02ddc0628 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/singletonWithoutVersion.js @@ -0,0 +1 @@ +module.exports = "singleton without version"; diff --git a/test/configCases/sharing/consume-module/node_modules/strict0.js b/test/configCases/sharing/consume-module/node_modules/strict0.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/strict0.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module/node_modules/strict1.js b/test/configCases/sharing/consume-module/node_modules/strict1.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/strict1.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module/node_modules/strict2.js b/test/configCases/sharing/consume-module/node_modules/strict2.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/strict2.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module/node_modules/strict3.js b/test/configCases/sharing/consume-module/node_modules/strict3.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/strict3.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module/node_modules/strict4.js b/test/configCases/sharing/consume-module/node_modules/strict4.js new file mode 100644 index 00000000000..51df4cc6671 --- /dev/null +++ b/test/configCases/sharing/consume-module/node_modules/strict4.js @@ -0,0 +1 @@ +module.exports = "strict"; diff --git a/test/configCases/sharing/consume-module/package.json b/test/configCases/sharing/consume-module/package.json new file mode 100644 index 00000000000..e0c4fa8cb6d --- /dev/null +++ b/test/configCases/sharing/consume-module/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "package": "*", + "@scoped/package": "*", + "prefix": "*" + } +} diff --git a/test/configCases/sharing/consume-module/relative1.js b/test/configCases/sharing/consume-module/relative1.js new file mode 100644 index 00000000000..ce7c23d165c --- /dev/null +++ b/test/configCases/sharing/consume-module/relative1.js @@ -0,0 +1 @@ +module.exports = "relative1"; diff --git a/test/configCases/sharing/consume-module/relative2.js b/test/configCases/sharing/consume-module/relative2.js new file mode 100644 index 00000000000..7097875c2df --- /dev/null +++ b/test/configCases/sharing/consume-module/relative2.js @@ -0,0 +1 @@ +module.exports = "relative2"; diff --git a/test/configCases/sharing/consume-module/webpack.config.js b/test/configCases/sharing/consume-module/webpack.config.js new file mode 100644 index 00000000000..5d2a1a1822b --- /dev/null +++ b/test/configCases/sharing/consume-module/webpack.config.js @@ -0,0 +1,66 @@ +"use strict"; + +const { ConsumeSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + plugins: [ + new ConsumeSharedPlugin({ + shareScope: "test-scope", + consumes: [ + "package", + "@scoped/package", + "prefix/", + "./relative1", + "./relative2", + { + "advanced/": { + import: false, + requiredVersion: "^1.2.3", + shareScope: "other-scope", + strictVersion: true + } + } + ] + }), + new ConsumeSharedPlugin({ + consumes: { + strict0: { + requiredVersion: "^1.0.0", + strictVersion: true + }, + strict1: { + requiredVersion: ">=1.2.0", + strictVersion: true + }, + strict2: { + requiredVersion: "1.1.0", + strictVersion: true + }, + strict3: { + requiredVersion: "~1.0.0", + strictVersion: true + }, + strict4: { + requiredVersion: "^2.2.3", + strictVersion: true + }, + strict5: { + import: false, + requiredVersion: "alpha", + strictVersion: true + }, + singleton: { + requiredVersion: "1.1.0", + singleton: true, + strictVersion: false + }, + singletonWithoutVersion: { + requiredVersion: false, + singleton: true + } + } + }) + ] +}; diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/index.js b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/index.js new file mode 100644 index 00000000000..3e28b4cf90e --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/index.js @@ -0,0 +1,49 @@ +const expectWarning = require("../../../helpers/expectWarningFactory")(); + +it("should be able to consume different shared module version depending on context with ignored warnings", async () => { + __webpack_share_scopes__["default"] = { + shared: { + "9.9.9": { + get: () => () => "shared@9.9.9" + }, + "1.9.9": { + get: () => () => "shared@1.9.9" + }, + "1.2.9": { + get: () => () => "shared@1.2.9" + }, + "1.2.3": { + get: () => () => "shared@1.2.3", + from: "mfe1" + }, + "2.9.9": { + get: () => () => "shared@2.9.9" + }, + "2.3.9": { + get: () => () => "shared@2.3.9" + }, + "2.3.4": { + get: () => () => "shared@2.3.4" + }, + "3.0.0": { + get: () => () => "shared@3.0.0" + } + }, + shared2: { + "9.9.9": { + get: () => () => "shared2@9.9.9" + } + } + }; + expect(require("shared")).toBe("shared@1.9.9"); + expect(require("my-module")).toBe("shared@2.9.9"); + expect(require("my-module2")).toBe("shared@2.3.9"); + expect(() => require("my-module3")).toThrow( + "No satisfying version (^3.4.5) of shared module shared found in shared scope default.\n" + + "Available versions: 9.9.9 from undefined, 1.9.9 from undefined, 1.2.9 from undefined, 1.2.3 from mfe1, 2.9.9 from undefined, 2.3.9 from undefined, 2.3.4 from undefined, 3.0.0 from undefined" + ); + expect(require("my-module4")).toBe("shared@9.9.9"); + expectWarning(); + expect(require("shared2")).toBe("shared2@9.9.9"); + expectWarning(); +}); diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/index.js b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/package.json b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/package.json new file mode 100644 index 00000000000..ab866ffdfa3 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "shared": "^2.3.0" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/index.js b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/package.json b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/package.json new file mode 100644 index 00000000000..b88141f46c5 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "shared": "~2.3.0" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/index.js b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/package.json b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/package.json new file mode 100644 index 00000000000..6a3ed89c57b --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "shared": "^3.4.5" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/index.js b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/package.json b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/package.json new file mode 100644 index 00000000000..6faf4164846 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "shared": "*" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/package.json b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/package.json new file mode 100644 index 00000000000..9260ff7df9d --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "shared2": "1.2.3 3.2.1" + }, + "peerDependencies": { + "shared": "^1.0.0" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions-ignore-warnings/webpack.config.js b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/webpack.config.js new file mode 100644 index 00000000000..22b7a95ae58 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions-ignore-warnings/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; + +const { ConsumeSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + ignoreBrowserWarnings: true + }, + plugins: [ + new ConsumeSharedPlugin({ + consumes: { + shared: { + import: false, + strictVersion: true + }, + shared2: { + import: false + } + } + }) + ] +}; diff --git a/test/configCases/sharing/consume-multiple-versions/index.js b/test/configCases/sharing/consume-multiple-versions/index.js new file mode 100644 index 00000000000..1d57db57e06 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/index.js @@ -0,0 +1,199 @@ +const expectWarning = require("../../../helpers/expectWarningFactory")(); + +it("should be able to consume different shared module version depending on context", async () => { + __webpack_share_scopes__["default"] = { + shared: { + "9.9.9": { + get: () => () => "shared@9.9.9" + }, + "1.9.9": { + get: () => () => "shared@1.9.9" + }, + "1.2.9": { + get: () => () => "shared@1.2.9" + }, + "1.2.3": { + get: () => () => "shared@1.2.3", + from: "mfe1" + }, + "2.9.9": { + get: () => () => "shared@2.9.9" + }, + "2.3.9": { + get: () => () => "shared@2.3.9" + }, + "2.3.4": { + get: () => () => "shared@2.3.4" + }, + "3.0.0": { + get: () => () => "shared@3.0.0" + } + }, + shared2: { + "9.9.9": { + get: () => () => "shared2@9.9.9" + } + }, + shared3: { + "1.1.1": { + get: () => () => "shared3@1.1.1" + }, + "1.0.0": { + get: () => () => "shared3@1.0.0" + } + }, + shared4: { + "1.1.1": { + get: () => () => "shared4@1.1.1" + } + }, + shared5: { + "1.0.0": { + get: () => () => "shared5@1.0.0" + } + }, + shared6: { + "1.0.0": { + get: () => () => "shared6@1.0.0" + } + }, + shared7: { + "1.0.0": { + get: () => () => "shared7@1.0.0" + } + }, + shared8: { + "1.0.0": { + get: () => () => "shared8@1.0.0" + } + }, + shared9: { + "1.0.0": { + get: () => () => "shared9@1.0.0" + } + }, + shared10: { + "1.0.0": { + get: () => () => "shared10@1.0.0" + } + }, + shared11: { + "1.0.0": { + get: () => () => "shared11@1.0.0" + } + }, + shared12: { + "1.0.0": { + get: () => () => "shared12@1.0.0" + } + }, + shared13: { + "1.0.0": { + get: () => () => "shared13@1.0.0" + } + }, + shared14: { + "1.0.0": { + get: () => () => "shared14@1.0.0" + } + }, + shared15: { + "1.1.1": { + get: () => () => "shared15@1.1.1" + } + }, + shared16: { + "1.0.0": { + get: () => () => "shared16@1.0.0" + } + }, + shared17: { + "1.0.0": { + get: () => () => "shared17@1.0.0" + } + }, + shared18: { + "1.0.0": { + get: () => () => "shared18@1.0.0" + } + }, + shared19: { + "1.0.0": { + get: () => () => "shared19@1.0.0" + } + }, + shared20: { + "1.0.0": { + get: () => () => "shared20@1.0.0" + } + }, + shared21: { + "1.0.0": { + get: () => () => "shared21@1.0.0" + } + }, + shared22: { + "1.0.0": { + get: () => () => "shared22@1.0.0" + } + }, + shared23: { + "1.0.0": { + get: () => () => "shared23@1.0.0" + } + }, + shared24: { + "1.0.0": { + get: () => () => "shared24@1.0.0" + } + }, + shared25: { + "1.0.0": { + get: () => () => "shared25@1.0.0" + } + }, + shared25: { + "1.0.0": { + get: () => () => "shared26@1.0.0" + } + } + }; + expect(require("shared")).toBe("shared@1.9.9"); + expect(require("my-module")).toBe("shared@2.9.9"); + expect(require("my-module2")).toBe("shared@2.3.9"); + expect(() => require("my-module3")).toThrow( + "No satisfying version (^3.4.5) of shared module shared found in shared scope default.\n" + + "Available versions: 9.9.9 from undefined, 1.9.9 from undefined, 1.2.9 from undefined, 1.2.3 from mfe1, 2.9.9 from undefined, 2.3.9 from undefined, 2.3.4 from undefined, 3.0.0 from undefined" + ); + expect(require("my-module4")).toBe("shared@9.9.9"); + expectWarning(); + expect(require("shared2")).toBe("shared2@9.9.9"); + expectWarning( + /No satisfying version \(=1\.2\.3 =3\.2\.1\) of shared module shared2 found in shared scope default/ + ); + expect(require("shared3")).toBe("shared3@1.0.0"); + expect(require("shared4")).toBe("shared4@1.1.1"); + expect(require("shared5")).toBe("shared5@1.0.0"); + expect(require("shared6")).toBe("shared6@1.0.0"); + expect(require("shared7")).toBe("shared7@1.0.0"); + expect(require("shared8")).toBe("shared8@1.0.0"); + expect(require("shared9")).toBe("shared9@1.0.0"); + expect(require("shared10")).toBe("shared10@1.0.0"); + expect(require("shared11")).toBe("shared11@1.0.0"); + expect(require("shared12")).toBe("shared12@1.0.0"); + expect(require("shared13")).toBe("shared13@1.0.0"); + expect(require("shared14")).toBe("shared14@1.0.0"); + expect(require("shared15")).toBe("shared15@1.1.1"); + expect(require("shared16")).toBe("shared16@1.0.0"); + expect(require("shared17")).toBe("shared17@1.0.0"); + expect(require("shared18")).toBe("shared18@1.0.0"); + expect(require("shared19")).toBe("shared19@1.0.0"); + expectWarning( + /No satisfying version \(\^branch\) of shared module shared19 found in shared scope default/ + ); + expect(require("shared20")).toBe("shared20@1.0.0"); + expect(require("shared21")).toBe("shared21@1.0.0"); + expect(require("shared22")).toBe("shared22@1.0.0"); + expect(require("shared23")).toBe("shared23@1.0.0"); + expect(require("shared24")).toBe("shared24@1.0.0"); +}); diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module/index.js b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module/package.json b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module/package.json new file mode 100644 index 00000000000..ab866ffdfa3 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "shared": "^2.3.0" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module2/index.js b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module2/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module2/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module2/package.json b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module2/package.json new file mode 100644 index 00000000000..b88141f46c5 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module2/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "shared": "~2.3.0" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module3/index.js b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module3/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module3/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module3/package.json b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module3/package.json new file mode 100644 index 00000000000..6a3ed89c57b --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module3/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "shared": "^3.4.5" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module4/index.js b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module4/index.js new file mode 100644 index 00000000000..ae61e683bfb --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module4/index.js @@ -0,0 +1 @@ +module.exports = require("shared"); diff --git a/test/configCases/sharing/consume-multiple-versions/node_modules/my-module4/package.json b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module4/package.json new file mode 100644 index 00000000000..6faf4164846 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/node_modules/my-module4/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "shared": "*" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions/package.json b/test/configCases/sharing/consume-multiple-versions/package.json new file mode 100644 index 00000000000..7deacfb9478 --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/package.json @@ -0,0 +1,32 @@ +{ + "dependencies": { + "shared2": "1.2.3 3.2.1", + "shared3": "git+ssh://git@github.com:foo/bar.git#v1.0.0", + "shared4": "git+ssh://git@gitlab.com:foo/bar.git#semver:^1.0.0", + "shared5": "foo/bar#v1.0.0", + "shared6": "github:foo/bar#v1.0.0", + "shared7": "git://user:password@github.com/foo/bar#v1.0.0", + "shared8": "user:password@github.com:foo/bar#v1.0.0", + "shared9": "https://user@github.com/foo/bar#v1.0.0", + "shared10": "git+ssh://bitbucket.org:foo/bar#v1.0.0", + "shared11": "git://gist.github.com/feed.git#v1.0.0", + "shared12": "https://github.com/foo/bar/test/branch", + "shared13": "https://gitlab.com/foo/bar/repository/archive.tar.gz", + "shared14": "https://bitbucket.org/foo/bar/get/archive.tar.gz", + "shared15": "git+ssh://:password@bitbucket.org:foo/bar.git#v1.1.1", + "shared16": "https://gist.github.com/foo/feed/raw/fix%2Fbug/", + "shared17": "git+ssh://git@other.com:foo/bar.git#v1.0.0", + "shared18": "github.com:foo/bar#v1.0.0", + "shared19": "https://github.com/foo/bar/tree/branch", + "shared20": "github:foo%0N/bar", + "shared21": "other:foo/bar", + "shared22": "https://foo/bar", + "shared23": "https://github.com//bar/tree/branch", + "shared24": "git+https://gitlab.com//bar", + "shared25": "git+https://GITLAB.com//bar", + "shared26": "https://GITHUB.com//bar/tree/branch" + }, + "peerDependencies": { + "shared": "^1.0.0" + } +} diff --git a/test/configCases/sharing/consume-multiple-versions/webpack.config.js b/test/configCases/sharing/consume-multiple-versions/webpack.config.js new file mode 100644 index 00000000000..350ef1bee5d --- /dev/null +++ b/test/configCases/sharing/consume-multiple-versions/webpack.config.js @@ -0,0 +1,96 @@ +"use strict"; + +const { ConsumeSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ConsumeSharedPlugin({ + consumes: { + shared: { + import: false, + strictVersion: true + }, + shared2: { + import: false + }, + shared3: { + import: false, + strictVersion: true + }, + shared4: { + import: false + }, + shared5: { + import: false, + strictVersion: true + }, + shared6: { + import: false, + strictVersion: true + }, + shared7: { + import: false, + strictVersion: true + }, + shared8: { + import: false, + strictVersion: true + }, + shared9: { + import: false, + strictVersion: true + }, + shared10: { + import: false, + strictVersion: true + }, + shared11: { + import: false, + strictVersion: true + }, + shared12: { + import: false + }, + shared13: { + import: false + }, + shared14: { + import: false + }, + shared15: { + import: false, + strictVersion: true + }, + shared16: { + import: false + }, + shared17: { + import: false, + strictVersion: true + }, + shared18: { + import: false + }, + shared19: { + import: false + }, + shared20: { + import: false + }, + shared21: { + import: false + }, + shared22: { + import: false + }, + shared23: { + import: false + }, + shared24: { + import: false + } + } + }) + ] +}; diff --git a/test/configCases/sharing/consume-self-reference/index.js b/test/configCases/sharing/consume-self-reference/index.js new file mode 100644 index 00000000000..a26f2e2c332 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/index.js @@ -0,0 +1,4 @@ +it("should be able to consume package self referencing", async () => { + const result = await import("my-middleware"); + expect(result.m()).toBe("ABA"); +}); diff --git a/test/configCases/sharing/consume-self-reference/node_modules/my-middleware/index.js b/test/configCases/sharing/consume-self-reference/node_modules/my-middleware/index.js new file mode 100644 index 00000000000..9d3799c10a3 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/node_modules/my-middleware/index.js @@ -0,0 +1,6 @@ +import { a } from "my-module/a"; +import { b } from "my-module/b"; + +export function m() { + return a() + b(); +} diff --git a/test/configCases/sharing/consume-self-reference/node_modules/my-middleware/package.json b/test/configCases/sharing/consume-self-reference/node_modules/my-middleware/package.json new file mode 100644 index 00000000000..857375d8323 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/node_modules/my-middleware/package.json @@ -0,0 +1,8 @@ +{ + "name": "my-middleware", + "type": "module", + "version": "2.3.4", + "dependencies": { + "my-module": "*" + } +} diff --git a/test/configCases/sharing/consume-self-reference/node_modules/my-module/a.js b/test/configCases/sharing/consume-self-reference/node_modules/my-module/a.js new file mode 100644 index 00000000000..32864f0a77f --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/node_modules/my-module/a.js @@ -0,0 +1,3 @@ +export function a() { + return "A"; +} diff --git a/test/configCases/sharing/consume-self-reference/node_modules/my-module/b.js b/test/configCases/sharing/consume-self-reference/node_modules/my-module/b.js new file mode 100644 index 00000000000..a528f0acf55 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/node_modules/my-module/b.js @@ -0,0 +1,5 @@ +import { a } from "my-module/a"; + +export function b() { + return "B" + a(); +} diff --git a/test/configCases/sharing/consume-self-reference/node_modules/my-module/package.json b/test/configCases/sharing/consume-self-reference/node_modules/my-module/package.json new file mode 100644 index 00000000000..487a24abd22 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/node_modules/my-module/package.json @@ -0,0 +1,9 @@ +{ + "name": "my-module", + "type": "module", + "version": "1.2.3", + "exports": { + "./a": "./a.js", + "./b": "./b.js" + } +} diff --git a/test/configCases/sharing/consume-self-reference/package.json b/test/configCases/sharing/consume-self-reference/package.json new file mode 100644 index 00000000000..dfee3b48973 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "my-middleware": "^2.3.0" + } +} diff --git a/test/configCases/sharing/consume-self-reference/webpack.config.js b/test/configCases/sharing/consume-self-reference/webpack.config.js new file mode 100644 index 00000000000..1cafc901d09 --- /dev/null +++ b/test/configCases/sharing/consume-self-reference/webpack.config.js @@ -0,0 +1,27 @@ +"use strict"; + +const { SharePlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new SharePlugin({ + shared: { + "my-middleware": { + singleton: true + // import: false + }, + "my-module/a": { + singleton: true, + version: "1.2.3" + // import: false + }, + "my-module/b": { + singleton: true, + version: "1.2.3" + // import: false + } + } + }) + ] +}; diff --git a/test/configCases/sharing/no-override-loaded/index.js b/test/configCases/sharing/no-override-loaded/index.js new file mode 100644 index 00000000000..930da1445b0 --- /dev/null +++ b/test/configCases/sharing/no-override-loaded/index.js @@ -0,0 +1,13 @@ +it("should not override an already loaded shared module version", async () => { + __webpack_share_scopes__.default = { + package: { + "1.0.0": { + get: () => () => 42, + loaded: true, + from: "a" + } + } + }; + await __webpack_init_sharing__("default"); + expect(require("package")).toBe(42); +}); diff --git a/test/configCases/sharing/no-override-loaded/node_modules/package/index.js b/test/configCases/sharing/no-override-loaded/node_modules/package/index.js new file mode 100644 index 00000000000..7c1dac1c302 --- /dev/null +++ b/test/configCases/sharing/no-override-loaded/node_modules/package/index.js @@ -0,0 +1 @@ +module.exports = "package"; diff --git a/test/configCases/sharing/no-override-loaded/node_modules/package/package.json b/test/configCases/sharing/no-override-loaded/node_modules/package/package.json new file mode 100644 index 00000000000..1587a669681 --- /dev/null +++ b/test/configCases/sharing/no-override-loaded/node_modules/package/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/test/configCases/sharing/no-override-loaded/package.json b/test/configCases/sharing/no-override-loaded/package.json new file mode 100644 index 00000000000..7a0670f6736 --- /dev/null +++ b/test/configCases/sharing/no-override-loaded/package.json @@ -0,0 +1,6 @@ +{ + "version": "0.0.0", + "dependencies": { + "package": "1" + } +} diff --git a/test/configCases/sharing/no-override-loaded/webpack.config.js b/test/configCases/sharing/no-override-loaded/webpack.config.js new file mode 100644 index 00000000000..5e079c2aa1d --- /dev/null +++ b/test/configCases/sharing/no-override-loaded/webpack.config.js @@ -0,0 +1,15 @@ +"use strict"; + +const { SharePlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + uniqueName: "b" + }, + plugins: [ + new SharePlugin({ + shared: ["package"] + }) + ] +}; diff --git a/test/configCases/sharing/output-esm-library/entry1.js b/test/configCases/sharing/output-esm-library/entry1.js new file mode 100644 index 00000000000..c6b786fb900 --- /dev/null +++ b/test/configCases/sharing/output-esm-library/entry1.js @@ -0,0 +1,13 @@ +it("should provide and consume the shared module correctly when output ESM library / 1", async () => { + expect(await import("lib")).toEqual( + expect.objectContaining({ + default: "foo~bar~index.js" + }) + ); + + expect(await import("lib/esm")).toEqual( + expect.objectContaining({ + default: "foo~bar~index.esm.js" + }) + ); +}); diff --git a/test/configCases/sharing/output-esm-library/entry2.js b/test/configCases/sharing/output-esm-library/entry2.js new file mode 100644 index 00000000000..e38e468dd2e --- /dev/null +++ b/test/configCases/sharing/output-esm-library/entry2.js @@ -0,0 +1,13 @@ +it("should provide and consume the shared module correctly when output ESM library / 2", async () => { + expect(await import("lib")).toEqual( + expect.objectContaining({ + default: "foo~bar~index.js" + }) + ); + + expect(await import("lib/esm")).toEqual( + expect.objectContaining({ + default: "foo~bar~index.esm.js" + }) + ); +}); diff --git a/test/configCases/sharing/output-esm-library/node_modules/lib/common.js b/test/configCases/sharing/output-esm-library/node_modules/lib/common.js new file mode 100644 index 00000000000..9a932704a74 --- /dev/null +++ b/test/configCases/sharing/output-esm-library/node_modules/lib/common.js @@ -0,0 +1,3 @@ +import { bar } from "./make-concat"; + +export const common = "foo~" + bar; diff --git a/test/configCases/sharing/output-esm-library/node_modules/lib/index.esm.js b/test/configCases/sharing/output-esm-library/node_modules/lib/index.esm.js new file mode 100644 index 00000000000..592048da6c4 --- /dev/null +++ b/test/configCases/sharing/output-esm-library/node_modules/lib/index.esm.js @@ -0,0 +1,3 @@ +import { common } from "./common"; + +export default common + "~index.esm.js"; diff --git a/test/configCases/sharing/output-esm-library/node_modules/lib/index.js b/test/configCases/sharing/output-esm-library/node_modules/lib/index.js new file mode 100644 index 00000000000..5a5799d340f --- /dev/null +++ b/test/configCases/sharing/output-esm-library/node_modules/lib/index.js @@ -0,0 +1,3 @@ +import { common } from "./common"; + +export default common + "~index.js"; diff --git a/test/configCases/sharing/output-esm-library/node_modules/lib/make-concat.js b/test/configCases/sharing/output-esm-library/node_modules/lib/make-concat.js new file mode 100644 index 00000000000..e83f5ac0f22 --- /dev/null +++ b/test/configCases/sharing/output-esm-library/node_modules/lib/make-concat.js @@ -0,0 +1 @@ +export const bar = "bar" \ No newline at end of file diff --git a/test/configCases/sharing/output-esm-library/node_modules/lib/package.json b/test/configCases/sharing/output-esm-library/node_modules/lib/package.json new file mode 100644 index 00000000000..4f11e562320 --- /dev/null +++ b/test/configCases/sharing/output-esm-library/node_modules/lib/package.json @@ -0,0 +1,12 @@ +{ + "name": "shared", + "version": "1.0.0", + "exports": { + ".": { + "module": "./index.js" + }, + "./esm": { + "module": "./index.esm.js" + } + } +} diff --git a/test/configCases/sharing/output-esm-library/test.config.js b/test/configCases/sharing/output-esm-library/test.config.js new file mode 100644 index 00000000000..a8cad9f51b9 --- /dev/null +++ b/test/configCases/sharing/output-esm-library/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry1.mjs", "entry2.mjs"]; + } +}; diff --git a/test/configCases/sharing/output-esm-library/webpack.config.js b/test/configCases/sharing/output-esm-library/webpack.config.js new file mode 100644 index 00000000000..0111ba757aa --- /dev/null +++ b/test/configCases/sharing/output-esm-library/webpack.config.js @@ -0,0 +1,29 @@ +"use strict"; + +const { sharing } = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + entry1: "./entry1.js", + entry2: "./entry2.js" + }, + output: { + filename: "[name].mjs", + module: true, + library: { + type: "module" + } + }, + experiments: { + outputModule: true + }, + plugins: [ + new sharing.SharePlugin({ + shared: { + lib: { requiredVersion: "auto" }, + "lib/esm": { requiredVersion: "auto" } + } + }) + ] +}; diff --git a/test/configCases/sharing/provide-eager-module/index.js b/test/configCases/sharing/provide-eager-module/index.js new file mode 100644 index 00000000000..e03bd6d95d0 --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/index.js @@ -0,0 +1,75 @@ +if (Math.random() < 0) { + require("common"); + require("uncommon"); +} + +it("should overwrite non-eager shared module with eager shared module", async () => { + __webpack_require__.S = { + eagerOverrideNonEager: { + common: { + "1.0.0": { + eager: undefined, // any falsy value + from: "dashboard" + } + } + } + }; + await __webpack_init_sharing__("eagerOverrideNonEager"); + expect( + Object.keys(__webpack_share_scopes__["eagerOverrideNonEager"]) + ).toContain("common"); + const commonModule = __webpack_share_scopes__.eagerOverrideNonEager.common; + expect(Object.keys(commonModule)).toContain("1.0.0"); + expect(commonModule["1.0.0"].eager).toBe(true); +}); +it("should not overwrite already shared eager module with non-eager module", async () => { + __webpack_require__.S = { + nonEagerDontOverrideEager: { + uncommon: { + "2.0.0": { + eager: 1, // any truthy value + from: "aaa" + } + } + } + }; + await __webpack_init_sharing__("nonEagerDontOverrideEager"); + expect( + Object.keys(__webpack_share_scopes__["nonEagerDontOverrideEager"]) + ).toContain("uncommon"); + const uncommonModule = + __webpack_share_scopes__.nonEagerDontOverrideEager.uncommon; + expect(Object.keys(uncommonModule)).toContain("2.0.0"); + expect(uncommonModule["2.0.0"].eager).toBe(1); +}); +it("should prefer shared non-eager module from newer container", async () => { + __webpack_require__.S = { + newerNonEager: { + uncommon: { + "2.0.0": { + from: "appshell-1.0" + } + } + } + }; + await __webpack_init_sharing__("newerNonEager"); + const uncommonModule = __webpack_share_scopes__.newerNonEager.uncommon; + expect(Object.keys(uncommonModule)).toContain("2.0.0"); + expect(uncommonModule["2.0.0"].from).toBe("appshell-2.0"); +}); +it("should prefer shared eager module from newer container", async () => { + __webpack_require__.S = { + newerEager: { + common: { + "1.0.0": { + from: "appshell-1.0", + eager: true + } + } + } + }; + await __webpack_init_sharing__("newerEager"); + const commonModule = __webpack_share_scopes__.newerEager.common; + expect(Object.keys(commonModule)).toContain("1.0.0"); + expect(commonModule["1.0.0"].from).toBe("appshell-2.0"); +}); diff --git a/test/configCases/sharing/provide-eager-module/node_modules/common/index.js b/test/configCases/sharing/provide-eager-module/node_modules/common/index.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/node_modules/common/index.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/configCases/sharing/provide-eager-module/node_modules/common/package.json b/test/configCases/sharing/provide-eager-module/node_modules/common/package.json new file mode 100644 index 00000000000..1587a669681 --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/node_modules/common/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/test/configCases/sharing/provide-eager-module/node_modules/uncommon/index.js b/test/configCases/sharing/provide-eager-module/node_modules/uncommon/index.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/node_modules/uncommon/index.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/configCases/sharing/provide-eager-module/node_modules/uncommon/package.json b/test/configCases/sharing/provide-eager-module/node_modules/uncommon/package.json new file mode 100644 index 00000000000..4928ba5355f --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/node_modules/uncommon/package.json @@ -0,0 +1,3 @@ +{ + "version": "2.0.0" +} diff --git a/test/configCases/sharing/provide-eager-module/package.json b/test/configCases/sharing/provide-eager-module/package.json new file mode 100644 index 00000000000..b26ce864d33 --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "common": "*", + "uncommon": "*" + }, + "name": "appshell-2.0" +} diff --git a/test/configCases/sharing/provide-eager-module/webpack.config.js b/test/configCases/sharing/provide-eager-module/webpack.config.js new file mode 100644 index 00000000000..ba90a4e0fce --- /dev/null +++ b/test/configCases/sharing/provide-eager-module/webpack.config.js @@ -0,0 +1,44 @@ +"use strict"; + +const { ProvideSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../types").Configuration} */ +module.exports = { + mode: "development", + plugins: [ + new ProvideSharedPlugin({ + shareScope: "eagerOverrideNonEager", + provides: { + common: { + shareKey: "common", + eager: true + } + } + }), + new ProvideSharedPlugin({ + shareScope: "nonEagerDontOverrideEager", + provides: { + uncommon: { + shareKey: "uncommon" + } + } + }), + new ProvideSharedPlugin({ + shareScope: "newerNonEager", + provides: { + uncommon: { + shareKey: "uncommon" + } + } + }), + new ProvideSharedPlugin({ + shareScope: "newerEager", + provides: { + common: { + shareKey: "common", + eager: true + } + } + }) + ] +}; diff --git a/test/configCases/sharing/provide-module/index.js b/test/configCases/sharing/provide-module/index.js new file mode 100644 index 00000000000..1a4c915fe9c --- /dev/null +++ b/test/configCases/sharing/provide-module/index.js @@ -0,0 +1,54 @@ +if (Math.random() < 0) { + require("package"); +} + +it("should add provided modules to the share scope on init", async () => { + expect(__webpack_share_scopes__).toEqual({}); + await __webpack_init_sharing__("default"); + expect(Object.keys(__webpack_share_scopes__)).toEqual(["default"]); + await __webpack_init_sharing__("test-scope"); + await __webpack_init_sharing__("other-scope"); + expect(__webpack_init_sharing__("other-scope")).toBe( + __webpack_init_sharing__("other-scope") + ); + expect(Object.keys(__webpack_share_scopes__).length).toBe(3); + expect(Object.keys(__webpack_share_scopes__)).toContain("default"); + expect(Object.keys(__webpack_share_scopes__)).toContain("test-scope"); + expect(Object.keys(__webpack_share_scopes__)).toContain("other-scope"); + expect(Object.keys(__webpack_share_scopes__.default)).toContain("package"); + expect(Object.keys(__webpack_share_scopes__["test-scope"])).toContain( + "package" + ); + expect( + Object.keys(__webpack_share_scopes__["test-scope"]["package"]) + ).toContain("1.0.0"); + expect(Object.keys(__webpack_share_scopes__["test-scope"])).toContain( + "./test1" + ); + expect( + Object.keys(__webpack_share_scopes__["test-scope"]["./test1"]) + ).toContain("0"); + expect(Object.keys(__webpack_share_scopes__["other-scope"])).toContain( + "test2" + ); + const test2Versions = Object.keys( + __webpack_share_scopes__["other-scope"]["test2"] + ); + expect(test2Versions).toContain("1.3.0"); + expect(test2Versions).toContain("1.1.9"); + expect(test2Versions).toContain("1.2.3"); + + { + const factory = await __webpack_share_scopes__["test-scope"]["./test1"][ + "0" + ].get(); + expect(factory()).toBe("test1"); + } + + { + const factory = await __webpack_share_scopes__["other-scope"]["test2"][ + "1.3.0" + ].get(); + expect(factory()).toBe("test2"); + } +}); diff --git a/test/configCases/sharing/provide-module/node_modules/package/index.js b/test/configCases/sharing/provide-module/node_modules/package/index.js new file mode 100644 index 00000000000..7c1dac1c302 --- /dev/null +++ b/test/configCases/sharing/provide-module/node_modules/package/index.js @@ -0,0 +1 @@ +module.exports = "package"; diff --git a/test/configCases/sharing/provide-module/node_modules/package/package.json b/test/configCases/sharing/provide-module/node_modules/package/package.json new file mode 100644 index 00000000000..1587a669681 --- /dev/null +++ b/test/configCases/sharing/provide-module/node_modules/package/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/test/configCases/sharing/provide-module/package.json b/test/configCases/sharing/provide-module/package.json new file mode 100644 index 00000000000..1be1b18fe5a --- /dev/null +++ b/test/configCases/sharing/provide-module/package.json @@ -0,0 +1,3 @@ +{ + "version": "0.0.0" +} diff --git a/test/configCases/sharing/provide-module/test1.js b/test/configCases/sharing/provide-module/test1.js new file mode 100644 index 00000000000..e9500f323ba --- /dev/null +++ b/test/configCases/sharing/provide-module/test1.js @@ -0,0 +1 @@ +module.exports = "test1"; diff --git a/test/configCases/sharing/provide-module/test2-wrong.js b/test/configCases/sharing/provide-module/test2-wrong.js new file mode 100644 index 00000000000..c298d0e599f --- /dev/null +++ b/test/configCases/sharing/provide-module/test2-wrong.js @@ -0,0 +1 @@ +module.exports = "test2-wrong"; diff --git a/test/configCases/sharing/provide-module/test2.js b/test/configCases/sharing/provide-module/test2.js new file mode 100644 index 00000000000..cad935f3d81 --- /dev/null +++ b/test/configCases/sharing/provide-module/test2.js @@ -0,0 +1 @@ +module.exports = "test2"; diff --git a/test/configCases/sharing/provide-module/webpack.config.js b/test/configCases/sharing/provide-module/webpack.config.js new file mode 100644 index 00000000000..3e0e88cd1d7 --- /dev/null +++ b/test/configCases/sharing/provide-module/webpack.config.js @@ -0,0 +1,44 @@ +"use strict"; + +const { ProvideSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ProvideSharedPlugin({ + shareScope: "test-scope", + provides: [ + "./test1", + { + "./test2-wrong": { + shareKey: "test2", + shareScope: "other-scope", + version: "1.2.3" + } + }, + "package" + ] + }), + new ProvideSharedPlugin({ + provides: ["package"] + }), + new ProvideSharedPlugin({ + shareScope: "other-scope", + provides: { + "./test2": { + shareKey: "test2", + version: "1.3.0" + } + } + }), + new ProvideSharedPlugin({ + provides: { + "./test2-wrong": { + shareKey: "test2", + shareScope: "other-scope", + version: "1.1.9" + } + } + }) + ] +}; diff --git a/test/configCases/sharing/provide-multiple-versions/index.js b/test/configCases/sharing/provide-multiple-versions/index.js new file mode 100644 index 00000000000..95d3a1b246e --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/index.js @@ -0,0 +1,27 @@ +import { version } from "shared"; +import { version as innerVersion } from "my-module"; + +it("should provide both shared versions, but not the unused one", async () => { + await __webpack_init_sharing__("default"); + expect(Object.keys(__webpack_share_scopes__.default)).toContain("shared"); + expect(Object.keys(__webpack_share_scopes__.default.shared)).toContain( + "1.0.0" + ); + expect(Object.keys(__webpack_share_scopes__.default.shared)).toContain( + "2.0.0" + ); + expect(Object.keys(__webpack_share_scopes__.default.shared)).not.toContain( + "3.0.0" + ); + expect(__webpack_share_scopes__.default.shared["1.0.0"].from).toEqual( + "package-name" + ); + expect(__webpack_share_scopes__.default.shared["2.0.0"].from).toEqual( + "package-name" + ); +}); + +it("should import the correct versions", () => { + expect(version).toBe("1.0.0"); + expect(innerVersion).toBe("2.0.0"); +}); diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/index.js b/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/index.js new file mode 100644 index 00000000000..33dcca8255b --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/index.js @@ -0,0 +1 @@ +export * from "shared"; diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/node_modules/shared/index.js b/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/node_modules/shared/index.js new file mode 100644 index 00000000000..fa434c11d85 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/node_modules/shared/index.js @@ -0,0 +1 @@ +export * from "./package.json"; diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/node_modules/shared/package.json b/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/node_modules/shared/package.json new file mode 100644 index 00000000000..8836d69c11f --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/my-module/node_modules/shared/package.json @@ -0,0 +1,4 @@ +{ + "name": "shared", + "version": "2.0.0" +} diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/shared/index.js b/test/configCases/sharing/provide-multiple-versions/node_modules/shared/index.js new file mode 100644 index 00000000000..fa434c11d85 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/shared/index.js @@ -0,0 +1 @@ +export * from "./package.json"; diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/shared/package.json b/test/configCases/sharing/provide-multiple-versions/node_modules/shared/package.json new file mode 100644 index 00000000000..65b99b00928 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/shared/package.json @@ -0,0 +1,4 @@ +{ + "name": "shared", + "version": "1.0.0" +} diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/unused-module/node_modules/shared/index.js b/test/configCases/sharing/provide-multiple-versions/node_modules/unused-module/node_modules/shared/index.js new file mode 100644 index 00000000000..fa434c11d85 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/unused-module/node_modules/shared/index.js @@ -0,0 +1 @@ +export * from "./package.json"; diff --git a/test/configCases/sharing/provide-multiple-versions/node_modules/unused-module/node_modules/shared/package.json b/test/configCases/sharing/provide-multiple-versions/node_modules/unused-module/node_modules/shared/package.json new file mode 100644 index 00000000000..87cb039c937 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/node_modules/unused-module/node_modules/shared/package.json @@ -0,0 +1,4 @@ +{ + "name": "shared", + "version": "3.0.0" +} diff --git a/test/configCases/sharing/provide-multiple-versions/package.json b/test/configCases/sharing/provide-multiple-versions/package.json new file mode 100644 index 00000000000..a2508f84799 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/package.json @@ -0,0 +1,3 @@ +{ + "name": "package-name" +} diff --git a/test/configCases/sharing/provide-multiple-versions/webpack.config.js b/test/configCases/sharing/provide-multiple-versions/webpack.config.js new file mode 100644 index 00000000000..55b7c765bc4 --- /dev/null +++ b/test/configCases/sharing/provide-multiple-versions/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const { ProvideSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ProvideSharedPlugin({ + provides: ["shared"] + }) + ] +}; diff --git a/test/configCases/sharing/provide-shared-with-runtime-chunk/index.js b/test/configCases/sharing/provide-shared-with-runtime-chunk/index.js new file mode 100644 index 00000000000..fb5d564378e --- /dev/null +++ b/test/configCases/sharing/provide-shared-with-runtime-chunk/index.js @@ -0,0 +1,5 @@ +import x from "x"; + +it("should work", () => { + expect(x).toBe(42); +}); diff --git a/test/configCases/sharing/provide-shared-with-runtime-chunk/node_modules/x/index.js b/test/configCases/sharing/provide-shared-with-runtime-chunk/node_modules/x/index.js new file mode 100644 index 00000000000..888cae37af9 --- /dev/null +++ b/test/configCases/sharing/provide-shared-with-runtime-chunk/node_modules/x/index.js @@ -0,0 +1 @@ +module.exports = 42; diff --git a/test/configCases/sharing/provide-shared-with-runtime-chunk/node_modules/x/package.json b/test/configCases/sharing/provide-shared-with-runtime-chunk/node_modules/x/package.json new file mode 100644 index 00000000000..1587a669681 --- /dev/null +++ b/test/configCases/sharing/provide-shared-with-runtime-chunk/node_modules/x/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} diff --git a/test/configCases/sharing/provide-shared-with-runtime-chunk/test.config.js b/test/configCases/sharing/provide-shared-with-runtime-chunk/test.config.js new file mode 100644 index 00000000000..5760e2030f0 --- /dev/null +++ b/test/configCases/sharing/provide-shared-with-runtime-chunk/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./runtime.js", "./main.js"]; + } +}; diff --git a/test/configCases/sharing/provide-shared-with-runtime-chunk/webpack.config.js b/test/configCases/sharing/provide-shared-with-runtime-chunk/webpack.config.js new file mode 100644 index 00000000000..ef2803d9777 --- /dev/null +++ b/test/configCases/sharing/provide-shared-with-runtime-chunk/webpack.config.js @@ -0,0 +1,18 @@ +"use strict"; + +const { ProvideSharedPlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: "single" + }, + plugins: [ + new ProvideSharedPlugin({ + provides: ["x"] + }) + ] +}; diff --git a/test/configCases/sharing/share-multiple-versions/index.js b/test/configCases/sharing/share-multiple-versions/index.js new file mode 100644 index 00000000000..aec7523fe98 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/index.js @@ -0,0 +1,7 @@ +it("should provide both shared versions, but not the unused one", async () => { + await __webpack_init_sharing__("default"); + const { version } = await import("shared"); + const { version: versionInner } = await import("my-module"); + expect(version).toBe("1.0.0"); + expect(versionInner).toBe("2.0.0"); +}); diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/my-module/index.js b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/index.js new file mode 100644 index 00000000000..33dcca8255b --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/index.js @@ -0,0 +1 @@ +export * from "shared"; diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/my-module/node_modules/shared/index.js b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/node_modules/shared/index.js new file mode 100644 index 00000000000..fa434c11d85 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/node_modules/shared/index.js @@ -0,0 +1 @@ +export * from "./package.json"; diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/my-module/node_modules/shared/package.json b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/node_modules/shared/package.json new file mode 100644 index 00000000000..8836d69c11f --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/node_modules/shared/package.json @@ -0,0 +1,4 @@ +{ + "name": "shared", + "version": "2.0.0" +} diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/my-module/package.json b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/package.json new file mode 100644 index 00000000000..1bcd4a5c107 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/my-module/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "shared": "^2.0.0" + } +} diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/shared/index.js b/test/configCases/sharing/share-multiple-versions/node_modules/shared/index.js new file mode 100644 index 00000000000..fa434c11d85 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/shared/index.js @@ -0,0 +1 @@ +export * from "./package.json"; diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/shared/package.json b/test/configCases/sharing/share-multiple-versions/node_modules/shared/package.json new file mode 100644 index 00000000000..65b99b00928 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/shared/package.json @@ -0,0 +1,4 @@ +{ + "name": "shared", + "version": "1.0.0" +} diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/unused-module/node_modules/shared/index.js b/test/configCases/sharing/share-multiple-versions/node_modules/unused-module/node_modules/shared/index.js new file mode 100644 index 00000000000..fa434c11d85 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/unused-module/node_modules/shared/index.js @@ -0,0 +1 @@ +export * from "./package.json"; diff --git a/test/configCases/sharing/share-multiple-versions/node_modules/unused-module/node_modules/shared/package.json b/test/configCases/sharing/share-multiple-versions/node_modules/unused-module/node_modules/shared/package.json new file mode 100644 index 00000000000..87cb039c937 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/node_modules/unused-module/node_modules/shared/package.json @@ -0,0 +1,4 @@ +{ + "name": "shared", + "version": "3.0.0" +} diff --git a/test/configCases/sharing/share-multiple-versions/package.json b/test/configCases/sharing/share-multiple-versions/package.json new file mode 100644 index 00000000000..f2f1c5e2ffc --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "shared": "^1.0.0" + } +} diff --git a/test/configCases/sharing/share-multiple-versions/webpack.config.js b/test/configCases/sharing/share-multiple-versions/webpack.config.js new file mode 100644 index 00000000000..268d3dc5dd8 --- /dev/null +++ b/test/configCases/sharing/share-multiple-versions/webpack.config.js @@ -0,0 +1,12 @@ +"use strict"; + +const { SharePlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new SharePlugin({ + shared: ["shared"] + }) + ] +}; diff --git a/test/configCases/sharing/share-plugin-dual-mode/cjs/index.js b/test/configCases/sharing/share-plugin-dual-mode/cjs/index.js new file mode 100644 index 00000000000..94421504941 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/cjs/index.js @@ -0,0 +1,7 @@ +it('should provide own dependency', async () => { + expect(await import('lib')).toEqual( + expect.objectContaining({ + default: 'lib@1.1.1 with transitive_lib@1.1.1', + }), + ); +}); diff --git a/test/configCases/sharing/share-plugin-dual-mode/cjs/package.json b/test/configCases/sharing/share-plugin-dual-mode/cjs/package.json new file mode 100644 index 00000000000..5bbefffbabe --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/cjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/test/configCases/sharing/share-plugin-dual-mode/node_modules/lib/index.js b/test/configCases/sharing/share-plugin-dual-mode/node_modules/lib/index.js new file mode 100644 index 00000000000..7b736bcce99 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/node_modules/lib/index.js @@ -0,0 +1,4 @@ +import cfg from './package.json' with { type: 'json' }; +import transitiveDept from 'transitive_lib'; + +export default `lib@${cfg.version} with ${transitiveDept}`; diff --git a/test/configCases/sharing/share-plugin-dual-mode/node_modules/lib/package.json b/test/configCases/sharing/share-plugin-dual-mode/node_modules/lib/package.json new file mode 100644 index 00000000000..7e0693158c6 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/node_modules/lib/package.json @@ -0,0 +1,6 @@ +{ + "version": "1.1.1", + "dependencies": { + "transitive_lib": "^1.0.0" + } +} diff --git a/test/configCases/sharing/share-plugin-dual-mode/node_modules/transitive_lib/index.js b/test/configCases/sharing/share-plugin-dual-mode/node_modules/transitive_lib/index.js new file mode 100644 index 00000000000..b2e98d48ce5 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/node_modules/transitive_lib/index.js @@ -0,0 +1,3 @@ +import cfg from './package.json' with { type: 'json' }; + +export default `transitive_lib@${cfg.version}`; diff --git a/test/configCases/sharing/share-plugin-dual-mode/node_modules/transitive_lib/package.json b/test/configCases/sharing/share-plugin-dual-mode/node_modules/transitive_lib/package.json new file mode 100644 index 00000000000..2a38ae1d1f4 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/node_modules/transitive_lib/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.1.1" +} diff --git a/test/configCases/sharing/share-plugin-dual-mode/package.json b/test/configCases/sharing/share-plugin-dual-mode/package.json new file mode 100644 index 00000000000..7b0e66048b7 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "lib": "^1.0.0" + } +} diff --git a/test/configCases/sharing/share-plugin-dual-mode/webpack.config.js b/test/configCases/sharing/share-plugin-dual-mode/webpack.config.js new file mode 100644 index 00000000000..870c026fd05 --- /dev/null +++ b/test/configCases/sharing/share-plugin-dual-mode/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const path = require("path"); +const { SharePlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + context: path.resolve(__dirname, "./cjs"), + plugins: [ + new SharePlugin({ + shared: { + lib: {}, + transitive_lib: {} + } + }) + ] +}; diff --git a/test/configCases/sharing/share-plugin-monorepo/app1/index.js b/test/configCases/sharing/share-plugin-monorepo/app1/index.js new file mode 100644 index 00000000000..693cc2448f0 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/app1/index.js @@ -0,0 +1,15 @@ +it('should provide library from own package.json', async () => { + expect(await import('lib1')).toEqual( + expect.objectContaining({ + default: 'lib1@1.1.1', + }), + ); +}); + +it('should provide library from parent package.json', async () => { + expect(await import('lib2')).toEqual( + expect.objectContaining({ + default: 'lib2@2.2.2', + }), + ); +}); diff --git a/test/configCases/sharing/share-plugin-monorepo/app1/node_modules/lib2/index.js b/test/configCases/sharing/share-plugin-monorepo/app1/node_modules/lib2/index.js new file mode 100644 index 00000000000..c5d50faf728 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/app1/node_modules/lib2/index.js @@ -0,0 +1,3 @@ +import cfg from './package.json' with { type: 'json' }; + +export default `lib2@${cfg.version}`; diff --git a/test/configCases/sharing/share-plugin-monorepo/app1/node_modules/lib2/package.json b/test/configCases/sharing/share-plugin-monorepo/app1/node_modules/lib2/package.json new file mode 100644 index 00000000000..b72ccacc95a --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/app1/node_modules/lib2/package.json @@ -0,0 +1,3 @@ +{ + "version": "2.2.2" +} diff --git a/test/configCases/sharing/share-plugin-monorepo/app1/package.json b/test/configCases/sharing/share-plugin-monorepo/app1/package.json new file mode 100644 index 00000000000..6869b5be774 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/app1/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "lib2": "^2.0.0" + } +} diff --git a/test/configCases/sharing/share-plugin-monorepo/node_modules/lib1/index.js b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib1/index.js new file mode 100644 index 00000000000..a54163858e1 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib1/index.js @@ -0,0 +1,3 @@ +import cfg from './package.json' with { type: 'json' }; + +export default `lib1@${cfg.version}`; diff --git a/test/configCases/sharing/share-plugin-monorepo/node_modules/lib1/package.json b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib1/package.json new file mode 100644 index 00000000000..2a38ae1d1f4 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib1/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.1.1" +} diff --git a/test/configCases/sharing/share-plugin-monorepo/node_modules/lib2/index.js b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib2/index.js new file mode 100644 index 00000000000..c5d50faf728 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib2/index.js @@ -0,0 +1,3 @@ +import cfg from './package.json' with { type: 'json' }; + +export default `lib2@${cfg.version}`; diff --git a/test/configCases/sharing/share-plugin-monorepo/node_modules/lib2/package.json b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib2/package.json new file mode 100644 index 00000000000..2a38ae1d1f4 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/node_modules/lib2/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.1.1" +} diff --git a/test/configCases/sharing/share-plugin-monorepo/package.json b/test/configCases/sharing/share-plugin-monorepo/package.json new file mode 100644 index 00000000000..4ad87434de7 --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "lib1": "^1.0.0", + "lib2": "^1.0.0" + } +} diff --git a/test/configCases/sharing/share-plugin-monorepo/webpack.config.js b/test/configCases/sharing/share-plugin-monorepo/webpack.config.js new file mode 100644 index 00000000000..a1ba7c3f6bd --- /dev/null +++ b/test/configCases/sharing/share-plugin-monorepo/webpack.config.js @@ -0,0 +1,19 @@ +"use strict"; + +const path = require("path"); +const { SharePlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + context: path.resolve(__dirname, "./app1"), + plugins: [ + new SharePlugin({ + shared: { + lib1: {}, + lib2: { + singleton: true + } + } + }) + ] +}; diff --git a/test/configCases/sharing/share-plugin/index.js b/test/configCases/sharing/share-plugin/index.js new file mode 100644 index 00000000000..6055bd4aebf --- /dev/null +++ b/test/configCases/sharing/share-plugin/index.js @@ -0,0 +1,44 @@ +it("should provide and consume a normal library async", async () => { + expect(await import("lib1")).toEqual( + expect.objectContaining({ + default: "lib1" + }) + ); +}); + +it("should provide and consume a renamed library sync", () => { + expect(require("lib-two")).toEqual( + expect.objectContaining({ + default: "lib2" + }) + ); +}); + +it("should provide and consume a normal library async in a separate shareScope", async () => { + expect(await import("lib3")).toEqual( + expect.objectContaining({ + default: "lib3" + }) + ); + expect( + __webpack_share_scopes__.default && __webpack_share_scopes__.default.lib3 + ).toBe(undefined); + expect(typeof __webpack_share_scopes__.other.lib3).toBe("object"); +}); + +it("should provide and consume a relative request async", async () => { + expect(await import("./relative1")).toEqual( + expect.objectContaining({ + default: "rel1" + }) + ); +}); + +it("should consume a remapped relative request async", async () => { + if (Math.random() < 0) require("store"); + expect(await import("./relative2")).toEqual( + expect.objectContaining({ + default: "store" + }) + ); +}); diff --git a/test/configCases/sharing/share-plugin/node_modules/lib1/index.js b/test/configCases/sharing/share-plugin/node_modules/lib1/index.js new file mode 100644 index 00000000000..461d2376f4c --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/lib1/index.js @@ -0,0 +1 @@ +export default "lib1"; diff --git a/test/configCases/sharing/share-plugin/node_modules/lib1/package.json b/test/configCases/sharing/share-plugin/node_modules/lib1/package.json new file mode 100644 index 00000000000..2a38ae1d1f4 --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/lib1/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.1.1" +} diff --git a/test/configCases/sharing/share-plugin/node_modules/lib2/index.js b/test/configCases/sharing/share-plugin/node_modules/lib2/index.js new file mode 100644 index 00000000000..c2a6f9581ff --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/lib2/index.js @@ -0,0 +1 @@ +export default "lib2"; diff --git a/test/configCases/sharing/share-plugin/node_modules/lib3/index.js b/test/configCases/sharing/share-plugin/node_modules/lib3/index.js new file mode 100644 index 00000000000..62fde4a705d --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/lib3/index.js @@ -0,0 +1 @@ +export default "lib3"; diff --git a/test/configCases/sharing/share-plugin/node_modules/lib3/package.json b/test/configCases/sharing/share-plugin/node_modules/lib3/package.json new file mode 100644 index 00000000000..2a38ae1d1f4 --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/lib3/package.json @@ -0,0 +1,3 @@ +{ + "version": "1.1.1" +} diff --git a/test/configCases/sharing/share-plugin/node_modules/store/index.js b/test/configCases/sharing/share-plugin/node_modules/store/index.js new file mode 100644 index 00000000000..225383e5cc2 --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/store/index.js @@ -0,0 +1 @@ +export default "store"; diff --git a/test/configCases/sharing/share-plugin/node_modules/store/package.json b/test/configCases/sharing/share-plugin/node_modules/store/package.json new file mode 100644 index 00000000000..ce04135d2cd --- /dev/null +++ b/test/configCases/sharing/share-plugin/node_modules/store/package.json @@ -0,0 +1,3 @@ +{ + "version": "0" +} diff --git a/test/configCases/sharing/share-plugin/package.json b/test/configCases/sharing/share-plugin/package.json new file mode 100644 index 00000000000..759724dfd56 --- /dev/null +++ b/test/configCases/sharing/share-plugin/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "lib3": "^1.1.0" + } +} diff --git a/test/configCases/sharing/share-plugin/relative1.js b/test/configCases/sharing/share-plugin/relative1.js new file mode 100644 index 00000000000..e460ea840d6 --- /dev/null +++ b/test/configCases/sharing/share-plugin/relative1.js @@ -0,0 +1 @@ +export default "rel1"; diff --git a/test/configCases/sharing/share-plugin/relative2.js b/test/configCases/sharing/share-plugin/relative2.js new file mode 100644 index 00000000000..9f52f4c6be4 --- /dev/null +++ b/test/configCases/sharing/share-plugin/relative2.js @@ -0,0 +1 @@ +export default "rel2"; diff --git a/test/configCases/sharing/share-plugin/webpack.config.js b/test/configCases/sharing/share-plugin/webpack.config.js new file mode 100644 index 00000000000..6ce09bc2c9a --- /dev/null +++ b/test/configCases/sharing/share-plugin/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +const { SharePlugin } = require("../../../../").sharing; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: false, + plugins: [ + new SharePlugin({ + shared: { + lib1: "^1.0.0", + "lib-two": { + import: "lib2", + requiredVersion: "^1.0.0", + version: "1.3.4", + strictVersion: true, + eager: true + }, + lib3: { + shareScope: "other" + }, + "./relative1": { + import: "./relative1", + version: false + }, + "./relative2": { + import: false, + shareKey: "store", + version: "0", + requiredVersion: "0", + strictVersion: true + }, + store: "0" + } + }) + ] +}; diff --git a/test/configCases/side-effects/asset-module/index.js b/test/configCases/side-effects/asset-module/index.js new file mode 100644 index 00000000000..f0b7f511428 --- /dev/null +++ b/test/configCases/side-effects/asset-module/index.js @@ -0,0 +1,15 @@ +import asset from "./unused.png?asset"; +import bytes from "./unused.png?bytes"; +import inlined from "./unused.png?inline"; +import source from "./unused.png?source"; +import resource from "./used.png"; + +it("should not include unused assets", () => { + expect(resource).toMatch(/\.png/); + + expect(__webpack_modules__["./used.png"]).toBeDefined(); + expect(__webpack_modules__["./unused.png?asset"]).not.toBeDefined(); + expect(__webpack_modules__["./unused.png?bytes"]).not.toBeDefined(); + expect(__webpack_modules__["./unused.png?inline"]).not.toBeDefined(); + expect(__webpack_modules__["./unused.png?source"]).not.toBeDefined(); +}); diff --git a/test/configCases/side-effects/asset-module/unused.png b/test/configCases/side-effects/asset-module/unused.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/side-effects/asset-module/unused.png differ diff --git a/test/configCases/side-effects/asset-module/used.png b/test/configCases/side-effects/asset-module/used.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/side-effects/asset-module/used.png differ diff --git a/test/configCases/side-effects/asset-module/webpack.config.js b/test/configCases/side-effects/asset-module/webpack.config.js new file mode 100644 index 00000000000..a006e985d1b --- /dev/null +++ b/test/configCases/side-effects/asset-module/webpack.config.js @@ -0,0 +1,43 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "production", + module: { + rules: [ + { + oneOf: [ + { + test: /\.png$/i, + resourceQuery: /asset/, + type: "asset" + }, + { + test: /\.png$/i, + resourceQuery: /bytes/, + type: "asset/bytes" + }, + { + test: /\.png$/i, + resourceQuery: /inline/, + type: "asset/inline" + }, + { + test: /\.png$/i, + resourceQuery: /source/, + type: "asset/source" + }, + { test: /\.png$/i, type: "asset/resource" } + ] + } + ] + }, + optimization: { + sideEffects: true, + moduleIds: "named", + concatenateModules: false + }, + experiments: { + futureDefaults: true + } +}; diff --git a/test/configCases/side-effects/issue-13063/another.js b/test/configCases/side-effects/issue-13063/another.js new file mode 100644 index 00000000000..acd0091daa3 --- /dev/null +++ b/test/configCases/side-effects/issue-13063/another.js @@ -0,0 +1 @@ +require("./vendors").UiSelectButton2(); diff --git a/test/configCases/side-effects/issue-13063/test.config.js b/test/configCases/side-effects/issue-13063/test.config.js new file mode 100644 index 00000000000..53b31d9931e --- /dev/null +++ b/test/configCases/side-effects/issue-13063/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["./vendors.js", "./tst_examples_uiform.js"]; + } +}; diff --git a/test/configCases/side-effects/issue-13063/tst_examples_uiform.js b/test/configCases/side-effects/issue-13063/tst_examples_uiform.js new file mode 100644 index 00000000000..2850741c760 --- /dev/null +++ b/test/configCases/side-effects/issue-13063/tst_examples_uiform.js @@ -0,0 +1,4 @@ +it("should not crash", () => { + require("./vendors").UiSelectButton(); + require("./vendors").UiSelectButton2(); +}); diff --git a/test/configCases/side-effects/issue-13063/tst_examples_uitable.js b/test/configCases/side-effects/issue-13063/tst_examples_uitable.js new file mode 100644 index 00000000000..4ab084f713c --- /dev/null +++ b/test/configCases/side-effects/issue-13063/tst_examples_uitable.js @@ -0,0 +1,5 @@ +import { UiButton } from "./vendors"; + +it("should not crash", () => { + UiButton(); +}); diff --git a/test/configCases/side-effects/issue-13063/vendors/index.js b/test/configCases/side-effects/issue-13063/vendors/index.js new file mode 100644 index 00000000000..c786bf6169a --- /dev/null +++ b/test/configCases/side-effects/issue-13063/vendors/index.js @@ -0,0 +1,9 @@ +import uuid from "./uuid"; +import { checkIsNonemptyString } from "./types"; +export { UiSelectButton } from "./select"; +export { UiSelectButton2 } from "./select2"; + +export function UiButton() { + checkIsNonemptyString(); + uuid(); +} diff --git a/test/configCases/side-effects/issue-13063/vendors/select.js b/test/configCases/side-effects/issue-13063/vendors/select.js new file mode 100644 index 00000000000..3260aa2ca4e --- /dev/null +++ b/test/configCases/side-effects/issue-13063/vendors/select.js @@ -0,0 +1,9 @@ +import uuid from "./uuid"; +import { checkIsNonemptyString } from "./types"; + +export function UiSelectButton() { + checkIsNonemptyString(); + uuid(); +} + +console.log.bind(console); diff --git a/test/configCases/side-effects/issue-13063/vendors/select2.js b/test/configCases/side-effects/issue-13063/vendors/select2.js new file mode 100644 index 00000000000..1939e1c2224 --- /dev/null +++ b/test/configCases/side-effects/issue-13063/vendors/select2.js @@ -0,0 +1,7 @@ +import uuid from "./uuid"; + +export function UiSelectButton2() { + uuid(); +} + +console.log.bind(console); diff --git a/test/configCases/side-effects/issue-13063/vendors/types.js b/test/configCases/side-effects/issue-13063/vendors/types.js new file mode 100644 index 00000000000..02a236bbb43 --- /dev/null +++ b/test/configCases/side-effects/issue-13063/vendors/types.js @@ -0,0 +1 @@ +export function checkIsNonemptyString() {} diff --git a/test/configCases/side-effects/issue-13063/vendors/uuid.js b/test/configCases/side-effects/issue-13063/vendors/uuid.js new file mode 100644 index 00000000000..394593f1e0f --- /dev/null +++ b/test/configCases/side-effects/issue-13063/vendors/uuid.js @@ -0,0 +1 @@ +export default function uuid() {} diff --git a/test/configCases/side-effects/issue-13063/webpack.config.js b/test/configCases/side-effects/issue-13063/webpack.config.js new file mode 100644 index 00000000000..ef172b3c116 --- /dev/null +++ b/test/configCases/side-effects/issue-13063/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +module.exports = { + entry: { + tst_examples_uiform: "./tst_examples_uiform", + tst_examples_uitable: "./tst_examples_uitable", + another: "./another" + }, + output: { + pathinfo: "verbose", + filename: "[name].js" + }, + target: "web", + optimization: { + sideEffects: true, + concatenateModules: true, + splitChunks: { + cacheGroups: { + vendors: { + chunks: "all", + test: /vendors/, + enforce: true, + name: "vendors" + } + } + } + } +}; diff --git a/test/configCases/side-effects/side-effects-override/webpack.config.js b/test/configCases/side-effects/side-effects-override/webpack.config.js index 789ad53cf39..0b6d4994f13 100644 --- a/test/configCases/side-effects/side-effects-override/webpack.config.js +++ b/test/configCases/side-effects/side-effects-override/webpack.config.js @@ -1,4 +1,8 @@ +"use strict"; + const path = require("path"); + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "production", module: { diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/index.js b/test/configCases/side-effects/side-effects-unsorted-modules/index.js new file mode 100644 index 00000000000..b1a42ca2737 --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/index.js @@ -0,0 +1,9 @@ +import { b } from "dep"; + +b.c(); + +import { modules } from "dep/trackModules.js"; + +it("should not contain side-effect-free modules", () => { + expect(modules).toEqual(["c"]); +}); diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/a.js b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/a.js new file mode 100644 index 00000000000..dbcb9480348 --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/a.js @@ -0,0 +1,3 @@ +import { track } from "./trackModules.js"; +track("a"); +export * as b from "./b.js"; diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/b.js b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/b.js new file mode 100644 index 00000000000..4f79dddc406 --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/b.js @@ -0,0 +1,3 @@ +import { track } from "./trackModules.js"; +track("b"); +export * from "./c.js"; diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/c.js b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/c.js new file mode 100644 index 00000000000..48e53b3520f --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/c.js @@ -0,0 +1,3 @@ +import { track } from "./trackModules.js"; +track("c"); +export function c() {} diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/index.js b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/index.js new file mode 100644 index 00000000000..bec05fc5011 --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/index.js @@ -0,0 +1,3 @@ +import { track } from "./trackModules.js"; +track("index"); +export * from "./a.js" diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/package.json b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/package.json new file mode 100644 index 00000000000..644d902d8e0 --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/package.json @@ -0,0 +1,6 @@ +{ + "name": "dep", + "version": "1.0.0", + "type": "module", + "sideEffects": false +} diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/trackModules.js b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/trackModules.js new file mode 100644 index 00000000000..99f5f10b0ca --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/node_modules/dep/trackModules.js @@ -0,0 +1,4 @@ +export const modules = []; +export function track(name) { + modules.push(name); +} diff --git a/test/configCases/side-effects/side-effects-unsorted-modules/webpack.config.js b/test/configCases/side-effects/side-effects-unsorted-modules/webpack.config.js new file mode 100644 index 00000000000..776754b1490 --- /dev/null +++ b/test/configCases/side-effects/side-effects-unsorted-modules/webpack.config.js @@ -0,0 +1,28 @@ +"use strict"; + +/** @typedef {import("../../../../").Compiler} Compiler */ +/** @typedef {import("../../../../").NormalModule} NormalModule */ + +class ReorderModulesPlugin { + /** + * @param {Compiler} compiler compiler + */ + apply(compiler) { + compiler.hooks.compilation.tap("ReorderModulesPlugin", (compilation) => { + compilation.hooks.seal.tap("ReorderModulesPlugin", () => { + const sortedModules = [...compilation.modules].sort((a, _b) => + /** @type {NormalModule} */ + (a).request.includes("b.js") ? -1 : 1 + ); + compilation.modules = new Set(sortedModules); + }); + }); + } +} + +module.exports = { + plugins: [new ReorderModulesPlugin()], + optimization: { + sideEffects: true + } +}; diff --git a/test/configCases/side-effects/side-effects-values/webpack.config.js b/test/configCases/side-effects/side-effects-values/webpack.config.js index c5fce2d1bf2..5c6c362a57a 100644 --- a/test/configCases/side-effects/side-effects-values/webpack.config.js +++ b/test/configCases/side-effects/side-effects-values/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "production", module: { diff --git a/test/configCases/side-effects/type-reexports/a.js b/test/configCases/side-effects/type-reexports/a.js new file mode 100644 index 00000000000..9233cce2f0e --- /dev/null +++ b/test/configCases/side-effects/type-reexports/a.js @@ -0,0 +1 @@ +export const a = "a"; diff --git a/test/configCases/side-effects/type-reexports/b.js b/test/configCases/side-effects/type-reexports/b.js new file mode 100644 index 00000000000..59d1689930e --- /dev/null +++ b/test/configCases/side-effects/type-reexports/b.js @@ -0,0 +1 @@ +export const b = "b"; diff --git a/test/configCases/side-effects/type-reexports/empty.js b/test/configCases/side-effects/type-reexports/empty.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/configCases/side-effects/type-reexports/index.js b/test/configCases/side-effects/type-reexports/index.js new file mode 100644 index 00000000000..a42effb0688 --- /dev/null +++ b/test/configCases/side-effects/type-reexports/index.js @@ -0,0 +1,14 @@ +import { a, b } from "./module"; +import * as empty from "./empty"; + +it("should skip over module", () => { + empty.a = "not a"; + empty.b = "not b"; + expect(a).toBe("a"); + expect(b).toBe("b"); + expect(__STATS__.children.length).toBe(2); + for (const stats of __STATS__.children) { + const module = stats.modules.find(m => m.name.endsWith("module.js")); + expect(module).toHaveProperty("orphan", true); + } +}); diff --git a/test/configCases/side-effects/type-reexports/module.js b/test/configCases/side-effects/type-reexports/module.js new file mode 100644 index 00000000000..c76908f40fc --- /dev/null +++ b/test/configCases/side-effects/type-reexports/module.js @@ -0,0 +1,3 @@ +export * from "./a"; +export * from "./empty"; +export * from "./b"; diff --git a/test/configCases/side-effects/type-reexports/webpack.config.js b/test/configCases/side-effects/type-reexports/webpack.config.js new file mode 100644 index 00000000000..cc7eb9d8225 --- /dev/null +++ b/test/configCases/side-effects/type-reexports/webpack.config.js @@ -0,0 +1,24 @@ +"use strict"; + +module.exports = [ + { + output: { + pathinfo: "verbose" + }, + optimization: { + concatenateModules: true, + sideEffects: true, + usedExports: true + } + }, + { + output: { + pathinfo: "verbose" + }, + optimization: { + concatenateModules: false, + sideEffects: true, + usedExports: true + } + } +]; diff --git a/test/configCases/side-effects/url/file.png b/test/configCases/side-effects/url/file.png new file mode 100644 index 00000000000..fb53b9dedd3 Binary files /dev/null and b/test/configCases/side-effects/url/file.png differ diff --git a/test/configCases/side-effects/url/index.js b/test/configCases/side-effects/url/index.js new file mode 100644 index 00000000000..56c0b0522d3 --- /dev/null +++ b/test/configCases/side-effects/url/index.js @@ -0,0 +1,31 @@ +import { used } from "./module"; + +it("should not include unused assets", () => { + expect(used.href).toMatch(/png/); + expect(__STATS__.modules.find(m => m.name.includes("file.png?used"))).toEqual( + expect.objectContaining({ + orphan: false + }) + ); + expect( + __STATS__.modules.find(m => m.name.includes("file.png?default")) + ).toEqual( + expect.objectContaining({ + orphan: true + }) + ); + expect( + __STATS__.modules.find(m => m.name.includes("file.png?named")) + ).toEqual( + expect.objectContaining({ + orphan: true + }) + ); + expect( + __STATS__.modules.find(m => m.name.includes("file.png?indirect")) + ).toEqual( + expect.objectContaining({ + orphan: true + }) + ); +}); diff --git a/test/configCases/side-effects/url/module.js b/test/configCases/side-effects/url/module.js new file mode 100644 index 00000000000..c16525a2e3c --- /dev/null +++ b/test/configCases/side-effects/url/module.js @@ -0,0 +1,8 @@ +export default new URL("file.png?default", import.meta.url); +export const named = new URL("file.png?named", import.meta.url); +export const indirect = fn; +export const used = new URL("file.png?used", import.meta.url); + +function fn() { + return new URL("file.png?indirect", import.meta.url); +} diff --git a/test/configCases/side-effects/url/webpack.config.js b/test/configCases/side-effects/url/webpack.config.js new file mode 100644 index 00000000000..db05329b698 --- /dev/null +++ b/test/configCases/side-effects/url/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + optimization: { + sideEffects: true, + innerGraph: true + } +}; diff --git a/test/configCases/simple/empty-config/webpack.config.js b/test/configCases/simple/empty-config/webpack.config.js index f053ebf7976..27313115dcd 100644 --- a/test/configCases/simple/empty-config/webpack.config.js +++ b/test/configCases/simple/empty-config/webpack.config.js @@ -1 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = {}; diff --git a/test/configCases/simple/multi-compiler-functions-export/webpack.config.js b/test/configCases/simple/multi-compiler-functions-export/webpack.config.js index 5f250c4ac57..f151215eacc 100644 --- a/test/configCases/simple/multi-compiler-functions-export/webpack.config.js +++ b/test/configCases/simple/multi-compiler-functions-export/webpack.config.js @@ -1,5 +1,7 @@ -exports.default = [ - function() { +"use strict"; + +module.exports.default = [ + function empty() { return {}; } ]; diff --git a/test/configCases/simple/multi-compiler-functions/webpack.config.js b/test/configCases/simple/multi-compiler-functions/webpack.config.js index 6bd31ab78ca..d64d68acbf8 100644 --- a/test/configCases/simple/multi-compiler-functions/webpack.config.js +++ b/test/configCases/simple/multi-compiler-functions/webpack.config.js @@ -1,5 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ module.exports = [ - function() { + function empty() { return {}; } ]; diff --git a/test/configCases/simple/multi-compiler/webpack.config.js b/test/configCases/simple/multi-compiler/webpack.config.js index c5578074bb3..26c4bc00336 100644 --- a/test/configCases/simple/multi-compiler/webpack.config.js +++ b/test/configCases/simple/multi-compiler/webpack.config.js @@ -1 +1,4 @@ +"use strict"; + +/** @type {import("../../../../").Configuration[]} */ module.exports = [{}]; diff --git a/test/configCases/source-map/array-as-output-library-in-object-output/index.js b/test/configCases/source-map/array-as-output-library-in-object-output/index.js new file mode 100644 index 00000000000..e0b8201c32b --- /dev/null +++ b/test/configCases/source-map/array-as-output-library-in-object-output/index.js @@ -0,0 +1 @@ +it("should compile successfully when output.library.root is an array of strings", function () { }); diff --git a/test/configCases/source-map/array-as-output-library-in-object-output/webpack.config.js b/test/configCases/source-map/array-as-output-library-in-object-output/webpack.config.js new file mode 100644 index 00000000000..1b42b506857 --- /dev/null +++ b/test/configCases/source-map/array-as-output-library-in-object-output/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: "source-map", + output: { + library: { + root: ["Foo", "[name]"], + amd: "[name]", + commonjs: "[name]" + }, + libraryTarget: "umd" + } +}; diff --git a/test/configCases/source-map/array-as-output-library/webpack.config.js b/test/configCases/source-map/array-as-output-library/webpack.config.js index ee3cbe39bbf..0833b4782c7 100644 --- a/test/configCases/source-map/array-as-output-library/webpack.config.js +++ b/test/configCases/source-map/array-as-output-library/webpack.config.js @@ -1,3 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ module.exports = { devtool: "source-map", output: { diff --git a/test/configCases/source-map/context-module-source-path/foo/a.js b/test/configCases/source-map/context-module-source-path/foo/a.js new file mode 100644 index 00000000000..6cd1d0075d4 --- /dev/null +++ b/test/configCases/source-map/context-module-source-path/foo/a.js @@ -0,0 +1 @@ +module.exports = "a"; diff --git a/test/configCases/source-map/context-module-source-path/foo/b.js b/test/configCases/source-map/context-module-source-path/foo/b.js new file mode 100644 index 00000000000..dfbbeb621fa --- /dev/null +++ b/test/configCases/source-map/context-module-source-path/foo/b.js @@ -0,0 +1 @@ +module.exports = "b"; diff --git a/test/configCases/source-map/context-module-source-path/index.js b/test/configCases/source-map/context-module-source-path/index.js new file mode 100644 index 00000000000..f97c91a9fcf --- /dev/null +++ b/test/configCases/source-map/context-module-source-path/index.js @@ -0,0 +1,9 @@ +const foo = Math.random() > 0.5 ? "a" : "b"; +require(`./foo/${foo}.js`); + +it("context module should use relative path in source map file", () => { + var fs = require("fs"); + var source = fs.readFileSync(__filename + ".map", "utf-8"); + var map = JSON.parse(source); + expect(map.sources).toContain("webpack:///./foo/ sync ^\\.\\/.*\\.js$"); +}); diff --git a/test/configCases/source-map/context-module-source-path/webpack.config.js b/test/configCases/source-map/context-module-source-path/webpack.config.js new file mode 100644 index 00000000000..0399c23c3c8 --- /dev/null +++ b/test/configCases/source-map/context-module-source-path/webpack.config.js @@ -0,0 +1,9 @@ +"use strict"; + +module.exports = { + node: { + __dirname: false, + __filename: false + }, + devtool: "source-map" +}; diff --git a/test/configCases/source-map/default-filename-extensions-css/index.js b/test/configCases/source-map/default-filename-extensions-css/index.js new file mode 100644 index 00000000000..12cac76ec29 --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-css/index.js @@ -0,0 +1,13 @@ +import "./style.css"; +import fs from "fs"; +import path from "path"; + +it("creates source maps for .css output files by default", function() { + const css = fs.readFileSync(path.resolve(__dirname, "style.css"), "utf-8"); + const map = JSON.parse(fs.readFileSync(path.resolve(__dirname, "style.css.map"), "utf-8")); + + var match = /sourceMappingURL\s*=\s*(.*)\*\//.exec(css); + expect(match[1]).toBe("style.css.map"); + expect(map).toHaveProperty("version", 3); + expect(map).toHaveProperty("file", "style.css"); +}); \ No newline at end of file diff --git a/test/configCases/source-map/default-filename-extensions-css/style.css b/test/configCases/source-map/default-filename-extensions-css/style.css new file mode 100644 index 00000000000..40363d3c146 --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-css/style.css @@ -0,0 +1,3 @@ +body { + background-color: red; +} \ No newline at end of file diff --git a/test/configCases/source-map/default-filename-extensions-css/webpack.config.js b/test/configCases/source-map/default-filename-extensions-css/webpack.config.js new file mode 100644 index 00000000000..4aab368d6f0 --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-css/webpack.config.js @@ -0,0 +1,38 @@ +"use strict"; + +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + filename: "bundle0.js" + }, + node: { + __dirname: false, + __filename: false + }, + devtool: "source-map", + module: { + rules: [ + { + test: /\.css$/i, + use: [ + MiniCssExtractPlugin.loader, + { + loader: "css-loader", + options: { + sourceMap: true + } + } + ] + } + ] + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: "style.css", + chunkFilename: "[id].css" + }) + ] +}; diff --git a/test/configCases/source-map/default-filename-extensions-js/index.js b/test/configCases/source-map/default-filename-extensions-js/index.js new file mode 100644 index 00000000000..dd399bd0fbc --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-js/index.js @@ -0,0 +1,6 @@ +it("creates source maps for .js output files by default", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8"); + var match = /sourceMappingURL\s*=\s*(.*)/.exec(source); + expect(match[1]).toBe("bundle0.js.map"); +}); \ No newline at end of file diff --git a/test/configCases/source-map/line-to-line/test.js b/test/configCases/source-map/default-filename-extensions-js/test.js similarity index 100% rename from test/configCases/source-map/line-to-line/test.js rename to test/configCases/source-map/default-filename-extensions-js/test.js diff --git a/test/configCases/source-map/default-filename-extensions-js/webpack.config.js b/test/configCases/source-map/default-filename-extensions-js/webpack.config.js new file mode 100644 index 00000000000..909f207d7c5 --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-js/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + filename: "bundle0.js" + }, + node: { + __dirname: false, + __filename: false + }, + devtool: "source-map" +}; diff --git a/test/configCases/source-map/default-filename-extensions-mjs/index.js b/test/configCases/source-map/default-filename-extensions-mjs/index.js new file mode 100644 index 00000000000..b7d62986081 --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-mjs/index.js @@ -0,0 +1,6 @@ +it("creates source maps for .mjs output files by default", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8"); + var match = /sourceMappingURL\s*=\s*(.*)/.exec(source); + expect(match[1]).toBe("bundle0.mjs.map"); +}); diff --git a/test/configCases/source-map/default-filename-extensions-mjs/test.js b/test/configCases/source-map/default-filename-extensions-mjs/test.js new file mode 100644 index 00000000000..d336df4c821 --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-mjs/test.js @@ -0,0 +1,3 @@ +var foo = {}; + +module.exports = foo; \ No newline at end of file diff --git a/test/configCases/source-map/default-filename-extensions-mjs/webpack.config.js b/test/configCases/source-map/default-filename-extensions-mjs/webpack.config.js new file mode 100644 index 00000000000..6a493687fda --- /dev/null +++ b/test/configCases/source-map/default-filename-extensions-mjs/webpack.config.js @@ -0,0 +1,14 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + output: { + filename: "bundle0.mjs" + }, + node: { + __dirname: false, + __filename: false + }, + devtool: "source-map" +}; diff --git a/test/configCases/source-map/default-source-map-properties/index.js b/test/configCases/source-map/default-source-map-properties/index.js new file mode 100644 index 00000000000..3755faf77c8 --- /dev/null +++ b/test/configCases/source-map/default-source-map-properties/index.js @@ -0,0 +1,16 @@ +it("should not include empty ignoreList in source map", () => { + const fs = require("fs"); + const path = require("path"); + const sourceMapPath = path.join(__dirname, "bundle0.js.map"); + const sourceMapContent = fs.readFileSync(sourceMapPath, "utf-8"); + + expect(sourceMapContent).not.toMatch(/"ignoreList"\s*:\s*\[\s*\]/); + + // Verify default source map properties are present + const sourceMap = JSON.parse(sourceMapContent); + expect(sourceMap).toHaveProperty("version", 3); + expect(sourceMap).toHaveProperty("sources"); + expect(Array.isArray(sourceMap.sources)).toBe(true); + expect(sourceMap.sources.length).toBeGreaterThan(0); +}); + diff --git a/test/configCases/source-map/default-source-map-properties/webpack.config.js b/test/configCases/source-map/default-source-map-properties/webpack.config.js new file mode 100644 index 00000000000..1f518a44e05 --- /dev/null +++ b/test/configCases/source-map/default-source-map-properties/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: "source-map", + entry: "./index.js" +}; diff --git a/test/configCases/source-map/devtool-namespace-with-eval-source-map/src/entry-a.js b/test/configCases/source-map/devtool-namespace-with-eval-source-map/src/entry-a.js new file mode 100644 index 00000000000..38fc7ef515a --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval-source-map/src/entry-a.js @@ -0,0 +1,5 @@ +it("should include webpack://library-entry-a/./src/entry-a.js in SourceMap", function() { + const fs = require("fs"); + const source = fs.readFileSync(__filename, "utf-8"); + expect(source).toContain("sourceURL=webpack://library-entry-a/./src/entry-a.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-eval-source-map/src/entry-b.js b/test/configCases/source-map/devtool-namespace-with-eval-source-map/src/entry-b.js new file mode 100644 index 00000000000..a35a615aa0e --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval-source-map/src/entry-b.js @@ -0,0 +1,5 @@ +it("should include webpack://library-entry-b/./src/entry-b.js in SourceMap", function() { + const fs = require("fs"); + const source = fs.readFileSync(__filename, "utf-8"); + expect(source).toContain("sourceURL=webpack://library-entry-b/./src/entry-b.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-eval-source-map/test.config.js b/test/configCases/source-map/devtool-namespace-with-eval-source-map/test.config.js new file mode 100644 index 00000000000..b42f991e21a --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval-source-map/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry-a-bundle.js", "entry-b-bundle.js"]; + } +}; diff --git a/test/configCases/source-map/devtool-namespace-with-eval-source-map/webpack.config.js b/test/configCases/source-map/devtool-namespace-with-eval-source-map/webpack.config.js new file mode 100644 index 00000000000..ba9d693d8d9 --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval-source-map/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + entry: { + "entry-a": [path.join(__dirname, "./src/entry-a")], + "entry-b": [path.join(__dirname, "./src/entry-b")] + }, + + output: { + filename: "[name]-bundle.js", + library: "library-[name]", + libraryTarget: "commonjs", + devtoolNamespace: "library-[name]" + }, + devtool: "eval-source-map" +}; diff --git a/test/configCases/source-map/devtool-namespace-with-eval/src/entry-a.js b/test/configCases/source-map/devtool-namespace-with-eval/src/entry-a.js new file mode 100644 index 00000000000..38fc7ef515a --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval/src/entry-a.js @@ -0,0 +1,5 @@ +it("should include webpack://library-entry-a/./src/entry-a.js in SourceMap", function() { + const fs = require("fs"); + const source = fs.readFileSync(__filename, "utf-8"); + expect(source).toContain("sourceURL=webpack://library-entry-a/./src/entry-a.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-eval/src/entry-b.js b/test/configCases/source-map/devtool-namespace-with-eval/src/entry-b.js new file mode 100644 index 00000000000..a35a615aa0e --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval/src/entry-b.js @@ -0,0 +1,5 @@ +it("should include webpack://library-entry-b/./src/entry-b.js in SourceMap", function() { + const fs = require("fs"); + const source = fs.readFileSync(__filename, "utf-8"); + expect(source).toContain("sourceURL=webpack://library-entry-b/./src/entry-b.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-eval/test.config.js b/test/configCases/source-map/devtool-namespace-with-eval/test.config.js new file mode 100644 index 00000000000..b42f991e21a --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry-a-bundle.js", "entry-b-bundle.js"]; + } +}; diff --git a/test/configCases/source-map/devtool-namespace-with-eval/webpack.config.js b/test/configCases/source-map/devtool-namespace-with-eval/webpack.config.js new file mode 100644 index 00000000000..8c7b8e2537d --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-eval/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + entry: { + "entry-a": [path.join(__dirname, "./src/entry-a")], + "entry-b": [path.join(__dirname, "./src/entry-b")] + }, + + output: { + filename: "[name]-bundle.js", + library: "library-[name]", + libraryTarget: "commonjs", + devtoolNamespace: "library-[name]" + }, + devtool: "eval" +}; diff --git a/test/configCases/source-map/devtool-namespace-with-source-map/index.js b/test/configCases/source-map/devtool-namespace-with-source-map/index.js new file mode 100644 index 00000000000..2eb06b2d38d --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-source-map/index.js @@ -0,0 +1,6 @@ +it("should include webpack://library-entry-a/./src/entry-a.js in SourceMap", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename + ".map", "utf-8"); + var map = JSON.parse(source); + expect(map.sources).toContain("sourceURL=webpack://library-entry-a/./src/entry-a.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-source-map/src/entry-a.js b/test/configCases/source-map/devtool-namespace-with-source-map/src/entry-a.js new file mode 100644 index 00000000000..37fd80b001d --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-source-map/src/entry-a.js @@ -0,0 +1,6 @@ +it("should include webpack://library-entry-a/./src/entry-a.js in SourceMap", function() { + const fs = require("fs"); + const source = fs.readFileSync(__filename + ".map", "utf-8"); + const map = JSON.parse(source); + expect(map.sources).toContain("webpack://library-entry-a/./src/entry-a.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-source-map/src/entry-b.js b/test/configCases/source-map/devtool-namespace-with-source-map/src/entry-b.js new file mode 100644 index 00000000000..7c0d0b8b2ee --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-source-map/src/entry-b.js @@ -0,0 +1,6 @@ +it("should include webpack://library-entry-b/./src/entry-b.js in SourceMap", function() { + const fs = require("fs"); + const source = fs.readFileSync(__filename + ".map", "utf-8"); + const map = JSON.parse(source); + expect(map.sources).toContain("webpack://library-entry-b/./src/entry-b.js"); +}); diff --git a/test/configCases/source-map/devtool-namespace-with-source-map/test.config.js b/test/configCases/source-map/devtool-namespace-with-source-map/test.config.js new file mode 100644 index 00000000000..b42f991e21a --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-source-map/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["entry-a-bundle.js", "entry-b-bundle.js"]; + } +}; diff --git a/test/configCases/source-map/devtool-namespace-with-source-map/webpack.config.js b/test/configCases/source-map/devtool-namespace-with-source-map/webpack.config.js new file mode 100644 index 00000000000..1502a4043b8 --- /dev/null +++ b/test/configCases/source-map/devtool-namespace-with-source-map/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +const path = require("path"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + entry: { + "entry-a": [path.join(__dirname, "./src/entry-a")], + "entry-b": [path.join(__dirname, "./src/entry-b")] + }, + + output: { + filename: "[name]-bundle.js", + library: "library-[name]", + libraryTarget: "commonjs", + devtoolNamespace: "library-[name]" + }, + devtool: "source-map" +}; diff --git a/test/configCases/source-map/devtools-customize/bar.css b/test/configCases/source-map/devtools-customize/bar.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/source-map/devtools-customize/bar.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/source-map/devtools-customize/foo.css b/test/configCases/source-map/devtools-customize/foo.css new file mode 100644 index 00000000000..d642e55fa73 --- /dev/null +++ b/test/configCases/source-map/devtools-customize/foo.css @@ -0,0 +1 @@ +@import url("./bar.css"); diff --git a/test/configCases/source-map/devtools-customize/index.js b/test/configCases/source-map/devtools-customize/index.js new file mode 100644 index 00000000000..b7847218b03 --- /dev/null +++ b/test/configCases/source-map/devtools-customize/index.js @@ -0,0 +1,32 @@ +import fs from "fs"; +import path from "path"; +import "./foo.css"; + +const readFile = (filename) => { + let dirname; + if (typeof window !== "undefined") { + dirname = __STATS__.outputPath; + } else { + dirname = __dirname; + } + return fs.readFileSync(path.join(dirname, filename), "utf-8"); +}; + +const getSourceMap = (filename) => { + return JSON.parse(readFile(filename)); +}; + +it("should compile successfully and have individual css sourcemap", async () => { + let map = getSourceMap("bundle0.css.map"); + // hidden + expect(readFile("bundle0.css")).not.toMatch(/\/\/ sourceMappingURL=/); + // nosources + expect(map).not.toHaveProperty("sourcesContent"); + // cheap + expect(map.mappings).not.toContain(","); + + map = getSourceMap("bundle0.mjs.map"); + expect(map).toHaveProperty("sourcesContent"); + expect(map.mappings).toContain(","); + expect(readFile("bundle0.mjs")).toMatch(/\/\/\# sourceMappingURL=/); +}); diff --git a/test/configCases/source-map/devtools-customize/webpack.config.js b/test/configCases/source-map/devtools-customize/webpack.config.js new file mode 100644 index 00000000000..847f047211f --- /dev/null +++ b/test/configCases/source-map/devtools-customize/webpack.config.js @@ -0,0 +1,55 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: ["web", "node"], + experiments: { + css: true, + outputModule: true + }, + devtool: [ + { + type: "all", + use: "source-map" + } + ], + plugins: [ + { + apply(compiler) { + // TODO webpack6 - we will remove compatibility logic + expect(compiler.options.devtool).toBe("source-map"); + + compiler.options.devtool = false; + expect(compiler.options.devtool).toBe(false); + + compiler.options.devtool = []; + expect(compiler.options.devtool).toBe(false); + + delete compiler.options.devtool; + expect(compiler.options.devtool).toBeUndefined(); + + Object.defineProperty(compiler.options, "devtool", { + value: [{ type: "javascript", use: "eval" }] + }); + expect(compiler.options.devtool).toBe("eval"); + const desc = Object.getOwnPropertyDescriptor( + compiler.options, + "devtool" + ); + if (desc) expect(desc.value).toBe("eval"); + + compiler.options.devtool = [ + { + type: "css", + use: "hidden-nosources-cheap-source-map" + }, + { + type: "javascript", + use: "source-map" + } + ]; + expect(compiler.options.devtool).toBe("source-map"); + } + } + ] +}; diff --git a/test/configCases/source-map/devtools-default/bar.css b/test/configCases/source-map/devtools-default/bar.css new file mode 100644 index 00000000000..575d19f7b0e --- /dev/null +++ b/test/configCases/source-map/devtools-default/bar.css @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/test/configCases/source-map/devtools-default/foo.css b/test/configCases/source-map/devtools-default/foo.css new file mode 100644 index 00000000000..d642e55fa73 --- /dev/null +++ b/test/configCases/source-map/devtools-default/foo.css @@ -0,0 +1 @@ +@import url("./bar.css"); diff --git a/test/configCases/source-map/devtools-default/index.js b/test/configCases/source-map/devtools-default/index.js new file mode 100644 index 00000000000..73ffb72d8e1 --- /dev/null +++ b/test/configCases/source-map/devtools-default/index.js @@ -0,0 +1,28 @@ +import fs from "fs"; +import path from "path"; +import "./foo.css"; + +const readFile = (filename) => { + let dirname; + if (typeof window !== "undefined") { + dirname = __STATS__.outputPath; + } else { + dirname = __dirname; + } + return fs.readFileSync(path.join(dirname, filename), "utf-8"); +}; + +const getSourceMap = (filename) => { + return JSON.parse(readFile(filename)); +}; + +it("should compile successfully and have individual css sourcemap", async () => { + let map = getSourceMap("bundle0.css.map"); + expect(map.sources).toStrictEqual([ + "webpack:///css ./bar.css", + "webpack:///css ./foo.css" + ]); + expect(() => { + readFile("bundle0.js.map"); + }).toThrow(); +}); diff --git a/test/configCases/source-map/devtools-default/webpack.config.js b/test/configCases/source-map/devtools-default/webpack.config.js new file mode 100644 index 00000000000..5fe94eaf2b7 --- /dev/null +++ b/test/configCases/source-map/devtools-default/webpack.config.js @@ -0,0 +1,11 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + target: ["web", "node"], + experiments: { + css: true, + outputModule: true + } +}; diff --git a/test/configCases/source-map/dual-source-map-plugins/entry1.js b/test/configCases/source-map/dual-source-map-plugins/entry1.js new file mode 100644 index 00000000000..8992022df12 --- /dev/null +++ b/test/configCases/source-map/dual-source-map-plugins/entry1.js @@ -0,0 +1,19 @@ +import fs from "fs"; +import path from "path"; + +const getSourceMap = (filename) => { + const content = fs.readFileSync(path.join(__dirname, filename), "utf-8"); + return JSON.parse(content); +}; + +it("should compile successfully and have dual sourcemap", () => { + let map = getSourceMap("bundle0.js.map"); + expect(map.sources).toContain("webpack:///./entry1.js") + + map = getSourceMap("runtime~bundle0.js.runtime.map"); + for (const source of map.sources) { + // Should only include webpack runtime module + expect(source.startsWith("webpack:///webpack")).toBe(true) + } + +}); diff --git a/test/configCases/source-map/dual-source-map-plugins/entry2.js b/test/configCases/source-map/dual-source-map-plugins/entry2.js new file mode 100644 index 00000000000..b3dc6867292 --- /dev/null +++ b/test/configCases/source-map/dual-source-map-plugins/entry2.js @@ -0,0 +1,25 @@ +import fs from "fs"; +import path from "path"; + +const readFile = (filename) => { + return fs.readFileSync(path.join(__dirname, filename), "utf-8"); +}; + +const getSourceMap = (filename) => { + return JSON.parse(readFile(filename)); +}; + +it("should compile successfully and have dual sourcemap", () => { + expect(() => { + getSourceMap("bundle1.js.map"); + }).toThrow(); + + var bundle1 = readFile("bundle1.js"); + expect(bundle1).toMatch('eval("'); + + let map = getSourceMap("runtime~bundle1.js.runtime.map"); + for (const source of map.sources) { + // Should only include webpack runtime module + expect(source.startsWith("webpack:///webpack")).toBe(true); + } +}); diff --git a/test/configCases/source-map/dual-source-map-plugins/entry3.js b/test/configCases/source-map/dual-source-map-plugins/entry3.js new file mode 100644 index 00000000000..9f524d6da79 --- /dev/null +++ b/test/configCases/source-map/dual-source-map-plugins/entry3.js @@ -0,0 +1,58 @@ +import fs from "fs"; +import path from "path"; + +const readFile = (filename) => { + return fs.readFileSync(path.join(__dirname, filename), "utf-8"); +}; + +const getSourceMap = (filename) => { + return JSON.parse(readFile(filename)); +}; + +it("should compile successfully and have dual sourcemap", async () => { + import(/* webpackChunkName: "chunk-foo" */ "./foo").then( + ({ default: foo }) => { + expect(foo).toBe("foo"); + } + ); + + let bundle2 = readFile("bundle2.js"); + let bundle2Map = getSourceMap("bundle2.js.test.map"); + // append: false + expect(bundle2).not.toMatch(/\/\/ sourceMappingURL=/); + // sourceRoot: "test" + expect(bundle2Map.sourceRoot).toBe("test"); + // ignoreList: /entry3\.js/ + expect(bundle2Map.ignoreList[0]).toBe( + bundle2Map.sources.findIndex((source) => /entry3\.js/.test(source)) + ); + // columns: false + expect(bundle2Map.mappings).not.toContain(","); + // namespace: "test" + for (const source of bundle2Map.sources) { + expect(source.startsWith("webpack://test")).toBe(true); + } + + let chunkFoo = readFile("chunk-foo.js"); + let chunkFooMap = getSourceMap("chunk-foo.js.foo.map"); + // append fn + publicPath + expect(chunkFoo).toMatch( + "//# sourceMappingURL=http://localhost:8080/foo/sourcemaps/chunk-foo.js.foo.map" + ); + // sourceRoot: "foo" + expect(chunkFooMap.sourceRoot).toBe("foo"); + // columns: true + expect(chunkFooMap.mappings).toContain(","); + // noSources: true, + expect(chunkFooMap.sourcesContent).toBeUndefined(); + // debugIds: true + expect( + /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/i.test( + chunkFooMap.debugId + ) + ).toBe(true); + // namespace: "foo" + for (const source of chunkFooMap.sources) { + expect(source.startsWith("webpack://foo")).toBe(true); + } +}); diff --git a/test/configCases/source-map/dual-source-map-plugins/foo.js b/test/configCases/source-map/dual-source-map-plugins/foo.js new file mode 100644 index 00000000000..0877aa85af2 --- /dev/null +++ b/test/configCases/source-map/dual-source-map-plugins/foo.js @@ -0,0 +1 @@ +export default "foo" diff --git a/test/configCases/source-map/dual-source-map-plugins/test.config.js b/test/configCases/source-map/dual-source-map-plugins/test.config.js new file mode 100644 index 00000000000..1f7b502023f --- /dev/null +++ b/test/configCases/source-map/dual-source-map-plugins/test.config.js @@ -0,0 +1,7 @@ +"use strict"; + +module.exports = { + findBundle() { + return ["bundle0.js", "bundle1.js", "bundle2.js"]; + } +}; diff --git a/test/configCases/source-map/dual-source-map-plugins/webpack.config.js b/test/configCases/source-map/dual-source-map-plugins/webpack.config.js new file mode 100644 index 00000000000..57738e3364a --- /dev/null +++ b/test/configCases/source-map/dual-source-map-plugins/webpack.config.js @@ -0,0 +1,80 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + devtool: false, + entry: { + bundle0: "./entry1.js" + }, + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: true + }, + plugins: [ + new webpack.SourceMapDevToolPlugin({ + filename: "[file].map", + test: (name) => name === "bundle0.js" + }), + new webpack.SourceMapDevToolPlugin({ + filename: "[file].runtime.map", + test: /runtime~bundle0\.js/ + }) + ] + }, + { + entry: { + bundle1: "./entry2.js" + }, + devtool: false, + output: { + filename: "[name].js" + }, + optimization: { + runtimeChunk: true + }, + plugins: [ + new webpack.EvalDevToolModulePlugin(), + new webpack.SourceMapDevToolPlugin({ + filename: "[file].runtime.map", + test: ["runtime~bundle1.js"] + }) + ] + }, + { + entry: { + bundle2: "./entry3.js" + }, + devtool: false, + output: { + filename: "[name].js", + chunkFilename: "[name].js" + }, + plugins: [ + new webpack.SourceMapDevToolPlugin({ + filename: "[file].test.map", + test: "bundle2.js", + columns: false, + append: false, + namespace: "test", + sourceRoot: "test", + ignoreList: /entry3\.js/ + }), + new webpack.SourceMapDevToolPlugin({ + filename: "[file].foo.map", + test: "chunk-foo.js", + columns: true, + publicPath: "sourcemaps/", + noSources: true, + append: () => "\n//# sourceMappingURL=http://localhost:8080/foo/[url]", + namespace: "foo", + sourceRoot: "foo", + debugIds: true + }) + ] + } +]; diff --git a/test/configCases/source-map/eval-default-source-map-properties/index.js b/test/configCases/source-map/eval-default-source-map-properties/index.js new file mode 100644 index 00000000000..775cf90c7d2 --- /dev/null +++ b/test/configCases/source-map/eval-default-source-map-properties/index.js @@ -0,0 +1,20 @@ +it("should not include empty ignoreList in eval source map", () => { + const fs = require("fs"); + const source = fs.readFileSync(__filename, "utf-8"); + + const match = /sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,([A-Za-z0-9+\/=]+)/.exec( + source + ); + expect(match).not.toBeNull(); + const mapString = Buffer.from(match[1], "base64").toString("utf-8"); + + expect(mapString).not.toMatch(/"ignoreList"\s*:\s*\[\s*\]/); + + // Verify default source map properties are present + const sourceMap = JSON.parse(mapString); + expect(sourceMap).toHaveProperty("version", 3); + expect(sourceMap).toHaveProperty("sources"); + expect(Array.isArray(sourceMap.sources)).toBe(true); + expect(sourceMap.sources.length).toBeGreaterThan(0); +}); + diff --git a/test/configCases/source-map/eval-default-source-map-properties/webpack.config.js b/test/configCases/source-map/eval-default-source-map-properties/webpack.config.js new file mode 100644 index 00000000000..da399effb28 --- /dev/null +++ b/test/configCases/source-map/eval-default-source-map-properties/webpack.config.js @@ -0,0 +1,8 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + mode: "development", + devtool: "eval-source-map", + entry: "./index.js" +}; diff --git a/test/configCases/source-map/eval-nosources-source-map/index.js b/test/configCases/source-map/eval-nosources-source-map/index.js new file mode 100644 index 00000000000..288699bbbd7 --- /dev/null +++ b/test/configCases/source-map/eval-nosources-source-map/index.js @@ -0,0 +1,11 @@ +it("should not include sourcesContent if noSources option is used", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8"); + var match = /\/\/# sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,(.*)\\n\/\/#/.exec(source); + var mapString = Buffer.from(match[1], 'base64').toString('utf-8'); + var map = JSON.parse(mapString); + expect(map).not.toHaveProperty("sourcesContent"); + expect(/\.js(\?.+)?$/.test(map.file)).toBe(true); +}); + +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/source-map/eval-nosources-source-map/index.ts b/test/configCases/source-map/eval-nosources-source-map/index.ts new file mode 100644 index 00000000000..5178739ea8d --- /dev/null +++ b/test/configCases/source-map/eval-nosources-source-map/index.ts @@ -0,0 +1,11 @@ +it("should not include sourcesContent if noSources option is used", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8"); + var match = /\/\/# sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,(.*)\\n\/\/#/.exec(source); + var mapString = Buffer.from(match[1], 'base64').toString('utf-8'); + var map = JSON.parse(mapString); + expect(map).not.toHaveProperty("sourcesContent"); + expect(/\.ts(\?.+)?$/.test(map.file)).toBe(true); +}); + +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/source-map/eval-nosources-source-map/node_modules/pkg/index.js b/test/configCases/source-map/eval-nosources-source-map/node_modules/pkg/index.js new file mode 100644 index 00000000000..d171d00eb94 --- /dev/null +++ b/test/configCases/source-map/eval-nosources-source-map/node_modules/pkg/index.js @@ -0,0 +1 @@ +import "../../index.js"; diff --git a/test/configCases/source-map/eval-nosources-source-map/test.filter.js b/test/configCases/source-map/eval-nosources-source-map/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/configCases/source-map/eval-nosources-source-map/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/configCases/source-map/eval-nosources-source-map/test.js b/test/configCases/source-map/eval-nosources-source-map/test.js new file mode 100644 index 00000000000..c9d8865844b --- /dev/null +++ b/test/configCases/source-map/eval-nosources-source-map/test.js @@ -0,0 +1,3 @@ +var foo = {}; + +module.exports = foo; diff --git a/test/configCases/source-map/eval-nosources-source-map/webpack.config.js b/test/configCases/source-map/eval-nosources-source-map/webpack.config.js new file mode 100644 index 00000000000..c4e951f3538 --- /dev/null +++ b/test/configCases/source-map/eval-nosources-source-map/webpack.config.js @@ -0,0 +1,85 @@ +"use strict"; + +const devtool = "eval-nosources-source-map"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + devtool + }, + { + devtool, + optimization: { + moduleIds: "natural" + } + }, + { + devtool, + optimization: { + moduleIds: "named" + } + }, + { + devtool, + optimization: { + moduleIds: "deterministic" + } + }, + { + devtool, + optimization: { + moduleIds: "size" + } + }, + { + entry: "./index?foo=bar", + devtool, + optimization: { + moduleIds: "named" + } + }, + { + entry: "./index.js?foo=bar", + devtool, + optimization: { + moduleIds: "named" + } + }, + { + entry: "alias", + devtool, + optimization: { + moduleIds: "named" + }, + resolve: { + alias: { + alias: "./index?foo=bar" + } + } + }, + { + entry: "pkg", + devtool, + optimization: { + moduleIds: "named" + } + }, + { + entry: "./index.ts?foo=bar", + devtool, + optimization: { + moduleIds: "named" + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { + transpileOnly: true + } + } + ] + } + } +]; diff --git a/test/configCases/source-map/eval-source-map-debugids/index.js b/test/configCases/source-map/eval-source-map-debugids/index.js new file mode 100644 index 00000000000..20fddcd310b --- /dev/null +++ b/test/configCases/source-map/eval-source-map-debugids/index.js @@ -0,0 +1,16 @@ +const fs = require("fs"); + +it("should not include sourcesContent if noSources option is used", function() { + const source = fs.readFileSync(__filename, "utf-8"); + const match = /\/\/# sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,(.*)\\n\/\/#/.exec(source); + const mapString = Buffer.from(match[1], 'base64').toString('utf-8'); + const map = JSON.parse(mapString); + expect(map).toHaveProperty("sourcesContent"); + expect(map).toHaveProperty("debugId"); + expect( + /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/i.test(map.debugId) + ).toBe(true); + expect(/\.js(\?.+)?$/.test(map.file)).toBe(true); +}); + +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/source-map/eval-source-map-debugids/test.js b/test/configCases/source-map/eval-source-map-debugids/test.js new file mode 100644 index 00000000000..c9d8865844b --- /dev/null +++ b/test/configCases/source-map/eval-source-map-debugids/test.js @@ -0,0 +1,3 @@ +var foo = {}; + +module.exports = foo; diff --git a/test/configCases/source-map/eval-source-map-debugids/webpack.config.js b/test/configCases/source-map/eval-source-map-debugids/webpack.config.js new file mode 100644 index 00000000000..5b1287d986b --- /dev/null +++ b/test/configCases/source-map/eval-source-map-debugids/webpack.config.js @@ -0,0 +1,6 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: "eval-source-map-debugids" +}; diff --git a/test/configCases/source-map/eval-source-map-ignore-list/ignored.js b/test/configCases/source-map/eval-source-map-ignore-list/ignored.js new file mode 100644 index 00000000000..e86a6859799 --- /dev/null +++ b/test/configCases/source-map/eval-source-map-ignore-list/ignored.js @@ -0,0 +1 @@ +export default "ignored"; diff --git a/test/configCases/source-map/eval-source-map-ignore-list/index.js b/test/configCases/source-map/eval-source-map-ignore-list/index.js new file mode 100644 index 00000000000..054fb5afc26 --- /dev/null +++ b/test/configCases/source-map/eval-source-map-ignore-list/index.js @@ -0,0 +1,34 @@ +import used from "./used"; +import ignored from "./ignored"; +import fs from "fs"; + +const getSourceMap = () => { + const source = fs.readFileSync(__filename, "utf-8"); + const match = + /\/\/# sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,(.*)\\n\/\/#/.exec( + source + ); + const mapString = Buffer.from(match[1], "base64").toString("utf-8"); + return JSON.parse(mapString); +}; + +const map = getSourceMap(); + +it("marks matching modules in ignoreList", () => { + const sources = map.sources; + const ignoredIndex = sources.findIndex((source) => + /ignored\.js/.test(source) + ); + expect(ignored).toBe("ignored"); + expect(ignoredIndex).not.toBe(-1); + expect(Array.isArray(map.ignoreList)).toBe(true); + expect(map.ignoreList).toContain(ignoredIndex); +}); + +it("keeps other modules outside ignoreList", () => { + const sources = map.sources; + const usedIndex = sources.findIndex((source) => /used\.js/.test(source)); + expect(used).toBe("used"); + expect(usedIndex).not.toBe(-1); + expect(map.ignoreList).not.toContain(usedIndex); +}); diff --git a/test/configCases/source-map/eval-source-map-ignore-list/used.js b/test/configCases/source-map/eval-source-map-ignore-list/used.js new file mode 100644 index 00000000000..ee64d969526 --- /dev/null +++ b/test/configCases/source-map/eval-source-map-ignore-list/used.js @@ -0,0 +1 @@ +export default "used"; diff --git a/test/configCases/source-map/eval-source-map-ignore-list/webpack.config.js b/test/configCases/source-map/eval-source-map-ignore-list/webpack.config.js new file mode 100644 index 00000000000..5317201690b --- /dev/null +++ b/test/configCases/source-map/eval-source-map-ignore-list/webpack.config.js @@ -0,0 +1,17 @@ +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + devtool: false, + plugins: [ + new webpack.EvalSourceMapDevToolPlugin({ + ignoreList: [/ignored\.js/] + }) + ], + optimization: { + // Ensure the correct `sourceMappingURL` is detected + concatenateModules: true + } +}; diff --git a/test/configCases/source-map/eval-source-map/index.js b/test/configCases/source-map/eval-source-map/index.js new file mode 100644 index 00000000000..13b57720b66 --- /dev/null +++ b/test/configCases/source-map/eval-source-map/index.js @@ -0,0 +1,11 @@ +it("should not include sourcesContent if noSources option is used", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8"); + var match = /\/\/# sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,(.*)\\n\/\/#/.exec(source); + var mapString = Buffer.from(match[1], 'base64').toString('utf-8'); + var map = JSON.parse(mapString); + expect(map).toHaveProperty("sourcesContent"); + expect(/\.js(\?.+)?$/.test(map.file)).toBe(true); +}); + +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/source-map/eval-source-map/index.ts b/test/configCases/source-map/eval-source-map/index.ts new file mode 100644 index 00000000000..bae246dd86c --- /dev/null +++ b/test/configCases/source-map/eval-source-map/index.ts @@ -0,0 +1,11 @@ +it("should not include sourcesContent if noSources option is used", function() { + var fs = require("fs"); + var source = fs.readFileSync(__filename, "utf-8"); + var match = /\/\/# sourceMappingURL\s*=\s*data:application\/json;charset=utf-8;base64,(.*)\\n\/\/#/.exec(source); + var mapString = Buffer.from(match[1], 'base64').toString('utf-8'); + var map = JSON.parse(mapString); + expect(map).toHaveProperty("sourcesContent"); + expect(/\.ts(\?.+)?$/.test(map.file)).toBe(true); +}); + +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/source-map/eval-source-map/node_modules/pkg/index.js b/test/configCases/source-map/eval-source-map/node_modules/pkg/index.js new file mode 100644 index 00000000000..d171d00eb94 --- /dev/null +++ b/test/configCases/source-map/eval-source-map/node_modules/pkg/index.js @@ -0,0 +1 @@ +import "../../index.js"; diff --git a/test/configCases/source-map/eval-source-map/test.filter.js b/test/configCases/source-map/eval-source-map/test.filter.js new file mode 100644 index 00000000000..53cf6da0c34 --- /dev/null +++ b/test/configCases/source-map/eval-source-map/test.filter.js @@ -0,0 +1,5 @@ +"use strict"; + +const supportsOptionalChaining = require("../../../helpers/supportsOptionalChaining"); + +module.exports = () => supportsOptionalChaining(); diff --git a/test/configCases/source-map/eval-source-map/test.js b/test/configCases/source-map/eval-source-map/test.js new file mode 100644 index 00000000000..c9d8865844b --- /dev/null +++ b/test/configCases/source-map/eval-source-map/test.js @@ -0,0 +1,3 @@ +var foo = {}; + +module.exports = foo; diff --git a/test/configCases/source-map/eval-source-map/webpack.config.js b/test/configCases/source-map/eval-source-map/webpack.config.js new file mode 100644 index 00000000000..5264abd0b31 --- /dev/null +++ b/test/configCases/source-map/eval-source-map/webpack.config.js @@ -0,0 +1,85 @@ +"use strict"; + +const devtool = "eval-source-map"; + +/** @type {import("../../../../").Configuration[]} */ +module.exports = [ + { + devtool + }, + { + devtool, + optimization: { + moduleIds: "natural" + } + }, + { + devtool, + optimization: { + moduleIds: "named" + } + }, + { + devtool, + optimization: { + moduleIds: "deterministic" + } + }, + { + devtool, + optimization: { + moduleIds: "size" + } + }, + { + entry: "./index?foo=bar", + devtool, + optimization: { + moduleIds: "named" + } + }, + { + entry: "./index.js?foo=bar", + devtool, + optimization: { + moduleIds: "named" + } + }, + { + entry: "alias", + devtool, + optimization: { + moduleIds: "named" + }, + resolve: { + alias: { + alias: "./index?foo=bar" + } + } + }, + { + entry: "pkg", + devtool, + optimization: { + moduleIds: "named" + } + }, + { + entry: "./index.ts?foo=bar", + devtool, + optimization: { + moduleIds: "named" + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { + transpileOnly: true + } + } + ] + } + } +]; diff --git a/test/configCases/source-map/exclude-chunks-source-map/index.js b/test/configCases/source-map/exclude-chunks-source-map/index.js index 810a47f9fdb..f08b4dd69b9 100644 --- a/test/configCases/source-map/exclude-chunks-source-map/index.js +++ b/test/configCases/source-map/exclude-chunks-source-map/index.js @@ -7,9 +7,9 @@ it("should include test.js in SourceMap for bundle0 chunk", function() { it("should not produce a SourceMap for vendors chunk", function() { var fs = require("fs"), - path = require("path"), - assert = require("assert"); + path = require("path"), + assert = require("assert"); expect(fs.existsSync(path.join(__dirname, "vendors.js.map"))).toBe(false); }); -require.include("./test.js"); +if (Math.random() < 0) require("./test.js"); diff --git a/test/configCases/source-map/exclude-chunks-source-map/webpack.config.js b/test/configCases/source-map/exclude-chunks-source-map/webpack.config.js index 3e69a12fe1f..e97e1eef438 100644 --- a/test/configCases/source-map/exclude-chunks-source-map/webpack.config.js +++ b/test/configCases/source-map/exclude-chunks-source-map/webpack.config.js @@ -1,4 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { mode: "development", devtool: false, diff --git a/test/configCases/source-map/exclude-modules-source-map/index.js b/test/configCases/source-map/exclude-modules-source-map/index.js index bb54f271649..568a5ee144b 100644 --- a/test/configCases/source-map/exclude-modules-source-map/index.js +++ b/test/configCases/source-map/exclude-modules-source-map/index.js @@ -2,7 +2,7 @@ it("bundle1 should include eval sourcemapped test1.js and test2.js as is", funct var fs = require("fs"); var path = require("path"); var bundle1 = fs.readFileSync(path.join(__dirname, "bundle1.js"), "utf-8"); - expect(bundle1).toMatch("eval(\"var test1marker"); + expect(bundle1).toMatch("eval(\"{var test1marker"); expect(bundle1).toMatch("var test2marker"); - expect(bundle1).not.toMatch("eval(\"var test2marker"); + expect(bundle1).not.toMatch("eval(\"{var test2marker"); }); diff --git a/test/configCases/source-map/exclude-modules-source-map/webpack.config.js b/test/configCases/source-map/exclude-modules-source-map/webpack.config.js index 028743e5cf6..12336684f8b 100644 --- a/test/configCases/source-map/exclude-modules-source-map/webpack.config.js +++ b/test/configCases/source-map/exclude-modules-source-map/webpack.config.js @@ -1,4 +1,8 @@ -var webpack = require("../../../../"); +"use strict"; + +const webpack = require("../../../../"); + +/** @type {import("../../../../").Configuration} */ module.exports = { node: { __dirname: false, diff --git a/test/configCases/source-map/extract-source-map-css/__snapshots__/ConfigCacheTest.snap b/test/configCases/source-map/extract-source-map-css/__snapshots__/ConfigCacheTest.snap new file mode 100644 index 00000000000..7e423dd94d3 --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/__snapshots__/ConfigCacheTest.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigCacheTestCases source-map extract-source-map-css exported tests should compile 1`] = ` +Array [ + "/*!*********************!*\\\\ + !*** css ./app.css ***! + \\\\*********************/ +* { + box-sizing: border-box; } + + .row { + display: flex; + margin-right: -15px; + margin-left: -15px; } + + .col-inner { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + height: 50px; + background: coral; } + + .col-s3 { + flex: 0 1 25%; + padding: 0 15px; } + + + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/source-map/extract-source-map-css/__snapshots__/ConfigTest.snap b/test/configCases/source-map/extract-source-map-css/__snapshots__/ConfigTest.snap new file mode 100644 index 00000000000..34cb9dfd7bc --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/__snapshots__/ConfigTest.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`ConfigTestCases source-map extract-source-map-css exported tests should compile 1`] = ` +Array [ + "/*!*********************!*\\\\ + !*** css ./app.css ***! + \\\\*********************/ +* { + box-sizing: border-box; } + + .row { + display: flex; + margin-right: -15px; + margin-left: -15px; } + + .col-inner { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + height: 50px; + background: coral; } + + .col-s3 { + flex: 0 1 25%; + padding: 0 15px; } + + + + +/*# sourceMappingURL=bundle0.css.map*/", +] +`; diff --git a/test/configCases/source-map/extract-source-map-css/app.css b/test/configCases/source-map/extract-source-map-css/app.css new file mode 100644 index 00000000000..3ed2e44f3f8 --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/app.css @@ -0,0 +1,22 @@ +* { + box-sizing: border-box; } + + .row { + display: flex; + margin-right: -15px; + margin-left: -15px; } + + .col-inner { + display: flex; + align-items: center; + justify-content: center; + color: #fff; + height: 50px; + background: coral; } + + .col-s3 { + flex: 0 1 25%; + padding: 0 15px; } + + + /*# sourceMappingURL=app.css.map*/ \ No newline at end of file diff --git a/test/configCases/source-map/extract-source-map-css/app.css.map b/test/configCases/source-map/extract-source-map-css/app.css.map new file mode 100644 index 00000000000..70f9234afa0 --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/app.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/app/app.scss"],"names":[],"mappings":"AAAA;EACE,sBAAsB;;AAGxB;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;;AAIlB;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,iBAAiB;;AAInB;EACE,aAAa;EACb,eAAe","file":"app.css","sourcesContent":["* {\n box-sizing: border-box;\n}\n\n.row {\n display: flex;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.col {\n &-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n height: 50px;\n background: coral;\n //background: red;\n }\n\n &-s3 {\n flex: 0 1 25%;\n padding: 0 15px;\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/test/configCases/source-map/extract-source-map-css/index.js b/test/configCases/source-map/extract-source-map-css/index.js new file mode 100644 index 00000000000..ca49230c162 --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/index.js @@ -0,0 +1,14 @@ +import "./app.css"; + +it("should compile", done => { + const links = document.getElementsByTagName("link"); + const css = []; + + // Skip first because import it by default + for (const link of links.slice(1)) { + css.push(link.sheet.css); + } + + expect(css).toMatchSnapshot(); + done(); +}); diff --git a/test/configCases/source-map/extract-source-map-css/test.config.js b/test/configCases/source-map/extract-source-map-css/test.config.js new file mode 100644 index 00000000000..eaabc0c0c55 --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/test.config.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + moduleScope(scope) { + const link = scope.window.document.createElement("link"); + link.rel = "stylesheet"; + link.href = "bundle0.css"; + scope.window.document.head.appendChild(link); + } +}; diff --git a/test/configCases/source-map/extract-source-map-css/webpack.config.js b/test/configCases/source-map/extract-source-map-css/webpack.config.js new file mode 100644 index 00000000000..25941bf174d --- /dev/null +++ b/test/configCases/source-map/extract-source-map-css/webpack.config.js @@ -0,0 +1,20 @@ +"use strict"; + +/** @type {import("../../../../").Configuration} */ +module.exports = { + target: "web", + mode: "development", + devtool: "source-map", + module: { + rules: [ + { + test: /\.css$/i, + type: "css", + extractSourceMap: true + } + ] + }, + experiments: { + css: true + } +}; diff --git a/test/configCases/source-map/extract-source-map/extract1.js b/test/configCases/source-map/extract-source-map/extract1.js new file mode 100644 index 00000000000..ce4e7372162 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/extract1.js @@ -0,0 +1,15 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +require("./test1"); +require("./no-source-map"); + +it("should extract source map - 1", () => { + const fileData = fs.readFileSync(__filename + ".map").toString("utf-8"); + const { sources } = JSON.parse(fileData); + expect(sources).toContain("webpack:///./extract1.js"); + expect(sources).toContain("webpack:///./charset-inline-source-map.txt"); + expect(sources).toContain("webpack:///./no-source-map.js"); +}); diff --git a/test/configCases/source-map/extract-source-map/extract2.js b/test/configCases/source-map/extract-source-map/extract2.js new file mode 100644 index 00000000000..27c58bda364 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/extract2.js @@ -0,0 +1,12 @@ +"use strict"; + +const fs = require("fs"); + +require("./test2"); + +it("should extract source map - 2", () => { + const fileData = fs.readFileSync(__filename + ".map").toString("utf-8"); + const { sources } = JSON.parse(fileData); + expect(sources).toContain("webpack:///./external-source-map.txt"); + expect(sources).toContain("webpack:///./extract2.js"); +}); diff --git a/test/configCases/source-map/extract-source-map/extract3.js b/test/configCases/source-map/extract-source-map/extract3.js new file mode 100644 index 00000000000..00f47621591 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/extract3.js @@ -0,0 +1,13 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); + +require("./test3"); + +it("should extract source map - 3", () => { + const fileData = fs.readFileSync(__filename + ".map").toString("utf-8"); + const { sources } = JSON.parse(fileData); + expect(sources).toContain("webpack:///./external-source-map.txt"); + expect(sources).toContain("webpack:///./extract3.js"); +}); diff --git a/test/configCases/source-map/extract-source-map/extract4.js b/test/configCases/source-map/extract-source-map/extract4.js new file mode 100644 index 00000000000..f97fec188d4 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/extract4.js @@ -0,0 +1,11 @@ +"use strict"; + +const fs = require("fs"); + +require("./test4"); + +it("should extract source map - 4", () => { + const fileData = fs.readFileSync(__filename + ".map").toString("utf-8"); + const { sources } = JSON.parse(fileData); + expect(sources.includes("webpack:///antd/./components/button/index.tsx")).toBe(true); +}); diff --git a/test/configCases/source-map/extract-source-map/infrastructure-log.js b/test/configCases/source-map/extract-source-map/infrastructure-log.js new file mode 100644 index 00000000000..f42d7b98c60 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/infrastructure-log.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = [ + /^Pack got invalid because of write to: Compilation\/modules.+no-source-map\.js$/ +]; diff --git a/test/configCases/source-map/extract-source-map/lock-files/lock.json b/test/configCases/source-map/extract-source-map/lock-files/lock.json new file mode 100644 index 00000000000..be96134ad45 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/lock-files/lock.json @@ -0,0 +1,4 @@ +{ + "https://cdnjs.cloudflare.com/ajax/libs/antd/5.27.3/antd.min.js.map": { "integrity": "sha512-dV8AVOy1aVA2CRfd5/ZKySqR8i/VcIZCfJbstL+kyuzioyu/652hEL+KRrqVutRx8y5CTwFskQVQ79rFy5VRLg==", "contentType": "application/octet-stream; charset=utf-8" }, + "version": 1 +} diff --git a/test/configCases/source-map/extract-source-map/lock-files/test/https_cdnjs.cloudflare.com/ajax_libs_antd_5.27.3_antd.min.js_fe00769910fd1150fec7.map b/test/configCases/source-map/extract-source-map/lock-files/test/https_cdnjs.cloudflare.com/ajax_libs_antd_5.27.3_antd.min.js_fe00769910fd1150fec7.map new file mode 100644 index 00000000000..96a81368e33 --- /dev/null +++ b/test/configCases/source-map/extract-source-map/lock-files/test/https_cdnjs.cloudflare.com/ajax_libs_antd_5.27.3_antd.min.js_fe00769910fd1150fec7.map @@ -0,0 +1 @@ +{"version":3,"file":"antd.min.js","mappings":"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","sources":["webpack://antd/webpack/universalModuleDefinition","webpack://antd/./index.js","webpack://antd/./components/theme/util/genStyleUtils.ts","webpack://antd/./components/typography/style/mixins.ts","webpack://antd/./components/typography/style/index.ts","webpack://antd/./components/cascader/style/columns.ts","webpack://antd/./components/_util/reactNode.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://antd/./node_modules/dayjs/plugin/customParseFormat.js","webpack://antd/./node_modules/rc-util/es/utils/set.js","webpack://antd/./node_modules/rc-pagination/es/locale/zh_CN.js","webpack://antd/./node_modules/rc-motion/es/context.js","webpack://antd/./node_modules/rc-motion/es/DomWrapper.js","webpack://antd/./node_modules/rc-motion/es/interface.js","webpack://antd/./node_modules/rc-motion/es/util/motion.js","webpack://antd/./node_modules/rc-motion/es/hooks/useDomMotionEvents.js","webpack://antd/./node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js","webpack://antd/./node_modules/rc-motion/es/hooks/useNextFrame.js","webpack://antd/./node_modules/rc-motion/es/hooks/useStepQueue.js","webpack://antd/./node_modules/rc-motion/es/hooks/useStatus.js","webpack://antd/./node_modules/rc-util/es/hooks/useSyncState.js","webpack://antd/./node_modules/rc-motion/es/CSSMotion.js","webpack://antd/./node_modules/rc-motion/es/util/diff.js","webpack://antd/./node_modules/rc-motion/es/CSSMotionList.js","webpack://antd/./node_modules/rc-motion/es/index.js","webpack://antd/./components/float-button/util.ts","webpack://antd/./components/float-button/style/keyframes.ts","webpack://antd/./components/float-button/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://antd/./components/splitter/style/index.ts","webpack://antd/./node_modules/rc-util/es/hooks/useLayoutEffect.js","webpack://antd/./node_modules/rc-util/es/Dom/canUseDom.js","webpack://antd/./alias/cssinjs.js","webpack://antd/./node_modules/@ant-design/icons/es/components/Context.js","webpack://antd/./components/version/version.ts","webpack://antd/./components/version/index.tsx","webpack://antd/./components/_util/zindexContext.ts","webpack://antd/./components/theme/themes/shared/genFontMapToken.ts","webpack://antd/./node_modules/rc-util/es/hooks/useState.js","webpack://antd/./components/breadcrumb/style/index.ts","webpack://antd/./components/drawer/style/motion.ts","webpack://antd/./components/drawer/style/index.ts","webpack://antd/./node_modules/json2mq/index.js","webpack://antd/./components/avatar/style/index.ts","webpack://antd/./components/color-picker/style/color-block.ts","webpack://antd/./components/color-picker/style/input.ts","webpack://antd/./components/color-picker/style/picker.ts","webpack://antd/./components/color-picker/style/presets.ts","webpack://antd/./components/color-picker/style/slider.ts","webpack://antd/./components/color-picker/style/index.ts","webpack://antd/./components/tree-select/style/index.ts","webpack://antd/./components/descriptions/style/index.ts","webpack://antd/./components/qr-code/style/index.ts","webpack://antd/./node_modules/dayjs/plugin/localeData.js","webpack://antd/./components/theme/themes/default/theme.ts","webpack://antd/./node_modules/rc-util/es/pickAttrs.js","webpack://antd/./components/form/style/explain.ts","webpack://antd/./components/form/style/index.ts","webpack://antd/./components/input/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://antd/./components/upload/style/dragger.ts","webpack://antd/./components/upload/style/list.ts","webpack://antd/./components/upload/style/motion.ts","webpack://antd/./components/upload/style/rtl.ts","webpack://antd/./components/upload/style/index.ts","webpack://antd/./components/upload/style/picture.ts","webpack://antd/./components/statistic/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://antd/./components/theme/themes/shared/genColorMapToken.ts","webpack://antd/./components/theme/themes/shared/genFontSizes.ts","webpack://antd/./node_modules/rc-util/es/hooks/useMergedState.js","webpack://antd/./node_modules/rc-util/es/Children/toArray.js","webpack://antd/external umd {\"root\":\"dayjs\",\"commonjs2\":\"dayjs\",\"commonjs\":\"dayjs\",\"amd\":\"dayjs\"}","webpack://antd/./node_modules/@ant-design/fast-color/es/FastColor.js","webpack://antd/./node_modules/rc-util/es/Dom/shadow.js","webpack://antd/./components/menu/style/horizontal.ts","webpack://antd/./components/menu/style/rtl.ts","webpack://antd/./components/menu/style/theme.ts","webpack://antd/./components/menu/style/vertical.ts","webpack://antd/./components/menu/style/index.ts","webpack://antd/./components/mentions/style/index.ts","webpack://antd/./components/config-provider/hooks/useSize.ts","webpack://antd/./components/alert/style/index.ts","webpack://antd/./components/config-provider/context.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://antd/./components/card/style/index.ts","webpack://antd/./components/button/style/token.ts","webpack://antd/./components/tag/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://antd/./components/spin/style/index.ts","webpack://antd/./components/popconfirm/style/index.ts","webpack://antd/./components/theme/context.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://antd/./components/calendar/locale/en_US.ts","webpack://antd/./components/tree/style/directory.ts","webpack://antd/./components/tree/style/index.ts","webpack://antd/./node_modules/rc-util/es/isEqual.js","webpack://antd/./components/transfer/style/index.ts","webpack://antd/./components/slider/style/index.ts","webpack://antd/./components/affix/style/index.ts","webpack://antd/./components/style/motion/zoom.ts","webpack://antd/./components/theme/themes/shared/genRadius.ts","webpack://antd/./components/theme/themes/default/colorAlgorithm.ts","webpack://antd/./components/theme/themes/default/colors.ts","webpack://antd/./components/theme/themes/default/index.ts","webpack://antd/./components/theme/themes/shared/genSizeMapToken.ts","webpack://antd/./components/theme/themes/shared/genCommonMapToken.ts","webpack://antd/./node_modules/@rc-component/color-picker/es/color.js","webpack://antd/./node_modules/@rc-component/color-picker/es/util.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/ColorBlock.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/Handler.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/Palette.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/Picker.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/Gradient.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/Slider.js","webpack://antd/./node_modules/@rc-component/color-picker/es/hooks/useColorDrag.js","webpack://antd/./node_modules/@rc-component/color-picker/es/components/Transform.js","webpack://antd/./node_modules/@rc-component/color-picker/es/hooks/useColorState.js","webpack://antd/./node_modules/@rc-component/color-picker/es/ColorPicker.js","webpack://antd/./node_modules/@rc-component/color-picker/es/index.js","webpack://antd/./node_modules/@rc-component/color-picker/es/hooks/useComponent.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://antd/./node_modules/rc-picker/es/locale/en_US.js","webpack://antd/./components/date-picker/locale/en_US.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://antd/./components/input-number/style/index.ts","webpack://antd/./components/input-number/style/token.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://antd/./components/collapse/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://antd/./components/_util/hooks/useZIndex.ts","webpack://antd/./node_modules/rc-collapse/es/PanelContent.js","webpack://antd/./node_modules/rc-collapse/es/Panel.js","webpack://antd/./node_modules/rc-collapse/es/hooks/useItems.js","webpack://antd/./node_modules/rc-collapse/es/Collapse.js","webpack://antd/./node_modules/rc-collapse/es/index.js","webpack://antd/./components/collapse/CollapsePanel.tsx","webpack://antd/./components/collapse/Collapse.tsx","webpack://antd/./components/collapse/index.tsx","webpack://antd/./components/ sync ^\\.\\/[^_][\\w-]+\\/style\\/index\\.tsx","webpack://antd/./components/theme/themes/shared/genControlHeight.ts","webpack://antd/./components/flex/style/index.ts","webpack://antd/./components/rate/style/index.ts","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/calc/calculator.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/calc/CSSCalculator.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/calc/NumCalculator.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/calc/index.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/getCompVarPrefix.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/getComponentToken.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/statistic.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/getDefaultComponentToken.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/maxmin.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/_util/hooks/useUniqueMemo.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/hooks/useCSP.js","webpack://antd/./node_modules/@ant-design/cssinjs-utils/es/util/genStyleUtils.js","webpack://antd/./components/time-picker/locale/en_US.ts","webpack://antd/./components/carousel/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://antd/./components/locale/en_US.ts","webpack://antd/./components/app/style/index.ts","webpack://antd/./components/select/style/dropdown.ts","webpack://antd/./components/select/style/single.ts","webpack://antd/./components/select/style/variants.ts","webpack://antd/./components/select/style/index.ts","webpack://antd/./components/select/style/token.ts","webpack://antd/./components/timeline/style/index.ts","webpack://antd/./node_modules/rc-util/es/Dom/contains.js","webpack://antd/./components/notification/style/placement.ts","webpack://antd/./components/notification/interface.ts","webpack://antd/./components/notification/style/stack.ts","webpack://antd/./components/notification/style/index.ts","webpack://antd/./components/tour/style/index.ts","webpack://antd/./components/message/style/index.ts","webpack://antd/./node_modules/rc-util/es/Dom/dynamicCSS.js","webpack://antd/./components/col/style/index.ts","webpack://antd/./components/input/style/variants.ts","webpack://antd/./components/cascader/style/index.ts","webpack://antd/./components/style/compact-item.ts","webpack://antd/./components/date-picker/style/multiple.ts","webpack://antd/./components/date-picker/style/variants.ts","webpack://antd/./components/date-picker/style/index.ts","webpack://antd/./node_modules/rc-util/es/raf.js","webpack://antd/./components/style/motion/collapse.ts","webpack://antd/external umd {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}","webpack://antd/./components/flex/utils.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://antd/./components/locale/useLocale.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://antd/./components/button/style/group.ts","webpack://antd/./components/button/style/index.ts","webpack://antd/./components/style/roundedArrow.ts","webpack://antd/./node_modules/@ant-design/colors/es/generate.js","webpack://antd/./node_modules/@ant-design/colors/es/presets.js","webpack://antd/./components/date-picker/style/token.ts","webpack://antd/./components/space/style/compact.ts","webpack://antd/./components/space/style/index.ts","webpack://antd/./node_modules/rc-picker/es/locale/common.js","webpack://antd/external umd {\"root\":\"ReactDOM\",\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}","webpack://antd/./components/locale/context.ts","webpack://antd/./node_modules/rc-pagination/es/locale/en_US.js","webpack://antd/./components/row/style/index.ts","webpack://antd/./components/skeleton/style/index.ts","webpack://antd/./node_modules/rc-util/es/React/isFragment.js","webpack://antd/./node_modules/rc-util/es/utils/get.js","webpack://antd/./components/theme/util/useResetIconStyle.ts","webpack://antd/./node_modules/rc-util/node_modules/react-is/index.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://antd/./node_modules/toggle-selection/index.js","webpack://antd/./components/popover/style/index.ts","webpack://antd/./components/result/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://antd/./node_modules/rc-util/es/Dom/findDOMNode.js","webpack://antd/./components/theme/interface/presetColors.ts","webpack://antd/./components/modal/style/index.ts","webpack://antd/./components/grid/style/index.ts","webpack://antd/./components/color-picker/color.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://antd/./components/config-provider/SizeContext.tsx","webpack://antd/./components/color-picker/util.ts","webpack://antd/./components/anchor/style/index.ts","webpack://antd/./components/style/placementArrow.ts","webpack://antd/./node_modules/rc-util/es/KeyCode.js","webpack://antd/./node_modules/classnames/index.js","webpack://antd/./node_modules/rc-util/es/hooks/useEvent.js","webpack://antd/./node_modules/dayjs/plugin/weekday.js","webpack://antd/./node_modules/@ant-design/icons/es/utils.js","webpack://antd/./node_modules/@ant-design/icons/es/components/IconBase.js","webpack://antd/./node_modules/@ant-design/icons/es/components/twoTonePrimaryColor.js","webpack://antd/./node_modules/@ant-design/icons/es/components/AntdIcon.js","webpack://antd/./components/pagination/style/index.ts","webpack://antd/./components/tooltip/style/index.ts","webpack://antd/./components/input/style/token.ts","webpack://antd/./components/back-top/style/index.ts","webpack://antd/./node_modules/dayjs/plugin/advancedFormat.js","webpack://antd/./node_modules/@emotion/hash/dist/hash.browser.esm.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/Cache.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/StyleContext.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/calc/calculator.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/calc/CSSCalculator.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/calc/NumCalculator.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/calc/index.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/ThemeCache.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/Theme.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/theme/createTheme.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/util/index.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/util/css-variables.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useCompatibleInsertionEffect.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useEffectCleanupRegister.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useHMR.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useGlobalCache.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useCacheToken.js","webpack://antd/./node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack://antd/./node_modules/stylis/src/Enum.js","webpack://antd/./node_modules/stylis/src/Utility.js","webpack://antd/./node_modules/stylis/src/Serializer.js","webpack://antd/./node_modules/stylis/src/Tokenizer.js","webpack://antd/./node_modules/stylis/src/Parser.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/linters/utils.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/linters/legacyNotSelectorLinter.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/util/cacheMapUtil.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/linters/logicalPropertiesLinter.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/linters/NaNLinter.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/linters/parentSelectorLinter.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useStyleRegister.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/hooks/useCSSVarRegister.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/extractStyle.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/Keyframes.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/transformers/legacyLogicalProperties.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/transformers/px2rem.js","webpack://antd/./node_modules/@ant-design/cssinjs/es/index.js","webpack://antd/./components/calendar/style/index.ts","webpack://antd/./components/_util/motion.ts","webpack://antd/./components/radio/style/index.ts","webpack://antd/./components/image/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/toArray.js","webpack://antd/./components/table/style/bordered.ts","webpack://antd/./components/table/style/ellipsis.ts","webpack://antd/./components/table/style/empty.ts","webpack://antd/./components/table/style/expand.ts","webpack://antd/./components/table/style/filter.ts","webpack://antd/./components/table/style/fixed.ts","webpack://antd/./components/table/style/pagination.ts","webpack://antd/./components/table/style/radius.ts","webpack://antd/./components/table/style/rtl.ts","webpack://antd/./components/table/style/selection.ts","webpack://antd/./components/table/style/size.ts","webpack://antd/./components/table/style/sorter.ts","webpack://antd/./components/table/style/sticky.ts","webpack://antd/./components/table/style/summary.ts","webpack://antd/./components/table/style/virtual.ts","webpack://antd/./components/table/style/index.ts","webpack://antd/./components/select/style/multiple.ts","webpack://antd/./components/style/motion/slide.ts","webpack://antd/./node_modules/rc-util/node_modules/react-is/cjs/react-is.production.min.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://antd/./components/style/motion/move.ts","webpack://antd/./components/theme/util/genPresetColor.ts","webpack://antd/./components/dropdown/style/status.ts","webpack://antd/./components/dropdown/style/index.ts","webpack://antd/./node_modules/copy-to-clipboard/index.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/RightOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/RightOutlined.js","webpack://antd/./node_modules/string-convert/camel2hyphen.js","webpack://antd/./components/progress/style/index.ts","webpack://antd/./node_modules/rc-util/es/hooks/useMemo.js","webpack://antd/./node_modules/dayjs/plugin/weekOfYear.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://antd/./components/style/motion/motion.ts","webpack://antd/./node_modules/rc-util/es/warning.js","webpack://antd/./components/layout/style/index.ts","webpack://antd/./components/segmented/style/index.ts","webpack://antd/./components/color-picker/components/ColorPresets.tsx","webpack://antd/./components/date-picker/style/panel.ts","webpack://antd/./components/theme/util/alias.ts","webpack://antd/./node_modules/dayjs/plugin/weekYear.js","webpack://antd/./node_modules/rc-util/es/ref.js","webpack://antd/./components/list/style/index.ts","webpack://antd/./node_modules/rc-resize-observer/es/Collection.js","webpack://antd/./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack://antd/./node_modules/rc-resize-observer/es/utils/observerUtil.js","webpack://antd/./node_modules/rc-resize-observer/es/SingleObserver/DomWrapper.js","webpack://antd/./node_modules/rc-resize-observer/es/SingleObserver/index.js","webpack://antd/./node_modules/rc-resize-observer/es/index.js","webpack://antd/./components/_util/throttleByAnimationFrame.ts","webpack://antd/./components/affix/utils.ts","webpack://antd/./components/affix/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CheckCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CheckCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CloseCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CloseCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CloseOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/ExclamationCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/ExclamationCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/InfoCircleFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/InfoCircleFilled.js","webpack://antd/./components/alert/Alert.tsx","webpack://antd/./components/alert/ErrorBoundary.tsx","webpack://antd/./node_modules/@babel/runtime/helpers/esm/callSuper.js","webpack://antd/./components/alert/index.tsx","webpack://antd/./node_modules/compute-scroll-into-view/dist/index.js","webpack://antd/./node_modules/scroll-into-view-if-needed/dist/index.js","webpack://antd/./components/_util/getScroll.ts","webpack://antd/./components/_util/scrollTo.ts","webpack://antd/./components/_util/easings.ts","webpack://antd/./components/config-provider/hooks/useCSSVarCls.ts","webpack://antd/./components/anchor/context.ts","webpack://antd/./components/anchor/AnchorLink.tsx","webpack://antd/./components/anchor/Anchor.tsx","webpack://antd/./components/anchor/index.tsx","webpack://antd/./components/_util/warning.ts","webpack://antd/./node_modules/rc-notification/es/NoticeList.js","webpack://antd/./node_modules/rc-notification/es/hooks/useNotification.js","webpack://antd/./node_modules/rc-notification/es/Notice.js","webpack://antd/./node_modules/rc-notification/es/NotificationProvider.js","webpack://antd/./node_modules/rc-notification/es/hooks/useStack.js","webpack://antd/./node_modules/rc-notification/es/Notifications.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/LoadingOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/LoadingOutlined.js","webpack://antd/./components/message/PurePanel.tsx","webpack://antd/./components/message/util.ts","webpack://antd/./components/message/useMessage.tsx","webpack://antd/./components/form/validateMessagesContext.tsx","webpack://antd/./components/modal/locale.ts","webpack://antd/./components/locale/index.tsx","webpack://antd/./components/config-provider/cssVariables.ts","webpack://antd/./components/config-provider/DisabledContext.tsx","webpack://antd/./components/config-provider/hooks/useConfig.ts","webpack://antd/./components/config-provider/hooks/useThemeKey.ts","webpack://antd/./components/config-provider/MotionWrapper.tsx","webpack://antd/./components/config-provider/PropWarning.tsx","webpack://antd/./components/config-provider/index.tsx","webpack://antd/./components/config-provider/hooks/useTheme.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/OverloadYield.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorDefine.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regenerator.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorAsyncIterator.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorAsyncGen.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorAsync.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorKeys.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorValues.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://antd/./node_modules/rc-util/es/React/render.js","webpack://antd/./components/config-provider/UnstableContext.tsx","webpack://antd/./node_modules/rc-util/es/Dom/isVisible.js","webpack://antd/./components/_util/wave/style.ts","webpack://antd/./components/_util/wave/interface.ts","webpack://antd/./components/_util/wave/util.ts","webpack://antd/./components/_util/wave/WaveEffect.tsx","webpack://antd/./components/_util/wave/useWave.ts","webpack://antd/./components/_util/wave/index.ts","webpack://antd/./components/space/Compact.tsx","webpack://antd/./components/button/button-group.tsx","webpack://antd/./components/button/buttonHelpers.tsx","webpack://antd/./components/button/IconWrapper.tsx","webpack://antd/./components/button/DefaultLoadingIcon.tsx","webpack://antd/./components/button/style/compact.ts","webpack://antd/./components/style/compact-item-vertical.ts","webpack://antd/./components/button/button.tsx","webpack://antd/./components/button/index.tsx","webpack://antd/./components/_util/ActionButton.tsx","webpack://antd/./components/modal/context.ts","webpack://antd/./components/modal/components/ConfirmCancelBtn.tsx","webpack://antd/./node_modules/rc-util/es/getScrollBarSize.js","webpack://antd/./components/modal/components/ConfirmOkBtn.tsx","webpack://antd/./node_modules/@rc-component/portal/es/Context.js","webpack://antd/./node_modules/@rc-component/portal/es/useDom.js","webpack://antd/./node_modules/@rc-component/portal/es/useScrollLocker.js","webpack://antd/./node_modules/@rc-component/portal/es/util.js","webpack://antd/./node_modules/@rc-component/portal/es/mock.js","webpack://antd/./node_modules/@rc-component/portal/es/Portal.js","webpack://antd/./node_modules/@rc-component/portal/es/index.js","webpack://antd/./node_modules/rc-dialog/es/context.js","webpack://antd/./node_modules/rc-util/es/hooks/useId.js","webpack://antd/./node_modules/rc-dialog/es/util.js","webpack://antd/./node_modules/rc-dialog/es/Dialog/Mask.js","webpack://antd/./node_modules/rc-dialog/es/Dialog/index.js","webpack://antd/./node_modules/rc-dialog/es/DialogWrap.js","webpack://antd/./node_modules/rc-dialog/es/Dialog/Content/MemoChildren.js","webpack://antd/./node_modules/rc-dialog/es/Dialog/Content/Panel.js","webpack://antd/./node_modules/rc-dialog/es/Dialog/Content/index.js","webpack://antd/./node_modules/rc-field-form/es/FieldContext.js","webpack://antd/./node_modules/rc-dialog/es/index.js","webpack://antd/./node_modules/rc-field-form/es/ListContext.js","webpack://antd/./node_modules/rc-field-form/es/utils/typeUtil.js","webpack://antd/./node_modules/@rc-component/async-validator/es/messages.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/construct.js","webpack://antd/./node_modules/@rc-component/async-validator/es/util.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/type.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/enum.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/url.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/required.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/type.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/index.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/whitespace.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/range.js","webpack://antd/./node_modules/@rc-component/async-validator/es/rule/pattern.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/index.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/string.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/method.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/number.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/boolean.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/regexp.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/integer.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/float.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/array.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/object.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/enum.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/pattern.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/date.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/required.js","webpack://antd/./node_modules/@rc-component/async-validator/es/validator/any.js","webpack://antd/./node_modules/@rc-component/async-validator/es/index.js","webpack://antd/./node_modules/rc-field-form/es/utils/messages.js","webpack://antd/./node_modules/rc-field-form/es/utils/validateUtil.js","webpack://antd/./node_modules/rc-field-form/es/utils/valueUtil.js","webpack://antd/./node_modules/rc-field-form/es/Field.js","webpack://antd/./node_modules/rc-field-form/es/List.js","webpack://antd/./node_modules/rc-field-form/es/utils/NameMap.js","webpack://antd/./node_modules/rc-field-form/es/useForm.js","webpack://antd/./node_modules/rc-field-form/es/utils/asyncUtil.js","webpack://antd/./node_modules/rc-field-form/es/FormContext.js","webpack://antd/./node_modules/rc-field-form/es/Form.js","webpack://antd/./node_modules/rc-field-form/es/useWatch.js","webpack://antd/./node_modules/rc-field-form/es/index.js","webpack://antd/./components/form/context.tsx","webpack://antd/./components/_util/ContextIsolator.tsx","webpack://antd/./components/_util/extendsObject.ts","webpack://antd/./components/_util/hooks/useClosable.tsx","webpack://antd/./components/_util/styleChecker.ts","webpack://antd/./components/skeleton/Element.tsx","webpack://antd/./components/skeleton/Avatar.tsx","webpack://antd/./components/skeleton/Image.tsx","webpack://antd/./components/skeleton/Input.tsx","webpack://antd/./components/skeleton/Node.tsx","webpack://antd/./components/skeleton/Paragraph.tsx","webpack://antd/./components/skeleton/Title.tsx","webpack://antd/./components/skeleton/Skeleton.tsx","webpack://antd/./components/skeleton/Button.tsx","webpack://antd/./components/skeleton/index.tsx","webpack://antd/./components/watermark/context.ts","webpack://antd/./components/modal/components/NormalCancelBtn.tsx","webpack://antd/./components/modal/components/NormalOkBtn.tsx","webpack://antd/./components/modal/shared.tsx","webpack://antd/./components/modal/Modal.tsx","webpack://antd/./components/modal/style/confirm.ts","webpack://antd/./components/modal/ConfirmDialog.tsx","webpack://antd/./components/modal/destroyFns.ts","webpack://antd/./components/modal/confirm.tsx","webpack://antd/./components/modal/useModal/HookModal.tsx","webpack://antd/./components/modal/useModal/index.tsx","webpack://antd/./components/_util/hooks/usePatchElement.ts","webpack://antd/./components/notification/style/pure-panel.ts","webpack://antd/./components/notification/PurePanel.tsx","webpack://antd/./components/notification/useNotification.tsx","webpack://antd/./components/notification/util.ts","webpack://antd/./components/app/context.ts","webpack://antd/./components/app/index.tsx","webpack://antd/./components/app/App.tsx","webpack://antd/./components/app/useApp.ts","webpack://antd/./components/_util/PurePanel.tsx","webpack://antd/./node_modules/rc-util/es/isMobile.js","webpack://antd/./node_modules/rc-select/es/TransBtn.js","webpack://antd/./node_modules/rc-select/es/hooks/useBaseProps.js","webpack://antd/./node_modules/rc-select/es/hooks/useLock.js","webpack://antd/./node_modules/rc-overflow/es/Item.js","webpack://antd/./node_modules/rc-overflow/es/hooks/useEffectState.js","webpack://antd/./node_modules/rc-overflow/es/hooks/channelUpdate.js","webpack://antd/./node_modules/rc-overflow/es/context.js","webpack://antd/./node_modules/rc-overflow/es/RawItem.js","webpack://antd/./node_modules/rc-overflow/es/Overflow.js","webpack://antd/./node_modules/rc-overflow/es/index.js","webpack://antd/./node_modules/rc-util/es/composeProps.js","webpack://antd/./node_modules/rc-select/es/Selector/Input.js","webpack://antd/./node_modules/rc-select/es/utils/commonUtil.js","webpack://antd/./node_modules/rc-select/es/Selector/MultipleSelector.js","webpack://antd/./node_modules/rc-select/es/hooks/useLayoutEffect.js","webpack://antd/./node_modules/rc-select/es/Selector/SingleSelector.js","webpack://antd/./node_modules/rc-select/es/Selector/index.js","webpack://antd/./node_modules/rc-select/es/utils/keyUtil.js","webpack://antd/./node_modules/@rc-component/trigger/es/Popup/Arrow.js","webpack://antd/./node_modules/@rc-component/trigger/es/Popup/Mask.js","webpack://antd/./node_modules/@rc-component/trigger/es/Popup/PopupContent.js","webpack://antd/./node_modules/@rc-component/trigger/es/Popup/index.js","webpack://antd/./node_modules/@rc-component/trigger/es/TriggerWrapper.js","webpack://antd/./node_modules/@rc-component/trigger/es/context.js","webpack://antd/./node_modules/@rc-component/trigger/es/hooks/useAction.js","webpack://antd/./node_modules/@rc-component/trigger/es/util.js","webpack://antd/./node_modules/@rc-component/trigger/es/hooks/useAlign.js","webpack://antd/./node_modules/@rc-component/trigger/es/index.js","webpack://antd/./node_modules/@rc-component/trigger/es/hooks/useWatch.js","webpack://antd/./node_modules/@rc-component/trigger/es/hooks/useWinClick.js","webpack://antd/./node_modules/rc-select/es/SelectTrigger.js","webpack://antd/./node_modules/rc-select/es/utils/valueUtil.js","webpack://antd/./node_modules/rc-select/es/SelectContext.js","webpack://antd/./node_modules/rc-select/es/BaseSelect/Polite.js","webpack://antd/./node_modules/rc-select/es/BaseSelect/index.js","webpack://antd/./node_modules/rc-select/es/OptGroup.js","webpack://antd/./node_modules/rc-select/es/Option.js","webpack://antd/./node_modules/rc-select/es/hooks/useSelectTriggerControl.js","webpack://antd/./node_modules/rc-select/es/hooks/useDelayReset.js","webpack://antd/./node_modules/rc-select/es/hooks/useAllowClear.js","webpack://antd/./node_modules/rc-virtual-list/es/Filler.js","webpack://antd/./node_modules/rc-virtual-list/es/Item.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useDiffItem.js","webpack://antd/./node_modules/rc-virtual-list/es/utils/algorithmUtil.js","webpack://antd/./node_modules/rc-virtual-list/es/utils/isFirefox.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useOriginScroll.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useFrameWheel.js","webpack://antd/./node_modules/rc-virtual-list/es/utils/CacheMap.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useHeights.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useMobileTouchMove.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useScrollDrag.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useScrollTo.js","webpack://antd/./node_modules/rc-virtual-list/es/ScrollBar.js","webpack://antd/./node_modules/rc-virtual-list/es/utils/scrollbarUtil.js","webpack://antd/./node_modules/rc-virtual-list/es/List.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useGetSize.js","webpack://antd/./node_modules/rc-virtual-list/es/hooks/useChildren.js","webpack://antd/./node_modules/rc-virtual-list/es/index.js","webpack://antd/./node_modules/rc-select/es/OptionList.js","webpack://antd/./node_modules/rc-select/es/utils/platformUtil.js","webpack://antd/./node_modules/rc-select/es/hooks/useFilterOptions.js","webpack://antd/./node_modules/rc-select/es/hooks/useId.js","webpack://antd/./node_modules/rc-select/es/utils/legacyUtil.js","webpack://antd/./node_modules/rc-select/es/hooks/useOptions.js","webpack://antd/./node_modules/rc-select/es/hooks/useRefFunc.js","webpack://antd/./node_modules/rc-select/es/utils/warningPropsUtil.js","webpack://antd/./node_modules/rc-select/es/Select.js","webpack://antd/./node_modules/rc-select/es/hooks/useCache.js","webpack://antd/./node_modules/rc-select/es/index.js","webpack://antd/./components/_util/statusUtils.ts","webpack://antd/./components/empty/empty.tsx","webpack://antd/./components/empty/simple.tsx","webpack://antd/./components/empty/index.tsx","webpack://antd/./components/config-provider/defaultRenderEmpty.tsx","webpack://antd/./components/form/hooks/useVariants.ts","webpack://antd/./components/select/mergedBuiltinPlacements.ts","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CheckOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CheckOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/DownOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/DownOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/SearchOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/SearchOutlined.js","webpack://antd/./components/select/useIcons.tsx","webpack://antd/./components/select/usePopupRender.tsx","webpack://antd/./components/select/useShowArrow.ts","webpack://antd/./components/select/index.tsx","webpack://antd/./components/auto-complete/AutoComplete.tsx","webpack://antd/./components/auto-complete/index.tsx","webpack://antd/./components/_util/mediaQueryUtil.ts","webpack://antd/./components/_util/responsiveObserver.ts","webpack://antd/./components/_util/hooks/useForceUpdate.ts","webpack://antd/./components/grid/hooks/useBreakpoint.tsx","webpack://antd/./components/avatar/AvatarContext.ts","webpack://antd/./components/avatar/Avatar.tsx","webpack://antd/./components/_util/getRenderPropValue.ts","webpack://antd/./node_modules/rc-tooltip/es/Popup.js","webpack://antd/./node_modules/rc-tooltip/es/placements.js","webpack://antd/./node_modules/rc-tooltip/es/Tooltip.js","webpack://antd/./node_modules/rc-tooltip/es/index.js","webpack://antd/./components/_util/placements.ts","webpack://antd/./components/_util/colors.ts","webpack://antd/./components/tooltip/util.ts","webpack://antd/./components/tooltip/PurePanel.tsx","webpack://antd/./components/tooltip/index.tsx","webpack://antd/./components/popover/PurePanel.tsx","webpack://antd/./components/popover/index.tsx","webpack://antd/./components/avatar/AvatarGroup.tsx","webpack://antd/./components/avatar/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/VerticalAlignTopOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/VerticalAlignTopOutlined.js","webpack://antd/./components/back-top/index.tsx","webpack://antd/./components/badge/style/ribbon.ts","webpack://antd/./components/badge/SingleNumber.tsx","webpack://antd/./components/badge/ScrollNumber.tsx","webpack://antd/./components/badge/index.tsx","webpack://antd/./components/badge/Ribbon.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/LeftOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/LeftOutlined.js","webpack://antd/./node_modules/rc-dropdown/es/hooks/useAccessibility.js","webpack://antd/./node_modules/rc-dropdown/es/Overlay.js","webpack://antd/./node_modules/rc-dropdown/es/placements.js","webpack://antd/./node_modules/rc-dropdown/es/Dropdown.js","webpack://antd/./node_modules/rc-dropdown/es/index.js","webpack://antd/./components/_util/isPrimitive.ts","webpack://antd/./node_modules/rc-menu/es/context/IdContext.js","webpack://antd/./node_modules/rc-menu/es/context/MenuContext.js","webpack://antd/./node_modules/rc-menu/es/context/PathContext.js","webpack://antd/./node_modules/rc-menu/es/context/PrivateContext.js","webpack://antd/./node_modules/rc-util/es/Dom/focus.js","webpack://antd/./node_modules/rc-menu/es/hooks/useAccessibility.js","webpack://antd/./node_modules/rc-menu/es/hooks/useKeyRecords.js","webpack://antd/./node_modules/rc-menu/es/utils/timeUtil.js","webpack://antd/./node_modules/rc-menu/es/hooks/useMemoCallback.js","webpack://antd/./node_modules/rc-menu/es/hooks/useUUID.js","webpack://antd/./node_modules/rc-menu/es/hooks/useActive.js","webpack://antd/./node_modules/rc-menu/es/hooks/useDirectionStyle.js","webpack://antd/./node_modules/rc-menu/es/Icon.js","webpack://antd/./node_modules/rc-menu/es/utils/warnUtil.js","webpack://antd/./node_modules/rc-menu/es/MenuItem.js","webpack://antd/./node_modules/rc-menu/es/SubMenu/SubMenuList.js","webpack://antd/./node_modules/rc-menu/es/utils/commonUtil.js","webpack://antd/./node_modules/rc-menu/es/placements.js","webpack://antd/./node_modules/rc-menu/es/utils/motionUtil.js","webpack://antd/./node_modules/rc-menu/es/SubMenu/PopupTrigger.js","webpack://antd/./node_modules/rc-menu/es/SubMenu/InlineSubMenuList.js","webpack://antd/./node_modules/rc-menu/es/SubMenu/index.js","webpack://antd/./node_modules/rc-menu/es/Divider.js","webpack://antd/./node_modules/rc-menu/es/MenuItemGroup.js","webpack://antd/./node_modules/rc-menu/es/utils/nodeUtil.js","webpack://antd/./node_modules/rc-menu/es/Menu.js","webpack://antd/./node_modules/rc-menu/es/index.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/BarsOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/BarsOutlined.js","webpack://antd/./components/layout/context.ts","webpack://antd/./components/layout/style/sider.ts","webpack://antd/./components/layout/Sider.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/EllipsisOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/EllipsisOutlined.js","webpack://antd/./components/menu/MenuContext.tsx","webpack://antd/./components/menu/MenuDivider.tsx","webpack://antd/./components/menu/MenuItem.tsx","webpack://antd/./components/menu/OverrideContext.tsx","webpack://antd/./components/menu/SubMenu.tsx","webpack://antd/./components/menu/menu.tsx","webpack://antd/./components/menu/index.tsx","webpack://antd/./components/dropdown/dropdown.tsx","webpack://antd/./components/breadcrumb/BreadcrumbSeparator.tsx","webpack://antd/./components/breadcrumb/useItemRender.tsx","webpack://antd/./components/breadcrumb/BreadcrumbItem.tsx","webpack://antd/./components/breadcrumb/useItems.ts","webpack://antd/./components/breadcrumb/Breadcrumb.tsx","webpack://antd/./node_modules/rc-picker/es/generate/dayjs.js","webpack://antd/./components/breadcrumb/index.tsx","webpack://antd/./node_modules/rc-picker/es/PickerInput/context.js","webpack://antd/./node_modules/rc-picker/es/PickerTrigger/index.js","webpack://antd/./node_modules/rc-picker/es/utils/uiUtil.js","webpack://antd/./node_modules/rc-picker/es/utils/miscUtil.js","webpack://antd/./node_modules/rc-picker/es/PickerTrigger/util.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useFieldsInvalidate.js","webpack://antd/./node_modules/rc-picker/es/hooks/useLocale.js","webpack://antd/./node_modules/rc-picker/es/hooks/useTimeConfig.js","webpack://antd/./node_modules/rc-picker/es/utils/dateUtil.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useFilledProps.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useFieldFormat.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useDisabledBoundary.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useInvalidate.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/hooks/useClearIcon.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useInputReadOnly.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useOpen.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useDelayState.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/usePickerRef.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/usePresets.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useLockEffect.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useRangeActive.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useRangePickerValue.js","webpack://antd/./node_modules/rc-picker/es/hooks/useSyncState.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useRangeValue.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useShowNow.js","webpack://antd/./node_modules/rc-picker/es/hooks/useTimeInfo.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Popup/Footer.js","webpack://antd/./node_modules/rc-picker/es/hooks/useToggleDates.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/context.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/PanelBody.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/PanelHeader.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/DatePanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/TimePanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/DateTimePanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/MonthPanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/YearPanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerPanel/DecadePanel/index.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Popup/PopupPanel.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Popup/PresetPanel.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Popup/index.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/hooks/useInputProps.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/hooks/useRootProps.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/Icon.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/MaskFormat.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/Input.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/util.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/RangeSelector.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/RangePicker.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/hooks/useRangeDisabledDate.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/MultipleDates.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/Selector/SingleSelector/index.js","webpack://antd/./node_modules/rc-picker/es/PickerInput/SinglePicker.js","webpack://antd/./node_modules/rc-picker/es/index.js","webpack://antd/./components/radio/context.ts","webpack://antd/./node_modules/rc-checkbox/es/index.js","webpack://antd/./components/checkbox/useBubbleLock.ts","webpack://antd/./components/radio/radio.tsx","webpack://antd/./components/form/util.ts","webpack://antd/./components/form/hooks/useForm.ts","webpack://antd/./components/radio/group.tsx","webpack://antd/./components/radio/radioButton.tsx","webpack://antd/./components/calendar/Header.tsx","webpack://antd/./components/calendar/generateCalendar.tsx","webpack://antd/./components/calendar/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/PlusOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/PlusOutlined.js","webpack://antd/./node_modules/rc-tabs/es/TabContext.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useIndicator.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useOffsets.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useSyncState.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useTouchMove.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useUpdate.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useVisibleRange.js","webpack://antd/./node_modules/rc-tabs/es/util.js","webpack://antd/./node_modules/rc-tabs/es/TabNavList/TabNode.js","webpack://antd/./node_modules/rc-tabs/es/TabNavList/index.js","webpack://antd/./node_modules/rc-tabs/es/TabNavList/Wrapper.js","webpack://antd/./node_modules/rc-tabs/es/TabPanelList/index.js","webpack://antd/./node_modules/rc-tabs/es/TabNavList/AddButton.js","webpack://antd/./node_modules/rc-tabs/es/TabNavList/ExtraContent.js","webpack://antd/./node_modules/rc-tabs/es/TabNavList/OperationNode.js","webpack://antd/./node_modules/rc-tabs/es/TabPanelList/TabPane.js","webpack://antd/./node_modules/rc-tabs/es/Tabs.js","webpack://antd/./node_modules/rc-tabs/es/index.js","webpack://antd/./node_modules/rc-tabs/es/hooks/useAnimateConfig.js","webpack://antd/./components/tabs/hooks/useAnimateConfig.ts","webpack://antd/./components/tabs/hooks/useLegacyItems.ts","webpack://antd/./components/tabs/index.tsx","webpack://antd/./components/tabs/TabPane.ts","webpack://antd/./components/card/Grid.tsx","webpack://antd/./components/card/Card.tsx","webpack://antd/./components/card/Meta.tsx","webpack://antd/./components/card/index.tsx","webpack://antd/./node_modules/@ant-design/react-slick/es/initial-state.js","webpack://antd/./node_modules/throttle-debounce/esm/index.js","webpack://antd/./node_modules/@ant-design/react-slick/es/default-props.js","webpack://antd/./node_modules/@ant-design/react-slick/es/utils/innerSliderUtils.js","webpack://antd/./node_modules/@ant-design/react-slick/es/track.js","webpack://antd/./node_modules/@ant-design/react-slick/es/dots.js","webpack://antd/./node_modules/@ant-design/react-slick/es/arrows.js","webpack://antd/./node_modules/@ant-design/react-slick/es/inner-slider.js","webpack://antd/./node_modules/@ant-design/react-slick/es/slider.js","webpack://antd/./node_modules/@ant-design/react-slick/es/index.js","webpack://antd/./components/carousel/index.tsx","webpack://antd/./node_modules/rc-cascader/es/hooks/useSearchOptions.js","webpack://antd/./node_modules/rc-cascader/es/context.js","webpack://antd/./node_modules/rc-cascader/es/utils/commonUtil.js","webpack://antd/./node_modules/rc-cascader/es/utils/treeUtil.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useMissingValues.js","webpack://antd/./node_modules/rc-tree/es/utils/treeUtil.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useOptions.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useEntities.js","webpack://antd/./node_modules/rc-tree/es/utils/conductUtil.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useSelect.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useValues.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/CacheContent.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/Checkbox.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/Column.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/useKeyboard.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/useActive.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/List.js","webpack://antd/./node_modules/rc-cascader/es/OptionList/index.js","webpack://antd/./node_modules/rc-cascader/es/Panel.js","webpack://antd/./node_modules/rc-cascader/es/utils/warningPropsUtil.js","webpack://antd/./node_modules/rc-cascader/es/Cascader.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useSearchConfig.js","webpack://antd/./node_modules/rc-cascader/es/hooks/useDisplayValues.js","webpack://antd/./node_modules/rc-cascader/es/index.js","webpack://antd/./components/cascader/hooks/useBase.ts","webpack://antd/./components/cascader/hooks/useCheckable.tsx","webpack://antd/./components/cascader/hooks/useColumnIcons.tsx","webpack://antd/./components/cascader/style/panel.ts","webpack://antd/./components/cascader/Panel.tsx","webpack://antd/./components/cascader/index.tsx","webpack://antd/./components/checkbox/GroupContext.ts","webpack://antd/./components/checkbox/Checkbox.tsx","webpack://antd/./components/checkbox/Group.tsx","webpack://antd/./components/checkbox/index.tsx","webpack://antd/./components/grid/RowContext.ts","webpack://antd/./components/grid/col.tsx","webpack://antd/./components/col/index.tsx","webpack://antd/./components/divider/index.tsx","webpack://antd/./node_modules/rc-segmented/es/MotionThumb.js","webpack://antd/./node_modules/rc-segmented/es/index.js","webpack://antd/./components/segmented/index.tsx","webpack://antd/./components/color-picker/context.ts","webpack://antd/./components/color-picker/components/ColorClear.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/UpOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/UpOutlined.js","webpack://antd/./node_modules/@rc-component/mini-decimal/es/supportUtil.js","webpack://antd/./node_modules/@rc-component/mini-decimal/es/numberUtil.js","webpack://antd/./node_modules/@rc-component/mini-decimal/es/BigIntDecimal.js","webpack://antd/./node_modules/@rc-component/mini-decimal/es/NumberDecimal.js","webpack://antd/./node_modules/@rc-component/mini-decimal/es/MiniDecimal.js","webpack://antd/./node_modules/@rc-component/mini-decimal/es/index.js","webpack://antd/./node_modules/rc-input/es/utils/commonUtils.js","webpack://antd/./node_modules/rc-input/es/BaseInput.js","webpack://antd/./node_modules/rc-input/es/hooks/useCount.js","webpack://antd/./node_modules/rc-input/es/Input.js","webpack://antd/./node_modules/rc-input/es/index.js","webpack://antd/./node_modules/rc-input-number/es/hooks/useCursor.js","webpack://antd/./node_modules/rc-util/es/hooks/useMobile.js","webpack://antd/./node_modules/rc-input-number/es/StepHandler.js","webpack://antd/./node_modules/rc-input-number/es/utils/numberUtil.js","webpack://antd/./node_modules/rc-input-number/es/InputNumber.js","webpack://antd/./node_modules/rc-input-number/es/hooks/useFrame.js","webpack://antd/./node_modules/rc-input-number/es/index.js","webpack://antd/./node_modules/rc-util/es/proxyObject.js","webpack://antd/./components/input-number/index.tsx","webpack://antd/./components/color-picker/components/ColorSteppers.tsx","webpack://antd/./components/color-picker/components/ColorAlphaInput.tsx","webpack://antd/./components/_util/getAllowClear.tsx","webpack://antd/./components/input/hooks/useRemovePasswordTimeout.ts","webpack://antd/./components/input/Input.tsx","webpack://antd/./components/input/utils.ts","webpack://antd/./components/color-picker/components/ColorHexInput.tsx","webpack://antd/./components/color-picker/components/ColorHsbInput.tsx","webpack://antd/./components/color-picker/components/ColorRgbInput.tsx","webpack://antd/./components/color-picker/components/ColorInput.tsx","webpack://antd/./components/color-picker/interface.ts","webpack://antd/./node_modules/rc-slider/es/util.js","webpack://antd/./node_modules/rc-slider/es/Marks/Mark.js","webpack://antd/./node_modules/rc-slider/es/Marks/index.js","webpack://antd/./node_modules/rc-slider/es/Steps/Dot.js","webpack://antd/./node_modules/rc-slider/es/Steps/index.js","webpack://antd/./node_modules/rc-slider/es/Tracks/Track.js","webpack://antd/./node_modules/rc-slider/es/Tracks/index.js","webpack://antd/./node_modules/rc-slider/es/context.js","webpack://antd/./node_modules/rc-slider/es/Handles/Handle.js","webpack://antd/./node_modules/rc-slider/es/Handles/index.js","webpack://antd/./node_modules/rc-slider/es/hooks/useDrag.js","webpack://antd/./node_modules/rc-slider/es/hooks/useOffset.js","webpack://antd/./node_modules/rc-slider/es/Slider.js","webpack://antd/./node_modules/rc-slider/es/index.js","webpack://antd/./node_modules/rc-slider/es/hooks/useRange.js","webpack://antd/./components/slider/Context.ts","webpack://antd/./components/slider/SliderTooltip.tsx","webpack://antd/./components/slider/useRafLock.ts","webpack://antd/./components/slider/index.tsx","webpack://antd/./components/color-picker/components/ColorSlider.tsx","webpack://antd/./components/color-picker/components/PanelPicker/GradientColorBar.tsx","webpack://antd/./components/color-picker/components/PanelPicker/index.tsx","webpack://antd/./components/color-picker/components/PanelPresets.tsx","webpack://antd/./components/color-picker/ColorPickerPanel.tsx","webpack://antd/./components/color-picker/components/ColorTrigger.tsx","webpack://antd/./components/color-picker/ColorPicker.tsx","webpack://antd/./components/color-picker/hooks/useModeColor.ts","webpack://antd/./components/color-picker/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CalendarOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CalendarOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/ClockCircleOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/ClockCircleOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/SwapRightOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/SwapRightOutlined.js","webpack://antd/./components/date-picker/util.ts","webpack://antd/./components/date-picker/generatePicker/constant.ts","webpack://antd/./components/date-picker/PickerButton.tsx","webpack://antd/./components/date-picker/generatePicker/useComponents.ts","webpack://antd/./components/_util/hooks/useMergeSemantic/index.ts","webpack://antd/./components/date-picker/hooks/useMergedPickerSemantic.ts","webpack://antd/./components/date-picker/generatePicker/generateRangePicker.tsx","webpack://antd/./components/date-picker/generatePicker/generateSinglePicker.tsx","webpack://antd/./components/date-picker/generatePicker/index.tsx","webpack://antd/./components/date-picker/index.tsx","webpack://antd/./components/descriptions/constant.ts","webpack://antd/./components/descriptions/DescriptionsContext.ts","webpack://antd/./components/descriptions/hooks/useItems.ts","webpack://antd/./components/descriptions/hooks/useRow.ts","webpack://antd/./components/descriptions/Item.ts","webpack://antd/./components/descriptions/Cell.tsx","webpack://antd/./components/descriptions/Row.tsx","webpack://antd/./node_modules/rc-drawer/es/DrawerPanel.js","webpack://antd/./components/descriptions/index.tsx","webpack://antd/./node_modules/rc-drawer/es/context.js","webpack://antd/./node_modules/rc-drawer/es/util.js","webpack://antd/./node_modules/rc-drawer/es/DrawerPopup.js","webpack://antd/./node_modules/rc-drawer/es/Drawer.js","webpack://antd/./node_modules/rc-drawer/es/index.js","webpack://antd/./components/drawer/DrawerPanel.tsx","webpack://antd/./components/drawer/index.tsx","webpack://antd/./components/_util/gapSize.ts","webpack://antd/./components/space/context.ts","webpack://antd/./components/space/Item.tsx","webpack://antd/./components/space/index.tsx","webpack://antd/./components/dropdown/dropdown-button.tsx","webpack://antd/./components/dropdown/index.tsx","webpack://antd/./components/flex/index.tsx","webpack://antd/./components/float-button/context.ts","webpack://antd/./components/_util/convertToTooltipProps.ts","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/FileTextOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/FileTextOutlined.js","webpack://antd/./components/float-button/FloatButtonContent.tsx","webpack://antd/./components/float-button/FloatButton.tsx","webpack://antd/./components/float-button/BackTop.tsx","webpack://antd/./components/float-button/FloatButtonGroup.tsx","webpack://antd/./components/float-button/PurePanel.tsx","webpack://antd/./components/float-button/index.tsx","webpack://antd/./components/form/hooks/useDebounce.ts","webpack://antd/./components/form/ErrorList.tsx","webpack://antd/./components/form/Form.tsx","webpack://antd/./components/form/hooks/useFormItemStatus.ts","webpack://antd/./components/form/hooks/useFrameState.ts","webpack://antd/./components/form/hooks/useItemRef.ts","webpack://antd/./components/grid/row.tsx","webpack://antd/./components/grid/hooks/useGutter.ts","webpack://antd/./components/form/style/fallbackCmp.ts","webpack://antd/./components/form/FormItemInput.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/QuestionCircleOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/QuestionCircleOutlined.js","webpack://antd/./components/form/FormItemLabel.tsx","webpack://antd/./components/form/FormItem/StatusProvider.tsx","webpack://antd/./components/form/FormItem/ItemHolder.tsx","webpack://antd/./components/form/FormItem/index.tsx","webpack://antd/./components/form/hooks/useChildren.ts","webpack://antd/./components/form/FormList.tsx","webpack://antd/./components/form/index.tsx","webpack://antd/./components/form/hooks/useFormInstance.ts","webpack://antd/./components/grid/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/EyeOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/EyeOutlined.js","webpack://antd/./node_modules/rc-util/es/Dom/css.js","webpack://antd/./node_modules/rc-util/es/Dom/addEventListener.js","webpack://antd/./node_modules/rc-image/es/Operations.js","webpack://antd/./node_modules/rc-image/es/context.js","webpack://antd/./node_modules/rc-image/es/hooks/useImageTransform.js","webpack://antd/./node_modules/rc-image/es/getFixScaleEleTransPosition.js","webpack://antd/./node_modules/rc-image/es/previewConfig.js","webpack://antd/./node_modules/rc-image/es/hooks/useMouseEvent.js","webpack://antd/./node_modules/rc-image/es/hooks/useStatus.js","webpack://antd/./node_modules/rc-image/es/util.js","webpack://antd/./node_modules/rc-image/es/hooks/useTouchEvent.js","webpack://antd/./node_modules/rc-image/es/Preview.js","webpack://antd/./node_modules/rc-image/es/common.js","webpack://antd/./node_modules/rc-image/es/PreviewGroup.js","webpack://antd/./node_modules/rc-image/es/hooks/useRegisterImage.js","webpack://antd/./node_modules/rc-image/es/Image.js","webpack://antd/./node_modules/rc-image/es/hooks/usePreviewItems.js","webpack://antd/./node_modules/rc-image/es/index.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/RotateLeftOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/RotateLeftOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/RotateRightOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/RotateRightOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/SwapOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/SwapOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/ZoomInOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/ZoomInOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/ZoomOutOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/ZoomOutOutlined.js","webpack://antd/./components/image/PreviewGroup.tsx","webpack://antd/./components/image/index.tsx","webpack://antd/./components/input/Group.tsx","webpack://antd/./components/input/style/otp.ts","webpack://antd/./components/input/OTP/OTPInput.tsx","webpack://antd/./components/input/OTP/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/EyeInvisibleOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/EyeInvisibleOutlined.js","webpack://antd/./components/input/Password.tsx","webpack://antd/./node_modules/rc-textarea/es/calculateNodeHeight.js","webpack://antd/./components/input/Search.tsx","webpack://antd/./node_modules/rc-textarea/es/ResizableTextArea.js","webpack://antd/./node_modules/rc-textarea/es/TextArea.js","webpack://antd/./node_modules/rc-textarea/es/index.js","webpack://antd/./components/input/style/textarea.ts","webpack://antd/./components/input/TextArea.tsx","webpack://antd/./components/input/index.tsx","webpack://antd/./components/layout/layout.tsx","webpack://antd/./node_modules/rc-pagination/es/Options.js","webpack://antd/./node_modules/rc-pagination/es/Pager.js","webpack://antd/./node_modules/rc-pagination/es/Pagination.js","webpack://antd/./components/layout/hooks/useHasSider.ts","webpack://antd/./components/layout/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/DoubleLeftOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/DoubleLeftOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/DoubleRightOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/DoubleRightOutlined.js","webpack://antd/./components/pagination/style/bordered.ts","webpack://antd/./components/pagination/useShowSizeChanger.ts","webpack://antd/./components/pagination/Pagination.tsx","webpack://antd/./components/pagination/index.tsx","webpack://antd/./components/spin/Indicator/Progress.tsx","webpack://antd/./components/spin/Indicator/Looper.tsx","webpack://antd/./components/spin/Indicator/index.tsx","webpack://antd/./components/spin/usePercent.ts","webpack://antd/./components/spin/index.tsx","webpack://antd/./components/list/context.ts","webpack://antd/./components/list/Item.tsx","webpack://antd/./components/list/index.tsx","webpack://antd/./node_modules/rc-mentions/es/MentionsContext.js","webpack://antd/./node_modules/rc-mentions/es/DropdownMenu.js","webpack://antd/./node_modules/rc-mentions/es/KeywordTrigger.js","webpack://antd/./node_modules/rc-mentions/es/util.js","webpack://antd/./node_modules/rc-mentions/es/Mentions.js","webpack://antd/./node_modules/rc-mentions/es/hooks/useEffectState.js","webpack://antd/./node_modules/rc-mentions/es/Option.js","webpack://antd/./node_modules/rc-mentions/es/index.js","webpack://antd/./components/_util/toList.ts","webpack://antd/./components/mentions/index.tsx","webpack://antd/./components/message/index.tsx","webpack://antd/./components/modal/PurePanel.tsx","webpack://antd/./components/modal/index.tsx","webpack://antd/./components/notification/index.tsx","webpack://antd/./components/popconfirm/PurePanel.tsx","webpack://antd/./node_modules/rc-progress/es/common.js","webpack://antd/./components/popconfirm/index.tsx","webpack://antd/./node_modules/rc-progress/es/hooks/useId.js","webpack://antd/./node_modules/rc-progress/es/Circle/PtgCircle.js","webpack://antd/./node_modules/rc-progress/es/Circle/util.js","webpack://antd/./node_modules/rc-progress/es/Circle/index.js","webpack://antd/./components/progress/utils.ts","webpack://antd/./components/progress/Circle.tsx","webpack://antd/./components/progress/Line.tsx","webpack://antd/./components/progress/Steps.tsx","webpack://antd/./components/progress/progress.tsx","webpack://antd/./components/progress/index.tsx","webpack://antd/./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://antd/./node_modules/@rc-component/qrcode/es/libs/qrcodegen.js","webpack://antd/./node_modules/@rc-component/qrcode/es/utils.js","webpack://antd/./node_modules/@rc-component/qrcode/es/hooks/useQRCode.js","webpack://antd/./node_modules/@rc-component/qrcode/es/QRCodeCanvas.js","webpack://antd/./node_modules/@rc-component/qrcode/es/QRCodeSVG.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/ReloadOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/ReloadOutlined.js","webpack://antd/./components/qr-code/QrcodeStatus.tsx","webpack://antd/./components/qr-code/index.tsx","webpack://antd/./components/radio/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/StarFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/StarFilled.js","webpack://antd/./node_modules/rc-rate/es/Star.js","webpack://antd/./node_modules/rc-rate/es/useRefs.js","webpack://antd/./node_modules/rc-rate/es/Rate.js","webpack://antd/./node_modules/rc-rate/es/util.js","webpack://antd/./node_modules/rc-rate/es/index.js","webpack://antd/./components/rate/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/WarningFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/WarningFilled.js","webpack://antd/./components/result/noFound.tsx","webpack://antd/./components/result/serverError.tsx","webpack://antd/./components/result/index.tsx","webpack://antd/./components/result/unauthorized.tsx","webpack://antd/./components/row/index.tsx","webpack://antd/./components/statistic/Number.tsx","webpack://antd/./components/statistic/Statistic.tsx","webpack://antd/./components/statistic/utils.ts","webpack://antd/./components/statistic/Timer.tsx","webpack://antd/./components/statistic/Countdown.tsx","webpack://antd/./components/statistic/index.tsx","webpack://antd/./node_modules/rc-steps/es/Step.js","webpack://antd/./node_modules/rc-steps/es/Steps.js","webpack://antd/./node_modules/rc-steps/es/index.js","webpack://antd/./components/steps/useLegacyItems.ts","webpack://antd/./components/steps/index.tsx","webpack://antd/./node_modules/rc-switch/es/index.js","webpack://antd/./components/switch/index.tsx","webpack://antd/./node_modules/rc-table/es/constant.js","webpack://antd/./node_modules/@rc-component/context/es/context.js","webpack://antd/./node_modules/@rc-component/context/es/Immutable.js","webpack://antd/./node_modules/@rc-component/context/es/index.js","webpack://antd/./node_modules/rc-table/es/context/TableContext.js","webpack://antd/./node_modules/rc-table/es/hooks/useRenderTimes.js","webpack://antd/./node_modules/rc-table/es/context/PerfContext.js","webpack://antd/./node_modules/rc-table/es/utils/valueUtil.js","webpack://antd/./node_modules/rc-table/es/Cell/useCellRender.js","webpack://antd/./node_modules/rc-table/es/Cell/useHoverState.js","webpack://antd/./node_modules/rc-table/es/Cell/index.js","webpack://antd/./node_modules/rc-table/es/utils/fixUtil.js","webpack://antd/./node_modules/rc-table/es/Footer/SummaryContext.js","webpack://antd/./node_modules/rc-table/es/Footer/Row.js","webpack://antd/./node_modules/rc-table/es/Footer/Summary.js","webpack://antd/./node_modules/rc-table/es/Footer/Cell.js","webpack://antd/./node_modules/rc-table/es/Footer/index.js","webpack://antd/./node_modules/rc-util/es/Dom/styleChecker.js","webpack://antd/./node_modules/rc-table/es/hooks/useFlattenRecords.js","webpack://antd/./node_modules/rc-table/es/hooks/useRowInfo.js","webpack://antd/./node_modules/rc-table/es/Body/ExpandedRow.js","webpack://antd/./node_modules/rc-table/es/utils/expandUtil.js","webpack://antd/./node_modules/rc-table/es/Body/BodyRow.js","webpack://antd/./node_modules/rc-table/es/Body/MeasureCell.js","webpack://antd/./node_modules/rc-table/es/Body/MeasureRow.js","webpack://antd/./node_modules/rc-table/es/Body/index.js","webpack://antd/./node_modules/rc-table/es/utils/legacyUtil.js","webpack://antd/./node_modules/rc-table/es/ColGroup.js","webpack://antd/./node_modules/rc-table/es/FixedHolder/index.js","webpack://antd/./node_modules/rc-table/es/Header/HeaderRow.js","webpack://antd/./node_modules/rc-table/es/Header/Header.js","webpack://antd/./node_modules/rc-table/es/hooks/useColumns/useWidthColumns.js","webpack://antd/./node_modules/rc-table/es/hooks/useColumns/index.js","webpack://antd/./node_modules/rc-table/es/hooks/useExpand.js","webpack://antd/./node_modules/rc-table/es/hooks/useFrame.js","webpack://antd/./node_modules/rc-table/es/hooks/useSticky.js","webpack://antd/./node_modules/rc-table/es/hooks/useStickyOffsets.js","webpack://antd/./node_modules/rc-table/es/Panel/index.js","webpack://antd/./node_modules/rc-table/es/utils/offsetUtil.js","webpack://antd/./node_modules/rc-table/es/stickyScrollBar.js","webpack://antd/./node_modules/rc-table/es/sugar/Column.js","webpack://antd/./node_modules/rc-table/es/sugar/ColumnGroup.js","webpack://antd/./node_modules/rc-table/es/Table.js","webpack://antd/./node_modules/rc-table/es/hooks/useHover.js","webpack://antd/./node_modules/rc-table/es/hooks/useFixedInfo.js","webpack://antd/./node_modules/rc-table/es/VirtualTable/context.js","webpack://antd/./node_modules/rc-table/es/VirtualTable/VirtualCell.js","webpack://antd/./node_modules/rc-table/es/VirtualTable/index.js","webpack://antd/./node_modules/rc-table/es/VirtualTable/BodyLine.js","webpack://antd/./node_modules/rc-table/es/VirtualTable/BodyGrid.js","webpack://antd/./node_modules/rc-tree/es/TreeNode.js","webpack://antd/./components/table/Column.ts","webpack://antd/./components/table/ColumnGroup.ts","webpack://antd/./node_modules/rc-tree/es/contextTypes.js","webpack://antd/./node_modules/rc-tree/es/Indent.js","webpack://antd/./node_modules/rc-tree/es/util.js","webpack://antd/./components/_util/hooks/useMultipleSelect.ts","webpack://antd/./components/table/hooks/useSelection.tsx","webpack://antd/./components/_util/hooks/useProxyImperativeHandle.ts","webpack://antd/./components/table/ExpandIcon.tsx","webpack://antd/./components/table/util.ts","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/FilterFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/FilterFilled.js","webpack://antd/./node_modules/rc-tree/es/DropIndicator.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","webpack://antd/./node_modules/rc-tree/es/useUnmount.js","webpack://antd/./node_modules/rc-tree/es/MotionTreeNode.js","webpack://antd/./node_modules/rc-tree/es/utils/diffUtil.js","webpack://antd/./node_modules/rc-tree/es/NodeList.js","webpack://antd/./node_modules/rc-tree/es/Tree.js","webpack://antd/./node_modules/rc-tree/es/index.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/FileOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/FileOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/FolderOpenOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/FolderOpenOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/FolderOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/FolderOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/HolderOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/HolderOutlined.js","webpack://antd/./components/tree/utils/dropIndicator.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CaretDownFilled.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CaretDownFilled.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/MinusSquareOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/MinusSquareOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/PlusSquareOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/PlusSquareOutlined.js","webpack://antd/./components/tree/utils/iconUtil.tsx","webpack://antd/./components/tree/Tree.tsx","webpack://antd/./components/tree/utils/dictUtil.ts","webpack://antd/./components/tree/DirectoryTree.tsx","webpack://antd/./components/tree/index.tsx","webpack://antd/./components/table/hooks/useFilter/FilterSearch.tsx","webpack://antd/./components/table/hooks/useFilter/FilterWrapper.tsx","webpack://antd/./components/table/hooks/useFilter/FilterDropdown.tsx","webpack://antd/./components/_util/hooks/useSyncState.ts","webpack://antd/./components/table/hooks/useFilter/index.tsx","webpack://antd/./components/table/hooks/useLazyKVMap.ts","webpack://antd/./components/table/hooks/usePagination.ts","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CaretDownOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CaretDownOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CaretUpOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CaretUpOutlined.js","webpack://antd/./components/table/hooks/useSorter.tsx","webpack://antd/./components/table/hooks/useTitleColumns.ts","webpack://antd/./components/table/RcTable/index.tsx","webpack://antd/./components/table/RcTable/VirtualTable.tsx","webpack://antd/./components/table/InternalTable.tsx","webpack://antd/./components/table/hooks/useContainerWidth.ts","webpack://antd/./components/table/Table.tsx","webpack://antd/./components/table/index.tsx","webpack://antd/./components/tag/CheckableTag.tsx","webpack://antd/./components/tag/style/presetCmp.ts","webpack://antd/./components/tag/style/statusCmp.ts","webpack://antd/./components/_util/capitalize.ts","webpack://antd/./components/tag/index.tsx","webpack://antd/./components/theme/getDesignToken.ts","webpack://antd/./components/theme/themes/compact/index.ts","webpack://antd/./components/theme/themes/compact/genCompactSizeMapToken.ts","webpack://antd/./components/theme/themes/dark/colorAlgorithm.ts","webpack://antd/./components/theme/themes/dark/colors.ts","webpack://antd/./components/theme/index.tsx","webpack://antd/./components/theme/themes/dark/index.ts","webpack://antd/./components/time-picker/index.tsx","webpack://antd/./components/timeline/TimelineItem.tsx","webpack://antd/./components/timeline/TimelineItemList.tsx","webpack://antd/./components/timeline/useItems.ts","webpack://antd/./components/timeline/Timeline.tsx","webpack://antd/./components/timeline/index.tsx","webpack://antd/./node_modules/@rc-component/tour/es/hooks/useClosable.js","webpack://antd/./node_modules/@rc-component/tour/es/hooks/useTarget.js","webpack://antd/./node_modules/@rc-component/tour/es/util.js","webpack://antd/./node_modules/@rc-component/tour/es/Mask.js","webpack://antd/./node_modules/@rc-component/tour/es/placements.js","webpack://antd/./node_modules/@rc-component/tour/es/TourStep/DefaultPanel.js","webpack://antd/./node_modules/@rc-component/tour/es/TourStep/index.js","webpack://antd/./node_modules/@rc-component/tour/es/Tour.js","webpack://antd/./node_modules/@rc-component/tour/es/index.js","webpack://antd/./components/tour/panelRender.tsx","webpack://antd/./components/tour/PurePanel.tsx","webpack://antd/./components/tour/index.tsx","webpack://antd/./components/_util/transKeys.ts","webpack://antd/./components/transfer/hooks/useData.ts","webpack://antd/./components/transfer/hooks/useSelection.ts","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/DeleteOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/DeleteOutlined.js","webpack://antd/./components/transfer/ListItem.tsx","webpack://antd/./components/transfer/ListBody.tsx","webpack://antd/./components/transfer/search.tsx","webpack://antd/./components/transfer/list.tsx","webpack://antd/./node_modules/rc-tree-select/es/TreeNode.js","webpack://antd/./components/transfer/operation.tsx","webpack://antd/./components/transfer/index.tsx","webpack://antd/./node_modules/rc-tree-select/es/hooks/useCheckedKeys.js","webpack://antd/./node_modules/rc-tree-select/es/utils/legacyUtil.js","webpack://antd/./node_modules/rc-tree-select/es/hooks/useFilterTreeData.js","webpack://antd/./node_modules/rc-tree-select/es/hooks/useRefFunc.js","webpack://antd/./node_modules/rc-tree-select/es/hooks/useTreeData.js","webpack://antd/./node_modules/rc-tree-select/es/utils/valueUtil.js","webpack://antd/./node_modules/rc-tree-select/es/LegacyContext.js","webpack://antd/./node_modules/rc-tree-select/es/TreeSelectContext.js","webpack://antd/./node_modules/rc-tree-select/es/OptionList.js","webpack://antd/./node_modules/rc-tree-select/es/utils/strategyUtil.js","webpack://antd/./node_modules/rc-tree-select/es/utils/warningPropsUtil.js","webpack://antd/./node_modules/rc-tree-select/es/TreeSelect.js","webpack://antd/./node_modules/rc-tree-select/es/hooks/useDataEntities.js","webpack://antd/./node_modules/rc-tree-select/es/hooks/useCache.js","webpack://antd/./node_modules/rc-tree-select/es/index.js","webpack://antd/./components/tree-select/index.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/EditOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/EditOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/EnterOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/EnterOutlined.js","webpack://antd/./components/typography/Editable.tsx","webpack://antd/./components/typography/hooks/useCopyClick.ts","webpack://antd/./components/typography/hooks/useMergedConfig.ts","webpack://antd/./components/typography/hooks/usePrevious.ts","webpack://antd/./components/typography/hooks/useTooltipProps.ts","webpack://antd/./components/typography/Typography.tsx","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/CopyOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/CopyOutlined.js","webpack://antd/./components/typography/Base/util.ts","webpack://antd/./components/typography/Base/CopyBtn.tsx","webpack://antd/./components/typography/Base/Ellipsis.tsx","webpack://antd/./components/typography/Base/EllipsisTooltip.tsx","webpack://antd/./components/typography/Base/index.tsx","webpack://antd/./components/typography/Link.tsx","webpack://antd/./components/typography/Paragraph.tsx","webpack://antd/./components/typography/Text.tsx","webpack://antd/./components/typography/Title.tsx","webpack://antd/./node_modules/rc-upload/es/attr-accept.js","webpack://antd/./components/typography/index.tsx","webpack://antd/./node_modules/rc-upload/es/request.js","webpack://antd/./node_modules/rc-upload/es/traverseFileTree.js","webpack://antd/./node_modules/rc-upload/es/uid.js","webpack://antd/./node_modules/rc-upload/es/AjaxUploader.js","webpack://antd/./node_modules/rc-upload/es/Upload.js","webpack://antd/./node_modules/rc-upload/es/index.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/FileTwoTone.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/FileTwoTone.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/PaperClipOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/PaperClipOutlined.js","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/PictureTwoTone.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/PictureTwoTone.js","webpack://antd/./components/upload/utils.ts","webpack://antd/./node_modules/@ant-design/icons-svg/es/asn/DownloadOutlined.js","webpack://antd/./node_modules/@ant-design/icons/es/icons/DownloadOutlined.js","webpack://antd/./components/upload/UploadList/ListItem.tsx","webpack://antd/./components/upload/UploadList/index.tsx","webpack://antd/./components/upload/Upload.tsx","webpack://antd/./components/upload/Dragger.tsx","webpack://antd/./components/upload/index.tsx","webpack://antd/./node_modules/@rc-component/mutate-observer/es/useMutateObserver.js","webpack://antd/./node_modules/@rc-component/mutate-observer/es/wrapper.js","webpack://antd/./node_modules/@rc-component/mutate-observer/es/MutateObserver.js","webpack://antd/./components/watermark/useClips.ts","webpack://antd/./components/watermark/useWatermark.ts","webpack://antd/./components/watermark/utils.ts","webpack://antd/./components/watermark/index.tsx","webpack://antd/./components/watermark/useSingletonCache.ts","webpack://antd/./components/watermark/useRafDebounce.ts","webpack://antd/./components/splitter/Panel.tsx","webpack://antd/./components/splitter/hooks/useItems.ts","webpack://antd/./components/splitter/hooks/useResizable.ts","webpack://antd/./components/splitter/hooks/useSizes.ts","webpack://antd/./components/splitter/SplitBar.tsx","webpack://antd/./components/splitter/index.tsx","webpack://antd/./components/splitter/Splitter.tsx","webpack://antd/./components/splitter/hooks/useResize.ts","webpack://antd/./components/steps/style/custom-icon.ts","webpack://antd/./components/steps/style/horizontal.ts","webpack://antd/./components/steps/style/inline.ts","webpack://antd/./components/steps/style/label-placement.ts","webpack://antd/./components/steps/style/nav.ts","webpack://antd/./components/steps/style/progress.ts","webpack://antd/./components/steps/style/progress-dot.ts","webpack://antd/./components/steps/style/rtl.ts","webpack://antd/./components/steps/style/small.ts","webpack://antd/./components/steps/style/vertical.ts","webpack://antd/./components/steps/style/index.ts","webpack://antd/./components/checkbox/style/index.ts","webpack://antd/./components/switch/style/index.ts","webpack://antd/./index-style-only.js","webpack://antd/./components/theme/util/getAlphaColor.ts","webpack://antd/./components/empty/style/index.ts","webpack://antd/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://antd/./node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://antd/./components/badge/style/index.ts","webpack://antd/./components/tabs/style/motion.ts","webpack://antd/./components/tabs/style/index.ts","webpack://antd/./components/style/index.tsx","webpack://antd/./components/theme/useToken.ts","webpack://antd/./node_modules/rc-util/es/omit.js","webpack://antd/./components/style/motion/fade.ts","webpack://antd/./components/divider/style/index.ts","webpack://antd/./components/theme/themes/seed.ts","webpack://antd/webpack/bootstrap","webpack://antd/webpack/runtime/compat get default export","webpack://antd/webpack/runtime/define property getters","webpack://antd/webpack/runtime/global","webpack://antd/webpack/runtime/hasOwnProperty shorthand","webpack://antd/webpack/runtime/make namespace object","webpack://antd/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"), require(\"react-dom\"), require(\"dayjs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"react-dom\", \"dayjs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"antd\"] = factory(require(\"react\"), require(\"react-dom\"), require(\"dayjs\"));\n\telse\n\t\troot[\"antd\"] = factory(root[\"React\"], root[\"ReactDOM\"], root[\"dayjs\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__5442__, __WEBPACK_EXTERNAL_MODULE__6003__, __WEBPACK_EXTERNAL_MODULE__2598__) {\nreturn ","require('./index-style-only');\n\nmodule.exports = require('./components');\n","import { useContext } from 'react';\nimport { genStyleUtils } from '@ant-design/cssinjs-utils';\nimport { ConfigContext, defaultIconPrefixCls } from '../../config-provider/context';\nimport { genCommonStyle, genIconStyle, genLinkStyle } from '../../style';\nimport useLocalToken, { unitless } from '../useToken';\nexport const { genStyleHooks, genComponentStyleHook, genSubStyleComponent } = genStyleUtils({\n usePrefix: () => {\n const { getPrefixCls, iconPrefixCls } = useContext(ConfigContext);\n const rootPrefixCls = getPrefixCls();\n return {\n rootPrefixCls,\n iconPrefixCls,\n };\n },\n useToken: () => {\n const [theme, realToken, hashId, token, cssVar] = useLocalToken();\n return { theme, realToken, hashId, token, cssVar };\n },\n useCSP: () => {\n const { csp } = useContext(ConfigContext);\n return csp !== null && csp !== void 0 ? csp : {};\n },\n getResetStyles: (token, config) => {\n var _a;\n const linkStyle = genLinkStyle(token);\n return [\n linkStyle,\n { '&': linkStyle },\n genIconStyle((_a = config === null || config === void 0 ? void 0 : config.prefix.iconPrefixCls) !== null && _a !== void 0 ? _a : defaultIconPrefixCls),\n ];\n },\n getCommonStyle: genCommonStyle,\n getCompUnitless: (() => unitless),\n});\n","/*\n.typography-title(@fontSize; @fontWeight; @lineHeight; @headingColor; @headingMarginBottom;) {\n margin-bottom: @headingMarginBottom;\n color: @headingColor;\n font-weight: @fontWeight;\n fontSize: @fontSize;\n line-height: @lineHeight;\n}\n*/\nimport { gold } from '@ant-design/colors';\nimport { operationUnit } from '../../style';\nconst getTitleStyle = (fontSize, lineHeight, color, token) => {\n const { titleMarginBottom, fontWeightStrong } = token;\n return {\n marginBottom: titleMarginBottom,\n color,\n fontWeight: fontWeightStrong,\n fontSize,\n lineHeight,\n };\n};\nexport const getTitleStyles = (token) => {\n const headings = [1, 2, 3, 4, 5];\n const styles = {};\n headings.forEach((headingLevel) => {\n styles[`\n h${headingLevel}&,\n div&-h${headingLevel},\n div&-h${headingLevel} > textarea,\n h${headingLevel}\n `] = getTitleStyle(token[`fontSizeHeading${headingLevel}`], token[`lineHeightHeading${headingLevel}`], token.colorTextHeading, token);\n });\n return styles;\n};\nexport const getLinkStyles = (token) => {\n const { componentCls } = token;\n return {\n 'a&, a': Object.assign(Object.assign({}, operationUnit(token)), { userSelect: 'text', [`&[disabled], &${componentCls}-disabled`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n '&:active, &:hover': {\n color: token.colorTextDisabled,\n },\n '&:active': {\n pointerEvents: 'none',\n },\n } }),\n };\n};\nexport const getResetStyles = (token) => ({\n code: {\n margin: '0 0.2em',\n paddingInline: '0.4em',\n paddingBlock: '0.2em 0.1em',\n fontSize: '85%',\n fontFamily: token.fontFamilyCode,\n background: 'rgba(150, 150, 150, 0.1)',\n border: '1px solid rgba(100, 100, 100, 0.2)',\n borderRadius: 3,\n },\n kbd: {\n margin: '0 0.2em',\n paddingInline: '0.4em',\n paddingBlock: '0.15em 0.1em',\n fontSize: '90%',\n fontFamily: token.fontFamilyCode,\n background: 'rgba(150, 150, 150, 0.06)',\n border: '1px solid rgba(100, 100, 100, 0.2)',\n borderBottomWidth: 2,\n borderRadius: 3,\n },\n mark: {\n padding: 0,\n // FIXME hardcode in v4\n backgroundColor: gold[2],\n },\n 'u, ins': {\n textDecoration: 'underline',\n textDecorationSkipInk: 'auto',\n },\n 's, del': {\n textDecoration: 'line-through',\n },\n strong: {\n fontWeight: token.fontWeightStrong,\n },\n // list\n 'ul, ol': {\n marginInline: 0,\n marginBlock: '0 1em',\n padding: 0,\n li: {\n marginInline: '20px 0',\n marginBlock: 0,\n paddingInline: '4px 0',\n paddingBlock: 0,\n },\n },\n ul: {\n listStyleType: 'circle',\n ul: {\n listStyleType: 'disc',\n },\n },\n ol: {\n listStyleType: 'decimal',\n },\n // pre & block\n 'pre, blockquote': {\n margin: '1em 0',\n },\n pre: {\n padding: '0.4em 0.6em',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n background: 'rgba(150, 150, 150, 0.1)',\n border: '1px solid rgba(100, 100, 100, 0.2)',\n borderRadius: 3,\n fontFamily: token.fontFamilyCode,\n // Compatible for marked\n code: {\n display: 'inline',\n margin: 0,\n padding: 0,\n fontSize: 'inherit',\n fontFamily: 'inherit',\n background: 'transparent',\n border: 0,\n },\n },\n blockquote: {\n paddingInline: '0.6em 0',\n paddingBlock: 0,\n borderInlineStart: '4px solid rgba(100, 100, 100, 0.2)',\n opacity: 0.85,\n },\n});\nexport const getEditableStyles = (token) => {\n const { componentCls, paddingSM } = token;\n const inputShift = paddingSM;\n return {\n '&-edit-content': {\n position: 'relative',\n 'div&': {\n insetInlineStart: token.calc(token.paddingSM).mul(-1).equal(),\n insetBlockStart: token.calc(inputShift).div(-2).add(1).equal(),\n marginBottom: token.calc(inputShift).div(2).sub(2).equal(),\n },\n [`${componentCls}-edit-content-confirm`]: {\n position: 'absolute',\n insetInlineEnd: token.calc(token.marginXS).add(2).equal(),\n insetBlockEnd: token.marginXS,\n color: token.colorIcon,\n // default style\n fontWeight: 'normal',\n fontSize: token.fontSize,\n fontStyle: 'normal',\n pointerEvents: 'none',\n },\n textarea: {\n margin: '0!important',\n // Fix Editable Textarea flash in Firefox\n MozTransition: 'none',\n height: '1em',\n },\n },\n };\n};\nexport const getCopyableStyles = (token) => ({\n [`${token.componentCls}-copy-success`]: {\n [`\n &,\n &:hover,\n &:focus`]: {\n color: token.colorSuccess,\n },\n },\n [`${token.componentCls}-copy-icon-only`]: {\n marginInlineStart: 0,\n },\n});\nexport const getEllipsisStyles = () => ({\n [`\n a&-ellipsis,\n span&-ellipsis\n `]: {\n display: 'inline-block',\n maxWidth: '100%',\n },\n '&-ellipsis-single-line': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n // https://blog.csdn.net/iefreer/article/details/50421025\n 'a&, span&': {\n verticalAlign: 'bottom',\n },\n '> code': {\n paddingBlock: 0,\n maxWidth: 'calc(100% - 1.2em)',\n display: 'inline-block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'bottom',\n // https://github.com/ant-design/ant-design/issues/45953\n boxSizing: 'content-box',\n },\n },\n '&-ellipsis-multiple-line': {\n display: '-webkit-box',\n overflow: 'hidden',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n },\n});\n","import { operationUnit } from '../../style';\nimport { genStyleHooks } from '../../theme/internal';\nimport { getCopyableStyles, getEditableStyles, getEllipsisStyles, getLinkStyles, getResetStyles, getTitleStyles, } from './mixins';\nconst genTypographyStyle = (token) => {\n const { componentCls, titleMarginTop } = token;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ color: token.colorText, wordBreak: 'break-word', lineHeight: token.lineHeight, [`&${componentCls}-secondary`]: {\n color: token.colorTextDescription,\n }, [`&${componentCls}-success`]: {\n color: token.colorSuccessText,\n }, [`&${componentCls}-warning`]: {\n color: token.colorWarningText,\n }, [`&${componentCls}-danger`]: {\n color: token.colorErrorText,\n 'a&:active, a&:focus': {\n color: token.colorErrorTextActive,\n },\n 'a&:hover': {\n color: token.colorErrorTextHover,\n },\n }, [`&${componentCls}-disabled`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n userSelect: 'none',\n }, [`\n div&,\n p\n `]: {\n marginBottom: '1em',\n } }, getTitleStyles(token)), { [`\n & + h1${componentCls},\n & + h2${componentCls},\n & + h3${componentCls},\n & + h4${componentCls},\n & + h5${componentCls}\n `]: {\n marginTop: titleMarginTop,\n }, [`\n div,\n ul,\n li,\n p,\n h1,\n h2,\n h3,\n h4,\n h5`]: {\n [`\n + h1,\n + h2,\n + h3,\n + h4,\n + h5\n `]: {\n marginTop: titleMarginTop,\n },\n } }), getResetStyles(token)), getLinkStyles(token)), { \n // Operation\n [`\n ${componentCls}-expand,\n ${componentCls}-collapse,\n ${componentCls}-edit,\n ${componentCls}-copy\n `]: Object.assign(Object.assign({}, operationUnit(token)), { marginInlineStart: token.marginXXS }) }), getEditableStyles(token)), getCopyableStyles(token)), getEllipsisStyles()), { '&-rtl': {\n direction: 'rtl',\n } }),\n };\n};\nexport const prepareComponentToken = () => ({\n titleMarginTop: '1.2em',\n titleMarginBottom: '0.5em',\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Typography', genTypographyStyle, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { getStyle as getCheckboxStyle } from '../../checkbox/style';\nimport { textEllipsis } from '../../style';\nconst getColumnsStyle = (token) => {\n const { prefixCls, componentCls } = token;\n const cascaderMenuItemCls = `${componentCls}-menu-item`;\n const iconCls = `\n &${cascaderMenuItemCls}-expand ${cascaderMenuItemCls}-expand-icon,\n ${cascaderMenuItemCls}-loading-icon\n`;\n return [\n // ==================== Checkbox ====================\n getCheckboxStyle(`${prefixCls}-checkbox`, token),\n {\n [componentCls]: {\n // ================== Checkbox ==================\n '&-checkbox': {\n top: 0,\n marginInlineEnd: token.paddingXS,\n pointerEvents: 'unset',\n },\n // ==================== Menu ====================\n // >>> Menus\n '&-menus': {\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'flex-start',\n [`&${componentCls}-menu-empty`]: {\n [`${componentCls}-menu`]: {\n width: '100%',\n height: 'auto',\n [cascaderMenuItemCls]: {\n color: token.colorTextDisabled,\n },\n },\n },\n },\n // >>> Menu\n '&-menu': {\n flexGrow: 1,\n flexShrink: 0,\n minWidth: token.controlItemWidth,\n height: token.dropdownHeight,\n margin: 0,\n padding: token.menuPadding,\n overflow: 'auto',\n verticalAlign: 'top',\n listStyle: 'none',\n '-ms-overflow-style': '-ms-autohiding-scrollbar', // https://github.com/ant-design/ant-design/issues/11857\n '&:not(:last-child)': {\n borderInlineEnd: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n },\n '&-item': Object.assign(Object.assign({}, textEllipsis), { display: 'flex', flexWrap: 'nowrap', alignItems: 'center', padding: token.optionPadding, lineHeight: token.lineHeight, cursor: 'pointer', transition: `all ${token.motionDurationMid}`, borderRadius: token.borderRadiusSM, '&:hover': {\n background: token.controlItemBgHover,\n }, '&-disabled': {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n '&:hover': {\n background: 'transparent',\n },\n [iconCls]: {\n color: token.colorTextDisabled,\n },\n }, [`&-active:not(${cascaderMenuItemCls}-disabled)`]: {\n '&, &:hover': {\n color: token.optionSelectedColor,\n fontWeight: token.optionSelectedFontWeight,\n backgroundColor: token.optionSelectedBg,\n },\n }, '&-content': {\n flex: 'auto',\n }, [iconCls]: {\n marginInlineStart: token.paddingXXS,\n color: token.colorIcon,\n fontSize: token.fontSizeIcon,\n }, '&-keyword': {\n color: token.colorHighlight,\n } }),\n },\n },\n },\n ];\n};\nexport default getColumnsStyle;\n","import React from 'react';\nexport function isFragment(child) {\n return child && React.isValidElement(child) && child.type === React.Fragment;\n}\nexport const replaceElement = (element, replacement, props) => {\n if (!React.isValidElement(element)) {\n return replacement;\n }\n return React.cloneElement(element, typeof props === 'function' ? props(element.props || {}) : props);\n};\nexport function cloneElement(element, props) {\n return replaceElement(element, element, props);\n}\n","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nexport { _toConsumableArray as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nexport { _arrayWithoutHoles as default };","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableSpread as default };","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _toArray from \"@babel/runtime/helpers/esm/toArray\";\nimport get from \"./get\";\nfunction internalSet(entity, paths, value, removeIfUndefined) {\n if (!paths.length) {\n return value;\n }\n var _paths = _toArray(paths),\n path = _paths[0],\n restPath = _paths.slice(1);\n var clone;\n if (!entity && typeof path === 'number') {\n clone = [];\n } else if (Array.isArray(entity)) {\n clone = _toConsumableArray(entity);\n } else {\n clone = _objectSpread({}, entity);\n }\n\n // Delete prop if `removeIfUndefined` and value is undefined\n if (removeIfUndefined && value === undefined && restPath.length === 1) {\n delete clone[path][restPath[0]];\n } else {\n clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);\n }\n return clone;\n}\nexport default function set(entity, paths, value) {\n var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n // Do nothing if `removeIfUndefined` and parent object not exist\n if (paths.length && removeIfUndefined && value === undefined && !get(entity, paths.slice(0, -1))) {\n return entity;\n }\n return internalSet(entity, paths, value, removeIfUndefined);\n}\nfunction isObject(obj) {\n return _typeof(obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\n}\nfunction createEmpty(source) {\n return Array.isArray(source) ? [] : {};\n}\nvar keys = typeof Reflect === 'undefined' ? Object.keys : Reflect.ownKeys;\n\n/**\n * Merge objects which will create\n */\nexport function merge() {\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n var clone = createEmpty(sources[0]);\n sources.forEach(function (src) {\n function internalMerge(path, parentLoopSet) {\n var loopSet = new Set(parentLoopSet);\n var value = get(src, path);\n var isArr = Array.isArray(value);\n if (isArr || isObject(value)) {\n // Only add not loop obj\n if (!loopSet.has(value)) {\n loopSet.add(value);\n var originValue = get(clone, path);\n if (isArr) {\n // Array will always be override\n clone = set(clone, path, []);\n } else if (!originValue || _typeof(originValue) !== 'object') {\n // Init container if not exist\n clone = set(clone, path, createEmpty(value));\n }\n keys(value).forEach(function (key) {\n internalMerge([].concat(_toConsumableArray(path), [key]), loopSet);\n });\n }\n } else {\n clone = set(clone, path, value);\n }\n }\n internalMerge([]);\n });\n return clone;\n}","var locale = {\n // Options\n items_per_page: '条/页',\n jump_to: '跳至',\n jump_to_confirm: '确定',\n page: '页',\n // Pagination\n prev_page: '上一页',\n next_page: '下一页',\n prev_5: '向前 5 页',\n next_5: '向后 5 页',\n prev_3: '向前 3 页',\n next_3: '向后 3 页',\n page_size: '页码'\n};\nexport default locale;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport * as React from 'react';\nexport var Context = /*#__PURE__*/React.createContext({});\nexport default function MotionProvider(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: props\n }, children);\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nvar DomWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(DomWrapper, _React$Component);\n var _super = _createSuper(DomWrapper);\n function DomWrapper() {\n _classCallCheck(this, DomWrapper);\n return _super.apply(this, arguments);\n }\n _createClass(DomWrapper, [{\n key: \"render\",\n value: function render() {\n return this.props.children;\n }\n }]);\n return DomWrapper;\n}(React.Component);\nexport default DomWrapper;","export var STATUS_NONE = 'none';\nexport var STATUS_APPEAR = 'appear';\nexport var STATUS_ENTER = 'enter';\nexport var STATUS_LEAVE = 'leave';\nexport var STEP_NONE = 'none';\nexport var STEP_PREPARE = 'prepare';\nexport var STEP_START = 'start';\nexport var STEP_ACTIVE = 'active';\nexport var STEP_ACTIVATED = 'end';\n/**\n * Used for disabled motion case.\n * Prepare stage will still work but start & active will be skipped.\n */\nexport var STEP_PREPARED = 'prepared';","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport canUseDOM from \"rc-util/es/Dom/canUseDom\";\n// ================= Transition =================\n// Event wrapper. Copy from react source code\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\".concat(styleProp)] = \"webkit\".concat(eventName);\n prefixes[\"Moz\".concat(styleProp)] = \"moz\".concat(eventName);\n prefixes[\"ms\".concat(styleProp)] = \"MS\".concat(eventName);\n prefixes[\"O\".concat(styleProp)] = \"o\".concat(eventName.toLowerCase());\n return prefixes;\n}\nexport function getVendorPrefixes(domSupport, win) {\n var prefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n };\n if (domSupport) {\n if (!('AnimationEvent' in win)) {\n delete prefixes.animationend.animation;\n }\n if (!('TransitionEvent' in win)) {\n delete prefixes.transitionend.transition;\n }\n }\n return prefixes;\n}\nvar vendorPrefixes = getVendorPrefixes(canUseDOM(), typeof window !== 'undefined' ? window : {});\nvar style = {};\nif (canUseDOM()) {\n var _document$createEleme = document.createElement('div');\n style = _document$createEleme.style;\n}\nvar prefixedEventNames = {};\nexport function getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n }\n var prefixMap = vendorPrefixes[eventName];\n if (prefixMap) {\n var stylePropList = Object.keys(prefixMap);\n var len = stylePropList.length;\n for (var i = 0; i < len; i += 1) {\n var styleProp = stylePropList[i];\n if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {\n prefixedEventNames[eventName] = prefixMap[styleProp];\n return prefixedEventNames[eventName];\n }\n }\n }\n return '';\n}\nvar internalAnimationEndName = getVendorPrefixedEventName('animationend');\nvar internalTransitionEndName = getVendorPrefixedEventName('transitionend');\nexport var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);\nexport var animationEndName = internalAnimationEndName || 'animationend';\nexport var transitionEndName = internalTransitionEndName || 'transitionend';\nexport function getTransitionName(transitionName, transitionType) {\n if (!transitionName) return null;\n if (_typeof(transitionName) === 'object') {\n var type = transitionType.replace(/-\\w/g, function (match) {\n return match[1].toUpperCase();\n });\n return transitionName[type];\n }\n return \"\".concat(transitionName, \"-\").concat(transitionType);\n}","import * as React from 'react';\nimport { useRef } from 'react';\nimport { animationEndName, transitionEndName } from \"../util/motion\";\nexport default (function (onInternalMotionEnd) {\n var cacheElementRef = useRef();\n\n // Remove events\n function removeMotionEvents(element) {\n if (element) {\n element.removeEventListener(transitionEndName, onInternalMotionEnd);\n element.removeEventListener(animationEndName, onInternalMotionEnd);\n }\n }\n\n // Patch events\n function patchMotionEvents(element) {\n if (cacheElementRef.current && cacheElementRef.current !== element) {\n removeMotionEvents(cacheElementRef.current);\n }\n if (element && element !== cacheElementRef.current) {\n element.addEventListener(transitionEndName, onInternalMotionEnd);\n element.addEventListener(animationEndName, onInternalMotionEnd);\n\n // Save as cache in case dom removed trigger by `motionDeadline`\n cacheElementRef.current = element;\n }\n }\n\n // Clean up when removed\n React.useEffect(function () {\n return function () {\n removeMotionEvents(cacheElementRef.current);\n };\n }, []);\n return [patchMotionEvents, removeMotionEvents];\n});","import canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { useEffect, useLayoutEffect } from 'react';\n\n// It's safe to use `useLayoutEffect` but the warning is annoying\nvar useIsomorphicLayoutEffect = canUseDom() ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;","import raf from \"rc-util/es/raf\";\nimport * as React from 'react';\nexport default (function () {\n var nextFrameRef = React.useRef(null);\n function cancelNextFrame() {\n raf.cancel(nextFrameRef.current);\n }\n function nextFrame(callback) {\n var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n cancelNextFrame();\n var nextFrameId = raf(function () {\n if (delay <= 1) {\n callback({\n isCanceled: function isCanceled() {\n return nextFrameId !== nextFrameRef.current;\n }\n });\n } else {\n nextFrame(callback, delay - 1);\n }\n });\n nextFrameRef.current = nextFrameId;\n }\n React.useEffect(function () {\n return function () {\n cancelNextFrame();\n };\n }, []);\n return [nextFrame, cancelNextFrame];\n});","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useState from \"rc-util/es/hooks/useState\";\nimport * as React from 'react';\nimport { STEP_ACTIVATED, STEP_ACTIVE, STEP_NONE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useNextFrame from \"./useNextFrame\";\nvar FULL_STEP_QUEUE = [STEP_PREPARE, STEP_START, STEP_ACTIVE, STEP_ACTIVATED];\nvar SIMPLE_STEP_QUEUE = [STEP_PREPARE, STEP_PREPARED];\n\n/** Skip current step */\nexport var SkipStep = false;\n/** Current step should be update in */\nexport var DoStep = true;\nexport function isActive(step) {\n return step === STEP_ACTIVE || step === STEP_ACTIVATED;\n}\nexport default (function (status, prepareOnly, callback) {\n var _useState = useState(STEP_NONE),\n _useState2 = _slicedToArray(_useState, 2),\n step = _useState2[0],\n setStep = _useState2[1];\n var _useNextFrame = useNextFrame(),\n _useNextFrame2 = _slicedToArray(_useNextFrame, 2),\n nextFrame = _useNextFrame2[0],\n cancelNextFrame = _useNextFrame2[1];\n function startQueue() {\n setStep(STEP_PREPARE, true);\n }\n var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;\n useIsomorphicLayoutEffect(function () {\n if (step !== STEP_NONE && step !== STEP_ACTIVATED) {\n var index = STEP_QUEUE.indexOf(step);\n var nextStep = STEP_QUEUE[index + 1];\n var result = callback(step);\n if (result === SkipStep) {\n // Skip when no needed\n setStep(nextStep, true);\n } else if (nextStep) {\n // Do as frame for step update\n nextFrame(function (info) {\n function doNext() {\n // Skip since current queue is ood\n if (info.isCanceled()) return;\n setStep(nextStep, true);\n }\n if (result === true) {\n doNext();\n } else {\n // Only promise should be async\n Promise.resolve(result).then(doNext);\n }\n });\n }\n }\n }, [status, step]);\n React.useEffect(function () {\n return function () {\n cancelNextFrame();\n };\n }, []);\n return [startQueue, step];\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEvent } from 'rc-util';\nimport useState from \"rc-util/es/hooks/useState\";\nimport useSyncState from \"rc-util/es/hooks/useSyncState\";\nimport * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { STATUS_APPEAR, STATUS_ENTER, STATUS_LEAVE, STATUS_NONE, STEP_ACTIVE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useDomMotionEvents from \"./useDomMotionEvents\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useStepQueue, { DoStep, isActive, SkipStep } from \"./useStepQueue\";\nexport default function useStatus(supportMotion, visible, getElement, _ref) {\n var _ref$motionEnter = _ref.motionEnter,\n motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,\n _ref$motionAppear = _ref.motionAppear,\n motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,\n _ref$motionLeave = _ref.motionLeave,\n motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,\n motionDeadline = _ref.motionDeadline,\n motionLeaveImmediately = _ref.motionLeaveImmediately,\n onAppearPrepare = _ref.onAppearPrepare,\n onEnterPrepare = _ref.onEnterPrepare,\n onLeavePrepare = _ref.onLeavePrepare,\n onAppearStart = _ref.onAppearStart,\n onEnterStart = _ref.onEnterStart,\n onLeaveStart = _ref.onLeaveStart,\n onAppearActive = _ref.onAppearActive,\n onEnterActive = _ref.onEnterActive,\n onLeaveActive = _ref.onLeaveActive,\n onAppearEnd = _ref.onAppearEnd,\n onEnterEnd = _ref.onEnterEnd,\n onLeaveEnd = _ref.onLeaveEnd,\n onVisibleChanged = _ref.onVisibleChanged;\n // Used for outer render usage to avoid `visible: false & status: none` to render nothing\n var _useState = useState(),\n _useState2 = _slicedToArray(_useState, 2),\n asyncVisible = _useState2[0],\n setAsyncVisible = _useState2[1];\n var _useSyncState = useSyncState(STATUS_NONE),\n _useSyncState2 = _slicedToArray(_useSyncState, 2),\n getStatus = _useSyncState2[0],\n setStatus = _useSyncState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n style = _useState4[0],\n setStyle = _useState4[1];\n var currentStatus = getStatus();\n var mountedRef = useRef(false);\n var deadlineRef = useRef(null);\n\n // =========================== Dom Node ===========================\n function getDomElement() {\n return getElement();\n }\n\n // ========================== Motion End ==========================\n var activeRef = useRef(false);\n\n /**\n * Clean up status & style\n */\n function updateMotionEndStatus() {\n setStatus(STATUS_NONE);\n setStyle(null, true);\n }\n var onInternalMotionEnd = useEvent(function (event) {\n var status = getStatus();\n // Do nothing since not in any transition status.\n // This may happen when `motionDeadline` trigger.\n if (status === STATUS_NONE) {\n return;\n }\n var element = getDomElement();\n if (event && !event.deadline && event.target !== element) {\n // event exists\n // not initiated by deadline\n // transitionEnd not fired by inner elements\n return;\n }\n var currentActive = activeRef.current;\n var canEnd;\n if (status === STATUS_APPEAR && currentActive) {\n canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);\n } else if (status === STATUS_ENTER && currentActive) {\n canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);\n } else if (status === STATUS_LEAVE && currentActive) {\n canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);\n }\n\n // Only update status when `canEnd` and not destroyed\n if (currentActive && canEnd !== false) {\n updateMotionEndStatus();\n }\n });\n var _useDomMotionEvents = useDomMotionEvents(onInternalMotionEnd),\n _useDomMotionEvents2 = _slicedToArray(_useDomMotionEvents, 1),\n patchMotionEvents = _useDomMotionEvents2[0];\n\n // ============================= Step =============================\n var getEventHandlers = function getEventHandlers(targetStatus) {\n switch (targetStatus) {\n case STATUS_APPEAR:\n return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onAppearPrepare), STEP_START, onAppearStart), STEP_ACTIVE, onAppearActive);\n case STATUS_ENTER:\n return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onEnterPrepare), STEP_START, onEnterStart), STEP_ACTIVE, onEnterActive);\n case STATUS_LEAVE:\n return _defineProperty(_defineProperty(_defineProperty({}, STEP_PREPARE, onLeavePrepare), STEP_START, onLeaveStart), STEP_ACTIVE, onLeaveActive);\n default:\n return {};\n }\n };\n var eventHandlers = React.useMemo(function () {\n return getEventHandlers(currentStatus);\n }, [currentStatus]);\n var _useStepQueue = useStepQueue(currentStatus, !supportMotion, function (newStep) {\n // Only prepare step can be skip\n if (newStep === STEP_PREPARE) {\n var onPrepare = eventHandlers[STEP_PREPARE];\n if (!onPrepare) {\n return SkipStep;\n }\n return onPrepare(getDomElement());\n }\n\n // Rest step is sync update\n if (step in eventHandlers) {\n var _eventHandlers$step;\n setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);\n }\n if (step === STEP_ACTIVE && currentStatus !== STATUS_NONE) {\n // Patch events when motion needed\n patchMotionEvents(getDomElement());\n if (motionDeadline > 0) {\n clearTimeout(deadlineRef.current);\n deadlineRef.current = setTimeout(function () {\n onInternalMotionEnd({\n deadline: true\n });\n }, motionDeadline);\n }\n }\n if (step === STEP_PREPARED) {\n updateMotionEndStatus();\n }\n return DoStep;\n }),\n _useStepQueue2 = _slicedToArray(_useStepQueue, 2),\n startStep = _useStepQueue2[0],\n step = _useStepQueue2[1];\n var active = isActive(step);\n activeRef.current = active;\n\n // ============================ Status ============================\n var visibleRef = useRef(null);\n\n // Update with new status\n useIsomorphicLayoutEffect(function () {\n // When use Suspense, the `visible` will repeat trigger,\n // But not real change of the `visible`, we need to skip it.\n // https://github.com/ant-design/ant-design/issues/44379\n if (mountedRef.current && visibleRef.current === visible) {\n return;\n }\n setAsyncVisible(visible);\n var isMounted = mountedRef.current;\n mountedRef.current = true;\n\n // if (!supportMotion) {\n // return;\n // }\n\n var nextStatus;\n\n // Appear\n if (!isMounted && visible && motionAppear) {\n nextStatus = STATUS_APPEAR;\n }\n\n // Enter\n if (isMounted && visible && motionEnter) {\n nextStatus = STATUS_ENTER;\n }\n\n // Leave\n if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {\n nextStatus = STATUS_LEAVE;\n }\n var nextEventHandlers = getEventHandlers(nextStatus);\n\n // Update to next status\n if (nextStatus && (supportMotion || nextEventHandlers[STEP_PREPARE])) {\n setStatus(nextStatus);\n startStep();\n } else {\n // Set back in case no motion but prev status has prepare step\n setStatus(STATUS_NONE);\n }\n visibleRef.current = visible;\n }, [visible]);\n\n // ============================ Effect ============================\n // Reset when motion changed\n useEffect(function () {\n if (\n // Cancel appear\n currentStatus === STATUS_APPEAR && !motionAppear ||\n // Cancel enter\n currentStatus === STATUS_ENTER && !motionEnter ||\n // Cancel leave\n currentStatus === STATUS_LEAVE && !motionLeave) {\n setStatus(STATUS_NONE);\n }\n }, [motionAppear, motionEnter, motionLeave]);\n useEffect(function () {\n return function () {\n mountedRef.current = false;\n clearTimeout(deadlineRef.current);\n };\n }, []);\n\n // Trigger `onVisibleChanged`\n var firstMountChangeRef = React.useRef(false);\n useEffect(function () {\n // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged\n if (asyncVisible) {\n firstMountChangeRef.current = true;\n }\n if (asyncVisible !== undefined && currentStatus === STATUS_NONE) {\n // Skip first render is invisible since it's nothing changed\n if (firstMountChangeRef.current || asyncVisible) {\n onVisibleChanged === null || onVisibleChanged === void 0 || onVisibleChanged(asyncVisible);\n }\n firstMountChangeRef.current = true;\n }\n }, [asyncVisible, currentStatus]);\n\n // ============================ Styles ============================\n var mergedStyle = style;\n if (eventHandlers[STEP_PREPARE] && step === STEP_START) {\n mergedStyle = _objectSpread({\n transition: 'none'\n }, mergedStyle);\n }\n return [currentStatus, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useEvent from \"./useEvent\";\n/**\n * Same as React.useState but will always get latest state.\n * This is useful when React merge multiple state updates into one.\n * e.g. onTransitionEnd trigger multiple event at once will be merged state update in React.\n */\nexport default function useSyncState(defaultValue) {\n var _React$useReducer = React.useReducer(function (x) {\n return x + 1;\n }, 0),\n _React$useReducer2 = _slicedToArray(_React$useReducer, 2),\n forceUpdate = _React$useReducer2[1];\n var currentValueRef = React.useRef(defaultValue);\n var getValue = useEvent(function () {\n return currentValueRef.current;\n });\n var setValue = useEvent(function (updater) {\n currentValueRef.current = typeof updater === 'function' ? updater(currentValueRef.current) : updater;\n forceUpdate();\n });\n return [getValue, setValue];\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */\nimport classNames from 'classnames';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { fillRef, getNodeRef, supportRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport { Context } from \"./context\";\nimport DomWrapper from \"./DomWrapper\";\nimport useStatus from \"./hooks/useStatus\";\nimport { isActive } from \"./hooks/useStepQueue\";\nimport { STATUS_NONE, STEP_PREPARE, STEP_START } from \"./interface\";\nimport { getTransitionName, supportTransition } from \"./util/motion\";\n/**\n * `transitionSupport` is used for none transition test case.\n * Default we use browser transition event support check.\n */\nexport function genCSSMotion(config) {\n var transitionSupport = config;\n if (_typeof(config) === 'object') {\n transitionSupport = config.transitionSupport;\n }\n function isSupportTransition(props, contextMotion) {\n return !!(props.motionName && transitionSupport && contextMotion !== false);\n }\n var CSSMotion = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _props$visible = props.visible,\n visible = _props$visible === void 0 ? true : _props$visible,\n _props$removeOnLeave = props.removeOnLeave,\n removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,\n forceRender = props.forceRender,\n children = props.children,\n motionName = props.motionName,\n leavedClassName = props.leavedClassName,\n eventProps = props.eventProps;\n var _React$useContext = React.useContext(Context),\n contextMotion = _React$useContext.motion;\n var supportMotion = isSupportTransition(props, contextMotion);\n\n // Ref to the react node, it may be a HTMLElement\n var nodeRef = useRef();\n // Ref to the dom wrapper in case ref can not pass to HTMLElement\n var wrapperNodeRef = useRef();\n function getDomElement() {\n try {\n // Here we're avoiding call for findDOMNode since it's deprecated\n // in strict mode. We're calling it only when node ref is not\n // an instance of DOM HTMLElement. Otherwise use\n // findDOMNode as a final resort\n return nodeRef.current instanceof HTMLElement ? nodeRef.current : findDOMNode(wrapperNodeRef.current);\n } catch (e) {\n // Only happen when `motionDeadline` trigger but element removed.\n return null;\n }\n }\n var _useStatus = useStatus(supportMotion, visible, getDomElement, props),\n _useStatus2 = _slicedToArray(_useStatus, 4),\n status = _useStatus2[0],\n statusStep = _useStatus2[1],\n statusStyle = _useStatus2[2],\n mergedVisible = _useStatus2[3];\n\n // Record whether content has rendered\n // Will return null for un-rendered even when `removeOnLeave={false}`\n var renderedRef = React.useRef(mergedVisible);\n if (mergedVisible) {\n renderedRef.current = true;\n }\n\n // ====================== Refs ======================\n var setNodeRef = React.useCallback(function (node) {\n nodeRef.current = node;\n fillRef(ref, node);\n }, [ref]);\n\n // ===================== Render =====================\n var motionChildren;\n var mergedProps = _objectSpread(_objectSpread({}, eventProps), {}, {\n visible: visible\n });\n if (!children) {\n // No children\n motionChildren = null;\n } else if (status === STATUS_NONE) {\n // Stable children\n if (mergedVisible) {\n motionChildren = children(_objectSpread({}, mergedProps), setNodeRef);\n } else if (!removeOnLeave && renderedRef.current && leavedClassName) {\n motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n className: leavedClassName\n }), setNodeRef);\n } else if (forceRender || !removeOnLeave && !leavedClassName) {\n motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n style: {\n display: 'none'\n }\n }), setNodeRef);\n } else {\n motionChildren = null;\n }\n } else {\n // In motion\n var statusSuffix;\n if (statusStep === STEP_PREPARE) {\n statusSuffix = 'prepare';\n } else if (isActive(statusStep)) {\n statusSuffix = 'active';\n } else if (statusStep === STEP_START) {\n statusSuffix = 'start';\n }\n var motionCls = getTransitionName(motionName, \"\".concat(status, \"-\").concat(statusSuffix));\n motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n className: classNames(getTransitionName(motionName, status), _defineProperty(_defineProperty({}, motionCls, motionCls && statusSuffix), motionName, typeof motionName === 'string')),\n style: statusStyle\n }), setNodeRef);\n }\n\n // Auto inject ref if child node not have `ref` props\n if ( /*#__PURE__*/React.isValidElement(motionChildren) && supportRef(motionChildren)) {\n var originNodeRef = getNodeRef(motionChildren);\n if (!originNodeRef) {\n motionChildren = /*#__PURE__*/React.cloneElement(motionChildren, {\n ref: setNodeRef\n });\n }\n }\n return /*#__PURE__*/React.createElement(DomWrapper, {\n ref: wrapperNodeRef\n }, motionChildren);\n });\n CSSMotion.displayName = 'CSSMotion';\n return CSSMotion;\n}\nexport default genCSSMotion(supportTransition);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n var keyObj;\n if (key && _typeof(key) === 'object' && 'key' in key) {\n keyObj = key;\n } else {\n keyObj = {\n key: key\n };\n }\n return _objectSpread(_objectSpread({}, keyObj), {}, {\n key: String(keyObj.key)\n });\n}\nexport function parseKeys() {\n var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var list = [];\n var currentIndex = 0;\n var currentLen = currentKeys.length;\n var prevKeyObjects = parseKeys(prevKeys);\n var currentKeyObjects = parseKeys(currentKeys);\n\n // Check prev keys to insert or keep\n prevKeyObjects.forEach(function (keyObj) {\n var hit = false;\n for (var i = currentIndex; i < currentLen; i += 1) {\n var currentKeyObj = currentKeyObjects[i];\n if (currentKeyObj.key === keyObj.key) {\n // New added keys should add before current key\n if (currentIndex < i) {\n list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n return _objectSpread(_objectSpread({}, obj), {}, {\n status: STATUS_ADD\n });\n }));\n currentIndex = i;\n }\n list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n status: STATUS_KEEP\n }));\n currentIndex += 1;\n hit = true;\n break;\n }\n }\n\n // If not hit, it means key is removed\n if (!hit) {\n list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n status: STATUS_REMOVE\n }));\n }\n });\n\n // Add rest to the list\n if (currentIndex < currentLen) {\n list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n return _objectSpread(_objectSpread({}, obj), {}, {\n status: STATUS_ADD\n });\n }));\n }\n\n /**\n * Merge same key when it remove and add again:\n * [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n */\n var keys = {};\n list.forEach(function (_ref) {\n var key = _ref.key;\n keys[key] = (keys[key] || 0) + 1;\n });\n var duplicatedKeys = Object.keys(keys).filter(function (key) {\n return keys[key] > 1;\n });\n duplicatedKeys.forEach(function (matchKey) {\n // Remove `STATUS_REMOVE` node.\n list = list.filter(function (_ref2) {\n var key = _ref2.key,\n status = _ref2.status;\n return key !== matchKey || status !== STATUS_REMOVE;\n });\n\n // Update `STATUS_ADD` to `STATUS_KEEP`\n list.forEach(function (node) {\n if (node.key === matchKey) {\n // eslint-disable-next-line no-param-reassign\n node.status = STATUS_KEEP;\n }\n });\n });\n return list;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"component\", \"children\", \"onVisibleChanged\", \"onAllRemoved\"],\n _excluded2 = [\"status\"];\n/* eslint react/prop-types: 0 */\nimport * as React from 'react';\nimport OriginCSSMotion from \"./CSSMotion\";\nimport { diffKeys, parseKeys, STATUS_ADD, STATUS_KEEP, STATUS_REMOVE, STATUS_REMOVED } from \"./util/diff\";\nimport { supportTransition } from \"./util/motion\";\nvar MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];\n/**\n * Generate a CSSMotionList component with config\n * @param transitionSupport No need since CSSMotionList no longer depends on transition support\n * @param CSSMotion CSSMotion component\n */\nexport function genCSSMotionList(transitionSupport) {\n var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : OriginCSSMotion;\n var CSSMotionList = /*#__PURE__*/function (_React$Component) {\n _inherits(CSSMotionList, _React$Component);\n var _super = _createSuper(CSSMotionList);\n function CSSMotionList() {\n var _this;\n _classCallCheck(this, CSSMotionList);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(args));\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n keyEntities: []\n });\n // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.\n _defineProperty(_assertThisInitialized(_this), \"removeKey\", function (removeKey) {\n _this.setState(function (prevState) {\n var nextKeyEntities = prevState.keyEntities.map(function (entity) {\n if (entity.key !== removeKey) return entity;\n return _objectSpread(_objectSpread({}, entity), {}, {\n status: STATUS_REMOVED\n });\n });\n return {\n keyEntities: nextKeyEntities\n };\n }, function () {\n var keyEntities = _this.state.keyEntities;\n var restKeysCount = keyEntities.filter(function (_ref) {\n var status = _ref.status;\n return status !== STATUS_REMOVED;\n }).length;\n if (restKeysCount === 0 && _this.props.onAllRemoved) {\n _this.props.onAllRemoved();\n }\n });\n });\n return _this;\n }\n _createClass(CSSMotionList, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var keyEntities = this.state.keyEntities;\n var _this$props = this.props,\n component = _this$props.component,\n children = _this$props.children,\n _onVisibleChanged = _this$props.onVisibleChanged,\n onAllRemoved = _this$props.onAllRemoved,\n restProps = _objectWithoutProperties(_this$props, _excluded);\n var Component = component || React.Fragment;\n var motionProps = {};\n MOTION_PROP_NAMES.forEach(function (prop) {\n motionProps[prop] = restProps[prop];\n delete restProps[prop];\n });\n delete restProps.keys;\n return /*#__PURE__*/React.createElement(Component, restProps, keyEntities.map(function (_ref2, index) {\n var status = _ref2.status,\n eventProps = _objectWithoutProperties(_ref2, _excluded2);\n var visible = status === STATUS_ADD || status === STATUS_KEEP;\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motionProps, {\n key: eventProps.key,\n visible: visible,\n eventProps: eventProps,\n onVisibleChanged: function onVisibleChanged(changedVisible) {\n _onVisibleChanged === null || _onVisibleChanged === void 0 || _onVisibleChanged(changedVisible, {\n key: eventProps.key\n });\n if (!changedVisible) {\n _this2.removeKey(eventProps.key);\n }\n }\n }), function (props, ref) {\n return children(_objectSpread(_objectSpread({}, props), {}, {\n index: index\n }), ref);\n });\n }));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(_ref3, _ref4) {\n var keys = _ref3.keys;\n var keyEntities = _ref4.keyEntities;\n var parsedKeyObjects = parseKeys(keys);\n var mixedKeyEntities = diffKeys(keyEntities, parsedKeyObjects);\n return {\n keyEntities: mixedKeyEntities.filter(function (entity) {\n var prevEntity = keyEntities.find(function (_ref5) {\n var key = _ref5.key;\n return entity.key === key;\n });\n\n // Remove if already mark as removed\n if (prevEntity && prevEntity.status === STATUS_REMOVED && entity.status === STATUS_REMOVE) {\n return false;\n }\n return true;\n })\n };\n }\n }]);\n return CSSMotionList;\n }(React.Component);\n _defineProperty(CSSMotionList, \"defaultProps\", {\n component: 'div'\n });\n return CSSMotionList;\n}\nexport default genCSSMotionList(supportTransition);","import CSSMotion from \"./CSSMotion\";\nimport CSSMotionList from \"./CSSMotionList\";\nexport { default as Provider } from \"./context\";\nexport { CSSMotionList };\nexport default CSSMotion;","const getOffset = (radius) => {\n if (radius === 0) {\n return 0;\n }\n // 如果要考虑通用性,这里应该用三角函数 Math.sin(45)\n // 但是这个场景比较特殊,始终是等腰直角三角形,所以直接用 Math.sqrt() 开方即可\n return radius - Math.sqrt(Math.pow(radius, 2) / 2);\n};\nexport default getOffset;\n","import { Keyframes, unit } from '@ant-design/cssinjs';\nimport { initMotion } from '../../style/motion/motion';\nconst floatButtonGroupMotion = (token) => {\n const { componentCls, floatButtonSize, motionDurationSlow, motionEaseInOutCirc, calc } = token;\n const moveTopIn = new Keyframes('antFloatButtonMoveTopIn', {\n '0%': {\n transform: `translate3d(0, ${unit(floatButtonSize)}, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n '100%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n });\n const moveTopOut = new Keyframes('antFloatButtonMoveTopOut', {\n '0%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n '100%': {\n transform: `translate3d(0, ${unit(floatButtonSize)}, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n });\n const moveRightIn = new Keyframes('antFloatButtonMoveRightIn', {\n '0%': {\n transform: `translate3d(${unit(calc(floatButtonSize).mul(-1).equal())}, 0, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n '100%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n });\n const moveRightOut = new Keyframes('antFloatButtonMoveRightOut', {\n '0%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n '100%': {\n transform: `translate3d(${unit(calc(floatButtonSize).mul(-1).equal())}, 0, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n });\n const moveBottomIn = new Keyframes('antFloatButtonMoveBottomIn', {\n '0%': {\n transform: `translate3d(0, ${unit(calc(floatButtonSize).mul(-1).equal())}, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n '100%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n });\n const moveBottomOut = new Keyframes('antFloatButtonMoveBottomOut', {\n '0%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n '100%': {\n transform: `translate3d(0, ${unit(calc(floatButtonSize).mul(-1).equal())}, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n });\n const moveLeftIn = new Keyframes('antFloatButtonMoveLeftIn', {\n '0%': {\n transform: `translate3d(${unit(floatButtonSize)}, 0, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n '100%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n });\n const moveLeftOut = new Keyframes('antFloatButtonMoveLeftOut', {\n '0%': {\n transform: 'translate3d(0, 0, 0)',\n transformOrigin: '0 0',\n opacity: 1,\n },\n '100%': {\n transform: `translate3d(${unit(floatButtonSize)}, 0, 0)`,\n transformOrigin: '0 0',\n opacity: 0,\n },\n });\n const groupPrefixCls = `${componentCls}-group`;\n return [\n {\n [groupPrefixCls]: {\n [`&${groupPrefixCls}-top ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveTopIn, moveTopOut, motionDurationSlow, true),\n [`&${groupPrefixCls}-bottom ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveBottomIn, moveBottomOut, motionDurationSlow, true),\n [`&${groupPrefixCls}-left ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveLeftIn, moveLeftOut, motionDurationSlow, true),\n [`&${groupPrefixCls}-right ${groupPrefixCls}-wrap`]: initMotion(`${groupPrefixCls}-wrap`, moveRightIn, moveRightOut, motionDurationSlow, true),\n },\n },\n {\n [`${groupPrefixCls}-wrap`]: {\n [`&${groupPrefixCls}-wrap-enter, &${groupPrefixCls}-wrap-appear`]: {\n opacity: 0,\n animationTimingFunction: motionEaseInOutCirc,\n },\n [`&${groupPrefixCls}-wrap-leave`]: {\n opacity: 1,\n animationTimingFunction: motionEaseInOutCirc,\n },\n },\n },\n ];\n};\nexport default floatButtonGroupMotion;\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { initFadeMotion } from '../../style/motion/fade';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport getOffset from '../util';\nimport floatButtonGroupMotion from './keyframes';\n// ============================== Group ==============================\nconst floatButtonGroupStyle = (token) => {\n const { antCls, componentCls, floatButtonSize, margin, borderRadiusLG, borderRadiusSM, badgeOffset, floatButtonBodyPadding, zIndexPopupBase, calc, } = token;\n const groupPrefixCls = `${componentCls}-group`;\n return {\n [groupPrefixCls]: Object.assign(Object.assign({}, resetComponent(token)), { zIndex: zIndexPopupBase, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', border: 'none', position: 'fixed', height: 'auto', boxShadow: 'none', minWidth: floatButtonSize, minHeight: floatButtonSize, insetInlineEnd: token.floatButtonInsetInlineEnd, bottom: token.floatButtonInsetBlockEnd, borderRadius: borderRadiusLG, [`${groupPrefixCls}-wrap`]: {\n zIndex: -1,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n }, [`&${groupPrefixCls}-rtl`]: {\n direction: 'rtl',\n }, [componentCls]: {\n position: 'static',\n } }),\n [`${groupPrefixCls}-top > ${groupPrefixCls}-wrap`]: {\n flexDirection: 'column',\n top: 'auto',\n bottom: calc(floatButtonSize).add(margin).equal(),\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: '100%',\n height: margin,\n bottom: calc(margin).mul(-1).equal(),\n },\n },\n [`${groupPrefixCls}-bottom > ${groupPrefixCls}-wrap`]: {\n flexDirection: 'column',\n top: calc(floatButtonSize).add(margin).equal(),\n bottom: 'auto',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: '100%',\n height: margin,\n top: calc(margin).mul(-1).equal(),\n },\n },\n [`${groupPrefixCls}-right > ${groupPrefixCls}-wrap`]: {\n flexDirection: 'row',\n left: { _skip_check_: true, value: calc(floatButtonSize).add(margin).equal() },\n right: { _skip_check_: true, value: 'auto' },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: margin,\n height: '100%',\n left: { _skip_check_: true, value: calc(margin).mul(-1).equal() },\n },\n },\n [`${groupPrefixCls}-left > ${groupPrefixCls}-wrap`]: {\n flexDirection: 'row',\n left: { _skip_check_: true, value: 'auto' },\n right: { _skip_check_: true, value: calc(floatButtonSize).add(margin).equal() },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: margin,\n height: '100%',\n right: { _skip_check_: true, value: calc(margin).mul(-1).equal() },\n },\n },\n [`${groupPrefixCls}-circle`]: {\n gap: margin,\n [`${groupPrefixCls}-wrap`]: {\n gap: margin,\n },\n },\n [`${groupPrefixCls}-square`]: {\n [`${componentCls}-square`]: {\n padding: 0,\n borderRadius: 0,\n [`&${groupPrefixCls}-trigger`]: {\n borderRadius: borderRadiusLG,\n },\n '&:first-child': {\n borderStartStartRadius: borderRadiusLG,\n borderStartEndRadius: borderRadiusLG,\n },\n '&:last-child': {\n borderEndStartRadius: borderRadiusLG,\n borderEndEndRadius: borderRadiusLG,\n },\n '&:not(:last-child)': {\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n },\n [`${antCls}-badge`]: {\n [`${antCls}-badge-count`]: {\n top: calc(calc(floatButtonBodyPadding).add(badgeOffset)).mul(-1).equal(),\n insetInlineEnd: calc(calc(floatButtonBodyPadding).add(badgeOffset)).mul(-1).equal(),\n },\n },\n },\n [`${groupPrefixCls}-wrap`]: {\n borderRadius: borderRadiusLG,\n boxShadow: token.boxShadowSecondary,\n [`${componentCls}-square`]: {\n boxShadow: 'none',\n borderRadius: 0,\n padding: floatButtonBodyPadding,\n [`${componentCls}-body`]: {\n width: token.floatButtonBodySize,\n height: token.floatButtonBodySize,\n borderRadius: borderRadiusSM,\n },\n },\n },\n },\n [`${groupPrefixCls}-top > ${groupPrefixCls}-wrap, ${groupPrefixCls}-bottom > ${groupPrefixCls}-wrap`]: {\n [`> ${componentCls}-square`]: {\n '&:first-child': {\n borderStartStartRadius: borderRadiusLG,\n borderStartEndRadius: borderRadiusLG,\n },\n '&:last-child': {\n borderEndStartRadius: borderRadiusLG,\n borderEndEndRadius: borderRadiusLG,\n },\n '&:not(:last-child)': {\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n },\n },\n },\n [`${groupPrefixCls}-left > ${groupPrefixCls}-wrap, ${groupPrefixCls}-right > ${groupPrefixCls}-wrap`]: {\n [`> ${componentCls}-square`]: {\n '&:first-child': {\n borderStartStartRadius: borderRadiusLG,\n borderEndStartRadius: borderRadiusLG,\n },\n '&:last-child': {\n borderStartEndRadius: borderRadiusLG,\n borderEndEndRadius: borderRadiusLG,\n },\n '&:not(:last-child)': {\n borderBottom: 'none',\n borderInlineEnd: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n },\n },\n },\n [`${groupPrefixCls}-circle-shadow`]: {\n boxShadow: 'none',\n },\n [`${groupPrefixCls}-square-shadow`]: {\n boxShadow: token.boxShadowSecondary,\n [`${componentCls}-square`]: {\n boxShadow: 'none',\n padding: floatButtonBodyPadding,\n [`${componentCls}-body`]: {\n width: token.floatButtonBodySize,\n height: token.floatButtonBodySize,\n borderRadius: borderRadiusSM,\n },\n },\n },\n };\n};\n// ============================== Shared ==============================\nconst sharedFloatButtonStyle = (token) => {\n const { antCls, componentCls, floatButtonBodyPadding, floatButtonIconSize, floatButtonSize, borderRadiusLG, badgeOffset, dotOffsetInSquare, dotOffsetInCircle, zIndexPopupBase, calc, } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { border: 'none', position: 'fixed', cursor: 'pointer', zIndex: zIndexPopupBase, \n // Do not remove the 'display: block' here.\n // Deleting it will cause marginBottom to become ineffective.\n // Ref: https://github.com/ant-design/ant-design/issues/44700\n display: 'block', width: floatButtonSize, height: floatButtonSize, insetInlineEnd: token.floatButtonInsetInlineEnd, bottom: token.floatButtonInsetBlockEnd, boxShadow: token.boxShadowSecondary, \n // Pure Panel\n '&-pure': {\n position: 'relative',\n inset: 'auto',\n }, '&:empty': {\n display: 'none',\n }, [`${antCls}-badge`]: {\n width: '100%',\n height: '100%',\n [`${antCls}-badge-count`]: {\n transform: 'translate(0, 0)',\n transformOrigin: 'center',\n top: calc(badgeOffset).mul(-1).equal(),\n insetInlineEnd: calc(badgeOffset).mul(-1).equal(),\n },\n }, [`${componentCls}-body`]: {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: `all ${token.motionDurationMid}`,\n [`${componentCls}-content`]: {\n overflow: 'hidden',\n textAlign: 'center',\n minHeight: floatButtonSize,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n padding: `${unit(calc(floatButtonBodyPadding).div(2).equal())} ${unit(floatButtonBodyPadding)}`,\n [`${componentCls}-icon`]: {\n textAlign: 'center',\n margin: 'auto',\n width: floatButtonIconSize,\n fontSize: floatButtonIconSize,\n lineHeight: 1,\n },\n },\n } }),\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n [`${componentCls}-circle`]: {\n height: floatButtonSize,\n borderRadius: '50%',\n [`${antCls}-badge`]: {\n [`${antCls}-badge-dot`]: {\n top: dotOffsetInCircle,\n insetInlineEnd: dotOffsetInCircle,\n },\n },\n [`${componentCls}-body`]: {\n borderRadius: '50%',\n },\n },\n [`${componentCls}-square`]: {\n height: 'auto',\n minHeight: floatButtonSize,\n borderRadius: borderRadiusLG,\n [`${antCls}-badge`]: {\n [`${antCls}-badge-dot`]: {\n top: dotOffsetInSquare,\n insetInlineEnd: dotOffsetInSquare,\n },\n },\n [`${componentCls}-body`]: {\n height: 'auto',\n borderRadius: borderRadiusLG,\n },\n },\n [`${componentCls}-default`]: {\n backgroundColor: token.floatButtonBackgroundColor,\n transition: `background-color ${token.motionDurationMid}`,\n [`${componentCls}-body`]: {\n backgroundColor: token.floatButtonBackgroundColor,\n transition: `background-color ${token.motionDurationMid}`,\n '&:hover': {\n backgroundColor: token.colorFillContent,\n },\n [`${componentCls}-content`]: {\n [`${componentCls}-icon`]: {\n color: token.colorText,\n },\n [`${componentCls}-description`]: {\n display: 'flex',\n alignItems: 'center',\n lineHeight: unit(token.fontSizeLG),\n color: token.colorText,\n fontSize: token.fontSizeSM,\n },\n },\n },\n },\n [`${componentCls}-primary`]: {\n backgroundColor: token.colorPrimary,\n [`${componentCls}-body`]: {\n backgroundColor: token.colorPrimary,\n transition: `background-color ${token.motionDurationMid}`,\n '&:hover': {\n backgroundColor: token.colorPrimaryHover,\n },\n [`${componentCls}-content`]: {\n [`${componentCls}-icon`]: {\n color: token.colorTextLightSolid,\n },\n [`${componentCls}-description`]: {\n display: 'flex',\n alignItems: 'center',\n lineHeight: unit(token.fontSizeLG),\n color: token.colorTextLightSolid,\n fontSize: token.fontSizeSM,\n },\n },\n },\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => ({\n dotOffsetInCircle: getOffset(token.controlHeightLG / 2),\n dotOffsetInSquare: getOffset(token.borderRadiusLG),\n});\nexport default genStyleHooks('FloatButton', (token) => {\n const { colorTextLightSolid, colorBgElevated, controlHeightLG, marginXXL, marginLG, fontSize, fontSizeIcon, controlItemBgHover, paddingXXS, calc, } = token;\n const floatButtonToken = mergeToken(token, {\n floatButtonBackgroundColor: colorBgElevated,\n floatButtonColor: colorTextLightSolid,\n floatButtonHoverBackgroundColor: controlItemBgHover,\n floatButtonFontSize: fontSize,\n floatButtonIconSize: calc(fontSizeIcon).mul(1.5).equal(),\n floatButtonSize: controlHeightLG,\n floatButtonInsetBlockEnd: marginXXL,\n floatButtonInsetInlineEnd: marginLG,\n floatButtonBodySize: calc(controlHeightLG).sub(calc(paddingXXS).mul(2)).equal(),\n // 这里的 paddingXXS 是简写,完整逻辑是 (controlHeightLG - (controlHeightLG - paddingXXS * 2)) / 2,\n floatButtonBodyPadding: paddingXXS,\n badgeOffset: calc(paddingXXS).mul(1.5).equal(),\n });\n return [\n floatButtonGroupStyle(floatButtonToken),\n sharedFloatButtonStyle(floatButtonToken),\n initFadeMotion(token),\n floatButtonGroupMotion(floatButtonToken),\n ];\n}, prepareComponentToken);\n","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import { resetComponent } from '../../style';\nimport { genStyleHooks } from '../../theme/internal';\nconst genRtlStyle = (token) => {\n const { componentCls } = token;\n return {\n [`&-rtl${componentCls}-horizontal`]: {\n [`> ${componentCls}-bar`]: {\n [`${componentCls}-bar-collapse-previous`]: {\n insetInlineEnd: 0,\n insetInlineStart: 'unset',\n },\n [`${componentCls}-bar-collapse-next`]: {\n insetInlineEnd: 'unset',\n insetInlineStart: 0,\n },\n },\n },\n [`&-rtl${componentCls}-vertical`]: {\n [`> ${componentCls}-bar`]: {\n [`${componentCls}-bar-collapse-previous`]: {\n insetInlineEnd: '50%',\n insetInlineStart: 'unset',\n },\n [`${componentCls}-bar-collapse-next`]: {\n insetInlineEnd: '50%',\n insetInlineStart: 'unset',\n },\n },\n },\n };\n};\nconst centerStyle = {\n position: 'absolute',\n top: '50%',\n left: {\n _skip_check_: true,\n value: '50%',\n },\n transform: 'translate(-50%, -50%)',\n};\nconst genSplitterStyle = (token) => {\n const { componentCls, colorFill, splitBarDraggableSize, splitBarSize, splitTriggerSize, controlItemBgHover, controlItemBgActive, controlItemBgActiveHover, prefixCls, } = token;\n const splitBarCls = `${componentCls}-bar`;\n const splitMaskCls = `${componentCls}-mask`;\n const splitPanelCls = `${componentCls}-panel`;\n const halfTriggerSize = token.calc(splitTriggerSize).div(2).equal();\n const splitterBarPreviewOffsetVar = `${prefixCls}-bar-preview-offset`;\n const splitterBarPreviewStyle = {\n position: 'absolute',\n background: token.colorPrimary,\n opacity: 0.2,\n pointerEvents: 'none',\n transition: 'none',\n zIndex: 1,\n display: 'none',\n };\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign({}, resetComponent(token)), { display: 'flex', width: '100%', height: '100%', alignItems: 'stretch', \n // ======================== SplitBar ========================\n // Use `>` to avoid conflict with mix layout\n [`> ${splitBarCls}`]: {\n flex: 'none',\n position: 'relative',\n userSelect: 'none',\n // ======================= Dragger =======================\n [`${splitBarCls}-dragger`]: Object.assign(Object.assign({}, centerStyle), { zIndex: 1, \n // Hover background\n '&::before': Object.assign({ content: '\"\"', background: controlItemBgHover }, centerStyle), \n // Spinner\n '&::after': Object.assign({ content: '\"\"', background: colorFill }, centerStyle), \n // Hover\n [`&:hover:not(${splitBarCls}-dragger-active)`]: {\n '&::before': {\n background: controlItemBgActive,\n },\n }, \n // Active\n '&-active': {\n zIndex: 2,\n '&::before': {\n background: controlItemBgActiveHover,\n },\n }, \n // Disabled, not use `pointer-events: none` since still need trigger collapse\n [`&-disabled${splitBarCls}-dragger`]: {\n zIndex: 0,\n '&, &:hover, &-active': {\n cursor: 'default',\n '&::before': {\n background: controlItemBgHover,\n },\n },\n '&::after': {\n display: 'none',\n },\n } }),\n // ======================= Collapse =======================\n [`${splitBarCls}-collapse-bar`]: Object.assign(Object.assign({}, centerStyle), { zIndex: token.zIndexPopupBase, background: controlItemBgHover, fontSize: token.fontSizeSM, borderRadius: token.borderRadiusXS, color: token.colorText, cursor: 'pointer', opacity: 0, display: 'flex', alignItems: 'center', justifyContent: 'center', \n // Hover\n '&:hover': {\n background: controlItemBgActive,\n }, \n // Active\n '&:active': {\n background: controlItemBgActiveHover,\n } }),\n '&:hover, &:active': {\n [`${splitBarCls}-collapse-bar-hover-only`]: {\n opacity: 1,\n },\n },\n [`${splitBarCls}-collapse-bar-hover-only`]: {\n '@media(hover:none)': {\n opacity: 1,\n },\n },\n [`${splitBarCls}-collapse-bar-always-hidden`]: {\n display: 'none',\n },\n [`${splitBarCls}-collapse-bar-always-visible`]: {\n opacity: 1,\n },\n }, \n // =========================== Mask =========================\n // Util dom for handle cursor\n [splitMaskCls]: {\n position: 'fixed',\n zIndex: token.zIndexPopupBase,\n inset: 0,\n '&-horizontal': {\n cursor: 'col-resize',\n },\n '&-vertical': {\n cursor: 'row-resize',\n },\n }, \n // ==========================================================\n // == Layout ==\n // ==========================================================\n '&-horizontal': {\n flexDirection: 'row',\n [`> ${splitBarCls}`]: {\n width: 0,\n // ======================= Preview =======================\n [`${splitBarCls}-preview`]: Object.assign(Object.assign({ height: '100%', width: splitBarSize }, splitterBarPreviewStyle), { [`&${splitBarCls}-preview-active`]: {\n display: 'block',\n transform: `translateX(var(--${splitterBarPreviewOffsetVar}))`,\n } }),\n // ======================= Dragger =======================\n [`${splitBarCls}-dragger`]: {\n cursor: 'col-resize',\n height: '100%',\n width: splitTriggerSize,\n '&::before': {\n height: '100%',\n width: splitBarSize,\n },\n '&::after': {\n height: splitBarDraggableSize,\n width: splitBarSize,\n },\n },\n // ======================= Collapse =======================\n [`${splitBarCls}-collapse-bar`]: {\n width: token.fontSizeSM,\n height: token.controlHeightSM,\n '&-start': {\n left: {\n _skip_check_: true,\n value: 'auto',\n },\n right: {\n _skip_check_: true,\n value: halfTriggerSize,\n },\n transform: 'translateY(-50%)',\n },\n '&-end': {\n left: {\n _skip_check_: true,\n value: halfTriggerSize,\n },\n right: {\n _skip_check_: true,\n value: 'auto',\n },\n transform: 'translateY(-50%)',\n },\n },\n },\n }, '&-vertical': {\n flexDirection: 'column',\n [`> ${splitBarCls}`]: {\n height: 0,\n // ======================= Preview =======================\n [`${splitBarCls}-preview`]: Object.assign(Object.assign({ height: splitBarSize, width: '100%' }, splitterBarPreviewStyle), { [`&${splitBarCls}-preview-active`]: {\n display: 'block',\n transform: `translateY(var(--${splitterBarPreviewOffsetVar}))`,\n } }),\n // ======================= Dragger =======================\n [`${splitBarCls}-dragger`]: {\n cursor: 'row-resize',\n width: '100%',\n height: splitTriggerSize,\n '&::before': {\n width: '100%',\n height: splitBarSize,\n },\n '&::after': {\n width: splitBarDraggableSize,\n height: splitBarSize,\n },\n },\n // ======================= Collapse =======================\n [`${splitBarCls}-collapse-bar`]: {\n height: token.fontSizeSM,\n width: token.controlHeightSM,\n '&-start': {\n top: 'auto',\n bottom: halfTriggerSize,\n transform: 'translateX(-50%)',\n },\n '&-end': {\n top: halfTriggerSize,\n bottom: 'auto',\n transform: 'translateX(-50%)',\n },\n },\n },\n }, \n // ========================= Panels =========================\n [splitPanelCls]: {\n overflow: 'auto',\n padding: '0 1px',\n scrollbarWidth: 'thin',\n boxSizing: 'border-box',\n '&-hidden': {\n padding: 0,\n overflow: 'hidden',\n },\n [`&:has(${componentCls}:only-child)`]: {\n overflow: 'hidden',\n },\n } }), genRtlStyle(token)),\n };\n};\nexport const prepareComponentToken = (token) => {\n var _a;\n const splitBarSize = token.splitBarSize || 2;\n const splitTriggerSize = token.splitTriggerSize || 6;\n // https://github.com/ant-design/ant-design/pull/51223\n const resizeSpinnerSize = token.resizeSpinnerSize || 20;\n const splitBarDraggableSize = (_a = token.splitBarDraggableSize) !== null && _a !== void 0 ? _a : resizeSpinnerSize;\n return {\n splitBarSize,\n splitTriggerSize,\n splitBarDraggableSize,\n resizeSpinnerSize,\n };\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Splitter', genSplitterStyle, prepareComponentToken);\n","import * as React from 'react';\nimport canUseDom from \"../Dom/canUseDom\";\n\n/**\n * Wrap `React.useLayoutEffect` which will not throw warning message in test env\n */\nvar useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;\nvar useLayoutEffect = function useLayoutEffect(callback, deps) {\n var firstMountRef = React.useRef(true);\n useInternalLayoutEffect(function () {\n return callback(firstMountRef.current);\n }, deps);\n\n // We tell react that first mount has passed\n useInternalLayoutEffect(function () {\n firstMountRef.current = false;\n return function () {\n firstMountRef.current = true;\n };\n }, []);\n};\nexport var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {\n useLayoutEffect(function (firstMount) {\n if (!firstMount) {\n return callback();\n }\n }, deps);\n};\nexport default useLayoutEffect;","export default function canUseDom() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","/* eslint-disable no-restricted-globals */\n// This is a alias proxy, which will use global `@ant-design/cssinjs` first.\n// Use local if global not found.\nlet cssinjs;\n\nif (typeof window !== 'undefined' && window.antdCssinjs) {\n // Use window UMD version\n cssinjs = window.antdCssinjs;\n} else if (typeof global !== 'undefined' && global.antdCssinjs) {\n // Use global UMD version\n cssinjs = global.antdCssinjs;\n} else {\n // Use local version.\n // Use relative path since webpack will also replace module here.\n // eslint-disable-next-line antfu/no-import-node-modules-by-path\n cssinjs = require('../node_modules/@ant-design/cssinjs');\n}\n\nmodule.exports = cssinjs;\n","import { createContext } from 'react';\nvar IconContext = /*#__PURE__*/createContext({});\nexport default IconContext;","export default '5.27.3';\n","// @ts-ignore\nimport version from './version';\nexport default version;\n","import React from 'react';\nconst zIndexContext = React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n zIndexContext.displayName = 'zIndexContext';\n}\nexport default zIndexContext;\n","import genFontSizes from './genFontSizes';\nconst genFontMapToken = (fontSize) => {\n const fontSizePairs = genFontSizes(fontSize);\n const fontSizes = fontSizePairs.map((pair) => pair.size);\n const lineHeights = fontSizePairs.map((pair) => pair.lineHeight);\n const fontSizeMD = fontSizes[1];\n const fontSizeSM = fontSizes[0];\n const fontSizeLG = fontSizes[2];\n const lineHeight = lineHeights[1];\n const lineHeightSM = lineHeights[0];\n const lineHeightLG = lineHeights[2];\n return {\n fontSizeSM,\n fontSize: fontSizeMD,\n fontSizeLG,\n fontSizeXL: fontSizes[3],\n fontSizeHeading1: fontSizes[6],\n fontSizeHeading2: fontSizes[5],\n fontSizeHeading3: fontSizes[4],\n fontSizeHeading4: fontSizes[3],\n fontSizeHeading5: fontSizes[2],\n lineHeight,\n lineHeightLG,\n lineHeightSM,\n fontHeight: Math.round(lineHeight * fontSizeMD),\n fontHeightLG: Math.round(lineHeightLG * fontSizeLG),\n fontHeightSM: Math.round(lineHeightSM * fontSizeSM),\n lineHeightHeading1: lineHeights[6],\n lineHeightHeading2: lineHeights[5],\n lineHeightHeading3: lineHeights[4],\n lineHeightHeading4: lineHeights[3],\n lineHeightHeading5: lineHeights[2],\n };\n};\nexport default genFontMapToken;\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\n/**\n * Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.\n * We do not make this auto is to avoid real memory leak.\n * Developer should confirm it's safe to ignore themselves.\n */\nexport default function useSafeState(defaultValue) {\n var destroyRef = React.useRef(false);\n var _React$useState = React.useState(defaultValue),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n value = _React$useState2[0],\n setValue = _React$useState2[1];\n React.useEffect(function () {\n destroyRef.current = false;\n return function () {\n destroyRef.current = true;\n };\n }, []);\n function safeSetState(updater, ignoreDestroy) {\n if (ignoreDestroy && destroyRef.current) {\n return;\n }\n setValue(updater);\n }\n return [value, safeSetState];\n}","import { unit } from '@ant-design/cssinjs';\nimport { genFocusStyle, resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genBreadcrumbStyle = (token) => {\n const { componentCls, iconCls, calc } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { color: token.itemColor, fontSize: token.fontSize, [iconCls]: {\n fontSize: token.iconFontSize,\n }, ol: {\n display: 'flex',\n flexWrap: 'wrap',\n margin: 0,\n padding: 0,\n listStyle: 'none',\n }, a: Object.assign({ color: token.linkColor, transition: `color ${token.motionDurationMid}`, padding: `0 ${unit(token.paddingXXS)}`, borderRadius: token.borderRadiusSM, height: token.fontHeight, display: 'inline-block', marginInline: calc(token.marginXXS).mul(-1).equal(), '&:hover': {\n color: token.linkHoverColor,\n backgroundColor: token.colorBgTextHover,\n } }, genFocusStyle(token)), 'li:last-child': {\n color: token.lastItemColor,\n }, [`${componentCls}-separator`]: {\n marginInline: token.separatorMargin,\n color: token.separatorColor,\n }, [`${componentCls}-link`]: {\n [`\n > ${iconCls} + span,\n > ${iconCls} + a\n `]: {\n marginInlineStart: token.marginXXS,\n },\n }, [`${componentCls}-overlay-link`]: {\n borderRadius: token.borderRadiusSM,\n height: token.fontHeight,\n display: 'inline-block',\n padding: `0 ${unit(token.paddingXXS)}`,\n marginInline: calc(token.marginXXS).mul(-1).equal(),\n [`> ${iconCls}`]: {\n marginInlineStart: token.marginXXS,\n fontSize: token.fontSizeIcon,\n },\n '&:hover': {\n color: token.linkHoverColor,\n backgroundColor: token.colorBgTextHover,\n a: {\n color: token.linkHoverColor,\n },\n },\n a: {\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n }, \n // rtl style\n [`&${token.componentCls}-rtl`]: {\n direction: 'rtl',\n } }),\n };\n};\nexport const prepareComponentToken = (token) => ({\n itemColor: token.colorTextDescription,\n lastItemColor: token.colorText,\n iconFontSize: token.fontSize,\n linkColor: token.colorTextDescription,\n linkHoverColor: token.colorText,\n separatorColor: token.colorTextDescription,\n separatorMargin: token.marginXS,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Breadcrumb', (token) => {\n const breadcrumbToken = mergeToken(token, {});\n return genBreadcrumbStyle(breadcrumbToken);\n}, prepareComponentToken);\n","const getMoveTranslate = (direction) => {\n const value = '100%';\n return {\n left: `translateX(-${value})`,\n right: `translateX(${value})`,\n top: `translateY(-${value})`,\n bottom: `translateY(${value})`,\n }[direction];\n};\nconst getEnterLeaveStyle = (startStyle, endStyle) => ({\n '&-enter, &-appear': Object.assign(Object.assign({}, startStyle), { '&-active': endStyle }),\n '&-leave': Object.assign(Object.assign({}, endStyle), { '&-active': startStyle }),\n});\nconst getFadeStyle = (from, duration) => (Object.assign({ '&-enter, &-appear, &-leave': {\n '&-start': {\n transition: 'none',\n },\n '&-active': {\n transition: `all ${duration}`,\n },\n } }, getEnterLeaveStyle({\n opacity: from,\n}, {\n opacity: 1,\n})));\nconst getPanelMotionStyles = (direction, duration) => [\n getFadeStyle(0.7, duration),\n getEnterLeaveStyle({\n transform: getMoveTranslate(direction),\n }, {\n transform: 'none',\n }),\n];\nconst genMotionStyle = (token) => {\n const { componentCls, motionDurationSlow } = token;\n return {\n [componentCls]: {\n // ======================== Mask ========================\n [`${componentCls}-mask-motion`]: getFadeStyle(0, motionDurationSlow),\n // ======================= Panel ========================\n [`${componentCls}-panel-motion`]: ['left', 'right', 'top', 'bottom'].reduce((obj, direction) => (Object.assign(Object.assign({}, obj), { [`&-${direction}`]: getPanelMotionStyles(direction, motionDurationSlow) })), {}),\n },\n };\n};\nexport default genMotionStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { genFocusStyle } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genMotionStyle from './motion';\n// =============================== Base ===============================\nconst genDrawerStyle = (token) => {\n const { borderRadiusSM, componentCls, zIndexPopup, colorBgMask, colorBgElevated, motionDurationSlow, motionDurationMid, paddingXS, padding, paddingLG, fontSizeLG, lineHeightLG, lineWidth, lineType, colorSplit, marginXS, colorIcon, colorIconHover, colorBgTextHover, colorBgTextActive, colorText, fontWeightStrong, footerPaddingBlock, footerPaddingInline, calc, } = token;\n const wrapperCls = `${componentCls}-content-wrapper`;\n return {\n [componentCls]: {\n position: 'fixed',\n inset: 0,\n zIndex: zIndexPopup,\n pointerEvents: 'none',\n color: colorText,\n '&-pure': {\n position: 'relative',\n background: colorBgElevated,\n display: 'flex',\n flexDirection: 'column',\n [`&${componentCls}-left`]: {\n boxShadow: token.boxShadowDrawerLeft,\n },\n [`&${componentCls}-right`]: {\n boxShadow: token.boxShadowDrawerRight,\n },\n [`&${componentCls}-top`]: {\n boxShadow: token.boxShadowDrawerUp,\n },\n [`&${componentCls}-bottom`]: {\n boxShadow: token.boxShadowDrawerDown,\n },\n },\n '&-inline': {\n position: 'absolute',\n },\n // ====================== Mask ======================\n [`${componentCls}-mask`]: {\n position: 'absolute',\n inset: 0,\n zIndex: zIndexPopup,\n background: colorBgMask,\n pointerEvents: 'auto',\n },\n // ==================== Content =====================\n [wrapperCls]: {\n position: 'absolute',\n zIndex: zIndexPopup,\n maxWidth: '100vw',\n transition: `all ${motionDurationSlow}`,\n '&-hidden': {\n display: 'none',\n },\n },\n // Placement\n [`&-left > ${wrapperCls}`]: {\n top: 0,\n bottom: 0,\n left: {\n _skip_check_: true,\n value: 0,\n },\n boxShadow: token.boxShadowDrawerLeft,\n },\n [`&-right > ${wrapperCls}`]: {\n top: 0,\n right: {\n _skip_check_: true,\n value: 0,\n },\n bottom: 0,\n boxShadow: token.boxShadowDrawerRight,\n },\n [`&-top > ${wrapperCls}`]: {\n top: 0,\n insetInline: 0,\n boxShadow: token.boxShadowDrawerUp,\n },\n [`&-bottom > ${wrapperCls}`]: {\n bottom: 0,\n insetInline: 0,\n boxShadow: token.boxShadowDrawerDown,\n },\n [`${componentCls}-content`]: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n overflow: 'auto',\n background: colorBgElevated,\n pointerEvents: 'auto',\n },\n // Header\n [`${componentCls}-header`]: {\n display: 'flex',\n flex: 0,\n alignItems: 'center',\n padding: `${unit(padding)} ${unit(paddingLG)}`,\n fontSize: fontSizeLG,\n lineHeight: lineHeightLG,\n borderBottom: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n '&-title': {\n display: 'flex',\n flex: 1,\n alignItems: 'center',\n minWidth: 0,\n minHeight: 0,\n },\n },\n [`${componentCls}-extra`]: {\n flex: 'none',\n },\n [`${componentCls}-close`]: Object.assign({ display: 'inline-flex', width: calc(fontSizeLG).add(paddingXS).equal(), height: calc(fontSizeLG).add(paddingXS).equal(), borderRadius: borderRadiusSM, justifyContent: 'center', alignItems: 'center', marginInlineEnd: marginXS, color: colorIcon, fontWeight: fontWeightStrong, fontSize: fontSizeLG, fontStyle: 'normal', lineHeight: 1, textAlign: 'center', textTransform: 'none', textDecoration: 'none', background: 'transparent', border: 0, cursor: 'pointer', transition: `all ${motionDurationMid}`, textRendering: 'auto', '&:hover': {\n color: colorIconHover,\n backgroundColor: colorBgTextHover,\n textDecoration: 'none',\n }, '&:active': {\n backgroundColor: colorBgTextActive,\n } }, genFocusStyle(token)),\n [`${componentCls}-title`]: {\n flex: 1,\n margin: 0,\n fontWeight: token.fontWeightStrong,\n fontSize: fontSizeLG,\n lineHeight: lineHeightLG,\n },\n // Body\n [`${componentCls}-body`]: {\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n padding: paddingLG,\n overflow: 'auto',\n [`${componentCls}-body-skeleton`]: {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n },\n },\n // Footer\n [`${componentCls}-footer`]: {\n flexShrink: 0,\n padding: `${unit(footerPaddingBlock)} ${unit(footerPaddingInline)}`,\n borderTop: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n },\n // ====================== RTL =======================\n '&-rtl': {\n direction: 'rtl',\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => ({\n zIndexPopup: token.zIndexPopupBase,\n footerPaddingBlock: token.paddingXS,\n footerPaddingInline: token.padding,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Drawer', (token) => {\n const drawerToken = mergeToken(token, {});\n return [genDrawerStyle(drawerToken), genMotionStyle(drawerToken)];\n}, prepareComponentToken);\n","var camel2hyphen = require('string-convert/camel2hyphen');\n\nvar isDimension = function (feature) {\n var re = /[height|width]$/;\n return re.test(feature);\n};\n\nvar obj2mq = function (obj) {\n var mq = '';\n var features = Object.keys(obj);\n features.forEach(function (feature, index) {\n var value = obj[feature];\n feature = camel2hyphen(feature);\n // Add px to dimension features\n if (isDimension(feature) && typeof value === 'number') {\n value = value + 'px';\n }\n if (value === true) {\n mq += feature;\n } else if (value === false) {\n mq += 'not ' + feature;\n } else {\n mq += '(' + feature + ': ' + value + ')';\n }\n if (index < features.length-1) {\n mq += ' and '\n }\n });\n return mq;\n};\n\nvar json2mq = function (query) {\n var mq = '';\n if (typeof query === 'string') {\n return query;\n }\n // Handling array of media queries\n if (query instanceof Array) {\n query.forEach(function (q, index) {\n mq += obj2mq(q);\n if (index < query.length-1) {\n mq += ', '\n }\n });\n return mq;\n }\n // Handling single media query\n return obj2mq(query);\n};\n\nmodule.exports = json2mq;","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genBaseStyle = (token) => {\n const { antCls, componentCls, iconCls, avatarBg, avatarColor, containerSize, containerSizeLG, containerSizeSM, textFontSize, textFontSizeLG, textFontSizeSM, iconFontSize, iconFontSizeLG, iconFontSizeSM, borderRadius, borderRadiusLG, borderRadiusSM, lineWidth, lineType, } = token;\n // Avatar size style\n const avatarSizeStyle = (size, fontSize, iconFontSize, radius) => ({\n width: size,\n height: size,\n borderRadius: '50%',\n fontSize,\n [`&${componentCls}-square`]: {\n borderRadius: radius,\n },\n [`&${componentCls}-icon`]: {\n fontSize: iconFontSize,\n [`> ${iconCls}`]: {\n margin: 0,\n },\n },\n });\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', display: 'inline-flex', justifyContent: 'center', alignItems: 'center', overflow: 'hidden', color: avatarColor, whiteSpace: 'nowrap', textAlign: 'center', verticalAlign: 'middle', background: avatarBg, border: `${unit(lineWidth)} ${lineType} transparent`, '&-image': {\n background: 'transparent',\n }, [`${antCls}-image-img`]: {\n display: 'block',\n } }), avatarSizeStyle(containerSize, textFontSize, iconFontSize, borderRadius)), { '&-lg': Object.assign({}, avatarSizeStyle(containerSizeLG, textFontSizeLG, iconFontSizeLG, borderRadiusLG)), '&-sm': Object.assign({}, avatarSizeStyle(containerSizeSM, textFontSizeSM, iconFontSizeSM, borderRadiusSM)), '> img': {\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n } }),\n };\n};\nconst genGroupStyle = (token) => {\n const { componentCls, groupBorderColor, groupOverlapping, groupSpace } = token;\n return {\n [`${componentCls}-group`]: {\n display: 'inline-flex',\n [componentCls]: {\n borderColor: groupBorderColor,\n },\n '> *:not(:first-child)': {\n marginInlineStart: groupOverlapping,\n },\n },\n [`${componentCls}-group-popover`]: {\n [`${componentCls} + ${componentCls}`]: {\n marginInlineStart: groupSpace,\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => {\n const { controlHeight, controlHeightLG, controlHeightSM, fontSize, fontSizeLG, fontSizeXL, fontSizeHeading3, marginXS, marginXXS, colorBorderBg, } = token;\n return {\n containerSize: controlHeight,\n containerSizeLG: controlHeightLG,\n containerSizeSM: controlHeightSM,\n textFontSize: fontSize,\n textFontSizeLG: fontSize,\n textFontSizeSM: fontSize,\n iconFontSize: Math.round((fontSizeLG + fontSizeXL) / 2),\n iconFontSizeLG: fontSizeHeading3,\n iconFontSizeSM: fontSize,\n groupSpace: marginXXS,\n groupOverlapping: -marginXS,\n groupBorderColor: colorBorderBg,\n };\n};\nexport default genStyleHooks('Avatar', (token) => {\n const { colorTextLightSolid, colorTextPlaceholder } = token;\n const avatarToken = mergeToken(token, {\n avatarBg: colorTextPlaceholder,\n avatarColor: colorTextLightSolid,\n });\n return [genBaseStyle(avatarToken), genGroupStyle(avatarToken)];\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\n/**\n * @private Internal usage only\n * see: https://developer.mozilla.org/en-US/docs/Web/CSS/gradient/conic-gradient#checkerboard\n */\nexport const getTransBg = (size, colorFill) => ({\n backgroundImage: `conic-gradient(${colorFill} 25%, transparent 25% 50%, ${colorFill} 50% 75%, transparent 75% 100%)`,\n backgroundSize: `${size} ${size}`,\n});\nconst genColorBlockStyle = (token, size) => {\n const { componentCls, borderRadiusSM, colorPickerInsetShadow, lineWidth, colorFillSecondary } = token;\n return {\n [`${componentCls}-color-block`]: Object.assign(Object.assign({ position: 'relative', borderRadius: borderRadiusSM, width: size, height: size, boxShadow: colorPickerInsetShadow, flex: 'none' }, getTransBg('50%', token.colorFillSecondary)), { [`${componentCls}-color-block-inner`]: {\n width: '100%',\n height: '100%',\n boxShadow: `inset 0 0 0 ${unit(lineWidth)} ${colorFillSecondary}`,\n borderRadius: 'inherit',\n } }),\n };\n};\nexport default genColorBlockStyle;\n","import { unit } from '@ant-design/cssinjs';\nconst genInputStyle = (token) => {\n const { componentCls, antCls, fontSizeSM, lineHeightSM, colorPickerAlphaInputWidth, marginXXS, paddingXXS, controlHeightSM, marginXS, fontSizeIcon, paddingXS, colorTextPlaceholder, colorPickerInputNumberHandleWidth, lineWidth, } = token;\n return {\n [`${componentCls}-input-container`]: {\n display: 'flex',\n [`${componentCls}-steppers${antCls}-input-number`]: {\n fontSize: fontSizeSM,\n lineHeight: lineHeightSM,\n [`${antCls}-input-number-input`]: {\n paddingInlineStart: paddingXXS,\n paddingInlineEnd: 0,\n },\n [`${antCls}-input-number-handler-wrap`]: {\n width: colorPickerInputNumberHandleWidth,\n },\n },\n [`${componentCls}-steppers${componentCls}-alpha-input`]: {\n flex: `0 0 ${unit(colorPickerAlphaInputWidth)}`,\n marginInlineStart: marginXXS,\n },\n [`${componentCls}-format-select${antCls}-select`]: {\n marginInlineEnd: marginXS,\n width: 'auto',\n '&-single': {\n [`${antCls}-select-selector`]: {\n padding: 0,\n border: 0,\n },\n [`${antCls}-select-arrow`]: {\n insetInlineEnd: 0,\n },\n [`${antCls}-select-selection-item`]: {\n paddingInlineEnd: token.calc(fontSizeIcon).add(marginXXS).equal(),\n fontSize: fontSizeSM,\n lineHeight: unit(controlHeightSM),\n },\n [`${antCls}-select-item-option-content`]: {\n fontSize: fontSizeSM,\n lineHeight: lineHeightSM,\n },\n [`${antCls}-select-dropdown`]: {\n [`${antCls}-select-item`]: {\n minHeight: 'auto',\n },\n },\n },\n },\n [`${componentCls}-input`]: {\n gap: marginXXS,\n alignItems: 'center',\n flex: 1,\n width: 0,\n [`${componentCls}-hsb-input,${componentCls}-rgb-input`]: {\n display: 'flex',\n gap: marginXXS,\n alignItems: 'center',\n },\n [`${componentCls}-steppers`]: {\n flex: 1,\n },\n [`${componentCls}-hex-input${antCls}-input-affix-wrapper`]: {\n flex: 1,\n padding: `0 ${unit(paddingXS)}`,\n [`${antCls}-input`]: {\n fontSize: fontSizeSM,\n textTransform: 'uppercase',\n lineHeight: unit(token.calc(controlHeightSM).sub(token.calc(lineWidth).mul(2)).equal()),\n },\n [`${antCls}-input-prefix`]: {\n color: colorTextPlaceholder,\n },\n },\n },\n },\n };\n};\nexport default genInputStyle;\n","import { unit } from '@ant-design/cssinjs';\nconst genPickerStyle = (token) => {\n const { componentCls, controlHeightLG, borderRadiusSM, colorPickerInsetShadow, marginSM, colorBgElevated, colorFillSecondary, lineWidthBold, colorPickerHandlerSize, } = token;\n return {\n userSelect: 'none',\n [`${componentCls}-select`]: {\n [`${componentCls}-palette`]: {\n minHeight: token.calc(controlHeightLG).mul(4).equal(),\n overflow: 'hidden',\n borderRadius: borderRadiusSM,\n },\n [`${componentCls}-saturation`]: {\n position: 'absolute',\n borderRadius: 'inherit',\n boxShadow: colorPickerInsetShadow,\n inset: 0,\n },\n marginBottom: marginSM,\n },\n // ======================== Panel =========================\n [`${componentCls}-handler`]: {\n width: colorPickerHandlerSize,\n height: colorPickerHandlerSize,\n border: `${unit(lineWidthBold)} solid ${colorBgElevated}`,\n position: 'relative',\n borderRadius: '50%',\n cursor: 'pointer',\n boxShadow: `${colorPickerInsetShadow}, 0 0 0 1px ${colorFillSecondary}`,\n },\n };\n};\nexport default genPickerStyle;\n","import { unit } from '@ant-design/cssinjs';\nconst genPresetsStyle = (token) => {\n const { componentCls, antCls, colorTextQuaternary, paddingXXS, colorPickerPresetColorSize, fontSizeSM, colorText, lineHeightSM, lineWidth, borderRadius, colorFill, colorWhite, marginXXS, paddingXS, fontHeightSM, } = token;\n return {\n [`${componentCls}-presets`]: {\n [`${antCls}-collapse-item > ${antCls}-collapse-header`]: {\n padding: 0,\n [`${antCls}-collapse-expand-icon`]: {\n height: fontHeightSM,\n color: colorTextQuaternary,\n paddingInlineEnd: paddingXXS,\n },\n },\n [`${antCls}-collapse`]: {\n display: 'flex',\n flexDirection: 'column',\n gap: marginXXS,\n },\n [`${antCls}-collapse-item > ${antCls}-collapse-content > ${antCls}-collapse-content-box`]: {\n padding: `${unit(paddingXS)} 0`,\n },\n '&-label': {\n fontSize: fontSizeSM,\n color: colorText,\n lineHeight: lineHeightSM,\n },\n '&-items': {\n display: 'flex',\n flexWrap: 'wrap',\n gap: token.calc(marginXXS).mul(1.5).equal(),\n [`${componentCls}-presets-color`]: {\n position: 'relative',\n cursor: 'pointer',\n width: colorPickerPresetColorSize,\n height: colorPickerPresetColorSize,\n '&::before': {\n content: '\"\"',\n pointerEvents: 'none',\n width: token.calc(colorPickerPresetColorSize).add(token.calc(lineWidth).mul(4)).equal(),\n height: token\n .calc(colorPickerPresetColorSize)\n .add(token.calc(lineWidth).mul(4))\n .equal(),\n position: 'absolute',\n top: token.calc(lineWidth).mul(-2).equal(),\n insetInlineStart: token.calc(lineWidth).mul(-2).equal(),\n borderRadius,\n border: `${unit(lineWidth)} solid transparent`,\n transition: `border-color ${token.motionDurationMid} ${token.motionEaseInBack}`,\n },\n '&:hover::before': {\n borderColor: colorFill,\n },\n '&::after': {\n boxSizing: 'border-box',\n position: 'absolute',\n top: '50%',\n insetInlineStart: '21.5%',\n display: 'table',\n width: token.calc(colorPickerPresetColorSize).div(13).mul(5).equal(),\n height: token.calc(colorPickerPresetColorSize).div(13).mul(8).equal(),\n border: `${unit(token.lineWidthBold)} solid ${token.colorWhite}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: 'rotate(45deg) scale(0) translate(-50%,-50%)',\n opacity: 0,\n content: '\"\"',\n transition: `all ${token.motionDurationFast} ${token.motionEaseInBack}, opacity ${token.motionDurationFast}`,\n },\n [`&${componentCls}-presets-color-checked`]: {\n '&::after': {\n opacity: 1,\n borderColor: colorWhite,\n transform: 'rotate(45deg) scale(1) translate(-50%,-50%)',\n transition: `transform ${token.motionDurationMid} ${token.motionEaseOutBack} ${token.motionDurationFast}`,\n },\n [`&${componentCls}-presets-color-bright`]: {\n '&::after': {\n borderColor: 'rgba(0, 0, 0, 0.45)',\n },\n },\n },\n },\n },\n '&-empty': {\n fontSize: fontSizeSM,\n color: colorTextQuaternary,\n },\n },\n };\n};\nexport default genPresetsStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { getTransBg } from './color-block';\nconst genSliderStyle = (token) => {\n const { componentCls, colorPickerInsetShadow, colorBgElevated, colorFillSecondary, lineWidthBold, colorPickerHandlerSizeSM, colorPickerSliderHeight, marginSM, marginXS, } = token;\n const handleInnerSize = token\n .calc(colorPickerHandlerSizeSM)\n .sub(token.calc(lineWidthBold).mul(2).equal())\n .equal();\n const handleHoverSize = token\n .calc(colorPickerHandlerSizeSM)\n .add(token.calc(lineWidthBold).mul(2).equal())\n .equal();\n const activeHandleStyle = {\n '&:after': {\n transform: 'scale(1)',\n boxShadow: `${colorPickerInsetShadow}, 0 0 0 1px ${token.colorPrimaryActive}`,\n },\n };\n return {\n // ======================== Slider ========================\n [`${componentCls}-slider`]: [\n getTransBg(unit(colorPickerSliderHeight), token.colorFillSecondary),\n {\n margin: 0,\n padding: 0,\n height: colorPickerSliderHeight,\n borderRadius: token.calc(colorPickerSliderHeight).div(2).equal(),\n '&-rail': {\n height: colorPickerSliderHeight,\n borderRadius: token.calc(colorPickerSliderHeight).div(2).equal(),\n boxShadow: colorPickerInsetShadow,\n },\n [`& ${componentCls}-slider-handle`]: {\n width: handleInnerSize,\n height: handleInnerSize,\n top: 0,\n borderRadius: '100%',\n '&:before': {\n display: 'block',\n position: 'absolute',\n background: 'transparent',\n left: {\n _skip_check_: true,\n value: '50%',\n },\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: handleHoverSize,\n height: handleHoverSize,\n borderRadius: '100%',\n },\n '&:after': {\n width: colorPickerHandlerSizeSM,\n height: colorPickerHandlerSizeSM,\n border: `${unit(lineWidthBold)} solid ${colorBgElevated}`,\n boxShadow: `${colorPickerInsetShadow}, 0 0 0 1px ${colorFillSecondary}`,\n outline: 'none',\n insetInlineStart: token.calc(lineWidthBold).mul(-1).equal(),\n top: token.calc(lineWidthBold).mul(-1).equal(),\n background: 'transparent',\n transition: 'none',\n },\n '&:focus': activeHandleStyle,\n },\n },\n ],\n // ======================== Layout ========================\n [`${componentCls}-slider-container`]: {\n display: 'flex',\n gap: marginSM,\n marginBottom: marginSM,\n // Group\n [`${componentCls}-slider-group`]: {\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'space-between',\n display: 'flex',\n '&-disabled-alpha': {\n justifyContent: 'center',\n },\n },\n },\n [`${componentCls}-gradient-slider`]: {\n marginBottom: marginXS,\n [`& ${componentCls}-slider-handle`]: {\n '&:after': {\n transform: 'scale(0.8)',\n },\n '&-active, &:focus': activeHandleStyle,\n },\n },\n };\n};\nexport default genSliderStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genColorBlockStyle from './color-block';\nimport genInputStyle from './input';\nimport genPickerStyle from './picker';\nimport genPresetsStyle from './presets';\nimport genSliderStyle from './slider';\nexport const genActiveStyle = (token, borderColor, outlineColor) => ({\n borderInlineEndWidth: token.lineWidth,\n borderColor,\n boxShadow: `0 0 0 ${unit(token.controlOutlineWidth)} ${outlineColor}`,\n outline: 0,\n});\nconst genRtlStyle = (token) => {\n const { componentCls } = token;\n return {\n '&-rtl': {\n [`${componentCls}-presets-color`]: {\n '&::after': {\n direction: 'ltr',\n },\n },\n [`${componentCls}-clear`]: {\n '&::after': {\n direction: 'ltr',\n },\n },\n },\n };\n};\nconst genClearStyle = (token, size, extraStyle) => {\n const { componentCls, borderRadiusSM, lineWidth, colorSplit, colorBorder, red6 } = token;\n return {\n [`${componentCls}-clear`]: Object.assign(Object.assign({ width: size, height: size, borderRadius: borderRadiusSM, border: `${unit(lineWidth)} solid ${colorSplit}`, position: 'relative', overflow: 'hidden', cursor: 'inherit', transition: `all ${token.motionDurationFast}` }, extraStyle), { '&::after': {\n content: '\"\"',\n position: 'absolute',\n insetInlineEnd: token.calc(lineWidth).mul(-1).equal(),\n top: token.calc(lineWidth).mul(-1).equal(),\n display: 'block',\n width: 40, // maximum\n height: 2, // fixed\n transformOrigin: `calc(100% - 1px) 1px`,\n transform: 'rotate(-45deg)',\n backgroundColor: red6,\n }, '&:hover': {\n borderColor: colorBorder,\n } }),\n };\n};\nconst genStatusStyle = (token) => {\n const { componentCls, colorError, colorWarning, colorErrorHover, colorWarningHover, colorErrorOutline, colorWarningOutline, } = token;\n return {\n [`&${componentCls}-status-error`]: {\n borderColor: colorError,\n '&:hover': {\n borderColor: colorErrorHover,\n },\n [`&${componentCls}-trigger-active`]: Object.assign({}, genActiveStyle(token, colorError, colorErrorOutline)),\n },\n [`&${componentCls}-status-warning`]: {\n borderColor: colorWarning,\n '&:hover': {\n borderColor: colorWarningHover,\n },\n [`&${componentCls}-trigger-active`]: Object.assign({}, genActiveStyle(token, colorWarning, colorWarningOutline)),\n },\n };\n};\nconst genSizeStyle = (token) => {\n const { componentCls, controlHeightLG, controlHeightSM, controlHeight, controlHeightXS, borderRadius, borderRadiusSM, borderRadiusXS, borderRadiusLG, fontSizeLG, } = token;\n return {\n [`&${componentCls}-lg`]: {\n minWidth: controlHeightLG,\n minHeight: controlHeightLG,\n borderRadius: borderRadiusLG,\n [`${componentCls}-color-block, ${componentCls}-clear`]: {\n width: controlHeight,\n height: controlHeight,\n borderRadius,\n },\n [`${componentCls}-trigger-text`]: {\n fontSize: fontSizeLG,\n },\n },\n [`&${componentCls}-sm`]: {\n minWidth: controlHeightSM,\n minHeight: controlHeightSM,\n borderRadius: borderRadiusSM,\n [`${componentCls}-color-block, ${componentCls}-clear`]: {\n width: controlHeightXS,\n height: controlHeightXS,\n borderRadius: borderRadiusXS,\n },\n [`${componentCls}-trigger-text`]: {\n lineHeight: unit(controlHeightXS),\n },\n },\n };\n};\nconst genColorPickerStyle = (token) => {\n const { antCls, componentCls, colorPickerWidth, colorPrimary, motionDurationMid, colorBgElevated, colorTextDisabled, colorText, colorBgContainerDisabled, borderRadius, marginXS, marginSM, controlHeight, controlHeightSM, colorBgTextActive, colorPickerPresetColorSize, colorPickerPreviewSize, lineWidth, colorBorder, paddingXXS, fontSize, colorPrimaryHover, controlOutline, } = token;\n return [\n {\n [componentCls]: Object.assign({ [`${componentCls}-inner`]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ '&-content': {\n display: 'flex',\n flexDirection: 'column',\n width: colorPickerWidth,\n [`& > ${antCls}-divider`]: {\n margin: `${unit(marginSM)} 0 ${unit(marginXS)}`,\n },\n }, [`${componentCls}-panel`]: Object.assign({}, genPickerStyle(token)) }, genSliderStyle(token)), genColorBlockStyle(token, colorPickerPreviewSize)), genInputStyle(token)), genPresetsStyle(token)), genClearStyle(token, colorPickerPresetColorSize, {\n marginInlineStart: 'auto',\n })), { \n // Operation bar\n [`${componentCls}-operation`]: {\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: marginXS,\n } }), '&-trigger': Object.assign(Object.assign(Object.assign(Object.assign({ minWidth: controlHeight, minHeight: controlHeight, borderRadius, border: `${unit(lineWidth)} solid ${colorBorder}`, cursor: 'pointer', display: 'inline-flex', alignItems: 'flex-start', justifyContent: 'center', transition: `all ${motionDurationMid}`, background: colorBgElevated, padding: token.calc(paddingXXS).sub(lineWidth).equal(), [`${componentCls}-trigger-text`]: {\n marginInlineStart: marginXS,\n marginInlineEnd: token\n .calc(marginXS)\n .sub(token.calc(paddingXXS).sub(lineWidth))\n .equal(),\n fontSize,\n color: colorText,\n alignSelf: 'center',\n '&-cell': {\n '&:not(:last-child):after': {\n content: '\", \"',\n },\n '&-inactive': {\n color: colorTextDisabled,\n },\n },\n }, '&:hover': {\n borderColor: colorPrimaryHover,\n }, [`&${componentCls}-trigger-active`]: Object.assign({}, genActiveStyle(token, colorPrimary, controlOutline)), '&-disabled': {\n color: colorTextDisabled,\n background: colorBgContainerDisabled,\n cursor: 'not-allowed',\n '&:hover': {\n borderColor: colorBgTextActive,\n },\n [`${componentCls}-trigger-text`]: {\n color: colorTextDisabled,\n },\n } }, genClearStyle(token, controlHeightSM)), genColorBlockStyle(token, controlHeightSM)), genStatusStyle(token)), genSizeStyle(token)) }, genRtlStyle(token)),\n },\n genCompactItemStyle(token, {\n focusElCls: `${componentCls}-trigger-active`,\n }),\n ];\n};\nexport default genStyleHooks('ColorPicker', (token) => {\n const { colorTextQuaternary, marginSM } = token;\n const colorPickerSliderHeight = 8;\n const colorPickerToken = mergeToken(token, {\n colorPickerWidth: 234,\n colorPickerHandlerSize: 16,\n colorPickerHandlerSizeSM: 12,\n colorPickerAlphaInputWidth: 44,\n colorPickerInputNumberHandleWidth: 16,\n colorPickerPresetColorSize: 24,\n colorPickerInsetShadow: `inset 0 0 1px 0 ${colorTextQuaternary}`,\n colorPickerSliderHeight,\n colorPickerPreviewSize: token\n .calc(colorPickerSliderHeight)\n .mul(2)\n .add(marginSM)\n .equal(),\n });\n return genColorPickerStyle(colorPickerToken);\n});\n","import { unit } from '@ant-design/cssinjs';\nimport { getStyle as getCheckboxStyle } from '../../checkbox/style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { genTreeStyle, initComponentToken } from '../../tree/style';\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, treePrefixCls, colorBgElevated } = token;\n const treeCls = `.${treePrefixCls}`;\n return [\n // ======================================================\n // == Dropdown ==\n // ======================================================\n {\n [`${componentCls}-dropdown`]: [\n {\n padding: `${unit(token.paddingXS)} ${unit(token.calc(token.paddingXS).div(2).equal())}`,\n },\n // ====================== Tree ======================\n genTreeStyle(treePrefixCls, mergeToken(token, {\n colorBgContainer: colorBgElevated,\n }), false),\n {\n [treeCls]: {\n borderRadius: 0,\n [`${treeCls}-list-holder-inner`]: {\n alignItems: 'stretch',\n [`${treeCls}-treenode`]: {\n [`${treeCls}-node-content-wrapper`]: {\n flex: 'auto',\n },\n },\n },\n },\n },\n // ==================== Checkbox ====================\n getCheckboxStyle(`${treePrefixCls}-checkbox`, token),\n // ====================== RTL =======================\n {\n '&-rtl': {\n direction: 'rtl',\n [`${treeCls}-switcher${treeCls}-switcher_close`]: {\n [`${treeCls}-switcher-icon svg`]: {\n transform: 'rotate(90deg)',\n },\n },\n },\n },\n ],\n },\n ];\n};\nexport const prepareComponentToken = initComponentToken;\n// ============================== Export ==============================\nexport default function useTreeSelectStyle(prefixCls, treePrefixCls, rootCls) {\n return genStyleHooks('TreeSelect', (token) => {\n const treeSelectToken = mergeToken(token, { treePrefixCls });\n return genBaseStyle(treeSelectToken);\n }, initComponentToken)(prefixCls, rootCls);\n}\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent, textEllipsis } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genBorderedStyle = (token) => {\n const { componentCls, labelBg } = token;\n return {\n [`&${componentCls}-bordered`]: {\n [`> ${componentCls}-view`]: {\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n '> table': {\n tableLayout: 'auto',\n },\n [`${componentCls}-row`]: {\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n '&:first-child': {\n '> th:first-child, > td:first-child': {\n borderStartStartRadius: token.borderRadiusLG,\n },\n },\n '&:last-child': {\n borderBottom: 'none',\n '> th:first-child, > td:first-child': {\n borderEndStartRadius: token.borderRadiusLG,\n },\n },\n [`> ${componentCls}-item-label, > ${componentCls}-item-content`]: {\n padding: `${unit(token.padding)} ${unit(token.paddingLG)}`,\n borderInlineEnd: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n '&:last-child': {\n borderInlineEnd: 'none',\n },\n },\n [`> ${componentCls}-item-label`]: {\n color: token.colorTextSecondary,\n backgroundColor: labelBg,\n '&::after': {\n display: 'none',\n },\n },\n },\n },\n [`&${componentCls}-middle`]: {\n [`${componentCls}-row`]: {\n [`> ${componentCls}-item-label, > ${componentCls}-item-content`]: {\n padding: `${unit(token.paddingSM)} ${unit(token.paddingLG)}`,\n },\n },\n },\n [`&${componentCls}-small`]: {\n [`${componentCls}-row`]: {\n [`> ${componentCls}-item-label, > ${componentCls}-item-content`]: {\n padding: `${unit(token.paddingXS)} ${unit(token.padding)}`,\n },\n },\n },\n },\n };\n};\nconst genDescriptionStyles = (token) => {\n const { componentCls, extraColor, itemPaddingBottom, itemPaddingEnd, colonMarginRight, colonMarginLeft, titleMarginBottom, } = token;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genBorderedStyle(token)), { '&-rtl': {\n direction: 'rtl',\n }, [`${componentCls}-header`]: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: titleMarginBottom,\n }, [`${componentCls}-title`]: Object.assign(Object.assign({}, textEllipsis), { flex: 'auto', color: token.titleColor, fontWeight: token.fontWeightStrong, fontSize: token.fontSizeLG, lineHeight: token.lineHeightLG }), [`${componentCls}-extra`]: {\n marginInlineStart: 'auto',\n color: extraColor,\n fontSize: token.fontSize,\n }, [`${componentCls}-view`]: {\n width: '100%',\n borderRadius: token.borderRadiusLG,\n table: {\n width: '100%',\n tableLayout: 'fixed',\n borderCollapse: 'collapse',\n },\n }, [`${componentCls}-row`]: {\n '> th, > td': {\n paddingBottom: itemPaddingBottom,\n paddingInlineEnd: itemPaddingEnd,\n },\n '> th:last-child, > td:last-child': {\n paddingInlineEnd: 0,\n },\n '&:last-child': {\n borderBottom: 'none',\n '> th, > td': {\n paddingBottom: 0,\n },\n },\n }, [`${componentCls}-item-label`]: {\n color: token.labelColor,\n fontWeight: 'normal',\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n textAlign: 'start',\n '&::after': {\n content: '\":\"',\n position: 'relative',\n top: -0.5, // magic for position\n marginInline: `${unit(colonMarginLeft)} ${unit(colonMarginRight)}`,\n },\n [`&${componentCls}-item-no-colon::after`]: {\n content: '\"\"',\n },\n }, [`${componentCls}-item-no-label`]: {\n '&::after': {\n margin: 0,\n content: '\"\"',\n },\n }, [`${componentCls}-item-content`]: {\n display: 'table-cell',\n flex: 1,\n color: token.contentColor,\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }, [`${componentCls}-item`]: {\n paddingBottom: 0,\n verticalAlign: 'top',\n '&-container': {\n display: 'flex',\n [`${componentCls}-item-label`]: {\n display: 'inline-flex',\n alignItems: 'baseline',\n },\n [`${componentCls}-item-content`]: {\n display: 'inline-flex',\n alignItems: 'baseline',\n minWidth: '1em',\n },\n },\n }, '&-middle': {\n [`${componentCls}-row`]: {\n '> th, > td': {\n paddingBottom: token.paddingSM,\n },\n },\n }, '&-small': {\n [`${componentCls}-row`]: {\n '> th, > td': {\n paddingBottom: token.paddingXS,\n },\n },\n } }),\n };\n};\nexport const prepareComponentToken = (token) => ({\n labelBg: token.colorFillAlter,\n labelColor: token.colorTextTertiary,\n titleColor: token.colorText,\n titleMarginBottom: token.fontSizeSM * token.lineHeightSM,\n itemPaddingBottom: token.padding,\n itemPaddingEnd: token.padding,\n colonMarginRight: token.marginXS,\n colonMarginLeft: token.marginXXS / 2,\n contentColor: token.colorText,\n extraColor: token.colorText,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Descriptions', (token) => {\n const descriptionToken = mergeToken(token, {});\n return genDescriptionStyles(descriptionToken);\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genQRCodeStyle = (token) => {\n const { componentCls, lineWidth, lineType, colorSplit } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { display: 'flex', justifyContent: 'center', alignItems: 'center', padding: token.paddingSM, backgroundColor: token.colorWhite, borderRadius: token.borderRadiusLG, border: `${unit(lineWidth)} ${lineType} ${colorSplit}`, position: 'relative', overflow: 'hidden', [`& > ${componentCls}-mask`]: {\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineStart: 0,\n zIndex: 10,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n color: token.colorText,\n lineHeight: token.lineHeight,\n background: token.QRCodeMaskBackgroundColor,\n textAlign: 'center',\n [`& > ${componentCls}-expired, & > ${componentCls}-scanned`]: {\n color: token.QRCodeTextColor,\n },\n }, '> canvas': {\n alignSelf: 'stretch',\n flex: 'auto',\n minWidth: 0,\n }, '&-icon': {\n marginBlockEnd: token.marginXS,\n fontSize: token.controlHeight,\n } }),\n [`${componentCls}-borderless`]: {\n borderColor: 'transparent',\n padding: 0,\n borderRadius: 0,\n },\n };\n};\nexport const prepareComponentToken = (token) => ({\n QRCodeMaskBackgroundColor: new FastColor(token.colorBgContainer).setA(0.96).toRgbString(),\n});\nexport default genStyleHooks('QRCode', (token) => {\n const mergedToken = mergeToken(token, {\n QRCodeTextColor: token.colorText,\n });\n return genQRCodeStyle(mergedToken);\n}, prepareComponentToken);\n","!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(n=\"undefined\"!=typeof globalThis?globalThis:n||self).dayjs_plugin_localeData=e()}(this,(function(){\"use strict\";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format(\"MMMM\"):u(n,\"months\")},monthsShort:function(e){return e?e.format(\"MMM\"):u(n,\"monthsShort\",\"months\",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format(\"dddd\"):u(n,\"weekdays\")},weekdaysMin:function(e){return e?e.format(\"dd\"):u(n,\"weekdaysMin\",\"weekdays\",2)},weekdaysShort:function(e){return e?e.format(\"ddd\"):u(n,\"weekdaysShort\",\"weekdays\",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),\"months\")},t.monthsShort=function(){return u(i(),\"monthsShort\",\"months\",3)},t.weekdays=function(n){return u(i(),\"weekdays\",null,null,n)},t.weekdaysShort=function(n){return u(i(),\"weekdaysShort\",\"weekdays\",3,n)},t.weekdaysMin=function(n){return u(i(),\"weekdaysMin\",\"weekdays\",2,n)}}}));","import { createTheme } from '@ant-design/cssinjs';\nimport defaultDerivative from './index';\nconst defaultTheme = createTheme(defaultDerivative);\nexport default defaultTheme;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar attributes = \"accept acceptCharset accessKey action allowFullScreen allowTransparency\\n alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\\n charSet checked classID className colSpan cols content contentEditable contextMenu\\n controls coords crossOrigin data dateTime default defer dir disabled download draggable\\n encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\\n headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\\n is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\\n mediaGroup method min minLength multiple muted name noValidate nonce open\\n optimum pattern placeholder poster preload radioGroup readOnly rel required\\n reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\\n shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\\n summary tabIndex target title type useMap value width wmode wrap\";\nvar eventsName = \"onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\\n onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\\n onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\\n onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\\n onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\\n onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\\n onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError\";\nvar propList = \"\".concat(attributes, \" \").concat(eventsName).split(/[\\s\\n]+/);\n\n/* eslint-enable max-len */\nvar ariaPrefix = 'aria-';\nvar dataPrefix = 'data-';\nfunction match(key, prefix) {\n return key.indexOf(prefix) === 0;\n}\n/**\n * Picker props from exist props with filter\n * @param props Passed props\n * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config\n */\nexport default function pickAttrs(props) {\n var ariaOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var mergedConfig;\n if (ariaOnly === false) {\n mergedConfig = {\n aria: true,\n data: true,\n attr: true\n };\n } else if (ariaOnly === true) {\n mergedConfig = {\n aria: true\n };\n } else {\n mergedConfig = _objectSpread({}, ariaOnly);\n }\n var attrs = {};\n Object.keys(props).forEach(function (key) {\n if (\n // Aria\n mergedConfig.aria && (key === 'role' || match(key, ariaPrefix)) ||\n // Data\n mergedConfig.data && match(key, dataPrefix) ||\n // Attr\n mergedConfig.attr && propList.includes(key)) {\n attrs[key] = props[key];\n }\n });\n return attrs;\n}","const genFormValidateMotionStyle = (token) => {\n const { componentCls } = token;\n const helpCls = `${componentCls}-show-help`;\n const helpItemCls = `${componentCls}-show-help-item`;\n return {\n [helpCls]: {\n // Explain holder\n transition: `opacity ${token.motionDurationFast} ${token.motionEaseInOut}`,\n '&-appear, &-enter': {\n opacity: 0,\n '&-active': {\n opacity: 1,\n },\n },\n '&-leave': {\n opacity: 1,\n '&-active': {\n opacity: 0,\n },\n },\n // Explain\n [helpItemCls]: {\n overflow: 'hidden',\n transition: `height ${token.motionDurationFast} ${token.motionEaseInOut},\n opacity ${token.motionDurationFast} ${token.motionEaseInOut},\n transform ${token.motionDurationFast} ${token.motionEaseInOut} !important`,\n [`&${helpItemCls}-appear, &${helpItemCls}-enter`]: {\n transform: `translateY(-5px)`,\n opacity: 0,\n '&-active': {\n transform: 'translateY(0)',\n opacity: 1,\n },\n },\n [`&${helpItemCls}-leave-active`]: {\n transform: `translateY(-5px)`,\n },\n },\n },\n };\n};\nexport default genFormValidateMotionStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genCollapseMotion, zoomIn } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genFormValidateMotionStyle from './explain';\nconst resetForm = (token) => ({\n legend: {\n display: 'block',\n width: '100%',\n marginBottom: token.marginLG,\n padding: 0,\n color: token.colorTextDescription,\n fontSize: token.fontSizeLG,\n lineHeight: 'inherit',\n border: 0,\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n },\n 'input[type=\"search\"]': {\n boxSizing: 'border-box',\n },\n // Position radios and checkboxes better\n 'input[type=\"radio\"], input[type=\"checkbox\"]': {\n lineHeight: 'normal',\n },\n 'input[type=\"file\"]': {\n display: 'block',\n },\n // Make range inputs behave like textual form controls\n 'input[type=\"range\"]': {\n display: 'block',\n width: '100%',\n },\n // Make multiple select elements height not fixed\n 'select[multiple], select[size]': {\n height: 'auto',\n },\n // Focus for file, radio, and checkbox\n [`input[type='file']:focus,\n input[type='radio']:focus,\n input[type='checkbox']:focus`]: {\n outline: 0,\n boxShadow: `0 0 0 ${unit(token.controlOutlineWidth)} ${token.controlOutline}`,\n },\n // Adjust output element\n output: {\n display: 'block',\n paddingTop: 15,\n color: token.colorText,\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n },\n});\nconst genFormSize = (token, height) => {\n const { formItemCls } = token;\n return {\n [formItemCls]: {\n [`${formItemCls}-label > label`]: {\n height,\n },\n [`${formItemCls}-control-input`]: {\n minHeight: height,\n },\n },\n };\n};\nconst genFormStyle = (token) => {\n const { componentCls } = token;\n return {\n [token.componentCls]: Object.assign(Object.assign(Object.assign({}, resetComponent(token)), resetForm(token)), { [`${componentCls}-text`]: {\n display: 'inline-block',\n paddingInlineEnd: token.paddingSM,\n }, \n // ================================================================\n // = Size =\n // ================================================================\n '&-small': Object.assign({}, genFormSize(token, token.controlHeightSM)), '&-large': Object.assign({}, genFormSize(token, token.controlHeightLG)) }),\n };\n};\nconst genFormItemStyle = (token) => {\n const { formItemCls, iconCls, rootPrefixCls, antCls, labelRequiredMarkColor, labelColor, labelFontSize, labelHeight, labelColonMarginInlineStart, labelColonMarginInlineEnd, itemMarginBottom, } = token;\n return {\n [formItemCls]: Object.assign(Object.assign({}, resetComponent(token)), { marginBottom: itemMarginBottom, verticalAlign: 'top', '&-with-help': {\n transition: 'none',\n }, [`&-hidden,\n &-hidden${antCls}-row`]: {\n // https://github.com/ant-design/ant-design/issues/26141\n display: 'none',\n }, '&-has-warning': {\n [`${formItemCls}-split`]: {\n color: token.colorError,\n },\n }, '&-has-error': {\n [`${formItemCls}-split`]: {\n color: token.colorWarning,\n },\n }, \n // ==============================================================\n // = Label =\n // ==============================================================\n [`${formItemCls}-label`]: {\n flexGrow: 0,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textAlign: 'end',\n verticalAlign: 'middle',\n '&-left': {\n textAlign: 'start',\n },\n '&-wrap': {\n overflow: 'unset',\n lineHeight: token.lineHeight,\n whiteSpace: 'unset',\n '> label': {\n verticalAlign: 'middle',\n textWrap: 'balance',\n },\n },\n '> label': {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n maxWidth: '100%',\n height: labelHeight,\n color: labelColor,\n fontSize: labelFontSize,\n [`> ${iconCls}`]: {\n fontSize: token.fontSize,\n verticalAlign: 'top',\n },\n [`&${formItemCls}-required`]: {\n '&::before': {\n display: 'inline-block',\n marginInlineEnd: token.marginXXS,\n color: labelRequiredMarkColor,\n fontSize: token.fontSize,\n fontFamily: 'SimSun, sans-serif',\n lineHeight: 1,\n content: '\"*\"',\n },\n [`&${formItemCls}-required-mark-hidden, &${formItemCls}-required-mark-optional`]: {\n '&::before': {\n display: 'none',\n },\n },\n },\n // Optional mark\n [`${formItemCls}-optional`]: {\n display: 'inline-block',\n marginInlineStart: token.marginXXS,\n color: token.colorTextDescription,\n [`&${formItemCls}-required-mark-hidden`]: {\n display: 'none',\n },\n },\n // Optional mark\n [`${formItemCls}-tooltip`]: {\n color: token.colorTextDescription,\n cursor: 'help',\n writingMode: 'horizontal-tb',\n marginInlineStart: token.marginXXS,\n },\n '&::after': {\n content: '\":\"',\n position: 'relative',\n marginBlock: 0,\n marginInlineStart: labelColonMarginInlineStart,\n marginInlineEnd: labelColonMarginInlineEnd,\n },\n [`&${formItemCls}-no-colon::after`]: {\n content: '\"\\\\a0\"',\n },\n },\n }, \n // ==============================================================\n // = Input =\n // ==============================================================\n [`${formItemCls}-control`]: {\n ['--ant-display']: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n [`&:first-child:not([class^=\"'${rootPrefixCls}-col-'\"]):not([class*=\"' ${rootPrefixCls}-col-'\"])`]: {\n width: '100%',\n },\n '&-input': {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n minHeight: token.controlHeight,\n '&-content': {\n flex: 'auto',\n maxWidth: '100%',\n // Fix https://github.com/ant-design/ant-design/issues/54042\n // Remove impact of whitespaces\n [`&:has(> ${antCls}-switch:only-child, > ${antCls}-rate:only-child)`]: {\n display: 'flex',\n alignItems: 'center',\n },\n },\n },\n }, \n // ==============================================================\n // = Explain =\n // ==============================================================\n [formItemCls]: {\n '&-additional': {\n display: 'flex',\n flexDirection: 'column',\n },\n '&-explain, &-extra': {\n clear: 'both',\n color: token.colorTextDescription,\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n },\n '&-explain-connected': {\n width: '100%',\n },\n '&-extra': {\n minHeight: token.controlHeightSM,\n transition: `color ${token.motionDurationMid} ${token.motionEaseOut}`, // sync input color transition\n },\n '&-explain': {\n '&-error': {\n color: token.colorError,\n },\n '&-warning': {\n color: token.colorWarning,\n },\n },\n }, [`&-with-help ${formItemCls}-explain`]: {\n height: 'auto',\n opacity: 1,\n }, \n // ==============================================================\n // = Feedback Icon =\n // ==============================================================\n [`${formItemCls}-feedback-icon`]: {\n fontSize: token.fontSize,\n textAlign: 'center',\n visibility: 'visible',\n animationName: zoomIn,\n animationDuration: token.motionDurationMid,\n animationTimingFunction: token.motionEaseOutBack,\n pointerEvents: 'none',\n '&-success': {\n color: token.colorSuccess,\n },\n '&-error': {\n color: token.colorError,\n },\n '&-warning': {\n color: token.colorWarning,\n },\n '&-validating': {\n color: token.colorPrimary,\n },\n } }),\n };\n};\nconst makeVerticalLayoutLabel = (token) => ({\n padding: token.verticalLabelPadding,\n margin: token.verticalLabelMargin,\n whiteSpace: 'initial',\n textAlign: 'start',\n '> label': {\n margin: 0,\n '&::after': {\n // https://github.com/ant-design/ant-design/issues/43538\n visibility: 'hidden',\n },\n },\n});\nconst genHorizontalStyle = (token) => {\n const { antCls, formItemCls } = token;\n return {\n [`${formItemCls}-horizontal`]: {\n [`${formItemCls}-label`]: {\n flexGrow: 0,\n },\n [`${formItemCls}-control`]: {\n flex: '1 1 0',\n // https://github.com/ant-design/ant-design/issues/32777\n // https://github.com/ant-design/ant-design/issues/33773\n minWidth: 0,\n },\n // Do not change this to `ant-col-24`! `-24` match all the responsive rules\n // https://github.com/ant-design/ant-design/issues/32980\n // https://github.com/ant-design/ant-design/issues/34903\n // https://github.com/ant-design/ant-design/issues/44538\n [`${formItemCls}-label[class$='-24'], ${formItemCls}-label[class*='-24 ']`]: {\n [`& + ${formItemCls}-control`]: {\n minWidth: 'unset',\n },\n },\n [`${antCls}-col-24${formItemCls}-label,\n ${antCls}-col-xl-24${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n },\n };\n};\nconst genInlineStyle = (token) => {\n const { componentCls, formItemCls, inlineItemMarginBottom } = token;\n return {\n [`${componentCls}-inline`]: {\n display: 'flex',\n flexWrap: 'wrap',\n [`${formItemCls}-inline`]: {\n flex: 'none',\n marginInlineEnd: token.margin,\n marginBottom: inlineItemMarginBottom,\n '&-row': {\n flexWrap: 'nowrap',\n },\n [`> ${formItemCls}-label,\n > ${formItemCls}-control`]: {\n display: 'inline-block',\n verticalAlign: 'top',\n },\n [`> ${formItemCls}-label`]: {\n flex: 'none',\n },\n [`${componentCls}-text`]: {\n display: 'inline-block',\n },\n [`${formItemCls}-has-feedback`]: {\n display: 'inline-block',\n },\n },\n },\n };\n};\nconst makeVerticalLayout = (token) => {\n const { componentCls, formItemCls, rootPrefixCls } = token;\n return {\n [`${formItemCls} ${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n // ref: https://github.com/ant-design/ant-design/issues/45122\n [`${componentCls}:not(${componentCls}-inline)`]: {\n [formItemCls]: {\n flexWrap: 'wrap',\n [`${formItemCls}-label, ${formItemCls}-control`]: {\n // When developer pass `xs: { span }`,\n // It should follow the `xs` screen config\n // ref: https://github.com/ant-design/ant-design/issues/44386\n [`&:not([class*=\" ${rootPrefixCls}-col-xs\"])`]: {\n flex: '0 0 100%',\n maxWidth: '100%',\n },\n },\n },\n },\n };\n};\nconst genVerticalStyle = (token) => {\n const { componentCls, formItemCls, antCls } = token;\n return {\n [`${formItemCls}-vertical`]: {\n [`${formItemCls}-row`]: {\n flexDirection: 'column',\n },\n [`${formItemCls}-label > label`]: {\n height: 'auto',\n },\n [`${formItemCls}-control`]: {\n width: '100%',\n },\n [`${formItemCls}-label,\n ${antCls}-col-24${formItemCls}-label,\n ${antCls}-col-xl-24${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n },\n [`@media (max-width: ${unit(token.screenXSMax)})`]: [\n makeVerticalLayout(token),\n {\n [componentCls]: {\n [`${formItemCls}:not(${formItemCls}-horizontal)`]: {\n [`${antCls}-col-xs-24${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n },\n },\n },\n ],\n [`@media (max-width: ${unit(token.screenSMMax)})`]: {\n [componentCls]: {\n [`${formItemCls}:not(${formItemCls}-horizontal)`]: {\n [`${antCls}-col-sm-24${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n },\n },\n },\n [`@media (max-width: ${unit(token.screenMDMax)})`]: {\n [componentCls]: {\n [`${formItemCls}:not(${formItemCls}-horizontal)`]: {\n [`${antCls}-col-md-24${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n },\n },\n },\n [`@media (max-width: ${unit(token.screenLGMax)})`]: {\n [componentCls]: {\n [`${formItemCls}:not(${formItemCls}-horizontal)`]: {\n [`${antCls}-col-lg-24${formItemCls}-label`]: makeVerticalLayoutLabel(token),\n },\n },\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => ({\n labelRequiredMarkColor: token.colorError,\n labelColor: token.colorTextHeading,\n labelFontSize: token.fontSize,\n labelHeight: token.controlHeight,\n labelColonMarginInlineStart: token.marginXXS / 2,\n labelColonMarginInlineEnd: token.marginXS,\n itemMarginBottom: token.marginLG,\n verticalLabelPadding: `0 0 ${token.paddingXS}px`,\n verticalLabelMargin: 0,\n inlineItemMarginBottom: 0,\n});\nexport const prepareToken = (token, rootPrefixCls) => {\n const formToken = mergeToken(token, {\n formItemCls: `${token.componentCls}-item`,\n rootPrefixCls,\n });\n return formToken;\n};\nexport default genStyleHooks('Form', (token, { rootPrefixCls }) => {\n const formToken = prepareToken(token, rootPrefixCls);\n return [\n genFormStyle(formToken),\n genFormItemStyle(formToken),\n genFormValidateMotionStyle(formToken),\n genHorizontalStyle(formToken),\n genInlineStyle(formToken),\n genVerticalStyle(formToken),\n genCollapseMotion(formToken),\n zoomIn,\n ];\n}, prepareComponentToken, {\n // Let From style before the Grid\n // ref https://github.com/ant-design/ant-design/issues/44386\n order: -1000,\n});\n","import { unit } from '@ant-design/cssinjs';\nimport { clearFix, resetComponent } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { initComponentToken, initInputToken } from './token';\nimport { genBorderlessStyle, genFilledGroupStyle, genFilledStyle, genOutlinedGroupStyle, genOutlinedStyle, genUnderlinedStyle, } from './variants';\nexport { initComponentToken, initInputToken };\nexport const genPlaceholderStyle = (color) => ({\n // Firefox\n '&::-moz-placeholder': {\n opacity: 1,\n },\n '&::placeholder': {\n color,\n userSelect: 'none', // https://github.com/ant-design/ant-design/pull/32639\n },\n '&:placeholder-shown': {\n textOverflow: 'ellipsis',\n },\n});\nexport const genActiveStyle = (token) => ({\n borderColor: token.activeBorderColor,\n boxShadow: token.activeShadow,\n outline: 0,\n backgroundColor: token.activeBg,\n});\nconst genInputLargeStyle = (token) => {\n const { paddingBlockLG, lineHeightLG, borderRadiusLG, paddingInlineLG } = token;\n return {\n padding: `${unit(paddingBlockLG)} ${unit(paddingInlineLG)}`,\n fontSize: token.inputFontSizeLG,\n lineHeight: lineHeightLG,\n borderRadius: borderRadiusLG,\n };\n};\nexport const genInputSmallStyle = (token) => ({\n padding: `${unit(token.paddingBlockSM)} ${unit(token.paddingInlineSM)}`,\n fontSize: token.inputFontSizeSM,\n borderRadius: token.borderRadiusSM,\n});\nexport const genBasicInputStyle = (token) => (Object.assign(Object.assign({ position: 'relative', display: 'inline-block', width: '100%', minWidth: 0, padding: `${unit(token.paddingBlock)} ${unit(token.paddingInline)}`, color: token.colorText, fontSize: token.inputFontSize, lineHeight: token.lineHeight, borderRadius: token.borderRadius, transition: `all ${token.motionDurationMid}` }, genPlaceholderStyle(token.colorTextPlaceholder)), { \n // Size\n '&-lg': Object.assign({}, genInputLargeStyle(token)), '&-sm': Object.assign({}, genInputSmallStyle(token)), \n // RTL\n '&-rtl, &-textarea-rtl': {\n direction: 'rtl',\n } }));\nexport const genInputGroupStyle = (token) => {\n const { componentCls, antCls } = token;\n return {\n position: 'relative',\n display: 'table',\n width: '100%',\n borderCollapse: 'separate',\n borderSpacing: 0,\n // Undo padding and float of grid classes\n \"&[class*='col-']\": {\n paddingInlineEnd: token.paddingXS,\n '&:last-child': {\n paddingInlineEnd: 0,\n },\n },\n // Sizing options\n [`&-lg ${componentCls}, &-lg > ${componentCls}-group-addon`]: Object.assign({}, genInputLargeStyle(token)),\n [`&-sm ${componentCls}, &-sm > ${componentCls}-group-addon`]: Object.assign({}, genInputSmallStyle(token)),\n // Fix https://github.com/ant-design/ant-design/issues/5754\n [`&-lg ${antCls}-select-single ${antCls}-select-selector`]: {\n height: token.controlHeightLG,\n },\n [`&-sm ${antCls}-select-single ${antCls}-select-selector`]: {\n height: token.controlHeightSM,\n },\n [`> ${componentCls}`]: {\n display: 'table-cell',\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0,\n },\n },\n [`${componentCls}-group`]: {\n '&-addon, &-wrap': {\n display: 'table-cell',\n width: 1,\n whiteSpace: 'nowrap',\n verticalAlign: 'middle',\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0,\n },\n },\n '&-wrap > *': {\n display: 'block !important',\n },\n '&-addon': {\n position: 'relative',\n padding: `0 ${unit(token.paddingInline)}`,\n color: token.colorText,\n fontWeight: 'normal',\n fontSize: token.inputFontSize,\n textAlign: 'center',\n borderRadius: token.borderRadius,\n transition: `all ${token.motionDurationSlow}`,\n lineHeight: 1,\n // Reset Select's style in addon\n [`${antCls}-select`]: {\n margin: `${unit(token.calc(token.paddingBlock).add(1).mul(-1).equal())} ${unit(token.calc(token.paddingInline).mul(-1).equal())}`,\n [`&${antCls}-select-single:not(${antCls}-select-customize-input):not(${antCls}-pagination-size-changer)`]: {\n [`${antCls}-select-selector`]: {\n backgroundColor: 'inherit',\n border: `${unit(token.lineWidth)} ${token.lineType} transparent`,\n boxShadow: 'none',\n },\n },\n },\n // https://github.com/ant-design/ant-design/issues/31333\n [`${antCls}-cascader-picker`]: {\n margin: `-9px ${unit(token.calc(token.paddingInline).mul(-1).equal())}`,\n backgroundColor: 'transparent',\n [`${antCls}-cascader-input`]: {\n textAlign: 'start',\n border: 0,\n boxShadow: 'none',\n },\n },\n },\n },\n [componentCls]: {\n width: '100%',\n marginBottom: 0,\n textAlign: 'inherit',\n '&:focus': {\n zIndex: 1, // Fix https://gw.alipayobjects.com/zos/rmsportal/DHNpoqfMXSfrSnlZvhsJ.png\n borderInlineEndWidth: 1,\n },\n '&:hover': {\n zIndex: 1,\n borderInlineEndWidth: 1,\n [`${componentCls}-search-with-button &`]: {\n zIndex: 0,\n },\n },\n },\n // Reset rounded corners\n [`> ${componentCls}:first-child, ${componentCls}-group-addon:first-child`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n // Reset Select's style in addon\n [`${antCls}-select ${antCls}-select-selector`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n },\n [`> ${componentCls}-affix-wrapper`]: {\n [`&:not(:first-child) ${componentCls}`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n [`&:not(:last-child) ${componentCls}`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n },\n [`> ${componentCls}:last-child, ${componentCls}-group-addon:last-child`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n // Reset Select's style in addon\n [`${antCls}-select ${antCls}-select-selector`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n },\n [`${componentCls}-affix-wrapper`]: {\n '&:not(:last-child)': {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n [`${componentCls}-search &`]: {\n borderStartStartRadius: token.borderRadius,\n borderEndStartRadius: token.borderRadius,\n },\n },\n [`&:not(:first-child), ${componentCls}-search &:not(:first-child)`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n },\n [`&${componentCls}-group-compact`]: Object.assign(Object.assign({ display: 'block' }, clearFix()), { [`${componentCls}-group-addon, ${componentCls}-group-wrap, > ${componentCls}`]: {\n '&:not(:first-child):not(:last-child)': {\n borderInlineEndWidth: token.lineWidth,\n '&:hover, &:focus': {\n zIndex: 1,\n },\n },\n }, '& > *': {\n display: 'inline-flex',\n float: 'none',\n verticalAlign: 'top', // https://github.com/ant-design/ant-design-pro/issues/139\n borderRadius: 0,\n }, [`\n & > ${componentCls}-affix-wrapper,\n & > ${componentCls}-number-affix-wrapper,\n & > ${antCls}-picker-range\n `]: {\n display: 'inline-flex',\n }, '& > *:not(:last-child)': {\n marginInlineEnd: token.calc(token.lineWidth).mul(-1).equal(),\n borderInlineEndWidth: token.lineWidth,\n }, \n // Undo float for .ant-input-group .ant-input\n [componentCls]: {\n float: 'none',\n }, \n // reset border for Select, DatePicker, AutoComplete, Cascader, Mention, TimePicker, Input\n [`& > ${antCls}-select > ${antCls}-select-selector,\n & > ${antCls}-select-auto-complete ${componentCls},\n & > ${antCls}-cascader-picker ${componentCls},\n & > ${componentCls}-group-wrapper ${componentCls}`]: {\n borderInlineEndWidth: token.lineWidth,\n borderRadius: 0,\n '&:hover, &:focus': {\n zIndex: 1,\n },\n }, [`& > ${antCls}-select-focused`]: {\n zIndex: 1,\n }, \n // update z-index for arrow icon\n [`& > ${antCls}-select > ${antCls}-select-arrow`]: {\n zIndex: 1, // https://github.com/ant-design/ant-design/issues/20371\n }, [`& > *:first-child,\n & > ${antCls}-select:first-child > ${antCls}-select-selector,\n & > ${antCls}-select-auto-complete:first-child ${componentCls},\n & > ${antCls}-cascader-picker:first-child ${componentCls}`]: {\n borderStartStartRadius: token.borderRadius,\n borderEndStartRadius: token.borderRadius,\n }, [`& > *:last-child,\n & > ${antCls}-select:last-child > ${antCls}-select-selector,\n & > ${antCls}-cascader-picker:last-child ${componentCls},\n & > ${antCls}-cascader-picker-focused:last-child ${componentCls}`]: {\n borderInlineEndWidth: token.lineWidth,\n borderStartEndRadius: token.borderRadius,\n borderEndEndRadius: token.borderRadius,\n }, \n // https://github.com/ant-design/ant-design/issues/12493\n [`& > ${antCls}-select-auto-complete ${componentCls}`]: {\n verticalAlign: 'top',\n }, [`${componentCls}-group-wrapper + ${componentCls}-group-wrapper`]: {\n marginInlineStart: token.calc(token.lineWidth).mul(-1).equal(),\n [`${componentCls}-affix-wrapper`]: {\n borderRadius: 0,\n },\n }, [`${componentCls}-group-wrapper:not(:last-child)`]: {\n [`&${componentCls}-search > ${componentCls}-group`]: {\n [`& > ${componentCls}-group-addon > ${componentCls}-search-button`]: {\n borderRadius: 0,\n },\n [`& > ${componentCls}`]: {\n borderStartStartRadius: token.borderRadius,\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n borderEndStartRadius: token.borderRadius,\n },\n },\n } }),\n };\n};\nexport const genInputStyle = (token) => {\n const { componentCls, controlHeightSM, lineWidth, calc } = token;\n const FIXED_CHROME_COLOR_HEIGHT = 16;\n const colorSmallPadding = calc(controlHeightSM)\n .sub(calc(lineWidth).mul(2))\n .sub(FIXED_CHROME_COLOR_HEIGHT)\n .div(2)\n .equal();\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genBasicInputStyle(token)), genOutlinedStyle(token)), genFilledStyle(token)), genBorderlessStyle(token)), genUnderlinedStyle(token)), { '&[type=\"color\"]': {\n height: token.controlHeight,\n [`&${componentCls}-lg`]: {\n height: token.controlHeightLG,\n },\n [`&${componentCls}-sm`]: {\n height: controlHeightSM,\n paddingTop: colorSmallPadding,\n paddingBottom: colorSmallPadding,\n },\n }, '&[type=\"search\"]::-webkit-search-cancel-button, &[type=\"search\"]::-webkit-search-decoration': {\n appearance: 'none',\n } }),\n };\n};\nconst genAllowClearStyle = (token) => {\n const { componentCls } = token;\n return {\n // ========================= Input =========================\n [`${componentCls}-clear-icon`]: {\n margin: 0,\n padding: 0,\n lineHeight: 0,\n color: token.colorTextQuaternary,\n fontSize: token.fontSizeIcon,\n verticalAlign: -1,\n // https://github.com/ant-design/ant-design/pull/18151\n // https://codesandbox.io/s/wizardly-sun-u10br\n cursor: 'pointer',\n transition: `color ${token.motionDurationSlow}`,\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n '&:hover': {\n color: token.colorIcon,\n },\n '&:active': {\n color: token.colorText,\n },\n '&-hidden': {\n visibility: 'hidden',\n },\n '&-has-suffix': {\n margin: `0 ${unit(token.inputAffixPadding)}`,\n },\n },\n };\n};\nexport const genAffixStyle = (token) => {\n const { componentCls, inputAffixPadding, colorTextDescription, motionDurationSlow, colorIcon, colorIconHover, iconCls, } = token;\n const affixCls = `${componentCls}-affix-wrapper`;\n const affixClsDisabled = `${componentCls}-affix-wrapper-disabled`;\n return {\n [affixCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, genBasicInputStyle(token)), { display: 'inline-flex', [`&:not(${componentCls}-disabled):hover`]: {\n zIndex: 1,\n [`${componentCls}-search-with-button &`]: {\n zIndex: 0,\n },\n }, '&-focused, &:focus': {\n zIndex: 1,\n }, [`> input${componentCls}`]: {\n padding: 0,\n }, [`> input${componentCls}, > textarea${componentCls}`]: {\n fontSize: 'inherit',\n border: 'none',\n borderRadius: 0,\n outline: 'none',\n background: 'transparent',\n color: 'inherit',\n '&::-ms-reveal': {\n display: 'none',\n },\n '&:focus': {\n boxShadow: 'none !important',\n },\n }, '&::before': {\n display: 'inline-block',\n width: 0,\n visibility: 'hidden',\n content: '\"\\\\a0\"',\n }, [componentCls]: {\n '&-prefix, &-suffix': {\n display: 'flex',\n flex: 'none',\n alignItems: 'center',\n '> *:not(:last-child)': {\n marginInlineEnd: token.paddingXS,\n },\n },\n '&-show-count-suffix': {\n color: colorTextDescription,\n direction: 'ltr',\n },\n '&-show-count-has-suffix': {\n marginInlineEnd: token.paddingXXS,\n },\n '&-prefix': {\n marginInlineEnd: inputAffixPadding,\n },\n '&-suffix': {\n marginInlineStart: inputAffixPadding,\n },\n } }), genAllowClearStyle(token)), { \n // password\n [`${iconCls}${componentCls}-password-icon`]: {\n color: colorIcon,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n '&:hover': {\n color: colorIconHover,\n },\n } }),\n // 覆盖 affix-wrapper borderRadius!\n [`${componentCls}-underlined`]: {\n borderRadius: 0,\n },\n [affixClsDisabled]: {\n // password disabled\n [`${iconCls}${componentCls}-password-icon`]: {\n color: colorIcon,\n cursor: 'not-allowed',\n '&:hover': {\n color: colorIcon,\n },\n },\n },\n };\n};\nconst genGroupStyle = (token) => {\n const { componentCls, borderRadiusLG, borderRadiusSM } = token;\n return {\n [`${componentCls}-group`]: Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genInputGroupStyle(token)), { '&-rtl': {\n direction: 'rtl',\n }, '&-wrapper': Object.assign(Object.assign(Object.assign({ display: 'inline-block', width: '100%', textAlign: 'start', verticalAlign: 'top', '&-rtl': {\n direction: 'rtl',\n }, \n // Size\n '&-lg': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusLG,\n fontSize: token.inputFontSizeLG,\n },\n }, '&-sm': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusSM,\n },\n } }, genOutlinedGroupStyle(token)), genFilledGroupStyle(token)), { \n // '&-disabled': {\n // [`${componentCls}-group-addon`]: {\n // ...genDisabledStyle(token),\n // },\n // },\n // Fix the issue of using icons in Space Compact mode\n // https://github.com/ant-design/ant-design/issues/42122\n [`&:not(${componentCls}-compact-first-item):not(${componentCls}-compact-last-item)${componentCls}-compact-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderRadius: 0,\n },\n }, [`&:not(${componentCls}-compact-last-item)${componentCls}-compact-first-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n }, [`&:not(${componentCls}-compact-first-item)${componentCls}-compact-last-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n }, \n // Fix the issue of input use show-count param in space compact mode\n // https://github.com/ant-design/ant-design/issues/46872\n [`&:not(${componentCls}-compact-last-item)${componentCls}-compact-item`]: {\n [`${componentCls}-affix-wrapper`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n }, \n // Fix the issue of input use `addonAfter` param in space compact mode\n // https://github.com/ant-design/ant-design/issues/52483\n [`&:not(${componentCls}-compact-first-item)${componentCls}-compact-item`]: {\n [`${componentCls}-affix-wrapper`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n } }) }),\n };\n};\nconst genSearchInputStyle = (token) => {\n const { componentCls, antCls } = token;\n const searchPrefixCls = `${componentCls}-search`;\n return {\n [searchPrefixCls]: {\n [componentCls]: {\n '&:hover, &:focus': {\n [`+ ${componentCls}-group-addon ${searchPrefixCls}-button:not(${antCls}-btn-color-primary):not(${antCls}-btn-variant-text)`]: {\n borderInlineStartColor: token.colorPrimaryHover,\n },\n },\n },\n [`${componentCls}-affix-wrapper`]: {\n height: token.controlHeight,\n borderRadius: 0,\n },\n // fix slight height diff in Firefox:\n // https://ant.design/components/auto-complete-cn/#auto-complete-demo-certain-category\n [`${componentCls}-lg`]: {\n lineHeight: token.calc(token.lineHeightLG).sub(0.0002).equal(),\n },\n [`> ${componentCls}-group`]: {\n [`> ${componentCls}-group-addon:last-child`]: {\n insetInlineStart: -1,\n padding: 0,\n border: 0,\n [`${searchPrefixCls}-button`]: {\n // Fix https://github.com/ant-design/ant-design/issues/47150\n marginInlineEnd: -1,\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n boxShadow: 'none',\n },\n [`${searchPrefixCls}-button:not(${antCls}-btn-color-primary)`]: {\n color: token.colorTextDescription,\n '&:hover': {\n color: token.colorPrimaryHover,\n },\n '&:active': {\n color: token.colorPrimaryActive,\n },\n [`&${antCls}-btn-loading::before`]: {\n inset: 0,\n },\n },\n },\n },\n [`${searchPrefixCls}-button`]: {\n height: token.controlHeight,\n '&:hover, &:focus': {\n zIndex: 1,\n },\n },\n '&-large': {\n [`${componentCls}-affix-wrapper, ${searchPrefixCls}-button`]: {\n height: token.controlHeightLG,\n },\n },\n '&-small': {\n [`${componentCls}-affix-wrapper, ${searchPrefixCls}-button`]: {\n height: token.controlHeightSM,\n },\n },\n '&-rtl': {\n direction: 'rtl',\n },\n // ===================== Compact Item Customized Styles =====================\n [`&${componentCls}-compact-item`]: {\n [`&:not(${componentCls}-compact-last-item)`]: {\n [`${componentCls}-group-addon`]: {\n [`${componentCls}-search-button`]: {\n marginInlineEnd: token.calc(token.lineWidth).mul(-1).equal(),\n borderRadius: 0,\n },\n },\n },\n [`&:not(${componentCls}-compact-first-item)`]: {\n [`${componentCls},${componentCls}-affix-wrapper`]: {\n borderRadius: 0,\n },\n },\n [`> ${componentCls}-group-addon ${componentCls}-search-button,\n > ${componentCls},\n ${componentCls}-affix-wrapper`]: {\n '&:hover, &:focus, &:active': {\n zIndex: 2,\n },\n },\n [`> ${componentCls}-affix-wrapper-focused`]: {\n zIndex: 2,\n },\n },\n },\n };\n};\n// ============================== Range ===============================\nconst genRangeStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-out-of-range`]: {\n [`&, & input, & textarea, ${componentCls}-show-count-suffix, ${componentCls}-data-count`]: {\n color: token.colorError,\n },\n },\n };\n};\n// ============================== Export ==============================\nexport const useSharedStyle = genStyleHooks(['Input', 'Shared'], (token) => {\n const inputToken = mergeToken(token, initInputToken(token));\n return [genInputStyle(inputToken), genAffixStyle(inputToken)];\n}, initComponentToken, {\n resetFont: false,\n});\nexport default genStyleHooks(['Input', 'Component'], (token) => {\n const inputToken = mergeToken(token, initInputToken(token));\n return [\n genGroupStyle(inputToken),\n genSearchInputStyle(inputToken),\n genRangeStyle(inputToken),\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(inputToken),\n ];\n}, initComponentToken, {\n resetFont: false,\n});\n","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","import { unit } from '@ant-design/cssinjs';\nconst genDraggerStyle = (token) => {\n const { componentCls, iconCls } = token;\n return {\n [`${componentCls}-wrapper`]: {\n [`${componentCls}-drag`]: {\n position: 'relative',\n width: '100%',\n height: '100%',\n textAlign: 'center',\n background: token.colorFillAlter,\n border: `${unit(token.lineWidth)} dashed ${token.colorBorder}`,\n borderRadius: token.borderRadiusLG,\n cursor: 'pointer',\n transition: `border-color ${token.motionDurationSlow}`,\n [componentCls]: {\n padding: token.padding,\n },\n [`${componentCls}-btn`]: {\n display: 'table',\n width: '100%',\n height: '100%',\n outline: 'none',\n borderRadius: token.borderRadiusLG,\n '&:focus-visible': {\n outline: `${unit(token.lineWidthFocus)} solid ${token.colorPrimaryBorder}`,\n },\n },\n [`${componentCls}-drag-container`]: {\n display: 'table-cell',\n verticalAlign: 'middle',\n },\n [`\n &:not(${componentCls}-disabled):hover,\n &-hover:not(${componentCls}-disabled)\n `]: {\n borderColor: token.colorPrimaryHover,\n },\n [`p${componentCls}-drag-icon`]: {\n marginBottom: token.margin,\n [iconCls]: {\n color: token.colorPrimary,\n fontSize: token.uploadThumbnailSize,\n },\n },\n [`p${componentCls}-text`]: {\n margin: `0 0 ${unit(token.marginXXS)}`,\n color: token.colorTextHeading,\n fontSize: token.fontSizeLG,\n },\n [`p${componentCls}-hint`]: {\n color: token.colorTextDescription,\n fontSize: token.fontSize,\n },\n // ===================== Disabled =====================\n [`&${componentCls}-disabled`]: {\n [`p${componentCls}-drag-icon ${iconCls},\n p${componentCls}-text,\n p${componentCls}-hint\n `]: {\n color: token.colorTextDisabled,\n },\n },\n },\n },\n };\n};\nexport default genDraggerStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { clearFix, textEllipsis } from '../../style';\nconst genListStyle = (token) => {\n const { componentCls, iconCls, fontSize, lineHeight, calc } = token;\n const itemCls = `${componentCls}-list-item`;\n const actionsCls = `${itemCls}-actions`;\n const actionCls = `${itemCls}-action`;\n return {\n [`${componentCls}-wrapper`]: {\n [`${componentCls}-list`]: Object.assign(Object.assign({}, clearFix()), { lineHeight: token.lineHeight, [itemCls]: {\n position: 'relative',\n height: calc(token.lineHeight).mul(fontSize).equal(),\n marginTop: token.marginXS,\n fontSize,\n display: 'flex',\n alignItems: 'center',\n transition: `background-color ${token.motionDurationSlow}`,\n borderRadius: token.borderRadiusSM,\n '&:hover': {\n backgroundColor: token.controlItemBgHover,\n },\n [`${itemCls}-name`]: Object.assign(Object.assign({}, textEllipsis), { padding: `0 ${unit(token.paddingXS)}`, lineHeight, flex: 'auto', transition: `all ${token.motionDurationSlow}` }),\n [actionsCls]: {\n whiteSpace: 'nowrap',\n [actionCls]: {\n opacity: 0,\n },\n [iconCls]: {\n color: token.actionsColor,\n transition: `all ${token.motionDurationSlow}`,\n },\n [`\n ${actionCls}:focus-visible,\n &.picture ${actionCls}\n `]: {\n opacity: 1,\n },\n },\n [`${componentCls}-icon ${iconCls}`]: {\n color: token.colorIcon,\n fontSize,\n },\n [`${itemCls}-progress`]: {\n position: 'absolute',\n bottom: token.calc(token.uploadProgressOffset).mul(-1).equal(),\n width: '100%',\n paddingInlineStart: calc(fontSize).add(token.paddingXS).equal(),\n fontSize,\n lineHeight: 0,\n pointerEvents: 'none',\n '> div': {\n margin: 0,\n },\n },\n }, [`${itemCls}:hover ${actionCls}`]: {\n opacity: 1,\n }, [`${itemCls}-error`]: {\n color: token.colorError,\n [`${itemCls}-name, ${componentCls}-icon ${iconCls}`]: {\n color: token.colorError,\n },\n [actionsCls]: {\n [`${iconCls}, ${iconCls}:hover`]: {\n color: token.colorError,\n },\n [actionCls]: {\n opacity: 1,\n },\n },\n }, [`${componentCls}-list-item-container`]: {\n transition: `opacity ${token.motionDurationSlow}, height ${token.motionDurationSlow}`,\n // For smooth removing animation\n '&::before': {\n display: 'table',\n width: 0,\n height: 0,\n content: '\"\"',\n },\n } }),\n },\n };\n};\nexport default genListStyle;\n","import { Keyframes } from '@ant-design/cssinjs';\nimport { initFadeMotion } from '../../style/motion';\n// =========================== Motion ===========================\nconst genMotionStyle = (token) => {\n const { componentCls } = token;\n const uploadAnimateInlineIn = new Keyframes('uploadAnimateInlineIn', {\n from: {\n width: 0,\n height: 0,\n padding: 0,\n opacity: 0,\n margin: token.calc(token.marginXS).div(-2).equal(),\n },\n });\n const uploadAnimateInlineOut = new Keyframes('uploadAnimateInlineOut', {\n to: {\n width: 0,\n height: 0,\n padding: 0,\n opacity: 0,\n margin: token.calc(token.marginXS).div(-2).equal(),\n },\n });\n const inlineCls = `${componentCls}-animate-inline`;\n return [\n {\n [`${componentCls}-wrapper`]: {\n [`${inlineCls}-appear, ${inlineCls}-enter, ${inlineCls}-leave`]: {\n animationDuration: token.motionDurationSlow,\n animationTimingFunction: token.motionEaseInOutCirc,\n animationFillMode: 'forwards',\n },\n [`${inlineCls}-appear, ${inlineCls}-enter`]: {\n animationName: uploadAnimateInlineIn,\n },\n [`${inlineCls}-leave`]: {\n animationName: uploadAnimateInlineOut,\n },\n },\n },\n {\n [`${componentCls}-wrapper`]: initFadeMotion(token),\n },\n uploadAnimateInlineIn,\n uploadAnimateInlineOut,\n ];\n};\nexport default genMotionStyle;\n","// =========================== Motion ===========================\nconst genRtlStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n };\n};\nexport default genRtlStyle;\n","import { resetComponent } from '../../style';\nimport { genCollapseMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genDraggerStyle from './dragger';\nimport genListStyle from './list';\nimport genMotionStyle from './motion';\nimport { genPictureCardStyle, genPictureStyle } from './picture';\nimport genRtlStyle from './rtl';\nconst genBaseStyle = (token) => {\n const { componentCls, colorTextDisabled } = token;\n return {\n [`${componentCls}-wrapper`]: Object.assign(Object.assign({}, resetComponent(token)), { [componentCls]: {\n outline: 0,\n \"input[type='file']\": {\n cursor: 'pointer',\n },\n }, [`${componentCls}-select`]: {\n display: 'inline-block',\n }, [`${componentCls}-hidden`]: {\n display: 'none',\n }, [`${componentCls}-disabled`]: {\n color: colorTextDisabled,\n cursor: 'not-allowed',\n } }),\n };\n};\nexport const prepareComponentToken = (token) => ({\n actionsColor: token.colorIcon,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Upload', (token) => {\n const { fontSizeHeading3, fontHeight, lineWidth, controlHeightLG, calc } = token;\n const uploadToken = mergeToken(token, {\n uploadThumbnailSize: calc(fontSizeHeading3).mul(2).equal(),\n uploadProgressOffset: calc(calc(fontHeight).div(2)).add(lineWidth).equal(),\n uploadPicCardSize: calc(controlHeightLG).mul(2.55).equal(),\n });\n return [\n genBaseStyle(uploadToken),\n genDraggerStyle(uploadToken),\n genPictureStyle(uploadToken),\n genPictureCardStyle(uploadToken),\n genListStyle(uploadToken),\n genMotionStyle(uploadToken),\n genRtlStyle(uploadToken),\n genCollapseMotion(uploadToken),\n ];\n}, prepareComponentToken);\n","import { blue } from '@ant-design/colors';\nimport { unit } from '@ant-design/cssinjs';\nimport { clearFix, textEllipsis } from '../../style';\nconst genPictureStyle = (token) => {\n const { componentCls, iconCls, uploadThumbnailSize, uploadProgressOffset, calc } = token;\n const listCls = `${componentCls}-list`;\n const itemCls = `${listCls}-item`;\n return {\n [`${componentCls}-wrapper`]: {\n // ${listCls} 增加优先级\n [`\n ${listCls}${listCls}-picture,\n ${listCls}${listCls}-picture-card,\n ${listCls}${listCls}-picture-circle\n `]: {\n [itemCls]: {\n position: 'relative',\n height: calc(uploadThumbnailSize)\n .add(calc(token.lineWidth).mul(2))\n .add(calc(token.paddingXS).mul(2))\n .equal(),\n padding: token.paddingXS,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n borderRadius: token.borderRadiusLG,\n '&:hover': {\n background: 'transparent',\n },\n [`${itemCls}-thumbnail`]: Object.assign(Object.assign({}, textEllipsis), { width: uploadThumbnailSize, height: uploadThumbnailSize, lineHeight: unit(calc(uploadThumbnailSize).add(token.paddingSM).equal()), textAlign: 'center', flex: 'none', [iconCls]: {\n fontSize: token.fontSizeHeading2,\n color: token.colorPrimary,\n }, img: {\n display: 'block',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n } }),\n [`${itemCls}-progress`]: {\n bottom: uploadProgressOffset,\n width: `calc(100% - ${unit(calc(token.paddingSM).mul(2).equal())})`,\n marginTop: 0,\n paddingInlineStart: calc(uploadThumbnailSize).add(token.paddingXS).equal(),\n },\n },\n [`${itemCls}-error`]: {\n borderColor: token.colorError,\n // Adjust the color of the error icon : https://github.com/ant-design/ant-design/pull/24160\n [`${itemCls}-thumbnail ${iconCls}`]: {\n [`svg path[fill='${blue[0]}']`]: {\n fill: token.colorErrorBg,\n },\n [`svg path[fill='${blue.primary}']`]: {\n fill: token.colorError,\n },\n },\n },\n [`${itemCls}-uploading`]: {\n borderStyle: 'dashed',\n [`${itemCls}-name`]: {\n marginBottom: uploadProgressOffset,\n },\n },\n },\n [`${listCls}${listCls}-picture-circle ${itemCls}`]: {\n [`&, &::before, ${itemCls}-thumbnail`]: {\n borderRadius: '50%',\n },\n },\n },\n };\n};\nconst genPictureCardStyle = (token) => {\n const { componentCls, iconCls, fontSizeLG, colorTextLightSolid, calc } = token;\n const listCls = `${componentCls}-list`;\n const itemCls = `${listCls}-item`;\n const uploadPictureCardSize = token.uploadPicCardSize;\n return {\n [`\n ${componentCls}-wrapper${componentCls}-picture-card-wrapper,\n ${componentCls}-wrapper${componentCls}-picture-circle-wrapper\n `]: Object.assign(Object.assign({}, clearFix()), { display: 'block', [`${componentCls}${componentCls}-select`]: {\n width: uploadPictureCardSize,\n height: uploadPictureCardSize,\n textAlign: 'center',\n verticalAlign: 'top',\n backgroundColor: token.colorFillAlter,\n border: `${unit(token.lineWidth)} dashed ${token.colorBorder}`,\n borderRadius: token.borderRadiusLG,\n cursor: 'pointer',\n transition: `border-color ${token.motionDurationSlow}`,\n [`> ${componentCls}`]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n textAlign: 'center',\n },\n [`&:not(${componentCls}-disabled):hover`]: {\n borderColor: token.colorPrimary,\n },\n }, \n // list\n [`${listCls}${listCls}-picture-card, ${listCls}${listCls}-picture-circle`]: {\n display: 'flex',\n flexWrap: 'wrap',\n '@supports not (gap: 1px)': {\n '& > *': {\n marginBlockEnd: token.marginXS,\n marginInlineEnd: token.marginXS,\n },\n },\n '@supports (gap: 1px)': {\n gap: token.marginXS,\n },\n [`${listCls}-item-container`]: {\n display: 'inline-block',\n width: uploadPictureCardSize,\n height: uploadPictureCardSize,\n verticalAlign: 'top',\n },\n '&::after': {\n display: 'none',\n },\n '&::before': {\n display: 'none',\n },\n [itemCls]: {\n height: '100%',\n margin: 0,\n '&::before': {\n position: 'absolute',\n zIndex: 1,\n width: `calc(100% - ${unit(calc(token.paddingXS).mul(2).equal())})`,\n height: `calc(100% - ${unit(calc(token.paddingXS).mul(2).equal())})`,\n backgroundColor: token.colorBgMask,\n opacity: 0,\n transition: `all ${token.motionDurationSlow}`,\n content: '\" \"',\n },\n },\n [`${itemCls}:hover`]: {\n [`&::before, ${itemCls}-actions`]: {\n opacity: 1,\n },\n },\n [`${itemCls}-actions`]: {\n position: 'absolute',\n insetInlineStart: 0,\n zIndex: 10,\n width: '100%',\n whiteSpace: 'nowrap',\n textAlign: 'center',\n opacity: 0,\n transition: `all ${token.motionDurationSlow}`,\n [`\n ${iconCls}-eye,\n ${iconCls}-download,\n ${iconCls}-delete\n `]: {\n zIndex: 10,\n width: fontSizeLG,\n margin: `0 ${unit(token.marginXXS)}`,\n fontSize: fontSizeLG,\n cursor: 'pointer',\n transition: `all ${token.motionDurationSlow}`,\n color: colorTextLightSolid,\n '&:hover': {\n color: colorTextLightSolid,\n },\n svg: {\n verticalAlign: 'baseline',\n },\n },\n },\n [`${itemCls}-thumbnail, ${itemCls}-thumbnail img`]: {\n position: 'static',\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n },\n [`${itemCls}-name`]: {\n display: 'none',\n textAlign: 'center',\n },\n [`${itemCls}-file + ${itemCls}-name`]: {\n position: 'absolute',\n bottom: token.margin,\n display: 'block',\n width: `calc(100% - ${unit(calc(token.paddingXS).mul(2).equal())})`,\n },\n [`${itemCls}-uploading`]: {\n [`&${itemCls}`]: {\n backgroundColor: token.colorFillAlter,\n },\n [`&::before, ${iconCls}-eye, ${iconCls}-download, ${iconCls}-delete`]: {\n display: 'none',\n },\n },\n [`${itemCls}-progress`]: {\n bottom: token.marginXL,\n width: `calc(100% - ${unit(calc(token.paddingXS).mul(2).equal())})`,\n paddingInlineStart: 0,\n },\n } }),\n [`${componentCls}-wrapper${componentCls}-picture-circle-wrapper`]: {\n [`${componentCls}${componentCls}-select`]: {\n borderRadius: '50%',\n },\n },\n };\n};\nexport { genPictureStyle, genPictureCardStyle };\n","import { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genStatisticStyle = (token) => {\n const { componentCls, marginXXS, padding, colorTextDescription, titleFontSize, colorTextHeading, contentFontSize, fontFamily, } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { [`${componentCls}-title`]: {\n marginBottom: marginXXS,\n color: colorTextDescription,\n fontSize: titleFontSize,\n }, [`${componentCls}-skeleton`]: {\n paddingTop: padding,\n }, [`${componentCls}-content`]: {\n color: colorTextHeading,\n fontSize: contentFontSize,\n fontFamily,\n [`${componentCls}-content-value`]: {\n display: 'inline-block',\n direction: 'ltr',\n },\n [`${componentCls}-content-prefix, ${componentCls}-content-suffix`]: {\n display: 'inline-block',\n },\n [`${componentCls}-content-prefix`]: {\n marginInlineEnd: marginXXS,\n },\n [`${componentCls}-content-suffix`]: {\n marginInlineStart: marginXXS,\n },\n } }),\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => {\n const { fontSizeHeading3, fontSize } = token;\n return {\n titleFontSize: fontSize,\n contentFontSize: fontSizeHeading3,\n };\n};\nexport default genStyleHooks('Statistic', (token) => {\n const statisticToken = mergeToken(token, {});\n return genStatisticStyle(statisticToken);\n}, prepareComponentToken);\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import { FastColor } from '@ant-design/fast-color';\nexport default function genColorMapToken(seed, { generateColorPalettes, generateNeutralColorPalettes }) {\n const { colorSuccess: colorSuccessBase, colorWarning: colorWarningBase, colorError: colorErrorBase, colorInfo: colorInfoBase, colorPrimary: colorPrimaryBase, colorBgBase, colorTextBase, } = seed;\n const primaryColors = generateColorPalettes(colorPrimaryBase);\n const successColors = generateColorPalettes(colorSuccessBase);\n const warningColors = generateColorPalettes(colorWarningBase);\n const errorColors = generateColorPalettes(colorErrorBase);\n const infoColors = generateColorPalettes(colorInfoBase);\n const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase);\n // Color Link\n const colorLink = seed.colorLink || seed.colorInfo;\n const linkColors = generateColorPalettes(colorLink);\n const colorErrorBgFilledHover = new FastColor(errorColors[1])\n .mix(new FastColor(errorColors[3]), 50)\n .toHexString();\n return Object.assign(Object.assign({}, neutralColors), { colorPrimaryBg: primaryColors[1], colorPrimaryBgHover: primaryColors[2], colorPrimaryBorder: primaryColors[3], colorPrimaryBorderHover: primaryColors[4], colorPrimaryHover: primaryColors[5], colorPrimary: primaryColors[6], colorPrimaryActive: primaryColors[7], colorPrimaryTextHover: primaryColors[8], colorPrimaryText: primaryColors[9], colorPrimaryTextActive: primaryColors[10], colorSuccessBg: successColors[1], colorSuccessBgHover: successColors[2], colorSuccessBorder: successColors[3], colorSuccessBorderHover: successColors[4], colorSuccessHover: successColors[4], colorSuccess: successColors[6], colorSuccessActive: successColors[7], colorSuccessTextHover: successColors[8], colorSuccessText: successColors[9], colorSuccessTextActive: successColors[10], colorErrorBg: errorColors[1], colorErrorBgHover: errorColors[2], colorErrorBgFilledHover, colorErrorBgActive: errorColors[3], colorErrorBorder: errorColors[3], colorErrorBorderHover: errorColors[4], colorErrorHover: errorColors[5], colorError: errorColors[6], colorErrorActive: errorColors[7], colorErrorTextHover: errorColors[8], colorErrorText: errorColors[9], colorErrorTextActive: errorColors[10], colorWarningBg: warningColors[1], colorWarningBgHover: warningColors[2], colorWarningBorder: warningColors[3], colorWarningBorderHover: warningColors[4], colorWarningHover: warningColors[4], colorWarning: warningColors[6], colorWarningActive: warningColors[7], colorWarningTextHover: warningColors[8], colorWarningText: warningColors[9], colorWarningTextActive: warningColors[10], colorInfoBg: infoColors[1], colorInfoBgHover: infoColors[2], colorInfoBorder: infoColors[3], colorInfoBorderHover: infoColors[4], colorInfoHover: infoColors[4], colorInfo: infoColors[6], colorInfoActive: infoColors[7], colorInfoTextHover: infoColors[8], colorInfoText: infoColors[9], colorInfoTextActive: infoColors[10], colorLinkHover: linkColors[4], colorLink: linkColors[6], colorLinkActive: linkColors[7], colorBgMask: new FastColor('#000').setA(0.45).toRgbString(), colorWhite: '#fff' });\n}\n","export function getLineHeight(fontSize) {\n return (fontSize + 8) / fontSize;\n}\n// https://zhuanlan.zhihu.com/p/32746810\nexport default function getFontSizes(base) {\n const fontSizes = Array.from({ length: 10 }).map((_, index) => {\n const i = index - 1;\n const baseSize = base * Math.pow(Math.E, (i / 5));\n const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize);\n // Convert to even\n return Math.floor(intSize / 2) * 2;\n });\n fontSizes[1] = base;\n return fontSizes.map((size) => ({\n size,\n lineHeight: getLineHeight(size),\n }));\n}\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useEvent from \"./useEvent\";\nimport { useLayoutUpdateEffect } from \"./useLayoutEffect\";\nimport useState from \"./useState\";\n/** We only think `undefined` is empty */\nfunction hasValue(value) {\n return value !== undefined;\n}\n\n/**\n * Similar to `useState` but will use props value if provided.\n * Note that internal use rc-util `useState` hook.\n */\nexport default function useMergedState(defaultStateValue, option) {\n var _ref = option || {},\n defaultValue = _ref.defaultValue,\n value = _ref.value,\n onChange = _ref.onChange,\n postState = _ref.postState;\n\n // ======================= Init =======================\n var _useState = useState(function () {\n if (hasValue(value)) {\n return value;\n } else if (hasValue(defaultValue)) {\n return typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n } else {\n return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue;\n }\n }),\n _useState2 = _slicedToArray(_useState, 2),\n innerValue = _useState2[0],\n setInnerValue = _useState2[1];\n var mergedValue = value !== undefined ? value : innerValue;\n var postMergedValue = postState ? postState(mergedValue) : mergedValue;\n\n // ====================== Change ======================\n var onChangeFn = useEvent(onChange);\n var _useState3 = useState([mergedValue]),\n _useState4 = _slicedToArray(_useState3, 2),\n prevValue = _useState4[0],\n setPrevValue = _useState4[1];\n useLayoutUpdateEffect(function () {\n var prev = prevValue[0];\n if (innerValue !== prev) {\n onChangeFn(innerValue, prev);\n }\n }, [prevValue]);\n\n // Sync value back to `undefined` when it from control to un-control\n useLayoutUpdateEffect(function () {\n if (!hasValue(value)) {\n setInnerValue(value);\n }\n }, [value]);\n\n // ====================== Update ======================\n var triggerChange = useEvent(function (updater, ignoreDestroy) {\n setInnerValue(updater, ignoreDestroy);\n setPrevValue([mergedValue], ignoreDestroy);\n });\n return [postMergedValue, triggerChange];\n}","import isFragment from \"../React/isFragment\";\nimport React from 'react';\nexport default function toArray(children) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var ret = [];\n React.Children.forEach(children, function (child) {\n if ((child === undefined || child === null) && !option.keepEmpty) {\n return;\n }\n if (Array.isArray(child)) {\n ret = ret.concat(toArray(child));\n } else if (isFragment(child) && child.props) {\n ret = ret.concat(toArray(child.props.children, option));\n } else {\n ret.push(child);\n }\n });\n return ret;\n}","module.exports = __WEBPACK_EXTERNAL_MODULE__2598__;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nconst round = Math.round;\n\n/**\n * Support format, alpha unit will check the % mark:\n * - rgba(102, 204, 255, .5) -> [102, 204, 255, 0.5]\n * - rgb(102 204 255 / .5) -> [102, 204, 255, 0.5]\n * - rgb(100%, 50%, 0% / 50%) -> [255, 128, 0, 0.5]\n * - hsl(270, 60, 40, .5) -> [270, 60, 40, 0.5]\n * - hsl(270deg 60% 40% / 50%) -> [270, 60, 40, 0.5]\n *\n * When `base` is provided, the percentage value will be divided by `base`.\n */\nfunction splitColorStr(str, parseNum) {\n const match = str\n // Remove str before `(`\n .replace(/^[^(]*\\((.*)/, '$1')\n // Remove str after `)`\n .replace(/\\).*/, '').match(/\\d*\\.?\\d+%?/g) || [];\n const numList = match.map(item => parseFloat(item));\n for (let i = 0; i < 3; i += 1) {\n numList[i] = parseNum(numList[i] || 0, match[i] || '', i);\n }\n\n // For alpha. 50% should be 0.5\n if (match[3]) {\n numList[3] = match[3].includes('%') ? numList[3] / 100 : numList[3];\n } else {\n // By default, alpha is 1\n numList[3] = 1;\n }\n return numList;\n}\nconst parseHSVorHSL = (num, _, index) => index === 0 ? num : num / 100;\n\n/** round and limit number to integer between 0-255 */\nfunction limitRange(value, max) {\n const mergedMax = max || 255;\n if (value > mergedMax) {\n return mergedMax;\n }\n if (value < 0) {\n return 0;\n }\n return value;\n}\nexport class FastColor {\n constructor(input) {\n /**\n * All FastColor objects are valid. So isValid is always true. This property is kept to be compatible with TinyColor.\n */\n _defineProperty(this, \"isValid\", true);\n /**\n * Red, R in RGB\n */\n _defineProperty(this, \"r\", 0);\n /**\n * Green, G in RGB\n */\n _defineProperty(this, \"g\", 0);\n /**\n * Blue, B in RGB\n */\n _defineProperty(this, \"b\", 0);\n /**\n * Alpha/Opacity, A in RGBA/HSLA\n */\n _defineProperty(this, \"a\", 1);\n // HSV privates\n _defineProperty(this, \"_h\", void 0);\n _defineProperty(this, \"_s\", void 0);\n _defineProperty(this, \"_l\", void 0);\n _defineProperty(this, \"_v\", void 0);\n // intermediate variables to calculate HSL/HSV\n _defineProperty(this, \"_max\", void 0);\n _defineProperty(this, \"_min\", void 0);\n _defineProperty(this, \"_brightness\", void 0);\n /**\n * Always check 3 char in the object to determine the format.\n * We not use function in check to save bundle size.\n * e.g. 'rgb' -> { r: 0, g: 0, b: 0 }.\n */\n function matchFormat(str) {\n return str[0] in input && str[1] in input && str[2] in input;\n }\n if (!input) {\n // Do nothing since already initialized\n } else if (typeof input === 'string') {\n const trimStr = input.trim();\n function matchPrefix(prefix) {\n return trimStr.startsWith(prefix);\n }\n if (/^#?[A-F\\d]{3,8}$/i.test(trimStr)) {\n this.fromHexString(trimStr);\n } else if (matchPrefix('rgb')) {\n this.fromRgbString(trimStr);\n } else if (matchPrefix('hsl')) {\n this.fromHslString(trimStr);\n } else if (matchPrefix('hsv') || matchPrefix('hsb')) {\n this.fromHsvString(trimStr);\n }\n } else if (input instanceof FastColor) {\n this.r = input.r;\n this.g = input.g;\n this.b = input.b;\n this.a = input.a;\n this._h = input._h;\n this._s = input._s;\n this._l = input._l;\n this._v = input._v;\n } else if (matchFormat('rgb')) {\n this.r = limitRange(input.r);\n this.g = limitRange(input.g);\n this.b = limitRange(input.b);\n this.a = typeof input.a === 'number' ? limitRange(input.a, 1) : 1;\n } else if (matchFormat('hsl')) {\n this.fromHsl(input);\n } else if (matchFormat('hsv')) {\n this.fromHsv(input);\n } else {\n throw new Error('@ant-design/fast-color: unsupported input ' + JSON.stringify(input));\n }\n }\n\n // ======================= Setter =======================\n\n setR(value) {\n return this._sc('r', value);\n }\n setG(value) {\n return this._sc('g', value);\n }\n setB(value) {\n return this._sc('b', value);\n }\n setA(value) {\n return this._sc('a', value, 1);\n }\n setHue(value) {\n const hsv = this.toHsv();\n hsv.h = value;\n return this._c(hsv);\n }\n\n // ======================= Getter =======================\n /**\n * Returns the perceived luminance of a color, from 0-1.\n * @see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n */\n getLuminance() {\n function adjustGamma(raw) {\n const val = raw / 255;\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n }\n const R = adjustGamma(this.r);\n const G = adjustGamma(this.g);\n const B = adjustGamma(this.b);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n }\n getHue() {\n if (typeof this._h === 'undefined') {\n const delta = this.getMax() - this.getMin();\n if (delta === 0) {\n this._h = 0;\n } else {\n this._h = round(60 * (this.r === this.getMax() ? (this.g - this.b) / delta + (this.g < this.b ? 6 : 0) : this.g === this.getMax() ? (this.b - this.r) / delta + 2 : (this.r - this.g) / delta + 4));\n }\n }\n return this._h;\n }\n getSaturation() {\n if (typeof this._s === 'undefined') {\n const delta = this.getMax() - this.getMin();\n if (delta === 0) {\n this._s = 0;\n } else {\n this._s = delta / this.getMax();\n }\n }\n return this._s;\n }\n getLightness() {\n if (typeof this._l === 'undefined') {\n this._l = (this.getMax() + this.getMin()) / 510;\n }\n return this._l;\n }\n getValue() {\n if (typeof this._v === 'undefined') {\n this._v = this.getMax() / 255;\n }\n return this._v;\n }\n\n /**\n * Returns the perceived brightness of the color, from 0-255.\n * Note: this is not the b of HSB\n * @see http://www.w3.org/TR/AERT#color-contrast\n */\n getBrightness() {\n if (typeof this._brightness === 'undefined') {\n this._brightness = (this.r * 299 + this.g * 587 + this.b * 114) / 1000;\n }\n return this._brightness;\n }\n\n // ======================== Func ========================\n\n darken(amount = 10) {\n const h = this.getHue();\n const s = this.getSaturation();\n let l = this.getLightness() - amount / 100;\n if (l < 0) {\n l = 0;\n }\n return this._c({\n h,\n s,\n l,\n a: this.a\n });\n }\n lighten(amount = 10) {\n const h = this.getHue();\n const s = this.getSaturation();\n let l = this.getLightness() + amount / 100;\n if (l > 1) {\n l = 1;\n }\n return this._c({\n h,\n s,\n l,\n a: this.a\n });\n }\n\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n mix(input, amount = 50) {\n const color = this._c(input);\n const p = amount / 100;\n const calc = key => (color[key] - this[key]) * p + this[key];\n const rgba = {\n r: round(calc('r')),\n g: round(calc('g')),\n b: round(calc('b')),\n a: round(calc('a') * 100) / 100\n };\n return this._c(rgba);\n }\n\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n */\n tint(amount = 10) {\n return this.mix({\n r: 255,\n g: 255,\n b: 255,\n a: 1\n }, amount);\n }\n\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n */\n shade(amount = 10) {\n return this.mix({\n r: 0,\n g: 0,\n b: 0,\n a: 1\n }, amount);\n }\n onBackground(background) {\n const bg = this._c(background);\n const alpha = this.a + bg.a * (1 - this.a);\n const calc = key => {\n return round((this[key] * this.a + bg[key] * bg.a * (1 - this.a)) / alpha);\n };\n return this._c({\n r: calc('r'),\n g: calc('g'),\n b: calc('b'),\n a: alpha\n });\n }\n\n // ======================= Status =======================\n isDark() {\n return this.getBrightness() < 128;\n }\n isLight() {\n return this.getBrightness() >= 128;\n }\n\n // ======================== MISC ========================\n equals(other) {\n return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a;\n }\n clone() {\n return this._c(this);\n }\n\n // ======================= Format =======================\n toHexString() {\n let hex = '#';\n const rHex = (this.r || 0).toString(16);\n hex += rHex.length === 2 ? rHex : '0' + rHex;\n const gHex = (this.g || 0).toString(16);\n hex += gHex.length === 2 ? gHex : '0' + gHex;\n const bHex = (this.b || 0).toString(16);\n hex += bHex.length === 2 ? bHex : '0' + bHex;\n if (typeof this.a === 'number' && this.a >= 0 && this.a < 1) {\n const aHex = round(this.a * 255).toString(16);\n hex += aHex.length === 2 ? aHex : '0' + aHex;\n }\n return hex;\n }\n\n /** CSS support color pattern */\n toHsl() {\n return {\n h: this.getHue(),\n s: this.getSaturation(),\n l: this.getLightness(),\n a: this.a\n };\n }\n\n /** CSS support color pattern */\n toHslString() {\n const h = this.getHue();\n const s = round(this.getSaturation() * 100);\n const l = round(this.getLightness() * 100);\n return this.a !== 1 ? `hsla(${h},${s}%,${l}%,${this.a})` : `hsl(${h},${s}%,${l}%)`;\n }\n\n /** Same as toHsb */\n toHsv() {\n return {\n h: this.getHue(),\n s: this.getSaturation(),\n v: this.getValue(),\n a: this.a\n };\n }\n toRgb() {\n return {\n r: this.r,\n g: this.g,\n b: this.b,\n a: this.a\n };\n }\n toRgbString() {\n return this.a !== 1 ? `rgba(${this.r},${this.g},${this.b},${this.a})` : `rgb(${this.r},${this.g},${this.b})`;\n }\n toString() {\n return this.toRgbString();\n }\n\n // ====================== Privates ======================\n /** Return a new FastColor object with one channel changed */\n _sc(rgb, value, max) {\n const clone = this.clone();\n clone[rgb] = limitRange(value, max);\n return clone;\n }\n _c(input) {\n return new this.constructor(input);\n }\n getMax() {\n if (typeof this._max === 'undefined') {\n this._max = Math.max(this.r, this.g, this.b);\n }\n return this._max;\n }\n getMin() {\n if (typeof this._min === 'undefined') {\n this._min = Math.min(this.r, this.g, this.b);\n }\n return this._min;\n }\n fromHexString(trimStr) {\n const withoutPrefix = trimStr.replace('#', '');\n function connectNum(index1, index2) {\n return parseInt(withoutPrefix[index1] + withoutPrefix[index2 || index1], 16);\n }\n if (withoutPrefix.length < 6) {\n // #rgb or #rgba\n this.r = connectNum(0);\n this.g = connectNum(1);\n this.b = connectNum(2);\n this.a = withoutPrefix[3] ? connectNum(3) / 255 : 1;\n } else {\n // #rrggbb or #rrggbbaa\n this.r = connectNum(0, 1);\n this.g = connectNum(2, 3);\n this.b = connectNum(4, 5);\n this.a = withoutPrefix[6] ? connectNum(6, 7) / 255 : 1;\n }\n }\n fromHsl({\n h,\n s,\n l,\n a\n }) {\n this._h = h % 360;\n this._s = s;\n this._l = l;\n this.a = typeof a === 'number' ? a : 1;\n if (s <= 0) {\n const rgb = round(l * 255);\n this.r = rgb;\n this.g = rgb;\n this.b = rgb;\n }\n let r = 0,\n g = 0,\n b = 0;\n const huePrime = h / 60;\n const chroma = (1 - Math.abs(2 * l - 1)) * s;\n const secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n if (huePrime >= 0 && huePrime < 1) {\n r = chroma;\n g = secondComponent;\n } else if (huePrime >= 1 && huePrime < 2) {\n r = secondComponent;\n g = chroma;\n } else if (huePrime >= 2 && huePrime < 3) {\n g = chroma;\n b = secondComponent;\n } else if (huePrime >= 3 && huePrime < 4) {\n g = secondComponent;\n b = chroma;\n } else if (huePrime >= 4 && huePrime < 5) {\n r = secondComponent;\n b = chroma;\n } else if (huePrime >= 5 && huePrime < 6) {\n r = chroma;\n b = secondComponent;\n }\n const lightnessModification = l - chroma / 2;\n this.r = round((r + lightnessModification) * 255);\n this.g = round((g + lightnessModification) * 255);\n this.b = round((b + lightnessModification) * 255);\n }\n fromHsv({\n h,\n s,\n v,\n a\n }) {\n this._h = h % 360;\n this._s = s;\n this._v = v;\n this.a = typeof a === 'number' ? a : 1;\n const vv = round(v * 255);\n this.r = vv;\n this.g = vv;\n this.b = vv;\n if (s <= 0) {\n return;\n }\n const hh = h / 60;\n const i = Math.floor(hh);\n const ff = hh - i;\n const p = round(v * (1.0 - s) * 255);\n const q = round(v * (1.0 - s * ff) * 255);\n const t = round(v * (1.0 - s * (1.0 - ff)) * 255);\n switch (i) {\n case 0:\n this.g = t;\n this.b = p;\n break;\n case 1:\n this.r = q;\n this.b = p;\n break;\n case 2:\n this.r = p;\n this.b = t;\n break;\n case 3:\n this.r = p;\n this.g = q;\n break;\n case 4:\n this.r = t;\n this.g = p;\n break;\n case 5:\n default:\n this.g = p;\n this.b = q;\n break;\n }\n }\n fromHsvString(trimStr) {\n const cells = splitColorStr(trimStr, parseHSVorHSL);\n this.fromHsv({\n h: cells[0],\n s: cells[1],\n v: cells[2],\n a: cells[3]\n });\n }\n fromHslString(trimStr) {\n const cells = splitColorStr(trimStr, parseHSVorHSL);\n this.fromHsl({\n h: cells[0],\n s: cells[1],\n l: cells[2],\n a: cells[3]\n });\n }\n fromRgbString(trimStr) {\n const cells = splitColorStr(trimStr, (num, txt) =>\n // Convert percentage to number. e.g. 50% -> 128\n txt.includes('%') ? round(num / 100 * 255) : num);\n this.r = cells[0];\n this.g = cells[1];\n this.b = cells[2];\n this.a = cells[3];\n }\n}","function getRoot(ele) {\n var _ele$getRootNode;\n return ele === null || ele === void 0 || (_ele$getRootNode = ele.getRootNode) === null || _ele$getRootNode === void 0 ? void 0 : _ele$getRootNode.call(ele);\n}\n\n/**\n * Check if is in shadowRoot\n */\nexport function inShadow(ele) {\n return getRoot(ele) instanceof ShadowRoot;\n}\n\n/**\n * Return shadowRoot if possible\n */\nexport function getShadowRoot(ele) {\n return inShadow(ele) ? getRoot(ele) : null;\n}","import { unit } from '@ant-design/cssinjs';\nconst getHorizontalStyle = (token) => {\n const { componentCls, motionDurationSlow, horizontalLineHeight, colorSplit, lineWidth, lineType, itemPaddingInline, } = token;\n return {\n [`${componentCls}-horizontal`]: {\n lineHeight: horizontalLineHeight,\n border: 0,\n borderBottom: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n boxShadow: 'none',\n '&::after': {\n display: 'block',\n clear: 'both',\n height: 0,\n content: '\"\\\\20\"',\n },\n // ======================= Item =======================\n [`${componentCls}-item, ${componentCls}-submenu`]: {\n position: 'relative',\n display: 'inline-block',\n verticalAlign: 'bottom',\n paddingInline: itemPaddingInline,\n },\n [`> ${componentCls}-item:hover,\n > ${componentCls}-item-active,\n > ${componentCls}-submenu ${componentCls}-submenu-title:hover`]: {\n backgroundColor: 'transparent',\n },\n [`${componentCls}-item, ${componentCls}-submenu-title`]: {\n transition: [`border-color ${motionDurationSlow}`, `background ${motionDurationSlow}`].join(','),\n },\n // ===================== Sub Menu =====================\n [`${componentCls}-submenu-arrow`]: {\n display: 'none',\n },\n },\n };\n};\nexport default getHorizontalStyle;\n","import { unit } from '@ant-design/cssinjs';\nconst getRTLStyle = ({ componentCls, menuArrowOffset, calc, }) => ({\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n [`${componentCls}-submenu-rtl`]: {\n transformOrigin: '100% 0',\n },\n // Vertical Arrow\n [`${componentCls}-rtl${componentCls}-vertical,\n ${componentCls}-submenu-rtl ${componentCls}-vertical`]: {\n [`${componentCls}-submenu-arrow`]: {\n '&::before': {\n transform: `rotate(-45deg) translateY(${unit(calc(menuArrowOffset).mul(-1).equal())})`,\n },\n '&::after': {\n transform: `rotate(45deg) translateY(${unit(menuArrowOffset)})`,\n },\n },\n },\n});\nexport default getRTLStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { genFocusOutline } from '../../style';\nconst accessibilityFocus = (token) => genFocusOutline(token);\nconst getThemeStyle = (token, themeSuffix) => {\n const { componentCls, itemColor, itemSelectedColor, subMenuItemSelectedColor, groupTitleColor, itemBg, subMenuItemBg, itemSelectedBg, activeBarHeight, activeBarWidth, activeBarBorderWidth, motionDurationSlow, motionEaseInOut, motionEaseOut, itemPaddingInline, motionDurationMid, itemHoverColor, lineType, colorSplit, \n // Disabled\n itemDisabledColor, \n // Danger\n dangerItemColor, dangerItemHoverColor, dangerItemSelectedColor, dangerItemActiveBg, dangerItemSelectedBg, \n // Bg\n popupBg, itemHoverBg, itemActiveBg, menuSubMenuBg, \n // Horizontal\n horizontalItemSelectedColor, horizontalItemSelectedBg, horizontalItemBorderRadius, horizontalItemHoverBg, } = token;\n return {\n [`${componentCls}-${themeSuffix}, ${componentCls}-${themeSuffix} > ${componentCls}`]: {\n color: itemColor,\n background: itemBg,\n [`&${componentCls}-root:focus-visible`]: Object.assign({}, accessibilityFocus(token)),\n // ======================== Item ========================\n [`${componentCls}-item`]: {\n '&-group-title, &-extra': {\n color: groupTitleColor,\n },\n },\n [`${componentCls}-submenu-selected > ${componentCls}-submenu-title`]: {\n color: subMenuItemSelectedColor,\n },\n [`${componentCls}-item, ${componentCls}-submenu-title`]: {\n color: itemColor,\n [`&:not(${componentCls}-item-disabled):focus-visible`]: Object.assign({}, accessibilityFocus(token)),\n },\n // Disabled\n [`${componentCls}-item-disabled, ${componentCls}-submenu-disabled`]: {\n color: `${itemDisabledColor} !important`,\n },\n // Hover\n [`${componentCls}-item:not(${componentCls}-item-selected):not(${componentCls}-submenu-selected)`]: {\n [`&:hover, > ${componentCls}-submenu-title:hover`]: {\n color: itemHoverColor,\n },\n },\n [`&:not(${componentCls}-horizontal)`]: {\n [`${componentCls}-item:not(${componentCls}-item-selected)`]: {\n '&:hover': {\n backgroundColor: itemHoverBg,\n },\n '&:active': {\n backgroundColor: itemActiveBg,\n },\n },\n [`${componentCls}-submenu-title`]: {\n '&:hover': {\n backgroundColor: itemHoverBg,\n },\n '&:active': {\n backgroundColor: itemActiveBg,\n },\n },\n },\n // Danger - only Item has\n [`${componentCls}-item-danger`]: {\n color: dangerItemColor,\n [`&${componentCls}-item:hover`]: {\n [`&:not(${componentCls}-item-selected):not(${componentCls}-submenu-selected)`]: {\n color: dangerItemHoverColor,\n },\n },\n [`&${componentCls}-item:active`]: {\n background: dangerItemActiveBg,\n },\n },\n [`${componentCls}-item a`]: {\n '&, &:hover': {\n color: 'inherit',\n },\n },\n [`${componentCls}-item-selected`]: {\n color: itemSelectedColor,\n // Danger\n [`&${componentCls}-item-danger`]: {\n color: dangerItemSelectedColor,\n },\n 'a, a:hover': {\n color: 'inherit',\n },\n },\n [`& ${componentCls}-item-selected`]: {\n backgroundColor: itemSelectedBg,\n // Danger\n [`&${componentCls}-item-danger`]: {\n backgroundColor: dangerItemSelectedBg,\n },\n },\n [`&${componentCls}-submenu > ${componentCls}`]: {\n backgroundColor: menuSubMenuBg,\n },\n // ===== 设置浮层的颜色 =======\n // !dark 模式会被popupBg 会被rest 为 darkPopupBg\n [`&${componentCls}-popup > ${componentCls}`]: {\n backgroundColor: popupBg,\n },\n [`&${componentCls}-submenu-popup > ${componentCls}`]: {\n backgroundColor: popupBg,\n },\n // ===== 设置浮层的颜色 end =======\n // ====================== Horizontal ======================\n [`&${componentCls}-horizontal`]: Object.assign(Object.assign({}, (themeSuffix === 'dark'\n ? {\n borderBottom: 0,\n }\n : {})), { [`> ${componentCls}-item, > ${componentCls}-submenu`]: {\n top: activeBarBorderWidth,\n marginTop: token.calc(activeBarBorderWidth).mul(-1).equal(),\n marginBottom: 0,\n borderRadius: horizontalItemBorderRadius,\n '&::after': {\n position: 'absolute',\n insetInline: itemPaddingInline,\n bottom: 0,\n borderBottom: `${unit(activeBarHeight)} solid transparent`,\n transition: `border-color ${motionDurationSlow} ${motionEaseInOut}`,\n content: '\"\"',\n },\n '&:hover, &-active, &-open': {\n background: horizontalItemHoverBg,\n '&::after': {\n borderBottomWidth: activeBarHeight,\n borderBottomColor: horizontalItemSelectedColor,\n },\n },\n '&-selected': {\n color: horizontalItemSelectedColor,\n backgroundColor: horizontalItemSelectedBg,\n '&:hover': {\n backgroundColor: horizontalItemSelectedBg,\n },\n '&::after': {\n borderBottomWidth: activeBarHeight,\n borderBottomColor: horizontalItemSelectedColor,\n },\n },\n } }),\n // ================== Inline & Vertical ===================\n //\n [`&${componentCls}-root`]: {\n [`&${componentCls}-inline, &${componentCls}-vertical`]: {\n borderInlineEnd: `${unit(activeBarBorderWidth)} ${lineType} ${colorSplit}`,\n },\n },\n // ======================== Inline ========================\n [`&${componentCls}-inline`]: {\n // Sub\n [`${componentCls}-sub${componentCls}-inline`]: {\n background: subMenuItemBg,\n },\n [`${componentCls}-item`]: {\n position: 'relative',\n '&::after': {\n position: 'absolute',\n insetBlock: 0,\n insetInlineEnd: 0,\n borderInlineEnd: `${unit(activeBarWidth)} solid ${itemSelectedColor}`,\n transform: 'scaleY(0.0001)',\n opacity: 0,\n transition: [\n `transform ${motionDurationMid} ${motionEaseOut}`,\n `opacity ${motionDurationMid} ${motionEaseOut}`,\n ].join(','),\n content: '\"\"',\n },\n // Danger\n [`&${componentCls}-item-danger`]: {\n '&::after': {\n borderInlineEndColor: dangerItemSelectedColor,\n },\n },\n },\n [`${componentCls}-selected, ${componentCls}-item-selected`]: {\n '&::after': {\n transform: 'scaleY(1)',\n opacity: 1,\n transition: [\n `transform ${motionDurationMid} ${motionEaseInOut}`,\n `opacity ${motionDurationMid} ${motionEaseInOut}`,\n ].join(','),\n },\n },\n },\n },\n };\n};\nexport default getThemeStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { textEllipsis } from '../../style';\nconst getVerticalInlineStyle = (token) => {\n const { componentCls, itemHeight, itemMarginInline, padding, menuArrowSize, marginXS, itemMarginBlock, itemWidth, itemPaddingInline, } = token;\n const paddingWithArrow = token.calc(menuArrowSize).add(padding).add(marginXS).equal();\n return {\n [`${componentCls}-item`]: {\n position: 'relative',\n overflow: 'hidden',\n },\n [`${componentCls}-item, ${componentCls}-submenu-title`]: {\n height: itemHeight,\n lineHeight: unit(itemHeight),\n paddingInline: itemPaddingInline,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginInline: itemMarginInline,\n marginBlock: itemMarginBlock,\n width: itemWidth,\n },\n [`> ${componentCls}-item,\n > ${componentCls}-submenu > ${componentCls}-submenu-title`]: {\n height: itemHeight,\n lineHeight: unit(itemHeight),\n },\n [`${componentCls}-item-group-list ${componentCls}-submenu-title,\n ${componentCls}-submenu-title`]: {\n paddingInlineEnd: paddingWithArrow,\n },\n };\n};\nconst getVerticalStyle = (token) => {\n const { componentCls, iconCls, itemHeight, colorTextLightSolid, dropdownWidth, controlHeightLG, motionEaseOut, paddingXL, itemMarginInline, fontSizeLG, motionDurationFast, motionDurationSlow, paddingXS, boxShadowSecondary, collapsedWidth, collapsedIconSize, } = token;\n const inlineItemStyle = {\n height: itemHeight,\n lineHeight: unit(itemHeight),\n listStylePosition: 'inside',\n listStyleType: 'disc',\n };\n return [\n {\n [componentCls]: {\n '&-inline, &-vertical': Object.assign({ [`&${componentCls}-root`]: {\n boxShadow: 'none',\n } }, getVerticalInlineStyle(token)),\n },\n [`${componentCls}-submenu-popup`]: {\n [`${componentCls}-vertical`]: Object.assign(Object.assign({}, getVerticalInlineStyle(token)), { boxShadow: boxShadowSecondary }),\n },\n },\n // Vertical only\n {\n [`${componentCls}-submenu-popup ${componentCls}-vertical${componentCls}-sub`]: {\n minWidth: dropdownWidth,\n maxHeight: `calc(100vh - ${unit(token.calc(controlHeightLG).mul(2.5).equal())})`,\n padding: '0',\n overflow: 'hidden',\n borderInlineEnd: 0,\n // https://github.com/ant-design/ant-design/issues/22244\n // https://github.com/ant-design/ant-design/issues/26812\n \"&:not([class*='-active'])\": {\n overflowX: 'hidden',\n overflowY: 'auto',\n },\n },\n },\n // Inline Only\n {\n [`${componentCls}-inline`]: {\n width: '100%',\n // Motion enhance for first level\n [`&${componentCls}-root`]: {\n [`${componentCls}-item, ${componentCls}-submenu-title`]: {\n display: 'flex',\n alignItems: 'center',\n transition: [\n `border-color ${motionDurationSlow}`,\n `background ${motionDurationSlow}`,\n `padding ${motionDurationFast} ${motionEaseOut}`,\n ].join(','),\n [`> ${componentCls}-title-content`]: {\n flex: 'auto',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n '> *': {\n flex: 'none',\n },\n },\n },\n // >>>>> Sub\n [`${componentCls}-sub${componentCls}-inline`]: {\n padding: 0,\n border: 0,\n borderRadius: 0,\n boxShadow: 'none',\n [`& > ${componentCls}-submenu > ${componentCls}-submenu-title`]: inlineItemStyle,\n [`& ${componentCls}-item-group-title`]: {\n paddingInlineStart: paddingXL,\n },\n },\n // >>>>> Item\n [`${componentCls}-item`]: inlineItemStyle,\n },\n },\n // Inline Collapse Only\n {\n [`${componentCls}-inline-collapsed`]: {\n width: collapsedWidth,\n [`&${componentCls}-root`]: {\n [`${componentCls}-item, ${componentCls}-submenu ${componentCls}-submenu-title`]: {\n [`> ${componentCls}-inline-collapsed-noicon`]: {\n fontSize: fontSizeLG,\n textAlign: 'center',\n },\n },\n },\n [`> ${componentCls}-item,\n > ${componentCls}-item-group > ${componentCls}-item-group-list > ${componentCls}-item,\n > ${componentCls}-item-group > ${componentCls}-item-group-list > ${componentCls}-submenu > ${componentCls}-submenu-title,\n > ${componentCls}-submenu > ${componentCls}-submenu-title`]: {\n insetInlineStart: 0,\n paddingInline: `calc(50% - ${unit(token.calc(collapsedIconSize).div(2).equal())} - ${unit(itemMarginInline)})`,\n textOverflow: 'clip',\n [`\n ${componentCls}-submenu-arrow,\n ${componentCls}-submenu-expand-icon\n `]: {\n opacity: 0,\n },\n [`${componentCls}-item-icon, ${iconCls}`]: {\n margin: 0,\n fontSize: collapsedIconSize,\n lineHeight: unit(itemHeight),\n '+ span': {\n display: 'inline-block',\n opacity: 0,\n },\n },\n },\n [`${componentCls}-item-icon, ${iconCls}`]: {\n display: 'inline-block',\n },\n '&-tooltip': {\n pointerEvents: 'none',\n [`${componentCls}-item-icon, ${iconCls}`]: {\n display: 'none',\n },\n 'a, a:hover': {\n color: colorTextLightSolid,\n },\n },\n [`${componentCls}-item-group-title`]: Object.assign(Object.assign({}, textEllipsis), { paddingInline: paddingXS }),\n },\n },\n ];\n};\nexport default getVerticalStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { clearFix, resetComponent, resetIcon } from '../../style';\nimport { genCollapseMotion, initSlideMotion, initZoomMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport getHorizontalStyle from './horizontal';\nimport getRTLStyle from './rtl';\nimport getThemeStyle from './theme';\nimport getVerticalStyle from './vertical';\nconst genMenuItemStyle = (token) => {\n const { componentCls, motionDurationSlow, motionDurationMid, motionEaseInOut, motionEaseOut, iconCls, iconSize, iconMarginInlineEnd, } = token;\n return {\n // >>>>> Item\n [`${componentCls}-item, ${componentCls}-submenu-title`]: {\n position: 'relative',\n display: 'block',\n margin: 0,\n whiteSpace: 'nowrap',\n cursor: 'pointer',\n transition: [\n `border-color ${motionDurationSlow}`,\n `background ${motionDurationSlow}`,\n `padding calc(${motionDurationSlow} + 0.1s) ${motionEaseInOut}`,\n ].join(','),\n [`${componentCls}-item-icon, ${iconCls}`]: {\n minWidth: iconSize,\n fontSize: iconSize,\n transition: [\n `font-size ${motionDurationMid} ${motionEaseOut}`,\n `margin ${motionDurationSlow} ${motionEaseInOut}`,\n `color ${motionDurationSlow}`,\n ].join(','),\n '+ span': {\n marginInlineStart: iconMarginInlineEnd,\n opacity: 1,\n transition: [\n `opacity ${motionDurationSlow} ${motionEaseInOut}`,\n `margin ${motionDurationSlow}`,\n `color ${motionDurationSlow}`,\n ].join(','),\n },\n },\n [`${componentCls}-item-icon`]: Object.assign({}, resetIcon()),\n [`&${componentCls}-item-only-child`]: {\n [`> ${iconCls}, > ${componentCls}-item-icon`]: {\n marginInlineEnd: 0,\n },\n },\n },\n // Disabled state sets text to gray and nukes hover/tab effects\n [`${componentCls}-item-disabled, ${componentCls}-submenu-disabled`]: {\n background: 'none !important',\n cursor: 'not-allowed',\n '&::after': {\n borderColor: 'transparent !important',\n },\n a: {\n color: 'inherit !important',\n cursor: 'not-allowed',\n pointerEvents: 'none',\n },\n [`> ${componentCls}-submenu-title`]: {\n color: 'inherit !important',\n cursor: 'not-allowed',\n },\n },\n };\n};\nconst genSubMenuArrowStyle = (token) => {\n const { componentCls, motionDurationSlow, motionEaseInOut, borderRadius, menuArrowSize, menuArrowOffset, } = token;\n return {\n [`${componentCls}-submenu`]: {\n '&-expand-icon, &-arrow': {\n position: 'absolute',\n top: '50%',\n insetInlineEnd: token.margin,\n width: menuArrowSize,\n color: 'currentcolor',\n transform: 'translateY(-50%)',\n transition: `transform ${motionDurationSlow} ${motionEaseInOut}, opacity ${motionDurationSlow}`,\n },\n '&-arrow': {\n // →\n '&::before, &::after': {\n position: 'absolute',\n width: token.calc(menuArrowSize).mul(0.6).equal(),\n height: token.calc(menuArrowSize).mul(0.15).equal(),\n backgroundColor: 'currentcolor',\n borderRadius,\n transition: [\n `background ${motionDurationSlow} ${motionEaseInOut}`,\n `transform ${motionDurationSlow} ${motionEaseInOut}`,\n `top ${motionDurationSlow} ${motionEaseInOut}`,\n `color ${motionDurationSlow} ${motionEaseInOut}`,\n ].join(','),\n content: '\"\"',\n },\n '&::before': {\n transform: `rotate(45deg) translateY(${unit(token.calc(menuArrowOffset).mul(-1).equal())})`,\n },\n '&::after': {\n transform: `rotate(-45deg) translateY(${unit(menuArrowOffset)})`,\n },\n },\n },\n };\n};\n// =============================== Base ===============================\nconst getBaseStyle = (token) => {\n const { antCls, componentCls, fontSize, motionDurationSlow, motionDurationMid, motionEaseInOut, paddingXS, padding, colorSplit, lineWidth, zIndexPopup, borderRadiusLG, subMenuItemBorderRadius, menuArrowSize, menuArrowOffset, lineType, groupTitleLineHeight, groupTitleFontSize, } = token;\n return [\n // Misc\n {\n '': {\n [componentCls]: Object.assign(Object.assign({}, clearFix()), { \n // Hidden\n '&-hidden': {\n display: 'none',\n } }),\n },\n [`${componentCls}-submenu-hidden`]: {\n display: 'none',\n },\n },\n {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), clearFix()), { marginBottom: 0, paddingInlineStart: 0, // Override default ul/ol\n fontSize, lineHeight: 0, listStyle: 'none', outline: 'none', \n // Magic cubic here but smooth transition\n transition: `width ${motionDurationSlow} cubic-bezier(0.2, 0, 0, 1) 0s`, 'ul, ol': {\n margin: 0,\n padding: 0,\n listStyle: 'none',\n }, \n // Overflow ellipsis\n '&-overflow': {\n display: 'flex',\n [`${componentCls}-item`]: {\n flex: 'none',\n },\n }, [`${componentCls}-item, ${componentCls}-submenu, ${componentCls}-submenu-title`]: {\n borderRadius: token.itemBorderRadius,\n }, [`${componentCls}-item-group-title`]: {\n padding: `${unit(paddingXS)} ${unit(padding)}`,\n fontSize: groupTitleFontSize,\n lineHeight: groupTitleLineHeight,\n transition: `all ${motionDurationSlow}`,\n }, [`&-horizontal ${componentCls}-submenu`]: {\n transition: [\n `border-color ${motionDurationSlow} ${motionEaseInOut}`,\n `background ${motionDurationSlow} ${motionEaseInOut}`,\n ].join(','),\n }, [`${componentCls}-submenu, ${componentCls}-submenu-inline`]: {\n transition: [\n `border-color ${motionDurationSlow} ${motionEaseInOut}`,\n `background ${motionDurationSlow} ${motionEaseInOut}`,\n `padding ${motionDurationMid} ${motionEaseInOut}`,\n ].join(','),\n }, [`${componentCls}-submenu ${componentCls}-sub`]: {\n cursor: 'initial',\n transition: [\n `background ${motionDurationSlow} ${motionEaseInOut}`,\n `padding ${motionDurationSlow} ${motionEaseInOut}`,\n ].join(','),\n }, [`${componentCls}-title-content`]: {\n transition: `color ${motionDurationSlow}`,\n '&-with-extra': {\n display: 'inline-flex',\n alignItems: 'center',\n width: '100%',\n },\n // https://github.com/ant-design/ant-design/issues/41143\n [`> ${antCls}-typography-ellipsis-single-line`]: {\n display: 'inline',\n verticalAlign: 'unset',\n },\n [`${componentCls}-item-extra`]: {\n marginInlineStart: 'auto',\n paddingInlineStart: token.padding,\n },\n }, [`${componentCls}-item a`]: {\n '&::before': {\n position: 'absolute',\n inset: 0,\n backgroundColor: 'transparent',\n content: '\"\"',\n },\n }, \n // Removed a Badge related style seems it's safe\n // https://github.com/ant-design/ant-design/issues/19809\n // >>>>> Divider\n [`${componentCls}-item-divider`]: {\n overflow: 'hidden',\n lineHeight: 0,\n borderColor: colorSplit,\n borderStyle: lineType,\n borderWidth: 0,\n borderTopWidth: lineWidth,\n marginBlock: lineWidth,\n padding: 0,\n '&-dashed': {\n borderStyle: 'dashed',\n },\n } }), genMenuItemStyle(token)), { [`${componentCls}-item-group`]: {\n [`${componentCls}-item-group-list`]: {\n margin: 0,\n padding: 0,\n [`${componentCls}-item, ${componentCls}-submenu-title`]: {\n paddingInline: `${unit(token.calc(fontSize).mul(2).equal())} ${unit(padding)}`,\n },\n },\n }, \n // ======================= Sub Menu =======================\n '&-submenu': {\n '&-popup': {\n position: 'absolute',\n zIndex: zIndexPopup,\n borderRadius: borderRadiusLG,\n boxShadow: 'none',\n transformOrigin: '0 0',\n [`&${componentCls}-submenu`]: {\n background: 'transparent',\n },\n // https://github.com/ant-design/ant-design/issues/13955\n '&::before': {\n position: 'absolute',\n inset: 0,\n zIndex: -1,\n width: '100%',\n height: '100%',\n opacity: 0,\n content: '\"\"',\n },\n [`> ${componentCls}`]: Object.assign(Object.assign(Object.assign({ borderRadius: borderRadiusLG }, genMenuItemStyle(token)), genSubMenuArrowStyle(token)), { [`${componentCls}-item, ${componentCls}-submenu > ${componentCls}-submenu-title`]: {\n borderRadius: subMenuItemBorderRadius,\n }, [`${componentCls}-submenu-title::after`]: {\n transition: `transform ${motionDurationSlow} ${motionEaseInOut}`,\n } }),\n },\n [`\n &-placement-leftTop,\n &-placement-bottomRight,\n `]: {\n transformOrigin: '100% 0',\n },\n [`\n &-placement-leftBottom,\n &-placement-topRight,\n `]: {\n transformOrigin: '100% 100%',\n },\n [`\n &-placement-rightBottom,\n &-placement-topLeft,\n `]: {\n transformOrigin: '0 100%',\n },\n [`\n &-placement-bottomLeft,\n &-placement-rightTop,\n `]: {\n transformOrigin: '0 0',\n },\n [`\n &-placement-leftTop,\n &-placement-leftBottom\n `]: {\n paddingInlineEnd: token.paddingXS,\n },\n [`\n &-placement-rightTop,\n &-placement-rightBottom\n `]: {\n paddingInlineStart: token.paddingXS,\n },\n [`\n &-placement-topRight,\n &-placement-topLeft\n `]: {\n paddingBottom: token.paddingXS,\n },\n [`\n &-placement-bottomRight,\n &-placement-bottomLeft\n `]: {\n paddingTop: token.paddingXS,\n },\n } }), genSubMenuArrowStyle(token)), { [`&-inline-collapsed ${componentCls}-submenu-arrow,\n &-inline ${componentCls}-submenu-arrow`]: {\n // ↓\n '&::before': {\n transform: `rotate(-45deg) translateX(${unit(menuArrowOffset)})`,\n },\n '&::after': {\n transform: `rotate(45deg) translateX(${unit(token.calc(menuArrowOffset).mul(-1).equal())})`,\n },\n }, [`${componentCls}-submenu-open${componentCls}-submenu-inline > ${componentCls}-submenu-title > ${componentCls}-submenu-arrow`]: {\n // ↑\n transform: `translateY(${unit(token.calc(menuArrowSize).mul(0.2).mul(-1).equal())})`,\n '&::after': {\n transform: `rotate(-45deg) translateX(${unit(token.calc(menuArrowOffset).mul(-1).equal())})`,\n },\n '&::before': {\n transform: `rotate(45deg) translateX(${unit(menuArrowOffset)})`,\n },\n } }),\n },\n // Integration with header element so menu items have the same height\n {\n [`${antCls}-layout-header`]: {\n [componentCls]: {\n lineHeight: 'inherit',\n },\n },\n },\n ];\n};\nexport const prepareComponentToken = (token) => {\n var _a, _b, _c;\n const { colorPrimary, colorError, colorTextDisabled, colorErrorBg, colorText, colorTextDescription, colorBgContainer, colorFillAlter, colorFillContent, lineWidth, lineWidthBold, controlItemBgActive, colorBgTextHover, controlHeightLG, lineHeight, colorBgElevated, marginXXS, padding, fontSize, controlHeightSM, fontSizeLG, colorTextLightSolid, colorErrorHover, } = token;\n const activeBarWidth = (_a = token.activeBarWidth) !== null && _a !== void 0 ? _a : 0;\n const activeBarBorderWidth = (_b = token.activeBarBorderWidth) !== null && _b !== void 0 ? _b : lineWidth;\n const itemMarginInline = (_c = token.itemMarginInline) !== null && _c !== void 0 ? _c : token.marginXXS;\n const colorTextDark = new FastColor(colorTextLightSolid).setA(0.65).toRgbString();\n return {\n dropdownWidth: 160,\n zIndexPopup: token.zIndexPopupBase + 50,\n radiusItem: token.borderRadiusLG,\n itemBorderRadius: token.borderRadiusLG,\n radiusSubMenuItem: token.borderRadiusSM,\n subMenuItemBorderRadius: token.borderRadiusSM,\n colorItemText: colorText,\n itemColor: colorText,\n colorItemTextHover: colorText,\n itemHoverColor: colorText,\n colorItemTextHoverHorizontal: colorPrimary,\n horizontalItemHoverColor: colorPrimary,\n colorGroupTitle: colorTextDescription,\n groupTitleColor: colorTextDescription,\n colorItemTextSelected: colorPrimary,\n itemSelectedColor: colorPrimary,\n subMenuItemSelectedColor: colorPrimary,\n colorItemTextSelectedHorizontal: colorPrimary,\n horizontalItemSelectedColor: colorPrimary,\n colorItemBg: colorBgContainer,\n itemBg: colorBgContainer,\n colorItemBgHover: colorBgTextHover,\n itemHoverBg: colorBgTextHover,\n colorItemBgActive: colorFillContent,\n itemActiveBg: controlItemBgActive,\n colorSubItemBg: colorFillAlter,\n subMenuItemBg: colorFillAlter,\n colorItemBgSelected: controlItemBgActive,\n itemSelectedBg: controlItemBgActive,\n colorItemBgSelectedHorizontal: 'transparent',\n horizontalItemSelectedBg: 'transparent',\n colorActiveBarWidth: 0,\n activeBarWidth,\n colorActiveBarHeight: lineWidthBold,\n activeBarHeight: lineWidthBold,\n colorActiveBarBorderSize: lineWidth,\n activeBarBorderWidth,\n // Disabled\n colorItemTextDisabled: colorTextDisabled,\n itemDisabledColor: colorTextDisabled,\n // Danger\n colorDangerItemText: colorError,\n dangerItemColor: colorError,\n colorDangerItemTextHover: colorError,\n dangerItemHoverColor: colorError,\n colorDangerItemTextSelected: colorError,\n dangerItemSelectedColor: colorError,\n colorDangerItemBgActive: colorErrorBg,\n dangerItemActiveBg: colorErrorBg,\n colorDangerItemBgSelected: colorErrorBg,\n dangerItemSelectedBg: colorErrorBg,\n itemMarginInline,\n horizontalItemBorderRadius: 0,\n horizontalItemHoverBg: 'transparent',\n itemHeight: controlHeightLG,\n groupTitleLineHeight: lineHeight,\n collapsedWidth: controlHeightLG * 2,\n popupBg: colorBgElevated,\n itemMarginBlock: marginXXS,\n itemPaddingInline: padding,\n horizontalLineHeight: `${controlHeightLG * 1.15}px`,\n iconSize: fontSize,\n iconMarginInlineEnd: controlHeightSM - fontSize,\n collapsedIconSize: fontSizeLG,\n groupTitleFontSize: fontSize,\n // Disabled\n darkItemDisabledColor: new FastColor(colorTextLightSolid).setA(0.25).toRgbString(),\n // Dark\n darkItemColor: colorTextDark,\n darkDangerItemColor: colorError,\n darkItemBg: '#001529',\n darkPopupBg: '#001529',\n darkSubMenuItemBg: '#000c17',\n darkItemSelectedColor: colorTextLightSolid,\n darkItemSelectedBg: colorPrimary,\n darkDangerItemSelectedBg: colorError,\n darkItemHoverBg: 'transparent',\n darkGroupTitleColor: colorTextDark,\n darkItemHoverColor: colorTextLightSolid,\n darkDangerItemHoverColor: colorErrorHover,\n darkDangerItemSelectedColor: colorTextLightSolid,\n darkDangerItemActiveBg: colorError,\n // internal\n itemWidth: activeBarWidth\n ? `calc(100% + ${activeBarBorderWidth}px)`\n : `calc(100% - ${itemMarginInline * 2}px)`,\n };\n};\n// ============================== Export ==============================\nexport default (prefixCls, rootCls = prefixCls, injectStyle = true) => {\n const useStyle = genStyleHooks('Menu', (token) => {\n const { colorBgElevated, controlHeightLG, fontSize, darkItemColor, darkDangerItemColor, darkItemBg, darkSubMenuItemBg, darkItemSelectedColor, darkItemSelectedBg, darkDangerItemSelectedBg, darkItemHoverBg, darkGroupTitleColor, darkItemHoverColor, darkItemDisabledColor, darkDangerItemHoverColor, darkDangerItemSelectedColor, darkDangerItemActiveBg, popupBg, darkPopupBg, } = token;\n const menuArrowSize = token.calc(fontSize).div(7).mul(5).equal();\n // Menu Token\n const menuToken = mergeToken(token, {\n menuArrowSize,\n menuHorizontalHeight: token.calc(controlHeightLG).mul(1.15).equal(),\n menuArrowOffset: token.calc(menuArrowSize).mul(0.25).equal(),\n menuSubMenuBg: colorBgElevated,\n calc: token.calc,\n popupBg,\n });\n const menuDarkToken = mergeToken(menuToken, {\n itemColor: darkItemColor,\n itemHoverColor: darkItemHoverColor,\n groupTitleColor: darkGroupTitleColor,\n itemSelectedColor: darkItemSelectedColor,\n subMenuItemSelectedColor: darkItemSelectedColor,\n itemBg: darkItemBg,\n popupBg: darkPopupBg,\n subMenuItemBg: darkSubMenuItemBg,\n itemActiveBg: 'transparent',\n itemSelectedBg: darkItemSelectedBg,\n activeBarHeight: 0,\n activeBarBorderWidth: 0,\n itemHoverBg: darkItemHoverBg,\n // Disabled\n itemDisabledColor: darkItemDisabledColor,\n // Danger\n dangerItemColor: darkDangerItemColor,\n dangerItemHoverColor: darkDangerItemHoverColor,\n dangerItemSelectedColor: darkDangerItemSelectedColor,\n dangerItemActiveBg: darkDangerItemActiveBg,\n dangerItemSelectedBg: darkDangerItemSelectedBg,\n menuSubMenuBg: darkSubMenuItemBg,\n // Horizontal\n horizontalItemSelectedColor: darkItemSelectedColor,\n horizontalItemSelectedBg: darkItemSelectedBg,\n });\n return [\n // Basic\n getBaseStyle(menuToken),\n // Horizontal\n getHorizontalStyle(menuToken), // Hard code for some light style\n // Vertical\n getVerticalStyle(menuToken), // Hard code for some light style\n // Theme\n getThemeStyle(menuToken, 'light'),\n getThemeStyle(menuDarkToken, 'dark'),\n // RTL\n getRTLStyle(menuToken),\n // Motion\n genCollapseMotion(menuToken),\n initSlideMotion(menuToken, 'slide-up'),\n initSlideMotion(menuToken, 'slide-down'),\n initZoomMotion(menuToken, 'zoom-big'),\n ];\n }, prepareComponentToken, {\n deprecatedTokens: [\n ['colorGroupTitle', 'groupTitleColor'],\n ['radiusItem', 'itemBorderRadius'],\n ['radiusSubMenuItem', 'subMenuItemBorderRadius'],\n ['colorItemText', 'itemColor'],\n ['colorItemTextHover', 'itemHoverColor'],\n ['colorItemTextHoverHorizontal', 'horizontalItemHoverColor'],\n ['colorItemTextSelected', 'itemSelectedColor'],\n ['colorItemTextSelectedHorizontal', 'horizontalItemSelectedColor'],\n ['colorItemTextDisabled', 'itemDisabledColor'],\n ['colorDangerItemText', 'dangerItemColor'],\n ['colorDangerItemTextHover', 'dangerItemHoverColor'],\n ['colorDangerItemTextSelected', 'dangerItemSelectedColor'],\n ['colorDangerItemBgActive', 'dangerItemActiveBg'],\n ['colorDangerItemBgSelected', 'dangerItemSelectedBg'],\n ['colorItemBg', 'itemBg'],\n ['colorItemBgHover', 'itemHoverBg'],\n ['colorSubItemBg', 'subMenuItemBg'],\n ['colorItemBgActive', 'itemActiveBg'],\n ['colorItemBgSelectedHorizontal', 'horizontalItemSelectedBg'],\n ['colorActiveBarWidth', 'activeBarWidth'],\n ['colorActiveBarHeight', 'activeBarHeight'],\n ['colorActiveBarBorderSize', 'activeBarBorderWidth'],\n ['colorItemBgSelected', 'itemSelectedBg'],\n ],\n // Dropdown will handle menu style self. We do not need to handle this.\n injectStyle,\n unitless: {\n groupTitleLineHeight: true,\n },\n });\n return useStyle(prefixCls, rootCls);\n};\n","import { unit } from '@ant-design/cssinjs';\nimport { genBasicInputStyle, genPlaceholderStyle, initComponentToken, initInputToken, } from '../../input/style';\nimport { genBorderlessStyle, genDisabledStyle, genFilledStyle, genOutlinedStyle, genUnderlinedStyle, } from '../../input/style/variants';\nimport { resetComponent, textEllipsis } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genMentionsStyle = (token) => {\n const { componentCls, antCls, colorTextDisabled, controlItemBgHover, controlPaddingHorizontal, colorText, motionDurationSlow, lineHeight, controlHeight, paddingInline, paddingBlock, fontSize, fontSizeIcon, colorIcon, colorTextQuaternary, colorBgElevated, paddingXXS, borderRadius, borderRadiusLG, boxShadowSecondary, itemPaddingVertical, calc, } = token;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genBasicInputStyle(token)), { position: 'relative', display: 'inline-block', height: 'auto', padding: `0 ${unit(token.paddingInline)}`, overflow: 'hidden', lineHeight, whiteSpace: 'pre-wrap', verticalAlign: 'bottom' }), genOutlinedStyle(token)), genFilledStyle(token)), genBorderlessStyle(token)), { '&-affix-wrapper': Object.assign(Object.assign({}, genBasicInputStyle(token)), { display: 'inline-flex', paddingBlock: 0, paddingInlineStart: 0, paddingInlineEnd: token.paddingInline, '&::before': {\n display: 'inline-block',\n width: 0,\n visibility: 'hidden',\n content: '\"\\\\a0\"',\n }, [`${componentCls}-suffix`]: {\n display: 'inline-flex',\n alignItems: 'center',\n // 当页面中存在 feedback-icon 时,给 clear-icon 添加右边距\n [`&:has(${antCls}-form-item-feedback-icon) ${componentCls}-clear-icon`]: {\n marginInlineEnd: token.marginXS,\n },\n [`${antCls}-form-item-feedback-icon`]: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n }, [`${componentCls}-clear-icon`]: {\n insetInlineEnd: 0,\n insetBlockStart: calc(fontSize).mul(lineHeight).mul(0.5).add(paddingBlock).equal(),\n padding: 0,\n lineHeight: 0,\n color: colorTextQuaternary,\n fontSize: fontSizeIcon,\n verticalAlign: -1,\n // https://github.com/ant-design/ant-design/pull/18151\n // https://codesandbox.io/s/wizardly-sun-u10br\n cursor: 'pointer',\n transition: `color ${motionDurationSlow}`,\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n '&:hover': {\n color: colorIcon,\n },\n '&:active': {\n color: colorText,\n },\n '&-hidden': {\n visibility: 'hidden',\n },\n } }) }), genUnderlinedStyle(token)), { '&-disabled': {\n '> textarea': Object.assign({}, genDisabledStyle(token)),\n }, \n // ================= Input Area =================\n [`&, &-affix-wrapper > ${componentCls}`]: {\n [`> textarea, ${componentCls}-measure`]: {\n color: colorText,\n boxSizing: 'border-box',\n minHeight: token.calc(controlHeight).sub(2).equal(),\n margin: 0,\n padding: `${unit(paddingBlock)} ${unit(paddingInline)}`,\n overflow: 'inherit',\n overflowX: 'hidden',\n overflowY: 'auto',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n fontFamily: 'inherit',\n fontStyle: 'inherit',\n fontVariant: 'inherit',\n fontSizeAdjust: 'inherit',\n fontStretch: 'inherit',\n lineHeight: 'inherit',\n direction: 'inherit',\n letterSpacing: 'inherit',\n whiteSpace: 'inherit',\n textAlign: 'inherit',\n verticalAlign: 'top',\n wordWrap: 'break-word',\n wordBreak: 'inherit',\n tabSize: 'inherit',\n },\n '> textarea': Object.assign(Object.assign({ width: '100%', border: 'none', outline: 'none', resize: 'none', backgroundColor: 'transparent' }, genPlaceholderStyle(token.colorTextPlaceholder)), { padding: `${unit(token.paddingBlock)} 0` }),\n [`${componentCls}-measure`]: {\n position: 'absolute',\n top: 0,\n insetInlineEnd: 0,\n bottom: 0,\n insetInlineStart: 0,\n zIndex: -1,\n color: 'transparent',\n pointerEvents: 'none',\n '> span': {\n display: 'inline-block',\n minHeight: '1em',\n },\n },\n }, \n // ================== Dropdown ==================\n '&-dropdown': Object.assign(Object.assign({}, resetComponent(token)), { position: 'absolute', top: -9999, insetInlineStart: -9999, zIndex: token.zIndexPopup, boxSizing: 'border-box', fontSize, fontVariant: 'initial', padding: paddingXXS, backgroundColor: colorBgElevated, borderRadius: borderRadiusLG, outline: 'none', boxShadow: boxShadowSecondary, '&-hidden': {\n display: 'none',\n }, [`${componentCls}-dropdown-menu`]: {\n maxHeight: token.dropdownHeight,\n margin: 0,\n paddingInlineStart: 0, // Override default ul/ol\n overflow: 'auto',\n listStyle: 'none',\n outline: 'none',\n '&-item': Object.assign(Object.assign({}, textEllipsis), { position: 'relative', display: 'block', minWidth: token.controlItemWidth, padding: `${unit(itemPaddingVertical)} ${unit(controlPaddingHorizontal)}`, color: colorText, borderRadius, fontWeight: 'normal', lineHeight, cursor: 'pointer', transition: `background ${motionDurationSlow} ease`, '&:hover': {\n backgroundColor: controlItemBgHover,\n }, '&-disabled': {\n color: colorTextDisabled,\n cursor: 'not-allowed',\n '&:hover': {\n color: colorTextDisabled,\n backgroundColor: controlItemBgHover,\n cursor: 'not-allowed',\n },\n }, '&-selected': {\n color: colorText,\n fontWeight: token.fontWeightStrong,\n backgroundColor: controlItemBgHover,\n }, '&-active': {\n backgroundColor: controlItemBgHover,\n } }),\n } }) }),\n };\n};\nexport const prepareComponentToken = (token) => (Object.assign(Object.assign({}, initComponentToken(token)), { dropdownHeight: 250, controlItemWidth: 100, zIndexPopup: token.zIndexPopupBase + 50, itemPaddingVertical: (token.controlHeight - token.fontHeight) / 2 }));\n// ============================== Export ==============================\nexport default genStyleHooks('Mentions', (token) => {\n const mentionsToken = mergeToken(token, initInputToken(token));\n return genMentionsStyle(mentionsToken);\n}, prepareComponentToken);\n","import React from 'react';\nimport SizeContext from '../SizeContext';\nconst useSize = (customSize) => {\n const size = React.useContext(SizeContext);\n const mergedSize = React.useMemo(() => {\n if (!customSize) {\n return size;\n }\n if (typeof customSize === 'string') {\n return customSize !== null && customSize !== void 0 ? customSize : size;\n }\n if (typeof customSize === 'function') {\n return customSize(size);\n }\n return size;\n }, [customSize, size]);\n return mergedSize;\n};\nexport default useSize;\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks } from '../../theme/internal';\nconst genAlertTypeStyle = (bgColor, borderColor, iconColor, token, alertCls) => ({\n background: bgColor,\n border: `${unit(token.lineWidth)} ${token.lineType} ${borderColor}`,\n [`${alertCls}-icon`]: {\n color: iconColor,\n },\n});\nexport const genBaseStyle = (token) => {\n const { componentCls, motionDurationSlow: duration, marginXS, marginSM, fontSize, fontSizeLG, lineHeight, borderRadiusLG: borderRadius, motionEaseInOutCirc, withDescriptionIconSize, colorText, colorTextHeading, withDescriptionPadding, defaultPadding, } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', display: 'flex', alignItems: 'center', padding: defaultPadding, wordWrap: 'break-word', borderRadius, [`&${componentCls}-rtl`]: {\n direction: 'rtl',\n }, [`${componentCls}-content`]: {\n flex: 1,\n minWidth: 0,\n }, [`${componentCls}-icon`]: {\n marginInlineEnd: marginXS,\n lineHeight: 0,\n }, '&-description': {\n display: 'none',\n fontSize,\n lineHeight,\n }, '&-message': {\n color: colorTextHeading,\n }, [`&${componentCls}-motion-leave`]: {\n overflow: 'hidden',\n opacity: 1,\n transition: `max-height ${duration} ${motionEaseInOutCirc}, opacity ${duration} ${motionEaseInOutCirc},\n padding-top ${duration} ${motionEaseInOutCirc}, padding-bottom ${duration} ${motionEaseInOutCirc},\n margin-bottom ${duration} ${motionEaseInOutCirc}`,\n }, [`&${componentCls}-motion-leave-active`]: {\n maxHeight: 0,\n marginBottom: '0 !important',\n paddingTop: 0,\n paddingBottom: 0,\n opacity: 0,\n } }),\n [`${componentCls}-with-description`]: {\n alignItems: 'flex-start',\n padding: withDescriptionPadding,\n [`${componentCls}-icon`]: {\n marginInlineEnd: marginSM,\n fontSize: withDescriptionIconSize,\n lineHeight: 0,\n },\n [`${componentCls}-message`]: {\n display: 'block',\n marginBottom: marginXS,\n color: colorTextHeading,\n fontSize: fontSizeLG,\n },\n [`${componentCls}-description`]: {\n display: 'block',\n color: colorText,\n },\n },\n [`${componentCls}-banner`]: {\n marginBottom: 0,\n border: '0 !important',\n borderRadius: 0,\n },\n };\n};\nexport const genTypeStyle = (token) => {\n const { componentCls, colorSuccess, colorSuccessBorder, colorSuccessBg, colorWarning, colorWarningBorder, colorWarningBg, colorError, colorErrorBorder, colorErrorBg, colorInfo, colorInfoBorder, colorInfoBg, } = token;\n return {\n [componentCls]: {\n '&-success': genAlertTypeStyle(colorSuccessBg, colorSuccessBorder, colorSuccess, token, componentCls),\n '&-info': genAlertTypeStyle(colorInfoBg, colorInfoBorder, colorInfo, token, componentCls),\n '&-warning': genAlertTypeStyle(colorWarningBg, colorWarningBorder, colorWarning, token, componentCls),\n '&-error': Object.assign(Object.assign({}, genAlertTypeStyle(colorErrorBg, colorErrorBorder, colorError, token, componentCls)), { [`${componentCls}-description > pre`]: {\n margin: 0,\n padding: 0,\n } }),\n },\n };\n};\nexport const genActionStyle = (token) => {\n const { componentCls, iconCls, motionDurationMid, marginXS, fontSizeIcon, colorIcon, colorIconHover, } = token;\n return {\n [componentCls]: {\n '&-action': {\n marginInlineStart: marginXS,\n },\n [`${componentCls}-close-icon`]: {\n marginInlineStart: marginXS,\n padding: 0,\n overflow: 'hidden',\n fontSize: fontSizeIcon,\n lineHeight: unit(fontSizeIcon),\n backgroundColor: 'transparent',\n border: 'none',\n outline: 'none',\n cursor: 'pointer',\n [`${iconCls}-close`]: {\n color: colorIcon,\n transition: `color ${motionDurationMid}`,\n '&:hover': {\n color: colorIconHover,\n },\n },\n },\n '&-close-text': {\n color: colorIcon,\n transition: `color ${motionDurationMid}`,\n '&:hover': {\n color: colorIconHover,\n },\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => {\n const paddingHorizontal = 12; // Fixed value here.\n return {\n withDescriptionIconSize: token.fontSizeHeading3,\n defaultPadding: `${token.paddingContentVerticalSM}px ${paddingHorizontal}px`,\n withDescriptionPadding: `${token.paddingMD}px ${token.paddingContentHorizontalLG}px`,\n };\n};\nexport default genStyleHooks('Alert', (token) => [genBaseStyle(token), genTypeStyle(token), genActionStyle(token)], prepareComponentToken);\n","import * as React from 'react';\nexport const defaultPrefixCls = 'ant';\nexport const defaultIconPrefixCls = 'anticon';\nexport const Variants = ['outlined', 'borderless', 'filled', 'underlined'];\nconst defaultGetPrefixCls = (suffixCls, customizePrefixCls) => {\n if (customizePrefixCls) {\n return customizePrefixCls;\n }\n return suffixCls ? `${defaultPrefixCls}-${suffixCls}` : defaultPrefixCls;\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will cause circular dependency.\nexport const ConfigContext = React.createContext({\n // We provide a default function for Context without provider\n getPrefixCls: defaultGetPrefixCls,\n iconPrefixCls: defaultIconPrefixCls,\n});\nexport const { Consumer: ConfigConsumer } = ConfigContext;\nconst EMPTY_OBJECT = {};\n/**\n * Get ConfigProvider configured component props.\n * This help to reduce bundle size for saving `?.` operator.\n * Do not use as `useMemo` deps since we do not cache the object here.\n *\n * NOTE: not refactor this with `useMemo` since memo will cost another memory space,\n * which will waste both compare calculation & memory.\n */\nexport function useComponentConfig(propName) {\n const context = React.useContext(ConfigContext);\n const { getPrefixCls, direction, getPopupContainer } = context;\n const propValue = context[propName];\n return Object.assign(Object.assign({ classNames: EMPTY_OBJECT, styles: EMPTY_OBJECT }, propValue), { getPrefixCls,\n direction,\n getPopupContainer });\n}\n","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","import { unit } from '@ant-design/cssinjs';\nimport { clearFix, resetComponent, textEllipsis } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Styles ==============================\n// ============================== Head ==============================\nconst genCardHeadStyle = (token) => {\n const { antCls, componentCls, headerHeight, headerPadding, tabsMarginBottom } = token;\n return Object.assign(Object.assign({ display: 'flex', justifyContent: 'center', flexDirection: 'column', minHeight: headerHeight, marginBottom: -1, padding: `0 ${unit(headerPadding)}`, color: token.colorTextHeading, fontWeight: token.fontWeightStrong, fontSize: token.headerFontSize, background: token.headerBg, borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorderSecondary}`, borderRadius: `${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)} 0 0` }, clearFix()), { '&-wrapper': {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n }, '&-title': Object.assign(Object.assign({ display: 'inline-block', flex: 1 }, textEllipsis), { [`\n > ${componentCls}-typography,\n > ${componentCls}-typography-edit-content\n `]: {\n insetInlineStart: 0,\n marginTop: 0,\n marginBottom: 0,\n } }), [`${antCls}-tabs-top`]: {\n clear: 'both',\n marginBottom: tabsMarginBottom,\n color: token.colorText,\n fontWeight: 'normal',\n fontSize: token.fontSize,\n '&-bar': {\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorderSecondary}`,\n },\n } });\n};\n// ============================== Grid ==============================\nconst genCardGridStyle = (token) => {\n const { cardPaddingBase, colorBorderSecondary, cardShadow, lineWidth } = token;\n return {\n width: '33.33%',\n padding: cardPaddingBase,\n border: 0,\n borderRadius: 0,\n boxShadow: `\n ${unit(lineWidth)} 0 0 0 ${colorBorderSecondary},\n 0 ${unit(lineWidth)} 0 0 ${colorBorderSecondary},\n ${unit(lineWidth)} ${unit(lineWidth)} 0 0 ${colorBorderSecondary},\n ${unit(lineWidth)} 0 0 0 ${colorBorderSecondary} inset,\n 0 ${unit(lineWidth)} 0 0 ${colorBorderSecondary} inset;\n `,\n transition: `all ${token.motionDurationMid}`,\n '&-hoverable:hover': {\n position: 'relative',\n zIndex: 1,\n boxShadow: cardShadow,\n },\n };\n};\n// ============================== Actions ==============================\nconst genCardActionsStyle = (token) => {\n const { componentCls, iconCls, actionsLiMargin, cardActionsIconSize, colorBorderSecondary, actionsBg, } = token;\n return Object.assign(Object.assign({ margin: 0, padding: 0, listStyle: 'none', background: actionsBg, borderTop: `${unit(token.lineWidth)} ${token.lineType} ${colorBorderSecondary}`, display: 'flex', borderRadius: `0 0 ${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)}` }, clearFix()), { '& > li': {\n margin: actionsLiMargin,\n color: token.colorTextDescription,\n textAlign: 'center',\n '> span': {\n position: 'relative',\n display: 'block',\n minWidth: token.calc(token.cardActionsIconSize).mul(2).equal(),\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n cursor: 'pointer',\n '&:hover': {\n color: token.colorPrimary,\n transition: `color ${token.motionDurationMid}`,\n },\n [`a:not(${componentCls}-btn), > ${iconCls}`]: {\n display: 'inline-block',\n width: '100%',\n color: token.colorIcon,\n lineHeight: unit(token.fontHeight),\n transition: `color ${token.motionDurationMid}`,\n '&:hover': {\n color: token.colorPrimary,\n },\n },\n [`> ${iconCls}`]: {\n fontSize: cardActionsIconSize,\n lineHeight: unit(token.calc(cardActionsIconSize).mul(token.lineHeight).equal()),\n },\n },\n '&:not(:last-child)': {\n borderInlineEnd: `${unit(token.lineWidth)} ${token.lineType} ${colorBorderSecondary}`,\n },\n } });\n};\n// ============================== Meta ==============================\nconst genCardMetaStyle = (token) => (Object.assign(Object.assign({ margin: `${unit(token.calc(token.marginXXS).mul(-1).equal())} 0`, display: 'flex' }, clearFix()), { '&-avatar': {\n paddingInlineEnd: token.padding,\n }, '&-detail': {\n overflow: 'hidden',\n flex: 1,\n '> div:not(:last-child)': {\n marginBottom: token.marginXS,\n },\n }, '&-title': Object.assign({ color: token.colorTextHeading, fontWeight: token.fontWeightStrong, fontSize: token.fontSizeLG }, textEllipsis), '&-description': {\n color: token.colorTextDescription,\n } }));\n// ============================== Inner ==============================\nconst genCardTypeInnerStyle = (token) => {\n const { componentCls, colorFillAlter, headerPadding, bodyPadding } = token;\n return {\n [`${componentCls}-head`]: {\n padding: `0 ${unit(headerPadding)}`,\n background: colorFillAlter,\n '&-title': {\n fontSize: token.fontSize,\n },\n },\n [`${componentCls}-body`]: {\n padding: `${unit(token.padding)} ${unit(bodyPadding)}`,\n },\n };\n};\n// ============================== Loading ==============================\nconst genCardLoadingStyle = (token) => {\n const { componentCls } = token;\n return {\n overflow: 'hidden',\n [`${componentCls}-body`]: {\n userSelect: 'none',\n },\n };\n};\n// ============================== Basic ==============================\nconst genCardStyle = (token) => {\n const { componentCls, cardShadow, cardHeadPadding, colorBorderSecondary, boxShadowTertiary, bodyPadding, extraColor, } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', background: token.colorBgContainer, borderRadius: token.borderRadiusLG, [`&:not(${componentCls}-bordered)`]: {\n boxShadow: boxShadowTertiary,\n }, [`${componentCls}-head`]: genCardHeadStyle(token), [`${componentCls}-extra`]: {\n // https://stackoverflow.com/a/22429853/3040605\n marginInlineStart: 'auto',\n color: extraColor,\n fontWeight: 'normal',\n fontSize: token.fontSize,\n }, [`${componentCls}-body`]: Object.assign({ padding: bodyPadding, borderRadius: `0 0 ${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)}` }, clearFix()), [`${componentCls}-grid`]: genCardGridStyle(token), [`${componentCls}-cover`]: {\n '> *': {\n display: 'block',\n width: '100%',\n borderRadius: `${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)} 0 0`,\n },\n }, [`${componentCls}-actions`]: genCardActionsStyle(token), [`${componentCls}-meta`]: genCardMetaStyle(token) }),\n [`${componentCls}-bordered`]: {\n border: `${unit(token.lineWidth)} ${token.lineType} ${colorBorderSecondary}`,\n [`${componentCls}-cover`]: {\n marginTop: -1,\n marginInlineStart: -1,\n marginInlineEnd: -1,\n },\n },\n [`${componentCls}-hoverable`]: {\n cursor: 'pointer',\n transition: `box-shadow ${token.motionDurationMid}, border-color ${token.motionDurationMid}`,\n '&:hover': {\n borderColor: 'transparent',\n boxShadow: cardShadow,\n },\n },\n [`${componentCls}-contain-grid`]: {\n borderRadius: `${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)} 0 0 `,\n [`${componentCls}-body`]: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n [`&:not(${componentCls}-loading) ${componentCls}-body`]: {\n marginBlockStart: token.calc(token.lineWidth).mul(-1).equal(),\n marginInlineStart: token.calc(token.lineWidth).mul(-1).equal(),\n padding: 0,\n },\n },\n [`${componentCls}-contain-tabs`]: {\n [`> div${componentCls}-head`]: {\n minHeight: 0,\n [`${componentCls}-head-title, ${componentCls}-extra`]: {\n paddingTop: cardHeadPadding,\n },\n },\n },\n [`${componentCls}-type-inner`]: genCardTypeInnerStyle(token),\n [`${componentCls}-loading`]: genCardLoadingStyle(token),\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n };\n};\n// ============================== Size ==============================\nconst genCardSizeStyle = (token) => {\n const { componentCls, bodyPaddingSM, headerPaddingSM, headerHeightSM, headerFontSizeSM } = token;\n return {\n [`${componentCls}-small`]: {\n [`> ${componentCls}-head`]: {\n minHeight: headerHeightSM,\n padding: `0 ${unit(headerPaddingSM)}`,\n fontSize: headerFontSizeSM,\n [`> ${componentCls}-head-wrapper`]: {\n [`> ${componentCls}-extra`]: {\n fontSize: token.fontSize,\n },\n },\n },\n [`> ${componentCls}-body`]: {\n padding: bodyPaddingSM,\n },\n },\n [`${componentCls}-small${componentCls}-contain-tabs`]: {\n [`> ${componentCls}-head`]: {\n [`${componentCls}-head-title, ${componentCls}-extra`]: {\n paddingTop: 0,\n display: 'flex',\n alignItems: 'center',\n },\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => {\n var _a, _b;\n return ({\n headerBg: 'transparent',\n headerFontSize: token.fontSizeLG,\n headerFontSizeSM: token.fontSize,\n headerHeight: token.fontSizeLG * token.lineHeightLG + token.padding * 2,\n headerHeightSM: token.fontSize * token.lineHeight + token.paddingXS * 2,\n actionsBg: token.colorBgContainer,\n actionsLiMargin: `${token.paddingSM}px 0`,\n tabsMarginBottom: -token.padding - token.lineWidth,\n extraColor: token.colorText,\n bodyPaddingSM: 12, // Fixed padding.\n headerPaddingSM: 12,\n bodyPadding: (_a = token.bodyPadding) !== null && _a !== void 0 ? _a : token.paddingLG,\n headerPadding: (_b = token.headerPadding) !== null && _b !== void 0 ? _b : token.paddingLG,\n });\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Card', (token) => {\n const cardToken = mergeToken(token, {\n cardShadow: token.boxShadowCard,\n cardHeadPadding: token.padding,\n cardPaddingBase: token.paddingLG,\n cardActionsIconSize: token.fontSize,\n });\n return [\n // Style\n genCardStyle(cardToken),\n // Size\n genCardSizeStyle(cardToken),\n ];\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { AggregationColor } from '../../color-picker/color';\nimport { isBright } from '../../color-picker/components/ColorPresets';\nimport { getLineHeight, mergeToken } from '../../theme/internal';\nimport { PresetColors } from '../../theme/interface';\nimport getAlphaColor from '../../theme/util/getAlphaColor';\nexport const prepareToken = (token) => {\n const { paddingInline, onlyIconSize } = token;\n const buttonToken = mergeToken(token, {\n buttonPaddingHorizontal: paddingInline,\n buttonPaddingVertical: 0,\n buttonIconOnlyFontSize: onlyIconSize,\n });\n return buttonToken;\n};\nexport const prepareComponentToken = (token) => {\n var _a, _b, _c, _d, _e, _f;\n const contentFontSize = (_a = token.contentFontSize) !== null && _a !== void 0 ? _a : token.fontSize;\n const contentFontSizeSM = (_b = token.contentFontSizeSM) !== null && _b !== void 0 ? _b : token.fontSize;\n const contentFontSizeLG = (_c = token.contentFontSizeLG) !== null && _c !== void 0 ? _c : token.fontSizeLG;\n const contentLineHeight = (_d = token.contentLineHeight) !== null && _d !== void 0 ? _d : getLineHeight(contentFontSize);\n const contentLineHeightSM = (_e = token.contentLineHeightSM) !== null && _e !== void 0 ? _e : getLineHeight(contentFontSizeSM);\n const contentLineHeightLG = (_f = token.contentLineHeightLG) !== null && _f !== void 0 ? _f : getLineHeight(contentFontSizeLG);\n const solidTextColor = isBright(new AggregationColor(token.colorBgSolid), '#fff')\n ? '#000'\n : '#fff';\n const shadowColorTokens = PresetColors.reduce((prev, colorKey) => (Object.assign(Object.assign({}, prev), { [`${colorKey}ShadowColor`]: `0 ${unit(token.controlOutlineWidth)} 0 ${getAlphaColor(token[`${colorKey}1`], token.colorBgContainer)}` })), {});\n return Object.assign(Object.assign({}, shadowColorTokens), { fontWeight: 400, iconGap: token.marginXS, defaultShadow: `0 ${token.controlOutlineWidth}px 0 ${token.controlTmpOutline}`, primaryShadow: `0 ${token.controlOutlineWidth}px 0 ${token.controlOutline}`, dangerShadow: `0 ${token.controlOutlineWidth}px 0 ${token.colorErrorOutline}`, primaryColor: token.colorTextLightSolid, dangerColor: token.colorTextLightSolid, borderColorDisabled: token.colorBorder, defaultGhostColor: token.colorBgContainer, ghostBg: 'transparent', defaultGhostBorderColor: token.colorBgContainer, paddingInline: token.paddingContentHorizontal - token.lineWidth, paddingInlineLG: token.paddingContentHorizontal - token.lineWidth, paddingInlineSM: 8 - token.lineWidth, onlyIconSize: 'inherit', onlyIconSizeSM: 'inherit', onlyIconSizeLG: 'inherit', groupBorderColor: token.colorPrimaryHover, linkHoverBg: 'transparent', textTextColor: token.colorText, textTextHoverColor: token.colorText, textTextActiveColor: token.colorText, textHoverBg: token.colorFillTertiary, defaultColor: token.colorText, defaultBg: token.colorBgContainer, defaultBorderColor: token.colorBorder, defaultBorderColorDisabled: token.colorBorder, defaultHoverBg: token.colorBgContainer, defaultHoverColor: token.colorPrimaryHover, defaultHoverBorderColor: token.colorPrimaryHover, defaultActiveBg: token.colorBgContainer, defaultActiveColor: token.colorPrimaryActive, defaultActiveBorderColor: token.colorPrimaryActive, solidTextColor,\n contentFontSize,\n contentFontSizeSM,\n contentFontSizeLG,\n contentLineHeight,\n contentLineHeightSM,\n contentLineHeightLG, paddingBlock: Math.max((token.controlHeight - contentFontSize * contentLineHeight) / 2 - token.lineWidth, 0), paddingBlockSM: Math.max((token.controlHeightSM - contentFontSizeSM * contentLineHeightSM) / 2 - token.lineWidth, 0), paddingBlockLG: Math.max((token.controlHeightLG - contentFontSizeLG * contentLineHeightLG) / 2 - token.lineWidth, 0) });\n};\n","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Styles ==============================\nconst genBaseStyle = (token) => {\n const { paddingXXS, lineWidth, tagPaddingHorizontal, componentCls, calc } = token;\n const paddingInline = calc(tagPaddingHorizontal).sub(lineWidth).equal();\n const iconMarginInline = calc(paddingXXS).sub(lineWidth).equal();\n return {\n // Result\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { display: 'inline-block', height: 'auto', \n // https://github.com/ant-design/ant-design/pull/47504\n marginInlineEnd: token.marginXS, paddingInline, fontSize: token.tagFontSize, lineHeight: token.tagLineHeight, whiteSpace: 'nowrap', background: token.defaultBg, border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`, borderRadius: token.borderRadiusSM, opacity: 1, transition: `all ${token.motionDurationMid}`, textAlign: 'start', position: 'relative', \n // RTL\n [`&${componentCls}-rtl`]: {\n direction: 'rtl',\n }, '&, a, a:hover': {\n color: token.defaultColor,\n }, [`${componentCls}-close-icon`]: {\n marginInlineStart: iconMarginInline,\n fontSize: token.tagIconSize,\n color: token.colorIcon,\n cursor: 'pointer',\n transition: `all ${token.motionDurationMid}`,\n '&:hover': {\n color: token.colorTextHeading,\n },\n }, [`&${componentCls}-has-color`]: {\n borderColor: 'transparent',\n [`&, a, a:hover, ${token.iconCls}-close, ${token.iconCls}-close:hover`]: {\n color: token.colorTextLightSolid,\n },\n }, '&-checkable': {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n cursor: 'pointer',\n [`&:not(${componentCls}-checkable-checked):hover`]: {\n color: token.colorPrimary,\n backgroundColor: token.colorFillSecondary,\n },\n '&:active, &-checked': {\n color: token.colorTextLightSolid,\n },\n '&-checked': {\n backgroundColor: token.colorPrimary,\n '&:hover': {\n backgroundColor: token.colorPrimaryHover,\n },\n },\n '&:active': {\n backgroundColor: token.colorPrimaryActive,\n },\n }, '&-hidden': {\n display: 'none',\n }, \n // To ensure that a space will be placed between character and `Icon`.\n [`> ${token.iconCls} + span, > span + ${token.iconCls}`]: {\n marginInlineStart: paddingInline,\n } }),\n [`${componentCls}-borderless`]: {\n borderColor: 'transparent',\n background: token.tagBorderlessBg,\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareToken = (token) => {\n const { lineWidth, fontSizeIcon, calc } = token;\n const tagFontSize = token.fontSizeSM;\n const tagToken = mergeToken(token, {\n tagFontSize,\n tagLineHeight: unit(calc(token.lineHeightSM).mul(tagFontSize).equal()),\n tagIconSize: calc(fontSizeIcon).sub(calc(lineWidth).mul(2)).equal(), // Tag icon is much smaller\n tagPaddingHorizontal: 8, // Fixed padding.\n tagBorderlessBg: token.defaultBg,\n });\n return tagToken;\n};\nexport const prepareComponentToken = (token) => ({\n defaultBg: new FastColor(token.colorFillQuaternary)\n .onBackground(token.colorBgContainer)\n .toHexString(),\n defaultColor: token.colorText,\n});\nexport default genStyleHooks('Tag', (token) => {\n const tagToken = prepareToken(token);\n return genBaseStyle(tagToken);\n}, prepareComponentToken);\n","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import { Keyframes } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst antSpinMove = new Keyframes('antSpinMove', {\n to: { opacity: 1 },\n});\nconst antRotate = new Keyframes('antRotate', {\n to: { transform: 'rotate(405deg)' },\n});\nconst genSpinStyle = (token) => {\n const { componentCls, calc } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'absolute', display: 'none', color: token.colorPrimary, fontSize: 0, textAlign: 'center', verticalAlign: 'middle', opacity: 0, transition: `transform ${token.motionDurationSlow} ${token.motionEaseInOutCirc}`, '&-spinning': {\n position: 'relative',\n display: 'inline-block',\n opacity: 1,\n }, [`${componentCls}-text`]: {\n fontSize: token.fontSize,\n paddingTop: calc(calc(token.dotSize).sub(token.fontSize)).div(2).add(2).equal(),\n }, '&-fullscreen': {\n position: 'fixed',\n width: '100vw',\n height: '100vh',\n backgroundColor: token.colorBgMask,\n zIndex: token.zIndexPopupBase,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n justifyContent: 'center',\n opacity: 0,\n visibility: 'hidden',\n transition: `all ${token.motionDurationMid}`,\n '&-show': {\n opacity: 1,\n visibility: 'visible',\n },\n [componentCls]: {\n [`${componentCls}-dot-holder`]: {\n color: token.colorWhite,\n },\n [`${componentCls}-text`]: {\n color: token.colorTextLightSolid,\n },\n },\n }, '&-nested-loading': {\n position: 'relative',\n [`> div > ${componentCls}`]: {\n position: 'absolute',\n top: 0,\n insetInlineStart: 0,\n zIndex: 4,\n display: 'block',\n width: '100%',\n height: '100%',\n maxHeight: token.contentHeight,\n [`${componentCls}-dot`]: {\n position: 'absolute',\n top: '50%',\n insetInlineStart: '50%',\n margin: calc(token.dotSize).mul(-1).div(2).equal(),\n },\n [`${componentCls}-text`]: {\n position: 'absolute',\n top: '50%',\n width: '100%',\n textShadow: `0 1px 2px ${token.colorBgContainer}`, // FIXME: shadow\n },\n [`&${componentCls}-show-text ${componentCls}-dot`]: {\n marginTop: calc(token.dotSize).div(2).mul(-1).sub(10).equal(),\n },\n '&-sm': {\n [`${componentCls}-dot`]: {\n margin: calc(token.dotSizeSM).mul(-1).div(2).equal(),\n },\n [`${componentCls}-text`]: {\n paddingTop: calc(calc(token.dotSizeSM).sub(token.fontSize)).div(2).add(2).equal(),\n },\n [`&${componentCls}-show-text ${componentCls}-dot`]: {\n marginTop: calc(token.dotSizeSM).div(2).mul(-1).sub(10).equal(),\n },\n },\n '&-lg': {\n [`${componentCls}-dot`]: {\n margin: calc(token.dotSizeLG).mul(-1).div(2).equal(),\n },\n [`${componentCls}-text`]: {\n paddingTop: calc(calc(token.dotSizeLG).sub(token.fontSize)).div(2).add(2).equal(),\n },\n [`&${componentCls}-show-text ${componentCls}-dot`]: {\n marginTop: calc(token.dotSizeLG).div(2).mul(-1).sub(10).equal(),\n },\n },\n },\n [`${componentCls}-container`]: {\n position: 'relative',\n transition: `opacity ${token.motionDurationSlow}`,\n '&::after': {\n position: 'absolute',\n top: 0,\n insetInlineEnd: 0,\n bottom: 0,\n insetInlineStart: 0,\n zIndex: 10,\n width: '100%',\n height: '100%',\n background: token.colorBgContainer,\n opacity: 0,\n transition: `all ${token.motionDurationSlow}`,\n content: '\"\"',\n pointerEvents: 'none',\n },\n },\n [`${componentCls}-blur`]: {\n clear: 'both',\n opacity: 0.5,\n userSelect: 'none',\n pointerEvents: 'none',\n '&::after': {\n opacity: 0.4,\n pointerEvents: 'auto',\n },\n },\n }, \n // tip\n // ------------------------------\n '&-tip': {\n color: token.spinDotDefault,\n }, \n // holder\n // ------------------------------\n [`${componentCls}-dot-holder`]: {\n width: '1em',\n height: '1em',\n fontSize: token.dotSize,\n display: 'inline-block',\n transition: `transform ${token.motionDurationSlow} ease, opacity ${token.motionDurationSlow} ease`,\n transformOrigin: '50% 50%',\n lineHeight: 1,\n color: token.colorPrimary,\n '&-hidden': {\n transform: 'scale(0.3)',\n opacity: 0,\n },\n }, \n // progress\n // ------------------------------\n [`${componentCls}-dot-progress`]: {\n position: 'absolute',\n inset: 0,\n }, \n // dots\n // ------------------------------\n [`${componentCls}-dot`]: {\n position: 'relative',\n display: 'inline-block',\n fontSize: token.dotSize,\n width: '1em',\n height: '1em',\n '&-item': {\n position: 'absolute',\n display: 'block',\n width: calc(token.dotSize).sub(calc(token.marginXXS).div(2)).div(2).equal(),\n height: calc(token.dotSize).sub(calc(token.marginXXS).div(2)).div(2).equal(),\n background: 'currentColor',\n borderRadius: '100%',\n transform: 'scale(0.75)',\n transformOrigin: '50% 50%',\n opacity: 0.3,\n animationName: antSpinMove,\n animationDuration: '1s',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'linear',\n animationDirection: 'alternate',\n '&:nth-child(1)': {\n top: 0,\n insetInlineStart: 0,\n animationDelay: '0s',\n },\n '&:nth-child(2)': {\n top: 0,\n insetInlineEnd: 0,\n animationDelay: '0.4s',\n },\n '&:nth-child(3)': {\n insetInlineEnd: 0,\n bottom: 0,\n animationDelay: '0.8s',\n },\n '&:nth-child(4)': {\n bottom: 0,\n insetInlineStart: 0,\n animationDelay: '1.2s',\n },\n },\n '&-spin': {\n transform: 'rotate(45deg)',\n animationName: antRotate,\n animationDuration: '1.2s',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'linear',\n },\n '&-circle': {\n strokeLinecap: 'round',\n transition: ['stroke-dashoffset', 'stroke-dasharray', 'stroke', 'stroke-width', 'opacity']\n .map((item) => `${item} ${token.motionDurationSlow} ease`)\n .join(','),\n fillOpacity: 0,\n stroke: 'currentcolor',\n },\n '&-circle-bg': {\n stroke: token.colorFillSecondary,\n },\n }, \n // small\n [`&-sm ${componentCls}-dot`]: {\n '&, &-holder': {\n fontSize: token.dotSizeSM,\n },\n }, [`&-sm ${componentCls}-dot-holder`]: {\n i: {\n width: calc(calc(token.dotSizeSM).sub(calc(token.marginXXS).div(2)))\n .div(2)\n .equal(),\n height: calc(calc(token.dotSizeSM).sub(calc(token.marginXXS).div(2)))\n .div(2)\n .equal(),\n },\n }, \n // large\n [`&-lg ${componentCls}-dot`]: {\n '&, &-holder': {\n fontSize: token.dotSizeLG,\n },\n }, [`&-lg ${componentCls}-dot-holder`]: {\n i: {\n width: calc(calc(token.dotSizeLG).sub(token.marginXXS)).div(2).equal(),\n height: calc(calc(token.dotSizeLG).sub(token.marginXXS)).div(2).equal(),\n },\n }, [`&${componentCls}-show-text ${componentCls}-text`]: {\n display: 'block',\n } }),\n };\n};\nexport const prepareComponentToken = (token) => {\n const { controlHeightLG, controlHeight } = token;\n return {\n contentHeight: 400,\n dotSize: controlHeightLG / 2,\n dotSizeSM: controlHeightLG * 0.35,\n dotSizeLG: controlHeight,\n };\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Spin', (token) => {\n const spinToken = mergeToken(token, {\n spinDotDefault: token.colorTextDescription,\n });\n return genSpinStyle(spinToken);\n}, prepareComponentToken);\n","import { genStyleHooks } from '../../theme/internal';\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, iconCls, antCls, zIndexPopup, colorText, colorWarning, marginXXS, marginXS, fontSize, fontWeightStrong, colorTextHeading, } = token;\n return {\n [componentCls]: {\n zIndex: zIndexPopup,\n [`&${antCls}-popover`]: {\n fontSize,\n },\n [`${componentCls}-message`]: {\n marginBottom: marginXS,\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'start',\n [`> ${componentCls}-message-icon ${iconCls}`]: {\n color: colorWarning,\n fontSize,\n lineHeight: 1,\n marginInlineEnd: marginXS,\n },\n [`${componentCls}-title`]: {\n fontWeight: fontWeightStrong,\n color: colorTextHeading,\n '&:only-child': {\n fontWeight: 'normal',\n },\n },\n [`${componentCls}-description`]: {\n marginTop: marginXXS,\n color: colorText,\n },\n },\n [`${componentCls}-buttons`]: {\n textAlign: 'end',\n whiteSpace: 'nowrap',\n button: {\n marginInlineStart: marginXS,\n },\n },\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => {\n const { zIndexPopupBase } = token;\n return {\n zIndexPopup: zIndexPopupBase + 60,\n };\n};\nexport default genStyleHooks('Popconfirm', (token) => genBaseStyle(token), prepareComponentToken, {\n resetStyle: false,\n});\n","import React from 'react';\nimport defaultSeedToken from './themes/seed';\nexport { default as defaultTheme } from './themes/default/theme';\n// ================================ Context =================================\n// To ensure snapshot stable. We disable hashed in test env.\nexport const defaultConfig = {\n token: defaultSeedToken,\n override: { override: defaultSeedToken },\n hashed: true,\n};\nexport const DesignTokenContext = React.createContext(defaultConfig);\n","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nexport { _arrayLikeToArray as default };","import enUS from '../../date-picker/locale/en_US';\nexport default enUS;\n","// ============================ Directory =============================\nexport const genDirectoryStyle = ({ treeCls, treeNodeCls, directoryNodeSelectedBg, directoryNodeSelectedColor, motionDurationMid, borderRadius, controlItemBgHover, }) => ({\n [`${treeCls}${treeCls}-directory ${treeNodeCls}`]: {\n // >>> Title\n [`${treeCls}-node-content-wrapper`]: {\n position: 'static',\n [`&:has(${treeCls}-drop-indicator)`]: {\n position: 'relative',\n },\n [`> *:not(${treeCls}-drop-indicator)`]: {\n position: 'relative',\n },\n '&:hover': {\n background: 'transparent',\n },\n // Expand interactive area to whole line\n '&:before': {\n position: 'absolute',\n inset: 0,\n transition: `background-color ${motionDurationMid}`,\n content: '\"\"',\n borderRadius,\n },\n '&:hover:before': {\n background: controlItemBgHover,\n },\n },\n [`${treeCls}-switcher, ${treeCls}-checkbox, ${treeCls}-draggable-icon`]: {\n zIndex: 1,\n },\n // ============= Selected =============\n '&-selected': {\n background: directoryNodeSelectedBg,\n borderRadius,\n [`${treeCls}-switcher, ${treeCls}-draggable-icon`]: {\n color: directoryNodeSelectedColor,\n },\n // >>> Title\n [`${treeCls}-node-content-wrapper`]: {\n color: directoryNodeSelectedColor,\n background: 'transparent',\n '&, &:hover': {\n color: directoryNodeSelectedColor,\n },\n '&:before, &:hover:before': {\n background: directoryNodeSelectedBg,\n },\n },\n },\n },\n});\n","import { Keyframes, unit } from '@ant-design/cssinjs';\nimport { getStyle as getCheckboxStyle } from '../../checkbox/style';\nimport { genFocusOutline, resetComponent } from '../../style';\nimport { genCollapseMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { genDirectoryStyle } from './directory';\n// ============================ Keyframes =============================\nconst treeNodeFX = new Keyframes('ant-tree-node-fx-do-not-use', {\n '0%': {\n opacity: 0,\n },\n '100%': {\n opacity: 1,\n },\n});\n// ============================== Switch ==============================\nconst getSwitchStyle = (prefixCls, token) => ({\n [`.${prefixCls}-switcher-icon`]: {\n display: 'inline-block',\n fontSize: 10,\n verticalAlign: 'baseline',\n svg: {\n transition: `transform ${token.motionDurationSlow}`,\n },\n },\n});\n// =============================== Drop ===============================\nconst getDropIndicatorStyle = (prefixCls, token) => ({\n [`.${prefixCls}-drop-indicator`]: {\n position: 'absolute',\n // it should displayed over the following node\n zIndex: 1,\n height: 2,\n backgroundColor: token.colorPrimary,\n borderRadius: 1,\n pointerEvents: 'none',\n '&:after': {\n position: 'absolute',\n top: -3,\n insetInlineStart: -6,\n width: 8,\n height: 8,\n backgroundColor: 'transparent',\n border: `${unit(token.lineWidthBold)} solid ${token.colorPrimary}`,\n borderRadius: '50%',\n content: '\"\"',\n },\n },\n});\nexport const genBaseStyle = (prefixCls, token) => {\n const { treeCls, treeNodeCls, treeNodePadding, titleHeight, indentSize, nodeSelectedBg, nodeHoverBg, colorTextQuaternary, controlItemBgActiveDisabled, } = token;\n return {\n [treeCls]: Object.assign(Object.assign({}, resetComponent(token)), { \n // fix https://github.com/ant-design/ant-design/issues/50316\n ['--rc-virtual-list-scrollbar-bg']: token.colorSplit, background: token.colorBgContainer, borderRadius: token.borderRadius, transition: `background-color ${token.motionDurationSlow}`, '&-rtl': {\n direction: 'rtl',\n }, [`&${treeCls}-rtl ${treeCls}-switcher_close ${treeCls}-switcher-icon svg`]: {\n transform: 'rotate(90deg)',\n }, [`&-focused:not(:hover):not(${treeCls}-active-focused)`]: genFocusOutline(token), \n // =================== Virtual List ===================\n [`${treeCls}-list-holder-inner`]: {\n alignItems: 'flex-start',\n }, [`&${treeCls}-block-node`]: {\n [`${treeCls}-list-holder-inner`]: {\n alignItems: 'stretch',\n // >>> Title\n [`${treeCls}-node-content-wrapper`]: {\n flex: 'auto',\n },\n // >>> Drag\n [`${treeNodeCls}.dragging:after`]: {\n position: 'absolute',\n inset: 0,\n border: `1px solid ${token.colorPrimary}`,\n opacity: 0,\n animationName: treeNodeFX,\n animationDuration: token.motionDurationSlow,\n animationPlayState: 'running',\n animationFillMode: 'forwards',\n content: '\"\"',\n pointerEvents: 'none',\n borderRadius: token.borderRadius,\n },\n },\n }, \n // ===================== TreeNode =====================\n [treeNodeCls]: {\n display: 'flex',\n alignItems: 'flex-start',\n marginBottom: treeNodePadding,\n lineHeight: unit(titleHeight),\n position: 'relative',\n // 非常重要,避免 drop-indicator 在拖拽过程中闪烁\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 1,\n insetInlineStart: 0,\n width: '100%',\n top: '100%',\n height: treeNodePadding,\n },\n // Disabled\n [`&-disabled ${treeCls}-node-content-wrapper`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n '&:hover': {\n background: 'transparent',\n },\n },\n [`${treeCls}-checkbox-disabled + ${treeCls}-node-selected,&${treeNodeCls}-disabled${treeNodeCls}-selected ${treeCls}-node-content-wrapper`]: {\n backgroundColor: controlItemBgActiveDisabled,\n },\n // we can not set pointer-events to none for checkbox in tree\n // ref: https://github.com/ant-design/ant-design/issues/39822#issuecomment-2605234058\n [`${treeCls}-checkbox-disabled`]: {\n pointerEvents: 'unset',\n },\n // not disable\n [`&:not(${treeNodeCls}-disabled)`]: {\n // >>> Title\n [`${treeCls}-node-content-wrapper`]: {\n '&:hover': {\n color: token.nodeHoverColor,\n },\n },\n },\n [`&-active ${treeCls}-node-content-wrapper`]: {\n background: token.controlItemBgHover,\n },\n [`&:not(${treeNodeCls}-disabled).filter-node ${treeCls}-title`]: {\n color: token.colorPrimary,\n fontWeight: token.fontWeightStrong,\n },\n '&-draggable': {\n cursor: 'grab',\n [`${treeCls}-draggable-icon`]: {\n // https://github.com/ant-design/ant-design/issues/41915\n flexShrink: 0,\n width: titleHeight,\n textAlign: 'center',\n visibility: 'visible',\n color: colorTextQuaternary,\n },\n [`&${treeNodeCls}-disabled ${treeCls}-draggable-icon`]: {\n visibility: 'hidden',\n },\n },\n }, \n // >>> Indent\n [`${treeCls}-indent`]: {\n alignSelf: 'stretch',\n whiteSpace: 'nowrap',\n userSelect: 'none',\n '&-unit': {\n display: 'inline-block',\n width: indentSize,\n },\n }, \n // >>> Drag Handler\n [`${treeCls}-draggable-icon`]: {\n visibility: 'hidden',\n }, \n // Switcher / Checkbox\n [`${treeCls}-switcher, ${treeCls}-checkbox`]: {\n marginInlineEnd: token\n .calc(token.calc(titleHeight).sub(token.controlInteractiveSize))\n .div(2)\n .equal(),\n }, \n // >>> Switcher\n [`${treeCls}-switcher`]: Object.assign(Object.assign({}, getSwitchStyle(prefixCls, token)), { position: 'relative', flex: 'none', alignSelf: 'stretch', width: titleHeight, textAlign: 'center', cursor: 'pointer', userSelect: 'none', transition: `all ${token.motionDurationSlow}`, '&-noop': {\n cursor: 'unset',\n }, '&:before': {\n pointerEvents: 'none',\n content: '\"\"',\n width: titleHeight,\n height: titleHeight,\n position: 'absolute',\n left: {\n _skip_check_: true,\n value: 0,\n },\n top: 0,\n borderRadius: token.borderRadius,\n transition: `all ${token.motionDurationSlow}`,\n }, [`&:not(${treeCls}-switcher-noop):hover:before`]: {\n backgroundColor: token.colorBgTextHover,\n }, [`&_close ${treeCls}-switcher-icon svg`]: {\n transform: 'rotate(-90deg)',\n }, '&-loading-icon': {\n color: token.colorPrimary,\n }, '&-leaf-line': {\n position: 'relative',\n zIndex: 1,\n display: 'inline-block',\n width: '100%',\n height: '100%',\n // https://github.com/ant-design/ant-design/issues/31884\n '&:before': {\n position: 'absolute',\n top: 0,\n insetInlineEnd: token.calc(titleHeight).div(2).equal(),\n bottom: token.calc(treeNodePadding).mul(-1).equal(),\n marginInlineStart: -1,\n borderInlineEnd: `1px solid ${token.colorBorder}`,\n content: '\"\"',\n },\n '&:after': {\n position: 'absolute',\n width: token.calc(token.calc(titleHeight).div(2).equal()).mul(0.8).equal(),\n height: token.calc(titleHeight).div(2).equal(),\n borderBottom: `1px solid ${token.colorBorder}`,\n content: '\"\"',\n },\n } }), \n // >>> Title\n // add `${treeCls}-checkbox + span` to cover checkbox `${checkboxCls} + span`\n [`${treeCls}-node-content-wrapper`]: Object.assign(Object.assign({ position: 'relative', minHeight: titleHeight, paddingBlock: 0, paddingInline: token.paddingXS, background: 'transparent', borderRadius: token.borderRadius, cursor: 'pointer', transition: `all ${token.motionDurationMid}, border 0s, line-height 0s, box-shadow 0s` }, getDropIndicatorStyle(prefixCls, token)), { '&:hover': {\n backgroundColor: nodeHoverBg,\n }, [`&${treeCls}-node-selected`]: {\n color: token.nodeSelectedColor,\n backgroundColor: nodeSelectedBg,\n }, \n // Icon\n [`${treeCls}-iconEle`]: {\n display: 'inline-block',\n width: titleHeight,\n height: titleHeight,\n textAlign: 'center',\n verticalAlign: 'top',\n '&:empty': {\n display: 'none',\n },\n } }), \n // https://github.com/ant-design/ant-design/issues/28217\n [`${treeCls}-unselectable ${treeCls}-node-content-wrapper:hover`]: {\n backgroundColor: 'transparent',\n }, [`${treeNodeCls}.drop-container > [draggable]`]: {\n boxShadow: `0 0 0 2px ${token.colorPrimary}`,\n }, \n // ==================== Show Line =====================\n '&-show-line': {\n // ================ Indent lines ================\n [`${treeCls}-indent-unit`]: {\n position: 'relative',\n height: '100%',\n '&:before': {\n position: 'absolute',\n top: 0,\n insetInlineEnd: token.calc(titleHeight).div(2).equal(),\n bottom: token.calc(treeNodePadding).mul(-1).equal(),\n borderInlineEnd: `1px solid ${token.colorBorder}`,\n content: '\"\"',\n },\n '&-end:before': {\n display: 'none',\n },\n },\n // ============== Cover Background ==============\n [`${treeCls}-switcher`]: {\n background: 'transparent',\n '&-line-icon': {\n // https://github.com/ant-design/ant-design/issues/32813\n verticalAlign: '-0.15em',\n },\n },\n }, [`${treeNodeCls}-leaf-last ${treeCls}-switcher-leaf-line:before`]: {\n top: 'auto !important',\n bottom: 'auto !important',\n height: `${unit(token.calc(titleHeight).div(2).equal())} !important`,\n } }),\n };\n};\n// ============================== Merged ==============================\nexport const genTreeStyle = (prefixCls, token, \n/**\n * @descCN 是否启用目录树样式\n * @descEN Whether to enable directory style\n * @default true\n */\nenableDirectory = true) => {\n const treeCls = `.${prefixCls}`;\n const treeNodeCls = `${treeCls}-treenode`;\n const treeNodePadding = token.calc(token.paddingXS).div(2).equal();\n const treeToken = mergeToken(token, {\n treeCls,\n treeNodeCls,\n treeNodePadding,\n });\n return [\n // Basic\n genBaseStyle(prefixCls, treeToken),\n // Directory\n enableDirectory && genDirectoryStyle(treeToken),\n ].filter(Boolean);\n};\nexport const initComponentToken = (token) => {\n const { controlHeightSM, controlItemBgHover, controlItemBgActive } = token;\n const titleHeight = controlHeightSM;\n return {\n titleHeight,\n indentSize: titleHeight,\n nodeHoverBg: controlItemBgHover,\n nodeHoverColor: token.colorText,\n nodeSelectedBg: controlItemBgActive,\n nodeSelectedColor: token.colorText,\n };\n};\nexport const prepareComponentToken = (token) => {\n const { colorTextLightSolid, colorPrimary } = token;\n return Object.assign(Object.assign({}, initComponentToken(token)), { directoryNodeSelectedColor: colorTextLightSolid, directoryNodeSelectedBg: colorPrimary });\n};\nexport default genStyleHooks('Tree', (token, { prefixCls }) => [\n {\n [token.componentCls]: getCheckboxStyle(`${prefixCls}-checkbox`, token),\n },\n genTreeStyle(prefixCls, token),\n genCollapseMotion(token),\n], prepareComponentToken);\n","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"./warning\";\n\n/**\n * Deeply compares two object literals.\n * @param obj1 object 1\n * @param obj2 object 2\n * @param shallow shallow compare\n * @returns\n */\nfunction isEqual(obj1, obj2) {\n var shallow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f\n var refSet = new Set();\n function deepEqual(a, b) {\n var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var circular = refSet.has(a);\n warning(!circular, 'Warning: There may be circular references');\n if (circular) {\n return false;\n }\n if (a === b) {\n return true;\n }\n if (shallow && level > 1) {\n return false;\n }\n refSet.add(a);\n var newLevel = level + 1;\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (var i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i], newLevel)) {\n return false;\n }\n }\n return true;\n }\n if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n var keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) {\n return false;\n }\n return keys.every(function (key) {\n return deepEqual(a[key], b[key], newLevel);\n });\n }\n // other\n return false;\n }\n return deepEqual(obj1, obj2);\n}\nexport default isEqual;","import { unit } from '@ant-design/cssinjs';\nimport { operationUnit, resetComponent, resetIcon, textEllipsis } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genTransferCustomizeStyle = (token) => {\n const { antCls, componentCls, listHeight, controlHeightLG } = token;\n const tableCls = `${antCls}-table`;\n const inputCls = `${antCls}-input`;\n return {\n [`${componentCls}-customize-list`]: {\n [`${componentCls}-list`]: {\n flex: '1 1 50%',\n width: 'auto',\n height: 'auto',\n minHeight: listHeight,\n minWidth: 0,\n },\n // =================== Hook Components ===================\n [`${tableCls}-wrapper`]: {\n [`${tableCls}-small`]: {\n border: 0,\n borderRadius: 0,\n [`${tableCls}-selection-column`]: {\n width: controlHeightLG,\n minWidth: controlHeightLG,\n },\n },\n [`${tableCls}-pagination${tableCls}-pagination`]: {\n margin: 0,\n padding: token.paddingXS,\n },\n },\n [`${inputCls}[disabled]`]: {\n backgroundColor: 'transparent',\n },\n },\n };\n};\nconst genTransferStatusColor = (token, color) => {\n const { componentCls, colorBorder } = token;\n return {\n [`${componentCls}-list`]: {\n borderColor: color,\n '&-search:not([disabled])': {\n borderColor: colorBorder,\n },\n },\n };\n};\nconst genTransferStatusStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-status-error`]: Object.assign({}, genTransferStatusColor(token, token.colorError)),\n [`${componentCls}-status-warning`]: Object.assign({}, genTransferStatusColor(token, token.colorWarning)),\n };\n};\nconst genTransferListStyle = (token) => {\n const { componentCls, colorBorder, colorSplit, lineWidth, itemHeight, headerHeight, transferHeaderVerticalPadding, itemPaddingBlock, controlItemBgActive, colorTextDisabled, colorTextSecondary, listHeight, listWidth, listWidthLG, fontSizeIcon, marginXS, paddingSM, lineType, antCls, iconCls, motionDurationSlow, controlItemBgHover, borderRadiusLG, colorBgContainer, colorText, controlItemBgActiveHover, } = token;\n const contentBorderRadius = unit(token.calc(borderRadiusLG).sub(lineWidth).equal());\n return {\n display: 'flex',\n flexDirection: 'column',\n width: listWidth,\n height: listHeight,\n border: `${unit(lineWidth)} ${lineType} ${colorBorder}`,\n borderRadius: token.borderRadiusLG,\n '&-with-pagination': {\n width: listWidthLG,\n height: 'auto',\n },\n '&-search': {\n [`${iconCls}-search`]: {\n color: colorTextDisabled,\n },\n },\n '&-header': {\n display: 'flex',\n flex: 'none',\n alignItems: 'center',\n height: headerHeight,\n // border-top is on the transfer dom. We should minus 1px for this\n padding: `${unit(token.calc(transferHeaderVerticalPadding).sub(lineWidth).equal())} ${unit(paddingSM)} ${unit(transferHeaderVerticalPadding)}`,\n color: colorText,\n background: colorBgContainer,\n borderBottom: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n borderRadius: `${unit(borderRadiusLG)} ${unit(borderRadiusLG)} 0 0`,\n '> *:not(:last-child)': {\n marginInlineEnd: 4, // This is magic and fixed number, DO NOT use token since it may change.\n },\n '> *': {\n flex: 'none',\n },\n '&-title': Object.assign(Object.assign({}, textEllipsis), { flex: 'auto', textAlign: 'end' }),\n '&-dropdown': Object.assign(Object.assign({}, resetIcon()), { fontSize: fontSizeIcon, transform: 'translateY(10%)', cursor: 'pointer', '&[disabled]': {\n cursor: 'not-allowed',\n } }),\n },\n '&-body': {\n display: 'flex',\n flex: 'auto',\n flexDirection: 'column',\n fontSize: token.fontSize,\n // https://blog.csdn.net/qq449245884/article/details/107373672/\n minHeight: 0,\n '&-search-wrapper': {\n position: 'relative',\n flex: 'none',\n padding: paddingSM,\n },\n },\n '&-content': {\n flex: 'auto',\n margin: 0,\n padding: 0,\n overflow: 'auto',\n listStyle: 'none',\n borderRadius: `0 0 ${contentBorderRadius} ${contentBorderRadius}`,\n '&-item': {\n display: 'flex',\n alignItems: 'center',\n minHeight: itemHeight,\n padding: `${unit(itemPaddingBlock)} ${unit(paddingSM)}`,\n transition: `all ${motionDurationSlow}`,\n '> *:not(:last-child)': {\n marginInlineEnd: marginXS,\n },\n '> *': {\n flex: 'none',\n },\n '&-text': Object.assign(Object.assign({}, textEllipsis), { flex: 'auto' }),\n '&-remove': Object.assign(Object.assign({}, operationUnit(token)), { color: colorBorder, '&:hover, &:focus': {\n color: colorTextSecondary,\n } }),\n [`&:not(${componentCls}-list-content-item-disabled)`]: {\n '&:hover': {\n backgroundColor: controlItemBgHover,\n cursor: 'pointer',\n },\n [`&${componentCls}-list-content-item-checked:hover`]: {\n backgroundColor: controlItemBgActiveHover,\n },\n },\n '&-checked': {\n backgroundColor: controlItemBgActive,\n },\n '&-disabled': {\n color: colorTextDisabled,\n cursor: 'not-allowed',\n },\n },\n // Do not change hover style when `oneWay` mode\n [`&-show-remove ${componentCls}-list-content-item:not(${componentCls}-list-content-item-disabled):hover`]: {\n background: 'transparent',\n cursor: 'default',\n },\n },\n '&-pagination': {\n padding: token.paddingXS,\n textAlign: 'end',\n borderTop: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n [`${antCls}-pagination-options`]: {\n paddingInlineEnd: token.paddingXS,\n },\n },\n '&-body-not-found': {\n flex: 'none',\n width: '100%',\n margin: 'auto 0',\n color: colorTextDisabled,\n textAlign: 'center',\n },\n '&-footer': {\n borderTop: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n },\n // fix: https://github.com/ant-design/ant-design/issues/44489\n '&-checkbox': {\n lineHeight: 1,\n },\n };\n};\nconst genTransferStyle = (token) => {\n const { antCls, iconCls, componentCls, marginXS, marginXXS, fontSizeIcon, colorBgContainerDisabled, } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', display: 'flex', alignItems: 'stretch', [`${componentCls}-disabled`]: {\n [`${componentCls}-list`]: {\n background: colorBgContainerDisabled,\n },\n }, [`${componentCls}-list`]: genTransferListStyle(token), [`${componentCls}-operation`]: {\n display: 'flex',\n flex: 'none',\n flexDirection: 'column',\n alignSelf: 'center',\n margin: `0 ${unit(marginXS)}`,\n verticalAlign: 'middle',\n gap: marginXXS,\n [`${antCls}-btn ${iconCls}`]: {\n fontSize: fontSizeIcon,\n },\n } }),\n };\n};\nconst genTransferRTLStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n };\n};\nexport const prepareComponentToken = (token) => {\n const { fontSize, lineHeight, controlHeight, controlHeightLG, lineWidth } = token;\n const fontHeight = Math.round(fontSize * lineHeight);\n return {\n listWidth: 180,\n listHeight: 200,\n listWidthLG: 250,\n headerHeight: controlHeightLG,\n itemHeight: controlHeight,\n itemPaddingBlock: (controlHeight - fontHeight) / 2,\n transferHeaderVerticalPadding: Math.ceil((controlHeightLG - lineWidth - fontHeight) / 2),\n };\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Transfer', (token) => {\n const transferToken = mergeToken(token);\n return [\n genTransferStyle(transferToken),\n genTransferCustomizeStyle(transferToken),\n genTransferStatusStyle(transferToken),\n genTransferRTLStyle(transferToken),\n ];\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, antCls, controlSize, dotSize, marginFull, marginPart, colorFillContentHover, handleColorDisabled, calc, handleSize, handleSizeHover, handleActiveColor, handleActiveOutlineColor, handleLineWidth, handleLineWidthHover, motionDurationMid, } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', height: controlSize, margin: `${unit(marginPart)} ${unit(marginFull)}`, padding: 0, cursor: 'pointer', touchAction: 'none', '&-vertical': {\n margin: `${unit(marginFull)} ${unit(marginPart)}`,\n }, [`${componentCls}-rail`]: {\n position: 'absolute',\n backgroundColor: token.railBg,\n borderRadius: token.borderRadiusXS,\n transition: `background-color ${motionDurationMid}`,\n }, [`${componentCls}-track,${componentCls}-tracks`]: {\n position: 'absolute',\n transition: `background-color ${motionDurationMid}`,\n }, [`${componentCls}-track`]: {\n backgroundColor: token.trackBg,\n borderRadius: token.borderRadiusXS,\n }, [`${componentCls}-track-draggable`]: {\n boxSizing: 'content-box',\n backgroundClip: 'content-box',\n border: 'solid rgba(0,0,0,0)',\n }, '&:hover': {\n [`${componentCls}-rail`]: {\n backgroundColor: token.railHoverBg,\n },\n [`${componentCls}-track`]: {\n backgroundColor: token.trackHoverBg,\n },\n [`${componentCls}-dot`]: {\n borderColor: colorFillContentHover,\n },\n [`${componentCls}-handle::after`]: {\n boxShadow: `0 0 0 ${unit(handleLineWidth)} ${token.colorPrimaryBorderHover}`,\n },\n [`${componentCls}-dot-active`]: {\n borderColor: token.dotActiveBorderColor,\n },\n }, [`${componentCls}-handle`]: {\n position: 'absolute',\n width: handleSize,\n height: handleSize,\n outline: 'none',\n userSelect: 'none',\n // Dragging status\n '&-dragging-delete': {\n opacity: 0,\n },\n // 扩大选区\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n insetInlineStart: calc(handleLineWidth).mul(-1).equal(),\n insetBlockStart: calc(handleLineWidth).mul(-1).equal(),\n width: calc(handleSize).add(calc(handleLineWidth).mul(2)).equal(),\n height: calc(handleSize).add(calc(handleLineWidth).mul(2)).equal(),\n backgroundColor: 'transparent',\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineStart: 0,\n width: handleSize,\n height: handleSize,\n backgroundColor: token.colorBgElevated,\n boxShadow: `0 0 0 ${unit(handleLineWidth)} ${token.handleColor}`,\n outline: `0px solid transparent`,\n borderRadius: '50%',\n cursor: 'pointer',\n transition: `\n inset-inline-start ${motionDurationMid},\n inset-block-start ${motionDurationMid},\n width ${motionDurationMid},\n height ${motionDurationMid},\n box-shadow ${motionDurationMid},\n outline ${motionDurationMid}\n `,\n },\n '&:hover, &:active, &:focus': {\n '&::before': {\n insetInlineStart: calc(handleSizeHover)\n .sub(handleSize)\n .div(2)\n .add(handleLineWidthHover)\n .mul(-1)\n .equal(),\n insetBlockStart: calc(handleSizeHover)\n .sub(handleSize)\n .div(2)\n .add(handleLineWidthHover)\n .mul(-1)\n .equal(),\n width: calc(handleSizeHover).add(calc(handleLineWidthHover).mul(2)).equal(),\n height: calc(handleSizeHover).add(calc(handleLineWidthHover).mul(2)).equal(),\n },\n '&::after': {\n boxShadow: `0 0 0 ${unit(handleLineWidthHover)} ${handleActiveColor}`,\n outline: `6px solid ${handleActiveOutlineColor}`,\n width: handleSizeHover,\n height: handleSizeHover,\n insetInlineStart: token.calc(handleSize).sub(handleSizeHover).div(2).equal(),\n insetBlockStart: token.calc(handleSize).sub(handleSizeHover).div(2).equal(),\n },\n },\n }, [`&-lock ${componentCls}-handle`]: {\n '&::before, &::after': {\n transition: 'none',\n },\n }, [`${componentCls}-mark`]: {\n position: 'absolute',\n fontSize: token.fontSize,\n }, [`${componentCls}-mark-text`]: {\n position: 'absolute',\n display: 'inline-block',\n color: token.colorTextDescription,\n textAlign: 'center',\n wordBreak: 'keep-all',\n cursor: 'pointer',\n userSelect: 'none',\n '&-active': {\n color: token.colorText,\n },\n }, [`${componentCls}-step`]: {\n position: 'absolute',\n background: 'transparent',\n pointerEvents: 'none',\n }, [`${componentCls}-dot`]: {\n position: 'absolute',\n width: dotSize,\n height: dotSize,\n backgroundColor: token.colorBgElevated,\n border: `${unit(handleLineWidth)} solid ${token.dotBorderColor}`,\n borderRadius: '50%',\n cursor: 'pointer',\n transition: `border-color ${token.motionDurationSlow}`,\n pointerEvents: 'auto',\n '&-active': {\n borderColor: token.dotActiveBorderColor,\n },\n }, [`&${componentCls}-disabled`]: {\n cursor: 'not-allowed',\n [`${componentCls}-rail`]: {\n backgroundColor: `${token.railBg} !important`,\n },\n [`${componentCls}-track`]: {\n backgroundColor: `${token.trackBgDisabled} !important`,\n },\n [`\n ${componentCls}-dot\n `]: {\n backgroundColor: token.colorBgElevated,\n borderColor: token.trackBgDisabled,\n boxShadow: 'none',\n cursor: 'not-allowed',\n },\n [`${componentCls}-handle::after`]: {\n backgroundColor: token.colorBgElevated,\n cursor: 'not-allowed',\n width: handleSize,\n height: handleSize,\n boxShadow: `0 0 0 ${unit(handleLineWidth)} ${handleColorDisabled}`,\n insetInlineStart: 0,\n insetBlockStart: 0,\n },\n [`\n ${componentCls}-mark-text,\n ${componentCls}-dot\n `]: {\n cursor: `not-allowed !important`,\n },\n }, [`&-tooltip ${antCls}-tooltip-inner`]: {\n minWidth: 'unset',\n } }),\n };\n};\n// ============================ Horizontal ============================\nconst genDirectionStyle = (token, horizontal) => {\n const { componentCls, railSize, handleSize, dotSize, marginFull, calc } = token;\n const railPadding = horizontal ? 'paddingBlock' : 'paddingInline';\n const full = horizontal ? 'width' : 'height';\n const part = horizontal ? 'height' : 'width';\n const handlePos = horizontal ? 'insetBlockStart' : 'insetInlineStart';\n const markInset = horizontal ? 'top' : 'insetInlineStart';\n const handlePosSize = calc(railSize).mul(3).sub(handleSize).div(2).equal();\n const draggableBorderSize = calc(handleSize).sub(railSize).div(2).equal();\n const draggableBorder = horizontal\n ? {\n borderWidth: `${unit(draggableBorderSize)} 0`,\n transform: `translateY(${unit(calc(draggableBorderSize).mul(-1).equal())})`,\n }\n : {\n borderWidth: `0 ${unit(draggableBorderSize)}`,\n transform: `translateX(${unit(token.calc(draggableBorderSize).mul(-1).equal())})`,\n };\n return {\n [railPadding]: railSize,\n [part]: calc(railSize).mul(3).equal(),\n [`${componentCls}-rail`]: {\n [full]: '100%',\n [part]: railSize,\n },\n [`${componentCls}-track,${componentCls}-tracks`]: {\n [part]: railSize,\n },\n [`${componentCls}-track-draggable`]: Object.assign({}, draggableBorder),\n [`${componentCls}-handle`]: {\n [handlePos]: handlePosSize,\n },\n [`${componentCls}-mark`]: {\n // Reset all\n insetInlineStart: 0,\n top: 0,\n // https://github.com/ant-design/ant-design/issues/43731\n [markInset]: calc(railSize)\n .mul(3)\n .add(horizontal ? 0 : marginFull)\n .equal(),\n [full]: '100%',\n },\n [`${componentCls}-step`]: {\n // Reset all\n insetInlineStart: 0,\n top: 0,\n [markInset]: railSize,\n [full]: '100%',\n [part]: railSize,\n },\n [`${componentCls}-dot`]: {\n position: 'absolute',\n [handlePos]: calc(railSize).sub(dotSize).div(2).equal(),\n },\n };\n};\n// ============================ Horizontal ============================\nconst genHorizontalStyle = (token) => {\n const { componentCls, marginPartWithMark } = token;\n return {\n [`${componentCls}-horizontal`]: Object.assign(Object.assign({}, genDirectionStyle(token, true)), { [`&${componentCls}-with-marks`]: {\n marginBottom: marginPartWithMark,\n } }),\n };\n};\n// ============================= Vertical =============================\nconst genVerticalStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-vertical`]: Object.assign(Object.assign({}, genDirectionStyle(token, false)), { height: '100%' }),\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => {\n // Handle line width is always width-er 1px\n const increaseHandleWidth = 1;\n const controlSize = token.controlHeightLG / 4;\n const controlSizeHover = token.controlHeightSM / 2;\n const handleLineWidth = token.lineWidth + increaseHandleWidth;\n const handleLineWidthHover = token.lineWidth + increaseHandleWidth * 1.5;\n const handleActiveColor = token.colorPrimary;\n const handleActiveOutlineColor = new FastColor(handleActiveColor).setA(0.2).toRgbString();\n return {\n controlSize,\n railSize: 4,\n handleSize: controlSize,\n handleSizeHover: controlSizeHover,\n dotSize: 8,\n handleLineWidth,\n handleLineWidthHover,\n railBg: token.colorFillTertiary,\n railHoverBg: token.colorFillSecondary,\n trackBg: token.colorPrimaryBorder,\n trackHoverBg: token.colorPrimaryBorderHover,\n handleColor: token.colorPrimaryBorder,\n handleActiveColor,\n handleActiveOutlineColor,\n handleColorDisabled: new FastColor(token.colorTextDisabled)\n .onBackground(token.colorBgContainer)\n .toHexString(),\n dotBorderColor: token.colorBorderSecondary,\n dotActiveBorderColor: token.colorPrimaryBorder,\n trackBgDisabled: token.colorBgContainerDisabled,\n };\n};\nexport default genStyleHooks('Slider', (token) => {\n const sliderToken = mergeToken(token, {\n marginPart: token.calc(token.controlHeight).sub(token.controlSize).div(2).equal(),\n marginFull: token.calc(token.controlSize).div(2).equal(),\n marginPartWithMark: token.calc(token.controlHeightLG).sub(token.controlSize).equal(),\n });\n return [\n genBaseStyle(sliderToken),\n genHorizontalStyle(sliderToken),\n genVerticalStyle(sliderToken),\n ];\n}, prepareComponentToken);\n","import { genStyleHooks } from '../../theme/internal';\n// ============================== Shared ==============================\nconst genSharedAffixStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: {\n position: 'fixed',\n zIndex: token.zIndexPopup,\n },\n };\n};\nexport const prepareComponentToken = (token) => ({\n zIndexPopup: token.zIndexBase + 10,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Affix', genSharedAffixStyle, prepareComponentToken);\n","import { Keyframes } from '@ant-design/cssinjs';\nimport { initMotion } from './motion';\nexport const zoomIn = new Keyframes('antZoomIn', {\n '0%': {\n transform: 'scale(0.2)',\n opacity: 0,\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 1,\n },\n});\nexport const zoomOut = new Keyframes('antZoomOut', {\n '0%': {\n transform: 'scale(1)',\n },\n '100%': {\n transform: 'scale(0.2)',\n opacity: 0,\n },\n});\nexport const zoomBigIn = new Keyframes('antZoomBigIn', {\n '0%': {\n transform: 'scale(0.8)',\n opacity: 0,\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 1,\n },\n});\nexport const zoomBigOut = new Keyframes('antZoomBigOut', {\n '0%': {\n transform: 'scale(1)',\n },\n '100%': {\n transform: 'scale(0.8)',\n opacity: 0,\n },\n});\nexport const zoomUpIn = new Keyframes('antZoomUpIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 0%',\n opacity: 0,\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '50% 0%',\n },\n});\nexport const zoomUpOut = new Keyframes('antZoomUpOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '50% 0%',\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 0%',\n opacity: 0,\n },\n});\nexport const zoomLeftIn = new Keyframes('antZoomLeftIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '0% 50%',\n opacity: 0,\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '0% 50%',\n },\n});\nexport const zoomLeftOut = new Keyframes('antZoomLeftOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '0% 50%',\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '0% 50%',\n opacity: 0,\n },\n});\nexport const zoomRightIn = new Keyframes('antZoomRightIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '100% 50%',\n opacity: 0,\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '100% 50%',\n },\n});\nexport const zoomRightOut = new Keyframes('antZoomRightOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '100% 50%',\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '100% 50%',\n opacity: 0,\n },\n});\nexport const zoomDownIn = new Keyframes('antZoomDownIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 100%',\n opacity: 0,\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '50% 100%',\n },\n});\nexport const zoomDownOut = new Keyframes('antZoomDownOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '50% 100%',\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 100%',\n opacity: 0,\n },\n});\nconst zoomMotion = {\n zoom: {\n inKeyframes: zoomIn,\n outKeyframes: zoomOut,\n },\n 'zoom-big': {\n inKeyframes: zoomBigIn,\n outKeyframes: zoomBigOut,\n },\n 'zoom-big-fast': {\n inKeyframes: zoomBigIn,\n outKeyframes: zoomBigOut,\n },\n 'zoom-left': {\n inKeyframes: zoomLeftIn,\n outKeyframes: zoomLeftOut,\n },\n 'zoom-right': {\n inKeyframes: zoomRightIn,\n outKeyframes: zoomRightOut,\n },\n 'zoom-up': {\n inKeyframes: zoomUpIn,\n outKeyframes: zoomUpOut,\n },\n 'zoom-down': {\n inKeyframes: zoomDownIn,\n outKeyframes: zoomDownOut,\n },\n};\nexport const initZoomMotion = (token, motionName) => {\n const { antCls } = token;\n const motionCls = `${antCls}-${motionName}`;\n const { inKeyframes, outKeyframes } = zoomMotion[motionName];\n return [\n initMotion(motionCls, inKeyframes, outKeyframes, motionName === 'zoom-big-fast' ? token.motionDurationFast : token.motionDurationMid),\n {\n [`\n ${motionCls}-enter,\n ${motionCls}-appear\n `]: {\n transform: 'scale(0)',\n opacity: 0,\n animationTimingFunction: token.motionEaseOutCirc,\n '&-prepare': {\n transform: 'none',\n },\n },\n [`${motionCls}-leave`]: {\n animationTimingFunction: token.motionEaseInOutCirc,\n },\n },\n ];\n};\n","const genRadius = (radiusBase) => {\n let radiusLG = radiusBase;\n let radiusSM = radiusBase;\n let radiusXS = radiusBase;\n let radiusOuter = radiusBase;\n // radiusLG\n if (radiusBase < 6 && radiusBase >= 5) {\n radiusLG = radiusBase + 1;\n }\n else if (radiusBase < 16 && radiusBase >= 6) {\n radiusLG = radiusBase + 2;\n }\n else if (radiusBase >= 16) {\n radiusLG = 16;\n }\n // radiusSM\n if (radiusBase < 7 && radiusBase >= 5) {\n radiusSM = 4;\n }\n else if (radiusBase < 8 && radiusBase >= 7) {\n radiusSM = 5;\n }\n else if (radiusBase < 14 && radiusBase >= 8) {\n radiusSM = 6;\n }\n else if (radiusBase < 16 && radiusBase >= 14) {\n radiusSM = 7;\n }\n else if (radiusBase >= 16) {\n radiusSM = 8;\n }\n // radiusXS\n if (radiusBase < 6 && radiusBase >= 2) {\n radiusXS = 1;\n }\n else if (radiusBase >= 6) {\n radiusXS = 2;\n }\n // radiusOuter\n if (radiusBase > 4 && radiusBase < 8) {\n radiusOuter = 4;\n }\n else if (radiusBase >= 8) {\n radiusOuter = 6;\n }\n return {\n borderRadius: radiusBase,\n borderRadiusXS: radiusXS,\n borderRadiusSM: radiusSM,\n borderRadiusLG: radiusLG,\n borderRadiusOuter: radiusOuter,\n };\n};\nexport default genRadius;\n","import { FastColor } from '@ant-design/fast-color';\nexport const getAlphaColor = (baseColor, alpha) => new FastColor(baseColor).setA(alpha).toRgbString();\nexport const getSolidColor = (baseColor, brightness) => {\n const instance = new FastColor(baseColor);\n return instance.darken(brightness).toHexString();\n};\n","import { generate } from '@ant-design/colors';\nimport { getAlphaColor, getSolidColor } from './colorAlgorithm';\nexport const generateColorPalettes = (baseColor) => {\n const colors = generate(baseColor);\n return {\n 1: colors[0],\n 2: colors[1],\n 3: colors[2],\n 4: colors[3],\n 5: colors[4],\n 6: colors[5],\n 7: colors[6],\n 8: colors[4],\n 9: colors[5],\n 10: colors[6],\n // 8: colors[7],\n // 9: colors[8],\n // 10: colors[9],\n };\n};\nexport const generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => {\n const colorBgBase = bgBaseColor || '#fff';\n const colorTextBase = textBaseColor || '#000';\n return {\n colorBgBase,\n colorTextBase,\n colorText: getAlphaColor(colorTextBase, 0.88),\n colorTextSecondary: getAlphaColor(colorTextBase, 0.65),\n colorTextTertiary: getAlphaColor(colorTextBase, 0.45),\n colorTextQuaternary: getAlphaColor(colorTextBase, 0.25),\n colorFill: getAlphaColor(colorTextBase, 0.15),\n colorFillSecondary: getAlphaColor(colorTextBase, 0.06),\n colorFillTertiary: getAlphaColor(colorTextBase, 0.04),\n colorFillQuaternary: getAlphaColor(colorTextBase, 0.02),\n colorBgSolid: getAlphaColor(colorTextBase, 1),\n colorBgSolidHover: getAlphaColor(colorTextBase, 0.75),\n colorBgSolidActive: getAlphaColor(colorTextBase, 0.95),\n colorBgLayout: getSolidColor(colorBgBase, 4),\n colorBgContainer: getSolidColor(colorBgBase, 0),\n colorBgElevated: getSolidColor(colorBgBase, 0),\n colorBgSpotlight: getAlphaColor(colorTextBase, 0.85),\n colorBgBlur: 'transparent',\n colorBorder: getSolidColor(colorBgBase, 15),\n colorBorderSecondary: getSolidColor(colorBgBase, 6),\n };\n};\n","import { generate, presetPalettes, presetPrimaryColors } from '@ant-design/colors';\nimport { defaultPresetColors } from '../seed';\nimport genColorMapToken from '../shared/genColorMapToken';\nimport genCommonMapToken from '../shared/genCommonMapToken';\nimport genControlHeight from '../shared/genControlHeight';\nimport genFontMapToken from '../shared/genFontMapToken';\nimport genSizeMapToken from '../shared/genSizeMapToken';\nimport { generateColorPalettes, generateNeutralColorPalettes } from './colors';\nexport default function derivative(token) {\n // pink is deprecated name of magenta, keep this for backwards compatibility\n presetPrimaryColors.pink = presetPrimaryColors.magenta;\n presetPalettes.pink = presetPalettes.magenta;\n const colorPalettes = Object.keys(defaultPresetColors)\n .map((colorKey) => {\n const colors = token[colorKey] === presetPrimaryColors[colorKey]\n ? presetPalettes[colorKey]\n : generate(token[colorKey]);\n return Array.from({ length: 10 }, () => 1).reduce((prev, _, i) => {\n prev[`${colorKey}-${i + 1}`] = colors[i];\n prev[`${colorKey}${i + 1}`] = colors[i];\n return prev;\n }, {});\n })\n .reduce((prev, cur) => {\n prev = Object.assign(Object.assign({}, prev), cur);\n return prev;\n }, {});\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, token), colorPalettes), genColorMapToken(token, {\n generateColorPalettes,\n generateNeutralColorPalettes,\n })), genFontMapToken(token.fontSize)), genSizeMapToken(token)), genControlHeight(token)), genCommonMapToken(token));\n}\n","export default function genSizeMapToken(token) {\n const { sizeUnit, sizeStep } = token;\n return {\n sizeXXL: sizeUnit * (sizeStep + 8), // 48\n sizeXL: sizeUnit * (sizeStep + 4), // 32\n sizeLG: sizeUnit * (sizeStep + 2), // 24\n sizeMD: sizeUnit * (sizeStep + 1), // 20\n sizeMS: sizeUnit * sizeStep, // 16\n size: sizeUnit * sizeStep, // 16\n sizeSM: sizeUnit * (sizeStep - 1), // 12\n sizeXS: sizeUnit * (sizeStep - 2), // 8\n sizeXXS: sizeUnit * (sizeStep - 3), // 4\n };\n}\n","import genRadius from './genRadius';\nexport default function genCommonMapToken(token) {\n const { motionUnit, motionBase, borderRadius, lineWidth } = token;\n return Object.assign({ \n // motion\n motionDurationFast: `${(motionBase + motionUnit).toFixed(1)}s`, motionDurationMid: `${(motionBase + motionUnit * 2).toFixed(1)}s`, motionDurationSlow: `${(motionBase + motionUnit * 3).toFixed(1)}s`, \n // line\n lineWidthBold: lineWidth + 1 }, genRadius(borderRadius));\n}\n","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar _excluded = [\"b\"],\n _excluded2 = [\"v\"];\nimport { FastColor } from '@ant-design/fast-color';\nexport var getRoundNumber = function getRoundNumber(value) {\n return Math.round(Number(value || 0));\n};\nvar convertHsb2Hsv = function convertHsb2Hsv(color) {\n if (color instanceof FastColor) {\n return color;\n }\n if (color && _typeof(color) === 'object' && 'h' in color && 'b' in color) {\n var _ref = color,\n b = _ref.b,\n resets = _objectWithoutProperties(_ref, _excluded);\n return _objectSpread(_objectSpread({}, resets), {}, {\n v: b\n });\n }\n if (typeof color === 'string' && /hsb/.test(color)) {\n return color.replace(/hsb/, 'hsv');\n }\n return color;\n};\nexport var Color = /*#__PURE__*/function (_FastColor) {\n _inherits(Color, _FastColor);\n var _super = _createSuper(Color);\n function Color(color) {\n _classCallCheck(this, Color);\n return _super.call(this, convertHsb2Hsv(color));\n }\n _createClass(Color, [{\n key: \"toHsbString\",\n value: function toHsbString() {\n var hsb = this.toHsb();\n var saturation = getRoundNumber(hsb.s * 100);\n var lightness = getRoundNumber(hsb.b * 100);\n var hue = getRoundNumber(hsb.h);\n var alpha = hsb.a;\n var hsbString = \"hsb(\".concat(hue, \", \").concat(saturation, \"%, \").concat(lightness, \"%)\");\n var hsbaString = \"hsba(\".concat(hue, \", \").concat(saturation, \"%, \").concat(lightness, \"%, \").concat(alpha.toFixed(alpha === 0 ? 0 : 2), \")\");\n return alpha === 1 ? hsbString : hsbaString;\n }\n }, {\n key: \"toHsb\",\n value: function toHsb() {\n var _this$toHsv = this.toHsv(),\n v = _this$toHsv.v,\n resets = _objectWithoutProperties(_this$toHsv, _excluded2);\n return _objectSpread(_objectSpread({}, resets), {}, {\n b: v,\n a: this.a\n });\n }\n }]);\n return Color;\n}(FastColor);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { Color } from \"./color\";\nexport var ColorPickerPrefixCls = 'rc-color-picker';\nexport var generateColor = function generateColor(color) {\n if (color instanceof Color) {\n return color;\n }\n return new Color(color);\n};\nexport var defaultColor = generateColor('#1677ff');\nexport var calculateColor = function calculateColor(props) {\n var offset = props.offset,\n targetRef = props.targetRef,\n containerRef = props.containerRef,\n color = props.color,\n type = props.type;\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n width = _containerRef$current.width,\n height = _containerRef$current.height;\n var _targetRef$current$ge = targetRef.current.getBoundingClientRect(),\n targetWidth = _targetRef$current$ge.width,\n targetHeight = _targetRef$current$ge.height;\n var centerOffsetX = targetWidth / 2;\n var centerOffsetY = targetHeight / 2;\n var saturation = (offset.x + centerOffsetX) / width;\n var bright = 1 - (offset.y + centerOffsetY) / height;\n var hsb = color.toHsb();\n var alphaOffset = saturation;\n var hueOffset = (offset.x + centerOffsetX) / width * 360;\n if (type) {\n switch (type) {\n case 'hue':\n return generateColor(_objectSpread(_objectSpread({}, hsb), {}, {\n h: hueOffset <= 0 ? 0 : hueOffset\n }));\n case 'alpha':\n return generateColor(_objectSpread(_objectSpread({}, hsb), {}, {\n a: alphaOffset <= 0 ? 0 : alphaOffset\n }));\n }\n }\n return generateColor({\n h: hsb.h,\n s: saturation <= 0 ? 0 : saturation,\n b: bright >= 1 ? 1 : bright,\n a: hsb.a\n });\n};\nexport var calcOffset = function calcOffset(color, type) {\n var hsb = color.toHsb();\n switch (type) {\n case 'hue':\n return {\n x: hsb.h / 360 * 100,\n y: 50\n };\n case 'alpha':\n return {\n x: color.a * 100,\n y: 50\n };\n\n // Picker panel\n default:\n return {\n x: hsb.s * 100,\n y: (1 - hsb.b) * 100\n };\n }\n};","import classNames from 'classnames';\nimport React from 'react';\nvar ColorBlock = function ColorBlock(_ref) {\n var color = _ref.color,\n prefixCls = _ref.prefixCls,\n className = _ref.className,\n style = _ref.style,\n onClick = _ref.onClick;\n var colorBlockCls = \"\".concat(prefixCls, \"-color-block\");\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(colorBlockCls, className),\n style: style,\n onClick: onClick\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(colorBlockCls, \"-inner\"),\n style: {\n background: color\n }\n }));\n};\nexport default ColorBlock;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport classNames from 'classnames';\nimport React from 'react';\nvar Handler = function Handler(_ref) {\n var _ref$size = _ref.size,\n size = _ref$size === void 0 ? 'default' : _ref$size,\n color = _ref.color,\n prefixCls = _ref.prefixCls;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-handler\"), _defineProperty({}, \"\".concat(prefixCls, \"-handler-sm\"), size === 'small')),\n style: {\n backgroundColor: color\n }\n });\n};\nexport default Handler;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport React from 'react';\nvar Palette = function Palette(_ref) {\n var children = _ref.children,\n style = _ref.style,\n prefixCls = _ref.prefixCls;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-palette\"),\n style: _objectSpread({\n position: 'relative'\n }, style)\n }, children);\n};\nexport default Palette;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport React, { useRef } from 'react';\nimport useColorDrag from \"../hooks/useColorDrag\";\nimport { calcOffset, calculateColor } from \"../util\";\nimport { useEvent } from 'rc-util';\nimport Handler from \"./Handler\";\nimport Palette from \"./Palette\";\nimport Transform from \"./Transform\";\nvar Picker = function Picker(_ref) {\n var color = _ref.color,\n onChange = _ref.onChange,\n prefixCls = _ref.prefixCls,\n onChangeComplete = _ref.onChangeComplete,\n disabled = _ref.disabled;\n var pickerRef = useRef();\n var transformRef = useRef();\n var colorRef = useRef(color);\n var onDragChange = useEvent(function (offsetValue) {\n var calcColor = calculateColor({\n offset: offsetValue,\n targetRef: transformRef,\n containerRef: pickerRef,\n color: color\n });\n colorRef.current = calcColor;\n onChange(calcColor);\n });\n var _useColorDrag = useColorDrag({\n color: color,\n containerRef: pickerRef,\n targetRef: transformRef,\n calculate: function calculate() {\n return calcOffset(color);\n },\n onDragChange: onDragChange,\n onDragChangeComplete: function onDragChangeComplete() {\n return onChangeComplete === null || onChangeComplete === void 0 ? void 0 : onChangeComplete(colorRef.current);\n },\n disabledDrag: disabled\n }),\n _useColorDrag2 = _slicedToArray(_useColorDrag, 2),\n offset = _useColorDrag2[0],\n dragStartHandle = _useColorDrag2[1];\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: pickerRef,\n className: \"\".concat(prefixCls, \"-select\"),\n onMouseDown: dragStartHandle,\n onTouchStart: dragStartHandle\n }, /*#__PURE__*/React.createElement(Palette, {\n prefixCls: prefixCls\n }, /*#__PURE__*/React.createElement(Transform, {\n x: offset.x,\n y: offset.y,\n ref: transformRef\n }, /*#__PURE__*/React.createElement(Handler, {\n color: color.toRgbString(),\n prefixCls: prefixCls\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-saturation\"),\n style: {\n backgroundColor: \"hsl(\".concat(color.toHsb().h, \",100%, 50%)\"),\n backgroundImage: 'linear-gradient(0deg, #000, transparent),linear-gradient(90deg, #fff, hsla(0, 0%, 100%, 0))'\n }\n })));\n};\nexport default Picker;","import React, { useMemo } from 'react';\nimport { Color } from \"../color\";\nimport { generateColor } from \"../util\";\nvar Gradient = function Gradient(_ref) {\n var colors = _ref.colors,\n children = _ref.children,\n _ref$direction = _ref.direction,\n direction = _ref$direction === void 0 ? 'to right' : _ref$direction,\n type = _ref.type,\n prefixCls = _ref.prefixCls;\n var gradientColors = useMemo(function () {\n return colors.map(function (color, idx) {\n var result = generateColor(color);\n if (type === 'alpha' && idx === colors.length - 1) {\n result = new Color(result.setA(1));\n }\n return result.toRgbString();\n }).join(',');\n }, [colors, type]);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-gradient\"),\n style: {\n position: 'absolute',\n inset: 0,\n background: \"linear-gradient(\".concat(direction, \", \").concat(gradientColors, \")\")\n }\n }, children);\n};\nexport default Gradient;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport React, { useRef } from 'react';\nimport useColorDrag from \"../hooks/useColorDrag\";\nimport Palette from \"./Palette\";\nimport classNames from 'classnames';\nimport { useEvent } from 'rc-util';\nimport { Color } from \"../color\";\nimport { calcOffset, calculateColor } from \"../util\";\nimport Gradient from \"./Gradient\";\nimport Handler from \"./Handler\";\nimport Transform from \"./Transform\";\nvar Slider = function Slider(props) {\n var prefixCls = props.prefixCls,\n colors = props.colors,\n disabled = props.disabled,\n onChange = props.onChange,\n onChangeComplete = props.onChangeComplete,\n color = props.color,\n type = props.type;\n var sliderRef = useRef();\n var transformRef = useRef();\n var colorRef = useRef(color);\n var getValue = function getValue(c) {\n return type === 'hue' ? c.getHue() : c.a * 100;\n };\n var onDragChange = useEvent(function (offsetValue) {\n var calcColor = calculateColor({\n offset: offsetValue,\n targetRef: transformRef,\n containerRef: sliderRef,\n color: color,\n type: type\n });\n colorRef.current = calcColor;\n onChange(getValue(calcColor));\n });\n var _useColorDrag = useColorDrag({\n color: color,\n targetRef: transformRef,\n containerRef: sliderRef,\n calculate: function calculate() {\n return calcOffset(color, type);\n },\n onDragChange: onDragChange,\n onDragChangeComplete: function onDragChangeComplete() {\n onChangeComplete(getValue(colorRef.current));\n },\n direction: 'x',\n disabledDrag: disabled\n }),\n _useColorDrag2 = _slicedToArray(_useColorDrag, 2),\n offset = _useColorDrag2[0],\n dragStartHandle = _useColorDrag2[1];\n var handleColor = React.useMemo(function () {\n if (type === 'hue') {\n var hsb = color.toHsb();\n hsb.s = 1;\n hsb.b = 1;\n hsb.a = 1;\n var lightColor = new Color(hsb);\n return lightColor;\n }\n return color;\n }, [color, type]);\n\n // ========================= Gradient =========================\n var gradientList = React.useMemo(function () {\n return colors.map(function (info) {\n return \"\".concat(info.color, \" \").concat(info.percent, \"%\");\n });\n }, [colors]);\n\n // ========================== Render ==========================\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: sliderRef,\n className: classNames(\"\".concat(prefixCls, \"-slider\"), \"\".concat(prefixCls, \"-slider-\").concat(type)),\n onMouseDown: dragStartHandle,\n onTouchStart: dragStartHandle\n }, /*#__PURE__*/React.createElement(Palette, {\n prefixCls: prefixCls\n }, /*#__PURE__*/React.createElement(Transform, {\n x: offset.x,\n y: offset.y,\n ref: transformRef\n }, /*#__PURE__*/React.createElement(Handler, {\n size: \"small\",\n color: handleColor.toHexString(),\n prefixCls: prefixCls\n })), /*#__PURE__*/React.createElement(Gradient, {\n colors: gradientList,\n type: type,\n prefixCls: prefixCls\n })));\n};\nexport default Slider;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEffect, useRef, useState } from 'react';\nfunction getPosition(e) {\n var obj = 'touches' in e ? e.touches[0] : e;\n var scrollXOffset = document.documentElement.scrollLeft || document.body.scrollLeft || window.pageXOffset;\n var scrollYOffset = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;\n return {\n pageX: obj.pageX - scrollXOffset,\n pageY: obj.pageY - scrollYOffset\n };\n}\nfunction useColorDrag(props) {\n var targetRef = props.targetRef,\n containerRef = props.containerRef,\n direction = props.direction,\n onDragChange = props.onDragChange,\n onDragChangeComplete = props.onDragChangeComplete,\n calculate = props.calculate,\n color = props.color,\n disabledDrag = props.disabledDrag;\n var _useState = useState({\n x: 0,\n y: 0\n }),\n _useState2 = _slicedToArray(_useState, 2),\n offsetValue = _useState2[0],\n setOffsetValue = _useState2[1];\n var mouseMoveRef = useRef(null);\n var mouseUpRef = useRef(null);\n\n // Always get position from `color`\n useEffect(function () {\n setOffsetValue(calculate());\n }, [color]);\n useEffect(function () {\n return function () {\n document.removeEventListener('mousemove', mouseMoveRef.current);\n document.removeEventListener('mouseup', mouseUpRef.current);\n document.removeEventListener('touchmove', mouseMoveRef.current);\n document.removeEventListener('touchend', mouseUpRef.current);\n mouseMoveRef.current = null;\n mouseUpRef.current = null;\n };\n }, []);\n var updateOffset = function updateOffset(e) {\n var _getPosition = getPosition(e),\n pageX = _getPosition.pageX,\n pageY = _getPosition.pageY;\n var _containerRef$current = containerRef.current.getBoundingClientRect(),\n rectX = _containerRef$current.x,\n rectY = _containerRef$current.y,\n width = _containerRef$current.width,\n height = _containerRef$current.height;\n var _targetRef$current$ge = targetRef.current.getBoundingClientRect(),\n targetWidth = _targetRef$current$ge.width,\n targetHeight = _targetRef$current$ge.height;\n var centerOffsetX = targetWidth / 2;\n var centerOffsetY = targetHeight / 2;\n var offsetX = Math.max(0, Math.min(pageX - rectX, width)) - centerOffsetX;\n var offsetY = Math.max(0, Math.min(pageY - rectY, height)) - centerOffsetY;\n var calcOffset = {\n x: offsetX,\n y: direction === 'x' ? offsetValue.y : offsetY\n };\n\n // Exclusion of boundary cases\n if (targetWidth === 0 && targetHeight === 0 || targetWidth !== targetHeight) {\n return false;\n }\n onDragChange === null || onDragChange === void 0 || onDragChange(calcOffset);\n };\n var onDragMove = function onDragMove(e) {\n e.preventDefault();\n updateOffset(e);\n };\n var onDragStop = function onDragStop(e) {\n e.preventDefault();\n document.removeEventListener('mousemove', mouseMoveRef.current);\n document.removeEventListener('mouseup', mouseUpRef.current);\n document.removeEventListener('touchmove', mouseMoveRef.current);\n document.removeEventListener('touchend', mouseUpRef.current);\n mouseMoveRef.current = null;\n mouseUpRef.current = null;\n onDragChangeComplete === null || onDragChangeComplete === void 0 || onDragChangeComplete();\n };\n var onDragStart = function onDragStart(e) {\n // https://github.com/ant-design/ant-design/issues/43529\n document.removeEventListener('mousemove', mouseMoveRef.current);\n document.removeEventListener('mouseup', mouseUpRef.current);\n if (disabledDrag) {\n return;\n }\n updateOffset(e);\n document.addEventListener('mousemove', onDragMove);\n document.addEventListener('mouseup', onDragStop);\n document.addEventListener('touchmove', onDragMove);\n document.addEventListener('touchend', onDragStop);\n mouseMoveRef.current = onDragMove;\n mouseUpRef.current = onDragStop;\n };\n return [offsetValue, onDragStart];\n}\nexport default useColorDrag;","import React, { forwardRef } from 'react';\nvar Transform = /*#__PURE__*/forwardRef(function (props, ref) {\n var children = props.children,\n x = props.x,\n y = props.y;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n style: {\n position: 'absolute',\n left: \"\".concat(x, \"%\"),\n top: \"\".concat(y, \"%\"),\n zIndex: 1,\n transform: 'translate(-50%, -50%)'\n }\n }, children);\n});\nexport default Transform;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useMergedState } from 'rc-util';\nimport { useMemo } from 'react';\nimport { generateColor } from \"../util\";\nvar useColorState = function useColorState(defaultValue, value) {\n var _useMergedState = useMergedState(defaultValue, {\n value: value\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n mergedValue = _useMergedState2[0],\n setValue = _useMergedState2[1];\n var color = useMemo(function () {\n return generateColor(mergedValue);\n }, [mergedValue]);\n return [color, setValue];\n};\nexport default useColorState;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport React, { forwardRef, useMemo } from 'react';\nimport { ColorPickerPrefixCls, defaultColor } from \"./util\";\nimport classNames from 'classnames';\nimport { Color } from \"./color\";\nimport ColorBlock from \"./components/ColorBlock\";\nimport Picker from \"./components/Picker\";\nimport useColorState from \"./hooks/useColorState\";\nimport useComponent from \"./hooks/useComponent\";\nvar HUE_COLORS = [{\n color: 'rgb(255, 0, 0)',\n percent: 0\n}, {\n color: 'rgb(255, 255, 0)',\n percent: 17\n}, {\n color: 'rgb(0, 255, 0)',\n percent: 33\n}, {\n color: 'rgb(0, 255, 255)',\n percent: 50\n}, {\n color: 'rgb(0, 0, 255)',\n percent: 67\n}, {\n color: 'rgb(255, 0, 255)',\n percent: 83\n}, {\n color: 'rgb(255, 0, 0)',\n percent: 100\n}];\nvar ColorPicker = /*#__PURE__*/forwardRef(function (props, ref) {\n var value = props.value,\n defaultValue = props.defaultValue,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? ColorPickerPrefixCls : _props$prefixCls,\n onChange = props.onChange,\n onChangeComplete = props.onChangeComplete,\n className = props.className,\n style = props.style,\n panelRender = props.panelRender,\n _props$disabledAlpha = props.disabledAlpha,\n disabledAlpha = _props$disabledAlpha === void 0 ? false : _props$disabledAlpha,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n components = props.components;\n\n // ========================== Components ==========================\n var _useComponent = useComponent(components),\n _useComponent2 = _slicedToArray(_useComponent, 1),\n Slider = _useComponent2[0];\n\n // ============================ Color =============================\n var _useColorState = useColorState(defaultValue || defaultColor, value),\n _useColorState2 = _slicedToArray(_useColorState, 2),\n colorValue = _useColorState2[0],\n setColorValue = _useColorState2[1];\n var alphaColor = useMemo(function () {\n return colorValue.setA(1).toRgbString();\n }, [colorValue]);\n\n // ============================ Events ============================\n var handleChange = function handleChange(data, type) {\n if (!value) {\n setColorValue(data);\n }\n onChange === null || onChange === void 0 || onChange(data, type);\n };\n\n // Convert\n var getHueColor = function getHueColor(hue) {\n return new Color(colorValue.setHue(hue));\n };\n var getAlphaColor = function getAlphaColor(alpha) {\n return new Color(colorValue.setA(alpha / 100));\n };\n\n // Slider change\n var onHueChange = function onHueChange(hue) {\n handleChange(getHueColor(hue), {\n type: 'hue',\n value: hue\n });\n };\n var onAlphaChange = function onAlphaChange(alpha) {\n handleChange(getAlphaColor(alpha), {\n type: 'alpha',\n value: alpha\n });\n };\n\n // Complete\n var onHueChangeComplete = function onHueChangeComplete(hue) {\n if (onChangeComplete) {\n onChangeComplete(getHueColor(hue));\n }\n };\n var onAlphaChangeComplete = function onAlphaChangeComplete(alpha) {\n if (onChangeComplete) {\n onChangeComplete(getAlphaColor(alpha));\n }\n };\n\n // ============================ Render ============================\n var mergeCls = classNames(\"\".concat(prefixCls, \"-panel\"), className, _defineProperty({}, \"\".concat(prefixCls, \"-panel-disabled\"), disabled));\n var sharedSliderProps = {\n prefixCls: prefixCls,\n disabled: disabled,\n color: colorValue\n };\n var defaultPanel = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Picker, _extends({\n onChange: handleChange\n }, sharedSliderProps, {\n onChangeComplete: onChangeComplete\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-slider-container\")\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-slider-group\"), _defineProperty({}, \"\".concat(prefixCls, \"-slider-group-disabled-alpha\"), disabledAlpha))\n }, /*#__PURE__*/React.createElement(Slider, _extends({}, sharedSliderProps, {\n type: \"hue\",\n colors: HUE_COLORS,\n min: 0,\n max: 359,\n value: colorValue.getHue(),\n onChange: onHueChange,\n onChangeComplete: onHueChangeComplete\n })), !disabledAlpha && /*#__PURE__*/React.createElement(Slider, _extends({}, sharedSliderProps, {\n type: \"alpha\",\n colors: [{\n percent: 0,\n color: 'rgba(255, 0, 4, 0)'\n }, {\n percent: 100,\n color: alphaColor\n }],\n min: 0,\n max: 100,\n value: colorValue.a * 100,\n onChange: onAlphaChange,\n onChangeComplete: onAlphaChangeComplete\n }))), /*#__PURE__*/React.createElement(ColorBlock, {\n color: colorValue.toRgbString(),\n prefixCls: prefixCls\n })));\n return /*#__PURE__*/React.createElement(\"div\", {\n className: mergeCls,\n style: style,\n ref: ref\n }, typeof panelRender === 'function' ? panelRender(defaultPanel) : defaultPanel);\n});\nif (process.env.NODE_ENV !== 'production') {\n ColorPicker.displayName = 'ColorPicker';\n}\nexport default ColorPicker;","import ColorPicker from \"./ColorPicker\";\nexport { Color } from \"./color\";\nexport { default as ColorBlock } from \"./components/ColorBlock\";\nexport * from \"./interface\";\nexport default ColorPicker;","import * as React from 'react';\nimport Slider from \"../components/Slider\";\nexport default function useComponent(components) {\n return React.useMemo(function () {\n var _ref = components || {},\n slider = _ref.slider;\n return [slider || Slider];\n }, [components]);\n}","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { commonLocale } from \"./common\";\nvar locale = _objectSpread(_objectSpread({}, commonLocale), {}, {\n locale: 'en_US',\n today: 'Today',\n now: 'Now',\n backToToday: 'Back to today',\n ok: 'OK',\n clear: 'Clear',\n week: 'Week',\n month: 'Month',\n year: 'Year',\n timeSelect: 'select time',\n dateSelect: 'select date',\n weekSelect: 'Choose a week',\n monthSelect: 'Choose a month',\n yearSelect: 'Choose a year',\n decadeSelect: 'Choose a decade',\n dateFormat: 'M/D/YYYY',\n dateTimeFormat: 'M/D/YYYY HH:mm:ss',\n previousMonth: 'Previous month (PageUp)',\n nextMonth: 'Next month (PageDown)',\n previousYear: 'Last year (Control + left)',\n nextYear: 'Next year (Control + right)',\n previousDecade: 'Last decade',\n nextDecade: 'Next decade',\n previousCentury: 'Last century',\n nextCentury: 'Next century'\n});\nexport default locale;","import CalendarLocale from 'rc-picker/lib/locale/en_US';\nimport TimePickerLocale from '../../time-picker/locale/en_US';\n// Merge into a locale object\nconst locale = {\n lang: Object.assign({ placeholder: 'Select date', yearPlaceholder: 'Select year', quarterPlaceholder: 'Select quarter', monthPlaceholder: 'Select month', weekPlaceholder: 'Select week', rangePlaceholder: ['Start date', 'End date'], rangeYearPlaceholder: ['Start year', 'End year'], rangeQuarterPlaceholder: ['Start quarter', 'End quarter'], rangeMonthPlaceholder: ['Start month', 'End month'], rangeWeekPlaceholder: ['Start week', 'End week'] }, CalendarLocale),\n timePickerLocale: Object.assign({}, TimePickerLocale),\n};\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nexport default locale;\n","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nexport { _iterableToArray as default };","import { unit } from '@ant-design/cssinjs';\nimport { genBasicInputStyle, genInputGroupStyle, genPlaceholderStyle, initInputToken, } from '../../input/style';\nimport { genBorderlessStyle, genFilledGroupStyle, genFilledStyle, genOutlinedGroupStyle, genOutlinedStyle, genUnderlinedStyle, } from '../../input/style/variants';\nimport { resetComponent, resetIcon } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { prepareComponentToken } from './token';\nexport const genRadiusStyle = ({ componentCls, borderRadiusSM, borderRadiusLG }, size) => {\n const borderRadius = size === 'lg' ? borderRadiusLG : borderRadiusSM;\n return {\n [`&-${size}`]: {\n [`${componentCls}-handler-wrap`]: {\n borderStartEndRadius: borderRadius,\n borderEndEndRadius: borderRadius,\n },\n [`${componentCls}-handler-up`]: {\n borderStartEndRadius: borderRadius,\n },\n [`${componentCls}-handler-down`]: {\n borderEndEndRadius: borderRadius,\n },\n },\n };\n};\nconst genInputNumberStyles = (token) => {\n const { componentCls, lineWidth, lineType, borderRadius, inputFontSizeSM, inputFontSizeLG, controlHeightLG, controlHeightSM, colorError, paddingInlineSM, paddingBlockSM, paddingBlockLG, paddingInlineLG, colorIcon, motionDurationMid, handleHoverColor, handleOpacity, paddingInline, paddingBlock, handleBg, handleActiveBg, colorTextDisabled, borderRadiusSM, borderRadiusLG, controlWidth, handleBorderColor, filledHandleBg, lineHeightLG, calc, } = token;\n return [\n {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genBasicInputStyle(token)), { display: 'inline-block', width: controlWidth, margin: 0, padding: 0, borderRadius }), genOutlinedStyle(token, {\n [`${componentCls}-handler-wrap`]: {\n background: handleBg,\n [`${componentCls}-handler-down`]: {\n borderBlockStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`,\n },\n },\n })), genFilledStyle(token, {\n [`${componentCls}-handler-wrap`]: {\n background: filledHandleBg,\n [`${componentCls}-handler-down`]: {\n borderBlockStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`,\n },\n },\n '&:focus-within': {\n [`${componentCls}-handler-wrap`]: {\n background: handleBg,\n },\n },\n })), genUnderlinedStyle(token, {\n [`${componentCls}-handler-wrap`]: {\n background: handleBg,\n [`${componentCls}-handler-down`]: {\n borderBlockStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`,\n },\n },\n })), genBorderlessStyle(token)), { '&-rtl': {\n direction: 'rtl',\n [`${componentCls}-input`]: {\n direction: 'rtl',\n },\n }, '&-lg': {\n padding: 0,\n fontSize: inputFontSizeLG,\n lineHeight: lineHeightLG,\n borderRadius: borderRadiusLG,\n [`input${componentCls}-input`]: {\n height: calc(controlHeightLG).sub(calc(lineWidth).mul(2)).equal(),\n padding: `${unit(paddingBlockLG)} ${unit(paddingInlineLG)}`,\n },\n }, '&-sm': {\n padding: 0,\n fontSize: inputFontSizeSM,\n borderRadius: borderRadiusSM,\n [`input${componentCls}-input`]: {\n height: calc(controlHeightSM).sub(calc(lineWidth).mul(2)).equal(),\n padding: `${unit(paddingBlockSM)} ${unit(paddingInlineSM)}`,\n },\n }, \n // ===================== Out Of Range =====================\n '&-out-of-range': {\n [`${componentCls}-input-wrap`]: {\n input: {\n color: colorError,\n },\n },\n }, \n // Style for input-group: input with label, with button or dropdown...\n '&-group': Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genInputGroupStyle(token)), { '&-wrapper': Object.assign(Object.assign(Object.assign({ display: 'inline-block', textAlign: 'start', verticalAlign: 'top', [`${componentCls}-affix-wrapper`]: {\n width: '100%',\n }, \n // Size\n '&-lg': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusLG,\n fontSize: token.fontSizeLG,\n },\n }, '&-sm': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusSM,\n },\n } }, genOutlinedGroupStyle(token)), genFilledGroupStyle(token)), { \n // Fix the issue of using icons in Space Compact mode\n // https://github.com/ant-design/ant-design/issues/45764\n [`&:not(${componentCls}-compact-first-item):not(${componentCls}-compact-last-item)${componentCls}-compact-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderRadius: 0,\n },\n }, [`&:not(${componentCls}-compact-last-item)${componentCls}-compact-first-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n }, [`&:not(${componentCls}-compact-first-item)${componentCls}-compact-last-item`]: {\n [`${componentCls}, ${componentCls}-group-addon`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n } }) }), [`&-disabled ${componentCls}-input`]: {\n cursor: 'not-allowed',\n }, [componentCls]: {\n '&-input': Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), { width: '100%', padding: `${unit(paddingBlock)} ${unit(paddingInline)}`, textAlign: 'start', backgroundColor: 'transparent', border: 0, borderRadius, outline: 0, transition: `all ${motionDurationMid} linear`, appearance: 'textfield', fontSize: 'inherit' }), genPlaceholderStyle(token.colorTextPlaceholder)), { '&[type=\"number\"]::-webkit-inner-spin-button, &[type=\"number\"]::-webkit-outer-spin-button': {\n margin: 0,\n appearance: 'none',\n } }),\n }, [`&:hover ${componentCls}-handler-wrap, &-focused ${componentCls}-handler-wrap`]: {\n width: token.handleWidth,\n opacity: 1,\n } }),\n },\n // Handler\n {\n [componentCls]: Object.assign(Object.assign(Object.assign({ [`${componentCls}-handler-wrap`]: {\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineEnd: 0,\n width: token.handleVisibleWidth,\n opacity: handleOpacity,\n height: '100%',\n borderStartStartRadius: 0,\n borderStartEndRadius: borderRadius,\n borderEndEndRadius: borderRadius,\n borderEndStartRadius: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n transition: `all ${motionDurationMid}`,\n overflow: 'hidden',\n // Fix input number inside Menu makes icon too large\n // We arise the selector priority by nest selector here\n // https://github.com/ant-design/ant-design/issues/14367\n [`${componentCls}-handler`]: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 'auto',\n height: '40%',\n [`\n ${componentCls}-handler-up-inner,\n ${componentCls}-handler-down-inner\n `]: {\n marginInlineEnd: 0,\n fontSize: token.handleFontSize,\n },\n },\n }, [`${componentCls}-handler`]: {\n height: '50%',\n overflow: 'hidden',\n color: colorIcon,\n fontWeight: 'bold',\n lineHeight: 0,\n textAlign: 'center',\n cursor: 'pointer',\n borderInlineStart: `${unit(lineWidth)} ${lineType} ${handleBorderColor}`,\n transition: `all ${motionDurationMid} linear`,\n '&:active': {\n background: handleActiveBg,\n },\n // Hover\n '&:hover': {\n height: `60%`,\n [`\n ${componentCls}-handler-up-inner,\n ${componentCls}-handler-down-inner\n `]: {\n color: handleHoverColor,\n },\n },\n '&-up-inner, &-down-inner': Object.assign(Object.assign({}, resetIcon()), { color: colorIcon, transition: `all ${motionDurationMid} linear`, userSelect: 'none' }),\n }, [`${componentCls}-handler-up`]: {\n borderStartEndRadius: borderRadius,\n }, [`${componentCls}-handler-down`]: {\n borderEndEndRadius: borderRadius,\n } }, genRadiusStyle(token, 'lg')), genRadiusStyle(token, 'sm')), { \n // Disabled\n '&-disabled, &-readonly': {\n [`${componentCls}-handler-wrap`]: {\n display: 'none',\n },\n [`${componentCls}-input`]: {\n color: 'inherit',\n },\n }, [`\n ${componentCls}-handler-up-disabled,\n ${componentCls}-handler-down-disabled\n `]: {\n cursor: 'not-allowed',\n }, [`\n ${componentCls}-handler-up-disabled:hover &-handler-up-inner,\n ${componentCls}-handler-down-disabled:hover &-handler-down-inner\n `]: {\n color: colorTextDisabled,\n } }),\n },\n ];\n};\nconst genAffixWrapperStyles = (token) => {\n const { componentCls, paddingBlock, paddingInline, inputAffixPadding, controlWidth, borderRadiusLG, borderRadiusSM, paddingInlineLG, paddingInlineSM, paddingBlockLG, paddingBlockSM, motionDurationMid, } = token;\n return {\n [`${componentCls}-affix-wrapper`]: Object.assign(Object.assign({ [`input${componentCls}-input`]: {\n padding: `${unit(paddingBlock)} 0`,\n } }, genBasicInputStyle(token)), { \n // or number handler will cover form status\n position: 'relative', display: 'inline-flex', alignItems: 'center', width: controlWidth, padding: 0, paddingInlineStart: paddingInline, '&-lg': {\n borderRadius: borderRadiusLG,\n paddingInlineStart: paddingInlineLG,\n [`input${componentCls}-input`]: {\n padding: `${unit(paddingBlockLG)} 0`,\n },\n }, '&-sm': {\n borderRadius: borderRadiusSM,\n paddingInlineStart: paddingInlineSM,\n [`input${componentCls}-input`]: {\n padding: `${unit(paddingBlockSM)} 0`,\n },\n }, [`&:not(${componentCls}-disabled):hover`]: {\n zIndex: 1,\n }, '&-focused, &:focus': {\n zIndex: 1,\n }, [`&-disabled > ${componentCls}-disabled`]: {\n background: 'transparent',\n }, [`> div${componentCls}`]: {\n width: '100%',\n border: 'none',\n outline: 'none',\n [`&${componentCls}-focused`]: {\n boxShadow: 'none !important',\n },\n }, '&::before': {\n display: 'inline-block',\n width: 0,\n visibility: 'hidden',\n content: '\"\\\\a0\"',\n }, [`${componentCls}-handler-wrap`]: {\n zIndex: 2,\n }, [componentCls]: {\n position: 'static',\n color: 'inherit',\n '&-prefix, &-suffix': {\n display: 'flex',\n flex: 'none',\n alignItems: 'center',\n pointerEvents: 'none',\n },\n '&-prefix': {\n marginInlineEnd: inputAffixPadding,\n },\n '&-suffix': {\n insetBlockStart: 0,\n insetInlineEnd: 0,\n height: '100%',\n marginInlineEnd: paddingInline,\n marginInlineStart: inputAffixPadding,\n transition: `margin ${motionDurationMid}`,\n },\n }, [`&:hover ${componentCls}-handler-wrap, &-focused ${componentCls}-handler-wrap`]: {\n width: token.handleWidth,\n opacity: 1,\n }, [`&:not(${componentCls}-affix-wrapper-without-controls):hover ${componentCls}-suffix`]: {\n marginInlineEnd: token.calc(token.handleWidth).add(paddingInline).equal(),\n } }),\n // 覆盖 affix-wrapper borderRadius!\n [`${componentCls}-underlined`]: {\n borderRadius: 0,\n },\n };\n};\nexport default genStyleHooks('InputNumber', (token) => {\n const inputNumberToken = mergeToken(token, initInputToken(token));\n return [\n genInputNumberStyles(inputNumberToken),\n genAffixWrapperStyles(inputNumberToken),\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(inputNumberToken),\n ];\n}, prepareComponentToken, {\n unitless: {\n handleOpacity: true,\n },\n resetFont: false,\n});\n","import { FastColor } from '@ant-design/fast-color';\nimport { initComponentToken } from '../../input/style/token';\nexport const prepareComponentToken = (token) => {\n var _a;\n const handleVisible = (_a = token.handleVisible) !== null && _a !== void 0 ? _a : 'auto';\n const handleWidth = token.controlHeightSM - token.lineWidth * 2;\n return Object.assign(Object.assign({}, initComponentToken(token)), { controlWidth: 90, handleWidth, handleFontSize: token.fontSize / 2, handleVisible, handleActiveBg: token.colorFillAlter, handleBg: token.colorBgContainer, filledHandleBg: new FastColor(token.colorFillSecondary)\n .onBackground(token.colorBgContainer)\n .toHexString(), handleHoverColor: token.colorPrimary, handleBorderColor: token.colorBorder, handleOpacity: handleVisible === true ? 1 : 0, handleVisibleWidth: handleVisible === true ? handleWidth : 0 });\n};\n","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","import { unit } from '@ant-design/cssinjs';\nimport { genFocusStyle, resetComponent, resetIcon } from '../../style';\nimport { genCollapseMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nexport const genBaseStyle = (token) => {\n const { componentCls, contentBg, padding, headerBg, headerPadding, collapseHeaderPaddingSM, collapseHeaderPaddingLG, collapsePanelBorderRadius, lineWidth, lineType, colorBorder, colorText, colorTextHeading, colorTextDisabled, fontSizeLG, lineHeight, lineHeightLG, marginSM, paddingSM, paddingLG, paddingXS, motionDurationSlow, fontSizeIcon, contentPadding, fontHeight, fontHeightLG, } = token;\n const borderBase = `${unit(lineWidth)} ${lineType} ${colorBorder}`;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { backgroundColor: headerBg, border: borderBase, borderRadius: collapsePanelBorderRadius, '&-rtl': {\n direction: 'rtl',\n }, [`& > ${componentCls}-item`]: {\n borderBottom: borderBase,\n '&:first-child': {\n [`\n &,\n & > ${componentCls}-header`]: {\n borderRadius: `${unit(collapsePanelBorderRadius)} ${unit(collapsePanelBorderRadius)} 0 0`,\n },\n },\n '&:last-child': {\n [`\n &,\n & > ${componentCls}-header`]: {\n borderRadius: `0 0 ${unit(collapsePanelBorderRadius)} ${unit(collapsePanelBorderRadius)}`,\n },\n },\n [`> ${componentCls}-header`]: Object.assign(Object.assign({ position: 'relative', display: 'flex', flexWrap: 'nowrap', alignItems: 'flex-start', padding: headerPadding, color: colorTextHeading, lineHeight, cursor: 'pointer', transition: `all ${motionDurationSlow}, visibility 0s` }, genFocusStyle(token)), { [`> ${componentCls}-header-text`]: {\n flex: 'auto',\n }, \n // >>>>> Arrow\n [`${componentCls}-expand-icon`]: {\n height: fontHeight,\n display: 'flex',\n alignItems: 'center',\n paddingInlineEnd: marginSM,\n }, [`${componentCls}-arrow`]: Object.assign(Object.assign({}, resetIcon()), { fontSize: fontSizeIcon, \n // when `transform: rotate()` is applied to icon's root element\n transition: `transform ${motionDurationSlow}`, \n // when `transform: rotate()` is applied to icon's child element\n svg: {\n transition: `transform ${motionDurationSlow}`,\n } }), \n // >>>>> Text\n [`${componentCls}-header-text`]: {\n marginInlineEnd: 'auto',\n } }),\n [`${componentCls}-collapsible-header`]: {\n cursor: 'default',\n [`${componentCls}-header-text`]: {\n flex: 'none',\n cursor: 'pointer',\n },\n [`${componentCls}-expand-icon`]: {\n cursor: 'pointer',\n },\n },\n [`${componentCls}-collapsible-icon`]: {\n cursor: 'unset',\n [`${componentCls}-expand-icon`]: {\n cursor: 'pointer',\n },\n },\n }, [`${componentCls}-content`]: {\n color: colorText,\n backgroundColor: contentBg,\n borderTop: borderBase,\n [`& > ${componentCls}-content-box`]: {\n padding: contentPadding,\n },\n '&-hidden': {\n display: 'none',\n },\n }, '&-small': {\n [`> ${componentCls}-item`]: {\n [`> ${componentCls}-header`]: {\n padding: collapseHeaderPaddingSM,\n paddingInlineStart: paddingXS,\n [`> ${componentCls}-expand-icon`]: {\n // Arrow offset\n marginInlineStart: token.calc(paddingSM).sub(paddingXS).equal(),\n },\n },\n [`> ${componentCls}-content > ${componentCls}-content-box`]: {\n padding: paddingSM,\n },\n },\n }, '&-large': {\n [`> ${componentCls}-item`]: {\n fontSize: fontSizeLG,\n lineHeight: lineHeightLG,\n [`> ${componentCls}-header`]: {\n padding: collapseHeaderPaddingLG,\n paddingInlineStart: padding,\n [`> ${componentCls}-expand-icon`]: {\n height: fontHeightLG,\n // Arrow offset\n marginInlineStart: token.calc(paddingLG).sub(padding).equal(),\n },\n },\n [`> ${componentCls}-content > ${componentCls}-content-box`]: {\n padding: paddingLG,\n },\n },\n }, [`${componentCls}-item:last-child`]: {\n borderBottom: 0,\n [`> ${componentCls}-content`]: {\n borderRadius: `0 0 ${unit(collapsePanelBorderRadius)} ${unit(collapsePanelBorderRadius)}`,\n },\n }, [`& ${componentCls}-item-disabled > ${componentCls}-header`]: {\n [`\n &,\n & > .arrow\n `]: {\n color: colorTextDisabled,\n cursor: 'not-allowed',\n },\n }, \n // ========================== Icon Position ==========================\n [`&${componentCls}-icon-position-end`]: {\n [`& > ${componentCls}-item`]: {\n [`> ${componentCls}-header`]: {\n [`${componentCls}-expand-icon`]: {\n order: 1,\n paddingInlineEnd: 0,\n paddingInlineStart: marginSM,\n },\n },\n },\n } }),\n };\n};\nconst genArrowStyle = (token) => {\n const { componentCls } = token;\n const fixedSelector = `> ${componentCls}-item > ${componentCls}-header ${componentCls}-arrow`;\n return {\n [`${componentCls}-rtl`]: {\n [fixedSelector]: {\n transform: `rotate(180deg)`,\n },\n },\n };\n};\nconst genBorderlessStyle = (token) => {\n const { componentCls, headerBg, borderlessContentPadding, borderlessContentBg, colorBorder } = token;\n return {\n [`${componentCls}-borderless`]: {\n backgroundColor: headerBg,\n border: 0,\n [`> ${componentCls}-item`]: {\n borderBottom: `1px solid ${colorBorder}`,\n },\n [`\n > ${componentCls}-item:last-child,\n > ${componentCls}-item:last-child ${componentCls}-header\n `]: {\n borderRadius: 0,\n },\n [`> ${componentCls}-item:last-child`]: {\n borderBottom: 0,\n },\n [`> ${componentCls}-item > ${componentCls}-content`]: {\n backgroundColor: borderlessContentBg,\n borderTop: 0,\n },\n [`> ${componentCls}-item > ${componentCls}-content > ${componentCls}-content-box`]: {\n padding: borderlessContentPadding,\n },\n },\n };\n};\nconst genGhostStyle = (token) => {\n const { componentCls, paddingSM } = token;\n return {\n [`${componentCls}-ghost`]: {\n backgroundColor: 'transparent',\n border: 0,\n [`> ${componentCls}-item`]: {\n borderBottom: 0,\n [`> ${componentCls}-content`]: {\n backgroundColor: 'transparent',\n border: 0,\n [`> ${componentCls}-content-box`]: {\n paddingBlock: paddingSM,\n },\n },\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => ({\n headerPadding: `${token.paddingSM}px ${token.padding}px`,\n headerBg: token.colorFillAlter,\n contentPadding: `${token.padding}px 16px`, // Fixed Value\n contentBg: token.colorBgContainer,\n borderlessContentPadding: `${token.paddingXXS}px 16px ${token.padding}px`,\n borderlessContentBg: 'transparent',\n});\nexport default genStyleHooks('Collapse', (token) => {\n const collapseToken = mergeToken(token, {\n collapseHeaderPaddingSM: `${unit(token.paddingXS)} ${unit(token.paddingSM)}`,\n collapseHeaderPaddingLG: `${unit(token.padding)} ${unit(token.paddingLG)}`,\n collapsePanelBorderRadius: token.borderRadiusLG,\n });\n return [\n genBaseStyle(collapseToken),\n genBorderlessStyle(collapseToken),\n genGhostStyle(collapseToken),\n genArrowStyle(collapseToken),\n genCollapseMotion(collapseToken),\n ];\n}, prepareComponentToken);\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import React from 'react';\nimport useToken from '../../theme/useToken';\nimport { devUseWarning } from '../warning';\nimport zIndexContext from '../zindexContext';\n// Z-Index control range\n// Container: 1000 + offset 100 (max base + 10 * offset = 2000)\n// Popover: offset 50\n// Notification: Container Max zIndex + componentOffset\nconst CONTAINER_OFFSET = 100;\nconst CONTAINER_OFFSET_MAX_COUNT = 10;\nexport const CONTAINER_MAX_OFFSET = CONTAINER_OFFSET * CONTAINER_OFFSET_MAX_COUNT;\n/**\n * Static function will default be the `CONTAINER_MAX_OFFSET`.\n * But it still may have children component like Select, Dropdown.\n * So the warning zIndex should exceed the `CONTAINER_MAX_OFFSET`.\n */\nconst CONTAINER_MAX_OFFSET_WITH_CHILDREN = CONTAINER_MAX_OFFSET + CONTAINER_OFFSET;\nexport const containerBaseZIndexOffset = {\n Modal: CONTAINER_OFFSET,\n Drawer: CONTAINER_OFFSET,\n Popover: CONTAINER_OFFSET,\n Popconfirm: CONTAINER_OFFSET,\n Tooltip: CONTAINER_OFFSET,\n Tour: CONTAINER_OFFSET,\n FloatButton: CONTAINER_OFFSET,\n};\nexport const consumerBaseZIndexOffset = {\n SelectLike: 50,\n Dropdown: 50,\n DatePicker: 50,\n Menu: 50,\n ImagePreview: 1,\n};\nfunction isContainerType(type) {\n return type in containerBaseZIndexOffset;\n}\nexport const useZIndex = (componentType, customZIndex) => {\n const [, token] = useToken();\n const parentZIndex = React.useContext(zIndexContext);\n const isContainer = isContainerType(componentType);\n let result;\n if (customZIndex !== undefined) {\n result = [customZIndex, customZIndex];\n }\n else {\n let zIndex = parentZIndex !== null && parentZIndex !== void 0 ? parentZIndex : 0;\n if (isContainer) {\n zIndex +=\n // Use preset token zIndex by default but not stack when has parent container\n (parentZIndex ? 0 : token.zIndexPopupBase) +\n // Container offset\n containerBaseZIndexOffset[componentType];\n }\n else {\n zIndex += consumerBaseZIndexOffset[componentType];\n }\n result = [parentZIndex === undefined ? customZIndex : zIndex, zIndex];\n }\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning(componentType);\n const maxZIndex = token.zIndexPopupBase + CONTAINER_MAX_OFFSET_WITH_CHILDREN;\n const currentZIndex = result[0] || 0;\n warning(customZIndex !== undefined || currentZIndex <= maxZIndex, 'usage', '`zIndex` is over design token `zIndexPopupBase` too much. It may cause unexpected override.');\n }\n return result;\n};\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport classnames from 'classnames';\nimport React from 'react';\nvar PanelContent = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n forceRender = props.forceRender,\n className = props.className,\n style = props.style,\n children = props.children,\n isActive = props.isActive,\n role = props.role,\n customizeClassNames = props.classNames,\n styles = props.styles;\n var _React$useState = React.useState(isActive || forceRender),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n rendered = _React$useState2[0],\n setRendered = _React$useState2[1];\n React.useEffect(function () {\n if (forceRender || isActive) {\n setRendered(true);\n }\n }, [forceRender, isActive]);\n if (!rendered) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n className: classnames(\"\".concat(prefixCls, \"-content\"), _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-content-active\"), isActive), \"\".concat(prefixCls, \"-content-inactive\"), !isActive), className),\n style: style,\n role: role\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-content-box\"), customizeClassNames === null || customizeClassNames === void 0 ? void 0 : customizeClassNames.body),\n style: styles === null || styles === void 0 ? void 0 : styles.body\n }, children));\n});\nPanelContent.displayName = 'PanelContent';\nexport default PanelContent;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"showArrow\", \"headerClass\", \"isActive\", \"onItemClick\", \"forceRender\", \"className\", \"classNames\", \"styles\", \"prefixCls\", \"collapsible\", \"accordion\", \"panelKey\", \"extra\", \"header\", \"expandIcon\", \"openMotion\", \"destroyInactivePanel\", \"children\"];\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport React from 'react';\nimport PanelContent from \"./PanelContent\";\nvar CollapsePanel = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _props$showArrow = props.showArrow,\n showArrow = _props$showArrow === void 0 ? true : _props$showArrow,\n headerClass = props.headerClass,\n isActive = props.isActive,\n onItemClick = props.onItemClick,\n forceRender = props.forceRender,\n className = props.className,\n _props$classNames = props.classNames,\n customizeClassNames = _props$classNames === void 0 ? {} : _props$classNames,\n _props$styles = props.styles,\n styles = _props$styles === void 0 ? {} : _props$styles,\n prefixCls = props.prefixCls,\n collapsible = props.collapsible,\n accordion = props.accordion,\n panelKey = props.panelKey,\n extra = props.extra,\n header = props.header,\n expandIcon = props.expandIcon,\n openMotion = props.openMotion,\n destroyInactivePanel = props.destroyInactivePanel,\n children = props.children,\n resetProps = _objectWithoutProperties(props, _excluded);\n var disabled = collapsible === 'disabled';\n var ifExtraExist = extra !== null && extra !== undefined && typeof extra !== 'boolean';\n var collapsibleProps = _defineProperty(_defineProperty(_defineProperty({\n onClick: function onClick() {\n onItemClick === null || onItemClick === void 0 || onItemClick(panelKey);\n },\n onKeyDown: function onKeyDown(e) {\n if (e.key === 'Enter' || e.keyCode === KeyCode.ENTER || e.which === KeyCode.ENTER) {\n onItemClick === null || onItemClick === void 0 || onItemClick(panelKey);\n }\n },\n role: accordion ? 'tab' : 'button'\n }, 'aria-expanded', isActive), 'aria-disabled', disabled), \"tabIndex\", disabled ? -1 : 0);\n\n // ======================== Icon ========================\n var iconNodeInner = typeof expandIcon === 'function' ? expandIcon(props) : /*#__PURE__*/React.createElement(\"i\", {\n className: \"arrow\"\n });\n var iconNode = iconNodeInner && /*#__PURE__*/React.createElement(\"div\", _extends({\n className: \"\".concat(prefixCls, \"-expand-icon\")\n }, ['header', 'icon'].includes(collapsible) ? collapsibleProps : {}), iconNodeInner);\n var collapsePanelClassNames = classNames(\"\".concat(prefixCls, \"-item\"), _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-item-active\"), isActive), \"\".concat(prefixCls, \"-item-disabled\"), disabled), className);\n var headerClassName = classNames(headerClass, \"\".concat(prefixCls, \"-header\"), _defineProperty({}, \"\".concat(prefixCls, \"-collapsible-\").concat(collapsible), !!collapsible), customizeClassNames.header);\n\n // ======================== HeaderProps ========================\n var headerProps = _objectSpread({\n className: headerClassName,\n style: styles.header\n }, ['header', 'icon'].includes(collapsible) ? {} : collapsibleProps);\n\n // ======================== Render ========================\n return /*#__PURE__*/React.createElement(\"div\", _extends({}, resetProps, {\n ref: ref,\n className: collapsePanelClassNames\n }), /*#__PURE__*/React.createElement(\"div\", headerProps, showArrow && iconNode, /*#__PURE__*/React.createElement(\"span\", _extends({\n className: \"\".concat(prefixCls, \"-header-text\")\n }, collapsible === 'header' ? collapsibleProps : {}), header), ifExtraExist && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-extra\")\n }, extra)), /*#__PURE__*/React.createElement(CSSMotion, _extends({\n visible: isActive,\n leavedClassName: \"\".concat(prefixCls, \"-content-hidden\")\n }, openMotion, {\n forceRender: forceRender,\n removeOnLeave: destroyInactivePanel\n }), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(PanelContent, {\n ref: motionRef,\n prefixCls: prefixCls,\n className: motionClassName,\n classNames: customizeClassNames,\n style: motionStyle,\n styles: styles,\n isActive: isActive,\n forceRender: forceRender,\n role: accordion ? 'tabpanel' : void 0\n }, children);\n }));\n});\nexport default CollapsePanel;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\", \"label\", \"key\", \"collapsible\", \"onItemClick\", \"destroyInactivePanel\"];\nimport toArray from \"rc-util/es/Children/toArray\";\nimport React from 'react';\nimport CollapsePanel from \"../Panel\";\nvar convertItemsToNodes = function convertItemsToNodes(items, props) {\n var prefixCls = props.prefixCls,\n accordion = props.accordion,\n collapsible = props.collapsible,\n destroyInactivePanel = props.destroyInactivePanel,\n onItemClick = props.onItemClick,\n activeKey = props.activeKey,\n openMotion = props.openMotion,\n expandIcon = props.expandIcon;\n return items.map(function (item, index) {\n var children = item.children,\n label = item.label,\n rawKey = item.key,\n rawCollapsible = item.collapsible,\n rawOnItemClick = item.onItemClick,\n rawDestroyInactivePanel = item.destroyInactivePanel,\n restProps = _objectWithoutProperties(item, _excluded);\n\n // You may be puzzled why you want to convert them all into strings, me too.\n // Maybe: https://github.com/react-component/collapse/blob/aac303a8b6ff30e35060b4f8fecde6f4556fcbe2/src/Collapse.tsx#L15\n var key = String(rawKey !== null && rawKey !== void 0 ? rawKey : index);\n var mergeCollapsible = rawCollapsible !== null && rawCollapsible !== void 0 ? rawCollapsible : collapsible;\n var mergeDestroyInactivePanel = rawDestroyInactivePanel !== null && rawDestroyInactivePanel !== void 0 ? rawDestroyInactivePanel : destroyInactivePanel;\n var handleItemClick = function handleItemClick(value) {\n if (mergeCollapsible === 'disabled') return;\n onItemClick(value);\n rawOnItemClick === null || rawOnItemClick === void 0 || rawOnItemClick(value);\n };\n var isActive = false;\n if (accordion) {\n isActive = activeKey[0] === key;\n } else {\n isActive = activeKey.indexOf(key) > -1;\n }\n return /*#__PURE__*/React.createElement(CollapsePanel, _extends({}, restProps, {\n prefixCls: prefixCls,\n key: key,\n panelKey: key,\n isActive: isActive,\n accordion: accordion,\n openMotion: openMotion,\n expandIcon: expandIcon,\n header: label,\n collapsible: mergeCollapsible,\n onItemClick: handleItemClick,\n destroyInactivePanel: mergeDestroyInactivePanel\n }), children);\n });\n};\n\n/**\n * @deprecated The next major version will be removed\n */\nvar getNewChild = function getNewChild(child, index, props) {\n if (!child) return null;\n var prefixCls = props.prefixCls,\n accordion = props.accordion,\n collapsible = props.collapsible,\n destroyInactivePanel = props.destroyInactivePanel,\n onItemClick = props.onItemClick,\n activeKey = props.activeKey,\n openMotion = props.openMotion,\n expandIcon = props.expandIcon;\n var key = child.key || String(index);\n var _child$props = child.props,\n header = _child$props.header,\n headerClass = _child$props.headerClass,\n childDestroyInactivePanel = _child$props.destroyInactivePanel,\n childCollapsible = _child$props.collapsible,\n childOnItemClick = _child$props.onItemClick;\n var isActive = false;\n if (accordion) {\n isActive = activeKey[0] === key;\n } else {\n isActive = activeKey.indexOf(key) > -1;\n }\n var mergeCollapsible = childCollapsible !== null && childCollapsible !== void 0 ? childCollapsible : collapsible;\n var handleItemClick = function handleItemClick(value) {\n if (mergeCollapsible === 'disabled') return;\n onItemClick(value);\n childOnItemClick === null || childOnItemClick === void 0 || childOnItemClick(value);\n };\n var childProps = {\n key: key,\n panelKey: key,\n header: header,\n headerClass: headerClass,\n isActive: isActive,\n prefixCls: prefixCls,\n destroyInactivePanel: childDestroyInactivePanel !== null && childDestroyInactivePanel !== void 0 ? childDestroyInactivePanel : destroyInactivePanel,\n openMotion: openMotion,\n accordion: accordion,\n children: child.props.children,\n onItemClick: handleItemClick,\n expandIcon: expandIcon,\n collapsible: mergeCollapsible\n };\n\n // https://github.com/ant-design/ant-design/issues/20479\n if (typeof child.type === 'string') {\n return child;\n }\n Object.keys(childProps).forEach(function (propName) {\n if (typeof childProps[propName] === 'undefined') {\n delete childProps[propName];\n }\n });\n return /*#__PURE__*/React.cloneElement(child, childProps);\n};\nfunction useItems(items, rawChildren, props) {\n if (Array.isArray(items)) {\n return convertItemsToNodes(items, props);\n }\n return toArray(rawChildren).map(function (child, index) {\n return getNewChild(child, index, props);\n });\n}\nexport default useItems;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport warning from \"rc-util/es/warning\";\nimport React from 'react';\nimport useItems from \"./hooks/useItems\";\nimport CollapsePanel from \"./Panel\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nfunction getActiveKeysArray(activeKey) {\n var currentActiveKey = activeKey;\n if (!Array.isArray(currentActiveKey)) {\n var activeKeyType = _typeof(currentActiveKey);\n currentActiveKey = activeKeyType === 'number' || activeKeyType === 'string' ? [currentActiveKey] : [];\n }\n return currentActiveKey.map(function (key) {\n return String(key);\n });\n}\nvar Collapse = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-collapse' : _props$prefixCls,\n _props$destroyInactiv = props.destroyInactivePanel,\n destroyInactivePanel = _props$destroyInactiv === void 0 ? false : _props$destroyInactiv,\n style = props.style,\n accordion = props.accordion,\n className = props.className,\n children = props.children,\n collapsible = props.collapsible,\n openMotion = props.openMotion,\n expandIcon = props.expandIcon,\n rawActiveKey = props.activeKey,\n defaultActiveKey = props.defaultActiveKey,\n _onChange = props.onChange,\n items = props.items;\n var collapseClassName = classNames(prefixCls, className);\n var _useMergedState = useMergedState([], {\n value: rawActiveKey,\n onChange: function onChange(v) {\n return _onChange === null || _onChange === void 0 ? void 0 : _onChange(v);\n },\n defaultValue: defaultActiveKey,\n postState: getActiveKeysArray\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n activeKey = _useMergedState2[0],\n setActiveKey = _useMergedState2[1];\n var onItemClick = function onItemClick(key) {\n return setActiveKey(function () {\n if (accordion) {\n return activeKey[0] === key ? [] : [key];\n }\n var index = activeKey.indexOf(key);\n var isActive = index > -1;\n if (isActive) {\n return activeKey.filter(function (item) {\n return item !== key;\n });\n }\n return [].concat(_toConsumableArray(activeKey), [key]);\n });\n };\n\n // ======================== Children ========================\n warning(!children, '[rc-collapse] `children` will be removed in next major version. Please use `items` instead.');\n var mergedChildren = useItems(items, children, {\n prefixCls: prefixCls,\n accordion: accordion,\n openMotion: openMotion,\n expandIcon: expandIcon,\n collapsible: collapsible,\n destroyInactivePanel: destroyInactivePanel,\n onItemClick: onItemClick,\n activeKey: activeKey\n });\n\n // ======================== Render ========================\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: ref,\n className: collapseClassName,\n style: style,\n role: accordion ? 'tablist' : undefined\n }, pickAttrs(props, {\n aria: true,\n data: true\n })), mergedChildren);\n});\nexport default Object.assign(Collapse, {\n /**\n * @deprecated use `items` instead, will be removed in `v4.0.0`\n */\n Panel: CollapsePanel\n});","import Collapse from \"./Collapse\";\nexport default Collapse;\n\n/**\n * @deprecated use `items` instead, will be removed in `v4.0.0`\n */\nvar Panel = Collapse.Panel;\nexport { Panel };","import * as React from 'react';\nimport classNames from 'classnames';\nimport RcCollapse from 'rc-collapse';\nimport { devUseWarning } from '../_util/warning';\nimport { ConfigContext } from '../config-provider';\nconst CollapsePanel = React.forwardRef((props, ref) => {\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Collapse.Panel');\n warning.deprecated(!('disabled' in props), 'disabled', 'collapsible=\"disabled\"');\n }\n const { getPrefixCls } = React.useContext(ConfigContext);\n const { prefixCls: customizePrefixCls, className, showArrow = true } = props;\n const prefixCls = getPrefixCls('collapse', customizePrefixCls);\n const collapsePanelClassName = classNames({\n [`${prefixCls}-no-arrow`]: !showArrow,\n }, className);\n return (React.createElement(RcCollapse.Panel, Object.assign({ ref: ref }, props, { prefixCls: prefixCls, className: collapsePanelClassName })));\n});\nexport default CollapsePanel;\n","import * as React from 'react';\nimport RightOutlined from '@ant-design/icons/RightOutlined';\nimport classNames from 'classnames';\nimport RcCollapse from 'rc-collapse';\nimport toArray from 'rc-util/lib/Children/toArray';\nimport omit from 'rc-util/lib/omit';\nimport initCollapseMotion from '../_util/motion';\nimport { cloneElement } from '../_util/reactNode';\nimport { devUseWarning } from '../_util/warning';\nimport { useComponentConfig } from '../config-provider/context';\nimport useSize from '../config-provider/hooks/useSize';\nimport CollapsePanel from './CollapsePanel';\nimport useStyle from './style';\nconst Collapse = React.forwardRef((props, ref) => {\n const { getPrefixCls, direction, expandIcon: contextExpandIcon, className: contextClassName, style: contextStyle, } = useComponentConfig('collapse');\n const { prefixCls: customizePrefixCls, className, rootClassName, style, bordered = true, ghost, size: customizeSize, expandIconPosition = 'start', children, destroyInactivePanel, destroyOnHidden, expandIcon, } = props;\n const mergedSize = useSize((ctx) => { var _a; return (_a = customizeSize !== null && customizeSize !== void 0 ? customizeSize : ctx) !== null && _a !== void 0 ? _a : 'middle'; });\n const prefixCls = getPrefixCls('collapse', customizePrefixCls);\n const rootPrefixCls = getPrefixCls();\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n if (process.env.NODE_ENV !== 'production') {\n const warning = devUseWarning('Collapse');\n // Warning if use legacy type `expandIconPosition`\n warning(expandIconPosition !== 'left' && expandIconPosition !== 'right', 'deprecated', '`expandIconPosition` with `left` or `right` is deprecated. Please use `start` or `end` instead.');\n warning.deprecated(!('destroyInactivePanel' in props), 'destroyInactivePanel', 'destroyOnHidden');\n }\n // Align with logic position\n const mergedExpandIconPosition = React.useMemo(() => {\n if (expandIconPosition === 'left') {\n return 'start';\n }\n return expandIconPosition === 'right' ? 'end' : expandIconPosition;\n }, [expandIconPosition]);\n const mergedExpandIcon = expandIcon !== null && expandIcon !== void 0 ? expandIcon : contextExpandIcon;\n const renderExpandIcon = React.useCallback((panelProps = {}) => {\n const icon = typeof mergedExpandIcon === 'function' ? (mergedExpandIcon(panelProps)) : (React.createElement(RightOutlined, { rotate: panelProps.isActive ? (direction === 'rtl' ? -90 : 90) : undefined, \"aria-label\": panelProps.isActive ? 'expanded' : 'collapsed' }));\n return cloneElement(icon, () => {\n var _a;\n return ({\n className: classNames((_a = icon.props) === null || _a === void 0 ? void 0 : _a.className, `${prefixCls}-arrow`),\n });\n });\n }, [mergedExpandIcon, prefixCls, direction]);\n const collapseClassName = classNames(`${prefixCls}-icon-position-${mergedExpandIconPosition}`, {\n [`${prefixCls}-borderless`]: !bordered,\n [`${prefixCls}-rtl`]: direction === 'rtl',\n [`${prefixCls}-ghost`]: !!ghost,\n [`${prefixCls}-${mergedSize}`]: mergedSize !== 'middle',\n }, contextClassName, className, rootClassName, hashId, cssVarCls);\n const openMotion = React.useMemo(() => (Object.assign(Object.assign({}, initCollapseMotion(rootPrefixCls)), { motionAppear: false, leavedClassName: `${prefixCls}-content-hidden` })), [rootPrefixCls, prefixCls]);\n const items = React.useMemo(() => {\n if (!children) {\n return null;\n }\n return toArray(children).map((child, index) => {\n var _a, _b;\n const childProps = child.props;\n if (childProps === null || childProps === void 0 ? void 0 : childProps.disabled) {\n const key = (_a = child.key) !== null && _a !== void 0 ? _a : String(index);\n const mergedChildProps = Object.assign(Object.assign({}, omit(child.props, ['disabled'])), { key, collapsible: (_b = childProps.collapsible) !== null && _b !== void 0 ? _b : 'disabled' });\n return cloneElement(child, mergedChildProps);\n }\n return child;\n });\n }, [children]);\n return wrapCSSVar(\n // @ts-ignore\n React.createElement(RcCollapse, Object.assign({ ref: ref, openMotion: openMotion }, omit(props, ['rootClassName']), { expandIcon: renderExpandIcon, prefixCls: prefixCls, className: collapseClassName, style: Object.assign(Object.assign({}, contextStyle), style), \n // TODO: In the future, destroyInactivePanel in rc-collapse needs to be upgrade to destroyOnHidden\n destroyInactivePanel: destroyOnHidden !== null && destroyOnHidden !== void 0 ? destroyOnHidden : destroyInactivePanel }), items));\n});\nif (process.env.NODE_ENV !== 'production') {\n Collapse.displayName = 'Collapse';\n}\nexport default Object.assign(Collapse, { Panel: CollapsePanel });\n","import Collapse from './Collapse';\nexport default Collapse;\n","var map = {\n\t\"./affix/style/index.ts\": 3481,\n\t\"./alert/style/index.ts\": 2793,\n\t\"./anchor/style/index.ts\": 6872,\n\t\"./app/style/index.ts\": 4680,\n\t\"./avatar/style/index.ts\": 1464,\n\t\"./back-top/style/index.ts\": 7360,\n\t\"./badge/style/index.ts\": 9468,\n\t\"./breadcrumb/style/index.ts\": 1328,\n\t\"./button/style/index.ts\": 5556,\n\t\"./calendar/style/index.ts\": 7567,\n\t\"./card/style/index.ts\": 2983,\n\t\"./carousel/style/index.ts\": 4435,\n\t\"./cascader/style/index.ts\": 5157,\n\t\"./checkbox/style/index.ts\": 8940,\n\t\"./col/style/index.ts\": 5129,\n\t\"./collapse/style/index.ts\": 3970,\n\t\"./color-picker/style/index.ts\": 1505,\n\t\"./config-provider/style/index.ts\": 923,\n\t\"./date-picker/style/index.ts\": 5335,\n\t\"./descriptions/style/index.ts\": 1786,\n\t\"./divider/style/index.ts\": 9986,\n\t\"./drawer/style/index.ts\": 1362,\n\t\"./dropdown/style/index.ts\": 7961,\n\t\"./empty/style/index.ts\": 9250,\n\t\"./flex/style/index.ts\": 4190,\n\t\"./float-button/style/index.ts\": 802,\n\t\"./form/style/index.ts\": 2118,\n\t\"./grid/style/index.ts\": 6785,\n\t\"./image/style/index.ts\": 7662,\n\t\"./input-number/style/index.ts\": 3912,\n\t\"./input/style/index.ts\": 2171,\n\t\"./layout/style/index.ts\": 8287,\n\t\"./list/style/index.ts\": 8753,\n\t\"./mentions/style/index.ts\": 2662,\n\t\"./menu/style/index.ts\": 2653,\n\t\"./message/style/index.ts\": 5088,\n\t\"./modal/style/index.ts\": 6650,\n\t\"./notification/style/index.ts\": 4828,\n\t\"./pagination/style/index.ts\": 7137,\n\t\"./popconfirm/style/index.ts\": 3084,\n\t\"./popover/style/index.ts\": 6438,\n\t\"./progress/style/index.ts\": 8034,\n\t\"./qr-code/style/index.ts\": 1808,\n\t\"./qrcode/style/index.ts\": 8799,\n\t\"./radio/style/index.ts\": 7584,\n\t\"./rate/style/index.ts\": 4199,\n\t\"./result/style/index.ts\": 6552,\n\t\"./row/style/index.ts\": 6083,\n\t\"./segmented/style/index.ts\": 8367,\n\t\"./select/style/index.ts\": 4685,\n\t\"./skeleton/style/index.ts\": 6114,\n\t\"./slider/style/index.ts\": 3432,\n\t\"./space/style/index.ts\": 5891,\n\t\"./spin/style/index.ts\": 3073,\n\t\"./splitter/style/index.ts\": 970,\n\t\"./statistic/style/index.ts\": 2221,\n\t\"./steps/style/index.ts\": 8893,\n\t\"./switch/style/index.ts\": 9121,\n\t\"./table/style/index.ts\": 7740,\n\t\"./tabs/style/index.ts\": 9501,\n\t\"./tag/style/index.ts\": 3003,\n\t\"./timeline/style/index.ts\": 4730,\n\t\"./tooltip/style/index.ts\": 7204,\n\t\"./tour/style/index.ts\": 5035,\n\t\"./transfer/style/index.ts\": 3402,\n\t\"./tree-select/style/index.ts\": 1756,\n\t\"./tree/style/index.ts\": 3204,\n\t\"./typography/style/index.ts\": 247,\n\t\"./upload/style/index.ts\": 2220\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4099;","const genControlHeight = (token) => {\n const { controlHeight } = token;\n return {\n controlHeightSM: controlHeight * 0.75,\n controlHeightXS: controlHeight * 0.5,\n controlHeightLG: controlHeight * 1.25,\n };\n};\nexport default genControlHeight;\n","import { genStyleHooks, mergeToken } from '../../theme/internal';\nimport { alignItemsValues, flexWrapValues, justifyContentValues } from '../utils';\nconst genFlexStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: {\n display: 'flex',\n margin: 0,\n padding: 0,\n '&-vertical': {\n flexDirection: 'column',\n },\n '&-rtl': {\n direction: 'rtl',\n },\n '&:empty': {\n display: 'none',\n },\n },\n };\n};\nconst genFlexGapStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: {\n '&-gap-small': {\n gap: token.flexGapSM,\n },\n '&-gap-middle': {\n gap: token.flexGap,\n },\n '&-gap-large': {\n gap: token.flexGapLG,\n },\n },\n };\n};\nconst genFlexWrapStyle = (token) => {\n const { componentCls } = token;\n const wrapStyle = {};\n flexWrapValues.forEach((value) => {\n wrapStyle[`${componentCls}-wrap-${value}`] = { flexWrap: value };\n });\n return wrapStyle;\n};\nconst genAlignItemsStyle = (token) => {\n const { componentCls } = token;\n const alignStyle = {};\n alignItemsValues.forEach((value) => {\n alignStyle[`${componentCls}-align-${value}`] = { alignItems: value };\n });\n return alignStyle;\n};\nconst genJustifyContentStyle = (token) => {\n const { componentCls } = token;\n const justifyStyle = {};\n justifyContentValues.forEach((value) => {\n justifyStyle[`${componentCls}-justify-${value}`] = { justifyContent: value };\n });\n return justifyStyle;\n};\nexport const prepareComponentToken = () => ({});\nexport default genStyleHooks('Flex', (token) => {\n const { paddingXS, padding, paddingLG } = token;\n const flexToken = mergeToken(token, {\n flexGapSM: paddingXS,\n flexGap: padding,\n flexGapLG: paddingLG,\n });\n return [\n genFlexStyle(flexToken),\n genFlexGapStyle(flexToken),\n genFlexWrapStyle(flexToken),\n genAlignItemsStyle(flexToken),\n genJustifyContentStyle(flexToken),\n ];\n}, prepareComponentToken, {\n // Flex component don't apply extra font style\n // https://github.com/ant-design/ant-design/issues/46403\n resetStyle: false,\n});\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genRateStarStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-star`]: {\n position: 'relative',\n display: 'inline-block',\n color: 'inherit',\n cursor: 'pointer',\n '&:not(:last-child)': {\n marginInlineEnd: token.marginXS,\n },\n '> div': {\n transition: `all ${token.motionDurationMid}, outline 0s`,\n '&:hover': {\n transform: token.starHoverScale,\n },\n '&:focus': {\n outline: 0,\n },\n '&:focus-visible': {\n outline: `${unit(token.lineWidth)} dashed ${token.starColor}`,\n transform: token.starHoverScale,\n },\n },\n '&-first, &-second': {\n color: token.starBg,\n transition: `all ${token.motionDurationMid}`,\n userSelect: 'none',\n },\n '&-first': {\n position: 'absolute',\n top: 0,\n insetInlineStart: 0,\n width: '50%',\n height: '100%',\n overflow: 'hidden',\n opacity: 0,\n },\n [`&-half ${componentCls}-star-first, &-half ${componentCls}-star-second`]: {\n opacity: 1,\n },\n [`&-half ${componentCls}-star-first, &-full ${componentCls}-star-second`]: {\n color: 'inherit',\n },\n },\n };\n};\nconst genRateRtlStyle = (token) => ({\n [`&-rtl${token.componentCls}`]: {\n direction: 'rtl',\n },\n});\nconst genRateStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), { display: 'inline-block', margin: 0, padding: 0, color: token.starColor, fontSize: token.starSize, lineHeight: 1, listStyle: 'none', outline: 'none', \n // disable styles\n [`&-disabled${componentCls} ${componentCls}-star`]: {\n cursor: 'default',\n '> div:hover': {\n transform: 'scale(1)',\n },\n } }), genRateStarStyle(token)), genRateRtlStyle(token)),\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => ({\n starColor: token.yellow6,\n starSize: token.controlHeightLG * 0.5,\n starHoverScale: 'scale(1.1)',\n starBg: token.colorFillContent,\n});\nexport default genStyleHooks('Rate', (token) => {\n const rateToken = mergeToken(token, {});\n return genRateStyle(rateToken);\n}, prepareComponentToken);\n","import _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nvar AbstractCalculator = /*#__PURE__*/_createClass(function AbstractCalculator() {\n _classCallCheck(this, AbstractCalculator);\n});\nexport default AbstractCalculator;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n if (typeof value === 'number') {\n return \"\".concat(value).concat(CALC_UNIT);\n }\n return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n _inherits(CSSCalculator, _AbstractCalculator);\n var _super = _createSuper(CSSCalculator);\n function CSSCalculator(num, unitlessCssVar) {\n var _this;\n _classCallCheck(this, CSSCalculator);\n _this = _super.call(this);\n _defineProperty(_assertThisInitialized(_this), \"result\", '');\n _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n var numType = _typeof(num);\n _this.unitlessCssVar = unitlessCssVar;\n if (num instanceof CSSCalculator) {\n _this.result = \"(\".concat(num.result, \")\");\n } else if (numType === 'number') {\n _this.result = unit(num);\n } else if (numType === 'string') {\n _this.result = num;\n }\n return _this;\n }\n _createClass(CSSCalculator, [{\n key: \"add\",\n value: function add(num) {\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n }\n this.lowPriority = true;\n return this;\n }\n }, {\n key: \"sub\",\n value: function sub(num) {\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n }\n this.lowPriority = true;\n return this;\n }\n }, {\n key: \"mul\",\n value: function mul(num) {\n if (this.lowPriority) {\n this.result = \"(\".concat(this.result, \")\");\n }\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" * \").concat(num);\n }\n this.lowPriority = false;\n return this;\n }\n }, {\n key: \"div\",\n value: function div(num) {\n if (this.lowPriority) {\n this.result = \"(\".concat(this.result, \")\");\n }\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" / \").concat(num);\n }\n this.lowPriority = false;\n return this;\n }\n }, {\n key: \"getResult\",\n value: function getResult(force) {\n return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n }\n }, {\n key: \"equal\",\n value: function equal(options) {\n var _this2 = this;\n var _ref = options || {},\n cssUnit = _ref.unit;\n var mergedUnit = true;\n if (typeof cssUnit === 'boolean') {\n mergedUnit = cssUnit;\n } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n return _this2.result.includes(cssVar);\n })) {\n mergedUnit = false;\n }\n this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n if (typeof this.lowPriority !== 'undefined') {\n return \"calc(\".concat(this.result, \")\");\n }\n return this.result;\n }\n }]);\n return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar NumCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n _inherits(NumCalculator, _AbstractCalculator);\n var _super = _createSuper(NumCalculator);\n function NumCalculator(num) {\n var _this;\n _classCallCheck(this, NumCalculator);\n _this = _super.call(this);\n _defineProperty(_assertThisInitialized(_this), \"result\", 0);\n if (num instanceof NumCalculator) {\n _this.result = num.result;\n } else if (typeof num === 'number') {\n _this.result = num;\n }\n return _this;\n }\n _createClass(NumCalculator, [{\n key: \"add\",\n value: function add(num) {\n if (num instanceof NumCalculator) {\n this.result += num.result;\n } else if (typeof num === 'number') {\n this.result += num;\n }\n return this;\n }\n }, {\n key: \"sub\",\n value: function sub(num) {\n if (num instanceof NumCalculator) {\n this.result -= num.result;\n } else if (typeof num === 'number') {\n this.result -= num;\n }\n return this;\n }\n }, {\n key: \"mul\",\n value: function mul(num) {\n if (num instanceof NumCalculator) {\n this.result *= num.result;\n } else if (typeof num === 'number') {\n this.result *= num;\n }\n return this;\n }\n }, {\n key: \"div\",\n value: function div(num) {\n if (num instanceof NumCalculator) {\n this.result /= num.result;\n } else if (typeof num === 'number') {\n this.result /= num;\n }\n return this;\n }\n }, {\n key: \"equal\",\n value: function equal() {\n return this.result;\n }\n }]);\n return NumCalculator;\n}(AbstractCalculator);\nexport default NumCalculator;","import CSSCalculator from \"./CSSCalculator\";\nimport NumCalculator from \"./NumCalculator\";\nvar genCalc = function genCalc(type, unitlessCssVar) {\n var Calculator = type === 'css' ? CSSCalculator : NumCalculator;\n return function (num) {\n return new Calculator(num, unitlessCssVar);\n };\n};\nexport default genCalc;","var getCompVarPrefix = function getCompVarPrefix(component, prefix) {\n return \"\".concat([prefix, component.replace(/([A-Z]+)([A-Z][a-z]+)/g, '$1-$2').replace(/([a-z])([A-Z])/g, '$1-$2')].filter(Boolean).join('-'));\n};\nexport default getCompVarPrefix;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from 'rc-util';\nfunction getComponentToken(component, token, defaultToken, options) {\n var customToken = _objectSpread({}, token[component]);\n if (options !== null && options !== void 0 && options.deprecatedTokens) {\n var deprecatedTokens = options.deprecatedTokens;\n deprecatedTokens.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n oldTokenKey = _ref2[0],\n newTokenKey = _ref2[1];\n if (process.env.NODE_ENV !== 'production') {\n warning(!(customToken !== null && customToken !== void 0 && customToken[oldTokenKey]), \"Component Token `\".concat(String(oldTokenKey), \"` of \").concat(String(component), \" is deprecated. Please use `\").concat(String(newTokenKey), \"` instead.\"));\n }\n\n // Should wrap with `if` clause, or there will be `undefined` in object.\n if (customToken !== null && customToken !== void 0 && customToken[oldTokenKey] || customToken !== null && customToken !== void 0 && customToken[newTokenKey]) {\n var _customToken$newToken;\n (_customToken$newToken = customToken[newTokenKey]) !== null && _customToken$newToken !== void 0 ? _customToken$newToken : customToken[newTokenKey] = customToken === null || customToken === void 0 ? void 0 : customToken[oldTokenKey];\n }\n });\n }\n var mergedToken = _objectSpread(_objectSpread({}, defaultToken), customToken);\n\n // Remove same value as global token to minimize size\n Object.keys(mergedToken).forEach(function (key) {\n if (mergedToken[key] === token[key]) {\n delete mergedToken[key];\n }\n });\n return mergedToken;\n}\nexport default getComponentToken;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar enableStatistic = process.env.NODE_ENV !== 'production' || typeof CSSINJS_STATISTIC !== 'undefined';\nvar recording = true;\n\n/**\n * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to\n * pass all value access in development. To support statistic field usage with alias token.\n */\nexport function merge() {\n for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {\n objs[_key] = arguments[_key];\n }\n /* istanbul ignore next */\n if (!enableStatistic) {\n return Object.assign.apply(Object, [{}].concat(objs));\n }\n recording = false;\n var ret = {};\n objs.forEach(function (obj) {\n if (_typeof(obj) !== 'object') {\n return;\n }\n var keys = Object.keys(obj);\n keys.forEach(function (key) {\n Object.defineProperty(ret, key, {\n configurable: true,\n enumerable: true,\n get: function get() {\n return obj[key];\n }\n });\n });\n });\n recording = true;\n return ret;\n}\n\n/** @internal Internal Usage. Not use in your production. */\nexport var statistic = {};\n\n/** @internal Internal Usage. Not use in your production. */\nexport var _statistic_build_ = {};\n\n/* istanbul ignore next */\nfunction noop() {}\n\n/** Statistic token usage case. Should use `merge` function if you do not want spread record. */\nvar statisticToken = function statisticToken(token) {\n var tokenKeys;\n var proxy = token;\n var flush = noop;\n if (enableStatistic && typeof Proxy !== 'undefined') {\n tokenKeys = new Set();\n proxy = new Proxy(token, {\n get: function get(obj, prop) {\n if (recording) {\n var _tokenKeys;\n (_tokenKeys = tokenKeys) === null || _tokenKeys === void 0 || _tokenKeys.add(prop);\n }\n return obj[prop];\n }\n });\n flush = function flush(componentName, componentToken) {\n var _statistic$componentN;\n statistic[componentName] = {\n global: Array.from(tokenKeys),\n component: _objectSpread(_objectSpread({}, (_statistic$componentN = statistic[componentName]) === null || _statistic$componentN === void 0 ? void 0 : _statistic$componentN.component), componentToken)\n };\n };\n }\n return {\n token: proxy,\n keys: tokenKeys,\n flush: flush\n };\n};\nexport default statisticToken;","import { merge as mergeToken } from \"./statistic\";\nfunction getDefaultComponentToken(component, token, getDefaultToken) {\n if (typeof getDefaultToken === 'function') {\n var _token$component;\n return getDefaultToken(mergeToken(token, (_token$component = token[component]) !== null && _token$component !== void 0 ? _token$component : {}));\n }\n return getDefaultToken !== null && getDefaultToken !== void 0 ? getDefaultToken : {};\n}\nexport default getDefaultComponentToken;","import { unit } from '@ant-design/cssinjs';\nfunction genMaxMin(type) {\n if (type === 'js') {\n return {\n max: Math.max,\n min: Math.min\n };\n }\n return {\n max: function max() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return \"max(\".concat(args.map(function (value) {\n return unit(value);\n }).join(','), \")\");\n },\n min: function min() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return \"min(\".concat(args.map(function (value) {\n return unit(value);\n }).join(','), \")\");\n }\n };\n}\nexport default genMaxMin;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport React from 'react';\nvar BEAT_LIMIT = 1000 * 60 * 10;\n\n/**\n * A helper class to map keys to values.\n * It supports both primitive keys and object keys.\n */\nvar ArrayKeyMap = /*#__PURE__*/function () {\n function ArrayKeyMap() {\n _classCallCheck(this, ArrayKeyMap);\n _defineProperty(this, \"map\", new Map());\n // Use WeakMap to avoid memory leak\n _defineProperty(this, \"objectIDMap\", new WeakMap());\n _defineProperty(this, \"nextID\", 0);\n _defineProperty(this, \"lastAccessBeat\", new Map());\n // We will clean up the cache when reach the limit\n _defineProperty(this, \"accessBeat\", 0);\n }\n _createClass(ArrayKeyMap, [{\n key: \"set\",\n value: function set(keys, value) {\n // New set will trigger clear\n this.clear();\n\n // Set logic\n var compositeKey = this.getCompositeKey(keys);\n this.map.set(compositeKey, value);\n this.lastAccessBeat.set(compositeKey, Date.now());\n }\n }, {\n key: \"get\",\n value: function get(keys) {\n var compositeKey = this.getCompositeKey(keys);\n var cache = this.map.get(compositeKey);\n this.lastAccessBeat.set(compositeKey, Date.now());\n this.accessBeat += 1;\n return cache;\n }\n }, {\n key: \"getCompositeKey\",\n value: function getCompositeKey(keys) {\n var _this = this;\n var ids = keys.map(function (key) {\n if (key && _typeof(key) === 'object') {\n return \"obj_\".concat(_this.getObjectID(key));\n }\n return \"\".concat(_typeof(key), \"_\").concat(key);\n });\n return ids.join('|');\n }\n }, {\n key: \"getObjectID\",\n value: function getObjectID(obj) {\n if (this.objectIDMap.has(obj)) {\n return this.objectIDMap.get(obj);\n }\n var id = this.nextID;\n this.objectIDMap.set(obj, id);\n this.nextID += 1;\n return id;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n var _this2 = this;\n if (this.accessBeat > 10000) {\n var now = Date.now();\n this.lastAccessBeat.forEach(function (beat, key) {\n if (now - beat > BEAT_LIMIT) {\n _this2.map.delete(key);\n _this2.lastAccessBeat.delete(key);\n }\n });\n this.accessBeat = 0;\n }\n }\n }]);\n return ArrayKeyMap;\n}();\nvar uniqueMap = new ArrayKeyMap();\n\n/**\n * Like `useMemo`, but this hook result will be shared across all instances.\n */\nfunction useUniqueMemo(memoFn, deps) {\n return React.useMemo(function () {\n var cachedValue = uniqueMap.get(deps);\n if (cachedValue) {\n return cachedValue;\n }\n var newValue = memoFn();\n uniqueMap.set(deps, newValue);\n return newValue;\n }, deps);\n}\nexport default useUniqueMemo;","/**\n * Provide a default hook since not everyone needs to config this.\n */\nvar useDefaultCSP = function useDefaultCSP() {\n return {};\n};\nexport default useDefaultCSP;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport React from 'react';\nimport { token2CSSVar, useCSSVarRegister, useStyleRegister } from '@ant-design/cssinjs';\nimport genCalc from \"./calc\";\nimport getCompVarPrefix from \"./getCompVarPrefix\";\nimport getComponentToken from \"./getComponentToken\";\nimport getDefaultComponentToken from \"./getDefaultComponentToken\";\nimport genMaxMin from \"./maxmin\";\nimport statisticToken, { merge as mergeToken } from \"./statistic\";\nimport useUniqueMemo from \"../_util/hooks/useUniqueMemo\";\nimport useDefaultCSP from \"../hooks/useCSP\";\nfunction genStyleUtils(config) {\n // Dependency inversion for preparing basic config.\n var _config$useCSP = config.useCSP,\n useCSP = _config$useCSP === void 0 ? useDefaultCSP : _config$useCSP,\n useToken = config.useToken,\n usePrefix = config.usePrefix,\n getResetStyles = config.getResetStyles,\n getCommonStyle = config.getCommonStyle,\n getCompUnitless = config.getCompUnitless;\n function genStyleHooks(component, styleFn, getDefaultToken, options) {\n var componentName = Array.isArray(component) ? component[0] : component;\n function prefixToken(key) {\n return \"\".concat(String(componentName)).concat(key.slice(0, 1).toUpperCase()).concat(key.slice(1));\n }\n\n // Fill unitless\n var originUnitless = (options === null || options === void 0 ? void 0 : options.unitless) || {};\n var originCompUnitless = typeof getCompUnitless === 'function' ? getCompUnitless(component) : {};\n var compUnitless = _objectSpread(_objectSpread({}, originCompUnitless), {}, _defineProperty({}, prefixToken('zIndexPopup'), true));\n Object.keys(originUnitless).forEach(function (key) {\n compUnitless[prefixToken(key)] = originUnitless[key];\n });\n\n // Options\n var mergedOptions = _objectSpread(_objectSpread({}, options), {}, {\n unitless: compUnitless,\n prefixToken: prefixToken\n });\n\n // Hooks\n var useStyle = genComponentStyleHook(component, styleFn, getDefaultToken, mergedOptions);\n var useCSSVar = genCSSVarRegister(componentName, getDefaultToken, mergedOptions);\n return function (prefixCls) {\n var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n var _useStyle = useStyle(prefixCls, rootCls),\n _useStyle2 = _slicedToArray(_useStyle, 2),\n hashId = _useStyle2[1];\n var _useCSSVar = useCSSVar(rootCls),\n _useCSSVar2 = _slicedToArray(_useCSSVar, 2),\n wrapCSSVar = _useCSSVar2[0],\n cssVarCls = _useCSSVar2[1];\n return [wrapCSSVar, hashId, cssVarCls];\n };\n }\n function genCSSVarRegister(component, getDefaultToken, options) {\n var compUnitless = options.unitless,\n _options$injectStyle = options.injectStyle,\n injectStyle = _options$injectStyle === void 0 ? true : _options$injectStyle,\n prefixToken = options.prefixToken,\n ignore = options.ignore;\n var CSSVarRegister = function CSSVarRegister(_ref) {\n var rootCls = _ref.rootCls,\n _ref$cssVar = _ref.cssVar,\n cssVar = _ref$cssVar === void 0 ? {} : _ref$cssVar;\n var _useToken = useToken(),\n realToken = _useToken.realToken;\n useCSSVarRegister({\n path: [component],\n prefix: cssVar.prefix,\n key: cssVar.key,\n unitless: compUnitless,\n ignore: ignore,\n token: realToken,\n scope: rootCls\n }, function () {\n var defaultToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n var componentToken = getComponentToken(component, realToken, defaultToken, {\n deprecatedTokens: options === null || options === void 0 ? void 0 : options.deprecatedTokens\n });\n Object.keys(defaultToken).forEach(function (key) {\n componentToken[prefixToken(key)] = componentToken[key];\n delete componentToken[key];\n });\n return componentToken;\n });\n return null;\n };\n var useCSSVar = function useCSSVar(rootCls) {\n var _useToken2 = useToken(),\n cssVar = _useToken2.cssVar;\n return [function (node) {\n return injectStyle && cssVar ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CSSVarRegister, {\n rootCls: rootCls,\n cssVar: cssVar,\n component: component\n }), node) : node;\n }, cssVar === null || cssVar === void 0 ? void 0 : cssVar.key];\n };\n return useCSSVar;\n }\n function genComponentStyleHook(componentName, styleFn, getDefaultToken) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var cells = Array.isArray(componentName) ? componentName : [componentName, componentName];\n var _cells = _slicedToArray(cells, 1),\n component = _cells[0];\n var concatComponent = cells.join('-');\n var mergedLayer = config.layer || {\n name: 'antd'\n };\n\n // Return new style hook\n return function (prefixCls) {\n var rootCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prefixCls;\n var _useToken3 = useToken(),\n theme = _useToken3.theme,\n realToken = _useToken3.realToken,\n hashId = _useToken3.hashId,\n token = _useToken3.token,\n cssVar = _useToken3.cssVar;\n var _usePrefix = usePrefix(),\n rootPrefixCls = _usePrefix.rootPrefixCls,\n iconPrefixCls = _usePrefix.iconPrefixCls;\n var csp = useCSP();\n var type = cssVar ? 'css' : 'js';\n\n // Use unique memo to share the result across all instances\n var calc = useUniqueMemo(function () {\n var unitlessCssVar = new Set();\n if (cssVar) {\n Object.keys(options.unitless || {}).forEach(function (key) {\n // Some component proxy the AliasToken (e.g. Image) and some not (e.g. Modal)\n // We should both pass in `unitlessCssVar` to make sure the CSSVar can be unitless.\n unitlessCssVar.add(token2CSSVar(key, cssVar.prefix));\n unitlessCssVar.add(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)));\n });\n }\n return genCalc(type, unitlessCssVar);\n }, [type, component, cssVar === null || cssVar === void 0 ? void 0 : cssVar.prefix]);\n var _genMaxMin = genMaxMin(type),\n max = _genMaxMin.max,\n min = _genMaxMin.min;\n\n // Shared config\n var sharedConfig = {\n theme: theme,\n token: token,\n hashId: hashId,\n nonce: function nonce() {\n return csp.nonce;\n },\n clientOnly: options.clientOnly,\n layer: mergedLayer,\n // antd is always at top of styles\n order: options.order || -999\n };\n\n // This if statement is safe, as it will only be used if the generator has the function. It's not dynamic.\n if (typeof getResetStyles === 'function') {\n // Generate style for all need reset tags.\n useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n clientOnly: false,\n path: ['Shared', rootPrefixCls]\n }), function () {\n return getResetStyles(token, {\n prefix: {\n rootPrefixCls: rootPrefixCls,\n iconPrefixCls: iconPrefixCls\n },\n csp: csp\n });\n });\n }\n var wrapSSR = useStyleRegister(_objectSpread(_objectSpread({}, sharedConfig), {}, {\n path: [concatComponent, prefixCls, iconPrefixCls]\n }), function () {\n if (options.injectStyle === false) {\n return [];\n }\n var _statisticToken = statisticToken(token),\n proxyToken = _statisticToken.token,\n flush = _statisticToken.flush;\n var defaultComponentToken = getDefaultComponentToken(component, realToken, getDefaultToken);\n var componentCls = \".\".concat(prefixCls);\n var componentToken = getComponentToken(component, realToken, defaultComponentToken, {\n deprecatedTokens: options.deprecatedTokens\n });\n if (cssVar && defaultComponentToken && _typeof(defaultComponentToken) === 'object') {\n Object.keys(defaultComponentToken).forEach(function (key) {\n defaultComponentToken[key] = \"var(\".concat(token2CSSVar(key, getCompVarPrefix(component, cssVar.prefix)), \")\");\n });\n }\n var mergedToken = mergeToken(proxyToken, {\n componentCls: componentCls,\n prefixCls: prefixCls,\n iconCls: \".\".concat(iconPrefixCls),\n antCls: \".\".concat(rootPrefixCls),\n calc: calc,\n // @ts-ignore\n max: max,\n // @ts-ignore\n min: min\n }, cssVar ? defaultComponentToken : componentToken);\n var styleInterpolation = styleFn(mergedToken, {\n hashId: hashId,\n prefixCls: prefixCls,\n rootPrefixCls: rootPrefixCls,\n iconPrefixCls: iconPrefixCls\n });\n flush(component, componentToken);\n var commonStyle = typeof getCommonStyle === 'function' ? getCommonStyle(mergedToken, prefixCls, rootCls, options.resetFont) : null;\n return [options.resetStyle === false ? null : commonStyle, styleInterpolation];\n });\n return [wrapSSR, hashId];\n };\n }\n function genSubStyleComponent(componentName, styleFn, getDefaultToken) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var useStyle = genComponentStyleHook(componentName, styleFn, getDefaultToken, _objectSpread({\n resetStyle: false,\n // Sub Style should default after root one\n order: -998\n }, options));\n var StyledComponent = function StyledComponent(_ref2) {\n var prefixCls = _ref2.prefixCls,\n _ref2$rootCls = _ref2.rootCls,\n rootCls = _ref2$rootCls === void 0 ? prefixCls : _ref2$rootCls;\n useStyle(prefixCls, rootCls);\n return null;\n };\n if (process.env.NODE_ENV !== 'production') {\n StyledComponent.displayName = \"SubStyle_\".concat(String(Array.isArray(componentName) ? componentName.join('.') : componentName));\n }\n return StyledComponent;\n }\n return {\n genStyleHooks: genStyleHooks,\n genSubStyleComponent: genSubStyleComponent,\n genComponentStyleHook: genComponentStyleHook\n };\n}\nexport default genStyleUtils;","const locale = {\n placeholder: 'Select time',\n rangePlaceholder: ['Start time', 'End time'],\n};\nexport default locale;\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks } from '../../theme/internal';\nexport const DotDuration = '--dot-duration';\nconst genCarouselStyle = (token) => {\n const { componentCls, antCls } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { '.slick-slider': {\n position: 'relative',\n display: 'block',\n boxSizing: 'border-box',\n touchAction: 'pan-y',\n WebkitTouchCallout: 'none',\n WebkitTapHighlightColor: 'transparent',\n '.slick-track, .slick-list': {\n transform: 'translate3d(0, 0, 0)',\n touchAction: 'pan-y',\n },\n }, '.slick-list': {\n position: 'relative',\n display: 'block',\n margin: 0,\n padding: 0,\n overflow: 'hidden',\n '&:focus': {\n outline: 'none',\n },\n '&.dragging': {\n cursor: 'pointer',\n },\n '.slick-slide': {\n pointerEvents: 'none',\n // https://github.com/ant-design/ant-design/issues/23294\n [`input${antCls}-radio-input, input${antCls}-checkbox-input`]: {\n visibility: 'hidden',\n },\n '&.slick-active': {\n pointerEvents: 'auto',\n [`input${antCls}-radio-input, input${antCls}-checkbox-input`]: {\n visibility: 'visible',\n },\n },\n // fix Carousel content height not match parent node\n // when children is empty node\n // https://github.com/ant-design/ant-design/issues/25878\n '> div > div': {\n verticalAlign: 'bottom',\n },\n },\n }, '.slick-track': {\n position: 'relative',\n top: 0,\n insetInlineStart: 0,\n display: 'block',\n '&::before, &::after': {\n display: 'table',\n content: '\"\"',\n },\n '&::after': {\n clear: 'both',\n },\n }, '.slick-slide': {\n display: 'none',\n float: 'left',\n height: '100%',\n minHeight: 1,\n img: {\n display: 'block',\n },\n '&.dragging img': {\n pointerEvents: 'none',\n },\n }, '.slick-initialized .slick-slide': {\n display: 'block',\n }, '.slick-vertical .slick-slide': {\n display: 'block',\n height: 'auto',\n } }),\n };\n};\nconst genArrowsStyle = (token) => {\n const { componentCls, motionDurationSlow, arrowSize, arrowOffset } = token;\n const arrowLength = token.calc(arrowSize).div(Math.SQRT2).equal();\n return {\n [componentCls]: {\n // Arrows\n '.slick-prev, .slick-next': {\n position: 'absolute',\n top: '50%',\n width: arrowSize,\n height: arrowSize,\n transform: 'translateY(-50%)',\n color: '#fff',\n opacity: 0.4,\n background: 'transparent',\n padding: 0,\n lineHeight: 0,\n border: 0,\n outline: 'none',\n cursor: 'pointer',\n zIndex: 1,\n transition: `opacity ${motionDurationSlow}`,\n '&:hover, &:focus': {\n opacity: 1,\n },\n '&.slick-disabled': {\n pointerEvents: 'none',\n opacity: 0,\n },\n '&::after': {\n boxSizing: 'border-box',\n position: 'absolute',\n top: token.calc(arrowSize).sub(arrowLength).div(2).equal(),\n insetInlineStart: token.calc(arrowSize).sub(arrowLength).div(2).equal(),\n display: 'inline-block',\n width: arrowLength,\n height: arrowLength,\n border: `0 solid currentcolor`,\n borderInlineStartWidth: 2,\n borderBlockStartWidth: 2,\n borderRadius: 1,\n content: '\"\"',\n },\n },\n '.slick-prev': {\n insetInlineStart: arrowOffset,\n '&::after': {\n transform: 'rotate(-45deg)',\n },\n },\n '.slick-next': {\n insetInlineEnd: arrowOffset,\n '&::after': {\n transform: 'rotate(135deg)',\n },\n },\n },\n };\n};\nconst genDotsStyle = (token) => {\n const { componentCls, dotOffset, dotWidth, dotHeight, dotGap, colorBgContainer, motionDurationSlow, } = token;\n return {\n [componentCls]: {\n '.slick-dots': {\n position: 'absolute',\n insetInlineEnd: 0,\n bottom: 0,\n insetInlineStart: 0,\n zIndex: 15,\n display: 'flex !important',\n justifyContent: 'center',\n paddingInlineStart: 0,\n margin: 0,\n listStyle: 'none',\n '&-bottom': {\n bottom: dotOffset,\n },\n '&-top': {\n top: dotOffset,\n bottom: 'auto',\n },\n li: {\n position: 'relative',\n display: 'inline-block',\n flex: '0 1 auto',\n boxSizing: 'content-box',\n width: dotWidth,\n height: dotHeight,\n marginInline: dotGap,\n padding: 0,\n textAlign: 'center',\n textIndent: -999,\n verticalAlign: 'top',\n transition: `all ${motionDurationSlow}`,\n borderRadius: dotHeight,\n overflow: 'hidden',\n '&::after': {\n display: 'block',\n position: 'absolute',\n top: 0,\n insetInlineStart: 0,\n width: '100%',\n height: dotHeight,\n content: '\"\"',\n background: 'transparent',\n borderRadius: dotHeight,\n opacity: 1,\n outline: 'none',\n cursor: 'pointer',\n overflow: 'hidden',\n transform: 'translate3d(-100%, 0, 0)',\n },\n button: {\n position: 'relative',\n display: 'block',\n width: '100%',\n height: dotHeight,\n padding: 0,\n color: 'transparent',\n fontSize: 0,\n background: colorBgContainer,\n border: 0,\n borderRadius: dotHeight,\n outline: 'none',\n cursor: 'pointer',\n opacity: 0.2,\n transition: `all ${motionDurationSlow}`,\n overflow: 'hidden',\n '&:hover': {\n opacity: 0.75,\n },\n '&::after': {\n position: 'absolute',\n inset: token.calc(dotGap).mul(-1).equal(),\n content: '\"\"',\n },\n },\n '&.slick-active': {\n width: token.dotActiveWidth,\n position: 'relative',\n '&:hover': {\n opacity: 1,\n },\n '&::after': {\n background: colorBgContainer,\n transform: 'translate3d(0, 0, 0)',\n transition: `transform var(${DotDuration}) ease-out`,\n },\n },\n },\n },\n },\n };\n};\nconst genCarouselVerticalStyle = (token) => {\n const { componentCls, dotOffset, arrowOffset, marginXXS } = token;\n const reverseSizeOfDot = {\n width: token.dotHeight,\n height: token.dotWidth,\n };\n return {\n [`${componentCls}-vertical`]: {\n '.slick-prev, .slick-next': {\n insetInlineStart: '50%',\n marginBlockStart: 'unset',\n transform: 'translateX(-50%)',\n },\n '.slick-prev': {\n insetBlockStart: arrowOffset,\n insetInlineStart: '50%',\n '&::after': {\n transform: 'rotate(45deg)',\n },\n },\n '.slick-next': {\n insetBlockStart: 'auto',\n insetBlockEnd: arrowOffset,\n '&::after': {\n transform: 'rotate(-135deg)',\n },\n },\n '.slick-dots': {\n top: '50%',\n bottom: 'auto',\n flexDirection: 'column',\n width: token.dotHeight,\n height: 'auto',\n margin: 0,\n transform: 'translateY(-50%)',\n '&-left': {\n insetInlineEnd: 'auto',\n insetInlineStart: dotOffset,\n },\n '&-right': {\n insetInlineEnd: dotOffset,\n insetInlineStart: 'auto',\n },\n li: Object.assign(Object.assign({}, reverseSizeOfDot), { margin: `${unit(marginXXS)} 0`, verticalAlign: 'baseline', button: reverseSizeOfDot, '&::after': Object.assign(Object.assign({}, reverseSizeOfDot), { height: 0 }), '&.slick-active': Object.assign(Object.assign({}, reverseSizeOfDot), { button: reverseSizeOfDot, '&::after': Object.assign(Object.assign({}, reverseSizeOfDot), { transition: `height var(${DotDuration}) ease-out` }) }) }),\n },\n },\n };\n};\nconst genCarouselRtlStyle = (token) => {\n const { componentCls } = token;\n return [\n {\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n },\n {\n [`${componentCls}-vertical`]: {\n '.slick-dots': {\n [`${componentCls}-rtl&`]: {\n flexDirection: 'column',\n },\n },\n },\n },\n ];\n};\nexport const prepareComponentToken = (token) => {\n const dotActiveWidth = 24;\n return {\n arrowSize: 16,\n arrowOffset: token.marginXS,\n dotWidth: 16,\n dotHeight: 3,\n dotGap: token.marginXXS,\n dotOffset: 12,\n dotWidthActive: dotActiveWidth,\n dotActiveWidth,\n };\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Carousel', (token) => [\n genCarouselStyle(token),\n genArrowsStyle(token),\n genDotsStyle(token),\n genCarouselVerticalStyle(token),\n genCarouselRtlStyle(token),\n], prepareComponentToken, {\n deprecatedTokens: [['dotWidthActive', 'dotActiveWidth']],\n});\n","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import Pagination from 'rc-pagination/lib/locale/en_US';\nimport Calendar from '../calendar/locale/en_US';\nimport DatePicker from '../date-picker/locale/en_US';\nimport TimePicker from '../time-picker/locale/en_US';\nconst typeTemplate = '${label} is not a valid ${type}';\nconst localeValues = {\n locale: 'en',\n Pagination,\n DatePicker,\n TimePicker,\n Calendar,\n global: {\n placeholder: 'Please select',\n close: 'Close',\n },\n Table: {\n filterTitle: 'Filter menu',\n filterConfirm: 'OK',\n filterReset: 'Reset',\n filterEmptyText: 'No filters',\n filterCheckAll: 'Select all items',\n filterSearchPlaceholder: 'Search in filters',\n emptyText: 'No data',\n selectAll: 'Select current page',\n selectInvert: 'Invert current page',\n selectNone: 'Clear all data',\n selectionAll: 'Select all data',\n sortTitle: 'Sort',\n expand: 'Expand row',\n collapse: 'Collapse row',\n triggerDesc: 'Click to sort descending',\n triggerAsc: 'Click to sort ascending',\n cancelSort: 'Click to cancel sorting',\n },\n Tour: {\n Next: 'Next',\n Previous: 'Previous',\n Finish: 'Finish',\n },\n Modal: {\n okText: 'OK',\n cancelText: 'Cancel',\n justOkText: 'OK',\n },\n Popconfirm: {\n okText: 'OK',\n cancelText: 'Cancel',\n },\n Transfer: {\n titles: ['', ''],\n searchPlaceholder: 'Search here',\n itemUnit: 'item',\n itemsUnit: 'items',\n remove: 'Remove',\n selectCurrent: 'Select current page',\n removeCurrent: 'Remove current page',\n selectAll: 'Select all data',\n deselectAll: 'Deselect all data',\n removeAll: 'Remove all data',\n selectInvert: 'Invert current page',\n },\n Upload: {\n uploading: 'Uploading...',\n removeFile: 'Remove file',\n uploadError: 'Upload error',\n previewFile: 'Preview file',\n downloadFile: 'Download file',\n },\n Empty: {\n description: 'No data',\n },\n Icon: {\n icon: 'icon',\n },\n Text: {\n edit: 'Edit',\n copy: 'Copy',\n copied: 'Copied',\n expand: 'Expand',\n collapse: 'Collapse',\n },\n Form: {\n optional: '(optional)',\n defaultValidateMessages: {\n default: 'Field validation error for ${label}',\n required: 'Please enter ${label}',\n enum: '${label} must be one of [${enum}]',\n whitespace: '${label} cannot be a blank character',\n date: {\n format: '${label} date format is invalid',\n parse: '${label} cannot be converted to a date',\n invalid: '${label} is an invalid date',\n },\n types: {\n string: typeTemplate,\n method: typeTemplate,\n array: typeTemplate,\n object: typeTemplate,\n number: typeTemplate,\n date: typeTemplate,\n boolean: typeTemplate,\n integer: typeTemplate,\n float: typeTemplate,\n regexp: typeTemplate,\n email: typeTemplate,\n url: typeTemplate,\n hex: typeTemplate,\n },\n string: {\n len: '${label} must be ${len} characters',\n min: '${label} must be at least ${min} characters',\n max: '${label} must be up to ${max} characters',\n range: '${label} must be between ${min}-${max} characters',\n },\n number: {\n len: '${label} must be equal to ${len}',\n min: '${label} must be minimum ${min}',\n max: '${label} must be maximum ${max}',\n range: '${label} must be between ${min}-${max}',\n },\n array: {\n len: 'Must be ${len} ${label}',\n min: 'At least ${min} ${label}',\n max: 'At most ${max} ${label}',\n range: 'The amount of ${label} must be between ${min}-${max}',\n },\n pattern: {\n mismatch: '${label} does not match the pattern ${pattern}',\n },\n },\n },\n Image: {\n preview: 'Preview',\n },\n QRCode: {\n expired: 'QR code expired',\n refresh: 'Refresh',\n scanned: 'Scanned',\n },\n ColorPicker: {\n presetEmpty: 'Empty',\n transparent: 'Transparent',\n singleColor: 'Single',\n gradientColor: 'Gradient',\n },\n};\nexport default localeValues;\n","import { genStyleHooks } from '../../theme/internal';\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, colorText, fontSize, lineHeight, fontFamily } = token;\n return {\n [componentCls]: {\n color: colorText,\n fontSize,\n lineHeight,\n fontFamily,\n [`&${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n },\n };\n};\nexport const prepareComponentToken = () => ({});\n// ============================== Export ==============================\nexport default genStyleHooks('App', genBaseStyle, prepareComponentToken);\n","import { resetComponent, textEllipsis } from '../../style';\nimport { initMoveMotion, initSlideMotion, slideDownIn, slideDownOut, slideUpIn, slideUpOut, } from '../../style/motion';\nconst genItemStyle = (token) => {\n const { optionHeight, optionFontSize, optionLineHeight, optionPadding } = token;\n return {\n position: 'relative',\n display: 'block',\n minHeight: optionHeight,\n padding: optionPadding,\n color: token.colorText,\n fontWeight: 'normal',\n fontSize: optionFontSize,\n lineHeight: optionLineHeight,\n boxSizing: 'border-box',\n };\n};\nconst genSingleStyle = (token) => {\n const { antCls, componentCls } = token;\n const selectItemCls = `${componentCls}-item`;\n const slideUpEnterActive = `&${antCls}-slide-up-enter${antCls}-slide-up-enter-active`;\n const slideUpAppearActive = `&${antCls}-slide-up-appear${antCls}-slide-up-appear-active`;\n const slideUpLeaveActive = `&${antCls}-slide-up-leave${antCls}-slide-up-leave-active`;\n const dropdownPlacementCls = `${componentCls}-dropdown-placement-`;\n const selectedItemCls = `${selectItemCls}-option-selected`;\n return [\n {\n [`${componentCls}-dropdown`]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'absolute', top: -9999, zIndex: token.zIndexPopup, boxSizing: 'border-box', padding: token.paddingXXS, overflow: 'hidden', fontSize: token.fontSize, \n // Fix select render lag of long text in chrome\n // https://github.com/ant-design/ant-design/issues/11456\n // https://github.com/ant-design/ant-design/issues/11843\n fontVariant: 'initial', backgroundColor: token.colorBgElevated, borderRadius: token.borderRadiusLG, outline: 'none', boxShadow: token.boxShadowSecondary, [`\n ${slideUpEnterActive}${dropdownPlacementCls}bottomLeft,\n ${slideUpAppearActive}${dropdownPlacementCls}bottomLeft\n `]: {\n animationName: slideUpIn,\n }, [`\n ${slideUpEnterActive}${dropdownPlacementCls}topLeft,\n ${slideUpAppearActive}${dropdownPlacementCls}topLeft,\n ${slideUpEnterActive}${dropdownPlacementCls}topRight,\n ${slideUpAppearActive}${dropdownPlacementCls}topRight\n `]: {\n animationName: slideDownIn,\n }, [`${slideUpLeaveActive}${dropdownPlacementCls}bottomLeft`]: {\n animationName: slideUpOut,\n }, [`\n ${slideUpLeaveActive}${dropdownPlacementCls}topLeft,\n ${slideUpLeaveActive}${dropdownPlacementCls}topRight\n `]: {\n animationName: slideDownOut,\n }, '&-hidden': {\n display: 'none',\n }, [selectItemCls]: Object.assign(Object.assign({}, genItemStyle(token)), { cursor: 'pointer', transition: `background ${token.motionDurationSlow} ease`, borderRadius: token.borderRadiusSM, \n // =========== Group ============\n '&-group': {\n color: token.colorTextDescription,\n fontSize: token.fontSizeSM,\n cursor: 'default',\n }, \n // =========== Option ===========\n '&-option': {\n display: 'flex',\n '&-content': Object.assign({ flex: 'auto' }, textEllipsis),\n '&-state': {\n flex: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n [`&-active:not(${selectItemCls}-option-disabled)`]: {\n backgroundColor: token.optionActiveBg,\n },\n [`&-selected:not(${selectItemCls}-option-disabled)`]: {\n color: token.optionSelectedColor,\n fontWeight: token.optionSelectedFontWeight,\n backgroundColor: token.optionSelectedBg,\n [`${selectItemCls}-option-state`]: {\n color: token.colorPrimary,\n },\n },\n '&-disabled': {\n [`&${selectItemCls}-option-selected`]: {\n backgroundColor: token.colorBgContainerDisabled,\n },\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n },\n '&-grouped': {\n paddingInlineStart: token.calc(token.controlPaddingHorizontal).mul(2).equal(),\n },\n }, '&-empty': Object.assign(Object.assign({}, genItemStyle(token)), { color: token.colorTextDisabled }) }), \n // https://github.com/ant-design/ant-design/pull/46646\n [`${selectedItemCls}:has(+ ${selectedItemCls})`]: {\n borderEndStartRadius: 0,\n borderEndEndRadius: 0,\n [`& + ${selectedItemCls}`]: {\n borderStartStartRadius: 0,\n borderStartEndRadius: 0,\n },\n }, \n // =========================== RTL ===========================\n '&-rtl': {\n direction: 'rtl',\n } }),\n },\n // Follow code may reuse in other components\n initSlideMotion(token, 'slide-up'),\n initSlideMotion(token, 'slide-down'),\n initMoveMotion(token, 'move-up'),\n initMoveMotion(token, 'move-down'),\n ];\n};\nexport default genSingleStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { mergeToken } from '../../theme/internal';\nfunction genSizeStyle(token, suffix) {\n const { componentCls, inputPaddingHorizontalBase, borderRadius } = token;\n const selectHeightWithoutBorder = token\n .calc(token.controlHeight)\n .sub(token.calc(token.lineWidth).mul(2))\n .equal();\n const suffixCls = suffix ? `${componentCls}-${suffix}` : '';\n return {\n [`${componentCls}-single${suffixCls}`]: {\n fontSize: token.fontSize,\n height: token.controlHeight,\n // ========================= Selector =========================\n [`${componentCls}-selector`]: Object.assign(Object.assign({}, resetComponent(token, true)), { display: 'flex', borderRadius, flex: '1 1 auto', [`${componentCls}-selection-wrap:after`]: {\n lineHeight: unit(selectHeightWithoutBorder),\n }, [`${componentCls}-selection-search`]: {\n position: 'absolute',\n inset: 0,\n width: '100%',\n '&-input': {\n width: '100%',\n WebkitAppearance: 'textfield',\n },\n }, [`\n ${componentCls}-selection-item,\n ${componentCls}-selection-placeholder\n `]: {\n display: 'block',\n padding: 0,\n lineHeight: unit(selectHeightWithoutBorder),\n transition: `all ${token.motionDurationSlow}, visibility 0s`,\n alignSelf: 'center',\n }, [`${componentCls}-selection-placeholder`]: {\n transition: 'none',\n pointerEvents: 'none',\n }, \n // For common baseline align\n [[\n '&:after',\n /* For '' value baseline align */\n `${componentCls}-selection-item:empty:after`,\n /* For undefined value baseline align */\n `${componentCls}-selection-placeholder:empty:after`,\n ].join(',')]: {\n display: 'inline-block',\n width: 0,\n visibility: 'hidden',\n content: '\"\\\\a0\"',\n } }),\n [`\n &${componentCls}-show-arrow ${componentCls}-selection-item,\n &${componentCls}-show-arrow ${componentCls}-selection-search,\n &${componentCls}-show-arrow ${componentCls}-selection-placeholder\n `]: {\n paddingInlineEnd: token.showArrowPaddingInlineEnd,\n },\n // Opacity selection if open\n [`&${componentCls}-open ${componentCls}-selection-item`]: {\n color: token.colorTextPlaceholder,\n },\n // ========================== Input ==========================\n // We only change the style of non-customize input which is only support by `combobox` mode.\n // Not customize\n [`&:not(${componentCls}-customize-input)`]: {\n [`${componentCls}-selector`]: {\n width: '100%',\n height: '100%',\n alignItems: 'center',\n padding: `0 ${unit(inputPaddingHorizontalBase)}`,\n [`${componentCls}-selection-search-input`]: {\n height: selectHeightWithoutBorder,\n fontSize: token.fontSize,\n },\n '&:after': {\n lineHeight: unit(selectHeightWithoutBorder),\n },\n },\n },\n [`&${componentCls}-customize-input`]: {\n [`${componentCls}-selector`]: {\n '&:after': {\n display: 'none',\n },\n [`${componentCls}-selection-search`]: {\n position: 'static',\n width: '100%',\n },\n [`${componentCls}-selection-placeholder`]: {\n position: 'absolute',\n insetInlineStart: 0,\n insetInlineEnd: 0,\n padding: `0 ${unit(inputPaddingHorizontalBase)}`,\n '&:after': {\n display: 'none',\n },\n },\n },\n },\n },\n };\n}\nexport default function genSingleStyle(token) {\n const { componentCls } = token;\n const inputPaddingHorizontalSM = token\n .calc(token.controlPaddingHorizontalSM)\n .sub(token.lineWidth)\n .equal();\n return [\n genSizeStyle(token),\n // ======================== Small ========================\n // Shared\n genSizeStyle(mergeToken(token, {\n controlHeight: token.controlHeightSM,\n borderRadius: token.borderRadiusSM,\n }), 'sm'),\n // padding\n {\n [`${componentCls}-single${componentCls}-sm`]: {\n [`&:not(${componentCls}-customize-input)`]: {\n [`${componentCls}-selector`]: {\n padding: `0 ${unit(inputPaddingHorizontalSM)}`,\n },\n // With arrow should provides `padding-right` to show the arrow\n [`&${componentCls}-show-arrow ${componentCls}-selection-search`]: {\n insetInlineEnd: token\n .calc(inputPaddingHorizontalSM)\n .add(token.calc(token.fontSize).mul(1.5))\n .equal(),\n },\n [`\n &${componentCls}-show-arrow ${componentCls}-selection-item,\n &${componentCls}-show-arrow ${componentCls}-selection-placeholder\n `]: {\n paddingInlineEnd: token.calc(token.fontSize).mul(1.5).equal(),\n },\n },\n },\n },\n // ======================== Large ========================\n // Shared\n genSizeStyle(mergeToken(token, {\n controlHeight: token.singleItemHeightLG,\n fontSize: token.fontSizeLG,\n borderRadius: token.borderRadiusLG,\n }), 'lg'),\n ];\n}\n","import { unit } from '@ant-design/cssinjs';\n// =====================================================\n// == Outlined ==\n// =====================================================\nconst genBaseOutlinedStyle = (token, options) => {\n const { componentCls, antCls, controlOutlineWidth } = token;\n return {\n [`&:not(${componentCls}-customize-input) ${componentCls}-selector`]: {\n border: `${unit(token.lineWidth)} ${token.lineType} ${options.borderColor}`,\n background: token.selectorBg,\n },\n [`&:not(${componentCls}-disabled):not(${componentCls}-customize-input):not(${antCls}-pagination-size-changer)`]: {\n [`&:hover ${componentCls}-selector`]: {\n borderColor: options.hoverBorderHover,\n },\n [`${componentCls}-focused& ${componentCls}-selector`]: {\n borderColor: options.activeBorderColor,\n boxShadow: `0 0 0 ${unit(controlOutlineWidth)} ${options.activeOutlineColor}`,\n outline: 0,\n },\n [`${componentCls}-prefix`]: {\n color: options.color,\n },\n },\n };\n};\nconst genOutlinedStatusStyle = (token, options) => ({\n [`&${token.componentCls}-status-${options.status}`]: Object.assign({}, genBaseOutlinedStyle(token, options)),\n});\nconst genOutlinedStyle = (token) => ({\n '&-outlined': Object.assign(Object.assign(Object.assign(Object.assign({}, genBaseOutlinedStyle(token, {\n borderColor: token.colorBorder,\n hoverBorderHover: token.hoverBorderColor,\n activeBorderColor: token.activeBorderColor,\n activeOutlineColor: token.activeOutlineColor,\n color: token.colorText,\n })), genOutlinedStatusStyle(token, {\n status: 'error',\n borderColor: token.colorError,\n hoverBorderHover: token.colorErrorHover,\n activeBorderColor: token.colorError,\n activeOutlineColor: token.colorErrorOutline,\n color: token.colorError,\n })), genOutlinedStatusStyle(token, {\n status: 'warning',\n borderColor: token.colorWarning,\n hoverBorderHover: token.colorWarningHover,\n activeBorderColor: token.colorWarning,\n activeOutlineColor: token.colorWarningOutline,\n color: token.colorWarning,\n })), { [`&${token.componentCls}-disabled`]: {\n [`&:not(${token.componentCls}-customize-input) ${token.componentCls}-selector`]: {\n background: token.colorBgContainerDisabled,\n color: token.colorTextDisabled,\n },\n }, [`&${token.componentCls}-multiple ${token.componentCls}-selection-item`]: {\n background: token.multipleItemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.multipleItemBorderColor}`,\n } }),\n});\n// =====================================================\n// == Filled ==\n// =====================================================\nconst genBaseFilledStyle = (token, options) => {\n const { componentCls, antCls } = token;\n return {\n [`&:not(${componentCls}-customize-input) ${componentCls}-selector`]: {\n background: options.bg,\n border: `${unit(token.lineWidth)} ${token.lineType} transparent`,\n color: options.color,\n },\n [`&:not(${componentCls}-disabled):not(${componentCls}-customize-input):not(${antCls}-pagination-size-changer)`]: {\n [`&:hover ${componentCls}-selector`]: {\n background: options.hoverBg,\n },\n [`${componentCls}-focused& ${componentCls}-selector`]: {\n background: token.selectorBg,\n borderColor: options.activeBorderColor,\n outline: 0,\n },\n },\n };\n};\nconst genFilledStatusStyle = (token, options) => ({\n [`&${token.componentCls}-status-${options.status}`]: Object.assign({}, genBaseFilledStyle(token, options)),\n});\nconst genFilledStyle = (token) => ({\n '&-filled': Object.assign(Object.assign(Object.assign(Object.assign({}, genBaseFilledStyle(token, {\n bg: token.colorFillTertiary,\n hoverBg: token.colorFillSecondary,\n activeBorderColor: token.activeBorderColor,\n color: token.colorText,\n })), genFilledStatusStyle(token, {\n status: 'error',\n bg: token.colorErrorBg,\n hoverBg: token.colorErrorBgHover,\n activeBorderColor: token.colorError,\n color: token.colorError,\n })), genFilledStatusStyle(token, {\n status: 'warning',\n bg: token.colorWarningBg,\n hoverBg: token.colorWarningBgHover,\n activeBorderColor: token.colorWarning,\n color: token.colorWarning,\n })), { [`&${token.componentCls}-disabled`]: {\n [`&:not(${token.componentCls}-customize-input) ${token.componentCls}-selector`]: {\n borderColor: token.colorBorder,\n background: token.colorBgContainerDisabled,\n color: token.colorTextDisabled,\n },\n }, [`&${token.componentCls}-multiple ${token.componentCls}-selection-item`]: {\n background: token.colorBgContainer,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n } }),\n});\n// =====================================================\n// == Borderless ==\n// =====================================================\nconst genBorderlessStyle = (token) => ({\n '&-borderless': {\n [`${token.componentCls}-selector`]: {\n background: 'transparent',\n border: `${unit(token.lineWidth)} ${token.lineType} transparent`,\n },\n [`&${token.componentCls}-disabled`]: {\n [`&:not(${token.componentCls}-customize-input) ${token.componentCls}-selector`]: {\n color: token.colorTextDisabled,\n },\n },\n [`&${token.componentCls}-multiple ${token.componentCls}-selection-item`]: {\n background: token.multipleItemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.multipleItemBorderColor}`,\n },\n // Status\n [`&${token.componentCls}-status-error`]: {\n [`${token.componentCls}-prefix, ${token.componentCls}-selection-item`]: {\n color: token.colorError,\n },\n },\n [`&${token.componentCls}-status-warning`]: {\n [`${token.componentCls}-prefix, ${token.componentCls}-selection-item`]: {\n color: token.colorWarning,\n },\n },\n },\n});\n// =====================================================\n// == Underlined ==\n// =====================================================\nconst genBaseUnderlinedStyle = (token, options) => {\n const { componentCls, antCls } = token;\n return {\n [`&:not(${componentCls}-customize-input) ${componentCls}-selector`]: {\n borderWidth: `0 0 ${unit(token.lineWidth)} 0`,\n borderStyle: `none none ${token.lineType} none`,\n borderColor: options.borderColor,\n background: token.selectorBg,\n borderRadius: 0,\n },\n [`&:not(${componentCls}-disabled):not(${componentCls}-customize-input):not(${antCls}-pagination-size-changer)`]: {\n [`&:hover ${componentCls}-selector`]: {\n borderColor: options.hoverBorderHover,\n },\n [`${componentCls}-focused& ${componentCls}-selector`]: {\n borderColor: options.activeBorderColor,\n outline: 0,\n },\n [`${componentCls}-prefix`]: {\n color: options.color,\n },\n },\n };\n};\nconst genUnderlinedStatusStyle = (token, options) => ({\n [`&${token.componentCls}-status-${options.status}`]: Object.assign({}, genBaseUnderlinedStyle(token, options)),\n});\nconst genUnderlinedStyle = (token) => ({\n '&-underlined': Object.assign(Object.assign(Object.assign(Object.assign({}, genBaseUnderlinedStyle(token, {\n borderColor: token.colorBorder,\n hoverBorderHover: token.hoverBorderColor,\n activeBorderColor: token.activeBorderColor,\n activeOutlineColor: token.activeOutlineColor,\n color: token.colorText,\n })), genUnderlinedStatusStyle(token, {\n status: 'error',\n borderColor: token.colorError,\n hoverBorderHover: token.colorErrorHover,\n activeBorderColor: token.colorError,\n activeOutlineColor: token.colorErrorOutline,\n color: token.colorError,\n })), genUnderlinedStatusStyle(token, {\n status: 'warning',\n borderColor: token.colorWarning,\n hoverBorderHover: token.colorWarningHover,\n activeBorderColor: token.colorWarning,\n activeOutlineColor: token.colorWarningOutline,\n color: token.colorWarning,\n })), { [`&${token.componentCls}-disabled`]: {\n [`&:not(${token.componentCls}-customize-input) ${token.componentCls}-selector`]: {\n color: token.colorTextDisabled,\n },\n }, [`&${token.componentCls}-multiple ${token.componentCls}-selection-item`]: {\n background: token.multipleItemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.multipleItemBorderColor}`,\n } }),\n});\nconst genVariantsStyle = (token) => ({\n [token.componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, genOutlinedStyle(token)), genFilledStyle(token)), genBorderlessStyle(token)), genUnderlinedStyle(token)),\n});\nexport default genVariantsStyle;\n","import { resetComponent, resetIcon, textEllipsis } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genDropdownStyle from './dropdown';\nimport genMultipleStyle from './multiple';\nimport genSingleStyle from './single';\nimport { prepareComponentToken } from './token';\nimport genVariantsStyle from './variants';\n// ============================= Selector =============================\nconst genSelectorStyle = (token) => {\n const { componentCls } = token;\n return {\n position: 'relative',\n transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`,\n input: {\n cursor: 'pointer',\n },\n [`${componentCls}-show-search&`]: {\n cursor: 'text',\n input: {\n cursor: 'auto',\n color: 'inherit',\n height: '100%',\n },\n },\n [`${componentCls}-disabled&`]: {\n cursor: 'not-allowed',\n input: {\n cursor: 'not-allowed',\n },\n },\n };\n};\n// ============================== Styles ==============================\n// /* Reset search input style */\nconst getSearchInputWithoutBorderStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-selection-search-input`]: {\n margin: 0,\n padding: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n appearance: 'none',\n fontFamily: 'inherit',\n '&::-webkit-search-cancel-button': {\n display: 'none',\n appearance: 'none',\n },\n },\n };\n};\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { antCls, componentCls, inputPaddingHorizontalBase, iconCls } = token;\n const hoverShowClearStyle = {\n [`${componentCls}-clear`]: {\n opacity: 1,\n background: token.colorBgBase,\n borderRadius: '50%',\n },\n };\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', display: 'inline-flex', cursor: 'pointer', [`&:not(${componentCls}-customize-input) ${componentCls}-selector`]: Object.assign(Object.assign({}, genSelectorStyle(token)), getSearchInputWithoutBorderStyle(token)), \n // ======================== Selection ========================\n [`${componentCls}-selection-item`]: Object.assign(Object.assign({ flex: 1, fontWeight: 'normal', position: 'relative', userSelect: 'none' }, textEllipsis), { \n // https://github.com/ant-design/ant-design/issues/40421\n [`> ${antCls}-typography`]: {\n display: 'inline',\n } }), \n // ======================= Placeholder =======================\n [`${componentCls}-selection-placeholder`]: Object.assign(Object.assign({}, textEllipsis), { flex: 1, color: token.colorTextPlaceholder, pointerEvents: 'none' }), \n // ========================== Arrow ==========================\n [`${componentCls}-arrow`]: Object.assign(Object.assign({}, resetIcon()), { position: 'absolute', top: '50%', insetInlineStart: 'auto', insetInlineEnd: inputPaddingHorizontalBase, height: token.fontSizeIcon, marginTop: token.calc(token.fontSizeIcon).mul(-1).div(2).equal(), color: token.colorTextQuaternary, fontSize: token.fontSizeIcon, lineHeight: 1, textAlign: 'center', pointerEvents: 'none', display: 'flex', alignItems: 'center', transition: `opacity ${token.motionDurationSlow} ease`, [iconCls]: {\n verticalAlign: 'top',\n transition: `transform ${token.motionDurationSlow}`,\n '> svg': {\n verticalAlign: 'top',\n },\n [`&:not(${componentCls}-suffix)`]: {\n pointerEvents: 'auto',\n },\n }, [`${componentCls}-disabled &`]: {\n cursor: 'not-allowed',\n }, '> *:not(:last-child)': {\n marginInlineEnd: 8, // FIXME: magic\n } }), \n // ========================== Wrap ===========================\n [`${componentCls}-selection-wrap`]: {\n display: 'flex',\n width: '100%',\n position: 'relative',\n minWidth: 0,\n // https://github.com/ant-design/ant-design/issues/51669\n '&:after': {\n content: '\"\\\\a0\"',\n width: 0,\n overflow: 'hidden',\n },\n }, \n // ========================= Prefix ==========================\n [`${componentCls}-prefix`]: {\n flex: 'none',\n marginInlineEnd: token.selectAffixPadding,\n }, \n // ========================== Clear ==========================\n [`${componentCls}-clear`]: {\n position: 'absolute',\n top: '50%',\n insetInlineStart: 'auto',\n insetInlineEnd: inputPaddingHorizontalBase,\n zIndex: 1,\n display: 'inline-block',\n width: token.fontSizeIcon,\n height: token.fontSizeIcon,\n marginTop: token.calc(token.fontSizeIcon).mul(-1).div(2).equal(),\n color: token.colorTextQuaternary,\n fontSize: token.fontSizeIcon,\n fontStyle: 'normal',\n lineHeight: 1,\n textAlign: 'center',\n textTransform: 'none',\n cursor: 'pointer',\n opacity: 0,\n transition: `color ${token.motionDurationMid} ease, opacity ${token.motionDurationSlow} ease`,\n textRendering: 'auto',\n // https://github.com/ant-design/ant-design/issues/54205\n // Force GPU compositing on Safari to prevent flickering on opacity/transform transitions\n transform: 'translateZ(0)',\n '&:before': {\n display: 'block',\n },\n '&:hover': {\n color: token.colorIcon,\n },\n }, '@media(hover:none)': hoverShowClearStyle, '&:hover': hoverShowClearStyle }),\n // ========================= Feedback ==========================\n [`${componentCls}-status`]: {\n '&-error, &-warning, &-success, &-validating': {\n [`&${componentCls}-has-feedback`]: {\n [`${componentCls}-clear`]: {\n insetInlineEnd: token\n .calc(inputPaddingHorizontalBase)\n .add(token.fontSize)\n .add(token.paddingXS)\n .equal(),\n },\n },\n },\n },\n };\n};\n// ============================== Styles ==============================\nconst genSelectStyle = (token) => {\n const { componentCls } = token;\n return [\n {\n [componentCls]: {\n // ==================== In Form ====================\n [`&${componentCls}-in-form-item`]: {\n width: '100%',\n },\n },\n },\n // =====================================================\n // == LTR ==\n // =====================================================\n // Base\n genBaseStyle(token),\n // Single\n genSingleStyle(token),\n // Multiple\n genMultipleStyle(token),\n // Dropdown\n genDropdownStyle(token),\n // =====================================================\n // == RTL ==\n // =====================================================\n {\n [`${componentCls}-rtl`]: {\n direction: 'rtl',\n },\n },\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(token, {\n borderElCls: `${componentCls}-selector`,\n focusElCls: `${componentCls}-focused`,\n }),\n ];\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Select', (token, { rootPrefixCls }) => {\n const selectToken = mergeToken(token, {\n rootPrefixCls,\n inputPaddingHorizontalBase: token.calc(token.paddingSM).sub(1).equal(),\n multipleSelectItemHeight: token.multipleItemHeight,\n selectHeight: token.controlHeight,\n });\n return [genSelectStyle(selectToken), genVariantsStyle(selectToken)];\n}, prepareComponentToken, {\n unitless: {\n optionLineHeight: true,\n optionSelectedFontWeight: true,\n },\n});\n","export const prepareComponentToken = (token) => {\n const { fontSize, lineHeight, lineWidth, controlHeight, controlHeightSM, controlHeightLG, paddingXXS, controlPaddingHorizontal, zIndexPopupBase, colorText, fontWeightStrong, controlItemBgActive, controlItemBgHover, colorBgContainer, colorFillSecondary, colorBgContainerDisabled, colorTextDisabled, colorPrimaryHover, colorPrimary, controlOutline, } = token;\n // Item height default use `controlHeight - 2 * paddingXXS`,\n // but some case `paddingXXS=0`.\n // Let's fallback it.\n const dblPaddingXXS = paddingXXS * 2;\n const dblLineWidth = lineWidth * 2;\n const multipleItemHeight = Math.min(controlHeight - dblPaddingXXS, controlHeight - dblLineWidth);\n const multipleItemHeightSM = Math.min(controlHeightSM - dblPaddingXXS, controlHeightSM - dblLineWidth);\n const multipleItemHeightLG = Math.min(controlHeightLG - dblPaddingXXS, controlHeightLG - dblLineWidth);\n // FIXED_ITEM_MARGIN is a hardcode calculation since calc not support rounding\n const INTERNAL_FIXED_ITEM_MARGIN = Math.floor(paddingXXS / 2);\n return {\n INTERNAL_FIXED_ITEM_MARGIN,\n zIndexPopup: zIndexPopupBase + 50,\n optionSelectedColor: colorText,\n optionSelectedFontWeight: fontWeightStrong,\n optionSelectedBg: controlItemBgActive,\n optionActiveBg: controlItemBgHover,\n optionPadding: `${(controlHeight - fontSize * lineHeight) / 2}px ${controlPaddingHorizontal}px`,\n optionFontSize: fontSize,\n optionLineHeight: lineHeight,\n optionHeight: controlHeight,\n selectorBg: colorBgContainer,\n clearBg: colorBgContainer,\n singleItemHeightLG: controlHeightLG,\n multipleItemBg: colorFillSecondary,\n multipleItemBorderColor: 'transparent',\n multipleItemHeight,\n multipleItemHeightSM,\n multipleItemHeightLG,\n multipleSelectorBgDisabled: colorBgContainerDisabled,\n multipleItemColorDisabled: colorTextDisabled,\n multipleItemBorderColorDisabled: 'transparent',\n showArrowPaddingInlineEnd: Math.ceil(token.fontSize * 1.25),\n hoverBorderColor: colorPrimaryHover,\n activeBorderColor: colorPrimary,\n activeOutlineColor: controlOutline,\n selectAffixPadding: paddingXXS,\n };\n};\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genTimelineStyle = (token) => {\n const { componentCls, calc } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { margin: 0, padding: 0, listStyle: 'none', [`${componentCls}-item`]: {\n position: 'relative',\n margin: 0,\n paddingBottom: token.itemPaddingBottom,\n fontSize: token.fontSize,\n listStyle: 'none',\n '&-tail': {\n position: 'absolute',\n insetBlockStart: token.itemHeadSize,\n insetInlineStart: calc(calc(token.itemHeadSize).sub(token.tailWidth)).div(2).equal(),\n height: `calc(100% - ${unit(token.itemHeadSize)})`,\n borderInlineStart: `${unit(token.tailWidth)} ${token.lineType} ${token.tailColor}`,\n },\n '&-pending': {\n [`${componentCls}-item-head`]: {\n fontSize: token.fontSizeSM,\n backgroundColor: 'transparent',\n },\n [`${componentCls}-item-tail`]: {\n display: 'none',\n },\n },\n '&-head': {\n position: 'absolute',\n width: token.itemHeadSize,\n height: token.itemHeadSize,\n backgroundColor: token.dotBg,\n border: `${unit(token.dotBorderWidth)} ${token.lineType} transparent`,\n borderRadius: '50%',\n '&-blue': {\n color: token.colorPrimary,\n borderColor: token.colorPrimary,\n },\n '&-red': {\n color: token.colorError,\n borderColor: token.colorError,\n },\n '&-green': {\n color: token.colorSuccess,\n borderColor: token.colorSuccess,\n },\n '&-gray': {\n color: token.colorTextDisabled,\n borderColor: token.colorTextDisabled,\n },\n },\n '&-head-custom': {\n position: 'absolute',\n insetBlockStart: calc(token.itemHeadSize).div(2).equal(),\n insetInlineStart: calc(token.itemHeadSize).div(2).equal(),\n width: 'auto',\n height: 'auto',\n marginBlockStart: 0,\n paddingBlock: token.customHeadPaddingVertical,\n lineHeight: 1,\n textAlign: 'center',\n border: 0,\n borderRadius: 0,\n transform: 'translate(-50%, -50%)',\n },\n '&-content': {\n position: 'relative',\n insetBlockStart: calc(calc(token.fontSize).mul(token.lineHeight).sub(token.fontSize))\n .mul(-1)\n .add(token.lineWidth)\n .equal(),\n marginInlineStart: calc(token.margin).add(token.itemHeadSize).equal(),\n marginInlineEnd: 0,\n marginBlockStart: 0,\n marginBlockEnd: 0,\n wordBreak: 'break-word',\n },\n '&-last': {\n [`> ${componentCls}-item-tail`]: {\n display: 'none',\n },\n [`> ${componentCls}-item-content`]: {\n minHeight: calc(token.controlHeightLG).mul(1.2).equal(),\n },\n },\n }, [`&${componentCls}-alternate,\n &${componentCls}-right,\n &${componentCls}-label`]: {\n [`${componentCls}-item`]: {\n '&-tail, &-head, &-head-custom': {\n insetInlineStart: '50%',\n },\n '&-head': {\n marginInlineStart: calc(token.marginXXS).mul(-1).equal(),\n '&-custom': {\n marginInlineStart: calc(token.tailWidth).div(2).equal(),\n },\n },\n '&-left': {\n [`${componentCls}-item-content`]: {\n insetInlineStart: `calc(50% - ${unit(token.marginXXS)})`,\n width: `calc(50% - ${unit(token.marginSM)})`,\n textAlign: 'start',\n },\n },\n '&-right': {\n [`${componentCls}-item-content`]: {\n width: `calc(50% - ${unit(token.marginSM)})`,\n margin: 0,\n textAlign: 'end',\n },\n },\n },\n }, [`&${componentCls}-right`]: {\n [`${componentCls}-item-right`]: {\n [`${componentCls}-item-tail,\n ${componentCls}-item-head,\n ${componentCls}-item-head-custom`]: {\n insetInlineStart: `calc(100% - ${unit(calc(calc(token.itemHeadSize).add(token.tailWidth)).div(2).equal())})`,\n },\n [`${componentCls}-item-content`]: {\n width: `calc(100% - ${unit(calc(token.itemHeadSize).add(token.marginXS).equal())})`,\n },\n },\n }, [`&${componentCls}-pending\n ${componentCls}-item-last\n ${componentCls}-item-tail`]: {\n display: 'block',\n height: `calc(100% - ${unit(token.margin)})`,\n borderInlineStart: `${unit(token.tailWidth)} dotted ${token.tailColor}`,\n }, [`&${componentCls}-reverse\n ${componentCls}-item-last\n ${componentCls}-item-tail`]: {\n display: 'none',\n }, [`&${componentCls}-reverse ${componentCls}-item-pending`]: {\n [`${componentCls}-item-tail`]: {\n insetBlockStart: token.margin,\n display: 'block',\n height: `calc(100% - ${unit(token.margin)})`,\n borderInlineStart: `${unit(token.tailWidth)} dotted ${token.tailColor}`,\n },\n [`${componentCls}-item-content`]: {\n minHeight: calc(token.controlHeightLG).mul(1.2).equal(),\n },\n }, [`&${componentCls}-label`]: {\n [`${componentCls}-item-label`]: {\n position: 'absolute',\n insetBlockStart: calc(calc(token.fontSize).mul(token.lineHeight).sub(token.fontSize))\n .mul(-1)\n .add(token.tailWidth)\n .equal(),\n width: `calc(50% - ${unit(token.marginSM)})`,\n textAlign: 'end',\n },\n [`${componentCls}-item-right`]: {\n [`${componentCls}-item-label`]: {\n insetInlineStart: `calc(50% + ${unit(token.marginSM)})`,\n width: `calc(50% - ${unit(token.marginSM)})`,\n textAlign: 'start',\n },\n },\n }, \n // ====================== RTL =======================\n '&-rtl': {\n direction: 'rtl',\n [`${componentCls}-item-head-custom`]: {\n transform: `translate(50%, -50%)`,\n },\n } }),\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => ({\n tailColor: token.colorSplit,\n tailWidth: token.lineWidthBold,\n dotBorderWidth: token.wireframe ? token.lineWidthBold : token.lineWidth * 3,\n dotBg: token.colorBgContainer,\n itemPaddingBottom: token.padding * 1.25,\n});\nexport default genStyleHooks('Timeline', (token) => {\n const timeLineToken = mergeToken(token, {\n itemHeadSize: 10,\n customHeadPaddingVertical: token.paddingXXS,\n paddingInlineEnd: 2,\n });\n return genTimelineStyle(timeLineToken);\n}, prepareComponentToken);\n","export default function contains(root, n) {\n if (!root) {\n return false;\n }\n\n // Use native if support\n if (root.contains) {\n return root.contains(n);\n }\n\n // `document.contains` not support with IE11\n var node = n;\n while (node) {\n if (node === root) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}","import { Keyframes } from '@ant-design/cssinjs';\nconst genNotificationPlacementStyle = (token) => {\n const { componentCls, notificationMarginEdge, animationMaxHeight } = token;\n const noticeCls = `${componentCls}-notice`;\n const rightFadeIn = new Keyframes('antNotificationFadeIn', {\n '0%': {\n transform: `translate3d(100%, 0, 0)`,\n opacity: 0,\n },\n '100%': {\n transform: `translate3d(0, 0, 0)`,\n opacity: 1,\n },\n });\n const topFadeIn = new Keyframes('antNotificationTopFadeIn', {\n '0%': {\n top: -animationMaxHeight,\n opacity: 0,\n },\n '100%': {\n top: 0,\n opacity: 1,\n },\n });\n const bottomFadeIn = new Keyframes('antNotificationBottomFadeIn', {\n '0%': {\n bottom: token.calc(animationMaxHeight).mul(-1).equal(),\n opacity: 0,\n },\n '100%': {\n bottom: 0,\n opacity: 1,\n },\n });\n const leftFadeIn = new Keyframes('antNotificationLeftFadeIn', {\n '0%': {\n transform: `translate3d(-100%, 0, 0)`,\n opacity: 0,\n },\n '100%': {\n transform: `translate3d(0, 0, 0)`,\n opacity: 1,\n },\n });\n return {\n [componentCls]: {\n [`&${componentCls}-top, &${componentCls}-bottom`]: {\n marginInline: 0,\n [noticeCls]: {\n marginInline: 'auto auto',\n },\n },\n [`&${componentCls}-top`]: {\n [`${componentCls}-fade-enter${componentCls}-fade-enter-active, ${componentCls}-fade-appear${componentCls}-fade-appear-active`]: {\n animationName: topFadeIn,\n },\n },\n [`&${componentCls}-bottom`]: {\n [`${componentCls}-fade-enter${componentCls}-fade-enter-active, ${componentCls}-fade-appear${componentCls}-fade-appear-active`]: {\n animationName: bottomFadeIn,\n },\n },\n [`&${componentCls}-topRight, &${componentCls}-bottomRight`]: {\n [`${componentCls}-fade-enter${componentCls}-fade-enter-active, ${componentCls}-fade-appear${componentCls}-fade-appear-active`]: {\n animationName: rightFadeIn,\n },\n },\n [`&${componentCls}-topLeft, &${componentCls}-bottomLeft`]: {\n marginRight: {\n value: 0,\n _skip_check_: true,\n },\n marginLeft: {\n value: notificationMarginEdge,\n _skip_check_: true,\n },\n [noticeCls]: {\n marginInlineEnd: 'auto',\n marginInlineStart: 0,\n },\n [`${componentCls}-fade-enter${componentCls}-fade-enter-active, ${componentCls}-fade-appear${componentCls}-fade-appear-active`]: {\n animationName: leftFadeIn,\n },\n },\n },\n };\n};\nexport default genNotificationPlacementStyle;\n","export const NotificationPlacements = [\n 'top',\n 'topLeft',\n 'topRight',\n 'bottom',\n 'bottomLeft',\n 'bottomRight',\n];\n","import { NotificationPlacements } from '../interface';\nconst placementAlignProperty = {\n topLeft: 'left',\n topRight: 'right',\n bottomLeft: 'left',\n bottomRight: 'right',\n top: 'left',\n bottom: 'left',\n};\nconst genPlacementStackStyle = (token, placement) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-${placement}`]: {\n [`&${componentCls}-stack > ${componentCls}-notice-wrapper`]: {\n [placement.startsWith('top') ? 'top' : 'bottom']: 0,\n [placementAlignProperty[placement]]: { value: 0, _skip_check_: true },\n },\n },\n };\n};\nconst genStackChildrenStyle = (token) => {\n const childrenStyle = {};\n for (let i = 1; i < token.notificationStackLayer; i++) {\n childrenStyle[`&:nth-last-child(${i + 1})`] = {\n overflow: 'hidden',\n [`& > ${token.componentCls}-notice`]: {\n opacity: 0,\n transition: `opacity ${token.motionDurationMid}`,\n },\n };\n }\n return Object.assign({ [`&:not(:nth-last-child(-n+${token.notificationStackLayer}))`]: {\n opacity: 0,\n overflow: 'hidden',\n color: 'transparent',\n pointerEvents: 'none',\n } }, childrenStyle);\n};\nconst genStackedNoticeStyle = (token) => {\n const childrenStyle = {};\n for (let i = 1; i < token.notificationStackLayer; i++) {\n childrenStyle[`&:nth-last-child(${i + 1})`] = {\n background: token.colorBgBlur,\n backdropFilter: 'blur(10px)',\n '-webkit-backdrop-filter': 'blur(10px)',\n };\n }\n return Object.assign({}, childrenStyle);\n};\nconst genStackStyle = (token) => {\n const { componentCls } = token;\n return Object.assign({ [`${componentCls}-stack`]: {\n [`& > ${componentCls}-notice-wrapper`]: Object.assign({ transition: `transform ${token.motionDurationSlow}, backdrop-filter 0s`, willChange: 'transform, opacity', position: 'absolute' }, genStackChildrenStyle(token)),\n }, [`${componentCls}-stack:not(${componentCls}-stack-expanded)`]: {\n [`& > ${componentCls}-notice-wrapper`]: Object.assign({}, genStackedNoticeStyle(token)),\n }, [`${componentCls}-stack${componentCls}-stack-expanded`]: {\n [`& > ${componentCls}-notice-wrapper`]: {\n '&:not(:nth-last-child(-n + 1))': {\n opacity: 1,\n overflow: 'unset',\n color: 'inherit',\n pointerEvents: 'auto',\n [`& > ${token.componentCls}-notice`]: {\n opacity: 1,\n },\n },\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n height: token.margin,\n width: '100%',\n insetInline: 0,\n bottom: token.calc(token.margin).mul(-1).equal(),\n background: 'transparent',\n pointerEvents: 'auto',\n },\n },\n } }, NotificationPlacements.map((placement) => genPlacementStackStyle(token, placement)).reduce((acc, cur) => (Object.assign(Object.assign({}, acc), cur)), {}));\n};\nexport default genStackStyle;\n","import { Keyframes, unit } from '@ant-design/cssinjs';\nimport { CONTAINER_MAX_OFFSET } from '../../_util/hooks/useZIndex';\nimport { genFocusStyle, resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genNotificationPlacementStyle from './placement';\nimport genStackStyle from './stack';\nexport const genNoticeStyle = (token) => {\n const { iconCls, componentCls, // .ant-notification\n boxShadow, fontSizeLG, notificationMarginBottom, borderRadiusLG, colorSuccess, colorInfo, colorWarning, colorError, colorTextHeading, notificationBg, notificationPadding, notificationMarginEdge, notificationProgressBg, notificationProgressHeight, fontSize, lineHeight, width, notificationIconSize, colorText, } = token;\n const noticeCls = `${componentCls}-notice`;\n return {\n position: 'relative',\n marginBottom: notificationMarginBottom,\n marginInlineStart: 'auto',\n background: notificationBg,\n borderRadius: borderRadiusLG,\n boxShadow,\n [noticeCls]: {\n padding: notificationPadding,\n width,\n maxWidth: `calc(100vw - ${unit(token.calc(notificationMarginEdge).mul(2).equal())})`,\n overflow: 'hidden',\n lineHeight,\n wordWrap: 'break-word',\n },\n [`${noticeCls}-message`]: {\n color: colorTextHeading,\n fontSize: fontSizeLG,\n lineHeight: token.lineHeightLG,\n },\n [`${noticeCls}-description`]: {\n fontSize,\n color: colorText,\n marginTop: token.marginXS,\n },\n [`${noticeCls}-closable ${noticeCls}-message`]: {\n paddingInlineEnd: token.paddingLG,\n },\n [`${noticeCls}-with-icon ${noticeCls}-message`]: {\n marginInlineStart: token.calc(token.marginSM).add(notificationIconSize).equal(),\n fontSize: fontSizeLG,\n },\n [`${noticeCls}-with-icon ${noticeCls}-description`]: {\n marginInlineStart: token.calc(token.marginSM).add(notificationIconSize).equal(),\n fontSize,\n },\n // Icon & color style in different selector level\n // https://github.com/ant-design/ant-design/issues/16503\n // https://github.com/ant-design/ant-design/issues/15512\n [`${noticeCls}-icon`]: {\n position: 'absolute',\n fontSize: notificationIconSize,\n lineHeight: 1,\n // icon-font\n [`&-success${iconCls}`]: {\n color: colorSuccess,\n },\n [`&-info${iconCls}`]: {\n color: colorInfo,\n },\n [`&-warning${iconCls}`]: {\n color: colorWarning,\n },\n [`&-error${iconCls}`]: {\n color: colorError,\n },\n },\n [`${noticeCls}-close`]: Object.assign({ position: 'absolute', top: token.notificationPaddingVertical, insetInlineEnd: token.notificationPaddingHorizontal, color: token.colorIcon, outline: 'none', width: token.notificationCloseButtonSize, height: token.notificationCloseButtonSize, borderRadius: token.borderRadiusSM, transition: `background-color ${token.motionDurationMid}, color ${token.motionDurationMid}`, display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'none', border: 'none', '&:hover': {\n color: token.colorIconHover,\n backgroundColor: token.colorBgTextHover,\n }, '&:active': {\n backgroundColor: token.colorBgTextActive,\n } }, genFocusStyle(token)),\n [`${noticeCls}-progress`]: {\n position: 'absolute',\n display: 'block',\n appearance: 'none',\n inlineSize: `calc(100% - ${unit(borderRadiusLG)} * 2)`,\n left: {\n _skip_check_: true,\n value: borderRadiusLG,\n },\n right: {\n _skip_check_: true,\n value: borderRadiusLG,\n },\n bottom: 0,\n blockSize: notificationProgressHeight,\n border: 0,\n '&, &::-webkit-progress-bar': {\n borderRadius: borderRadiusLG,\n backgroundColor: `rgba(0, 0, 0, 0.04)`,\n },\n '&::-moz-progress-bar': {\n background: notificationProgressBg,\n },\n '&::-webkit-progress-value': {\n borderRadius: borderRadiusLG,\n background: notificationProgressBg,\n },\n },\n [`${noticeCls}-actions`]: {\n float: 'right',\n marginTop: token.marginSM,\n },\n };\n};\nconst genNotificationStyle = (token) => {\n const { componentCls, // .ant-notification\n notificationMarginBottom, notificationMarginEdge, motionDurationMid, motionEaseInOut, } = token;\n const noticeCls = `${componentCls}-notice`;\n const fadeOut = new Keyframes('antNotificationFadeOut', {\n '0%': {\n maxHeight: token.animationMaxHeight,\n marginBottom: notificationMarginBottom,\n },\n '100%': {\n maxHeight: 0,\n marginBottom: 0,\n paddingTop: 0,\n paddingBottom: 0,\n opacity: 0,\n },\n });\n return [\n // ============================ Holder ============================\n {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'fixed', zIndex: token.zIndexPopup, marginRight: {\n value: notificationMarginEdge,\n _skip_check_: true,\n }, [`${componentCls}-hook-holder`]: {\n position: 'relative',\n }, \n // animation\n [`${componentCls}-fade-appear-prepare`]: {\n opacity: '0 !important',\n }, [`${componentCls}-fade-enter, ${componentCls}-fade-appear`]: {\n animationDuration: token.motionDurationMid,\n animationTimingFunction: motionEaseInOut,\n animationFillMode: 'both',\n opacity: 0,\n animationPlayState: 'paused',\n }, [`${componentCls}-fade-leave`]: {\n animationTimingFunction: motionEaseInOut,\n animationFillMode: 'both',\n animationDuration: motionDurationMid,\n animationPlayState: 'paused',\n }, [`${componentCls}-fade-enter${componentCls}-fade-enter-active, ${componentCls}-fade-appear${componentCls}-fade-appear-active`]: {\n animationPlayState: 'running',\n }, [`${componentCls}-fade-leave${componentCls}-fade-leave-active`]: {\n animationName: fadeOut,\n animationPlayState: 'running',\n }, \n // RTL\n '&-rtl': {\n direction: 'rtl',\n [`${noticeCls}-actions`]: {\n float: 'left',\n },\n } }),\n },\n // ============================ Notice ============================\n {\n [componentCls]: {\n [`${noticeCls}-wrapper`]: Object.assign({}, genNoticeStyle(token)),\n },\n },\n ];\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => ({\n zIndexPopup: token.zIndexPopupBase + CONTAINER_MAX_OFFSET + 50,\n width: 384,\n});\nexport const prepareNotificationToken = (token) => {\n const notificationPaddingVertical = token.paddingMD;\n const notificationPaddingHorizontal = token.paddingLG;\n const notificationToken = mergeToken(token, {\n notificationBg: token.colorBgElevated,\n notificationPaddingVertical,\n notificationPaddingHorizontal,\n notificationIconSize: token.calc(token.fontSizeLG).mul(token.lineHeightLG).equal(),\n notificationCloseButtonSize: token.calc(token.controlHeightLG).mul(0.55).equal(),\n notificationMarginBottom: token.margin,\n notificationPadding: `${unit(token.paddingMD)} ${unit(token.paddingContentHorizontalLG)}`,\n notificationMarginEdge: token.marginLG,\n animationMaxHeight: 150,\n notificationStackLayer: 3,\n notificationProgressHeight: 2,\n notificationProgressBg: `linear-gradient(90deg, ${token.colorPrimaryBorderHover}, ${token.colorPrimary})`,\n });\n return notificationToken;\n};\nexport default genStyleHooks('Notification', (token) => {\n const notificationToken = prepareNotificationToken(token);\n return [\n genNotificationStyle(notificationToken),\n genNotificationPlacementStyle(notificationToken),\n genStackStyle(notificationToken),\n ];\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { FastColor } from '@ant-design/fast-color';\nimport { genFocusStyle, resetComponent } from '../../style';\nimport getArrowStyle, { getArrowOffsetToken, MAX_VERTICAL_CONTENT_RADIUS, } from '../../style/placementArrow';\nimport { getArrowToken } from '../../style/roundedArrow';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, padding, paddingXS, borderRadius, borderRadiusXS, colorPrimary, colorFill, indicatorHeight, indicatorWidth, boxShadowTertiary, zIndexPopup, colorBgElevated, fontWeightStrong, marginXS, colorTextLightSolid, tourBorderRadius, colorWhite, primaryNextBtnHoverBg, closeBtnSize, motionDurationSlow, antCls, primaryPrevBtnBg, } = token;\n return [\n {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'absolute', zIndex: zIndexPopup, maxWidth: 'fit-content', visibility: 'visible', width: 520, '--antd-arrow-background-color': colorBgElevated, '&-pure': {\n maxWidth: '100%',\n position: 'relative',\n }, [`&${componentCls}-hidden`]: {\n display: 'none',\n }, \n // ============================= panel content ============================\n [`${componentCls}-content`]: {\n position: 'relative',\n }, [`${componentCls}-inner`]: {\n textAlign: 'start',\n textDecoration: 'none',\n borderRadius: tourBorderRadius,\n boxShadow: boxShadowTertiary,\n position: 'relative',\n backgroundColor: colorBgElevated,\n border: 'none',\n backgroundClip: 'padding-box',\n [`${componentCls}-close`]: Object.assign({ position: 'absolute', top: padding, insetInlineEnd: padding, color: token.colorIcon, background: 'none', border: 'none', width: closeBtnSize, height: closeBtnSize, borderRadius: token.borderRadiusSM, transition: `background-color ${token.motionDurationMid}, color ${token.motionDurationMid}`, display: 'flex', alignItems: 'center', justifyContent: 'center', cursor: 'pointer', '&:hover': {\n color: token.colorIconHover,\n backgroundColor: token.colorBgTextHover,\n }, '&:active': {\n backgroundColor: token.colorBgTextActive,\n } }, genFocusStyle(token)),\n [`${componentCls}-cover`]: {\n textAlign: 'center',\n padding: `${unit(token.calc(padding).add(closeBtnSize).add(paddingXS).equal())} ${unit(padding)} 0`,\n img: {\n width: '100%',\n },\n },\n [`${componentCls}-header`]: {\n padding: `${unit(padding)} ${unit(padding)} ${unit(paddingXS)}`,\n width: `calc(100% - ${unit(closeBtnSize)})`,\n wordBreak: 'break-word',\n [`${componentCls}-title`]: {\n fontWeight: fontWeightStrong,\n },\n },\n [`${componentCls}-description`]: {\n padding: `0 ${unit(padding)}`,\n wordWrap: 'break-word',\n },\n [`${componentCls}-footer`]: {\n padding: `${unit(paddingXS)} ${unit(padding)} ${unit(padding)}`,\n textAlign: 'end',\n borderRadius: `0 0 ${unit(borderRadiusXS)} ${unit(borderRadiusXS)}`,\n display: 'flex',\n [`${componentCls}-indicators`]: {\n display: 'inline-block',\n [`${componentCls}-indicator`]: {\n width: indicatorWidth,\n height: indicatorHeight,\n display: 'inline-block',\n borderRadius: '50%',\n background: colorFill,\n '&:not(:last-child)': {\n marginInlineEnd: indicatorHeight,\n },\n '&-active': {\n background: colorPrimary,\n },\n },\n },\n [`${componentCls}-buttons`]: {\n marginInlineStart: 'auto',\n [`${antCls}-btn`]: {\n marginInlineStart: marginXS,\n },\n },\n },\n }, \n // ============================= primary type ===========================\n // `$` for panel, `&$` for pure panel\n [`${componentCls}-primary, &${componentCls}-primary`]: {\n '--antd-arrow-background-color': colorPrimary,\n [`${componentCls}-inner`]: {\n color: colorTextLightSolid,\n textAlign: 'start',\n textDecoration: 'none',\n backgroundColor: colorPrimary,\n borderRadius,\n boxShadow: boxShadowTertiary,\n [`${componentCls}-close`]: {\n color: colorTextLightSolid,\n },\n [`${componentCls}-indicators`]: {\n [`${componentCls}-indicator`]: {\n background: primaryPrevBtnBg,\n '&-active': {\n background: colorTextLightSolid,\n },\n },\n },\n [`${componentCls}-prev-btn`]: {\n color: colorTextLightSolid,\n borderColor: primaryPrevBtnBg,\n backgroundColor: colorPrimary,\n '&:hover': {\n backgroundColor: primaryPrevBtnBg,\n borderColor: 'transparent',\n },\n },\n [`${componentCls}-next-btn`]: {\n color: colorPrimary,\n borderColor: 'transparent',\n background: colorWhite,\n '&:hover': {\n background: primaryNextBtnHoverBg,\n },\n },\n },\n } }),\n // ============================= mask ===========================\n [`${componentCls}-mask`]: {\n [`${componentCls}-placeholder-animated`]: {\n transition: `all ${motionDurationSlow}`,\n },\n },\n // =========== Limit left and right placement radius ==============\n [[\n '&-placement-left',\n '&-placement-leftTop',\n '&-placement-leftBottom',\n '&-placement-right',\n '&-placement-rightTop',\n '&-placement-rightBottom',\n ].join(',')]: {\n [`${componentCls}-inner`]: {\n borderRadius: token.min(tourBorderRadius, MAX_VERTICAL_CONTENT_RADIUS),\n },\n },\n },\n // ============================= Arrow ===========================\n getArrowStyle(token, 'var(--antd-arrow-background-color)'),\n ];\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => (Object.assign(Object.assign({ zIndexPopup: token.zIndexPopupBase + 70, closeBtnSize: token.fontSize * token.lineHeight, primaryPrevBtnBg: new FastColor(token.colorTextLightSolid).setA(0.15).toRgbString(), primaryNextBtnHoverBg: new FastColor(token.colorBgTextHover)\n .onBackground(token.colorWhite)\n .toRgbString() }, getArrowOffsetToken({\n contentRadius: token.borderRadiusLG,\n limitVerticalRadius: true,\n})), getArrowToken(token)));\nexport default genStyleHooks('Tour', (token) => {\n const { borderRadiusLG } = token;\n const TourToken = mergeToken(token, {\n indicatorWidth: 6,\n indicatorHeight: 6,\n tourBorderRadius: borderRadiusLG,\n });\n return genBaseStyle(TourToken);\n}, prepareComponentToken);\n","import { Keyframes } from '@ant-design/cssinjs';\nimport { CONTAINER_MAX_OFFSET } from '../../_util/hooks/useZIndex';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genMessageStyle = (token) => {\n const { componentCls, iconCls, boxShadow, colorText, colorSuccess, colorError, colorWarning, colorInfo, fontSizeLG, motionEaseInOutCirc, motionDurationSlow, marginXS, paddingXS, borderRadiusLG, zIndexPopup, \n // Custom token\n contentPadding, contentBg, } = token;\n const noticeCls = `${componentCls}-notice`;\n const messageMoveIn = new Keyframes('MessageMoveIn', {\n '0%': {\n padding: 0,\n transform: 'translateY(-100%)',\n opacity: 0,\n },\n '100%': {\n padding: paddingXS,\n transform: 'translateY(0)',\n opacity: 1,\n },\n });\n const messageMoveOut = new Keyframes('MessageMoveOut', {\n '0%': {\n maxHeight: token.height,\n padding: paddingXS,\n opacity: 1,\n },\n '100%': {\n maxHeight: 0,\n padding: 0,\n opacity: 0,\n },\n });\n const noticeStyle = {\n padding: paddingXS,\n textAlign: 'center',\n [`${componentCls}-custom-content`]: {\n display: 'flex',\n alignItems: 'center',\n },\n [`${componentCls}-custom-content > ${iconCls}`]: {\n marginInlineEnd: marginXS, // affected by ltr or rtl\n fontSize: fontSizeLG,\n },\n [`${noticeCls}-content`]: {\n display: 'inline-block',\n padding: contentPadding,\n background: contentBg,\n borderRadius: borderRadiusLG,\n boxShadow,\n pointerEvents: 'all',\n },\n [`${componentCls}-success > ${iconCls}`]: {\n color: colorSuccess,\n },\n [`${componentCls}-error > ${iconCls}`]: {\n color: colorError,\n },\n [`${componentCls}-warning > ${iconCls}`]: {\n color: colorWarning,\n },\n [`${componentCls}-info > ${iconCls},\n ${componentCls}-loading > ${iconCls}`]: {\n color: colorInfo,\n },\n };\n return [\n // ============================ Holder ============================\n {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { color: colorText, position: 'fixed', top: marginXS, width: '100%', pointerEvents: 'none', zIndex: zIndexPopup, [`${componentCls}-move-up`]: {\n animationFillMode: 'forwards',\n }, [`\n ${componentCls}-move-up-appear,\n ${componentCls}-move-up-enter\n `]: {\n animationName: messageMoveIn,\n animationDuration: motionDurationSlow,\n animationPlayState: 'paused',\n animationTimingFunction: motionEaseInOutCirc,\n }, [`\n ${componentCls}-move-up-appear${componentCls}-move-up-appear-active,\n ${componentCls}-move-up-enter${componentCls}-move-up-enter-active\n `]: {\n animationPlayState: 'running',\n }, [`${componentCls}-move-up-leave`]: {\n animationName: messageMoveOut,\n animationDuration: motionDurationSlow,\n animationPlayState: 'paused',\n animationTimingFunction: motionEaseInOutCirc,\n }, [`${componentCls}-move-up-leave${componentCls}-move-up-leave-active`]: {\n animationPlayState: 'running',\n }, '&-rtl': {\n direction: 'rtl',\n span: {\n direction: 'rtl',\n },\n } }),\n },\n // ============================ Notice ============================\n {\n [componentCls]: {\n [`${noticeCls}-wrapper`]: Object.assign({}, noticeStyle),\n },\n },\n // ============================= Pure =============================\n {\n [`${componentCls}-notice-pure-panel`]: Object.assign(Object.assign({}, noticeStyle), { padding: 0, textAlign: 'start' }),\n },\n ];\n};\nexport const prepareComponentToken = (token) => ({\n zIndexPopup: token.zIndexPopupBase + CONTAINER_MAX_OFFSET + 10,\n contentBg: token.colorBgElevated,\n contentPadding: `${(token.controlHeightLG - token.fontSize * token.lineHeight) / 2}px ${token.paddingSM}px`,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Message', (token) => {\n // Gen-style functions here\n const combinedToken = mergeToken(token, {\n height: 150,\n });\n return genMessageStyle(combinedToken);\n}, prepareComponentToken);\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport canUseDom from \"./canUseDom\";\nimport contains from \"./contains\";\nvar APPEND_ORDER = 'data-rc-order';\nvar APPEND_PRIORITY = 'data-rc-priority';\nvar MARK_KEY = \"rc-util-key\";\nvar containerCache = new Map();\nfunction getMark() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n mark = _ref.mark;\n if (mark) {\n return mark.startsWith('data-') ? mark : \"data-\".concat(mark);\n }\n return MARK_KEY;\n}\nfunction getContainer(option) {\n if (option.attachTo) {\n return option.attachTo;\n }\n var head = document.querySelector('head');\n return head || document.body;\n}\nfunction getOrder(prepend) {\n if (prepend === 'queue') {\n return 'prependQueue';\n }\n return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n return Array.from((containerCache.get(container) || container).children).filter(function (node) {\n return node.tagName === 'STYLE';\n });\n}\nexport function injectCSS(css) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!canUseDom()) {\n return null;\n }\n var csp = option.csp,\n prepend = option.prepend,\n _option$priority = option.priority,\n priority = _option$priority === void 0 ? 0 : _option$priority;\n var mergedOrder = getOrder(prepend);\n var isPrependQueue = mergedOrder === 'prependQueue';\n var styleNode = document.createElement('style');\n styleNode.setAttribute(APPEND_ORDER, mergedOrder);\n if (isPrependQueue && priority) {\n styleNode.setAttribute(APPEND_PRIORITY, \"\".concat(priority));\n }\n if (csp !== null && csp !== void 0 && csp.nonce) {\n styleNode.nonce = csp === null || csp === void 0 ? void 0 : csp.nonce;\n }\n styleNode.innerHTML = css;\n var container = getContainer(option);\n var firstChild = container.firstChild;\n if (prepend) {\n // If is queue `prepend`, it will prepend first style and then append rest style\n if (isPrependQueue) {\n var existStyle = (option.styles || findStyles(container)).filter(function (node) {\n // Ignore style which not injected by rc-util with prepend\n if (!['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER))) {\n return false;\n }\n\n // Ignore style which priority less then new style\n var nodePriority = Number(node.getAttribute(APPEND_PRIORITY) || 0);\n return priority >= nodePriority;\n });\n if (existStyle.length) {\n container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n return styleNode;\n }\n }\n\n // Use `insertBefore` as `prepend`\n container.insertBefore(styleNode, firstChild);\n } else {\n container.appendChild(styleNode);\n }\n return styleNode;\n}\nfunction findExistNode(key) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var container = getContainer(option);\n return (option.styles || findStyles(container)).find(function (node) {\n return node.getAttribute(getMark(option)) === key;\n });\n}\nexport function removeCSS(key) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var existNode = findExistNode(key, option);\n if (existNode) {\n var container = getContainer(option);\n container.removeChild(existNode);\n }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n var cachedRealContainer = containerCache.get(container);\n\n // Find real container when not cached or cached container removed\n if (!cachedRealContainer || !contains(document, cachedRealContainer)) {\n var placeholderStyle = injectCSS('', option);\n var parentNode = placeholderStyle.parentNode;\n containerCache.set(container, parentNode);\n container.removeChild(placeholderStyle);\n }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nexport function clearContainerCache() {\n containerCache.clear();\n}\nexport function updateCSS(css, key) {\n var originOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var container = getContainer(originOption);\n var styles = findStyles(container);\n var option = _objectSpread(_objectSpread({}, originOption), {}, {\n styles: styles\n });\n\n // Sync real parent\n syncRealContainer(container, option);\n var existNode = findExistNode(key, option);\n if (existNode) {\n var _option$csp, _option$csp2;\n if ((_option$csp = option.csp) !== null && _option$csp !== void 0 && _option$csp.nonce && existNode.nonce !== ((_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce)) {\n var _option$csp3;\n existNode.nonce = (_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce;\n }\n if (existNode.innerHTML !== css) {\n existNode.innerHTML = css;\n }\n return existNode;\n }\n var newNode = injectCSS(css, option);\n newNode.setAttribute(getMark(option), key);\n return newNode;\n}","// Compatible for babel-plugin-import\n/* istanbul ignore next */\nexport default {};\n","import { unit } from '@ant-design/cssinjs';\nimport { mergeToken } from '../../theme/internal';\nexport const genHoverStyle = (token) => ({\n borderColor: token.hoverBorderColor,\n backgroundColor: token.hoverBg,\n});\nexport const genDisabledStyle = (token) => ({\n color: token.colorTextDisabled,\n backgroundColor: token.colorBgContainerDisabled,\n borderColor: token.colorBorder,\n boxShadow: 'none',\n cursor: 'not-allowed',\n opacity: 1,\n 'input[disabled], textarea[disabled]': {\n cursor: 'not-allowed',\n },\n '&:hover:not([disabled])': Object.assign({}, genHoverStyle(mergeToken(token, {\n hoverBorderColor: token.colorBorder,\n hoverBg: token.colorBgContainerDisabled,\n }))),\n});\n/* ============== Outlined ============== */\nexport const genBaseOutlinedStyle = (token, options) => ({\n background: token.colorBgContainer,\n borderWidth: token.lineWidth,\n borderStyle: token.lineType,\n borderColor: options.borderColor,\n '&:hover': {\n borderColor: options.hoverBorderColor,\n backgroundColor: token.hoverBg,\n },\n '&:focus, &:focus-within': {\n borderColor: options.activeBorderColor,\n boxShadow: options.activeShadow,\n outline: 0,\n backgroundColor: token.activeBg,\n },\n});\nconst genOutlinedStatusStyle = (token, options) => ({\n [`&${token.componentCls}-status-${options.status}:not(${token.componentCls}-disabled)`]: Object.assign(Object.assign({}, genBaseOutlinedStyle(token, options)), { [`${token.componentCls}-prefix, ${token.componentCls}-suffix`]: {\n color: options.affixColor,\n } }),\n [`&${token.componentCls}-status-${options.status}${token.componentCls}-disabled`]: {\n borderColor: options.borderColor,\n },\n});\nexport const genOutlinedStyle = (token, extraStyles) => ({\n '&-outlined': Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, genBaseOutlinedStyle(token, {\n borderColor: token.colorBorder,\n hoverBorderColor: token.hoverBorderColor,\n activeBorderColor: token.activeBorderColor,\n activeShadow: token.activeShadow,\n })), { [`&${token.componentCls}-disabled, &[disabled]`]: Object.assign({}, genDisabledStyle(token)) }), genOutlinedStatusStyle(token, {\n status: 'error',\n borderColor: token.colorError,\n hoverBorderColor: token.colorErrorBorderHover,\n activeBorderColor: token.colorError,\n activeShadow: token.errorActiveShadow,\n affixColor: token.colorError,\n })), genOutlinedStatusStyle(token, {\n status: 'warning',\n borderColor: token.colorWarning,\n hoverBorderColor: token.colorWarningBorderHover,\n activeBorderColor: token.colorWarning,\n activeShadow: token.warningActiveShadow,\n affixColor: token.colorWarning,\n })), extraStyles),\n});\nconst genOutlinedGroupStatusStyle = (token, options) => ({\n [`&${token.componentCls}-group-wrapper-status-${options.status}`]: {\n [`${token.componentCls}-group-addon`]: {\n borderColor: options.addonBorderColor,\n color: options.addonColor,\n },\n },\n});\nexport const genOutlinedGroupStyle = (token) => ({\n '&-outlined': Object.assign(Object.assign(Object.assign({ [`${token.componentCls}-group`]: {\n '&-addon': {\n background: token.addonBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n },\n '&-addon:first-child': {\n borderInlineEnd: 0,\n },\n '&-addon:last-child': {\n borderInlineStart: 0,\n },\n } }, genOutlinedGroupStatusStyle(token, {\n status: 'error',\n addonBorderColor: token.colorError,\n addonColor: token.colorErrorText,\n })), genOutlinedGroupStatusStyle(token, {\n status: 'warning',\n addonBorderColor: token.colorWarning,\n addonColor: token.colorWarningText,\n })), { [`&${token.componentCls}-group-wrapper-disabled`]: {\n [`${token.componentCls}-group-addon`]: Object.assign({}, genDisabledStyle(token)),\n } }),\n});\n/* ============ Borderless ============ */\nexport const genBorderlessStyle = (token, extraStyles) => {\n const { componentCls } = token;\n return {\n '&-borderless': Object.assign({ background: 'transparent', border: 'none', '&:focus, &:focus-within': {\n outline: 'none',\n }, \n // >>>>> Disabled\n [`&${componentCls}-disabled, &[disabled]`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n }, \n // >>>>> Status\n [`&${componentCls}-status-error`]: {\n '&, & input, & textarea': {\n color: token.colorError,\n },\n }, [`&${componentCls}-status-warning`]: {\n '&, & input, & textarea': {\n color: token.colorWarning,\n },\n } }, extraStyles),\n };\n};\n/* ============== Filled ============== */\nconst genBaseFilledStyle = (token, options) => {\n var _a;\n return ({\n background: options.bg,\n borderWidth: token.lineWidth,\n borderStyle: token.lineType,\n borderColor: 'transparent',\n 'input&, & input, textarea&, & textarea': {\n color: (_a = options === null || options === void 0 ? void 0 : options.inputColor) !== null && _a !== void 0 ? _a : 'unset',\n },\n '&:hover': {\n background: options.hoverBg,\n },\n '&:focus, &:focus-within': {\n outline: 0,\n borderColor: options.activeBorderColor,\n backgroundColor: token.activeBg,\n },\n });\n};\nconst genFilledStatusStyle = (token, options) => ({\n [`&${token.componentCls}-status-${options.status}:not(${token.componentCls}-disabled)`]: Object.assign(Object.assign({}, genBaseFilledStyle(token, options)), { [`${token.componentCls}-prefix, ${token.componentCls}-suffix`]: {\n color: options.affixColor,\n } }),\n});\nexport const genFilledStyle = (token, extraStyles) => ({\n '&-filled': Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, genBaseFilledStyle(token, {\n bg: token.colorFillTertiary,\n hoverBg: token.colorFillSecondary,\n activeBorderColor: token.activeBorderColor,\n })), { [`&${token.componentCls}-disabled, &[disabled]`]: Object.assign({}, genDisabledStyle(token)) }), genFilledStatusStyle(token, {\n status: 'error',\n bg: token.colorErrorBg,\n hoverBg: token.colorErrorBgHover,\n activeBorderColor: token.colorError,\n inputColor: token.colorErrorText,\n affixColor: token.colorError,\n })), genFilledStatusStyle(token, {\n status: 'warning',\n bg: token.colorWarningBg,\n hoverBg: token.colorWarningBgHover,\n activeBorderColor: token.colorWarning,\n inputColor: token.colorWarningText,\n affixColor: token.colorWarning,\n })), extraStyles),\n});\nconst genFilledGroupStatusStyle = (token, options) => ({\n [`&${token.componentCls}-group-wrapper-status-${options.status}`]: {\n [`${token.componentCls}-group-addon`]: {\n background: options.addonBg,\n color: options.addonColor,\n },\n },\n});\nexport const genFilledGroupStyle = (token) => ({\n '&-filled': Object.assign(Object.assign(Object.assign({ [`${token.componentCls}-group-addon`]: {\n background: token.colorFillTertiary,\n '&:last-child': {\n position: 'static',\n },\n } }, genFilledGroupStatusStyle(token, {\n status: 'error',\n addonBg: token.colorErrorBg,\n addonColor: token.colorErrorText,\n })), genFilledGroupStatusStyle(token, {\n status: 'warning',\n addonBg: token.colorWarningBg,\n addonColor: token.colorWarningText,\n })), { [`&${token.componentCls}-group-wrapper-disabled`]: {\n [`${token.componentCls}-group`]: {\n '&-addon': {\n background: token.colorFillTertiary,\n color: token.colorTextDisabled,\n },\n '&-addon:first-child': {\n borderInlineStart: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n borderTop: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n },\n '&-addon:last-child': {\n borderInlineEnd: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n borderTop: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n },\n },\n } }),\n});\n/* ============== Underlined ============== */\n// https://github.com/ant-design/ant-design/issues/51379\nexport const genBaseUnderlinedStyle = (token, options) => ({\n background: token.colorBgContainer,\n borderWidth: `${unit(token.lineWidth)} 0`,\n borderStyle: `${token.lineType} none`,\n borderColor: `transparent transparent ${options.borderColor} transparent`,\n borderRadius: 0,\n '&:hover': {\n borderColor: `transparent transparent ${options.borderColor} transparent`,\n backgroundColor: token.hoverBg,\n },\n '&:focus, &:focus-within': {\n borderColor: `transparent transparent ${options.activeBorderColor} transparent`,\n outline: 0,\n backgroundColor: token.activeBg,\n },\n});\nconst genUnderlinedStatusStyle = (token, options) => ({\n [`&${token.componentCls}-status-${options.status}:not(${token.componentCls}-disabled)`]: Object.assign(Object.assign({}, genBaseUnderlinedStyle(token, options)), { [`${token.componentCls}-prefix, ${token.componentCls}-suffix`]: {\n color: options.affixColor,\n } }),\n [`&${token.componentCls}-status-${options.status}${token.componentCls}-disabled`]: {\n borderColor: `transparent transparent ${options.borderColor} transparent`,\n },\n});\nexport const genUnderlinedStyle = (token, extraStyles) => ({\n '&-underlined': Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, genBaseUnderlinedStyle(token, {\n borderColor: token.colorBorder,\n hoverBorderColor: token.hoverBorderColor,\n activeBorderColor: token.activeBorderColor,\n activeShadow: token.activeShadow,\n })), { \n // >>>>> Disabled\n [`&${token.componentCls}-disabled, &[disabled]`]: {\n color: token.colorTextDisabled,\n boxShadow: 'none',\n cursor: 'not-allowed',\n '&:hover': {\n borderColor: `transparent transparent ${token.colorBorder} transparent`,\n },\n }, 'input[disabled], textarea[disabled]': {\n cursor: 'not-allowed',\n } }), genUnderlinedStatusStyle(token, {\n status: 'error',\n borderColor: token.colorError,\n hoverBorderColor: token.colorErrorBorderHover,\n activeBorderColor: token.colorError,\n activeShadow: token.errorActiveShadow,\n affixColor: token.colorError,\n })), genUnderlinedStatusStyle(token, {\n status: 'warning',\n borderColor: token.colorWarning,\n hoverBorderColor: token.colorWarningBorderHover,\n activeBorderColor: token.colorWarning,\n activeShadow: token.warningActiveShadow,\n affixColor: token.colorWarning,\n })), extraStyles),\n});\n","import { genCompactItemStyle } from '../../style/compact-item';\nimport { genStyleHooks } from '../../theme/internal';\nimport getColumnsStyle from './columns';\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, antCls } = token;\n return [\n // =====================================================\n // == Control ==\n // =====================================================\n {\n [componentCls]: {\n width: token.controlWidth,\n },\n },\n // =====================================================\n // == Popup ==\n // =====================================================\n {\n [`${componentCls}-dropdown`]: [\n {\n [`&${antCls}-select-dropdown`]: {\n padding: 0,\n },\n },\n getColumnsStyle(token),\n ],\n },\n // =====================================================\n // == RTL ==\n // =====================================================\n {\n [`${componentCls}-dropdown-rtl`]: {\n direction: 'rtl',\n },\n },\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(token),\n ];\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => {\n const itemPaddingVertical = Math.round((token.controlHeight - token.fontSize * token.lineHeight) / 2);\n return {\n controlWidth: 184,\n controlItemWidth: 111,\n dropdownHeight: 180,\n optionSelectedBg: token.controlItemBgActive,\n optionSelectedFontWeight: token.fontWeightStrong,\n optionPadding: `${itemPaddingVertical}px ${token.paddingSM}px`,\n menuPadding: token.paddingXXS,\n optionSelectedColor: token.colorText,\n };\n};\nexport default genStyleHooks('Cascader', genBaseStyle, prepareComponentToken, {\n unitless: {\n optionSelectedFontWeight: true,\n },\n});\n","// handle border collapse\nfunction compactItemBorder(token, parentCls, options, prefixCls) {\n const { focusElCls, focus, borderElCls } = options;\n const childCombinator = borderElCls ? '> *' : '';\n const hoverEffects = ['hover', focus ? 'focus' : null, 'active']\n .filter(Boolean)\n .map((n) => `&:${n} ${childCombinator}`)\n .join(',');\n return {\n [`&-item:not(${parentCls}-last-item)`]: {\n marginInlineEnd: token.calc(token.lineWidth).mul(-1).equal(),\n },\n [`&-item:not(${prefixCls}-status-success)`]: {\n zIndex: 2,\n },\n '&-item': Object.assign(Object.assign({ [hoverEffects]: {\n zIndex: 3,\n } }, (focusElCls\n ? {\n [`&${focusElCls}`]: {\n zIndex: 3,\n },\n }\n : {})), { [`&[disabled] ${childCombinator}`]: {\n zIndex: 0,\n } }),\n };\n}\n// handle border-radius\nfunction compactItemBorderRadius(prefixCls, parentCls, options) {\n const { borderElCls } = options;\n const childCombinator = borderElCls ? `> ${borderElCls}` : '';\n return {\n [`&-item:not(${parentCls}-first-item):not(${parentCls}-last-item) ${childCombinator}`]: {\n borderRadius: 0,\n },\n [`&-item:not(${parentCls}-last-item)${parentCls}-first-item`]: {\n [`& ${childCombinator}, &${prefixCls}-sm ${childCombinator}, &${prefixCls}-lg ${childCombinator}`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n },\n [`&-item:not(${parentCls}-first-item)${parentCls}-last-item`]: {\n [`& ${childCombinator}, &${prefixCls}-sm ${childCombinator}, &${prefixCls}-lg ${childCombinator}`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n },\n };\n}\nexport function genCompactItemStyle(token, options = { focus: true }) {\n const { componentCls } = token;\n const compactCls = `${componentCls}-compact`;\n return {\n [compactCls]: Object.assign(Object.assign({}, compactItemBorder(token, compactCls, options, componentCls)), compactItemBorderRadius(componentCls, compactCls, options)),\n };\n}\n","import { unit } from '@ant-design/cssinjs';\nimport { genOverflowStyle, getMultipleSelectorUnit } from '../../select/style/multiple';\nimport { mergeToken } from '../../theme/internal';\nconst genSize = (token, suffix) => {\n const { componentCls, controlHeight } = token;\n const suffixCls = suffix ? `${componentCls}-${suffix}` : '';\n const multipleSelectorUnit = getMultipleSelectorUnit(token);\n return [\n // genSelectionStyle(token, suffix),\n {\n [`${componentCls}-multiple${suffixCls}`]: {\n paddingBlock: multipleSelectorUnit.containerPadding,\n paddingInlineStart: multipleSelectorUnit.basePadding,\n minHeight: controlHeight,\n // ======================== Selections ========================\n [`${componentCls}-selection-item`]: {\n height: multipleSelectorUnit.itemHeight,\n lineHeight: unit(multipleSelectorUnit.itemLineHeight),\n },\n },\n },\n ];\n};\nconst genPickerMultipleStyle = (token) => {\n const { componentCls, calc, lineWidth } = token;\n const smallToken = mergeToken(token, {\n fontHeight: token.fontSize,\n selectHeight: token.controlHeightSM,\n multipleSelectItemHeight: token.multipleItemHeightSM,\n borderRadius: token.borderRadiusSM,\n borderRadiusSM: token.borderRadiusXS,\n controlHeight: token.controlHeightSM,\n });\n const largeToken = mergeToken(token, {\n fontHeight: calc(token.multipleItemHeightLG)\n .sub(calc(lineWidth).mul(2).equal())\n .equal(),\n fontSize: token.fontSizeLG,\n selectHeight: token.controlHeightLG,\n multipleSelectItemHeight: token.multipleItemHeightLG,\n borderRadius: token.borderRadiusLG,\n borderRadiusSM: token.borderRadius,\n controlHeight: token.controlHeightLG,\n });\n return [\n // ======================== Size ========================\n genSize(smallToken, 'small'),\n genSize(token),\n genSize(largeToken, 'large'),\n // ====================== Selection ======================\n {\n [`${componentCls}${componentCls}-multiple`]: Object.assign(Object.assign({ width: '100%', cursor: 'text', \n // ==================== Selector =====================\n [`${componentCls}-selector`]: {\n flex: 'auto',\n padding: 0,\n position: 'relative',\n '&:after': {\n margin: 0,\n },\n // ================== placeholder ==================\n [`${componentCls}-selection-placeholder`]: {\n position: 'absolute',\n top: '50%',\n insetInlineStart: token.inputPaddingHorizontalBase,\n insetInlineEnd: 0,\n transform: 'translateY(-50%)',\n transition: `all ${token.motionDurationSlow}`,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n flex: 1,\n color: token.colorTextPlaceholder,\n pointerEvents: 'none',\n },\n } }, genOverflowStyle(token)), { \n // ====================== Input ======================\n // Input is `readonly`, which is used for a11y only\n [`${componentCls}-multiple-input`]: {\n width: 0,\n height: 0,\n border: 0,\n visibility: 'hidden',\n position: 'absolute',\n zIndex: -1,\n } }),\n },\n ];\n};\nexport default genPickerMultipleStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { genBorderlessStyle, genFilledStyle, genOutlinedStyle, genUnderlinedStyle, } from '../../input/style/variants';\nconst genVariantsStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: [\n Object.assign(Object.assign(Object.assign(Object.assign({}, genOutlinedStyle(token)), genUnderlinedStyle(token)), genFilledStyle(token)), genBorderlessStyle(token)),\n // ========================= Multiple =========================\n {\n '&-outlined': {\n [`&${componentCls}-multiple ${componentCls}-selection-item`]: {\n background: token.multipleItemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.multipleItemBorderColor}`,\n },\n },\n '&-filled': {\n [`&${componentCls}-multiple ${componentCls}-selection-item`]: {\n background: token.colorBgContainer,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n },\n },\n '&-borderless': {\n [`&${componentCls}-multiple ${componentCls}-selection-item`]: {\n background: token.multipleItemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.multipleItemBorderColor}`,\n },\n },\n '&-underlined': {\n [`&${componentCls}-multiple ${componentCls}-selection-item`]: {\n background: token.multipleItemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.multipleItemBorderColor}`,\n },\n },\n },\n ],\n };\n};\nexport default genVariantsStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { genPlaceholderStyle, initInputToken } from '../../input/style';\nimport { resetComponent, textEllipsis } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { initMoveMotion, initSlideMotion, slideDownIn, slideDownOut, slideUpIn, slideUpOut, } from '../../style/motion';\nimport { genRoundedArrow } from '../../style/roundedArrow';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genPickerMultipleStyle from './multiple';\nimport genPickerPanelStyle, { genPanelStyle } from './panel';\nimport { initPanelComponentToken, initPickerPanelToken, prepareComponentToken } from './token';\nimport genVariantsStyle from './variants';\nexport { initPickerPanelToken, initPanelComponentToken, genPanelStyle };\nconst genPickerPadding = (paddingBlock, paddingInline) => {\n return {\n padding: `${unit(paddingBlock)} ${unit(paddingInline)}`,\n };\n};\nconst genPickerStatusStyle = (token) => {\n const { componentCls, colorError, colorWarning } = token;\n return {\n [`${componentCls}:not(${componentCls}-disabled):not([disabled])`]: {\n [`&${componentCls}-status-error`]: {\n [`${componentCls}-active-bar`]: {\n background: colorError,\n },\n },\n [`&${componentCls}-status-warning`]: {\n [`${componentCls}-active-bar`]: {\n background: colorWarning,\n },\n },\n },\n };\n};\nconst genPickerStyle = (token) => {\n var _a;\n const { componentCls, antCls, paddingInline, lineWidth, lineType, colorBorder, borderRadius, motionDurationMid, colorTextDisabled, colorTextPlaceholder, fontSizeLG, inputFontSizeLG, fontSizeSM, inputFontSizeSM, controlHeightSM, paddingInlineSM, paddingXS, marginXS, colorIcon, lineWidthBold, colorPrimary, motionDurationSlow, zIndexPopup, paddingXXS, sizePopupArrow, colorBgElevated, borderRadiusLG, boxShadowSecondary, borderRadiusSM, colorSplit, cellHoverBg, presetsWidth, presetsMaxWidth, boxShadowPopoverArrow, fontHeight, lineHeightLG, } = token;\n return [\n {\n [componentCls]: Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genPickerPadding(token.paddingBlock, token.paddingInline)), { position: 'relative', display: 'inline-flex', alignItems: 'center', lineHeight: 1, borderRadius, transition: `border ${motionDurationMid}, box-shadow ${motionDurationMid}, background ${motionDurationMid}`, [`${componentCls}-prefix`]: {\n flex: '0 0 auto',\n marginInlineEnd: token.inputAffixPadding,\n }, \n // ======================== Input =========================\n [`${componentCls}-input`]: {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: '100%',\n '> input': Object.assign(Object.assign({ position: 'relative', display: 'inline-block', width: '100%', color: 'inherit', fontSize: (_a = token.inputFontSize) !== null && _a !== void 0 ? _a : token.fontSize, lineHeight: token.lineHeight, transition: `all ${motionDurationMid}` }, genPlaceholderStyle(colorTextPlaceholder)), { flex: 'auto', \n // Fix Firefox flex not correct:\n // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553\n minWidth: 1, height: 'auto', padding: 0, background: 'transparent', border: 0, fontFamily: 'inherit', '&:focus': {\n boxShadow: 'none',\n outline: 0,\n }, '&[disabled]': {\n background: 'transparent',\n color: colorTextDisabled,\n cursor: 'not-allowed',\n } }),\n '&-placeholder': {\n '> input': {\n color: colorTextPlaceholder,\n },\n },\n }, \n // Size\n '&-large': Object.assign(Object.assign({}, genPickerPadding(token.paddingBlockLG, token.paddingInlineLG)), { [`${componentCls}-input > input`]: {\n fontSize: inputFontSizeLG !== null && inputFontSizeLG !== void 0 ? inputFontSizeLG : fontSizeLG,\n lineHeight: lineHeightLG,\n } }), '&-small': Object.assign(Object.assign({}, genPickerPadding(token.paddingBlockSM, token.paddingInlineSM)), { [`${componentCls}-input > input`]: {\n fontSize: inputFontSizeSM !== null && inputFontSizeSM !== void 0 ? inputFontSizeSM : fontSizeSM,\n } }), [`${componentCls}-suffix`]: {\n display: 'flex',\n flex: 'none',\n alignSelf: 'center',\n marginInlineStart: token.calc(paddingXS).div(2).equal(),\n color: colorTextDisabled,\n lineHeight: 1,\n pointerEvents: 'none',\n transition: `opacity ${motionDurationMid}, color ${motionDurationMid}`,\n '> *': {\n verticalAlign: 'top',\n '&:not(:last-child)': {\n marginInlineEnd: marginXS,\n },\n },\n }, [`${componentCls}-clear`]: {\n position: 'absolute',\n top: '50%',\n insetInlineEnd: 0,\n color: colorTextDisabled,\n lineHeight: 1,\n transform: 'translateY(-50%)',\n cursor: 'pointer',\n opacity: 0,\n transition: `opacity ${motionDurationMid}, color ${motionDurationMid}`,\n '> *': {\n verticalAlign: 'top',\n },\n '&:hover': {\n color: colorIcon,\n },\n }, '&:hover': {\n [`${componentCls}-clear`]: {\n opacity: 1,\n },\n // Should use the following selector, but since `:has` has poor compatibility,\n // we use `:not(:last-child)` instead, which may cause some problems in some cases.\n // [`${componentCls}-suffix:has(+ ${componentCls}-clear)`]: {\n [`${componentCls}-suffix:not(:last-child)`]: {\n opacity: 0,\n },\n }, [`${componentCls}-separator`]: {\n position: 'relative',\n display: 'inline-block',\n width: '1em',\n height: fontSizeLG,\n color: colorTextDisabled,\n fontSize: fontSizeLG,\n verticalAlign: 'top',\n cursor: 'default',\n [`${componentCls}-focused &`]: {\n color: colorIcon,\n },\n [`${componentCls}-range-separator &`]: {\n [`${componentCls}-disabled &`]: {\n cursor: 'not-allowed',\n },\n },\n }, \n // ======================== Range =========================\n '&-range': {\n position: 'relative',\n display: 'inline-flex',\n // Active bar\n [`${componentCls}-active-bar`]: {\n bottom: token.calc(lineWidth).mul(-1).equal(),\n height: lineWidthBold,\n background: colorPrimary,\n opacity: 0,\n transition: `all ${motionDurationSlow} ease-out`,\n pointerEvents: 'none',\n },\n [`&${componentCls}-focused`]: {\n [`${componentCls}-active-bar`]: {\n opacity: 1,\n },\n },\n [`${componentCls}-range-separator`]: {\n alignItems: 'center',\n padding: `0 ${unit(paddingXS)}`,\n lineHeight: 1,\n },\n }, \n // ======================== Clear =========================\n '&-range, &-multiple': {\n // Clear\n [`${componentCls}-clear`]: {\n insetInlineEnd: paddingInline,\n },\n [`&${componentCls}-small`]: {\n [`${componentCls}-clear`]: {\n insetInlineEnd: paddingInlineSM,\n },\n },\n }, \n // ======================= Dropdown =======================\n '&-dropdown': Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genPanelStyle(token)), { pointerEvents: 'none', position: 'absolute', \n // Fix incorrect position of picker popup\n // https://github.com/ant-design/ant-design/issues/35590\n top: -9999, left: {\n _skip_check_: true,\n value: -9999,\n }, zIndex: zIndexPopup, [`&${componentCls}-dropdown-hidden`]: {\n display: 'none',\n }, '&-rtl': {\n direction: 'rtl',\n }, [`&${componentCls}-dropdown-placement-bottomLeft,\n &${componentCls}-dropdown-placement-bottomRight`]: {\n [`${componentCls}-range-arrow`]: {\n top: 0,\n display: 'block',\n transform: 'translateY(-100%)',\n },\n }, [`&${componentCls}-dropdown-placement-topLeft,\n &${componentCls}-dropdown-placement-topRight`]: {\n [`${componentCls}-range-arrow`]: {\n bottom: 0,\n display: 'block',\n transform: 'translateY(100%) rotate(180deg)',\n },\n }, [`&${antCls}-slide-up-appear, &${antCls}-slide-up-enter`]: {\n [`${componentCls}-range-arrow${componentCls}-range-arrow`]: {\n transition: 'none',\n },\n }, [`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-topLeft,\n &${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-topRight,\n &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-topLeft,\n &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-topRight`]: {\n animationName: slideDownIn,\n }, [`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-bottomLeft,\n &${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-dropdown-placement-bottomRight,\n &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-bottomLeft,\n &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-dropdown-placement-bottomRight`]: {\n animationName: slideUpIn,\n }, \n // https://github.com/ant-design/ant-design/issues/48727\n [`&${antCls}-slide-up-leave ${componentCls}-panel-container`]: {\n pointerEvents: 'none',\n }, [`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-topLeft,\n &${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-topRight`]: {\n animationName: slideDownOut,\n }, [`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-bottomLeft,\n &${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-dropdown-placement-bottomRight`]: {\n animationName: slideUpOut,\n }, \n // Time picker with additional style\n [`${componentCls}-panel > ${componentCls}-time-panel`]: {\n paddingTop: paddingXXS,\n }, \n // ======================== Ranges ========================\n [`${componentCls}-range-wrapper`]: {\n display: 'flex',\n position: 'relative',\n }, [`${componentCls}-range-arrow`]: Object.assign(Object.assign({ position: 'absolute', zIndex: 1, display: 'none', paddingInline: token.calc(paddingInline).mul(1.5).equal(), boxSizing: 'content-box', transition: `all ${motionDurationSlow} ease-out` }, genRoundedArrow(token, colorBgElevated, boxShadowPopoverArrow)), { '&:before': {\n insetInlineStart: token.calc(paddingInline).mul(1.5).equal(),\n } }), [`${componentCls}-panel-container`]: {\n overflow: 'hidden',\n verticalAlign: 'top',\n background: colorBgElevated,\n borderRadius: borderRadiusLG,\n boxShadow: boxShadowSecondary,\n transition: `margin ${motionDurationSlow}`,\n display: 'inline-block',\n pointerEvents: 'auto',\n // ======================== Layout ========================\n [`${componentCls}-panel-layout`]: {\n display: 'flex',\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n },\n // ======================== Preset ========================\n [`${componentCls}-presets`]: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: presetsWidth,\n maxWidth: presetsMaxWidth,\n ul: {\n height: 0,\n flex: 'auto',\n listStyle: 'none',\n overflow: 'auto',\n margin: 0,\n padding: paddingXS,\n borderInlineEnd: `${unit(lineWidth)} ${lineType} ${colorSplit}`,\n li: Object.assign(Object.assign({}, textEllipsis), { borderRadius: borderRadiusSM, paddingInline: paddingXS, paddingBlock: token.calc(controlHeightSM).sub(fontHeight).div(2).equal(), cursor: 'pointer', transition: `all ${motionDurationSlow}`, '+ li': {\n marginTop: marginXS,\n }, '&:hover': {\n background: cellHoverBg,\n } }),\n },\n },\n // ======================== Panels ========================\n [`${componentCls}-panels`]: {\n display: 'inline-flex',\n flexWrap: 'nowrap',\n // [`${componentCls}-panel`]: {\n // borderWidth: `0 0 ${unit(lineWidth)}`,\n // },\n '&:last-child': {\n [`${componentCls}-panel`]: {\n borderWidth: 0,\n },\n },\n },\n [`${componentCls}-panel`]: {\n verticalAlign: 'top',\n background: 'transparent',\n borderRadius: 0,\n borderWidth: 0,\n [`${componentCls}-content, table`]: {\n textAlign: 'center',\n },\n '&-focused': {\n borderColor: colorBorder,\n },\n },\n } }), '&-dropdown-range': {\n padding: `${unit(token.calc(sizePopupArrow).mul(2).div(3).equal())} 0`,\n '&-hidden': {\n display: 'none',\n },\n }, '&-rtl': {\n direction: 'rtl',\n [`${componentCls}-separator`]: {\n transform: 'scale(-1, 1)',\n },\n [`${componentCls}-footer`]: {\n '&-extra': {\n direction: 'rtl',\n },\n },\n } }),\n },\n // Follow code may reuse in other components\n initSlideMotion(token, 'slide-up'),\n initSlideMotion(token, 'slide-down'),\n initMoveMotion(token, 'move-up'),\n initMoveMotion(token, 'move-down'),\n ];\n};\n// ============================== Export ==============================\nexport default genStyleHooks('DatePicker', (token) => {\n const pickerToken = mergeToken(initInputToken(token), initPickerPanelToken(token), {\n inputPaddingHorizontalBase: token.calc(token.paddingSM).sub(1).equal(),\n multipleSelectItemHeight: token.multipleItemHeight,\n selectHeight: token.controlHeight,\n });\n return [\n genPickerPanelStyle(pickerToken),\n genPickerStyle(pickerToken),\n genVariantsStyle(pickerToken),\n genPickerStatusStyle(pickerToken),\n genPickerMultipleStyle(pickerToken),\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(token, {\n focusElCls: `${token.componentCls}-focused`,\n }),\n ];\n}, prepareComponentToken);\n","var raf = function raf(callback) {\n return +setTimeout(callback, 16);\n};\nvar caf = function caf(num) {\n return clearTimeout(num);\n};\nif (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {\n raf = function raf(callback) {\n return window.requestAnimationFrame(callback);\n };\n caf = function caf(handle) {\n return window.cancelAnimationFrame(handle);\n };\n}\nvar rafUUID = 0;\nvar rafIds = new Map();\nfunction cleanup(id) {\n rafIds.delete(id);\n}\nvar wrapperRaf = function wrapperRaf(callback) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n rafUUID += 1;\n var id = rafUUID;\n function callRef(leftTimes) {\n if (leftTimes === 0) {\n // Clean up\n cleanup(id);\n\n // Trigger\n callback();\n } else {\n // Next raf\n var realId = raf(function () {\n callRef(leftTimes - 1);\n });\n\n // Bind real raf id\n rafIds.set(id, realId);\n }\n }\n callRef(times);\n return id;\n};\nwrapperRaf.cancel = function (id) {\n var realId = rafIds.get(id);\n cleanup(id);\n return caf(realId);\n};\nif (process.env.NODE_ENV !== 'production') {\n wrapperRaf.ids = function () {\n return rafIds;\n };\n}\nexport default wrapperRaf;","const genCollapseMotion = (token) => ({\n [token.componentCls]: {\n // For common/openAnimation\n [`${token.antCls}-motion-collapse-legacy`]: {\n overflow: 'hidden',\n '&-active': {\n transition: `height ${token.motionDurationMid} ${token.motionEaseInOut},\n opacity ${token.motionDurationMid} ${token.motionEaseInOut} !important`,\n },\n },\n [`${token.antCls}-motion-collapse`]: {\n overflow: 'hidden',\n transition: `height ${token.motionDurationMid} ${token.motionEaseInOut},\n opacity ${token.motionDurationMid} ${token.motionEaseInOut} !important`,\n },\n },\n});\nexport default genCollapseMotion;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5442__;","import classNames from 'classnames';\nexport const flexWrapValues = ['wrap', 'nowrap', 'wrap-reverse'];\nexport const justifyContentValues = [\n 'flex-start',\n 'flex-end',\n 'start',\n 'end',\n 'center',\n 'space-between',\n 'space-around',\n 'space-evenly',\n 'stretch',\n 'normal',\n 'left',\n 'right',\n];\nexport const alignItemsValues = [\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'baseline',\n 'normal',\n 'stretch',\n];\nconst genClsWrap = (prefixCls, props) => {\n const wrap = props.wrap === true ? 'wrap' : props.wrap;\n return {\n [`${prefixCls}-wrap-${wrap}`]: wrap && flexWrapValues.includes(wrap),\n };\n};\nconst genClsAlign = (prefixCls, props) => {\n const alignCls = {};\n alignItemsValues.forEach((cssKey) => {\n alignCls[`${prefixCls}-align-${cssKey}`] = props.align === cssKey;\n });\n alignCls[`${prefixCls}-align-stretch`] = !props.align && !!props.vertical;\n return alignCls;\n};\nconst genClsJustify = (prefixCls, props) => {\n const justifyCls = {};\n justifyContentValues.forEach((cssKey) => {\n justifyCls[`${prefixCls}-justify-${cssKey}`] = props.justify === cssKey;\n });\n return justifyCls;\n};\nfunction createFlexClassNames(prefixCls, props) {\n return classNames(Object.assign(Object.assign(Object.assign({}, genClsWrap(prefixCls, props)), genClsAlign(prefixCls, props)), genClsJustify(prefixCls, props)));\n}\nexport default createFlexClassNames;\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","import * as React from 'react';\nimport LocaleContext from './context';\nimport defaultLocaleData from './en_US';\nconst useLocale = (componentName, defaultLocale) => {\n const fullLocale = React.useContext(LocaleContext);\n const getLocale = React.useMemo(() => {\n var _a;\n const locale = defaultLocale || defaultLocaleData[componentName];\n const localeFromContext = (_a = fullLocale === null || fullLocale === void 0 ? void 0 : fullLocale[componentName]) !== null && _a !== void 0 ? _a : {};\n return Object.assign(Object.assign({}, (typeof locale === 'function' ? locale() : locale)), (localeFromContext || {}));\n }, [componentName, defaultLocale, fullLocale]);\n const getLocaleCode = React.useMemo(() => {\n const localeCode = fullLocale === null || fullLocale === void 0 ? void 0 : fullLocale.locale;\n // Had use LocaleProvide but didn't set locale\n if ((fullLocale === null || fullLocale === void 0 ? void 0 : fullLocale.exist) && !localeCode) {\n return defaultLocaleData.locale;\n }\n return localeCode;\n }, [fullLocale]);\n return [getLocale, getLocaleCode];\n};\nexport default useLocale;\n","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","const genButtonBorderStyle = (buttonTypeCls, borderColor) => ({\n // Border\n [`> span, > ${buttonTypeCls}`]: {\n '&:not(:last-child)': {\n [`&, & > ${buttonTypeCls}`]: {\n '&:not(:disabled)': {\n borderInlineEndColor: borderColor,\n },\n },\n },\n '&:not(:first-child)': {\n [`&, & > ${buttonTypeCls}`]: {\n '&:not(:disabled)': {\n borderInlineStartColor: borderColor,\n },\n },\n },\n },\n});\nconst genGroupStyle = (token) => {\n const { componentCls, fontSize, lineWidth, groupBorderColor, colorErrorHover } = token;\n return {\n [`${componentCls}-group`]: [\n {\n position: 'relative',\n display: 'inline-flex',\n // Border\n [`> span, > ${componentCls}`]: {\n '&:not(:last-child)': {\n [`&, & > ${componentCls}`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n },\n },\n '&:not(:first-child)': {\n marginInlineStart: token.calc(lineWidth).mul(-1).equal(),\n [`&, & > ${componentCls}`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n },\n },\n },\n [componentCls]: {\n position: 'relative',\n zIndex: 1,\n '&:hover, &:focus, &:active': {\n zIndex: 2,\n },\n '&[disabled]': {\n zIndex: 0,\n },\n },\n [`${componentCls}-icon-only`]: {\n fontSize,\n },\n },\n // Border Color\n genButtonBorderStyle(`${componentCls}-primary`, groupBorderColor),\n genButtonBorderStyle(`${componentCls}-danger`, colorErrorHover),\n ],\n };\n};\nexport default genGroupStyle;\n","import { unit } from '@ant-design/cssinjs';\nimport { genFocusStyle, resetIcon } from '../../style';\nimport { PresetColors } from '../../theme/interface';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genGroupStyle from './group';\nimport { prepareComponentToken, prepareToken } from './token';\n// ============================== Shared ==============================\nconst genSharedButtonStyle = (token) => {\n const { componentCls, iconCls, fontWeight, opacityLoading, motionDurationSlow, motionEaseInOut, iconGap, calc, } = token;\n return {\n [componentCls]: {\n outline: 'none',\n position: 'relative',\n display: 'inline-flex',\n gap: iconGap,\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n backgroundImage: 'none',\n background: 'transparent',\n border: `${unit(token.lineWidth)} ${token.lineType} transparent`,\n cursor: 'pointer',\n transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`,\n userSelect: 'none',\n touchAction: 'manipulation',\n color: token.colorText,\n '&:disabled > *': {\n pointerEvents: 'none',\n },\n // https://github.com/ant-design/ant-design/issues/51380\n [`${componentCls}-icon > svg`]: resetIcon(),\n '> a': {\n color: 'currentColor',\n },\n '&:not(:disabled)': genFocusStyle(token),\n [`&${componentCls}-two-chinese-chars::first-letter`]: {\n letterSpacing: '0.34em',\n },\n [`&${componentCls}-two-chinese-chars > *:not(${iconCls})`]: {\n marginInlineEnd: '-0.34em',\n letterSpacing: '0.34em',\n },\n [`&${componentCls}-icon-only`]: {\n paddingInline: 0,\n // make `btn-icon-only` not too narrow\n [`&${componentCls}-compact-item`]: {\n flex: 'none',\n },\n [`&${componentCls}-round`]: {\n width: 'auto',\n },\n },\n // Loading\n [`&${componentCls}-loading`]: {\n opacity: opacityLoading,\n cursor: 'default',\n },\n [`${componentCls}-loading-icon`]: {\n transition: ['width', 'opacity', 'margin']\n .map((transition) => `${transition} ${motionDurationSlow} ${motionEaseInOut}`)\n .join(','),\n },\n // iconPosition\n [`&:not(${componentCls}-icon-end)`]: {\n [`${componentCls}-loading-icon-motion`]: {\n '&-appear-start, &-enter-start': {\n marginInlineEnd: calc(iconGap).mul(-1).equal(),\n },\n '&-appear-active, &-enter-active': {\n marginInlineEnd: 0,\n },\n '&-leave-start': {\n marginInlineEnd: 0,\n },\n '&-leave-active': {\n marginInlineEnd: calc(iconGap).mul(-1).equal(),\n },\n },\n },\n '&-icon-end': {\n flexDirection: 'row-reverse',\n [`${componentCls}-loading-icon-motion`]: {\n '&-appear-start, &-enter-start': {\n marginInlineStart: calc(iconGap).mul(-1).equal(),\n },\n '&-appear-active, &-enter-active': {\n marginInlineStart: 0,\n },\n '&-leave-start': {\n marginInlineStart: 0,\n },\n '&-leave-active': {\n marginInlineStart: calc(iconGap).mul(-1).equal(),\n },\n },\n },\n },\n };\n};\nconst genHoverActiveButtonStyle = (btnCls, hoverStyle, activeStyle) => ({\n [`&:not(:disabled):not(${btnCls}-disabled)`]: {\n '&:hover': hoverStyle,\n '&:active': activeStyle,\n },\n});\n// ============================== Shape ===============================\nconst genCircleButtonStyle = (token) => ({\n minWidth: token.controlHeight,\n paddingInline: 0,\n borderRadius: '50%',\n});\nconst genRoundButtonStyle = (token) => {\n var _a;\n return ({\n borderRadius: token.controlHeight,\n paddingInline: (_a = token.buttonPaddingHorizontal) !== null && _a !== void 0 ? _a : token.calc(token.controlHeight).div(2).equal(),\n });\n};\nconst genDisabledStyle = (token) => ({\n cursor: 'not-allowed',\n borderColor: token.borderColorDisabled,\n color: token.colorTextDisabled,\n background: token.colorBgContainerDisabled,\n boxShadow: 'none',\n});\nconst genGhostButtonStyle = (btnCls, background, textColor, borderColor, textColorDisabled, borderColorDisabled, hoverStyle, activeStyle) => ({\n [`&${btnCls}-background-ghost`]: Object.assign(Object.assign({ color: textColor || undefined, background, borderColor: borderColor || undefined, boxShadow: 'none' }, genHoverActiveButtonStyle(btnCls, Object.assign({ background }, hoverStyle), Object.assign({ background }, activeStyle))), { '&:disabled': {\n cursor: 'not-allowed',\n color: textColorDisabled || undefined,\n borderColor: borderColorDisabled || undefined,\n } }),\n});\nconst genSolidDisabledButtonStyle = (token) => ({\n [`&:disabled, &${token.componentCls}-disabled`]: Object.assign({}, genDisabledStyle(token)),\n});\nconst genPureDisabledButtonStyle = (token) => ({\n [`&:disabled, &${token.componentCls}-disabled`]: {\n cursor: 'not-allowed',\n color: token.colorTextDisabled,\n },\n});\n// ============================== Variant =============================\nconst genVariantButtonStyle = (token, hoverStyle, activeStyle, variant) => {\n const isPureDisabled = variant && ['link', 'text'].includes(variant);\n const genDisabledButtonStyle = isPureDisabled\n ? genPureDisabledButtonStyle\n : genSolidDisabledButtonStyle;\n return Object.assign(Object.assign({}, genDisabledButtonStyle(token)), genHoverActiveButtonStyle(token.componentCls, hoverStyle, activeStyle));\n};\nconst genSolidButtonStyle = (token, textColor, background, hoverStyle, activeStyle) => ({\n [`&${token.componentCls}-variant-solid`]: Object.assign({ color: textColor, background }, genVariantButtonStyle(token, hoverStyle, activeStyle)),\n});\nconst genOutlinedDashedButtonStyle = (token, borderColor, background, hoverStyle, activeStyle) => ({\n [`&${token.componentCls}-variant-outlined, &${token.componentCls}-variant-dashed`]: Object.assign({ borderColor,\n background }, genVariantButtonStyle(token, hoverStyle, activeStyle)),\n});\nconst genDashedButtonStyle = (token) => ({\n [`&${token.componentCls}-variant-dashed`]: {\n borderStyle: 'dashed',\n },\n});\nconst genFilledButtonStyle = (token, background, hoverStyle, activeStyle) => ({\n [`&${token.componentCls}-variant-filled`]: Object.assign({ boxShadow: 'none', background }, genVariantButtonStyle(token, hoverStyle, activeStyle)),\n});\nconst genTextLinkButtonStyle = (token, textColor, variant, hoverStyle, activeStyle) => ({\n [`&${token.componentCls}-variant-${variant}`]: Object.assign({ color: textColor, boxShadow: 'none' }, genVariantButtonStyle(token, hoverStyle, activeStyle, variant)),\n});\n// =============================== Color ==============================\nconst genPresetColorStyle = (token) => {\n const { componentCls } = token;\n return PresetColors.reduce((prev, colorKey) => {\n const darkColor = token[`${colorKey}6`];\n const lightColor = token[`${colorKey}1`];\n const hoverColor = token[`${colorKey}5`];\n const lightHoverColor = token[`${colorKey}2`];\n const lightBorderColor = token[`${colorKey}3`];\n const activeColor = token[`${colorKey}7`];\n return Object.assign(Object.assign({}, prev), { [`&${componentCls}-color-${colorKey}`]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ color: darkColor, boxShadow: token[`${colorKey}ShadowColor`] }, genSolidButtonStyle(token, token.colorTextLightSolid, darkColor, {\n background: hoverColor,\n }, {\n background: activeColor,\n })), genOutlinedDashedButtonStyle(token, darkColor, token.colorBgContainer, {\n color: hoverColor,\n borderColor: hoverColor,\n background: token.colorBgContainer,\n }, {\n color: activeColor,\n borderColor: activeColor,\n background: token.colorBgContainer,\n })), genDashedButtonStyle(token)), genFilledButtonStyle(token, lightColor, {\n color: darkColor,\n background: lightHoverColor,\n }, {\n color: darkColor,\n background: lightBorderColor,\n })), genTextLinkButtonStyle(token, darkColor, 'link', {\n color: hoverColor,\n }, {\n color: activeColor,\n })), genTextLinkButtonStyle(token, darkColor, 'text', {\n color: hoverColor,\n background: lightColor,\n }, {\n color: activeColor,\n background: lightBorderColor,\n })) });\n }, {});\n};\nconst genDefaultButtonStyle = (token) => (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ color: token.defaultColor, boxShadow: token.defaultShadow }, genSolidButtonStyle(token, token.solidTextColor, token.colorBgSolid, {\n color: token.solidTextColor,\n background: token.colorBgSolidHover,\n}, {\n color: token.solidTextColor,\n background: token.colorBgSolidActive,\n})), genDashedButtonStyle(token)), genFilledButtonStyle(token, token.colorFillTertiary, {\n color: token.defaultColor,\n background: token.colorFillSecondary,\n}, {\n color: token.defaultColor,\n background: token.colorFill,\n})), genGhostButtonStyle(token.componentCls, token.ghostBg, token.defaultGhostColor, token.defaultGhostBorderColor, token.colorTextDisabled, token.colorBorder)), genTextLinkButtonStyle(token, token.textTextColor, 'link', {\n color: token.colorLinkHover,\n background: token.linkHoverBg,\n}, {\n color: token.colorLinkActive,\n})));\nconst genPrimaryButtonStyle = (token) => (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ color: token.colorPrimary, boxShadow: token.primaryShadow }, genOutlinedDashedButtonStyle(token, token.colorPrimary, token.colorBgContainer, {\n color: token.colorPrimaryTextHover,\n borderColor: token.colorPrimaryHover,\n background: token.colorBgContainer,\n}, {\n color: token.colorPrimaryTextActive,\n borderColor: token.colorPrimaryActive,\n background: token.colorBgContainer,\n})), genDashedButtonStyle(token)), genFilledButtonStyle(token, token.colorPrimaryBg, {\n color: token.colorPrimary,\n background: token.colorPrimaryBgHover,\n}, {\n color: token.colorPrimary,\n background: token.colorPrimaryBorder,\n})), genTextLinkButtonStyle(token, token.colorPrimaryText, 'text', {\n color: token.colorPrimaryTextHover,\n background: token.colorPrimaryBg,\n}, {\n color: token.colorPrimaryTextActive,\n background: token.colorPrimaryBorder,\n})), genTextLinkButtonStyle(token, token.colorPrimaryText, 'link', {\n color: token.colorPrimaryTextHover,\n background: token.linkHoverBg,\n}, {\n color: token.colorPrimaryTextActive,\n})), genGhostButtonStyle(token.componentCls, token.ghostBg, token.colorPrimary, token.colorPrimary, token.colorTextDisabled, token.colorBorder, {\n color: token.colorPrimaryHover,\n borderColor: token.colorPrimaryHover,\n}, {\n color: token.colorPrimaryActive,\n borderColor: token.colorPrimaryActive,\n})));\nconst genDangerousStyle = (token) => (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ color: token.colorError, boxShadow: token.dangerShadow }, genSolidButtonStyle(token, token.dangerColor, token.colorError, {\n background: token.colorErrorHover,\n}, {\n background: token.colorErrorActive,\n})), genOutlinedDashedButtonStyle(token, token.colorError, token.colorBgContainer, {\n color: token.colorErrorHover,\n borderColor: token.colorErrorBorderHover,\n}, {\n color: token.colorErrorActive,\n borderColor: token.colorErrorActive,\n})), genDashedButtonStyle(token)), genFilledButtonStyle(token, token.colorErrorBg, {\n color: token.colorError,\n background: token.colorErrorBgFilledHover,\n}, {\n color: token.colorError,\n background: token.colorErrorBgActive,\n})), genTextLinkButtonStyle(token, token.colorError, 'text', {\n color: token.colorErrorHover,\n background: token.colorErrorBg,\n}, {\n color: token.colorErrorHover,\n background: token.colorErrorBgActive,\n})), genTextLinkButtonStyle(token, token.colorError, 'link', {\n color: token.colorErrorHover,\n}, {\n color: token.colorErrorActive,\n})), genGhostButtonStyle(token.componentCls, token.ghostBg, token.colorError, token.colorError, token.colorTextDisabled, token.colorBorder, {\n color: token.colorErrorHover,\n borderColor: token.colorErrorHover,\n}, {\n color: token.colorErrorActive,\n borderColor: token.colorErrorActive,\n})));\nconst genLinkStyle = (token) => (Object.assign(Object.assign({}, genTextLinkButtonStyle(token, token.colorLink, 'link', {\n color: token.colorLinkHover,\n}, {\n color: token.colorLinkActive,\n})), genGhostButtonStyle(token.componentCls, token.ghostBg, token.colorInfo, token.colorInfo, token.colorTextDisabled, token.colorBorder, {\n color: token.colorInfoHover,\n borderColor: token.colorInfoHover,\n}, {\n color: token.colorInfoActive,\n borderColor: token.colorInfoActive,\n})));\nconst genColorButtonStyle = (token) => {\n const { componentCls } = token;\n return Object.assign({ [`${componentCls}-color-default`]: genDefaultButtonStyle(token), [`${componentCls}-color-primary`]: genPrimaryButtonStyle(token), [`${componentCls}-color-dangerous`]: genDangerousStyle(token), [`${componentCls}-color-link`]: genLinkStyle(token) }, genPresetColorStyle(token));\n};\n// =========== Compatible with versions earlier than 5.21.0 ===========\nconst genCompatibleButtonStyle = (token) => (Object.assign(Object.assign(Object.assign(Object.assign({}, genOutlinedDashedButtonStyle(token, token.defaultBorderColor, token.defaultBg, {\n color: token.defaultHoverColor,\n borderColor: token.defaultHoverBorderColor,\n background: token.defaultHoverBg,\n}, {\n color: token.defaultActiveColor,\n borderColor: token.defaultActiveBorderColor,\n background: token.defaultActiveBg,\n})), genTextLinkButtonStyle(token, token.textTextColor, 'text', {\n color: token.textTextHoverColor,\n background: token.textHoverBg,\n}, {\n color: token.textTextActiveColor,\n background: token.colorBgTextActive,\n})), genSolidButtonStyle(token, token.primaryColor, token.colorPrimary, {\n background: token.colorPrimaryHover,\n color: token.primaryColor,\n}, {\n background: token.colorPrimaryActive,\n color: token.primaryColor,\n})), genTextLinkButtonStyle(token, token.colorLink, 'link', {\n color: token.colorLinkHover,\n background: token.linkHoverBg,\n}, {\n color: token.colorLinkActive,\n})));\n// =============================== Size ===============================\nconst genButtonStyle = (token, prefixCls = '') => {\n const { componentCls, controlHeight, fontSize, borderRadius, buttonPaddingHorizontal, iconCls, buttonPaddingVertical, buttonIconOnlyFontSize, } = token;\n return [\n {\n [prefixCls]: {\n fontSize,\n height: controlHeight,\n padding: `${unit(buttonPaddingVertical)} ${unit(buttonPaddingHorizontal)}`,\n borderRadius,\n [`&${componentCls}-icon-only`]: {\n width: controlHeight,\n [iconCls]: {\n fontSize: buttonIconOnlyFontSize,\n },\n },\n },\n },\n // Shape - patch prefixCls again to override solid border radius style\n {\n [`${componentCls}${componentCls}-circle${prefixCls}`]: genCircleButtonStyle(token),\n },\n {\n [`${componentCls}${componentCls}-round${prefixCls}`]: genRoundButtonStyle(token),\n },\n ];\n};\nconst genSizeBaseButtonStyle = (token) => {\n const baseToken = mergeToken(token, {\n fontSize: token.contentFontSize,\n });\n return genButtonStyle(baseToken, token.componentCls);\n};\nconst genSizeSmallButtonStyle = (token) => {\n const smallToken = mergeToken(token, {\n controlHeight: token.controlHeightSM,\n fontSize: token.contentFontSizeSM,\n padding: token.paddingXS,\n buttonPaddingHorizontal: token.paddingInlineSM,\n buttonPaddingVertical: 0,\n borderRadius: token.borderRadiusSM,\n buttonIconOnlyFontSize: token.onlyIconSizeSM,\n });\n return genButtonStyle(smallToken, `${token.componentCls}-sm`);\n};\nconst genSizeLargeButtonStyle = (token) => {\n const largeToken = mergeToken(token, {\n controlHeight: token.controlHeightLG,\n fontSize: token.contentFontSizeLG,\n buttonPaddingHorizontal: token.paddingInlineLG,\n buttonPaddingVertical: 0,\n borderRadius: token.borderRadiusLG,\n buttonIconOnlyFontSize: token.onlyIconSizeLG,\n });\n return genButtonStyle(largeToken, `${token.componentCls}-lg`);\n};\nconst genBlockButtonStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: {\n [`&${componentCls}-block`]: {\n width: '100%',\n },\n },\n };\n};\n// ============================== Export ==============================\nexport default genStyleHooks('Button', (token) => {\n const buttonToken = prepareToken(token);\n return [\n // Shared\n genSharedButtonStyle(buttonToken),\n // Size\n genSizeBaseButtonStyle(buttonToken),\n genSizeSmallButtonStyle(buttonToken),\n genSizeLargeButtonStyle(buttonToken),\n // Block\n genBlockButtonStyle(buttonToken),\n // Color\n genColorButtonStyle(buttonToken),\n // https://github.com/ant-design/ant-design/issues/50969\n genCompatibleButtonStyle(buttonToken),\n // Button Group\n genGroupStyle(buttonToken),\n ];\n}, prepareComponentToken, {\n unitless: {\n fontWeight: true,\n contentLineHeight: true,\n contentLineHeightSM: true,\n contentLineHeightLG: true,\n },\n});\n","import { unit } from '@ant-design/cssinjs';\nexport function getArrowToken(token) {\n const { sizePopupArrow, borderRadiusXS, borderRadiusOuter } = token;\n const unitWidth = sizePopupArrow / 2;\n const ax = 0;\n const ay = unitWidth;\n const bx = (borderRadiusOuter * 1) / Math.sqrt(2);\n const by = unitWidth - borderRadiusOuter * (1 - 1 / Math.sqrt(2));\n const cx = unitWidth - borderRadiusXS * (1 / Math.sqrt(2));\n const cy = borderRadiusOuter * (Math.sqrt(2) - 1) + borderRadiusXS * (1 / Math.sqrt(2));\n const dx = 2 * unitWidth - cx;\n const dy = cy;\n const ex = 2 * unitWidth - bx;\n const ey = by;\n const fx = 2 * unitWidth - ax;\n const fy = ay;\n const shadowWidth = unitWidth * Math.sqrt(2) + borderRadiusOuter * (Math.sqrt(2) - 2);\n const polygonOffset = borderRadiusOuter * (Math.sqrt(2) - 1);\n const arrowPolygon = `polygon(${polygonOffset}px 100%, 50% ${polygonOffset}px, ${2 * unitWidth - polygonOffset}px 100%, ${polygonOffset}px 100%)`;\n const arrowPath = `path('M ${ax} ${ay} A ${borderRadiusOuter} ${borderRadiusOuter} 0 0 0 ${bx} ${by} L ${cx} ${cy} A ${borderRadiusXS} ${borderRadiusXS} 0 0 1 ${dx} ${dy} L ${ex} ${ey} A ${borderRadiusOuter} ${borderRadiusOuter} 0 0 0 ${fx} ${fy} Z')`;\n return {\n arrowShadowWidth: shadowWidth,\n arrowPath,\n arrowPolygon,\n };\n}\nexport const genRoundedArrow = (token, bgColor, boxShadow) => {\n const { sizePopupArrow, arrowPolygon, arrowPath, arrowShadowWidth, borderRadiusXS, calc } = token;\n return {\n pointerEvents: 'none',\n width: sizePopupArrow,\n height: sizePopupArrow,\n overflow: 'hidden',\n '&::before': {\n position: 'absolute',\n bottom: 0,\n insetInlineStart: 0,\n width: sizePopupArrow,\n height: calc(sizePopupArrow).div(2).equal(),\n background: bgColor,\n clipPath: {\n _multi_value_: true,\n value: [arrowPolygon, arrowPath],\n },\n content: '\"\"',\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: arrowShadowWidth,\n height: arrowShadowWidth,\n bottom: 0,\n insetInline: 0,\n margin: 'auto',\n borderRadius: {\n _skip_check_: true,\n value: `0 0 ${unit(borderRadiusXS)} 0`,\n },\n transform: 'translateY(50%) rotate(-135deg)',\n boxShadow,\n zIndex: 0,\n background: 'transparent',\n },\n };\n};\n","import { FastColor } from '@ant-design/fast-color';\nvar hueStep = 2; // 色相阶梯\nvar saturationStep = 0.16; // 饱和度阶梯,浅色部分\nvar saturationStep2 = 0.05; // 饱和度阶梯,深色部分\nvar brightnessStep1 = 0.05; // 亮度阶梯,浅色部分\nvar brightnessStep2 = 0.15; // 亮度阶梯,深色部分\nvar lightColorCount = 5; // 浅色数量,主色上\nvar darkColorCount = 4; // 深色数量,主色下\n\n// 暗色主题颜色映射关系表\nvar darkColorMap = [{\n index: 7,\n amount: 15\n}, {\n index: 6,\n amount: 25\n}, {\n index: 5,\n amount: 30\n}, {\n index: 5,\n amount: 45\n}, {\n index: 5,\n amount: 65\n}, {\n index: 5,\n amount: 85\n}, {\n index: 4,\n amount: 90\n}, {\n index: 3,\n amount: 95\n}, {\n index: 2,\n amount: 97\n}, {\n index: 1,\n amount: 98\n}];\nfunction getHue(hsv, i, light) {\n var hue;\n // 根据色相不同,色相转向不同\n if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n } else {\n hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n }\n if (hue < 0) {\n hue += 360;\n } else if (hue >= 360) {\n hue -= 360;\n }\n return hue;\n}\nfunction getSaturation(hsv, i, light) {\n // grey color don't change saturation\n if (hsv.h === 0 && hsv.s === 0) {\n return hsv.s;\n }\n var saturation;\n if (light) {\n saturation = hsv.s - saturationStep * i;\n } else if (i === darkColorCount) {\n saturation = hsv.s + saturationStep;\n } else {\n saturation = hsv.s + saturationStep2 * i;\n }\n // 边界值修正\n if (saturation > 1) {\n saturation = 1;\n }\n // 第一格的 s 限制在 0.06-0.1 之间\n if (light && i === lightColorCount && saturation > 0.1) {\n saturation = 0.1;\n }\n if (saturation < 0.06) {\n saturation = 0.06;\n }\n return Math.round(saturation * 100) / 100;\n}\nfunction getValue(hsv, i, light) {\n var value;\n if (light) {\n value = hsv.v + brightnessStep1 * i;\n } else {\n value = hsv.v - brightnessStep2 * i;\n }\n // Clamp value between 0 and 1\n value = Math.max(0, Math.min(1, value));\n return Math.round(value * 100) / 100;\n}\nexport default function generate(color) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var patterns = [];\n var pColor = new FastColor(color);\n var hsv = pColor.toHsv();\n for (var i = lightColorCount; i > 0; i -= 1) {\n var c = new FastColor({\n h: getHue(hsv, i, true),\n s: getSaturation(hsv, i, true),\n v: getValue(hsv, i, true)\n });\n patterns.push(c);\n }\n patterns.push(pColor);\n for (var _i = 1; _i <= darkColorCount; _i += 1) {\n var _c = new FastColor({\n h: getHue(hsv, _i),\n s: getSaturation(hsv, _i),\n v: getValue(hsv, _i)\n });\n patterns.push(_c);\n }\n\n // dark theme patterns\n if (opts.theme === 'dark') {\n return darkColorMap.map(function (_ref) {\n var index = _ref.index,\n amount = _ref.amount;\n return new FastColor(opts.backgroundColor || '#141414').mix(patterns[index], amount).toHexString();\n });\n }\n return patterns.map(function (c) {\n return c.toHexString();\n });\n}","// Generated by script. Do NOT modify!\n\nexport var presetPrimaryColors = {\n \"red\": \"#F5222D\",\n \"volcano\": \"#FA541C\",\n \"orange\": \"#FA8C16\",\n \"gold\": \"#FAAD14\",\n \"yellow\": \"#FADB14\",\n \"lime\": \"#A0D911\",\n \"green\": \"#52C41A\",\n \"cyan\": \"#13C2C2\",\n \"blue\": \"#1677FF\",\n \"geekblue\": \"#2F54EB\",\n \"purple\": \"#722ED1\",\n \"magenta\": \"#EB2F96\",\n \"grey\": \"#666666\"\n};\nexport var red = [\"#fff1f0\", \"#ffccc7\", \"#ffa39e\", \"#ff7875\", \"#ff4d4f\", \"#f5222d\", \"#cf1322\", \"#a8071a\", \"#820014\", \"#5c0011\"];\nred.primary = red[5];\nexport var volcano = [\"#fff2e8\", \"#ffd8bf\", \"#ffbb96\", \"#ff9c6e\", \"#ff7a45\", \"#fa541c\", \"#d4380d\", \"#ad2102\", \"#871400\", \"#610b00\"];\nvolcano.primary = volcano[5];\nexport var orange = [\"#fff7e6\", \"#ffe7ba\", \"#ffd591\", \"#ffc069\", \"#ffa940\", \"#fa8c16\", \"#d46b08\", \"#ad4e00\", \"#873800\", \"#612500\"];\norange.primary = orange[5];\nexport var gold = [\"#fffbe6\", \"#fff1b8\", \"#ffe58f\", \"#ffd666\", \"#ffc53d\", \"#faad14\", \"#d48806\", \"#ad6800\", \"#874d00\", \"#613400\"];\ngold.primary = gold[5];\nexport var yellow = [\"#feffe6\", \"#ffffb8\", \"#fffb8f\", \"#fff566\", \"#ffec3d\", \"#fadb14\", \"#d4b106\", \"#ad8b00\", \"#876800\", \"#614700\"];\nyellow.primary = yellow[5];\nexport var lime = [\"#fcffe6\", \"#f4ffb8\", \"#eaff8f\", \"#d3f261\", \"#bae637\", \"#a0d911\", \"#7cb305\", \"#5b8c00\", \"#3f6600\", \"#254000\"];\nlime.primary = lime[5];\nexport var green = [\"#f6ffed\", \"#d9f7be\", \"#b7eb8f\", \"#95de64\", \"#73d13d\", \"#52c41a\", \"#389e0d\", \"#237804\", \"#135200\", \"#092b00\"];\ngreen.primary = green[5];\nexport var cyan = [\"#e6fffb\", \"#b5f5ec\", \"#87e8de\", \"#5cdbd3\", \"#36cfc9\", \"#13c2c2\", \"#08979c\", \"#006d75\", \"#00474f\", \"#002329\"];\ncyan.primary = cyan[5];\nexport var blue = [\"#e6f4ff\", \"#bae0ff\", \"#91caff\", \"#69b1ff\", \"#4096ff\", \"#1677ff\", \"#0958d9\", \"#003eb3\", \"#002c8c\", \"#001d66\"];\nblue.primary = blue[5];\nexport var geekblue = [\"#f0f5ff\", \"#d6e4ff\", \"#adc6ff\", \"#85a5ff\", \"#597ef7\", \"#2f54eb\", \"#1d39c4\", \"#10239e\", \"#061178\", \"#030852\"];\ngeekblue.primary = geekblue[5];\nexport var purple = [\"#f9f0ff\", \"#efdbff\", \"#d3adf7\", \"#b37feb\", \"#9254de\", \"#722ed1\", \"#531dab\", \"#391085\", \"#22075e\", \"#120338\"];\npurple.primary = purple[5];\nexport var magenta = [\"#fff0f6\", \"#ffd6e7\", \"#ffadd2\", \"#ff85c0\", \"#f759ab\", \"#eb2f96\", \"#c41d7f\", \"#9e1068\", \"#780650\", \"#520339\"];\nmagenta.primary = magenta[5];\nexport var grey = [\"#a6a6a6\", \"#999999\", \"#8c8c8c\", \"#808080\", \"#737373\", \"#666666\", \"#404040\", \"#1a1a1a\", \"#000000\", \"#000000\"];\ngrey.primary = grey[5];\nexport var gray = grey;\nexport var presetPalettes = {\n red: red,\n volcano: volcano,\n orange: orange,\n gold: gold,\n yellow: yellow,\n lime: lime,\n green: green,\n cyan: cyan,\n blue: blue,\n geekblue: geekblue,\n purple: purple,\n magenta: magenta,\n grey: grey\n};\nexport var redDark = [\"#2a1215\", \"#431418\", \"#58181c\", \"#791a1f\", \"#a61d24\", \"#d32029\", \"#e84749\", \"#f37370\", \"#f89f9a\", \"#fac8c3\"];\nredDark.primary = redDark[5];\nexport var volcanoDark = [\"#2b1611\", \"#441d12\", \"#592716\", \"#7c3118\", \"#aa3e19\", \"#d84a1b\", \"#e87040\", \"#f3956a\", \"#f8b692\", \"#fad4bc\"];\nvolcanoDark.primary = volcanoDark[5];\nexport var orangeDark = [\"#2b1d11\", \"#442a11\", \"#593815\", \"#7c4a15\", \"#aa6215\", \"#d87a16\", \"#e89a3c\", \"#f3b765\", \"#f8cf8d\", \"#fae3b7\"];\norangeDark.primary = orangeDark[5];\nexport var goldDark = [\"#2b2111\", \"#443111\", \"#594214\", \"#7c5914\", \"#aa7714\", \"#d89614\", \"#e8b339\", \"#f3cc62\", \"#f8df8b\", \"#faedb5\"];\ngoldDark.primary = goldDark[5];\nexport var yellowDark = [\"#2b2611\", \"#443b11\", \"#595014\", \"#7c6e14\", \"#aa9514\", \"#d8bd14\", \"#e8d639\", \"#f3ea62\", \"#f8f48b\", \"#fafab5\"];\nyellowDark.primary = yellowDark[5];\nexport var limeDark = [\"#1f2611\", \"#2e3c10\", \"#3e4f13\", \"#536d13\", \"#6f9412\", \"#8bbb11\", \"#a9d134\", \"#c9e75d\", \"#e4f88b\", \"#f0fab5\"];\nlimeDark.primary = limeDark[5];\nexport var greenDark = [\"#162312\", \"#1d3712\", \"#274916\", \"#306317\", \"#3c8618\", \"#49aa19\", \"#6abe39\", \"#8fd460\", \"#b2e58b\", \"#d5f2bb\"];\ngreenDark.primary = greenDark[5];\nexport var cyanDark = [\"#112123\", \"#113536\", \"#144848\", \"#146262\", \"#138585\", \"#13a8a8\", \"#33bcb7\", \"#58d1c9\", \"#84e2d8\", \"#b2f1e8\"];\ncyanDark.primary = cyanDark[5];\nexport var blueDark = [\"#111a2c\", \"#112545\", \"#15325b\", \"#15417e\", \"#1554ad\", \"#1668dc\", \"#3c89e8\", \"#65a9f3\", \"#8dc5f8\", \"#b7dcfa\"];\nblueDark.primary = blueDark[5];\nexport var geekblueDark = [\"#131629\", \"#161d40\", \"#1c2755\", \"#203175\", \"#263ea0\", \"#2b4acb\", \"#5273e0\", \"#7f9ef3\", \"#a8c1f8\", \"#d2e0fa\"];\ngeekblueDark.primary = geekblueDark[5];\nexport var purpleDark = [\"#1a1325\", \"#24163a\", \"#301c4d\", \"#3e2069\", \"#51258f\", \"#642ab5\", \"#854eca\", \"#ab7ae0\", \"#cda8f0\", \"#ebd7fa\"];\npurpleDark.primary = purpleDark[5];\nexport var magentaDark = [\"#291321\", \"#40162f\", \"#551c3b\", \"#75204f\", \"#a02669\", \"#cb2b83\", \"#e0529c\", \"#f37fb7\", \"#f8a8cc\", \"#fad2e3\"];\nmagentaDark.primary = magentaDark[5];\nexport var greyDark = [\"#151515\", \"#1f1f1f\", \"#2d2d2d\", \"#393939\", \"#494949\", \"#5a5a5a\", \"#6a6a6a\", \"#7b7b7b\", \"#888888\", \"#969696\"];\ngreyDark.primary = greyDark[5];\nexport var presetDarkPalettes = {\n red: redDark,\n volcano: volcanoDark,\n orange: orangeDark,\n gold: goldDark,\n yellow: yellowDark,\n lime: limeDark,\n green: greenDark,\n cyan: cyanDark,\n blue: blueDark,\n geekblue: geekblueDark,\n purple: purpleDark,\n magenta: magentaDark,\n grey: greyDark\n};","import { FastColor } from '@ant-design/fast-color';\nimport { initComponentToken } from '../../input/style/token';\nimport { getArrowToken } from '../../style/roundedArrow';\nexport const initPickerPanelToken = (token) => {\n const { componentCls, controlHeightLG, paddingXXS, padding } = token;\n return {\n pickerCellCls: `${componentCls}-cell`,\n pickerCellInnerCls: `${componentCls}-cell-inner`,\n pickerYearMonthCellWidth: token.calc(controlHeightLG).mul(1.5).equal(),\n pickerQuarterPanelContentHeight: token.calc(controlHeightLG).mul(1.4).equal(),\n pickerCellPaddingVertical: token.calc(paddingXXS).add(token.calc(paddingXXS).div(2)).equal(),\n pickerCellBorderGap: 2, // Magic for gap between cells\n pickerControlIconSize: 7,\n pickerControlIconMargin: 4,\n pickerControlIconBorderWidth: 1.5,\n pickerDatePanelPaddingHorizontal: token\n .calc(padding)\n .add(token.calc(paddingXXS).div(2))\n .equal(), // 18 in normal\n };\n};\nexport const initPanelComponentToken = (token) => {\n const { colorBgContainerDisabled, controlHeight, controlHeightSM, controlHeightLG, paddingXXS, lineWidth, } = token;\n // Item height default use `controlHeight - 2 * paddingXXS`,\n // but some case `paddingXXS=0`.\n // Let's fallback it.\n const dblPaddingXXS = paddingXXS * 2;\n const dblLineWidth = lineWidth * 2;\n const multipleItemHeight = Math.min(controlHeight - dblPaddingXXS, controlHeight - dblLineWidth);\n const multipleItemHeightSM = Math.min(controlHeightSM - dblPaddingXXS, controlHeightSM - dblLineWidth);\n const multipleItemHeightLG = Math.min(controlHeightLG - dblPaddingXXS, controlHeightLG - dblLineWidth);\n // FIXED_ITEM_MARGIN is a hardcode calculation since calc not support rounding\n const INTERNAL_FIXED_ITEM_MARGIN = Math.floor(paddingXXS / 2);\n const filledToken = {\n INTERNAL_FIXED_ITEM_MARGIN,\n cellHoverBg: token.controlItemBgHover,\n cellActiveWithRangeBg: token.controlItemBgActive,\n cellHoverWithRangeBg: new FastColor(token.colorPrimary).lighten(35).toHexString(),\n cellRangeBorderColor: new FastColor(token.colorPrimary).lighten(20).toHexString(),\n cellBgDisabled: colorBgContainerDisabled,\n timeColumnWidth: controlHeightLG * 1.4,\n timeColumnHeight: 28 * 8,\n timeCellHeight: 28,\n cellWidth: controlHeightSM * 1.5,\n cellHeight: controlHeightSM,\n textHeight: controlHeightLG,\n withoutTimeCellHeight: controlHeightLG * 1.65,\n multipleItemBg: token.colorFillSecondary,\n multipleItemBorderColor: 'transparent',\n multipleItemHeight,\n multipleItemHeightSM,\n multipleItemHeightLG,\n multipleSelectorBgDisabled: colorBgContainerDisabled,\n multipleItemColorDisabled: token.colorTextDisabled,\n multipleItemBorderColorDisabled: 'transparent',\n };\n return filledToken;\n};\nexport const prepareComponentToken = (token) => (Object.assign(Object.assign(Object.assign(Object.assign({}, initComponentToken(token)), initPanelComponentToken(token)), getArrowToken(token)), { presetsWidth: 120, presetsMaxWidth: 200, zIndexPopup: token.zIndexPopupBase + 50 }));\n","const genSpaceCompactStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: {\n '&-block': {\n display: 'flex',\n width: '100%',\n },\n '&-vertical': {\n flexDirection: 'column',\n },\n },\n };\n};\n// ============================== Export ==============================\nexport default genSpaceCompactStyle;\n","import { genStyleHooks, mergeToken } from '../../theme/internal';\nimport genSpaceCompactStyle from './compact';\nconst genSpaceStyle = (token) => {\n const { componentCls, antCls } = token;\n return {\n [componentCls]: {\n display: 'inline-flex',\n '&-rtl': {\n direction: 'rtl',\n },\n '&-vertical': {\n flexDirection: 'column',\n },\n '&-align': {\n flexDirection: 'column',\n '&-center': {\n alignItems: 'center',\n },\n '&-start': {\n alignItems: 'flex-start',\n },\n '&-end': {\n alignItems: 'flex-end',\n },\n '&-baseline': {\n alignItems: 'baseline',\n },\n },\n [`${componentCls}-item:empty`]: {\n display: 'none',\n },\n // https://github.com/ant-design/ant-design/issues/47875\n [`${componentCls}-item > ${antCls}-badge-not-a-wrapper:only-child`]: {\n display: 'block',\n },\n },\n };\n};\nconst genSpaceGapStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: {\n '&-gap-row-small': {\n rowGap: token.spaceGapSmallSize,\n },\n '&-gap-row-middle': {\n rowGap: token.spaceGapMiddleSize,\n },\n '&-gap-row-large': {\n rowGap: token.spaceGapLargeSize,\n },\n '&-gap-col-small': {\n columnGap: token.spaceGapSmallSize,\n },\n '&-gap-col-middle': {\n columnGap: token.spaceGapMiddleSize,\n },\n '&-gap-col-large': {\n columnGap: token.spaceGapLargeSize,\n },\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = () => ({});\nexport default genStyleHooks('Space', (token) => {\n const spaceToken = mergeToken(token, {\n spaceGapSmallSize: token.paddingXS,\n spaceGapMiddleSize: token.padding,\n spaceGapLargeSize: token.paddingLG,\n });\n return [\n genSpaceStyle(spaceToken),\n genSpaceGapStyle(spaceToken),\n genSpaceCompactStyle(spaceToken),\n ];\n}, () => ({}), {\n // Space component don't apply extra font style\n // https://github.com/ant-design/ant-design/issues/40315\n resetStyle: false,\n});\n","export var commonLocale = {\n yearFormat: 'YYYY',\n dayFormat: 'D',\n cellMeridiemFormat: 'A',\n monthBeforeYear: true\n};","module.exports = __WEBPACK_EXTERNAL_MODULE__6003__;","import { createContext } from 'react';\nconst LocaleContext = createContext(undefined);\nexport default LocaleContext;\n","var locale = {\n // Options\n items_per_page: '/ page',\n jump_to: 'Go to',\n jump_to_confirm: 'confirm',\n page: 'Page',\n // Pagination\n prev_page: 'Previous Page',\n next_page: 'Next Page',\n prev_5: 'Previous 5 Pages',\n next_5: 'Next 5 Pages',\n prev_3: 'Previous 3 Pages',\n next_3: 'Next 3 Pages',\n page_size: 'Page Size'\n};\nexport default locale;","// Compatible for babel-plugin-import\n/* istanbul ignore next */\nexport default {};\n","import { Keyframes, unit } from '@ant-design/cssinjs';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst skeletonClsLoading = new Keyframes(`ant-skeleton-loading`, {\n '0%': {\n backgroundPosition: '100% 50%',\n },\n '100%': {\n backgroundPosition: '0 50%',\n },\n});\nconst genSkeletonElementCommonSize = (size) => ({\n height: size,\n lineHeight: unit(size),\n});\nconst genSkeletonElementAvatarSize = (size) => (Object.assign({ width: size }, genSkeletonElementCommonSize(size)));\nconst genSkeletonColor = (token) => ({\n background: token.skeletonLoadingBackground,\n backgroundSize: '400% 100%',\n animationName: skeletonClsLoading,\n animationDuration: token.skeletonLoadingMotionDuration,\n animationTimingFunction: 'ease',\n animationIterationCount: 'infinite',\n});\nconst genSkeletonElementInputSize = (size, calc) => (Object.assign({ width: calc(size).mul(5).equal(), minWidth: calc(size).mul(5).equal() }, genSkeletonElementCommonSize(size)));\nconst genSkeletonElementAvatar = (token) => {\n const { skeletonAvatarCls, gradientFromColor, controlHeight, controlHeightLG, controlHeightSM } = token;\n return {\n [skeletonAvatarCls]: Object.assign({ display: 'inline-block', verticalAlign: 'top', background: gradientFromColor }, genSkeletonElementAvatarSize(controlHeight)),\n [`${skeletonAvatarCls}${skeletonAvatarCls}-circle`]: {\n borderRadius: '50%',\n },\n [`${skeletonAvatarCls}${skeletonAvatarCls}-lg`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightLG)),\n [`${skeletonAvatarCls}${skeletonAvatarCls}-sm`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightSM)),\n };\n};\nconst genSkeletonElementInput = (token) => {\n const { controlHeight, borderRadiusSM, skeletonInputCls, controlHeightLG, controlHeightSM, gradientFromColor, calc, } = token;\n return {\n [skeletonInputCls]: Object.assign({ display: 'inline-block', verticalAlign: 'top', background: gradientFromColor, borderRadius: borderRadiusSM }, genSkeletonElementInputSize(controlHeight, calc)),\n [`${skeletonInputCls}-lg`]: Object.assign({}, genSkeletonElementInputSize(controlHeightLG, calc)),\n [`${skeletonInputCls}-sm`]: Object.assign({}, genSkeletonElementInputSize(controlHeightSM, calc)),\n };\n};\nconst genSkeletonElementImageSize = (size) => (Object.assign({ width: size }, genSkeletonElementCommonSize(size)));\nconst genSkeletonElementImage = (token) => {\n const { skeletonImageCls, imageSizeBase, gradientFromColor, borderRadiusSM, calc } = token;\n return {\n [skeletonImageCls]: Object.assign(Object.assign({ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', verticalAlign: 'middle', background: gradientFromColor, borderRadius: borderRadiusSM }, genSkeletonElementImageSize(calc(imageSizeBase).mul(2).equal())), { [`${skeletonImageCls}-path`]: {\n fill: '#bfbfbf',\n }, [`${skeletonImageCls}-svg`]: Object.assign(Object.assign({}, genSkeletonElementImageSize(imageSizeBase)), { maxWidth: calc(imageSizeBase).mul(4).equal(), maxHeight: calc(imageSizeBase).mul(4).equal() }), [`${skeletonImageCls}-svg${skeletonImageCls}-svg-circle`]: {\n borderRadius: '50%',\n } }),\n [`${skeletonImageCls}${skeletonImageCls}-circle`]: {\n borderRadius: '50%',\n },\n };\n};\nconst genSkeletonElementButtonShape = (token, size, buttonCls) => {\n const { skeletonButtonCls } = token;\n return {\n [`${buttonCls}${skeletonButtonCls}-circle`]: {\n width: size,\n minWidth: size,\n borderRadius: '50%',\n },\n [`${buttonCls}${skeletonButtonCls}-round`]: {\n borderRadius: size,\n },\n };\n};\nconst genSkeletonElementButtonSize = (size, calc) => (Object.assign({ width: calc(size).mul(2).equal(), minWidth: calc(size).mul(2).equal() }, genSkeletonElementCommonSize(size)));\nconst genSkeletonElementButton = (token) => {\n const { borderRadiusSM, skeletonButtonCls, controlHeight, controlHeightLG, controlHeightSM, gradientFromColor, calc, } = token;\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ [skeletonButtonCls]: Object.assign({ display: 'inline-block', verticalAlign: 'top', background: gradientFromColor, borderRadius: borderRadiusSM, width: calc(controlHeight).mul(2).equal(), minWidth: calc(controlHeight).mul(2).equal() }, genSkeletonElementButtonSize(controlHeight, calc)) }, genSkeletonElementButtonShape(token, controlHeight, skeletonButtonCls)), { [`${skeletonButtonCls}-lg`]: Object.assign({}, genSkeletonElementButtonSize(controlHeightLG, calc)) }), genSkeletonElementButtonShape(token, controlHeightLG, `${skeletonButtonCls}-lg`)), { [`${skeletonButtonCls}-sm`]: Object.assign({}, genSkeletonElementButtonSize(controlHeightSM, calc)) }), genSkeletonElementButtonShape(token, controlHeightSM, `${skeletonButtonCls}-sm`));\n};\n// =============================== Base ===============================\nconst genBaseStyle = (token) => {\n const { componentCls, skeletonAvatarCls, skeletonTitleCls, skeletonParagraphCls, skeletonButtonCls, skeletonInputCls, skeletonImageCls, controlHeight, controlHeightLG, controlHeightSM, gradientFromColor, padding, marginSM, borderRadius, titleHeight, blockRadius, paragraphLiHeight, controlHeightXS, paragraphMarginTop, } = token;\n return {\n [componentCls]: {\n display: 'table',\n width: '100%',\n [`${componentCls}-header`]: {\n display: 'table-cell',\n paddingInlineEnd: padding,\n verticalAlign: 'top',\n // Avatar\n [skeletonAvatarCls]: Object.assign({ display: 'inline-block', verticalAlign: 'top', background: gradientFromColor }, genSkeletonElementAvatarSize(controlHeight)),\n [`${skeletonAvatarCls}-circle`]: {\n borderRadius: '50%',\n },\n [`${skeletonAvatarCls}-lg`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightLG)),\n [`${skeletonAvatarCls}-sm`]: Object.assign({}, genSkeletonElementAvatarSize(controlHeightSM)),\n },\n [`${componentCls}-content`]: {\n display: 'table-cell',\n width: '100%',\n verticalAlign: 'top',\n // Title\n [skeletonTitleCls]: {\n width: '100%',\n height: titleHeight,\n background: gradientFromColor,\n borderRadius: blockRadius,\n [`+ ${skeletonParagraphCls}`]: {\n marginBlockStart: controlHeightSM,\n },\n },\n // paragraph\n [skeletonParagraphCls]: {\n padding: 0,\n '> li': {\n width: '100%',\n height: paragraphLiHeight,\n listStyle: 'none',\n background: gradientFromColor,\n borderRadius: blockRadius,\n '+ li': {\n marginBlockStart: controlHeightXS,\n },\n },\n },\n [`${skeletonParagraphCls}> li:last-child:not(:first-child):not(:nth-child(2))`]: {\n width: '61%',\n },\n },\n [`&-round ${componentCls}-content`]: {\n [`${skeletonTitleCls}, ${skeletonParagraphCls} > li`]: {\n borderRadius,\n },\n },\n },\n [`${componentCls}-with-avatar ${componentCls}-content`]: {\n // Title\n [skeletonTitleCls]: {\n marginBlockStart: marginSM,\n [`+ ${skeletonParagraphCls}`]: {\n marginBlockStart: paragraphMarginTop,\n },\n },\n },\n // Skeleton element\n [`${componentCls}${componentCls}-element`]: Object.assign(Object.assign(Object.assign(Object.assign({ display: 'inline-block', width: 'auto' }, genSkeletonElementButton(token)), genSkeletonElementAvatar(token)), genSkeletonElementInput(token)), genSkeletonElementImage(token)),\n // Skeleton Block Button, Input\n [`${componentCls}${componentCls}-block`]: {\n width: '100%',\n [skeletonButtonCls]: {\n width: '100%',\n },\n [skeletonInputCls]: {\n width: '100%',\n },\n },\n // With active animation\n [`${componentCls}${componentCls}-active`]: {\n [`\n ${skeletonTitleCls},\n ${skeletonParagraphCls} > li,\n ${skeletonAvatarCls},\n ${skeletonButtonCls},\n ${skeletonInputCls},\n ${skeletonImageCls}\n `]: Object.assign({}, genSkeletonColor(token)),\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => {\n const { colorFillContent, colorFill } = token;\n const gradientFromColor = colorFillContent;\n const gradientToColor = colorFill;\n return {\n color: gradientFromColor,\n colorGradientEnd: gradientToColor,\n gradientFromColor,\n gradientToColor,\n titleHeight: token.controlHeight / 2,\n blockRadius: token.borderRadiusSM,\n paragraphMarginTop: token.marginLG + token.marginXXS,\n paragraphLiHeight: token.controlHeight / 2,\n };\n};\nexport default genStyleHooks('Skeleton', (token) => {\n const { componentCls, calc } = token;\n const skeletonToken = mergeToken(token, {\n skeletonAvatarCls: `${componentCls}-avatar`,\n skeletonTitleCls: `${componentCls}-title`,\n skeletonParagraphCls: `${componentCls}-paragraph`,\n skeletonButtonCls: `${componentCls}-button`,\n skeletonInputCls: `${componentCls}-input`,\n skeletonImageCls: `${componentCls}-image`,\n imageSizeBase: calc(token.controlHeight).mul(1.5).equal(),\n borderRadius: 100, // Large number to make capsule shape\n skeletonLoadingBackground: `linear-gradient(90deg, ${token.gradientFromColor} 25%, ${token.gradientToColor} 37%, ${token.gradientFromColor} 63%)`,\n skeletonLoadingMotionDuration: '1.4s',\n });\n return genBaseStyle(skeletonToken);\n}, prepareComponentToken, {\n deprecatedTokens: [\n ['color', 'gradientFromColor'],\n ['colorGradientEnd', 'gradientToColor'],\n ],\n});\n","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar REACT_ELEMENT_TYPE_18 = Symbol.for('react.element');\nvar REACT_ELEMENT_TYPE_19 = Symbol.for('react.transitional.element');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\n\n/**\n * Compatible with React 18 or 19 to check if node is a Fragment.\n */\nexport default function isFragment(object) {\n return (\n // Base object type\n object && _typeof(object) === 'object' && (\n // React Element type\n object.$$typeof === REACT_ELEMENT_TYPE_18 || object.$$typeof === REACT_ELEMENT_TYPE_19) &&\n // React Fragment type\n object.type === REACT_FRAGMENT_TYPE\n );\n}","export default function get(entity, path) {\n var current = entity;\n for (var i = 0; i < path.length; i += 1) {\n if (current === null || current === undefined) {\n return undefined;\n }\n current = current[path[i]];\n }\n return current;\n}","import { useStyleRegister } from '@ant-design/cssinjs';\nimport { genIconStyle } from '../../style';\nimport useToken from '../useToken';\nconst useResetIconStyle = (iconPrefixCls, csp) => {\n const [theme, token] = useToken();\n // Generate style for icons\n return useStyleRegister({\n theme,\n token,\n hashId: '',\n path: ['ant-design-icons', iconPrefixCls],\n nonce: () => csp === null || csp === void 0 ? void 0 : csp.nonce,\n layer: {\n name: 'antd',\n },\n }, () => genIconStyle(iconPrefixCls));\n};\nexport default useResetIconStyle;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","import { resetComponent } from '../../style';\nimport { initZoomMotion } from '../../style/motion';\nimport getArrowStyle, { getArrowOffsetToken } from '../../style/placementArrow';\nimport { getArrowToken } from '../../style/roundedArrow';\nimport { genStyleHooks, mergeToken, PresetColors } from '../../theme/internal';\nconst genBaseStyle = (token) => {\n const { componentCls, popoverColor, titleMinWidth, fontWeightStrong, innerPadding, boxShadowSecondary, colorTextHeading, borderRadiusLG, zIndexPopup, titleMarginBottom, colorBgElevated, popoverBg, titleBorderBottom, innerContentPadding, titlePadding, } = token;\n return [\n {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'absolute', top: 0, \n // use `left` to fix https://github.com/ant-design/ant-design/issues/39195\n left: {\n _skip_check_: true,\n value: 0,\n }, zIndex: zIndexPopup, fontWeight: 'normal', whiteSpace: 'normal', textAlign: 'start', cursor: 'auto', userSelect: 'text', \n // When use `autoArrow`, origin will follow the arrow position\n '--valid-offset-x': 'var(--arrow-offset-horizontal, var(--arrow-x))', transformOrigin: [`var(--valid-offset-x, 50%)`, `var(--arrow-y, 50%)`].join(' '), '--antd-arrow-background-color': colorBgElevated, width: 'max-content', maxWidth: '100vw', '&-rtl': {\n direction: 'rtl',\n }, '&-hidden': {\n display: 'none',\n }, [`${componentCls}-content`]: {\n position: 'relative',\n }, [`${componentCls}-inner`]: {\n backgroundColor: popoverBg,\n backgroundClip: 'padding-box',\n borderRadius: borderRadiusLG,\n boxShadow: boxShadowSecondary,\n padding: innerPadding,\n }, [`${componentCls}-title`]: {\n minWidth: titleMinWidth,\n marginBottom: titleMarginBottom,\n color: colorTextHeading,\n fontWeight: fontWeightStrong,\n borderBottom: titleBorderBottom,\n padding: titlePadding,\n }, [`${componentCls}-inner-content`]: {\n color: popoverColor,\n padding: innerContentPadding,\n } }),\n },\n // Arrow Style\n getArrowStyle(token, 'var(--antd-arrow-background-color)'),\n // Pure Render\n {\n [`${componentCls}-pure`]: {\n position: 'relative',\n maxWidth: 'none',\n margin: token.sizePopupArrow,\n display: 'inline-block',\n [`${componentCls}-content`]: {\n display: 'inline-block',\n },\n },\n },\n ];\n};\nconst genColorStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: PresetColors.map((colorKey) => {\n const lightColor = token[`${colorKey}6`];\n return {\n [`&${componentCls}-${colorKey}`]: {\n '--antd-arrow-background-color': lightColor,\n [`${componentCls}-inner`]: {\n backgroundColor: lightColor,\n },\n [`${componentCls}-arrow`]: {\n background: 'transparent',\n },\n },\n };\n }),\n };\n};\nexport const prepareComponentToken = (token) => {\n const { lineWidth, controlHeight, fontHeight, padding, wireframe, zIndexPopupBase, borderRadiusLG, marginXS, lineType, colorSplit, paddingSM, } = token;\n const titlePaddingBlockDist = controlHeight - fontHeight;\n const popoverTitlePaddingBlockTop = titlePaddingBlockDist / 2;\n const popoverTitlePaddingBlockBottom = titlePaddingBlockDist / 2 - lineWidth;\n const popoverPaddingHorizontal = padding;\n return Object.assign(Object.assign(Object.assign({ titleMinWidth: 177, zIndexPopup: zIndexPopupBase + 30 }, getArrowToken(token)), getArrowOffsetToken({\n contentRadius: borderRadiusLG,\n limitVerticalRadius: true,\n })), { \n // internal\n innerPadding: wireframe ? 0 : 12, titleMarginBottom: wireframe ? 0 : marginXS, titlePadding: wireframe\n ? `${popoverTitlePaddingBlockTop}px ${popoverPaddingHorizontal}px ${popoverTitlePaddingBlockBottom}px`\n : 0, titleBorderBottom: wireframe ? `${lineWidth}px ${lineType} ${colorSplit}` : 'none', innerContentPadding: wireframe ? `${paddingSM}px ${popoverPaddingHorizontal}px` : 0 });\n};\nexport default genStyleHooks('Popover', (token) => {\n const { colorBgElevated, colorText } = token;\n const popoverToken = mergeToken(token, {\n popoverBg: colorBgElevated,\n popoverColor: colorText,\n });\n return [\n genBaseStyle(popoverToken),\n genColorStyle(popoverToken),\n initZoomMotion(popoverToken, 'zoom-big'),\n ];\n}, prepareComponentToken, {\n resetStyle: false,\n deprecatedTokens: [\n ['width', 'titleMinWidth'],\n ['minWidth', 'titleMinWidth'],\n ],\n});\n","import { unit } from '@ant-design/cssinjs';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Styles ==============================\nconst genBaseStyle = (token) => {\n const { componentCls, lineHeightHeading3, iconCls, padding, paddingXL, paddingXS, paddingLG, marginXS, lineHeight, } = token;\n return {\n // Result\n [componentCls]: {\n padding: `${unit(token.calc(paddingLG).mul(2).equal())} ${unit(paddingXL)}`,\n // RTL\n '&-rtl': {\n direction: 'rtl',\n },\n },\n // Exception Status image\n [`${componentCls} ${componentCls}-image`]: {\n width: token.imageWidth,\n height: token.imageHeight,\n margin: 'auto',\n },\n [`${componentCls} ${componentCls}-icon`]: {\n marginBottom: paddingLG,\n textAlign: 'center',\n [`& > ${iconCls}`]: {\n fontSize: token.iconFontSize,\n },\n },\n [`${componentCls} ${componentCls}-title`]: {\n color: token.colorTextHeading,\n fontSize: token.titleFontSize,\n lineHeight: lineHeightHeading3,\n marginBlock: marginXS,\n textAlign: 'center',\n },\n [`${componentCls} ${componentCls}-subtitle`]: {\n color: token.colorTextDescription,\n fontSize: token.subtitleFontSize,\n lineHeight,\n textAlign: 'center',\n },\n [`${componentCls} ${componentCls}-content`]: {\n marginTop: paddingLG,\n padding: `${unit(paddingLG)} ${unit(token.calc(padding).mul(2.5).equal())}`,\n backgroundColor: token.colorFillAlter,\n },\n [`${componentCls} ${componentCls}-extra`]: {\n margin: token.extraMargin,\n textAlign: 'center',\n '& > *': {\n marginInlineEnd: paddingXS,\n '&:last-child': {\n marginInlineEnd: 0,\n },\n },\n },\n };\n};\nconst genStatusIconStyle = (token) => {\n const { componentCls, iconCls } = token;\n return {\n [`${componentCls}-success ${componentCls}-icon > ${iconCls}`]: {\n color: token.resultSuccessIconColor,\n },\n [`${componentCls}-error ${componentCls}-icon > ${iconCls}`]: {\n color: token.resultErrorIconColor,\n },\n [`${componentCls}-info ${componentCls}-icon > ${iconCls}`]: {\n color: token.resultInfoIconColor,\n },\n [`${componentCls}-warning ${componentCls}-icon > ${iconCls}`]: {\n color: token.resultWarningIconColor,\n },\n };\n};\nconst genResultStyle = (token) => [\n genBaseStyle(token),\n genStatusIconStyle(token),\n];\nconst getStyle = (token) => genResultStyle(token);\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => ({\n titleFontSize: token.fontSizeHeading3,\n subtitleFontSize: token.fontSize,\n iconFontSize: token.fontSizeHeading3 * 3,\n extraMargin: `${token.paddingLG}px 0 0 0`,\n});\nexport default genStyleHooks('Result', (token) => {\n const resultInfoIconColor = token.colorInfo;\n const resultErrorIconColor = token.colorError;\n const resultSuccessIconColor = token.colorSuccess;\n const resultWarningIconColor = token.colorWarning;\n const resultToken = mergeToken(token, {\n resultInfoIconColor,\n resultErrorIconColor,\n resultSuccessIconColor,\n resultWarningIconColor,\n imageWidth: 250,\n imageHeight: 295,\n });\n return [getStyle(resultToken)];\n}, prepareComponentToken);\n","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nexport function isDOM(node) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Element\n // Since XULElement is also subclass of Element, we only need HTMLElement and SVGElement\n return node instanceof HTMLElement || node instanceof SVGElement;\n}\n\n/**\n * Retrieves a DOM node via a ref, and does not invoke `findDOMNode`.\n */\nexport function getDOM(node) {\n if (node && _typeof(node) === 'object' && isDOM(node.nativeElement)) {\n return node.nativeElement;\n }\n if (isDOM(node)) {\n return node;\n }\n return null;\n}\n\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\nexport default function findDOMNode(node) {\n var domNode = getDOM(node);\n if (domNode) {\n return domNode;\n }\n if (node instanceof React.Component) {\n var _ReactDOM$findDOMNode;\n return (_ReactDOM$findDOMNode = ReactDOM.findDOMNode) === null || _ReactDOM$findDOMNode === void 0 ? void 0 : _ReactDOM$findDOMNode.call(ReactDOM, node);\n }\n return null;\n}","export const PresetColors = [\n 'blue',\n 'purple',\n 'cyan',\n 'green',\n 'magenta',\n 'pink',\n 'red',\n 'orange',\n 'yellow',\n 'volcano',\n 'geekblue',\n 'lime',\n 'gold',\n];\n","import { unit } from '@ant-design/cssinjs';\nimport { getMediaSize } from '../../grid/style';\nimport { genFocusStyle, resetComponent } from '../../style';\nimport { initFadeMotion, initZoomMotion } from '../../style/motion';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nfunction box(position) {\n return {\n position,\n inset: 0,\n };\n}\nexport const genModalMaskStyle = (token) => {\n const { componentCls, antCls } = token;\n return [\n {\n [`${componentCls}-root`]: {\n [`${componentCls}${antCls}-zoom-enter, ${componentCls}${antCls}-zoom-appear`]: {\n // reset scale avoid mousePosition bug\n transform: 'none',\n opacity: 0,\n animationDuration: token.motionDurationSlow,\n // https://github.com/ant-design/ant-design/issues/11777\n userSelect: 'none',\n },\n // https://github.com/ant-design/ant-design/issues/37329\n // https://github.com/ant-design/ant-design/issues/40272\n [`${componentCls}${antCls}-zoom-leave ${componentCls}-content`]: {\n pointerEvents: 'none',\n },\n [`${componentCls}-mask`]: Object.assign(Object.assign({}, box('fixed')), { zIndex: token.zIndexPopupBase, height: '100%', backgroundColor: token.colorBgMask, pointerEvents: 'none', [`${componentCls}-hidden`]: {\n display: 'none',\n } }),\n [`${componentCls}-wrap`]: Object.assign(Object.assign({}, box('fixed')), { zIndex: token.zIndexPopupBase, overflow: 'auto', outline: 0, WebkitOverflowScrolling: 'touch' }),\n },\n },\n { [`${componentCls}-root`]: initFadeMotion(token) },\n ];\n};\nconst genModalStyle = (token) => {\n const { componentCls } = token;\n return [\n // ======================== Root =========================\n {\n [`${componentCls}-root`]: {\n [`${componentCls}-wrap-rtl`]: {\n direction: 'rtl',\n },\n [`${componentCls}-centered`]: {\n textAlign: 'center',\n '&::before': {\n display: 'inline-block',\n width: 0,\n height: '100%',\n verticalAlign: 'middle',\n content: '\"\"',\n },\n [componentCls]: {\n top: 0,\n display: 'inline-block',\n paddingBottom: 0,\n textAlign: 'start',\n verticalAlign: 'middle',\n },\n },\n [`@media (max-width: ${token.screenSMMax}px)`]: {\n [componentCls]: {\n maxWidth: 'calc(100vw - 16px)',\n margin: `${unit(token.marginXS)} auto`,\n },\n [`${componentCls}-centered`]: {\n [componentCls]: {\n flex: 1,\n },\n },\n },\n },\n },\n // ======================== Modal ========================\n {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { pointerEvents: 'none', position: 'relative', top: 100, width: 'auto', maxWidth: `calc(100vw - ${unit(token.calc(token.margin).mul(2).equal())})`, margin: '0 auto', paddingBottom: token.paddingLG, [`${componentCls}-title`]: {\n margin: 0,\n color: token.titleColor,\n fontWeight: token.fontWeightStrong,\n fontSize: token.titleFontSize,\n lineHeight: token.titleLineHeight,\n wordWrap: 'break-word',\n }, [`${componentCls}-content`]: {\n position: 'relative',\n backgroundColor: token.contentBg,\n backgroundClip: 'padding-box',\n border: 0,\n borderRadius: token.borderRadiusLG,\n boxShadow: token.boxShadow,\n pointerEvents: 'auto',\n padding: token.contentPadding,\n }, [`${componentCls}-close`]: Object.assign({ position: 'absolute', top: token.calc(token.modalHeaderHeight).sub(token.modalCloseBtnSize).div(2).equal(), insetInlineEnd: token\n .calc(token.modalHeaderHeight)\n .sub(token.modalCloseBtnSize)\n .div(2)\n .equal(), zIndex: token.calc(token.zIndexPopupBase).add(10).equal(), padding: 0, color: token.modalCloseIconColor, fontWeight: token.fontWeightStrong, lineHeight: 1, textDecoration: 'none', background: 'transparent', borderRadius: token.borderRadiusSM, width: token.modalCloseBtnSize, height: token.modalCloseBtnSize, border: 0, outline: 0, cursor: 'pointer', transition: `color ${token.motionDurationMid}, background-color ${token.motionDurationMid}`, '&-x': {\n display: 'flex',\n fontSize: token.fontSizeLG,\n fontStyle: 'normal',\n lineHeight: unit(token.modalCloseBtnSize),\n justifyContent: 'center',\n textTransform: 'none',\n textRendering: 'auto',\n }, '&:disabled': {\n pointerEvents: 'none',\n }, '&:hover': {\n color: token.modalCloseIconHoverColor,\n backgroundColor: token.colorBgTextHover,\n textDecoration: 'none',\n }, '&:active': {\n backgroundColor: token.colorBgTextActive,\n } }, genFocusStyle(token)), [`${componentCls}-header`]: {\n color: token.colorText,\n background: token.headerBg,\n borderRadius: `${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)} 0 0`,\n marginBottom: token.headerMarginBottom,\n padding: token.headerPadding,\n borderBottom: token.headerBorderBottom,\n }, [`${componentCls}-body`]: {\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n wordWrap: 'break-word',\n padding: token.bodyPadding,\n [`${componentCls}-body-skeleton`]: {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n margin: `${unit(token.margin)} auto`,\n },\n }, [`${componentCls}-footer`]: {\n textAlign: 'end',\n background: token.footerBg,\n marginTop: token.footerMarginTop,\n padding: token.footerPadding,\n borderTop: token.footerBorderTop,\n borderRadius: token.footerBorderRadius,\n [`> ${token.antCls}-btn + ${token.antCls}-btn`]: {\n marginInlineStart: token.marginXS,\n },\n }, [`${componentCls}-open`]: {\n overflow: 'hidden',\n } }),\n },\n // ======================== Pure =========================\n {\n [`${componentCls}-pure-panel`]: {\n top: 'auto',\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n [`${componentCls}-content,\n ${componentCls}-body,\n ${componentCls}-confirm-body-wrapper`]: {\n display: 'flex',\n flexDirection: 'column',\n flex: 'auto',\n },\n [`${componentCls}-confirm-body`]: {\n marginBottom: 'auto',\n },\n },\n },\n ];\n};\nconst genRTLStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-root`]: {\n [`${componentCls}-wrap-rtl`]: {\n direction: 'rtl',\n [`${componentCls}-confirm-body`]: {\n direction: 'rtl',\n },\n },\n },\n };\n};\nconst genResponsiveWidthStyle = (token) => {\n const { componentCls } = token;\n const oriGridMediaSizesMap = getMediaSize(token);\n const gridMediaSizesMap = Object.assign({}, oriGridMediaSizesMap);\n delete gridMediaSizesMap.xs;\n const cssVarPrefix = `--${componentCls.replace('.', '')}-`;\n const responsiveStyles = Object.keys(gridMediaSizesMap).map((key) => ({\n [`@media (min-width: ${unit(gridMediaSizesMap[key])})`]: {\n width: `var(${cssVarPrefix}${key}-width)`,\n },\n }));\n return {\n [`${componentCls}-root`]: {\n [componentCls]: [\n // Fallback of css variable. e.g. --modal-sm-width: var(--modal-xs-width)\n ...Object.keys(oriGridMediaSizesMap).map((currentKey, index) => {\n const previousKey = Object.keys(oriGridMediaSizesMap)[index - 1];\n return previousKey\n ? {\n [`${cssVarPrefix}${currentKey}-width`]: `var(${cssVarPrefix}${previousKey}-width)`,\n }\n : null;\n }),\n {\n width: `var(${cssVarPrefix}xs-width)`,\n },\n ...responsiveStyles,\n ],\n },\n };\n};\n// ============================== Export ==============================\nexport const prepareToken = (token) => {\n const headerPaddingVertical = token.padding;\n const headerFontSize = token.fontSizeHeading5;\n const headerLineHeight = token.lineHeightHeading5;\n const modalToken = mergeToken(token, {\n modalHeaderHeight: token\n .calc(token.calc(headerLineHeight).mul(headerFontSize).equal())\n .add(token.calc(headerPaddingVertical).mul(2).equal())\n .equal(),\n modalFooterBorderColorSplit: token.colorSplit,\n modalFooterBorderStyle: token.lineType,\n modalFooterBorderWidth: token.lineWidth,\n modalCloseIconColor: token.colorIcon,\n modalCloseIconHoverColor: token.colorIconHover,\n modalCloseBtnSize: token.controlHeight,\n modalConfirmIconSize: token.fontHeight,\n modalTitleHeight: token.calc(token.titleFontSize).mul(token.titleLineHeight).equal(),\n });\n return modalToken;\n};\nexport const prepareComponentToken = (token) => ({\n footerBg: 'transparent',\n headerBg: token.colorBgElevated,\n titleLineHeight: token.lineHeightHeading5,\n titleFontSize: token.fontSizeHeading5,\n contentBg: token.colorBgElevated,\n titleColor: token.colorTextHeading,\n // internal\n contentPadding: token.wireframe\n ? 0\n : `${unit(token.paddingMD)} ${unit(token.paddingContentHorizontalLG)}`,\n headerPadding: token.wireframe ? `${unit(token.padding)} ${unit(token.paddingLG)}` : 0,\n headerBorderBottom: token.wireframe\n ? `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`\n : 'none',\n headerMarginBottom: token.wireframe ? 0 : token.marginXS,\n bodyPadding: token.wireframe ? token.paddingLG : 0,\n footerPadding: token.wireframe ? `${unit(token.paddingXS)} ${unit(token.padding)}` : 0,\n footerBorderTop: token.wireframe\n ? `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`\n : 'none',\n footerBorderRadius: token.wireframe\n ? `0 0 ${unit(token.borderRadiusLG)} ${unit(token.borderRadiusLG)}`\n : 0,\n footerMarginTop: token.wireframe ? 0 : token.marginSM,\n confirmBodyPadding: token.wireframe\n ? `${unit(token.padding * 2)} ${unit(token.padding * 2)} ${unit(token.paddingLG)}`\n : 0,\n confirmIconMarginInlineEnd: token.wireframe ? token.margin : token.marginSM,\n confirmBtnsMarginTop: token.wireframe ? token.marginLG : token.marginSM,\n});\nexport default genStyleHooks('Modal', (token) => {\n const modalToken = prepareToken(token);\n return [\n genModalStyle(modalToken),\n genRTLStyle(modalToken),\n genModalMaskStyle(modalToken),\n initZoomMotion(modalToken, 'zoom'),\n genResponsiveWidthStyle(modalToken),\n ];\n}, prepareComponentToken, {\n unitless: {\n titleLineHeight: true,\n },\n});\n","import { unit } from '@ant-design/cssinjs';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Row-Shared ==============================\nconst genGridRowStyle = (token) => {\n const { componentCls } = token;\n return {\n // Grid system\n [componentCls]: {\n display: 'flex',\n flexFlow: 'row wrap',\n minWidth: 0,\n '&::before, &::after': {\n display: 'flex',\n },\n '&-no-wrap': {\n flexWrap: 'nowrap',\n },\n // The origin of the X-axis\n '&-start': {\n justifyContent: 'flex-start',\n },\n // The center of the X-axis\n '&-center': {\n justifyContent: 'center',\n },\n // The opposite of the X-axis\n '&-end': {\n justifyContent: 'flex-end',\n },\n '&-space-between': {\n justifyContent: 'space-between',\n },\n '&-space-around': {\n justifyContent: 'space-around',\n },\n '&-space-evenly': {\n justifyContent: 'space-evenly',\n },\n // Align at the top\n '&-top': {\n alignItems: 'flex-start',\n },\n // Align at the center\n '&-middle': {\n alignItems: 'center',\n },\n '&-bottom': {\n alignItems: 'flex-end',\n },\n },\n };\n};\n// ============================== Col-Shared ==============================\nconst genGridColStyle = (token) => {\n const { componentCls } = token;\n return {\n // Grid system\n [componentCls]: {\n position: 'relative',\n maxWidth: '100%',\n // Prevent columns from collapsing when empty\n minHeight: 1,\n },\n };\n};\nconst genLoopGridColumnsStyle = (token, sizeCls) => {\n const { prefixCls, componentCls, gridColumns } = token;\n const gridColumnsStyle = {};\n for (let i = gridColumns; i >= 0; i--) {\n if (i === 0) {\n gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {\n display: 'none',\n };\n gridColumnsStyle[`${componentCls}-push-${i}`] = {\n insetInlineStart: 'auto',\n };\n gridColumnsStyle[`${componentCls}-pull-${i}`] = {\n insetInlineEnd: 'auto',\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {\n insetInlineStart: 'auto',\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {\n insetInlineEnd: 'auto',\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {\n marginInlineStart: 0,\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {\n order: 0,\n };\n }\n else {\n gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = [\n // https://github.com/ant-design/ant-design/issues/44456\n // Form set `display: flex` on Col which will override `display: block`.\n // Let's get it from css variable to support override.\n {\n ['--ant-display']: 'block',\n // Fallback to display if variable not support\n display: 'block',\n },\n {\n display: 'var(--ant-display)',\n flex: `0 0 ${(i / gridColumns) * 100}%`,\n maxWidth: `${(i / gridColumns) * 100}%`,\n },\n ];\n gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {\n insetInlineStart: `${(i / gridColumns) * 100}%`,\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {\n insetInlineEnd: `${(i / gridColumns) * 100}%`,\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {\n marginInlineStart: `${(i / gridColumns) * 100}%`,\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {\n order: i,\n };\n }\n }\n // Flex CSS Var\n gridColumnsStyle[`${componentCls}${sizeCls}-flex`] = {\n flex: `var(--${prefixCls}${sizeCls}-flex)`,\n };\n return gridColumnsStyle;\n};\nconst genGridStyle = (token, sizeCls) => genLoopGridColumnsStyle(token, sizeCls);\nconst genGridMediaStyle = (token, screenSize, sizeCls) => ({\n [`@media (min-width: ${unit(screenSize)})`]: Object.assign({}, genGridStyle(token, sizeCls)),\n});\nexport const prepareRowComponentToken = () => ({});\nexport const prepareColComponentToken = () => ({});\n// ============================== Export ==============================\nexport const useRowStyle = genStyleHooks('Grid', genGridRowStyle, prepareRowComponentToken);\nexport const getMediaSize = (token) => {\n const mediaSizesMap = {\n xs: token.screenXSMin,\n sm: token.screenSMMin,\n md: token.screenMDMin,\n lg: token.screenLGMin,\n xl: token.screenXLMin,\n xxl: token.screenXXLMin,\n };\n return mediaSizesMap;\n};\nexport const useColStyle = genStyleHooks('Grid', (token) => {\n const gridToken = mergeToken(token, {\n gridColumns: 24, // Row is divided into 24 parts in Grid\n });\n const gridMediaSizesMap = getMediaSize(gridToken);\n delete gridMediaSizesMap.xs;\n return [\n genGridColStyle(gridToken),\n genGridStyle(gridToken, ''),\n genGridStyle(gridToken, '-xs'),\n Object.keys(gridMediaSizesMap)\n .map((key) => genGridMediaStyle(gridToken, gridMediaSizesMap[key], `-${key}`))\n .reduce((pre, cur) => (Object.assign(Object.assign({}, pre), cur)), {}),\n ];\n}, prepareColComponentToken);\n","import { Color as RcColor } from '@rc-component/color-picker';\nexport const toHexFormat = (value, alpha) => (value === null || value === void 0 ? void 0 : value.replace(/[^\\w/]/g, '').slice(0, alpha ? 8 : 6)) || '';\nexport const getHex = (value, alpha) => (value ? toHexFormat(value, alpha) : '');\nexport class AggregationColor {\n constructor(color) {\n var _a;\n this.cleared = false;\n // Clone from another AggregationColor\n if (color instanceof AggregationColor) {\n this.metaColor = color.metaColor.clone();\n this.colors = (_a = color.colors) === null || _a === void 0 ? void 0 : _a.map((info) => ({\n color: new AggregationColor(info.color),\n percent: info.percent,\n }));\n this.cleared = color.cleared;\n return;\n }\n const isArray = Array.isArray(color);\n if (isArray && color.length) {\n this.colors = color.map(({ color: c, percent }) => ({\n color: new AggregationColor(c),\n percent,\n }));\n this.metaColor = new RcColor(this.colors[0].color.metaColor);\n }\n else {\n this.metaColor = new RcColor(isArray ? '' : color);\n }\n if (!color || (isArray && !this.colors)) {\n this.metaColor = this.metaColor.setA(0);\n this.cleared = true;\n }\n }\n toHsb() {\n return this.metaColor.toHsb();\n }\n toHsbString() {\n return this.metaColor.toHsbString();\n }\n toHex() {\n return getHex(this.toHexString(), this.metaColor.a < 1);\n }\n toHexString() {\n return this.metaColor.toHexString();\n }\n toRgb() {\n return this.metaColor.toRgb();\n }\n toRgbString() {\n return this.metaColor.toRgbString();\n }\n isGradient() {\n return !!this.colors && !this.cleared;\n }\n getColors() {\n return this.colors || [{ color: this, percent: 0 }];\n }\n toCssString() {\n const { colors } = this;\n // CSS line-gradient\n if (colors) {\n const colorsStr = colors.map((c) => `${c.color.toRgbString()} ${c.percent}%`).join(', ');\n return `linear-gradient(90deg, ${colorsStr})`;\n }\n return this.metaColor.toRgbString();\n }\n equals(color) {\n if (!color || this.isGradient() !== color.isGradient()) {\n return false;\n }\n if (!this.isGradient()) {\n return this.toHexString() === color.toHexString();\n }\n return (this.colors.length === color.colors.length &&\n this.colors.every((c, i) => {\n const target = color.colors[i];\n return c.percent === target.percent && c.color.equals(target.color);\n }));\n }\n}\n","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import * as React from 'react';\nconst SizeContext = React.createContext(undefined);\nexport const SizeContextProvider = ({ children, size }) => {\n const originSize = React.useContext(SizeContext);\n return React.createElement(SizeContext.Provider, { value: size || originSize }, children);\n};\nexport default SizeContext;\n","import { Color as RcColor } from '@rc-component/color-picker';\nimport { AggregationColor } from './color';\nexport const generateColor = (color) => {\n if (color instanceof AggregationColor) {\n return color;\n }\n return new AggregationColor(color);\n};\nexport const getRoundNumber = (value) => Math.round(Number(value || 0));\nexport const getColorAlpha = (color) => getRoundNumber(color.toHsb().a * 100);\n/** Return the color whose `alpha` is 1 */\nexport const genAlphaColor = (color, alpha) => {\n const rgba = color.toRgb();\n // Color from hsb input may get `rgb` is (0/0/0) when `hsb.b` is 0\n // So if rgb is empty, we should get from hsb\n if (!rgba.r && !rgba.g && !rgba.b) {\n const hsba = color.toHsb();\n hsba.a = alpha || 1;\n return generateColor(hsba);\n }\n rgba.a = alpha || 1;\n return generateColor(rgba);\n};\n/**\n * Get percent position color. e.g. [10%-#fff, 20%-#000], 15% => #888\n */\nexport const getGradientPercentColor = (colors, percent) => {\n const filledColors = [\n {\n percent: 0,\n color: colors[0].color,\n },\n ...colors,\n {\n percent: 100,\n color: colors[colors.length - 1].color,\n },\n ];\n for (let i = 0; i < filledColors.length - 1; i += 1) {\n const startPtg = filledColors[i].percent;\n const endPtg = filledColors[i + 1].percent;\n const startColor = filledColors[i].color;\n const endColor = filledColors[i + 1].color;\n if (startPtg <= percent && percent <= endPtg) {\n const dist = endPtg - startPtg;\n if (dist === 0) {\n return startColor;\n }\n const ratio = ((percent - startPtg) / dist) * 100;\n const startRcColor = new RcColor(startColor);\n const endRcColor = new RcColor(endColor);\n return startRcColor.mix(endRcColor, ratio).toRgbString();\n }\n }\n // This will never reach\n /* istanbul ignore next */\n return '';\n};\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent, textEllipsis } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Shared ==============================\nconst genSharedAnchorStyle = (token) => {\n const { componentCls, holderOffsetBlock, motionDurationSlow, lineWidthBold, colorPrimary, lineType, colorSplit, calc, } = token;\n return {\n [`${componentCls}-wrapper`]: {\n marginBlockStart: calc(holderOffsetBlock).mul(-1).equal(),\n paddingBlockStart: holderOffsetBlock,\n // delete overflow: auto\n // overflow: 'auto',\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'relative', paddingInlineStart: lineWidthBold, [`${componentCls}-link`]: {\n paddingBlock: token.linkPaddingBlock,\n paddingInline: `${unit(token.linkPaddingInlineStart)} 0`,\n '&-title': Object.assign(Object.assign({}, textEllipsis), { position: 'relative', display: 'block', marginBlockEnd: token.anchorTitleBlock, color: token.colorText, transition: `all ${token.motionDurationSlow}`, '&:only-child': {\n marginBlockEnd: 0,\n } }),\n [`&-active > ${componentCls}-link-title`]: {\n color: token.colorPrimary,\n },\n // link link\n [`${componentCls}-link`]: {\n paddingBlock: token.anchorPaddingBlockSecondary,\n },\n } }),\n [`&:not(${componentCls}-wrapper-horizontal)`]: {\n [componentCls]: {\n '&::before': {\n position: 'absolute',\n insetInlineStart: 0,\n top: 0,\n height: '100%',\n borderInlineStart: `${unit(lineWidthBold)} ${lineType} ${colorSplit}`,\n content: '\" \"',\n },\n [`${componentCls}-ink`]: {\n position: 'absolute',\n insetInlineStart: 0,\n display: 'none',\n transform: 'translateY(-50%)',\n transition: `top ${motionDurationSlow} ease-in-out`,\n width: lineWidthBold,\n backgroundColor: colorPrimary,\n [`&${componentCls}-ink-visible`]: {\n display: 'inline-block',\n },\n },\n },\n },\n [`${componentCls}-fixed ${componentCls}-ink ${componentCls}-ink`]: {\n display: 'none',\n },\n },\n };\n};\nconst genSharedAnchorHorizontalStyle = (token) => {\n const { componentCls, motionDurationSlow, lineWidthBold, colorPrimary } = token;\n return {\n [`${componentCls}-wrapper-horizontal`]: {\n position: 'relative',\n '&::before': {\n position: 'absolute',\n left: {\n _skip_check_: true,\n value: 0,\n },\n right: {\n _skip_check_: true,\n value: 0,\n },\n bottom: 0,\n borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,\n content: '\" \"',\n },\n [componentCls]: {\n overflowX: 'scroll',\n position: 'relative',\n display: 'flex',\n scrollbarWidth: 'none' /* Firefox */,\n '&::-webkit-scrollbar': {\n display: 'none' /* Safari and Chrome */,\n },\n [`${componentCls}-link:first-of-type`]: {\n paddingInline: 0,\n },\n [`${componentCls}-ink`]: {\n position: 'absolute',\n bottom: 0,\n transition: `left ${motionDurationSlow} ease-in-out, width ${motionDurationSlow} ease-in-out`,\n height: lineWidthBold,\n backgroundColor: colorPrimary,\n },\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => ({\n linkPaddingBlock: token.paddingXXS,\n linkPaddingInlineStart: token.padding,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('Anchor', (token) => {\n const { fontSize, fontSizeLG, paddingXXS, calc } = token;\n const anchorToken = mergeToken(token, {\n holderOffsetBlock: paddingXXS,\n anchorPaddingBlockSecondary: calc(paddingXXS).div(2).equal(),\n anchorTitleBlock: calc(fontSize).div(14).mul(3).equal(),\n anchorBallSize: calc(fontSizeLG).div(2).equal(),\n });\n return [genSharedAnchorStyle(anchorToken), genSharedAnchorHorizontalStyle(anchorToken)];\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { genRoundedArrow } from './roundedArrow';\nexport const MAX_VERTICAL_CONTENT_RADIUS = 8;\nexport function getArrowOffsetToken(options) {\n const { contentRadius, limitVerticalRadius } = options;\n const arrowOffset = contentRadius > 12 ? contentRadius + 2 : 12;\n const arrowOffsetVertical = limitVerticalRadius ? MAX_VERTICAL_CONTENT_RADIUS : arrowOffset;\n return { arrowOffsetHorizontal: arrowOffset, arrowOffsetVertical };\n}\nfunction isInject(valid, code) {\n if (!valid) {\n return {};\n }\n return code;\n}\nexport default function getArrowStyle(token, colorBg, options) {\n const { componentCls, boxShadowPopoverArrow, arrowOffsetVertical, arrowOffsetHorizontal } = token;\n const { arrowDistance = 0, arrowPlacement = {\n left: true,\n right: true,\n top: true,\n bottom: true,\n }, } = options || {};\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({ \n // ============================ Basic ============================\n [`${componentCls}-arrow`]: [\n Object.assign(Object.assign({ position: 'absolute', zIndex: 1, display: 'block' }, genRoundedArrow(token, colorBg, boxShadowPopoverArrow)), { '&:before': {\n background: colorBg,\n } }),\n ] }, isInject(!!arrowPlacement.top, {\n [[\n `&-placement-top > ${componentCls}-arrow`,\n `&-placement-topLeft > ${componentCls}-arrow`,\n `&-placement-topRight > ${componentCls}-arrow`,\n ].join(',')]: {\n bottom: arrowDistance,\n transform: 'translateY(100%) rotate(180deg)',\n },\n [`&-placement-top > ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: '50%',\n },\n transform: 'translateX(-50%) translateY(100%) rotate(180deg)',\n },\n '&-placement-topLeft': {\n '--arrow-offset-horizontal': arrowOffsetHorizontal,\n [`> ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: arrowOffsetHorizontal,\n },\n },\n },\n '&-placement-topRight': {\n '--arrow-offset-horizontal': `calc(100% - ${unit(arrowOffsetHorizontal)})`,\n [`> ${componentCls}-arrow`]: {\n right: {\n _skip_check_: true,\n value: arrowOffsetHorizontal,\n },\n },\n },\n })), isInject(!!arrowPlacement.bottom, {\n [[\n `&-placement-bottom > ${componentCls}-arrow`,\n `&-placement-bottomLeft > ${componentCls}-arrow`,\n `&-placement-bottomRight > ${componentCls}-arrow`,\n ].join(',')]: {\n top: arrowDistance,\n transform: `translateY(-100%)`,\n },\n [`&-placement-bottom > ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: '50%',\n },\n transform: `translateX(-50%) translateY(-100%)`,\n },\n '&-placement-bottomLeft': {\n '--arrow-offset-horizontal': arrowOffsetHorizontal,\n [`> ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: arrowOffsetHorizontal,\n },\n },\n },\n '&-placement-bottomRight': {\n '--arrow-offset-horizontal': `calc(100% - ${unit(arrowOffsetHorizontal)})`,\n [`> ${componentCls}-arrow`]: {\n right: {\n _skip_check_: true,\n value: arrowOffsetHorizontal,\n },\n },\n },\n })), isInject(!!arrowPlacement.left, {\n [[\n `&-placement-left > ${componentCls}-arrow`,\n `&-placement-leftTop > ${componentCls}-arrow`,\n `&-placement-leftBottom > ${componentCls}-arrow`,\n ].join(',')]: {\n right: {\n _skip_check_: true,\n value: arrowDistance,\n },\n transform: 'translateX(100%) rotate(90deg)',\n },\n [`&-placement-left > ${componentCls}-arrow`]: {\n top: {\n _skip_check_: true,\n value: '50%',\n },\n transform: 'translateY(-50%) translateX(100%) rotate(90deg)',\n },\n [`&-placement-leftTop > ${componentCls}-arrow`]: {\n top: arrowOffsetVertical,\n },\n [`&-placement-leftBottom > ${componentCls}-arrow`]: {\n bottom: arrowOffsetVertical,\n },\n })), isInject(!!arrowPlacement.right, {\n [[\n `&-placement-right > ${componentCls}-arrow`,\n `&-placement-rightTop > ${componentCls}-arrow`,\n `&-placement-rightBottom > ${componentCls}-arrow`,\n ].join(',')]: {\n left: {\n _skip_check_: true,\n value: arrowDistance,\n },\n transform: 'translateX(-100%) rotate(-90deg)',\n },\n [`&-placement-right > ${componentCls}-arrow`]: {\n top: {\n _skip_check_: true,\n value: '50%',\n },\n transform: 'translateY(-50%) translateX(-100%) rotate(-90deg)',\n },\n [`&-placement-rightTop > ${componentCls}-arrow`]: {\n top: arrowOffsetVertical,\n },\n [`&-placement-rightBottom > ${componentCls}-arrow`]: {\n bottom: arrowOffsetVertical,\n },\n })),\n };\n}\n","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\nvar KeyCode = {\n /**\n * MAC_ENTER\n */\n MAC_ENTER: 3,\n /**\n * BACKSPACE\n */\n BACKSPACE: 8,\n /**\n * TAB\n */\n TAB: 9,\n /**\n * NUMLOCK on FF/Safari Mac\n */\n NUM_CENTER: 12,\n // NUMLOCK on FF/Safari Mac\n /**\n * ENTER\n */\n ENTER: 13,\n /**\n * SHIFT\n */\n SHIFT: 16,\n /**\n * CTRL\n */\n CTRL: 17,\n /**\n * ALT\n */\n ALT: 18,\n /**\n * PAUSE\n */\n PAUSE: 19,\n /**\n * CAPS_LOCK\n */\n CAPS_LOCK: 20,\n /**\n * ESC\n */\n ESC: 27,\n /**\n * SPACE\n */\n SPACE: 32,\n /**\n * PAGE_UP\n */\n PAGE_UP: 33,\n // also NUM_NORTH_EAST\n /**\n * PAGE_DOWN\n */\n PAGE_DOWN: 34,\n // also NUM_SOUTH_EAST\n /**\n * END\n */\n END: 35,\n // also NUM_SOUTH_WEST\n /**\n * HOME\n */\n HOME: 36,\n // also NUM_NORTH_WEST\n /**\n * LEFT\n */\n LEFT: 37,\n // also NUM_WEST\n /**\n * UP\n */\n UP: 38,\n // also NUM_NORTH\n /**\n * RIGHT\n */\n RIGHT: 39,\n // also NUM_EAST\n /**\n * DOWN\n */\n DOWN: 40,\n // also NUM_SOUTH\n /**\n * PRINT_SCREEN\n */\n PRINT_SCREEN: 44,\n /**\n * INSERT\n */\n INSERT: 45,\n // also NUM_INSERT\n /**\n * DELETE\n */\n DELETE: 46,\n // also NUM_DELETE\n /**\n * ZERO\n */\n ZERO: 48,\n /**\n * ONE\n */\n ONE: 49,\n /**\n * TWO\n */\n TWO: 50,\n /**\n * THREE\n */\n THREE: 51,\n /**\n * FOUR\n */\n FOUR: 52,\n /**\n * FIVE\n */\n FIVE: 53,\n /**\n * SIX\n */\n SIX: 54,\n /**\n * SEVEN\n */\n SEVEN: 55,\n /**\n * EIGHT\n */\n EIGHT: 56,\n /**\n * NINE\n */\n NINE: 57,\n /**\n * QUESTION_MARK\n */\n QUESTION_MARK: 63,\n // needs localization\n /**\n * A\n */\n A: 65,\n /**\n * B\n */\n B: 66,\n /**\n * C\n */\n C: 67,\n /**\n * D\n */\n D: 68,\n /**\n * E\n */\n E: 69,\n /**\n * F\n */\n F: 70,\n /**\n * G\n */\n G: 71,\n /**\n * H\n */\n H: 72,\n /**\n * I\n */\n I: 73,\n /**\n * J\n */\n J: 74,\n /**\n * K\n */\n K: 75,\n /**\n * L\n */\n L: 76,\n /**\n * M\n */\n M: 77,\n /**\n * N\n */\n N: 78,\n /**\n * O\n */\n O: 79,\n /**\n * P\n */\n P: 80,\n /**\n * Q\n */\n Q: 81,\n /**\n * R\n */\n R: 82,\n /**\n * S\n */\n S: 83,\n /**\n * T\n */\n T: 84,\n /**\n * U\n */\n U: 85,\n /**\n * V\n */\n V: 86,\n /**\n * W\n */\n W: 87,\n /**\n * X\n */\n X: 88,\n /**\n * Y\n */\n Y: 89,\n /**\n * Z\n */\n Z: 90,\n /**\n * META\n */\n META: 91,\n // WIN_KEY_LEFT\n /**\n * WIN_KEY_RIGHT\n */\n WIN_KEY_RIGHT: 92,\n /**\n * CONTEXT_MENU\n */\n CONTEXT_MENU: 93,\n /**\n * NUM_ZERO\n */\n NUM_ZERO: 96,\n /**\n * NUM_ONE\n */\n NUM_ONE: 97,\n /**\n * NUM_TWO\n */\n NUM_TWO: 98,\n /**\n * NUM_THREE\n */\n NUM_THREE: 99,\n /**\n * NUM_FOUR\n */\n NUM_FOUR: 100,\n /**\n * NUM_FIVE\n */\n NUM_FIVE: 101,\n /**\n * NUM_SIX\n */\n NUM_SIX: 102,\n /**\n * NUM_SEVEN\n */\n NUM_SEVEN: 103,\n /**\n * NUM_EIGHT\n */\n NUM_EIGHT: 104,\n /**\n * NUM_NINE\n */\n NUM_NINE: 105,\n /**\n * NUM_MULTIPLY\n */\n NUM_MULTIPLY: 106,\n /**\n * NUM_PLUS\n */\n NUM_PLUS: 107,\n /**\n * NUM_MINUS\n */\n NUM_MINUS: 109,\n /**\n * NUM_PERIOD\n */\n NUM_PERIOD: 110,\n /**\n * NUM_DIVISION\n */\n NUM_DIVISION: 111,\n /**\n * F1\n */\n F1: 112,\n /**\n * F2\n */\n F2: 113,\n /**\n * F3\n */\n F3: 114,\n /**\n * F4\n */\n F4: 115,\n /**\n * F5\n */\n F5: 116,\n /**\n * F6\n */\n F6: 117,\n /**\n * F7\n */\n F7: 118,\n /**\n * F8\n */\n F8: 119,\n /**\n * F9\n */\n F9: 120,\n /**\n * F10\n */\n F10: 121,\n /**\n * F11\n */\n F11: 122,\n /**\n * F12\n */\n F12: 123,\n /**\n * NUMLOCK\n */\n NUMLOCK: 144,\n /**\n * SEMICOLON\n */\n SEMICOLON: 186,\n // needs localization\n /**\n * DASH\n */\n DASH: 189,\n // needs localization\n /**\n * EQUALS\n */\n EQUALS: 187,\n // needs localization\n /**\n * COMMA\n */\n COMMA: 188,\n // needs localization\n /**\n * PERIOD\n */\n PERIOD: 190,\n // needs localization\n /**\n * SLASH\n */\n SLASH: 191,\n // needs localization\n /**\n * APOSTROPHE\n */\n APOSTROPHE: 192,\n // needs localization\n /**\n * SINGLE_QUOTE\n */\n SINGLE_QUOTE: 222,\n // needs localization\n /**\n * OPEN_SQUARE_BRACKET\n */\n OPEN_SQUARE_BRACKET: 219,\n // needs localization\n /**\n * BACKSLASH\n */\n BACKSLASH: 220,\n // needs localization\n /**\n * CLOSE_SQUARE_BRACKET\n */\n CLOSE_SQUARE_BRACKET: 221,\n // needs localization\n /**\n * WIN_KEY\n */\n WIN_KEY: 224,\n /**\n * MAC_FF_META\n */\n MAC_FF_META: 224,\n // Firefox (Gecko) fires this for the meta key instead of 91\n /**\n * WIN_IME\n */\n WIN_IME: 229,\n // ======================== Function ========================\n /**\n * whether text and modified key is entered at the same time.\n */\n isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {\n var keyCode = e.keyCode;\n if (e.altKey && !e.ctrlKey || e.metaKey ||\n // Function keys don't generate text\n keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n return false;\n }\n\n // The following keys are quite harmless, even in combination with\n // CTRL, ALT or SHIFT.\n switch (keyCode) {\n case KeyCode.ALT:\n case KeyCode.CAPS_LOCK:\n case KeyCode.CONTEXT_MENU:\n case KeyCode.CTRL:\n case KeyCode.DOWN:\n case KeyCode.END:\n case KeyCode.ESC:\n case KeyCode.HOME:\n case KeyCode.INSERT:\n case KeyCode.LEFT:\n case KeyCode.MAC_FF_META:\n case KeyCode.META:\n case KeyCode.NUMLOCK:\n case KeyCode.NUM_CENTER:\n case KeyCode.PAGE_DOWN:\n case KeyCode.PAGE_UP:\n case KeyCode.PAUSE:\n case KeyCode.PRINT_SCREEN:\n case KeyCode.RIGHT:\n case KeyCode.SHIFT:\n case KeyCode.UP:\n case KeyCode.WIN_KEY:\n case KeyCode.WIN_KEY_RIGHT:\n return false;\n default:\n return true;\n }\n },\n /**\n * whether character is entered.\n */\n isCharacterKey: function isCharacterKey(keyCode) {\n if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n return true;\n }\n if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n return true;\n }\n if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n return true;\n }\n\n // Safari sends zero key code for non-latin characters.\n if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n return true;\n }\n switch (keyCode) {\n case KeyCode.SPACE:\n case KeyCode.QUESTION_MARK:\n case KeyCode.NUM_PLUS:\n case KeyCode.NUM_MINUS:\n case KeyCode.NUM_PERIOD:\n case KeyCode.NUM_DIVISION:\n case KeyCode.SEMICOLON:\n case KeyCode.DASH:\n case KeyCode.EQUALS:\n case KeyCode.COMMA:\n case KeyCode.PERIOD:\n case KeyCode.SLASH:\n case KeyCode.APOSTROPHE:\n case KeyCode.SINGLE_QUOTE:\n case KeyCode.OPEN_SQUARE_BRACKET:\n case KeyCode.BACKSLASH:\n case KeyCode.CLOSE_SQUARE_BRACKET:\n return true;\n default:\n return false;\n }\n }\n};\nexport default KeyCode;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import * as React from 'react';\nexport default function useEvent(callback) {\n var fnRef = React.useRef();\n fnRef.current = callback;\n var memoFn = React.useCallback(function () {\n var _fnRef$current;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return (_fnRef$current = fnRef.current) === null || _fnRef$current === void 0 ? void 0 : _fnRef$current.call.apply(_fnRef$current, [fnRef].concat(args));\n }, []);\n return memoFn;\n}","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.keys(attrs).reduce(function (acc, key) {\n var val = attrs[key];\n switch (key) {\n case 'class':\n acc.className = val;\n delete acc.class;\n break;\n default:\n delete acc[key];\n acc[camelCase(key)] = val;\n }\n return acc;\n }, {});\n}\nexport function generate(node, key, rootProps) {\n if (!rootProps) {\n return /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n key: key\n }, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {\n return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n }));\n }\n return /*#__PURE__*/React.createElement(node.tag, _objectSpread(_objectSpread({\n key: key\n }, normalizeAttrs(node.attrs)), rootProps), (node.children || []).map(function (child, index) {\n return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n }));\n}\nexport function getSecondaryColor(primaryColor) {\n // choose the second color\n return generateColor(primaryColor)[0];\n}\nexport function normalizeTwoToneColors(twoToneColor) {\n if (!twoToneColor) {\n return [];\n }\n return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];\n}\n\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nexport var svgBaseProps = {\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true',\n focusable: 'false'\n};\nexport var iconStyles = \"\\n.anticon {\\n display: inline-flex;\\n align-items: center;\\n color: inherit;\\n font-style: normal;\\n line-height: 0;\\n text-align: center;\\n text-transform: none;\\n vertical-align: -0.125em;\\n text-rendering: optimizeLegibility;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.anticon > * {\\n line-height: 1;\\n}\\n\\n.anticon svg {\\n display: inline-block;\\n}\\n\\n.anticon::before {\\n display: none;\\n}\\n\\n.anticon .anticon-icon {\\n display: block;\\n}\\n\\n.anticon[tabindex] {\\n cursor: pointer;\\n}\\n\\n.anticon-spin::before,\\n.anticon-spin {\\n display: inline-block;\\n -webkit-animation: loadingCircle 1s infinite linear;\\n animation: loadingCircle 1s infinite linear;\\n}\\n\\n@-webkit-keyframes loadingCircle {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes loadingCircle {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\";\nexport var useInsertStyles = function useInsertStyles(eleRef) {\n var _useContext = useContext(IconContext),\n csp = _useContext.csp,\n prefixCls = _useContext.prefixCls,\n layer = _useContext.layer;\n var mergedStyleStr = iconStyles;\n if (prefixCls) {\n mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n }\n if (layer) {\n mergedStyleStr = \"@layer \".concat(layer, \" {\\n\").concat(mergedStyleStr, \"\\n}\");\n }\n useEffect(function () {\n var ele = eleRef.current;\n var shadowRoot = getShadowRoot(ele);\n updateCSS(mergedStyleStr, '@ant-design-icons', {\n prepend: !layer,\n csp: csp,\n attachTo: shadowRoot\n });\n }, []);\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"icon\", \"className\", \"onClick\", \"style\", \"primaryColor\", \"secondaryColor\"];\nimport * as React from 'react';\nimport { generate, getSecondaryColor, isIconDefinition, warning, useInsertStyles } from \"../utils\";\nvar twoToneColorPalette = {\n primaryColor: '#333',\n secondaryColor: '#E6E6E6',\n calculated: false\n};\nfunction setTwoToneColors(_ref) {\n var primaryColor = _ref.primaryColor,\n secondaryColor = _ref.secondaryColor;\n twoToneColorPalette.primaryColor = primaryColor;\n twoToneColorPalette.secondaryColor = secondaryColor || getSecondaryColor(primaryColor);\n twoToneColorPalette.calculated = !!secondaryColor;\n}\nfunction getTwoToneColors() {\n return _objectSpread({}, twoToneColorPalette);\n}\nvar IconBase = function IconBase(props) {\n var icon = props.icon,\n className = props.className,\n onClick = props.onClick,\n style = props.style,\n primaryColor = props.primaryColor,\n secondaryColor = props.secondaryColor,\n restProps = _objectWithoutProperties(props, _excluded);\n var svgRef = React.useRef();\n var colors = twoToneColorPalette;\n if (primaryColor) {\n colors = {\n primaryColor: primaryColor,\n secondaryColor: secondaryColor || getSecondaryColor(primaryColor)\n };\n }\n useInsertStyles(svgRef);\n warning(isIconDefinition(icon), \"icon should be icon definiton, but got \".concat(icon));\n if (!isIconDefinition(icon)) {\n return null;\n }\n var target = icon;\n if (target && typeof target.icon === 'function') {\n target = _objectSpread(_objectSpread({}, target), {}, {\n icon: target.icon(colors.primaryColor, colors.secondaryColor)\n });\n }\n return generate(target.icon, \"svg-\".concat(target.name), _objectSpread(_objectSpread({\n className: className,\n onClick: onClick,\n style: style,\n 'data-icon': target.name,\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true'\n }, restProps), {}, {\n ref: svgRef\n }));\n};\nIconBase.displayName = 'IconReact';\nIconBase.getTwoToneColors = getTwoToneColors;\nIconBase.setTwoToneColors = setTwoToneColors;\nexport default IconBase;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ReactIcon from \"./IconBase\";\nimport { normalizeTwoToneColors } from \"../utils\";\nexport function setTwoToneColor(twoToneColor) {\n var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n primaryColor = _normalizeTwoToneColo2[0],\n secondaryColor = _normalizeTwoToneColo2[1];\n return ReactIcon.setTwoToneColors({\n primaryColor: primaryColor,\n secondaryColor: secondaryColor\n });\n}\nexport function getTwoToneColor() {\n var colors = ReactIcon.getTwoToneColors();\n if (!colors.calculated) {\n return colors.primaryColor;\n }\n return [colors.primaryColor, colors.secondaryColor];\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"icon\", \"spin\", \"rotate\", \"tabIndex\", \"onClick\", \"twoToneColor\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { blue } from '@ant-design/colors';\nimport Context from \"./Context\";\nimport ReactIcon from \"./IconBase\";\nimport { getTwoToneColor, setTwoToneColor } from \"./twoTonePrimaryColor\";\nimport { normalizeTwoToneColors } from \"../utils\";\n// Initial setting\n// should move it to antd main repo?\nsetTwoToneColor(blue.primary);\n\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34757#issuecomment-488848720\n\nvar Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var className = props.className,\n icon = props.icon,\n spin = props.spin,\n rotate = props.rotate,\n tabIndex = props.tabIndex,\n onClick = props.onClick,\n twoToneColor = props.twoToneColor,\n restProps = _objectWithoutProperties(props, _excluded);\n var _React$useContext = React.useContext(Context),\n _React$useContext$pre = _React$useContext.prefixCls,\n prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre,\n rootClassName = _React$useContext.rootClassName;\n var classString = classNames(rootClassName, prefixCls, _defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-\").concat(icon.name), !!icon.name), \"\".concat(prefixCls, \"-spin\"), !!spin || icon.name === 'loading'), className);\n var iconTabIndex = tabIndex;\n if (iconTabIndex === undefined && onClick) {\n iconTabIndex = -1;\n }\n var svgStyle = rotate ? {\n msTransform: \"rotate(\".concat(rotate, \"deg)\"),\n transform: \"rotate(\".concat(rotate, \"deg)\")\n } : undefined;\n var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n primaryColor = _normalizeTwoToneColo2[0],\n secondaryColor = _normalizeTwoToneColo2[1];\n return /*#__PURE__*/React.createElement(\"span\", _extends({\n role: \"img\",\n \"aria-label\": icon.name\n }, restProps, {\n ref: ref,\n tabIndex: iconTabIndex,\n onClick: onClick,\n className: classString\n }), /*#__PURE__*/React.createElement(ReactIcon, {\n icon: icon,\n primaryColor: primaryColor,\n secondaryColor: secondaryColor,\n style: svgStyle\n }));\n});\nIcon.displayName = 'AntdIcon';\nIcon.getTwoToneColor = getTwoToneColor;\nIcon.setTwoToneColor = setTwoToneColor;\nexport default Icon;","import { unit } from '@ant-design/cssinjs';\nimport { genBasicInputStyle, genInputSmallStyle, initComponentToken, initInputToken, } from '../../input/style';\nimport { genBaseOutlinedStyle, genDisabledStyle } from '../../input/style/variants';\nimport { genFocusOutline, genFocusStyle, resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\nconst genPaginationDisabledStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-disabled`]: {\n '&, &:hover': {\n cursor: 'not-allowed',\n [`${componentCls}-item-link`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n },\n },\n '&:focus-visible': {\n cursor: 'not-allowed',\n [`${componentCls}-item-link`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n },\n },\n },\n [`&${componentCls}-disabled`]: {\n cursor: 'not-allowed',\n [`${componentCls}-item`]: {\n cursor: 'not-allowed',\n backgroundColor: 'transparent',\n '&:hover, &:active': {\n backgroundColor: 'transparent',\n },\n a: {\n color: token.colorTextDisabled,\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'not-allowed',\n },\n '&-active': {\n borderColor: token.colorBorder,\n backgroundColor: token.itemActiveBgDisabled,\n '&:hover, &:active': {\n backgroundColor: token.itemActiveBgDisabled,\n },\n a: {\n color: token.itemActiveColorDisabled,\n },\n },\n },\n [`${componentCls}-item-link`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n '&:hover, &:active': {\n backgroundColor: 'transparent',\n },\n [`${componentCls}-simple&`]: {\n backgroundColor: 'transparent',\n '&:hover, &:active': {\n backgroundColor: 'transparent',\n },\n },\n },\n [`${componentCls}-simple-pager`]: {\n color: token.colorTextDisabled,\n },\n [`${componentCls}-jump-prev, ${componentCls}-jump-next`]: {\n [`${componentCls}-item-link-icon`]: {\n opacity: 0,\n },\n [`${componentCls}-item-ellipsis`]: {\n opacity: 1,\n },\n },\n },\n };\n};\nconst genPaginationMiniStyle = (token) => {\n const { componentCls } = token;\n return {\n [`&${componentCls}-mini ${componentCls}-total-text, &${componentCls}-mini ${componentCls}-simple-pager`]: {\n height: token.itemSizeSM,\n lineHeight: unit(token.itemSizeSM),\n },\n [`&${componentCls}-mini ${componentCls}-item`]: {\n minWidth: token.itemSizeSM,\n height: token.itemSizeSM,\n margin: 0,\n lineHeight: unit(token.calc(token.itemSizeSM).sub(2).equal()),\n },\n [`&${componentCls}-mini ${componentCls}-prev, &${componentCls}-mini ${componentCls}-next`]: {\n minWidth: token.itemSizeSM,\n height: token.itemSizeSM,\n margin: 0,\n lineHeight: unit(token.itemSizeSM),\n },\n [`&${componentCls}-mini:not(${componentCls}-disabled)`]: {\n [`${componentCls}-prev, ${componentCls}-next`]: {\n [`&:hover ${componentCls}-item-link`]: {\n backgroundColor: token.colorBgTextHover,\n },\n [`&:active ${componentCls}-item-link`]: {\n backgroundColor: token.colorBgTextActive,\n },\n [`&${componentCls}-disabled:hover ${componentCls}-item-link`]: {\n backgroundColor: 'transparent',\n },\n },\n },\n [`\n &${componentCls}-mini ${componentCls}-prev ${componentCls}-item-link,\n &${componentCls}-mini ${componentCls}-next ${componentCls}-item-link\n `]: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n '&::after': {\n height: token.itemSizeSM,\n lineHeight: unit(token.itemSizeSM),\n },\n },\n [`&${componentCls}-mini ${componentCls}-jump-prev, &${componentCls}-mini ${componentCls}-jump-next`]: {\n height: token.itemSizeSM,\n marginInlineEnd: 0,\n lineHeight: unit(token.itemSizeSM),\n },\n [`&${componentCls}-mini ${componentCls}-options`]: {\n marginInlineStart: token.paginationMiniOptionsMarginInlineStart,\n '&-size-changer': {\n top: token.miniOptionsSizeChangerTop,\n },\n '&-quick-jumper': {\n height: token.itemSizeSM,\n lineHeight: unit(token.itemSizeSM),\n input: Object.assign(Object.assign({}, genInputSmallStyle(token)), { width: token.paginationMiniQuickJumperInputWidth, height: token.controlHeightSM }),\n },\n },\n };\n};\nconst genPaginationSimpleStyle = (token) => {\n const { componentCls } = token;\n return {\n [`&${componentCls}-simple`]: {\n [`${componentCls}-prev, ${componentCls}-next`]: {\n height: token.itemSize,\n lineHeight: unit(token.itemSize),\n verticalAlign: 'top',\n [`${componentCls}-item-link`]: {\n height: token.itemSize,\n backgroundColor: 'transparent',\n border: 0,\n '&:hover': {\n backgroundColor: token.colorBgTextHover,\n },\n '&:active': {\n backgroundColor: token.colorBgTextActive,\n },\n '&::after': {\n height: token.itemSize,\n lineHeight: unit(token.itemSize),\n },\n },\n },\n [`${componentCls}-simple-pager`]: {\n display: 'inline-flex',\n alignItems: 'center',\n height: token.itemSize,\n marginInlineEnd: token.marginXS,\n input: {\n boxSizing: 'border-box',\n height: '100%',\n width: token.quickJumperInputWidth,\n padding: `0 ${unit(token.paginationItemPaddingInline)}`,\n textAlign: 'center',\n backgroundColor: token.itemInputBg,\n border: `${unit(token.lineWidth)} ${token.lineType} ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n outline: 'none',\n transition: `border-color ${token.motionDurationMid}`,\n color: 'inherit',\n '&:hover': {\n borderColor: token.colorPrimary,\n },\n '&:focus': {\n borderColor: token.colorPrimaryHover,\n boxShadow: `${unit(token.inputOutlineOffset)} 0 ${unit(token.controlOutlineWidth)} ${token.controlOutline}`,\n },\n '&[disabled]': {\n color: token.colorTextDisabled,\n backgroundColor: token.colorBgContainerDisabled,\n borderColor: token.colorBorder,\n cursor: 'not-allowed',\n },\n },\n },\n [`&${componentCls}-disabled`]: {\n [`${componentCls}-prev, ${componentCls}-next`]: {\n [`${componentCls}-item-link`]: {\n '&:hover, &:active': {\n backgroundColor: 'transparent',\n },\n },\n },\n },\n [`&${componentCls}-mini`]: {\n [`${componentCls}-prev, ${componentCls}-next`]: {\n height: token.itemSizeSM,\n lineHeight: unit(token.itemSizeSM),\n [`${componentCls}-item-link`]: {\n height: token.itemSizeSM,\n '&::after': {\n height: token.itemSizeSM,\n lineHeight: unit(token.itemSizeSM),\n },\n },\n },\n [`${componentCls}-simple-pager`]: {\n height: token.itemSizeSM,\n input: {\n width: token.paginationMiniQuickJumperInputWidth,\n },\n },\n },\n },\n };\n};\nconst genPaginationJumpStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-jump-prev, ${componentCls}-jump-next`]: {\n outline: 0,\n [`${componentCls}-item-container`]: {\n position: 'relative',\n [`${componentCls}-item-link-icon`]: {\n color: token.colorPrimary,\n fontSize: token.fontSizeSM,\n opacity: 0,\n transition: `all ${token.motionDurationMid}`,\n '&-svg': {\n top: 0,\n insetInlineEnd: 0,\n bottom: 0,\n insetInlineStart: 0,\n margin: 'auto',\n },\n },\n [`${componentCls}-item-ellipsis`]: {\n position: 'absolute',\n top: 0,\n insetInlineEnd: 0,\n bottom: 0,\n insetInlineStart: 0,\n display: 'block',\n margin: 'auto',\n color: token.colorTextDisabled,\n letterSpacing: token.paginationEllipsisLetterSpacing,\n textAlign: 'center',\n textIndent: token.paginationEllipsisTextIndent,\n opacity: 1,\n transition: `all ${token.motionDurationMid}`,\n },\n },\n '&:hover': {\n [`${componentCls}-item-link-icon`]: {\n opacity: 1,\n },\n [`${componentCls}-item-ellipsis`]: {\n opacity: 0,\n },\n },\n },\n [`\n ${componentCls}-prev,\n ${componentCls}-jump-prev,\n ${componentCls}-jump-next\n `]: {\n marginInlineEnd: token.marginXS,\n },\n [`\n ${componentCls}-prev,\n ${componentCls}-next,\n ${componentCls}-jump-prev,\n ${componentCls}-jump-next\n `]: {\n display: 'inline-block',\n minWidth: token.itemSize,\n height: token.itemSize,\n color: token.colorText,\n fontFamily: token.fontFamily,\n lineHeight: unit(token.itemSize),\n textAlign: 'center',\n verticalAlign: 'middle',\n listStyle: 'none',\n borderRadius: token.borderRadius,\n cursor: 'pointer',\n transition: `all ${token.motionDurationMid}`,\n },\n [`${componentCls}-prev, ${componentCls}-next`]: {\n outline: 0,\n button: {\n color: token.colorText,\n cursor: 'pointer',\n userSelect: 'none',\n },\n [`${componentCls}-item-link`]: {\n display: 'block',\n width: '100%',\n height: '100%',\n padding: 0,\n fontSize: token.fontSizeSM,\n textAlign: 'center',\n backgroundColor: 'transparent',\n border: `${unit(token.lineWidth)} ${token.lineType} transparent`,\n borderRadius: token.borderRadius,\n outline: 'none',\n transition: `all ${token.motionDurationMid}`,\n },\n [`&:hover ${componentCls}-item-link`]: {\n backgroundColor: token.colorBgTextHover,\n },\n [`&:active ${componentCls}-item-link`]: {\n backgroundColor: token.colorBgTextActive,\n },\n [`&${componentCls}-disabled:hover`]: {\n [`${componentCls}-item-link`]: {\n backgroundColor: 'transparent',\n },\n },\n },\n [`${componentCls}-slash`]: {\n marginInlineEnd: token.paginationSlashMarginInlineEnd,\n marginInlineStart: token.paginationSlashMarginInlineStart,\n },\n [`${componentCls}-options`]: {\n display: 'inline-block',\n marginInlineStart: token.margin,\n verticalAlign: 'middle',\n '&-size-changer': {\n display: 'inline-block',\n width: 'auto',\n },\n '&-quick-jumper': {\n display: 'inline-block',\n height: token.controlHeight,\n marginInlineStart: token.marginXS,\n lineHeight: unit(token.controlHeight),\n verticalAlign: 'top',\n input: Object.assign(Object.assign(Object.assign({}, genBasicInputStyle(token)), genBaseOutlinedStyle(token, {\n borderColor: token.colorBorder,\n hoverBorderColor: token.colorPrimaryHover,\n activeBorderColor: token.colorPrimary,\n activeShadow: token.activeShadow,\n })), { '&[disabled]': Object.assign({}, genDisabledStyle(token)), width: token.quickJumperInputWidth, height: token.controlHeight, boxSizing: 'border-box', margin: 0, marginInlineStart: token.marginXS, marginInlineEnd: token.marginXS }),\n },\n },\n };\n};\nconst genPaginationItemStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}-item`]: {\n display: 'inline-block',\n minWidth: token.itemSize,\n height: token.itemSize,\n marginInlineEnd: token.marginXS,\n fontFamily: token.fontFamily,\n lineHeight: unit(token.calc(token.itemSize).sub(2).equal()),\n textAlign: 'center',\n verticalAlign: 'middle',\n listStyle: 'none',\n backgroundColor: token.itemBg,\n border: `${unit(token.lineWidth)} ${token.lineType} transparent`,\n borderRadius: token.borderRadius,\n outline: 0,\n cursor: 'pointer',\n userSelect: 'none',\n a: {\n display: 'block',\n padding: `0 ${unit(token.paginationItemPaddingInline)}`,\n color: token.colorText,\n '&:hover': {\n textDecoration: 'none',\n },\n },\n [`&:not(${componentCls}-item-active)`]: {\n '&:hover': {\n transition: `all ${token.motionDurationMid}`,\n backgroundColor: token.colorBgTextHover,\n },\n '&:active': {\n backgroundColor: token.colorBgTextActive,\n },\n },\n '&-active': {\n fontWeight: token.fontWeightStrong,\n backgroundColor: token.itemActiveBg,\n borderColor: token.colorPrimary,\n a: {\n color: token.colorPrimary,\n },\n '&:hover': {\n borderColor: token.colorPrimaryHover,\n },\n '&:hover a': {\n color: token.colorPrimaryHover,\n },\n },\n },\n };\n};\nconst genPaginationStyle = (token) => {\n const { componentCls } = token;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), { display: 'flex', '&-start': {\n justifyContent: 'start',\n }, '&-center': {\n justifyContent: 'center',\n }, '&-end': {\n justifyContent: 'end',\n }, 'ul, ol': {\n margin: 0,\n padding: 0,\n listStyle: 'none',\n }, '&::after': {\n display: 'block',\n clear: 'both',\n height: 0,\n overflow: 'hidden',\n visibility: 'hidden',\n content: '\"\"',\n }, [`${componentCls}-total-text`]: {\n display: 'inline-block',\n height: token.itemSize,\n marginInlineEnd: token.marginXS,\n lineHeight: unit(token.calc(token.itemSize).sub(2).equal()),\n verticalAlign: 'middle',\n } }), genPaginationItemStyle(token)), genPaginationJumpStyle(token)), genPaginationSimpleStyle(token)), genPaginationMiniStyle(token)), genPaginationDisabledStyle(token)), { \n // media query style\n [`@media only screen and (max-width: ${token.screenLG}px)`]: {\n [`${componentCls}-item`]: {\n '&-after-jump-prev, &-before-jump-next': {\n display: 'none',\n },\n },\n }, [`@media only screen and (max-width: ${token.screenSM}px)`]: {\n [`${componentCls}-options`]: {\n display: 'none',\n },\n } }),\n // rtl style\n [`&${token.componentCls}-rtl`]: {\n direction: 'rtl',\n },\n };\n};\nconst genPaginationFocusStyle = (token) => {\n const { componentCls } = token;\n return {\n [`${componentCls}:not(${componentCls}-disabled)`]: {\n [`${componentCls}-item`]: Object.assign({}, genFocusStyle(token)),\n [`${componentCls}-jump-prev, ${componentCls}-jump-next`]: {\n '&:focus-visible': Object.assign({ [`${componentCls}-item-link-icon`]: {\n opacity: 1,\n }, [`${componentCls}-item-ellipsis`]: {\n opacity: 0,\n } }, genFocusOutline(token)),\n },\n [`${componentCls}-prev, ${componentCls}-next`]: {\n [`&:focus-visible ${componentCls}-item-link`]: genFocusOutline(token),\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => (Object.assign({ itemBg: token.colorBgContainer, itemSize: token.controlHeight, itemSizeSM: token.controlHeightSM, itemActiveBg: token.colorBgContainer, itemLinkBg: token.colorBgContainer, itemActiveColorDisabled: token.colorTextDisabled, itemActiveBgDisabled: token.controlItemBgActiveDisabled, itemInputBg: token.colorBgContainer, miniOptionsSizeChangerTop: 0 }, initComponentToken(token)));\nexport const prepareToken = (token) => mergeToken(token, {\n inputOutlineOffset: 0,\n quickJumperInputWidth: token.calc(token.controlHeightLG).mul(1.25).equal(),\n paginationMiniOptionsMarginInlineStart: token.calc(token.marginXXS).div(2).equal(),\n paginationMiniQuickJumperInputWidth: token.calc(token.controlHeightLG).mul(1.1).equal(),\n paginationItemPaddingInline: token.calc(token.marginXXS).mul(1.5).equal(),\n paginationEllipsisLetterSpacing: token.calc(token.marginXXS).div(2).equal(),\n paginationSlashMarginInlineStart: token.marginSM,\n paginationSlashMarginInlineEnd: token.marginSM,\n paginationEllipsisTextIndent: '0.13em', // magic for ui experience\n}, initInputToken(token));\n// ============================== Export ==============================\nexport default genStyleHooks('Pagination', (token) => {\n const paginationToken = prepareToken(token);\n return [genPaginationStyle(paginationToken), genPaginationFocusStyle(paginationToken)];\n}, prepareComponentToken);\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { initZoomMotion } from '../../style/motion';\nimport getArrowStyle, { getArrowOffsetToken, MAX_VERTICAL_CONTENT_RADIUS, } from '../../style/placementArrow';\nimport { getArrowToken } from '../../style/roundedArrow';\nimport { genPresetColor, genStyleHooks, mergeToken } from '../../theme/internal';\nconst genTooltipStyle = (token) => {\n const { calc, componentCls, // ant-tooltip\n tooltipMaxWidth, tooltipColor, tooltipBg, tooltipBorderRadius, zIndexPopup, controlHeight, boxShadowSecondary, paddingSM, paddingXS, arrowOffsetHorizontal, sizePopupArrow, } = token;\n // arrowOffsetHorizontal + arrowWidth + borderRadius\n const edgeAlignMinWidth = calc(tooltipBorderRadius)\n .add(sizePopupArrow)\n .add(arrowOffsetHorizontal)\n .equal();\n // borderRadius * 2 + arrowWidth\n const centerAlignMinWidth = calc(tooltipBorderRadius).mul(2).add(sizePopupArrow).equal();\n return [\n {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), { position: 'absolute', zIndex: zIndexPopup, display: 'block', width: 'max-content', maxWidth: tooltipMaxWidth, visibility: 'visible', \n // When use `autoArrow`, origin will follow the arrow position\n '--valid-offset-x': 'var(--arrow-offset-horizontal, var(--arrow-x))', transformOrigin: [`var(--valid-offset-x, 50%)`, `var(--arrow-y, 50%)`].join(' '), '&-hidden': {\n display: 'none',\n }, '--antd-arrow-background-color': tooltipBg, \n // Wrapper for the tooltip content\n [`${componentCls}-inner`]: {\n minWidth: centerAlignMinWidth,\n minHeight: controlHeight,\n padding: `${unit(token.calc(paddingSM).div(2).equal())} ${unit(paddingXS)}`,\n color: `var(--ant-tooltip-color, ${tooltipColor})`,\n textAlign: 'start',\n textDecoration: 'none',\n wordWrap: 'break-word',\n backgroundColor: tooltipBg,\n borderRadius: tooltipBorderRadius,\n boxShadow: boxShadowSecondary,\n boxSizing: 'border-box',\n }, \n // Align placement should have another min width\n [[\n `&-placement-topLeft`,\n `&-placement-topRight`,\n `&-placement-bottomLeft`,\n `&-placement-bottomRight`,\n ].join(',')]: {\n minWidth: edgeAlignMinWidth,\n }, \n // Limit left and right placement radius\n [[\n `&-placement-left`,\n `&-placement-leftTop`,\n `&-placement-leftBottom`,\n `&-placement-right`,\n `&-placement-rightTop`,\n `&-placement-rightBottom`,\n ].join(',')]: {\n [`${componentCls}-inner`]: {\n borderRadius: token.min(tooltipBorderRadius, MAX_VERTICAL_CONTENT_RADIUS),\n },\n }, [`${componentCls}-content`]: {\n position: 'relative',\n } }), genPresetColor(token, (colorKey, { darkColor }) => ({\n [`&${componentCls}-${colorKey}`]: {\n [`${componentCls}-inner`]: {\n backgroundColor: darkColor,\n },\n [`${componentCls}-arrow`]: {\n '--antd-arrow-background-color': darkColor,\n },\n },\n }))), { \n // RTL\n '&-rtl': {\n direction: 'rtl',\n } }),\n },\n // Arrow Style\n getArrowStyle(token, 'var(--antd-arrow-background-color)'),\n // Pure Render\n {\n [`${componentCls}-pure`]: {\n position: 'relative',\n maxWidth: 'none',\n margin: token.sizePopupArrow,\n },\n },\n ];\n};\n// ============================== Export ==============================\nexport const prepareComponentToken = (token) => (Object.assign(Object.assign({ zIndexPopup: token.zIndexPopupBase + 70 }, getArrowOffsetToken({\n contentRadius: token.borderRadius,\n limitVerticalRadius: true,\n})), getArrowToken(mergeToken(token, {\n borderRadiusOuter: Math.min(token.borderRadiusOuter, 4),\n}))));\nexport default (prefixCls, injectStyle = true) => {\n const useStyle = genStyleHooks('Tooltip', (token) => {\n const { borderRadius, colorTextLightSolid, colorBgSpotlight } = token;\n const TooltipToken = mergeToken(token, {\n // default variables\n tooltipMaxWidth: 250,\n tooltipColor: colorTextLightSolid,\n tooltipBorderRadius: borderRadius,\n tooltipBg: colorBgSpotlight,\n });\n return [genTooltipStyle(TooltipToken), initZoomMotion(token, 'zoom-big-fast')];\n }, prepareComponentToken, {\n resetStyle: false,\n // Popover use Tooltip as internal component. We do not need to handle this.\n injectStyle,\n });\n return useStyle(prefixCls);\n};\n","import { mergeToken } from '../../theme/internal';\nexport function initInputToken(token) {\n return mergeToken(token, {\n inputAffixPadding: token.paddingXXS,\n });\n}\nexport const initComponentToken = (token) => {\n const { controlHeight, fontSize, lineHeight, lineWidth, controlHeightSM, controlHeightLG, fontSizeLG, lineHeightLG, paddingSM, controlPaddingHorizontalSM, controlPaddingHorizontal, colorFillAlter, colorPrimaryHover, colorPrimary, controlOutlineWidth, controlOutline, colorErrorOutline, colorWarningOutline, colorBgContainer, inputFontSize, inputFontSizeLG, inputFontSizeSM, } = token;\n const mergedFontSize = inputFontSize || fontSize;\n const mergedFontSizeSM = inputFontSizeSM || mergedFontSize;\n const mergedFontSizeLG = inputFontSizeLG || fontSizeLG;\n const paddingBlock = Math.round(((controlHeight - mergedFontSize * lineHeight) / 2) * 10) / 10 - lineWidth;\n const paddingBlockSM = Math.round(((controlHeightSM - mergedFontSizeSM * lineHeight) / 2) * 10) / 10 - lineWidth;\n const paddingBlockLG = Math.ceil(((controlHeightLG - mergedFontSizeLG * lineHeightLG) / 2) * 10) / 10 - lineWidth;\n return {\n paddingBlock: Math.max(paddingBlock, 0),\n paddingBlockSM: Math.max(paddingBlockSM, 0),\n paddingBlockLG: Math.max(paddingBlockLG, 0),\n paddingInline: paddingSM - lineWidth,\n paddingInlineSM: controlPaddingHorizontalSM - lineWidth,\n paddingInlineLG: controlPaddingHorizontal - lineWidth,\n addonBg: colorFillAlter,\n activeBorderColor: colorPrimary,\n hoverBorderColor: colorPrimaryHover,\n activeShadow: `0 0 0 ${controlOutlineWidth}px ${controlOutline}`,\n errorActiveShadow: `0 0 0 ${controlOutlineWidth}px ${colorErrorOutline}`,\n warningActiveShadow: `0 0 0 ${controlOutlineWidth}px ${colorWarningOutline}`,\n hoverBg: colorBgContainer,\n activeBg: colorBgContainer,\n inputFontSize: mergedFontSize,\n inputFontSizeLG: mergedFontSizeLG,\n inputFontSizeSM: mergedFontSizeSM,\n };\n};\n","import { unit } from '@ant-design/cssinjs';\nimport { resetComponent } from '../../style';\nimport { genStyleHooks, mergeToken } from '../../theme/internal';\n// ============================== Shared ==============================\nconst genSharedBackTopStyle = (token) => {\n const { componentCls, backTopFontSize, backTopSize, zIndexPopup } = token;\n return {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), { position: 'fixed', insetInlineEnd: token.backTopInlineEnd, insetBlockEnd: token.backTopBlockEnd, zIndex: zIndexPopup, width: 40, height: 40, cursor: 'pointer', '&:empty': {\n display: 'none',\n }, [`${componentCls}-content`]: {\n width: backTopSize,\n height: backTopSize,\n overflow: 'hidden',\n color: token.backTopColor,\n textAlign: 'center',\n backgroundColor: token.backTopBackground,\n borderRadius: backTopSize,\n transition: `all ${token.motionDurationMid}`,\n '&:hover': {\n backgroundColor: token.backTopHoverBackground,\n transition: `all ${token.motionDurationMid}`,\n },\n }, \n // change to .backtop .backtop-icon\n [`${componentCls}-icon`]: {\n fontSize: backTopFontSize,\n lineHeight: unit(backTopSize),\n } }),\n };\n};\nconst genMediaBackTopStyle = (token) => {\n const { componentCls, screenMD, screenXS, backTopInlineEndMD, backTopInlineEndXS } = token;\n return {\n [`@media (max-width: ${unit(screenMD)})`]: {\n [componentCls]: {\n insetInlineEnd: backTopInlineEndMD,\n },\n },\n [`@media (max-width: ${unit(screenXS)})`]: {\n [componentCls]: {\n insetInlineEnd: backTopInlineEndXS,\n },\n },\n };\n};\nexport const prepareComponentToken = (token) => ({\n zIndexPopup: token.zIndexBase + 10,\n});\n// ============================== Export ==============================\nexport default genStyleHooks('BackTop', (token) => {\n const { fontSizeHeading3, colorTextDescription, colorTextLightSolid, colorText, controlHeightLG, calc, } = token;\n const backTopToken = mergeToken(token, {\n backTopBackground: colorTextDescription,\n backTopColor: colorTextLightSolid,\n backTopHoverBackground: colorText,\n backTopFontSize: fontSizeHeading3,\n backTopSize: controlHeightLG,\n backTopBlockEnd: calc(controlHeightLG).mul(1.25).equal(),\n backTopInlineEnd: calc(controlHeightLG).mul(2.5).equal(),\n backTopInlineEndMD: calc(controlHeightLG).mul(1.5).equal(),\n backTopInlineEndXS: calc(controlHeightLG).mul(0.5).equal(),\n });\n return [genSharedBackTopStyle(backTopToken), genMediaBackTopStyle(backTopToken)];\n}, prepareComponentToken);\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// [times, realValue]\n\nvar SPLIT = '%';\n\n/** Connect key with `SPLIT` */\nexport function pathKey(keys) {\n return keys.join(SPLIT);\n}\nvar Entity = /*#__PURE__*/function () {\n function Entity(instanceId) {\n _classCallCheck(this, Entity);\n _defineProperty(this, \"instanceId\", void 0);\n /** @private Internal cache map. Do not access this directly */\n _defineProperty(this, \"cache\", new Map());\n _defineProperty(this, \"extracted\", new Set());\n this.instanceId = instanceId;\n }\n _createClass(Entity, [{\n key: \"get\",\n value: function get(keys) {\n return this.opGet(pathKey(keys));\n }\n\n /** A fast get cache with `get` concat. */\n }, {\n key: \"opGet\",\n value: function opGet(keyPathStr) {\n return this.cache.get(keyPathStr) || null;\n }\n }, {\n key: \"update\",\n value: function update(keys, valueFn) {\n return this.opUpdate(pathKey(keys), valueFn);\n }\n\n /** A fast get cache with `get` concat. */\n }, {\n key: \"opUpdate\",\n value: function opUpdate(keyPathStr, valueFn) {\n var prevValue = this.cache.get(keyPathStr);\n var nextValue = valueFn(prevValue);\n if (nextValue === null) {\n this.cache.delete(keyPathStr);\n } else {\n this.cache.set(keyPathStr, nextValue);\n }\n }\n }]);\n return Entity;\n}();\nexport default Entity;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport * as React from 'react';\nimport CacheEntity from \"./Cache\";\nexport var ATTR_TOKEN = 'data-token-hash';\nexport var ATTR_MARK = 'data-css-hash';\nexport var ATTR_CACHE_PATH = 'data-cache-path';\n\n// Mark css-in-js instance in style element\nexport var CSS_IN_JS_INSTANCE = '__cssinjs_instance__';\nexport function createCache() {\n var cssinjsInstanceId = Math.random().toString(12).slice(2);\n\n // Tricky SSR: Move all inline style to the head.\n // PS: We do not recommend tricky mode.\n if (typeof document !== 'undefined' && document.head && document.body) {\n var styles = document.body.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\")) || [];\n var firstChild = document.head.firstChild;\n Array.from(styles).forEach(function (style) {\n style[CSS_IN_JS_INSTANCE] = style[CSS_IN_JS_INSTANCE] || cssinjsInstanceId;\n\n // Not force move if no head\n if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n document.head.insertBefore(style, firstChild);\n }\n });\n\n // Deduplicate of moved styles\n var styleHash = {};\n Array.from(document.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\"))).forEach(function (style) {\n var hash = style.getAttribute(ATTR_MARK);\n if (styleHash[hash]) {\n if (style[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {\n var _style$parentNode;\n (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 || _style$parentNode.removeChild(style);\n }\n } else {\n styleHash[hash] = true;\n }\n });\n }\n return new CacheEntity(cssinjsInstanceId);\n}\nvar StyleContext = /*#__PURE__*/React.createContext({\n hashPriority: 'low',\n cache: createCache(),\n defaultCache: true\n});\nexport var StyleProvider = function StyleProvider(props) {\n var children = props.children,\n restProps = _objectWithoutProperties(props, _excluded);\n var parentContext = React.useContext(StyleContext);\n var context = useMemo(function () {\n var mergedContext = _objectSpread({}, parentContext);\n Object.keys(restProps).forEach(function (key) {\n var value = restProps[key];\n if (restProps[key] !== undefined) {\n mergedContext[key] = value;\n }\n });\n var cache = restProps.cache;\n mergedContext.cache = mergedContext.cache || createCache();\n mergedContext.defaultCache = !cache && parentContext.defaultCache;\n return mergedContext;\n }, [parentContext, restProps], function (prev, next) {\n return !isEqual(prev[0], next[0], true) || !isEqual(prev[1], next[1], true);\n });\n return /*#__PURE__*/React.createElement(StyleContext.Provider, {\n value: context\n }, children);\n};\nexport default StyleContext;","import _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nvar AbstractCalculator = /*#__PURE__*/_createClass(function AbstractCalculator() {\n _classCallCheck(this, AbstractCalculator);\n});\nexport default AbstractCalculator;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar CALC_UNIT = 'CALC_UNIT';\nvar regexp = new RegExp(CALC_UNIT, 'g');\nfunction unit(value) {\n if (typeof value === 'number') {\n return \"\".concat(value).concat(CALC_UNIT);\n }\n return value;\n}\nvar CSSCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n _inherits(CSSCalculator, _AbstractCalculator);\n var _super = _createSuper(CSSCalculator);\n function CSSCalculator(num, unitlessCssVar) {\n var _this;\n _classCallCheck(this, CSSCalculator);\n _this = _super.call(this);\n _defineProperty(_assertThisInitialized(_this), \"result\", '');\n _defineProperty(_assertThisInitialized(_this), \"unitlessCssVar\", void 0);\n _defineProperty(_assertThisInitialized(_this), \"lowPriority\", void 0);\n var numType = _typeof(num);\n _this.unitlessCssVar = unitlessCssVar;\n if (num instanceof CSSCalculator) {\n _this.result = \"(\".concat(num.result, \")\");\n } else if (numType === 'number') {\n _this.result = unit(num);\n } else if (numType === 'string') {\n _this.result = num;\n }\n return _this;\n }\n _createClass(CSSCalculator, [{\n key: \"add\",\n value: function add(num) {\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" + \").concat(num.getResult());\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" + \").concat(unit(num));\n }\n this.lowPriority = true;\n return this;\n }\n }, {\n key: \"sub\",\n value: function sub(num) {\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" - \").concat(num.getResult());\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" - \").concat(unit(num));\n }\n this.lowPriority = true;\n return this;\n }\n }, {\n key: \"mul\",\n value: function mul(num) {\n if (this.lowPriority) {\n this.result = \"(\".concat(this.result, \")\");\n }\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" * \").concat(num.getResult(true));\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" * \").concat(num);\n }\n this.lowPriority = false;\n return this;\n }\n }, {\n key: \"div\",\n value: function div(num) {\n if (this.lowPriority) {\n this.result = \"(\".concat(this.result, \")\");\n }\n if (num instanceof CSSCalculator) {\n this.result = \"\".concat(this.result, \" / \").concat(num.getResult(true));\n } else if (typeof num === 'number' || typeof num === 'string') {\n this.result = \"\".concat(this.result, \" / \").concat(num);\n }\n this.lowPriority = false;\n return this;\n }\n }, {\n key: \"getResult\",\n value: function getResult(force) {\n return this.lowPriority || force ? \"(\".concat(this.result, \")\") : this.result;\n }\n }, {\n key: \"equal\",\n value: function equal(options) {\n var _this2 = this;\n var _ref = options || {},\n cssUnit = _ref.unit;\n var mergedUnit = true;\n if (typeof cssUnit === 'boolean') {\n mergedUnit = cssUnit;\n } else if (Array.from(this.unitlessCssVar).some(function (cssVar) {\n return _this2.result.includes(cssVar);\n })) {\n mergedUnit = false;\n }\n this.result = this.result.replace(regexp, mergedUnit ? 'px' : '');\n if (typeof this.lowPriority !== 'undefined') {\n return \"calc(\".concat(this.result, \")\");\n }\n return this.result;\n }\n }]);\n return CSSCalculator;\n}(AbstractCalculator);\nexport { CSSCalculator as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AbstractCalculator from \"./calculator\";\nvar NumCalculator = /*#__PURE__*/function (_AbstractCalculator) {\n _inherits(NumCalculator, _AbstractCalculator);\n var _super = _createSuper(NumCalculator);\n function NumCalculator(num) {\n var _this;\n _classCallCheck(this, NumCalculator);\n _this = _super.call(this);\n _defineProperty(_assertThisInitialized(_this), \"result\", 0);\n if (num instanceof NumCalculator) {\n _this.result = num.result;\n } else if (typeof num === 'number') {\n _this.result = num;\n }\n return _this;\n }\n _createClass(NumCalculator, [{\n key: \"add\",\n value: function add(num) {\n if (num instanceof NumCalculator) {\n this.result += num.result;\n } else if (typeof num === 'number') {\n this.result += num;\n }\n return this;\n }\n }, {\n key: \"sub\",\n value: function sub(num) {\n if (num instanceof NumCalculator) {\n this.result -= num.result;\n } else if (typeof num === 'number') {\n this.result -= num;\n }\n return this;\n }\n }, {\n key: \"mul\",\n value: function mul(num) {\n if (num instanceof NumCalculator) {\n this.result *= num.result;\n } else if (typeof num === 'number') {\n this.result *= num;\n }\n return this;\n }\n }, {\n key: \"div\",\n value: function div(num) {\n if (num instanceof NumCalculator) {\n this.result /= num.result;\n } else if (typeof num === 'number') {\n this.result /= num;\n }\n return this;\n }\n }, {\n key: \"equal\",\n value: function equal() {\n return this.result;\n }\n }]);\n return NumCalculator;\n}(AbstractCalculator);\nexport { NumCalculator as default };","import CSSCalculator from \"./CSSCalculator\";\nimport NumCalculator from \"./NumCalculator\";\nvar genCalc = function genCalc(type, unitlessCssVar) {\n var Calculator = type === 'css' ? CSSCalculator : NumCalculator;\n return function (num) {\n return new Calculator(num, unitlessCssVar);\n };\n};\nexport default genCalc;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// ================================== Cache ==================================\n\nexport function sameDerivativeOption(left, right) {\n if (left.length !== right.length) {\n return false;\n }\n for (var i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) {\n return false;\n }\n }\n return true;\n}\nvar ThemeCache = /*#__PURE__*/function () {\n function ThemeCache() {\n _classCallCheck(this, ThemeCache);\n _defineProperty(this, \"cache\", void 0);\n _defineProperty(this, \"keys\", void 0);\n _defineProperty(this, \"cacheCallTimes\", void 0);\n this.cache = new Map();\n this.keys = [];\n this.cacheCallTimes = 0;\n }\n _createClass(ThemeCache, [{\n key: \"size\",\n value: function size() {\n return this.keys.length;\n }\n }, {\n key: \"internalGet\",\n value: function internalGet(derivativeOption) {\n var _cache2, _cache3;\n var updateCallTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var cache = {\n map: this.cache\n };\n derivativeOption.forEach(function (derivative) {\n if (!cache) {\n cache = undefined;\n } else {\n var _cache;\n cache = (_cache = cache) === null || _cache === void 0 || (_cache = _cache.map) === null || _cache === void 0 ? void 0 : _cache.get(derivative);\n }\n });\n if ((_cache2 = cache) !== null && _cache2 !== void 0 && _cache2.value && updateCallTimes) {\n cache.value[1] = this.cacheCallTimes++;\n }\n return (_cache3 = cache) === null || _cache3 === void 0 ? void 0 : _cache3.value;\n }\n }, {\n key: \"get\",\n value: function get(derivativeOption) {\n var _this$internalGet;\n return (_this$internalGet = this.internalGet(derivativeOption, true)) === null || _this$internalGet === void 0 ? void 0 : _this$internalGet[0];\n }\n }, {\n key: \"has\",\n value: function has(derivativeOption) {\n return !!this.internalGet(derivativeOption);\n }\n }, {\n key: \"set\",\n value: function set(derivativeOption, value) {\n var _this = this;\n // New cache\n if (!this.has(derivativeOption)) {\n if (this.size() + 1 > ThemeCache.MAX_CACHE_SIZE + ThemeCache.MAX_CACHE_OFFSET) {\n var _this$keys$reduce = this.keys.reduce(function (result, key) {\n var _result = _slicedToArray(result, 2),\n callTimes = _result[1];\n if (_this.internalGet(key)[1] < callTimes) {\n return [key, _this.internalGet(key)[1]];\n }\n return result;\n }, [this.keys[0], this.cacheCallTimes]),\n _this$keys$reduce2 = _slicedToArray(_this$keys$reduce, 1),\n targetKey = _this$keys$reduce2[0];\n this.delete(targetKey);\n }\n this.keys.push(derivativeOption);\n }\n var cache = this.cache;\n derivativeOption.forEach(function (derivative, index) {\n if (index === derivativeOption.length - 1) {\n cache.set(derivative, {\n value: [value, _this.cacheCallTimes++]\n });\n } else {\n var cacheValue = cache.get(derivative);\n if (!cacheValue) {\n cache.set(derivative, {\n map: new Map()\n });\n } else if (!cacheValue.map) {\n cacheValue.map = new Map();\n }\n cache = cache.get(derivative).map;\n }\n });\n }\n }, {\n key: \"deleteByPath\",\n value: function deleteByPath(currentCache, derivatives) {\n var cache = currentCache.get(derivatives[0]);\n if (derivatives.length === 1) {\n var _cache$value;\n if (!cache.map) {\n currentCache.delete(derivatives[0]);\n } else {\n currentCache.set(derivatives[0], {\n map: cache.map\n });\n }\n return (_cache$value = cache.value) === null || _cache$value === void 0 ? void 0 : _cache$value[0];\n }\n var result = this.deleteByPath(cache.map, derivatives.slice(1));\n if ((!cache.map || cache.map.size === 0) && !cache.value) {\n currentCache.delete(derivatives[0]);\n }\n return result;\n }\n }, {\n key: \"delete\",\n value: function _delete(derivativeOption) {\n // If cache exists\n if (this.has(derivativeOption)) {\n this.keys = this.keys.filter(function (item) {\n return !sameDerivativeOption(item, derivativeOption);\n });\n return this.deleteByPath(this.cache, derivativeOption);\n }\n return undefined;\n }\n }]);\n return ThemeCache;\n}();\n_defineProperty(ThemeCache, \"MAX_CACHE_SIZE\", 20);\n_defineProperty(ThemeCache, \"MAX_CACHE_OFFSET\", 5);\nexport { ThemeCache as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { warning } from \"rc-util/es/warning\";\nvar uuid = 0;\n\n/**\n * Theme with algorithms to derive tokens from design tokens.\n * Use `createTheme` first which will help to manage the theme instance cache.\n */\nvar Theme = /*#__PURE__*/function () {\n function Theme(derivatives) {\n _classCallCheck(this, Theme);\n _defineProperty(this, \"derivatives\", void 0);\n _defineProperty(this, \"id\", void 0);\n this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives];\n this.id = uuid;\n if (derivatives.length === 0) {\n warning(derivatives.length > 0, '[Ant Design CSS-in-JS] Theme should have at least one derivative function.');\n }\n uuid += 1;\n }\n _createClass(Theme, [{\n key: \"getDerivativeToken\",\n value: function getDerivativeToken(token) {\n return this.derivatives.reduce(function (result, derivative) {\n return derivative(token, result);\n }, undefined);\n }\n }]);\n return Theme;\n}();\nexport { Theme as default };","import ThemeCache from \"./ThemeCache\";\nimport Theme from \"./Theme\";\nvar cacheThemes = new ThemeCache();\n\n/**\n * Same as new Theme, but will always return same one if `derivative` not changed.\n */\nexport default function createTheme(derivatives) {\n var derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives];\n // Create new theme if not exist\n if (!cacheThemes.has(derivativeArr)) {\n cacheThemes.set(derivativeArr, new Theme(derivativeArr));\n }\n\n // Get theme from cache and return\n return cacheThemes.get(derivativeArr);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { ATTR_MARK, ATTR_TOKEN } from \"../StyleContext\";\nimport { Theme } from \"../theme\";\n\n// Create a cache for memo concat\n\nvar resultCache = new WeakMap();\nvar RESULT_VALUE = {};\nexport function memoResult(callback, deps) {\n var current = resultCache;\n for (var i = 0; i < deps.length; i += 1) {\n var dep = deps[i];\n if (!current.has(dep)) {\n current.set(dep, new WeakMap());\n }\n current = current.get(dep);\n }\n if (!current.has(RESULT_VALUE)) {\n current.set(RESULT_VALUE, callback());\n }\n return current.get(RESULT_VALUE);\n}\n\n// Create a cache here to avoid always loop generate\nvar flattenTokenCache = new WeakMap();\n\n/**\n * Flatten token to string, this will auto cache the result when token not change\n */\nexport function flattenToken(token) {\n var str = flattenTokenCache.get(token) || '';\n if (!str) {\n Object.keys(token).forEach(function (key) {\n var value = token[key];\n str += key;\n if (value instanceof Theme) {\n str += value.id;\n } else if (value && _typeof(value) === 'object') {\n str += flattenToken(value);\n } else {\n str += value;\n }\n });\n\n // https://github.com/ant-design/ant-design/issues/48386\n // Should hash the string to avoid style tag name too long\n str = hash(str);\n\n // Put in cache\n flattenTokenCache.set(token, str);\n }\n return str;\n}\n\n/**\n * Convert derivative token to key string\n */\nexport function token2key(token, salt) {\n return hash(\"\".concat(salt, \"_\").concat(flattenToken(token)));\n}\nvar randomSelectorKey = \"random-\".concat(Date.now(), \"-\").concat(Math.random()).replace(/\\./g, '');\n\n// Magic `content` for detect selector support\nvar checkContent = '_bAmBoO_';\nfunction supportSelector(styleStr, handleElement, supportCheck) {\n if (canUseDom()) {\n var _getComputedStyle$con, _ele$parentNode;\n updateCSS(styleStr, randomSelectorKey);\n var _ele = document.createElement('div');\n _ele.style.position = 'fixed';\n _ele.style.left = '0';\n _ele.style.top = '0';\n handleElement === null || handleElement === void 0 || handleElement(_ele);\n document.body.appendChild(_ele);\n if (process.env.NODE_ENV !== 'production') {\n _ele.innerHTML = 'Test';\n _ele.style.zIndex = '9999999';\n }\n var support = supportCheck ? supportCheck(_ele) : (_getComputedStyle$con = getComputedStyle(_ele).content) === null || _getComputedStyle$con === void 0 ? void 0 : _getComputedStyle$con.includes(checkContent);\n (_ele$parentNode = _ele.parentNode) === null || _ele$parentNode === void 0 || _ele$parentNode.removeChild(_ele);\n removeCSS(randomSelectorKey);\n return support;\n }\n return false;\n}\nvar canLayer = undefined;\nexport function supportLayer() {\n if (canLayer === undefined) {\n canLayer = supportSelector(\"@layer \".concat(randomSelectorKey, \" { .\").concat(randomSelectorKey, \" { content: \\\"\").concat(checkContent, \"\\\"!important; } }\"), function (ele) {\n ele.className = randomSelectorKey;\n });\n }\n return canLayer;\n}\nvar canWhere = undefined;\nexport function supportWhere() {\n if (canWhere === undefined) {\n canWhere = supportSelector(\":where(.\".concat(randomSelectorKey, \") { content: \\\"\").concat(checkContent, \"\\\"!important; }\"), function (ele) {\n ele.className = randomSelectorKey;\n });\n }\n return canWhere;\n}\nvar canLogic = undefined;\nexport function supportLogicProps() {\n if (canLogic === undefined) {\n canLogic = supportSelector(\".\".concat(randomSelectorKey, \" { inset-block: 93px !important; }\"), function (ele) {\n ele.className = randomSelectorKey;\n }, function (ele) {\n return getComputedStyle(ele).bottom === '93px';\n });\n }\n return canLogic;\n}\nexport var isClientSide = canUseDom();\nexport function unit(num) {\n if (typeof num === 'number') {\n return \"\".concat(num, \"px\");\n }\n return num;\n}\nexport function toStyleStr(style, tokenKey, styleId) {\n var customizeAttrs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var plain = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (plain) {\n return style;\n }\n var attrs = _objectSpread(_objectSpread({}, customizeAttrs), {}, _defineProperty(_defineProperty({}, ATTR_TOKEN, tokenKey), ATTR_MARK, styleId));\n var attrStr = Object.keys(attrs).map(function (attr) {\n var val = attrs[attr];\n return val ? \"\".concat(attr, \"=\\\"\").concat(val, \"\\\"\") : null;\n }).filter(function (v) {\n return v;\n }).join(' ');\n return \"\");\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nexport var token2CSSVar = function token2CSSVar(token) {\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return \"--\".concat(prefix ? \"\".concat(prefix, \"-\") : '').concat(token).replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, '$1-$2').replace(/([a-z])([A-Z0-9])/g, '$1-$2').toLowerCase();\n};\nexport var serializeCSSVar = function serializeCSSVar(cssVars, hashId, options) {\n if (!Object.keys(cssVars).length) {\n return '';\n }\n return \".\".concat(hashId).concat(options !== null && options !== void 0 && options.scope ? \".\".concat(options.scope) : '', \"{\").concat(Object.entries(cssVars).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n return \"\".concat(key, \":\").concat(value, \";\");\n }).join(''), \"}\");\n};\nexport var transformToken = function transformToken(token, themeKey, config) {\n var cssVars = {};\n var result = {};\n Object.entries(token).forEach(function (_ref3) {\n var _config$preserve, _config$ignore;\n var _ref4 = _slicedToArray(_ref3, 2),\n key = _ref4[0],\n value = _ref4[1];\n if (config !== null && config !== void 0 && (_config$preserve = config.preserve) !== null && _config$preserve !== void 0 && _config$preserve[key]) {\n result[key] = value;\n } else if ((typeof value === 'string' || typeof value === 'number') && !(config !== null && config !== void 0 && (_config$ignore = config.ignore) !== null && _config$ignore !== void 0 && _config$ignore[key])) {\n var _config$unitless;\n var cssVar = token2CSSVar(key, config === null || config === void 0 ? void 0 : config.prefix);\n cssVars[cssVar] = typeof value === 'number' && !(config !== null && config !== void 0 && (_config$unitless = config.unitless) !== null && _config$unitless !== void 0 && _config$unitless[key]) ? \"\".concat(value, \"px\") : String(value);\n result[key] = \"var(\".concat(cssVar, \")\");\n }\n });\n return [result, serializeCSSVar(cssVars, themeKey, {\n scope: config === null || config === void 0 ? void 0 : config.scope\n })];\n};","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// import canUseDom from 'rc-util/lib/Dom/canUseDom';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport * as React from 'react';\n\n// We need fully clone React function here\n// to avoid webpack warning React 17 do not export `useId`\nvar fullClone = _objectSpread({}, React);\nvar useInsertionEffect = fullClone.useInsertionEffect;\n/**\n * Polyfill `useInsertionEffect` for React < 18\n * @param renderEffect will be executed in `useMemo`, and do not have callback\n * @param effect will be executed in `useLayoutEffect`\n * @param deps\n */\nvar useInsertionEffectPolyfill = function useInsertionEffectPolyfill(renderEffect, effect, deps) {\n React.useMemo(renderEffect, deps);\n useLayoutEffect(function () {\n return effect(true);\n }, deps);\n};\n\n/**\n * Compatible `useInsertionEffect`\n * will use `useInsertionEffect` if React version >= 18,\n * otherwise use `useInsertionEffectPolyfill`.\n */\nvar useCompatibleInsertionEffect = useInsertionEffect ? function (renderEffect, effect, deps) {\n return useInsertionEffect(function () {\n renderEffect();\n return effect();\n }, deps);\n} : useInsertionEffectPolyfill;\nexport default useCompatibleInsertionEffect;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { warning } from \"rc-util/es/warning\";\nimport * as React from 'react';\nvar fullClone = _objectSpread({}, React);\nvar useInsertionEffect = fullClone.useInsertionEffect;\n\n// DO NOT register functions in useEffect cleanup function, or functions that registered will never be called.\nvar useCleanupRegister = function useCleanupRegister(deps) {\n var effectCleanups = [];\n var cleanupFlag = false;\n function register(fn) {\n if (cleanupFlag) {\n if (process.env.NODE_ENV !== 'production') {\n warning(false, '[Ant Design CSS-in-JS] You are registering a cleanup function after unmount, which will not have any effect.');\n }\n return;\n }\n effectCleanups.push(fn);\n }\n React.useEffect(function () {\n // Compatible with strict mode\n cleanupFlag = false;\n return function () {\n cleanupFlag = true;\n if (effectCleanups.length) {\n effectCleanups.forEach(function (fn) {\n return fn();\n });\n }\n };\n }, deps);\n return register;\n};\nvar useRun = function useRun() {\n return function (fn) {\n fn();\n };\n};\n\n// Only enable register in React 18\nvar useEffectCleanupRegister = typeof useInsertionEffect !== 'undefined' ? useCleanupRegister : useRun;\nexport default useEffectCleanupRegister;","function useProdHMR() {\n return false;\n}\nvar webpackHMR = false;\nfunction useDevHMR() {\n return webpackHMR;\n}\nexport default process.env.NODE_ENV === 'production' ? useProdHMR : useDevHMR;\n\n// Webpack `module.hot.accept` do not support any deps update trigger\n// We have to hack handler to force mark as HRM\nif (process.env.NODE_ENV !== 'production' && typeof module !== 'undefined' && module && module.hot && typeof window !== 'undefined') {\n // Use `globalThis` first, and `window` for older browsers\n // const win = globalThis as any;\n var win = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : null;\n if (win && typeof win.webpackHotUpdate === 'function') {\n var originWebpackHotUpdate = win.webpackHotUpdate;\n win.webpackHotUpdate = function () {\n webpackHMR = true;\n setTimeout(function () {\n webpackHMR = false;\n }, 0);\n return originWebpackHotUpdate.apply(void 0, arguments);\n };\n }\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport { pathKey } from \"../Cache\";\nimport StyleContext from \"../StyleContext\";\nimport useCompatibleInsertionEffect from \"./useCompatibleInsertionEffect\";\nimport useEffectCleanupRegister from \"./useEffectCleanupRegister\";\nimport useHMR from \"./useHMR\";\nexport default function useGlobalCache(prefix, keyPath, cacheFn, onCacheRemove,\n// Add additional effect trigger by `useInsertionEffect`\nonCacheEffect) {\n var _React$useContext = React.useContext(StyleContext),\n globalCache = _React$useContext.cache;\n var fullPath = [prefix].concat(_toConsumableArray(keyPath));\n var fullPathStr = pathKey(fullPath);\n var register = useEffectCleanupRegister([fullPathStr]);\n var HMRUpdate = useHMR();\n var buildCache = function buildCache(updater) {\n globalCache.opUpdate(fullPathStr, function (prevCache) {\n var _ref = prevCache || [undefined, undefined],\n _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n times = _ref2$ === void 0 ? 0 : _ref2$,\n cache = _ref2[1];\n\n // HMR should always ignore cache since developer may change it\n var tmpCache = cache;\n if (process.env.NODE_ENV !== 'production' && cache && HMRUpdate) {\n onCacheRemove === null || onCacheRemove === void 0 || onCacheRemove(tmpCache, HMRUpdate);\n tmpCache = null;\n }\n var mergedCache = tmpCache || cacheFn();\n var data = [times, mergedCache];\n\n // Call updater if need additional logic\n return updater ? updater(data) : data;\n });\n };\n\n // Create cache\n React.useMemo(function () {\n buildCache();\n }, /* eslint-disable react-hooks/exhaustive-deps */\n [fullPathStr]\n /* eslint-enable */);\n var cacheEntity = globalCache.opGet(fullPathStr);\n\n // HMR clean the cache but not trigger `useMemo` again\n // Let's fallback of this\n // ref https://github.com/ant-design/cssinjs/issues/127\n if (process.env.NODE_ENV !== 'production' && !cacheEntity) {\n buildCache();\n cacheEntity = globalCache.opGet(fullPathStr);\n }\n var cacheContent = cacheEntity[1];\n\n // Remove if no need anymore\n useCompatibleInsertionEffect(function () {\n onCacheEffect === null || onCacheEffect === void 0 || onCacheEffect(cacheContent);\n }, function (polyfill) {\n // It's bad to call build again in effect.\n // But we have to do this since StrictMode will call effect twice\n // which will clear cache on the first time.\n buildCache(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n times = _ref4[0],\n cache = _ref4[1];\n if (polyfill && times === 0) {\n onCacheEffect === null || onCacheEffect === void 0 || onCacheEffect(cacheContent);\n }\n return [times + 1, cache];\n });\n return function () {\n globalCache.opUpdate(fullPathStr, function (prevCache) {\n var _ref5 = prevCache || [],\n _ref6 = _slicedToArray(_ref5, 2),\n _ref6$ = _ref6[0],\n times = _ref6$ === void 0 ? 0 : _ref6$,\n cache = _ref6[1];\n var nextCount = times - 1;\n if (nextCount === 0) {\n // Always remove styles in useEffect callback\n register(function () {\n // With polyfill, registered callback will always be called synchronously\n // But without polyfill, it will be called in effect clean up,\n // And by that time this cache is cleaned up.\n if (polyfill || !globalCache.opGet(fullPathStr)) {\n onCacheRemove === null || onCacheRemove === void 0 || onCacheRemove(cache, false);\n }\n });\n return null;\n }\n return [times - 1, cache];\n });\n };\n }, [fullPathStr]);\n return cacheContent;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport hash from '@emotion/hash';\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { useContext } from 'react';\nimport StyleContext, { ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE } from \"../StyleContext\";\nimport { flattenToken, memoResult, token2key, toStyleStr } from \"../util\";\nimport { transformToken } from \"../util/css-variables\";\nimport useGlobalCache from \"./useGlobalCache\";\nvar EMPTY_OVERRIDE = {};\n\n// Generate different prefix to make user selector break in production env.\n// This helps developer not to do style override directly on the hash id.\nvar hashPrefix = process.env.NODE_ENV !== 'production' ? 'css-dev-only-do-not-override' : 'css';\nvar tokenKeys = new Map();\nfunction recordCleanToken(tokenKey) {\n tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) + 1);\n}\nfunction removeStyleTags(key, instanceId) {\n if (typeof document !== 'undefined') {\n var styles = document.querySelectorAll(\"style[\".concat(ATTR_TOKEN, \"=\\\"\").concat(key, \"\\\"]\"));\n styles.forEach(function (style) {\n if (style[CSS_IN_JS_INSTANCE] === instanceId) {\n var _style$parentNode;\n (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 || _style$parentNode.removeChild(style);\n }\n });\n }\n}\nvar TOKEN_THRESHOLD = 0;\n\n// Remove will check current keys first\nfunction cleanTokenStyle(tokenKey, instanceId) {\n tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) - 1);\n var cleanableKeyList = new Set();\n tokenKeys.forEach(function (value, key) {\n if (value <= 0) cleanableKeyList.add(key);\n });\n\n // Should keep tokens under threshold for not to insert style too often\n if (tokenKeys.size - cleanableKeyList.size > TOKEN_THRESHOLD) {\n cleanableKeyList.forEach(function (key) {\n removeStyleTags(key, instanceId);\n tokenKeys.delete(key);\n });\n }\n}\nexport var getComputedToken = function getComputedToken(originToken, overrideToken, theme, format) {\n var derivativeToken = theme.getDerivativeToken(originToken);\n\n // Merge with override\n var mergedDerivativeToken = _objectSpread(_objectSpread({}, derivativeToken), overrideToken);\n\n // Format if needed\n if (format) {\n mergedDerivativeToken = format(mergedDerivativeToken);\n }\n return mergedDerivativeToken;\n};\nexport var TOKEN_PREFIX = 'token';\n/**\n * Cache theme derivative token as global shared one\n * @param theme Theme entity\n * @param tokens List of tokens, used for cache. Please do not dynamic generate object directly\n * @param option Additional config\n * @returns Call Theme.getDerivativeToken(tokenObject) to get token\n */\nexport default function useCacheToken(theme, tokens) {\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _useContext = useContext(StyleContext),\n instanceId = _useContext.cache.instanceId,\n container = _useContext.container;\n var _option$salt = option.salt,\n salt = _option$salt === void 0 ? '' : _option$salt,\n _option$override = option.override,\n override = _option$override === void 0 ? EMPTY_OVERRIDE : _option$override,\n formatToken = option.formatToken,\n compute = option.getComputedToken,\n cssVar = option.cssVar;\n\n // Basic - We do basic cache here\n var mergedToken = memoResult(function () {\n return Object.assign.apply(Object, [{}].concat(_toConsumableArray(tokens)));\n }, tokens);\n var tokenStr = flattenToken(mergedToken);\n var overrideTokenStr = flattenToken(override);\n var cssVarStr = cssVar ? flattenToken(cssVar) : '';\n var cachedToken = useGlobalCache(TOKEN_PREFIX, [salt, theme.id, tokenStr, overrideTokenStr, cssVarStr], function () {\n var _cssVar$key;\n var mergedDerivativeToken = compute ? compute(mergedToken, override, theme) : getComputedToken(mergedToken, override, theme, formatToken);\n\n // Replace token value with css variables\n var actualToken = _objectSpread({}, mergedDerivativeToken);\n var cssVarsStr = '';\n if (!!cssVar) {\n var _transformToken = transformToken(mergedDerivativeToken, cssVar.key, {\n prefix: cssVar.prefix,\n ignore: cssVar.ignore,\n unitless: cssVar.unitless,\n preserve: cssVar.preserve\n });\n var _transformToken2 = _slicedToArray(_transformToken, 2);\n mergedDerivativeToken = _transformToken2[0];\n cssVarsStr = _transformToken2[1];\n }\n\n // Optimize for `useStyleRegister` performance\n var tokenKey = token2key(mergedDerivativeToken, salt);\n mergedDerivativeToken._tokenKey = tokenKey;\n actualToken._tokenKey = token2key(actualToken, salt);\n var themeKey = (_cssVar$key = cssVar === null || cssVar === void 0 ? void 0 : cssVar.key) !== null && _cssVar$key !== void 0 ? _cssVar$key : tokenKey;\n mergedDerivativeToken._themeKey = themeKey;\n recordCleanToken(themeKey);\n var hashId = \"\".concat(hashPrefix, \"-\").concat(hash(tokenKey));\n mergedDerivativeToken._hashId = hashId; // Not used\n\n return [mergedDerivativeToken, hashId, actualToken, cssVarsStr, (cssVar === null || cssVar === void 0 ? void 0 : cssVar.key) || ''];\n }, function (cache) {\n // Remove token will remove all related style\n cleanTokenStyle(cache[0]._themeKey, instanceId);\n }, function (_ref) {\n var _ref2 = _slicedToArray(_ref, 4),\n token = _ref2[0],\n cssVarsStr = _ref2[3];\n if (cssVar && cssVarsStr) {\n var style = updateCSS(cssVarsStr, hash(\"css-variables-\".concat(token._themeKey)), {\n mark: ATTR_MARK,\n prepend: 'queue',\n attachTo: container,\n priority: -999\n });\n style[CSS_IN_JS_INSTANCE] = instanceId;\n\n // Used for `useCacheToken` to remove on batch when token removed\n style.setAttribute(ATTR_TOKEN, token._themeKey);\n }\n });\n return cachedToken;\n}\nexport var extract = function extract(cache, effectStyles, options) {\n var _cache = _slicedToArray(cache, 5),\n realToken = _cache[2],\n styleStr = _cache[3],\n cssVarKey = _cache[4];\n var _ref3 = options || {},\n plain = _ref3.plain;\n if (!styleStr) {\n return null;\n }\n var styleId = realToken._tokenKey;\n var order = -999;\n\n // ====================== Style ======================\n // Used for rc-util\n var sharedAttrs = {\n 'data-rc-order': 'prependQueue',\n 'data-rc-priority': \"\".concat(order)\n };\n var styleText = toStyleStr(styleStr, cssVarKey, styleId, sharedAttrs, plain);\n return [order, styleId, styleText];\n};","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n","import devWarning from \"rc-util/es/warning\";\nexport function lintWarning(message, info) {\n var path = info.path,\n parentSelectors = info.parentSelectors;\n devWarning(false, \"[Ant Design CSS-in-JS] \".concat(path ? \"Error in \".concat(path, \": \") : '').concat(message).concat(parentSelectors.length ? \" Selector: \".concat(parentSelectors.join(' | ')) : ''));\n}","import { lintWarning } from \"./utils\";\nfunction isConcatSelector(selector) {\n var _selector$match;\n var notContent = ((_selector$match = selector.match(/:not\\(([^)]*)\\)/)) === null || _selector$match === void 0 ? void 0 : _selector$match[1]) || '';\n\n // split selector. e.g.\n // `h1#a.b` => ['h1', #a', '.b']\n var splitCells = notContent.split(/(\\[[^[]*])|(?=[.#])/).filter(function (str) {\n return str;\n });\n return splitCells.length > 1;\n}\nfunction parsePath(info) {\n return info.parentSelectors.reduce(function (prev, cur) {\n if (!prev) {\n return cur;\n }\n return cur.includes('&') ? cur.replace(/&/g, prev) : \"\".concat(prev, \" \").concat(cur);\n }, '');\n}\nvar linter = function linter(key, value, info) {\n var parentSelectorPath = parsePath(info);\n var notList = parentSelectorPath.match(/:not\\([^)]*\\)/g) || [];\n if (notList.length > 0 && notList.some(isConcatSelector)) {\n lintWarning(\"Concat ':not' selector not support in legacy browsers.\", info);\n }\n};\nexport default linter;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { ATTR_MARK } from \"../StyleContext\";\nexport var ATTR_CACHE_MAP = 'data-ant-cssinjs-cache-path';\n\n/**\n * This marks style from the css file.\n * Which means not exist in `